@leafer/core 1.9.6 → 1.9.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"core.min.cjs","sources":["../../../../../../src/leafer/packages/platform/platform/src/Platform.ts","../../../../../../src/leafer/packages/math/src/IncrementId.ts","../../../../../../src/leafer/packages/display-module/data/src/data.ts","../../../../../../src/leafer/packages/display-module/data/src/DataHelper.ts","../../../../../../src/leafer/packages/display-module/data/src/LeafData.ts","../../../../../../src/leafer/packages/math/src/MathHelper.ts","../../../../../../src/leafer/packages/math/src/MatrixHelper.ts","../../../../../../src/leafer/packages/math/src/PointHelper.ts","../../../../../../src/leafer/packages/math/src/Point.ts","../../../../../../src/leafer/packages/math/src/Matrix.ts","../../../../../../src/leafer/packages/math/src/TwoPointBoundsHelper.ts","../../../../../../src/leafer/packages/math/src/Direction.ts","../../../../../../src/leafer/packages/math/src/AroundHelper.ts","../../../../../../src/leafer/packages/math/src/AlignHelper.ts","../../../../../../src/leafer/packages/math/src/BoundsHelper.ts","../../../../../../src/leafer/packages/math/src/Bounds.ts","../../../../../../src/leafer/packages/math/src/StringNumber.ts","../../../../../../src/leafer/packages/debug/src/Debug.ts","../../../../../../src/leafer/packages/debug/src/Run.ts","../../../../../../src/leafer/packages/debug/src/Plugin.ts","../../../../../../src/leafer/packages/platform/platform/src/creator/Creator.ts","../../../../../../src/leafer/packages/platform/platform/src/creator/UICreator.ts","../../../../../../src/leafer/packages/platform/platform/src/creator/EventCreator.ts","../../../../../node_modules/.pnpm/@rollup+plugin-typescript@11.1.6_rollup@4.44.2_tslib@2.8.1_typescript@5.8.3/node_modules/tslib/tslib.es6.js","../../../../../../src/leafer/packages/canvas/canvas/src/Canvas.ts","../../../../../../src/leafer/packages/canvas/canvas/src/LeaferCanvasBase.ts","../../../../../../src/leafer/packages/path/src/PathHelper.ts","../../../../../../src/leafer/packages/path/src/PathCommandMap.ts","../../../../../../src/leafer/packages/path/src/RectHelper.ts","../../../../../../src/leafer/packages/path/src/BezierHelper.ts","../../../../../../src/leafer/packages/path/src/EllipseHelper.ts","../../../../../../src/leafer/packages/path/src/PathConvert.ts","../../../../../../src/leafer/packages/path/src/PathCommandDataHelper.ts","../../../../../../src/leafer/packages/path/src/PathCreator.ts","../../../../../../src/leafer/packages/path/src/PathDrawer.ts","../../../../../../src/leafer/packages/path/src/PathBounds.ts","../../../../../../src/leafer/packages/path/src/PathCorner.ts","../../../../../../src/leafer/packages/path/src/index.ts","../../../../../../src/leafer/packages/canvas/canvas/src/patch/roundRect.ts","../../../../../../src/leafer/packages/file/src/FileHelper.ts","../../../../../../src/leafer/packages/task/src/TaskItem.ts","../../../../../../src/leafer/packages/task/src/TaskProcessor.ts","../../../../../../src/leafer/packages/file/src/Resource.ts","../../../../../../src/leafer/packages/image/image/src/ImageManager.ts","../../../../../../src/leafer/packages/image/image/src/LeaferImage.ts","../../../../../../src/leafer/packages/decorator/src/object.ts","../../../../../../src/leafer/packages/decorator/src/data.ts","../../../../../../src/leafer/packages/decorator/src/rewrite.ts","../../../../../../src/leafer/packages/display-module/helper/src/LeafHelper.ts","../../../../../../src/leafer/packages/display-module/helper/src/LeafBoundsHelper.ts","../../../../../../src/leafer/packages/display-module/helper/src/BranchHelper.ts","../../../../../../src/leafer/packages/display-module/helper/src/WaitHelper.ts","../../../../../../src/leafer/packages/display-module/layout/src/LeafLayout.ts","../../../../../../src/leafer/packages/event/src/Event.ts","../../../../../../src/leafer/packages/event/src/ChildEvent.ts","../../../../../../src/leafer/packages/event/src/PropertyEvent.ts","../../../../../../src/leafer/packages/event/src/ImageEvent.ts","../../../../../../src/leafer/packages/event/src/BoundsEvent.ts","../../../../../../src/leafer/packages/event/src/ResizeEvent.ts","../../../../../../src/leafer/packages/event/src/WatchEvent.ts","../../../../../../src/leafer/packages/event/src/LayoutEvent.ts","../../../../../../src/leafer/packages/event/src/RenderEvent.ts","../../../../../../src/leafer/packages/event/src/LeaferEvent.ts","../../../../../../src/leafer/packages/event/src/Eventer.ts","../../../../../../src/leafer/packages/display-module/display-module/src/LeafEventer.ts","../../../../../../src/leafer/packages/display-module/display-module/src/LeafDataProxy.ts","../../../../../../src/leafer/packages/display-module/display-module/src/LeafMatrix.ts","../../../../../../src/leafer/packages/display-module/display-module/src/LeafBounds.ts","../../../../../../src/leafer/packages/display-module/display-module/src/LeafRender.ts","../../../../../../src/leafer/packages/display-module/display-module/src/BranchRender.ts","../../../../../../src/leafer/packages/display/src/Leaf.ts","../../../../../../src/leafer/packages/display/src/Branch.ts","../../../../../../src/leafer/packages/list/src/LeafList.ts","../../../../../../src/leafer/packages/math/src/AutoBounds.ts","../../../../../../src/leafer/packages/canvas/canvas/src/CanvasManager.ts","../../../../../../src/leafer/packages/list/src/LeafLevelList.ts","../../../../../../src/leafer/packages/canvas/canvas/src/patch/index.ts","../../../../../../src/leafer/packages/decorator/src/class.ts","../../../../../../src/leafer/packages/core/src/index.ts"],"sourcesContent":["import { IPlatform } from '@leafer/interface'\n\n\nexport const Platform: IPlatform = {\n toURL(text: string, fileType?: 'text' | 'svg'): string {\n let url = encodeURIComponent(text)\n if (fileType === 'text') url = 'data:text/plain;charset=utf-8,' + url\n else if (fileType === 'svg') url = 'data:image/svg+xml,' + url\n return url\n },\n image: {\n hitCanvasSize: 100,\n maxCacheSize: 2560 * 1600, // 2k\n maxPatternSize: 4096 * 2160, // 4k\n crossOrigin: 'anonymous',\n getRealURL(url: string): string {\n const { prefix, suffix } = Platform.image\n if (suffix && !url.startsWith('data:') && !url.startsWith('blob:')) url += (url.includes(\"?\") ? \"&\" : \"?\") + suffix\n if (prefix && url[0] === '/') url = prefix + url\n return url\n }\n }\n}","import { INumberMap } from '@leafer/interface'\n\n\nexport const IncrementId = {\n\n RUNTIME: 'runtime',\n LEAF: 'leaf',\n TASK: 'task',\n CNAVAS: 'canvas',\n IMAGE: 'image',\n\n types: {} as INumberMap,\n\n create(typeName: string): number {\n const { types } = I\n if (types[typeName]) {\n return types[typeName]++\n } else {\n types[typeName] = 1\n return 0\n }\n }\n}\n\nconst I = IncrementId","import { IObject } from '@leafer/interface'\n\nexport enum Answer {\n No = 0,\n Yes = 1,\n NoAndSkip = 2,\n YesAndSkip = 3\n}\n\nexport const emptyData: IObject = {}\n\nexport function isUndefined(value: any): boolean {\n return value === undefined\n}\n\nexport function isNull(value: any): boolean {\n return value == null // = value === undefined || value === null\n}\n\nexport function isString<T extends string>(value: any): value is T {\n return typeof value === 'string'\n}\n\nexport const { isFinite } = Number\n\nexport function isNumber<T extends number>(value: any): value is T {\n return typeof value === 'number'\n}\n\nconst numberReg = /^-?\\d+(?:\\.\\d+)?$/\n\nexport function tryToNumber(value: any): number {\n return (typeof value === 'string' && numberReg.test(value)) ? +value : value\n}\n\nexport const { isArray } = Array\n\nexport function isObject<T extends object>(value: any): value is T {\n return value && typeof value === 'object' // fix: null is object\n}\n\nexport function isData<T extends object>(value: any): value is T { // 检测 {} 对象\n return isObject(value) && !isArray(value) // 排除数组\n}\n\nexport function isEmptyData(value: any): boolean {\n return JSON.stringify(value) === '{}'\n}","import { IBooleanMap, IObject } from '@leafer/interface'\nimport { isUndefined } from './data'\n\nexport const DataHelper = {\n\n default<T>(t: T, defaultData: IObject): T {\n assign(defaultData, t)\n assign(t, defaultData)\n return t\n },\n\n assign(t: IObject, merge: IObject, exclude?: IObject): void {\n let value: unknown\n Object.keys(merge).forEach(key => {\n value = merge[key]\n if (value?.constructor === Object && t[key]?.constructor === Object) return assign(t[key], merge[key], exclude && exclude[key])\n if (exclude && (key in exclude)) {\n if (exclude[key]?.constructor === Object) assign(t[key] = {}, merge[key], exclude[key])\n return\n }\n t[key] = merge[key]\n })\n },\n\n copyAttrs(t: IObject, from: IObject, include: string[]): IObject {\n include.forEach(key => {\n if (!isUndefined(from[key])) t[key] = from[key]\n })\n return t\n },\n\n clone(data: unknown): IObject {\n return JSON.parse(JSON.stringify(data))\n },\n\n toMap(list: string[]): IBooleanMap {\n const map = {} as IBooleanMap\n for (let i = 0, len = list.length; i < len; i++) map[list[i]] = true\n return map\n },\n\n stintSet<T extends object, K extends keyof T>(data: T, attrName: K, value: T[K]): void {\n value || (value = undefined)\n data[attrName] !== value && (data[attrName] = value) // 只有值不一样时才设置,节省内存开销\n }\n\n}\n\nconst { assign } = DataHelper","import { ILeafData, ILeaf, IObject, IValue, IPathCommandData, IJSONOptions } from '@leafer/interface'\nimport { isArray, isUndefined } from './data'\n\n\nexport class LeafData implements ILeafData {\n\n public __leaf: ILeaf\n public __input: IObject\n public __middle: IObject\n\n public __single: boolean\n\n public __naturalWidth?: number\n public __naturalHeight?: number\n\n public __pathForRender?: IPathCommandData\n\n public __useStroke?: boolean\n public get __useNaturalRatio() { return true }\n\n public get __isLinePath(): boolean {\n const { path } = this as ILeafData\n return path && path.length === 6 && path[0] === 1 // M = 1\n }\n\n public get __usePathBox(): boolean {\n return (this as ILeafData).__pathInputed as any as boolean\n }\n\n public get __blendMode(): string {\n if ((this as ILeafData).eraser && (this as ILeafData).eraser !== 'path') return 'destination-out'\n const { blendMode } = (this as ILeafData)\n return blendMode === 'pass-through' ? null : blendMode\n }\n\n constructor(leaf: ILeaf) {\n this.__leaf = leaf\n }\n\n public __get(name: string): any {\n if (this.__input) {\n const value = this.__input[name]\n if (!isUndefined(value)) return value\n }\n return (this as IObject)[name]\n }\n\n public __getData(): IObject {\n const data: IObject = { tag: this.__leaf.tag }, { __input } = this\n let inputValue: IValue\n for (let key in this) {\n if (key[0] !== '_') {\n inputValue = __input ? __input[key] : undefined\n data[key] = isUndefined(inputValue) ? this[key] : inputValue\n }\n }\n return data\n }\n\n public __setInput(name: string, value: any): void {\n this.__input || (this.__input = {})\n this.__input[name] = value\n }\n\n public __getInput(name: string): any {\n if (this.__input) {\n const value = this.__input[name]\n if (!isUndefined(value)) return value\n }\n\n if (name === 'path' && !(this as ILeafData).__pathInputed) return // no path mode\n\n return (this as IObject)['_' + name]\n }\n\n public __removeInput(name: string): void {\n if (this.__input && !isUndefined(this.__input[name])) this.__input[name] = undefined\n }\n\n public __getInputData(names?: string[] | IObject, options?: IJSONOptions): IObject {\n const data: IObject = {}\n\n if (names) {\n\n if (isArray(names)) {\n for (let name of names) data[name] = this.__getInput(name)\n } else {\n for (let name in names) data[name] = this.__getInput(name)\n }\n\n } else {\n\n let value: IValue, inputValue: IValue, { __input } = this\n data.tag = this.__leaf.tag\n for (let key in this) {\n if (key[0] !== '_') {\n value = (this as IObject)['_' + key]\n if (!isUndefined(value)) {\n\n if (key === 'path' && !(this as ILeafData).__pathInputed) continue // no path mode\n\n inputValue = __input ? __input[key] : undefined\n data[key] = isUndefined(inputValue) ? value : inputValue\n }\n }\n }\n\n }\n\n if (options) {\n if (options.matrix) {\n const { a, b, c, d, e, f } = this.__leaf.__localMatrix\n data.matrix = { a, b, c, d, e, f }\n }\n }\n\n return data\n }\n\n public __setMiddle(name: string, value: any): void {\n this.__middle || (this.__middle = {})\n this.__middle[name] = value\n }\n\n public __getMiddle(name: string): any {\n return this.__middle && this.__middle[name]\n }\n\n public __checkSingle(): void {\n const t = this as ILeafData\n if (t.blendMode === 'pass-through') {\n const leaf = this.__leaf\n if ((t.opacity < 1 && (leaf.isBranch || t.__hasMultiPaint)) || leaf.__hasEraser || t.eraser || t.filter) {\n t.__single = true\n } else if (t.__single) {\n t.__single = false\n }\n } else {\n t.__single = true\n }\n }\n\n public __removeNaturalSize(): void {\n this.__naturalWidth = this.__naturalHeight = undefined\n }\n\n public destroy(): void {\n this.__input = this.__middle = null\n }\n}","import { IPointData, IBoundsData, IMatrixData, IRangeSize, IScaleData, ISizeData, IOptionSizeData } from '@leafer/interface'\nimport { isArray, isObject, isNumber, isUndefined } from '@leafer/data'\n\nconst { round, pow, PI } = Math\n\nexport const MathHelper = {\n\n within(value: number, min: number | IRangeSize, max?: number): number {\n if (isObject(min)) max = min.max, min = min.min\n if (!isUndefined(min) && value < min) value = min\n if (!isUndefined(max) && value > max) value = max\n return value\n },\n\n fourNumber(num: number | number[], maxValue?: number): number[] { // top right bottom left || topLeft, topRight, bottomRight, bottomLeft\n let data: number[]\n if (isArray(num)) {\n switch (num.length) {\n case 4:\n data = isUndefined(maxValue) ? num : [...num]\n break\n case 2:\n data = [num[0], num[1], num[0], num[1]]\n break\n case 3:\n data = [num[0], num[1], num[2], num[1]]\n break\n case 1:\n num = num[0]\n break\n default:\n num = 0\n }\n }\n if (!data) data = [num as number, num as number, num as number, num as number]\n if (maxValue) for (let i = 0; i < 4; i++) if (data[i] > maxValue) data[i] = maxValue\n return data\n },\n\n formatRotation(rotation: number, unsign?: boolean): number {\n rotation %= 360\n if (unsign) {\n if (rotation < 0) rotation += 360\n } else {\n if (rotation > 180) rotation -= 360\n if (rotation < -180) rotation += 360\n }\n return MathHelper.float(rotation)\n },\n\n getGapRotation(addRotation: number, gap: number, oldRotation: number = 0): number {\n let rotation = addRotation + oldRotation\n if (gap > 1) {\n const r = Math.abs(rotation % gap)\n if (r < 1 || r > gap - 1) rotation = Math.round(rotation / gap) * gap\n }\n return rotation - oldRotation\n },\n\n float(num: number, maxLength?: number): number {\n const a = !isUndefined(maxLength) ? pow(10, maxLength) : 1000000000000 // default\n num = round(num * a) / a\n return num === -0 ? 0 : num\n },\n\n sign(num: number): number {\n return num < 0 ? -1 : 1\n },\n\n getScaleData(scale: number | IPointData, size: number | IOptionSizeData, originSize: ISizeData, scaleData?: IScaleData): IScaleData {\n if (!scaleData) scaleData = {} as IScaleData\n if (size) {\n const scaleX = (isNumber(size) ? size : size.width || 0) / originSize.width, scaleY = (isNumber(size) ? size : size.height || 0) / originSize.height\n scaleData.scaleX = scaleX || scaleY || 1\n scaleData.scaleY = scaleY || scaleX || 1\n } else if (scale) MathHelper.assignScale(scaleData, scale)\n return scaleData\n },\n\n assignScale(scaleData: IScaleData, scale: number | IPointData): void {\n if (isNumber(scale)) {\n scaleData.scaleX = scaleData.scaleY = scale\n } else {\n scaleData.scaleX = scale.x\n scaleData.scaleY = scale.y\n }\n },\n\n randInt,\n\n randColor(opacity?: number): string {\n return `rgba(${randInt(255)},${randInt(255)},${randInt(255)},${opacity || 1})`\n }\n}\n\nfunction randInt(num: number): number {\n return Math.round(Math.random() * num)\n}\n\nexport const OneRadian = PI / 180\nexport const PI2 = PI * 2\nexport const PI_2 = PI / 2\n\nexport function getPointData(): IPointData { return { x: 0, y: 0 } }\nexport function getBoundsData(): IBoundsData { return { x: 0, y: 0, width: 0, height: 0 } }\nexport function getMatrixData(): IMatrixData { return { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0 } }","import { IMatrixData, IPointData, ILayoutData, IMatrixWithLayoutData, IMatrixWithOptionScaleData, IScaleData, IMatrixWithScaleData } from '@leafer/interface'\nimport { isUndefined } from '@leafer/data'\n\nimport { MathHelper, OneRadian, PI_2, getBoundsData, getMatrixData } from './MathHelper'\n\n\nconst { sin, cos, acos, sqrt } = Math\nconst { float } = MathHelper\nconst tempPoint = {} as IPointData\n\nfunction getWorld(): IMatrixWithLayoutData {\n return { ...getMatrixData(), ...getBoundsData(), scaleX: 1, scaleY: 1, rotation: 0, skewX: 0, skewY: 0 }\n}\n\nexport const MatrixHelper = {\n\n defaultMatrix: getMatrixData(),\n\n defaultWorld: getWorld(),\n\n tempMatrix: {} as IMatrixData,\n\n set(t: IMatrixData, a = 1, b = 0, c = 0, d = 1, e = 0, f = 0): void {\n t.a = a\n t.b = b\n t.c = c\n t.d = d\n t.e = e\n t.f = f\n },\n\n get: getMatrixData,\n\n getWorld,\n\n copy(t: IMatrixData, matrix: IMatrixData): void {\n t.a = matrix.a\n t.b = matrix.b\n t.c = matrix.c\n t.d = matrix.d\n t.e = matrix.e\n t.f = matrix.f\n },\n\n translate(t: IMatrixData, x: number, y: number): void {\n t.e += x\n t.f += y\n },\n\n translateInner(t: IMatrixData, x: number, y: number, hasOrigin?: boolean): void {\n t.e += t.a * x + t.c * y\n t.f += t.b * x + t.d * y\n if (hasOrigin) t.e -= x, t.f -= y\n },\n\n scale(t: IMatrixData, scaleX: number, scaleY: number = scaleX): void {\n t.a *= scaleX\n t.b *= scaleX\n t.c *= scaleY\n t.d *= scaleY\n },\n\n scaleOfOuter(t: IMatrixData, origin: IPointData, scaleX: number, scaleY?: number): void {\n M.toInnerPoint(t, origin, tempPoint)\n M.scaleOfInner(t, tempPoint, scaleX, scaleY)\n },\n\n scaleOfInner(t: IMatrixData, origin: IPointData, scaleX: number, scaleY: number = scaleX): void {\n M.translateInner(t, origin.x, origin.y)\n M.scale(t, scaleX, scaleY)\n M.translateInner(t, -origin.x, -origin.y)\n },\n\n\n rotate(t: IMatrixData, rotation: number): void {\n const { a, b, c, d } = t\n\n rotation *= OneRadian\n const cosR = cos(rotation)\n const sinR = sin(rotation)\n\n t.a = a * cosR - b * sinR\n t.b = a * sinR + b * cosR\n t.c = c * cosR - d * sinR\n t.d = c * sinR + d * cosR\n },\n\n rotateOfOuter(t: IMatrixData, origin: IPointData, rotation: number): void {\n M.toInnerPoint(t, origin, tempPoint)\n M.rotateOfInner(t, tempPoint, rotation)\n },\n\n rotateOfInner(t: IMatrixData, origin: IPointData, rotation: number): void {\n M.translateInner(t, origin.x, origin.y)\n M.rotate(t, rotation)\n M.translateInner(t, -origin.x, -origin.y)\n },\n\n\n skew(t: IMatrixData, skewX: number, skewY?: number): void {\n const { a, b, c, d } = t\n\n if (skewY) {\n skewY *= OneRadian\n t.a = a + c * skewY\n t.b = b + d * skewY\n }\n\n if (skewX) {\n skewX *= OneRadian\n t.c = c + a * skewX\n t.d = d + b * skewX\n }\n },\n\n skewOfOuter(t: IMatrixData, origin: IPointData, skewX: number, skewY?: number): void {\n M.toInnerPoint(t, origin, tempPoint)\n M.skewOfInner(t, tempPoint, skewX, skewY)\n },\n\n skewOfInner(t: IMatrixData, origin: IPointData, skewX: number, skewY: number = 0): void {\n M.translateInner(t, origin.x, origin.y)\n M.skew(t, skewX, skewY)\n M.translateInner(t, -origin.x, -origin.y)\n },\n\n\n multiply(t: IMatrixData, child: IMatrixData): void {\n const { a, b, c, d, e, f } = t\n\n t.a = child.a * a + child.b * c\n t.b = child.a * b + child.b * d\n t.c = child.c * a + child.d * c\n t.d = child.c * b + child.d * d\n t.e = child.e * a + child.f * c + e\n t.f = child.e * b + child.f * d + f\n },\n\n multiplyParent(t: IMatrixWithOptionScaleData, parent: IMatrixWithOptionScaleData, to?: IMatrixWithOptionScaleData, abcdChanged?: boolean | number, childScaleData?: IScaleData): void { // = transform\n const { e, f } = t\n\n to || (to = t)\n\n if (isUndefined(abcdChanged)) abcdChanged = t.a !== 1 || t.b || t.c || t.d !== 1\n\n if (abcdChanged) {\n const { a, b, c, d } = t\n\n to.a = a * parent.a + b * parent.c\n to.b = a * parent.b + b * parent.d\n to.c = c * parent.a + d * parent.c\n to.d = c * parent.b + d * parent.d\n\n if (childScaleData) {\n to.scaleX = parent.scaleX * childScaleData.scaleX\n to.scaleY = parent.scaleY * childScaleData.scaleY\n }\n\n } else {\n to.a = parent.a\n to.b = parent.b\n to.c = parent.c\n to.d = parent.d\n\n if (childScaleData) {\n to.scaleX = parent.scaleX\n to.scaleY = parent.scaleY\n }\n }\n\n to.e = e * parent.a + f * parent.c + parent.e\n to.f = e * parent.b + f * parent.d + parent.f\n },\n\n\n divide(t: IMatrixData, child: IMatrixData): void {\n M.multiply(t, M.tempInvert(child))\n },\n\n divideParent(t: IMatrixData, parent: IMatrixData): void {\n M.multiplyParent(t, M.tempInvert(parent))\n },\n\n tempInvert(t: IMatrixData): IMatrixData {\n const { tempMatrix } = M\n M.copy(tempMatrix, t)\n M.invert(tempMatrix)\n return tempMatrix\n },\n\n invert(t: IMatrixData): void {\n const { a, b, c, d, e, f } = t\n if (!b && !c) {\n if (a === 1 && d === 1) {\n t.e = -e\n t.f = -f\n } else {\n const s = 1 / (a * d)\n t.a = d * s\n t.d = a * s\n t.e = -e * d * s\n t.f = -f * a * s\n }\n } else {\n const s = 1 / (a * d - b * c)\n t.a = d * s\n t.b = -b * s\n t.c = -c * s\n t.d = a * s\n t.e = -(e * d - f * c) * s\n t.f = -(f * a - e * b) * s\n }\n\n },\n\n\n toOuterPoint(t: IMatrixData, inner: IPointData, to?: IPointData, distance?: boolean): void {\n const { x, y } = inner\n\n // outer\n to || (to = inner)\n to.x = x * t.a + y * t.c\n to.y = x * t.b + y * t.d\n\n if (!distance) {\n to.x += t.e\n to.y += t.f\n }\n },\n\n toInnerPoint(t: IMatrixData, outer: IPointData, to?: IPointData, distance?: boolean): void {\n const { a, b, c, d } = t\n const s = 1 / (a * d - b * c)\n\n const { x, y } = outer\n\n // inner\n to || (to = outer)\n to.x = (x * d - y * c) * s\n to.y = (y * a - x * b) * s\n\n if (!distance) {\n const { e, f } = t\n to.x -= (e * d - f * c) * s\n to.y -= (f * a - e * b) * s\n }\n },\n\n setLayout(t: IMatrixData, layout: ILayoutData, origin?: IPointData, around?: IPointData, bcChanged?: boolean | number): void {\n const { x, y, scaleX, scaleY } = layout\n\n if (isUndefined(bcChanged)) bcChanged = layout.rotation || layout.skewX || layout.skewY\n\n if (bcChanged) {\n\n const { rotation, skewX, skewY } = layout\n const r = rotation * OneRadian\n const cosR = cos(r)\n const sinR = sin(r)\n\n if (skewX || skewY) {\n\n // rotate -> skew -> scale\n const sx = skewX * OneRadian\n const sy = skewY * OneRadian\n\n t.a = (cosR + sy * -sinR) * scaleX\n t.b = (sinR + sy * cosR) * scaleX\n t.c = (-sinR + sx * cosR) * scaleY\n t.d = (cosR + sx * sinR) * scaleY\n\n } else {\n\n // rotate -> scale\n t.a = cosR * scaleX\n t.b = sinR * scaleX\n t.c = -sinR * scaleY\n t.d = cosR * scaleY\n\n }\n\n } else {\n t.a = scaleX\n t.b = 0\n t.c = 0\n t.d = scaleY\n }\n\n // translate\n\n t.e = x\n t.f = y\n\n if (origin = origin || around) M.translateInner(t, -origin.x, -origin.y, !around)\n\n },\n\n getLayout(t: IMatrixData, origin?: IPointData, around?: IPointData, firstSkewY?: boolean): ILayoutData {\n const { a, b, c, d, e, f } = t\n\n let x = e, y = f, scaleX: number, scaleY: number, rotation: number, skewX: number, skewY: number\n\n if (b || c) {\n\n const s = a * d - b * c\n\n if (c && !firstSkewY) {\n scaleX = sqrt(a * a + b * b)\n scaleY = s / scaleX\n\n const cosR = a / scaleX\n rotation = b > 0 ? acos(cosR) : -acos(cosR)\n\n } else {\n scaleY = sqrt(c * c + d * d)\n scaleX = s / scaleY\n\n const cosR = c / scaleY\n rotation = PI_2 - (d > 0 ? acos(-cosR) : -acos(cosR))\n }\n\n const cosR = float(cos(rotation)) // when -90 / 90 is 0\n const sinR = sin(rotation)\n\n scaleX = float(scaleX), scaleY = float(scaleY)\n skewX = cosR ? float((c / scaleY + sinR) / cosR / OneRadian, 9) : 0\n skewY = cosR ? float((b / scaleX - sinR) / cosR / OneRadian, 9) : 0\n rotation = float(rotation / OneRadian)\n\n } else {\n scaleX = a\n scaleY = d\n rotation = skewX = skewY = 0\n }\n\n if (origin = around || origin) {\n x += origin.x * a + origin.y * c\n y += origin.x * b + origin.y * d\n if (!around) x -= origin.x, y -= origin.y\n }\n\n return { x, y, scaleX, scaleY, rotation, skewX, skewY }\n },\n\n withScale(t: IMatrixData, scaleX?: number, scaleY = scaleX): IMatrixWithScaleData {\n const world = t as unknown as IMatrixWithScaleData\n if (!scaleX || !scaleY) {\n const { a, b, c, d } = t\n if (b || c) {\n scaleX = sqrt(a * a + b * b)\n scaleY = (a * d - b * c) / scaleX\n } else {\n scaleX = a\n scaleY = d\n }\n }\n world.scaleX = scaleX\n world.scaleY = scaleY\n return world\n },\n\n reset(t: IMatrixData): void {\n M.set(t)\n }\n}\n\nconst M = MatrixHelper","import { IPointData, IMatrixData, IRadiusPointData, IMatrixWithScaleData } from '@leafer/interface'\nimport { isObject, isUndefined } from '@leafer/data'\n\nimport { OneRadian, getPointData } from './MathHelper'\nimport { MatrixHelper as M } from './MatrixHelper'\n\n\nconst { toInnerPoint, toOuterPoint } = M\nconst { sin, cos, abs, sqrt, atan2, min, round } = Math\n\n\nexport const PointHelper = {\n\n defaultPoint: getPointData(),\n\n tempPoint: {} as IPointData,\n tempRadiusPoint: {} as IRadiusPointData,\n\n set(t: IPointData, x = 0, y = 0): void {\n t.x = x\n t.y = y\n },\n\n setRadius(t: IRadiusPointData, x: number, y?: number): void {\n t.radiusX = x\n t.radiusY = isUndefined(y) ? x : y\n },\n\n copy(t: IPointData, point: IPointData): void {\n t.x = point.x\n t.y = point.y\n },\n\n copyFrom(t: IPointData, x: number, y: number): void {\n t.x = x\n t.y = y\n },\n\n round(t: IPointData, halfPixel?: boolean): void {\n t.x = halfPixel ? round(t.x - 0.5) + 0.5 : round(t.x)\n t.y = halfPixel ? round(t.y - 0.5) + 0.5 : round(t.y)\n },\n\n move(t: IPointData, x: number | IPointData, y?: number): void {\n if (isObject(x)) t.x += x.x, t.y += x.y\n else t.x += x, t.y += y\n },\n\n\n scale(t: IPointData, scaleX: number, scaleY = scaleX): void {\n if (t.x) t.x *= scaleX\n if (t.y) t.y *= scaleY\n },\n\n scaleOf(t: IPointData, origin: IPointData, scaleX: number, scaleY = scaleX): void {\n t.x += (t.x - origin.x) * (scaleX - 1)\n t.y += (t.y - origin.y) * (scaleY - 1)\n },\n\n rotate(t: IPointData, rotation: number, origin?: IPointData): void {\n if (!origin) origin = P.defaultPoint\n rotation *= OneRadian\n const cosR = cos(rotation)\n const sinR = sin(rotation)\n const rx = t.x - origin.x\n const ry = t.y - origin.y\n t.x = origin.x + rx * cosR - ry * sinR\n t.y = origin.y + rx * sinR + ry * cosR\n },\n\n\n tempToInnerOf(t: IPointData, matrix: IMatrixData): IPointData {\n const { tempPoint: temp } = P\n copy(temp, t)\n toInnerPoint(matrix, temp, temp)\n return temp\n },\n\n tempToOuterOf(t: IPointData, matrix: IMatrixData): IPointData {\n const { tempPoint: temp } = P\n copy(temp, t)\n toOuterPoint(matrix, temp, temp)\n return temp\n },\n\n tempToInnerRadiusPointOf(t: IRadiusPointData, matrix: IMatrixWithScaleData): IRadiusPointData {\n const { tempRadiusPoint: temp } = P\n copy(temp, t)\n P.toInnerRadiusPointOf(t, matrix, temp)\n return temp\n },\n\n toInnerRadiusPointOf(t: IRadiusPointData, matrix: IMatrixWithScaleData, to?: IRadiusPointData): void {\n to || (to = t)\n toInnerPoint(matrix, t, to)\n to.radiusX = Math.abs(t.radiusX / matrix.scaleX)\n to.radiusY = Math.abs(t.radiusY / matrix.scaleY)\n },\n\n\n toInnerOf(t: IPointData, matrix: IMatrixData, to?: IPointData): void {\n toInnerPoint(matrix, t, to)\n },\n\n toOuterOf(t: IPointData, matrix: IMatrixData, to?: IPointData): void {\n toOuterPoint(matrix, t, to)\n },\n\n\n getCenter(t: IPointData, to: IPointData): IPointData {\n return { x: t.x + (to.x - t.x) / 2, y: t.y + (to.y - t.y) / 2 }\n },\n\n getCenterX(x1: number, x2: number): number {\n return x1 + (x2 - x1) / 2\n },\n\n getCenterY(y1: number, y2: number): number {\n return y1 + (y2 - y1) / 2\n },\n\n getDistance(t: IPointData, point: IPointData): number {\n return getDistanceFrom(t.x, t.y, point.x, point.y)\n },\n\n getDistanceFrom(x1: number, y1: number, x2: number, y2: number): number {\n const x = abs(x2 - x1)\n const y = abs(y2 - y1)\n return sqrt(x * x + y * y)\n },\n\n getMinDistanceFrom(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number): number {\n return min(getDistanceFrom(x1, y1, x2, y2), getDistanceFrom(x2, y2, x3, y3))\n },\n\n getAngle(t: IPointData, to: IPointData): number {\n return getAtan2(t, to) / OneRadian\n },\n\n getRotation(t: IPointData, origin: IPointData, to: IPointData, toOrigin?: IPointData): number {\n if (!toOrigin) toOrigin = origin\n return P.getRadianFrom(t.x, t.y, origin.x, origin.y, to.x, to.y, toOrigin.x, toOrigin.y) / OneRadian\n },\n\n getRadianFrom(fromX: number, fromY: number, originX: number, originY: number, toX: number, toY: number, toOriginX?: number, toOriginY?: number): number {\n if (isUndefined(toOriginX)) toOriginX = originX, toOriginY = originY\n const a = fromX - originX\n const b = fromY - originY\n const c = toX - toOriginX\n const d = toY - toOriginY\n return Math.atan2(a * d - b * c, a * c + b * d)\n },\n\n getAtan2(t: IPointData, to: IPointData): number {\n return atan2(to.y - t.y, to.x - t.x)\n },\n\n\n getDistancePoint(t: IPointData, to: IPointData, distance: number, changeTo: boolean): IPointData {\n const r = getAtan2(t, to)\n to = changeTo ? to : {} as IPointData\n to.x = t.x + cos(r) * distance\n to.y = t.y + sin(r) * distance\n return to\n },\n\n toNumberPoints(originPoints: number[] | IPointData[]): number[] {\n let points = originPoints as number[]\n if (isObject(originPoints[0])) points = [], (originPoints as IPointData[]).forEach(p => points.push(p.x, p.y))\n return points\n },\n\n reset(t: IPointData): void {\n P.reset(t)\n }\n}\n\nconst P = PointHelper\nconst { getDistanceFrom, copy, getAtan2 } = P","import { IPoint, IPointData, IMatrixData } from '@leafer/interface'\nimport { isObject } from '@leafer/data'\n\nimport { PointHelper as P } from './PointHelper'\n\nexport class Point implements IPoint {\n\n public x: number\n public y: number\n\n constructor(x?: number | IPointData, y?: number) {\n this.set(x, y)\n }\n\n public set(x?: number | IPointData, y?: number): IPoint {\n isObject(x) ? P.copy(this, x) : P.set(this, x, y)\n return this\n }\n\n public get(): IPointData {\n const { x, y } = this\n return { x, y }\n }\n\n\n public clone(): IPoint {\n return new Point(this)\n }\n\n\n public move(x: number | IPointData, y?: number): IPoint {\n P.move(this, x, y)\n return this\n }\n\n public scale(scaleX: number, scaleY?: number): IPoint {\n P.scale(this, scaleX, scaleY)\n return this\n }\n\n public scaleOf(origin: IPointData, scaleX: number, scaleY?: number): IPoint {\n P.scaleOf(this, origin, scaleX, scaleY)\n return this\n }\n\n public rotate(rotation: number, origin?: IPointData): IPoint {\n P.rotate(this, rotation, origin)\n return this\n }\n\n public rotateOf(origin: IPointData, rotation: number): IPoint {\n P.rotate(this, rotation, origin)\n return this\n }\n\n public getRotation(origin: IPointData, to: IPointData, toOrigin?: IPointData): number {\n return P.getRotation(this, origin, to, toOrigin)\n }\n\n\n public toInnerOf(matrix: IMatrixData, to?: IPointData): IPoint {\n P.toInnerOf(this, matrix, to)\n return this\n }\n\n public toOuterOf(matrix: IMatrixData, to?: IPointData): IPoint {\n P.toOuterOf(this, matrix, to)\n return this\n }\n\n\n public getCenter(to: IPointData): IPoint {\n return new Point(P.getCenter(this, to))\n }\n\n public getDistance(to: IPointData): number {\n return P.getDistance(this, to)\n }\n\n public getDistancePoint(to: IPointData, distance: number, changeTo?: boolean): IPoint {\n return new Point(P.getDistancePoint(this, to, distance, changeTo))\n }\n\n public getAngle(to: IPointData): number {\n return P.getAngle(this, to)\n }\n\n public getAtan2(to: IPointData): number {\n return P.getAtan2(this, to)\n }\n\n\n public reset(): IPoint {\n P.reset(this)\n return this\n }\n\n}\n\nexport const tempPoint = new Point()","import { IMatrix, IMatrixData, IPointData, ILayoutData, IMatrixWithScaleData } from '@leafer/interface'\nimport { isObject } from '@leafer/data'\n\nimport { MatrixHelper as M } from './MatrixHelper'\n\n\nexport class Matrix implements IMatrix {\n\n public a: number\n public b: number\n public c: number\n public d: number\n public e: number\n public f: number\n\n public scaleX: number\n public scaleY: number\n\n constructor(a?: number | IMatrixData, b?: number, c?: number, d?: number, e?: number, f?: number) {\n this.set(a, b, c, d, e, f)\n }\n\n public set(a?: number | IMatrixData, b?: number, c?: number, d?: number, e?: number, f?: number): IMatrix {\n isObject(a) ? M.copy(this, a) : M.set(this, a, b, c, d, e, f)\n return this\n }\n\n public setWith(dataWithScale: IMatrixWithScaleData): IMatrix {\n M.copy(this, dataWithScale)\n this.scaleX = dataWithScale.scaleX\n this.scaleY = dataWithScale.scaleY\n return this\n }\n\n public get(): IMatrixData {\n const { a, b, c, d, e, f } = this\n return { a, b, c, d, e, f }\n }\n\n public clone(): IMatrix {\n return new Matrix(this)\n }\n\n\n public translate(x: number, y: number): IMatrix {\n M.translate(this, x, y)\n return this\n }\n\n public translateInner(x: number, y: number): IMatrix {\n M.translateInner(this, x, y)\n return this\n }\n\n public scale(x: number, y?: number): IMatrix {\n M.scale(this, x, y)\n return this\n }\n\n public scaleWith(x: number, y?: number): IMatrix {\n M.scale(this, x, y)\n this.scaleX *= x\n this.scaleY *= y || x\n return this\n }\n\n public scaleOfOuter(origin: IPointData, x: number, y?: number): IMatrix {\n M.scaleOfOuter(this, origin, x, y)\n return this\n }\n public scaleOfInner(origin: IPointData, x: number, y?: number): IMatrix {\n M.scaleOfInner(this, origin, x, y)\n return this\n }\n\n public rotate(angle: number): IMatrix {\n M.rotate(this, angle)\n return this\n }\n\n public rotateOfOuter(origin: IPointData, angle: number): IMatrix {\n M.rotateOfOuter(this, origin, angle)\n return this\n }\n\n public rotateOfInner(origin: IPointData, angle: number): IMatrix {\n M.rotateOfInner(this, origin, angle)\n return this\n }\n\n\n public skew(x: number, y?: number): IMatrix {\n M.skew(this, x, y)\n return this\n }\n\n public skewOfOuter(origin: IPointData, x: number, y?: number): IMatrix {\n M.skewOfOuter(this, origin, x, y)\n return this\n }\n\n public skewOfInner(origin: IPointData, x: number, y?: number): IMatrix {\n M.skewOfInner(this, origin, x, y)\n return this\n }\n\n\n public multiply(child: IMatrixData): IMatrix {\n M.multiply(this, child)\n return this\n }\n\n public multiplyParent(parent: IMatrixData): IMatrix {\n M.multiplyParent(this, parent)\n return this\n }\n\n\n public divide(child: IMatrixData): IMatrix {\n M.divide(this, child)\n return this\n }\n\n public divideParent(parent: IMatrixData): IMatrix {\n M.divideParent(this, parent)\n return this\n }\n\n public invert(): IMatrix {\n M.invert(this)\n return this\n }\n\n public invertWith(): IMatrix {\n M.invert(this)\n this.scaleX = 1 / this.scaleX\n this.scaleY = 1 / this.scaleY\n return this\n }\n\n\n public toOuterPoint(inner: IPointData, to?: IPointData, distance?: boolean): void {\n M.toOuterPoint(this, inner, to, distance)\n }\n\n public toInnerPoint(outer: IPointData, to?: IPointData, distance?: boolean): void {\n M.toInnerPoint(this, outer, to, distance)\n }\n\n\n public setLayout(data: ILayoutData, origin?: IPointData, around?: IPointData,): IMatrix {\n M.setLayout(this, data, origin, around)\n return this\n }\n\n public getLayout(origin?: IPointData, around?: IPointData, firstSkewY?: boolean): ILayoutData {\n return M.getLayout(this, origin, around, firstSkewY)\n }\n\n public withScale(scaleX?: number, scaleY?: number): IMatrixWithScaleData {\n return M.withScale(this, scaleX, scaleY)\n }\n\n public reset(): void {\n M.reset(this)\n }\n\n}\n\nexport const tempMatrix = new Matrix()","import { ITwoPointBoundsData, IBoundsData } from '@leafer/interface'\n\nexport const TwoPointBoundsHelper = {\n\n tempPointBounds: {} as ITwoPointBoundsData,\n\n setPoint(t: ITwoPointBoundsData, minX: number, minY: number): void {\n t.minX = t.maxX = minX\n t.minY = t.maxY = minY\n },\n\n addPoint(t: ITwoPointBoundsData, x: number, y: number): void {\n t.minX = x < t.minX ? x : t.minX\n t.minY = y < t.minY ? y : t.minY\n t.maxX = x > t.maxX ? x : t.maxX\n t.maxY = y > t.maxY ? y : t.maxY\n },\n\n addBounds(t: ITwoPointBoundsData, x: number, y: number, width: number, height: number): void {\n addPoint(t, x, y)\n addPoint(t, x + width, y + height)\n },\n\n copy(t: ITwoPointBoundsData, pb: ITwoPointBoundsData): void {\n t.minX = pb.minX\n t.minY = pb.minY\n t.maxX = pb.maxX\n t.maxY = pb.maxY\n },\n\n addPointBounds(t: ITwoPointBoundsData, pb: ITwoPointBoundsData): void {\n t.minX = pb.minX < t.minX ? pb.minX : t.minX\n t.minY = pb.minY < t.minY ? pb.minY : t.minY\n t.maxX = pb.maxX > t.maxX ? pb.maxX : t.maxX\n t.maxY = pb.maxY > t.maxY ? pb.maxY : t.maxY\n },\n\n toBounds(t: ITwoPointBoundsData, setBounds: IBoundsData): void {\n setBounds.x = t.minX\n setBounds.y = t.minY\n setBounds.width = t.maxX - t.minX\n setBounds.height = t.maxY - t.minY\n }\n\n}\n\nconst { addPoint } = TwoPointBoundsHelper","export enum Direction4 {\n top,\n right,\n bottom,\n left\n}\n\nexport enum Direction9 {\n topLeft,\n top,\n topRight,\n right,\n bottomRight,\n bottom,\n bottomLeft,\n left,\n center,\n 'top-left' = 0,\n 'top-right' = 2,\n 'bottom-right' = 4,\n 'bottom-left' = 6\n}","import { IAround, IPointData, IBoundsData, IUnitPointData } from '@leafer/interface'\nimport { isString } from '@leafer/data'\n\nimport { Direction9 } from './Direction'\n\n\nconst directionData: IUnitPointData[] = [\n { x: 0, y: 0 }, //topLeft\n { x: 0.5, y: 0 },//top\n { x: 1, y: 0 }, //topRight\n { x: 1, y: 0.5 },// right\n { x: 1, y: 1 }, //bottomRight\n { x: 0.5, y: 1 },//bottom\n { x: 0, y: 1 }, //bottomLeft\n { x: 0, y: 0.5 },//left\n { x: 0.5, y: 0.5 } // center\n]\ndirectionData.forEach(item => item.type = 'percent')\n\nexport const AroundHelper = {\n\n directionData, // index Direction9\n\n tempPoint: {} as IPointData,\n\n get,\n\n toPoint(around: IAround, box: IBoundsData, to: IPointData, onlyBoxSize?: boolean, content?: IBoundsData, onlyContentSize?: boolean) {\n const point = get(around)\n\n to.x = point.x\n to.y = point.y\n\n\n if (point.type === 'percent') {\n to.x *= box.width\n to.y *= box.height\n\n if (content) { // align\n if (!onlyContentSize) to.x -= content.x, to.y -= content.y\n if (point.x) to.x -= (point.x === 1) ? content.width : (point.x === 0.5 ? point.x * content.width : 0)\n if (point.y) to.y -= (point.y === 1) ? content.height : (point.y === 0.5 ? point.y * content.height : 0)\n }\n }\n\n if (!onlyBoxSize) to.x += box.x, to.y += box.y\n },\n\n getPoint(around: IAround, box: IBoundsData, to?: IPointData): IPointData {\n if (!to) to = {} as IPointData\n AroundHelper.toPoint(around, box, to, true)\n return to\n }\n}\n\nfunction get(around: IAround): IUnitPointData {\n return isString(around) ? directionData[Direction9[around]] : around\n}","import { IPointData, IBoundsData, IAlign } from '@leafer/interface'\nimport { AroundHelper } from './AroundHelper'\n\nconst { toPoint } = AroundHelper\n\nexport const AlignHelper = {\n toPoint(align: IAlign, content: IBoundsData, box: IBoundsData, to: IPointData, onlyBoxSize?: boolean, onlyContentSize?: boolean): void {\n toPoint(align, box, to, onlyBoxSize, content, onlyContentSize)\n }\n}","import { IPointData, IBoundsData, IMatrixData, IFourNumber, IBoundsDataFn, IObject, IMatrix, IOffsetBoundsData, IRadiusPointData, IMatrixWithScaleData, ISide, IAlign, ISizeData, IScrollPointData } from '@leafer/interface'\nimport { isArray, isString } from '@leafer/data'\n\nimport { Matrix } from './Matrix'\nimport { MatrixHelper as M } from './MatrixHelper'\nimport { TwoPointBoundsHelper as TB } from './TwoPointBoundsHelper'\nimport { PointHelper as P } from './PointHelper'\nimport { MathHelper, getBoundsData } from './MathHelper'\nimport { AlignHelper } from './AlignHelper'\n\n\nconst { tempPointBounds, setPoint, addPoint, toBounds } = TB\nconst { toOuterPoint } = M\nconst { float, fourNumber } = MathHelper\nconst { floor, ceil } = Math\n\nlet right: number, bottom: number, boundsRight: number, boundsBottom: number\nconst point = {} as IPointData\nconst toPoint = {} as IPointData\nconst tempBounds = {} as IBoundsData\n\nexport const BoundsHelper = {\n\n tempBounds,\n\n set(t: IBoundsData, x = 0, y = 0, width = 0, height = 0): void {\n t.x = x\n t.y = y\n t.width = width\n t.height = height\n },\n\n copy(t: IBoundsData, bounds: IBoundsData): void {\n t.x = bounds.x\n t.y = bounds.y\n t.width = bounds.width\n t.height = bounds.height\n },\n\n copyAndSpread(t: IBoundsData, bounds: IBoundsData, spread: IFourNumber, isShrink?: boolean, side?: ISide): void {\n const { x, y, width, height } = bounds\n if (isArray(spread)) {\n const four = fourNumber(spread)\n isShrink\n ? B.set(t, x + four[3], y + four[0], width - four[1] - four[3], height - four[2] - four[0])\n : B.set(t, x - four[3], y - four[0], width + four[1] + four[3], height + four[2] + four[0])\n } else {\n if (isShrink) spread = -spread\n B.set(t, x - spread, y - spread, width + spread * 2, height + spread * 2)\n }\n\n if (side) { // 只扩展/收缩一边\n if (side === 'width') t.y = y, t.height = height\n else t.x = x, t.width = width\n }\n },\n\n\n minX(t: IBoundsData): number { return t.width > 0 ? t.x : t.x + t.width },\n\n minY(t: IBoundsData): number { return t.height > 0 ? t.y : t.y + t.height },\n\n maxX(t: IBoundsData): number { return t.width > 0 ? t.x + t.width : t.x },\n\n maxY(t: IBoundsData): number { return t.height > 0 ? t.y + t.height : t.y },\n\n\n move(t: IBoundsData, x: number, y: number): void {\n t.x += x\n t.y += y\n },\n\n scroll(t: IBoundsData, data: IScrollPointData): void {\n t.x += data.scrollX\n t.y += data.scrollY\n },\n\n getByMove(t: IBoundsData, x: number, y: number): IBoundsData {\n t = { ...t }\n B.move(t, x, y)\n return t\n },\n\n toOffsetOutBounds(t: IBoundsData, to?: IOffsetBoundsData, parent?: IBoundsData): void {\n if (!to) {\n to = t as IOffsetBoundsData\n } else {\n copy(to, t)\n }\n if (parent) {\n to.offsetX = -(B.maxX(parent) - t.x)\n to.offsetY = -(B.maxY(parent) - t.y)\n } else {\n to.offsetX = t.x + t.width\n to.offsetY = t.y + t.height\n }\n B.move(to, -to.offsetX, -to.offsetY)\n },\n\n\n scale(t: IBoundsData, scaleX: number, scaleY = scaleX, onlySize?: boolean): void {\n onlySize || P.scale(t, scaleX, scaleY)\n t.width *= scaleX\n t.height *= scaleY\n },\n\n scaleOf(t: IBoundsData, origin: IPointData, scaleX: number, scaleY = scaleX): void {\n P.scaleOf(t, origin, scaleX, scaleY)\n t.width *= scaleX\n t.height *= scaleY\n },\n\n tempToOuterOf(t: IBoundsData, matrix: IMatrixData): IBoundsData {\n B.copy(tempBounds, t)\n B.toOuterOf(tempBounds, matrix)\n return tempBounds\n },\n\n getOuterOf(t: IBoundsData, matrix: IMatrixData): IBoundsData {\n t = { ...t }\n B.toOuterOf(t, matrix)\n return t\n },\n\n toOuterOf(t: IBoundsData, matrix: IMatrixData, to?: IBoundsData): void {\n\n to || (to = t)\n\n if (matrix.b === 0 && matrix.c === 0) {\n\n const { a, d } = matrix\n if (a > 0) {\n to.width = t.width * a\n to.x = matrix.e + t.x * a\n } else {\n to.width = t.width * -a\n to.x = matrix.e + t.x * a - to.width\n }\n\n if (d > 0) {\n to.height = t.height * d\n to.y = matrix.f + t.y * d\n } else {\n to.height = t.height * -d\n to.y = matrix.f + t.y * d - to.height\n }\n\n } else {\n\n point.x = t.x\n point.y = t.y\n\n toOuterPoint(matrix, point, toPoint)\n setPoint(tempPointBounds, toPoint.x, toPoint.y)\n\n point.x = t.x + t.width\n\n toOuterPoint(matrix, point, toPoint)\n addPoint(tempPointBounds, toPoint.x, toPoint.y)\n\n point.y = t.y + t.height\n\n toOuterPoint(matrix, point, toPoint)\n addPoint(tempPointBounds, toPoint.x, toPoint.y)\n\n point.x = t.x\n\n toOuterPoint(matrix, point, toPoint)\n addPoint(tempPointBounds, toPoint.x, toPoint.y)\n\n toBounds(tempPointBounds, to)\n }\n },\n\n toInnerOf(t: IBoundsData, matrix: IMatrixData, to?: IBoundsData): void {\n to || (to = t)\n B.move(to, -matrix.e, -matrix.f)\n B.scale(to, 1 / matrix.a, 1 / matrix.d)\n },\n\n getFitMatrix(t: IBoundsData, put: IBoundsData, baseScale = 1): IMatrix {\n const scale = Math.min(baseScale, B.getFitScale(t, put))\n return new Matrix(scale, 0, 0, scale, -put.x * scale, -put.y * scale)\n },\n\n getFitScale(t: ISizeData, put: ISizeData, isCoverMode?: boolean): number {\n const sw = t.width / put.width, sh = t.height / put.height\n return isCoverMode ? Math.max(sw, sh) : Math.min(sw, sh)\n },\n\n put(t: ISizeData, put: ISizeData, align: IAlign = 'center', putScale: number | 'fit' | 'cover' = 1, changeSize = true, to?: IPointData): void {\n to || (to = put as unknown as IPointData)\n if (isString(putScale)) putScale = B.getFitScale(t, put, putScale === 'cover')\n tempBounds.width = changeSize ? put.width *= putScale : put.width * putScale\n tempBounds.height = changeSize ? put.height *= putScale : put.height * putScale\n AlignHelper.toPoint(align, tempBounds, t as IBoundsData, to, true, true)\n },\n\n getSpread(t: IBoundsData, spread: IFourNumber, side?: ISide): IBoundsData {\n const n = {} as IBoundsData\n B.copyAndSpread(n, t, spread, false, side)\n return n\n },\n\n spread(t: IBoundsData, spread: IFourNumber, side?: ISide): void {\n B.copyAndSpread(t, t, spread, false, side)\n },\n\n shrink(t: IBoundsData, shrink: IFourNumber, side?: ISide): void {\n B.copyAndSpread(t, t, shrink, true, side)\n },\n\n ceil(t: IBoundsData): void {\n const { x, y } = t\n t.x = floor(t.x)\n t.y = floor(t.y)\n t.width = x > t.x ? ceil(t.width + x - t.x) : ceil(t.width)\n t.height = y > t.y ? ceil(t.height + y - t.y) : ceil(t.height)\n },\n\n unsign(t: IBoundsData): void {\n if (t.width < 0) {\n t.x += t.width\n t.width = -t.width\n }\n if (t.height < 0) {\n t.y += t.height\n t.height = -t.height\n }\n },\n\n float(t: IBoundsData, maxLength?: number): void {\n t.x = float(t.x, maxLength)\n t.y = float(t.y, maxLength)\n t.width = float(t.width, maxLength)\n t.height = float(t.height, maxLength)\n },\n\n add(t: IBoundsData, bounds: IBoundsData, isPoint?: boolean): void {\n right = t.x + t.width\n bottom = t.y + t.height\n boundsRight = bounds.x\n boundsBottom = bounds.y\n\n if (!isPoint) {\n boundsRight += bounds.width\n boundsBottom += bounds.height\n }\n\n right = right > boundsRight ? right : boundsRight\n bottom = bottom > boundsBottom ? bottom : boundsBottom\n\n t.x = t.x < bounds.x ? t.x : bounds.x\n t.y = t.y < bounds.y ? t.y : bounds.y\n t.width = right - t.x\n t.height = bottom - t.y\n },\n\n addList(t: IBoundsData, list: IBoundsData[]): void {\n B.setListWithFn(t, list, undefined, true)\n },\n\n setList(t: IBoundsData, list: IBoundsData[], addMode = false): void {\n B.setListWithFn(t, list, undefined, addMode)\n },\n\n addListWithFn(t: IBoundsData, list: IObject[], boundsDataFn: IBoundsDataFn): void {\n B.setListWithFn(t, list, boundsDataFn, true)\n },\n\n setListWithFn(t: IBoundsData, list: IObject[], boundsDataFn: IBoundsDataFn, addMode = false): void {\n let bounds: IBoundsData, first = true\n for (let i = 0, len = list.length; i < len; i++) {\n bounds = boundsDataFn ? boundsDataFn(list[i], i) : list[i] as IBoundsData\n if (bounds && (bounds.width || bounds.height)) {\n if (first) {\n first = false\n if (!addMode) copy(t, bounds)\n } else {\n add(t, bounds)\n }\n }\n }\n\n if (first) B.reset(t)\n },\n\n\n setPoints(t: IBoundsData, points: IPointData[]): void {\n points.forEach((point, index) => index === 0 ? setPoint(tempPointBounds, point.x, point.y) : addPoint(tempPointBounds, point.x, point.y))\n toBounds(tempPointBounds, t)\n },\n\n setPoint(t: IBoundsData, point: IPointData): void {\n B.set(t, point.x, point.y)\n },\n\n addPoint(t: IBoundsData, point: IPointData): void {\n add(t, point as IBoundsData, true)\n },\n\n getPoints(t: IBoundsData): IPointData[] {\n const { x, y, width, height } = t\n return [\n { x, y }, // topLeft\n { x: x + width, y }, // topRight\n { x: x + width, y: y + height }, // bottomRight\n { x, y: y + height } // bottomLeft\n ]\n },\n\n\n hitRadiusPoint(t: IBoundsData, point: IRadiusPointData, pointMatrix?: IMatrixWithScaleData): boolean {\n if (pointMatrix) point = P.tempToInnerRadiusPointOf(point, pointMatrix)\n return (point.x >= t.x - point.radiusX && point.x <= t.x + t.width + point.radiusX) && (point.y >= t.y - point.radiusY && point.y <= t.y + t.height + point.radiusY)\n },\n\n hitPoint(t: IBoundsData, point: IPointData, pointMatrix?: IMatrixData): boolean {\n if (pointMatrix) point = P.tempToInnerOf(point, pointMatrix)\n return (point.x >= t.x && point.x <= t.x + t.width) && (point.y >= t.y && point.y <= t.y + t.height)\n },\n\n\n hit(t: IBoundsData, other: IBoundsData, otherMatrix?: IMatrixData): boolean {\n if (otherMatrix) other = B.tempToOuterOf(other, otherMatrix)\n return !((t.y + t.height < other.y) || (other.y + other.height < t.y) || (t.x + t.width < other.x) || (other.x + other.width < t.x))\n },\n\n includes(t: IBoundsData, other: IBoundsData, otherMatrix?: IMatrixData): boolean {\n if (otherMatrix) other = B.tempToOuterOf(other, otherMatrix)\n return (t.x <= other.x) && (t.y <= other.y) && (t.x + t.width >= other.x + other.width) && (t.y + t.height >= other.y + other.height)\n },\n\n getIntersectData(t: IBoundsData, other: IBoundsData, otherMatrix?: IMatrixData): IBoundsData {\n if (otherMatrix) other = B.tempToOuterOf(other, otherMatrix)\n if (!B.hit(t, other)) return getBoundsData()\n\n let { x, y, width, height } = other\n\n right = x + width\n bottom = y + height\n boundsRight = t.x + t.width\n boundsBottom = t.y + t.height\n\n x = x > t.x ? x : t.x\n y = y > t.y ? y : t.y\n right = right < boundsRight ? right : boundsRight\n bottom = bottom < boundsBottom ? bottom : boundsBottom\n\n width = right - x\n height = bottom - y\n\n return { x, y, width, height }\n },\n\n intersect(t: IBoundsData, other: IBoundsData, otherMatrix?: IMatrixData): void {\n B.copy(t, B.getIntersectData(t, other, otherMatrix))\n },\n\n\n isSame(t: IBoundsData, bounds: IBoundsData): boolean {\n return t.x === bounds.x && t.y === bounds.y && t.width === bounds.width && t.height === bounds.height\n },\n\n isEmpty(t: IBoundsData): boolean {\n return t.x === 0 && t.y === 0 && t.width === 0 && t.height === 0\n },\n\n reset(t: IBoundsData): void {\n B.set(t)\n }\n}\n\nconst B = BoundsHelper\nconst { add, copy } = B","import { IBounds, IBoundsData, IMatrixData, IPointData, IBoundsDataFn, IObject, IMatrix, IRadiusPointData, IMatrixWithLayoutData, IFourNumber, ISide, IAlign } from '@leafer/interface'\nimport { isObject } from '@leafer/data'\n\nimport { BoundsHelper as B } from './BoundsHelper'\n\n\nexport class Bounds implements IBounds {\n\n public x: number\n public y: number\n public width: number\n public height: number\n\n public get minX(): number { return B.minX(this) }\n public get minY(): number { return B.minY(this) }\n public get maxX(): number { return B.maxX(this) }\n public get maxY(): number { return B.maxY(this) }\n\n constructor(x?: number | IBoundsData, y?: number, width?: number, height?: number) {\n this.set(x, y, width, height)\n }\n\n public set(x?: number | IBoundsData, y?: number, width?: number, height?: number): IBounds {\n isObject(x) ? B.copy(this, x) : B.set(this, x, y, width, height)\n return this\n }\n\n public get(): IBoundsData {\n const { x, y, width, height } = this\n return { x, y, width, height }\n }\n\n public clone(): IBounds {\n return new Bounds(this)\n }\n\n\n public move(x: number, y: number): IBounds {\n B.move(this, x, y)\n return this\n }\n\n public scale(scaleX: number, scaleY?: number, onlySize?: boolean): IBounds {\n B.scale(this, scaleX, scaleY, onlySize)\n return this\n }\n\n public scaleOf(origin: IPointData, scaleX: number, scaleY?: number): IBounds {\n B.scaleOf(this, origin, scaleX, scaleY)\n return this\n }\n\n public toOuterOf(matrix: IMatrixData, to?: IBoundsData): IBounds {\n B.toOuterOf(this, matrix, to)\n return this\n }\n\n public toInnerOf(matrix: IMatrixData, to?: IBoundsData): IBounds {\n B.toInnerOf(this, matrix, to)\n return this\n }\n\n public getFitMatrix(put: IBoundsData, baseScale?: number): IMatrix {\n return B.getFitMatrix(this, put, baseScale)\n }\n\n public put(put: IBoundsData, align?: IAlign, putScale?: number | 'fit' | 'cover'): void {\n B.put(this, put, align, putScale)\n }\n\n public spread(fourNumber: IFourNumber, side?: ISide): IBounds {\n B.spread(this, fourNumber, side)\n return this\n }\n\n public shrink(fourNumber: IFourNumber, side?: ISide): IBounds {\n B.shrink(this, fourNumber, side)\n return this\n }\n\n public ceil(): IBounds {\n B.ceil(this)\n return this\n }\n\n public unsign(): IBounds {\n B.unsign(this)\n return this\n }\n\n public float(maxLength?: number): IBounds {\n B.float(this, maxLength)\n return this\n }\n\n\n public add(bounds: IBoundsData): IBounds {\n B.add(this, bounds)\n return this\n }\n\n public addList(boundsList: IBoundsData[]): IBounds {\n B.setList(this, boundsList, true)\n return this\n }\n\n public setList(boundsList: IBoundsData[]): IBounds {\n B.setList(this, boundsList)\n return this\n }\n\n public addListWithFn(list: IObject[], boundsDataFn: IBoundsDataFn): IBounds {\n B.setListWithFn(this, list, boundsDataFn, true)\n return this\n }\n\n public setListWithFn(list: IObject[], boundsDataFn: IBoundsDataFn): IBounds {\n B.setListWithFn(this, list, boundsDataFn)\n return this\n }\n\n\n public setPoint(point: IPointData): IBounds {\n B.setPoint(this, point)\n return this\n }\n\n public setPoints(points: IPointData[]): IBounds {\n B.setPoints(this, points)\n return this\n }\n\n public addPoint(point: IPointData): IBounds {\n B.addPoint(this, point)\n return this\n }\n\n public getPoints(): IPointData[] {\n return B.getPoints(this)\n }\n\n\n\n public hitPoint(point: IPointData, pointMatrix?: IMatrixData): boolean {\n return B.hitPoint(this, point, pointMatrix)\n }\n\n public hitRadiusPoint(point: IRadiusPointData, pointMatrix?: IMatrixWithLayoutData): boolean {\n return B.hitRadiusPoint(this, point, pointMatrix)\n }\n\n public hit(bounds: IBoundsData, boundsMatrix?: IMatrixData): boolean {\n return B.hit(this, bounds, boundsMatrix)\n }\n\n public includes(bounds: IBoundsData, boundsMatrix?: IMatrixData): boolean {\n return B.includes(this, bounds, boundsMatrix)\n }\n\n\n public intersect(bounds: IBoundsData, boundsMatrix?: IMatrixData): IBounds {\n B.intersect(this, bounds, boundsMatrix)\n return this\n }\n\n public getIntersect(bounds: IBoundsData, boundsMatrix?: IMatrixData): IBounds {\n return new Bounds(B.getIntersectData(this, bounds, boundsMatrix))\n }\n\n\n public isSame(bounds: IBoundsData): boolean {\n return B.isSame(this, bounds)\n }\n\n public isEmpty(): boolean {\n return B.isEmpty(this)\n }\n\n public reset(): void {\n B.reset(this)\n }\n\n}\n\nexport const tempBounds = new Bounds()","import { INumberMap } from '@leafer/interface'\n\n\nexport const StringNumberMap: INumberMap = {\n '0': 1,\n '1': 1,\n '2': 1,\n '3': 1,\n '4': 1,\n '5': 1,\n '6': 1,\n '7': 1,\n '8': 1,\n '9': 1,\n '.': 1,\n 'e': 1,\n 'E': 1\n}","import { IBooleanMap, IBoundsData, ILeaferCanvas, IRenderOptions, ILeaf } from '@leafer/interface'\nimport { isString } from '@leafer/data'\nimport { MathHelper } from '@leafer/math'\n\n\nconst { randColor } = MathHelper\nexport class Debug {\n\n static enable: boolean\n\n static filterList: string[] = []\n static excludeList: string[] = []\n\n // other\n static showWarn = true\n static showRepaint: boolean | string\n static showBounds: boolean | string | 'hit'\n\n public name: string\n\n public repeatMap: IBooleanMap = {}\n\n constructor(name: string) {\n this.name = name\n }\n\n static get(name: string): Debug {\n return new Debug(name)\n }\n\n static set filter(name: string | string[]) {\n this.filterList = getNameList(name)\n }\n\n static set exclude(name: string | string[]) {\n this.excludeList = getNameList(name)\n }\n\n static drawRepaint(canvas: ILeaferCanvas, bounds: IBoundsData): void {\n const color = randColor()\n canvas.fillWorld(bounds, color.replace('1)', '.1)'))\n canvas.strokeWorld(bounds, color)\n }\n\n static drawBounds(leaf: ILeaf, canvas: ILeaferCanvas, _options: IRenderOptions): void {\n const showHit = Debug.showBounds === 'hit', w = leaf.__nowWorld, color = randColor()\n if (showHit) canvas.setWorld(w), leaf.__drawHitPath(canvas), canvas.fillStyle = color.replace('1)', '.2)'), canvas.fill()\n\n canvas.resetTransform()\n canvas.setStroke(color, 2)\n showHit ? canvas.stroke() : canvas.strokeWorld(w, color)\n }\n\n\n log(...messages: unknown[]): void {\n if (D.enable) {\n if (D.filterList.length && D.filterList.every(name => name !== this.name)) return\n if (D.excludeList.length && D.excludeList.some(name => name === this.name)) return\n console.log('%c' + this.name, 'color:#21ae62', ...messages)\n }\n }\n\n tip(...messages: unknown[]): void {\n if (D.enable) this.warn(...messages)\n }\n\n warn(...messages: unknown[]): void {\n if (D.showWarn) console.warn(this.name, ...messages)\n }\n\n repeat(name: string, ...messages: unknown[]) {\n if (!this.repeatMap[name]) {\n this.warn('repeat:' + name, ...messages)\n this.repeatMap[name] = true\n }\n }\n\n error(...messages: unknown[]): void {\n try {\n throw new Error()\n } catch (e) {\n console.error(this.name, ...messages, e)\n }\n }\n}\n\nfunction getNameList(name: string | string[]): string[] {\n if (!name) name = []\n else if (isString(name)) name = [name]\n return name\n}\n\nconst D = Debug","import { IncrementId } from '@leafer/math'\nimport { isUndefined } from '@leafer/data'\n\nimport { Debug } from './Debug'\n\n\ninterface ids {\n [name: string]: number\n}\ninterface names {\n [name: string]: string\n}\n\n\nconst debug = Debug.get('RunTime')\n\nexport const Run = {\n\n currentId: 0,\n currentName: '',\n\n idMap: {} as ids,\n nameMap: {} as names,\n nameToIdMap: {} as ids,\n\n start(name: string, microsecond?: boolean): number {\n const id = IncrementId.create(IncrementId.RUNTIME)\n R.currentId = R.idMap[id] = microsecond ? performance.now() : Date.now()\n R.currentName = R.nameMap[id] = name\n R.nameToIdMap[name] = id\n return id\n },\n\n end(id: number, microsecond?: boolean): void {\n const time = R.idMap[id], name = R.nameMap[id]\n const duration = microsecond ? (performance.now() - time) / 1000 : Date.now() - time\n R.idMap[id] = R.nameMap[id] = R.nameToIdMap[name] = undefined\n debug.log(name, duration, 'ms')\n },\n\n endOfName(name: string, microsecond?: boolean): void {\n const id = R.nameToIdMap[name]\n if (!isUndefined(id)) R.end(id, microsecond)\n }\n}\n\nconst R = Run","import { IBooleanMap } from '@leafer/interface'\n\n\nconst check = [] as string[]\n\nexport const Plugin = {\n\n list: {} as IBooleanMap,\n\n add(name: string, ...needPlugins: string[]) {\n this.list[name] = true\n check.push(...needPlugins)\n },\n\n has(name: string, tip?: boolean): boolean {\n const rs = this.list[name]\n if (!rs && tip) this.need(name)\n return rs\n },\n\n need(name: string): any {\n console.error('please install and import plugin: ' + (name.includes('-x') ? '' : '@leafer-in/') + name)\n }\n\n}\n\nsetTimeout(() => check.forEach(name => Plugin.has(name, true)))","import { ICreator, IObject, ILeaf } from '@leafer/interface'\nimport { Plugin } from '@leafer/debug'\n\n\nexport const Creator: ICreator = {\n editor(_options?: IObject): ILeaf {\n return Plugin.need('editor')\n }\n}","import { ILeaf, IObject } from '@leafer/interface'\nimport { isUndefined } from '@leafer/data'\nimport { Debug } from '@leafer/debug'\n\n\nconst debug = Debug.get('UICreator')\n\nexport const UICreator = {\n\n list: {} as IObject,\n\n register(UI: IObject): void {\n const { __tag: tag } = UI.prototype as ILeaf\n if (list[tag]) debug.repeat(tag)\n list[tag] = UI\n },\n\n get(tag: string, data?: IObject, x?: number, y?: number, width?: number, height?: number): ILeaf {\n if (!list[tag]) debug.error('not register ' + tag)\n const ui = new list[tag](data)\n if (!isUndefined(x)) {\n ui.x = x\n if (y) ui.y = y\n if (width) ui.width = width\n if (height) ui.height = height\n }\n return ui\n }\n\n}\n\nconst { list } = UICreator","import { IEvent, IObject } from '@leafer/interface'\nimport { isString } from '@leafer/data'\nimport { Debug } from '@leafer/debug'\n\n\nconst debug = Debug.get('EventCreator')\n\nexport const EventCreator = {\n\n nameList: {} as IObject,\n\n register(Event: IObject): void {\n let name: string\n Object.keys(Event).forEach(key => {\n name = Event[key]\n if (isString(name)) nameList[name] && debug.repeat(name), nameList[name] = Event\n })\n },\n\n changeName(oldName: string, newName: string): void {\n const Event = nameList[oldName]\n if (Event) {\n const constName = Object.keys(Event).find(key => Event[key] === oldName)\n if (constName) {\n Event[constName] = newName\n nameList[newName] = Event\n }\n }\n },\n\n has(type: string): boolean {\n return !!this.nameList[type]\n },\n\n get(type: string, ...params: unknown[]): IEvent {\n return new nameList[type](...params)\n }\n\n}\n\nconst { nameList } = EventCreator","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import { ICanvasAttr, ITextMetrics, ICanvasContext2D, IPath2D, IObject, InnerId, IMatrixData, IFunction, IWindingRule, IBlendMode } from '@leafer/interface'\nimport { isObject } from '@leafer/data'\n\n\nfunction contextAttr(realName?: string) {\n return (target: Canvas, key: string) => {\n if (!realName) realName = key\n const property = {\n get() { return ((this as unknown as Canvas).context as IObject)[realName] },\n set(value: unknown) { ((this as unknown as Canvas).context as IObject)[realName] = value }\n }\n if (key === 'strokeCap') (property as any).set = function (value: unknown) { ((this as unknown as Canvas).context as IObject)[realName] = value === 'none' ? 'butt' : value }\n Object.defineProperty(target, key, property)\n }\n}\n\nconst contextMethodNameList: string[] = []\nfunction contextMethod() {\n return (_target: Canvas, key: string) => {\n contextMethodNameList.push(key)\n }\n}\n\nconst emptyArray: number[] = []\n\n\nexport class Canvas implements ICanvasAttr {\n\n public readonly innerId: InnerId\n\n public context: ICanvasContext2D\n\n // canvas attr\n\n @contextAttr('imageSmoothingEnabled')\n public smooth: boolean\n\n @contextAttr('imageSmoothingQuality')\n public smoothLevel: ImageSmoothingQuality\n\n @contextAttr('globalAlpha')\n public opacity: number\n\n public set blendMode(value: IBlendMode) {\n if (value === 'normal') value = 'source-over'\n this.context.globalCompositeOperation = value as any\n }\n\n public get blendMode(): IBlendMode {\n return this.context.globalCompositeOperation as IBlendMode\n }\n\n @contextAttr()\n public fillStyle: string | object\n\n @contextAttr()\n public strokeStyle: string | object\n\n\n @contextAttr('lineWidth')\n public strokeWidth: number\n\n @contextAttr('lineCap')\n public strokeCap: string\n\n @contextAttr('lineJoin')\n public strokeJoin: string\n\n public set dashPattern(value: number[]) {\n this.context.setLineDash(value || emptyArray)\n }\n public get dashPattern(): number[] {\n return this.context.getLineDash()\n }\n\n @contextAttr('lineDashOffset')\n public dashOffset: number\n\n @contextAttr()\n public miterLimit: number\n\n\n @contextAttr()\n public shadowBlur: number\n\n @contextAttr()\n public shadowColor: string\n\n @contextAttr()\n public shadowOffsetX: number\n\n @contextAttr()\n public shadowOffsetY: number\n\n @contextAttr()\n public filter: string\n\n\n @contextAttr()\n public font: string\n\n @contextAttr()\n public fontKerning: string\n\n @contextAttr()\n public fontStretch: string\n\n @contextAttr()\n public fontVariantCaps: string\n\n\n @contextAttr()\n public textAlign: string\n\n @contextAttr()\n public textBaseline: string\n\n @contextAttr()\n public textRendering: string\n\n @contextAttr()\n public wordSpacing: string\n\n @contextAttr()\n public letterSpacing: string\n\n\n @contextAttr()\n public direction: string\n\n // end\n\n public __bindContext(): void {\n let method: IFunction\n contextMethodNameList.forEach(name => {\n method = (this.context as IObject)[name]\n if (method) (this as IObject)[name] = method.bind(this.context)\n })\n this.textBaseline = \"alphabetic\"\n }\n\n // canvas method\n\n @contextMethod()\n public setTransform(_a: number | IMatrixData, _b?: number, _c?: number, _d?: number, _e?: number, _f?: number): void { }\n\n @contextMethod()\n public resetTransform(): void { }\n\n @contextMethod()\n public getTransform(): IMatrixData { return void 0 }\n\n @contextMethod()\n public save(): void { }\n\n @contextMethod()\n public restore(): void { }\n\n public transform(a: number | IMatrixData, b?: number, c?: number, d?: number, e?: number, f?: number): void {\n if (isObject(a)) {\n this.context.transform(a.a, a.b, a.c, a.d, a.e, a.f)\n } else {\n this.context.transform(a, b, c, d, e, f)\n }\n }\n\n @contextMethod()\n public translate(_x: number, _y: number): void { }\n\n @contextMethod()\n public scale(_x: number, _y: number): void { }\n\n @contextMethod()\n public rotate(_angle: number): void { }\n\n @contextMethod()\n public fill(_path2d?: IPath2D | IWindingRule, _rule?: IWindingRule): void { }\n\n @contextMethod()\n public stroke(_path2d?: IPath2D): void { }\n\n @contextMethod()\n public clip(_path2d?: IPath2D | IWindingRule, _rule?: IWindingRule): void { }\n\n @contextMethod()\n public fillRect(_x: number, _y: number, _width: number, _height: number): void { }\n\n @contextMethod()\n public strokeRect(_x: number, _y: number, _width: number, _height: number): void { }\n\n @contextMethod()\n public clearRect(_x: number, _y: number, _width: number, _height: number): void { }\n\n public drawImage(image: CanvasImageSource, sx: number, sy: number, sw?: number, sh?: number, dx?: number, dy?: number, dw?: number, dh?: number): void {\n switch (arguments.length) {\n case 9:\n\n // safari: drawimage裁剪画布外的坐标会有问题, 必须是不小于0的坐标点\n if (sx < 0) {\n const d = (-sx / sw) * dw\n sw += sx\n sx = 0\n dx += d\n dw -= d\n }\n\n if (sy < 0) {\n const d = (-sy / sh) * dh\n sh += sy\n sy = 0\n dy += d\n dh -= d\n }\n\n this.context.drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh)\n break\n case 5:\n this.context.drawImage(image, sx, sy, sw, sh) // = dx, dy, dw, dh\n break\n case 3:\n this.context.drawImage(image, sx, sy)\n }\n }\n\n\n // canvas draw\n @contextMethod()\n public beginPath(): void { }\n\n @contextMethod()\n public moveTo(_x: number, _y: number): void { }\n\n @contextMethod()\n public lineTo(_x: number, _y: number): void { }\n\n @contextMethod()\n public bezierCurveTo(_cp1x: number, _cp1y: number, _cp2x: number, _cp2y: number, _x: number, _y: number): void { }\n\n @contextMethod()\n public quadraticCurveTo(_cpx: number, _cpy: number, _x: number, _y: number): void { }\n\n @contextMethod()\n public closePath(): void { }\n\n @contextMethod()\n public arc(_x: number, _y: number, _radius: number, _startAngle: number, _endAngle: number, _anticlockwise?: boolean): void { }\n\n @contextMethod()\n public arcTo(_x1: number, _y1: number, _x2: number, _y2: number, _radius: number): void { }\n\n @contextMethod()\n public ellipse(_x: number, _y: number, _radiusX: number, _radiusY: number, _rotation: number, _startAngle: number, _endAngle: number, _anticlockwise?: boolean): void { }\n\n @contextMethod()\n public rect(_x: number, _y: number, _width: number, _height: number): void { }\n\n @contextMethod()\n public roundRect(_x: number, _y: number, _width: number, _height: number, _radius?: number | number[]): void { }\n\n // end canvas draw\n\n // paint\n\n @contextMethod()\n public createConicGradient(_startAngle: number, _x: number, _y: number): CanvasGradient { return void 0 }\n\n @contextMethod()\n public createLinearGradient(_x0: number, _y0: number, _x1: number, _y1: number): CanvasGradient { return void 0 }\n\n @contextMethod()\n public createPattern(_image: CanvasImageSource, _repetition: string | null): CanvasPattern | null { return void 0 }\n\n @contextMethod()\n public createRadialGradient(_x0: number, _y0: number, _r0: number, _x1: number, _y1: number, _r1: number): CanvasGradient { return void 0 }\n\n // text\n @contextMethod()\n public fillText(_text: string, _x: number, _y: number, _maxWidth?: number): void { }\n\n @contextMethod()\n public measureText(_text: string): ITextMetrics { return void 0 }\n\n @contextMethod()\n public strokeText(_text: string, _x: number, _y: number, _maxWidth?: number): void { }\n\n public destroy(): void {\n this.context = null\n }\n}","import { IBounds, ILeaferCanvas, ICanvasStrokeOptions, ILeaferCanvasConfig, IWindingRuleData, IExportOptions, IMatrixData, IBoundsData, IAutoBounds, IScreenSizeData, IResizeEventListener, IMatrixWithBoundsData, IPointData, InnerId, ICanvasManager, IWindingRule, IBlendMode, IExportImageType, IExportFileType, IBlob, ICursorType, ILeaferCanvasView, IRadiusPointData, IObject, IMatrixWithOptionHalfData } from '@leafer/interface'\nimport { Bounds, BoundsHelper, MatrixHelper, IncrementId } from '@leafer/math'\nimport { Creator, Platform } from '@leafer/platform'\nimport { DataHelper, isUndefined } from '@leafer/data'\n\nimport { Canvas } from './Canvas'\n\n\nconst { copy, multiplyParent } = MatrixHelper, { round } = Math, tempPixelBounds = new Bounds(), tempPixelBounds2 = new Bounds()\nconst minSize: IScreenSizeData = { width: 1, height: 1, pixelRatio: 1 }\n\nexport const canvasSizeAttrs = ['width', 'height', 'pixelRatio']\n\nexport class LeaferCanvasBase extends Canvas implements ILeaferCanvas {\n\n declare public readonly innerId: InnerId\n\n public name: string\n\n public manager: ICanvasManager\n\n public size: IScreenSizeData = {} as IScreenSizeData\n\n public get width(): number { return this.size.width }\n public get height(): number { return this.size.height }\n\n public get pixelRatio(): number { return this.size.pixelRatio }\n public get pixelWidth(): number { return this.width * this.pixelRatio || 0 } // 防止出现 NaN\n public get pixelHeight(): number { return this.height * this.pixelRatio || 0 }\n\n public get pixelSnap(): boolean { return this.config.pixelSnap }\n public set pixelSnap(value: boolean) { this.config.pixelSnap = value }\n\n public get allowBackgroundColor(): boolean { return this.view && this.parentView }\n\n public bounds: IBounds\n public clientBounds: IBoundsData\n\n public config: ILeaferCanvasConfig\n\n public autoLayout: boolean\n\n public view: ILeaferCanvasView\n public parentView: any\n\n public unreal?: boolean\n\n public recycled?: boolean\n\n public worldTransform: IMatrixData = {} as IMatrixData\n\n protected savedBlendMode: IBlendMode\n\n constructor(config?: ILeaferCanvasConfig, manager?: ICanvasManager) {\n super()\n if (!config) config = minSize\n\n this.manager = manager\n this.innerId = IncrementId.create(IncrementId.CNAVAS)\n\n const { width, height, pixelRatio } = config\n this.autoLayout = !width || !height\n\n this.size.pixelRatio = pixelRatio || Platform.devicePixelRatio\n this.config = config\n\n this.init()\n }\n\n public init(): void { }\n\n public __createContext(): void {\n const { view } = this\n const { contextSettings } = this.config\n this.context = contextSettings ? view.getContext('2d', contextSettings) : view.getContext('2d')\n this.__bindContext()\n }\n\n // @leafer-in/export rewrite\n\n public export(_filename: IExportFileType | string, _options?: IExportOptions | number | boolean): string | Promise<any> { return undefined }\n\n public toBlob(_type?: IExportFileType, _quality?: number): Promise<IBlob> { return undefined }\n\n public toDataURL(_type?: IExportImageType, _quality?: number): string | Promise<string> { return undefined }\n\n public saveAs(_filename: string, _quality?: number): Promise<boolean> { return undefined }\n\n // ---\n\n public resize(size: IScreenSizeData, safeResize = true): void {\n if (this.isSameSize(size)) return\n\n let takeCanvas: ILeaferCanvas\n if (this.context && !this.unreal && safeResize && this.width) {\n takeCanvas = this.getSameCanvas()\n takeCanvas.copyWorld(this)\n }\n\n const s = this.size as IObject\n DataHelper.copyAttrs(s, size, canvasSizeAttrs)\n canvasSizeAttrs.forEach(key => s[key] || (s[key] = 1)) // fix: width = 0 or height = 0\n\n this.bounds = new Bounds(0, 0, this.width, this.height)\n\n this.updateViewSize()\n this.updateClientBounds()\n\n if (this.context) {\n\n this.smooth = this.config.smooth\n\n if (!this.unreal && takeCanvas) {\n this.clearWorld(takeCanvas.bounds)\n this.copyWorld(takeCanvas)\n takeCanvas.recycle()\n }\n\n }\n\n }\n\n public updateViewSize(): void { }\n public updateClientBounds(): void { }\n public getClientBounds(update?: boolean): IBoundsData {\n if (update) this.updateClientBounds()\n return this.clientBounds || this.bounds\n }\n\n public startAutoLayout(_autoBounds: IAutoBounds, _listener: IResizeEventListener): void { }\n public stopAutoLayout(): void { }\n\n public setCursor(_cursor: ICursorType | ICursorType[]): void { }\n\n public setWorld(matrix: IMatrixWithOptionHalfData, parentMatrix?: IMatrixData): void {\n const { pixelRatio, pixelSnap } = this, w = this.worldTransform\n\n if (parentMatrix) multiplyParent(matrix, parentMatrix, w)\n\n w.a = matrix.a * pixelRatio\n w.b = matrix.b * pixelRatio\n w.c = matrix.c * pixelRatio\n w.d = matrix.d * pixelRatio\n w.e = matrix.e * pixelRatio\n w.f = matrix.f * pixelRatio\n\n if (pixelSnap) {\n if (matrix.half && (matrix.half * pixelRatio) % 2) w.e = round(w.e - 0.5) + 0.5, w.f = round(w.f - 0.5) + 0.5\n else w.e = round(w.e), w.f = round(w.f)\n }\n\n this.setTransform(w.a, w.b, w.c, w.d, w.e, w.f)\n }\n\n public useWorldTransform(worldTransform?: IMatrixData): void {\n if (worldTransform) this.worldTransform = worldTransform\n const w = this.worldTransform\n if (w) this.setTransform(w.a, w.b, w.c, w.d, w.e, w.f)\n }\n\n public setStroke(color: string | object, strokeWidth: number, options?: ICanvasStrokeOptions, childOptions?: ICanvasStrokeOptions): void {\n if (strokeWidth) this.strokeWidth = strokeWidth\n if (color) this.strokeStyle = color\n if (options) this.setStrokeOptions(options, childOptions)\n }\n\n public setStrokeOptions(options: ICanvasStrokeOptions, childOptions?: ICanvasStrokeOptions): void {\n let { strokeCap, strokeJoin, dashPattern, dashOffset, miterLimit } = options\n if (childOptions) {\n if (childOptions.strokeCap) strokeCap = childOptions.strokeCap\n if (childOptions.strokeJoin) strokeJoin = childOptions.strokeJoin\n if (!isUndefined(childOptions.dashPattern)) dashPattern = childOptions.dashPattern\n if (!isUndefined(childOptions.dashOffset)) dashOffset = childOptions.dashOffset\n if (childOptions.miterLimit) miterLimit = childOptions.miterLimit\n }\n this.strokeCap = strokeCap\n this.strokeJoin = strokeJoin\n this.dashPattern = dashPattern\n this.dashOffset = dashOffset\n this.miterLimit = miterLimit\n }\n\n public saveBlendMode(blendMode: IBlendMode): void {\n this.savedBlendMode = this.blendMode\n this.blendMode = blendMode\n }\n\n public restoreBlendMode(): void {\n this.blendMode = this.savedBlendMode\n }\n\n // @leafer-ui/interaction rewrite\n\n public hitFill(_point: IPointData, _fillRule?: IWindingRule): boolean { return true }\n\n public hitStroke(_point: IPointData, _strokeWidth?: number): boolean { return true }\n\n public hitPixel(_radiusPoint: IRadiusPointData, _offset?: IPointData, _scale = 1): boolean { return true }\n\n // ---\n\n public setWorldShadow(x: number, y: number, blur: number, color?: string): void {\n const { pixelRatio } = this\n this.shadowOffsetX = x * pixelRatio\n this.shadowOffsetY = y * pixelRatio\n this.shadowBlur = blur * pixelRatio\n this.shadowColor = color || 'black'\n }\n\n public setWorldBlur(blur: number): void {\n const { pixelRatio } = this\n this.filter = `blur(${blur * pixelRatio}px)`\n }\n\n\n public copyWorld(canvas: ILeaferCanvas, from?: IBoundsData, to?: IBoundsData, blendMode?: IBlendMode, ceilPixel: boolean = true): void {\n if (blendMode) this.blendMode = blendMode\n if (from) {\n this.setTempPixelBounds(from, ceilPixel)\n if (!to) to = tempPixelBounds // to = from\n else this.setTempPixelBounds2(to, ceilPixel), to = tempPixelBounds2\n\n this.drawImage(canvas.view as HTMLCanvasElement, tempPixelBounds.x, tempPixelBounds.y, tempPixelBounds.width, tempPixelBounds.height, to.x, to.y, to.width, to.height)\n } else {\n this.drawImage(canvas.view as HTMLCanvasElement, 0, 0)\n }\n if (blendMode) this.blendMode = 'source-over'\n }\n\n public copyWorldToInner(canvas: ILeaferCanvas, fromWorld: IMatrixWithBoundsData, toInnerBounds: IBoundsData, blendMode?: IBlendMode, ceilPixel: boolean = true): void {\n if (fromWorld.b || fromWorld.c) {\n this.save()\n this.resetTransform()\n this.copyWorld(canvas, fromWorld, BoundsHelper.tempToOuterOf(toInnerBounds, fromWorld), blendMode, ceilPixel)\n this.restore()\n } else {\n if (blendMode) this.blendMode = blendMode\n this.setTempPixelBounds(fromWorld, ceilPixel)\n this.drawImage(canvas.view as HTMLCanvasElement, tempPixelBounds.x, tempPixelBounds.y, tempPixelBounds.width, tempPixelBounds.height, toInnerBounds.x, toInnerBounds.y, toInnerBounds.width, toInnerBounds.height)\n if (blendMode) this.blendMode = 'source-over'\n }\n }\n\n public copyWorldByReset(canvas: ILeaferCanvas, from?: IBoundsData, to?: IBoundsData, blendMode?: IBlendMode, onlyResetTransform?: boolean, ceilPixel: boolean = true): void {\n this.resetTransform()\n this.copyWorld(canvas, from, to, blendMode, ceilPixel)\n if (!onlyResetTransform) this.useWorldTransform() // restore world transform\n }\n\n public useGrayscaleAlpha(bounds: IBoundsData): void { // 先实现功能,后期需通过 shader 优化性能\n this.setTempPixelBounds(bounds, true, true)\n\n let alpha: number, pixel: number\n const { context } = this, imageData = context.getImageData(tempPixelBounds.x, tempPixelBounds.y, tempPixelBounds.width, tempPixelBounds.height), { data } = imageData\n\n for (let i = 0, len = data.length; i < len; i += 4) {\n pixel = data[i] * 0.299 + data[i + 1] * 0.587 + data[i + 2] * 0.114\n if (alpha = data[i + 3]) data[i + 3] = alpha === 255 ? pixel : alpha * (pixel / 255)\n }\n\n context.putImageData(imageData, tempPixelBounds.x, tempPixelBounds.y)\n }\n\n public useMask(maskCanvas: ILeaferCanvas, fromBounds?: IBoundsData, toBounds?: IBoundsData): void {\n this.copyWorld(maskCanvas, fromBounds, toBounds, 'destination-in')\n }\n\n public useEraser(eraserCanvas: ILeaferCanvas, fromBounds?: IBoundsData, toBounds?: IBoundsData): void {\n this.copyWorld(eraserCanvas, fromBounds, toBounds, 'destination-out')\n }\n\n public fillWorld(bounds: IBoundsData, color: string | object, blendMode?: IBlendMode, ceilPixel?: boolean): void {\n if (blendMode) this.blendMode = blendMode\n this.fillStyle = color\n this.setTempPixelBounds(bounds, ceilPixel)\n this.fillRect(tempPixelBounds.x, tempPixelBounds.y, tempPixelBounds.width, tempPixelBounds.height)\n if (blendMode) this.blendMode = 'source-over'\n }\n\n public strokeWorld(bounds: IBoundsData, color: string | object, blendMode?: IBlendMode, ceilPixel?: boolean): void {\n if (blendMode) this.blendMode = blendMode\n this.strokeStyle = color\n this.setTempPixelBounds(bounds, ceilPixel)\n this.strokeRect(tempPixelBounds.x, tempPixelBounds.y, tempPixelBounds.width, tempPixelBounds.height)\n if (blendMode) this.blendMode = 'source-over'\n }\n\n public clipWorld(bounds: IBoundsData, ceilPixel: boolean = true): void {\n this.beginPath()\n this.setTempPixelBounds(bounds, ceilPixel)\n this.rect(tempPixelBounds.x, tempPixelBounds.y, tempPixelBounds.width, tempPixelBounds.height)\n this.clip()\n\n }\n\n public clipUI(ruleData: IWindingRuleData): void {\n ruleData.windingRule ? this.clip(ruleData.windingRule) : this.clip()\n }\n\n public clearWorld(bounds: IBoundsData, ceilPixel: boolean = true): void {\n this.setTempPixelBounds(bounds, ceilPixel)\n this.clearRect(tempPixelBounds.x, tempPixelBounds.y, tempPixelBounds.width, tempPixelBounds.height)\n }\n\n public clear(): void {\n const { pixelRatio } = this\n this.clearRect(0, 0, this.width * pixelRatio + 2, this.height * pixelRatio + 2)\n }\n\n\n // other\n\n protected setTempPixelBounds(bounds: IBoundsData, ceil?: boolean, intersect?: boolean): void {\n this.copyToPixelBounds(tempPixelBounds, bounds, ceil, intersect)\n }\n\n protected setTempPixelBounds2(bounds: IBoundsData, ceil?: boolean, intersect?: boolean): void {\n this.copyToPixelBounds(tempPixelBounds2, bounds, ceil, intersect)\n }\n\n protected copyToPixelBounds(pixelBounds: IBounds, bounds: IBoundsData, ceil?: boolean, intersect?: boolean): void {\n pixelBounds.set(bounds)\n if (intersect) pixelBounds.intersect(this.bounds)\n pixelBounds.scale(this.pixelRatio)\n if (ceil) pixelBounds.ceil()\n }\n\n public isSameSize(size: IScreenSizeData): boolean {\n return this.width === size.width && this.height === size.height && (!size.pixelRatio || this.pixelRatio === size.pixelRatio)\n }\n\n // 需要有 manager变量\n public getSameCanvas(useSameWorldTransform?: boolean, useSameSmooth?: boolean): ILeaferCanvas {\n const { size, pixelSnap } = this, canvas = this.manager ? this.manager.get(size) : Creator.canvas({ ...size })\n canvas.save()\n\n if (useSameWorldTransform) copy(canvas.worldTransform, this.worldTransform), canvas.useWorldTransform()\n if (useSameSmooth) canvas.smooth = this.smooth\n canvas.pixelSnap !== pixelSnap && (canvas.pixelSnap = pixelSnap)\n\n return canvas\n }\n\n public recycle(clearBounds?: IBoundsData): void {\n if (!this.recycled) {\n this.restore()\n clearBounds ? this.clearWorld(clearBounds) : this.clear()\n this.manager ? this.manager.recycle(this) : this.destroy()\n }\n }\n\n public updateRender(_bounds?: IBoundsData): void { }\n\n public unrealCanvas(): void { }\n\n public destroy(): void {\n this.manager = this.view = this.parentView = null\n }\n}","import { IPathCommandData, IPathCreator } from '@leafer/interface'\n\nexport const PathHelper = {\n // index.ts rewrite\n creator: {} as IPathCreator,\n parse(_pathString: string, _curveMode?: boolean): IPathCommandData { return undefined },\n convertToCanvasData(_old: IPathCommandData, _curveMode?: boolean): IPathCommandData { return undefined }\n}","import { INumberMap, IStringMap } from '@leafer/interface'\n\nexport const CanvasCommandOnlyMap: INumberMap = {\n\n N: 21, // rect\n D: 22, // roundRect\n X: 23, // simple roundRect\n G: 24, // ellipse\n F: 25, // simple ellipse\n O: 26, // arc\n P: 27, // simple arc\n U: 28 // arcTo\n\n}\n\nexport const PathCommandMap: INumberMap = {\n\n // svg and canvas\n\n M: 1, // moveto\n m: 10,\n L: 2, // lineto\n l: 20,\n H: 3, // horizontal lineto\n h: 30,\n V: 4, // vertical lineto\n v: 40,\n C: 5, // curveto\n c: 50,\n S: 6, // smooth curveto\n s: 60,\n Q: 7, // quadratic Belzier curve\n q: 70,\n T: 8, // smooth quadratic Belzier curveto\n t: 80,\n A: 9, //e lliptical Arc\n a: 90,\n Z: 11, // closepath\n z: 11,\n\n R: 12, // Catmull Rom\n\n // canvas\n ...CanvasCommandOnlyMap\n}\n\nexport const PathCommandLengthMap: INumberMap = {\n\n M: 3, //moveto\n m: 3,\n L: 3, //lineto\n l: 3,\n H: 2, //horizontal lineto\n h: 2,\n V: 2, //vertical lineto\n v: 2,\n C: 7, //curveto\n c: 7,\n S: 5, //smooth curveto\n s: 5,\n Q: 5, //quadratic Belzier curve\n q: 5,\n T: 3, //smooth quadratic Belzier curveto\n t: 3,\n A: 8, //elliptical Arc\n a: 8,\n Z: 1, //closepath\n z: 1,\n\n // canvas\n\n N: 5, // rect\n D: 9, // roundRect\n X: 6, // simple roundRect\n G: 9, // ellipse\n F: 5, // simple ellipse\n O: 7, // arc\n P: 4, // simple arc\n U: 6 // arcTo\n\n}\n\nexport const NeedConvertToCanvasCommandMap: INumberMap = { // convert to: M L C Q Z\n\n // M: 1, //moveto\n m: 10,\n // L: 2, //lineto\n l: 20,\n H: 3, //horizontal lineto\n h: 30,\n V: 4, //vertical lineto\n v: 40,\n // C: 5, //curveto\n c: 50,\n S: 6, //smooth curveto\n s: 60,\n // Q: 7, //quadratic Belzier curve\n q: 70,\n T: 8, //smooth quadratic Belzier curveto\n t: 80,\n A: 9, //elliptical Arc\n a: 90,\n // Z: 11, //closepath\n // z: 11\n\n}\n\n\nexport const NeedConvertToCurveCommandMap: INumberMap = {\n ...NeedConvertToCanvasCommandMap,\n ...CanvasCommandOnlyMap\n}\n\nconst P = PathCommandMap\n\nexport const PathNumberCommandMap: IStringMap = {}\nfor (let key in P) {\n PathNumberCommandMap[P[key]] = key\n}\n// {1: 'M'}\n\nexport const PathNumberCommandLengthMap: INumberMap = {}\nfor (let key in P) {\n PathNumberCommandLengthMap[P[key]] = PathCommandLengthMap[key]\n}\n// {1: 3}","import { IPathDrawer } from '@leafer/interface'\nimport { MathHelper } from '@leafer/math'\n\nexport const RectHelper = {\n\n drawRoundRect(drawer: IPathDrawer, x: number, y: number, width: number, height: number, cornerRadius: number | number[]): void {\n const data = MathHelper.fourNumber(cornerRadius, Math.min(width / 2, height / 2))\n\n const right = x + width\n const bottom = y + height\n\n data[0] ? drawer.moveTo(x + data[0], y) : drawer.moveTo(x, y)\n data[1] ? drawer.arcTo(right, y, right, bottom, data[1]) : drawer.lineTo(right, y)\n data[2] ? drawer.arcTo(right, bottom, x, bottom, data[2]) : drawer.lineTo(right, bottom)\n data[3] ? drawer.arcTo(x, bottom, x, y, data[3]) : drawer.lineTo(x, bottom)\n data[0] ? drawer.arcTo(x, y, right, y, data[0]) : drawer.lineTo(x, y)\n }\n\n}","import { IPointData, ITwoPointBoundsData, IPathCommandData } from '@leafer/interface'\nimport { OneRadian, PI2, PI_2, PointHelper, TwoPointBoundsHelper } from '@leafer/math'\n\nimport { PathCommandMap } from './PathCommandMap'\nimport { RectHelper } from './RectHelper'\nimport { PathHelper } from './PathHelper'\n\n\nconst { sin, cos, hypot, atan2, ceil, abs, PI, sqrt, pow } = Math\nconst { setPoint, addPoint } = TwoPointBoundsHelper\nconst { set, toNumberPoints } = PointHelper\nconst { M, L, C, Q, Z } = PathCommandMap\nconst tempPoint = {} as IPointData\n\nexport const BezierHelper = {\n\n points(data: IPathCommandData, originPoints: number[] | IPointData[], curve?: boolean | number, close?: boolean): void {\n\n let points = toNumberPoints(originPoints)\n\n data.push(M, points[0], points[1])\n\n if (curve && points.length > 5) {\n\n let aX: number, aY: number, bX: number, bY: number, cX: number, cY: number, c1X: number, c1Y: number, c2X: number, c2Y: number\n let ba: number, cb: number, d: number, len = points.length\n const t = curve === true ? 0.5 : curve as number\n\n if (close) {\n points = [points[len - 2], points[len - 1], ...points, points[0], points[1], points[2], points[3]]\n len = points.length\n }\n\n for (let i = 2; i < len - 2; i += 2) {\n aX = points[i - 2]\n aY = points[i - 1]\n\n bX = points[i]\n bY = points[i + 1]\n\n cX = points[i + 2]\n cY = points[i + 3]\n\n ba = sqrt(pow(bX - aX, 2) + pow(bY - aY, 2))\n cb = sqrt(pow(cX - bX, 2) + pow(cY - bY, 2))\n\n if (!ba && !cb) continue\n\n d = ba + cb\n ba = (t * ba) / d\n cb = (t * cb) / d\n\n cX -= aX\n cY -= aY\n\n c1X = bX - ba * cX\n c1Y = bY - ba * cY\n\n if (i === 2) {\n if (!close) data.push(Q, c1X, c1Y, bX, bY)\n } else {\n data.push(C, c2X, c2Y, c1X, c1Y, bX, bY)\n }\n\n c2X = bX + cb * cX\n c2Y = bY + cb * cY\n }\n\n if (!close) data.push(Q, c2X, c2Y, points[len - 2], points[len - 1])\n\n } else {\n\n for (let i = 2, len = points.length; i < len; i += 2) {\n data.push(L, points[i], points[i + 1])\n }\n\n }\n\n if (close) data.push(Z)\n },\n\n rect(data: IPathCommandData, x: number, y: number, width: number, height: number) {\n PathHelper.creator.path = data\n PathHelper.creator.moveTo(x, y).lineTo(x + width, y).lineTo(x + width, y + height).lineTo(x, y + height).lineTo(x, y)\n },\n\n roundRect(data: IPathCommandData, x: number, y: number, width: number, height: number, radius: number | number[]): void {\n PathHelper.creator.path = []\n RectHelper.drawRoundRect(PathHelper.creator, x, y, width, height, radius)\n data.push(...PathHelper.convertToCanvasData(PathHelper.creator.path, true))\n },\n\n arcTo(data: IPathCommandData | null | void, fromX: number, fromY: number, x1: number, y1: number, toX: number, toY: number, radius: number, setPointBounds?: ITwoPointBoundsData, setEndPoint?: IPointData, setStartPoint?: IPointData): void {\n const BAx = x1 - fromX\n const BAy = y1 - fromY\n const CBx = toX - x1\n const CBy = toY - y1\n\n let startRadian = atan2(BAy, BAx)\n let endRadian = atan2(CBy, CBx)\n\n const lenBA = hypot(BAx, BAy)\n const lenCB = hypot(CBx, CBy)\n\n let totalRadian = endRadian - startRadian\n if (totalRadian < 0) totalRadian += PI2\n\n if (lenBA < 1e-12 || lenCB < 1e-12 || totalRadian < 1e-12 || abs(totalRadian - PI) < 1e-12) {\n if (data) data.push(L, x1, y1)\n if (setPointBounds) {\n setPoint(setPointBounds, fromX, fromY)\n addPoint(setPointBounds, x1, y1)\n }\n if (setStartPoint) set(setStartPoint, fromX, fromY)\n if (setEndPoint) set(setEndPoint, x1, y1)\n return\n }\n\n const anticlockwise = BAx * CBy - CBx * BAy < 0\n const sign = anticlockwise ? -1 : 1\n const c = radius / cos(totalRadian / 2)\n\n const centerX = x1 + c * cos(startRadian + totalRadian / 2 + PI_2 * sign)\n const centerY = y1 + c * sin(startRadian + totalRadian / 2 + PI_2 * sign)\n startRadian -= PI_2 * sign\n endRadian -= PI_2 * sign\n\n return ellipse(data, centerX, centerY, radius, radius, 0, startRadian / OneRadian, endRadian / OneRadian, anticlockwise, setPointBounds, setEndPoint, setStartPoint)\n },\n\n arc(data: IPathCommandData | null | void, x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean, setPointBounds?: ITwoPointBoundsData, setEndPoint?: IPointData, setStartPoint?: IPointData): void {\n return ellipse(data, x, y, radius, radius, 0, startAngle, endAngle, anticlockwise, setPointBounds, setEndPoint, setStartPoint)\n },\n\n ellipse(data: IPathCommandData | null | void, cx: number, cy: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise?: boolean, setPointBounds?: ITwoPointBoundsData, setEndPoint?: IPointData, setStartPoint?: IPointData): void {\n const rotationRadian = rotation * OneRadian\n const rotationSin = sin(rotationRadian)\n const rotationCos = cos(rotationRadian)\n\n let startRadian = startAngle * OneRadian\n let endRadian = endAngle * OneRadian\n\n if (startRadian > PI) startRadian -= PI2\n if (endRadian < 0) endRadian += PI2\n\n let totalRadian = endRadian - startRadian\n if (totalRadian < 0) totalRadian += PI2\n else if (totalRadian > PI2) totalRadian -= PI2\n\n if (anticlockwise) totalRadian -= PI2\n\n\n const parts = ceil(abs(totalRadian / PI_2))\n const partRadian = totalRadian / parts\n const partRadian4Sin = sin(partRadian / 4)\n const control = 8 / 3 * partRadian4Sin * partRadian4Sin / sin(partRadian / 2)\n\n endRadian = startRadian + partRadian\n\n let startCos = cos(startRadian)\n let startSin = sin(startRadian)\n let endCos: number, endSin: number\n\n let x: number, y: number, x1: number, y1: number, x2: number, y2: number\n\n let startX = x = rotationCos * radiusX * startCos - rotationSin * radiusY * startSin\n let startY = y = rotationSin * radiusX * startCos + rotationCos * radiusY * startSin\n\n let fromX = cx + x, fromY = cy + y\n\n if (data) data.push(data.length ? L : M, fromX, fromY)\n if (setPointBounds) setPoint(setPointBounds, fromX, fromY)\n if (setStartPoint) set(setStartPoint, fromX, fromY)\n\n for (let i = 0; i < parts; i++) {\n\n endCos = cos(endRadian)\n endSin = sin(endRadian)\n\n x = rotationCos * radiusX * endCos - rotationSin * radiusY * endSin\n y = rotationSin * radiusX * endCos + rotationCos * radiusY * endSin\n x1 = cx + startX - control * (rotationCos * radiusX * startSin + rotationSin * radiusY * startCos)\n y1 = cy + startY - control * (rotationSin * radiusX * startSin - rotationCos * radiusY * startCos)\n x2 = cx + x + control * (rotationCos * radiusX * endSin + rotationSin * radiusY * endCos)\n y2 = cy + y + control * (rotationSin * radiusX * endSin - rotationCos * radiusY * endCos)\n\n if (data) data.push(C, x1, y1, x2, y2, cx + x, cy + y)\n if (setPointBounds) toTwoPointBounds(cx + startX, cy + startY, x1, y1, x2, y2, cx + x, cy + y, setPointBounds, true)\n\n startX = x\n startY = y\n startCos = endCos\n startSin = endSin\n startRadian = endRadian\n endRadian += partRadian\n }\n\n if (setEndPoint) set(setEndPoint, cx + x, cy + y)\n\n },\n\n quadraticCurveTo(data: IPathCommandData, fromX: number, fromY: number, x1: number, y1: number, toX: number, toY: number): void {\n data.push(C, (fromX + 2 * x1) / 3, (fromY + 2 * y1) / 3, (toX + 2 * x1) / 3, (toY + 2 * y1) / 3, toX, toY)\n },\n\n toTwoPointBoundsByQuadraticCurve(fromX: number, fromY: number, x1: number, y1: number, toX: number, toY: number, pointBounds: ITwoPointBoundsData, addMode?: boolean): void {\n toTwoPointBounds(fromX, fromY, (fromX + 2 * x1) / 3, (fromY + 2 * y1) / 3, (toX + 2 * x1) / 3, (toY + 2 * y1) / 3, toX, toY, pointBounds, addMode)\n },\n\n toTwoPointBounds(fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number, pointBounds: ITwoPointBoundsData, addMode?: boolean): void {\n\n const tList = []\n let a, b, c, t, t1, t2, v, sqrtV\n let f = fromX, z1 = x1, z2 = x2, o = toX\n\n for (let i = 0; i < 2; ++i) {\n\n if (i == 1) {\n f = fromY, z1 = y1, z2 = y2, o = toY\n }\n\n a = -3 * f + 9 * z1 - 9 * z2 + 3 * o\n b = 6 * f - 12 * z1 + 6 * z2\n c = 3 * z1 - 3 * f\n\n if (Math.abs(a) < 1e-12) {\n if (Math.abs(b) < 1e-12) continue\n t = -c / b\n if (0 < t && t < 1) tList.push(t)\n continue\n }\n\n v = b * b - 4 * c * a\n sqrtV = Math.sqrt(v)\n if (v < 0) continue\n\n t1 = (-b + sqrtV) / (2 * a)\n if (0 < t1 && t1 < 1) tList.push(t1)\n t2 = (-b - sqrtV) / (2 * a)\n if (0 < t2 && t2 < 1) tList.push(t2)\n }\n\n addMode ? addPoint(pointBounds, fromX, fromY) : setPoint(pointBounds, fromX, fromY)\n addPoint(pointBounds, toX, toY)\n\n for (let i = 0, len = tList.length; i < len; i++) {\n getPointAndSet(tList[i], fromX, fromY, x1, y1, x2, y2, toX, toY, tempPoint)\n addPoint(pointBounds, tempPoint.x, tempPoint.y)\n }\n\n },\n\n getPointAndSet(t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number, setPoint: IPointData): void {\n const o = 1 - t, a = o * o * o, b = 3 * o * o * t, c = 3 * o * t * t, d = t * t * t\n setPoint.x = a * fromX + b * x1 + c * x2 + d * toX\n setPoint.y = a * fromY + b * y1 + c * y2 + d * toY\n },\n\n getPoint(t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number): IPointData {\n const point = {} as IPointData\n getPointAndSet(t, fromX, fromY, x1, y1, x2, y2, toX, toY, point)\n return point\n },\n\n getDerivative(t: number, fromV: number, v1: number, v2: number, toV: number): number { // 导数\n const o = 1 - t\n return 3 * o * o * (v1 - fromV) + 6 * o * t * (v2 - v1) + 3 * t * t * (toV - v2)\n },\n\n}\n\nconst { getPointAndSet, toTwoPointBounds, ellipse } = BezierHelper","import { IPathCommandData } from '@leafer/interface'\nimport { OneRadian, PI2 } from '@leafer/math'\nimport { Platform } from '@leafer/platform'\n\nimport { PathCommandMap } from './PathCommandMap'\nimport { BezierHelper } from './BezierHelper'\n\n\nconst { sin, cos, sqrt, atan2 } = Math\nconst { ellipse } = BezierHelper\n\nexport const EllipseHelper = {\n\n // svg \n ellipticalArc(data: IPathCommandData, fromX: number, fromY: number, radiusX: number, radiusY: number, rotation: number, largeFlag: number, sweepFlag: number, toX: number, toY: number, curveMode?: boolean): void {\n\n const halfX = (toX - fromX) / 2\n const halfY = (toY - fromY) / 2\n\n const rotationRadian = rotation * OneRadian\n const rotationSin = sin(rotationRadian)\n const rotationCos = cos(rotationRadian)\n\n const px = -rotationCos * halfX - rotationSin * halfY\n const py = -rotationCos * halfY + rotationSin * halfX\n const rxSquare = radiusX * radiusX\n const rySquare = radiusY * radiusY\n const pySquare = py * py\n const pxSquare = px * px\n\n const a = rxSquare * rySquare - rxSquare * pySquare - rySquare * pxSquare\n let s = 0\n\n if (a < 0) {\n const t = sqrt(1 - a / (rxSquare * rySquare))\n radiusX *= t\n radiusY *= t\n } else {\n s = (largeFlag === sweepFlag ? -1 : 1) * sqrt(a / (rxSquare * pySquare + rySquare * pxSquare))\n }\n\n const cx = s * radiusX * py / radiusY\n const cy = -s * radiusY * px / radiusX\n\n const startRadian = atan2((py - cy) / radiusY, (px - cx) / radiusX)\n const endRadian = atan2((-py - cy) / radiusY, (-px - cx) / radiusX)\n\n let totalRadian = endRadian - startRadian\n\n if (sweepFlag === 0 && totalRadian > 0) {\n totalRadian -= PI2\n } else if (sweepFlag === 1 && totalRadian < 0) {\n totalRadian += PI2\n }\n\n const centerX = fromX + halfX + rotationCos * cx - rotationSin * cy\n const centerY = fromY + halfY + rotationSin * cx + rotationCos * cy\n\n const anticlockwise = totalRadian < 0 ? 1 : 0\n\n if (curveMode || Platform.ellipseToCurve) {\n ellipse(data, centerX, centerY, radiusX, radiusY, rotation, startRadian / OneRadian, endRadian / OneRadian, anticlockwise as unknown as boolean)\n } else {\n if (radiusX === radiusY && !rotation) {\n data.push(PathCommandMap.O, centerX, centerY, radiusX, startRadian / OneRadian, endRadian / OneRadian, anticlockwise)\n } else {\n data.push(PathCommandMap.G, centerX, centerY, radiusX, radiusY, rotation, startRadian / OneRadian, endRadian / OneRadian, anticlockwise)\n }\n }\n }\n\n}\n","import { IPathCommandData, IPathCommandObject, IPointData } from '@leafer/interface'\nimport { MathHelper, StringNumberMap } from '@leafer/math'\nimport { Debug } from '@leafer/debug'\n\nimport { PathCommandMap as Command, NeedConvertToCanvasCommandMap, NeedConvertToCurveCommandMap, PathCommandLengthMap, PathNumberCommandMap, PathNumberCommandLengthMap } from './PathCommandMap'\nimport { BezierHelper } from './BezierHelper'\nimport { EllipseHelper } from './EllipseHelper'\n\n\ninterface ICurrentCommand {\n name?: number\n length?: number\n index?: number\n dot?: number\n}\n\n\nconst { M, m, L, l, H, h, V, v, C, c, S, s, Q, q, T, t, A, a, Z, z, N, D, X, G, F, O, P, U } = Command\nconst { rect, roundRect, arcTo, arc, ellipse, quadraticCurveTo } = BezierHelper\nconst { ellipticalArc } = EllipseHelper\nconst debug = Debug.get('PathConvert')\n\nconst setEndPoint = {} as IPointData\n\nexport const PathConvert = {\n\n current: { dot: 0 } as ICurrentCommand,\n\n stringify(data: IPathCommandData, floatLength?: number): string {\n let i = 0, len = data.length, count: number, str: string = '', command: number, lastCommand: number\n while (i < len) {\n command = data[i]\n count = PathNumberCommandLengthMap[command]\n if (command === lastCommand) {\n str += ' ' // 重复的命令可以省略\n } else {\n str += PathNumberCommandMap[command]\n }\n\n for (let j = 1; j < count; j++) {\n str += MathHelper.float(data[i + j], floatLength);\n (j === count - 1) || (str += ' ')\n }\n\n lastCommand = command\n i += count\n }\n return str\n },\n\n parse(pathString: string, curveMode?: boolean): IPathCommandData {\n\n let needConvert: boolean, char: string, lastChar: string, num = ''\n const data: IPathCommandData = []\n const convertCommand = curveMode ? NeedConvertToCurveCommandMap : NeedConvertToCanvasCommandMap\n\n for (let i = 0, len = pathString.length; i < len; i++) {\n\n char = pathString[i]\n\n if (StringNumberMap[char]) {\n\n if (char === '.') {\n if (current.dot) { pushData(data, num); num = '' } // .375.375\n current.dot++\n }\n\n if (num === '0' && char !== '.') { pushData(data, num); num = '' } // 00 01\n\n num += char\n\n } else if (Command[char]) {\n\n if (num) { pushData(data, num); num = '' }\n\n current.name = Command[char]\n current.length = PathCommandLengthMap[char]\n current.index = 0\n pushData(data, current.name)\n\n if (!needConvert && convertCommand[char]) needConvert = true\n\n } else {\n\n if (char === '-' || char === '+') {\n\n if (lastChar === 'e' || lastChar === 'E') { // L45e-12 21e+22\n num += char\n } else {\n if (num) pushData(data, num) // L-34-35 L+12+28\n num = char\n }\n\n } else {\n if (num) { pushData(data, num); num = '' }\n }\n\n }\n\n lastChar = char\n\n }\n\n if (num) pushData(data, num)\n\n return needConvert ? PathConvert.toCanvasData(data, curveMode) : data\n },\n\n toCanvasData(old: IPathCommandData, curveMode?: boolean): IPathCommandData {\n\n let x = 0, y = 0, x1 = 0, y1 = 0, i = 0, len = old.length, controlX: number, controlY: number, command: number, lastCommand: number, smooth: boolean\n const data: IPathCommandData = []\n\n while (i < len) {\n\n command = old[i]\n\n switch (command) {\n //moveto(x, y)\n case m:\n old[i + 1] += x\n old[i + 2] += y\n case M:\n x = old[i + 1]\n y = old[i + 2]\n data.push(M, x, y)\n i += 3\n break\n\n //horizontal lineto(x)\n case h:\n old[i + 1] += x\n case H:\n x = old[i + 1]\n data.push(L, x, y)\n i += 2\n break\n\n //vertical lineto(y)\n case v:\n old[i + 1] += y\n case V:\n y = old[i + 1]\n data.push(L, x, y)\n i += 2\n break\n\n //lineto(x,y)\n case l:\n old[i + 1] += x\n old[i + 2] += y\n case L:\n x = old[i + 1]\n y = old[i + 2]\n data.push(L, x, y)\n i += 3\n break\n\n //smooth bezierCurveTo(x2, y2, x, y)\n case s: //smooth\n old[i + 1] += x\n old[i + 2] += y\n old[i + 3] += x\n old[i + 4] += y\n command = S\n case S:\n smooth = (lastCommand === C) || (lastCommand === S)\n x1 = smooth ? (x * 2 - controlX) : old[i + 1]\n y1 = smooth ? (y * 2 - controlY) : old[i + 2]\n controlX = old[i + 1]\n controlY = old[i + 2]\n x = old[i + 3]\n y = old[i + 4]\n data.push(C, x1, y1, controlX, controlY, x, y)\n i += 5\n break\n\n //bezierCurveTo(x1, y1, x2, y2, x, y)\n case c:\n old[i + 1] += x\n old[i + 2] += y\n old[i + 3] += x\n old[i + 4] += y\n old[i + 5] += x\n old[i + 6] += y\n command = C\n case C:\n controlX = old[i + 3]\n controlY = old[i + 4]\n x = old[i + 5]\n y = old[i + 6]\n data.push(C, old[i + 1], old[i + 2], controlX, controlY, x, y)\n i += 7\n break\n\n //smooth quadraticCurveTo(x, y)\n case t:\n old[i + 1] += x\n old[i + 2] += y\n command = T\n case T: //smooth\n smooth = (lastCommand === Q) || (lastCommand === T)\n controlX = smooth ? (x * 2 - controlX) : old[i + 1]\n controlY = smooth ? (y * 2 - controlY) : old[i + 2]\n curveMode ? quadraticCurveTo(data, x, y, controlX, controlY, old[i + 1], old[i + 2]) : data.push(Q, controlX, controlY, old[i + 1], old[i + 2])\n x = old[i + 1]\n y = old[i + 2]\n i += 3\n break\n\n //quadraticCurveTo(x1, y1, x, y)\n case q:\n old[i + 1] += x\n old[i + 2] += y\n old[i + 3] += x\n old[i + 4] += y\n command = Q\n case Q:\n controlX = old[i + 1]\n controlY = old[i + 2]\n curveMode ? quadraticCurveTo(data, x, y, controlX, controlY, old[i + 3], old[i + 4]) : data.push(Q, controlX, controlY, old[i + 3], old[i + 4])\n x = old[i + 3]\n y = old[i + 4]\n i += 5\n break\n\n //ellipticalArc(rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y)\n case a:\n old[i + 6] += x\n old[i + 7] += y\n case A:\n ellipticalArc(data, x, y, old[i + 1], old[i + 2], old[i + 3], old[i + 4], old[i + 5], old[i + 6], old[i + 7], curveMode) // convert to canvas ellipse or curve\n x = old[i + 6]\n y = old[i + 7]\n i += 8\n break\n case z:\n case Z:\n data.push(Z)\n i++\n break\n\n\n // canvas command\n\n case N: // rect(x, y, width, height)\n x = old[i + 1]\n y = old[i + 2]\n curveMode ? rect(data, x, y, old[i + 3], old[i + 4]) : copyData(data, old, i, 5)\n i += 5\n break\n case D: // roundRect(x, y, width, height, radius1, radius2, radius3, radius4)\n x = old[i + 1]\n y = old[i + 2]\n curveMode ? roundRect(data, x, y, old[i + 3], old[i + 4], [old[i + 5], old[i + 6], old[i + 7], old[i + 8]]) : copyData(data, old, i, 9)\n i += 9\n break\n case X: // simple roundRect(x, y, width, height, radius)\n x = old[i + 1]\n y = old[i + 2]\n curveMode ? roundRect(data, x, y, old[i + 3], old[i + 4], old[i + 5]) : copyData(data, old, i, 6)\n i += 6\n break\n case G: // ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)\n ellipse(curveMode ? data : copyData(data, old, i, 9), old[i + 1], old[i + 2], old[i + 3], old[i + 4], old[i + 5], old[i + 6], old[i + 7], old[i + 8] as unknown as boolean, null, setEndPoint)\n x = setEndPoint.x\n y = setEndPoint.y\n i += 9\n break\n case F: // simple ellipse(x, y, radiusX, radiusY)\n curveMode ? ellipse(data, old[i + 1], old[i + 2], old[i + 3], old[i + 4], 0, 0, 360, false) : copyData(data, old, i, 5)\n x = old[i + 1] + old[i + 3]\n y = old[i + 2]\n i += 5\n break\n case O: // arc(x, y, radius, startAngle, endAngle, anticlockwise)\n arc(curveMode ? data : copyData(data, old, i, 7), old[i + 1], old[i + 2], old[i + 3], old[i + 4], old[i + 5], old[i + 6] as unknown as boolean, null, setEndPoint)\n x = setEndPoint.x\n y = setEndPoint.y\n i += 7\n break\n case P: // simple arc(x, y, radius)\n curveMode ? arc(data, old[i + 1], old[i + 2], old[i + 3], 0, 360, false) : copyData(data, old, i, 4)\n x = old[i + 1] + old[i + 3]\n y = old[i + 2]\n i += 4\n break\n case U: // arcTo(x1, y1, x2, y2, radius)\n arcTo(curveMode ? data : copyData(data, old, i, 6), x, y, old[i + 1], old[i + 2], old[i + 3], old[i + 4], old[i + 5], null, setEndPoint)\n x = setEndPoint.x\n y = setEndPoint.y\n i += 6\n break\n default:\n debug.error(`command: ${command} [index:${i}]`, old)\n return data\n }\n\n lastCommand = command\n }\n\n return data\n\n },\n\n objectToCanvasData(list: IPathCommandObject[]): IPathCommandData {\n const data: IPathCommandData = []\n list.forEach(item => {\n switch (item.name) {\n case 'M': data.push(M, item.x, item.y); break\n case 'L': data.push(L, item.x, item.y); break\n case 'C': data.push(C, item.x1, item.y1, item.x2, item.y2, item.x, item.y); break\n case 'Q': data.push(Q, item.x1, item.y1, item.x, item.y); break\n case 'Z': data.push(Z)\n }\n })\n return data\n },\n\n copyData(data: IPathCommandData, old: IPathCommandData, index: number, count: number): void {\n for (let i = index, end = index + count; i < end; i++) {\n data.push(old[i])\n }\n },\n\n pushData(data: IPathCommandData, strNum: string | number) {\n if (current.index === current.length) { // 单个命令,多个数据的情况\n current.index = 1\n data.push(current.name)\n }\n\n data.push(Number(strNum))\n current.index++\n current.dot = 0\n }\n\n}\n\nconst { current, pushData, copyData } = PathConvert","import { IPathCommandData, IPointData } from '@leafer/interface'\nimport { MathHelper, PointHelper } from '@leafer/math'\nimport { isNumber, isUndefined, isNull } from '@leafer/data'\n\nimport { PathCommandMap } from './PathCommandMap'\nimport { BezierHelper } from './BezierHelper'\n\n\nconst { M, L, C, Q, Z, N, D, X, G, F, O, P, U } = PathCommandMap\nconst { getMinDistanceFrom, getRadianFrom } = PointHelper\nconst { tan, min, abs } = Math\nconst startPoint = {} as IPointData\n\nexport const PathCommandDataHelper = {\n\n beginPath(data: IPathCommandData): void {\n data.length = 0\n },\n\n // svg and canvas\n\n moveTo(data: IPathCommandData, x: number, y: number): void {\n data.push(M, x, y)\n },\n\n lineTo(data: IPathCommandData, x: number, y: number): void {\n data.push(L, x, y)\n },\n\n bezierCurveTo(data: IPathCommandData, x1: number, y1: number, x2: number, y2: number, x: number, y: number): void {\n data.push(C, x1, y1, x2, y2, x, y)\n },\n\n quadraticCurveTo(data: IPathCommandData, x1: number, y1: number, x: number, y: number): void {\n data.push(Q, x1, y1, x, y)\n },\n\n closePath(data: IPathCommandData): void {\n data.push(Z)\n },\n\n // canvas\n\n rect(data: IPathCommandData, x: number, y: number, width: number, height: number): void {\n data.push(N, x, y, width, height)\n },\n\n roundRect(data: IPathCommandData, x: number, y: number, width: number, height: number, cornerRadius: number | number[]): void {\n if (isNumber(cornerRadius)) {\n data.push(X, x, y, width, height, cornerRadius)\n } else {\n const fourCorners = MathHelper.fourNumber(cornerRadius)\n if (fourCorners) {\n data.push(D, x, y, width, height, ...fourCorners)\n } else {\n data.push(N, x, y, width, height)\n }\n }\n },\n\n ellipse(data: IPathCommandData, x: number, y: number, radiusX: number, radiusY: number, rotation?: number, startAngle?: number, endAngle?: number, anticlockwise?: boolean): void {\n if (isNull(rotation)) {\n data.push(F, x, y, radiusX, radiusY)\n } else {\n if (isNull(startAngle)) startAngle = 0\n if (isNull(endAngle)) endAngle = 360\n data.push(G, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise ? 1 : 0)\n }\n },\n\n arc(data: IPathCommandData, x: number, y: number, radius: number, startAngle?: number, endAngle?: number, anticlockwise?: boolean): void {\n if (isNull(startAngle)) {\n data.push(P, x, y, radius)\n } else {\n if (isNull(endAngle)) endAngle = 360\n data.push(O, x, y, radius, startAngle, endAngle, anticlockwise ? 1 : 0)\n }\n },\n\n arcTo(data: IPathCommandData, x1: number, y1: number, x2: number, y2: number, radius: number, lastX?: number, lastY?: number): void {\n if (!isUndefined(lastX)) {\n const d = getMinDistanceFrom(lastX, lastY, x1, y1, x2, y2)\n radius = min(radius, min(d / 2, d / 2 * abs(tan(getRadianFrom(lastX, lastY, x1, y1, x2, y2) / 2))))\n }\n data.push(U, x1, y1, x2, y2, radius)\n },\n\n // new\n\n drawEllipse(data: IPathCommandData, x: number, y: number, radiusX: number, radiusY: number, rotation?: number, startAngle?: number, endAngle?: number, anticlockwise?: boolean): void {\n BezierHelper.ellipse(null, x, y, radiusX, radiusY, isNull(rotation) ? 0 : rotation, isNull(startAngle) ? 0 : startAngle, isNull(endAngle) ? 360 : endAngle, anticlockwise, null, null, startPoint)\n data.push(M, startPoint.x, startPoint.y)\n ellipse(data, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)\n },\n\n drawArc(data: IPathCommandData, x: number, y: number, radius: number, startAngle?: number, endAngle?: number, anticlockwise?: boolean): void {\n BezierHelper.arc(null, x, y, radius, isNull(startAngle) ? 0 : startAngle, isNull(endAngle) ? 360 : endAngle, anticlockwise, null, null, startPoint)\n data.push(M, startPoint.x, startPoint.y)\n arc(data, x, y, radius, startAngle, endAngle, anticlockwise)\n },\n\n drawPoints(data: IPathCommandData, points: number[] | IPointData[], curve?: boolean | number, close?: boolean): void {\n BezierHelper.points(data, points, curve, close)\n }\n\n}\n\nconst { ellipse, arc } = PathCommandDataHelper\n","import { IPathCommandData, IPathCreator, IPathString, IPointData } from '@leafer/interface'\nimport { isString } from '@leafer/data'\n\nimport { PathCommandDataHelper } from './PathCommandDataHelper'\nimport { PathHelper } from './PathHelper'\n\n\nconst { moveTo, lineTo, quadraticCurveTo, bezierCurveTo, closePath, beginPath, rect, roundRect, ellipse, arc, arcTo, drawEllipse, drawArc, drawPoints } = PathCommandDataHelper\n\nexport class PathCreator implements IPathCreator { // tip: rewrited Pen\n\n public set path(value: IPathCommandData) { this.__path = value }\n public get path() { return this.__path }\n\n public __path: IPathCommandData // 提供一个更安全的内部变量(比如覆盖给Pen时需要用到,避免与原有属性冲突)\n\n constructor(path?: IPathCommandData | IPathString) {\n this.set(path)\n }\n\n public set(path?: IPathCommandData | IPathString): PathCreator {\n this.__path = path ? (isString(path) ? PathHelper.parse(path) : path) : []\n return this\n }\n\n public beginPath(): PathCreator {\n beginPath(this.__path)\n this.paint()\n return this\n }\n\n // svg and canvas\n\n public moveTo(x: number, y: number): PathCreator {\n moveTo(this.__path, x, y)\n this.paint()\n return this\n }\n\n public lineTo(x: number, y: number): PathCreator {\n lineTo(this.__path, x, y)\n this.paint()\n return this\n }\n\n public bezierCurveTo(x1: number, y1: number, x2: number, y2: number, x: number, y: number): PathCreator {\n bezierCurveTo(this.__path, x1, y1, x2, y2, x, y)\n this.paint()\n return this\n }\n\n public quadraticCurveTo(x1: number, y1: number, x: number, y: number): PathCreator {\n quadraticCurveTo(this.__path, x1, y1, x, y)\n this.paint()\n return this\n }\n\n public closePath(): PathCreator {\n closePath(this.__path)\n this.paint()\n return this\n }\n\n // canvas\n\n public rect(x: number, y: number, width: number, height: number): PathCreator {\n rect(this.__path, x, y, width, height)\n this.paint()\n return this\n }\n\n public roundRect(x: number, y: number, width: number, height: number, cornerRadius: number | number[]): PathCreator {\n roundRect(this.__path, x, y, width, height, cornerRadius)\n this.paint()\n return this\n }\n\n public ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation?: number, startAngle?: number, endAngle?: number, anticlockwise?: boolean): PathCreator {\n ellipse(this.__path, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)\n this.paint()\n return this\n }\n\n public arc(x: number, y: number, radius: number, startAngle?: number, endAngle?: number, anticlockwise?: boolean): PathCreator {\n arc(this.__path, x, y, radius, startAngle, endAngle, anticlockwise)\n this.paint()\n return this\n }\n\n public arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): PathCreator {\n arcTo(this.__path, x1, y1, x2, y2, radius)\n this.paint()\n return this\n }\n\n // moveTo, then draw\n\n public drawEllipse(x: number, y: number, radiusX: number, radiusY: number, rotation?: number, startAngle?: number, endAngle?: number, anticlockwise?: boolean): PathCreator {\n drawEllipse(this.__path, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)\n this.paint()\n return this\n }\n\n public drawArc(x: number, y: number, radius: number, startAngle?: number, endAngle?: number, anticlockwise?: boolean): PathCreator {\n drawArc(this.__path, x, y, radius, startAngle, endAngle, anticlockwise)\n this.paint()\n return this\n }\n\n public drawPoints(points: number[] | IPointData[], curve?: boolean | number, close?: boolean): PathCreator {\n drawPoints(this.__path, points, curve, close)\n this.paint()\n return this\n }\n\n public clearPath(): PathCreator {\n return this.beginPath()\n }\n\n public paint(): void { }\n\n}\n","import { IPathDrawer, IPathCommandData } from '@leafer/interface'\nimport { OneRadian, PI2 } from '@leafer/math'\nimport { Debug } from '@leafer/debug'\n\nimport { PathCommandMap as Command } from './PathCommandMap'\n\n\nconst { M, L, C, Q, Z, N, D, X, G, F, O, P, U } = Command\nconst debug = Debug.get('PathDrawer')\n\nexport const PathDrawer = {\n\n drawPathByData(drawer: IPathDrawer, data: IPathCommandData): void {\n if (!data) return\n\n let command: number\n let i = 0, len = data.length\n\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n drawer.moveTo(data[i + 1], data[i + 2])\n i += 3\n break\n case L: //lineto(x, y)\n drawer.lineTo(data[i + 1], data[i + 2])\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x, y)\n drawer.bezierCurveTo(data[i + 1], data[i + 2], data[i + 3], data[i + 4], data[i + 5], data[i + 6])\n i += 7\n break\n case Q: //quadraticCurveTo(x1, y1, x, y)\n drawer.quadraticCurveTo(data[i + 1], data[i + 2], data[i + 3], data[i + 4])\n i += 5\n break\n case Z: //closepath()\n drawer.closePath()\n i += 1\n break\n\n // canvas command\n\n case N: // rect(x, y, width, height)\n drawer.rect(data[i + 1], data[i + 2], data[i + 3], data[i + 4])\n i += 5\n break\n case D: // roundRect(x, y, width, height, radius1, radius2, radius3, radius4)\n drawer.roundRect(data[i + 1], data[i + 2], data[i + 3], data[i + 4], [data[i + 5], data[i + 6], data[i + 7], data[i + 8]])\n i += 9\n break\n case X: // simple roundRect(x, y, width, height, radius)\n drawer.roundRect(data[i + 1], data[i + 2], data[i + 3], data[i + 4], data[i + 5])\n i += 6\n break\n case G: // ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)\n drawer.ellipse(data[i + 1], data[i + 2], data[i + 3], data[i + 4], data[i + 5] * OneRadian, data[i + 6] * OneRadian, data[i + 7] * OneRadian, data[i + 8] as unknown as boolean)\n i += 9\n break\n case F: // simple ellipse(x, y, radiusX, radiusY)\n drawer.ellipse(data[i + 1], data[i + 2], data[i + 3], data[i + 4], 0, 0, PI2, false)\n i += 5\n break\n case O: // arc(x, y, radius, startAngle, endAngle, anticlockwise)\n drawer.arc(data[i + 1], data[i + 2], data[i + 3], data[i + 4] * OneRadian, data[i + 5] * OneRadian, data[i + 6] as unknown as boolean)\n i += 7\n break\n case P: // simple arc(x, y, radius)\n drawer.arc(data[i + 1], data[i + 2], data[i + 3], 0, PI2, false)\n i += 4\n break\n case U: // arcTo(x1, y1, x2, y2, radius)\n drawer.arcTo(data[i + 1], data[i + 2], data[i + 3], data[i + 4], data[i + 5])\n i += 6\n break\n default:\n debug.error(`command: ${command} [index:${i}]`, data)\n return\n }\n }\n\n }\n\n}","import { ITwoPointBoundsData, IPathCommandData, IBoundsData, IPointData } from '@leafer/interface'\nimport { TwoPointBoundsHelper } from '@leafer/math'\nimport { Debug } from '@leafer/debug'\n\nimport { BezierHelper } from './BezierHelper'\nimport { PathCommandMap as Command } from './PathCommandMap'\n\n\nconst { M, L, C, Q, Z, N, D, X, G, F, O, P, U } = Command\nconst { toTwoPointBounds, toTwoPointBoundsByQuadraticCurve, arcTo, arc, ellipse } = BezierHelper\nconst { addPointBounds, copy, addPoint, setPoint, addBounds, toBounds } = TwoPointBoundsHelper\nconst debug = Debug.get('PathBounds')\n\nlet radius: number, radiusX: number, radiusY: number\nconst tempPointBounds = {} as ITwoPointBoundsData\nconst setPointBounds = {} as ITwoPointBoundsData\nconst setEndPoint = {} as IPointData\n\nexport const PathBounds = {\n\n toBounds(data: IPathCommandData, setBounds: IBoundsData): void {\n PathBounds.toTwoPointBounds(data, setPointBounds)\n toBounds(setPointBounds, setBounds)\n },\n\n toTwoPointBounds(data: IPathCommandData, setPointBounds: ITwoPointBoundsData): void {\n if (!data || !data.length) return setPoint(setPointBounds, 0, 0)\n\n let i = 0, x = 0, y = 0, x1: number, y1: number, toX: number, toY: number, command: number\n\n const len = data.length\n\n while (i < len) {\n command = data[i]\n\n if (i === 0) {\n if (command === Z || command === C || command === Q) {\n setPoint(setPointBounds, x, y)\n } else {\n setPoint(setPointBounds, data[i + 1], data[i + 2])\n }\n }\n\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n x = data[i + 1]\n y = data[i + 2]\n addPoint(setPointBounds, x, y)\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n toX = data[i + 5]\n toY = data[i + 6]\n toTwoPointBounds(x, y, data[i + 1], data[i + 2], data[i + 3], data[i + 4], toX, toY, tempPointBounds)\n addPointBounds(setPointBounds, tempPointBounds)\n x = toX\n y = toY\n i += 7\n break\n case Q: //quadraticCurveTo(x1, y1, x, y)\n x1 = data[i + 1]\n y1 = data[i + 2]\n toX = data[i + 3]\n toY = data[i + 4]\n toTwoPointBoundsByQuadraticCurve(x, y, x1, y1, toX, toY, tempPointBounds)\n addPointBounds(setPointBounds, tempPointBounds)\n x = toX\n y = toY\n i += 5\n break\n case Z: //closepath()\n i += 1\n break\n\n // canvas command\n\n case N: // rect(x, y, width, height)\n x = data[i + 1]\n y = data[i + 2]\n addBounds(setPointBounds, x, y, data[i + 3], data[i + 4])\n i += 5\n break\n case D: // roundRect(x, y, width, height, radius1, radius2, radius3, radius4)\n case X: // simple roundRect(x, y, width, height, radius)\n x = data[i + 1]\n y = data[i + 2]\n addBounds(setPointBounds, x, y, data[i + 3], data[i + 4])\n i += (command === D ? 9 : 6)\n break\n case G: // ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)\n ellipse(null, data[i + 1], data[i + 2], data[i + 3], data[i + 4], data[i + 5], data[i + 6], data[i + 7], data[i + 8] as unknown as boolean, tempPointBounds, setEndPoint)\n i === 0 ? copy(setPointBounds, tempPointBounds) : addPointBounds(setPointBounds, tempPointBounds)\n x = setEndPoint.x\n y = setEndPoint.y\n i += 9\n break\n case F: // simple ellipse(x, y, radiusX, radiusY)\n x = data[i + 1]\n y = data[i + 2]\n radiusX = data[i + 3]\n radiusY = data[i + 4]\n addBounds(setPointBounds, x - radiusX, y - radiusY, radiusX * 2, radiusY * 2)\n x += radiusX\n i += 5\n break\n case O: // arc(x, y, radius, startAngle, endAngle, anticlockwise)\n arc(null, data[i + 1], data[i + 2], data[i + 3], data[i + 4], data[i + 5], data[i + 6] as unknown as boolean, tempPointBounds, setEndPoint)\n i === 0 ? copy(setPointBounds, tempPointBounds) : addPointBounds(setPointBounds, tempPointBounds)\n x = setEndPoint.x\n y = setEndPoint.y\n i += 7\n break\n case P: // simple arc(x, y, radius)\n x = data[i + 1]\n y = data[i + 2]\n radius = data[i + 3]\n addBounds(setPointBounds, x - radius, y - radius, radius * 2, radius * 2)\n x += radius\n i += 4\n break\n case U: // arcTo(x1, y1, x2, y2, radius)\n arcTo(null, x, y, data[i + 1], data[i + 2], data[i + 3], data[i + 4], data[i + 5], tempPointBounds, setEndPoint)\n i === 0 ? copy(setPointBounds, tempPointBounds) : addPointBounds(setPointBounds, tempPointBounds)\n x = setEndPoint.x\n y = setEndPoint.y\n i += 6\n break\n default:\n debug.error(`command: ${command} [index:${i}]`, data)\n return\n }\n }\n\n }\n\n}","import { IPathCommandData } from '@leafer/interface'\nimport { PointHelper } from '@leafer/math'\n\nimport { PathCommandMap as Command, PathNumberCommandLengthMap } from './PathCommandMap'\nimport { PathCommandDataHelper } from './PathCommandDataHelper'\n\n\nconst { M, L, Z } = Command\nconst { getCenterX, getCenterY } = PointHelper\nconst { arcTo } = PathCommandDataHelper\n\nexport const PathCorner = {\n\n smooth(data: IPathCommandData, cornerRadius: number, _cornerSmoothing?: number): IPathCommandData {\n\n let command: number, lastCommand: number, commandLen\n let i = 0, x = 0, y = 0, startX = 0, startY = 0, secondX = 0, secondY = 0, lastX = 0, lastY = 0\n\n const len = data.length\n const smooth: IPathCommandData = []\n\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n startX = lastX = data[i + 1]\n startY = lastY = data[i + 2]\n i += 3\n if (data[i] === L) { // next lineTo\n secondX = data[i + 1]\n secondY = data[i + 2]\n smooth.push(M, getCenterX(startX, secondX), getCenterY(startY, secondY))\n } else {\n smooth.push(M, startX, startY)\n }\n break\n case L: //lineto(x, y)\n x = data[i + 1]\n y = data[i + 2]\n i += 3\n switch (data[i]) { // next command\n case L: // lineTo()\n arcTo(smooth, x, y, data[i + 1], data[i + 2], cornerRadius, lastX, lastY) // use arcTo(x1, y1, x2, y2, radius)\n break\n case Z: // closePath()\n arcTo(smooth, x, y, startX, startY, cornerRadius, lastX, lastY) // use arcTo(x1, y1, x2, y2, radius)\n break\n default:\n smooth.push(L, x, y)\n }\n lastX = x\n lastY = y\n break\n case Z: //closepath()\n if (lastCommand !== Z) { // fix: 重复的 Z 导致的问题\n arcTo(smooth, startX, startY, secondX, secondY, cornerRadius, lastX, lastY) // use arcTo(x1, y1, x2, y2, radius)\n smooth.push(Z)\n }\n i += 1\n break\n default:\n commandLen = PathNumberCommandLengthMap[command]\n for (let j = 0; j < commandLen; j++) smooth.push(data[i + j])\n i += commandLen\n }\n lastCommand = command\n }\n\n if (command !== Z) {\n smooth[1] = startX\n smooth[2] = startY\n }\n\n return smooth\n }\n\n}","export { PathHelper } from './PathHelper'\nexport { PathConvert } from './PathConvert'\nexport { PathCreator } from './PathCreator'\nexport { PathCommandDataHelper } from './PathCommandDataHelper'\nexport { PathDrawer } from './PathDrawer'\nexport { PathBounds } from './PathBounds'\nexport { PathCorner } from './PathCorner'\nexport { BezierHelper } from './BezierHelper'\nexport { EllipseHelper } from './EllipseHelper'\nexport { RectHelper } from './RectHelper'\nexport { PathCommandMap, NeedConvertToCanvasCommandMap, PathNumberCommandMap, PathNumberCommandLengthMap } from './PathCommandMap'\n\n// rewrite, prevent circular references\n\nimport { PathConvert } from './PathConvert'\nimport { PathCreator } from './PathCreator'\nimport { PathHelper } from './PathHelper'\n\nimport { IPathCommandData, IPathString } from '@leafer/interface'\n\n\nexport function path(path?: IPathCommandData | IPathString): PathCreator {\n return new PathCreator(path)\n}\n\nexport const pen = path()\n\nPathHelper.creator = path()\nPathHelper.parse = PathConvert.parse\nPathHelper.convertToCanvasData = PathConvert.toCanvasData","import { IPathDrawer } from '@leafer/interface'\nimport { RectHelper } from '@leafer/path'\n\n\nconst { drawRoundRect } = RectHelper\n\nexport function roundRect(drawer: IPathDrawer): void {\n\n if (drawer && !drawer.roundRect) {\n\n drawer.roundRect = function (x: number, y: number, width: number, height: number, cornerRadius: number | number[]): void {\n\n drawRoundRect(this as IPathDrawer, x, y, width, height, cornerRadius)\n }\n }\n\n}\n\n","import { IExportFileType, IStringMap, IExportOptions } from '@leafer/interface'\n\nexport const FileHelper = {\n\n alphaPixelTypes: ['png', 'webp', 'svg'] as IExportFileType[],\n\n upperCaseTypeMap: {} as IStringMap,\n\n mineType(type: string): string {\n if (!type || type.startsWith('image')) return type\n if (type === 'jpg') type = 'jpeg'\n return 'image/' + type\n },\n\n fileType(filename: string): string {\n const l = filename.split('.')\n return l[l.length - 1]\n },\n\n isOpaqueImage(filename: string): boolean {\n const type = F.fileType(filename)\n return ['jpg', 'jpeg'].some(item => item === type)\n },\n\n getExportOptions(options?: IExportOptions | number | boolean): IExportOptions {\n switch (typeof options) {\n case 'object': return options\n case 'number': return { quality: options }\n case 'boolean': return { blob: options }\n default: return {}\n }\n }\n\n}\n\nconst F = FileHelper\n\nF.alphaPixelTypes.forEach(type => F.upperCaseTypeMap[type] = type.toUpperCase())","import { IFunction, ITaskItem } from '@leafer/interface'\nimport { IncrementId } from '@leafer/math'\nimport { Debug } from '@leafer/debug'\n\nimport { TaskProcessor } from './TaskProcessor'\n\n\nconst debug = Debug.get('TaskProcessor')\nexport class TaskItem implements ITaskItem {\n\n readonly id: number\n\n public parent: TaskProcessor\n\n public parallel = true\n public time = 1 // 预估任务需要运行的时间, 毫秒为单位\n\n public isComplete: boolean\n public isCancel: boolean\n\n private task: IFunction\n\n constructor(task?: IFunction) {\n this.id = IncrementId.create(IncrementId.TASK)\n this.task = task\n }\n\n async run(): Promise<void> {\n try {\n if (this.task && !this.isComplete && this.parent.running) await this.task()\n } catch (error) {\n debug.error(error)\n }\n }\n\n public complete(): void {\n this.isComplete = true\n this.parent = null\n this.task = null\n }\n\n public cancel(): void {\n this.isCancel = true\n this.complete()\n }\n\n}","import { IFunction, ITaskProcessor, ITaskProcessorConfig, ITaskOptions, ITaskItem } from '@leafer/interface'\nimport { DataHelper, isNumber, isUndefined } from '@leafer/data'\n\nimport { TaskItem } from './TaskItem'\n\n\nexport class TaskProcessor implements ITaskProcessor {\n\n public config: ITaskProcessorConfig = { parallel: 6 }\n\n protected list: ITaskItem[] = []\n\n protected parallelList: ITaskItem[]\n protected parallelSuccessNumber: number\n\n public running = false\n public isComplete = true\n\n protected timer: any\n\n public get total(): number { return this.list.length + this.delayNumber }\n\n public index = 0\n\n public delayNumber = 0 // 延迟执行任务\n\n public get finishedIndex(): number {\n return this.isComplete ? 0 : this.index + this.parallelSuccessNumber\n }\n\n public get remain(): number {\n return this.isComplete ? this.total : this.total - this.finishedIndex\n }\n\n public get percent(): number {\n const { total } = this\n let totalTime = 0, runTime = 0\n\n for (let i = 0; i < total; i++) {\n if (i <= this.finishedIndex) {\n runTime += this.list[i].time\n if (i === this.finishedIndex) totalTime = runTime\n } else {\n totalTime += this.list[i].time\n }\n }\n\n return this.isComplete ? 1 : (runTime / totalTime)\n }\n\n\n constructor(config?: ITaskProcessorConfig) {\n if (config) DataHelper.assign(this.config, config)\n this.empty()\n }\n\n // list\n\n public add(taskCallback: IFunction, options?: ITaskOptions | number): ITaskItem {\n let start: boolean, parallel: boolean, time: number, delay: number\n\n const task = new TaskItem(taskCallback)\n task.parent = this\n\n if (isNumber(options)) {\n delay = options\n } else if (options) {\n parallel = options.parallel\n start = options.start\n time = options.time\n delay = options.delay\n }\n\n if (time) task.time = time\n if (parallel === false) task.parallel = false\n\n if (isUndefined(delay)) {\n this.push(task, start)\n } else {\n this.delayNumber++\n setTimeout(() => {\n if (this.delayNumber) {\n this.delayNumber--\n this.push(task, start)\n }\n }, delay)\n }\n\n this.isComplete = false\n\n return task\n }\n\n protected push(task: ITaskItem, start?: boolean): void {\n this.list.push(task)\n if (start !== false && !this.timer) {\n this.timer = setTimeout(() => this.start())\n }\n }\n\n protected empty(): void {\n this.index = 0\n this.parallelSuccessNumber = 0\n this.list = []\n this.parallelList = []\n this.delayNumber = 0\n }\n\n // control\n\n public start(): void {\n if (!this.running) {\n this.running = true\n this.isComplete = false\n this.run()\n }\n }\n\n public pause(): void {\n clearTimeout(this.timer)\n this.timer = null\n this.running = false\n }\n\n public resume(): void {\n this.start()\n }\n\n public skip(): void {\n this.index++\n this.resume()\n }\n\n public stop(): void {\n this.isComplete = true\n this.list.forEach(task => { if (!task.isComplete) task.cancel() })\n this.pause()\n this.empty()\n }\n\n // run \n\n protected run(): void {\n if (!this.running) return\n\n this.setParallelList()\n\n if (this.parallelList.length > 1) {\n\n this.runParallelTasks()\n\n } else {\n\n this.remain ? this.runTask() : this.onComplete()\n\n }\n }\n\n protected runTask(): void {\n const task = this.list[this.index]\n if (!task) {\n this.nextTask() // 存在延时任务\n return\n }\n task.run().then(() => {\n\n this.onTask(task)\n\n this.index++\n this.nextTask()\n\n }).catch(error => {\n this.onError(error)\n })\n }\n\n protected runParallelTasks(): void {\n this.parallelList.forEach(task => this.runParallelTask(task))\n }\n\n protected runParallelTask(task: ITaskItem): void {\n task.run().then(() => {\n\n this.onTask(task)\n this.fillParallelTask()\n\n }).catch(error => {\n this.onParallelError(error)\n })\n }\n\n private nextTask(): void {\n if (this.total === this.finishedIndex) {\n this.onComplete()\n } else {\n this.timer = setTimeout(() => this.run())\n }\n }\n\n protected setParallelList(): void {\n let task: ITaskItem\n\n this.parallelList = []\n this.parallelSuccessNumber = 0\n let end = this.index + this.config.parallel\n\n if (end > this.list.length) end = this.list.length\n\n for (let i = this.index; i < end; i++) {\n task = this.list[i]\n if (task.parallel) {\n this.parallelList.push(task)\n } else {\n break\n }\n }\n }\n\n\n protected fillParallelTask(): void {\n let task: ITaskItem\n const parallelList = this.parallelList\n\n // 完成一个任务\n this.parallelSuccessNumber++\n parallelList.pop()\n\n // 找到下一个可以并行的任务\n const parallelWaitNumber = parallelList.length\n const nextIndex = this.finishedIndex + parallelWaitNumber\n\n if (parallelList.length) {\n\n if (!this.running) return\n\n if (nextIndex < this.total) {\n\n task = this.list[nextIndex]\n\n if (task && task.parallel) {\n parallelList.push(task)\n this.runParallelTask(task)\n }\n\n }\n\n } else {\n\n this.index += this.parallelSuccessNumber\n this.parallelSuccessNumber = 0\n this.nextTask()\n\n }\n }\n\n // event\n\n protected onComplete(): void {\n this.stop()\n if (this.config.onComplete) this.config.onComplete()\n }\n\n protected onTask(task: ITaskItem): void {\n task.complete()\n if (this.config.onTask) this.config.onTask()\n }\n\n protected onParallelError(error: unknown): void {\n // 并行变串行, 以便下次重试\n this.parallelList.forEach(task => {\n task.parallel = false\n })\n this.parallelList.length = 0\n this.parallelSuccessNumber = 0\n\n this.onError(error)\n }\n\n protected onError(error: unknown): void {\n this.pause()\n if (this.config.onError) this.config.onError(error)\n }\n\n public destroy(): void {\n this.stop()\n }\n}","import { ILeaferImage, IResource, IObject, ILeaferCanvas, IExportFileType, ILeaferImageConfig } from '@leafer/interface'\n\nimport { Creator } from '@leafer/platform'\nimport { TaskProcessor } from '@leafer/task'\nimport { isString } from '@leafer/data'\nimport { Debug } from '@leafer/debug'\n\n\nconst debug = Debug.get('Resource')\n\nexport const Resource: IResource = {\n\n tasker: new TaskProcessor(),\n\n map: {},\n\n get isComplete() { return R.tasker.isComplete },\n\n // 通用\n\n set(key: string, value: any): void {\n if (R.map[key]) debug.repeat(key)\n R.map[key] = value\n },\n\n get(key: string): any {\n return R.map[key]\n },\n\n remove(key: string) {\n const r = R.map[key]\n if (r) {\n if (r.destroy) r.destroy()\n delete R.map[key]\n }\n },\n\n // image\n\n loadImage(key: string, format?: IExportFileType): Promise<ILeaferImage> {\n return new Promise((resolve, reject) => {\n const image = this.setImage(key, key, format)\n image.load(() => resolve(image), (e: any) => reject(e))\n })\n },\n\n setImage(key: string, value: string | IObject | ILeaferImage | ILeaferCanvas, format?: IExportFileType): ILeaferImage {\n let config: ILeaferImageConfig\n if (isString(value)) config = { url: value }\n else if (!value.url) config = { url: key, view: value }\n if (config) format && (config.format = format), value = Creator.image(config)\n R.set(key, value)\n return value as ILeaferImage\n },\n\n\n destroy(): void {\n R.map = {}\n }\n\n}\n\nconst R = Resource","import { IImageManager, ILeaferImageConfig, ILeaferImage, IExportFileType } from '@leafer/interface'\nimport { Creator } from '@leafer/platform'\nimport { FileHelper, Resource } from '@leafer/file'\nimport { TaskProcessor } from '@leafer/task'\n\n\nexport const ImageManager: IImageManager = {\n\n maxRecycled: 10,\n\n recycledList: [],\n\n patternTasker: new TaskProcessor(),\n\n get(config: ILeaferImageConfig): ILeaferImage {\n let image: ILeaferImage = Resource.get(config.url)\n if (!image) Resource.set(config.url, image = Creator.image(config))\n image.use++\n return image\n },\n\n recycle(image: ILeaferImage): void {\n image.use--\n setTimeout(() => { if (!image.use) I.recycledList.push(image) })\n },\n\n clearRecycled(): void {\n const list = I.recycledList\n if (list.length > I.maxRecycled) {\n list.forEach(image => (!image.use && image.url) && Resource.remove(image.url))\n list.length = 0\n }\n },\n\n hasAlphaPixel(config: ILeaferImageConfig): boolean {\n return FileHelper.alphaPixelTypes.some(item => I.isFormat(item, config))\n },\n\n isFormat(format: IExportFileType, config: ILeaferImageConfig): boolean {\n if (config.format) return config.format === format\n const { url } = config\n if (url.startsWith('data:')) {\n if (url.startsWith('data:' + FileHelper.mineType(format))) return true\n } else {\n if (url.includes('.' + format) || url.includes('.' + FileHelper.upperCaseTypeMap[format])) return true\n else if (format === 'png' && !url.includes('.')) return true // blob: 等无后缀名协议的图片无法分析类型,直接当透明图片处理\n }\n return false\n },\n\n destroy(): void {\n I.recycledList = []\n }\n\n}\n\nconst I = ImageManager","import { ILeaferImage, ILeaferImageConfig, IFunction, IObject, InnerId, IMatrixData, ICanvasPattern, ILeaferImageCacheCanvas, ILeaferImagePatternPaint, IProgressData } from '@leafer/interface'\nimport { Platform } from '@leafer/platform'\nimport { Resource } from '@leafer/file'\nimport { IncrementId } from '@leafer/math'\nimport { DataHelper } from '@leafer/data'\n\nimport { ImageManager } from './ImageManager'\n\n\nconst { IMAGE, create } = IncrementId\nconst { floor, max } = Math\n\nexport class LeaferImage implements ILeaferImage {\n\n public readonly innerId: InnerId\n public get url() { return this.config.url }\n\n public view: any\n\n public width: number\n public height: number\n\n public isSVG: boolean\n public hasAlphaPixel: boolean // check png / svg / webp\n\n public get completed() { return this.ready || !!this.error }\n\n public ready: boolean\n public error: IObject\n public loading: boolean\n\n public progress: IProgressData\n\n public use = 0\n\n public config: ILeaferImageConfig\n\n protected waitComplete: IFunction[] = []\n\n protected cache: ILeaferImageCacheCanvas\n\n constructor(config: ILeaferImageConfig) {\n this.innerId = create(IMAGE)\n this.config = config || (config = { url: '' })\n if (config.view) {\n const { view } = config\n this.setView(view.config ? view.view : view)\n }\n\n ImageManager.isFormat('svg', config) && (this.isSVG = true)\n ImageManager.hasAlphaPixel(config) && (this.hasAlphaPixel = true)\n }\n\n public load(onSuccess?: IFunction, onError?: IFunction): number {\n if (!this.loading) {\n this.loading = true\n let { loadImage, loadImageWithProgress } = Platform.origin, onProgress = this.config.showProgress && loadImageWithProgress && this.onProgress.bind(this)\n if (onProgress) loadImage = loadImageWithProgress\n Resource.tasker.add(async () => await loadImage(this.url, onProgress).then(img => this.setView(img)).catch((e) => {\n this.error = e\n this.onComplete(false)\n }))\n }\n this.waitComplete.push(onSuccess, onError)\n return this.waitComplete.length - 2\n }\n\n public unload(index: number, stopEvent?: boolean): void {\n const l = this.waitComplete\n if (stopEvent) {\n const error = l[index + 1]\n if (error) error({ type: 'stop' })\n }\n l[index] = l[index + 1] = undefined\n }\n\n protected setView(img: any): void {\n this.ready = true\n this.width = img.naturalWidth || img.width\n this.height = img.naturalHeight || img.height\n this.view = img\n this.onComplete(true)\n }\n\n protected onProgress(progress: IProgressData): void {\n this.progress = progress\n }\n\n protected onComplete(isSuccess: boolean): void {\n let odd: number\n this.waitComplete.forEach((item, index) => {\n odd = index % 2\n if (item) {\n if (isSuccess) {\n if (!odd) item(this)\n } else {\n if (odd) item(this.error)\n }\n }\n })\n this.waitComplete.length = 0\n this.loading = false\n }\n\n public getFull(_filters?: IObject): any {\n return this.view\n }\n\n public getCanvas(width: number, height: number, opacity?: number, _filters?: IObject, xGap?: number, yGap?: number, smooth?: boolean): any {\n width || (width = this.width)\n height || (height = this.height)\n\n if (this.cache) { // when use > 1, check cache\n let { params, data } = this.cache\n for (let i in params) { if (params[i] !== arguments[i]) { data = null; break } }\n if (data) return data\n }\n\n const canvas = Platform.origin.createCanvas(max(floor(width + (xGap || 0)), 1), max(floor(height + (yGap || 0)), 1))\n const ctx = canvas.getContext('2d')\n if (opacity) ctx.globalAlpha = opacity\n ctx.imageSmoothingEnabled = smooth === false ? false : true // 平滑绘制\n ctx.drawImage(this.view, 0, 0, width, height)\n\n this.cache = this.use > 1 ? { data: canvas, params: arguments } : null\n\n return canvas\n }\n\n public getPattern(canvas: any, repeat: string | null, transform?: IMatrixData, paint?: ILeaferImagePatternPaint): ICanvasPattern {\n const pattern = Platform.canvas.createPattern(canvas, repeat)\n try {\n if (transform && pattern.setTransform) {\n pattern.setTransform(transform) // maybe error \n transform = undefined\n }\n } catch { }\n if (paint) DataHelper.stintSet(paint, 'transform', transform)\n return pattern\n }\n\n public destroy(): void {\n this.config = { url: '' }\n this.cache = null\n this.waitComplete.length = 0\n }\n\n}","import { IObject, IValue } from '@leafer/interface'\n\nexport function defineKey<T>(target: T, key: string, descriptor: IObject & ThisType<T>, noConfigurable?: boolean): void {\n if (!noConfigurable) descriptor.configurable = descriptor.enumerable = true\n Object.defineProperty(target, key, descriptor)\n}\n\nexport function getDescriptor(object: IObject, name: string) {\n return Object.getOwnPropertyDescriptor(object, name)\n}\n\nexport function createDescriptor(key: string, defaultValue?: IValue) {\n const privateKey = '_' + key\n return {\n get() { const v = (this as IObject)[privateKey]; return v == null ? defaultValue : v },\n set(value: IValue) { (this as IObject)[privateKey] = value }\n }\n}\n\nexport function getNames(object: IObject): string[] {\n return Object.getOwnPropertyNames(object)\n}\n\n","import { ILeafData, ILeaf, IObject, IValue, ILeafAttrDescriptor, ILeafAttrDescriptorFn, IValueFunction, IMatrixWithBoundsScaleData } from '@leafer/interface'\nimport { DataHelper, isEmptyData, isObject, isUndefined } from '@leafer/data'\nimport { Debug } from '@leafer/debug'\n\nimport { defineKey, getDescriptor, createDescriptor } from './object'\n\n\n// name\n\nexport function decorateLeafAttr(defaultValue?: IValue, descriptorFn?: ILeafAttrDescriptorFn) {\n return (target: ILeaf, key: string) => defineLeafAttr(target, key, defaultValue, descriptorFn && descriptorFn(key))\n}\n\nexport function attr(partDescriptor?: ILeafAttrDescriptor): ILeafAttrDescriptor {\n return partDescriptor\n}\n\n\nexport function defineLeafAttr(target: ILeaf, key: string, defaultValue?: IValue, partDescriptor?: ILeafAttrDescriptor): void {\n const defaultDescriptor: ILeafAttrDescriptor = {\n get() { return this.__getAttr(key) },\n set(value: IValue) { this.__setAttr(key, value) }\n }\n defineKey(target, key, Object.assign(defaultDescriptor, partDescriptor || {}))\n defineDataProcessor(target, key, defaultValue)\n}\n\n\nexport function dataType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue)\n}\n\nexport function positionType(defaultValue?: IValue, checkFiniteNumber?: boolean) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n this.__setAttr(key, value, checkFiniteNumber) && (this.__layout.matrixChanged || this.__layout.matrixChange())\n }\n }))\n}\n\nexport function scrollType(defaultValue?: IValue, checkFiniteNumber?: boolean) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n if (this.__setAttr(key, value, checkFiniteNumber)) {\n this.__layout.matrixChanged || this.__layout.matrixChange()\n this.__scrollWorld || (this.__scrollWorld = {} as IMatrixWithBoundsScaleData)\n }\n }\n }))\n}\n\nexport function autoLayoutType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n if (this.__setAttr(key, value)) {\n this.__hasAutoLayout = !!(this.origin || this.around || this.flow)\n if (!this.__local) this.__layout.createLocal()\n doBoundsType(this)\n }\n }\n }))\n}\n\nexport function scaleType(defaultValue?: IValue, checkFiniteNumber?: boolean) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n this.__setAttr(key, value, checkFiniteNumber) && (this.__layout.scaleChanged || this.__layout.scaleChange())\n\n }\n }))\n}\n\nexport function rotationType(defaultValue?: IValue, checkFiniteNumber?: boolean) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n this.__setAttr(key, value, checkFiniteNumber) && (this.__layout.rotationChanged || this.__layout.rotationChange())\n }\n\n }))\n}\n\nexport function boundsType(defaultValue?: IValue, checkFiniteNumber?: boolean) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n this.__setAttr(key, value, checkFiniteNumber) && doBoundsType(this)\n }\n }))\n}\n\nexport function naturalBoundsType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n this.__setAttr(key, value) && (doBoundsType(this), this.__.__removeNaturalSize())\n }\n }))\n}\n\nexport function doBoundsType(leaf: ILeaf): void {\n leaf.__layout.boxChanged || leaf.__layout.boxChange()\n if (leaf.__hasAutoLayout) leaf.__layout.matrixChanged || leaf.__layout.matrixChange()\n}\n\nexport function pathInputType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n const data = this.__\n if (data.__pathInputed !== 2) data.__pathInputed = value ? 1 : 0\n if (!value) data.__pathForRender = undefined\n this.__setAttr(key, value)\n doBoundsType(this)\n }\n }))\n}\n\nexport const pathType = boundsType\n\n\nexport function affectStrokeBoundsType(defaultValue?: IValue, useStroke?: boolean) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n if (this.__setAttr(key, value)) {\n doStrokeType(this)\n if (useStroke) this.__.__useStroke = true\n }\n }\n }))\n}\n\nexport function doStrokeType(leaf: ILeaf): void {\n leaf.__layout.strokeChanged || leaf.__layout.strokeChange()\n if (leaf.__.__useArrow) doBoundsType(leaf)\n}\n\nexport const strokeType = affectStrokeBoundsType\n\nexport function affectRenderBoundsType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n this.__setAttr(key, value)\n this.__layout.renderChanged || this.__layout.renderChange()\n }\n }))\n}\n\nexport function surfaceType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n this.__setAttr(key, value) && (this.__layout.surfaceChanged || this.__layout.surfaceChange())\n }\n }))\n}\n\nexport function opacityType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n this.__setAttr(key, value) && (this.__layout.opacityChanged || this.__layout.opacityChange())\n if (this.mask) checkMask(this)\n }\n }))\n}\n\nexport function visibleType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n const oldValue = this.visible\n if (oldValue === true && value === 0) {\n if (this.animationOut) return this.__runAnimation('out', () => doVisible(this, key, value, oldValue)) // hide\n } else if (oldValue === 0 && value === true) {\n if (this.animation) this.__runAnimation('in') // show\n }\n doVisible(this, key, value, oldValue)\n if (this.mask) checkMask(this)\n }\n }))\n}\n\nfunction checkMask(leaf: ILeaf): void { // mask 的透明度和可见性变更,会影响parent\n const { parent } = leaf\n if (parent) {\n const { __hasMask } = parent\n parent.__updateMask()\n if (__hasMask !== parent.__hasMask) parent.forceUpdate()\n }\n}\n\nfunction doVisible(leaf: ILeaf, key: string, value: IValue, oldValue: IValue): void {\n if (leaf.__setAttr(key, value)) {\n leaf.__layout.opacityChanged || leaf.__layout.opacityChange()\n if (oldValue === 0 || value === 0) doBoundsType(leaf) // 0 = display: none\n }\n}\n\nexport function sortType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n if (this.__setAttr(key, value)) {\n this.__layout.surfaceChanged || this.__layout.surfaceChange()\n this.waitParent(() => { this.parent.__layout.childrenSortChange() })\n }\n }\n }))\n}\n\nexport function maskType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: boolean) {\n if (this.__setAttr(key, value)) {\n this.__layout.boxChanged || this.__layout.boxChange()\n this.waitParent(() => { this.parent.__updateMask(value) })\n }\n }\n }))\n}\n\nexport function eraserType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: boolean) {\n this.__setAttr(key, value) && this.waitParent(() => { this.parent.__updateEraser(value) })\n }\n }))\n}\n\nexport function hitType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n if (this.__setAttr(key, value)) {\n this.__layout.hitCanvasChanged = true\n if (Debug.showBounds === 'hit') this.__layout.surfaceChanged || this.__layout.surfaceChange()\n if (this.leafer) this.leafer.updateCursor()\n }\n }\n }))\n}\n\nexport function cursorType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n this.__setAttr(key, value)\n if (this.leafer) this.leafer.updateCursor()\n }\n }))\n}\n\n\n// get\n\nexport function dataProcessor(processor: IObject) {\n return (target: IObject, _key?: string) => {\n defineKey(target, '__DataProcessor', {\n get() { return processor }\n })\n }\n}\n\nexport function layoutProcessor(processor: IObject) {\n return (target: IObject, _key?: string) => {\n defineKey(target, '__LayoutProcessor', {\n get() { return processor }\n })\n }\n}\n\n\n// other \n\nfunction getSetMethodName(key: string): string {\n return 'set' + key.charAt(0).toUpperCase() + key.slice(1)\n}\n\n\n// define leaf.__[key] getter/setter\nexport function defineDataProcessor(target: ILeaf, key: string, defaultValue?: IValue | IValueFunction): void {\n\n const data = target.__DataProcessor.prototype\n const computedKey = '_' + key\n const setMethodName = getSetMethodName(key)\n\n const property: IObject & ThisType<ILeafData> = createDescriptor(key, defaultValue)\n\n if (isUndefined(defaultValue)) {\n property.get = function () { return this[computedKey] }\n } else if (typeof defaultValue === 'function') {\n property.get = function () {\n const v = this[computedKey]\n return v == null ? defaultValue((this as ILeafData).__leaf) : v\n }\n } else if (isObject(defaultValue)) {\n const isEmpty = isEmptyData(defaultValue)\n property.get = function () {\n const v = this[computedKey]\n return v == null ? this[computedKey] = isEmpty ? {} : DataHelper.clone(defaultValue) : v\n }\n }\n\n const isBox = target.isBranchLeaf // 仅用于 width / height\n if (key === 'width') {\n property.get = function () {\n const v = this[computedKey]\n if (v == null) {\n const t = this as ILeafData, naturalWidth = t.__naturalWidth, leaf = t.__leaf\n if (!defaultValue || leaf.pathInputed) return leaf.boxBounds.width\n if (naturalWidth) return (t as IObject)._height && t.__useNaturalRatio ? (t as IObject)._height * naturalWidth / t.__naturalHeight : naturalWidth\n return (isBox && leaf.children.length) ? leaf.boxBounds.width : defaultValue // 返回 Box / Group / Text 等的实际宽度\n } else return v\n }\n } else if (key === 'height') {\n property.get = function () {\n const v = this[computedKey]\n if (v == null) {\n const t = this as ILeafData, naturalHeight = t.__naturalHeight, leaf = t.__leaf\n if (!defaultValue || leaf.pathInputed) return leaf.boxBounds.height\n if (naturalHeight) return (t as IObject)._width && t.__useNaturalRatio ? (t as IObject)._width * naturalHeight / t.__naturalWidth : naturalHeight\n return (isBox && leaf.children.length) ? leaf.boxBounds.height : defaultValue // 返回 Box / Group / Text 等的实际高度\n } else return v\n }\n }\n\n // find parent proto\n let descriptor, find = data\n while (!descriptor && find) {\n descriptor = getDescriptor(find, key)\n find = find.__proto__\n }\n\n if (descriptor && descriptor.set) property.set = descriptor.set // use exist set\n\n if (data[setMethodName]) {\n property.set = data[setMethodName] // first use custom setKey(value)\n delete data[setMethodName]\n }\n\n defineKey(data, key, property)\n\n}\n\n","import { IObject, IFunction } from '@leafer/interface'\nimport { Debug } from '@leafer/debug'\nimport { getDescriptor, getNames } from './object'\n\ninterface IRewriteItem {\n name: string\n run: IFunction\n}\n\nconst debug = new Debug('rewrite')\n\nconst list: IRewriteItem[] = []\nconst excludeNames = ['destroy', 'constructor']\n\n\n// method\n\nexport function rewrite(method: IFunction) {\n return (target: IObject, key: string) => {\n list.push({ name: target.constructor.name + '.' + key, run: () => { target[key] = method } })\n }\n}\n\nexport function rewriteAble() {\n return (_target: IObject) => {\n doRewrite()\n }\n}\n\nfunction doRewrite(error?: boolean): void {\n if (list.length) {\n list.forEach(item => {\n if (error) debug.error(item.name, '需在Class上装饰@rewriteAble()')\n item.run()\n })\n list.length = 0\n }\n}\n\nsetTimeout(() => doRewrite(true))\n\n\n// class\n\nexport function useModule(module: IObject, exclude?: string[]) {\n return (target: IObject) => {\n const names = module.prototype ? getNames(module.prototype) : Object.keys(module)\n names.forEach(name => {\n if (!excludeNames.includes(name) && (!exclude || !exclude.includes(name))) {\n if (module.prototype) {\n const d = getDescriptor(module.prototype, name)\n if (d.writable) target.prototype[name] = module.prototype[name]\n } else {\n target.prototype[name] = module[name]\n }\n }\n })\n }\n}","import { IAlign, ILeaf, IMatrixData, IPointData, IAxis, ITransition, ILeaferCanvas, IBoundsData, IMatrixWithBoundsData } from '@leafer/interface'\nimport { MathHelper, MatrixHelper, PointHelper, AroundHelper, getMatrixData, BoundsHelper } from '@leafer/math'\nimport { Platform } from '@leafer/platform'\nimport { isObject, isNumber } from '@leafer/data'\n\n\nconst { copy, toInnerPoint, toOuterPoint, scaleOfOuter, rotateOfOuter, skewOfOuter, multiplyParent, divideParent, getLayout } = MatrixHelper\nconst matrix = {} as IMatrixData, { round } = Math\n\nexport const LeafHelper = {\n\n updateAllMatrix(leaf: ILeaf, checkAutoLayout?: boolean, waitAutoLayout?: boolean): void {\n if (checkAutoLayout && leaf.__hasAutoLayout && leaf.__layout.matrixChanged) waitAutoLayout = true\n\n updateMatrix(leaf, checkAutoLayout, waitAutoLayout)\n\n if (leaf.isBranch) {\n const { children } = leaf\n for (let i = 0, len = children.length; i < len; i++) {\n updateAllMatrix(children[i], checkAutoLayout, waitAutoLayout)\n }\n }\n },\n\n updateMatrix(leaf: ILeaf, checkAutoLayout?: boolean, waitAutoLayout?: boolean): void {\n const layout = leaf.__layout\n\n if (checkAutoLayout) {\n if (waitAutoLayout) {\n layout.waitAutoLayout = true\n if (leaf.__hasAutoLayout) layout.matrixChanged = false // wait updateAutoLayout\n }\n } else if (layout.waitAutoLayout) {\n layout.waitAutoLayout = false\n }\n\n if (layout.matrixChanged) leaf.__updateLocalMatrix()\n if (!layout.waitAutoLayout) leaf.__updateWorldMatrix()\n },\n\n updateBounds(leaf: ILeaf): void {\n const layout = leaf.__layout\n if (layout.boundsChanged) leaf.__updateLocalBounds()\n if (!layout.waitAutoLayout) leaf.__updateWorldBounds()\n },\n\n updateAllWorldOpacity(leaf: ILeaf): void {\n leaf.__updateWorldOpacity()\n\n if (leaf.isBranch) {\n const { children } = leaf\n for (let i = 0, len = children.length; i < len; i++) {\n updateAllWorldOpacity(children[i])\n }\n }\n },\n\n updateChange(leaf: ILeaf): void {\n const layout = leaf.__layout\n if (layout.stateStyleChanged) leaf.updateState()\n if (layout.opacityChanged) updateAllWorldOpacity(leaf)\n leaf.__updateChange()\n },\n\n updateAllChange(leaf: ILeaf): void {\n updateChange(leaf)\n if (leaf.isBranch) {\n const { children } = leaf\n for (let i = 0, len = children.length; i < len; i++) {\n updateAllChange(children[i])\n }\n }\n },\n\n worldHittable(t: ILeaf): boolean {\n while (t) {\n if (!t.__.hittable) return false\n t = t.parent\n }\n return true\n },\n\n draggable(t: ILeaf): boolean {\n return (t.draggable || t.editable) && t.hitSelf && !t.locked\n },\n\n copyCanvasByWorld(leaf: ILeaf, currentCanvas: ILeaferCanvas, fromCanvas: ILeaferCanvas, fromWorld?: IBoundsData, blendMode?: string, onlyResetTransform?: boolean): void {\n if (!fromWorld) fromWorld = leaf.__nowWorld\n if (leaf.__worldFlipped || Platform.fullImageShadow) currentCanvas.copyWorldByReset(fromCanvas, fromWorld, leaf.__nowWorld, blendMode, onlyResetTransform)\n else currentCanvas.copyWorldToInner(fromCanvas, fromWorld as IMatrixWithBoundsData, leaf.__layout.renderBounds, blendMode)\n },\n\n // transform\n\n moveWorld(t: ILeaf, x: number | IPointData, y = 0, isInnerPoint?: boolean, transition?: ITransition): void {\n const local = isObject(x) ? { ...x } : { x, y }\n isInnerPoint ? toOuterPoint(t.localTransform, local, local, true) : (t.parent && toInnerPoint(t.parent.scrollWorldTransform, local, local, true))\n L.moveLocal(t, local.x, local.y, transition)\n },\n\n moveLocal(t: ILeaf, x: number | IPointData, y = 0, transition?: ITransition): void {\n if (isObject(x)) y = x.y, x = x.x\n x += t.x\n y += t.y\n if (t.leafer && t.leafer.config.pointSnap) x = round(x), y = round(y)\n transition ? t.animate({ x, y }, transition) : (t.x = x, t.y = y)\n },\n\n zoomOfWorld(t: ILeaf, origin: IPointData, scaleX: number, scaleY?: number | ITransition, resize?: boolean, transition?: ITransition): void {\n L.zoomOfLocal(t, getTempLocal(t, origin), scaleX, scaleY, resize, transition)\n },\n\n zoomOfLocal(t: ILeaf, origin: IPointData, scaleX: number, scaleY: number | ITransition = scaleX, resize?: boolean, transition?: ITransition): void {\n const o = t.__localMatrix\n if (!isNumber(scaleY)) {\n if (scaleY) transition = scaleY\n scaleY = scaleX\n }\n copy(matrix, o)\n scaleOfOuter(matrix, origin, scaleX, scaleY)\n if (L.hasHighPosition(t)) {\n L.setTransform(t, matrix, resize, transition)\n } else {\n const x = t.x + matrix.e - o.e, y = t.y + matrix.f - o.f\n if (transition && !resize) t.animate({ x, y, scaleX: t.scaleX * scaleX, scaleY: t.scaleY * scaleY }, transition)\n else t.x = x, t.y = y, t.scaleResize(scaleX, scaleY, resize !== true)\n }\n },\n\n rotateOfWorld(t: ILeaf, origin: IPointData, angle: number, transition?: ITransition): void {\n L.rotateOfLocal(t, getTempLocal(t, origin), angle, transition)\n },\n\n rotateOfLocal(t: ILeaf, origin: IPointData, angle: number, transition?: ITransition): void {\n const o = t.__localMatrix\n copy(matrix, o)\n rotateOfOuter(matrix, origin, angle)\n if (L.hasHighPosition(t)) L.setTransform(t, matrix, false, transition)\n else t.set({ x: t.x + matrix.e - o.e, y: t.y + matrix.f - o.f, rotation: MathHelper.formatRotation(t.rotation + angle) }, transition)\n },\n\n skewOfWorld(t: ILeaf, origin: IPointData, skewX: number, skewY?: number, resize?: boolean, transition?: ITransition): void {\n L.skewOfLocal(t, getTempLocal(t, origin), skewX, skewY, resize, transition)\n },\n\n skewOfLocal(t: ILeaf, origin: IPointData, skewX: number, skewY: number = 0, resize?: boolean, transition?: ITransition): void {\n copy(matrix, t.__localMatrix)\n skewOfOuter(matrix, origin, skewX, skewY)\n L.setTransform(t, matrix, resize, transition)\n },\n\n transformWorld(t: ILeaf, transform: IMatrixData, resize?: boolean, transition?: ITransition): void {\n copy(matrix, t.worldTransform)\n multiplyParent(matrix, transform)\n if (t.parent) divideParent(matrix, t.parent.scrollWorldTransform)\n L.setTransform(t, matrix, resize, transition)\n },\n\n transform(t: ILeaf, transform: IMatrixData, resize?: boolean, transition?: ITransition): void {\n copy(matrix, t.localTransform)\n multiplyParent(matrix, transform)\n L.setTransform(t, matrix, resize, transition)\n },\n\n setTransform(t: ILeaf, transform: IMatrixData, resize?: boolean, transition?: ITransition): void {\n const data = t.__, originPoint = data.origin && L.getInnerOrigin(t, data.origin)\n const layout = getLayout(transform, originPoint, data.around && L.getInnerOrigin(t, data.around))\n\n if (L.hasOffset(t)) {\n layout.x -= data.offsetX\n layout.y -= data.offsetY\n }\n\n if (resize) {\n const scaleX = layout.scaleX / t.scaleX, scaleY = layout.scaleY / t.scaleY\n delete layout.scaleX, delete layout.scaleY\n\n if (originPoint) { // fix origin: resize 方式下 boxBounds 会变化,导致 originPoint 不准确,需偏移至正确的位置\n BoundsHelper.scale(t.boxBounds, Math.abs(scaleX), Math.abs(scaleY))\n const changedPoint = L.getInnerOrigin(t, data.origin)\n PointHelper.move(layout, originPoint.x - changedPoint.x, originPoint.y - changedPoint.y)\n }\n\n t.set(layout)\n t.scaleResize(scaleX, scaleY, false)\n\n } else t.set(layout, transition)\n },\n\n getFlipTransform(t: ILeaf, axis: IAxis): IMatrixData {\n const m = getMatrixData()\n const sign = axis === 'x' ? 1 : -1\n scaleOfOuter(m, L.getLocalOrigin(t, 'center'), -1 * sign, 1 * sign)\n return m\n },\n\n getLocalOrigin(t: ILeaf, origin: IPointData | IAlign): IPointData {\n return PointHelper.tempToOuterOf(L.getInnerOrigin(t, origin), t.localTransform)\n },\n\n getInnerOrigin(t: ILeaf, origin: IPointData | IAlign): IPointData {\n const innerOrigin = {} as IPointData\n AroundHelper.toPoint(origin, t.boxBounds, innerOrigin)\n return innerOrigin\n },\n\n getRelativeWorld(t: ILeaf, relative: ILeaf, temp?: boolean): IMatrixData {\n copy(matrix, t.worldTransform)\n divideParent(matrix, relative.scrollWorldTransform)\n return temp ? matrix : { ...matrix }\n },\n\n drop(t: ILeaf, parent: ILeaf, index?: number, resize?: boolean): void {\n t.setTransform(L.getRelativeWorld(t, parent, true), resize)\n parent.add(t, index)\n },\n\n hasHighPosition(t: ILeaf): boolean {\n return (t.origin || t.around || L.hasOffset(t)) as unknown as boolean\n },\n\n hasOffset(t: ILeaf): boolean {\n return (t.offsetX || t.offsetY) as unknown as boolean\n },\n\n hasParent(p: ILeaf, parent: ILeaf): boolean | void {\n if (!parent) return false\n while (p) {\n if (parent === p) return true\n p = p.parent\n }\n },\n\n // 简单动画操作\n\n animateMove(t: ILeaf, move: IPointData, speed = 0.3) {\n if (!move.x && !move.y) return\n if (Math.abs(move.x) < 1 && Math.abs(move.y) < 1) {\n t.move(move)\n } else {\n const x = move.x * speed, y = move.y * speed\n move.x -= x, move.y -= y\n t.move(x, y)\n Platform.requestRender(() => L.animateMove(t, move, speed))\n }\n }\n\n}\n\nconst L = LeafHelper\nconst { updateAllMatrix, updateMatrix, updateAllWorldOpacity, updateAllChange, updateChange } = L\n\nfunction getTempLocal(t: ILeaf, worldPoint: IPointData): IPointData {\n t.updateLayout() // must\n return t.parent ? PointHelper.tempToInnerOf(worldPoint, t.parent.scrollWorldTransform) : worldPoint\n}","import { ILeaf, IBoundsData, IRenderOptions } from '@leafer/interface'\n\n\nexport const LeafBoundsHelper = {\n\n worldBounds(target: ILeaf): IBoundsData {\n return target.__world\n },\n\n localBoxBounds(target: ILeaf): IBoundsData {\n return target.__.eraser || target.__.visible === 0 ? null : (target.__local || target.__layout)\n },\n\n localStrokeBounds(target: ILeaf): IBoundsData {\n return target.__.eraser || target.__.visible === 0 ? null : target.__layout.localStrokeBounds\n },\n\n localRenderBounds(target: ILeaf): IBoundsData {\n return target.__.eraser || target.__.visible === 0 ? null : target.__layout.localRenderBounds\n },\n\n maskLocalBoxBounds(target: ILeaf, index: number): IBoundsData {\n return checkMask(target, index) && target.__localBoxBounds\n },\n\n maskLocalStrokeBounds(target: ILeaf, index: number): IBoundsData {\n return checkMask(target, index) && target.__layout.localStrokeBounds\n },\n\n maskLocalRenderBounds(target: ILeaf, index: number): IBoundsData {\n return checkMask(target, index) && target.__layout.localRenderBounds\n },\n\n excludeRenderBounds(child: ILeaf, options: IRenderOptions): boolean {\n if (options.bounds && !options.bounds.hit(child.__world, options.matrix)) return true\n if (options.hideBounds && options.hideBounds.includes(child.__world, options.matrix)) return true\n return false\n }\n\n}\n\n\nlet findMask: number\n\nfunction checkMask(target: ILeaf, index: number): boolean {\n if (!index) findMask = 0\n if (target.__.mask) findMask = 1\n return findMask < 0 ? null : (findMask && (findMask = -1), true) // 第一个 mask 元素之后的元素 bounds 可以忽略,返回 null\n}","import { ILeaf, ILeafLevelList, ILeafList } from '@leafer/interface'\nimport { isUndefined } from '@leafer/data'\nimport { LeafHelper } from './LeafHelper'\n\nconst { updateBounds } = LeafHelper\n\nexport const BranchHelper = {\n\n sort(a: ILeaf, b: ILeaf): number {\n return (a.__.zIndex === b.__.zIndex) ? (a.__tempNumber - b.__tempNumber) : (a.__.zIndex - b.__.zIndex)\n },\n\n // push\n\n pushAllChildBranch(branch: ILeaf, leafList: ILeafList | ILeafLevelList): void {\n branch.__tempNumber = 1 // 标识需要更新子Leaf元素的WorldBounds分支 Layouter需使用\n\n if (branch.__.__childBranchNumber) {\n const { children } = branch\n for (let i = 0, len = children.length; i < len; i++) {\n branch = children[i]\n if (branch.isBranch) {\n branch.__tempNumber = 1\n leafList.add(branch)\n pushAllChildBranch(branch, leafList)\n }\n }\n }\n },\n\n pushAllParent(leaf: ILeaf, leafList: ILeafList | ILeafLevelList): void {\n const { keys } = (leafList as ILeafList)\n if (keys) {\n while (leaf.parent) {\n if (isUndefined(keys[leaf.parent.innerId])) {\n leafList.add(leaf.parent)\n leaf = leaf.parent\n } else {\n break\n }\n }\n } else {\n while (leaf.parent) {\n leafList.add(leaf.parent)\n leaf = leaf.parent\n }\n }\n },\n\n pushAllBranchStack(branch: ILeaf, pushList: ILeaf[]): void {\n let start = pushList.length\n const { children } = branch\n for (let i = 0, len = children.length; i < len; i++) {\n if (children[i].isBranch) {\n pushList.push(children[i])\n }\n }\n\n // 找子级\n for (let i = start, len = pushList.length; i < len; i++) {\n pushAllBranchStack(pushList[i], pushList)\n }\n },\n\n updateBounds(branch: ILeaf, exclude?: ILeaf): void {\n const branchStack: ILeaf[] = [branch]\n pushAllBranchStack(branch, branchStack)\n updateBoundsByBranchStack(branchStack, exclude)\n },\n\n updateBoundsByBranchStack(branchStack: ILeaf[], exclude?: ILeaf): void {\n let branch: ILeaf, children: ILeaf[]\n for (let i = branchStack.length - 1; i > -1; i--) {\n branch = branchStack[i]\n children = branch.children\n for (let j = 0, len = children.length; j < len; j++) {\n updateBounds(children[j])\n }\n if (exclude && exclude === branch) continue\n updateBounds(branch)\n }\n }\n}\n\nconst { pushAllChildBranch, pushAllBranchStack, updateBoundsByBranchStack } = BranchHelper","import { IFunction } from '@leafer/interface'\n\nexport const WaitHelper = {\n run(wait: IFunction[]): void {\n if (wait && wait.length) {\n const len = wait.length\n for (let i = 0; i < len; i++) { wait[i]() }\n wait.length === len ? wait.length = 0 : wait.splice(0, len)\n }\n }\n}","import { ILeaf, ILeafLayout, ILocationType, IBoundsType, IBoundsData, IMatrixData, ILayoutBoundsData, IPointData } from '@leafer/interface'\nimport { Bounds, BoundsHelper, MatrixHelper, PointHelper } from '@leafer/math'\nimport { isUndefined } from '@leafer/data'\nimport { LeafHelper } from '@leafer/helper'\nimport { Platform } from '@leafer/platform'\n\n\nconst { getRelativeWorld, updateBounds } = LeafHelper\nconst { toOuterOf, getPoints, copy } = BoundsHelper\nconst localContent = '_localContentBounds'\nconst worldContent = '_worldContentBounds', worldBox = '_worldBoxBounds', worldStroke = '_worldStrokeBounds'\n\nexport class LeafLayout implements ILeafLayout {\n\n public leaf: ILeaf\n\n public proxyZoom: boolean\n\n // inner\n\n public get contentBounds(): IBoundsData { return this._contentBounds || this.boxBounds }\n public set contentBounds(bounds: IBoundsData) { this._contentBounds = bounds }\n public boxBounds: IBoundsData\n public get strokeBounds(): IBoundsData { return this._strokeBounds || this.boxBounds }\n public get renderBounds(): IBoundsData { return this._renderBounds || this.boxBounds }\n public set renderBounds(bounds: IBoundsData) { this._renderBounds = bounds }\n\n public _contentBounds: IBoundsData\n public _strokeBounds: IBoundsData\n public _renderBounds: IBoundsData\n\n // local\n\n public get localContentBounds(): IBoundsData { toOuterOf(this.contentBounds, this.leaf.__localMatrix, this[localContent] || (this[localContent] = {} as IBoundsData)); return this[localContent] }\n // localBoxBounds: IBoundsData // use leaf.__localBoxBounds\n public get localStrokeBounds(): IBoundsData { return this._localStrokeBounds || this }\n public get localRenderBounds(): IBoundsData { return this._localRenderBounds || this }\n\n protected _localContentBounds?: IBoundsData\n protected _localStrokeBounds?: IBoundsData\n protected _localRenderBounds?: IBoundsData\n\n // world\n\n public get worldContentBounds(): IBoundsData { toOuterOf(this.contentBounds, this.leaf.__world, this[worldContent] || (this[worldContent] = {} as IBoundsData)); return this[worldContent] }\n public get worldBoxBounds(): IBoundsData { toOuterOf(this.boxBounds, this.leaf.__world, this[worldBox] || (this[worldBox] = {} as IBoundsData)); return this[worldBox] }\n public get worldStrokeBounds(): IBoundsData { toOuterOf(this.strokeBounds, this.leaf.__world, this[worldStroke] || (this[worldStroke] = {} as IBoundsData)); return this[worldStroke] }\n // worldRenderBounds: IBoundsData // use leaf.__world\n\n protected _worldContentBounds: IBoundsData\n protected _worldBoxBounds: IBoundsData\n protected _worldStrokeBounds: IBoundsData\n\n // state\n\n public resized: 'scale' | 'inner' | 'local'\n public waitAutoLayout: boolean\n\n // matrix changed\n public matrixChanged: boolean\n public scaleChanged: boolean\n public rotationChanged: boolean\n\n // bounds\n public boundsChanged: boolean\n\n public boxChanged: boolean\n public strokeChanged: boolean\n public renderChanged: boolean\n\n public localBoxChanged: boolean\n\n // face\n public surfaceChanged: boolean\n public opacityChanged: boolean\n\n public hitCanvasChanged: boolean\n\n public childrenSortChanged?: boolean\n public stateStyleChanged?: boolean\n\n // keep state\n public affectScaleOrRotation: boolean\n public affectRotation: boolean\n public affectChildrenSort?: boolean\n\n public strokeSpread: number\n public strokeBoxSpread: number\n public renderSpread: number\n public renderShapeSpread: number\n\n // temp local\n public get a() { return 1 }\n public get b() { return 0 }\n public get c() { return 0 }\n public get d() { return 1 }\n public get e() { return this.leaf.__.x }\n public get f() { return this.leaf.__.y }\n public get x() { return this.e + this.boxBounds.x }\n public get y() { return this.f + this.boxBounds.y }\n public get width() { return this.boxBounds.width }\n public get height() { return this.boxBounds.height }\n\n\n constructor(leaf: ILeaf) {\n this.leaf = leaf\n if (this.leaf.__local) this._localRenderBounds = this._localStrokeBounds = this.leaf.__local\n if (leaf.__world) {\n this.boxBounds = { x: 0, y: 0, width: 0, height: 0 }\n this.boxChange()\n this.matrixChange()\n }\n }\n\n public createLocal(): void {\n const local = this.leaf.__local = { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0, x: 0, y: 0, width: 0, height: 0 }\n if (!this._localStrokeBounds) this._localStrokeBounds = local\n if (!this._localRenderBounds) this._localRenderBounds = local\n }\n\n public update(): void {\n const { leaf } = this, { leafer } = leaf\n if (leaf.isApp) return updateBounds(leaf)\n if (leafer) {\n if (leafer.ready) leafer.watcher.changed && leafer.layouter.layout()\n else leafer.start()\n } else {\n let root = leaf\n while (root.parent && !root.parent.leafer) { root = root.parent }\n const r = root as any\n if (r.__fullLayouting) return // fix: 循环\n r.__fullLayouting = true\n Platform.layout(r)\n delete r.__fullLayouting\n }\n }\n\n public getTransform(relative: ILocationType | ILeaf = 'world'): IMatrixData {\n this.update()\n const { leaf } = this\n switch (relative) {\n case 'world':\n return leaf.__world\n case 'local':\n return leaf.__localMatrix\n case 'inner':\n return MatrixHelper.defaultMatrix\n case 'page':\n relative = leaf.zoomLayer\n default:\n return getRelativeWorld(leaf, relative)\n }\n }\n\n public getBounds(type?: IBoundsType, relative: ILocationType | ILeaf = 'world'): IBoundsData {\n this.update()\n switch (relative) {\n case 'world':\n return this.getWorldBounds(type)\n case 'local':\n return this.getLocalBounds(type)\n case 'inner':\n return this.getInnerBounds(type)\n case 'page':\n relative = this.leaf.zoomLayer\n default:\n return new Bounds(this.getInnerBounds(type)).toOuterOf(this.getTransform(relative))\n }\n }\n\n public getInnerBounds(type: IBoundsType = 'box'): IBoundsData {\n switch (type) {\n case 'render':\n return this.renderBounds\n case 'content':\n if (this.contentBounds) return this.contentBounds\n case 'box':\n return this.boxBounds\n case 'stroke':\n return this.strokeBounds\n }\n }\n\n public getLocalBounds(type: IBoundsType = 'box'): IBoundsData {\n switch (type) {\n case 'render':\n return this.localRenderBounds\n case 'stroke':\n return this.localStrokeBounds\n case 'content':\n if (this.contentBounds) return this.localContentBounds\n case 'box':\n return this.leaf.__localBoxBounds\n }\n }\n\n public getWorldBounds(type: IBoundsType = 'box'): IBoundsData {\n switch (type) {\n case 'render':\n return this.leaf.__world\n case 'stroke':\n return this.worldStrokeBounds\n case 'content':\n if (this.contentBounds) return this.worldContentBounds\n case 'box':\n return this.worldBoxBounds\n }\n }\n\n public getLayoutBounds(type?: IBoundsType, relative: ILocationType | ILeaf = 'world', unscale?: boolean): ILayoutBoundsData {\n const { leaf } = this\n let point: IPointData, matrix: IMatrixData, layoutBounds: ILayoutBoundsData, bounds: IBoundsData = this.getInnerBounds(type)\n\n switch (relative) {\n case 'world':\n point = leaf.getWorldPoint(bounds)\n matrix = leaf.__world\n break\n case 'local':\n const { scaleX, scaleY, rotation, skewX, skewY } = leaf.__\n layoutBounds = { scaleX, scaleY, rotation, skewX, skewY } as ILayoutBoundsData // 更精准,务必保留\n point = leaf.getLocalPointByInner(bounds)\n break\n case 'inner':\n point = bounds\n matrix = MatrixHelper.defaultMatrix\n break\n case 'page':\n relative = leaf.zoomLayer\n default:\n point = leaf.getWorldPoint(bounds, relative)\n matrix = getRelativeWorld(leaf, relative, true)\n }\n\n if (!layoutBounds) layoutBounds = MatrixHelper.getLayout(matrix) as ILayoutBoundsData\n copy(layoutBounds, bounds)\n PointHelper.copy(layoutBounds, point)\n\n if (unscale) {\n const { scaleX, scaleY } = layoutBounds\n const uScaleX = Math.abs(scaleX)\n const uScaleY = Math.abs(scaleY)\n if (uScaleX !== 1 || uScaleY !== 1) {\n layoutBounds.scaleX /= uScaleX\n layoutBounds.scaleY /= uScaleY\n layoutBounds.width *= uScaleX\n layoutBounds.height *= uScaleY\n }\n }\n\n return layoutBounds\n }\n\n public getLayoutPoints(type?: IBoundsType, relative: ILocationType | ILeaf = 'world'): IPointData[] {\n const { leaf } = this\n const points = getPoints(this.getInnerBounds(type))\n let relativeLeaf: ILeaf\n switch (relative) {\n case 'world':\n relativeLeaf = null\n break\n case 'local':\n relativeLeaf = leaf.parent\n break\n case 'inner':\n break\n case 'page':\n relative = leaf.zoomLayer\n default:\n relativeLeaf = relative\n }\n if (!isUndefined(relativeLeaf)) points.forEach(point => leaf.innerToWorld(point, null, false, relativeLeaf))\n return points\n }\n\n // 独立 / 引用 boxBounds\n\n public shrinkContent(): void {\n const { x, y, width, height } = this.boxBounds\n this._contentBounds = { x, y, width, height }\n }\n\n public spreadStroke(): void {\n const { x, y, width, height } = this.strokeBounds\n this._strokeBounds = { x, y, width, height }\n this._localStrokeBounds = { x, y, width, height }\n if (!this.renderSpread) this.spreadRenderCancel()\n }\n public spreadRender(): void {\n const { x, y, width, height } = this.renderBounds\n this._renderBounds = { x, y, width, height }\n this._localRenderBounds = { x, y, width, height }\n }\n\n public shrinkContentCancel(): void {\n this._contentBounds = undefined\n }\n\n public spreadStrokeCancel(): void {\n const same = this.renderBounds === this.strokeBounds\n this._strokeBounds = this.boxBounds\n this._localStrokeBounds = this.leaf.__localBoxBounds\n if (same) this.spreadRenderCancel()\n }\n public spreadRenderCancel(): void {\n this._renderBounds = this._strokeBounds\n this._localRenderBounds = this._localStrokeBounds\n }\n\n\n // bounds\n\n public boxChange(): void {\n this.boxChanged = true\n this.localBoxChanged ? (this.boundsChanged || (this.boundsChanged = true)) : this.localBoxChange() // fix: boundsChanged未更新的问题\n this.hitCanvasChanged = true\n }\n\n public localBoxChange(): void {\n this.localBoxChanged = true\n this.boundsChanged = true\n }\n\n public strokeChange(): void {\n this.strokeChanged = true\n this.strokeSpread || (this.strokeSpread = 1)\n this.boundsChanged = true\n this.hitCanvasChanged = true\n }\n\n public renderChange(): void {\n this.renderChanged = true\n this.renderSpread || (this.renderSpread = 1)\n this.boundsChanged = true\n }\n\n\n // matrix\n\n public scaleChange(): void {\n this.scaleChanged = true\n this._scaleOrRotationChange()\n }\n\n public rotationChange(): void {\n this.rotationChanged = true\n this.affectRotation = true\n this._scaleOrRotationChange()\n }\n\n protected _scaleOrRotationChange() {\n this.affectScaleOrRotation = true\n this.matrixChange()\n if (!this.leaf.__local) this.createLocal()\n }\n\n public matrixChange(): void {\n this.matrixChanged = true\n this.localBoxChanged ? (this.boundsChanged || (this.boundsChanged = true)) : this.localBoxChange() // fix: boundsChanged未更新的问题\n }\n\n\n // face\n\n public surfaceChange(): void {\n this.surfaceChanged = true\n }\n\n public opacityChange(): void {\n this.opacityChanged = true\n this.surfaceChanged || this.surfaceChange()\n }\n\n public childrenSortChange(): void {\n if (!this.childrenSortChanged) {\n this.childrenSortChanged = this.affectChildrenSort = true\n this.leaf.forceUpdate('surface')\n }\n }\n\n public destroy(): void { }\n\n}","import { IEvent, IEventTarget, IObject } from '@leafer/interface'\nimport { Platform } from '@leafer/platform'\n\n\nexport class Event implements IEvent {\n\n readonly origin: IObject\n\n readonly type: string\n readonly target: IEventTarget\n readonly current: IEventTarget\n\n readonly bubbles: boolean = false\n readonly phase: number\n\n public isStopDefault: boolean\n public isStop: boolean\n public isStopNow: boolean\n\n constructor(type: string, target?: IEventTarget) {\n this.type = type\n if (target) this.target = target\n }\n\n public stopDefault(): void {\n this.isStopDefault = true\n if (this.origin) Platform.event.stopDefault(this.origin)\n }\n\n public stopNow(): void {\n this.isStopNow = true\n this.isStop = true\n if (this.origin) Platform.event.stopNow(this.origin)\n }\n\n public stop(): void {\n this.isStop = true\n if (this.origin) Platform.event.stop(this.origin)\n }\n}","import { IChildEvent, ILeaf } from '@leafer/interface'\n\nimport { Event } from './Event'\n\n\nexport class ChildEvent extends Event implements IChildEvent {\n\n static ADD = 'child.add'\n static REMOVE = 'child.remove'\n\n static CREATED = 'created'\n static MOUNTED = 'mounted'\n static UNMOUNTED = 'unmounted'\n static DESTROY = 'destroy'\n\n readonly parent?: ILeaf\n readonly child?: ILeaf\n\n constructor(type: string, child?: ILeaf, parent?: ILeaf) {\n super(type, child)\n this.parent = parent\n this.child = child\n }\n\n}","import { IPropertyEvent, IEventTarget, IStringMap } from '@leafer/interface'\n\nimport { Event } from './Event'\n\n\nconst SCROLL = 'property.scroll'\n\nexport class PropertyEvent extends Event implements IPropertyEvent {\n\n static CHANGE = 'property.change'\n static LEAFER_CHANGE = 'property.leafer_change'\n\n static SCROLL = SCROLL\n\n readonly attrName: string\n readonly oldValue: unknown\n readonly newValue: unknown\n\n constructor(type: string, target: IEventTarget, attrName: string, oldValue: unknown, newValue: unknown) {\n super(type, target)\n this.attrName = attrName\n this.oldValue = oldValue\n this.newValue = newValue\n }\n\n}\n\n// 额外派发的属性事件\nexport const extraPropertyEventMap: IStringMap = {\n scrollX: SCROLL,\n scrollY: SCROLL\n}","import { IImageEvent, IObject, ILeaferImage } from '@leafer/interface'\n\nimport { Event } from './Event'\n\nexport class ImageEvent extends Event implements IImageEvent {\n\n static LOAD = 'image.load'\n static LOADED = 'image.loaded'\n static ERROR = 'image.error'\n\n readonly image: ILeaferImage\n readonly error: string | IObject\n\n readonly attrName: string\n readonly attrValue: IObject\n\n constructor(type: string, data: IImageEvent) {\n super(type)\n Object.assign(this, data)\n }\n\n}","import { IBoundsEvent, IEventTarget, ILeaf, IObject } from '@leafer/interface'\n\nimport { Event } from './Event'\n\n\nexport class BoundsEvent extends Event implements IBoundsEvent {\n\n static RESIZE = 'bounds.resize'\n\n static INNER = 'bounds.inner'\n\n static LOCAL = 'bounds.local'\n\n static WORLD = 'bounds.world'\n\n\n static checkHas(leaf: IEventTarget, type: string, mode: 'on' | 'off') {\n if (mode === 'on') {\n type === WORLD ? leaf.__hasWorldEvent = true : leaf.__hasLocalEvent = true\n } else {\n leaf.__hasLocalEvent = leaf.hasEvent(RESIZE) || leaf.hasEvent(INNER) || leaf.hasEvent(LOCAL)\n leaf.__hasWorldEvent = leaf.hasEvent(WORLD)\n }\n }\n\n static emitLocal(leaf: ILeaf) {\n if (leaf.leaferIsReady) {\n const { resized } = leaf.__layout\n if (resized !== 'local') {\n leaf.emit(RESIZE, leaf) // inner / scale\n if (resized === 'inner') leaf.emit(INNER, leaf)\n }\n leaf.emit(LOCAL, leaf)\n }\n }\n\n static emitWorld(leaf: ILeaf) {\n if (leaf.leaferIsReady) leaf.emit(WORLD, this)\n }\n\n}\n\nconst { RESIZE, INNER, LOCAL, WORLD } = BoundsEvent\n\n\nexport const boundsEventMap: IObject = {};\n\n[RESIZE, INNER, LOCAL, WORLD].forEach(key => boundsEventMap[key] = 1)","import { ILeaf, INumberMap, IResizeEvent, IScreenSizeData } from '@leafer/interface'\nimport { isObject, isUndefined } from '@leafer/data'\n\nimport { Event } from './Event'\n\n\nexport class ResizeEvent extends Event implements IResizeEvent {\n\n static RESIZE: string = 'resize'\n\n static resizingKeys: INumberMap // resize编辑中的元素 LeafList 键表\n\n readonly width: number\n readonly height: number\n readonly pixelRatio: number\n\n public get bigger(): boolean {\n if (!this.old) return true\n const { width, height } = this.old\n return this.width >= width && this.height >= height\n }\n\n public get smaller(): boolean {\n return !this.bigger\n }\n\n public get samePixelRatio(): boolean {\n if (!this.old) return true\n return this.pixelRatio === this.old.pixelRatio\n }\n\n readonly old: IScreenSizeData\n\n constructor(size: IScreenSizeData | string, oldSize?: IScreenSizeData) {\n if (isObject(size)) {\n super(ResizeEvent.RESIZE)\n Object.assign(this, size)\n } else {\n super(size)\n }\n this.old = oldSize\n }\n\n static isResizing(leaf: ILeaf): boolean {\n return this.resizingKeys && !isUndefined(this.resizingKeys[leaf.innerId])\n }\n\n}","import { IWatchEvent, IWatchEventData } from '@leafer/interface'\n\nimport { Event } from './Event'\n\n\nexport class WatchEvent extends Event implements IWatchEvent {\n\n static REQUEST = 'watch.request'\n static DATA = 'watch.data'\n\n readonly data: IWatchEventData\n\n constructor(type: string, data?: IWatchEventData) {\n super(type)\n this.data = data\n }\n\n}","import { ILayoutEvent, ILayoutBlockData } from '@leafer/interface'\n\nimport { Event } from './Event'\n\n\nexport class LayoutEvent extends Event implements ILayoutEvent {\n\n static REQUEST = 'layout.request'\n\n static START = 'layout.start'\n\n static BEFORE = 'layout.before'\n static LAYOUT = 'layout'\n static AFTER = 'layout.after'\n\n static AGAIN = 'layout.again'\n\n static END = 'layout.end'\n\n readonly data: ILayoutBlockData[]\n readonly times: number\n\n constructor(type: string, data?: ILayoutBlockData[], times?: number) {\n super(type)\n if (data) {\n this.data = data\n this.times = times\n }\n\n }\n\n}","import { IBounds, IRenderEvent, IRenderOptions } from '@leafer/interface'\n\nimport { Event } from './Event'\n\n\nexport class RenderEvent extends Event implements IRenderEvent {\n\n static REQUEST = 'render.request'\n\n static CHILD_START = 'render.child_start' // app 专用\n static CHILD_END = 'render.child_end'\n\n static START = 'render.start'\n\n static BEFORE = 'render.before'\n static RENDER = 'render'\n static AFTER = 'render.after'\n\n static AGAIN = 'render.again'\n\n static END = 'render.end'\n\n static NEXT = 'render.next'\n\n readonly renderBounds: IBounds\n readonly renderOptions: IRenderOptions\n readonly times: number\n\n constructor(type: string, times?: number, bounds?: IBounds, options?: IRenderOptions) {\n super(type)\n if (times) this.times = times\n if (bounds) {\n this.renderBounds = bounds\n this.renderOptions = options\n }\n }\n\n}","import { ILeaferEvent, IStringMap } from '@leafer/interface'\n\nimport { Event } from './Event'\n\n\nexport class LeaferEvent extends Event implements ILeaferEvent {\n\n static START = 'leafer.start'\n\n static BEFORE_READY = 'leafer.before_ready'\n static READY = 'leafer.ready'\n static AFTER_READY = 'leafer.after_ready'\n\n static VIEW_READY = 'leafer.view_ready'\n\n static VIEW_COMPLETED = 'leafer.view_completed'\n\n static STOP = 'leafer.stop'\n static RESTART = 'leafer.restart'\n\n static END = 'leafer.end'\n\n static UPDATE_MODE = 'leafer.update_mode'\n\n // 变换操作\n static TRANSFORM = 'leafer.transform'\n static MOVE = 'leafer.move'\n static SCALE = 'leafer.scale'\n static ROTATE = 'leafer.rotate'\n static SKEW = 'leafer.skew'\n}\n\n\nconst { MOVE, SCALE, ROTATE, SKEW } = LeaferEvent\n\nexport const leaferTransformAttrMap: IStringMap = {\n x: MOVE,\n y: MOVE,\n scaleX: SCALE,\n scaleY: SCALE,\n rotation: ROTATE,\n skewX: SKEW,\n skewY: SKEW\n}","import { IEventListener, IEventListenerMap, IEventListenerItem, IEventListenerId, IEvent, IObject, IEventTarget, IEventOption, IEventer, IEventParamsMap, InnerId, IEventParams, IFunction } from '@leafer/interface'\nimport { EventCreator } from '@leafer/platform'\nimport { isArray, isObject, isString, isUndefined } from '@leafer/data'\n\nimport { BoundsEvent, boundsEventMap } from './BoundsEvent'\n\n\nconst empty = {}\n\n\nexport class Eventer implements IEventer {\n\n public readonly innerId: InnerId\n\n public __captureMap?: IEventListenerMap\n\n public __bubbleMap?: IEventListenerMap\n\n public __hasLocalEvent?: boolean\n public __hasWorldEvent?: boolean\n\n public syncEventer?: IEventer\n\n public set event(map: IEventParamsMap) { this.on(map) }\n\n\n public on(type: string | string[] | IEventParams[] | IEventParamsMap, listener?: IEventListener, options?: IEventOption): void {\n\n if (!listener) {\n let event: IFunction | [IFunction, IEventOption]\n if (isArray(type)) (type as IEventParams[]).forEach(item => this.on(item[0], item[1], item[2]))\n else for (let key in type as IEventParamsMap) isArray(event = (type as IEventParamsMap)[key]) ? this.on(key, event[0], event[1]) : this.on(key, event)\n return\n }\n\n let capture: boolean, once: boolean\n if (options) {\n if (options === 'once') {\n once = true\n } else if (typeof options === 'boolean') {\n capture = options\n } else {\n capture = options.capture\n once = options.once\n }\n }\n\n let events: IEventListenerItem[]\n const map = __getListenerMap(this, capture, true)\n const typeList = isString(type) ? type.split(' ') : type as string[]\n const item = once ? { listener, once } : { listener }\n\n typeList.forEach(type => {\n if (type) {\n events = map[type]\n if (events) {\n if (events.findIndex(item => item.listener === listener) === -1) events.push(item)\n } else {\n map[type] = [item]\n }\n\n if (boundsEventMap[type]) BoundsEvent.checkHas(this, type, 'on')\n }\n })\n }\n\n public off(type?: string | string[], listener?: IEventListener, options?: IEventOption): void {\n if (type) {\n\n const typeList = isString(type) ? type.split(' ') : type\n\n if (listener) {\n\n let capture: boolean\n if (options) capture = typeof options === 'boolean' ? options : (options === 'once' ? false : options.capture)\n\n let events: IEventListenerItem[], index: number\n const map = __getListenerMap(this, capture)\n\n typeList.forEach(type => {\n if (type) {\n events = map[type]\n if (events) {\n index = events.findIndex(item => item.listener === listener)\n if (index > -1) events.splice(index, 1)\n if (!events.length) delete map[type]\n if (boundsEventMap[type]) BoundsEvent.checkHas(this, type, 'off')\n }\n }\n })\n\n } else {\n\n // off type\n const { __bubbleMap: b, __captureMap: c } = this\n typeList.forEach(type => {\n if (b) delete b[type]\n if (c) delete c[type]\n })\n\n }\n\n } else {\n\n this.__bubbleMap = this.__captureMap = undefined // off all\n\n }\n\n }\n\n public on_(type: string | string[] | IEventParams[], listener?: IEventListener, bind?: IObject, options?: IEventOption): IEventListenerId {\n if (!listener) isArray(type) && (type as IEventParams[]).forEach(item => this.on(item[0], item[2] ? item[1] = item[1].bind(item[2]) : item[1], item[3]))\n else this.on(type, bind ? listener = listener.bind(bind) : listener, options)\n return { type, current: this as any, listener, options }\n }\n\n public off_(id: IEventListenerId | IEventListenerId[]): void {\n if (!id) return\n const list = isArray(id) ? id : [id]\n list.forEach(item => {\n if (item) {\n if (!item.listener) isArray(item.type) && (item.type as IEventParams[]).forEach(v => item.current.off(v[0], v[1], v[3]))\n else item.current.off(item.type as string | string[], item.listener, item.options)\n }\n })\n list.length = 0\n }\n\n public once(type: string | string[] | IEventParams[], listener?: IEventListener, captureOrBind?: boolean | IObject, capture?: boolean): void {\n if (!listener) return isArray(type) && (type as IEventParams[]).forEach(item => this.once(item[0], item[1], item[2], item[3]))\n if (isObject(captureOrBind)) listener = listener.bind(captureOrBind)\n else capture = captureOrBind\n this.on(type, listener, { once: true, capture })\n }\n\n public emit(type: string, event?: IEvent | IObject, capture?: boolean): void {\n if (!event && EventCreator.has(type)) event = EventCreator.get(type, { type, target: this, current: this } as IEvent)\n\n const map = __getListenerMap(this, capture)\n const list = map[type]\n if (list) {\n let item: IEventListenerItem\n for (let i = 0, len = list.length; i < len; i++) {\n if (item = list[i]) { // 防止 list 变化造成的空值\n item.listener(event)\n if (item.once) {\n this.off(type, item.listener, capture)\n i--, len--\n }\n if (event && event.isStopNow) break\n }\n }\n }\n\n this.syncEventer && this.syncEventer.emitEvent(event, capture)\n }\n\n public emitEvent(event: IEvent, capture?: boolean): void {\n event.current = this\n this.emit(event.type, event, capture)\n }\n\n public hasEvent(type: string, capture?: boolean): boolean {\n if (this.syncEventer && this.syncEventer.hasEvent(type, capture)) return true\n\n const { __bubbleMap: b, __captureMap: c } = this\n const hasB = b && b[type], hasC = c && c[type]\n return !!(isUndefined(capture) ? (hasB || hasC) : (capture ? hasC : hasB))\n }\n\n public destroy(): void {\n this.__captureMap = this.__bubbleMap = this.syncEventer = null\n }\n}\n\n\nfunction __getListenerMap(eventer: IEventTarget, capture?: boolean, create?: boolean): IEventListenerMap {\n if (capture) {\n\n const { __captureMap: c } = eventer\n if (c) {\n return c\n } else {\n return create ? eventer.__captureMap = {} : empty\n }\n\n } else {\n\n const { __bubbleMap: b } = eventer\n if (b) {\n return b\n } else {\n return create ? eventer.__bubbleMap = {} : empty\n }\n\n }\n}","import { ILeafEventerModule } from '@leafer/interface'\nimport { Eventer } from '@leafer/event'\n\nconst { on, on_, off, off_, once, emit, emitEvent, hasEvent, destroy } = Eventer.prototype\n\nexport const LeafEventer: ILeafEventerModule = { on, on_, off, off_, once, emit, emitEvent, hasEvent, destroyEventer: destroy }","import { ILeafDataProxyModule, IObject, IValue } from '@leafer/interface'\nimport { PropertyEvent, extraPropertyEventMap, LeaferEvent, leaferTransformAttrMap } from '@leafer/event'\nimport { isObject, isFinite, isUndefined } from '@leafer/data'\nimport { Debug } from '@leafer/debug'\n\n\nconst debug = Debug.get('setAttr')\n\nexport const LeafDataProxy: ILeafDataProxyModule = {\n\n __setAttr(name: string, newValue: IValue, checkFiniteNumber?: boolean): boolean {\n if (this.leaferIsCreated) {\n\n const oldValue = this.__.__getInput(name)\n\n if (checkFiniteNumber && !isFinite(newValue) && !isUndefined(newValue)) { // 警告 NaN、Infinity、-Infinity、null、非有效数字\n debug.warn(this.innerName, name, newValue)\n newValue = undefined // must\n }\n\n if (isObject(newValue) || oldValue !== newValue) {\n\n this.__realSetAttr(name, newValue)\n\n if (this.isLeafer) {\n this.emitEvent(new PropertyEvent(PropertyEvent.LEAFER_CHANGE, this, name, oldValue, newValue))\n\n const transformEventName = leaferTransformAttrMap[name]\n if (transformEventName) {\n this.emitEvent(new LeaferEvent(transformEventName, this))\n this.emitEvent(new LeaferEvent(LeaferEvent.TRANSFORM, this))\n }\n }\n\n this.emitPropertyEvent(PropertyEvent.CHANGE, name, oldValue, newValue)\n\n const extraPropertyEvent = extraPropertyEventMap[name]\n if (extraPropertyEvent) this.emitPropertyEvent(extraPropertyEvent, name, oldValue, newValue)\n\n return true\n } else {\n return false\n }\n\n } else {\n\n this.__realSetAttr(name, newValue)\n\n return true\n\n }\n },\n\n emitPropertyEvent(type: string, name: string, oldValue: unknown, newValue: unknown): void {\n const event = new PropertyEvent(type, this, name, oldValue, newValue)\n this.isLeafer || (this.hasEvent(type) && this.emitEvent(event))\n this.leafer.emitEvent(event)\n },\n\n __realSetAttr(name: string, newValue: IValue): void {\n const data = this.__ as IObject\n data[name] = newValue\n if (this.__proxyData) this.setProxyAttr(name, newValue)\n if (data.normalStyle) this.lockNormalStyle || isUndefined(data.normalStyle[name]) || (data.normalStyle[name] = newValue)\n },\n\n\n __getAttr(name: string): IValue {\n if (this.__proxyData) return this.getProxyAttr(name)\n return this.__.__get(name)\n }\n}","import { ILeafMatrixModule, ILayoutData } from '@leafer/interface'\nimport { AroundHelper, MatrixHelper } from '@leafer/math'\n\n\nconst { setLayout, multiplyParent, translateInner, defaultWorld } = MatrixHelper\nconst { toPoint, tempPoint } = AroundHelper\n\nexport const LeafMatrix: ILeafMatrixModule = {\n\n __updateWorldMatrix(): void {\n\n const { parent, __layout, __world, __scrollWorld, __ } = this\n multiplyParent(this.__local || __layout, parent ? (parent.__scrollWorld || parent.__world) : defaultWorld, __world, !!__layout.affectScaleOrRotation, __ as ILayoutData)\n\n if (__scrollWorld) translateInner(Object.assign(__scrollWorld, __world), __.scrollX, __.scrollY)\n },\n\n __updateLocalMatrix(): void {\n\n if (this.__local) {\n\n const layout = this.__layout, local = this.__local, data = this.__\n\n if (layout.affectScaleOrRotation) {\n\n if ((layout.scaleChanged && (layout.resized || (layout.resized = 'scale'))) || layout.rotationChanged) {\n setLayout(local, data as ILayoutData, null, null, layout.affectRotation)\n layout.scaleChanged = layout.rotationChanged = undefined\n }\n\n }\n\n local.e = data.x + data.offsetX\n local.f = data.y + data.offsetY\n\n if (data.around || data.origin) {\n toPoint(data.around || data.origin, layout.boxBounds, tempPoint)\n translateInner(local, -tempPoint.x, -tempPoint.y, !data.around)\n }\n\n }\n\n this.__layout.matrixChanged = undefined\n\n }\n\n}\n\n\n","import { ILeafBoundsModule, IBoundsData } from '@leafer/interface'\nimport { BoundsHelper } from '@leafer/math'\nimport { PathBounds } from '@leafer/path'\nimport { BranchHelper, LeafHelper } from '@leafer/helper'\nimport { BoundsEvent } from '@leafer/event'\n\n\nconst { updateMatrix, updateAllMatrix } = LeafHelper\nconst { updateBounds } = BranchHelper\nconst { toOuterOf, copyAndSpread, copy } = BoundsHelper\nconst { toBounds } = PathBounds\n\nexport const LeafBounds: ILeafBoundsModule = {\n\n __updateWorldBounds(): void {\n\n const layout = this.__layout\n\n toOuterOf(layout.renderBounds, this.__world, this.__world)\n\n if (layout.resized) {\n if (layout.resized === 'inner') this.__onUpdateSize() // scale变化不用更新\n if (this.__hasLocalEvent) BoundsEvent.emitLocal(this)\n layout.resized = undefined\n }\n\n if (this.__hasWorldEvent) BoundsEvent.emitWorld(this)\n\n },\n\n __updateLocalBounds(): void {\n\n const layout = this.__layout\n\n if (layout.boxChanged) {\n\n if (!this.__.__pathInputed) this.__updatePath()\n this.__updateRenderPath()\n\n this.__updateBoxBounds()\n layout.resized = 'inner'\n }\n\n\n if (layout.localBoxChanged) { // position change\n\n if (this.__local) this.__updateLocalBoxBounds()\n layout.localBoxChanged = undefined\n\n if (layout.strokeSpread) layout.strokeChanged = true\n if (layout.renderSpread) layout.renderChanged = true\n if (this.parent) this.parent.__layout.boxChange()\n }\n\n\n layout.boxChanged = undefined // must after updateLocalBoxBounds()\n\n\n if (layout.strokeChanged) {\n\n layout.strokeSpread = this.__updateStrokeSpread()\n\n if (layout.strokeSpread) {\n\n if (layout.strokeBounds === layout.boxBounds) layout.spreadStroke()\n\n this.__updateStrokeBounds()\n this.__updateLocalStrokeBounds()\n\n } else {\n layout.spreadStrokeCancel()\n }\n\n layout.strokeChanged = undefined\n if (layout.renderSpread || layout.strokeSpread !== layout.strokeBoxSpread) layout.renderChanged = true\n\n if (this.parent) this.parent.__layout.strokeChange()\n layout.resized = 'inner'\n }\n\n\n if (layout.renderChanged) {\n\n layout.renderSpread = this.__updateRenderSpread()\n\n if (layout.renderSpread) {\n\n if (layout.renderBounds === layout.boxBounds || layout.renderBounds === layout.strokeBounds) layout.spreadRender()\n\n this.__updateRenderBounds()\n this.__updateLocalRenderBounds()\n\n } else {\n layout.spreadRenderCancel()\n }\n\n layout.renderChanged = undefined\n\n if (this.parent) this.parent.__layout.renderChange()\n }\n\n layout.resized || (layout.resized = 'local')\n layout.boundsChanged = undefined\n\n },\n\n __updateLocalBoxBounds(): void {\n if (this.__hasMotionPath) this.__updateMotionPath()\n if (this.__hasAutoLayout) this.__updateAutoLayout() // origin / around / flow\n toOuterOf(this.__layout.boxBounds, this.__local, this.__local)\n },\n\n __updateLocalStrokeBounds(): void {\n toOuterOf(this.__layout.strokeBounds, this.__localMatrix, this.__layout.localStrokeBounds)\n },\n\n __updateLocalRenderBounds(): void {\n toOuterOf(this.__layout.renderBounds, this.__localMatrix, this.__layout.localRenderBounds)\n },\n\n\n __updateBoxBounds(_secondLayout?: boolean, _bounds?: IBoundsData): void {\n const b = this.__layout.boxBounds\n const data = this.__\n if (data.__usePathBox) {\n toBounds(data.path, b)\n } else {\n b.x = 0\n b.y = 0\n b.width = data.width\n b.height = data.height\n }\n },\n\n\n __updateAutoLayout(): void {\n this.__layout.matrixChanged = true\n if (this.isBranch) {\n\n this.__extraUpdate()\n\n if (this.__.flow) {\n\n if (this.__layout.boxChanged) this.__updateFlowLayout()\n\n updateAllMatrix(this)\n updateBounds(this, this)\n\n if (this.__.__autoSide) this.__updateBoxBounds(true)\n\n } else {\n\n updateAllMatrix(this)\n updateBounds(this, this)\n\n }\n\n } else {\n updateMatrix(this)\n }\n },\n\n __updateNaturalSize(): void {\n const { __: data, __layout: layout } = this\n data.__naturalWidth = layout.boxBounds.width\n data.__naturalHeight = layout.boxBounds.height\n },\n\n __updateStrokeBounds(_bounds?: IBoundsData): void {\n const layout = this.__layout\n copyAndSpread(layout.strokeBounds, layout.boxBounds, layout.strokeBoxSpread)\n },\n\n __updateRenderBounds(_bounds?: IBoundsData): void {\n const layout = this.__layout\n layout.renderSpread > 0 ? copyAndSpread(layout.renderBounds, layout.boxBounds, layout.renderSpread) : copy(layout.renderBounds, layout.strokeBounds) // Box use -1\n }\n\n}","import { ILeaferCanvas, IRenderOptions, ILeafRenderModule } from '@leafer/interface'\nimport { LeafHelper } from '@leafer/helper'\nimport { Debug } from '@leafer/debug'\n\n\nexport const LeafRender: ILeafRenderModule = {\n\n __render(canvas: ILeaferCanvas, options: IRenderOptions): void {\n\n if (options.shape) return this.__renderShape(canvas, options)\n\n if (this.__worldOpacity) {\n\n const data = this.__\n\n canvas.setWorld(this.__nowWorld = this.__getNowWorld(options))\n canvas.opacity = options.dimOpacity && !data.dimskip ? data.opacity * options.dimOpacity : data.opacity\n\n if (this.__.__single) {\n\n if (data.eraser === 'path') return this.__renderEraser(canvas, options)\n\n const tempCanvas = canvas.getSameCanvas(true, true)\n this.__draw(tempCanvas, options, canvas)\n\n LeafHelper.copyCanvasByWorld(this, canvas, tempCanvas, this.__nowWorld, data.__blendMode, true)\n\n tempCanvas.recycle(this.__nowWorld)\n\n } else {\n\n this.__draw(canvas, options)\n\n }\n\n if (Debug.showBounds) Debug.drawBounds(this, canvas, options)\n\n }\n },\n\n __renderShape(canvas: ILeaferCanvas, options: IRenderOptions): void {\n if (this.__worldOpacity) {\n canvas.setWorld(this.__nowWorld = this.__getNowWorld(options))\n\n this.__drawShape(canvas, options)\n }\n },\n\n __clip(canvas: ILeaferCanvas, options: IRenderOptions): void {\n if (this.__worldOpacity) {\n canvas.setWorld(this.__nowWorld = this.__getNowWorld(options))\n this.__drawRenderPath(canvas)\n canvas.clipUI(this)\n }\n },\n\n __updateWorldOpacity(): void {\n this.__worldOpacity = this.__.visible ? (this.parent ? this.parent.__worldOpacity * this.__.opacity : this.__.opacity) : 0\n if (this.__layout.opacityChanged) this.__layout.opacityChanged = false\n }\n\n}","import { LeafBoundsHelper } from '@leafer/helper'\nimport { ILeaferCanvas, IRenderOptions, IBranchRenderModule } from '@leafer/interface'\n\n\nconst { excludeRenderBounds } = LeafBoundsHelper\n\nexport const BranchRender: IBranchRenderModule = {\n\n __updateChange(): void {\n const { __layout: layout } = this\n if (layout.childrenSortChanged) {\n this.__updateSortChildren()\n layout.childrenSortChanged = false\n }\n\n this.__.__checkSingle()\n },\n\n\n __render(canvas: ILeaferCanvas, options: IRenderOptions): void {\n\n this.__nowWorld = this.__getNowWorld(options)\n\n if (this.__worldOpacity) {\n\n const data = this.__\n\n if (data.dim) options.dimOpacity = data.dim === true ? 0.2 : data.dim\n else if (data.dimskip) options.dimOpacity && (options.dimOpacity = 0)\n\n if (data.__single && !this.isBranchLeaf) { // Frame / Box 不能走 single 逻辑渲染组,需用 drawAfterFill 渲染成一个整体, 关联设置 BoxData.__drawAfterFill\n\n if (data.eraser === 'path') return this.__renderEraser(canvas, options)\n\n const tempCanvas = canvas.getSameCanvas(false, true)\n\n this.__renderBranch(tempCanvas, options)\n\n const nowWorld = this.__nowWorld\n\n canvas.opacity = options.dimOpacity ? data.opacity * options.dimOpacity : data.opacity\n canvas.copyWorldByReset(tempCanvas, nowWorld, nowWorld, data.__blendMode, true)\n\n tempCanvas.recycle(nowWorld)\n\n } else {\n\n this.__renderBranch(canvas, options)\n\n }\n\n }\n\n },\n\n __renderBranch(canvas: ILeaferCanvas, options: IRenderOptions): void {\n if (this.__hasMask) {\n\n this.__renderMask(canvas, options)\n\n } else {\n\n const { children } = this\n for (let i = 0, len = children.length; i < len; i++) {\n excludeRenderBounds(children[i], options) || children[i].__render(canvas, options)\n }\n\n }\n },\n\n\n __clip(canvas: ILeaferCanvas, options: IRenderOptions): void {\n if (this.__worldOpacity) {\n const { children } = this\n for (let i = 0, len = children.length; i < len; i++) {\n excludeRenderBounds(children[i], options) || children[i].__clip(canvas, options)\n }\n }\n }\n}","import { ILeaferBase, ILeaf, ILeafInputData, ILeafData, ILeaferCanvas, IRenderOptions, IBoundsType, ILocationType, IMatrixWithBoundsData, ILayoutBoundsData, IValue, ILeafLayout, InnerId, IHitCanvas, IRadiusPointData, IEventListenerMap, IEventListener, IEventListenerId, IEvent, IObject, IFunction, IPointData, IBoundsData, IBranch, IFindMethod, IMatrixData, IAttrDecorator, IMatrixWithBoundsScaleData, IMatrixWithScaleData, IAlign, IJSONOptions, IEventParamsMap, IEventOption, IAxis, IMotionPathData, IUnitData, IRotationPointData, ITransition, IValueFunction, IEventParams, IScaleData, IScaleFixed } from '@leafer/interface'\nimport { BoundsHelper, IncrementId, MatrixHelper, PointHelper } from '@leafer/math'\nimport { LeafData, isUndefined } from '@leafer/data'\nimport { LeafLayout } from '@leafer/layout'\nimport { LeafDataProxy, LeafMatrix, LeafBounds, LeafEventer, LeafRender } from '@leafer/display-module'\nimport { boundsType, useModule, defineDataProcessor } from '@leafer/decorator'\nimport { LeafHelper } from '@leafer/helper'\nimport { ChildEvent } from '@leafer/event'\nimport { ImageManager } from '@leafer/image'\nimport { Plugin } from '@leafer/debug'\n\n\nconst tempScaleData = {} as IScaleData\nconst { LEAF, create } = IncrementId\nconst { toInnerPoint, toOuterPoint, multiplyParent } = MatrixHelper\nconst { toOuterOf } = BoundsHelper\nconst { copy, move } = PointHelper\nconst { moveLocal, zoomOfLocal, rotateOfLocal, skewOfLocal, moveWorld, zoomOfWorld, rotateOfWorld, skewOfWorld, transform, transformWorld, setTransform, getFlipTransform, getLocalOrigin, getRelativeWorld, drop } = LeafHelper\n\n@useModule(LeafDataProxy)\n@useModule(LeafMatrix)\n@useModule(LeafBounds)\n@useModule(LeafEventer)\n@useModule(LeafRender)\nexport class Leaf<TInputData = ILeafInputData> implements ILeaf {\n\n public get tag(): string { return this.__tag }\n public set tag(_value: string) { }\n\n public get __tag(): string { return 'Leaf' }\n\n public readonly innerId: InnerId // 内部唯一标识\n public get innerName(): string { return this.__.name || this.tag + this.innerId }\n\n public get __DataProcessor() { return LeafData }\n public get __LayoutProcessor() { return LeafLayout }\n\n public leafer?: ILeaferBase\n public parent?: ILeaf\n\n public get leaferIsCreated(): boolean { return this.leafer && this.leafer.created }\n public get leaferIsReady(): boolean { return this.leafer && this.leafer.ready }\n\n public get isLeafer(): boolean { return false }\n public get isBranch(): boolean { return false }\n public get isBranchLeaf(): boolean { return false }\n\n public syncEventer?: ILeaf // 同步触发一样事件的元素\n public lockNormalStyle?: boolean\n\n public __: ILeafData\n public __layout: ILeafLayout\n\n public __world: IMatrixWithBoundsScaleData\n public __local?: IMatrixWithBoundsData // and localStrokeBounds? localRenderBounds?\n\n public __nowWorld?: IMatrixWithBoundsScaleData // use __world or __cameraWorld render\n public __cameraWorld?: IMatrixWithBoundsScaleData // use camera matrix render \n\n public get __localMatrix(): IMatrixData { return this.__local || this.__layout }\n public get __localBoxBounds(): IBoundsData { return this.__local || this.__layout }\n\n public __worldOpacity: number\n\n // now transform\n public get worldTransform(): IMatrixWithScaleData { return this.__layout.getTransform('world') as IMatrixWithScaleData }\n public get localTransform(): IMatrixData { return this.__layout.getTransform('local') }\n\n public __scrollWorld?: IMatrixWithBoundsScaleData\n public get scrollWorldTransform(): IMatrixWithScaleData { this.updateLayout(); return this.__scrollWorld || this.__world }\n\n // now bounds\n public get boxBounds(): IBoundsData { return this.getBounds('box', 'inner') }\n public get renderBounds(): IBoundsData { return this.getBounds('render', 'inner') }\n public get worldBoxBounds(): IBoundsData { return this.getBounds('box') }\n public get worldStrokeBounds(): IBoundsData { return this.getBounds('stroke') }\n public get worldRenderBounds(): IBoundsData { return this.getBounds('render') }\n\n // now opacity\n public get worldOpacity(): number { this.updateLayout(); return this.__worldOpacity }\n\n public __level: number // layer level 0 -> branch -> branch -> deep\n public __tempNumber: number // temp sort\n\n public get __worldFlipped(): boolean { return this.__world.scaleX < 0 || this.__world.scaleY < 0 }\n\n public __hasAutoLayout?: boolean\n public __hasMask?: boolean\n public __hasEraser?: boolean\n public __hitCanvas?: IHitCanvas\n\n public get __onlyHitMask(): boolean { return this.__hasMask && !this.__.hitChildren }\n public get __ignoreHitWorld(): boolean { return (this.__hasMask || this.__hasEraser) && this.__.hitChildren }\n public get __inLazyBounds(): boolean { return this.leaferIsCreated && this.leafer.lazyBounds.hit(this.__world) }\n\n public get pathInputed(): boolean { return this.__.__pathInputed as unknown as boolean }\n\n // event\n public set event(map: IEventParamsMap) { this.on(map) }\n\n public __captureMap?: IEventListenerMap\n public __bubbleMap?: IEventListenerMap\n\n public __hasLocalEvent?: boolean\n public __hasWorldEvent?: boolean\n\n // branch \n public children?: ILeaf[]\n public topChildren?: ILeaf[]\n\n public destroyed: boolean\n\n\n constructor(data?: TInputData) {\n this.innerId = create(LEAF)\n this.reset(data)\n if (this.__bubbleMap) this.__emitLifeEvent(ChildEvent.CREATED)\n }\n\n\n public reset(data?: ILeafInputData): void {\n if (this.leafer) this.leafer.forceRender(this.__world) // fix: add old bounds rendering\n\n if (data as any !== 0) { // 设为 0 时可用于 text boxStyle 节省开销\n this.__world = { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0, x: 0, y: 0, width: 0, height: 0, scaleX: 1, scaleY: 1 }\n if (data !== null) this.__local = { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0, x: 0, y: 0, width: 0, height: 0 }\n }\n\n this.__worldOpacity = 1\n\n this.__ = new this.__DataProcessor(this)\n this.__layout = new this.__LayoutProcessor(this)\n\n if (this.__level) this.resetCustom()\n if (data) {\n if ((data as ILeaf).__) data = (data as ILeaf).toJSON()\n data.children ? this.set(data) : Object.assign(this, data)\n }\n }\n\n public resetCustom(): void {\n this.__hasMask = this.__hasEraser = null\n this.forceUpdate()\n }\n\n\n public waitParent(item: IFunction, bind?: IObject): void {\n if (bind) item = item.bind(bind)\n this.parent ? item() : this.on(ChildEvent.ADD, item, 'once')\n }\n\n public waitLeafer(item: IFunction, bind?: IObject): void {\n if (bind) item = item.bind(bind)\n this.leafer ? item() : this.on(ChildEvent.MOUNTED, item, 'once')\n }\n\n public nextRender(item: IFunction, bind?: IObject, off?: 'off'): void {\n this.leafer ? this.leafer.nextRender(item, bind, off) : this.waitLeafer(() => this.leafer.nextRender(item, bind, off))\n }\n\n public removeNextRender(item: IFunction): void {\n this.nextRender(item, null, 'off')\n }\n\n public __bindLeafer(leafer: ILeaferBase | null): void {\n if (this.isLeafer && leafer !== null) leafer = this as unknown as ILeaferBase\n\n if (this.leafer && !leafer) this.leafer.leafs--\n\n this.leafer = leafer\n\n if (leafer) {\n leafer.leafs++\n this.__level = this.parent ? this.parent.__level + 1 : 1\n if ((this as ILeaf).animation) this.__runAnimation('in')\n if (this.__bubbleMap) this.__emitLifeEvent(ChildEvent.MOUNTED)\n } else {\n this.__emitLifeEvent(ChildEvent.UNMOUNTED)\n }\n\n if (this.isBranch) {\n const { children } = this\n for (let i = 0, len = children.length; i < len; i++) {\n children[i].__bindLeafer(leafer)\n }\n }\n }\n\n // data\n\n public set(_data: IObject, _isTemp?: boolean): void { }\n public get(_name?: string): ILeafInputData | IValue { return undefined }\n\n public setAttr(name: string, value: any): void { (this as IObject)[name] = value }\n public getAttr(name: string): any { return (this as IObject)[name] }\n\n public getComputedAttr(name: string): any { return (this.__ as IObject)[name] }\n\n public toJSON(options?: IJSONOptions): IObject {\n if (options) this.__layout.update()\n return this.__.__getInputData(null, options)\n }\n\n public toString(options?: IJSONOptions): string {\n return JSON.stringify(this.toJSON(options))\n }\n\n public toSVG(): string { return undefined }\n\n public __SVG(_data: IObject): void { }\n\n public toHTML(): string { return undefined }\n\n // LeafDataProxy rewrite\n\n public __setAttr(_attrName: string, _newValue: IValue): boolean { return true }\n\n public __getAttr(_attrName: string): IValue { return undefined }\n\n public setProxyAttr(_attrName: string, _newValue: IValue): void { }\n\n public getProxyAttr(_attrName: string): IValue { return undefined }\n\n // ---\n\n\n // find\n\n public find(_condition: number | string | IFindMethod, _options?: any): ILeaf[] { return undefined }\n\n public findTag(_tag: string | string[]): ILeaf[] { return undefined }\n\n public findOne(_condition: number | string | IFindMethod, _options?: any): ILeaf | undefined { return undefined }\n\n public findId(_id: number | string): ILeaf | undefined { return undefined }\n\n // ---\n\n\n // @leafer-in/state rewrite\n\n public focus(_value?: boolean): void { }\n\n public updateState(): void { }\n\n // ---\n\n\n public updateLayout(): void {\n this.__layout.update()\n }\n\n public forceUpdate(attrName?: string): void {\n if (isUndefined(attrName)) attrName = 'width'\n else if (attrName === 'surface') attrName = 'blendMode'\n const value = this.__.__getInput(attrName);\n (this.__ as any)[attrName] = isUndefined(value) ? null : undefined;\n (this as any)[attrName] = value\n }\n\n public forceRender(_bounds?: IBoundsData, _sync?: boolean): void {\n this.forceUpdate('surface')\n }\n\n public __extraUpdate(): void {\n if (this.leaferIsReady) this.leafer.layouter.addExtra(this) // add part 额外更新元素\n }\n\n // LeafMatrix rewrite\n\n public __updateWorldMatrix(): void { }\n\n public __updateLocalMatrix(): void { }\n\n // ---\n\n // LeafBounds rewrite\n\n public __updateWorldBounds(): void { }\n\n public __updateLocalBounds(): void { }\n\n\n public __updateLocalBoxBounds(): void { }\n\n public __updateLocalStrokeBounds(): void { }\n\n public __updateLocalRenderBounds(): void { }\n\n // box\n\n public __updateBoxBounds(_secondLayout?: boolean, _bounds?: IBoundsData): void { }\n\n public __updateContentBounds(): void { }\n\n public __updateStrokeBounds(_bounds?: IBoundsData): void { }\n\n public __updateRenderBounds(_bounds?: IBoundsData): void { }\n\n\n public __updateAutoLayout(): void { }\n\n public __updateFlowLayout(): void { }\n\n public __updateNaturalSize(): void { }\n\n\n public __updateStrokeSpread(): number { return 0 }\n\n public __updateRenderSpread(): number { return 0 }\n\n public __onUpdateSize(): void { }\n\n // ---\n\n\n public __updateEraser(value?: boolean): void {\n this.__hasEraser = value ? true : this.children.some(item => item.__.eraser)\n }\n\n public __renderEraser(canvas: ILeaferCanvas, options: IRenderOptions): void { // path eraser\n canvas.save()\n this.__clip(canvas, options)\n const { renderBounds: r } = this.__layout\n canvas.clearRect(r.x, r.y, r.width, r.height)\n canvas.restore()\n }\n\n public __updateMask(_value?: boolean): void {\n this.__hasMask = this.children.some(item => item.__.mask && item.__.visible && item.__.opacity)\n }\n\n // LeafMask rewrite\n\n public __renderMask(_canvas: ILeaferCanvas, _options: IRenderOptions): void { }\n\n\n // ---\n\n\n // convert\n\n public __getNowWorld(options: IRenderOptions): IMatrixWithBoundsScaleData {\n if (options.matrix) {\n if (!this.__cameraWorld) this.__cameraWorld = {} as IMatrixWithBoundsScaleData\n const cameraWorld = this.__cameraWorld, world = this.__world\n multiplyParent(world, options.matrix, cameraWorld, undefined, world)\n toOuterOf(this.__layout.renderBounds, cameraWorld, cameraWorld)\n cameraWorld.half !== world.half && (cameraWorld.half = world.half)\n return cameraWorld\n } else {\n return this.__world\n }\n }\n\n public getClampRenderScale(): number {\n let { scaleX } = this.__nowWorld || this.__world\n if (scaleX < 0) scaleX = -scaleX\n return scaleX > 1 ? scaleX : 1\n }\n\n public getRenderScaleData(abs?: boolean, scaleFixed?: IScaleFixed): IScaleData {\n let { scaleX, scaleY } = ImageManager.patternLocked ? this.__world : this.__nowWorld\n if (abs) scaleX < 0 && (scaleX = -scaleX), scaleY < 0 && (scaleY = -scaleY)\n if (scaleFixed === true || (scaleFixed === 'zoom-in' && scaleX > 1 && scaleY > 1)) scaleX = scaleY = 1\n tempScaleData.scaleX = scaleX\n tempScaleData.scaleY = scaleY\n return tempScaleData\n }\n\n public getTransform(relative?: ILocationType | ILeaf): IMatrixData {\n return this.__layout.getTransform(relative || 'local')\n }\n\n\n public getBounds(type?: IBoundsType, relative?: ILocationType | ILeaf): IBoundsData {\n return this.__layout.getBounds(type, relative)\n }\n\n public getLayoutBounds(type?: IBoundsType, relative?: ILocationType | ILeaf, unscale?: boolean): ILayoutBoundsData {\n return this.__layout.getLayoutBounds(type, relative, unscale)\n }\n\n public getLayoutPoints(type?: IBoundsType, relative?: ILocationType | ILeaf): IPointData[] {\n return this.__layout.getLayoutPoints(type, relative)\n }\n\n\n public getWorldBounds(inner: IBoundsData, relative?: ILeaf, change?: boolean): IBoundsData {\n const matrix = relative ? getRelativeWorld(this, relative) : this.worldTransform\n const to = change ? inner : {} as IBoundsData\n toOuterOf(inner, matrix, to)\n return to\n }\n\n\n public worldToLocal(world: IPointData, to?: IPointData, distance?: boolean, relative?: ILeaf): void {\n if (this.parent) {\n this.parent.worldToInner(world, to, distance, relative)\n } else {\n if (to) copy(to, world)\n }\n }\n\n public localToWorld(local: IPointData, to?: IPointData, distance?: boolean, relative?: ILeaf): void {\n if (this.parent) {\n this.parent.innerToWorld(local, to, distance, relative)\n } else {\n if (to) copy(to, local)\n }\n }\n\n public worldToInner(world: IPointData, to?: IPointData, distance?: boolean, relative?: ILeaf): void {\n if (relative) {\n relative.innerToWorld(world, to, distance)\n world = to ? to : world\n }\n toInnerPoint(this.scrollWorldTransform, world, to, distance)\n }\n\n public innerToWorld(inner: IPointData, to?: IPointData, distance?: boolean, relative?: ILeaf): void {\n toOuterPoint(this.scrollWorldTransform, inner, to, distance)\n if (relative) relative.worldToInner(to ? to : inner, null, distance)\n }\n\n // simple\n\n public getBoxPoint(world: IPointData, relative?: ILeaf, distance?: boolean, change?: boolean): IPointData {\n return this.getBoxPointByInner(this.getInnerPoint(world, relative, distance, change), null, null, true)\n }\n\n public getBoxPointByInner(inner: IPointData, _relative?: ILeaf, _distance?: boolean, change?: boolean): IPointData {\n const point = change ? inner : { ...inner } as IPointData, { x, y } = this.boxBounds\n move(point, -x, -y)\n return point\n }\n\n public getInnerPoint(world: IPointData, relative?: ILeaf, distance?: boolean, change?: boolean): IPointData {\n const point = change ? world : {} as IPointData\n this.worldToInner(world, point, distance, relative)\n return point\n }\n\n public getInnerPointByBox(box: IPointData, _relative?: ILeaf, _distance?: boolean, change?: boolean): IPointData {\n const point = change ? box : { ...box } as IPointData, { x, y } = this.boxBounds\n move(point, x, y)\n return point\n }\n\n public getInnerPointByLocal(local: IPointData, _relative?: ILeaf, distance?: boolean, change?: boolean): IPointData {\n return this.getInnerPoint(local, this.parent, distance, change)\n }\n\n public getLocalPoint(world: IPointData, relative?: ILeaf, distance?: boolean, change?: boolean): IPointData {\n const point = change ? world : {} as IPointData\n this.worldToLocal(world, point, distance, relative)\n return point\n }\n\n public getLocalPointByInner(inner: IPointData, _relative?: ILeaf, distance?: boolean, change?: boolean): IPointData {\n return this.getWorldPoint(inner, this.parent, distance, change)\n }\n\n public getPagePoint(world: IPointData, relative?: ILeaf, distance?: boolean, change?: boolean): IPointData {\n const layer = this.leafer ? this.leafer.zoomLayer : this\n return layer.getInnerPoint(world, relative, distance, change)\n }\n\n public getWorldPoint(inner: IPointData, relative?: ILeaf, distance?: boolean, change?: boolean): IPointData {\n const point = change ? inner : {} as IPointData\n this.innerToWorld(inner, point, distance, relative)\n return point\n }\n\n public getWorldPointByBox(box: IPointData, relative?: ILeaf, distance?: boolean, change?: boolean): IPointData {\n return this.getWorldPoint(this.getInnerPointByBox(box, null, null, change), relative, distance, true)\n }\n\n public getWorldPointByLocal(local: IPointData, relative?: ILeaf, distance?: boolean, change?: boolean): IPointData {\n const point = change ? local : {} as IPointData\n this.localToWorld(local, point, distance, relative)\n return point\n }\n\n public getWorldPointByPage(page: IPointData, relative?: ILeaf, distance?: boolean, change?: boolean): IPointData {\n const layer = this.leafer ? this.leafer.zoomLayer : this\n return layer.getWorldPoint(page, relative, distance, change)\n }\n\n\n // transform \n\n public setTransform(matrix: IMatrixData, resize?: boolean, transition?: ITransition): void {\n setTransform(this, matrix, resize, transition)\n }\n\n public transform(matrix: IMatrixData, resize?: boolean, transition?: ITransition): void {\n transform(this, matrix, resize, transition)\n }\n\n public move(x: number | IPointData, y?: number, transition?: ITransition): void {\n moveLocal(this, x, y, transition)\n }\n\n\n public moveInner(x: number | IPointData, y?: number, transition?: ITransition): void {\n moveWorld(this, x, y, true, transition)\n }\n\n public scaleOf(origin: IPointData | IAlign, scaleX: number, scaleY?: number | ITransition, resize?: boolean, transition?: ITransition): void {\n zoomOfLocal(this, getLocalOrigin(this, origin), scaleX, scaleY, resize, transition)\n }\n\n public rotateOf(origin: IPointData | IAlign, rotation: number, transition?: ITransition): void {\n rotateOfLocal(this, getLocalOrigin(this, origin), rotation, transition)\n }\n\n public skewOf(origin: IPointData | IAlign, skewX: number, skewY?: number, resize?: boolean, transition?: ITransition): void {\n skewOfLocal(this, getLocalOrigin(this, origin), skewX, skewY, resize, transition)\n }\n\n\n public transformWorld(worldTransform?: IMatrixData, resize?: boolean, transition?: ITransition): void {\n transformWorld(this, worldTransform, resize, transition)\n }\n\n public moveWorld(x: number | IPointData, y?: number, transition?: ITransition): void {\n moveWorld(this, x, y, false, transition)\n }\n\n public scaleOfWorld(worldOrigin: IPointData, scaleX: number, scaleY?: number | ITransition, resize?: boolean, transition?: ITransition): void {\n zoomOfWorld(this, worldOrigin, scaleX, scaleY, resize, transition)\n }\n\n public rotateOfWorld(worldOrigin: IPointData, rotation: number): void {\n rotateOfWorld(this, worldOrigin, rotation)\n }\n\n public skewOfWorld(worldOrigin: IPointData, skewX: number, skewY?: number, resize?: boolean, transition?: ITransition): void {\n skewOfWorld(this, worldOrigin, skewX, skewY, resize, transition)\n }\n\n public flip(axis: IAxis, transition?: ITransition): void {\n transform(this, getFlipTransform(this, axis), false, transition)\n }\n\n\n // @leafer-in/resize rewrite\n\n public scaleResize(scaleX: number, scaleY = scaleX, _noResize?: boolean): void {\n (this as ILeaf).scaleX *= scaleX;\n (this as ILeaf).scaleY *= scaleY\n }\n\n public __scaleResize(_scaleX: number, _scaleY: number): void { }\n\n\n public resizeWidth(_width: number): void { }\n\n public resizeHeight(_height: number): void { }\n\n\n // @leafer-ui/hit LeafHit rewrite\n\n public hit(_world: IPointData, _hitRadius?: number): boolean { return true }\n\n public __hitWorld(_point: IRadiusPointData): boolean { return true }\n\n public __hit(_local: IRadiusPointData): boolean { return true }\n\n public __hitFill(_inner: IRadiusPointData): boolean { return true }\n\n public __hitStroke(_inner: IRadiusPointData, _strokeWidth: number): boolean { return true }\n\n public __hitPixel(_inner: IRadiusPointData): boolean { return true }\n\n public __drawHitPath(_canvas: ILeaferCanvas): void { }\n\n public __updateHitCanvas(): void { }\n\n // ---\n\n\n // LeafRender rewrite\n\n public __render(_canvas: ILeaferCanvas, _options: IRenderOptions): void { }\n\n public __drawFast(_canvas: ILeaferCanvas, _options: IRenderOptions): void { }\n\n public __draw(_canvas: ILeaferCanvas, _options: IRenderOptions, _originCanvas?: ILeaferCanvas): void { }\n\n\n public __clip(_canvas: ILeaferCanvas, _options: IRenderOptions): void { }\n\n public __renderShape(_canvas: ILeaferCanvas, _options: IRenderOptions): void { }\n\n public __drawShape(_canvas: ILeaferCanvas, _options: IRenderOptions): void { }\n\n\n public __updateWorldOpacity(): void { }\n\n public __updateChange(): void { }\n\n // ---\n\n\n // path\n\n public __drawPath(_canvas: ILeaferCanvas): void { }\n\n public __drawRenderPath(_canvas: ILeaferCanvas): void { }\n\n public __updatePath(): void { }\n\n public __updateRenderPath(): void { }\n\n // ---\n\n\n // @leafer-in/motion-path rewrite\n\n public getMotionPathData(): IMotionPathData {\n return Plugin.need('path')\n }\n\n public getMotionPoint(_motionDistance: number | IUnitData): IRotationPointData {\n return Plugin.need('path')\n }\n\n public getMotionTotal(): number {\n return 0\n }\n\n public __updateMotionPath(): void { }\n\n // ---\n\n\n // @leafer-in/animate rewrite\n public __runAnimation(_type: 'in' | 'out', _complete?: IFunction): void { }\n\n\n // Branch rewrite\n\n public __updateSortChildren(): void { }\n\n public add(_child: ILeaf | ILeaf[] | ILeafInputData | ILeafInputData[], _index?: number): void { }\n\n public remove(_child?: ILeaf | number | string | IFindMethod, destroy?: boolean): void {\n if (this.parent) this.parent.remove(this, destroy)\n }\n\n public dropTo(parent: ILeaf, index?: number, resize?: boolean): void {\n drop(this, parent, index, resize)\n }\n\n // ---\n\n\n // LeafEventer rewrite\n\n public on(_type: string | string[] | IEventParams[] | IEventParamsMap, _listener?: IEventListener, _options?: IEventOption): void { }\n\n public off(_type?: string | string[], _listener?: IEventListener, _options?: IEventOption): void { }\n\n public on_(_type: string | string[] | IEventParams[], _listener?: IEventListener, _bind?: IObject, _options?: IEventOption): IEventListenerId { return undefined }\n\n public off_(_id: IEventListenerId | IEventListenerId[]): void { }\n\n public once(_type: string | string[] | IEventParams[], _listener?: IEventListener, _captureOrBind?: boolean | IObject, _capture?: boolean): void { }\n\n public emit(_type: string, _event?: IEvent | IObject, _capture?: boolean): void { }\n\n public emitEvent(_event?: IEvent, _capture?: boolean): void { }\n\n public hasEvent(_type: string, _capture?: boolean): boolean { return false }\n\n // ---\n\n static changeAttr(attrName: string, defaultValue: IValue | IValueFunction, fn?: IAttrDecorator): void {\n fn ? this.addAttr(attrName, defaultValue, fn) : defineDataProcessor(this.prototype, attrName, defaultValue)\n }\n\n static addAttr(attrName: string, defaultValue: IValue | IValueFunction, fn?: IAttrDecorator, helpValue?: IValue): void {\n if (!fn) fn = boundsType\n fn(defaultValue, helpValue)(this.prototype, attrName)\n }\n\n\n public __emitLifeEvent(type: string): void {\n if (this.hasEvent(type)) this.emitEvent(new ChildEvent(type, this, this.parent))\n }\n\n\n public destroy(): void {\n if (!this.destroyed) {\n if (this.parent) this.remove()\n if (this.children) (this as unknown as IBranch).clear()\n\n this.__emitLifeEvent(ChildEvent.DESTROY)\n\n this.__.destroy()\n this.__layout.destroy();\n\n (this as ILeaf).destroyEventer()\n this.destroyed = true\n }\n }\n\n}\n","import { IBoundsData, ILeaf } from '@leafer/interface'\nimport { ChildEvent } from '@leafer/event'\nimport { BoundsHelper } from '@leafer/math'\nimport { BranchHelper, LeafBoundsHelper } from '@leafer/helper'\nimport { useModule } from '@leafer/decorator'\nimport { BranchRender } from '@leafer/display-module'\nimport { UICreator } from '@leafer/platform'\nimport { isArray, isUndefined } from '@leafer/data'\nimport { Debug } from '@leafer/debug'\n\nimport { Leaf } from './Leaf'\n\n\nconst { setListWithFn } = BoundsHelper\nconst { sort } = BranchHelper\nconst { localBoxBounds, localStrokeBounds, localRenderBounds, maskLocalBoxBounds, maskLocalStrokeBounds, maskLocalRenderBounds } = LeafBoundsHelper\nconst debug = new Debug('Branch')\n\n@useModule(BranchRender)\nexport class Branch extends Leaf { // tip: rewrited Group\n\n // overwrite\n\n public __updateStrokeSpread(): number {\n const { children } = this\n for (let i = 0, len = children.length; i < len; i++) {\n if (children[i].__layout.strokeSpread) return 1\n }\n return 0\n }\n\n public __updateRenderSpread(): number {\n const { children } = this\n for (let i = 0, len = children.length; i < len; i++) {\n if (children[i].__layout.renderSpread) return 1\n }\n return 0\n }\n\n public __updateBoxBounds(_secondLayout?: boolean, bounds?: IBoundsData): void {\n setListWithFn(bounds || this.__layout.boxBounds, this.children, this.__hasMask ? maskLocalBoxBounds : localBoxBounds)\n }\n\n public __updateStrokeBounds(bounds?: IBoundsData): void {\n setListWithFn(bounds || this.__layout.strokeBounds, this.children, this.__hasMask ? maskLocalStrokeBounds : localStrokeBounds)\n }\n\n public __updateRenderBounds(bounds?: IBoundsData): void {\n setListWithFn(bounds || this.__layout.renderBounds, this.children, this.__hasMask ? maskLocalRenderBounds : localRenderBounds)\n }\n\n\n // own\n\n public __updateSortChildren(): void {\n let affectSort: boolean\n const { children } = this\n if (children.length > 1) {\n for (let i = 0, len = children.length; i < len; i++) {\n children[i].__tempNumber = i\n if (children[i].__.zIndex) affectSort = true\n }\n children.sort(sort)\n this.__layout.affectChildrenSort = affectSort\n }\n }\n\n public add(child: ILeaf, index?: number): void {\n if (child === this || child.destroyed) return debug.warn('add self or destroyed')\n\n const noIndex = isUndefined(index)\n if (!child.__) {\n if (isArray(child)) return child.forEach(item => { this.add(item, index); noIndex || index++ }) // add []\n else child = UICreator.get(child.tag, child) // add JSON\n }\n\n if (child.parent) child.parent.remove(child)\n child.parent = this\n\n noIndex ? this.children.push(child) : this.children.splice(index, 0, child)\n if (child.isBranch) this.__.__childBranchNumber = (this.__.__childBranchNumber || 0) + 1\n\n const childLayout = child.__layout\n childLayout.boxChanged || childLayout.boxChange() // layouted(removed), need update\n childLayout.matrixChanged || childLayout.matrixChange() // layouted(removed), need update\n\n if (child.__bubbleMap) child.__emitLifeEvent(ChildEvent.ADD)\n\n if (this.leafer) {\n child.__bindLeafer(this.leafer)\n if (this.leafer.created) this.__emitChildEvent(ChildEvent.ADD, child)\n }\n\n this.__layout.affectChildrenSort && this.__layout.childrenSortChange()\n }\n\n public addMany(...children: ILeaf[]): void { this.add(children as any) }\n\n public remove(child?: ILeaf, destroy?: boolean): void {\n if (child) {\n\n if (child.__) {\n\n if ((child as ILeaf).animationOut) child.__runAnimation('out', () => this.__remove(child, destroy))\n else this.__remove(child, destroy)\n\n } else this.find(child as any).forEach(item => this.remove(item, destroy)) // \n\n } else if (isUndefined(child)) {\n super.remove(null, destroy)\n }\n }\n\n public removeAll(destroy?: boolean): void {\n const { children } = this\n if (children.length) {\n this.children = []\n this.__preRemove()\n this.__.__childBranchNumber = 0\n children.forEach(child => {\n this.__realRemoveChild(child)\n if (destroy) child.destroy()\n })\n }\n }\n\n public clear(): void {\n this.removeAll(true)\n }\n\n protected __remove(child?: ILeaf, destroy?: boolean): void {\n const index = this.children.indexOf(child)\n if (index > -1) {\n this.children.splice(index, 1)\n if (child.isBranch) this.__.__childBranchNumber = (this.__.__childBranchNumber || 1) - 1\n this.__preRemove()\n this.__realRemoveChild(child)\n if (destroy) child.destroy()\n }\n }\n\n protected __preRemove(): void {\n if (this.__hasMask) this.__updateMask()\n if (this.__hasEraser) this.__updateEraser()\n this.__layout.boxChange()\n this.__layout.affectChildrenSort && this.__layout.childrenSortChange()\n }\n\n protected __realRemoveChild(child: ILeaf): void {\n child.__emitLifeEvent(ChildEvent.REMOVE)\n child.parent = null\n if (this.leafer) {\n child.__bindLeafer(null)\n if (this.leafer.created) {\n this.__emitChildEvent(ChildEvent.REMOVE, child)\n if (this.leafer.hitCanvasManager) this.leafer.hitCanvasManager.clear()\n }\n }\n }\n\n protected __emitChildEvent(type: string, child: ILeaf): void {\n const event = new ChildEvent(type, child, this)\n if (this.hasEvent(type) && !this.isLeafer) this.emitEvent(event)\n this.leafer.emitEvent(event)\n }\n\n}","import { ILeaf, ILeafList, ILeafListItemCallback, INumberMap } from '@leafer/interface'\nimport { isArray, isUndefined } from '@leafer/data'\n\nexport class LeafList implements ILeafList {\n\n public list: ILeaf[]\n public keys: INumberMap\n\n public get length(): number { return this.list.length }\n\n constructor(item?: ILeaf | ILeaf[]) {\n this.reset()\n if (item) isArray(item) ? this.addList(item) : this.add(item)\n }\n\n public has(leaf: ILeaf): boolean {\n return leaf && !isUndefined(this.keys[leaf.innerId])\n }\n\n public indexAt(index: number): ILeaf {\n return this.list[index]\n }\n\n public indexOf(leaf: ILeaf): number {\n const index = this.keys[leaf.innerId]\n return isUndefined(index) ? -1 : index\n }\n\n\n public add(leaf: ILeaf): void {\n const { list, keys } = this\n if (isUndefined(keys[leaf.innerId])) {\n list.push(leaf)\n keys[leaf.innerId] = list.length - 1\n }\n }\n\n public addAt(leaf: ILeaf, index = 0): void {\n const { keys } = this\n if (isUndefined(keys[leaf.innerId])) {\n const { list } = this\n for (let i = index, len = list.length; i < len; i++) keys[list[i].innerId]++\n if (index === 0) {\n list.unshift(leaf)\n } else {\n if (index > list.length) index = list.length\n list.splice(index, 0, leaf)\n }\n keys[leaf.innerId] = index\n }\n }\n\n public addList(list: ILeaf[]): void {\n for (let i = 0; i < list.length; i++) this.add(list[i])\n }\n\n\n public remove(leaf: ILeaf): void {\n const { list } = this\n let findIndex: number\n for (let i = 0, len = list.length; i < len; i++) {\n if (!isUndefined(findIndex)) {\n this.keys[list[i].innerId] = i - 1 // update rest keys\n } else if (list[i].innerId === leaf.innerId) {\n findIndex = i\n delete this.keys[leaf.innerId]\n }\n }\n\n if (!isUndefined(findIndex)) list.splice(findIndex, 1)\n }\n\n\n public sort(reverse?: boolean): void {\n const { list } = this\n if (reverse) {\n list.sort((a, b) => b.__level - a.__level) // 倒序\n } else {\n list.sort((a, b) => a.__level - b.__level) // 顺序\n }\n }\n\n public forEach(itemCallback: ILeafListItemCallback): void {\n this.list.forEach(itemCallback)\n }\n\n public clone(): ILeafList {\n const list = new LeafList()\n list.list = [...this.list]\n list.keys = { ...this.keys }\n return list\n }\n\n\n public update(): void {\n this.keys = {}\n const { list, keys } = this\n for (let i = 0, len = list.length; i < len; i++) keys[list[i].innerId] = i\n }\n\n public reset(): void {\n this.list = []\n this.keys = {}\n }\n\n public destroy(): void {\n this.reset()\n }\n}\n","import { IAutoBounds, IAutoBoundsData, IBounds, ISizeData } from '@leafer/interface'\nimport { isObject } from '@leafer/data'\n\nimport { Bounds } from './Bounds'\n\n\nexport class AutoBounds implements IAutoBounds {\n\n public top: number\n public right: number\n public bottom: number\n public left: number\n\n public width: number\n public height: number\n\n constructor(top?: number | IAutoBoundsData, right?: number, bottom?: number, left?: number, width?: number, height?: number) {\n isObject(top) ? this.copy(top) : this.set(top, right, bottom, left, width, height)\n }\n\n set(top = 0, right = 0, bottom = 0, left = 0, width = 0, height = 0): void {\n this.top = top\n this.right = right\n this.bottom = bottom\n this.left = left\n this.width = width\n this.height = height\n }\n\n copy(autoSize: IAutoBoundsData): void {\n const { top, right, bottom, left, width, height } = autoSize\n this.set(top, right, bottom, left, width, height)\n }\n\n getBoundsFrom(parent: ISizeData): IBounds {\n const { top, right, bottom, left, width, height } = this\n return new Bounds(left, top, width ? width : parent.width - left - right, height ? height : parent.height - top - bottom)\n }\n\n}","import { ILeaferCanvas, IScreenSizeData, ICanvasManager } from '@leafer/interface'\nimport { Creator } from '@leafer/platform'\n\nexport class CanvasManager implements ICanvasManager {\n\n public list: ILeaferCanvas[] = []\n\n public add(canvas: ILeaferCanvas): void {\n canvas.manager = this\n this.list.push(canvas)\n }\n\n public get(size: IScreenSizeData): ILeaferCanvas {\n let old: ILeaferCanvas\n const { list } = this\n for (let i = 0, len = list.length; i < len; i++) {\n old = list[i]\n if (old.recycled && old.isSameSize(size)) {\n old.recycled = false\n old.manager || (old.manager = this)\n return old\n }\n }\n\n const canvas = Creator.canvas(size)\n this.add(canvas)\n return canvas\n }\n\n public recycle(old: ILeaferCanvas): void {\n old.recycled = true\n }\n\n public clearRecycled(): void {\n let canvas: ILeaferCanvas\n const filter: ILeaferCanvas[] = []\n for (let i = 0, len = this.list.length; i < len; i++) {\n canvas = this.list[i]\n canvas.recycled ? canvas.destroy() : filter.push(canvas)\n }\n this.list = filter\n }\n\n public clear(): void {\n this.list.forEach(item => { item.destroy() })\n this.list.length = 0\n }\n\n public destroy(): void {\n this.clear()\n }\n\n}","import { ILeaf, ILeafArrayMap, ILeafLevelList, ILeafListItemCallback, INumberMap } from '@leafer/interface'\nimport { isArray, isUndefined } from '@leafer/data'\n\nexport class LeafLevelList implements ILeafLevelList {\n\n public levelMap: ILeafArrayMap\n public keys: INumberMap\n public levels: number[]\n\n public get length(): number { return this._length }\n private _length = 0\n\n constructor(item?: ILeaf | ILeaf[]) {\n this.reset()\n if (item) isArray(item) ? this.addList(item) : this.add(item)\n }\n\n public has(leaf: ILeaf): boolean {\n return !isUndefined(this.keys[leaf.innerId])\n }\n\n public without(leaf: ILeaf): boolean {\n return isUndefined(this.keys[leaf.innerId])\n }\n\n public sort(reverse?: boolean): void {\n const { levels } = this\n if (reverse) {\n levels.sort((a, b) => b - a) // 倒序\n } else {\n levels.sort((a, b) => a - b) // 顺序\n }\n }\n\n public addList(list: ILeaf[]): void {\n list.forEach(leaf => { this.add(leaf) })\n }\n\n public add(leaf: ILeaf): void {\n const { keys, levelMap } = this\n if (!keys[leaf.innerId]) {\n keys[leaf.innerId] = 1\n if (!levelMap[leaf.__level]) {\n levelMap[leaf.__level] = [leaf]\n this.levels.push(leaf.__level)\n } else {\n levelMap[leaf.__level].push(leaf)\n }\n this._length++\n }\n }\n\n public forEach(itemCallback: ILeafListItemCallback): void {\n let list: ILeaf[]\n this.levels.forEach(level => {\n list = this.levelMap[level]\n for (let i = 0, len = list.length; i < len; i++) {\n itemCallback(list[i])\n }\n })\n }\n\n public reset(): void {\n this.levelMap = {}\n this.keys = {}\n this.levels = []\n this._length = 0\n }\n\n public destroy(): void {\n this.levelMap = null\n }\n\n}","import { IPathDrawer } from '@leafer/interface'\n\nimport { roundRect } from './roundRect'\n\nexport function canvasPatch(drawer: IPathDrawer): void {\n roundRect(drawer)\n}","import { IObject } from '@leafer/interface'\nimport { EventCreator, UICreator } from '@leafer/platform'\n\nexport function registerUI() {\n return (target: IObject) => {\n UICreator.register(target)\n }\n}\n\nexport function registerUIEvent() {\n return (target: IObject) => {\n EventCreator.register(target)\n }\n}","export * from '@leafer/canvas'\nexport * from '@leafer/image'\n\nexport * from '@leafer/data'\nexport * from '@leafer/debug'\nexport * from '@leafer/decorator'\nexport * from '@leafer/display'\nexport * from '@leafer/display-module'\n\nexport * from '@leafer/event'\n\nexport * from '@leafer/file'\nexport * from '@leafer/helper'\nexport * from '@leafer/layout'\nexport * from '@leafer/list'\nexport * from '@leafer/math'\n\nexport * from '@leafer/path'\nexport * from '@leafer/platform'\n\nexport * from '@leafer/task'\n\nexport const version = \"1.9.6\""],"names":["Platform","toURL","text","fileType","url","encodeURIComponent","image","hitCanvasSize","maxCacheSize","maxPatternSize","crossOrigin","getRealURL","prefix","suffix","startsWith","includes","IncrementId","RUNTIME","LEAF","TASK","CNAVAS","IMAGE","types","create","typeName","I","Answer","isUndefined","value","undefined","isNull","isString","isFinite","Number","isNumber","numberReg","isArray","Array","isObject","isEmptyData","JSON","stringify","DataHelper","default","t","defaultData","assign","merge","exclude","Object","keys","forEach","key","constructor","_a","_b","copyAttrs","from","include","clone","data","parse","toMap","list","map","i","len","length","stintSet","attrName","LeafData","__useNaturalRatio","__isLinePath","path","this","__usePathBox","__pathInputed","__blendMode","eraser","blendMode","leaf","__leaf","__get","name","__input","__getData","tag","inputValue","__setInput","__getInput","__removeInput","__getInputData","names","options","matrix","a","b","c","d","e","f","__localMatrix","__setMiddle","__middle","__getMiddle","__checkSingle","opacity","isBranch","__hasMultiPaint","__hasEraser","filter","__single","__removeNaturalSize","__naturalWidth","__naturalHeight","destroy","round","pow","PI","Math","MathHelper","within","min","max","fourNumber","num","maxValue","formatRotation","rotation","unsign","float","getGapRotation","addRotation","gap","oldRotation","r","abs","maxLength","sign","getScaleData","scale","size","originSize","scaleData","scaleX","width","scaleY","height","assignScale","x","y","randInt","randColor","random","OneRadian","PI2","PI_2","getPointData","getBoundsData","getMatrixData","sin","cos","acos","sqrt","tempPoint","getWorld","skewX","skewY","MatrixHelper","defaultMatrix","defaultWorld","tempMatrix","set","get","copy","translate","translateInner","hasOrigin","scaleOfOuter","origin","M","toInnerPoint","scaleOfInner","rotate","cosR","sinR","rotateOfOuter","rotateOfInner","skew","skewOfOuter","skewOfInner","multiply","child","multiplyParent","parent","to","abcdChanged","childScaleData","divide","tempInvert","divideParent","invert","s","toOuterPoint","inner","distance","outer","setLayout","layout","around","bcChanged","sx","sy","getLayout","firstSkewY","withScale","world","reset","atan2","PointHelper","defaultPoint","tempRadiusPoint","setRadius","radiusX","radiusY","point","copyFrom","halfPixel","move","scaleOf","P","rx","ry","tempToInnerOf","temp","tempToOuterOf","tempToInnerRadiusPointOf","toInnerRadiusPointOf","toInnerOf","toOuterOf","getCenter","getCenterX","x1","x2","getCenterY","y1","y2","getDistance","getDistanceFrom","getMinDistanceFrom","x3","y3","getAngle","getAtan2","getRotation","toOrigin","getRadianFrom","fromX","fromY","originX","originY","toX","toY","toOriginX","toOriginY","getDistancePoint","changeTo","toNumberPoints","originPoints","points","p","push","Point","rotateOf","Matrix","setWith","dataWithScale","scaleWith","angle","invertWith","TwoPointBoundsHelper","tempPointBounds","setPoint","minX","minY","maxX","maxY","addPoint","addBounds","pb","addPointBounds","toBounds","setBounds","Direction4","Direction9","directionData","item","type","AroundHelper","toPoint","box","onlyBoxSize","content","onlyContentSize","getPoint","AlignHelper","align","TB","floor","ceil","right","bottom","boundsRight","boundsBottom","tempBounds","BoundsHelper","bounds","copyAndSpread","spread","isShrink","side","four","B","scroll","scrollX","scrollY","getByMove","toOffsetOutBounds","offsetX","offsetY","onlySize","getOuterOf","getFitMatrix","put","baseScale","getFitScale","isCoverMode","sw","sh","putScale","changeSize","getSpread","n","shrink","add","isPoint","addList","setListWithFn","setList","addMode","addListWithFn","boundsDataFn","first","setPoints","index","getPoints","hitRadiusPoint","pointMatrix","hitPoint","hit","other","otherMatrix","getIntersectData","intersect","isSame","isEmpty","Bounds","boundsList","boundsMatrix","getIntersect","StringNumberMap","E","Debug","repeatMap","filterList","getNameList","excludeList","drawRepaint","canvas","color","fillWorld","replace","strokeWorld","drawBounds","_options","showHit","showBounds","w","__nowWorld","setWorld","__drawHitPath","fillStyle","fill","resetTransform","setStroke","stroke","log","messages","D","enable","every","some","console","tip","warn","showWarn","repeat","error","Error","debug","Run","currentId","currentName","idMap","nameMap","nameToIdMap","start","microsecond","id","R","performance","now","Date","end","time","duration","endOfName","check","Plugin","needPlugins","has","rs","need","setTimeout","Creator","editor","UICreator","register","UI","__tag","prototype","ui","EventCreator","nameList","Event","changeName","oldName","newName","constName","find","params","__decorate","decorators","target","desc","arguments","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__awaiter","thisArg","_arguments","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","contextAttr","realName","property","context","SuppressedError","contextMethodNameList","contextMethod","_target","emptyArray","Canvas","globalCompositeOperation","dashPattern","setLineDash","getLineDash","__bindContext","method","bind","textBaseline","setTransform","_c","_d","_e","_f","getTransform","save","restore","transform","_x","_y","_angle","_path2d","_rule","clip","fillRect","_width","_height","strokeRect","clearRect","drawImage","dx","dy","dw","dh","beginPath","moveTo","lineTo","bezierCurveTo","_cp1x","_cp1y","_cp2x","_cp2y","quadraticCurveTo","_cpx","_cpy","closePath","arc","_radius","_startAngle","_endAngle","_anticlockwise","arcTo","_x1","_y1","_x2","_y2","ellipse","_radiusX","_radiusY","_rotation","rect","roundRect","createConicGradient","createLinearGradient","_x0","_y0","createPattern","_image","_repetition","createRadialGradient","_r0","_r1","fillText","_text","_maxWidth","measureText","strokeText","tempPixelBounds","tempPixelBounds2","minSize","pixelRatio","canvasSizeAttrs","PathHelper","creator","_pathString","_curveMode","convertToCanvasData","_old","CanvasCommandOnlyMap","N","X","G","F","O","U","PathCommandMap","m","L","l","H","h","V","v","C","S","Q","q","T","A","Z","z","PathCommandLengthMap","NeedConvertToCanvasCommandMap","NeedConvertToCurveCommandMap","PathNumberCommandMap","PathNumberCommandLengthMap","RectHelper","drawRoundRect","drawer","cornerRadius","hypot","BezierHelper","curve","close","aX","aY","bX","bY","cX","cY","c1X","c1Y","c2X","c2Y","ba","cb","radius","setPointBounds","setEndPoint","setStartPoint","BAx","BAy","CBx","CBy","startRadian","endRadian","lenBA","lenCB","totalRadian","anticlockwise","centerX","centerY","startAngle","endAngle","cx","cy","rotationRadian","rotationSin","rotationCos","parts","partRadian","partRadian4Sin","control","endCos","endSin","startCos","startSin","startX","startY","toTwoPointBounds","toTwoPointBoundsByQuadraticCurve","pointBounds","tList","t1","t2","sqrtV","z1","z2","o","getPointAndSet","getDerivative","fromV","v1","v2","toV","EllipseHelper","ellipticalArc","largeFlag","sweepFlag","curveMode","halfX","halfY","px","py","rxSquare","rySquare","pySquare","pxSquare","ellipseToCurve","Command","PathConvert","current","dot","floatLength","count","command","lastCommand","str","j","pathString","needConvert","char","lastChar","convertCommand","pushData","toCanvasData","old","controlX","controlY","smooth","copyData","objectToCanvasData","strNum","tan","startPoint","PathCommandDataHelper","fourCorners","lastX","lastY","drawEllipse","drawArc","drawPoints","PathCreator","__path","paint","clearPath","PathDrawer","drawPathByData","PathBounds","PathCorner","_cornerSmoothing","commandLen","secondX","secondY","pen","FileHelper","alphaPixelTypes","upperCaseTypeMap","mineType","filename","split","isOpaqueImage","getExportOptions","quality","blob","toUpperCase","TaskItem","task","parallel","run","isComplete","running","complete","cancel","isCancel","TaskProcessor","total","delayNumber","finishedIndex","parallelSuccessNumber","remain","percent","totalTime","runTime","config","empty","taskCallback","delay","timer","parallelList","pause","clearTimeout","resume","skip","stop","setParallelList","runParallelTasks","runTask","onComplete","onTask","nextTask","catch","onError","runParallelTask","fillParallelTask","onParallelError","pop","parallelWaitNumber","nextIndex","Resource","tasker","remove","loadImage","format","setImage","load","view","ImageManager","maxRecycled","recycledList","patternTasker","use","recycle","clearRecycled","hasAlphaPixel","isFormat","defineKey","descriptor","noConfigurable","configurable","enumerable","getDescriptor","object","createDescriptor","defaultValue","privateKey","decorateLeafAttr","descriptorFn","defineLeafAttr","attr","partDescriptor","defaultDescriptor","__getAttr","__setAttr","defineDataProcessor","boundsType","checkFiniteNumber","doBoundsType","__layout","boxChanged","boxChange","__hasAutoLayout","matrixChanged","matrixChange","pathType","affectStrokeBoundsType","useStroke","doStrokeType","__","__useStroke","strokeChanged","strokeChange","__useArrow","strokeType","checkMask","__hasMask","__updateMask","forceUpdate","doVisible","oldValue","opacityChanged","opacityChange","__DataProcessor","computedKey","setMethodName","charAt","slice","getSetMethodName","isBox","isBranchLeaf","naturalWidth","pathInputed","boxBounds","children","naturalHeight","__proto__","excludeNames","doRewrite","useModule","module","getOwnPropertyNames","writable","LeafHelper","updateAllMatrix","checkAutoLayout","waitAutoLayout","updateMatrix","__updateLocalMatrix","__updateWorldMatrix","updateBounds","boundsChanged","__updateLocalBounds","__updateWorldBounds","updateAllWorldOpacity","__updateWorldOpacity","updateChange","stateStyleChanged","updateState","__updateChange","updateAllChange","worldHittable","hittable","draggable","editable","hitSelf","locked","copyCanvasByWorld","currentCanvas","fromCanvas","fromWorld","onlyResetTransform","__worldFlipped","fullImageShadow","copyWorldByReset","copyWorldToInner","renderBounds","moveWorld","isInnerPoint","transition","local","localTransform","scrollWorldTransform","moveLocal","leafer","pointSnap","animate","zoomOfWorld","resize","zoomOfLocal","getTempLocal","hasHighPosition","scaleResize","rotateOfWorld","rotateOfLocal","skewOfWorld","skewOfLocal","transformWorld","worldTransform","originPoint","getInnerOrigin","hasOffset","changedPoint","getFlipTransform","axis","getLocalOrigin","innerOrigin","getRelativeWorld","relative","drop","hasParent","animateMove","speed","requestRender","worldPoint","updateLayout","LeafBoundsHelper","worldBounds","__world","localBoxBounds","visible","__local","localStrokeBounds","localRenderBounds","maskLocalBoxBounds","__localBoxBounds","maskLocalStrokeBounds","maskLocalRenderBounds","excludeRenderBounds","hideBounds","findMask","mask","BranchHelper","sort","zIndex","__tempNumber","pushAllChildBranch","branch","leafList","__childBranchNumber","pushAllParent","innerId","pushAllBranchStack","pushList","branchStack","updateBoundsByBranchStack","WaitHelper","wait","splice","localContent","worldContent","worldBox","worldStroke","LeafLayout","contentBounds","_contentBounds","strokeBounds","_strokeBounds","_renderBounds","localContentBounds","_localStrokeBounds","_localRenderBounds","worldContentBounds","worldBoxBounds","worldStrokeBounds","createLocal","update","isApp","ready","watcher","changed","layouter","root","__fullLayouting","zoomLayer","getBounds","getWorldBounds","getLocalBounds","getInnerBounds","getLayoutBounds","unscale","layoutBounds","getWorldPoint","getLocalPointByInner","uScaleX","uScaleY","getLayoutPoints","relativeLeaf","innerToWorld","shrinkContent","spreadStroke","renderSpread","spreadRenderCancel","spreadRender","shrinkContentCancel","spreadStrokeCancel","same","localBoxChanged","localBoxChange","hitCanvasChanged","strokeSpread","renderChange","renderChanged","scaleChange","scaleChanged","_scaleOrRotationChange","rotationChange","rotationChanged","affectRotation","affectScaleOrRotation","surfaceChange","surfaceChanged","childrenSortChange","childrenSortChanged","affectChildrenSort","bubbles","stopDefault","isStopDefault","event","stopNow","isStopNow","isStop","ChildEvent","super","ADD","REMOVE","CREATED","MOUNTED","UNMOUNTED","DESTROY","SCROLL","PropertyEvent","newValue","CHANGE","LEAFER_CHANGE","extraPropertyEventMap","ImageEvent","LOAD","LOADED","ERROR","BoundsEvent","checkHas","mode","WORLD","__hasWorldEvent","__hasLocalEvent","hasEvent","RESIZE","INNER","LOCAL","emitLocal","leaferIsReady","resized","emit","emitWorld","boundsEventMap","ResizeEvent","bigger","smaller","samePixelRatio","oldSize","isResizing","resizingKeys","WatchEvent","REQUEST","DATA","LayoutEvent","times","START","BEFORE","LAYOUT","AFTER","AGAIN","END","RenderEvent","renderOptions","CHILD_START","CHILD_END","RENDER","NEXT","LeaferEvent","BEFORE_READY","READY","AFTER_READY","VIEW_READY","VIEW_COMPLETED","STOP","RESTART","UPDATE_MODE","TRANSFORM","MOVE","SCALE","ROTATE","SKEW","leaferTransformAttrMap","Eventer","on","listener","capture","once","events","__getListenerMap","typeList","findIndex","off","__bubbleMap","__captureMap","on_","off_","captureOrBind","syncEventer","emitEvent","hasB","hasC","eventer","LeafEventer","destroyEventer","LeafDataProxy","leaferIsCreated","innerName","__realSetAttr","isLeafer","transformEventName","emitPropertyEvent","extraPropertyEvent","__proxyData","setProxyAttr","normalStyle","lockNormalStyle","getProxyAttr","LeafMatrix","__scrollWorld","LeafBounds","__onUpdateSize","__updatePath","__updateRenderPath","__updateBoxBounds","__updateLocalBoxBounds","__updateStrokeSpread","__updateStrokeBounds","__updateLocalStrokeBounds","strokeBoxSpread","__updateRenderSpread","__updateRenderBounds","__updateLocalRenderBounds","__hasMotionPath","__updateMotionPath","__updateAutoLayout","_secondLayout","_bounds","__extraUpdate","flow","__updateFlowLayout","__autoSide","__updateNaturalSize","LeafRender","__render","shape","__renderShape","__worldOpacity","__getNowWorld","dimOpacity","dimskip","__renderEraser","tempCanvas","getSameCanvas","__draw","__drawShape","__clip","__drawRenderPath","clipUI","BranchRender","__updateSortChildren","dim","__renderBranch","nowWorld","__renderMask","tempScaleData","Leaf","_value","__LayoutProcessor","created","worldRenderBounds","worldOpacity","__onlyHitMask","hitChildren","__ignoreHitWorld","__inLazyBounds","lazyBounds","__emitLifeEvent","forceRender","__level","resetCustom","toJSON","waitParent","waitLeafer","nextRender","removeNextRender","__bindLeafer","leafs","animation","__runAnimation","_data","_isTemp","_name","setAttr","getAttr","getComputedAttr","toString","toSVG","__SVG","toHTML","_attrName","_newValue","_condition","findTag","_tag","findOne","findId","_id","focus","_sync","addExtra","__updateContentBounds","__updateEraser","_canvas","__cameraWorld","cameraWorld","half","getClampRenderScale","getRenderScaleData","scaleFixed","patternLocked","change","worldToLocal","worldToInner","localToWorld","getBoxPoint","getBoxPointByInner","getInnerPoint","_relative","_distance","getInnerPointByBox","getInnerPointByLocal","getLocalPoint","getPagePoint","getWorldPointByBox","getWorldPointByLocal","getWorldPointByPage","page","moveInner","skewOf","scaleOfWorld","worldOrigin","flip","_noResize","__scaleResize","_scaleX","_scaleY","resizeWidth","resizeHeight","_world","_hitRadius","__hitWorld","_point","__hit","_local","__hitFill","_inner","__hitStroke","_strokeWidth","__hitPixel","__updateHitCanvas","__drawFast","_originCanvas","__drawPath","getMotionPathData","getMotionPoint","_motionDistance","getMotionTotal","_type","_complete","_child","_index","dropTo","_listener","_bind","_captureOrBind","_capture","_event","changeAttr","fn","addAttr","helpValue","destroyed","clear","Branch","affectSort","noIndex","childLayout","__emitChildEvent","addMany","animationOut","__remove","removeAll","__preRemove","__realRemoveChild","indexOf","hitCanvasManager","LeafList","indexAt","addAt","unshift","reverse","itemCallback","top","left","autoSize","getBoundsFrom","manager","recycled","isSameSize","_length","without","levels","levelMap","level","pixelWidth","pixelHeight","pixelSnap","allowBackgroundColor","parentView","autoLayout","devicePixelRatio","init","__createContext","contextSettings","getContext","_filename","toBlob","_quality","toDataURL","saveAs","safeResize","takeCanvas","unreal","copyWorld","updateViewSize","updateClientBounds","clearWorld","getClientBounds","clientBounds","startAutoLayout","_autoBounds","stopAutoLayout","setCursor","_cursor","parentMatrix","useWorldTransform","strokeWidth","childOptions","strokeStyle","setStrokeOptions","strokeCap","strokeJoin","dashOffset","miterLimit","saveBlendMode","savedBlendMode","restoreBlendMode","hitFill","_fillRule","hitStroke","hitPixel","_radiusPoint","_offset","_scale","setWorldShadow","blur","shadowOffsetX","shadowOffsetY","shadowBlur","shadowColor","setWorldBlur","ceilPixel","setTempPixelBounds","setTempPixelBounds2","toInnerBounds","useGrayscaleAlpha","alpha","pixel","imageData","getImageData","putImageData","useMask","maskCanvas","fromBounds","useEraser","eraserCanvas","clipWorld","ruleData","windingRule","copyToPixelBounds","pixelBounds","useSameWorldTransform","useSameSmooth","clearBounds","updateRender","unrealCanvas","completed","waitComplete","setView","isSVG","onSuccess","loading","loadImageWithProgress","onProgress","showProgress","img","unload","stopEvent","progress","isSuccess","odd","getFull","_filters","getCanvas","xGap","yGap","cache","createCanvas","ctx","globalAlpha","imageSmoothingEnabled","getPattern","pattern","updateCursor","processor","_key","__pathForRender","test"],"mappings":"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","x_google_ignoreList":[23]}
1
+ {"version":3,"file":"core.min.cjs","sources":["../../../../../../src/leafer/packages/platform/platform/src/Platform.ts","../../../../../../src/leafer/packages/math/src/IncrementId.ts","../../../../../../src/leafer/packages/display-module/data/src/data.ts","../../../../../../src/leafer/packages/display-module/data/src/DataHelper.ts","../../../../../../src/leafer/packages/display-module/data/src/LeafData.ts","../../../../../../src/leafer/packages/math/src/MathHelper.ts","../../../../../../src/leafer/packages/math/src/MatrixHelper.ts","../../../../../../src/leafer/packages/math/src/PointHelper.ts","../../../../../../src/leafer/packages/math/src/Point.ts","../../../../../../src/leafer/packages/math/src/Matrix.ts","../../../../../../src/leafer/packages/math/src/TwoPointBoundsHelper.ts","../../../../../../src/leafer/packages/math/src/Direction.ts","../../../../../../src/leafer/packages/math/src/AroundHelper.ts","../../../../../../src/leafer/packages/math/src/AlignHelper.ts","../../../../../../src/leafer/packages/math/src/BoundsHelper.ts","../../../../../../src/leafer/packages/math/src/Bounds.ts","../../../../../../src/leafer/packages/math/src/StringNumber.ts","../../../../../../src/leafer/packages/debug/src/Debug.ts","../../../../../../src/leafer/packages/debug/src/Run.ts","../../../../../../src/leafer/packages/debug/src/Plugin.ts","../../../../../../src/leafer/packages/platform/platform/src/creator/Creator.ts","../../../../../../src/leafer/packages/platform/platform/src/creator/UICreator.ts","../../../../../../src/leafer/packages/platform/platform/src/creator/EventCreator.ts","../../../../../node_modules/.pnpm/@rollup+plugin-typescript@11.1.6_rollup@4.44.2_tslib@2.8.1_typescript@5.8.3/node_modules/tslib/tslib.es6.js","../../../../../../src/leafer/packages/canvas/canvas/src/Canvas.ts","../../../../../../src/leafer/packages/canvas/canvas/src/LeaferCanvasBase.ts","../../../../../../src/leafer/packages/path/src/PathHelper.ts","../../../../../../src/leafer/packages/path/src/PathCommandMap.ts","../../../../../../src/leafer/packages/path/src/RectHelper.ts","../../../../../../src/leafer/packages/path/src/BezierHelper.ts","../../../../../../src/leafer/packages/path/src/EllipseHelper.ts","../../../../../../src/leafer/packages/path/src/PathConvert.ts","../../../../../../src/leafer/packages/path/src/PathCommandDataHelper.ts","../../../../../../src/leafer/packages/path/src/PathCreator.ts","../../../../../../src/leafer/packages/path/src/PathDrawer.ts","../../../../../../src/leafer/packages/path/src/PathBounds.ts","../../../../../../src/leafer/packages/path/src/PathCorner.ts","../../../../../../src/leafer/packages/path/src/index.ts","../../../../../../src/leafer/packages/canvas/canvas/src/patch/roundRect.ts","../../../../../../src/leafer/packages/file/src/FileHelper.ts","../../../../../../src/leafer/packages/task/src/TaskItem.ts","../../../../../../src/leafer/packages/task/src/TaskProcessor.ts","../../../../../../src/leafer/packages/file/src/Resource.ts","../../../../../../src/leafer/packages/image/image/src/ImageManager.ts","../../../../../../src/leafer/packages/image/image/src/LeaferImage.ts","../../../../../../src/leafer/packages/decorator/src/object.ts","../../../../../../src/leafer/packages/decorator/src/data.ts","../../../../../../src/leafer/packages/decorator/src/rewrite.ts","../../../../../../src/leafer/packages/display-module/helper/src/LeafHelper.ts","../../../../../../src/leafer/packages/display-module/helper/src/LeafBoundsHelper.ts","../../../../../../src/leafer/packages/display-module/helper/src/BranchHelper.ts","../../../../../../src/leafer/packages/display-module/helper/src/WaitHelper.ts","../../../../../../src/leafer/packages/display-module/layout/src/LeafLayout.ts","../../../../../../src/leafer/packages/event/src/Event.ts","../../../../../../src/leafer/packages/event/src/ChildEvent.ts","../../../../../../src/leafer/packages/event/src/PropertyEvent.ts","../../../../../../src/leafer/packages/event/src/ImageEvent.ts","../../../../../../src/leafer/packages/event/src/BoundsEvent.ts","../../../../../../src/leafer/packages/event/src/ResizeEvent.ts","../../../../../../src/leafer/packages/event/src/WatchEvent.ts","../../../../../../src/leafer/packages/event/src/LayoutEvent.ts","../../../../../../src/leafer/packages/event/src/RenderEvent.ts","../../../../../../src/leafer/packages/event/src/LeaferEvent.ts","../../../../../../src/leafer/packages/event/src/Eventer.ts","../../../../../../src/leafer/packages/display-module/display-module/src/LeafEventer.ts","../../../../../../src/leafer/packages/display-module/display-module/src/LeafDataProxy.ts","../../../../../../src/leafer/packages/display-module/display-module/src/LeafMatrix.ts","../../../../../../src/leafer/packages/display-module/display-module/src/LeafBounds.ts","../../../../../../src/leafer/packages/display-module/display-module/src/LeafRender.ts","../../../../../../src/leafer/packages/display-module/display-module/src/BranchRender.ts","../../../../../../src/leafer/packages/display/src/Leaf.ts","../../../../../../src/leafer/packages/display/src/Branch.ts","../../../../../../src/leafer/packages/list/src/LeafList.ts","../../../../../../src/leafer/packages/math/src/AutoBounds.ts","../../../../../../src/leafer/packages/canvas/canvas/src/CanvasManager.ts","../../../../../../src/leafer/packages/list/src/LeafLevelList.ts","../../../../../../src/leafer/packages/canvas/canvas/src/patch/index.ts","../../../../../../src/leafer/packages/decorator/src/class.ts","../../../../../../src/leafer/packages/core/src/index.ts"],"sourcesContent":["import { IPlatform } from '@leafer/interface'\n\n\nexport const Platform: IPlatform = {\n toURL(text: string, fileType?: 'text' | 'svg'): string {\n let url = encodeURIComponent(text)\n if (fileType === 'text') url = 'data:text/plain;charset=utf-8,' + url\n else if (fileType === 'svg') url = 'data:image/svg+xml,' + url\n return url\n },\n image: {\n hitCanvasSize: 100,\n maxCacheSize: 2560 * 1600, // 2k\n maxPatternSize: 4096 * 2160, // 4k\n crossOrigin: 'anonymous',\n getRealURL(url: string): string {\n const { prefix, suffix } = Platform.image\n if (suffix && !url.startsWith('data:') && !url.startsWith('blob:')) url += (url.includes(\"?\") ? \"&\" : \"?\") + suffix\n if (prefix && url[0] === '/') url = prefix + url\n return url\n }\n }\n}","import { INumberMap } from '@leafer/interface'\n\n\nexport const IncrementId = {\n\n RUNTIME: 'runtime',\n LEAF: 'leaf',\n TASK: 'task',\n CNAVAS: 'canvas',\n IMAGE: 'image',\n\n types: {} as INumberMap,\n\n create(typeName: string): number {\n const { types } = I\n if (types[typeName]) {\n return types[typeName]++\n } else {\n types[typeName] = 1\n return 0\n }\n }\n}\n\nconst I = IncrementId","import { IObject } from '@leafer/interface'\n\nexport enum Answer {\n No = 0,\n Yes = 1,\n NoAndSkip = 2,\n YesAndSkip = 3\n}\n\nexport const emptyData: IObject = {}\n\nexport function isUndefined(value: any): boolean {\n return value === undefined\n}\n\nexport function isNull(value: any): boolean {\n return value == null // = value === undefined || value === null\n}\n\nexport function isString<T extends string>(value: any): value is T {\n return typeof value === 'string'\n}\n\nexport const { isFinite } = Number\n\nexport function isNumber<T extends number>(value: any): value is T {\n return typeof value === 'number'\n}\n\nconst numberReg = /^-?\\d+(?:\\.\\d+)?$/\n\nexport function tryToNumber(value: any): number {\n return (typeof value === 'string' && numberReg.test(value)) ? +value : value\n}\n\nexport const { isArray } = Array\n\nexport function isObject<T extends object>(value: any): value is T {\n return value && typeof value === 'object' // fix: null is object\n}\n\nexport function isData<T extends object>(value: any): value is T { // 检测 {} 对象\n return isObject(value) && !isArray(value) // 排除数组\n}\n\nexport function isEmptyData(value: any): boolean {\n return JSON.stringify(value) === '{}'\n}","import { IBooleanMap, IObject } from '@leafer/interface'\nimport { isUndefined } from './data'\n\nexport const DataHelper = {\n\n default<T>(t: T, defaultData: IObject): T {\n assign(defaultData, t)\n assign(t, defaultData)\n return t\n },\n\n assign(t: IObject, merge: IObject, exclude?: IObject): void {\n let value: unknown\n Object.keys(merge).forEach(key => {\n value = merge[key]\n if (value?.constructor === Object && t[key]?.constructor === Object) return assign(t[key], merge[key], exclude && exclude[key])\n if (exclude && (key in exclude)) {\n if (exclude[key]?.constructor === Object) assign(t[key] = {}, merge[key], exclude[key])\n return\n }\n t[key] = merge[key]\n })\n },\n\n copyAttrs(t: IObject, from: IObject, include: string[]): IObject {\n include.forEach(key => {\n if (!isUndefined(from[key])) t[key] = from[key]\n })\n return t\n },\n\n clone(data: unknown): IObject {\n return JSON.parse(JSON.stringify(data))\n },\n\n toMap(list: string[]): IBooleanMap {\n const map = {} as IBooleanMap\n for (let i = 0, len = list.length; i < len; i++) map[list[i]] = true\n return map\n },\n\n stintSet<T extends object, K extends keyof T>(data: T, attrName: K, value: T[K]): void {\n value || (value = undefined)\n data[attrName] !== value && (data[attrName] = value) // 只有值不一样时才设置,节省内存开销\n }\n\n}\n\nconst { assign } = DataHelper","import { ILeafData, ILeaf, IObject, IValue, IPathCommandData, IJSONOptions } from '@leafer/interface'\nimport { isArray, isUndefined } from './data'\n\n\nexport class LeafData implements ILeafData {\n\n public __leaf: ILeaf\n public __input: IObject\n public __middle: IObject\n\n public __single: boolean\n\n public __naturalWidth?: number\n public __naturalHeight?: number\n\n public __pathForRender?: IPathCommandData\n\n public __useStroke?: boolean\n public get __useNaturalRatio() { return true }\n\n public get __isLinePath(): boolean {\n const { path } = this as ILeafData\n return path && path.length === 6 && path[0] === 1 // M = 1\n }\n\n public get __usePathBox(): boolean {\n return (this as ILeafData).__pathInputed as any as boolean\n }\n\n public get __blendMode(): string {\n if ((this as ILeafData).eraser && (this as ILeafData).eraser !== 'path') return 'destination-out'\n const { blendMode } = (this as ILeafData)\n return blendMode === 'pass-through' ? null : blendMode\n }\n\n constructor(leaf: ILeaf) {\n this.__leaf = leaf\n }\n\n public __get(name: string): any {\n if (this.__input) {\n const value = this.__input[name]\n if (!isUndefined(value)) return value\n }\n return (this as IObject)[name]\n }\n\n public __getData(): IObject {\n const data: IObject = { tag: this.__leaf.tag }, { __input } = this\n let inputValue: IValue\n for (let key in this) {\n if (key[0] !== '_') {\n inputValue = __input ? __input[key] : undefined\n data[key] = isUndefined(inputValue) ? this[key] : inputValue\n }\n }\n return data\n }\n\n public __setInput(name: string, value: any): void {\n this.__input || (this.__input = {})\n this.__input[name] = value\n }\n\n public __getInput(name: string): any {\n if (this.__input) {\n const value = this.__input[name]\n if (!isUndefined(value)) return value\n }\n\n if (name === 'path' && !(this as ILeafData).__pathInputed) return // no path mode\n\n return (this as IObject)['_' + name]\n }\n\n public __removeInput(name: string): void {\n if (this.__input && !isUndefined(this.__input[name])) this.__input[name] = undefined\n }\n\n public __getInputData(names?: string[] | IObject, options?: IJSONOptions): IObject {\n const data: IObject = {}\n\n if (names) {\n\n if (isArray(names)) {\n for (let name of names) data[name] = this.__getInput(name)\n } else {\n for (let name in names) data[name] = this.__getInput(name)\n }\n\n } else {\n\n let value: IValue, inputValue: IValue, { __input } = this\n data.tag = this.__leaf.tag\n for (let key in this) {\n if (key[0] !== '_') {\n value = (this as IObject)['_' + key]\n if (!isUndefined(value)) {\n\n if (key === 'path' && !(this as ILeafData).__pathInputed) continue // no path mode\n\n inputValue = __input ? __input[key] : undefined\n data[key] = isUndefined(inputValue) ? value : inputValue\n }\n }\n }\n\n }\n\n if (options) {\n if (options.matrix) {\n const { a, b, c, d, e, f } = this.__leaf.__localMatrix\n data.matrix = { a, b, c, d, e, f }\n }\n }\n\n return data\n }\n\n public __setMiddle(name: string, value: any): void {\n this.__middle || (this.__middle = {})\n this.__middle[name] = value\n }\n\n public __getMiddle(name: string): any {\n return this.__middle && this.__middle[name]\n }\n\n public __checkSingle(): void {\n const t = this as ILeafData\n if (t.blendMode === 'pass-through') {\n const leaf = this.__leaf\n if ((t.opacity < 1 && (leaf.isBranch || t.__hasMultiPaint)) || leaf.__hasEraser || t.eraser || t.filter) {\n t.__single = true\n } else if (t.__single) {\n t.__single = false\n }\n } else {\n t.__single = true\n }\n }\n\n public __removeNaturalSize(): void {\n this.__naturalWidth = this.__naturalHeight = undefined\n }\n\n public destroy(): void {\n this.__input = this.__middle = null\n }\n}","import { IPointData, IBoundsData, IMatrixData, IRangeSize, IScaleData, ISizeData, IOptionSizeData } from '@leafer/interface'\nimport { isArray, isObject, isNumber, isUndefined } from '@leafer/data'\n\nconst { round, pow, PI } = Math\n\nexport const MathHelper = {\n\n within(value: number, min: number | IRangeSize, max?: number): number {\n if (isObject(min)) max = min.max, min = min.min\n if (!isUndefined(min) && value < min) value = min\n if (!isUndefined(max) && value > max) value = max\n return value\n },\n\n fourNumber(num: number | number[], maxValue?: number): number[] { // top right bottom left || topLeft, topRight, bottomRight, bottomLeft\n let data: number[]\n if (isArray(num)) {\n switch (num.length) {\n case 4:\n data = isUndefined(maxValue) ? num : [...num]\n break\n case 2:\n data = [num[0], num[1], num[0], num[1]]\n break\n case 3:\n data = [num[0], num[1], num[2], num[1]]\n break\n case 1:\n num = num[0]\n break\n default:\n num = 0\n }\n }\n if (!data) data = [num as number, num as number, num as number, num as number]\n if (maxValue) for (let i = 0; i < 4; i++) if (data[i] > maxValue) data[i] = maxValue\n return data\n },\n\n formatRotation(rotation: number, unsign?: boolean): number {\n rotation %= 360\n if (unsign) {\n if (rotation < 0) rotation += 360\n } else {\n if (rotation > 180) rotation -= 360\n if (rotation < -180) rotation += 360\n }\n return MathHelper.float(rotation)\n },\n\n getGapRotation(addRotation: number, gap: number, oldRotation: number = 0): number {\n let rotation = addRotation + oldRotation\n if (gap > 1) {\n const r = Math.abs(rotation % gap)\n if (r < 1 || r > gap - 1) rotation = Math.round(rotation / gap) * gap\n }\n return rotation - oldRotation\n },\n\n float(num: number, maxLength?: number): number {\n const a = !isUndefined(maxLength) ? pow(10, maxLength) : 1000000000000 // default\n num = round(num * a) / a\n return num === -0 ? 0 : num\n },\n\n sign(num: number): number {\n return num < 0 ? -1 : 1\n },\n\n getScaleData(scale: number | IPointData, size: number | IOptionSizeData, originSize: ISizeData, scaleData?: IScaleData): IScaleData {\n if (!scaleData) scaleData = {} as IScaleData\n if (size) {\n const scaleX = (isNumber(size) ? size : size.width || 0) / originSize.width, scaleY = (isNumber(size) ? size : size.height || 0) / originSize.height\n scaleData.scaleX = scaleX || scaleY || 1\n scaleData.scaleY = scaleY || scaleX || 1\n } else if (scale) MathHelper.assignScale(scaleData, scale)\n return scaleData\n },\n\n assignScale(scaleData: IScaleData, scale: number | IPointData): void {\n if (isNumber(scale)) {\n scaleData.scaleX = scaleData.scaleY = scale\n } else {\n scaleData.scaleX = scale.x\n scaleData.scaleY = scale.y\n }\n },\n\n randInt,\n\n randColor(opacity?: number): string {\n return `rgba(${randInt(255)},${randInt(255)},${randInt(255)},${opacity || 1})`\n }\n}\n\nfunction randInt(num: number): number {\n return Math.round(Math.random() * num)\n}\n\nexport const OneRadian = PI / 180\nexport const PI2 = PI * 2\nexport const PI_2 = PI / 2\n\nexport function getPointData(): IPointData { return { x: 0, y: 0 } }\nexport function getBoundsData(): IBoundsData { return { x: 0, y: 0, width: 0, height: 0 } }\nexport function getMatrixData(): IMatrixData { return { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0 } }","import { IMatrixData, IPointData, ILayoutData, IMatrixWithLayoutData, IMatrixWithOptionScaleData, IScaleData, IMatrixWithScaleData } from '@leafer/interface'\nimport { isUndefined } from '@leafer/data'\n\nimport { MathHelper, OneRadian, PI_2, getBoundsData, getMatrixData } from './MathHelper'\n\n\nconst { sin, cos, acos, sqrt } = Math\nconst { float } = MathHelper\nconst tempPoint = {} as IPointData\n\nfunction getWorld(): IMatrixWithLayoutData {\n return { ...getMatrixData(), ...getBoundsData(), scaleX: 1, scaleY: 1, rotation: 0, skewX: 0, skewY: 0 }\n}\n\nexport const MatrixHelper = {\n\n defaultMatrix: getMatrixData(),\n\n defaultWorld: getWorld(),\n\n tempMatrix: {} as IMatrixData,\n\n set(t: IMatrixData, a = 1, b = 0, c = 0, d = 1, e = 0, f = 0): void {\n t.a = a\n t.b = b\n t.c = c\n t.d = d\n t.e = e\n t.f = f\n },\n\n get: getMatrixData,\n\n getWorld,\n\n copy(t: IMatrixData, matrix: IMatrixData): void {\n t.a = matrix.a\n t.b = matrix.b\n t.c = matrix.c\n t.d = matrix.d\n t.e = matrix.e\n t.f = matrix.f\n },\n\n translate(t: IMatrixData, x: number, y: number): void {\n t.e += x\n t.f += y\n },\n\n translateInner(t: IMatrixData, x: number, y: number, hasOrigin?: boolean): void {\n t.e += t.a * x + t.c * y\n t.f += t.b * x + t.d * y\n if (hasOrigin) t.e -= x, t.f -= y\n },\n\n scale(t: IMatrixData, scaleX: number, scaleY: number = scaleX): void {\n t.a *= scaleX\n t.b *= scaleX\n t.c *= scaleY\n t.d *= scaleY\n },\n\n pixelScale(t: IMatrixData, pixelRatio: number, to?: IMatrixData): void {\n to || (to = t)\n to.a = t.a * pixelRatio\n to.b = t.b * pixelRatio\n to.c = t.c * pixelRatio\n to.d = t.d * pixelRatio\n to.e = t.e * pixelRatio\n to.f = t.f * pixelRatio\n },\n\n scaleOfOuter(t: IMatrixData, origin: IPointData, scaleX: number, scaleY?: number): void {\n M.toInnerPoint(t, origin, tempPoint)\n M.scaleOfInner(t, tempPoint, scaleX, scaleY)\n },\n\n scaleOfInner(t: IMatrixData, origin: IPointData, scaleX: number, scaleY: number = scaleX): void {\n M.translateInner(t, origin.x, origin.y)\n M.scale(t, scaleX, scaleY)\n M.translateInner(t, -origin.x, -origin.y)\n },\n\n\n rotate(t: IMatrixData, rotation: number): void {\n const { a, b, c, d } = t\n\n rotation *= OneRadian\n const cosR = cos(rotation)\n const sinR = sin(rotation)\n\n t.a = a * cosR - b * sinR\n t.b = a * sinR + b * cosR\n t.c = c * cosR - d * sinR\n t.d = c * sinR + d * cosR\n },\n\n rotateOfOuter(t: IMatrixData, origin: IPointData, rotation: number): void {\n M.toInnerPoint(t, origin, tempPoint)\n M.rotateOfInner(t, tempPoint, rotation)\n },\n\n rotateOfInner(t: IMatrixData, origin: IPointData, rotation: number): void {\n M.translateInner(t, origin.x, origin.y)\n M.rotate(t, rotation)\n M.translateInner(t, -origin.x, -origin.y)\n },\n\n\n skew(t: IMatrixData, skewX: number, skewY?: number): void {\n const { a, b, c, d } = t\n\n if (skewY) {\n skewY *= OneRadian\n t.a = a + c * skewY\n t.b = b + d * skewY\n }\n\n if (skewX) {\n skewX *= OneRadian\n t.c = c + a * skewX\n t.d = d + b * skewX\n }\n },\n\n skewOfOuter(t: IMatrixData, origin: IPointData, skewX: number, skewY?: number): void {\n M.toInnerPoint(t, origin, tempPoint)\n M.skewOfInner(t, tempPoint, skewX, skewY)\n },\n\n skewOfInner(t: IMatrixData, origin: IPointData, skewX: number, skewY: number = 0): void {\n M.translateInner(t, origin.x, origin.y)\n M.skew(t, skewX, skewY)\n M.translateInner(t, -origin.x, -origin.y)\n },\n\n\n multiply(t: IMatrixData, child: IMatrixData): void {\n const { a, b, c, d, e, f } = t\n\n t.a = child.a * a + child.b * c\n t.b = child.a * b + child.b * d\n t.c = child.c * a + child.d * c\n t.d = child.c * b + child.d * d\n t.e = child.e * a + child.f * c + e\n t.f = child.e * b + child.f * d + f\n },\n\n multiplyParent(t: IMatrixWithOptionScaleData, parent: IMatrixWithOptionScaleData, to?: IMatrixWithOptionScaleData, abcdChanged?: boolean | number, childScaleData?: IScaleData): void { // = transform\n const { e, f } = t\n\n to || (to = t)\n\n if (isUndefined(abcdChanged)) abcdChanged = t.a !== 1 || t.b || t.c || t.d !== 1\n\n if (abcdChanged) {\n const { a, b, c, d } = t\n\n to.a = a * parent.a + b * parent.c\n to.b = a * parent.b + b * parent.d\n to.c = c * parent.a + d * parent.c\n to.d = c * parent.b + d * parent.d\n\n if (childScaleData) {\n to.scaleX = parent.scaleX * childScaleData.scaleX\n to.scaleY = parent.scaleY * childScaleData.scaleY\n }\n\n } else {\n to.a = parent.a\n to.b = parent.b\n to.c = parent.c\n to.d = parent.d\n\n if (childScaleData) {\n to.scaleX = parent.scaleX\n to.scaleY = parent.scaleY\n }\n }\n\n to.e = e * parent.a + f * parent.c + parent.e\n to.f = e * parent.b + f * parent.d + parent.f\n },\n\n\n divide(t: IMatrixData, child: IMatrixData): void {\n M.multiply(t, M.tempInvert(child))\n },\n\n divideParent(t: IMatrixData, parent: IMatrixData): void {\n M.multiplyParent(t, M.tempInvert(parent))\n },\n\n tempInvert(t: IMatrixData): IMatrixData {\n const { tempMatrix } = M\n M.copy(tempMatrix, t)\n M.invert(tempMatrix)\n return tempMatrix\n },\n\n invert(t: IMatrixData): void {\n const { a, b, c, d, e, f } = t\n if (!b && !c) {\n if (a === 1 && d === 1) {\n t.e = -e\n t.f = -f\n } else {\n const s = 1 / (a * d)\n t.a = d * s\n t.d = a * s\n t.e = -e * d * s\n t.f = -f * a * s\n }\n } else {\n const s = 1 / (a * d - b * c)\n t.a = d * s\n t.b = -b * s\n t.c = -c * s\n t.d = a * s\n t.e = -(e * d - f * c) * s\n t.f = -(f * a - e * b) * s\n }\n\n },\n\n\n toOuterPoint(t: IMatrixData, inner: IPointData, to?: IPointData, distance?: boolean): void {\n const { x, y } = inner\n\n // outer\n to || (to = inner)\n to.x = x * t.a + y * t.c\n to.y = x * t.b + y * t.d\n\n if (!distance) {\n to.x += t.e\n to.y += t.f\n }\n },\n\n toInnerPoint(t: IMatrixData, outer: IPointData, to?: IPointData, distance?: boolean): void {\n const { a, b, c, d } = t\n const s = 1 / (a * d - b * c)\n\n const { x, y } = outer\n\n // inner\n to || (to = outer)\n to.x = (x * d - y * c) * s\n to.y = (y * a - x * b) * s\n\n if (!distance) {\n const { e, f } = t\n to.x -= (e * d - f * c) * s\n to.y -= (f * a - e * b) * s\n }\n },\n\n setLayout(t: IMatrixData, layout: ILayoutData, origin?: IPointData, around?: IPointData, bcChanged?: boolean | number): void {\n const { x, y, scaleX, scaleY } = layout\n\n if (isUndefined(bcChanged)) bcChanged = layout.rotation || layout.skewX || layout.skewY\n\n if (bcChanged) {\n\n const { rotation, skewX, skewY } = layout\n const r = rotation * OneRadian\n const cosR = cos(r)\n const sinR = sin(r)\n\n if (skewX || skewY) {\n\n // rotate -> skew -> scale\n const sx = skewX * OneRadian\n const sy = skewY * OneRadian\n\n t.a = (cosR + sy * -sinR) * scaleX\n t.b = (sinR + sy * cosR) * scaleX\n t.c = (-sinR + sx * cosR) * scaleY\n t.d = (cosR + sx * sinR) * scaleY\n\n } else {\n\n // rotate -> scale\n t.a = cosR * scaleX\n t.b = sinR * scaleX\n t.c = -sinR * scaleY\n t.d = cosR * scaleY\n\n }\n\n } else {\n t.a = scaleX\n t.b = 0\n t.c = 0\n t.d = scaleY\n }\n\n // translate\n\n t.e = x\n t.f = y\n\n if (origin = origin || around) M.translateInner(t, -origin.x, -origin.y, !around)\n\n },\n\n getLayout(t: IMatrixData, origin?: IPointData, around?: IPointData, firstSkewY?: boolean): ILayoutData {\n const { a, b, c, d, e, f } = t\n\n let x = e, y = f, scaleX: number, scaleY: number, rotation: number, skewX: number, skewY: number\n\n if (b || c) {\n\n const s = a * d - b * c\n\n if (c && !firstSkewY) {\n scaleX = sqrt(a * a + b * b)\n scaleY = s / scaleX\n\n const cosR = a / scaleX\n rotation = b > 0 ? acos(cosR) : -acos(cosR)\n\n } else {\n scaleY = sqrt(c * c + d * d)\n scaleX = s / scaleY\n\n const cosR = c / scaleY\n rotation = PI_2 - (d > 0 ? acos(-cosR) : -acos(cosR))\n }\n\n const cosR = float(cos(rotation)) // when -90 / 90 is 0\n const sinR = sin(rotation)\n\n scaleX = float(scaleX), scaleY = float(scaleY)\n skewX = cosR ? float((c / scaleY + sinR) / cosR / OneRadian, 9) : 0\n skewY = cosR ? float((b / scaleX - sinR) / cosR / OneRadian, 9) : 0\n rotation = float(rotation / OneRadian)\n\n } else {\n scaleX = a\n scaleY = d\n rotation = skewX = skewY = 0\n }\n\n if (origin = around || origin) {\n x += origin.x * a + origin.y * c\n y += origin.x * b + origin.y * d\n if (!around) x -= origin.x, y -= origin.y\n }\n\n return { x, y, scaleX, scaleY, rotation, skewX, skewY }\n },\n\n withScale(t: IMatrixData, scaleX?: number, scaleY = scaleX): IMatrixWithScaleData {\n const world = t as unknown as IMatrixWithScaleData\n if (!scaleX || !scaleY) {\n const { a, b, c, d } = t\n if (b || c) {\n scaleX = sqrt(a * a + b * b)\n scaleY = (a * d - b * c) / scaleX\n } else {\n scaleX = a\n scaleY = d\n }\n }\n world.scaleX = scaleX\n world.scaleY = scaleY\n return world\n },\n\n reset(t: IMatrixData): void {\n M.set(t)\n }\n}\n\nconst M = MatrixHelper","import { IPointData, IMatrixData, IRadiusPointData, IMatrixWithScaleData } from '@leafer/interface'\nimport { isObject, isUndefined } from '@leafer/data'\n\nimport { OneRadian, getPointData } from './MathHelper'\nimport { MatrixHelper as M } from './MatrixHelper'\n\n\nconst { toInnerPoint, toOuterPoint } = M\nconst { sin, cos, abs, sqrt, atan2, min, round } = Math\n\n\nexport const PointHelper = {\n\n defaultPoint: getPointData(),\n\n tempPoint: {} as IPointData,\n tempRadiusPoint: {} as IRadiusPointData,\n\n set(t: IPointData, x = 0, y = 0): void {\n t.x = x\n t.y = y\n },\n\n setRadius(t: IRadiusPointData, x: number, y?: number): void {\n t.radiusX = x\n t.radiusY = isUndefined(y) ? x : y\n },\n\n copy(t: IPointData, point: IPointData): void {\n t.x = point.x\n t.y = point.y\n },\n\n copyFrom(t: IPointData, x: number, y: number): void {\n t.x = x\n t.y = y\n },\n\n round(t: IPointData, halfPixel?: boolean): void {\n t.x = halfPixel ? round(t.x - 0.5) + 0.5 : round(t.x)\n t.y = halfPixel ? round(t.y - 0.5) + 0.5 : round(t.y)\n },\n\n move(t: IPointData, x: number | IPointData, y?: number): void {\n if (isObject(x)) t.x += x.x, t.y += x.y\n else t.x += x, t.y += y\n },\n\n\n scale(t: IPointData, scaleX: number, scaleY = scaleX): void {\n if (t.x) t.x *= scaleX\n if (t.y) t.y *= scaleY\n },\n\n scaleOf(t: IPointData, origin: IPointData, scaleX: number, scaleY = scaleX): void {\n t.x += (t.x - origin.x) * (scaleX - 1)\n t.y += (t.y - origin.y) * (scaleY - 1)\n },\n\n rotate(t: IPointData, rotation: number, origin?: IPointData): void {\n if (!origin) origin = P.defaultPoint\n rotation *= OneRadian\n const cosR = cos(rotation)\n const sinR = sin(rotation)\n const rx = t.x - origin.x\n const ry = t.y - origin.y\n t.x = origin.x + rx * cosR - ry * sinR\n t.y = origin.y + rx * sinR + ry * cosR\n },\n\n\n tempToInnerOf(t: IPointData, matrix: IMatrixData): IPointData {\n const { tempPoint: temp } = P\n copy(temp, t)\n toInnerPoint(matrix, temp, temp)\n return temp\n },\n\n tempToOuterOf(t: IPointData, matrix: IMatrixData): IPointData {\n const { tempPoint: temp } = P\n copy(temp, t)\n toOuterPoint(matrix, temp, temp)\n return temp\n },\n\n tempToInnerRadiusPointOf(t: IRadiusPointData, matrix: IMatrixWithScaleData): IRadiusPointData {\n const { tempRadiusPoint: temp } = P\n copy(temp, t)\n P.toInnerRadiusPointOf(t, matrix, temp)\n return temp\n },\n\n toInnerRadiusPointOf(t: IRadiusPointData, matrix: IMatrixWithScaleData, to?: IRadiusPointData): void {\n to || (to = t)\n toInnerPoint(matrix, t, to)\n to.radiusX = Math.abs(t.radiusX / matrix.scaleX)\n to.radiusY = Math.abs(t.radiusY / matrix.scaleY)\n },\n\n\n toInnerOf(t: IPointData, matrix: IMatrixData, to?: IPointData): void {\n toInnerPoint(matrix, t, to)\n },\n\n toOuterOf(t: IPointData, matrix: IMatrixData, to?: IPointData): void {\n toOuterPoint(matrix, t, to)\n },\n\n\n getCenter(t: IPointData, to: IPointData): IPointData {\n return { x: t.x + (to.x - t.x) / 2, y: t.y + (to.y - t.y) / 2 }\n },\n\n getCenterX(x1: number, x2: number): number {\n return x1 + (x2 - x1) / 2\n },\n\n getCenterY(y1: number, y2: number): number {\n return y1 + (y2 - y1) / 2\n },\n\n getDistance(t: IPointData, point: IPointData): number {\n return getDistanceFrom(t.x, t.y, point.x, point.y)\n },\n\n getDistanceFrom(x1: number, y1: number, x2: number, y2: number): number {\n const x = abs(x2 - x1)\n const y = abs(y2 - y1)\n return sqrt(x * x + y * y)\n },\n\n getMinDistanceFrom(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number): number {\n return min(getDistanceFrom(x1, y1, x2, y2), getDistanceFrom(x2, y2, x3, y3))\n },\n\n getAngle(t: IPointData, to: IPointData): number {\n return getAtan2(t, to) / OneRadian\n },\n\n getRotation(t: IPointData, origin: IPointData, to: IPointData, toOrigin?: IPointData): number {\n if (!toOrigin) toOrigin = origin\n return P.getRadianFrom(t.x, t.y, origin.x, origin.y, to.x, to.y, toOrigin.x, toOrigin.y) / OneRadian\n },\n\n getRadianFrom(fromX: number, fromY: number, originX: number, originY: number, toX: number, toY: number, toOriginX?: number, toOriginY?: number): number {\n if (isUndefined(toOriginX)) toOriginX = originX, toOriginY = originY\n const a = fromX - originX\n const b = fromY - originY\n const c = toX - toOriginX\n const d = toY - toOriginY\n return Math.atan2(a * d - b * c, a * c + b * d)\n },\n\n getAtan2(t: IPointData, to: IPointData): number {\n return atan2(to.y - t.y, to.x - t.x)\n },\n\n\n getDistancePoint(t: IPointData, to: IPointData, distance: number, changeTo: boolean): IPointData {\n const r = getAtan2(t, to)\n to = changeTo ? to : {} as IPointData\n to.x = t.x + cos(r) * distance\n to.y = t.y + sin(r) * distance\n return to\n },\n\n toNumberPoints(originPoints: number[] | IPointData[]): number[] {\n let points = originPoints as number[]\n if (isObject(originPoints[0])) points = [], (originPoints as IPointData[]).forEach(p => points.push(p.x, p.y))\n return points\n },\n\n reset(t: IPointData): void {\n P.reset(t)\n }\n}\n\nconst P = PointHelper\nconst { getDistanceFrom, copy, getAtan2 } = P","import { IPoint, IPointData, IMatrixData } from '@leafer/interface'\nimport { isObject } from '@leafer/data'\n\nimport { PointHelper as P } from './PointHelper'\n\nexport class Point implements IPoint {\n\n public x: number\n public y: number\n\n constructor(x?: number | IPointData, y?: number) {\n this.set(x, y)\n }\n\n public set(x?: number | IPointData, y?: number): IPoint {\n isObject(x) ? P.copy(this, x) : P.set(this, x, y)\n return this\n }\n\n public get(): IPointData {\n const { x, y } = this\n return { x, y }\n }\n\n\n public clone(): IPoint {\n return new Point(this)\n }\n\n\n public move(x: number | IPointData, y?: number): IPoint {\n P.move(this, x, y)\n return this\n }\n\n public scale(scaleX: number, scaleY?: number): IPoint {\n P.scale(this, scaleX, scaleY)\n return this\n }\n\n public scaleOf(origin: IPointData, scaleX: number, scaleY?: number): IPoint {\n P.scaleOf(this, origin, scaleX, scaleY)\n return this\n }\n\n public rotate(rotation: number, origin?: IPointData): IPoint {\n P.rotate(this, rotation, origin)\n return this\n }\n\n public rotateOf(origin: IPointData, rotation: number): IPoint {\n P.rotate(this, rotation, origin)\n return this\n }\n\n public getRotation(origin: IPointData, to: IPointData, toOrigin?: IPointData): number {\n return P.getRotation(this, origin, to, toOrigin)\n }\n\n\n public toInnerOf(matrix: IMatrixData, to?: IPointData): IPoint {\n P.toInnerOf(this, matrix, to)\n return this\n }\n\n public toOuterOf(matrix: IMatrixData, to?: IPointData): IPoint {\n P.toOuterOf(this, matrix, to)\n return this\n }\n\n\n public getCenter(to: IPointData): IPoint {\n return new Point(P.getCenter(this, to))\n }\n\n public getDistance(to: IPointData): number {\n return P.getDistance(this, to)\n }\n\n public getDistancePoint(to: IPointData, distance: number, changeTo?: boolean): IPoint {\n return new Point(P.getDistancePoint(this, to, distance, changeTo))\n }\n\n public getAngle(to: IPointData): number {\n return P.getAngle(this, to)\n }\n\n public getAtan2(to: IPointData): number {\n return P.getAtan2(this, to)\n }\n\n\n public reset(): IPoint {\n P.reset(this)\n return this\n }\n\n}\n\nexport const tempPoint = new Point()","import { IMatrix, IMatrixData, IPointData, ILayoutData, IMatrixWithScaleData } from '@leafer/interface'\nimport { isObject } from '@leafer/data'\n\nimport { MatrixHelper as M } from './MatrixHelper'\n\n\nexport class Matrix implements IMatrix {\n\n public a: number\n public b: number\n public c: number\n public d: number\n public e: number\n public f: number\n\n public scaleX: number\n public scaleY: number\n\n constructor(a?: number | IMatrixData, b?: number, c?: number, d?: number, e?: number, f?: number) {\n this.set(a, b, c, d, e, f)\n }\n\n public set(a?: number | IMatrixData, b?: number, c?: number, d?: number, e?: number, f?: number): IMatrix {\n isObject(a) ? M.copy(this, a) : M.set(this, a, b, c, d, e, f)\n return this\n }\n\n public setWith(dataWithScale: IMatrixWithScaleData): IMatrix {\n M.copy(this, dataWithScale)\n this.scaleX = dataWithScale.scaleX\n this.scaleY = dataWithScale.scaleY\n return this\n }\n\n public get(): IMatrixData {\n const { a, b, c, d, e, f } = this\n return { a, b, c, d, e, f }\n }\n\n public clone(): IMatrix {\n return new Matrix(this)\n }\n\n\n public translate(x: number, y: number): IMatrix {\n M.translate(this, x, y)\n return this\n }\n\n public translateInner(x: number, y: number): IMatrix {\n M.translateInner(this, x, y)\n return this\n }\n\n public scale(x: number, y?: number): IMatrix {\n M.scale(this, x, y)\n return this\n }\n\n public scaleWith(x: number, y?: number): IMatrix {\n M.scale(this, x, y)\n this.scaleX *= x\n this.scaleY *= y || x\n return this\n }\n\n public pixelScale(pixelRatio: number): IMatrix {\n M.pixelScale(this, pixelRatio)\n return this\n }\n\n public scaleOfOuter(origin: IPointData, x: number, y?: number): IMatrix {\n M.scaleOfOuter(this, origin, x, y)\n return this\n }\n public scaleOfInner(origin: IPointData, x: number, y?: number): IMatrix {\n M.scaleOfInner(this, origin, x, y)\n return this\n }\n\n public rotate(angle: number): IMatrix {\n M.rotate(this, angle)\n return this\n }\n\n public rotateOfOuter(origin: IPointData, angle: number): IMatrix {\n M.rotateOfOuter(this, origin, angle)\n return this\n }\n\n public rotateOfInner(origin: IPointData, angle: number): IMatrix {\n M.rotateOfInner(this, origin, angle)\n return this\n }\n\n\n public skew(x: number, y?: number): IMatrix {\n M.skew(this, x, y)\n return this\n }\n\n public skewOfOuter(origin: IPointData, x: number, y?: number): IMatrix {\n M.skewOfOuter(this, origin, x, y)\n return this\n }\n\n public skewOfInner(origin: IPointData, x: number, y?: number): IMatrix {\n M.skewOfInner(this, origin, x, y)\n return this\n }\n\n\n public multiply(child: IMatrixData): IMatrix {\n M.multiply(this, child)\n return this\n }\n\n public multiplyParent(parent: IMatrixData): IMatrix {\n M.multiplyParent(this, parent)\n return this\n }\n\n\n public divide(child: IMatrixData): IMatrix {\n M.divide(this, child)\n return this\n }\n\n public divideParent(parent: IMatrixData): IMatrix {\n M.divideParent(this, parent)\n return this\n }\n\n public invert(): IMatrix {\n M.invert(this)\n return this\n }\n\n public invertWith(): IMatrix {\n M.invert(this)\n this.scaleX = 1 / this.scaleX\n this.scaleY = 1 / this.scaleY\n return this\n }\n\n\n public toOuterPoint(inner: IPointData, to?: IPointData, distance?: boolean): void {\n M.toOuterPoint(this, inner, to, distance)\n }\n\n public toInnerPoint(outer: IPointData, to?: IPointData, distance?: boolean): void {\n M.toInnerPoint(this, outer, to, distance)\n }\n\n\n public setLayout(data: ILayoutData, origin?: IPointData, around?: IPointData,): IMatrix {\n M.setLayout(this, data, origin, around)\n return this\n }\n\n public getLayout(origin?: IPointData, around?: IPointData, firstSkewY?: boolean): ILayoutData {\n return M.getLayout(this, origin, around, firstSkewY)\n }\n\n public withScale(scaleX?: number, scaleY?: number): IMatrixWithScaleData {\n return M.withScale(this, scaleX, scaleY)\n }\n\n public reset(): void {\n M.reset(this)\n }\n\n}\n\nexport const tempMatrix = new Matrix()","import { ITwoPointBoundsData, IBoundsData } from '@leafer/interface'\n\nexport const TwoPointBoundsHelper = {\n\n tempPointBounds: {} as ITwoPointBoundsData,\n\n setPoint(t: ITwoPointBoundsData, minX: number, minY: number): void {\n t.minX = t.maxX = minX\n t.minY = t.maxY = minY\n },\n\n addPoint(t: ITwoPointBoundsData, x: number, y: number): void {\n t.minX = x < t.minX ? x : t.minX\n t.minY = y < t.minY ? y : t.minY\n t.maxX = x > t.maxX ? x : t.maxX\n t.maxY = y > t.maxY ? y : t.maxY\n },\n\n addBounds(t: ITwoPointBoundsData, x: number, y: number, width: number, height: number): void {\n addPoint(t, x, y)\n addPoint(t, x + width, y + height)\n },\n\n copy(t: ITwoPointBoundsData, pb: ITwoPointBoundsData): void {\n t.minX = pb.minX\n t.minY = pb.minY\n t.maxX = pb.maxX\n t.maxY = pb.maxY\n },\n\n addPointBounds(t: ITwoPointBoundsData, pb: ITwoPointBoundsData): void {\n t.minX = pb.minX < t.minX ? pb.minX : t.minX\n t.minY = pb.minY < t.minY ? pb.minY : t.minY\n t.maxX = pb.maxX > t.maxX ? pb.maxX : t.maxX\n t.maxY = pb.maxY > t.maxY ? pb.maxY : t.maxY\n },\n\n toBounds(t: ITwoPointBoundsData, setBounds: IBoundsData): void {\n setBounds.x = t.minX\n setBounds.y = t.minY\n setBounds.width = t.maxX - t.minX\n setBounds.height = t.maxY - t.minY\n }\n\n}\n\nconst { addPoint } = TwoPointBoundsHelper","export enum Direction4 {\n top,\n right,\n bottom,\n left\n}\n\nexport enum Direction9 {\n topLeft,\n top,\n topRight,\n right,\n bottomRight,\n bottom,\n bottomLeft,\n left,\n center,\n 'top-left' = 0,\n 'top-right' = 2,\n 'bottom-right' = 4,\n 'bottom-left' = 6\n}","import { IAround, IPointData, IBoundsData, IUnitPointData } from '@leafer/interface'\nimport { isString } from '@leafer/data'\n\nimport { Direction9 } from './Direction'\n\n\nconst directionData: IUnitPointData[] = [\n { x: 0, y: 0 }, //topLeft\n { x: 0.5, y: 0 },//top\n { x: 1, y: 0 }, //topRight\n { x: 1, y: 0.5 },// right\n { x: 1, y: 1 }, //bottomRight\n { x: 0.5, y: 1 },//bottom\n { x: 0, y: 1 }, //bottomLeft\n { x: 0, y: 0.5 },//left\n { x: 0.5, y: 0.5 } // center\n]\ndirectionData.forEach(item => item.type = 'percent')\n\nexport const AroundHelper = {\n\n directionData, // index Direction9\n\n tempPoint: {} as IPointData,\n\n get,\n\n toPoint(around: IAround, box: IBoundsData, to: IPointData, onlyBoxSize?: boolean, content?: IBoundsData, onlyContentSize?: boolean) {\n const point = get(around)\n\n to.x = point.x\n to.y = point.y\n\n\n if (point.type === 'percent') {\n to.x *= box.width\n to.y *= box.height\n\n if (content) { // align\n if (!onlyContentSize) to.x -= content.x, to.y -= content.y\n if (point.x) to.x -= (point.x === 1) ? content.width : (point.x === 0.5 ? point.x * content.width : 0)\n if (point.y) to.y -= (point.y === 1) ? content.height : (point.y === 0.5 ? point.y * content.height : 0)\n }\n }\n\n if (!onlyBoxSize) to.x += box.x, to.y += box.y\n },\n\n getPoint(around: IAround, box: IBoundsData, to?: IPointData): IPointData {\n if (!to) to = {} as IPointData\n AroundHelper.toPoint(around, box, to, true)\n return to\n }\n}\n\nfunction get(around: IAround): IUnitPointData {\n return isString(around) ? directionData[Direction9[around]] : around\n}","import { IPointData, IBoundsData, IAlign } from '@leafer/interface'\nimport { AroundHelper } from './AroundHelper'\n\nconst { toPoint } = AroundHelper\n\nexport const AlignHelper = {\n toPoint(align: IAlign, content: IBoundsData, box: IBoundsData, to: IPointData, onlyBoxSize?: boolean, onlyContentSize?: boolean): void {\n toPoint(align, box, to, onlyBoxSize, content, onlyContentSize)\n }\n}","import { IPointData, IBoundsData, IMatrixData, IFourNumber, IBoundsDataFn, IObject, IMatrix, IOffsetBoundsData, IRadiusPointData, IMatrixWithScaleData, ISide, IAlign, ISizeData, IScrollPointData } from '@leafer/interface'\nimport { isArray, isString } from '@leafer/data'\n\nimport { Matrix } from './Matrix'\nimport { MatrixHelper as M } from './MatrixHelper'\nimport { TwoPointBoundsHelper as TB } from './TwoPointBoundsHelper'\nimport { PointHelper as P } from './PointHelper'\nimport { MathHelper, getBoundsData } from './MathHelper'\nimport { AlignHelper } from './AlignHelper'\n\n\nconst { tempPointBounds, setPoint, addPoint, toBounds } = TB\nconst { toOuterPoint } = M\nconst { float, fourNumber } = MathHelper\nconst { floor, ceil } = Math\n\nlet right: number, bottom: number, boundsRight: number, boundsBottom: number\nconst point = {} as IPointData\nconst toPoint = {} as IPointData\nconst tempBounds = {} as IBoundsData\n\nexport const BoundsHelper = {\n\n tempBounds,\n\n set(t: IBoundsData, x = 0, y = 0, width = 0, height = 0): void {\n t.x = x\n t.y = y\n t.width = width\n t.height = height\n },\n\n copy(t: IBoundsData, bounds: IBoundsData): void {\n t.x = bounds.x\n t.y = bounds.y\n t.width = bounds.width\n t.height = bounds.height\n },\n\n copyAndSpread(t: IBoundsData, bounds: IBoundsData, spread: IFourNumber, isShrink?: boolean, side?: ISide): void {\n const { x, y, width, height } = bounds\n if (isArray(spread)) {\n const four = fourNumber(spread)\n isShrink\n ? B.set(t, x + four[3], y + four[0], width - four[1] - four[3], height - four[2] - four[0])\n : B.set(t, x - four[3], y - four[0], width + four[1] + four[3], height + four[2] + four[0])\n } else {\n if (isShrink) spread = -spread\n B.set(t, x - spread, y - spread, width + spread * 2, height + spread * 2)\n }\n\n if (side) { // 只扩展/收缩一边\n if (side === 'width') t.y = y, t.height = height\n else t.x = x, t.width = width\n }\n },\n\n\n minX(t: IBoundsData): number { return t.width > 0 ? t.x : t.x + t.width },\n\n minY(t: IBoundsData): number { return t.height > 0 ? t.y : t.y + t.height },\n\n maxX(t: IBoundsData): number { return t.width > 0 ? t.x + t.width : t.x },\n\n maxY(t: IBoundsData): number { return t.height > 0 ? t.y + t.height : t.y },\n\n\n move(t: IBoundsData, x: number, y: number): void {\n t.x += x\n t.y += y\n },\n\n scroll(t: IBoundsData, data: IScrollPointData): void {\n t.x += data.scrollX\n t.y += data.scrollY\n },\n\n getByMove(t: IBoundsData, x: number, y: number): IBoundsData {\n t = { ...t }\n B.move(t, x, y)\n return t\n },\n\n toOffsetOutBounds(t: IBoundsData, to?: IOffsetBoundsData, parent?: IBoundsData): void {\n if (!to) {\n to = t as IOffsetBoundsData\n } else {\n copy(to, t)\n }\n if (parent) {\n to.offsetX = -(B.maxX(parent) - t.x)\n to.offsetY = -(B.maxY(parent) - t.y)\n } else {\n to.offsetX = t.x + t.width\n to.offsetY = t.y + t.height\n }\n B.move(to, -to.offsetX, -to.offsetY)\n },\n\n\n scale(t: IBoundsData, scaleX: number, scaleY = scaleX, onlySize?: boolean): void {\n onlySize || P.scale(t, scaleX, scaleY)\n t.width *= scaleX\n t.height *= scaleY\n },\n\n scaleOf(t: IBoundsData, origin: IPointData, scaleX: number, scaleY = scaleX): void {\n P.scaleOf(t, origin, scaleX, scaleY)\n t.width *= scaleX\n t.height *= scaleY\n },\n\n tempToOuterOf(t: IBoundsData, matrix: IMatrixData): IBoundsData {\n B.copy(tempBounds, t)\n B.toOuterOf(tempBounds, matrix)\n return tempBounds\n },\n\n getOuterOf(t: IBoundsData, matrix: IMatrixData): IBoundsData {\n t = { ...t }\n B.toOuterOf(t, matrix)\n return t\n },\n\n toOuterOf(t: IBoundsData, matrix: IMatrixData, to?: IBoundsData): void {\n\n to || (to = t)\n\n if (matrix.b === 0 && matrix.c === 0) {\n\n const { a, d } = matrix\n if (a > 0) {\n to.width = t.width * a\n to.x = matrix.e + t.x * a\n } else {\n to.width = t.width * -a\n to.x = matrix.e + t.x * a - to.width\n }\n\n if (d > 0) {\n to.height = t.height * d\n to.y = matrix.f + t.y * d\n } else {\n to.height = t.height * -d\n to.y = matrix.f + t.y * d - to.height\n }\n\n } else {\n\n point.x = t.x\n point.y = t.y\n\n toOuterPoint(matrix, point, toPoint)\n setPoint(tempPointBounds, toPoint.x, toPoint.y)\n\n point.x = t.x + t.width\n\n toOuterPoint(matrix, point, toPoint)\n addPoint(tempPointBounds, toPoint.x, toPoint.y)\n\n point.y = t.y + t.height\n\n toOuterPoint(matrix, point, toPoint)\n addPoint(tempPointBounds, toPoint.x, toPoint.y)\n\n point.x = t.x\n\n toOuterPoint(matrix, point, toPoint)\n addPoint(tempPointBounds, toPoint.x, toPoint.y)\n\n toBounds(tempPointBounds, to)\n }\n },\n\n toInnerOf(t: IBoundsData, matrix: IMatrixData, to?: IBoundsData): void {\n to || (to = t)\n B.move(to, -matrix.e, -matrix.f)\n B.scale(to, 1 / matrix.a, 1 / matrix.d)\n },\n\n getFitMatrix(t: IBoundsData, put: IBoundsData, baseScale = 1): IMatrix {\n const scale = Math.min(baseScale, B.getFitScale(t, put))\n return new Matrix(scale, 0, 0, scale, -put.x * scale, -put.y * scale)\n },\n\n getFitScale(t: ISizeData, put: ISizeData, isCoverMode?: boolean): number {\n const sw = t.width / put.width, sh = t.height / put.height\n return isCoverMode ? Math.max(sw, sh) : Math.min(sw, sh)\n },\n\n put(t: ISizeData, put: ISizeData, align: IAlign = 'center', putScale: number | 'fit' | 'cover' = 1, changeSize = true, to?: IPointData): void {\n to || (to = put as unknown as IPointData)\n if (isString(putScale)) putScale = B.getFitScale(t, put, putScale === 'cover')\n tempBounds.width = changeSize ? put.width *= putScale : put.width * putScale\n tempBounds.height = changeSize ? put.height *= putScale : put.height * putScale\n AlignHelper.toPoint(align, tempBounds, t as IBoundsData, to, true, true)\n },\n\n getSpread(t: IBoundsData, spread: IFourNumber, side?: ISide): IBoundsData {\n const n = {} as IBoundsData\n B.copyAndSpread(n, t, spread, false, side)\n return n\n },\n\n spread(t: IBoundsData, spread: IFourNumber, side?: ISide): void {\n B.copyAndSpread(t, t, spread, false, side)\n },\n\n shrink(t: IBoundsData, shrink: IFourNumber, side?: ISide): void {\n B.copyAndSpread(t, t, shrink, true, side)\n },\n\n ceil(t: IBoundsData): void {\n const { x, y } = t\n t.x = floor(t.x)\n t.y = floor(t.y)\n t.width = x > t.x ? ceil(t.width + x - t.x) : ceil(t.width)\n t.height = y > t.y ? ceil(t.height + y - t.y) : ceil(t.height)\n },\n\n unsign(t: IBoundsData): void {\n if (t.width < 0) {\n t.x += t.width\n t.width = -t.width\n }\n if (t.height < 0) {\n t.y += t.height\n t.height = -t.height\n }\n },\n\n float(t: IBoundsData, maxLength?: number): void {\n t.x = float(t.x, maxLength)\n t.y = float(t.y, maxLength)\n t.width = float(t.width, maxLength)\n t.height = float(t.height, maxLength)\n },\n\n add(t: IBoundsData, bounds: IBoundsData, isPoint?: boolean): void {\n right = t.x + t.width\n bottom = t.y + t.height\n boundsRight = bounds.x\n boundsBottom = bounds.y\n\n if (!isPoint) {\n boundsRight += bounds.width\n boundsBottom += bounds.height\n }\n\n right = right > boundsRight ? right : boundsRight\n bottom = bottom > boundsBottom ? bottom : boundsBottom\n\n t.x = t.x < bounds.x ? t.x : bounds.x\n t.y = t.y < bounds.y ? t.y : bounds.y\n t.width = right - t.x\n t.height = bottom - t.y\n },\n\n addList(t: IBoundsData, list: IBoundsData[]): void {\n B.setListWithFn(t, list, undefined, true)\n },\n\n setList(t: IBoundsData, list: IBoundsData[], addMode = false): void {\n B.setListWithFn(t, list, undefined, addMode)\n },\n\n addListWithFn(t: IBoundsData, list: IObject[], boundsDataFn: IBoundsDataFn): void {\n B.setListWithFn(t, list, boundsDataFn, true)\n },\n\n setListWithFn(t: IBoundsData, list: IObject[], boundsDataFn: IBoundsDataFn, addMode = false): void {\n let bounds: IBoundsData, first = true\n for (let i = 0, len = list.length; i < len; i++) {\n bounds = boundsDataFn ? boundsDataFn(list[i], i) : list[i] as IBoundsData\n if (bounds && (bounds.width || bounds.height)) {\n if (first) {\n first = false\n if (!addMode) copy(t, bounds)\n } else {\n add(t, bounds)\n }\n }\n }\n\n if (first) B.reset(t)\n },\n\n\n setPoints(t: IBoundsData, points: IPointData[]): void {\n points.forEach((point, index) => index === 0 ? setPoint(tempPointBounds, point.x, point.y) : addPoint(tempPointBounds, point.x, point.y))\n toBounds(tempPointBounds, t)\n },\n\n setPoint(t: IBoundsData, point: IPointData): void {\n B.set(t, point.x, point.y)\n },\n\n addPoint(t: IBoundsData, point: IPointData): void {\n add(t, point as IBoundsData, true)\n },\n\n getPoints(t: IBoundsData): IPointData[] {\n const { x, y, width, height } = t\n return [\n { x, y }, // topLeft\n { x: x + width, y }, // topRight\n { x: x + width, y: y + height }, // bottomRight\n { x, y: y + height } // bottomLeft\n ]\n },\n\n\n hitRadiusPoint(t: IBoundsData, point: IRadiusPointData, pointMatrix?: IMatrixWithScaleData): boolean {\n if (pointMatrix) point = P.tempToInnerRadiusPointOf(point, pointMatrix)\n return (point.x >= t.x - point.radiusX && point.x <= t.x + t.width + point.radiusX) && (point.y >= t.y - point.radiusY && point.y <= t.y + t.height + point.radiusY)\n },\n\n hitPoint(t: IBoundsData, point: IPointData, pointMatrix?: IMatrixData): boolean {\n if (pointMatrix) point = P.tempToInnerOf(point, pointMatrix)\n return (point.x >= t.x && point.x <= t.x + t.width) && (point.y >= t.y && point.y <= t.y + t.height)\n },\n\n\n hit(t: IBoundsData, other: IBoundsData, otherMatrix?: IMatrixData): boolean {\n if (otherMatrix) other = B.tempToOuterOf(other, otherMatrix)\n return !((t.y + t.height < other.y) || (other.y + other.height < t.y) || (t.x + t.width < other.x) || (other.x + other.width < t.x))\n },\n\n includes(t: IBoundsData, other: IBoundsData, otherMatrix?: IMatrixData): boolean {\n if (otherMatrix) other = B.tempToOuterOf(other, otherMatrix)\n return (t.x <= other.x) && (t.y <= other.y) && (t.x + t.width >= other.x + other.width) && (t.y + t.height >= other.y + other.height)\n },\n\n getIntersectData(t: IBoundsData, other: IBoundsData, otherMatrix?: IMatrixData): IBoundsData {\n if (otherMatrix) other = B.tempToOuterOf(other, otherMatrix)\n if (!B.hit(t, other)) return getBoundsData()\n\n let { x, y, width, height } = other\n\n right = x + width\n bottom = y + height\n boundsRight = t.x + t.width\n boundsBottom = t.y + t.height\n\n x = x > t.x ? x : t.x\n y = y > t.y ? y : t.y\n right = right < boundsRight ? right : boundsRight\n bottom = bottom < boundsBottom ? bottom : boundsBottom\n\n width = right - x\n height = bottom - y\n\n return { x, y, width, height }\n },\n\n intersect(t: IBoundsData, other: IBoundsData, otherMatrix?: IMatrixData): void {\n B.copy(t, B.getIntersectData(t, other, otherMatrix))\n },\n\n\n isSame(t: IBoundsData, bounds: IBoundsData): boolean {\n return t.x === bounds.x && t.y === bounds.y && t.width === bounds.width && t.height === bounds.height\n },\n\n isEmpty(t: IBoundsData): boolean {\n return t.x === 0 && t.y === 0 && t.width === 0 && t.height === 0\n },\n\n reset(t: IBoundsData): void {\n B.set(t)\n }\n}\n\nconst B = BoundsHelper\nconst { add, copy } = B","import { IBounds, IBoundsData, IMatrixData, IPointData, IBoundsDataFn, IObject, IMatrix, IRadiusPointData, IMatrixWithLayoutData, IFourNumber, ISide, IAlign } from '@leafer/interface'\nimport { isObject } from '@leafer/data'\n\nimport { BoundsHelper as B } from './BoundsHelper'\n\n\nexport class Bounds implements IBounds {\n\n public x: number\n public y: number\n public width: number\n public height: number\n\n public get minX(): number { return B.minX(this) }\n public get minY(): number { return B.minY(this) }\n public get maxX(): number { return B.maxX(this) }\n public get maxY(): number { return B.maxY(this) }\n\n constructor(x?: number | IBoundsData, y?: number, width?: number, height?: number) {\n this.set(x, y, width, height)\n }\n\n public set(x?: number | IBoundsData, y?: number, width?: number, height?: number): IBounds {\n isObject(x) ? B.copy(this, x) : B.set(this, x, y, width, height)\n return this\n }\n\n public get(): IBoundsData {\n const { x, y, width, height } = this\n return { x, y, width, height }\n }\n\n public clone(): IBounds {\n return new Bounds(this)\n }\n\n\n public move(x: number, y: number): IBounds {\n B.move(this, x, y)\n return this\n }\n\n public scale(scaleX: number, scaleY?: number, onlySize?: boolean): IBounds {\n B.scale(this, scaleX, scaleY, onlySize)\n return this\n }\n\n public scaleOf(origin: IPointData, scaleX: number, scaleY?: number): IBounds {\n B.scaleOf(this, origin, scaleX, scaleY)\n return this\n }\n\n public toOuterOf(matrix: IMatrixData, to?: IBoundsData): IBounds {\n B.toOuterOf(this, matrix, to)\n return this\n }\n\n public toInnerOf(matrix: IMatrixData, to?: IBoundsData): IBounds {\n B.toInnerOf(this, matrix, to)\n return this\n }\n\n public getFitMatrix(put: IBoundsData, baseScale?: number): IMatrix {\n return B.getFitMatrix(this, put, baseScale)\n }\n\n public put(put: IBoundsData, align?: IAlign, putScale?: number | 'fit' | 'cover'): void {\n B.put(this, put, align, putScale)\n }\n\n public spread(fourNumber: IFourNumber, side?: ISide): IBounds {\n B.spread(this, fourNumber, side)\n return this\n }\n\n public shrink(fourNumber: IFourNumber, side?: ISide): IBounds {\n B.shrink(this, fourNumber, side)\n return this\n }\n\n public ceil(): IBounds {\n B.ceil(this)\n return this\n }\n\n public unsign(): IBounds {\n B.unsign(this)\n return this\n }\n\n public float(maxLength?: number): IBounds {\n B.float(this, maxLength)\n return this\n }\n\n\n public add(bounds: IBoundsData): IBounds {\n B.add(this, bounds)\n return this\n }\n\n public addList(boundsList: IBoundsData[]): IBounds {\n B.setList(this, boundsList, true)\n return this\n }\n\n public setList(boundsList: IBoundsData[]): IBounds {\n B.setList(this, boundsList)\n return this\n }\n\n public addListWithFn(list: IObject[], boundsDataFn: IBoundsDataFn): IBounds {\n B.setListWithFn(this, list, boundsDataFn, true)\n return this\n }\n\n public setListWithFn(list: IObject[], boundsDataFn: IBoundsDataFn): IBounds {\n B.setListWithFn(this, list, boundsDataFn)\n return this\n }\n\n\n public setPoint(point: IPointData): IBounds {\n B.setPoint(this, point)\n return this\n }\n\n public setPoints(points: IPointData[]): IBounds {\n B.setPoints(this, points)\n return this\n }\n\n public addPoint(point: IPointData): IBounds {\n B.addPoint(this, point)\n return this\n }\n\n public getPoints(): IPointData[] {\n return B.getPoints(this)\n }\n\n\n\n public hitPoint(point: IPointData, pointMatrix?: IMatrixData): boolean {\n return B.hitPoint(this, point, pointMatrix)\n }\n\n public hitRadiusPoint(point: IRadiusPointData, pointMatrix?: IMatrixWithLayoutData): boolean {\n return B.hitRadiusPoint(this, point, pointMatrix)\n }\n\n public hit(bounds: IBoundsData, boundsMatrix?: IMatrixData): boolean {\n return B.hit(this, bounds, boundsMatrix)\n }\n\n public includes(bounds: IBoundsData, boundsMatrix?: IMatrixData): boolean {\n return B.includes(this, bounds, boundsMatrix)\n }\n\n\n public intersect(bounds: IBoundsData, boundsMatrix?: IMatrixData): IBounds {\n B.intersect(this, bounds, boundsMatrix)\n return this\n }\n\n public getIntersect(bounds: IBoundsData, boundsMatrix?: IMatrixData): IBounds {\n return new Bounds(B.getIntersectData(this, bounds, boundsMatrix))\n }\n\n\n public isSame(bounds: IBoundsData): boolean {\n return B.isSame(this, bounds)\n }\n\n public isEmpty(): boolean {\n return B.isEmpty(this)\n }\n\n public reset(): void {\n B.reset(this)\n }\n\n}\n\nexport const tempBounds = new Bounds()","import { INumberMap } from '@leafer/interface'\n\n\nexport const StringNumberMap: INumberMap = {\n '0': 1,\n '1': 1,\n '2': 1,\n '3': 1,\n '4': 1,\n '5': 1,\n '6': 1,\n '7': 1,\n '8': 1,\n '9': 1,\n '.': 1,\n 'e': 1,\n 'E': 1\n}","import { IBooleanMap, IBoundsData, ILeaferCanvas, IRenderOptions, ILeaf } from '@leafer/interface'\nimport { isString } from '@leafer/data'\nimport { MathHelper } from '@leafer/math'\n\n\nconst { randColor } = MathHelper\nexport class Debug {\n\n static enable: boolean\n\n static filterList: string[] = []\n static excludeList: string[] = []\n\n // other\n static showWarn = true\n static showRepaint: boolean | string\n static showBounds: boolean | string | 'hit'\n\n public name: string\n\n public repeatMap: IBooleanMap = {}\n\n constructor(name: string) {\n this.name = name\n }\n\n static get(name: string): Debug {\n return new Debug(name)\n }\n\n static set filter(name: string | string[]) {\n this.filterList = getNameList(name)\n }\n\n static set exclude(name: string | string[]) {\n this.excludeList = getNameList(name)\n }\n\n static drawRepaint(canvas: ILeaferCanvas, bounds: IBoundsData): void {\n const color = randColor()\n canvas.fillWorld(bounds, color.replace('1)', '.1)'))\n canvas.strokeWorld(bounds, color)\n }\n\n static drawBounds(leaf: ILeaf, canvas: ILeaferCanvas, _options: IRenderOptions): void {\n const showHit = Debug.showBounds === 'hit', w = leaf.__nowWorld, color = randColor()\n if (showHit) canvas.setWorld(w), leaf.__drawHitPath(canvas), canvas.fillStyle = color.replace('1)', '.2)'), canvas.fill()\n\n canvas.resetTransform()\n canvas.setStroke(color, 2)\n showHit ? canvas.stroke() : canvas.strokeWorld(w, color)\n }\n\n\n log(...messages: unknown[]): void {\n if (D.enable) {\n if (D.filterList.length && D.filterList.every(name => name !== this.name)) return\n if (D.excludeList.length && D.excludeList.some(name => name === this.name)) return\n console.log('%c' + this.name, 'color:#21ae62', ...messages)\n }\n }\n\n tip(...messages: unknown[]): void {\n if (D.enable) this.warn(...messages)\n }\n\n warn(...messages: unknown[]): void {\n if (D.showWarn) console.warn(this.name, ...messages)\n }\n\n repeat(name: string, ...messages: unknown[]) {\n if (!this.repeatMap[name]) {\n this.warn('repeat:' + name, ...messages)\n this.repeatMap[name] = true\n }\n }\n\n error(...messages: unknown[]): void {\n try {\n throw new Error()\n } catch (e) {\n console.error(this.name, ...messages, e)\n }\n }\n}\n\nfunction getNameList(name: string | string[]): string[] {\n if (!name) name = []\n else if (isString(name)) name = [name]\n return name\n}\n\nconst D = Debug","import { IncrementId } from '@leafer/math'\nimport { isUndefined } from '@leafer/data'\n\nimport { Debug } from './Debug'\n\n\ninterface ids {\n [name: string]: number\n}\ninterface names {\n [name: string]: string\n}\n\n\nconst debug = Debug.get('RunTime')\n\nexport const Run = {\n\n currentId: 0,\n currentName: '',\n\n idMap: {} as ids,\n nameMap: {} as names,\n nameToIdMap: {} as ids,\n\n start(name: string, microsecond?: boolean): number {\n const id = IncrementId.create(IncrementId.RUNTIME)\n R.currentId = R.idMap[id] = microsecond ? performance.now() : Date.now()\n R.currentName = R.nameMap[id] = name\n R.nameToIdMap[name] = id\n return id\n },\n\n end(id: number, microsecond?: boolean): void {\n const time = R.idMap[id], name = R.nameMap[id]\n const duration = microsecond ? (performance.now() - time) / 1000 : Date.now() - time\n R.idMap[id] = R.nameMap[id] = R.nameToIdMap[name] = undefined\n debug.log(name, duration, 'ms')\n },\n\n endOfName(name: string, microsecond?: boolean): void {\n const id = R.nameToIdMap[name]\n if (!isUndefined(id)) R.end(id, microsecond)\n }\n}\n\nconst R = Run","import { IBooleanMap } from '@leafer/interface'\n\n\nconst check = [] as string[]\n\nexport const Plugin = {\n\n list: {} as IBooleanMap,\n\n add(name: string, ...needPlugins: string[]) {\n this.list[name] = true\n check.push(...needPlugins)\n },\n\n has(name: string, tip?: boolean): boolean {\n const rs = this.list[name]\n if (!rs && tip) this.need(name)\n return rs\n },\n\n need(name: string): any {\n console.error('please install and import plugin: ' + (name.includes('-x') ? '' : '@leafer-in/') + name)\n }\n\n}\n\nsetTimeout(() => check.forEach(name => Plugin.has(name, true)))","import { ICreator, IObject, ILeaf } from '@leafer/interface'\nimport { Plugin } from '@leafer/debug'\n\n\nexport const Creator: ICreator = {\n editor(_options?: IObject): ILeaf {\n return Plugin.need('editor')\n }\n}","import { ILeaf, IObject } from '@leafer/interface'\nimport { isUndefined } from '@leafer/data'\nimport { Debug } from '@leafer/debug'\n\n\nconst debug = Debug.get('UICreator')\n\nexport const UICreator = {\n\n list: {} as IObject,\n\n register(UI: IObject): void {\n const { __tag: tag } = UI.prototype as ILeaf\n if (list[tag]) debug.repeat(tag)\n list[tag] = UI\n },\n\n get(tag: string, data?: IObject, x?: number, y?: number, width?: number, height?: number): ILeaf {\n if (!list[tag]) debug.error('not register ' + tag)\n const ui = new list[tag](data)\n if (!isUndefined(x)) {\n ui.x = x\n if (y) ui.y = y\n if (width) ui.width = width\n if (height) ui.height = height\n }\n return ui\n }\n\n}\n\nconst { list } = UICreator","import { IEvent, IObject } from '@leafer/interface'\nimport { isString } from '@leafer/data'\nimport { Debug } from '@leafer/debug'\n\n\nconst debug = Debug.get('EventCreator')\n\nexport const EventCreator = {\n\n nameList: {} as IObject,\n\n register(Event: IObject): void {\n let name: string\n Object.keys(Event).forEach(key => {\n name = Event[key]\n if (isString(name)) nameList[name] && debug.repeat(name), nameList[name] = Event\n })\n },\n\n changeName(oldName: string, newName: string): void {\n const Event = nameList[oldName]\n if (Event) {\n const constName = Object.keys(Event).find(key => Event[key] === oldName)\n if (constName) {\n Event[constName] = newName\n nameList[newName] = Event\n }\n }\n },\n\n has(type: string): boolean {\n return !!this.nameList[type]\n },\n\n get(type: string, ...params: unknown[]): IEvent {\n return new nameList[type](...params)\n }\n\n}\n\nconst { nameList } = EventCreator","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import { ICanvasAttr, ITextMetrics, ICanvasContext2D, IPath2D, IObject, InnerId, IMatrixData, IFunction, IWindingRule, IBlendMode } from '@leafer/interface'\nimport { isObject } from '@leafer/data'\n\n\nfunction contextAttr(realName?: string) {\n return (target: Canvas, key: string) => {\n if (!realName) realName = key\n const property = {\n get() { return ((this as unknown as Canvas).context as IObject)[realName] },\n set(value: unknown) { ((this as unknown as Canvas).context as IObject)[realName] = value }\n }\n if (key === 'strokeCap') (property as any).set = function (value: unknown) { ((this as unknown as Canvas).context as IObject)[realName] = value === 'none' ? 'butt' : value }\n Object.defineProperty(target, key, property)\n }\n}\n\nconst contextMethodNameList: string[] = []\nfunction contextMethod() {\n return (_target: Canvas, key: string) => {\n contextMethodNameList.push(key)\n }\n}\n\nconst emptyArray: number[] = []\n\n\nexport class Canvas implements ICanvasAttr {\n\n public readonly innerId: InnerId\n\n public context: ICanvasContext2D\n\n // canvas attr\n\n @contextAttr('imageSmoothingEnabled')\n public smooth: boolean\n\n @contextAttr('imageSmoothingQuality')\n public smoothLevel: ImageSmoothingQuality\n\n @contextAttr('globalAlpha')\n public opacity: number\n\n public set blendMode(value: IBlendMode) {\n if (value === 'normal') value = 'source-over'\n this.context.globalCompositeOperation = value as any\n }\n\n public get blendMode(): IBlendMode {\n return this.context.globalCompositeOperation as IBlendMode\n }\n\n @contextAttr()\n public fillStyle: string | object\n\n @contextAttr()\n public strokeStyle: string | object\n\n\n @contextAttr('lineWidth')\n public strokeWidth: number\n\n @contextAttr('lineCap')\n public strokeCap: string\n\n @contextAttr('lineJoin')\n public strokeJoin: string\n\n public set dashPattern(value: number[]) {\n this.context.setLineDash(value || emptyArray)\n }\n public get dashPattern(): number[] {\n return this.context.getLineDash()\n }\n\n @contextAttr('lineDashOffset')\n public dashOffset: number\n\n @contextAttr()\n public miterLimit: number\n\n\n @contextAttr()\n public shadowBlur: number\n\n @contextAttr()\n public shadowColor: string\n\n @contextAttr()\n public shadowOffsetX: number\n\n @contextAttr()\n public shadowOffsetY: number\n\n @contextAttr()\n public filter: string\n\n\n @contextAttr()\n public font: string\n\n @contextAttr()\n public fontKerning: string\n\n @contextAttr()\n public fontStretch: string\n\n @contextAttr()\n public fontVariantCaps: string\n\n\n @contextAttr()\n public textAlign: string\n\n @contextAttr()\n public textBaseline: string\n\n @contextAttr()\n public textRendering: string\n\n @contextAttr()\n public wordSpacing: string\n\n @contextAttr()\n public letterSpacing: string\n\n\n @contextAttr()\n public direction: string\n\n // end\n\n public __bindContext(): void {\n let method: IFunction\n contextMethodNameList.forEach(name => {\n method = (this.context as IObject)[name]\n if (method) (this as IObject)[name] = method.bind(this.context)\n })\n this.textBaseline = \"alphabetic\"\n }\n\n // canvas method\n\n @contextMethod()\n public setTransform(_a: number | IMatrixData, _b?: number, _c?: number, _d?: number, _e?: number, _f?: number): void { }\n\n @contextMethod()\n public resetTransform(): void { }\n\n @contextMethod()\n public getTransform(): IMatrixData { return void 0 }\n\n @contextMethod()\n public save(): void { }\n\n @contextMethod()\n public restore(): void { }\n\n public transform(a: number | IMatrixData, b?: number, c?: number, d?: number, e?: number, f?: number): void {\n if (isObject(a)) {\n this.context.transform(a.a, a.b, a.c, a.d, a.e, a.f)\n } else {\n this.context.transform(a, b, c, d, e, f)\n }\n }\n\n @contextMethod()\n public translate(_x: number, _y: number): void { }\n\n @contextMethod()\n public scale(_x: number, _y: number): void { }\n\n @contextMethod()\n public rotate(_angle: number): void { }\n\n @contextMethod()\n public fill(_path2d?: IPath2D | IWindingRule, _rule?: IWindingRule): void { }\n\n @contextMethod()\n public stroke(_path2d?: IPath2D): void { }\n\n @contextMethod()\n public clip(_path2d?: IPath2D | IWindingRule, _rule?: IWindingRule): void { }\n\n @contextMethod()\n public fillRect(_x: number, _y: number, _width: number, _height: number): void { }\n\n @contextMethod()\n public strokeRect(_x: number, _y: number, _width: number, _height: number): void { }\n\n @contextMethod()\n public clearRect(_x: number, _y: number, _width: number, _height: number): void { }\n\n public drawImage(image: CanvasImageSource, sx: number, sy: number, sw?: number, sh?: number, dx?: number, dy?: number, dw?: number, dh?: number): void {\n switch (arguments.length) {\n case 9:\n\n // safari: drawimage裁剪画布外的坐标会有问题, 必须是不小于0的坐标点\n if (sx < 0) {\n const d = (-sx / sw) * dw\n sw += sx\n sx = 0\n dx += d\n dw -= d\n }\n\n if (sy < 0) {\n const d = (-sy / sh) * dh\n sh += sy\n sy = 0\n dy += d\n dh -= d\n }\n\n this.context.drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh)\n break\n case 5:\n this.context.drawImage(image, sx, sy, sw, sh) // = dx, dy, dw, dh\n break\n case 3:\n this.context.drawImage(image, sx, sy)\n }\n }\n\n\n // canvas draw\n @contextMethod()\n public beginPath(): void { }\n\n @contextMethod()\n public moveTo(_x: number, _y: number): void { }\n\n @contextMethod()\n public lineTo(_x: number, _y: number): void { }\n\n @contextMethod()\n public bezierCurveTo(_cp1x: number, _cp1y: number, _cp2x: number, _cp2y: number, _x: number, _y: number): void { }\n\n @contextMethod()\n public quadraticCurveTo(_cpx: number, _cpy: number, _x: number, _y: number): void { }\n\n @contextMethod()\n public closePath(): void { }\n\n @contextMethod()\n public arc(_x: number, _y: number, _radius: number, _startAngle: number, _endAngle: number, _anticlockwise?: boolean): void { }\n\n @contextMethod()\n public arcTo(_x1: number, _y1: number, _x2: number, _y2: number, _radius: number): void { }\n\n @contextMethod()\n public ellipse(_x: number, _y: number, _radiusX: number, _radiusY: number, _rotation: number, _startAngle: number, _endAngle: number, _anticlockwise?: boolean): void { }\n\n @contextMethod()\n public rect(_x: number, _y: number, _width: number, _height: number): void { }\n\n @contextMethod()\n public roundRect(_x: number, _y: number, _width: number, _height: number, _radius?: number | number[]): void { }\n\n // end canvas draw\n\n // paint\n\n @contextMethod()\n public createConicGradient(_startAngle: number, _x: number, _y: number): CanvasGradient { return void 0 }\n\n @contextMethod()\n public createLinearGradient(_x0: number, _y0: number, _x1: number, _y1: number): CanvasGradient { return void 0 }\n\n @contextMethod()\n public createPattern(_image: CanvasImageSource, _repetition: string | null): CanvasPattern | null { return void 0 }\n\n @contextMethod()\n public createRadialGradient(_x0: number, _y0: number, _r0: number, _x1: number, _y1: number, _r1: number): CanvasGradient { return void 0 }\n\n // text\n @contextMethod()\n public fillText(_text: string, _x: number, _y: number, _maxWidth?: number): void { }\n\n @contextMethod()\n public measureText(_text: string): ITextMetrics { return void 0 }\n\n @contextMethod()\n public strokeText(_text: string, _x: number, _y: number, _maxWidth?: number): void { }\n\n public destroy(): void {\n this.context = null\n }\n}","import { IBounds, ILeaferCanvas, ICanvasStrokeOptions, ILeaferCanvasConfig, IWindingRuleData, IExportOptions, IMatrixData, IBoundsData, IAutoBounds, IScreenSizeData, IResizeEventListener, IMatrixWithBoundsData, IPointData, InnerId, ICanvasManager, IWindingRule, IBlendMode, IExportImageType, IExportFileType, IBlob, ICursorType, ILeaferCanvasView, IRadiusPointData, IObject, IMatrixWithOptionHalfData } from '@leafer/interface'\nimport { Bounds, BoundsHelper, MatrixHelper, IncrementId } from '@leafer/math'\nimport { Creator, Platform } from '@leafer/platform'\nimport { DataHelper, isUndefined } from '@leafer/data'\n\nimport { Canvas } from './Canvas'\n\n\nconst { copy, multiplyParent, pixelScale } = MatrixHelper, { round } = Math, tempPixelBounds = new Bounds(), tempPixelBounds2 = new Bounds()\nconst minSize: IScreenSizeData = { width: 1, height: 1, pixelRatio: 1 }\n\nexport const canvasSizeAttrs = ['width', 'height', 'pixelRatio']\n\nexport class LeaferCanvasBase extends Canvas implements ILeaferCanvas {\n\n declare public readonly innerId: InnerId\n\n public name: string\n\n public manager: ICanvasManager\n\n public size: IScreenSizeData = {} as IScreenSizeData\n\n public get width(): number { return this.size.width }\n public get height(): number { return this.size.height }\n\n public get pixelRatio(): number { return this.size.pixelRatio }\n public get pixelWidth(): number { return this.width * this.pixelRatio || 0 } // 防止出现 NaN\n public get pixelHeight(): number { return this.height * this.pixelRatio || 0 }\n\n public get pixelSnap(): boolean { return this.config.pixelSnap }\n public set pixelSnap(value: boolean) { this.config.pixelSnap = value }\n\n public get allowBackgroundColor(): boolean { return this.view && this.parentView }\n\n public bounds: IBounds\n public clientBounds: IBoundsData\n\n public config: ILeaferCanvasConfig\n\n public autoLayout: boolean\n\n public view: ILeaferCanvasView\n public parentView: any\n\n public unreal?: boolean\n\n public recycled?: boolean\n\n public worldTransform: IMatrixData = {} as IMatrixData\n\n protected savedBlendMode: IBlendMode\n\n constructor(config?: ILeaferCanvasConfig, manager?: ICanvasManager) {\n super()\n if (!config) config = minSize\n\n this.manager = manager\n this.innerId = IncrementId.create(IncrementId.CNAVAS)\n\n const { width, height, pixelRatio } = config\n this.autoLayout = !width || !height\n\n this.size.pixelRatio = pixelRatio || Platform.devicePixelRatio\n this.config = config\n\n this.init()\n }\n\n public init(): void { }\n\n public __createContext(): void {\n const { view } = this\n const { contextSettings } = this.config\n this.context = contextSettings ? view.getContext('2d', contextSettings) : view.getContext('2d')\n this.__bindContext()\n }\n\n // @leafer-in/export rewrite\n\n public export(_filename: IExportFileType | string, _options?: IExportOptions | number | boolean): string | Promise<any> { return undefined }\n\n public toBlob(_type?: IExportFileType, _quality?: number): Promise<IBlob> { return undefined }\n\n public toDataURL(_type?: IExportImageType, _quality?: number): string | Promise<string> { return undefined }\n\n public saveAs(_filename: string, _quality?: number): Promise<boolean> { return undefined }\n\n // ---\n\n public resize(size: IScreenSizeData, safeResize = true): void {\n if (this.isSameSize(size)) return\n\n let takeCanvas: ILeaferCanvas\n if (this.context && !this.unreal && safeResize && this.width) {\n takeCanvas = this.getSameCanvas()\n takeCanvas.copyWorld(this)\n }\n\n const s = this.size as IObject\n DataHelper.copyAttrs(s, size, canvasSizeAttrs)\n canvasSizeAttrs.forEach(key => s[key] || (s[key] = 1)) // fix: width = 0 or height = 0\n\n this.bounds = new Bounds(0, 0, this.width, this.height)\n\n this.updateViewSize()\n this.updateClientBounds()\n\n if (this.context) {\n\n this.smooth = this.config.smooth\n\n if (!this.unreal && takeCanvas) {\n this.clearWorld(takeCanvas.bounds)\n this.copyWorld(takeCanvas)\n takeCanvas.recycle()\n }\n\n }\n\n }\n\n public updateViewSize(): void { }\n public updateClientBounds(): void { }\n public getClientBounds(update?: boolean): IBoundsData {\n if (update) this.updateClientBounds()\n return this.clientBounds || this.bounds\n }\n\n public startAutoLayout(_autoBounds: IAutoBounds, _listener: IResizeEventListener): void { }\n public stopAutoLayout(): void { }\n\n public setCursor(_cursor: ICursorType | ICursorType[]): void { }\n\n public setWorld(matrix: IMatrixWithOptionHalfData, parentMatrix?: IMatrixData): void {\n const { pixelRatio, pixelSnap } = this, w = this.worldTransform\n\n if (parentMatrix) multiplyParent(matrix, parentMatrix, w)\n pixelScale(matrix, pixelRatio, w)\n\n if (pixelSnap) {\n if (matrix.half && (matrix.half * pixelRatio) % 2) w.e = round(w.e - 0.5) + 0.5, w.f = round(w.f - 0.5) + 0.5\n else w.e = round(w.e), w.f = round(w.f)\n }\n\n this.setTransform(w.a, w.b, w.c, w.d, w.e, w.f)\n }\n\n public useWorldTransform(worldTransform?: IMatrixData): void {\n if (worldTransform) this.worldTransform = worldTransform\n const w = this.worldTransform\n if (w) this.setTransform(w.a, w.b, w.c, w.d, w.e, w.f)\n }\n\n public setStroke(color: string | object, strokeWidth: number, options?: ICanvasStrokeOptions, childOptions?: ICanvasStrokeOptions): void {\n if (strokeWidth) this.strokeWidth = strokeWidth\n if (color) this.strokeStyle = color\n if (options) this.setStrokeOptions(options, childOptions)\n }\n\n public setStrokeOptions(options: ICanvasStrokeOptions, childOptions?: ICanvasStrokeOptions): void {\n let { strokeCap, strokeJoin, dashPattern, dashOffset, miterLimit } = options\n if (childOptions) {\n if (childOptions.strokeCap) strokeCap = childOptions.strokeCap\n if (childOptions.strokeJoin) strokeJoin = childOptions.strokeJoin\n if (!isUndefined(childOptions.dashPattern)) dashPattern = childOptions.dashPattern\n if (!isUndefined(childOptions.dashOffset)) dashOffset = childOptions.dashOffset\n if (childOptions.miterLimit) miterLimit = childOptions.miterLimit\n }\n this.strokeCap = strokeCap\n this.strokeJoin = strokeJoin\n this.dashPattern = dashPattern\n this.dashOffset = dashOffset\n this.miterLimit = miterLimit\n }\n\n public saveBlendMode(blendMode: IBlendMode): void {\n this.savedBlendMode = this.blendMode\n this.blendMode = blendMode\n }\n\n public restoreBlendMode(): void {\n this.blendMode = this.savedBlendMode\n }\n\n // @leafer-ui/interaction rewrite\n\n public hitFill(_point: IPointData, _fillRule?: IWindingRule): boolean { return true }\n\n public hitStroke(_point: IPointData, _strokeWidth?: number): boolean { return true }\n\n public hitPixel(_radiusPoint: IRadiusPointData, _offset?: IPointData, _scale = 1): boolean { return true }\n\n // ---\n\n public setWorldShadow(x: number, y: number, blur: number, color?: string): void {\n const { pixelRatio } = this\n this.shadowOffsetX = x * pixelRatio\n this.shadowOffsetY = y * pixelRatio\n this.shadowBlur = blur * pixelRatio\n this.shadowColor = color || 'black'\n }\n\n public setWorldBlur(blur: number): void {\n const { pixelRatio } = this\n this.filter = `blur(${blur * pixelRatio}px)`\n }\n\n\n public copyWorld(canvas: ILeaferCanvas, from?: IBoundsData, to?: IBoundsData, blendMode?: IBlendMode, ceilPixel: boolean = true): void {\n if (blendMode) this.blendMode = blendMode\n if (from) {\n this.setTempPixelBounds(from, ceilPixel)\n if (!to) to = tempPixelBounds // to = from\n else this.setTempPixelBounds2(to, ceilPixel), to = tempPixelBounds2\n\n this.drawImage(canvas.view as HTMLCanvasElement, tempPixelBounds.x, tempPixelBounds.y, tempPixelBounds.width, tempPixelBounds.height, to.x, to.y, to.width, to.height)\n } else {\n this.drawImage(canvas.view as HTMLCanvasElement, 0, 0)\n }\n if (blendMode) this.blendMode = 'source-over'\n }\n\n public copyWorldToInner(canvas: ILeaferCanvas, fromWorld: IMatrixWithBoundsData, toInnerBounds: IBoundsData, blendMode?: IBlendMode, ceilPixel: boolean = true): void {\n if (fromWorld.b || fromWorld.c) {\n this.save()\n this.resetTransform()\n this.copyWorld(canvas, fromWorld, BoundsHelper.tempToOuterOf(toInnerBounds, fromWorld), blendMode, ceilPixel)\n this.restore()\n } else {\n if (blendMode) this.blendMode = blendMode\n this.setTempPixelBounds(fromWorld, ceilPixel)\n this.drawImage(canvas.view as HTMLCanvasElement, tempPixelBounds.x, tempPixelBounds.y, tempPixelBounds.width, tempPixelBounds.height, toInnerBounds.x, toInnerBounds.y, toInnerBounds.width, toInnerBounds.height)\n if (blendMode) this.blendMode = 'source-over'\n }\n }\n\n public copyWorldByReset(canvas: ILeaferCanvas, from?: IBoundsData, to?: IBoundsData, blendMode?: IBlendMode, onlyResetTransform?: boolean, ceilPixel: boolean = true): void {\n this.resetTransform()\n this.copyWorld(canvas, from, to, blendMode, ceilPixel)\n if (!onlyResetTransform) this.useWorldTransform() // restore world transform\n }\n\n public useGrayscaleAlpha(bounds: IBoundsData): void { // 先实现功能,后期需通过 shader 优化性能\n this.setTempPixelBounds(bounds, true, true)\n\n let alpha: number, pixel: number\n const { context } = this, imageData = context.getImageData(tempPixelBounds.x, tempPixelBounds.y, tempPixelBounds.width, tempPixelBounds.height), { data } = imageData\n\n for (let i = 0, len = data.length; i < len; i += 4) {\n pixel = data[i] * 0.299 + data[i + 1] * 0.587 + data[i + 2] * 0.114\n if (alpha = data[i + 3]) data[i + 3] = alpha === 255 ? pixel : alpha * (pixel / 255)\n }\n\n context.putImageData(imageData, tempPixelBounds.x, tempPixelBounds.y)\n }\n\n public useMask(maskCanvas: ILeaferCanvas, fromBounds?: IBoundsData, toBounds?: IBoundsData): void {\n this.copyWorld(maskCanvas, fromBounds, toBounds, 'destination-in')\n }\n\n public useEraser(eraserCanvas: ILeaferCanvas, fromBounds?: IBoundsData, toBounds?: IBoundsData): void {\n this.copyWorld(eraserCanvas, fromBounds, toBounds, 'destination-out')\n }\n\n public fillWorld(bounds: IBoundsData, color: string | object, blendMode?: IBlendMode, ceilPixel?: boolean): void {\n if (blendMode) this.blendMode = blendMode\n this.fillStyle = color\n this.setTempPixelBounds(bounds, ceilPixel)\n this.fillRect(tempPixelBounds.x, tempPixelBounds.y, tempPixelBounds.width, tempPixelBounds.height)\n if (blendMode) this.blendMode = 'source-over'\n }\n\n public strokeWorld(bounds: IBoundsData, color: string | object, blendMode?: IBlendMode, ceilPixel?: boolean): void {\n if (blendMode) this.blendMode = blendMode\n this.strokeStyle = color\n this.setTempPixelBounds(bounds, ceilPixel)\n this.strokeRect(tempPixelBounds.x, tempPixelBounds.y, tempPixelBounds.width, tempPixelBounds.height)\n if (blendMode) this.blendMode = 'source-over'\n }\n\n public clipWorld(bounds: IBoundsData, ceilPixel: boolean = true): void {\n this.beginPath()\n this.setTempPixelBounds(bounds, ceilPixel)\n this.rect(tempPixelBounds.x, tempPixelBounds.y, tempPixelBounds.width, tempPixelBounds.height)\n this.clip()\n\n }\n\n public clipUI(ruleData: IWindingRuleData): void {\n ruleData.windingRule ? this.clip(ruleData.windingRule) : this.clip()\n }\n\n public clearWorld(bounds: IBoundsData, ceilPixel: boolean = true): void {\n this.setTempPixelBounds(bounds, ceilPixel)\n this.clearRect(tempPixelBounds.x, tempPixelBounds.y, tempPixelBounds.width, tempPixelBounds.height)\n }\n\n public clear(): void {\n const { pixelRatio } = this\n this.clearRect(0, 0, this.width * pixelRatio + 2, this.height * pixelRatio + 2)\n }\n\n\n // other\n\n protected setTempPixelBounds(bounds: IBoundsData, ceil?: boolean, intersect?: boolean): void {\n this.copyToPixelBounds(tempPixelBounds, bounds, ceil, intersect)\n }\n\n protected setTempPixelBounds2(bounds: IBoundsData, ceil?: boolean, intersect?: boolean): void {\n this.copyToPixelBounds(tempPixelBounds2, bounds, ceil, intersect)\n }\n\n protected copyToPixelBounds(pixelBounds: IBounds, bounds: IBoundsData, ceil?: boolean, intersect?: boolean): void {\n pixelBounds.set(bounds)\n if (intersect) pixelBounds.intersect(this.bounds)\n pixelBounds.scale(this.pixelRatio)\n if (ceil) pixelBounds.ceil()\n }\n\n public isSameSize(size: IScreenSizeData): boolean {\n return this.width === size.width && this.height === size.height && (!size.pixelRatio || this.pixelRatio === size.pixelRatio)\n }\n\n // 需要有 manager变量\n public getSameCanvas(useSameWorldTransform?: boolean, useSameSmooth?: boolean): ILeaferCanvas {\n const { size, pixelSnap } = this, canvas = this.manager ? this.manager.get(size) : Creator.canvas({ ...size })\n canvas.save()\n\n if (useSameWorldTransform) copy(canvas.worldTransform, this.worldTransform), canvas.useWorldTransform()\n if (useSameSmooth) canvas.smooth = this.smooth\n canvas.pixelSnap !== pixelSnap && (canvas.pixelSnap = pixelSnap)\n\n return canvas\n }\n\n public recycle(clearBounds?: IBoundsData): void {\n if (!this.recycled) {\n this.restore()\n clearBounds ? this.clearWorld(clearBounds) : this.clear()\n this.manager ? this.manager.recycle(this) : this.destroy()\n }\n }\n\n public updateRender(_bounds?: IBoundsData): void { }\n\n public unrealCanvas(): void { }\n\n public destroy(): void {\n this.manager = this.view = this.parentView = null\n }\n}","import { IPathCommandData, IPathCreator } from '@leafer/interface'\n\nexport const PathHelper = {\n // index.ts rewrite\n creator: {} as IPathCreator,\n parse(_pathString: string, _curveMode?: boolean): IPathCommandData { return undefined },\n convertToCanvasData(_old: IPathCommandData, _curveMode?: boolean): IPathCommandData { return undefined }\n}","import { INumberMap, IStringMap } from '@leafer/interface'\n\nexport const CanvasCommandOnlyMap: INumberMap = {\n\n N: 21, // rect\n D: 22, // roundRect\n X: 23, // simple roundRect\n G: 24, // ellipse\n F: 25, // simple ellipse\n O: 26, // arc\n P: 27, // simple arc\n U: 28 // arcTo\n\n}\n\nexport const PathCommandMap: INumberMap = {\n\n // svg and canvas\n\n M: 1, // moveto\n m: 10,\n L: 2, // lineto\n l: 20,\n H: 3, // horizontal lineto\n h: 30,\n V: 4, // vertical lineto\n v: 40,\n C: 5, // curveto\n c: 50,\n S: 6, // smooth curveto\n s: 60,\n Q: 7, // quadratic Belzier curve\n q: 70,\n T: 8, // smooth quadratic Belzier curveto\n t: 80,\n A: 9, //e lliptical Arc\n a: 90,\n Z: 11, // closepath\n z: 11,\n\n R: 12, // Catmull Rom\n\n // canvas\n ...CanvasCommandOnlyMap\n}\n\nexport const PathCommandLengthMap: INumberMap = {\n\n M: 3, //moveto\n m: 3,\n L: 3, //lineto\n l: 3,\n H: 2, //horizontal lineto\n h: 2,\n V: 2, //vertical lineto\n v: 2,\n C: 7, //curveto\n c: 7,\n S: 5, //smooth curveto\n s: 5,\n Q: 5, //quadratic Belzier curve\n q: 5,\n T: 3, //smooth quadratic Belzier curveto\n t: 3,\n A: 8, //elliptical Arc\n a: 8,\n Z: 1, //closepath\n z: 1,\n\n // canvas\n\n N: 5, // rect\n D: 9, // roundRect\n X: 6, // simple roundRect\n G: 9, // ellipse\n F: 5, // simple ellipse\n O: 7, // arc\n P: 4, // simple arc\n U: 6 // arcTo\n\n}\n\nexport const NeedConvertToCanvasCommandMap: INumberMap = { // convert to: M L C Q Z\n\n // M: 1, //moveto\n m: 10,\n // L: 2, //lineto\n l: 20,\n H: 3, //horizontal lineto\n h: 30,\n V: 4, //vertical lineto\n v: 40,\n // C: 5, //curveto\n c: 50,\n S: 6, //smooth curveto\n s: 60,\n // Q: 7, //quadratic Belzier curve\n q: 70,\n T: 8, //smooth quadratic Belzier curveto\n t: 80,\n A: 9, //elliptical Arc\n a: 90,\n // Z: 11, //closepath\n // z: 11\n\n}\n\n\nexport const NeedConvertToCurveCommandMap: INumberMap = {\n ...NeedConvertToCanvasCommandMap,\n ...CanvasCommandOnlyMap\n}\n\nconst P = PathCommandMap\n\nexport const PathNumberCommandMap: IStringMap = {}\nfor (let key in P) {\n PathNumberCommandMap[P[key]] = key\n}\n// {1: 'M'}\n\nexport const PathNumberCommandLengthMap: INumberMap = {}\nfor (let key in P) {\n PathNumberCommandLengthMap[P[key]] = PathCommandLengthMap[key]\n}\n// {1: 3}","import { IPathDrawer } from '@leafer/interface'\nimport { MathHelper } from '@leafer/math'\n\nexport const RectHelper = {\n\n drawRoundRect(drawer: IPathDrawer, x: number, y: number, width: number, height: number, cornerRadius: number | number[]): void {\n const data = MathHelper.fourNumber(cornerRadius, Math.min(width / 2, height / 2))\n\n const right = x + width\n const bottom = y + height\n\n data[0] ? drawer.moveTo(x + data[0], y) : drawer.moveTo(x, y)\n data[1] ? drawer.arcTo(right, y, right, bottom, data[1]) : drawer.lineTo(right, y)\n data[2] ? drawer.arcTo(right, bottom, x, bottom, data[2]) : drawer.lineTo(right, bottom)\n data[3] ? drawer.arcTo(x, bottom, x, y, data[3]) : drawer.lineTo(x, bottom)\n data[0] ? drawer.arcTo(x, y, right, y, data[0]) : drawer.lineTo(x, y)\n }\n\n}","import { IPointData, ITwoPointBoundsData, IPathCommandData } from '@leafer/interface'\nimport { OneRadian, PI2, PI_2, PointHelper, TwoPointBoundsHelper } from '@leafer/math'\n\nimport { PathCommandMap } from './PathCommandMap'\nimport { RectHelper } from './RectHelper'\nimport { PathHelper } from './PathHelper'\n\n\nconst { sin, cos, hypot, atan2, ceil, abs, PI, sqrt, pow } = Math\nconst { setPoint, addPoint } = TwoPointBoundsHelper\nconst { set, toNumberPoints } = PointHelper\nconst { M, L, C, Q, Z } = PathCommandMap\nconst tempPoint = {} as IPointData\n\nexport const BezierHelper = {\n\n points(data: IPathCommandData, originPoints: number[] | IPointData[], curve?: boolean | number, close?: boolean): void {\n\n let points = toNumberPoints(originPoints)\n\n data.push(M, points[0], points[1])\n\n if (curve && points.length > 5) {\n\n let aX: number, aY: number, bX: number, bY: number, cX: number, cY: number, c1X: number, c1Y: number, c2X: number, c2Y: number\n let ba: number, cb: number, d: number, len = points.length\n const t = curve === true ? 0.5 : curve as number\n\n if (close) {\n points = [points[len - 2], points[len - 1], ...points, points[0], points[1], points[2], points[3]]\n len = points.length\n }\n\n for (let i = 2; i < len - 2; i += 2) {\n aX = points[i - 2]\n aY = points[i - 1]\n\n bX = points[i]\n bY = points[i + 1]\n\n cX = points[i + 2]\n cY = points[i + 3]\n\n ba = sqrt(pow(bX - aX, 2) + pow(bY - aY, 2))\n cb = sqrt(pow(cX - bX, 2) + pow(cY - bY, 2))\n\n if (!ba && !cb) continue\n\n d = ba + cb\n ba = (t * ba) / d\n cb = (t * cb) / d\n\n cX -= aX\n cY -= aY\n\n c1X = bX - ba * cX\n c1Y = bY - ba * cY\n\n if (i === 2) {\n if (!close) data.push(Q, c1X, c1Y, bX, bY)\n } else {\n data.push(C, c2X, c2Y, c1X, c1Y, bX, bY)\n }\n\n c2X = bX + cb * cX\n c2Y = bY + cb * cY\n }\n\n if (!close) data.push(Q, c2X, c2Y, points[len - 2], points[len - 1])\n\n } else {\n\n for (let i = 2, len = points.length; i < len; i += 2) {\n data.push(L, points[i], points[i + 1])\n }\n\n }\n\n if (close) data.push(Z)\n },\n\n rect(data: IPathCommandData, x: number, y: number, width: number, height: number) {\n PathHelper.creator.path = data\n PathHelper.creator.moveTo(x, y).lineTo(x + width, y).lineTo(x + width, y + height).lineTo(x, y + height).lineTo(x, y)\n },\n\n roundRect(data: IPathCommandData, x: number, y: number, width: number, height: number, radius: number | number[]): void {\n PathHelper.creator.path = []\n RectHelper.drawRoundRect(PathHelper.creator, x, y, width, height, radius)\n data.push(...PathHelper.convertToCanvasData(PathHelper.creator.path, true))\n },\n\n arcTo(data: IPathCommandData | null | void, fromX: number, fromY: number, x1: number, y1: number, toX: number, toY: number, radius: number, setPointBounds?: ITwoPointBoundsData, setEndPoint?: IPointData, setStartPoint?: IPointData): void {\n const BAx = x1 - fromX\n const BAy = y1 - fromY\n const CBx = toX - x1\n const CBy = toY - y1\n\n let startRadian = atan2(BAy, BAx)\n let endRadian = atan2(CBy, CBx)\n\n const lenBA = hypot(BAx, BAy)\n const lenCB = hypot(CBx, CBy)\n\n let totalRadian = endRadian - startRadian\n if (totalRadian < 0) totalRadian += PI2\n\n if (lenBA < 1e-12 || lenCB < 1e-12 || totalRadian < 1e-12 || abs(totalRadian - PI) < 1e-12) {\n if (data) data.push(L, x1, y1)\n if (setPointBounds) {\n setPoint(setPointBounds, fromX, fromY)\n addPoint(setPointBounds, x1, y1)\n }\n if (setStartPoint) set(setStartPoint, fromX, fromY)\n if (setEndPoint) set(setEndPoint, x1, y1)\n return\n }\n\n const anticlockwise = BAx * CBy - CBx * BAy < 0\n const sign = anticlockwise ? -1 : 1\n const c = radius / cos(totalRadian / 2)\n\n const centerX = x1 + c * cos(startRadian + totalRadian / 2 + PI_2 * sign)\n const centerY = y1 + c * sin(startRadian + totalRadian / 2 + PI_2 * sign)\n startRadian -= PI_2 * sign\n endRadian -= PI_2 * sign\n\n return ellipse(data, centerX, centerY, radius, radius, 0, startRadian / OneRadian, endRadian / OneRadian, anticlockwise, setPointBounds, setEndPoint, setStartPoint)\n },\n\n arc(data: IPathCommandData | null | void, x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean, setPointBounds?: ITwoPointBoundsData, setEndPoint?: IPointData, setStartPoint?: IPointData): void {\n return ellipse(data, x, y, radius, radius, 0, startAngle, endAngle, anticlockwise, setPointBounds, setEndPoint, setStartPoint)\n },\n\n ellipse(data: IPathCommandData | null | void, cx: number, cy: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise?: boolean, setPointBounds?: ITwoPointBoundsData, setEndPoint?: IPointData, setStartPoint?: IPointData): void {\n const rotationRadian = rotation * OneRadian\n const rotationSin = sin(rotationRadian)\n const rotationCos = cos(rotationRadian)\n\n let startRadian = startAngle * OneRadian\n let endRadian = endAngle * OneRadian\n\n if (startRadian > PI) startRadian -= PI2\n if (endRadian < 0) endRadian += PI2\n\n let totalRadian = endRadian - startRadian\n if (totalRadian < 0) totalRadian += PI2\n else if (totalRadian > PI2) totalRadian -= PI2\n\n if (anticlockwise) totalRadian -= PI2\n\n\n const parts = ceil(abs(totalRadian / PI_2))\n const partRadian = totalRadian / parts\n const partRadian4Sin = sin(partRadian / 4)\n const control = 8 / 3 * partRadian4Sin * partRadian4Sin / sin(partRadian / 2)\n\n endRadian = startRadian + partRadian\n\n let startCos = cos(startRadian)\n let startSin = sin(startRadian)\n let endCos: number, endSin: number\n\n let x: number, y: number, x1: number, y1: number, x2: number, y2: number\n\n let startX = x = rotationCos * radiusX * startCos - rotationSin * radiusY * startSin\n let startY = y = rotationSin * radiusX * startCos + rotationCos * radiusY * startSin\n\n let fromX = cx + x, fromY = cy + y\n\n if (data) data.push(data.length ? L : M, fromX, fromY)\n if (setPointBounds) setPoint(setPointBounds, fromX, fromY)\n if (setStartPoint) set(setStartPoint, fromX, fromY)\n\n for (let i = 0; i < parts; i++) {\n\n endCos = cos(endRadian)\n endSin = sin(endRadian)\n\n x = rotationCos * radiusX * endCos - rotationSin * radiusY * endSin\n y = rotationSin * radiusX * endCos + rotationCos * radiusY * endSin\n x1 = cx + startX - control * (rotationCos * radiusX * startSin + rotationSin * radiusY * startCos)\n y1 = cy + startY - control * (rotationSin * radiusX * startSin - rotationCos * radiusY * startCos)\n x2 = cx + x + control * (rotationCos * radiusX * endSin + rotationSin * radiusY * endCos)\n y2 = cy + y + control * (rotationSin * radiusX * endSin - rotationCos * radiusY * endCos)\n\n if (data) data.push(C, x1, y1, x2, y2, cx + x, cy + y)\n if (setPointBounds) toTwoPointBounds(cx + startX, cy + startY, x1, y1, x2, y2, cx + x, cy + y, setPointBounds, true)\n\n startX = x\n startY = y\n startCos = endCos\n startSin = endSin\n startRadian = endRadian\n endRadian += partRadian\n }\n\n if (setEndPoint) set(setEndPoint, cx + x, cy + y)\n\n },\n\n quadraticCurveTo(data: IPathCommandData, fromX: number, fromY: number, x1: number, y1: number, toX: number, toY: number): void {\n data.push(C, (fromX + 2 * x1) / 3, (fromY + 2 * y1) / 3, (toX + 2 * x1) / 3, (toY + 2 * y1) / 3, toX, toY)\n },\n\n toTwoPointBoundsByQuadraticCurve(fromX: number, fromY: number, x1: number, y1: number, toX: number, toY: number, pointBounds: ITwoPointBoundsData, addMode?: boolean): void {\n toTwoPointBounds(fromX, fromY, (fromX + 2 * x1) / 3, (fromY + 2 * y1) / 3, (toX + 2 * x1) / 3, (toY + 2 * y1) / 3, toX, toY, pointBounds, addMode)\n },\n\n toTwoPointBounds(fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number, pointBounds: ITwoPointBoundsData, addMode?: boolean): void {\n\n const tList = []\n let a, b, c, t, t1, t2, v, sqrtV\n let f = fromX, z1 = x1, z2 = x2, o = toX\n\n for (let i = 0; i < 2; ++i) {\n\n if (i == 1) {\n f = fromY, z1 = y1, z2 = y2, o = toY\n }\n\n a = -3 * f + 9 * z1 - 9 * z2 + 3 * o\n b = 6 * f - 12 * z1 + 6 * z2\n c = 3 * z1 - 3 * f\n\n if (Math.abs(a) < 1e-12) {\n if (Math.abs(b) < 1e-12) continue\n t = -c / b\n if (0 < t && t < 1) tList.push(t)\n continue\n }\n\n v = b * b - 4 * c * a\n sqrtV = Math.sqrt(v)\n if (v < 0) continue\n\n t1 = (-b + sqrtV) / (2 * a)\n if (0 < t1 && t1 < 1) tList.push(t1)\n t2 = (-b - sqrtV) / (2 * a)\n if (0 < t2 && t2 < 1) tList.push(t2)\n }\n\n addMode ? addPoint(pointBounds, fromX, fromY) : setPoint(pointBounds, fromX, fromY)\n addPoint(pointBounds, toX, toY)\n\n for (let i = 0, len = tList.length; i < len; i++) {\n getPointAndSet(tList[i], fromX, fromY, x1, y1, x2, y2, toX, toY, tempPoint)\n addPoint(pointBounds, tempPoint.x, tempPoint.y)\n }\n\n },\n\n getPointAndSet(t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number, setPoint: IPointData): void {\n const o = 1 - t, a = o * o * o, b = 3 * o * o * t, c = 3 * o * t * t, d = t * t * t\n setPoint.x = a * fromX + b * x1 + c * x2 + d * toX\n setPoint.y = a * fromY + b * y1 + c * y2 + d * toY\n },\n\n getPoint(t: number, fromX: number, fromY: number, x1: number, y1: number, x2: number, y2: number, toX: number, toY: number): IPointData {\n const point = {} as IPointData\n getPointAndSet(t, fromX, fromY, x1, y1, x2, y2, toX, toY, point)\n return point\n },\n\n getDerivative(t: number, fromV: number, v1: number, v2: number, toV: number): number { // 导数\n const o = 1 - t\n return 3 * o * o * (v1 - fromV) + 6 * o * t * (v2 - v1) + 3 * t * t * (toV - v2)\n },\n\n}\n\nconst { getPointAndSet, toTwoPointBounds, ellipse } = BezierHelper","import { IPathCommandData } from '@leafer/interface'\nimport { OneRadian, PI2 } from '@leafer/math'\nimport { Platform } from '@leafer/platform'\n\nimport { PathCommandMap } from './PathCommandMap'\nimport { BezierHelper } from './BezierHelper'\n\n\nconst { sin, cos, sqrt, atan2 } = Math\nconst { ellipse } = BezierHelper\n\nexport const EllipseHelper = {\n\n // svg \n ellipticalArc(data: IPathCommandData, fromX: number, fromY: number, radiusX: number, radiusY: number, rotation: number, largeFlag: number, sweepFlag: number, toX: number, toY: number, curveMode?: boolean): void {\n\n const halfX = (toX - fromX) / 2\n const halfY = (toY - fromY) / 2\n\n const rotationRadian = rotation * OneRadian\n const rotationSin = sin(rotationRadian)\n const rotationCos = cos(rotationRadian)\n\n const px = -rotationCos * halfX - rotationSin * halfY\n const py = -rotationCos * halfY + rotationSin * halfX\n const rxSquare = radiusX * radiusX\n const rySquare = radiusY * radiusY\n const pySquare = py * py\n const pxSquare = px * px\n\n const a = rxSquare * rySquare - rxSquare * pySquare - rySquare * pxSquare\n let s = 0\n\n if (a < 0) {\n const t = sqrt(1 - a / (rxSquare * rySquare))\n radiusX *= t\n radiusY *= t\n } else {\n s = (largeFlag === sweepFlag ? -1 : 1) * sqrt(a / (rxSquare * pySquare + rySquare * pxSquare))\n }\n\n const cx = s * radiusX * py / radiusY\n const cy = -s * radiusY * px / radiusX\n\n const startRadian = atan2((py - cy) / radiusY, (px - cx) / radiusX)\n const endRadian = atan2((-py - cy) / radiusY, (-px - cx) / radiusX)\n\n let totalRadian = endRadian - startRadian\n\n if (sweepFlag === 0 && totalRadian > 0) {\n totalRadian -= PI2\n } else if (sweepFlag === 1 && totalRadian < 0) {\n totalRadian += PI2\n }\n\n const centerX = fromX + halfX + rotationCos * cx - rotationSin * cy\n const centerY = fromY + halfY + rotationSin * cx + rotationCos * cy\n\n const anticlockwise = totalRadian < 0 ? 1 : 0\n\n if (curveMode || Platform.ellipseToCurve) {\n ellipse(data, centerX, centerY, radiusX, radiusY, rotation, startRadian / OneRadian, endRadian / OneRadian, anticlockwise as unknown as boolean)\n } else {\n if (radiusX === radiusY && !rotation) {\n data.push(PathCommandMap.O, centerX, centerY, radiusX, startRadian / OneRadian, endRadian / OneRadian, anticlockwise)\n } else {\n data.push(PathCommandMap.G, centerX, centerY, radiusX, radiusY, rotation, startRadian / OneRadian, endRadian / OneRadian, anticlockwise)\n }\n }\n }\n\n}\n","import { IPathCommandData, IPathCommandObject, IPointData } from '@leafer/interface'\nimport { MathHelper, StringNumberMap } from '@leafer/math'\nimport { Debug } from '@leafer/debug'\n\nimport { PathCommandMap as Command, NeedConvertToCanvasCommandMap, NeedConvertToCurveCommandMap, PathCommandLengthMap, PathNumberCommandMap, PathNumberCommandLengthMap } from './PathCommandMap'\nimport { BezierHelper } from './BezierHelper'\nimport { EllipseHelper } from './EllipseHelper'\n\n\ninterface ICurrentCommand {\n name?: number\n length?: number\n index?: number\n dot?: number\n}\n\n\nconst { M, m, L, l, H, h, V, v, C, c, S, s, Q, q, T, t, A, a, Z, z, N, D, X, G, F, O, P, U } = Command\nconst { rect, roundRect, arcTo, arc, ellipse, quadraticCurveTo } = BezierHelper\nconst { ellipticalArc } = EllipseHelper\nconst debug = Debug.get('PathConvert')\n\nconst setEndPoint = {} as IPointData\n\nexport const PathConvert = {\n\n current: { dot: 0 } as ICurrentCommand,\n\n stringify(data: IPathCommandData, floatLength?: number): string {\n let i = 0, len = data.length, count: number, str: string = '', command: number, lastCommand: number\n while (i < len) {\n command = data[i]\n count = PathNumberCommandLengthMap[command]\n if (command === lastCommand) {\n str += ' ' // 重复的命令可以省略\n } else {\n str += PathNumberCommandMap[command]\n }\n\n for (let j = 1; j < count; j++) {\n str += MathHelper.float(data[i + j], floatLength);\n (j === count - 1) || (str += ' ')\n }\n\n lastCommand = command\n i += count\n }\n return str\n },\n\n parse(pathString: string, curveMode?: boolean): IPathCommandData {\n\n let needConvert: boolean, char: string, lastChar: string, num = ''\n const data: IPathCommandData = []\n const convertCommand = curveMode ? NeedConvertToCurveCommandMap : NeedConvertToCanvasCommandMap\n\n for (let i = 0, len = pathString.length; i < len; i++) {\n\n char = pathString[i]\n\n if (StringNumberMap[char]) {\n\n if (char === '.') {\n if (current.dot) { pushData(data, num); num = '' } // .375.375\n current.dot++\n }\n\n if (num === '0' && char !== '.') { pushData(data, num); num = '' } // 00 01\n\n num += char\n\n } else if (Command[char]) {\n\n if (num) { pushData(data, num); num = '' }\n\n current.name = Command[char]\n current.length = PathCommandLengthMap[char]\n current.index = 0\n pushData(data, current.name)\n\n if (!needConvert && convertCommand[char]) needConvert = true\n\n } else {\n\n if (char === '-' || char === '+') {\n\n if (lastChar === 'e' || lastChar === 'E') { // L45e-12 21e+22\n num += char\n } else {\n if (num) pushData(data, num) // L-34-35 L+12+28\n num = char\n }\n\n } else {\n if (num) { pushData(data, num); num = '' }\n }\n\n }\n\n lastChar = char\n\n }\n\n if (num) pushData(data, num)\n\n return needConvert ? PathConvert.toCanvasData(data, curveMode) : data\n },\n\n toCanvasData(old: IPathCommandData, curveMode?: boolean): IPathCommandData {\n\n let x = 0, y = 0, x1 = 0, y1 = 0, i = 0, len = old.length, controlX: number, controlY: number, command: number, lastCommand: number, smooth: boolean\n const data: IPathCommandData = []\n\n while (i < len) {\n\n command = old[i]\n\n switch (command) {\n //moveto(x, y)\n case m:\n old[i + 1] += x\n old[i + 2] += y\n case M:\n x = old[i + 1]\n y = old[i + 2]\n data.push(M, x, y)\n i += 3\n break\n\n //horizontal lineto(x)\n case h:\n old[i + 1] += x\n case H:\n x = old[i + 1]\n data.push(L, x, y)\n i += 2\n break\n\n //vertical lineto(y)\n case v:\n old[i + 1] += y\n case V:\n y = old[i + 1]\n data.push(L, x, y)\n i += 2\n break\n\n //lineto(x,y)\n case l:\n old[i + 1] += x\n old[i + 2] += y\n case L:\n x = old[i + 1]\n y = old[i + 2]\n data.push(L, x, y)\n i += 3\n break\n\n //smooth bezierCurveTo(x2, y2, x, y)\n case s: //smooth\n old[i + 1] += x\n old[i + 2] += y\n old[i + 3] += x\n old[i + 4] += y\n command = S\n case S:\n smooth = (lastCommand === C) || (lastCommand === S)\n x1 = smooth ? (x * 2 - controlX) : old[i + 1]\n y1 = smooth ? (y * 2 - controlY) : old[i + 2]\n controlX = old[i + 1]\n controlY = old[i + 2]\n x = old[i + 3]\n y = old[i + 4]\n data.push(C, x1, y1, controlX, controlY, x, y)\n i += 5\n break\n\n //bezierCurveTo(x1, y1, x2, y2, x, y)\n case c:\n old[i + 1] += x\n old[i + 2] += y\n old[i + 3] += x\n old[i + 4] += y\n old[i + 5] += x\n old[i + 6] += y\n command = C\n case C:\n controlX = old[i + 3]\n controlY = old[i + 4]\n x = old[i + 5]\n y = old[i + 6]\n data.push(C, old[i + 1], old[i + 2], controlX, controlY, x, y)\n i += 7\n break\n\n //smooth quadraticCurveTo(x, y)\n case t:\n old[i + 1] += x\n old[i + 2] += y\n command = T\n case T: //smooth\n smooth = (lastCommand === Q) || (lastCommand === T)\n controlX = smooth ? (x * 2 - controlX) : old[i + 1]\n controlY = smooth ? (y * 2 - controlY) : old[i + 2]\n curveMode ? quadraticCurveTo(data, x, y, controlX, controlY, old[i + 1], old[i + 2]) : data.push(Q, controlX, controlY, old[i + 1], old[i + 2])\n x = old[i + 1]\n y = old[i + 2]\n i += 3\n break\n\n //quadraticCurveTo(x1, y1, x, y)\n case q:\n old[i + 1] += x\n old[i + 2] += y\n old[i + 3] += x\n old[i + 4] += y\n command = Q\n case Q:\n controlX = old[i + 1]\n controlY = old[i + 2]\n curveMode ? quadraticCurveTo(data, x, y, controlX, controlY, old[i + 3], old[i + 4]) : data.push(Q, controlX, controlY, old[i + 3], old[i + 4])\n x = old[i + 3]\n y = old[i + 4]\n i += 5\n break\n\n //ellipticalArc(rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y)\n case a:\n old[i + 6] += x\n old[i + 7] += y\n case A:\n ellipticalArc(data, x, y, old[i + 1], old[i + 2], old[i + 3], old[i + 4], old[i + 5], old[i + 6], old[i + 7], curveMode) // convert to canvas ellipse or curve\n x = old[i + 6]\n y = old[i + 7]\n i += 8\n break\n case z:\n case Z:\n data.push(Z)\n i++\n break\n\n\n // canvas command\n\n case N: // rect(x, y, width, height)\n x = old[i + 1]\n y = old[i + 2]\n curveMode ? rect(data, x, y, old[i + 3], old[i + 4]) : copyData(data, old, i, 5)\n i += 5\n break\n case D: // roundRect(x, y, width, height, radius1, radius2, radius3, radius4)\n x = old[i + 1]\n y = old[i + 2]\n curveMode ? roundRect(data, x, y, old[i + 3], old[i + 4], [old[i + 5], old[i + 6], old[i + 7], old[i + 8]]) : copyData(data, old, i, 9)\n i += 9\n break\n case X: // simple roundRect(x, y, width, height, radius)\n x = old[i + 1]\n y = old[i + 2]\n curveMode ? roundRect(data, x, y, old[i + 3], old[i + 4], old[i + 5]) : copyData(data, old, i, 6)\n i += 6\n break\n case G: // ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)\n ellipse(curveMode ? data : copyData(data, old, i, 9), old[i + 1], old[i + 2], old[i + 3], old[i + 4], old[i + 5], old[i + 6], old[i + 7], old[i + 8] as unknown as boolean, null, setEndPoint)\n x = setEndPoint.x\n y = setEndPoint.y\n i += 9\n break\n case F: // simple ellipse(x, y, radiusX, radiusY)\n curveMode ? ellipse(data, old[i + 1], old[i + 2], old[i + 3], old[i + 4], 0, 0, 360, false) : copyData(data, old, i, 5)\n x = old[i + 1] + old[i + 3]\n y = old[i + 2]\n i += 5\n break\n case O: // arc(x, y, radius, startAngle, endAngle, anticlockwise)\n arc(curveMode ? data : copyData(data, old, i, 7), old[i + 1], old[i + 2], old[i + 3], old[i + 4], old[i + 5], old[i + 6] as unknown as boolean, null, setEndPoint)\n x = setEndPoint.x\n y = setEndPoint.y\n i += 7\n break\n case P: // simple arc(x, y, radius)\n curveMode ? arc(data, old[i + 1], old[i + 2], old[i + 3], 0, 360, false) : copyData(data, old, i, 4)\n x = old[i + 1] + old[i + 3]\n y = old[i + 2]\n i += 4\n break\n case U: // arcTo(x1, y1, x2, y2, radius)\n arcTo(curveMode ? data : copyData(data, old, i, 6), x, y, old[i + 1], old[i + 2], old[i + 3], old[i + 4], old[i + 5], null, setEndPoint)\n x = setEndPoint.x\n y = setEndPoint.y\n i += 6\n break\n default:\n debug.error(`command: ${command} [index:${i}]`, old)\n return data\n }\n\n lastCommand = command\n }\n\n return data\n\n },\n\n objectToCanvasData(list: IPathCommandObject[]): IPathCommandData {\n const data: IPathCommandData = []\n list.forEach(item => {\n switch (item.name) {\n case 'M': data.push(M, item.x, item.y); break\n case 'L': data.push(L, item.x, item.y); break\n case 'C': data.push(C, item.x1, item.y1, item.x2, item.y2, item.x, item.y); break\n case 'Q': data.push(Q, item.x1, item.y1, item.x, item.y); break\n case 'Z': data.push(Z)\n }\n })\n return data\n },\n\n copyData(data: IPathCommandData, old: IPathCommandData, index: number, count: number): void {\n for (let i = index, end = index + count; i < end; i++) {\n data.push(old[i])\n }\n },\n\n pushData(data: IPathCommandData, strNum: string | number) {\n if (current.index === current.length) { // 单个命令,多个数据的情况\n current.index = 1\n data.push(current.name)\n }\n\n data.push(Number(strNum))\n current.index++\n current.dot = 0\n }\n\n}\n\nconst { current, pushData, copyData } = PathConvert","import { IPathCommandData, IPointData } from '@leafer/interface'\nimport { MathHelper, PointHelper } from '@leafer/math'\nimport { isNumber, isUndefined, isNull } from '@leafer/data'\n\nimport { PathCommandMap } from './PathCommandMap'\nimport { BezierHelper } from './BezierHelper'\n\n\nconst { M, L, C, Q, Z, N, D, X, G, F, O, P, U } = PathCommandMap\nconst { getMinDistanceFrom, getRadianFrom } = PointHelper\nconst { tan, min, abs } = Math\nconst startPoint = {} as IPointData\n\nexport const PathCommandDataHelper = {\n\n beginPath(data: IPathCommandData): void {\n data.length = 0\n },\n\n // svg and canvas\n\n moveTo(data: IPathCommandData, x: number, y: number): void {\n data.push(M, x, y)\n },\n\n lineTo(data: IPathCommandData, x: number, y: number): void {\n data.push(L, x, y)\n },\n\n bezierCurveTo(data: IPathCommandData, x1: number, y1: number, x2: number, y2: number, x: number, y: number): void {\n data.push(C, x1, y1, x2, y2, x, y)\n },\n\n quadraticCurveTo(data: IPathCommandData, x1: number, y1: number, x: number, y: number): void {\n data.push(Q, x1, y1, x, y)\n },\n\n closePath(data: IPathCommandData): void {\n data.push(Z)\n },\n\n // canvas\n\n rect(data: IPathCommandData, x: number, y: number, width: number, height: number): void {\n data.push(N, x, y, width, height)\n },\n\n roundRect(data: IPathCommandData, x: number, y: number, width: number, height: number, cornerRadius: number | number[]): void {\n if (isNumber(cornerRadius)) {\n data.push(X, x, y, width, height, cornerRadius)\n } else {\n const fourCorners = MathHelper.fourNumber(cornerRadius)\n if (fourCorners) {\n data.push(D, x, y, width, height, ...fourCorners)\n } else {\n data.push(N, x, y, width, height)\n }\n }\n },\n\n ellipse(data: IPathCommandData, x: number, y: number, radiusX: number, radiusY: number, rotation?: number, startAngle?: number, endAngle?: number, anticlockwise?: boolean): void {\n if (isNull(rotation)) {\n data.push(F, x, y, radiusX, radiusY)\n } else {\n if (isNull(startAngle)) startAngle = 0\n if (isNull(endAngle)) endAngle = 360\n data.push(G, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise ? 1 : 0)\n }\n },\n\n arc(data: IPathCommandData, x: number, y: number, radius: number, startAngle?: number, endAngle?: number, anticlockwise?: boolean): void {\n if (isNull(startAngle)) {\n data.push(P, x, y, radius)\n } else {\n if (isNull(endAngle)) endAngle = 360\n data.push(O, x, y, radius, startAngle, endAngle, anticlockwise ? 1 : 0)\n }\n },\n\n arcTo(data: IPathCommandData, x1: number, y1: number, x2: number, y2: number, radius: number, lastX?: number, lastY?: number): void {\n if (!isUndefined(lastX)) {\n const d = getMinDistanceFrom(lastX, lastY, x1, y1, x2, y2)\n radius = min(radius, min(d / 2, d / 2 * abs(tan(getRadianFrom(lastX, lastY, x1, y1, x2, y2) / 2))))\n }\n data.push(U, x1, y1, x2, y2, radius)\n },\n\n // new\n\n drawEllipse(data: IPathCommandData, x: number, y: number, radiusX: number, radiusY: number, rotation?: number, startAngle?: number, endAngle?: number, anticlockwise?: boolean): void {\n BezierHelper.ellipse(null, x, y, radiusX, radiusY, isNull(rotation) ? 0 : rotation, isNull(startAngle) ? 0 : startAngle, isNull(endAngle) ? 360 : endAngle, anticlockwise, null, null, startPoint)\n data.push(M, startPoint.x, startPoint.y)\n ellipse(data, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)\n },\n\n drawArc(data: IPathCommandData, x: number, y: number, radius: number, startAngle?: number, endAngle?: number, anticlockwise?: boolean): void {\n BezierHelper.arc(null, x, y, radius, isNull(startAngle) ? 0 : startAngle, isNull(endAngle) ? 360 : endAngle, anticlockwise, null, null, startPoint)\n data.push(M, startPoint.x, startPoint.y)\n arc(data, x, y, radius, startAngle, endAngle, anticlockwise)\n },\n\n drawPoints(data: IPathCommandData, points: number[] | IPointData[], curve?: boolean | number, close?: boolean): void {\n BezierHelper.points(data, points, curve, close)\n }\n\n}\n\nconst { ellipse, arc } = PathCommandDataHelper\n","import { IPathCommandData, IPathCreator, IPathString, IPointData } from '@leafer/interface'\nimport { isString } from '@leafer/data'\n\nimport { PathCommandDataHelper } from './PathCommandDataHelper'\nimport { PathHelper } from './PathHelper'\n\n\nconst { moveTo, lineTo, quadraticCurveTo, bezierCurveTo, closePath, beginPath, rect, roundRect, ellipse, arc, arcTo, drawEllipse, drawArc, drawPoints } = PathCommandDataHelper\n\nexport class PathCreator implements IPathCreator { // tip: rewrited Pen\n\n public set path(value: IPathCommandData) { this.__path = value }\n public get path() { return this.__path }\n\n public __path: IPathCommandData // 提供一个更安全的内部变量(比如覆盖给Pen时需要用到,避免与原有属性冲突)\n\n constructor(path?: IPathCommandData | IPathString) {\n this.set(path)\n }\n\n public set(path?: IPathCommandData | IPathString): PathCreator {\n this.__path = path ? (isString(path) ? PathHelper.parse(path) : path) : []\n return this\n }\n\n public beginPath(): PathCreator {\n beginPath(this.__path)\n this.paint()\n return this\n }\n\n // svg and canvas\n\n public moveTo(x: number, y: number): PathCreator {\n moveTo(this.__path, x, y)\n this.paint()\n return this\n }\n\n public lineTo(x: number, y: number): PathCreator {\n lineTo(this.__path, x, y)\n this.paint()\n return this\n }\n\n public bezierCurveTo(x1: number, y1: number, x2: number, y2: number, x: number, y: number): PathCreator {\n bezierCurveTo(this.__path, x1, y1, x2, y2, x, y)\n this.paint()\n return this\n }\n\n public quadraticCurveTo(x1: number, y1: number, x: number, y: number): PathCreator {\n quadraticCurveTo(this.__path, x1, y1, x, y)\n this.paint()\n return this\n }\n\n public closePath(): PathCreator {\n closePath(this.__path)\n this.paint()\n return this\n }\n\n // canvas\n\n public rect(x: number, y: number, width: number, height: number): PathCreator {\n rect(this.__path, x, y, width, height)\n this.paint()\n return this\n }\n\n public roundRect(x: number, y: number, width: number, height: number, cornerRadius: number | number[]): PathCreator {\n roundRect(this.__path, x, y, width, height, cornerRadius)\n this.paint()\n return this\n }\n\n public ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation?: number, startAngle?: number, endAngle?: number, anticlockwise?: boolean): PathCreator {\n ellipse(this.__path, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)\n this.paint()\n return this\n }\n\n public arc(x: number, y: number, radius: number, startAngle?: number, endAngle?: number, anticlockwise?: boolean): PathCreator {\n arc(this.__path, x, y, radius, startAngle, endAngle, anticlockwise)\n this.paint()\n return this\n }\n\n public arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): PathCreator {\n arcTo(this.__path, x1, y1, x2, y2, radius)\n this.paint()\n return this\n }\n\n // moveTo, then draw\n\n public drawEllipse(x: number, y: number, radiusX: number, radiusY: number, rotation?: number, startAngle?: number, endAngle?: number, anticlockwise?: boolean): PathCreator {\n drawEllipse(this.__path, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)\n this.paint()\n return this\n }\n\n public drawArc(x: number, y: number, radius: number, startAngle?: number, endAngle?: number, anticlockwise?: boolean): PathCreator {\n drawArc(this.__path, x, y, radius, startAngle, endAngle, anticlockwise)\n this.paint()\n return this\n }\n\n public drawPoints(points: number[] | IPointData[], curve?: boolean | number, close?: boolean): PathCreator {\n drawPoints(this.__path, points, curve, close)\n this.paint()\n return this\n }\n\n public clearPath(): PathCreator {\n return this.beginPath()\n }\n\n public paint(): void { }\n\n}\n","import { IPathDrawer, IPathCommandData } from '@leafer/interface'\nimport { OneRadian, PI2 } from '@leafer/math'\nimport { Debug } from '@leafer/debug'\n\nimport { PathCommandMap as Command } from './PathCommandMap'\n\n\nconst { M, L, C, Q, Z, N, D, X, G, F, O, P, U } = Command\nconst debug = Debug.get('PathDrawer')\n\nexport const PathDrawer = {\n\n drawPathByData(drawer: IPathDrawer, data: IPathCommandData): void {\n if (!data) return\n\n let command: number\n let i = 0, len = data.length\n\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n drawer.moveTo(data[i + 1], data[i + 2])\n i += 3\n break\n case L: //lineto(x, y)\n drawer.lineTo(data[i + 1], data[i + 2])\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x, y)\n drawer.bezierCurveTo(data[i + 1], data[i + 2], data[i + 3], data[i + 4], data[i + 5], data[i + 6])\n i += 7\n break\n case Q: //quadraticCurveTo(x1, y1, x, y)\n drawer.quadraticCurveTo(data[i + 1], data[i + 2], data[i + 3], data[i + 4])\n i += 5\n break\n case Z: //closepath()\n drawer.closePath()\n i += 1\n break\n\n // canvas command\n\n case N: // rect(x, y, width, height)\n drawer.rect(data[i + 1], data[i + 2], data[i + 3], data[i + 4])\n i += 5\n break\n case D: // roundRect(x, y, width, height, radius1, radius2, radius3, radius4)\n drawer.roundRect(data[i + 1], data[i + 2], data[i + 3], data[i + 4], [data[i + 5], data[i + 6], data[i + 7], data[i + 8]])\n i += 9\n break\n case X: // simple roundRect(x, y, width, height, radius)\n drawer.roundRect(data[i + 1], data[i + 2], data[i + 3], data[i + 4], data[i + 5])\n i += 6\n break\n case G: // ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)\n drawer.ellipse(data[i + 1], data[i + 2], data[i + 3], data[i + 4], data[i + 5] * OneRadian, data[i + 6] * OneRadian, data[i + 7] * OneRadian, data[i + 8] as unknown as boolean)\n i += 9\n break\n case F: // simple ellipse(x, y, radiusX, radiusY)\n drawer.ellipse(data[i + 1], data[i + 2], data[i + 3], data[i + 4], 0, 0, PI2, false)\n i += 5\n break\n case O: // arc(x, y, radius, startAngle, endAngle, anticlockwise)\n drawer.arc(data[i + 1], data[i + 2], data[i + 3], data[i + 4] * OneRadian, data[i + 5] * OneRadian, data[i + 6] as unknown as boolean)\n i += 7\n break\n case P: // simple arc(x, y, radius)\n drawer.arc(data[i + 1], data[i + 2], data[i + 3], 0, PI2, false)\n i += 4\n break\n case U: // arcTo(x1, y1, x2, y2, radius)\n drawer.arcTo(data[i + 1], data[i + 2], data[i + 3], data[i + 4], data[i + 5])\n i += 6\n break\n default:\n debug.error(`command: ${command} [index:${i}]`, data)\n return\n }\n }\n\n }\n\n}","import { ITwoPointBoundsData, IPathCommandData, IBoundsData, IPointData } from '@leafer/interface'\nimport { TwoPointBoundsHelper } from '@leafer/math'\nimport { Debug } from '@leafer/debug'\n\nimport { BezierHelper } from './BezierHelper'\nimport { PathCommandMap as Command } from './PathCommandMap'\n\n\nconst { M, L, C, Q, Z, N, D, X, G, F, O, P, U } = Command\nconst { toTwoPointBounds, toTwoPointBoundsByQuadraticCurve, arcTo, arc, ellipse } = BezierHelper\nconst { addPointBounds, copy, addPoint, setPoint, addBounds, toBounds } = TwoPointBoundsHelper\nconst debug = Debug.get('PathBounds')\n\nlet radius: number, radiusX: number, radiusY: number\nconst tempPointBounds = {} as ITwoPointBoundsData\nconst setPointBounds = {} as ITwoPointBoundsData\nconst setEndPoint = {} as IPointData\n\nexport const PathBounds = {\n\n toBounds(data: IPathCommandData, setBounds: IBoundsData): void {\n PathBounds.toTwoPointBounds(data, setPointBounds)\n toBounds(setPointBounds, setBounds)\n },\n\n toTwoPointBounds(data: IPathCommandData, setPointBounds: ITwoPointBoundsData): void {\n if (!data || !data.length) return setPoint(setPointBounds, 0, 0)\n\n let i = 0, x = 0, y = 0, x1: number, y1: number, toX: number, toY: number, command: number\n\n const len = data.length\n\n while (i < len) {\n command = data[i]\n\n if (i === 0) {\n if (command === Z || command === C || command === Q) {\n setPoint(setPointBounds, x, y)\n } else {\n setPoint(setPointBounds, data[i + 1], data[i + 2])\n }\n }\n\n switch (command) {\n case M: //moveto(x, y)\n case L: //lineto(x, y)\n x = data[i + 1]\n y = data[i + 2]\n addPoint(setPointBounds, x, y)\n i += 3\n break\n case C: //bezierCurveTo(x1, y1, x2, y2, x,y)\n toX = data[i + 5]\n toY = data[i + 6]\n toTwoPointBounds(x, y, data[i + 1], data[i + 2], data[i + 3], data[i + 4], toX, toY, tempPointBounds)\n addPointBounds(setPointBounds, tempPointBounds)\n x = toX\n y = toY\n i += 7\n break\n case Q: //quadraticCurveTo(x1, y1, x, y)\n x1 = data[i + 1]\n y1 = data[i + 2]\n toX = data[i + 3]\n toY = data[i + 4]\n toTwoPointBoundsByQuadraticCurve(x, y, x1, y1, toX, toY, tempPointBounds)\n addPointBounds(setPointBounds, tempPointBounds)\n x = toX\n y = toY\n i += 5\n break\n case Z: //closepath()\n i += 1\n break\n\n // canvas command\n\n case N: // rect(x, y, width, height)\n x = data[i + 1]\n y = data[i + 2]\n addBounds(setPointBounds, x, y, data[i + 3], data[i + 4])\n i += 5\n break\n case D: // roundRect(x, y, width, height, radius1, radius2, radius3, radius4)\n case X: // simple roundRect(x, y, width, height, radius)\n x = data[i + 1]\n y = data[i + 2]\n addBounds(setPointBounds, x, y, data[i + 3], data[i + 4])\n i += (command === D ? 9 : 6)\n break\n case G: // ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)\n ellipse(null, data[i + 1], data[i + 2], data[i + 3], data[i + 4], data[i + 5], data[i + 6], data[i + 7], data[i + 8] as unknown as boolean, tempPointBounds, setEndPoint)\n i === 0 ? copy(setPointBounds, tempPointBounds) : addPointBounds(setPointBounds, tempPointBounds)\n x = setEndPoint.x\n y = setEndPoint.y\n i += 9\n break\n case F: // simple ellipse(x, y, radiusX, radiusY)\n x = data[i + 1]\n y = data[i + 2]\n radiusX = data[i + 3]\n radiusY = data[i + 4]\n addBounds(setPointBounds, x - radiusX, y - radiusY, radiusX * 2, radiusY * 2)\n x += radiusX\n i += 5\n break\n case O: // arc(x, y, radius, startAngle, endAngle, anticlockwise)\n arc(null, data[i + 1], data[i + 2], data[i + 3], data[i + 4], data[i + 5], data[i + 6] as unknown as boolean, tempPointBounds, setEndPoint)\n i === 0 ? copy(setPointBounds, tempPointBounds) : addPointBounds(setPointBounds, tempPointBounds)\n x = setEndPoint.x\n y = setEndPoint.y\n i += 7\n break\n case P: // simple arc(x, y, radius)\n x = data[i + 1]\n y = data[i + 2]\n radius = data[i + 3]\n addBounds(setPointBounds, x - radius, y - radius, radius * 2, radius * 2)\n x += radius\n i += 4\n break\n case U: // arcTo(x1, y1, x2, y2, radius)\n arcTo(null, x, y, data[i + 1], data[i + 2], data[i + 3], data[i + 4], data[i + 5], tempPointBounds, setEndPoint)\n i === 0 ? copy(setPointBounds, tempPointBounds) : addPointBounds(setPointBounds, tempPointBounds)\n x = setEndPoint.x\n y = setEndPoint.y\n i += 6\n break\n default:\n debug.error(`command: ${command} [index:${i}]`, data)\n return\n }\n }\n\n }\n\n}","import { IPathCommandData } from '@leafer/interface'\nimport { PointHelper } from '@leafer/math'\n\nimport { PathCommandMap as Command, PathNumberCommandLengthMap } from './PathCommandMap'\nimport { PathCommandDataHelper } from './PathCommandDataHelper'\n\n\nconst { M, L, Z } = Command\nconst { getCenterX, getCenterY } = PointHelper\nconst { arcTo } = PathCommandDataHelper\n\nexport const PathCorner = {\n\n smooth(data: IPathCommandData, cornerRadius: number, _cornerSmoothing?: number): IPathCommandData {\n\n let command: number, lastCommand: number, commandLen\n let i = 0, x = 0, y = 0, startX = 0, startY = 0, secondX = 0, secondY = 0, lastX = 0, lastY = 0\n\n const len = data.length\n const smooth: IPathCommandData = []\n\n while (i < len) {\n command = data[i]\n switch (command) {\n case M: //moveto(x, y)\n startX = lastX = data[i + 1]\n startY = lastY = data[i + 2]\n i += 3\n if (data[i] === L) { // next lineTo\n secondX = data[i + 1]\n secondY = data[i + 2]\n smooth.push(M, getCenterX(startX, secondX), getCenterY(startY, secondY))\n } else {\n smooth.push(M, startX, startY)\n }\n break\n case L: //lineto(x, y)\n x = data[i + 1]\n y = data[i + 2]\n i += 3\n switch (data[i]) { // next command\n case L: // lineTo()\n arcTo(smooth, x, y, data[i + 1], data[i + 2], cornerRadius, lastX, lastY) // use arcTo(x1, y1, x2, y2, radius)\n break\n case Z: // closePath()\n arcTo(smooth, x, y, startX, startY, cornerRadius, lastX, lastY) // use arcTo(x1, y1, x2, y2, radius)\n break\n default:\n smooth.push(L, x, y)\n }\n lastX = x\n lastY = y\n break\n case Z: //closepath()\n if (lastCommand !== Z) { // fix: 重复的 Z 导致的问题\n arcTo(smooth, startX, startY, secondX, secondY, cornerRadius, lastX, lastY) // use arcTo(x1, y1, x2, y2, radius)\n smooth.push(Z)\n }\n i += 1\n break\n default:\n commandLen = PathNumberCommandLengthMap[command]\n for (let j = 0; j < commandLen; j++) smooth.push(data[i + j])\n i += commandLen\n }\n lastCommand = command\n }\n\n if (command !== Z) {\n smooth[1] = startX\n smooth[2] = startY\n }\n\n return smooth\n }\n\n}","export { PathHelper } from './PathHelper'\nexport { PathConvert } from './PathConvert'\nexport { PathCreator } from './PathCreator'\nexport { PathCommandDataHelper } from './PathCommandDataHelper'\nexport { PathDrawer } from './PathDrawer'\nexport { PathBounds } from './PathBounds'\nexport { PathCorner } from './PathCorner'\nexport { BezierHelper } from './BezierHelper'\nexport { EllipseHelper } from './EllipseHelper'\nexport { RectHelper } from './RectHelper'\nexport { PathCommandMap, NeedConvertToCanvasCommandMap, PathNumberCommandMap, PathNumberCommandLengthMap } from './PathCommandMap'\n\n// rewrite, prevent circular references\n\nimport { PathConvert } from './PathConvert'\nimport { PathCreator } from './PathCreator'\nimport { PathHelper } from './PathHelper'\n\nimport { IPathCommandData, IPathString } from '@leafer/interface'\n\n\nexport function path(path?: IPathCommandData | IPathString): PathCreator {\n return new PathCreator(path)\n}\n\nexport const pen = path()\n\nPathHelper.creator = path()\nPathHelper.parse = PathConvert.parse\nPathHelper.convertToCanvasData = PathConvert.toCanvasData","import { IPathDrawer } from '@leafer/interface'\nimport { RectHelper } from '@leafer/path'\n\n\nconst { drawRoundRect } = RectHelper\n\nexport function roundRect(drawer: IPathDrawer): void {\n\n if (drawer && !drawer.roundRect) {\n\n drawer.roundRect = function (x: number, y: number, width: number, height: number, cornerRadius: number | number[]): void {\n\n drawRoundRect(this as IPathDrawer, x, y, width, height, cornerRadius)\n }\n }\n\n}\n\n","import { IExportFileType, IStringMap, IExportOptions } from '@leafer/interface'\n\nexport const FileHelper = {\n\n alphaPixelTypes: ['png', 'webp', 'svg'] as IExportFileType[],\n\n upperCaseTypeMap: {} as IStringMap,\n\n mineType(type: string): string {\n if (!type || type.startsWith('image')) return type\n if (type === 'jpg') type = 'jpeg'\n return 'image/' + type\n },\n\n fileType(filename: string): string {\n const l = filename.split('.')\n return l[l.length - 1]\n },\n\n isOpaqueImage(filename: string): boolean {\n const type = F.fileType(filename)\n return ['jpg', 'jpeg'].some(item => item === type)\n },\n\n getExportOptions(options?: IExportOptions | number | boolean): IExportOptions {\n switch (typeof options) {\n case 'object': return options\n case 'number': return { quality: options }\n case 'boolean': return { blob: options }\n default: return {}\n }\n }\n\n}\n\nconst F = FileHelper\n\nF.alphaPixelTypes.forEach(type => F.upperCaseTypeMap[type] = type.toUpperCase())","import { IFunction, ITaskItem } from '@leafer/interface'\nimport { IncrementId } from '@leafer/math'\nimport { Debug } from '@leafer/debug'\n\nimport { TaskProcessor } from './TaskProcessor'\n\n\nconst debug = Debug.get('TaskProcessor')\nexport class TaskItem implements ITaskItem {\n\n readonly id: number\n\n public parent: TaskProcessor\n\n public parallel = true\n public time = 1 // 预估任务需要运行的时间, 毫秒为单位\n\n public isComplete: boolean\n public isCancel: boolean\n\n private task: IFunction\n\n constructor(task?: IFunction) {\n this.id = IncrementId.create(IncrementId.TASK)\n this.task = task\n }\n\n async run(): Promise<void> {\n try {\n if (this.task && !this.isComplete && this.parent.running) await this.task()\n } catch (error) {\n debug.error(error)\n }\n }\n\n public complete(): void {\n this.isComplete = true\n this.parent = null\n this.task = null\n }\n\n public cancel(): void {\n this.isCancel = true\n this.complete()\n }\n\n}","import { IFunction, ITaskProcessor, ITaskProcessorConfig, ITaskOptions, ITaskItem } from '@leafer/interface'\nimport { DataHelper, isNumber, isUndefined } from '@leafer/data'\n\nimport { TaskItem } from './TaskItem'\n\n\nexport class TaskProcessor implements ITaskProcessor {\n\n public config: ITaskProcessorConfig = { parallel: 6 }\n\n protected list: ITaskItem[] = []\n\n protected parallelList: ITaskItem[]\n protected parallelSuccessNumber: number\n\n public running = false\n public isComplete = true\n\n protected timer: any\n\n public get total(): number { return this.list.length + this.delayNumber }\n\n public index = 0\n\n public delayNumber = 0 // 延迟执行任务\n\n public get finishedIndex(): number {\n return this.isComplete ? 0 : this.index + this.parallelSuccessNumber\n }\n\n public get remain(): number {\n return this.isComplete ? this.total : this.total - this.finishedIndex\n }\n\n public get percent(): number {\n const { total } = this\n let totalTime = 0, runTime = 0\n\n for (let i = 0; i < total; i++) {\n if (i <= this.finishedIndex) {\n runTime += this.list[i].time\n if (i === this.finishedIndex) totalTime = runTime\n } else {\n totalTime += this.list[i].time\n }\n }\n\n return this.isComplete ? 1 : (runTime / totalTime)\n }\n\n\n constructor(config?: ITaskProcessorConfig) {\n if (config) DataHelper.assign(this.config, config)\n this.empty()\n }\n\n // list\n\n public add(taskCallback: IFunction, options?: ITaskOptions | number): ITaskItem {\n let start: boolean, parallel: boolean, time: number, delay: number\n\n const task = new TaskItem(taskCallback)\n task.parent = this\n\n if (isNumber(options)) {\n delay = options\n } else if (options) {\n parallel = options.parallel\n start = options.start\n time = options.time\n delay = options.delay\n }\n\n if (time) task.time = time\n if (parallel === false) task.parallel = false\n\n if (isUndefined(delay)) {\n this.push(task, start)\n } else {\n this.delayNumber++\n setTimeout(() => {\n if (this.delayNumber) {\n this.delayNumber--\n this.push(task, start)\n }\n }, delay)\n }\n\n this.isComplete = false\n\n return task\n }\n\n protected push(task: ITaskItem, start?: boolean): void {\n this.list.push(task)\n if (start !== false && !this.timer) {\n this.timer = setTimeout(() => this.start())\n }\n }\n\n protected empty(): void {\n this.index = 0\n this.parallelSuccessNumber = 0\n this.list = []\n this.parallelList = []\n this.delayNumber = 0\n }\n\n // control\n\n public start(): void {\n if (!this.running) {\n this.running = true\n this.isComplete = false\n this.run()\n }\n }\n\n public pause(): void {\n clearTimeout(this.timer)\n this.timer = null\n this.running = false\n }\n\n public resume(): void {\n this.start()\n }\n\n public skip(): void {\n this.index++\n this.resume()\n }\n\n public stop(): void {\n this.isComplete = true\n this.list.forEach(task => { if (!task.isComplete) task.cancel() })\n this.pause()\n this.empty()\n }\n\n // run \n\n protected run(): void {\n if (!this.running) return\n\n this.setParallelList()\n\n if (this.parallelList.length > 1) {\n\n this.runParallelTasks()\n\n } else {\n\n this.remain ? this.runTask() : this.onComplete()\n\n }\n }\n\n protected runTask(): void {\n const task = this.list[this.index]\n if (!task) {\n this.nextTask() // 存在延时任务\n return\n }\n task.run().then(() => {\n\n this.onTask(task)\n\n this.index++\n this.nextTask()\n\n }).catch(error => {\n this.onError(error)\n })\n }\n\n protected runParallelTasks(): void {\n this.parallelList.forEach(task => this.runParallelTask(task))\n }\n\n protected runParallelTask(task: ITaskItem): void {\n task.run().then(() => {\n\n this.onTask(task)\n this.fillParallelTask()\n\n }).catch(error => {\n this.onParallelError(error)\n })\n }\n\n private nextTask(): void {\n if (this.total === this.finishedIndex) {\n this.onComplete()\n } else {\n this.timer = setTimeout(() => this.run())\n }\n }\n\n protected setParallelList(): void {\n let task: ITaskItem\n\n this.parallelList = []\n this.parallelSuccessNumber = 0\n let end = this.index + this.config.parallel\n\n if (end > this.list.length) end = this.list.length\n\n for (let i = this.index; i < end; i++) {\n task = this.list[i]\n if (task.parallel) {\n this.parallelList.push(task)\n } else {\n break\n }\n }\n }\n\n\n protected fillParallelTask(): void {\n let task: ITaskItem\n const parallelList = this.parallelList\n\n // 完成一个任务\n this.parallelSuccessNumber++\n parallelList.pop()\n\n // 找到下一个可以并行的任务\n const parallelWaitNumber = parallelList.length\n const nextIndex = this.finishedIndex + parallelWaitNumber\n\n if (parallelList.length) {\n\n if (!this.running) return\n\n if (nextIndex < this.total) {\n\n task = this.list[nextIndex]\n\n if (task && task.parallel) {\n parallelList.push(task)\n this.runParallelTask(task)\n }\n\n }\n\n } else {\n\n this.index += this.parallelSuccessNumber\n this.parallelSuccessNumber = 0\n this.nextTask()\n\n }\n }\n\n // event\n\n protected onComplete(): void {\n this.stop()\n if (this.config.onComplete) this.config.onComplete()\n }\n\n protected onTask(task: ITaskItem): void {\n task.complete()\n if (this.config.onTask) this.config.onTask()\n }\n\n protected onParallelError(error: unknown): void {\n // 并行变串行, 以便下次重试\n this.parallelList.forEach(task => {\n task.parallel = false\n })\n this.parallelList.length = 0\n this.parallelSuccessNumber = 0\n\n this.onError(error)\n }\n\n protected onError(error: unknown): void {\n this.pause()\n if (this.config.onError) this.config.onError(error)\n }\n\n public destroy(): void {\n this.stop()\n }\n}","import { ILeaferImage, IResource, IObject, ILeaferCanvas, IExportFileType, ILeaferImageConfig } from '@leafer/interface'\n\nimport { Creator } from '@leafer/platform'\nimport { TaskProcessor } from '@leafer/task'\nimport { isString } from '@leafer/data'\nimport { Debug } from '@leafer/debug'\n\n\nconst debug = Debug.get('Resource')\n\nexport const Resource: IResource = {\n\n tasker: new TaskProcessor(),\n\n map: {},\n\n get isComplete() { return R.tasker.isComplete },\n\n // 通用\n\n set(key: string, value: any): void {\n if (R.map[key]) debug.repeat(key)\n R.map[key] = value\n },\n\n get(key: string): any {\n return R.map[key]\n },\n\n remove(key: string) {\n const r = R.map[key]\n if (r) {\n if (r.destroy) r.destroy()\n delete R.map[key]\n }\n },\n\n // image\n\n loadImage(key: string, format?: IExportFileType): Promise<ILeaferImage> {\n return new Promise((resolve, reject) => {\n const image = this.setImage(key, key, format)\n image.load(() => resolve(image), (e: any) => reject(e))\n })\n },\n\n setImage(key: string, value: string | IObject | ILeaferImage | ILeaferCanvas, format?: IExportFileType): ILeaferImage {\n let config: ILeaferImageConfig\n if (isString(value)) config = { url: value }\n else if (!value.url) config = { url: key, view: value }\n if (config) format && (config.format = format), value = Creator.image(config)\n R.set(key, value)\n return value as ILeaferImage\n },\n\n\n destroy(): void {\n R.map = {}\n }\n\n}\n\nconst R = Resource","import { IImageManager, ILeaferImageConfig, ILeaferImage, IExportFileType } from '@leafer/interface'\nimport { Creator } from '@leafer/platform'\nimport { FileHelper, Resource } from '@leafer/file'\nimport { TaskProcessor } from '@leafer/task'\n\n\nexport const ImageManager: IImageManager = {\n\n maxRecycled: 10,\n\n recycledList: [],\n\n patternTasker: new TaskProcessor(),\n\n get(config: ILeaferImageConfig): ILeaferImage {\n let image: ILeaferImage = Resource.get(config.url)\n if (!image) Resource.set(config.url, image = Creator.image(config))\n image.use++\n return image\n },\n\n recycle(image: ILeaferImage): void {\n image.use--\n setTimeout(() => { if (!image.use) I.recycledList.push(image) })\n },\n\n clearRecycled(): void {\n const list = I.recycledList\n if (list.length > I.maxRecycled) {\n list.forEach(image => (!image.use && image.url) && Resource.remove(image.url))\n list.length = 0\n }\n },\n\n hasAlphaPixel(config: ILeaferImageConfig): boolean {\n return FileHelper.alphaPixelTypes.some(item => I.isFormat(item, config))\n },\n\n isFormat(format: IExportFileType, config: ILeaferImageConfig): boolean {\n if (config.format) return config.format === format\n const { url } = config\n if (url.startsWith('data:')) {\n if (url.startsWith('data:' + FileHelper.mineType(format))) return true\n } else {\n if (url.includes('.' + format) || url.includes('.' + FileHelper.upperCaseTypeMap[format])) return true\n else if (format === 'png' && !url.includes('.')) return true // blob: 等无后缀名协议的图片无法分析类型,直接当透明图片处理\n }\n return false\n },\n\n destroy(): void {\n I.recycledList = []\n }\n\n}\n\nconst I = ImageManager","import { ILeaferImage, ILeaferImageConfig, IFunction, IObject, InnerId, IMatrixData, ICanvasPattern, ILeaferImageCacheCanvas, ILeaferImagePatternPaint, IProgressData } from '@leafer/interface'\nimport { Platform } from '@leafer/platform'\nimport { Resource } from '@leafer/file'\nimport { IncrementId } from '@leafer/math'\nimport { DataHelper } from '@leafer/data'\n\nimport { ImageManager } from './ImageManager'\n\n\nconst { IMAGE, create } = IncrementId\nconst { floor, max } = Math\n\nexport class LeaferImage implements ILeaferImage {\n\n public readonly innerId: InnerId\n public get url() { return this.config.url }\n\n public view: any\n\n public width: number\n public height: number\n\n public isSVG: boolean\n public hasAlphaPixel: boolean // check png / svg / webp\n\n public get completed() { return this.ready || !!this.error }\n\n public ready: boolean\n public error: IObject\n public loading: boolean\n\n public progress: IProgressData\n\n public use = 0\n\n public config: ILeaferImageConfig\n\n protected waitComplete: IFunction[] = []\n\n protected cache: ILeaferImageCacheCanvas\n\n constructor(config: ILeaferImageConfig) {\n this.innerId = create(IMAGE)\n this.config = config || (config = { url: '' })\n if (config.view) {\n const { view } = config\n this.setView(view.config ? view.view : view)\n }\n\n ImageManager.isFormat('svg', config) && (this.isSVG = true)\n ImageManager.hasAlphaPixel(config) && (this.hasAlphaPixel = true)\n }\n\n public load(onSuccess?: IFunction, onError?: IFunction): number {\n if (!this.loading) {\n this.loading = true\n let { loadImage, loadImageWithProgress } = Platform.origin, onProgress = this.config.showProgress && loadImageWithProgress && this.onProgress.bind(this)\n if (onProgress) loadImage = loadImageWithProgress\n Resource.tasker.add(async () => await loadImage(this.url, onProgress).then(img => this.setView(img)).catch((e) => {\n this.error = e\n this.onComplete(false)\n }))\n }\n this.waitComplete.push(onSuccess, onError)\n return this.waitComplete.length - 2\n }\n\n public unload(index: number, stopEvent?: boolean): void {\n const l = this.waitComplete\n if (stopEvent) {\n const error = l[index + 1]\n if (error) error({ type: 'stop' })\n }\n l[index] = l[index + 1] = undefined\n }\n\n protected setView(img: any): void {\n this.ready = true\n this.width = img.naturalWidth || img.width\n this.height = img.naturalHeight || img.height\n this.view = img\n this.onComplete(true)\n }\n\n protected onProgress(progress: IProgressData): void {\n this.progress = progress\n }\n\n protected onComplete(isSuccess: boolean): void {\n let odd: number\n this.waitComplete.forEach((item, index) => {\n odd = index % 2\n if (item) {\n if (isSuccess) {\n if (!odd) item(this)\n } else {\n if (odd) item(this.error)\n }\n }\n })\n this.waitComplete.length = 0\n this.loading = false\n }\n\n public getFull(_filters?: IObject): any {\n return this.view\n }\n\n public getCanvas(width: number, height: number, opacity?: number, _filters?: IObject, xGap?: number, yGap?: number, smooth?: boolean): any {\n width || (width = this.width)\n height || (height = this.height)\n\n if (this.cache) { // when use > 1, check cache\n let { params, data } = this.cache\n for (let i in params) { if (params[i] !== arguments[i]) { data = null; break } }\n if (data) return data\n }\n\n const canvas = Platform.origin.createCanvas(max(floor(width + (xGap || 0)), 1), max(floor(height + (yGap || 0)), 1))\n const ctx = canvas.getContext('2d')\n if (opacity) ctx.globalAlpha = opacity\n ctx.imageSmoothingEnabled = smooth === false ? false : true // 平滑绘制\n ctx.drawImage(this.view, 0, 0, width, height)\n\n this.cache = this.use > 1 ? { data: canvas, params: arguments } : null\n\n return canvas\n }\n\n public getPattern(canvas: any, repeat: string | null, transform?: IMatrixData, paint?: ILeaferImagePatternPaint): ICanvasPattern {\n const pattern = Platform.canvas.createPattern(canvas, repeat)\n try {\n if (transform && pattern.setTransform) {\n pattern.setTransform(transform) // maybe error \n transform = undefined\n }\n } catch { }\n if (paint) DataHelper.stintSet(paint, 'transform', transform)\n return pattern\n }\n\n public destroy(): void {\n this.config = { url: '' }\n this.cache = null\n this.waitComplete.length = 0\n }\n\n}","import { IObject, IValue } from '@leafer/interface'\n\nexport function defineKey<T>(target: T, key: string, descriptor: IObject & ThisType<T>, noConfigurable?: boolean): void {\n if (!noConfigurable) descriptor.configurable = descriptor.enumerable = true\n Object.defineProperty(target, key, descriptor)\n}\n\nexport function getDescriptor(object: IObject, name: string) {\n return Object.getOwnPropertyDescriptor(object, name)\n}\n\nexport function createDescriptor(key: string, defaultValue?: IValue) {\n const privateKey = '_' + key\n return {\n get() { const v = (this as IObject)[privateKey]; return v == null ? defaultValue : v },\n set(value: IValue) { (this as IObject)[privateKey] = value }\n }\n}\n\nexport function getNames(object: IObject): string[] {\n return Object.getOwnPropertyNames(object)\n}\n\n","import { ILeafData, ILeaf, IObject, IValue, ILeafAttrDescriptor, ILeafAttrDescriptorFn, IValueFunction, IMatrixWithBoundsScaleData } from '@leafer/interface'\nimport { DataHelper, isEmptyData, isObject, isUndefined } from '@leafer/data'\nimport { Debug } from '@leafer/debug'\n\nimport { defineKey, getDescriptor, createDescriptor } from './object'\n\n\n// name\n\nexport function decorateLeafAttr(defaultValue?: IValue, descriptorFn?: ILeafAttrDescriptorFn) {\n return (target: ILeaf, key: string) => defineLeafAttr(target, key, defaultValue, descriptorFn && descriptorFn(key))\n}\n\nexport function attr(partDescriptor?: ILeafAttrDescriptor): ILeafAttrDescriptor {\n return partDescriptor\n}\n\n\nexport function defineLeafAttr(target: ILeaf, key: string, defaultValue?: IValue, partDescriptor?: ILeafAttrDescriptor): void {\n const defaultDescriptor: ILeafAttrDescriptor = {\n get() { return this.__getAttr(key) },\n set(value: IValue) { this.__setAttr(key, value) }\n }\n defineKey(target, key, Object.assign(defaultDescriptor, partDescriptor || {}))\n defineDataProcessor(target, key, defaultValue)\n}\n\n\nexport function dataType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue)\n}\n\nexport function positionType(defaultValue?: IValue, checkFiniteNumber?: boolean) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n this.__setAttr(key, value, checkFiniteNumber) && (this.__layout.matrixChanged || this.__layout.matrixChange())\n }\n }))\n}\n\nexport function scrollType(defaultValue?: IValue, checkFiniteNumber?: boolean) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n if (this.__setAttr(key, value, checkFiniteNumber)) {\n this.__layout.matrixChanged || this.__layout.matrixChange()\n this.__scrollWorld || (this.__scrollWorld = {} as IMatrixWithBoundsScaleData)\n }\n }\n }))\n}\n\nexport function autoLayoutType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n if (this.__setAttr(key, value)) {\n this.__hasAutoLayout = !!(this.origin || this.around || this.flow)\n if (!this.__local) this.__layout.createLocal()\n doBoundsType(this)\n }\n }\n }))\n}\n\nexport function scaleType(defaultValue?: IValue, checkFiniteNumber?: boolean) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n this.__setAttr(key, value, checkFiniteNumber) && (this.__layout.scaleChanged || this.__layout.scaleChange())\n\n }\n }))\n}\n\nexport function rotationType(defaultValue?: IValue, checkFiniteNumber?: boolean) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n this.__setAttr(key, value, checkFiniteNumber) && (this.__layout.rotationChanged || this.__layout.rotationChange())\n }\n\n }))\n}\n\nexport function boundsType(defaultValue?: IValue, checkFiniteNumber?: boolean) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n this.__setAttr(key, value, checkFiniteNumber) && doBoundsType(this)\n }\n }))\n}\n\nexport function naturalBoundsType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n this.__setAttr(key, value) && (doBoundsType(this), this.__.__removeNaturalSize())\n }\n }))\n}\n\nexport function doBoundsType(leaf: ILeaf): void {\n leaf.__layout.boxChanged || leaf.__layout.boxChange()\n if (leaf.__hasAutoLayout) leaf.__layout.matrixChanged || leaf.__layout.matrixChange()\n}\n\nexport function pathInputType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n const data = this.__\n if (data.__pathInputed !== 2) data.__pathInputed = value ? 1 : 0\n if (!value) data.__pathForRender = undefined\n this.__setAttr(key, value)\n doBoundsType(this)\n }\n }))\n}\n\nexport const pathType = boundsType\n\n\nexport function affectStrokeBoundsType(defaultValue?: IValue, useStroke?: boolean) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n if (this.__setAttr(key, value)) {\n doStrokeType(this)\n if (useStroke) this.__.__useStroke = true\n }\n }\n }))\n}\n\nexport function doStrokeType(leaf: ILeaf): void {\n leaf.__layout.strokeChanged || leaf.__layout.strokeChange()\n if (leaf.__.__useArrow) doBoundsType(leaf)\n}\n\nexport const strokeType = affectStrokeBoundsType\n\nexport function affectRenderBoundsType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n this.__setAttr(key, value)\n this.__layout.renderChanged || this.__layout.renderChange()\n }\n }))\n}\n\nexport function surfaceType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n this.__setAttr(key, value) && (this.__layout.surfaceChanged || this.__layout.surfaceChange())\n }\n }))\n}\n\nexport function dimType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n if (this.__setAttr(key, value)) {\n const data = this.__\n DataHelper.stintSet(data, '__useDim', (data.dim || data.bright || data.dimskip) as boolean)\n this.__layout.surfaceChange()\n }\n }\n }))\n}\n\nexport function opacityType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n this.__setAttr(key, value) && (this.__layout.opacityChanged || this.__layout.opacityChange())\n if (this.mask) checkMask(this)\n }\n }))\n}\n\nexport function visibleType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n const oldValue = this.visible\n if (oldValue === true && value === 0) {\n if (this.animationOut) return this.__runAnimation('out', () => doVisible(this, key, value, oldValue)) // hide\n } else if (oldValue === 0 && value === true) {\n if (this.animation) this.__runAnimation('in') // show\n }\n doVisible(this, key, value, oldValue)\n if (this.mask) checkMask(this)\n }\n }))\n}\n\nfunction checkMask(leaf: ILeaf): void { // mask 的透明度和可见性变更,会影响parent\n const { parent } = leaf\n if (parent) {\n const { __hasMask } = parent\n parent.__updateMask()\n if (__hasMask !== parent.__hasMask) parent.forceUpdate()\n }\n}\n\nfunction doVisible(leaf: ILeaf, key: string, value: IValue, oldValue: IValue): void {\n if (leaf.__setAttr(key, value)) {\n leaf.__layout.opacityChanged || leaf.__layout.opacityChange()\n if (oldValue === 0 || value === 0) doBoundsType(leaf) // 0 = display: none\n }\n}\n\nexport function sortType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n if (this.__setAttr(key, value)) {\n this.__layout.surfaceChange()\n this.waitParent(() => { this.parent.__layout.childrenSortChange() })\n }\n }\n }))\n}\n\nexport function maskType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: boolean) {\n if (this.__setAttr(key, value)) {\n this.__layout.boxChanged || this.__layout.boxChange()\n this.waitParent(() => { this.parent.__updateMask(value) })\n }\n }\n }))\n}\n\nexport function eraserType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: boolean) {\n this.__setAttr(key, value) && this.waitParent(() => { this.parent.__updateEraser(value) })\n }\n }))\n}\n\nexport function hitType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n if (this.__setAttr(key, value)) {\n this.__layout.hitCanvasChanged = true\n if (Debug.showBounds === 'hit') this.__layout.surfaceChange()\n if (this.leafer) this.leafer.updateCursor()\n }\n }\n }))\n}\n\nexport function cursorType(defaultValue?: IValue) {\n return decorateLeafAttr(defaultValue, (key: string) => attr({\n set(value: IValue) {\n this.__setAttr(key, value)\n if (this.leafer) this.leafer.updateCursor()\n }\n }))\n}\n\n\n// get\n\nexport function dataProcessor(processor: IObject) {\n return (target: IObject, _key?: string) => {\n defineKey(target, '__DataProcessor', {\n get() { return processor }\n })\n }\n}\n\nexport function layoutProcessor(processor: IObject) {\n return (target: IObject, _key?: string) => {\n defineKey(target, '__LayoutProcessor', {\n get() { return processor }\n })\n }\n}\n\n\n// other \n\nfunction getSetMethodName(key: string): string {\n return 'set' + key.charAt(0).toUpperCase() + key.slice(1)\n}\n\n\n// define leaf.__[key] getter/setter\nexport function defineDataProcessor(target: ILeaf, key: string, defaultValue?: IValue | IValueFunction): void {\n\n const data = target.__DataProcessor.prototype\n const computedKey = '_' + key\n const setMethodName = getSetMethodName(key)\n\n const property: IObject & ThisType<ILeafData> = createDescriptor(key, defaultValue)\n\n if (isUndefined(defaultValue)) {\n property.get = function () { return this[computedKey] }\n } else if (typeof defaultValue === 'function') {\n property.get = function () {\n const v = this[computedKey]\n return v == null ? defaultValue((this as ILeafData).__leaf) : v\n }\n } else if (isObject(defaultValue)) {\n const isEmpty = isEmptyData(defaultValue)\n property.get = function () {\n const v = this[computedKey]\n return v == null ? this[computedKey] = isEmpty ? {} : DataHelper.clone(defaultValue) : v\n }\n }\n\n const isBox = target.isBranchLeaf // 仅用于 width / height\n if (key === 'width') {\n property.get = function () {\n const v = this[computedKey]\n if (v == null) {\n const t = this as ILeafData, naturalWidth = t.__naturalWidth, leaf = t.__leaf\n if (!defaultValue || leaf.pathInputed) return leaf.boxBounds.width\n if (naturalWidth) return (t as IObject)._height && t.__useNaturalRatio ? (t as IObject)._height * naturalWidth / t.__naturalHeight : naturalWidth\n return (isBox && leaf.children.length) ? leaf.boxBounds.width : defaultValue // 返回 Box / Group / Text 等的实际宽度\n } else return v\n }\n } else if (key === 'height') {\n property.get = function () {\n const v = this[computedKey]\n if (v == null) {\n const t = this as ILeafData, naturalHeight = t.__naturalHeight, leaf = t.__leaf\n if (!defaultValue || leaf.pathInputed) return leaf.boxBounds.height\n if (naturalHeight) return (t as IObject)._width && t.__useNaturalRatio ? (t as IObject)._width * naturalHeight / t.__naturalWidth : naturalHeight\n return (isBox && leaf.children.length) ? leaf.boxBounds.height : defaultValue // 返回 Box / Group / Text 等的实际高度\n } else return v\n }\n }\n\n // find parent proto\n let descriptor, find = data\n while (!descriptor && find) {\n descriptor = getDescriptor(find, key)\n find = find.__proto__\n }\n\n if (descriptor && descriptor.set) property.set = descriptor.set // use exist set\n\n if (data[setMethodName]) {\n property.set = data[setMethodName] // first use custom setKey(value)\n delete data[setMethodName]\n }\n\n defineKey(data, key, property)\n\n}\n\n","import { IObject, IFunction } from '@leafer/interface'\nimport { Debug } from '@leafer/debug'\nimport { getDescriptor, getNames } from './object'\n\ninterface IRewriteItem {\n name: string\n run: IFunction\n}\n\nconst debug = new Debug('rewrite')\n\nconst list: IRewriteItem[] = []\nconst excludeNames = ['destroy', 'constructor']\n\n\n// method\n\nexport function rewrite(method: IFunction) {\n return (target: IObject, key: string) => {\n list.push({ name: target.constructor.name + '.' + key, run: () => { target[key] = method } })\n }\n}\n\nexport function rewriteAble() {\n return (_target: IObject) => {\n doRewrite()\n }\n}\n\nfunction doRewrite(error?: boolean): void {\n if (list.length) {\n list.forEach(item => {\n if (error) debug.error(item.name, '需在Class上装饰@rewriteAble()')\n item.run()\n })\n list.length = 0\n }\n}\n\nsetTimeout(() => doRewrite(true))\n\n\n// class\n\nexport function useModule(module: IObject, exclude?: string[]) {\n return (target: IObject) => {\n const names = module.prototype ? getNames(module.prototype) : Object.keys(module)\n names.forEach(name => {\n if (!excludeNames.includes(name) && (!exclude || !exclude.includes(name))) {\n if (module.prototype) {\n const d = getDescriptor(module.prototype, name)\n if (d.writable) target.prototype[name] = module.prototype[name]\n } else {\n target.prototype[name] = module[name]\n }\n }\n })\n }\n}","import { IAlign, ILeaf, IMatrixData, IPointData, IAxis, ITransition, ILeaferCanvas, IBoundsData, IMatrixWithBoundsData } from '@leafer/interface'\nimport { MathHelper, MatrixHelper, PointHelper, AroundHelper, getMatrixData, BoundsHelper } from '@leafer/math'\nimport { Platform } from '@leafer/platform'\nimport { isObject, isNumber } from '@leafer/data'\n\n\nconst { copy, toInnerPoint, toOuterPoint, scaleOfOuter, rotateOfOuter, skewOfOuter, multiplyParent, divideParent, getLayout } = MatrixHelper\nconst matrix = {} as IMatrixData, { round } = Math\n\nexport const LeafHelper = {\n\n updateAllMatrix(leaf: ILeaf, checkAutoLayout?: boolean, waitAutoLayout?: boolean): void {\n if (checkAutoLayout && leaf.__hasAutoLayout && leaf.__layout.matrixChanged) waitAutoLayout = true\n\n updateMatrix(leaf, checkAutoLayout, waitAutoLayout)\n\n if (leaf.isBranch) {\n const { children } = leaf\n for (let i = 0, len = children.length; i < len; i++) {\n updateAllMatrix(children[i], checkAutoLayout, waitAutoLayout)\n }\n }\n },\n\n updateMatrix(leaf: ILeaf, checkAutoLayout?: boolean, waitAutoLayout?: boolean): void {\n const layout = leaf.__layout\n\n if (checkAutoLayout) {\n if (waitAutoLayout) {\n layout.waitAutoLayout = true\n if (leaf.__hasAutoLayout) layout.matrixChanged = false // wait updateAutoLayout\n }\n } else if (layout.waitAutoLayout) {\n layout.waitAutoLayout = false\n }\n\n if (layout.matrixChanged) leaf.__updateLocalMatrix()\n if (!layout.waitAutoLayout) leaf.__updateWorldMatrix()\n },\n\n updateBounds(leaf: ILeaf): void {\n const layout = leaf.__layout\n if (layout.boundsChanged) leaf.__updateLocalBounds()\n if (!layout.waitAutoLayout) leaf.__updateWorldBounds()\n },\n\n updateAllWorldOpacity(leaf: ILeaf): void {\n leaf.__updateWorldOpacity()\n\n if (leaf.isBranch) {\n const { children } = leaf\n for (let i = 0, len = children.length; i < len; i++) {\n updateAllWorldOpacity(children[i])\n }\n }\n },\n\n updateChange(leaf: ILeaf): void {\n const layout = leaf.__layout\n if (layout.stateStyleChanged) leaf.updateState()\n if (layout.opacityChanged) updateAllWorldOpacity(leaf)\n leaf.__updateChange()\n },\n\n updateAllChange(leaf: ILeaf): void {\n updateChange(leaf)\n if (leaf.isBranch) {\n const { children } = leaf\n for (let i = 0, len = children.length; i < len; i++) {\n updateAllChange(children[i])\n }\n }\n },\n\n worldHittable(t: ILeaf): boolean {\n while (t) {\n if (!t.__.hittable) return false\n t = t.parent\n }\n return true\n },\n\n draggable(t: ILeaf): boolean {\n return (t.draggable || t.editable) && t.hitSelf && !t.locked\n },\n\n copyCanvasByWorld(leaf: ILeaf, currentCanvas: ILeaferCanvas, fromCanvas: ILeaferCanvas, fromWorld?: IBoundsData, blendMode?: string, onlyResetTransform?: boolean): void {\n if (!fromWorld) fromWorld = leaf.__nowWorld\n if (leaf.__worldFlipped || Platform.fullImageShadow) currentCanvas.copyWorldByReset(fromCanvas, fromWorld, leaf.__nowWorld, blendMode, onlyResetTransform)\n else currentCanvas.copyWorldToInner(fromCanvas, fromWorld as IMatrixWithBoundsData, leaf.__layout.renderBounds, blendMode)\n },\n\n // transform\n\n moveWorld(t: ILeaf, x: number | IPointData, y = 0, isInnerPoint?: boolean, transition?: ITransition): void {\n const local = isObject(x) ? { ...x } : { x, y }\n isInnerPoint ? toOuterPoint(t.localTransform, local, local, true) : (t.parent && toInnerPoint(t.parent.scrollWorldTransform, local, local, true))\n L.moveLocal(t, local.x, local.y, transition)\n },\n\n moveLocal(t: ILeaf, x: number | IPointData, y = 0, transition?: ITransition): void {\n if (isObject(x)) y = x.y, x = x.x\n x += t.x\n y += t.y\n if (t.leafer && t.leafer.config.pointSnap) x = round(x), y = round(y)\n transition ? t.animate({ x, y }, transition) : (t.x = x, t.y = y)\n },\n\n zoomOfWorld(t: ILeaf, origin: IPointData, scaleX: number, scaleY?: number | ITransition, resize?: boolean, transition?: ITransition): void {\n L.zoomOfLocal(t, getTempLocal(t, origin), scaleX, scaleY, resize, transition)\n },\n\n zoomOfLocal(t: ILeaf, origin: IPointData, scaleX: number, scaleY: number | ITransition = scaleX, resize?: boolean, transition?: ITransition): void {\n const o = t.__localMatrix\n if (!isNumber(scaleY)) {\n if (scaleY) transition = scaleY\n scaleY = scaleX\n }\n copy(matrix, o)\n scaleOfOuter(matrix, origin, scaleX, scaleY)\n if (L.hasHighPosition(t)) {\n L.setTransform(t, matrix, resize, transition)\n } else {\n const x = t.x + matrix.e - o.e, y = t.y + matrix.f - o.f\n if (transition && !resize) t.animate({ x, y, scaleX: t.scaleX * scaleX, scaleY: t.scaleY * scaleY }, transition)\n else t.x = x, t.y = y, t.scaleResize(scaleX, scaleY, resize !== true)\n }\n },\n\n rotateOfWorld(t: ILeaf, origin: IPointData, angle: number, transition?: ITransition): void {\n L.rotateOfLocal(t, getTempLocal(t, origin), angle, transition)\n },\n\n rotateOfLocal(t: ILeaf, origin: IPointData, angle: number, transition?: ITransition): void {\n const o = t.__localMatrix\n copy(matrix, o)\n rotateOfOuter(matrix, origin, angle)\n if (L.hasHighPosition(t)) L.setTransform(t, matrix, false, transition)\n else t.set({ x: t.x + matrix.e - o.e, y: t.y + matrix.f - o.f, rotation: MathHelper.formatRotation(t.rotation + angle) }, transition)\n },\n\n skewOfWorld(t: ILeaf, origin: IPointData, skewX: number, skewY?: number, resize?: boolean, transition?: ITransition): void {\n L.skewOfLocal(t, getTempLocal(t, origin), skewX, skewY, resize, transition)\n },\n\n skewOfLocal(t: ILeaf, origin: IPointData, skewX: number, skewY: number = 0, resize?: boolean, transition?: ITransition): void {\n copy(matrix, t.__localMatrix)\n skewOfOuter(matrix, origin, skewX, skewY)\n L.setTransform(t, matrix, resize, transition)\n },\n\n transformWorld(t: ILeaf, transform: IMatrixData, resize?: boolean, transition?: ITransition): void {\n copy(matrix, t.worldTransform)\n multiplyParent(matrix, transform)\n if (t.parent) divideParent(matrix, t.parent.scrollWorldTransform)\n L.setTransform(t, matrix, resize, transition)\n },\n\n transform(t: ILeaf, transform: IMatrixData, resize?: boolean, transition?: ITransition): void {\n copy(matrix, t.localTransform)\n multiplyParent(matrix, transform)\n L.setTransform(t, matrix, resize, transition)\n },\n\n setTransform(t: ILeaf, transform: IMatrixData, resize?: boolean, transition?: ITransition): void {\n const data = t.__, originPoint = data.origin && L.getInnerOrigin(t, data.origin)\n const layout = getLayout(transform, originPoint, data.around && L.getInnerOrigin(t, data.around))\n\n if (L.hasOffset(t)) {\n layout.x -= data.offsetX\n layout.y -= data.offsetY\n }\n\n if (resize) {\n const scaleX = layout.scaleX / t.scaleX, scaleY = layout.scaleY / t.scaleY\n delete layout.scaleX, delete layout.scaleY\n\n if (originPoint) { // fix origin: resize 方式下 boxBounds 会变化,导致 originPoint 不准确,需偏移至正确的位置\n BoundsHelper.scale(t.boxBounds, Math.abs(scaleX), Math.abs(scaleY))\n const changedPoint = L.getInnerOrigin(t, data.origin)\n PointHelper.move(layout, originPoint.x - changedPoint.x, originPoint.y - changedPoint.y)\n }\n\n t.set(layout)\n t.scaleResize(scaleX, scaleY, false)\n\n } else t.set(layout, transition)\n },\n\n getFlipTransform(t: ILeaf, axis: IAxis): IMatrixData {\n const m = getMatrixData()\n const sign = axis === 'x' ? 1 : -1\n scaleOfOuter(m, L.getLocalOrigin(t, 'center'), -1 * sign, 1 * sign)\n return m\n },\n\n getLocalOrigin(t: ILeaf, origin: IPointData | IAlign): IPointData {\n return PointHelper.tempToOuterOf(L.getInnerOrigin(t, origin), t.localTransform)\n },\n\n getInnerOrigin(t: ILeaf, origin: IPointData | IAlign): IPointData {\n const innerOrigin = {} as IPointData\n AroundHelper.toPoint(origin, t.boxBounds, innerOrigin)\n return innerOrigin\n },\n\n getRelativeWorld(t: ILeaf, relative: ILeaf, temp?: boolean): IMatrixData {\n copy(matrix, t.worldTransform)\n divideParent(matrix, relative.scrollWorldTransform)\n return temp ? matrix : { ...matrix }\n },\n\n drop(t: ILeaf, parent: ILeaf, index?: number, resize?: boolean): void {\n t.setTransform(L.getRelativeWorld(t, parent, true), resize)\n parent.add(t, index)\n },\n\n hasHighPosition(t: ILeaf): boolean {\n return (t.origin || t.around || L.hasOffset(t)) as unknown as boolean\n },\n\n hasOffset(t: ILeaf): boolean {\n return (t.offsetX || t.offsetY) as unknown as boolean\n },\n\n hasParent(p: ILeaf, parent: ILeaf): boolean | void {\n if (!parent) return false\n while (p) {\n if (parent === p) return true\n p = p.parent\n }\n },\n\n // 简单动画操作\n\n animateMove(t: ILeaf, move: IPointData, speed = 0.3) {\n if (!move.x && !move.y) return\n if (Math.abs(move.x) < 1 && Math.abs(move.y) < 1) {\n t.move(move)\n } else {\n const x = move.x * speed, y = move.y * speed\n move.x -= x, move.y -= y\n t.move(x, y)\n Platform.requestRender(() => L.animateMove(t, move, speed))\n }\n }\n\n}\n\nconst L = LeafHelper\nconst { updateAllMatrix, updateMatrix, updateAllWorldOpacity, updateAllChange, updateChange } = L\n\nfunction getTempLocal(t: ILeaf, worldPoint: IPointData): IPointData {\n t.updateLayout() // must\n return t.parent ? PointHelper.tempToInnerOf(worldPoint, t.parent.scrollWorldTransform) : worldPoint\n}","import { ILeaf, IBoundsData, IRenderOptions } from '@leafer/interface'\n\n\nexport const LeafBoundsHelper = {\n\n worldBounds(target: ILeaf): IBoundsData {\n return target.__world\n },\n\n localBoxBounds(target: ILeaf): IBoundsData {\n return target.__.eraser || target.__.visible === 0 ? null : (target.__local || target.__layout)\n },\n\n localStrokeBounds(target: ILeaf): IBoundsData {\n return target.__.eraser || target.__.visible === 0 ? null : target.__layout.localStrokeBounds\n },\n\n localRenderBounds(target: ILeaf): IBoundsData {\n return target.__.eraser || target.__.visible === 0 ? null : target.__layout.localRenderBounds\n },\n\n maskLocalBoxBounds(target: ILeaf, index: number): IBoundsData {\n return checkMask(target, index) && target.__localBoxBounds\n },\n\n maskLocalStrokeBounds(target: ILeaf, index: number): IBoundsData {\n return checkMask(target, index) && target.__layout.localStrokeBounds\n },\n\n maskLocalRenderBounds(target: ILeaf, index: number): IBoundsData {\n return checkMask(target, index) && target.__layout.localRenderBounds\n },\n\n excludeRenderBounds(child: ILeaf, options: IRenderOptions): boolean {\n if (options.bounds && !options.bounds.hit(child.__world, options.matrix)) return true\n if (options.hideBounds && options.hideBounds.includes(child.__world, options.matrix)) return true\n return false\n }\n\n}\n\n\nlet findMask: number\n\nfunction checkMask(target: ILeaf, index: number): boolean {\n if (!index) findMask = 0\n if (target.__.mask) findMask = 1\n return findMask < 0 ? null : (findMask && (findMask = -1), true) // 第一个 mask 元素之后的元素 bounds 可以忽略,返回 null\n}","import { ILeaf, ILeafLevelList, ILeafList } from '@leafer/interface'\nimport { isUndefined } from '@leafer/data'\nimport { LeafHelper } from './LeafHelper'\n\nconst { updateBounds } = LeafHelper\n\nexport const BranchHelper = {\n\n sort(a: ILeaf, b: ILeaf): number {\n return (a.__.zIndex === b.__.zIndex) ? (a.__tempNumber - b.__tempNumber) : (a.__.zIndex - b.__.zIndex)\n },\n\n // push\n\n pushAllChildBranch(branch: ILeaf, leafList: ILeafList | ILeafLevelList): void {\n branch.__tempNumber = 1 // 标识需要更新子Leaf元素的WorldBounds分支 Layouter需使用\n\n if (branch.__.__childBranchNumber) {\n const { children } = branch\n for (let i = 0, len = children.length; i < len; i++) {\n branch = children[i]\n if (branch.isBranch) {\n branch.__tempNumber = 1\n leafList.add(branch)\n pushAllChildBranch(branch, leafList)\n }\n }\n }\n },\n\n pushAllParent(leaf: ILeaf, leafList: ILeafList | ILeafLevelList): void {\n const { keys } = (leafList as ILeafList)\n if (keys) {\n while (leaf.parent) {\n if (isUndefined(keys[leaf.parent.innerId])) {\n leafList.add(leaf.parent)\n leaf = leaf.parent\n } else {\n break\n }\n }\n } else {\n while (leaf.parent) {\n leafList.add(leaf.parent)\n leaf = leaf.parent\n }\n }\n },\n\n pushAllBranchStack(branch: ILeaf, pushList: ILeaf[]): void {\n let start = pushList.length\n const { children } = branch\n for (let i = 0, len = children.length; i < len; i++) {\n if (children[i].isBranch) {\n pushList.push(children[i])\n }\n }\n\n // 找子级\n for (let i = start, len = pushList.length; i < len; i++) {\n pushAllBranchStack(pushList[i], pushList)\n }\n },\n\n updateBounds(branch: ILeaf, exclude?: ILeaf): void {\n const branchStack: ILeaf[] = [branch]\n pushAllBranchStack(branch, branchStack)\n updateBoundsByBranchStack(branchStack, exclude)\n },\n\n updateBoundsByBranchStack(branchStack: ILeaf[], exclude?: ILeaf): void {\n let branch: ILeaf, children: ILeaf[]\n for (let i = branchStack.length - 1; i > -1; i--) {\n branch = branchStack[i]\n children = branch.children\n for (let j = 0, len = children.length; j < len; j++) {\n updateBounds(children[j])\n }\n if (exclude && exclude === branch) continue\n updateBounds(branch)\n }\n }\n}\n\nconst { pushAllChildBranch, pushAllBranchStack, updateBoundsByBranchStack } = BranchHelper","import { IFunction } from '@leafer/interface'\n\nexport const WaitHelper = {\n run(wait: IFunction[]): void {\n if (wait && wait.length) {\n const len = wait.length\n for (let i = 0; i < len; i++) { wait[i]() }\n wait.length === len ? wait.length = 0 : wait.splice(0, len)\n }\n }\n}","import { ILeaf, ILeafLayout, ILocationType, IBoundsType, IBoundsData, IMatrixData, ILayoutBoundsData, IPointData } from '@leafer/interface'\nimport { Bounds, BoundsHelper, MatrixHelper, PointHelper } from '@leafer/math'\nimport { isUndefined } from '@leafer/data'\nimport { LeafHelper } from '@leafer/helper'\nimport { Platform } from '@leafer/platform'\n\n\nconst { getRelativeWorld, updateBounds } = LeafHelper\nconst { toOuterOf, getPoints, copy } = BoundsHelper\nconst localContent = '_localContentBounds'\nconst worldContent = '_worldContentBounds', worldBox = '_worldBoxBounds', worldStroke = '_worldStrokeBounds'\n\nexport class LeafLayout implements ILeafLayout {\n\n public leaf: ILeaf\n\n public proxyZoom: boolean\n\n // inner\n\n public get contentBounds(): IBoundsData { return this._contentBounds || this.boxBounds }\n public set contentBounds(bounds: IBoundsData) { this._contentBounds = bounds }\n public boxBounds: IBoundsData\n public get strokeBounds(): IBoundsData { return this._strokeBounds || this.boxBounds }\n public get renderBounds(): IBoundsData { return this._renderBounds || this.boxBounds }\n public set renderBounds(bounds: IBoundsData) { this._renderBounds = bounds }\n\n public _contentBounds: IBoundsData\n public _strokeBounds: IBoundsData\n public _renderBounds: IBoundsData\n\n // local\n\n public get localContentBounds(): IBoundsData { toOuterOf(this.contentBounds, this.leaf.__localMatrix, this[localContent] || (this[localContent] = {} as IBoundsData)); return this[localContent] }\n // localBoxBounds: IBoundsData // use leaf.__localBoxBounds\n public get localStrokeBounds(): IBoundsData { return this._localStrokeBounds || this }\n public get localRenderBounds(): IBoundsData { return this._localRenderBounds || this }\n\n protected _localContentBounds?: IBoundsData\n protected _localStrokeBounds?: IBoundsData\n protected _localRenderBounds?: IBoundsData\n\n // world\n\n public get worldContentBounds(): IBoundsData { toOuterOf(this.contentBounds, this.leaf.__world, this[worldContent] || (this[worldContent] = {} as IBoundsData)); return this[worldContent] }\n public get worldBoxBounds(): IBoundsData { toOuterOf(this.boxBounds, this.leaf.__world, this[worldBox] || (this[worldBox] = {} as IBoundsData)); return this[worldBox] }\n public get worldStrokeBounds(): IBoundsData { toOuterOf(this.strokeBounds, this.leaf.__world, this[worldStroke] || (this[worldStroke] = {} as IBoundsData)); return this[worldStroke] }\n // worldRenderBounds: IBoundsData // use leaf.__world\n\n protected _worldContentBounds: IBoundsData\n protected _worldBoxBounds: IBoundsData\n protected _worldStrokeBounds: IBoundsData\n\n // state\n\n public resized: 'scale' | 'inner' | 'local'\n public waitAutoLayout: boolean\n\n // matrix changed\n public matrixChanged: boolean\n public scaleChanged: boolean\n public rotationChanged: boolean\n\n // bounds\n public boundsChanged: boolean\n\n public boxChanged: boolean\n public strokeChanged: boolean\n public renderChanged: boolean\n\n public localBoxChanged: boolean\n\n // face\n public surfaceChanged: boolean\n public opacityChanged: boolean\n\n public hitCanvasChanged: boolean\n\n public childrenSortChanged?: boolean\n public stateStyleChanged?: boolean\n\n // keep state\n public affectScaleOrRotation: boolean\n public affectRotation: boolean\n public affectChildrenSort?: boolean\n\n public strokeSpread: number\n public strokeBoxSpread: number\n public renderSpread: number\n public renderShapeSpread: number\n\n // temp local\n public get a() { return 1 }\n public get b() { return 0 }\n public get c() { return 0 }\n public get d() { return 1 }\n public get e() { return this.leaf.__.x }\n public get f() { return this.leaf.__.y }\n public get x() { return this.e + this.boxBounds.x }\n public get y() { return this.f + this.boxBounds.y }\n public get width() { return this.boxBounds.width }\n public get height() { return this.boxBounds.height }\n\n\n constructor(leaf: ILeaf) {\n this.leaf = leaf\n if (this.leaf.__local) this._localRenderBounds = this._localStrokeBounds = this.leaf.__local\n if (leaf.__world) {\n this.boxBounds = { x: 0, y: 0, width: 0, height: 0 }\n this.boxChange()\n this.matrixChange()\n }\n }\n\n public createLocal(): void {\n const local = this.leaf.__local = { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0, x: 0, y: 0, width: 0, height: 0 }\n if (!this._localStrokeBounds) this._localStrokeBounds = local\n if (!this._localRenderBounds) this._localRenderBounds = local\n }\n\n public update(): void {\n const { leaf } = this, { leafer } = leaf\n if (leaf.isApp) return updateBounds(leaf)\n if (leafer) {\n if (leafer.ready) leafer.watcher.changed && leafer.layouter.layout()\n else leafer.start()\n } else {\n let root = leaf\n while (root.parent && !root.parent.leafer) { root = root.parent }\n const r = root as any\n if (r.__fullLayouting) return // fix: 循环\n r.__fullLayouting = true\n Platform.layout(r)\n delete r.__fullLayouting\n }\n }\n\n public getTransform(relative: ILocationType | ILeaf = 'world'): IMatrixData {\n this.update()\n const { leaf } = this\n switch (relative) {\n case 'world':\n return leaf.__world\n case 'local':\n return leaf.__localMatrix\n case 'inner':\n return MatrixHelper.defaultMatrix\n case 'page':\n relative = leaf.zoomLayer\n default:\n return getRelativeWorld(leaf, relative)\n }\n }\n\n public getBounds(type?: IBoundsType, relative: ILocationType | ILeaf = 'world'): IBoundsData {\n this.update()\n switch (relative) {\n case 'world':\n return this.getWorldBounds(type)\n case 'local':\n return this.getLocalBounds(type)\n case 'inner':\n return this.getInnerBounds(type)\n case 'page':\n relative = this.leaf.zoomLayer\n default:\n return new Bounds(this.getInnerBounds(type)).toOuterOf(this.getTransform(relative))\n }\n }\n\n public getInnerBounds(type: IBoundsType = 'box'): IBoundsData {\n switch (type) {\n case 'render':\n return this.renderBounds\n case 'content':\n if (this.contentBounds) return this.contentBounds\n case 'box':\n return this.boxBounds\n case 'stroke':\n return this.strokeBounds\n }\n }\n\n public getLocalBounds(type: IBoundsType = 'box'): IBoundsData {\n switch (type) {\n case 'render':\n return this.localRenderBounds\n case 'stroke':\n return this.localStrokeBounds\n case 'content':\n if (this.contentBounds) return this.localContentBounds\n case 'box':\n return this.leaf.__localBoxBounds\n }\n }\n\n public getWorldBounds(type: IBoundsType = 'box'): IBoundsData {\n switch (type) {\n case 'render':\n return this.leaf.__world\n case 'stroke':\n return this.worldStrokeBounds\n case 'content':\n if (this.contentBounds) return this.worldContentBounds\n case 'box':\n return this.worldBoxBounds\n }\n }\n\n public getLayoutBounds(type?: IBoundsType, relative: ILocationType | ILeaf = 'world', unscale?: boolean): ILayoutBoundsData {\n const { leaf } = this\n let point: IPointData, matrix: IMatrixData, layoutBounds: ILayoutBoundsData, bounds: IBoundsData = this.getInnerBounds(type)\n\n switch (relative) {\n case 'world':\n point = leaf.getWorldPoint(bounds)\n matrix = leaf.__world\n break\n case 'local':\n const { scaleX, scaleY, rotation, skewX, skewY } = leaf.__\n layoutBounds = { scaleX, scaleY, rotation, skewX, skewY } as ILayoutBoundsData // 更精准,务必保留\n point = leaf.getLocalPointByInner(bounds)\n break\n case 'inner':\n point = bounds\n matrix = MatrixHelper.defaultMatrix\n break\n case 'page':\n relative = leaf.zoomLayer\n default:\n point = leaf.getWorldPoint(bounds, relative)\n matrix = getRelativeWorld(leaf, relative, true)\n }\n\n if (!layoutBounds) layoutBounds = MatrixHelper.getLayout(matrix) as ILayoutBoundsData\n copy(layoutBounds, bounds)\n PointHelper.copy(layoutBounds, point)\n\n if (unscale) {\n const { scaleX, scaleY } = layoutBounds\n const uScaleX = Math.abs(scaleX)\n const uScaleY = Math.abs(scaleY)\n if (uScaleX !== 1 || uScaleY !== 1) {\n layoutBounds.scaleX /= uScaleX\n layoutBounds.scaleY /= uScaleY\n layoutBounds.width *= uScaleX\n layoutBounds.height *= uScaleY\n }\n }\n\n return layoutBounds\n }\n\n public getLayoutPoints(type?: IBoundsType, relative: ILocationType | ILeaf = 'world'): IPointData[] {\n const { leaf } = this\n const points = getPoints(this.getInnerBounds(type))\n let relativeLeaf: ILeaf\n switch (relative) {\n case 'world':\n relativeLeaf = null\n break\n case 'local':\n relativeLeaf = leaf.parent\n break\n case 'inner':\n break\n case 'page':\n relative = leaf.zoomLayer\n default:\n relativeLeaf = relative\n }\n if (!isUndefined(relativeLeaf)) points.forEach(point => leaf.innerToWorld(point, null, false, relativeLeaf))\n return points\n }\n\n // 独立 / 引用 boxBounds\n\n public shrinkContent(): void {\n const { x, y, width, height } = this.boxBounds\n this._contentBounds = { x, y, width, height }\n }\n\n public spreadStroke(): void {\n const { x, y, width, height } = this.strokeBounds\n this._strokeBounds = { x, y, width, height }\n this._localStrokeBounds = { x, y, width, height }\n if (!this.renderSpread) this.spreadRenderCancel()\n }\n public spreadRender(): void {\n const { x, y, width, height } = this.renderBounds\n this._renderBounds = { x, y, width, height }\n this._localRenderBounds = { x, y, width, height }\n }\n\n public shrinkContentCancel(): void {\n this._contentBounds = undefined\n }\n\n public spreadStrokeCancel(): void {\n const same = this.renderBounds === this.strokeBounds\n this._strokeBounds = this.boxBounds\n this._localStrokeBounds = this.leaf.__localBoxBounds\n if (same) this.spreadRenderCancel()\n }\n public spreadRenderCancel(): void {\n this._renderBounds = this._strokeBounds\n this._localRenderBounds = this._localStrokeBounds\n }\n\n\n // bounds\n\n public boxChange(): void {\n this.boxChanged = true\n this.localBoxChanged ? (this.boundsChanged || (this.boundsChanged = true)) : this.localBoxChange() // fix: boundsChanged未更新的问题\n this.hitCanvasChanged = true\n }\n\n public localBoxChange(): void {\n this.localBoxChanged = true\n this.boundsChanged = true\n }\n\n public strokeChange(): void {\n this.strokeChanged = true\n this.strokeSpread || (this.strokeSpread = 1)\n this.boundsChanged = true\n this.hitCanvasChanged = true\n }\n\n public renderChange(): void {\n this.renderChanged = true\n this.renderSpread || (this.renderSpread = 1)\n this.boundsChanged = true\n }\n\n\n // matrix\n\n public scaleChange(): void {\n this.scaleChanged = true\n this._scaleOrRotationChange()\n }\n\n public rotationChange(): void {\n this.rotationChanged = true\n this.affectRotation = true\n this._scaleOrRotationChange()\n }\n\n protected _scaleOrRotationChange() {\n this.affectScaleOrRotation = true\n this.matrixChange()\n if (!this.leaf.__local) this.createLocal()\n }\n\n public matrixChange(): void {\n this.matrixChanged = true\n this.localBoxChanged ? (this.boundsChanged || (this.boundsChanged = true)) : this.localBoxChange() // fix: boundsChanged未更新的问题\n }\n\n\n // face\n\n public surfaceChange(): void {\n this.surfaceChanged = true\n }\n\n public opacityChange(): void {\n this.opacityChanged = true\n this.surfaceChanged || this.surfaceChange()\n }\n\n public childrenSortChange(): void {\n if (!this.childrenSortChanged) {\n this.childrenSortChanged = this.affectChildrenSort = true\n this.leaf.forceUpdate('surface')\n }\n }\n\n public destroy(): void { }\n\n}","import { IEvent, IEventTarget, IObject } from '@leafer/interface'\nimport { Platform } from '@leafer/platform'\n\n\nexport class Event implements IEvent {\n\n readonly origin: IObject\n\n readonly type: string\n readonly target: IEventTarget\n readonly current: IEventTarget\n\n readonly bubbles: boolean = false\n readonly phase: number\n\n public isStopDefault: boolean\n public isStop: boolean\n public isStopNow: boolean\n\n constructor(type: string, target?: IEventTarget) {\n this.type = type\n if (target) this.target = target\n }\n\n public stopDefault(): void {\n this.isStopDefault = true\n if (this.origin) Platform.event.stopDefault(this.origin)\n }\n\n public stopNow(): void {\n this.isStopNow = true\n this.isStop = true\n if (this.origin) Platform.event.stopNow(this.origin)\n }\n\n public stop(): void {\n this.isStop = true\n if (this.origin) Platform.event.stop(this.origin)\n }\n}","import { IChildEvent, ILeaf } from '@leafer/interface'\n\nimport { Event } from './Event'\n\n\nexport class ChildEvent extends Event implements IChildEvent {\n\n static ADD = 'child.add'\n static REMOVE = 'child.remove'\n\n static CREATED = 'created'\n static MOUNTED = 'mounted'\n static UNMOUNTED = 'unmounted'\n static DESTROY = 'destroy'\n\n readonly parent?: ILeaf\n readonly child?: ILeaf\n\n constructor(type: string, child?: ILeaf, parent?: ILeaf) {\n super(type, child)\n this.parent = parent\n this.child = child\n }\n\n}","import { IPropertyEvent, IEventTarget, IStringMap } from '@leafer/interface'\n\nimport { Event } from './Event'\n\n\nconst SCROLL = 'property.scroll'\n\nexport class PropertyEvent extends Event implements IPropertyEvent {\n\n static CHANGE = 'property.change'\n static LEAFER_CHANGE = 'property.leafer_change'\n\n static SCROLL = SCROLL\n\n readonly attrName: string\n readonly oldValue: unknown\n readonly newValue: unknown\n\n constructor(type: string, target: IEventTarget, attrName: string, oldValue: unknown, newValue: unknown) {\n super(type, target)\n this.attrName = attrName\n this.oldValue = oldValue\n this.newValue = newValue\n }\n\n}\n\n// 额外派发的属性事件\nexport const extraPropertyEventMap: IStringMap = {\n scrollX: SCROLL,\n scrollY: SCROLL\n}","import { IImageEvent, IObject, ILeaferImage } from '@leafer/interface'\n\nimport { Event } from './Event'\n\nexport class ImageEvent extends Event implements IImageEvent {\n\n static LOAD = 'image.load'\n static LOADED = 'image.loaded'\n static ERROR = 'image.error'\n\n readonly image: ILeaferImage\n readonly error: string | IObject\n\n readonly attrName: string\n readonly attrValue: IObject\n\n constructor(type: string, data: IImageEvent) {\n super(type)\n Object.assign(this, data)\n }\n\n}","import { IBoundsEvent, IEventTarget, ILeaf, IObject } from '@leafer/interface'\n\nimport { Event } from './Event'\n\n\nexport class BoundsEvent extends Event implements IBoundsEvent {\n\n static RESIZE = 'bounds.resize'\n\n static INNER = 'bounds.inner'\n\n static LOCAL = 'bounds.local'\n\n static WORLD = 'bounds.world'\n\n\n static checkHas(leaf: IEventTarget, type: string, mode: 'on' | 'off') {\n if (mode === 'on') {\n type === WORLD ? leaf.__hasWorldEvent = true : leaf.__hasLocalEvent = true\n } else {\n leaf.__hasLocalEvent = leaf.hasEvent(RESIZE) || leaf.hasEvent(INNER) || leaf.hasEvent(LOCAL)\n leaf.__hasWorldEvent = leaf.hasEvent(WORLD)\n }\n }\n\n static emitLocal(leaf: ILeaf) {\n if (leaf.leaferIsReady) {\n const { resized } = leaf.__layout\n if (resized !== 'local') {\n leaf.emit(RESIZE, leaf) // inner / scale\n if (resized === 'inner') leaf.emit(INNER, leaf)\n }\n leaf.emit(LOCAL, leaf)\n }\n }\n\n static emitWorld(leaf: ILeaf) {\n if (leaf.leaferIsReady) leaf.emit(WORLD, this)\n }\n\n}\n\nconst { RESIZE, INNER, LOCAL, WORLD } = BoundsEvent\n\n\nexport const boundsEventMap: IObject = {};\n\n[RESIZE, INNER, LOCAL, WORLD].forEach(key => boundsEventMap[key] = 1)","import { ILeaf, INumberMap, IResizeEvent, IScreenSizeData } from '@leafer/interface'\nimport { isObject, isUndefined } from '@leafer/data'\n\nimport { Event } from './Event'\n\n\nexport class ResizeEvent extends Event implements IResizeEvent {\n\n static RESIZE: string = 'resize'\n\n static resizingKeys: INumberMap // resize编辑中的元素 LeafList 键表\n\n readonly width: number\n readonly height: number\n readonly pixelRatio: number\n\n public get bigger(): boolean {\n if (!this.old) return true\n const { width, height } = this.old\n return this.width >= width && this.height >= height\n }\n\n public get smaller(): boolean {\n return !this.bigger\n }\n\n public get samePixelRatio(): boolean {\n if (!this.old) return true\n return this.pixelRatio === this.old.pixelRatio\n }\n\n readonly old: IScreenSizeData\n\n constructor(size: IScreenSizeData | string, oldSize?: IScreenSizeData) {\n if (isObject(size)) {\n super(ResizeEvent.RESIZE)\n Object.assign(this, size)\n } else {\n super(size)\n }\n this.old = oldSize\n }\n\n static isResizing(leaf: ILeaf): boolean {\n return this.resizingKeys && !isUndefined(this.resizingKeys[leaf.innerId])\n }\n\n}","import { IWatchEvent, IWatchEventData } from '@leafer/interface'\n\nimport { Event } from './Event'\n\n\nexport class WatchEvent extends Event implements IWatchEvent {\n\n static REQUEST = 'watch.request'\n static DATA = 'watch.data'\n\n readonly data: IWatchEventData\n\n constructor(type: string, data?: IWatchEventData) {\n super(type)\n this.data = data\n }\n\n}","import { ILayoutEvent, ILayoutBlockData } from '@leafer/interface'\n\nimport { Event } from './Event'\n\n\nexport class LayoutEvent extends Event implements ILayoutEvent {\n\n static REQUEST = 'layout.request'\n\n static START = 'layout.start'\n\n static BEFORE = 'layout.before'\n static LAYOUT = 'layout'\n static AFTER = 'layout.after'\n\n static AGAIN = 'layout.again'\n\n static END = 'layout.end'\n\n readonly data: ILayoutBlockData[]\n readonly times: number\n\n constructor(type: string, data?: ILayoutBlockData[], times?: number) {\n super(type)\n if (data) {\n this.data = data\n this.times = times\n }\n\n }\n\n}","import { IBounds, IRenderEvent, IRenderOptions } from '@leafer/interface'\n\nimport { Event } from './Event'\n\n\nexport class RenderEvent extends Event implements IRenderEvent {\n\n static REQUEST = 'render.request'\n\n static CHILD_START = 'render.child_start' // app 专用\n static CHILD_END = 'render.child_end'\n\n static START = 'render.start'\n\n static BEFORE = 'render.before'\n static RENDER = 'render'\n static AFTER = 'render.after'\n\n static AGAIN = 'render.again'\n\n static END = 'render.end'\n\n static NEXT = 'render.next'\n\n readonly renderBounds: IBounds\n readonly renderOptions: IRenderOptions\n readonly times: number\n\n constructor(type: string, times?: number, bounds?: IBounds, options?: IRenderOptions) {\n super(type)\n if (times) this.times = times\n if (bounds) {\n this.renderBounds = bounds\n this.renderOptions = options\n }\n }\n\n}","import { ILeaferEvent, IStringMap } from '@leafer/interface'\n\nimport { Event } from './Event'\n\n\nexport class LeaferEvent extends Event implements ILeaferEvent {\n\n static START = 'leafer.start'\n\n static BEFORE_READY = 'leafer.before_ready'\n static READY = 'leafer.ready'\n static AFTER_READY = 'leafer.after_ready'\n\n static VIEW_READY = 'leafer.view_ready'\n\n static VIEW_COMPLETED = 'leafer.view_completed'\n\n static STOP = 'leafer.stop'\n static RESTART = 'leafer.restart'\n\n static END = 'leafer.end'\n\n static UPDATE_MODE = 'leafer.update_mode'\n\n // 变换操作\n static TRANSFORM = 'leafer.transform'\n static MOVE = 'leafer.move'\n static SCALE = 'leafer.scale'\n static ROTATE = 'leafer.rotate'\n static SKEW = 'leafer.skew'\n}\n\n\nconst { MOVE, SCALE, ROTATE, SKEW } = LeaferEvent\n\nexport const leaferTransformAttrMap: IStringMap = {\n x: MOVE,\n y: MOVE,\n scaleX: SCALE,\n scaleY: SCALE,\n rotation: ROTATE,\n skewX: SKEW,\n skewY: SKEW\n}","import { IEventListener, IEventListenerMap, IEventListenerItem, IEventListenerId, IEvent, IObject, IEventTarget, IEventOption, IEventer, IEventParamsMap, InnerId, IEventParams, IFunction } from '@leafer/interface'\nimport { EventCreator } from '@leafer/platform'\nimport { isArray, isObject, isString, isUndefined } from '@leafer/data'\n\nimport { BoundsEvent, boundsEventMap } from './BoundsEvent'\n\n\nconst empty = {}\n\n\nexport class Eventer implements IEventer {\n\n public readonly innerId: InnerId\n\n public __captureMap?: IEventListenerMap\n\n public __bubbleMap?: IEventListenerMap\n\n public __hasLocalEvent?: boolean\n public __hasWorldEvent?: boolean\n\n public syncEventer?: IEventer\n\n public set event(map: IEventParamsMap) { this.on(map) }\n\n\n public on(type: string | string[] | IEventParams[] | IEventParamsMap, listener?: IEventListener, options?: IEventOption): void {\n\n if (!listener) {\n let event: IFunction | [IFunction, IEventOption]\n if (isArray(type)) (type as IEventParams[]).forEach(item => this.on(item[0], item[1], item[2]))\n else for (let key in type as IEventParamsMap) isArray(event = (type as IEventParamsMap)[key]) ? this.on(key, event[0], event[1]) : this.on(key, event)\n return\n }\n\n let capture: boolean, once: boolean\n if (options) {\n if (options === 'once') {\n once = true\n } else if (typeof options === 'boolean') {\n capture = options\n } else {\n capture = options.capture\n once = options.once\n }\n }\n\n let events: IEventListenerItem[]\n const map = __getListenerMap(this, capture, true)\n const typeList = isString(type) ? type.split(' ') : type as string[]\n const item = once ? { listener, once } : { listener }\n\n typeList.forEach(type => {\n if (type) {\n events = map[type]\n if (events) {\n if (events.findIndex(item => item.listener === listener) === -1) events.push(item)\n } else {\n map[type] = [item]\n }\n\n if (boundsEventMap[type]) BoundsEvent.checkHas(this, type, 'on')\n }\n })\n }\n\n public off(type?: string | string[], listener?: IEventListener, options?: IEventOption): void {\n if (type) {\n\n const typeList = isString(type) ? type.split(' ') : type\n\n if (listener) {\n\n let capture: boolean\n if (options) capture = typeof options === 'boolean' ? options : (options === 'once' ? false : options.capture)\n\n let events: IEventListenerItem[], index: number\n const map = __getListenerMap(this, capture)\n\n typeList.forEach(type => {\n if (type) {\n events = map[type]\n if (events) {\n index = events.findIndex(item => item.listener === listener)\n if (index > -1) events.splice(index, 1)\n if (!events.length) delete map[type]\n if (boundsEventMap[type]) BoundsEvent.checkHas(this, type, 'off')\n }\n }\n })\n\n } else {\n\n // off type\n const { __bubbleMap: b, __captureMap: c } = this\n typeList.forEach(type => {\n if (b) delete b[type]\n if (c) delete c[type]\n })\n\n }\n\n } else {\n\n this.__bubbleMap = this.__captureMap = undefined // off all\n\n }\n\n }\n\n public on_(type: string | string[] | IEventParams[], listener?: IEventListener, bind?: IObject, options?: IEventOption): IEventListenerId {\n if (!listener) isArray(type) && (type as IEventParams[]).forEach(item => this.on(item[0], item[2] ? item[1] = item[1].bind(item[2]) : item[1], item[3]))\n else this.on(type, bind ? listener = listener.bind(bind) : listener, options)\n return { type, current: this as any, listener, options }\n }\n\n public off_(id: IEventListenerId | IEventListenerId[]): void {\n if (!id) return\n const list = isArray(id) ? id : [id]\n list.forEach(item => {\n if (item) {\n if (!item.listener) isArray(item.type) && (item.type as IEventParams[]).forEach(v => item.current.off(v[0], v[1], v[3]))\n else item.current.off(item.type as string | string[], item.listener, item.options)\n }\n })\n list.length = 0\n }\n\n public once(type: string | string[] | IEventParams[], listener?: IEventListener, captureOrBind?: boolean | IObject, capture?: boolean): void {\n if (!listener) return isArray(type) && (type as IEventParams[]).forEach(item => this.once(item[0], item[1], item[2], item[3]))\n if (isObject(captureOrBind)) listener = listener.bind(captureOrBind)\n else capture = captureOrBind\n this.on(type, listener, { once: true, capture })\n }\n\n public emit(type: string, event?: IEvent | IObject, capture?: boolean): void {\n if (!event && EventCreator.has(type)) event = EventCreator.get(type, { type, target: this, current: this } as IEvent)\n\n const map = __getListenerMap(this, capture)\n const list = map[type]\n if (list) {\n let item: IEventListenerItem\n for (let i = 0, len = list.length; i < len; i++) {\n if (item = list[i]) { // 防止 list 变化造成的空值\n item.listener(event)\n if (item.once) {\n this.off(type, item.listener, capture)\n i--, len--\n }\n if (event && event.isStopNow) break\n }\n }\n }\n\n this.syncEventer && this.syncEventer.emitEvent(event, capture)\n }\n\n public emitEvent(event: IEvent, capture?: boolean): void {\n event.current = this\n this.emit(event.type, event, capture)\n }\n\n public hasEvent(type: string, capture?: boolean): boolean {\n if (this.syncEventer && this.syncEventer.hasEvent(type, capture)) return true\n\n const { __bubbleMap: b, __captureMap: c } = this\n const hasB = b && b[type], hasC = c && c[type]\n return !!(isUndefined(capture) ? (hasB || hasC) : (capture ? hasC : hasB))\n }\n\n public destroy(): void {\n this.__captureMap = this.__bubbleMap = this.syncEventer = null\n }\n}\n\n\nfunction __getListenerMap(eventer: IEventTarget, capture?: boolean, create?: boolean): IEventListenerMap {\n if (capture) {\n\n const { __captureMap: c } = eventer\n if (c) {\n return c\n } else {\n return create ? eventer.__captureMap = {} : empty\n }\n\n } else {\n\n const { __bubbleMap: b } = eventer\n if (b) {\n return b\n } else {\n return create ? eventer.__bubbleMap = {} : empty\n }\n\n }\n}","import { ILeafEventerModule } from '@leafer/interface'\nimport { Eventer } from '@leafer/event'\n\nconst { on, on_, off, off_, once, emit, emitEvent, hasEvent, destroy } = Eventer.prototype\n\nexport const LeafEventer: ILeafEventerModule = { on, on_, off, off_, once, emit, emitEvent, hasEvent, destroyEventer: destroy }","import { ILeafDataProxyModule, IObject, IValue } from '@leafer/interface'\nimport { PropertyEvent, extraPropertyEventMap, LeaferEvent, leaferTransformAttrMap } from '@leafer/event'\nimport { isObject, isFinite, isUndefined } from '@leafer/data'\nimport { Debug } from '@leafer/debug'\n\n\nconst debug = Debug.get('setAttr')\n\nexport const LeafDataProxy: ILeafDataProxyModule = {\n\n __setAttr(name: string, newValue: IValue, checkFiniteNumber?: boolean): boolean {\n if (this.leaferIsCreated) {\n\n const oldValue = this.__.__getInput(name)\n\n if (checkFiniteNumber && !isFinite(newValue) && !isUndefined(newValue)) { // 警告 NaN、Infinity、-Infinity、null、非有效数字\n debug.warn(this.innerName, name, newValue)\n newValue = undefined // must\n }\n\n if (isObject(newValue) || oldValue !== newValue) {\n\n this.__realSetAttr(name, newValue)\n\n if (this.isLeafer) {\n this.emitEvent(new PropertyEvent(PropertyEvent.LEAFER_CHANGE, this, name, oldValue, newValue))\n\n const transformEventName = leaferTransformAttrMap[name]\n if (transformEventName) {\n this.emitEvent(new LeaferEvent(transformEventName, this))\n this.emitEvent(new LeaferEvent(LeaferEvent.TRANSFORM, this))\n }\n }\n\n this.emitPropertyEvent(PropertyEvent.CHANGE, name, oldValue, newValue)\n\n const extraPropertyEvent = extraPropertyEventMap[name]\n if (extraPropertyEvent) this.emitPropertyEvent(extraPropertyEvent, name, oldValue, newValue)\n\n return true\n } else {\n return false\n }\n\n } else {\n\n this.__realSetAttr(name, newValue)\n\n return true\n\n }\n },\n\n emitPropertyEvent(type: string, name: string, oldValue: unknown, newValue: unknown): void {\n const event = new PropertyEvent(type, this, name, oldValue, newValue)\n this.isLeafer || (this.hasEvent(type) && this.emitEvent(event))\n this.leafer.emitEvent(event)\n },\n\n __realSetAttr(name: string, newValue: IValue): void {\n const data = this.__ as IObject\n data[name] = newValue\n if (this.__proxyData) this.setProxyAttr(name, newValue)\n if (data.normalStyle) this.lockNormalStyle || isUndefined(data.normalStyle[name]) || (data.normalStyle[name] = newValue)\n },\n\n\n __getAttr(name: string): IValue {\n if (this.__proxyData) return this.getProxyAttr(name)\n return this.__.__get(name)\n }\n}","import { ILeafMatrixModule, ILayoutData } from '@leafer/interface'\nimport { AroundHelper, MatrixHelper } from '@leafer/math'\n\n\nconst { setLayout, multiplyParent, translateInner, defaultWorld } = MatrixHelper\nconst { toPoint, tempPoint } = AroundHelper\n\nexport const LeafMatrix: ILeafMatrixModule = {\n\n __updateWorldMatrix(): void {\n\n const { parent, __layout, __world, __scrollWorld, __ } = this\n multiplyParent(this.__local || __layout, parent ? (parent.__scrollWorld || parent.__world) : defaultWorld, __world, !!__layout.affectScaleOrRotation, __ as ILayoutData)\n\n if (__scrollWorld) translateInner(Object.assign(__scrollWorld, __world), __.scrollX, __.scrollY)\n },\n\n __updateLocalMatrix(): void {\n\n if (this.__local) {\n\n const layout = this.__layout, local = this.__local, data = this.__\n\n if (layout.affectScaleOrRotation) {\n\n if ((layout.scaleChanged && (layout.resized || (layout.resized = 'scale'))) || layout.rotationChanged) {\n setLayout(local, data as ILayoutData, null, null, layout.affectRotation)\n layout.scaleChanged = layout.rotationChanged = undefined\n }\n\n }\n\n local.e = data.x + data.offsetX\n local.f = data.y + data.offsetY\n\n if (data.around || data.origin) {\n toPoint(data.around || data.origin, layout.boxBounds, tempPoint)\n translateInner(local, -tempPoint.x, -tempPoint.y, !data.around)\n }\n\n }\n\n this.__layout.matrixChanged = undefined\n\n }\n\n}\n\n\n","import { ILeafBoundsModule, IBoundsData } from '@leafer/interface'\nimport { BoundsHelper } from '@leafer/math'\nimport { PathBounds } from '@leafer/path'\nimport { BranchHelper, LeafHelper } from '@leafer/helper'\nimport { BoundsEvent } from '@leafer/event'\n\n\nconst { updateMatrix, updateAllMatrix } = LeafHelper\nconst { updateBounds } = BranchHelper\nconst { toOuterOf, copyAndSpread, copy } = BoundsHelper\nconst { toBounds } = PathBounds\n\nexport const LeafBounds: ILeafBoundsModule = {\n\n __updateWorldBounds(): void {\n\n const layout = this.__layout\n\n toOuterOf(layout.renderBounds, this.__world, this.__world)\n\n if (layout.resized) {\n if (layout.resized === 'inner') this.__onUpdateSize() // scale变化不用更新\n if (this.__hasLocalEvent) BoundsEvent.emitLocal(this)\n layout.resized = undefined\n }\n\n if (this.__hasWorldEvent) BoundsEvent.emitWorld(this)\n\n },\n\n __updateLocalBounds(): void {\n\n const layout = this.__layout\n\n if (layout.boxChanged) {\n\n if (!this.__.__pathInputed) this.__updatePath()\n this.__updateRenderPath()\n\n this.__updateBoxBounds()\n layout.resized = 'inner'\n }\n\n\n if (layout.localBoxChanged) { // position change\n\n if (this.__local) this.__updateLocalBoxBounds()\n layout.localBoxChanged = undefined\n\n if (layout.strokeSpread) layout.strokeChanged = true\n if (layout.renderSpread) layout.renderChanged = true\n if (this.parent) this.parent.__layout.boxChange()\n }\n\n\n layout.boxChanged = undefined // must after updateLocalBoxBounds()\n\n\n if (layout.strokeChanged) {\n\n layout.strokeSpread = this.__updateStrokeSpread()\n\n if (layout.strokeSpread) {\n\n if (layout.strokeBounds === layout.boxBounds) layout.spreadStroke()\n\n this.__updateStrokeBounds()\n this.__updateLocalStrokeBounds()\n\n } else {\n layout.spreadStrokeCancel()\n }\n\n layout.strokeChanged = undefined\n if (layout.renderSpread || layout.strokeSpread !== layout.strokeBoxSpread) layout.renderChanged = true\n\n if (this.parent) this.parent.__layout.strokeChange()\n layout.resized = 'inner'\n }\n\n\n if (layout.renderChanged) {\n\n layout.renderSpread = this.__updateRenderSpread()\n\n if (layout.renderSpread) {\n\n if (layout.renderBounds === layout.boxBounds || layout.renderBounds === layout.strokeBounds) layout.spreadRender()\n\n this.__updateRenderBounds()\n this.__updateLocalRenderBounds()\n\n } else {\n layout.spreadRenderCancel()\n }\n\n layout.renderChanged = undefined\n\n if (this.parent) this.parent.__layout.renderChange()\n }\n\n layout.resized || (layout.resized = 'local')\n layout.boundsChanged = undefined\n\n },\n\n __updateLocalBoxBounds(): void {\n if (this.__hasMotionPath) this.__updateMotionPath()\n if (this.__hasAutoLayout) this.__updateAutoLayout() // origin / around / flow\n toOuterOf(this.__layout.boxBounds, this.__local, this.__local)\n },\n\n __updateLocalStrokeBounds(): void {\n toOuterOf(this.__layout.strokeBounds, this.__localMatrix, this.__layout.localStrokeBounds)\n },\n\n __updateLocalRenderBounds(): void {\n toOuterOf(this.__layout.renderBounds, this.__localMatrix, this.__layout.localRenderBounds)\n },\n\n\n __updateBoxBounds(_secondLayout?: boolean, _bounds?: IBoundsData): void {\n const b = this.__layout.boxBounds\n const data = this.__\n if (data.__usePathBox) {\n toBounds(data.path, b)\n } else {\n b.x = 0\n b.y = 0\n b.width = data.width\n b.height = data.height\n }\n },\n\n\n __updateAutoLayout(): void {\n this.__layout.matrixChanged = true\n if (this.isBranch) {\n\n this.__extraUpdate()\n\n if (this.__.flow) {\n\n if (this.__layout.boxChanged) this.__updateFlowLayout()\n\n updateAllMatrix(this)\n updateBounds(this, this)\n\n if (this.__.__autoSide) this.__updateBoxBounds(true)\n\n } else {\n\n updateAllMatrix(this)\n updateBounds(this, this)\n\n }\n\n } else {\n updateMatrix(this)\n }\n },\n\n __updateNaturalSize(): void {\n const { __: data, __layout: layout } = this\n data.__naturalWidth = layout.boxBounds.width\n data.__naturalHeight = layout.boxBounds.height\n },\n\n __updateStrokeBounds(_bounds?: IBoundsData): void {\n const layout = this.__layout\n copyAndSpread(layout.strokeBounds, layout.boxBounds, layout.strokeBoxSpread)\n },\n\n __updateRenderBounds(_bounds?: IBoundsData): void {\n const layout = this.__layout\n layout.renderSpread > 0 ? copyAndSpread(layout.renderBounds, layout.boxBounds, layout.renderSpread) : copy(layout.renderBounds, layout.strokeBounds) // Box use -1\n }\n\n}","import { ILeaferCanvas, IRenderOptions, ILeafRenderModule } from '@leafer/interface'\nimport { LeafHelper } from '@leafer/helper'\nimport { Debug } from '@leafer/debug'\n\n\nexport const LeafRender: ILeafRenderModule = {\n\n __render(canvas: ILeaferCanvas, options: IRenderOptions): void {\n\n if (options.shape) return this.__renderShape(canvas, options)\n\n if (this.__worldOpacity) {\n\n const data = this.__\n\n if (data.bright && !options.topRendering) return options.topList.add(this)\n\n canvas.setWorld(this.__nowWorld = this.__getNowWorld(options))\n canvas.opacity = options.dimOpacity && !data.dimskip ? data.opacity * options.dimOpacity : data.opacity\n\n if (this.__.__single) {\n\n if (data.eraser === 'path') return this.__renderEraser(canvas, options)\n\n const tempCanvas = canvas.getSameCanvas(true, true)\n this.__draw(tempCanvas, options, canvas)\n\n LeafHelper.copyCanvasByWorld(this, canvas, tempCanvas, this.__nowWorld, data.__blendMode, true)\n\n tempCanvas.recycle(this.__nowWorld)\n\n } else {\n\n this.__draw(canvas, options)\n\n }\n\n if (Debug.showBounds) Debug.drawBounds(this, canvas, options)\n\n }\n },\n\n __renderShape(canvas: ILeaferCanvas, options: IRenderOptions): void {\n if (this.__worldOpacity) {\n canvas.setWorld(this.__nowWorld = this.__getNowWorld(options))\n\n this.__drawShape(canvas, options)\n }\n },\n\n __clip(canvas: ILeaferCanvas, options: IRenderOptions): void {\n if (this.__worldOpacity) {\n canvas.setWorld(this.__nowWorld = this.__getNowWorld(options))\n this.__drawRenderPath(canvas)\n canvas.clipUI(this)\n }\n },\n\n __updateWorldOpacity(): void {\n this.__worldOpacity = this.__.visible ? (this.parent ? this.parent.__worldOpacity * this.__.opacity : this.__.opacity) : 0\n if (this.__layout.opacityChanged) this.__layout.opacityChanged = false\n }\n\n}","import { LeafBoundsHelper } from '@leafer/helper'\nimport { ILeaferCanvas, IRenderOptions, IBranchRenderModule } from '@leafer/interface'\n\n\nconst { excludeRenderBounds } = LeafBoundsHelper\n\nexport const BranchRender: IBranchRenderModule = {\n\n __updateChange(): void {\n const { __layout: layout } = this\n if (layout.childrenSortChanged) {\n this.__updateSortChildren()\n layout.childrenSortChanged = false\n }\n\n this.__.__checkSingle()\n },\n\n\n __render(canvas: ILeaferCanvas, options: IRenderOptions): void {\n\n this.__nowWorld = this.__getNowWorld(options)\n\n if (this.__worldOpacity) {\n\n const data = this.__\n\n if (data.__useDim) {\n if (data.dim) options.dimOpacity = data.dim === true ? 0.2 : data.dim\n else if (data.bright && !options.topRendering) return options.topList.add(this)\n else if (data.dimskip) options.dimOpacity && (options.dimOpacity = 0)\n }\n\n if (data.__single && !this.isBranchLeaf) { // Frame / Box 不能走 single 逻辑渲染组,需用 drawAfterFill 渲染成一个整体, 关联设置 BoxData.__drawAfterFill\n\n if (data.eraser === 'path') return this.__renderEraser(canvas, options)\n\n const tempCanvas = canvas.getSameCanvas(false, true)\n\n this.__renderBranch(tempCanvas, options)\n\n const nowWorld = this.__nowWorld\n\n canvas.opacity = options.dimOpacity ? data.opacity * options.dimOpacity : data.opacity\n canvas.copyWorldByReset(tempCanvas, nowWorld, nowWorld, data.__blendMode, true)\n\n tempCanvas.recycle(nowWorld)\n\n } else {\n\n this.__renderBranch(canvas, options)\n\n }\n\n }\n\n },\n\n __renderBranch(canvas: ILeaferCanvas, options: IRenderOptions): void {\n if (this.__hasMask) {\n\n this.__renderMask(canvas, options)\n\n } else {\n\n const { children } = this\n for (let i = 0, len = children.length; i < len; i++) {\n excludeRenderBounds(children[i], options) || children[i].__render(canvas, options)\n }\n\n }\n },\n\n\n __clip(canvas: ILeaferCanvas, options: IRenderOptions): void {\n if (this.__worldOpacity) {\n const { children } = this\n for (let i = 0, len = children.length; i < len; i++) {\n excludeRenderBounds(children[i], options) || children[i].__clip(canvas, options)\n }\n }\n }\n}","import { ILeaferBase, ILeaf, ILeafInputData, ILeafData, ILeaferCanvas, IRenderOptions, IBoundsType, ILocationType, IMatrixWithBoundsData, ILayoutBoundsData, IValue, ILeafLayout, InnerId, IHitCanvas, IRadiusPointData, IEventListenerMap, IEventListener, IEventListenerId, IEvent, IObject, IFunction, IPointData, IBoundsData, IBranch, IFindMethod, IMatrixData, IAttrDecorator, IMatrixWithBoundsScaleData, IMatrixWithScaleData, IAlign, IJSONOptions, IEventParamsMap, IEventOption, IAxis, IMotionPathData, IUnitData, IRotationPointData, ITransition, IValueFunction, IEventParams, IScaleData, IScaleFixed } from '@leafer/interface'\nimport { BoundsHelper, IncrementId, MatrixHelper, PointHelper } from '@leafer/math'\nimport { LeafData, isUndefined } from '@leafer/data'\nimport { LeafLayout } from '@leafer/layout'\nimport { LeafDataProxy, LeafMatrix, LeafBounds, LeafEventer, LeafRender } from '@leafer/display-module'\nimport { boundsType, useModule, defineDataProcessor } from '@leafer/decorator'\nimport { LeafHelper } from '@leafer/helper'\nimport { ChildEvent } from '@leafer/event'\nimport { ImageManager } from '@leafer/image'\nimport { Plugin } from '@leafer/debug'\n\n\nconst tempScaleData = {} as IScaleData\nconst { LEAF, create } = IncrementId\nconst { toInnerPoint, toOuterPoint, multiplyParent } = MatrixHelper\nconst { toOuterOf } = BoundsHelper\nconst { copy, move } = PointHelper\nconst { moveLocal, zoomOfLocal, rotateOfLocal, skewOfLocal, moveWorld, zoomOfWorld, rotateOfWorld, skewOfWorld, transform, transformWorld, setTransform, getFlipTransform, getLocalOrigin, getRelativeWorld, drop } = LeafHelper\n\n@useModule(LeafDataProxy)\n@useModule(LeafMatrix)\n@useModule(LeafBounds)\n@useModule(LeafEventer)\n@useModule(LeafRender)\nexport class Leaf<TInputData = ILeafInputData> implements ILeaf {\n\n public get tag(): string { return this.__tag }\n public set tag(_value: string) { }\n\n public get __tag(): string { return 'Leaf' }\n\n public readonly innerId: InnerId // 内部唯一标识\n public get innerName(): string { return this.__.name || this.tag + this.innerId }\n\n public get __DataProcessor() { return LeafData }\n public get __LayoutProcessor() { return LeafLayout }\n\n public leafer?: ILeaferBase\n public parent?: ILeaf\n\n public get leaferIsCreated(): boolean { return this.leafer && this.leafer.created }\n public get leaferIsReady(): boolean { return this.leafer && this.leafer.ready }\n\n public get isLeafer(): boolean { return false }\n public get isBranch(): boolean { return false }\n public get isBranchLeaf(): boolean { return false }\n\n public syncEventer?: ILeaf // 同步触发一样事件的元素\n public lockNormalStyle?: boolean\n\n public __: ILeafData\n public __layout: ILeafLayout\n\n public __world: IMatrixWithBoundsScaleData\n public __local?: IMatrixWithBoundsData // and localStrokeBounds? localRenderBounds?\n\n public __nowWorld?: IMatrixWithBoundsScaleData // use __world or __cameraWorld render\n public __cameraWorld?: IMatrixWithBoundsScaleData // use camera matrix render \n\n public get __localMatrix(): IMatrixData { return this.__local || this.__layout }\n public get __localBoxBounds(): IBoundsData { return this.__local || this.__layout }\n\n public __worldOpacity: number\n\n // now transform\n public get worldTransform(): IMatrixWithScaleData { return this.__layout.getTransform('world') as IMatrixWithScaleData }\n public get localTransform(): IMatrixData { return this.__layout.getTransform('local') }\n\n public __scrollWorld?: IMatrixWithBoundsScaleData\n public get scrollWorldTransform(): IMatrixWithScaleData { this.updateLayout(); return this.__scrollWorld || this.__world }\n\n // now bounds\n public get boxBounds(): IBoundsData { return this.getBounds('box', 'inner') }\n public get renderBounds(): IBoundsData { return this.getBounds('render', 'inner') }\n public get worldBoxBounds(): IBoundsData { return this.getBounds('box') }\n public get worldStrokeBounds(): IBoundsData { return this.getBounds('stroke') }\n public get worldRenderBounds(): IBoundsData { return this.getBounds('render') }\n\n // now opacity\n public get worldOpacity(): number { this.updateLayout(); return this.__worldOpacity }\n\n public __level: number // layer level 0 -> branch -> branch -> deep\n public __tempNumber: number // temp sort\n\n public get __worldFlipped(): boolean { return this.__world.scaleX < 0 || this.__world.scaleY < 0 }\n\n public __hasAutoLayout?: boolean\n public __hasMask?: boolean\n public __hasEraser?: boolean\n public __hitCanvas?: IHitCanvas\n\n public get __onlyHitMask(): boolean { return this.__hasMask && !this.__.hitChildren }\n public get __ignoreHitWorld(): boolean { return (this.__hasMask || this.__hasEraser) && this.__.hitChildren }\n public get __inLazyBounds(): boolean { return this.leaferIsCreated && this.leafer.lazyBounds.hit(this.__world) }\n\n public get pathInputed(): boolean { return this.__.__pathInputed as unknown as boolean }\n\n // event\n public set event(map: IEventParamsMap) { this.on(map) }\n\n public __captureMap?: IEventListenerMap\n public __bubbleMap?: IEventListenerMap\n\n public __hasLocalEvent?: boolean\n public __hasWorldEvent?: boolean\n\n // branch \n public children?: ILeaf[]\n public topChildren?: ILeaf[]\n\n public destroyed: boolean\n\n\n constructor(data?: TInputData) {\n this.innerId = create(LEAF)\n this.reset(data)\n if (this.__bubbleMap) this.__emitLifeEvent(ChildEvent.CREATED)\n }\n\n\n public reset(data?: ILeafInputData): void {\n if (this.leafer) this.leafer.forceRender(this.__world) // fix: add old bounds rendering\n\n if (data as any !== 0) { // 设为 0 时可用于 text boxStyle 节省开销\n this.__world = { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0, x: 0, y: 0, width: 0, height: 0, scaleX: 1, scaleY: 1 }\n if (data !== null) this.__local = { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0, x: 0, y: 0, width: 0, height: 0 }\n }\n\n this.__worldOpacity = 1\n\n this.__ = new this.__DataProcessor(this)\n this.__layout = new this.__LayoutProcessor(this)\n\n if (this.__level) this.resetCustom()\n if (data) {\n if ((data as ILeaf).__) data = (data as ILeaf).toJSON()\n data.children ? this.set(data) : Object.assign(this, data)\n }\n }\n\n public resetCustom(): void {\n this.__hasMask = this.__hasEraser = null\n this.forceUpdate()\n }\n\n\n public waitParent(item: IFunction, bind?: IObject): void {\n if (bind) item = item.bind(bind)\n this.parent ? item() : this.on(ChildEvent.ADD, item, 'once')\n }\n\n public waitLeafer(item: IFunction, bind?: IObject): void {\n if (bind) item = item.bind(bind)\n this.leafer ? item() : this.on(ChildEvent.MOUNTED, item, 'once')\n }\n\n public nextRender(item: IFunction, bind?: IObject, off?: 'off'): void {\n this.leafer ? this.leafer.nextRender(item, bind, off) : this.waitLeafer(() => this.leafer.nextRender(item, bind, off))\n }\n\n public removeNextRender(item: IFunction): void {\n this.nextRender(item, null, 'off')\n }\n\n public __bindLeafer(leafer: ILeaferBase | null): void {\n if (this.isLeafer && leafer !== null) leafer = this as unknown as ILeaferBase\n\n if (this.leafer && !leafer) this.leafer.leafs--\n\n this.leafer = leafer\n\n if (leafer) {\n leafer.leafs++\n this.__level = this.parent ? this.parent.__level + 1 : 1\n if ((this as ILeaf).animation) this.__runAnimation('in')\n if (this.__bubbleMap) this.__emitLifeEvent(ChildEvent.MOUNTED)\n } else {\n this.__emitLifeEvent(ChildEvent.UNMOUNTED)\n }\n\n if (this.isBranch) {\n const { children } = this\n for (let i = 0, len = children.length; i < len; i++) {\n children[i].__bindLeafer(leafer)\n }\n }\n }\n\n // data\n\n public set(_data: IObject, _isTemp?: boolean): void { }\n public get(_name?: string): ILeafInputData | IValue { return undefined }\n\n public setAttr(name: string, value: any): void { (this as IObject)[name] = value }\n public getAttr(name: string): any { return (this as IObject)[name] }\n\n public getComputedAttr(name: string): any { return (this.__ as IObject)[name] }\n\n public toJSON(options?: IJSONOptions): IObject {\n if (options) this.__layout.update()\n return this.__.__getInputData(null, options)\n }\n\n public toString(options?: IJSONOptions): string {\n return JSON.stringify(this.toJSON(options))\n }\n\n public toSVG(): string { return undefined }\n\n public __SVG(_data: IObject): void { }\n\n public toHTML(): string { return undefined }\n\n // LeafDataProxy rewrite\n\n public __setAttr(_attrName: string, _newValue: IValue): boolean { return true }\n\n public __getAttr(_attrName: string): IValue { return undefined }\n\n public setProxyAttr(_attrName: string, _newValue: IValue): void { }\n\n public getProxyAttr(_attrName: string): IValue { return undefined }\n\n // ---\n\n\n // find\n\n public find(_condition: number | string | IFindMethod, _options?: any): ILeaf[] { return undefined }\n\n public findTag(_tag: string | string[]): ILeaf[] { return undefined }\n\n public findOne(_condition: number | string | IFindMethod, _options?: any): ILeaf | undefined { return undefined }\n\n public findId(_id: number | string): ILeaf | undefined { return undefined }\n\n // ---\n\n\n // @leafer-in/state rewrite\n\n public focus(_value?: boolean): void { }\n\n public updateState(): void { }\n\n // ---\n\n\n public updateLayout(): void {\n this.__layout.update()\n }\n\n public forceUpdate(attrName?: string): void {\n if (isUndefined(attrName)) attrName = 'width'\n else if (attrName === 'surface') attrName = 'blendMode'\n const value = this.__.__getInput(attrName);\n (this.__ as any)[attrName] = isUndefined(value) ? null : undefined;\n (this as any)[attrName] = value\n }\n\n public forceRender(_bounds?: IBoundsData, _sync?: boolean): void {\n this.forceUpdate('surface')\n }\n\n public __extraUpdate(): void {\n if (this.leaferIsReady) this.leafer.layouter.addExtra(this) // add part 额外更新元素\n }\n\n // LeafMatrix rewrite\n\n public __updateWorldMatrix(): void { }\n\n public __updateLocalMatrix(): void { }\n\n // ---\n\n // LeafBounds rewrite\n\n public __updateWorldBounds(): void { }\n\n public __updateLocalBounds(): void { }\n\n\n public __updateLocalBoxBounds(): void { }\n\n public __updateLocalStrokeBounds(): void { }\n\n public __updateLocalRenderBounds(): void { }\n\n // box\n\n public __updateBoxBounds(_secondLayout?: boolean, _bounds?: IBoundsData): void { }\n\n public __updateContentBounds(): void { }\n\n public __updateStrokeBounds(_bounds?: IBoundsData): void { }\n\n public __updateRenderBounds(_bounds?: IBoundsData): void { }\n\n\n public __updateAutoLayout(): void { }\n\n public __updateFlowLayout(): void { }\n\n public __updateNaturalSize(): void { }\n\n\n public __updateStrokeSpread(): number { return 0 }\n\n public __updateRenderSpread(): number { return 0 }\n\n public __onUpdateSize(): void { }\n\n // ---\n\n\n public __updateEraser(value?: boolean): void {\n this.__hasEraser = value ? true : this.children.some(item => item.__.eraser)\n }\n\n public __renderEraser(canvas: ILeaferCanvas, options: IRenderOptions): void { // path eraser\n canvas.save()\n this.__clip(canvas, options)\n const { renderBounds: r } = this.__layout\n canvas.clearRect(r.x, r.y, r.width, r.height)\n canvas.restore()\n }\n\n public __updateMask(_value?: boolean): void {\n this.__hasMask = this.children.some(item => item.__.mask && item.__.visible && item.__.opacity)\n }\n\n // LeafMask rewrite\n\n public __renderMask(_canvas: ILeaferCanvas, _options: IRenderOptions): void { }\n\n\n // ---\n\n\n // convert\n\n public __getNowWorld(options: IRenderOptions): IMatrixWithBoundsScaleData {\n if (options.matrix) {\n if (!this.__cameraWorld) this.__cameraWorld = {} as IMatrixWithBoundsScaleData\n const cameraWorld = this.__cameraWorld, world = this.__world\n multiplyParent(world, options.matrix, cameraWorld, undefined, world)\n toOuterOf(this.__layout.renderBounds, cameraWorld, cameraWorld)\n cameraWorld.half !== world.half && (cameraWorld.half = world.half)\n return cameraWorld\n } else {\n return this.__world\n }\n }\n\n public getClampRenderScale(): number {\n let { scaleX } = this.__nowWorld || this.__world\n if (scaleX < 0) scaleX = -scaleX\n return scaleX > 1 ? scaleX : 1\n }\n\n public getRenderScaleData(abs?: boolean, scaleFixed?: IScaleFixed): IScaleData {\n let { scaleX, scaleY } = ImageManager.patternLocked ? this.__world : this.__nowWorld\n if (abs) scaleX < 0 && (scaleX = -scaleX), scaleY < 0 && (scaleY = -scaleY)\n if (scaleFixed === true || (scaleFixed === 'zoom-in' && scaleX > 1 && scaleY > 1)) scaleX = scaleY = 1\n tempScaleData.scaleX = scaleX\n tempScaleData.scaleY = scaleY\n return tempScaleData\n }\n\n public getTransform(relative?: ILocationType | ILeaf): IMatrixData {\n return this.__layout.getTransform(relative || 'local')\n }\n\n\n public getBounds(type?: IBoundsType, relative?: ILocationType | ILeaf): IBoundsData {\n return this.__layout.getBounds(type, relative)\n }\n\n public getLayoutBounds(type?: IBoundsType, relative?: ILocationType | ILeaf, unscale?: boolean): ILayoutBoundsData {\n return this.__layout.getLayoutBounds(type, relative, unscale)\n }\n\n public getLayoutPoints(type?: IBoundsType, relative?: ILocationType | ILeaf): IPointData[] {\n return this.__layout.getLayoutPoints(type, relative)\n }\n\n\n public getWorldBounds(inner: IBoundsData, relative?: ILeaf, change?: boolean): IBoundsData {\n const matrix = relative ? getRelativeWorld(this, relative) : this.worldTransform\n const to = change ? inner : {} as IBoundsData\n toOuterOf(inner, matrix, to)\n return to\n }\n\n\n public worldToLocal(world: IPointData, to?: IPointData, distance?: boolean, relative?: ILeaf): void {\n if (this.parent) {\n this.parent.worldToInner(world, to, distance, relative)\n } else {\n if (to) copy(to, world)\n }\n }\n\n public localToWorld(local: IPointData, to?: IPointData, distance?: boolean, relative?: ILeaf): void {\n if (this.parent) {\n this.parent.innerToWorld(local, to, distance, relative)\n } else {\n if (to) copy(to, local)\n }\n }\n\n public worldToInner(world: IPointData, to?: IPointData, distance?: boolean, relative?: ILeaf): void {\n if (relative) {\n relative.innerToWorld(world, to, distance)\n world = to ? to : world\n }\n toInnerPoint(this.scrollWorldTransform, world, to, distance)\n }\n\n public innerToWorld(inner: IPointData, to?: IPointData, distance?: boolean, relative?: ILeaf): void {\n toOuterPoint(this.scrollWorldTransform, inner, to, distance)\n if (relative) relative.worldToInner(to ? to : inner, null, distance)\n }\n\n // simple\n\n public getBoxPoint(world: IPointData, relative?: ILeaf, distance?: boolean, change?: boolean): IPointData {\n return this.getBoxPointByInner(this.getInnerPoint(world, relative, distance, change), null, null, true)\n }\n\n public getBoxPointByInner(inner: IPointData, _relative?: ILeaf, _distance?: boolean, change?: boolean): IPointData {\n const point = change ? inner : { ...inner } as IPointData, { x, y } = this.boxBounds\n move(point, -x, -y)\n return point\n }\n\n public getInnerPoint(world: IPointData, relative?: ILeaf, distance?: boolean, change?: boolean): IPointData {\n const point = change ? world : {} as IPointData\n this.worldToInner(world, point, distance, relative)\n return point\n }\n\n public getInnerPointByBox(box: IPointData, _relative?: ILeaf, _distance?: boolean, change?: boolean): IPointData {\n const point = change ? box : { ...box } as IPointData, { x, y } = this.boxBounds\n move(point, x, y)\n return point\n }\n\n public getInnerPointByLocal(local: IPointData, _relative?: ILeaf, distance?: boolean, change?: boolean): IPointData {\n return this.getInnerPoint(local, this.parent, distance, change)\n }\n\n public getLocalPoint(world: IPointData, relative?: ILeaf, distance?: boolean, change?: boolean): IPointData {\n const point = change ? world : {} as IPointData\n this.worldToLocal(world, point, distance, relative)\n return point\n }\n\n public getLocalPointByInner(inner: IPointData, _relative?: ILeaf, distance?: boolean, change?: boolean): IPointData {\n return this.getWorldPoint(inner, this.parent, distance, change)\n }\n\n public getPagePoint(world: IPointData, relative?: ILeaf, distance?: boolean, change?: boolean): IPointData {\n const layer = this.leafer ? this.leafer.zoomLayer : this\n return layer.getInnerPoint(world, relative, distance, change)\n }\n\n public getWorldPoint(inner: IPointData, relative?: ILeaf, distance?: boolean, change?: boolean): IPointData {\n const point = change ? inner : {} as IPointData\n this.innerToWorld(inner, point, distance, relative)\n return point\n }\n\n public getWorldPointByBox(box: IPointData, relative?: ILeaf, distance?: boolean, change?: boolean): IPointData {\n return this.getWorldPoint(this.getInnerPointByBox(box, null, null, change), relative, distance, true)\n }\n\n public getWorldPointByLocal(local: IPointData, relative?: ILeaf, distance?: boolean, change?: boolean): IPointData {\n const point = change ? local : {} as IPointData\n this.localToWorld(local, point, distance, relative)\n return point\n }\n\n public getWorldPointByPage(page: IPointData, relative?: ILeaf, distance?: boolean, change?: boolean): IPointData {\n const layer = this.leafer ? this.leafer.zoomLayer : this\n return layer.getWorldPoint(page, relative, distance, change)\n }\n\n\n // transform \n\n public setTransform(matrix: IMatrixData, resize?: boolean, transition?: ITransition): void {\n setTransform(this, matrix, resize, transition)\n }\n\n public transform(matrix: IMatrixData, resize?: boolean, transition?: ITransition): void {\n transform(this, matrix, resize, transition)\n }\n\n public move(x: number | IPointData, y?: number, transition?: ITransition): void {\n moveLocal(this, x, y, transition)\n }\n\n\n public moveInner(x: number | IPointData, y?: number, transition?: ITransition): void {\n moveWorld(this, x, y, true, transition)\n }\n\n public scaleOf(origin: IPointData | IAlign, scaleX: number, scaleY?: number | ITransition, resize?: boolean, transition?: ITransition): void {\n zoomOfLocal(this, getLocalOrigin(this, origin), scaleX, scaleY, resize, transition)\n }\n\n public rotateOf(origin: IPointData | IAlign, rotation: number, transition?: ITransition): void {\n rotateOfLocal(this, getLocalOrigin(this, origin), rotation, transition)\n }\n\n public skewOf(origin: IPointData | IAlign, skewX: number, skewY?: number, resize?: boolean, transition?: ITransition): void {\n skewOfLocal(this, getLocalOrigin(this, origin), skewX, skewY, resize, transition)\n }\n\n\n public transformWorld(worldTransform?: IMatrixData, resize?: boolean, transition?: ITransition): void {\n transformWorld(this, worldTransform, resize, transition)\n }\n\n public moveWorld(x: number | IPointData, y?: number, transition?: ITransition): void {\n moveWorld(this, x, y, false, transition)\n }\n\n public scaleOfWorld(worldOrigin: IPointData, scaleX: number, scaleY?: number | ITransition, resize?: boolean, transition?: ITransition): void {\n zoomOfWorld(this, worldOrigin, scaleX, scaleY, resize, transition)\n }\n\n public rotateOfWorld(worldOrigin: IPointData, rotation: number): void {\n rotateOfWorld(this, worldOrigin, rotation)\n }\n\n public skewOfWorld(worldOrigin: IPointData, skewX: number, skewY?: number, resize?: boolean, transition?: ITransition): void {\n skewOfWorld(this, worldOrigin, skewX, skewY, resize, transition)\n }\n\n public flip(axis: IAxis, transition?: ITransition): void {\n transform(this, getFlipTransform(this, axis), false, transition)\n }\n\n\n // @leafer-in/resize rewrite\n\n public scaleResize(scaleX: number, scaleY = scaleX, _noResize?: boolean): void {\n (this as ILeaf).scaleX *= scaleX;\n (this as ILeaf).scaleY *= scaleY\n }\n\n public __scaleResize(_scaleX: number, _scaleY: number): void { }\n\n\n public resizeWidth(_width: number): void { }\n\n public resizeHeight(_height: number): void { }\n\n\n // @leafer-ui/hit LeafHit rewrite\n\n public hit(_world: IPointData, _hitRadius?: number): boolean { return true }\n\n public __hitWorld(_point: IRadiusPointData): boolean { return true }\n\n public __hit(_local: IRadiusPointData): boolean { return true }\n\n public __hitFill(_inner: IRadiusPointData): boolean { return true }\n\n public __hitStroke(_inner: IRadiusPointData, _strokeWidth: number): boolean { return true }\n\n public __hitPixel(_inner: IRadiusPointData): boolean { return true }\n\n public __drawHitPath(_canvas: ILeaferCanvas): void { }\n\n public __updateHitCanvas(): void { }\n\n // ---\n\n\n // LeafRender rewrite\n\n public __render(_canvas: ILeaferCanvas, _options: IRenderOptions): void { }\n\n public __drawFast(_canvas: ILeaferCanvas, _options: IRenderOptions): void { }\n\n public __draw(_canvas: ILeaferCanvas, _options: IRenderOptions, _originCanvas?: ILeaferCanvas): void { }\n\n\n public __clip(_canvas: ILeaferCanvas, _options: IRenderOptions): void { }\n\n public __renderShape(_canvas: ILeaferCanvas, _options: IRenderOptions): void { }\n\n public __drawShape(_canvas: ILeaferCanvas, _options: IRenderOptions): void { }\n\n\n public __updateWorldOpacity(): void { }\n\n public __updateChange(): void { }\n\n // ---\n\n\n // path\n\n public __drawPath(_canvas: ILeaferCanvas): void { }\n\n public __drawRenderPath(_canvas: ILeaferCanvas): void { }\n\n public __updatePath(): void { }\n\n public __updateRenderPath(): void { }\n\n // ---\n\n\n // @leafer-in/motion-path rewrite\n\n public getMotionPathData(): IMotionPathData {\n return Plugin.need('path')\n }\n\n public getMotionPoint(_motionDistance: number | IUnitData): IRotationPointData {\n return Plugin.need('path')\n }\n\n public getMotionTotal(): number {\n return 0\n }\n\n public __updateMotionPath(): void { }\n\n // ---\n\n\n // @leafer-in/animate rewrite\n public __runAnimation(_type: 'in' | 'out', _complete?: IFunction): void { }\n\n\n // Branch rewrite\n\n public __updateSortChildren(): void { }\n\n public add(_child: ILeaf | ILeaf[] | ILeafInputData | ILeafInputData[], _index?: number): void { }\n\n public remove(_child?: ILeaf | number | string | IFindMethod, destroy?: boolean): void {\n if (this.parent) this.parent.remove(this, destroy)\n }\n\n public dropTo(parent: ILeaf, index?: number, resize?: boolean): void {\n drop(this, parent, index, resize)\n }\n\n // ---\n\n\n // LeafEventer rewrite\n\n public on(_type: string | string[] | IEventParams[] | IEventParamsMap, _listener?: IEventListener, _options?: IEventOption): void { }\n\n public off(_type?: string | string[], _listener?: IEventListener, _options?: IEventOption): void { }\n\n public on_(_type: string | string[] | IEventParams[], _listener?: IEventListener, _bind?: IObject, _options?: IEventOption): IEventListenerId { return undefined }\n\n public off_(_id: IEventListenerId | IEventListenerId[]): void { }\n\n public once(_type: string | string[] | IEventParams[], _listener?: IEventListener, _captureOrBind?: boolean | IObject, _capture?: boolean): void { }\n\n public emit(_type: string, _event?: IEvent | IObject, _capture?: boolean): void { }\n\n public emitEvent(_event?: IEvent, _capture?: boolean): void { }\n\n public hasEvent(_type: string, _capture?: boolean): boolean { return false }\n\n // ---\n\n static changeAttr(attrName: string, defaultValue: IValue | IValueFunction, fn?: IAttrDecorator): void {\n fn ? this.addAttr(attrName, defaultValue, fn) : defineDataProcessor(this.prototype, attrName, defaultValue)\n }\n\n static addAttr(attrName: string, defaultValue: IValue | IValueFunction, fn?: IAttrDecorator, helpValue?: IValue): void {\n if (!fn) fn = boundsType\n fn(defaultValue, helpValue)(this.prototype, attrName)\n }\n\n\n public __emitLifeEvent(type: string): void {\n if (this.hasEvent(type)) this.emitEvent(new ChildEvent(type, this, this.parent))\n }\n\n\n public destroy(): void {\n if (!this.destroyed) {\n if (this.parent) this.remove()\n if (this.children) (this as unknown as IBranch).clear()\n\n this.__emitLifeEvent(ChildEvent.DESTROY)\n\n this.__.destroy()\n this.__layout.destroy();\n\n (this as ILeaf).destroyEventer()\n this.destroyed = true\n }\n }\n\n}\n","import { IBoundsData, ILeaf } from '@leafer/interface'\nimport { ChildEvent } from '@leafer/event'\nimport { BoundsHelper } from '@leafer/math'\nimport { BranchHelper, LeafBoundsHelper } from '@leafer/helper'\nimport { useModule } from '@leafer/decorator'\nimport { BranchRender } from '@leafer/display-module'\nimport { UICreator } from '@leafer/platform'\nimport { isArray, isUndefined } from '@leafer/data'\nimport { Debug } from '@leafer/debug'\n\nimport { Leaf } from './Leaf'\n\n\nconst { setListWithFn } = BoundsHelper\nconst { sort } = BranchHelper\nconst { localBoxBounds, localStrokeBounds, localRenderBounds, maskLocalBoxBounds, maskLocalStrokeBounds, maskLocalRenderBounds } = LeafBoundsHelper\nconst debug = new Debug('Branch')\n\n@useModule(BranchRender)\nexport class Branch extends Leaf { // tip: rewrited Group\n\n // overwrite\n\n public __updateStrokeSpread(): number {\n const { children } = this\n for (let i = 0, len = children.length; i < len; i++) {\n if (children[i].__layout.strokeSpread) return 1\n }\n return 0\n }\n\n public __updateRenderSpread(): number {\n const { children } = this\n for (let i = 0, len = children.length; i < len; i++) {\n if (children[i].__layout.renderSpread) return 1\n }\n return 0\n }\n\n public __updateBoxBounds(_secondLayout?: boolean, bounds?: IBoundsData): void {\n setListWithFn(bounds || this.__layout.boxBounds, this.children, this.__hasMask ? maskLocalBoxBounds : localBoxBounds)\n }\n\n public __updateStrokeBounds(bounds?: IBoundsData): void {\n setListWithFn(bounds || this.__layout.strokeBounds, this.children, this.__hasMask ? maskLocalStrokeBounds : localStrokeBounds)\n }\n\n public __updateRenderBounds(bounds?: IBoundsData): void {\n setListWithFn(bounds || this.__layout.renderBounds, this.children, this.__hasMask ? maskLocalRenderBounds : localRenderBounds)\n }\n\n\n // own\n\n public __updateSortChildren(): void {\n let affectSort: boolean\n const { children } = this\n if (children.length > 1) {\n for (let i = 0, len = children.length; i < len; i++) {\n children[i].__tempNumber = i\n if (children[i].__.zIndex) affectSort = true\n }\n children.sort(sort)\n this.__layout.affectChildrenSort = affectSort\n }\n }\n\n public add(child: ILeaf, index?: number): void {\n if (child === this || child.destroyed) return debug.warn('add self or destroyed')\n\n const noIndex = isUndefined(index)\n if (!child.__) {\n if (isArray(child)) return child.forEach(item => { this.add(item, index); noIndex || index++ }) // add []\n else child = UICreator.get(child.tag, child) // add JSON\n }\n\n if (child.parent) child.parent.remove(child)\n child.parent = this\n\n noIndex ? this.children.push(child) : this.children.splice(index, 0, child)\n if (child.isBranch) this.__.__childBranchNumber = (this.__.__childBranchNumber || 0) + 1\n\n const childLayout = child.__layout\n childLayout.boxChanged || childLayout.boxChange() // layouted(removed), need update\n childLayout.matrixChanged || childLayout.matrixChange() // layouted(removed), need update\n\n if (child.__bubbleMap) child.__emitLifeEvent(ChildEvent.ADD)\n\n if (this.leafer) {\n child.__bindLeafer(this.leafer)\n if (this.leafer.created) this.__emitChildEvent(ChildEvent.ADD, child)\n }\n\n this.__layout.affectChildrenSort && this.__layout.childrenSortChange()\n }\n\n public addMany(...children: ILeaf[]): void { this.add(children as any) }\n\n public remove(child?: ILeaf, destroy?: boolean): void {\n if (child) {\n\n if (child.__) {\n\n if ((child as ILeaf).animationOut) child.__runAnimation('out', () => this.__remove(child, destroy))\n else this.__remove(child, destroy)\n\n } else this.find(child as any).forEach(item => this.remove(item, destroy)) // \n\n } else if (isUndefined(child)) {\n super.remove(null, destroy)\n }\n }\n\n public removeAll(destroy?: boolean): void {\n const { children } = this\n if (children.length) {\n this.children = []\n this.__preRemove()\n this.__.__childBranchNumber = 0\n children.forEach(child => {\n this.__realRemoveChild(child)\n if (destroy) child.destroy()\n })\n }\n }\n\n public clear(): void {\n this.removeAll(true)\n }\n\n protected __remove(child?: ILeaf, destroy?: boolean): void {\n const index = this.children.indexOf(child)\n if (index > -1) {\n this.children.splice(index, 1)\n if (child.isBranch) this.__.__childBranchNumber = (this.__.__childBranchNumber || 1) - 1\n this.__preRemove()\n this.__realRemoveChild(child)\n if (destroy) child.destroy()\n }\n }\n\n protected __preRemove(): void {\n if (this.__hasMask) this.__updateMask()\n if (this.__hasEraser) this.__updateEraser()\n this.__layout.boxChange()\n this.__layout.affectChildrenSort && this.__layout.childrenSortChange()\n }\n\n protected __realRemoveChild(child: ILeaf): void {\n child.__emitLifeEvent(ChildEvent.REMOVE)\n child.parent = null\n if (this.leafer) {\n child.__bindLeafer(null)\n if (this.leafer.created) {\n this.__emitChildEvent(ChildEvent.REMOVE, child)\n if (this.leafer.hitCanvasManager) this.leafer.hitCanvasManager.clear()\n }\n }\n }\n\n protected __emitChildEvent(type: string, child: ILeaf): void {\n const event = new ChildEvent(type, child, this)\n if (this.hasEvent(type) && !this.isLeafer) this.emitEvent(event)\n this.leafer.emitEvent(event)\n }\n\n}","import { ILeaf, ILeafList, ILeafListItemCallback, INumberMap } from '@leafer/interface'\nimport { isArray, isUndefined } from '@leafer/data'\n\nexport class LeafList implements ILeafList {\n\n public list: ILeaf[]\n public keys: INumberMap\n\n public get length(): number { return this.list.length }\n\n constructor(item?: ILeaf | ILeaf[]) {\n this.reset()\n if (item) isArray(item) ? this.addList(item) : this.add(item)\n }\n\n public has(leaf: ILeaf): boolean {\n return leaf && !isUndefined(this.keys[leaf.innerId])\n }\n\n public indexAt(index: number): ILeaf {\n return this.list[index]\n }\n\n public indexOf(leaf: ILeaf): number {\n const index = this.keys[leaf.innerId]\n return isUndefined(index) ? -1 : index\n }\n\n\n public add(leaf: ILeaf): void {\n const { list, keys } = this\n if (isUndefined(keys[leaf.innerId])) {\n list.push(leaf)\n keys[leaf.innerId] = list.length - 1\n }\n }\n\n public addAt(leaf: ILeaf, index = 0): void {\n const { keys } = this\n if (isUndefined(keys[leaf.innerId])) {\n const { list } = this\n for (let i = index, len = list.length; i < len; i++) keys[list[i].innerId]++\n if (index === 0) {\n list.unshift(leaf)\n } else {\n if (index > list.length) index = list.length\n list.splice(index, 0, leaf)\n }\n keys[leaf.innerId] = index\n }\n }\n\n public addList(list: ILeaf[]): void {\n for (let i = 0; i < list.length; i++) this.add(list[i])\n }\n\n\n public remove(leaf: ILeaf): void {\n const { list } = this\n let findIndex: number\n for (let i = 0, len = list.length; i < len; i++) {\n if (!isUndefined(findIndex)) {\n this.keys[list[i].innerId] = i - 1 // update rest keys\n } else if (list[i].innerId === leaf.innerId) {\n findIndex = i\n delete this.keys[leaf.innerId]\n }\n }\n\n if (!isUndefined(findIndex)) list.splice(findIndex, 1)\n }\n\n\n public sort(reverse?: boolean): void {\n const { list } = this\n if (reverse) {\n list.sort((a, b) => b.__level - a.__level) // 倒序\n } else {\n list.sort((a, b) => a.__level - b.__level) // 顺序\n }\n }\n\n public forEach(itemCallback: ILeafListItemCallback): void {\n this.list.forEach(itemCallback)\n }\n\n public clone(): ILeafList {\n const list = new LeafList()\n list.list = [...this.list]\n list.keys = { ...this.keys }\n return list\n }\n\n\n public update(): void {\n this.keys = {}\n const { list, keys } = this\n for (let i = 0, len = list.length; i < len; i++) keys[list[i].innerId] = i\n }\n\n public reset(): void {\n this.list = []\n this.keys = {}\n }\n\n public destroy(): void {\n this.reset()\n }\n}\n","import { IAutoBounds, IAutoBoundsData, IBounds, ISizeData } from '@leafer/interface'\nimport { isObject } from '@leafer/data'\n\nimport { Bounds } from './Bounds'\n\n\nexport class AutoBounds implements IAutoBounds {\n\n public top: number\n public right: number\n public bottom: number\n public left: number\n\n public width: number\n public height: number\n\n constructor(top?: number | IAutoBoundsData, right?: number, bottom?: number, left?: number, width?: number, height?: number) {\n isObject(top) ? this.copy(top) : this.set(top, right, bottom, left, width, height)\n }\n\n set(top = 0, right = 0, bottom = 0, left = 0, width = 0, height = 0): void {\n this.top = top\n this.right = right\n this.bottom = bottom\n this.left = left\n this.width = width\n this.height = height\n }\n\n copy(autoSize: IAutoBoundsData): void {\n const { top, right, bottom, left, width, height } = autoSize\n this.set(top, right, bottom, left, width, height)\n }\n\n getBoundsFrom(parent: ISizeData): IBounds {\n const { top, right, bottom, left, width, height } = this\n return new Bounds(left, top, width ? width : parent.width - left - right, height ? height : parent.height - top - bottom)\n }\n\n}","import { ILeaferCanvas, IScreenSizeData, ICanvasManager } from '@leafer/interface'\nimport { Creator } from '@leafer/platform'\n\nexport class CanvasManager implements ICanvasManager {\n\n public list: ILeaferCanvas[] = []\n\n public add(canvas: ILeaferCanvas): void {\n canvas.manager = this\n this.list.push(canvas)\n }\n\n public get(size: IScreenSizeData): ILeaferCanvas {\n let old: ILeaferCanvas\n const { list } = this\n for (let i = 0, len = list.length; i < len; i++) {\n old = list[i]\n if (old.recycled && old.isSameSize(size)) {\n old.recycled = false\n old.manager || (old.manager = this)\n return old\n }\n }\n\n const canvas = Creator.canvas(size)\n this.add(canvas)\n return canvas\n }\n\n public recycle(old: ILeaferCanvas): void {\n old.recycled = true\n }\n\n public clearRecycled(): void {\n let canvas: ILeaferCanvas\n const filter: ILeaferCanvas[] = []\n for (let i = 0, len = this.list.length; i < len; i++) {\n canvas = this.list[i]\n canvas.recycled ? canvas.destroy() : filter.push(canvas)\n }\n this.list = filter\n }\n\n public clear(): void {\n this.list.forEach(item => { item.destroy() })\n this.list.length = 0\n }\n\n public destroy(): void {\n this.clear()\n }\n\n}","import { ILeaf, ILeafArrayMap, ILeafLevelList, ILeafListItemCallback, INumberMap } from '@leafer/interface'\nimport { isArray, isUndefined } from '@leafer/data'\n\nexport class LeafLevelList implements ILeafLevelList {\n\n public levelMap: ILeafArrayMap\n public keys: INumberMap\n public levels: number[]\n\n public get length(): number { return this._length }\n private _length = 0\n\n constructor(item?: ILeaf | ILeaf[]) {\n this.reset()\n if (item) isArray(item) ? this.addList(item) : this.add(item)\n }\n\n public has(leaf: ILeaf): boolean {\n return !isUndefined(this.keys[leaf.innerId])\n }\n\n public without(leaf: ILeaf): boolean {\n return isUndefined(this.keys[leaf.innerId])\n }\n\n public sort(reverse?: boolean): void {\n const { levels } = this\n if (reverse) {\n levels.sort((a, b) => b - a) // 倒序\n } else {\n levels.sort((a, b) => a - b) // 顺序\n }\n }\n\n public addList(list: ILeaf[]): void {\n list.forEach(leaf => { this.add(leaf) })\n }\n\n public add(leaf: ILeaf): void {\n const { keys, levelMap } = this\n if (!keys[leaf.innerId]) {\n keys[leaf.innerId] = 1\n if (!levelMap[leaf.__level]) {\n levelMap[leaf.__level] = [leaf]\n this.levels.push(leaf.__level)\n } else {\n levelMap[leaf.__level].push(leaf)\n }\n this._length++\n }\n }\n\n public forEach(itemCallback: ILeafListItemCallback): void {\n let list: ILeaf[]\n this.levels.forEach(level => {\n list = this.levelMap[level]\n for (let i = 0, len = list.length; i < len; i++) {\n itemCallback(list[i])\n }\n })\n }\n\n public reset(): void {\n this.levelMap = {}\n this.keys = {}\n this.levels = []\n this._length = 0\n }\n\n public destroy(): void {\n this.levelMap = null\n }\n\n}","import { IPathDrawer } from '@leafer/interface'\n\nimport { roundRect } from './roundRect'\n\nexport function canvasPatch(drawer: IPathDrawer): void {\n roundRect(drawer)\n}","import { IObject } from '@leafer/interface'\nimport { EventCreator, UICreator } from '@leafer/platform'\n\nexport function registerUI() {\n return (target: IObject) => {\n UICreator.register(target)\n }\n}\n\nexport function registerUIEvent() {\n return (target: IObject) => {\n EventCreator.register(target)\n }\n}","export * from '@leafer/canvas'\nexport * from '@leafer/image'\n\nexport * from '@leafer/data'\nexport * from '@leafer/debug'\nexport * from '@leafer/decorator'\nexport * from '@leafer/display'\nexport * from '@leafer/display-module'\n\nexport * from '@leafer/event'\n\nexport * from '@leafer/file'\nexport * from '@leafer/helper'\nexport * from '@leafer/layout'\nexport * from '@leafer/list'\nexport * from '@leafer/math'\n\nexport * from '@leafer/path'\nexport * from '@leafer/platform'\n\nexport * from '@leafer/task'\n\nexport const version = \"1.9.7\""],"names":["Platform","toURL","text","fileType","url","encodeURIComponent","image","hitCanvasSize","maxCacheSize","maxPatternSize","crossOrigin","getRealURL","prefix","suffix","startsWith","includes","IncrementId","RUNTIME","LEAF","TASK","CNAVAS","IMAGE","types","create","typeName","I","Answer","isUndefined","value","undefined","isNull","isString","isFinite","Number","isNumber","numberReg","isArray","Array","isObject","isEmptyData","JSON","stringify","DataHelper","default","t","defaultData","assign","merge","exclude","Object","keys","forEach","key","constructor","_a","_b","copyAttrs","from","include","clone","data","parse","toMap","list","map","i","len","length","stintSet","attrName","LeafData","__useNaturalRatio","__isLinePath","path","this","__usePathBox","__pathInputed","__blendMode","eraser","blendMode","leaf","__leaf","__get","name","__input","__getData","tag","inputValue","__setInput","__getInput","__removeInput","__getInputData","names","options","matrix","a","b","c","d","e","f","__localMatrix","__setMiddle","__middle","__getMiddle","__checkSingle","opacity","isBranch","__hasMultiPaint","__hasEraser","filter","__single","__removeNaturalSize","__naturalWidth","__naturalHeight","destroy","round","pow","PI","Math","MathHelper","within","min","max","fourNumber","num","maxValue","formatRotation","rotation","unsign","float","getGapRotation","addRotation","gap","oldRotation","r","abs","maxLength","sign","getScaleData","scale","size","originSize","scaleData","scaleX","width","scaleY","height","assignScale","x","y","randInt","randColor","random","OneRadian","PI2","PI_2","getPointData","getBoundsData","getMatrixData","sin","cos","acos","sqrt","tempPoint","getWorld","skewX","skewY","MatrixHelper","defaultMatrix","defaultWorld","tempMatrix","set","get","copy","translate","translateInner","hasOrigin","pixelScale","pixelRatio","to","scaleOfOuter","origin","M","toInnerPoint","scaleOfInner","rotate","cosR","sinR","rotateOfOuter","rotateOfInner","skew","skewOfOuter","skewOfInner","multiply","child","multiplyParent","parent","abcdChanged","childScaleData","divide","tempInvert","divideParent","invert","s","toOuterPoint","inner","distance","outer","setLayout","layout","around","bcChanged","sx","sy","getLayout","firstSkewY","withScale","world","reset","atan2","PointHelper","defaultPoint","tempRadiusPoint","setRadius","radiusX","radiusY","point","copyFrom","halfPixel","move","scaleOf","P","rx","ry","tempToInnerOf","temp","tempToOuterOf","tempToInnerRadiusPointOf","toInnerRadiusPointOf","toInnerOf","toOuterOf","getCenter","getCenterX","x1","x2","getCenterY","y1","y2","getDistance","getDistanceFrom","getMinDistanceFrom","x3","y3","getAngle","getAtan2","getRotation","toOrigin","getRadianFrom","fromX","fromY","originX","originY","toX","toY","toOriginX","toOriginY","getDistancePoint","changeTo","toNumberPoints","originPoints","points","p","push","Point","rotateOf","Matrix","setWith","dataWithScale","scaleWith","angle","invertWith","TwoPointBoundsHelper","tempPointBounds","setPoint","minX","minY","maxX","maxY","addPoint","addBounds","pb","addPointBounds","toBounds","setBounds","Direction4","Direction9","directionData","item","type","AroundHelper","toPoint","box","onlyBoxSize","content","onlyContentSize","getPoint","AlignHelper","align","TB","floor","ceil","right","bottom","boundsRight","boundsBottom","tempBounds","BoundsHelper","bounds","copyAndSpread","spread","isShrink","side","four","B","scroll","scrollX","scrollY","getByMove","toOffsetOutBounds","offsetX","offsetY","onlySize","getOuterOf","getFitMatrix","put","baseScale","getFitScale","isCoverMode","sw","sh","putScale","changeSize","getSpread","n","shrink","add","isPoint","addList","setListWithFn","setList","addMode","addListWithFn","boundsDataFn","first","setPoints","index","getPoints","hitRadiusPoint","pointMatrix","hitPoint","hit","other","otherMatrix","getIntersectData","intersect","isSame","isEmpty","Bounds","boundsList","boundsMatrix","getIntersect","StringNumberMap","E","Debug","repeatMap","filterList","getNameList","excludeList","drawRepaint","canvas","color","fillWorld","replace","strokeWorld","drawBounds","_options","showHit","showBounds","w","__nowWorld","setWorld","__drawHitPath","fillStyle","fill","resetTransform","setStroke","stroke","log","messages","D","enable","every","some","console","tip","warn","showWarn","repeat","error","Error","debug","Run","currentId","currentName","idMap","nameMap","nameToIdMap","start","microsecond","id","R","performance","now","Date","end","time","duration","endOfName","check","Plugin","needPlugins","has","rs","need","setTimeout","Creator","editor","UICreator","register","UI","__tag","prototype","ui","EventCreator","nameList","Event","changeName","oldName","newName","constName","find","params","__decorate","decorators","target","desc","arguments","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__awaiter","thisArg","_arguments","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","contextAttr","realName","property","context","SuppressedError","contextMethodNameList","contextMethod","_target","emptyArray","Canvas","globalCompositeOperation","dashPattern","setLineDash","getLineDash","__bindContext","method","bind","textBaseline","setTransform","_c","_d","_e","_f","getTransform","save","restore","transform","_x","_y","_angle","_path2d","_rule","clip","fillRect","_width","_height","strokeRect","clearRect","drawImage","dx","dy","dw","dh","beginPath","moveTo","lineTo","bezierCurveTo","_cp1x","_cp1y","_cp2x","_cp2y","quadraticCurveTo","_cpx","_cpy","closePath","arc","_radius","_startAngle","_endAngle","_anticlockwise","arcTo","_x1","_y1","_x2","_y2","ellipse","_radiusX","_radiusY","_rotation","rect","roundRect","createConicGradient","createLinearGradient","_x0","_y0","createPattern","_image","_repetition","createRadialGradient","_r0","_r1","fillText","_text","_maxWidth","measureText","strokeText","tempPixelBounds","tempPixelBounds2","minSize","canvasSizeAttrs","PathHelper","creator","_pathString","_curveMode","convertToCanvasData","_old","CanvasCommandOnlyMap","N","X","G","F","O","U","PathCommandMap","m","L","l","H","h","V","v","C","S","Q","q","T","A","Z","z","PathCommandLengthMap","NeedConvertToCanvasCommandMap","NeedConvertToCurveCommandMap","PathNumberCommandMap","PathNumberCommandLengthMap","RectHelper","drawRoundRect","drawer","cornerRadius","hypot","BezierHelper","curve","close","aX","aY","bX","bY","cX","cY","c1X","c1Y","c2X","c2Y","ba","cb","radius","setPointBounds","setEndPoint","setStartPoint","BAx","BAy","CBx","CBy","startRadian","endRadian","lenBA","lenCB","totalRadian","anticlockwise","centerX","centerY","startAngle","endAngle","cx","cy","rotationRadian","rotationSin","rotationCos","parts","partRadian","partRadian4Sin","control","endCos","endSin","startCos","startSin","startX","startY","toTwoPointBounds","toTwoPointBoundsByQuadraticCurve","pointBounds","tList","t1","t2","sqrtV","z1","z2","o","getPointAndSet","getDerivative","fromV","v1","v2","toV","EllipseHelper","ellipticalArc","largeFlag","sweepFlag","curveMode","halfX","halfY","px","py","rxSquare","rySquare","pySquare","pxSquare","ellipseToCurve","Command","PathConvert","current","dot","floatLength","count","command","lastCommand","str","j","pathString","needConvert","char","lastChar","convertCommand","pushData","toCanvasData","old","controlX","controlY","smooth","copyData","objectToCanvasData","strNum","tan","startPoint","PathCommandDataHelper","fourCorners","lastX","lastY","drawEllipse","drawArc","drawPoints","PathCreator","__path","paint","clearPath","PathDrawer","drawPathByData","PathBounds","PathCorner","_cornerSmoothing","commandLen","secondX","secondY","pen","FileHelper","alphaPixelTypes","upperCaseTypeMap","mineType","filename","split","isOpaqueImage","getExportOptions","quality","blob","toUpperCase","TaskItem","task","parallel","run","isComplete","running","complete","cancel","isCancel","TaskProcessor","total","delayNumber","finishedIndex","parallelSuccessNumber","remain","percent","totalTime","runTime","config","empty","taskCallback","delay","timer","parallelList","pause","clearTimeout","resume","skip","stop","setParallelList","runParallelTasks","runTask","onComplete","onTask","nextTask","catch","onError","runParallelTask","fillParallelTask","onParallelError","pop","parallelWaitNumber","nextIndex","Resource","tasker","remove","loadImage","format","setImage","load","view","ImageManager","maxRecycled","recycledList","patternTasker","use","recycle","clearRecycled","hasAlphaPixel","isFormat","defineKey","descriptor","noConfigurable","configurable","enumerable","getDescriptor","object","createDescriptor","defaultValue","privateKey","decorateLeafAttr","descriptorFn","defineLeafAttr","attr","partDescriptor","defaultDescriptor","__getAttr","__setAttr","defineDataProcessor","boundsType","checkFiniteNumber","doBoundsType","__layout","boxChanged","boxChange","__hasAutoLayout","matrixChanged","matrixChange","pathType","affectStrokeBoundsType","useStroke","doStrokeType","__","__useStroke","strokeChanged","strokeChange","__useArrow","strokeType","checkMask","__hasMask","__updateMask","forceUpdate","doVisible","oldValue","opacityChanged","opacityChange","__DataProcessor","computedKey","setMethodName","charAt","slice","getSetMethodName","isBox","isBranchLeaf","naturalWidth","pathInputed","boxBounds","children","naturalHeight","__proto__","excludeNames","doRewrite","useModule","module","getOwnPropertyNames","writable","LeafHelper","updateAllMatrix","checkAutoLayout","waitAutoLayout","updateMatrix","__updateLocalMatrix","__updateWorldMatrix","updateBounds","boundsChanged","__updateLocalBounds","__updateWorldBounds","updateAllWorldOpacity","__updateWorldOpacity","updateChange","stateStyleChanged","updateState","__updateChange","updateAllChange","worldHittable","hittable","draggable","editable","hitSelf","locked","copyCanvasByWorld","currentCanvas","fromCanvas","fromWorld","onlyResetTransform","__worldFlipped","fullImageShadow","copyWorldByReset","copyWorldToInner","renderBounds","moveWorld","isInnerPoint","transition","local","localTransform","scrollWorldTransform","moveLocal","leafer","pointSnap","animate","zoomOfWorld","resize","zoomOfLocal","getTempLocal","hasHighPosition","scaleResize","rotateOfWorld","rotateOfLocal","skewOfWorld","skewOfLocal","transformWorld","worldTransform","originPoint","getInnerOrigin","hasOffset","changedPoint","getFlipTransform","axis","getLocalOrigin","innerOrigin","getRelativeWorld","relative","drop","hasParent","animateMove","speed","requestRender","worldPoint","updateLayout","LeafBoundsHelper","worldBounds","__world","localBoxBounds","visible","__local","localStrokeBounds","localRenderBounds","maskLocalBoxBounds","__localBoxBounds","maskLocalStrokeBounds","maskLocalRenderBounds","excludeRenderBounds","hideBounds","findMask","mask","BranchHelper","sort","zIndex","__tempNumber","pushAllChildBranch","branch","leafList","__childBranchNumber","pushAllParent","innerId","pushAllBranchStack","pushList","branchStack","updateBoundsByBranchStack","WaitHelper","wait","splice","localContent","worldContent","worldBox","worldStroke","LeafLayout","contentBounds","_contentBounds","strokeBounds","_strokeBounds","_renderBounds","localContentBounds","_localStrokeBounds","_localRenderBounds","worldContentBounds","worldBoxBounds","worldStrokeBounds","createLocal","update","isApp","ready","watcher","changed","layouter","root","__fullLayouting","zoomLayer","getBounds","getWorldBounds","getLocalBounds","getInnerBounds","getLayoutBounds","unscale","layoutBounds","getWorldPoint","getLocalPointByInner","uScaleX","uScaleY","getLayoutPoints","relativeLeaf","innerToWorld","shrinkContent","spreadStroke","renderSpread","spreadRenderCancel","spreadRender","shrinkContentCancel","spreadStrokeCancel","same","localBoxChanged","localBoxChange","hitCanvasChanged","strokeSpread","renderChange","renderChanged","scaleChange","scaleChanged","_scaleOrRotationChange","rotationChange","rotationChanged","affectRotation","affectScaleOrRotation","surfaceChange","surfaceChanged","childrenSortChange","childrenSortChanged","affectChildrenSort","bubbles","stopDefault","isStopDefault","event","stopNow","isStopNow","isStop","ChildEvent","super","ADD","REMOVE","CREATED","MOUNTED","UNMOUNTED","DESTROY","SCROLL","PropertyEvent","newValue","CHANGE","LEAFER_CHANGE","extraPropertyEventMap","ImageEvent","LOAD","LOADED","ERROR","BoundsEvent","checkHas","mode","WORLD","__hasWorldEvent","__hasLocalEvent","hasEvent","RESIZE","INNER","LOCAL","emitLocal","leaferIsReady","resized","emit","emitWorld","boundsEventMap","ResizeEvent","bigger","smaller","samePixelRatio","oldSize","isResizing","resizingKeys","WatchEvent","REQUEST","DATA","LayoutEvent","times","START","BEFORE","LAYOUT","AFTER","AGAIN","END","RenderEvent","renderOptions","CHILD_START","CHILD_END","RENDER","NEXT","LeaferEvent","BEFORE_READY","READY","AFTER_READY","VIEW_READY","VIEW_COMPLETED","STOP","RESTART","UPDATE_MODE","TRANSFORM","MOVE","SCALE","ROTATE","SKEW","leaferTransformAttrMap","Eventer","on","listener","capture","once","events","__getListenerMap","typeList","findIndex","off","__bubbleMap","__captureMap","on_","off_","captureOrBind","syncEventer","emitEvent","hasB","hasC","eventer","LeafEventer","destroyEventer","LeafDataProxy","leaferIsCreated","innerName","__realSetAttr","isLeafer","transformEventName","emitPropertyEvent","extraPropertyEvent","__proxyData","setProxyAttr","normalStyle","lockNormalStyle","getProxyAttr","LeafMatrix","__scrollWorld","LeafBounds","__onUpdateSize","__updatePath","__updateRenderPath","__updateBoxBounds","__updateLocalBoxBounds","__updateStrokeSpread","__updateStrokeBounds","__updateLocalStrokeBounds","strokeBoxSpread","__updateRenderSpread","__updateRenderBounds","__updateLocalRenderBounds","__hasMotionPath","__updateMotionPath","__updateAutoLayout","_secondLayout","_bounds","__extraUpdate","flow","__updateFlowLayout","__autoSide","__updateNaturalSize","LeafRender","__render","shape","__renderShape","__worldOpacity","bright","topRendering","topList","__getNowWorld","dimOpacity","dimskip","__renderEraser","tempCanvas","getSameCanvas","__draw","__drawShape","__clip","__drawRenderPath","clipUI","BranchRender","__updateSortChildren","__useDim","dim","__renderBranch","nowWorld","__renderMask","tempScaleData","Leaf","_value","__LayoutProcessor","created","worldRenderBounds","worldOpacity","__onlyHitMask","hitChildren","__ignoreHitWorld","__inLazyBounds","lazyBounds","__emitLifeEvent","forceRender","__level","resetCustom","toJSON","waitParent","waitLeafer","nextRender","removeNextRender","__bindLeafer","leafs","animation","__runAnimation","_data","_isTemp","_name","setAttr","getAttr","getComputedAttr","toString","toSVG","__SVG","toHTML","_attrName","_newValue","_condition","findTag","_tag","findOne","findId","_id","focus","_sync","addExtra","__updateContentBounds","__updateEraser","_canvas","__cameraWorld","cameraWorld","half","getClampRenderScale","getRenderScaleData","scaleFixed","patternLocked","change","worldToLocal","worldToInner","localToWorld","getBoxPoint","getBoxPointByInner","getInnerPoint","_relative","_distance","getInnerPointByBox","getInnerPointByLocal","getLocalPoint","getPagePoint","getWorldPointByBox","getWorldPointByLocal","getWorldPointByPage","page","moveInner","skewOf","scaleOfWorld","worldOrigin","flip","_noResize","__scaleResize","_scaleX","_scaleY","resizeWidth","resizeHeight","_world","_hitRadius","__hitWorld","_point","__hit","_local","__hitFill","_inner","__hitStroke","_strokeWidth","__hitPixel","__updateHitCanvas","__drawFast","_originCanvas","__drawPath","getMotionPathData","getMotionPoint","_motionDistance","getMotionTotal","_type","_complete","_child","_index","dropTo","_listener","_bind","_captureOrBind","_capture","_event","changeAttr","fn","addAttr","helpValue","destroyed","clear","Branch","affectSort","noIndex","childLayout","__emitChildEvent","addMany","animationOut","__remove","removeAll","__preRemove","__realRemoveChild","indexOf","hitCanvasManager","LeafList","indexAt","addAt","unshift","reverse","itemCallback","top","left","autoSize","getBoundsFrom","manager","recycled","isSameSize","_length","without","levels","levelMap","level","pixelWidth","pixelHeight","pixelSnap","allowBackgroundColor","parentView","autoLayout","devicePixelRatio","init","__createContext","contextSettings","getContext","_filename","toBlob","_quality","toDataURL","saveAs","safeResize","takeCanvas","unreal","copyWorld","updateViewSize","updateClientBounds","clearWorld","getClientBounds","clientBounds","startAutoLayout","_autoBounds","stopAutoLayout","setCursor","_cursor","parentMatrix","useWorldTransform","strokeWidth","childOptions","strokeStyle","setStrokeOptions","strokeCap","strokeJoin","dashOffset","miterLimit","saveBlendMode","savedBlendMode","restoreBlendMode","hitFill","_fillRule","hitStroke","hitPixel","_radiusPoint","_offset","_scale","setWorldShadow","blur","shadowOffsetX","shadowOffsetY","shadowBlur","shadowColor","setWorldBlur","ceilPixel","setTempPixelBounds","setTempPixelBounds2","toInnerBounds","useGrayscaleAlpha","alpha","pixel","imageData","getImageData","putImageData","useMask","maskCanvas","fromBounds","useEraser","eraserCanvas","clipWorld","ruleData","windingRule","copyToPixelBounds","pixelBounds","useSameWorldTransform","useSameSmooth","clearBounds","updateRender","unrealCanvas","completed","waitComplete","setView","isSVG","onSuccess","loading","loadImageWithProgress","onProgress","showProgress","img","unload","stopEvent","progress","isSuccess","odd","getFull","_filters","getCanvas","xGap","yGap","cache","createCanvas","ctx","globalAlpha","imageSmoothingEnabled","getPattern","pattern","updateCursor","processor","_key","__pathForRender","test"],"mappings":"aAGO,MAAMA,EAAsB,CAC/B,KAAAC,CAAMC,EAAcC,GAChB,IAAIC,EAAMC,mBAAmBH,GAG7B,MAFiB,SAAbC,EAAqBC,EAAM,iCAAmCA,EAC5C,QAAbD,IAAoBC,EAAM,sBAAwBA,GACpDA,CACX,EACAE,MAAO,CACHC,cAAe,IACfC,aAAc,OACdC,eAAgB,QAChBC,YAAa,YACb,UAAAC,CAAWP,GACP,MAAMQ,OAAEA,EAAMC,OAAEA,GAAWb,EAASM,MAGpC,OAFIO,GAAWT,EAAIU,WAAW,UAAaV,EAAIU,WAAW,WAAUV,IAAQA,EAAIW,SAAS,KAAO,IAAM,KAAOF,GACzGD,GAAqB,MAAXR,EAAI,KAAYA,EAAMQ,EAASR,GACtCA,CACX,ICjBKY,EAAc,CAEvBC,QAAS,UACTC,KAAM,OACNC,KAAM,OACNC,OAAQ,SACRC,MAAO,QAEPC,MAAO,CAAA,EAEP,MAAAC,CAAOC,GACH,MAAMF,MAAEA,GAAUG,EAClB,OAAIH,EAAME,GACCF,EAAME,MAEbF,EAAME,GAAY,EACX,EAEf,GAGEC,EAAIT,ECtBV,IAAYU,EAAAA,QAAAA,YAAAA,GAAAA,EAAAA,QAAAA,SAAAA,eAAM,CAAA,IACdA,EAAA,GAAA,GAAA,KACAA,EAAAA,EAAA,IAAA,GAAA,MACAA,EAAAA,EAAA,UAAA,GAAA,YACAA,EAAAA,EAAA,WAAA,GAAA,aAKE,SAAUC,EAAYC,GACxB,YAAiBC,IAAVD,CACX,CAEM,SAAUE,EAAOF,GACnB,OAAgB,MAATA,CACX,CAEM,SAAUG,EAA2BH,GACvC,MAAwB,iBAAVA,CAClB,CAEO,MAAMI,SAAEA,GAAaC,OAEtB,SAAUC,EAA2BN,GACvC,MAAwB,iBAAVA,CAClB,CAEA,MAAMO,EAAY,oBAMX,MAAMC,QAAEA,GAAYC,MAErB,SAAUC,EAA2BV,GACvC,OAAOA,GAA0B,iBAAVA,CAC3B,CAMM,SAAUW,EAAYX,GACxB,MAAiC,OAA1BY,KAAKC,UAAUb,EAC1B,CC5CO,MAAMc,EAAa,CAEtBC,QAAO,CAAIC,EAAMC,KACbC,EAAOD,EAAaD,GACpBE,EAAOF,EAAGC,GACHD,GAGX,MAAAE,CAAOF,EAAYG,EAAgBC,GAC/B,IAAIpB,EACJqB,OAAOC,KAAKH,GAAOI,QAAQC,YAEvB,GADAxB,EAAQmB,EAAMK,IACVxB,eAAAA,EAAOyB,eAAgBJ,SAAgB,QAANK,EAAAV,EAAEQ,UAAI,IAAAE,OAAA,EAAAA,EAAED,eAAgBJ,OAAQ,OAAOH,EAAOF,EAAEQ,GAAML,EAAMK,GAAMJ,GAAWA,EAAQI,IACtHJ,GAAYI,KAAOJ,GACH,UAAZA,EAAQI,UAAI,IAAAG,OAAA,EAAAA,EAAEF,eAAgBJ,QAAQH,EAAOF,EAAEQ,GAAO,CAAA,EAAIL,EAAMK,GAAMJ,EAAQI,IAGtFR,EAAEQ,GAAOL,EAAMK,IAEvB,EAEAI,UAAS,CAACZ,EAAYa,EAAeC,KACjCA,EAAQP,QAAQC,IACPzB,EAAY8B,EAAKL,MAAOR,EAAEQ,GAAOK,EAAKL,MAExCR,GAGXe,MAAMC,GACKpB,KAAKqB,MAAMrB,KAAKC,UAAUmB,IAGrC,KAAAE,CAAMC,GACF,MAAMC,EAAM,CAAA,EACZ,IAAK,IAAIC,EAAI,EAAGC,EAAMH,EAAKI,OAAQF,EAAIC,EAAKD,IAAMD,EAAID,EAAKE,KAAM,EACjE,OAAOD,CACX,EAEA,QAAAI,CAA8CR,EAASS,EAAazC,GAChEA,IAAUA,OAAQC,GAClB+B,EAAKS,KAAczC,IAAUgC,EAAKS,GAAYzC,EAClD,IAIEkB,OAAEA,GAAWJ,QC5CN4B,EAcT,qBAAWC,GAAsB,OAAO,CAAK,CAE7C,gBAAWC,GACP,MAAMC,KAAEA,GAASC,KACjB,OAAOD,GAAwB,IAAhBA,EAAKN,QAA4B,IAAZM,EAAK,EAC7C,CAEA,gBAAWE,GACP,OAAQD,KAAmBE,aAC/B,CAEA,eAAWC,GACP,GAAKH,KAAmBI,QAAyC,SAA9BJ,KAAmBI,OAAmB,MAAO,kBAChF,MAAMC,UAAEA,GAAeL,KACvB,MAAqB,iBAAdK,EAA+B,KAAOA,CACjD,CAEA,WAAA1B,CAAY2B,GACRN,KAAKO,OAASD,CAClB,CAEO,KAAAE,CAAMC,GACT,GAAIT,KAAKU,QAAS,CACd,MAAMxD,EAAQ8C,KAAKU,QAAQD,GAC3B,IAAKxD,EAAYC,GAAQ,OAAOA,CACpC,CACA,OAAQ8C,KAAiBS,EAC7B,CAEO,SAAAE,GACH,MAAMzB,EAAgB,CAAE0B,IAAKZ,KAAKO,OAAOK,MAAOF,QAAEA,GAAYV,KAC9D,IAAIa,EACJ,IAAK,IAAInC,KAAOsB,KACG,MAAXtB,EAAI,KACJmC,EAAaH,EAAUA,EAAQhC,QAAOvB,EACtC+B,EAAKR,GAAOzB,EAAY4D,GAAcb,KAAKtB,GAAOmC,GAG1D,OAAO3B,CACX,CAEO,UAAA4B,CAAWL,EAAcvD,GAC5B8C,KAAKU,UAAYV,KAAKU,QAAU,CAAA,GAChCV,KAAKU,QAAQD,GAAQvD,CACzB,CAEO,UAAA6D,CAAWN,GACd,GAAIT,KAAKU,QAAS,CACd,MAAMxD,EAAQ8C,KAAKU,QAAQD,GAC3B,IAAKxD,EAAYC,GAAQ,OAAOA,CACpC,CAEA,GAAa,SAATuD,GAAqBT,KAAmBE,cAE5C,OAAQF,KAAiB,IAAMS,EACnC,CAEO,aAAAO,CAAcP,GACbT,KAAKU,UAAYzD,EAAY+C,KAAKU,QAAQD,MAAQT,KAAKU,QAAQD,QAAQtD,EAC/E,CAEO,cAAA8D,CAAeC,EAA4BC,GAC9C,MAAMjC,EAAgB,CAAA,EAEtB,GAAIgC,EAEA,GAAIxD,EAAQwD,GACR,IAAK,IAAIT,KAAQS,EAAOhC,EAAKuB,GAAQT,KAAKe,WAAWN,QAErD,IAAK,IAAIA,KAAQS,EAAOhC,EAAKuB,GAAQT,KAAKe,WAAWN,OAGtD,CAEH,IAAIvD,EAAe2D,GAAoBH,QAAEA,GAAYV,KACrDd,EAAK0B,IAAMZ,KAAKO,OAAOK,IACvB,IAAK,IAAIlC,KAAOsB,KACZ,GAAe,MAAXtB,EAAI,KACJxB,EAAS8C,KAAiB,IAAMtB,IAC3BzB,EAAYC,IAAQ,CAErB,GAAY,SAARwB,IAAoBsB,KAAmBE,cAAe,SAE1DW,EAAaH,EAAUA,EAAQhC,QAAOvB,EACtC+B,EAAKR,GAAOzB,EAAY4D,GAAc3D,EAAQ2D,CAClD,CAIZ,CAEA,GAAIM,GACIA,EAAQC,OAAQ,CAChB,MAAMC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,GAAM1B,KAAKO,OAAOoB,cACzCzC,EAAKkC,OAAS,CAAEC,IAAGC,IAAGC,IAAGC,IAAGC,IAAGC,IACnC,CAGJ,OAAOxC,CACX,CAEO,WAAA0C,CAAYnB,EAAcvD,GAC7B8C,KAAK6B,WAAa7B,KAAK6B,SAAW,CAAA,GAClC7B,KAAK6B,SAASpB,GAAQvD,CAC1B,CAEO,WAAA4E,CAAYrB,GACf,OAAOT,KAAK6B,UAAY7B,KAAK6B,SAASpB,EAC1C,CAEO,aAAAsB,GACH,MAAM7D,EAAI8B,KACV,GAAoB,iBAAhB9B,EAAEmC,UAA8B,CAChC,MAAMC,EAAON,KAAKO,OACbrC,EAAE8D,QAAU,IAAM1B,EAAK2B,UAAY/D,EAAEgE,kBAAqB5B,EAAK6B,aAAejE,EAAEkC,QAAUlC,EAAEkE,OAC7FlE,EAAEmE,UAAW,EACNnE,EAAEmE,WACTnE,EAAEmE,UAAW,EAErB,MACInE,EAAEmE,UAAW,CAErB,CAEO,mBAAAC,GACHtC,KAAKuC,eAAiBvC,KAAKwC,qBAAkBrF,CACjD,CAEO,OAAAsF,GACHzC,KAAKU,QAAUV,KAAK6B,SAAW,IACnC,ECjJJ,MAAMa,MAAEA,EAAKC,IAAEA,KAAKC,GAAOC,KAEdC,EAAa,CAEtBC,OAAM,CAAC7F,EAAe8F,EAA0BC,KACxCrF,EAASoF,KAAMC,EAAMD,EAAIC,IAAKD,EAAMA,EAAIA,MACvC/F,EAAY+F,IAAQ9F,EAAQ8F,IAAK9F,EAAQ8F,IACzC/F,EAAYgG,IAAQ/F,EAAQ+F,IAAK/F,EAAQ+F,GACvC/F,GAGX,UAAAgG,CAAWC,EAAwBC,GAC/B,IAAIlE,EACJ,GAAIxB,EAAQyF,GACR,OAAQA,EAAI1D,QACR,KAAK,EACDP,EAAOjC,EAAYmG,GAAYD,EAAM,IAAIA,GACzC,MACJ,KAAK,EACDjE,EAAO,CAACiE,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,IACpC,MACJ,KAAK,EACDjE,EAAO,CAACiE,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,IACpC,MACJ,KAAK,EACDA,EAAMA,EAAI,GACV,MACJ,QACIA,EAAM,EAIlB,GADKjE,IAAMA,EAAO,CAACiE,EAAeA,EAAeA,EAAeA,IAC5DC,EAAU,IAAK,IAAI7D,EAAI,EAAGA,EAAI,EAAGA,IAAUL,EAAKK,GAAK6D,IAAUlE,EAAKK,GAAK6D,GAC7E,OAAOlE,CACX,EAEAmE,eAAc,CAACC,EAAkBC,KAC7BD,GAAY,IACRC,EACID,EAAW,IAAGA,GAAY,MAE1BA,EAAW,MAAKA,GAAY,KAC5BA,GAAW,MAAMA,GAAY,MAE9BR,EAAWU,MAAMF,IAG5B,cAAAG,CAAeC,EAAqBC,EAAaC,EAAsB,GACnE,IAAIN,EAAWI,EAAcE,EAC7B,GAAID,EAAM,EAAG,CACT,MAAME,EAAIhB,KAAKiB,IAAIR,EAAWK,IAC1BE,EAAI,GAAKA,EAAIF,EAAM,KAAGL,EAAWT,KAAKH,MAAMY,EAAWK,GAAOA,EACtE,CACA,OAAOL,EAAWM,CACtB,EAEA,KAAAJ,CAAML,EAAaY,GACf,MAAM1C,EAAKpE,EAAY8G,GAAkC,KAArBpB,EAAI,GAAIoB,GAE5C,YADAZ,EAAMT,EAAMS,EAAM9B,GAAKA,GACH,EAAI8B,CAC5B,EAEAa,KAAKb,GACMA,EAAM,GAAI,EAAK,EAG1B,YAAAc,CAAaC,EAA4BC,EAAgCC,EAAuBC,GAE5F,GADKA,IAAWA,EAAY,CAAA,GACxBF,EAAM,CACN,MAAMG,GAAU9G,EAAS2G,GAAQA,EAAOA,EAAKI,OAAS,GAAKH,EAAWG,MAAOC,GAAUhH,EAAS2G,GAAQA,EAAOA,EAAKM,QAAU,GAAKL,EAAWK,OAC9IJ,EAAUC,OAASA,GAAUE,GAAU,EACvCH,EAAUG,OAASA,GAAUF,GAAU,CAC3C,MAAWJ,GAAOpB,EAAW4B,YAAYL,EAAWH,GACpD,OAAOG,CACX,EAEA,WAAAK,CAAYL,EAAuBH,GAC3B1G,EAAS0G,GACTG,EAAUC,OAASD,EAAUG,OAASN,GAEtCG,EAAUC,OAASJ,EAAMS,EACzBN,EAAUG,OAASN,EAAMU,EAEjC,EAEAC,UAEAC,UAAU9C,GACC,QAAQ6C,EAAQ,QAAQA,EAAQ,QAAQA,EAAQ,QAAQ7C,GAAW,MAIlF,SAAS6C,EAAQ1B,GACb,OAAON,KAAKH,MAAMG,KAAKkC,SAAW5B,EACtC,CAEO,MAAM6B,EAAYpC,EAAK,IACjBqC,EAAW,EAALrC,EACNsC,EAAOtC,EAAK,EAEnB,SAAUuC,IAA6B,MAAO,CAAER,EAAG,EAAGC,EAAG,EAAI,CAC7D,SAAUQ,IAA+B,MAAO,CAAET,EAAG,EAAGC,EAAG,EAAGL,MAAO,EAAGE,OAAQ,EAAI,CACpF,SAAUY,IAA+B,MAAO,CAAEhE,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAI,CCnG7F,MAAM4D,IAAEA,EAAGC,IAAEA,EAAGC,KAAEA,EAAIC,KAAEA,GAAS5C,MAC3BW,MAAEA,GAAUV,EACZ4C,EAAY,CAAA,EAElB,SAASC,IACL,OAAApH,OAAAH,OAAAG,OAAAH,OAAAG,OAAAH,OAAA,GD8FkD,CAAEiD,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,IADnC,CAAEiD,EAAG,EAAGC,EAAG,EAAGL,MAAO,EAAGE,OAAQ,KC7FjCH,OAAQ,EAAGE,OAAQ,EAAGlB,SAAU,EAAGsC,MAAO,EAAGC,MAAO,GACzG,CAEO,MAAMC,EAAe,CAExBC,cDyFkD,CAAE1E,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,GCvFrFsE,aAAcL,IAEdM,WAAY,CAAA,EAEZ,GAAAC,CAAIhI,EAAgBmD,EAAI,EAAGC,EAAI,EAAGC,EAAI,EAAGC,EAAI,EAAGC,EAAI,EAAGC,EAAI,GACvDxD,EAAEmD,EAAIA,EACNnD,EAAEoD,EAAIA,EACNpD,EAAEqD,EAAIA,EACNrD,EAAEsD,EAAIA,EACNtD,EAAEuD,EAAIA,EACNvD,EAAEwD,EAAIA,CACV,EAEAyE,IAAKd,EAELM,WAEA,IAAAS,CAAKlI,EAAgBkD,GACjBlD,EAAEmD,EAAID,EAAOC,EACbnD,EAAEoD,EAAIF,EAAOE,EACbpD,EAAEqD,EAAIH,EAAOG,EACbrD,EAAEsD,EAAIJ,EAAOI,EACbtD,EAAEuD,EAAIL,EAAOK,EACbvD,EAAEwD,EAAIN,EAAOM,CACjB,EAEA,SAAA2E,CAAUnI,EAAgByG,EAAWC,GACjC1G,EAAEuD,GAAKkD,EACPzG,EAAEwD,GAAKkD,CACX,EAEA,cAAA0B,CAAepI,EAAgByG,EAAWC,EAAW2B,GACjDrI,EAAEuD,GAAKvD,EAAEmD,EAAIsD,EAAIzG,EAAEqD,EAAIqD,EACvB1G,EAAEwD,GAAKxD,EAAEoD,EAAIqD,EAAIzG,EAAEsD,EAAIoD,EACnB2B,IAAWrI,EAAEuD,GAAKkD,EAAGzG,EAAEwD,GAAKkD,EACpC,EAEA,KAAAV,CAAMhG,EAAgBoG,EAAgBE,EAAiBF,GACnDpG,EAAEmD,GAAKiD,EACPpG,EAAEoD,GAAKgD,EACPpG,EAAEqD,GAAKiD,EACPtG,EAAEsD,GAAKgD,CACX,EAEA,UAAAgC,CAAWtI,EAAgBuI,EAAoBC,GAC3CA,IAAOA,EAAKxI,GACZwI,EAAGrF,EAAInD,EAAEmD,EAAIoF,EACbC,EAAGpF,EAAIpD,EAAEoD,EAAImF,EACbC,EAAGnF,EAAIrD,EAAEqD,EAAIkF,EACbC,EAAGlF,EAAItD,EAAEsD,EAAIiF,EACbC,EAAGjF,EAAIvD,EAAEuD,EAAIgF,EACbC,EAAGhF,EAAIxD,EAAEwD,EAAI+E,CACjB,EAEA,YAAAE,CAAazI,EAAgB0I,EAAoBtC,EAAgBE,GAC7DqC,EAAEC,aAAa5I,EAAG0I,EAAQlB,GAC1BmB,EAAEE,aAAa7I,EAAGwH,EAAWpB,EAAQE,EACzC,EAEA,YAAAuC,CAAa7I,EAAgB0I,EAAoBtC,EAAgBE,EAAiBF,GAC9EuC,EAAEP,eAAepI,EAAG0I,EAAOjC,EAAGiC,EAAOhC,GACrCiC,EAAE3C,MAAMhG,EAAGoG,EAAQE,GACnBqC,EAAEP,eAAepI,GAAI0I,EAAOjC,GAAIiC,EAAOhC,EAC3C,EAGA,MAAAoC,CAAO9I,EAAgBoF,GACnB,MAAMjC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,GAAMtD,EAGjB+I,EAAO1B,EADbjC,GAAY0B,GAENkC,EAAO5B,EAAIhC,GAEjBpF,EAAEmD,EAAIA,EAAI4F,EAAO3F,EAAI4F,EACrBhJ,EAAEoD,EAAID,EAAI6F,EAAO5F,EAAI2F,EACrB/I,EAAEqD,EAAIA,EAAI0F,EAAOzF,EAAI0F,EACrBhJ,EAAEsD,EAAID,EAAI2F,EAAO1F,EAAIyF,CACzB,EAEA,aAAAE,CAAcjJ,EAAgB0I,EAAoBtD,GAC9CuD,EAAEC,aAAa5I,EAAG0I,EAAQlB,GAC1BmB,EAAEO,cAAclJ,EAAGwH,EAAWpC,EAClC,EAEA,aAAA8D,CAAclJ,EAAgB0I,EAAoBtD,GAC9CuD,EAAEP,eAAepI,EAAG0I,EAAOjC,EAAGiC,EAAOhC,GACrCiC,EAAEG,OAAO9I,EAAGoF,GACZuD,EAAEP,eAAepI,GAAI0I,EAAOjC,GAAIiC,EAAOhC,EAC3C,EAGA,IAAAyC,CAAKnJ,EAAgB0H,EAAeC,GAChC,MAAMxE,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,GAAMtD,EAEnB2H,IACAA,GAASb,EACT9G,EAAEmD,EAAIA,EAAIE,EAAIsE,EACd3H,EAAEoD,EAAIA,EAAIE,EAAIqE,GAGdD,IACAA,GAASZ,EACT9G,EAAEqD,EAAIA,EAAIF,EAAIuE,EACd1H,EAAEsD,EAAIA,EAAIF,EAAIsE,EAEtB,EAEA,WAAA0B,CAAYpJ,EAAgB0I,EAAoBhB,EAAeC,GAC3DgB,EAAEC,aAAa5I,EAAG0I,EAAQlB,GAC1BmB,EAAEU,YAAYrJ,EAAGwH,EAAWE,EAAOC,EACvC,EAEA,WAAA0B,CAAYrJ,EAAgB0I,EAAoBhB,EAAeC,EAAgB,GAC3EgB,EAAEP,eAAepI,EAAG0I,EAAOjC,EAAGiC,EAAOhC,GACrCiC,EAAEQ,KAAKnJ,EAAG0H,EAAOC,GACjBgB,EAAEP,eAAepI,GAAI0I,EAAOjC,GAAIiC,EAAOhC,EAC3C,EAGA,QAAA4C,CAAStJ,EAAgBuJ,GACrB,MAAMpG,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,GAAMxD,EAE7BA,EAAEmD,EAAIoG,EAAMpG,EAAIA,EAAIoG,EAAMnG,EAAIC,EAC9BrD,EAAEoD,EAAImG,EAAMpG,EAAIC,EAAImG,EAAMnG,EAAIE,EAC9BtD,EAAEqD,EAAIkG,EAAMlG,EAAIF,EAAIoG,EAAMjG,EAAID,EAC9BrD,EAAEsD,EAAIiG,EAAMlG,EAAID,EAAImG,EAAMjG,EAAIA,EAC9BtD,EAAEuD,EAAIgG,EAAMhG,EAAIJ,EAAIoG,EAAM/F,EAAIH,EAAIE,EAClCvD,EAAEwD,EAAI+F,EAAMhG,EAAIH,EAAImG,EAAM/F,EAAIF,EAAIE,CACtC,EAEA,cAAAgG,CAAexJ,EAA+ByJ,EAAoCjB,EAAiCkB,EAAgCC,GAC/I,MAAMpG,EAAEA,EAACC,EAAEA,GAAMxD,EAMjB,GAJAwI,IAAOA,EAAKxI,GAERjB,EAAY2K,KAAcA,EAAsB,IAAR1J,EAAEmD,GAAWnD,EAAEoD,GAAKpD,EAAEqD,GAAa,IAARrD,EAAEsD,GAErEoG,EAAa,CACb,MAAMvG,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,GAAMtD,EAEvBwI,EAAGrF,EAAIA,EAAIsG,EAAOtG,EAAIC,EAAIqG,EAAOpG,EACjCmF,EAAGpF,EAAID,EAAIsG,EAAOrG,EAAIA,EAAIqG,EAAOnG,EACjCkF,EAAGnF,EAAIA,EAAIoG,EAAOtG,EAAIG,EAAImG,EAAOpG,EACjCmF,EAAGlF,EAAID,EAAIoG,EAAOrG,EAAIE,EAAImG,EAAOnG,EAE7BqG,IACAnB,EAAGpC,OAASqD,EAAOrD,OAASuD,EAAevD,OAC3CoC,EAAGlC,OAASmD,EAAOnD,OAASqD,EAAerD,OAGnD,MACIkC,EAAGrF,EAAIsG,EAAOtG,EACdqF,EAAGpF,EAAIqG,EAAOrG,EACdoF,EAAGnF,EAAIoG,EAAOpG,EACdmF,EAAGlF,EAAImG,EAAOnG,EAEVqG,IACAnB,EAAGpC,OAASqD,EAAOrD,OACnBoC,EAAGlC,OAASmD,EAAOnD,QAI3BkC,EAAGjF,EAAIA,EAAIkG,EAAOtG,EAAIK,EAAIiG,EAAOpG,EAAIoG,EAAOlG,EAC5CiF,EAAGhF,EAAID,EAAIkG,EAAOrG,EAAII,EAAIiG,EAAOnG,EAAImG,EAAOjG,CAChD,EAGA,MAAAoG,CAAO5J,EAAgBuJ,GACnBZ,EAAEW,SAAStJ,EAAG2I,EAAEkB,WAAWN,GAC/B,EAEA,YAAAO,CAAa9J,EAAgByJ,GACzBd,EAAEa,eAAexJ,EAAG2I,EAAEkB,WAAWJ,GACrC,EAEA,UAAAI,CAAW7J,GACP,MAAM+H,WAAEA,GAAeY,EAGvB,OAFAA,EAAET,KAAKH,EAAY/H,GACnB2I,EAAEoB,OAAOhC,GACFA,CACX,EAEA,MAAAgC,CAAO/J,GACH,MAAMmD,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,GAAMxD,EAC7B,GAAKoD,GAAMC,EAWJ,CACH,MAAM2G,EAAI,GAAK7G,EAAIG,EAAIF,EAAIC,GAC3BrD,EAAEmD,EAAIG,EAAI0G,EACVhK,EAAEoD,GAAKA,EAAI4G,EACXhK,EAAEqD,GAAKA,EAAI2G,EACXhK,EAAEsD,EAAIH,EAAI6G,EACVhK,EAAEuD,IAAMA,EAAID,EAAIE,EAAIH,GAAK2G,EACzBhK,EAAEwD,IAAMA,EAAIL,EAAII,EAAIH,GAAK4G,CAC7B,MAlBI,GAAU,IAAN7G,GAAiB,IAANG,EACXtD,EAAEuD,GAAKA,EACPvD,EAAEwD,GAAKA,MACJ,CACH,MAAMwG,EAAI,GAAK7G,EAAIG,GACnBtD,EAAEmD,EAAIG,EAAI0G,EACVhK,EAAEsD,EAAIH,EAAI6G,EACVhK,EAAEuD,GAAKA,EAAID,EAAI0G,EACfhK,EAAEwD,GAAKA,EAAIL,EAAI6G,CACnB,CAWR,EAGA,YAAAC,CAAajK,EAAgBkK,EAAmB1B,EAAiB2B,GAC7D,MAAM1D,EAAEA,EAACC,EAAEA,GAAMwD,EAGjB1B,IAAOA,EAAK0B,GACZ1B,EAAG/B,EAAIA,EAAIzG,EAAEmD,EAAIuD,EAAI1G,EAAEqD,EACvBmF,EAAG9B,EAAID,EAAIzG,EAAEoD,EAAIsD,EAAI1G,EAAEsD,EAElB6G,IACD3B,EAAG/B,GAAKzG,EAAEuD,EACViF,EAAG9B,GAAK1G,EAAEwD,EAElB,EAEA,YAAAoF,CAAa5I,EAAgBoK,EAAmB5B,EAAiB2B,GAC7D,MAAMhH,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,GAAMtD,EACjBgK,EAAI,GAAK7G,EAAIG,EAAIF,EAAIC,IAErBoD,EAAEA,EAACC,EAAEA,GAAM0D,EAOjB,GAJA5B,IAAOA,EAAK4B,GACZ5B,EAAG/B,GAAKA,EAAInD,EAAIoD,EAAIrD,GAAK2G,EACzBxB,EAAG9B,GAAKA,EAAIvD,EAAIsD,EAAIrD,GAAK4G,GAEpBG,EAAU,CACX,MAAM5G,EAAEA,EAACC,EAAEA,GAAMxD,EACjBwI,EAAG/B,IAAMlD,EAAID,EAAIE,EAAIH,GAAK2G,EAC1BxB,EAAG9B,IAAMlD,EAAIL,EAAII,EAAIH,GAAK4G,CAC9B,CACJ,EAEA,SAAAK,CAAUrK,EAAgBsK,EAAqB5B,EAAqB6B,EAAqBC,GACrF,MAAM/D,EAAEA,EAACC,EAAEA,EAACN,OAAEA,EAAME,OAAEA,GAAWgE,EAIjC,GAFIvL,EAAYyL,KAAYA,EAAYF,EAAOlF,UAAYkF,EAAO5C,OAAS4C,EAAO3C,OAE9E6C,EAAW,CAEX,MAAMpF,SAAEA,EAAQsC,MAAEA,EAAKC,MAAEA,GAAU2C,EAC7B3E,EAAIP,EAAW0B,EACfiC,EAAO1B,EAAI1B,GACXqD,EAAO5B,EAAIzB,GAEjB,GAAI+B,GAASC,EAAO,CAGhB,MAAM8C,EAAK/C,EAAQZ,EACb4D,EAAK/C,EAAQb,EAEnB9G,EAAEmD,GAAK4F,EAAO2B,GAAM1B,GAAQ5C,EAC5BpG,EAAEoD,GAAK4F,EAAO0B,EAAK3B,GAAQ3C,EAC3BpG,EAAEqD,GAAaoH,EAAK1B,EAAZC,GAAoB1C,EAC5BtG,EAAEsD,GAAKyF,EAAO0B,EAAKzB,GAAQ1C,CAE/B,MAGItG,EAAEmD,EAAI4F,EAAO3C,EACbpG,EAAEoD,EAAI4F,EAAO5C,EACbpG,EAAEqD,GAAK2F,EAAO1C,EACdtG,EAAEsD,EAAIyF,EAAOzC,CAIrB,MACItG,EAAEmD,EAAIiD,EACNpG,EAAEoD,EAAI,EACNpD,EAAEqD,EAAI,EACNrD,EAAEsD,EAAIgD,EAKVtG,EAAEuD,EAAIkD,EACNzG,EAAEwD,EAAIkD,GAEFgC,EAASA,GAAU6B,IAAQ5B,EAAEP,eAAepI,GAAI0I,EAAOjC,GAAIiC,EAAOhC,GAAI6D,EAE9E,EAEA,SAAAI,CAAU3K,EAAgB0I,EAAqB6B,EAAqBK,GAChE,MAAMzH,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,GAAMxD,EAE7B,IAAkBoG,EAAgBE,EAAgBlB,EAAkBsC,EAAeC,EAA/ElB,EAAIlD,EAAGmD,EAAIlD,EAEf,GAAIJ,GAAKC,EAAG,CAER,MAAM2G,EAAI7G,EAAIG,EAAIF,EAAIC,EAEtB,GAAIA,IAAMuH,EAAY,CAClBxE,EAASmB,EAAKpE,EAAIA,EAAIC,EAAIA,GAC1BkD,EAAS0D,EAAI5D,EAEb,MAAM2C,EAAO5F,EAAIiD,EACjBhB,EAAWhC,EAAI,EAAIkE,EAAKyB,IAASzB,EAAKyB,EAE1C,KAAO,CACHzC,EAASiB,EAAKlE,EAAIA,EAAIC,EAAIA,GAC1B8C,EAAS4D,EAAI1D,EAEb,MAAMyC,EAAO1F,EAAIiD,EACjBlB,EAAW4B,GAAQ1D,EAAI,EAAIgE,GAAMyB,IAASzB,EAAKyB,GACnD,CAEA,MAAMA,EAAOzD,EAAM+B,EAAIjC,IACjB4D,EAAO5B,EAAIhC,GAEjBgB,EAASd,EAAMc,GAASE,EAAShB,EAAMgB,GACvCoB,EAAQqB,EAAOzD,GAAOjC,EAAIiD,EAAS0C,GAAQD,EAAOjC,EAAW,GAAK,EAClEa,EAAQoB,EAAOzD,GAAOlC,EAAIgD,EAAS4C,GAAQD,EAAOjC,EAAW,GAAK,EAClE1B,EAAWE,EAAMF,EAAW0B,EAEhC,MACIV,EAASjD,EACTmD,EAAShD,EACT8B,EAAWsC,EAAQC,EAAQ,EAS/B,OANIe,EAAS6B,GAAU7B,KACnBjC,GAAKiC,EAAOjC,EAAItD,EAAIuF,EAAOhC,EAAIrD,EAC/BqD,GAAKgC,EAAOjC,EAAIrD,EAAIsF,EAAOhC,EAAIpD,EAC1BiH,IAAQ9D,GAAKiC,EAAOjC,EAAGC,GAAKgC,EAAOhC,IAGrC,CAAED,IAAGC,IAAGN,SAAQE,SAAQlB,WAAUsC,QAAOC,QACpD,EAEA,SAAAkD,CAAU7K,EAAgBoG,EAAiBE,EAASF,GAChD,MAAM0E,EAAQ9K,EACd,IAAKoG,IAAWE,EAAQ,CACpB,MAAMnD,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,GAAMtD,EACnBoD,GAAKC,EAELiD,GAAUnD,EAAIG,EAAIF,EAAIC,IADtB+C,EAASmB,EAAKpE,EAAIA,EAAIC,EAAIA,KAG1BgD,EAASjD,EACTmD,EAAShD,EAEjB,CAGA,OAFAwH,EAAM1E,OAASA,EACf0E,EAAMxE,OAASA,EACRwE,CACX,EAEA,KAAAC,CAAM/K,GACF2I,EAAEX,IAAIhI,EACV,GAGE2I,EAAIf,gBCjXFgB,EAAYqB,aAAEA,GAAiBtB,OAC/BvB,EAAGC,IAAEA,EAAGzB,IAAEA,EAAG2B,KAAEA,EAAIyD,MAAEA,MAAOlG,EAAGN,MAAEA,GAAUG,KAGtCsG,EAAc,CAEvBC,aF0FgD,CAAEzE,EAAG,EAAGC,EAAG,GExF3Dc,UAAW,CAAA,EACX2D,gBAAiB,CAAA,EAEjB,GAAAnD,CAAIhI,EAAeyG,EAAI,EAAGC,EAAI,GAC1B1G,EAAEyG,EAAIA,EACNzG,EAAE0G,EAAIA,CACV,EAEA,SAAA0E,CAAUpL,EAAqByG,EAAWC,GACtC1G,EAAEqL,QAAU5E,EACZzG,EAAEsL,QAAUvM,EAAY2H,GAAKD,EAAIC,CACrC,EAEA,IAAAwB,CAAKlI,EAAeuL,GAChBvL,EAAEyG,EAAI8E,EAAM9E,EACZzG,EAAE0G,EAAI6E,EAAM7E,CAChB,EAEA,QAAA8E,CAASxL,EAAeyG,EAAWC,GAC/B1G,EAAEyG,EAAIA,EACNzG,EAAE0G,EAAIA,CACV,EAEA,KAAAlC,CAAMxE,EAAeyL,GACjBzL,EAAEyG,EAAIgF,EAAYjH,EAAMxE,EAAEyG,EAAI,IAAO,GAAMjC,EAAMxE,EAAEyG,GACnDzG,EAAE0G,EAAI+E,EAAYjH,EAAMxE,EAAE0G,EAAI,IAAO,GAAMlC,EAAMxE,EAAE0G,EACvD,EAEA,IAAAgF,CAAK1L,EAAeyG,EAAwBC,GACpChH,EAAS+G,IAAIzG,EAAEyG,GAAKA,EAAEA,EAAGzG,EAAE0G,GAAKD,EAAEC,IACjC1G,EAAEyG,GAAKA,EAAGzG,EAAE0G,GAAKA,EAC1B,EAGA,KAAAV,CAAMhG,EAAeoG,EAAgBE,EAASF,GACtCpG,EAAEyG,IAAGzG,EAAEyG,GAAKL,GACZpG,EAAE0G,IAAG1G,EAAE0G,GAAKJ,EACpB,EAEA,OAAAqF,CAAQ3L,EAAe0I,EAAoBtC,EAAgBE,EAASF,GAChEpG,EAAEyG,IAAMzG,EAAEyG,EAAIiC,EAAOjC,IAAML,EAAS,GACpCpG,EAAE0G,IAAM1G,EAAE0G,EAAIgC,EAAOhC,IAAMJ,EAAS,EACxC,EAEA,MAAAwC,CAAO9I,EAAeoF,EAAkBsD,GAC/BA,IAAQA,EAASkD,EAAEV,cAExB,MAAMnC,EAAO1B,EADbjC,GAAY0B,GAENkC,EAAO5B,EAAIhC,GACXyG,EAAK7L,EAAEyG,EAAIiC,EAAOjC,EAClBqF,EAAK9L,EAAE0G,EAAIgC,EAAOhC,EACxB1G,EAAEyG,EAAIiC,EAAOjC,EAAIoF,EAAK9C,EAAO+C,EAAK9C,EAClChJ,EAAE0G,EAAIgC,EAAOhC,EAAImF,EAAK7C,EAAO8C,EAAK/C,CACtC,EAGA,aAAAgD,CAAc/L,EAAekD,GACzB,MAAQsE,UAAWwE,GAASJ,EAG5B,OAFA1D,EAAK8D,EAAMhM,GACX4I,EAAa1F,EAAQ8I,EAAMA,GACpBA,CACX,EAEA,aAAAC,CAAcjM,EAAekD,GACzB,MAAQsE,UAAWwE,GAASJ,EAG5B,OAFA1D,EAAK8D,EAAMhM,GACXiK,EAAa/G,EAAQ8I,EAAMA,GACpBA,CACX,EAEA,wBAAAE,CAAyBlM,EAAqBkD,GAC1C,MAAQiI,gBAAiBa,GAASJ,EAGlC,OAFA1D,EAAK8D,EAAMhM,GACX4L,EAAEO,qBAAqBnM,EAAGkD,EAAQ8I,GAC3BA,CACX,EAEA,oBAAAG,CAAqBnM,EAAqBkD,EAA8BsF,GACpEA,IAAOA,EAAKxI,GACZ4I,EAAa1F,EAAQlD,EAAGwI,GACxBA,EAAG6C,QAAU1G,KAAKiB,IAAI5F,EAAEqL,QAAUnI,EAAOkD,QACzCoC,EAAG8C,QAAU3G,KAAKiB,IAAI5F,EAAEsL,QAAUpI,EAAOoD,OAC7C,EAGA,SAAA8F,CAAUpM,EAAekD,EAAqBsF,GAC1CI,EAAa1F,EAAQlD,EAAGwI,EAC5B,EAEA,SAAA6D,CAAUrM,EAAekD,EAAqBsF,GAC1CyB,EAAa/G,EAAQlD,EAAGwI,EAC5B,EAGA8D,UAAS,CAACtM,EAAewI,KACd,CAAE/B,EAAGzG,EAAEyG,GAAK+B,EAAG/B,EAAIzG,EAAEyG,GAAK,EAAGC,EAAG1G,EAAE0G,GAAK8B,EAAG9B,EAAI1G,EAAE0G,GAAK,IAGhE6F,WAAU,CAACC,EAAYC,IACZD,GAAMC,EAAKD,GAAM,EAG5BE,WAAU,CAACC,EAAYC,IACZD,GAAMC,EAAKD,GAAM,EAG5BE,YAAW,CAAC7M,EAAeuL,IAChBuB,EAAgB9M,EAAEyG,EAAGzG,EAAE0G,EAAG6E,EAAM9E,EAAG8E,EAAM7E,GAGpD,eAAAoG,CAAgBN,EAAYG,EAAYF,EAAYG,GAChD,MAAMnG,EAAIb,EAAI6G,EAAKD,GACb9F,EAAId,EAAIgH,EAAKD,GACnB,OAAOpF,EAAKd,EAAIA,EAAIC,EAAIA,EAC5B,EAEAqG,mBAAkB,CAACP,EAAYG,EAAYF,EAAYG,EAAYI,EAAYC,IACpEnI,EAAIgI,EAAgBN,EAAIG,EAAIF,EAAIG,GAAKE,EAAgBL,EAAIG,EAAII,EAAIC,IAG5EC,SAAQ,CAAClN,EAAewI,IACb2E,EAASnN,EAAGwI,GAAM1B,EAG7BsG,YAAW,CAACpN,EAAe0I,EAAoBF,EAAgB6E,KACtDA,IAAUA,EAAW3E,GACnBkD,EAAE0B,cAActN,EAAEyG,EAAGzG,EAAE0G,EAAGgC,EAAOjC,EAAGiC,EAAOhC,EAAG8B,EAAG/B,EAAG+B,EAAG9B,EAAG2G,EAAS5G,EAAG4G,EAAS3G,GAAKI,GAG/F,aAAAwG,CAAcC,EAAeC,EAAeC,EAAiBC,EAAiBC,EAAaC,EAAaC,EAAoBC,GACpH/O,EAAY8O,KAAYA,EAAYJ,EAASK,EAAYJ,GAC7D,MAAMvK,EAAIoK,EAAQE,EACZrK,EAAIoK,EAAQE,EACZrK,EAAIsK,EAAME,EACVvK,EAAIsK,EAAME,EAChB,OAAOnJ,KAAKqG,MAAM7H,EAAIG,EAAIF,EAAIC,EAAGF,EAAIE,EAAID,EAAIE,EACjD,EAEA6J,SAAQ,CAACnN,EAAewI,IACbwC,EAAMxC,EAAG9B,EAAI1G,EAAE0G,EAAG8B,EAAG/B,EAAIzG,EAAEyG,GAItC,gBAAAsH,CAAiB/N,EAAewI,EAAgB2B,EAAkB6D,GAC9D,MAAMrI,EAAIwH,EAASnN,EAAGwI,GAItB,OAHAA,EAAKwF,EAAWxF,EAAK,CAAA,GAClB/B,EAAIzG,EAAEyG,EAAIY,EAAI1B,GAAKwE,EACtB3B,EAAG9B,EAAI1G,EAAE0G,EAAIU,EAAIzB,GAAKwE,EACf3B,CACX,EAEA,cAAAyF,CAAeC,GACX,IAAIC,EAASD,EAEb,OADIxO,EAASwO,EAAa,MAAKC,EAAS,GAAKD,EAA8B3N,QAAQ6N,GAAKD,EAAOE,KAAKD,EAAE3H,EAAG2H,EAAE1H,KACpGyH,CACX,EAEA,KAAApD,CAAM/K,GACF4L,EAAEb,MAAM/K,EACZ,GAGE4L,EAAIX,GACJ6B,gBAAEA,EAAe5E,KAAEA,EAAIiF,SAAEA,GAAavB,QC7K/B0C,EAKT,WAAA7N,CAAYgG,EAAyBC,GACjC5E,KAAKkG,IAAIvB,EAAGC,EAChB,CAEO,GAAAsB,CAAIvB,EAAyBC,GAEhC,OADAhH,EAAS+G,GAAKmF,EAAE1D,KAAKpG,KAAM2E,GAAKmF,EAAE5D,IAAIlG,KAAM2E,EAAGC,GACxC5E,IACX,CAEO,GAAAmG,GACH,MAAMxB,EAAEA,EAACC,EAAEA,GAAM5E,KACjB,MAAO,CAAE2E,IAAGC,IAChB,CAGO,KAAA3F,GACH,OAAO,IAAIuN,EAAMxM,KACrB,CAGO,IAAA4J,CAAKjF,EAAwBC,GAEhC,OADAkF,EAAEF,KAAK5J,KAAM2E,EAAGC,GACT5E,IACX,CAEO,KAAAkE,CAAMI,EAAgBE,GAEzB,OADAsF,EAAE5F,MAAMlE,KAAMsE,EAAQE,GACfxE,IACX,CAEO,OAAA6J,CAAQjD,EAAoBtC,EAAgBE,GAE/C,OADAsF,EAAED,QAAQ7J,KAAM4G,EAAQtC,EAAQE,GACzBxE,IACX,CAEO,MAAAgH,CAAO1D,EAAkBsD,GAE5B,OADAkD,EAAE9C,OAAOhH,KAAMsD,EAAUsD,GAClB5G,IACX,CAEO,QAAAyM,CAAS7F,EAAoBtD,GAEhC,OADAwG,EAAE9C,OAAOhH,KAAMsD,EAAUsD,GAClB5G,IACX,CAEO,WAAAsL,CAAY1E,EAAoBF,EAAgB6E,GACnD,OAAOzB,EAAEwB,YAAYtL,KAAM4G,EAAQF,EAAI6E,EAC3C,CAGO,SAAAjB,CAAUlJ,EAAqBsF,GAElC,OADAoD,EAAEQ,UAAUtK,KAAMoB,EAAQsF,GACnB1G,IACX,CAEO,SAAAuK,CAAUnJ,EAAqBsF,GAElC,OADAoD,EAAES,UAAUvK,KAAMoB,EAAQsF,GACnB1G,IACX,CAGO,SAAAwK,CAAU9D,GACb,OAAO,IAAI8F,EAAM1C,EAAEU,UAAUxK,KAAM0G,GACvC,CAEO,WAAAqE,CAAYrE,GACf,OAAOoD,EAAEiB,YAAY/K,KAAM0G,EAC/B,CAEO,gBAAAuF,CAAiBvF,EAAgB2B,EAAkB6D,GACtD,OAAO,IAAIM,EAAM1C,EAAEmC,iBAAiBjM,KAAM0G,EAAI2B,EAAU6D,GAC5D,CAEO,QAAAd,CAAS1E,GACZ,OAAOoD,EAAEsB,SAASpL,KAAM0G,EAC5B,CAEO,QAAA2E,CAAS3E,GACZ,OAAOoD,EAAEuB,SAASrL,KAAM0G,EAC5B,CAGO,KAAAuC,GAEH,OADAa,EAAEb,MAAMjJ,MACDA,IACX,EAIG,MAAM0F,EAAY,IAAI8G,QC7FhBE,EAYT,WAAA/N,CAAY0C,EAA0BC,EAAYC,EAAYC,EAAYC,EAAYC,GAClF1B,KAAKkG,IAAI7E,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAC5B,CAEO,GAAAwE,CAAI7E,EAA0BC,EAAYC,EAAYC,EAAYC,EAAYC,GAEjF,OADA9D,EAASyD,GAAKwF,EAAET,KAAKpG,KAAMqB,GAAKwF,EAAEX,IAAIlG,KAAMqB,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,GACpD1B,IACX,CAEO,OAAA2M,CAAQC,GAIX,OAHA/F,EAAET,KAAKpG,KAAM4M,GACb5M,KAAKsE,OAASsI,EAActI,OAC5BtE,KAAKwE,OAASoI,EAAcpI,OACrBxE,IACX,CAEO,GAAAmG,GACH,MAAM9E,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACC,EAAEA,GAAM1B,KAC7B,MAAO,CAAEqB,IAAGC,IAAGC,IAAGC,IAAGC,IAAGC,IAC5B,CAEO,KAAAzC,GACH,OAAO,IAAIyN,EAAO1M,KACtB,CAGO,SAAAqG,CAAU1B,EAAWC,GAExB,OADAiC,EAAER,UAAUrG,KAAM2E,EAAGC,GACd5E,IACX,CAEO,cAAAsG,CAAe3B,EAAWC,GAE7B,OADAiC,EAAEP,eAAetG,KAAM2E,EAAGC,GACnB5E,IACX,CAEO,KAAAkE,CAAMS,EAAWC,GAEpB,OADAiC,EAAE3C,MAAMlE,KAAM2E,EAAGC,GACV5E,IACX,CAEO,SAAA6M,CAAUlI,EAAWC,GAIxB,OAHAiC,EAAE3C,MAAMlE,KAAM2E,EAAGC,GACjB5E,KAAKsE,QAAUK,EACf3E,KAAKwE,QAAUI,GAAKD,EACb3E,IACX,CAEO,UAAAwG,CAAWC,GAEd,OADAI,EAAEL,WAAWxG,KAAMyG,GACZzG,IACX,CAEO,YAAA2G,CAAaC,EAAoBjC,EAAWC,GAE/C,OADAiC,EAAEF,aAAa3G,KAAM4G,EAAQjC,EAAGC,GACzB5E,IACX,CACO,YAAA+G,CAAaH,EAAoBjC,EAAWC,GAE/C,OADAiC,EAAEE,aAAa/G,KAAM4G,EAAQjC,EAAGC,GACzB5E,IACX,CAEO,MAAAgH,CAAO8F,GAEV,OADAjG,EAAEG,OAAOhH,KAAM8M,GACR9M,IACX,CAEO,aAAAmH,CAAcP,EAAoBkG,GAErC,OADAjG,EAAEM,cAAcnH,KAAM4G,EAAQkG,GACvB9M,IACX,CAEO,aAAAoH,CAAcR,EAAoBkG,GAErC,OADAjG,EAAEO,cAAcpH,KAAM4G,EAAQkG,GACvB9M,IACX,CAGO,IAAAqH,CAAK1C,EAAWC,GAEnB,OADAiC,EAAEQ,KAAKrH,KAAM2E,EAAGC,GACT5E,IACX,CAEO,WAAAsH,CAAYV,EAAoBjC,EAAWC,GAE9C,OADAiC,EAAES,YAAYtH,KAAM4G,EAAQjC,EAAGC,GACxB5E,IACX,CAEO,WAAAuH,CAAYX,EAAoBjC,EAAWC,GAE9C,OADAiC,EAAEU,YAAYvH,KAAM4G,EAAQjC,EAAGC,GACxB5E,IACX,CAGO,QAAAwH,CAASC,GAEZ,OADAZ,EAAEW,SAASxH,KAAMyH,GACVzH,IACX,CAEO,cAAA0H,CAAeC,GAElB,OADAd,EAAEa,eAAe1H,KAAM2H,GAChB3H,IACX,CAGO,MAAA8H,CAAOL,GAEV,OADAZ,EAAEiB,OAAO9H,KAAMyH,GACRzH,IACX,CAEO,YAAAgI,CAAaL,GAEhB,OADAd,EAAEmB,aAAahI,KAAM2H,GACd3H,IACX,CAEO,MAAAiI,GAEH,OADApB,EAAEoB,OAAOjI,MACFA,IACX,CAEO,UAAA+M,GAIH,OAHAlG,EAAEoB,OAAOjI,MACTA,KAAKsE,OAAS,EAAItE,KAAKsE,OACvBtE,KAAKwE,OAAS,EAAIxE,KAAKwE,OAChBxE,IACX,CAGO,YAAAmI,CAAaC,EAAmB1B,EAAiB2B,GACpDxB,EAAEsB,aAAanI,KAAMoI,EAAO1B,EAAI2B,EACpC,CAEO,YAAAvB,CAAawB,EAAmB5B,EAAiB2B,GACpDxB,EAAEC,aAAa9G,KAAMsI,EAAO5B,EAAI2B,EACpC,CAGO,SAAAE,CAAUrJ,EAAmB0H,EAAqB6B,GAErD,OADA5B,EAAE0B,UAAUvI,KAAMd,EAAM0H,EAAQ6B,GACzBzI,IACX,CAEO,SAAA6I,CAAUjC,EAAqB6B,EAAqBK,GACvD,OAAOjC,EAAEgC,UAAU7I,KAAM4G,EAAQ6B,EAAQK,EAC7C,CAEO,SAAAC,CAAUzE,EAAiBE,GAC9B,OAAOqC,EAAEkC,UAAU/I,KAAMsE,EAAQE,EACrC,CAEO,KAAAyE,GACHpC,EAAEoC,MAAMjJ,KACZ,EAIG,MAAMiG,EAAa,IAAIyG,EC5KjBM,GAAuB,CAEhCC,gBAAiB,CAAA,EAEjB,QAAAC,CAAShP,EAAwBiP,EAAcC,GAC3ClP,EAAEiP,KAAOjP,EAAEmP,KAAOF,EAClBjP,EAAEkP,KAAOlP,EAAEoP,KAAOF,CACtB,EAEA,QAAAG,CAASrP,EAAwByG,EAAWC,GACxC1G,EAAEiP,KAAOxI,EAAIzG,EAAEiP,KAAOxI,EAAIzG,EAAEiP,KAC5BjP,EAAEkP,KAAOxI,EAAI1G,EAAEkP,KAAOxI,EAAI1G,EAAEkP,KAC5BlP,EAAEmP,KAAO1I,EAAIzG,EAAEmP,KAAO1I,EAAIzG,EAAEmP,KAC5BnP,EAAEoP,KAAO1I,EAAI1G,EAAEoP,KAAO1I,EAAI1G,EAAEoP,IAChC,EAEA,SAAAE,CAAUtP,EAAwByG,EAAWC,EAAWL,EAAeE,GACnE8I,GAASrP,EAAGyG,EAAGC,GACf2I,GAASrP,EAAGyG,EAAIJ,EAAOK,EAAIH,EAC/B,EAEA,IAAA2B,CAAKlI,EAAwBuP,GACzBvP,EAAEiP,KAAOM,EAAGN,KACZjP,EAAEkP,KAAOK,EAAGL,KACZlP,EAAEmP,KAAOI,EAAGJ,KACZnP,EAAEoP,KAAOG,EAAGH,IAChB,EAEA,cAAAI,CAAexP,EAAwBuP,GACnCvP,EAAEiP,KAAOM,EAAGN,KAAOjP,EAAEiP,KAAOM,EAAGN,KAAOjP,EAAEiP,KACxCjP,EAAEkP,KAAOK,EAAGL,KAAOlP,EAAEkP,KAAOK,EAAGL,KAAOlP,EAAEkP,KACxClP,EAAEmP,KAAOI,EAAGJ,KAAOnP,EAAEmP,KAAOI,EAAGJ,KAAOnP,EAAEmP,KACxCnP,EAAEoP,KAAOG,EAAGH,KAAOpP,EAAEoP,KAAOG,EAAGH,KAAOpP,EAAEoP,IAC5C,EAEA,QAAAK,CAASzP,EAAwB0P,GAC7BA,EAAUjJ,EAAIzG,EAAEiP,KAChBS,EAAUhJ,EAAI1G,EAAEkP,KAChBQ,EAAUrJ,MAAQrG,EAAEmP,KAAOnP,EAAEiP,KAC7BS,EAAUnJ,OAASvG,EAAEoP,KAAOpP,EAAEkP,IAClC,IAIEG,SAAEA,IAAaP,GC9CrB,IAAYa,GAOAC,GAPAD,QAAAA,gBAAAA,GAAAA,GAAAA,QAAAA,aAAAA,mBAAU,CAAA,IAClBA,GAAA,IAAA,GAAA,MACAA,GAAAA,GAAA,MAAA,GAAA,QACAA,GAAAA,GAAA,OAAA,GAAA,SACAA,GAAAA,GAAA,KAAA,GAAA,OAGQC,QAAAA,gBAAAA,GAAAA,GAAAA,QAAAA,aAAAA,mBAAU,CAAA,IAClBA,GAAA,QAAA,GAAA,UACAA,GAAAA,GAAA,IAAA,GAAA,MACAA,GAAAA,GAAA,SAAA,GAAA,WACAA,GAAAA,GAAA,MAAA,GAAA,QACAA,GAAAA,GAAA,YAAA,GAAA,cACAA,GAAAA,GAAA,OAAA,GAAA,SACAA,GAAAA,GAAA,WAAA,GAAA,aACAA,GAAAA,GAAA,KAAA,GAAA,OACAA,GAAAA,GAAA,OAAA,GAAA,SACAA,GAAAA,GAAA,YAAA,GAAA,WACAA,GAAAA,GAAA,aAAA,GAAA,YACAA,GAAAA,GAAA,gBAAA,GAAA,eACAA,GAAAA,GAAA,eAAA,GAAA,cCdJ,MAAMC,GAAkC,CACpC,CAAEpJ,EAAG,EAAGC,EAAG,GACX,CAAED,EAAG,GAAKC,EAAG,GACb,CAAED,EAAG,EAAGC,EAAG,GACX,CAAED,EAAG,EAAGC,EAAG,IACX,CAAED,EAAG,EAAGC,EAAG,GACX,CAAED,EAAG,GAAKC,EAAG,GACb,CAAED,EAAG,EAAGC,EAAG,GACX,CAAED,EAAG,EAAGC,EAAG,IACX,CAAED,EAAG,GAAKC,EAAG,KAEjBmJ,GAActP,QAAQuP,GAAQA,EAAKC,KAAO,WAEnC,MAAMC,GAAe,CAExBH,iBAEArI,UAAW,CAAA,EAEXS,OAEA,OAAAgI,CAAQ1F,EAAiB2F,EAAkB1H,EAAgB2H,EAAuBC,EAAuBC,GACrG,MAAM9E,EAAQtD,GAAIsC,GAElB/B,EAAG/B,EAAI8E,EAAM9E,EACb+B,EAAG9B,EAAI6E,EAAM7E,EAGM,YAAf6E,EAAMwE,OACNvH,EAAG/B,GAAKyJ,EAAI7J,MACZmC,EAAG9B,GAAKwJ,EAAI3J,OAER6J,IACKC,IAAiB7H,EAAG/B,GAAK2J,EAAQ3J,EAAG+B,EAAG9B,GAAK0J,EAAQ1J,GACrD6E,EAAM9E,IAAG+B,EAAG/B,GAAkB,IAAZ8E,EAAM9E,EAAW2J,EAAQ/J,MAAqB,KAAZkF,EAAM9E,EAAY8E,EAAM9E,EAAI2J,EAAQ/J,MAAQ,GAChGkF,EAAM7E,IAAG8B,EAAG9B,GAAkB,IAAZ6E,EAAM7E,EAAW0J,EAAQ7J,OAAsB,KAAZgF,EAAM7E,EAAY6E,EAAM7E,EAAI0J,EAAQ7J,OAAS,KAIzG4J,IAAa3H,EAAG/B,GAAKyJ,EAAIzJ,EAAG+B,EAAG9B,GAAKwJ,EAAIxJ,EACjD,EAEA4J,SAAQ,CAAC/F,EAAiB2F,EAAkB1H,KACnCA,IAAIA,EAAK,CAAA,GACdwH,GAAaC,QAAQ1F,EAAQ2F,EAAK1H,GAAI,GAC/BA,IAIf,SAASP,GAAIsC,GACT,OAAOpL,EAASoL,GAAUsF,GAAcD,QAAAA,WAAWrF,IAAWA,CAClE,CCtDA,MAAM0F,QAAEA,IAAYD,GAEPO,GAAc,CACvB,OAAAN,CAAQO,EAAeJ,EAAsBF,EAAkB1H,EAAgB2H,EAAuBE,GAClGJ,GAAQO,EAAON,EAAK1H,EAAI2H,EAAaC,EAASC,EAClD,ICGEtB,gBAAEA,GAAeC,SAAEA,GAAQK,SAAEA,GAAQI,SAAEA,IAAagB,IACpDxG,aAAEA,IAAiBtB,GACnBrD,MAAEA,GAAKN,WAAEA,IAAeJ,SACtB8L,GAAKC,KAAEA,IAAShM,KAExB,IAAIiM,GAAeC,GAAgBC,GAAqBC,GACxD,MAAMxF,GAAQ,CAAA,EACR0E,GAAU,CAAA,EACVe,GAAa,CAAA,EAENC,GAAe,YAExBD,GAEA,GAAAhJ,CAAIhI,EAAgByG,EAAI,EAAGC,EAAI,EAAGL,EAAQ,EAAGE,EAAS,GAClDvG,EAAEyG,EAAIA,EACNzG,EAAE0G,EAAIA,EACN1G,EAAEqG,MAAQA,EACVrG,EAAEuG,OAASA,CACf,EAEA,IAAA2B,CAAKlI,EAAgBkR,GACjBlR,EAAEyG,EAAIyK,EAAOzK,EACbzG,EAAE0G,EAAIwK,EAAOxK,EACb1G,EAAEqG,MAAQ6K,EAAO7K,MACjBrG,EAAEuG,OAAS2K,EAAO3K,MACtB,EAEA,aAAA4K,CAAcnR,EAAgBkR,EAAqBE,EAAqBC,EAAoBC,GACxF,MAAM7K,EAAEA,EAACC,EAAEA,EAACL,MAAEA,EAAKE,OAAEA,GAAW2K,EAChC,GAAI1R,EAAQ4R,GAAS,CACjB,MAAMG,EAAOvM,GAAWoM,GACxBC,EACMG,GAAExJ,IAAIhI,EAAGyG,EAAI8K,EAAK,GAAI7K,EAAI6K,EAAK,GAAIlL,EAAQkL,EAAK,GAAKA,EAAK,GAAIhL,EAASgL,EAAK,GAAKA,EAAK,IACtFC,GAAExJ,IAAIhI,EAAGyG,EAAI8K,EAAK,GAAI7K,EAAI6K,EAAK,GAAIlL,EAAQkL,EAAK,GAAKA,EAAK,GAAIhL,EAASgL,EAAK,GAAKA,EAAK,GAChG,MACQF,IAAUD,GAAUA,GACxBI,GAAExJ,IAAIhI,EAAGyG,EAAI2K,EAAQ1K,EAAI0K,EAAQ/K,EAAiB,EAAT+K,EAAY7K,EAAkB,EAAT6K,GAG9DE,IACa,UAATA,GAAkBtR,EAAE0G,EAAIA,EAAG1G,EAAEuG,OAASA,IACrCvG,EAAEyG,EAAIA,EAAGzG,EAAEqG,MAAQA,GAEhC,EAGA4I,KAAKjP,GAAiCA,EAAEqG,MAAQ,EAAIrG,EAAEyG,EAAIzG,EAAEyG,EAAIzG,EAAEqG,MAElE6I,KAAKlP,GAAiCA,EAAEuG,OAAS,EAAIvG,EAAE0G,EAAI1G,EAAE0G,EAAI1G,EAAEuG,OAEnE4I,KAAKnP,GAAiCA,EAAEqG,MAAQ,EAAIrG,EAAEyG,EAAIzG,EAAEqG,MAAQrG,EAAEyG,EAEtE2I,KAAKpP,GAAiCA,EAAEuG,OAAS,EAAIvG,EAAE0G,EAAI1G,EAAEuG,OAASvG,EAAE0G,EAGxE,IAAAgF,CAAK1L,EAAgByG,EAAWC,GAC5B1G,EAAEyG,GAAKA,EACPzG,EAAE0G,GAAKA,CACX,EAEA,MAAA+K,CAAOzR,EAAgBgB,GACnBhB,EAAEyG,GAAKzF,EAAK0Q,QACZ1R,EAAE0G,GAAK1F,EAAK2Q,OAChB,EAEAC,UAAS,CAAC5R,EAAgByG,EAAWC,KACjC1G,EAACK,OAAAH,OAAA,CAAA,EAAQF,GACTwR,GAAE9F,KAAK1L,EAAGyG,EAAGC,GACN1G,GAGX,iBAAA6R,CAAkB7R,EAAgBwI,EAAwBiB,GACjDjB,EAGDN,GAAKM,EAAIxI,GAFTwI,EAAKxI,EAILyJ,GACAjB,EAAGsJ,UAAYN,GAAErC,KAAK1F,GAAUzJ,EAAEyG,GAClC+B,EAAGuJ,UAAYP,GAAEpC,KAAK3F,GAAUzJ,EAAE0G,KAElC8B,EAAGsJ,QAAU9R,EAAEyG,EAAIzG,EAAEqG,MACrBmC,EAAGuJ,QAAU/R,EAAE0G,EAAI1G,EAAEuG,QAEzBiL,GAAE9F,KAAKlD,GAAKA,EAAGsJ,SAAUtJ,EAAGuJ,QAChC,EAGA,KAAA/L,CAAMhG,EAAgBoG,EAAgBE,EAASF,EAAQ4L,GACnDA,GAAYpG,EAAE5F,MAAMhG,EAAGoG,EAAQE,GAC/BtG,EAAEqG,OAASD,EACXpG,EAAEuG,QAAUD,CAChB,EAEA,OAAAqF,CAAQ3L,EAAgB0I,EAAoBtC,EAAgBE,EAASF,GACjEwF,EAAED,QAAQ3L,EAAG0I,EAAQtC,EAAQE,GAC7BtG,EAAEqG,OAASD,EACXpG,EAAEuG,QAAUD,CAChB,EAEA2F,cAAa,CAACjM,EAAgBkD,KAC1BsO,GAAEtJ,KAAK8I,GAAYhR,GACnBwR,GAAEnF,UAAU2E,GAAY9N,GACjB8N,IAGXiB,WAAU,CAACjS,EAAgBkD,KACvBlD,EAACK,OAAAH,OAAA,CAAA,EAAQF,GACTwR,GAAEnF,UAAUrM,EAAGkD,GACRlD,GAGX,SAAAqM,CAAUrM,EAAgBkD,EAAqBsF,GAI3C,GAFAA,IAAOA,EAAKxI,GAEK,IAAbkD,EAAOE,GAAwB,IAAbF,EAAOG,EAAS,CAElC,MAAMF,EAAEA,EAACG,EAAEA,GAAMJ,EACbC,EAAI,GACJqF,EAAGnC,MAAQrG,EAAEqG,MAAQlD,EACrBqF,EAAG/B,EAAIvD,EAAOK,EAAIvD,EAAEyG,EAAItD,IAExBqF,EAAGnC,MAAQrG,EAAEqG,OAASlD,EACtBqF,EAAG/B,EAAIvD,EAAOK,EAAIvD,EAAEyG,EAAItD,EAAIqF,EAAGnC,OAG/B/C,EAAI,GACJkF,EAAGjC,OAASvG,EAAEuG,OAASjD,EACvBkF,EAAG9B,EAAIxD,EAAOM,EAAIxD,EAAE0G,EAAIpD,IAExBkF,EAAGjC,OAASvG,EAAEuG,QAAUjD,EACxBkF,EAAG9B,EAAIxD,EAAOM,EAAIxD,EAAE0G,EAAIpD,EAAIkF,EAAGjC,OAGvC,MAEIgF,GAAM9E,EAAIzG,EAAEyG,EACZ8E,GAAM7E,EAAI1G,EAAE0G,EAEZuD,GAAa/G,EAAQqI,GAAO0E,IAC5BjB,GAASD,GAAiBkB,GAAQxJ,EAAGwJ,GAAQvJ,GAE7C6E,GAAM9E,EAAIzG,EAAEyG,EAAIzG,EAAEqG,MAElB4D,GAAa/G,EAAQqI,GAAO0E,IAC5BZ,GAASN,GAAiBkB,GAAQxJ,EAAGwJ,GAAQvJ,GAE7C6E,GAAM7E,EAAI1G,EAAE0G,EAAI1G,EAAEuG,OAElB0D,GAAa/G,EAAQqI,GAAO0E,IAC5BZ,GAASN,GAAiBkB,GAAQxJ,EAAGwJ,GAAQvJ,GAE7C6E,GAAM9E,EAAIzG,EAAEyG,EAEZwD,GAAa/G,EAAQqI,GAAO0E,IAC5BZ,GAASN,GAAiBkB,GAAQxJ,EAAGwJ,GAAQvJ,GAE7C+I,GAASV,GAAiBvG,EAElC,EAEA,SAAA4D,CAAUpM,EAAgBkD,EAAqBsF,GAC3CA,IAAOA,EAAKxI,GACZwR,GAAE9F,KAAKlD,GAAKtF,EAAOK,GAAIL,EAAOM,GAC9BgO,GAAExL,MAAMwC,EAAI,EAAItF,EAAOC,EAAG,EAAID,EAAOI,EACzC,EAEA,YAAA4O,CAAalS,EAAgBmS,EAAkBC,EAAY,GACvD,MAAMpM,EAAQrB,KAAKG,IAAIsN,EAAWZ,GAAEa,YAAYrS,EAAGmS,IACnD,OAAO,IAAI3D,EAAOxI,EAAO,EAAG,EAAGA,GAAQmM,EAAI1L,EAAIT,GAAQmM,EAAIzL,EAAIV,EACnE,EAEA,WAAAqM,CAAYrS,EAAcmS,EAAgBG,GACtC,MAAMC,EAAKvS,EAAEqG,MAAQ8L,EAAI9L,MAAOmM,EAAKxS,EAAEuG,OAAS4L,EAAI5L,OACpD,OAAO+L,EAAc3N,KAAKI,IAAIwN,EAAIC,GAAM7N,KAAKG,IAAIyN,EAAIC,EACzD,EAEA,GAAAL,CAAInS,EAAcmS,EAAgB3B,EAAgB,SAAUiC,EAAqC,EAAGC,GAAa,EAAMlK,GACnHA,IAAOA,EAAK2J,GACRhT,EAASsT,KAAWA,EAAWjB,GAAEa,YAAYrS,EAAGmS,EAAkB,UAAbM,IACzDzB,GAAW3K,MAAQqM,EAAaP,EAAI9L,OAASoM,EAAWN,EAAI9L,MAAQoM,EACpEzB,GAAWzK,OAASmM,EAAaP,EAAI5L,QAAUkM,EAAWN,EAAI5L,OAASkM,EACvElC,GAAYN,QAAQO,EAAOQ,GAAYhR,EAAkBwI,GAAI,GAAM,EACvE,EAEA,SAAAmK,CAAU3S,EAAgBoR,EAAqBE,GAC3C,MAAMsB,EAAI,CAAA,EAEV,OADApB,GAAEL,cAAcyB,EAAG5S,EAAGoR,GAAQ,EAAOE,GAC9BsB,CACX,EAEA,MAAAxB,CAAOpR,EAAgBoR,EAAqBE,GACxCE,GAAEL,cAAcnR,EAAGA,EAAGoR,GAAQ,EAAOE,EACzC,EAEA,MAAAuB,CAAO7S,EAAgB6S,EAAqBvB,GACxCE,GAAEL,cAAcnR,EAAGA,EAAG6S,GAAQ,EAAMvB,EACxC,EAEA,IAAAX,CAAK3Q,GACD,MAAMyG,EAAEA,EAACC,EAAEA,GAAM1G,EACjBA,EAAEyG,EAAIiK,GAAM1Q,EAAEyG,GACdzG,EAAE0G,EAAIgK,GAAM1Q,EAAE0G,GACd1G,EAAEqG,MAAQI,EAAIzG,EAAEyG,EAAIkK,GAAK3Q,EAAEqG,MAAQI,EAAIzG,EAAEyG,GAAKkK,GAAK3Q,EAAEqG,OACrDrG,EAAEuG,OAASG,EAAI1G,EAAE0G,EAAIiK,GAAK3Q,EAAEuG,OAASG,EAAI1G,EAAE0G,GAAKiK,GAAK3Q,EAAEuG,OAC3D,EAEA,MAAAlB,CAAOrF,GACCA,EAAEqG,MAAQ,IACVrG,EAAEyG,GAAKzG,EAAEqG,MACTrG,EAAEqG,OAASrG,EAAEqG,OAEbrG,EAAEuG,OAAS,IACXvG,EAAE0G,GAAK1G,EAAEuG,OACTvG,EAAEuG,QAAUvG,EAAEuG,OAEtB,EAEA,KAAAjB,CAAMtF,EAAgB6F,GAClB7F,EAAEyG,EAAInB,GAAMtF,EAAEyG,EAAGZ,GACjB7F,EAAE0G,EAAIpB,GAAMtF,EAAE0G,EAAGb,GACjB7F,EAAEqG,MAAQf,GAAMtF,EAAEqG,MAAOR,GACzB7F,EAAEuG,OAASjB,GAAMtF,EAAEuG,OAAQV,EAC/B,EAEA,GAAAiN,CAAI9S,EAAgBkR,EAAqB6B,GACrCnC,GAAQ5Q,EAAEyG,EAAIzG,EAAEqG,MAChBwK,GAAS7Q,EAAE0G,EAAI1G,EAAEuG,OACjBuK,GAAcI,EAAOzK,EACrBsK,GAAeG,EAAOxK,EAEjBqM,IACDjC,IAAeI,EAAO7K,MACtB0K,IAAgBG,EAAO3K,QAG3BqK,GAAQA,GAAQE,GAAcF,GAAQE,GACtCD,GAASA,GAASE,GAAeF,GAASE,GAE1C/Q,EAAEyG,EAAIzG,EAAEyG,EAAIyK,EAAOzK,EAAIzG,EAAEyG,EAAIyK,EAAOzK,EACpCzG,EAAE0G,EAAI1G,EAAE0G,EAAIwK,EAAOxK,EAAI1G,EAAE0G,EAAIwK,EAAOxK,EACpC1G,EAAEqG,MAAQuK,GAAQ5Q,EAAEyG,EACpBzG,EAAEuG,OAASsK,GAAS7Q,EAAE0G,CAC1B,EAEA,OAAAsM,CAAQhT,EAAgBmB,GACpBqQ,GAAEyB,cAAcjT,EAAGmB,OAAMlC,GAAW,EACxC,EAEA,OAAAiU,CAAQlT,EAAgBmB,EAAqBgS,GAAU,GACnD3B,GAAEyB,cAAcjT,EAAGmB,OAAMlC,EAAWkU,EACxC,EAEA,aAAAC,CAAcpT,EAAgBmB,EAAiBkS,GAC3C7B,GAAEyB,cAAcjT,EAAGmB,EAAMkS,GAAc,EAC3C,EAEA,aAAAJ,CAAcjT,EAAgBmB,EAAiBkS,EAA6BF,GAAU,GAClF,IAAIjC,EAAqBoC,GAAQ,EACjC,IAAK,IAAIjS,EAAI,EAAGC,EAAMH,EAAKI,OAAQF,EAAIC,EAAKD,IACxC6P,EAASmC,EAAeA,EAAalS,EAAKE,GAAIA,GAAKF,EAAKE,GACpD6P,IAAWA,EAAO7K,OAAS6K,EAAO3K,UAC9B+M,GACAA,GAAQ,EACHH,GAASjL,GAAKlI,EAAGkR,IAEtB4B,GAAI9S,EAAGkR,IAKfoC,GAAO9B,GAAEzG,MAAM/K,EACvB,EAGA,SAAAuT,CAAUvT,EAAgBmO,GACtBA,EAAO5N,QAAQ,CAACgL,EAAOiI,IAAoB,IAAVA,EAAcxE,GAASD,GAAiBxD,EAAM9E,EAAG8E,EAAM7E,GAAK2I,GAASN,GAAiBxD,EAAM9E,EAAG8E,EAAM7E,IACtI+I,GAASV,GAAiB/O,EAC9B,EAEA,QAAAgP,CAAShP,EAAgBuL,GACrBiG,GAAExJ,IAAIhI,EAAGuL,EAAM9E,EAAG8E,EAAM7E,EAC5B,EAEA,QAAA2I,CAASrP,EAAgBuL,GACrBuH,GAAI9S,EAAGuL,GAAsB,EACjC,EAEA,SAAAkI,CAAUzT,GACN,MAAMyG,EAAEA,EAACC,EAAEA,EAACL,MAAEA,EAAKE,OAAEA,GAAWvG,EAChC,MAAO,CACH,CAAEyG,IAAGC,KACL,CAAED,EAAGA,EAAIJ,EAAOK,KAChB,CAAED,EAAGA,EAAIJ,EAAOK,EAAGA,EAAIH,GACvB,CAAEE,IAAGC,EAAGA,EAAIH,GAEpB,EAGAmN,eAAc,CAAC1T,EAAgBuL,EAAyBoI,KAChDA,IAAapI,EAAQK,EAAEM,yBAAyBX,EAAOoI,IACnDpI,EAAM9E,GAAKzG,EAAEyG,EAAI8E,EAAMF,SAAWE,EAAM9E,GAAKzG,EAAEyG,EAAIzG,EAAEqG,MAAQkF,EAAMF,SAAaE,EAAM7E,GAAK1G,EAAE0G,EAAI6E,EAAMD,SAAWC,EAAM7E,GAAK1G,EAAE0G,EAAI1G,EAAEuG,OAASgF,EAAMD,SAGhKsI,SAAQ,CAAC5T,EAAgBuL,EAAmBoI,KACpCA,IAAapI,EAAQK,EAAEG,cAAcR,EAAOoI,IACxCpI,EAAM9E,GAAKzG,EAAEyG,GAAK8E,EAAM9E,GAAKzG,EAAEyG,EAAIzG,EAAEqG,OAAWkF,EAAM7E,GAAK1G,EAAE0G,GAAK6E,EAAM7E,GAAK1G,EAAE0G,EAAI1G,EAAEuG,QAIjGsN,IAAG,CAAC7T,EAAgB8T,EAAoBC,KAChCA,IAAaD,EAAQtC,GAAEvF,cAAc6H,EAAOC,MACtC/T,EAAE0G,EAAI1G,EAAEuG,OAASuN,EAAMpN,GAAOoN,EAAMpN,EAAIoN,EAAMvN,OAASvG,EAAE0G,GAAO1G,EAAEyG,EAAIzG,EAAEqG,MAAQyN,EAAMrN,GAAOqN,EAAMrN,EAAIqN,EAAMzN,MAAQrG,EAAEyG,IAGrItI,SAAQ,CAAC6B,EAAgB8T,EAAoBC,KACrCA,IAAaD,EAAQtC,GAAEvF,cAAc6H,EAAOC,IACxC/T,EAAEyG,GAAKqN,EAAMrN,GAAOzG,EAAE0G,GAAKoN,EAAMpN,GAAO1G,EAAEyG,EAAIzG,EAAEqG,OAASyN,EAAMrN,EAAIqN,EAAMzN,OAAWrG,EAAE0G,EAAI1G,EAAEuG,QAAUuN,EAAMpN,EAAIoN,EAAMvN,QAGlI,gBAAAyN,CAAiBhU,EAAgB8T,EAAoBC,GAEjD,GADIA,IAAaD,EAAQtC,GAAEvF,cAAc6H,EAAOC,KAC3CvC,GAAEqC,IAAI7T,EAAG8T,GAAQ,MTvOwB,CAAErN,EAAG,EAAGC,EAAG,EAAGL,MAAO,EAAGE,OAAQ,GSyO9E,IAAIE,EAAEA,EAACC,EAAEA,EAACL,MAAEA,EAAKE,OAAEA,GAAWuN,EAe9B,OAbAlD,GAAQnK,EAAIJ,EACZwK,GAASnK,EAAIH,EACbuK,GAAc9Q,EAAEyG,EAAIzG,EAAEqG,MACtB0K,GAAe/Q,EAAE0G,EAAI1G,EAAEuG,OAEvBE,EAAIA,EAAIzG,EAAEyG,EAAIA,EAAIzG,EAAEyG,EACpBC,EAAIA,EAAI1G,EAAE0G,EAAIA,EAAI1G,EAAE0G,EACpBkK,GAAQA,GAAQE,GAAcF,GAAQE,GACtCD,GAASA,GAASE,GAAeF,GAASE,GAE1C1K,EAAQuK,GAAQnK,EAChBF,EAASsK,GAASnK,EAEX,CAAED,IAAGC,IAAGL,QAAOE,SAC1B,EAEA,SAAA0N,CAAUjU,EAAgB8T,EAAoBC,GAC1CvC,GAAEtJ,KAAKlI,EAAGwR,GAAEwC,iBAAiBhU,EAAG8T,EAAOC,GAC3C,EAGAG,OAAM,CAAClU,EAAgBkR,IACZlR,EAAEyG,IAAMyK,EAAOzK,GAAKzG,EAAE0G,IAAMwK,EAAOxK,GAAK1G,EAAEqG,QAAU6K,EAAO7K,OAASrG,EAAEuG,SAAW2K,EAAO3K,OAGnG4N,QAAQnU,GACW,IAARA,EAAEyG,GAAmB,IAARzG,EAAE0G,GAAuB,IAAZ1G,EAAEqG,OAA4B,IAAbrG,EAAEuG,OAGxD,KAAAwE,CAAM/K,GACFwR,GAAExJ,IAAIhI,EACV,GAGEwR,GAAIP,IACJ6B,IAAEA,GAAG5K,KAAEA,IAASsJ,SChXT4C,GAOT,QAAWnF,GAAiB,OAAOuC,GAAEvC,KAAKnN,KAAM,CAChD,QAAWoN,GAAiB,OAAOsC,GAAEtC,KAAKpN,KAAM,CAChD,QAAWqN,GAAiB,OAAOqC,GAAErC,KAAKrN,KAAM,CAChD,QAAWsN,GAAiB,OAAOoC,GAAEpC,KAAKtN,KAAM,CAEhD,WAAArB,CAAYgG,EAA0BC,EAAYL,EAAgBE,GAC9DzE,KAAKkG,IAAIvB,EAAGC,EAAGL,EAAOE,EAC1B,CAEO,GAAAyB,CAAIvB,EAA0BC,EAAYL,EAAgBE,GAE7D,OADA7G,EAAS+G,GAAK+K,GAAEtJ,KAAKpG,KAAM2E,GAAK+K,GAAExJ,IAAIlG,KAAM2E,EAAGC,EAAGL,EAAOE,GAClDzE,IACX,CAEO,GAAAmG,GACH,MAAMxB,EAAEA,EAACC,EAAEA,EAACL,MAAEA,EAAKE,OAAEA,GAAWzE,KAChC,MAAO,CAAE2E,IAAGC,IAAGL,QAAOE,SAC1B,CAEO,KAAAxF,GACH,OAAO,IAAIqT,GAAOtS,KACtB,CAGO,IAAA4J,CAAKjF,EAAWC,GAEnB,OADA8K,GAAE9F,KAAK5J,KAAM2E,EAAGC,GACT5E,IACX,CAEO,KAAAkE,CAAMI,EAAgBE,EAAiB0L,GAE1C,OADAR,GAAExL,MAAMlE,KAAMsE,EAAQE,EAAQ0L,GACvBlQ,IACX,CAEO,OAAA6J,CAAQjD,EAAoBtC,EAAgBE,GAE/C,OADAkL,GAAE7F,QAAQ7J,KAAM4G,EAAQtC,EAAQE,GACzBxE,IACX,CAEO,SAAAuK,CAAUnJ,EAAqBsF,GAElC,OADAgJ,GAAEnF,UAAUvK,KAAMoB,EAAQsF,GACnB1G,IACX,CAEO,SAAAsK,CAAUlJ,EAAqBsF,GAElC,OADAgJ,GAAEpF,UAAUtK,KAAMoB,EAAQsF,GACnB1G,IACX,CAEO,YAAAoQ,CAAaC,EAAkBC,GAClC,OAAOZ,GAAEU,aAAapQ,KAAMqQ,EAAKC,EACrC,CAEO,GAAAD,CAAIA,EAAkB3B,EAAgBiC,GACzCjB,GAAEW,IAAIrQ,KAAMqQ,EAAK3B,EAAOiC,EAC5B,CAEO,MAAArB,CAAOpM,EAAyBsM,GAEnC,OADAE,GAAEJ,OAAOtP,KAAMkD,EAAYsM,GACpBxP,IACX,CAEO,MAAA+Q,CAAO7N,EAAyBsM,GAEnC,OADAE,GAAEqB,OAAO/Q,KAAMkD,EAAYsM,GACpBxP,IACX,CAEO,IAAA6O,GAEH,OADAa,GAAEb,KAAK7O,MACAA,IACX,CAEO,MAAAuD,GAEH,OADAmM,GAAEnM,OAAOvD,MACFA,IACX,CAEO,KAAAwD,CAAMO,GAET,OADA2L,GAAElM,MAAMxD,KAAM+D,GACP/D,IACX,CAGO,GAAAgR,CAAI5B,GAEP,OADAM,GAAEsB,IAAIhR,KAAMoP,GACLpP,IACX,CAEO,OAAAkR,CAAQqB,GAEX,OADA7C,GAAE0B,QAAQpR,KAAMuS,GAAY,GACrBvS,IACX,CAEO,OAAAoR,CAAQmB,GAEX,OADA7C,GAAE0B,QAAQpR,KAAMuS,GACTvS,IACX,CAEO,aAAAsR,CAAcjS,EAAiBkS,GAElC,OADA7B,GAAEyB,cAAcnR,KAAMX,EAAMkS,GAAc,GACnCvR,IACX,CAEO,aAAAmR,CAAc9R,EAAiBkS,GAElC,OADA7B,GAAEyB,cAAcnR,KAAMX,EAAMkS,GACrBvR,IACX,CAGO,QAAAkN,CAASzD,GAEZ,OADAiG,GAAExC,SAASlN,KAAMyJ,GACVzJ,IACX,CAEO,SAAAyR,CAAUpF,GAEb,OADAqD,GAAE+B,UAAUzR,KAAMqM,GACXrM,IACX,CAEO,QAAAuN,CAAS9D,GAEZ,OADAiG,GAAEnC,SAASvN,KAAMyJ,GACVzJ,IACX,CAEO,SAAA2R,GACH,OAAOjC,GAAEiC,UAAU3R,KACvB,CAIO,QAAA8R,CAASrI,EAAmBoI,GAC/B,OAAOnC,GAAEoC,SAAS9R,KAAMyJ,EAAOoI,EACnC,CAEO,cAAAD,CAAenI,EAAyBoI,GAC3C,OAAOnC,GAAEkC,eAAe5R,KAAMyJ,EAAOoI,EACzC,CAEO,GAAAE,CAAI3C,EAAqBoD,GAC5B,OAAO9C,GAAEqC,IAAI/R,KAAMoP,EAAQoD,EAC/B,CAEO,QAAAnW,CAAS+S,EAAqBoD,GACjC,OAAO9C,GAAErT,SAAS2D,KAAMoP,EAAQoD,EACpC,CAGO,SAAAL,CAAU/C,EAAqBoD,GAElC,OADA9C,GAAEyC,UAAUnS,KAAMoP,EAAQoD,GACnBxS,IACX,CAEO,YAAAyS,CAAarD,EAAqBoD,GACrC,OAAO,IAAIF,GAAO5C,GAAEwC,iBAAiBlS,KAAMoP,EAAQoD,GACvD,CAGO,MAAAJ,CAAOhD,GACV,OAAOM,GAAE0C,OAAOpS,KAAMoP,EAC1B,CAEO,OAAAiD,GACH,OAAO3C,GAAE2C,QAAQrS,KACrB,CAEO,KAAAiJ,GACHyG,GAAEzG,MAAMjJ,KACZ,EAIG,MAAMkP,GAAa,IAAIoD,GCrLvB,MAAMI,GAA8B,CACvC,EAAK,EACL,EAAK,EACL,EAAK,EACL,EAAK,EACL,EAAK,EACL,EAAK,EACL,EAAK,EACL,EAAK,EACL,EAAK,EACL,EAAK,EACL,IAAK,EACLjR,EAAK,EACLkR,EAAK,ICXH7N,UAAEA,IAAchC,QACT8P,GAgBT,WAAAjU,CAAY8B,GAFLT,KAAA6S,UAAyB,CAAA,EAG5B7S,KAAKS,KAAOA,CAChB,CAEA,UAAO0F,CAAI1F,GACP,OAAO,IAAImS,GAAMnS,EACrB,CAEA,iBAAW2B,CAAO3B,GACdT,KAAK8S,WAAaC,GAAYtS,EAClC,CAEA,kBAAWnC,CAAQmC,GACfT,KAAKgT,YAAcD,GAAYtS,EACnC,CAEA,kBAAOwS,CAAYC,EAAuB9D,GACtC,MAAM+D,EAAQrO,KACdoO,EAAOE,UAAUhE,EAAQ+D,EAAME,QAAQ,KAAM,QAC7CH,EAAOI,YAAYlE,EAAQ+D,EAC/B,CAEA,iBAAOI,CAAWjT,EAAa4S,EAAuBM,GAClD,MAAMC,EAA+B,QAArBb,GAAMc,WAAsBC,EAAIrT,EAAKsT,WAAYT,EAAQrO,KACrE2O,IAASP,EAAOW,SAASF,GAAIrT,EAAKwT,cAAcZ,GAASA,EAAOa,UAAYZ,EAAME,QAAQ,KAAM,OAAQH,EAAOc,QAEnHd,EAAOe,iBACPf,EAAOgB,UAAUf,EAAO,GACxBM,EAAUP,EAAOiB,SAAWjB,EAAOI,YAAYK,EAAGR,EACtD,CAGA,GAAAiB,IAAOC,GACH,GAAIC,GAAEC,OAAQ,CACV,GAAID,GAAExB,WAAWrT,QAAU6U,GAAExB,WAAW0B,MAAM/T,GAAQA,IAAST,KAAKS,MAAO,OAC3E,GAAI6T,GAAEtB,YAAYvT,QAAU6U,GAAEtB,YAAYyB,KAAKhU,GAAQA,IAAST,KAAKS,MAAO,OAC5EiU,QAAQN,IAAI,KAAOpU,KAAKS,KAAM,mBAAoB4T,EACtD,CACJ,CAEA,GAAAM,IAAON,GACCC,GAAEC,QAAQvU,KAAK4U,QAAQP,EAC/B,CAEA,IAAAO,IAAQP,GACAC,GAAEO,UAAUH,QAAQE,KAAK5U,KAAKS,QAAS4T,EAC/C,CAEA,MAAAS,CAAOrU,KAAiB4T,GACfrU,KAAK6S,UAAUpS,KAChBT,KAAK4U,KAAK,UAAYnU,KAAS4T,GAC/BrU,KAAK6S,UAAUpS,IAAQ,EAE/B,CAEA,KAAAsU,IAASV,GACL,IACI,MAAM,IAAIW,KACd,CAAE,MAAOvT,GACLiT,QAAQK,MAAM/U,KAAKS,QAAS4T,EAAU5S,EAC1C,CACJ,EAGJ,SAASsR,GAAYtS,GAGjB,OAFKA,EACIpD,EAASoD,KAAOA,EAAO,CAACA,IADtBA,EAAO,GAEXA,CACX,CAhFWmS,GAAAE,WAAuB,GACvBF,GAAAI,YAAwB,GAGxBJ,GAAAiC,UAAW,EA8EtB,MAAMP,GAAI1B,GC9EJqC,GAAQrC,GAAMzM,IAAI,WAEX+O,GAAM,CAEfC,UAAW,EACXC,YAAa,GAEbC,MAAO,CAAA,EACPC,QAAS,CAAA,EACTC,YAAa,CAAA,EAEb,KAAAC,CAAM/U,EAAcgV,GAChB,MAAMC,EAAKpZ,EAAYO,OAAOP,EAAYC,SAI1C,OAHAoZ,GAAER,UAAYQ,GAAEN,MAAMK,GAAMD,EAAcG,YAAYC,MAAQC,KAAKD,MACnEF,GAAEP,YAAcO,GAAEL,QAAQI,GAAMjV,EAChCkV,GAAEJ,YAAY9U,GAAQiV,EACfA,CACX,EAEA,GAAAK,CAAIL,EAAYD,GACZ,MAAMO,EAAOL,GAAEN,MAAMK,GAAKjV,EAAOkV,GAAEL,QAAQI,GACrCO,EAAWR,GAAeG,YAAYC,MAAQG,GAAQ,IAAOF,KAAKD,MAAQG,EAChFL,GAAEN,MAAMK,GAAMC,GAAEL,QAAQI,GAAMC,GAAEJ,YAAY9U,QAAQtD,EACpD8X,GAAMb,IAAI3T,EAAMwV,EAAU,KAC9B,EAEA,SAAAC,CAAUzV,EAAcgV,GACpB,MAAMC,EAAKC,GAAEJ,YAAY9U,GACpBxD,EAAYyY,IAAKC,GAAEI,IAAIL,EAAID,EACpC,GAGEE,GAAIT,GC3CJiB,GAAQ,GAEDC,GAAS,CAElB/W,KAAM,CAAA,EAEN,GAAA2R,CAAIvQ,KAAiB4V,GACjBrW,KAAKX,KAAKoB,IAAQ,EAClB0V,GAAM5J,QAAQ8J,EAClB,EAEA,GAAAC,CAAI7V,EAAckU,GACd,MAAM4B,EAAKvW,KAAKX,KAAKoB,GAErB,OADK8V,GAAM5B,GAAK3U,KAAKwW,KAAK/V,GACnB8V,CACX,EAEA,IAAAC,CAAK/V,GACDiU,QAAQK,MAAM,sCAAwCtU,EAAKpE,SAAS,MAAQ,GAAK,eAAiBoE,EACtG,GAIJgW,WAAW,IAAMN,GAAM1X,QAAQgC,GAAQ2V,GAAOE,IAAI7V,GAAM,KCtBjD,MAAMiW,GAAoB,CAC7BC,OAAOnD,GACI4C,GAAOI,KAAK,WCDrBvB,GAAQrC,GAAMzM,IAAI,aAEXyQ,GAAY,CAErBvX,KAAM,CAAA,EAEN,QAAAwX,CAASC,GACL,MAAQC,MAAOnW,GAAQkW,EAAGE,UACtB3X,GAAKuB,IAAMqU,GAAMH,OAAOlU,GAC5BvB,GAAKuB,GAAOkW,CAChB,EAEA,GAAA3Q,CAAIvF,EAAa1B,EAAgByF,EAAYC,EAAYL,EAAgBE,GAChEpF,GAAKuB,IAAMqU,GAAMF,MAAM,gBAAkBnU,GAC9C,MAAMqW,EAAK,IAAI5X,GAAKuB,GAAK1B,GAOzB,OANKjC,EAAY0H,KACbsS,EAAGtS,EAAIA,EACHC,IAAGqS,EAAGrS,EAAIA,GACVL,IAAO0S,EAAG1S,MAAQA,GAClBE,IAAQwS,EAAGxS,OAASA,IAErBwS,CACX,IAIE5X,KAAEA,IAASuX,GC1BX3B,GAAQrC,GAAMzM,IAAI,gBAEX+Q,GAAe,CAExBC,SAAU,CAAA,EAEV,QAAAN,CAASO,GACL,IAAI3W,EACJlC,OAAOC,KAAK4Y,GAAO3Y,QAAQC,IACvB+B,EAAO2W,EAAM1Y,GACTrB,EAASoD,KAAO0W,GAAS1W,IAASwU,GAAMH,OAAOrU,GAAO0W,GAAS1W,GAAQ2W,IAEnF,EAEA,UAAAC,CAAWC,EAAiBC,GACxB,MAAMH,EAAQD,GAASG,GACvB,GAAIF,EAAO,CACP,MAAMI,EAAYjZ,OAAOC,KAAK4Y,GAAOK,KAAK/Y,GAAO0Y,EAAM1Y,KAAS4Y,GAC5DE,IACAJ,EAAMI,GAAaD,EACnBJ,GAASI,GAAWH,EAE5B,CACJ,EAEA,GAAAd,CAAIrI,GACA,QAASjO,KAAKmX,SAASlJ,EAC3B,EAEA9H,IAAG,CAAC8H,KAAiByJ,IACV,IAAIP,GAASlJ,MAASyJ,KAK/BP,SAAEA,IAAaD,GCcd,SAASS,GAAWC,EAAYC,EAAQnZ,EAAKoZ,GAChD,IAA2HtW,EAAvHD,EAAIwW,UAAUtY,OAAQoE,EAAItC,EAAI,EAAIsW,EAAkB,OAATC,EAAgBA,EAAOvZ,OAAOyZ,yBAAyBH,EAAQnZ,GAAOoZ,EACrH,GAAuB,iBAAZG,SAAoD,mBAArBA,QAAQC,SAAyBrU,EAAIoU,QAAQC,SAASN,EAAYC,EAAQnZ,EAAKoZ,QACpH,IAAK,IAAIvY,EAAIqY,EAAWnY,OAAS,EAAGF,GAAK,EAAGA,KAASiC,EAAIoW,EAAWrY,MAAIsE,GAAKtC,EAAI,EAAIC,EAAEqC,GAAKtC,EAAI,EAAIC,EAAEqW,EAAQnZ,EAAKmF,GAAKrC,EAAEqW,EAAQnZ,KAASmF,GAChJ,OAAOtC,EAAI,GAAKsC,GAAKtF,OAAO4Z,eAAeN,EAAQnZ,EAAKmF,GAAIA,CAChE,CAuDO,SAASuU,GAAUC,EAASC,EAAYxO,EAAGyO,GAE9C,OAAO,IAAKzO,IAAMA,EAAI0O,UAAU,SAAUC,EAASC,GAC/C,SAASC,EAAUzb,GAAS,IAAM0b,EAAKL,EAAUM,KAAK3b,GAAS,CAAE,MAAOuE,GAAKiX,EAAOjX,EAAI,CAAE,CAC1F,SAASqX,EAAS5b,GAAS,IAAM0b,EAAKL,EAAiB,MAAErb,GAAS,CAAE,MAAOuE,GAAKiX,EAAOjX,EAAI,CAAE,CAC7F,SAASmX,EAAKG,GAJlB,IAAe7b,EAIa6b,EAAOC,KAAOP,EAAQM,EAAO7b,QAJ1CA,EAIyD6b,EAAO7b,MAJhDA,aAAiB4M,EAAI5M,EAAQ,IAAI4M,EAAE,SAAU2O,GAAWA,EAAQvb,EAAQ,IAIjB+b,KAAKN,EAAWG,EAAW,CAC7GF,GAAML,EAAYA,EAAUW,MAAMb,EAASC,GAAc,KAAKO,OAClE,EACJ,CCtHA,SAASM,GAAYC,GACjB,MAAO,CAACvB,EAAgBnZ,KACf0a,IAAUA,EAAW1a,GAC1B,MAAM2a,EAAW,CACb,GAAAlT,GAAQ,OAASnG,KAA2BsZ,QAAoBF,EAAU,EAC1E,GAAAlT,CAAIhJ,GAAoB8C,KAA2BsZ,QAAoBF,GAAYlc,CAAM,GAEjF,cAARwB,IAAsB2a,EAAiBnT,IAAM,SAAUhJ,GAAoB8C,KAA2BsZ,QAAoBF,GAAsB,SAAVlc,EAAmB,OAASA,CAAM,GAC5KqB,OAAO4Z,eAAeN,EAAQnZ,EAAK2a,GAE3C,CD0TkD,mBAApBE,iBAAiCA,gBCxT/D,MAAMC,GAAkC,GACxC,SAASC,KACL,MAAO,CAACC,EAAiBhb,KACrB8a,GAAsBjN,KAAK7N,GAEnC,CAEA,MAAMib,GAAuB,SAGhBC,GAiBT,aAAWvZ,CAAUnD,GACH,WAAVA,IAAoBA,EAAQ,eAChC8C,KAAKsZ,QAAQO,yBAA2B3c,CAC5C,CAEA,aAAWmD,GACP,OAAOL,KAAKsZ,QAAQO,wBACxB,CAkBA,eAAWC,CAAY5c,GACnB8C,KAAKsZ,QAAQS,YAAY7c,GAASyc,GACtC,CACA,eAAWG,GACP,OAAO9Z,KAAKsZ,QAAQU,aACxB,CA2DO,aAAAC,GACH,IAAIC,EACJV,GAAsB/a,QAAQgC,IAC1ByZ,EAAUla,KAAKsZ,QAAoB7Y,GAC/ByZ,IAASla,KAAiBS,GAAQyZ,EAAOC,KAAKna,KAAKsZ,YAE3DtZ,KAAKoa,aAAe,YACxB,CAKO,YAAAC,CAAazb,EAA0BC,EAAayb,EAAaC,EAAaC,EAAaC,GAAqB,CAGhH,cAAAxG,GAAyB,CAGzB,YAAAyG,GAA4C,CAG5C,IAAAC,GAAe,CAGf,OAAAC,GAAkB,CAElB,SAAAC,CAAUxZ,EAAyBC,EAAYC,EAAYC,EAAYC,EAAYC,GAClF9D,EAASyD,GACTrB,KAAKsZ,QAAQuB,UAAUxZ,EAAEA,EAAGA,EAAEC,EAAGD,EAAEE,EAAGF,EAAEG,EAAGH,EAAEI,EAAGJ,EAAEK,GAElD1B,KAAKsZ,QAAQuB,UAAUxZ,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAE9C,CAGO,SAAA2E,CAAUyU,EAAYC,GAAoB,CAG1C,KAAA7W,CAAM4W,EAAYC,GAAoB,CAGtC,MAAA/T,CAAOgU,GAAwB,CAG/B,IAAAhH,CAAKiH,EAAkCC,GAA8B,CAGrE,MAAA/G,CAAO8G,GAA2B,CAGlC,IAAAE,CAAKF,EAAkCC,GAA8B,CAGrE,QAAAE,CAASN,EAAYC,EAAYM,EAAgBC,GAAyB,CAG1E,UAAAC,CAAWT,EAAYC,EAAYM,EAAgBC,GAAyB,CAG5E,SAAAE,CAAUV,EAAYC,EAAYM,EAAgBC,GAAyB,CAE3E,SAAAG,CAAU7f,EAA0B+M,EAAYC,EAAY6H,EAAaC,EAAagL,EAAaC,EAAaC,EAAaC,GAChI,OAAQ9D,UAAUtY,QACd,KAAK,EAGD,GAAIkJ,EAAK,EAAG,CACR,MAAMnH,GAAMmH,EAAK8H,EAAMmL,EACvBnL,GAAM9H,EACNA,EAAK,EACL+S,GAAMla,EACNoa,GAAMpa,CACV,CAEA,GAAIoH,EAAK,EAAG,CACR,MAAMpH,GAAMoH,EAAK8H,EAAMmL,EACvBnL,GAAM9H,EACNA,EAAK,EACL+S,GAAMna,EACNqa,GAAMra,CACV,CAEAxB,KAAKsZ,QAAQmC,UAAU7f,EAAO+M,EAAIC,EAAI6H,EAAIC,EAAIgL,EAAIC,EAAIC,EAAIC,GAC1D,MACJ,KAAK,EACD7b,KAAKsZ,QAAQmC,UAAU7f,EAAO+M,EAAIC,EAAI6H,EAAIC,GAC1C,MACJ,KAAK,EACD1Q,KAAKsZ,QAAQmC,UAAU7f,EAAO+M,EAAIC,GAE9C,CAKO,SAAAkT,GAAoB,CAGpB,MAAAC,CAAOjB,EAAYC,GAAoB,CAGvC,MAAAiB,CAAOlB,EAAYC,GAAoB,CAGvC,aAAAkB,CAAcC,EAAeC,EAAeC,EAAeC,EAAevB,EAAYC,GAAoB,CAG1G,gBAAAuB,CAAiBC,EAAcC,EAAc1B,EAAYC,GAAoB,CAG7E,SAAA0B,GAAoB,CAGpB,GAAAC,CAAI5B,EAAYC,EAAY4B,EAAiBC,EAAqBC,EAAmBC,GAAkC,CAGvH,KAAAC,CAAMC,EAAaC,EAAaC,EAAaC,EAAaR,GAAyB,CAGnF,OAAAS,CAAQtC,EAAYC,EAAYsC,EAAkBC,EAAkBC,EAAmBX,EAAqBC,EAAmBC,GAAkC,CAGjK,IAAAU,CAAK1C,EAAYC,EAAYM,EAAgBC,GAAyB,CAGtE,SAAAmC,CAAU3C,EAAYC,EAAYM,EAAgBC,EAAiBqB,GAAqC,CAOxG,mBAAAe,CAAoBd,EAAqB9B,EAAYC,GAA4C,CAGjG,oBAAA4C,CAAqBC,EAAaC,EAAab,EAAaC,GAA6C,CAGzG,aAAAa,CAAcC,EAA2BC,GAAkE,CAG3G,oBAAAC,CAAqBL,EAAaC,EAAaK,EAAalB,EAAaC,EAAakB,GAA6C,CAInI,QAAAC,CAASC,EAAevD,EAAYC,EAAYuD,GAA4B,CAG5E,WAAAC,CAAYF,GAA6C,CAGzD,UAAAG,CAAWH,EAAevD,EAAYC,EAAYuD,GAA4B,CAE9E,OAAA7b,GACHzC,KAAKsZ,QAAU,IACnB,EA5PO3B,GAAA,CADNwB,GAAY,0BACSS,GAAA5C,UAAA,cAAA,GAGfW,GAAA,CADNwB,GAAY,0BAC4BS,GAAA5C,UAAA,mBAAA,GAGlCW,GAAA,CADNwB,GAAY,gBACSS,GAAA5C,UAAA,eAAA,GAYfW,GAAA,CADNwB,MACgCS,GAAA5C,UAAA,iBAAA,GAG1BW,GAAA,CADNwB,MACkCS,GAAA5C,UAAA,mBAAA,GAI5BW,GAAA,CADNwB,GAAY,cACaS,GAAA5C,UAAA,mBAAA,GAGnBW,GAAA,CADNwB,GAAY,YACWS,GAAA5C,UAAA,iBAAA,GAGjBW,GAAA,CADNwB,GAAY,aACYS,GAAA5C,UAAA,kBAAA,GAUlBW,GAAA,CADNwB,GAAY,mBACYS,GAAA5C,UAAA,kBAAA,GAGlBW,GAAA,CADNwB,MACwBS,GAAA5C,UAAA,kBAAA,GAIlBW,GAAA,CADNwB,MACwBS,GAAA5C,UAAA,kBAAA,GAGlBW,GAAA,CADNwB,MACyBS,GAAA5C,UAAA,mBAAA,GAGnBW,GAAA,CADNwB,MAC2BS,GAAA5C,UAAA,qBAAA,GAGrBW,GAAA,CADNwB,MAC2BS,GAAA5C,UAAA,qBAAA,GAGrBW,GAAA,CADNwB,MACoBS,GAAA5C,UAAA,cAAA,GAIdW,GAAA,CADNwB,MACkBS,GAAA5C,UAAA,YAAA,GAGZW,GAAA,CADNwB,MACyBS,GAAA5C,UAAA,mBAAA,GAGnBW,GAAA,CADNwB,MACyBS,GAAA5C,UAAA,mBAAA,GAGnBW,GAAA,CADNwB,MAC6BS,GAAA5C,UAAA,uBAAA,GAIvBW,GAAA,CADNwB,MACuBS,GAAA5C,UAAA,iBAAA,GAGjBW,GAAA,CADNwB,MAC0BS,GAAA5C,UAAA,oBAAA,GAGpBW,GAAA,CADNwB,MAC2BS,GAAA5C,UAAA,qBAAA,GAGrBW,GAAA,CADNwB,MACyBS,GAAA5C,UAAA,mBAAA,GAGnBW,GAAA,CADNwB,MAC2BS,GAAA5C,UAAA,qBAAA,GAIrBW,GAAA,CADNwB,MACuBS,GAAA5C,UAAA,iBAAA,GAgBjBW,GAAA,CADN8B,MACuHG,GAAA5C,UAAA,eAAA,MAGjHW,GAAA,CADN8B,MACgCG,GAAA5C,UAAA,iBAAA,MAG1BW,GAAA,CADN8B,MACmDG,GAAA5C,UAAA,eAAA,MAG7CW,GAAA,CADN8B,MACsBG,GAAA5C,UAAA,OAAA,MAGhBW,GAAA,CADN8B,MACyBG,GAAA5C,UAAA,UAAA,MAWnBW,GAAA,CADN8B,MACiDG,GAAA5C,UAAA,YAAA,MAG3CW,GAAA,CADN8B,MAC6CG,GAAA5C,UAAA,QAAA,MAGvCW,GAAA,CADN8B,MACsCG,GAAA5C,UAAA,SAAA,MAGhCW,GAAA,CADN8B,MAC4EG,GAAA5C,UAAA,OAAA,MAGtEW,GAAA,CADN8B,MACyCG,GAAA5C,UAAA,SAAA,MAGnCW,GAAA,CADN8B,MAC4EG,GAAA5C,UAAA,OAAA,MAGtEW,GAAA,CADN8B,MACiFG,GAAA5C,UAAA,WAAA,MAG3EW,GAAA,CADN8B,MACmFG,GAAA5C,UAAA,aAAA,MAG7EW,GAAA,CADN8B,MACkFG,GAAA5C,UAAA,YAAA,MAoC5EW,GAAA,CADN8B,MAC2BG,GAAA5C,UAAA,YAAA,MAGrBW,GAAA,CADN8B,MAC8CG,GAAA5C,UAAA,SAAA,MAGxCW,GAAA,CADN8B,MAC8CG,GAAA5C,UAAA,SAAA,MAGxCW,GAAA,CADN8B,MACiHG,GAAA5C,UAAA,gBAAA,MAG3GW,GAAA,CADN8B,MACoFG,GAAA5C,UAAA,mBAAA,MAG9EW,GAAA,CADN8B,MAC2BG,GAAA5C,UAAA,YAAA,MAGrBW,GAAA,CADN8B,MAC8HG,GAAA5C,UAAA,MAAA,MAGxHW,GAAA,CADN8B,MAC0FG,GAAA5C,UAAA,QAAA,MAGpFW,GAAA,CADN8B,MACwKG,GAAA5C,UAAA,UAAA,MAGlKW,GAAA,CADN8B,MAC6EG,GAAA5C,UAAA,OAAA,MAGvEW,GAAA,CADN8B,MAC+GG,GAAA5C,UAAA,YAAA,MAOzGW,GAAA,CADN8B,MACwGG,GAAA5C,UAAA,sBAAA,MAGlGW,GAAA,CADN8B,MACgHG,GAAA5C,UAAA,uBAAA,MAG1GW,GAAA,CADN8B,MACkHG,GAAA5C,UAAA,gBAAA,MAG5GW,GAAA,CADN8B,MAC0IG,GAAA5C,UAAA,uBAAA,MAIpIW,GAAA,CADN8B,MACmFG,GAAA5C,UAAA,WAAA,MAG7EW,GAAA,CADN8B,MACgEG,GAAA5C,UAAA,cAAA,MAG1DW,GAAA,CADN8B,MACqFG,GAAA5C,UAAA,aAAA,MCnR1F,MAAM5Q,KAAEA,GAAIsB,eAAEA,GAAclB,WAAEA,IAAeV,GAAcpD,MAAEA,IAAUG,KAAM4b,GAAkB,IAAInM,GAAUoM,GAAmB,IAAIpM,GAC9HqM,GAA2B,CAAEpa,MAAO,EAAGE,OAAQ,EAAGgC,WAAY,GAEvDmY,GAAkB,CAAC,QAAS,SAAU,cCT5C,MAAMC,GAAa,CAEtBC,QAAS,CAAA,EACT,KAAA3f,CAAM4f,EAAqBC,GAA2D,EACtF,mBAAAC,CAAoBC,EAAwBF,GAA2D,GCJ9FG,GAAmC,CAE5CC,EAAG,GACH9K,EAAG,GACH+K,EAAG,GACHC,EAAG,GACHC,EAAG,GACHC,EAAG,GACH1V,EAAG,GACH2V,EAAG,IAIMC,GAAcnhB,OAAAH,OAAA,CAIvByI,EAAG,EACH8Y,EAAG,GACHC,EAAG,EACHC,EAAG,GACHC,EAAG,EACHC,EAAG,GACHC,EAAG,EACHC,EAAG,GACHC,EAAG,EACH3e,EAAG,GACH4e,EAAG,EACHjY,EAAG,GACHkY,EAAG,EACHC,EAAG,GACHC,EAAG,EACHpiB,EAAG,GACHqiB,EAAG,EACHlf,EAAG,GACHmf,EAAG,GACHC,EAAG,GAEH9K,EAAG,IAGAwJ,IAGMuB,GAAmC,CAE5C7Z,EAAG,EACH8Y,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,EACH3e,EAAG,EACH4e,EAAG,EACHjY,EAAG,EACHkY,EAAG,EACHC,EAAG,EACHC,EAAG,EACHpiB,EAAG,EACHqiB,EAAG,EACHlf,EAAG,EACHmf,EAAG,EACHC,EAAG,EAIHrB,EAAG,EACH9K,EAAG,EACH+K,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,EACH1V,EAAG,EACH2V,EAAG,GAIMkB,GAA4C,CAGrDhB,EAAG,GAEHE,EAAG,GACHC,EAAG,EACHC,EAAG,GACHC,EAAG,EACHC,EAAG,GAEH1e,EAAG,GACH4e,EAAG,EACHjY,EAAG,GAEHmY,EAAG,GACHC,EAAG,EACHpiB,EAAG,GACHqiB,EAAG,EACHlf,EAAG,IAOMuf,GAA4BriB,OAAAH,OAAAG,OAAAH,OAAA,GAClCuiB,IACAxB,IAGDrV,GAAI4V,GAEGmB,GAAmC,CAAA,EAChD,IAAK,IAAIniB,KAAOoL,GACZ+W,GAAqB/W,GAAEpL,IAAQA,EAI5B,MAAMoiB,GAAyC,CAAA,EACtD,IAAK,IAAIpiB,KAAOoL,GACZgX,GAA2BhX,GAAEpL,IAAQgiB,GAAqBhiB,GCxHvD,MAAMqiB,GAAa,CAEtB,aAAAC,CAAcC,EAAqBtc,EAAWC,EAAWL,EAAeE,EAAgByc,GACpF,MAAMhiB,EAAO4D,EAAWI,WAAWge,EAAcre,KAAKG,IAAIuB,EAAQ,EAAGE,EAAS,IAExEqK,EAAQnK,EAAIJ,EACZwK,EAASnK,EAAIH,EAEnBvF,EAAK,GAAK+hB,EAAOlF,OAAOpX,EAAIzF,EAAK,GAAI0F,GAAKqc,EAAOlF,OAAOpX,EAAGC,GAC3D1F,EAAK,GAAK+hB,EAAOlE,MAAMjO,EAAOlK,EAAGkK,EAAOC,EAAQ7P,EAAK,IAAM+hB,EAAOjF,OAAOlN,EAAOlK,GAChF1F,EAAK,GAAK+hB,EAAOlE,MAAMjO,EAAOC,EAAQpK,EAAGoK,EAAQ7P,EAAK,IAAM+hB,EAAOjF,OAAOlN,EAAOC,GACjF7P,EAAK,GAAK+hB,EAAOlE,MAAMpY,EAAGoK,EAAQpK,EAAGC,EAAG1F,EAAK,IAAM+hB,EAAOjF,OAAOrX,EAAGoK,GACpE7P,EAAK,GAAK+hB,EAAOlE,MAAMpY,EAAGC,EAAGkK,EAAOlK,EAAG1F,EAAK,IAAM+hB,EAAOjF,OAAOrX,EAAGC,EACvE,ICREU,IAAEA,GAAGC,IAAEA,GAAG4b,MAAEA,GAAKjY,MAAEA,GAAK2F,KAAEA,OAAM/K,GAAGlB,GAAEA,GAAE6C,KAAEA,GAAI9C,IAAEA,IAAQE,eACrDqK,GAAQK,SAAEA,IAAaP,IACzB9G,IAAEA,GAAGiG,eAAEA,IAAmBhD,GAC1BtC,EAAEA,GAAC+Y,EAAEA,GAACM,EAAEA,GAACE,EAAEA,GAACI,EAAEA,IAAMd,GACpBha,GAAY,CAAA,EAEL0b,GAAe,CAExB,MAAA/U,CAAOnN,EAAwBkN,EAAuCiV,EAA0BC,GAE5F,IAAIjV,EAASF,GAAeC,GAI5B,GAFAlN,EAAKqN,KAAK1F,GAAGwF,EAAO,GAAIA,EAAO,IAE3BgV,GAAShV,EAAO5M,OAAS,EAAG,CAE5B,IAAI8hB,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAaC,EAAaC,EAAaC,EAC/GC,EAAYC,EAAY1gB,EAAWhC,EAAM6M,EAAO5M,OACpD,MAAMvB,GAAc,IAAVmjB,EAAiB,GAAMA,EAE7BC,IACAjV,EAAS,CAACA,EAAO7M,EAAM,GAAI6M,EAAO7M,EAAM,MAAO6M,EAAQA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,IAC/F7M,EAAM6M,EAAO5M,QAGjB,IAAK,IAAIF,EAAI,EAAGA,EAAIC,EAAM,EAAGD,GAAK,EAC9BgiB,EAAKlV,EAAO9M,EAAI,GAChBiiB,EAAKnV,EAAO9M,EAAI,GAEhBkiB,EAAKpV,EAAO9M,GACZmiB,EAAKrV,EAAO9M,EAAI,GAEhBoiB,EAAKtV,EAAO9M,EAAI,GAChBqiB,EAAKvV,EAAO9M,EAAI,GAEhB0iB,EAAKxc,GAAK9C,GAAI8e,EAAKF,EAAI,GAAK5e,GAAI+e,EAAKF,EAAI,IACzCU,EAAKzc,GAAK9C,GAAIgf,EAAKF,EAAI,GAAK9e,GAAIif,EAAKF,EAAI,KAEpCO,GAAOC,KAEZ1gB,EAAIygB,EAAKC,EACTD,EAAM/jB,EAAI+jB,EAAMzgB,EAChB0gB,EAAMhkB,EAAIgkB,EAAM1gB,EAEhBmgB,GAAMJ,EACNK,GAAMJ,EAENK,EAAMJ,EAAKQ,EAAKN,EAChBG,EAAMJ,EAAKO,EAAKL,EAEN,IAANriB,EACK+hB,GAAOpiB,EAAKqN,KAAK6T,GAAGyB,EAAKC,EAAKL,EAAIC,GAEvCxiB,EAAKqN,KAAK2T,GAAG6B,EAAKC,EAAKH,EAAKC,EAAKL,EAAIC,GAGzCK,EAAMN,EAAKS,EAAKP,EAChBK,EAAMN,EAAKQ,EAAKN,GAGfN,GAAOpiB,EAAKqN,KAAK6T,GAAG2B,EAAKC,EAAK3V,EAAO7M,EAAM,GAAI6M,EAAO7M,EAAM,GAErE,MAEI,IAAK,IAAID,EAAI,EAAGC,EAAM6M,EAAO5M,OAAQF,EAAIC,EAAKD,GAAK,EAC/CL,EAAKqN,KAAKqT,GAAGvT,EAAO9M,GAAI8M,EAAO9M,EAAI,IAKvC+hB,GAAOpiB,EAAKqN,KAAKiU,GACzB,EAEA,IAAAhD,CAAKte,EAAwByF,EAAWC,EAAWL,EAAeE,GAC9Doa,GAAWC,QAAQ/e,KAAOb,EAC1B2f,GAAWC,QAAQ/C,OAAOpX,EAAGC,GAAGoX,OAAOrX,EAAIJ,EAAOK,GAAGoX,OAAOrX,EAAIJ,EAAOK,EAAIH,GAAQuX,OAAOrX,EAAGC,EAAIH,GAAQuX,OAAOrX,EAAGC,EACvH,EAEA,SAAA6Y,CAAUve,EAAwByF,EAAWC,EAAWL,EAAeE,EAAgB0d,GACnFtD,GAAWC,QAAQ/e,KAAO,GAC1BghB,GAAWC,cAAcnC,GAAWC,QAASna,EAAGC,EAAGL,EAAOE,EAAQ0d,GAClEjjB,EAAKqN,QAAQsS,GAAWI,oBAAoBJ,GAAWC,QAAQ/e,MAAM,GACzE,EAEA,KAAAgd,CAAM7d,EAAsCuM,EAAeC,EAAehB,EAAYG,EAAYgB,EAAaC,EAAaqW,EAAgBC,EAAsCC,EAA0BC,GACxM,MAAMC,EAAM7X,EAAKe,EACX+W,EAAM3X,EAAKa,EACX+W,EAAM5W,EAAMnB,EACZgY,EAAM5W,EAAMjB,EAElB,IAAI8X,EAAczZ,GAAMsZ,EAAKD,GACzBK,EAAY1Z,GAAMwZ,EAAKD,GAE3B,MAAMI,EAAQ1B,GAAMoB,EAAKC,GACnBM,EAAQ3B,GAAMsB,EAAKC,GAEzB,IAAIK,EAAcH,EAAYD,EAG9B,GAFII,EAAc,IAAGA,GAAe9d,GAEhC4d,EAAQ,OAASC,EAAQ,OAASC,EAAc,OAASjf,GAAIif,EAAcngB,IAAM,MAQjF,OAPI1D,GAAMA,EAAKqN,KAAKqT,GAAGlV,EAAIG,GACvBuX,IACAlV,GAASkV,EAAgB3W,EAAOC,GAChC6B,GAAS6U,EAAgB1X,EAAIG,IAE7ByX,GAAepc,GAAIoc,EAAe7W,EAAOC,QACzC2W,GAAanc,GAAImc,EAAa3X,EAAIG,IAI1C,MAAMmY,EAAgBT,EAAMG,EAAMD,EAAMD,EAAM,EACxCxe,EAAOgf,GAAgB,EAAK,EAC5BzhB,EAAI4gB,EAAS5c,GAAIwd,EAAc,GAE/BE,EAAUvY,EAAKnJ,EAAIgE,GAAIod,EAAcI,EAAc,EAAI7d,EAAOlB,GAC9Dkf,EAAUrY,EAAKtJ,EAAI+D,GAAIqd,EAAcI,EAAc,EAAI7d,EAAOlB,GAIpE,OAHA2e,GAAezd,EAAOlB,EACtB4e,GAAa1d,EAAOlB,EAEboZ,GAAQle,EAAM+jB,EAASC,EAASf,EAAQA,EAAQ,EAAGQ,EAAc3d,EAAW4d,EAAY5d,EAAWge,EAAeZ,EAAgBC,EAAaC,EAC1J,EAEA5F,IAAG,CAACxd,EAAsCyF,EAAWC,EAAWud,EAAgBgB,EAAoBC,EAAkBJ,EAAyBZ,EAAsCC,EAA0BC,IACpMlF,GAAQle,EAAMyF,EAAGC,EAAGud,EAAQA,EAAQ,EAAGgB,EAAYC,EAAUJ,EAAeZ,EAAgBC,EAAaC,GAGpH,OAAAlF,CAAQle,EAAsCmkB,EAAYC,EAAY/Z,EAAiBC,EAAiBlG,EAAkB6f,EAAoBC,EAAkBJ,EAAyBZ,EAAsCC,EAA0BC,GACrP,MAAMiB,EAAiBjgB,EAAW0B,EAC5Bwe,EAAcle,GAAIie,GAClBE,EAAcle,GAAIge,GAExB,IAAIZ,EAAcQ,EAAane,EAC3B4d,EAAYQ,EAAWpe,EAEvB2d,EAAc/f,KAAI+f,GAAe1d,GACjC2d,EAAY,IAAGA,GAAa3d,GAEhC,IAAI8d,EAAcH,EAAYD,EAC1BI,EAAc,EAAGA,GAAe9d,EAC3B8d,EAAc9d,IAAK8d,GAAe9d,GAEvC+d,IAAeD,GAAe9d,GAGlC,MAAMye,EAAQ7U,GAAK/K,GAAIif,EAAc7d,IAC/Bye,EAAaZ,EAAcW,EAC3BE,EAAiBte,GAAIqe,EAAa,GAClCE,EAAU,EAAI,EAAID,EAAiBA,EAAiBte,GAAIqe,EAAa,GAE3Ef,EAAYD,EAAcgB,EAE1B,IAEIG,EAAgBC,EAEhBpf,EAAWC,EAAW8F,EAAYG,EAAYF,EAAYG,EAJ1DkZ,EAAWze,GAAIod,GACfsB,EAAW3e,GAAIqd,GAKfuB,EAASvf,EAAI8e,EAAcla,EAAUya,EAAWR,EAAcha,EAAUya,EACxEE,EAASvf,EAAI4e,EAAcja,EAAUya,EAAWP,EAAcja,EAAUya,EAExExY,EAAQ4X,EAAK1e,EAAG+G,EAAQ4X,EAAK1e,EAE7B1F,GAAMA,EAAKqN,KAAKrN,EAAKO,OAASmgB,GAAI/Y,GAAG4E,EAAOC,GAC5C0W,GAAgBlV,GAASkV,EAAgB3W,EAAOC,GAChD4W,GAAepc,GAAIoc,EAAe7W,EAAOC,GAE7C,IAAK,IAAInM,EAAI,EAAGA,EAAImkB,EAAOnkB,IAEvBukB,EAASve,GAAIqd,GACbmB,EAASze,GAAIsd,GAEbje,EAAI8e,EAAcla,EAAUua,EAASN,EAAcha,EAAUua,EAC7Dnf,EAAI4e,EAAcja,EAAUua,EAASL,EAAcja,EAAUua,EAC7DrZ,EAAK2Y,EAAKa,EAASL,GAAWJ,EAAcla,EAAU0a,EAAWT,EAAcha,EAAUwa,GACzFnZ,EAAKyY,EAAKa,EAASN,GAAWL,EAAcja,EAAU0a,EAAWR,EAAcja,EAAUwa,GACzFrZ,EAAK0Y,EAAK1e,EAAIkf,GAAWJ,EAAcla,EAAUwa,EAASP,EAAcha,EAAUsa,GAClFhZ,EAAKwY,EAAK1e,EAAIif,GAAWL,EAAcja,EAAUwa,EAASN,EAAcja,EAAUsa,GAE9E5kB,GAAMA,EAAKqN,KAAK2T,GAAGxV,EAAIG,EAAIF,EAAIG,EAAIuY,EAAK1e,EAAG2e,EAAK1e,GAChDwd,GAAgBgC,GAAiBf,EAAKa,EAAQZ,EAAKa,EAAQzZ,EAAIG,EAAIF,EAAIG,EAAIuY,EAAK1e,EAAG2e,EAAK1e,EAAGwd,GAAgB,GAE/G8B,EAASvf,EACTwf,EAASvf,EACTof,EAAWF,EACXG,EAAWF,EACXpB,EAAcC,EACdA,GAAae,EAGbtB,GAAanc,GAAImc,EAAagB,EAAK1e,EAAG2e,EAAK1e,EAEnD,EAEA,gBAAA0X,CAAiBpd,EAAwBuM,EAAeC,EAAehB,EAAYG,EAAYgB,EAAaC,GACxG5M,EAAKqN,KAAK2T,IAAIzU,EAAQ,EAAIf,GAAM,GAAIgB,EAAQ,EAAIb,GAAM,GAAIgB,EAAM,EAAInB,GAAM,GAAIoB,EAAM,EAAIjB,GAAM,EAAGgB,EAAKC,EAC1G,EAEA,gCAAAuY,CAAiC5Y,EAAeC,EAAehB,EAAYG,EAAYgB,EAAaC,EAAawY,EAAkCjT,GAC/I+S,GAAiB3Y,EAAOC,GAAQD,EAAQ,EAAIf,GAAM,GAAIgB,EAAQ,EAAIb,GAAM,GAAIgB,EAAM,EAAInB,GAAM,GAAIoB,EAAM,EAAIjB,GAAM,EAAGgB,EAAKC,EAAKwY,EAAajT,EAC9I,EAEA,gBAAA+S,CAAiB3Y,EAAeC,EAAehB,EAAYG,EAAYF,EAAYG,EAAYe,EAAaC,EAAawY,EAAkCjT,GAEvJ,MAAMkT,EAAQ,GACd,IAAIljB,EAAGC,EAAGC,EAAGrD,EAAGsmB,EAAIC,EAAIxE,EAAGyE,EACvBhjB,EAAI+J,EAAOkZ,EAAKja,EAAIka,EAAKja,EAAIka,EAAIhZ,EAErC,IAAK,IAAItM,EAAI,EAAGA,EAAI,IAAKA,EAUrB,GARS,GAALA,IACAmC,EAAIgK,EAAOiZ,EAAK9Z,EAAI+Z,EAAK9Z,EAAI+Z,EAAI/Y,GAGrCzK,GAAI,EAAKK,EAAI,EAAIijB,EAAK,EAAIC,EAAK,EAAIC,EACnCvjB,EAAI,EAAII,EAAI,GAAKijB,EAAK,EAAIC,EAC1BrjB,EAAI,EAAIojB,EAAK,EAAIjjB,EAEbmB,KAAKiB,IAAIzC,GAAK,MAAlB,CACI,GAAIwB,KAAKiB,IAAIxC,GAAK,MAAO,SACzBpD,GAAKqD,EAAID,EACL,EAAIpD,GAAKA,EAAI,GAAGqmB,EAAMhY,KAAKrO,EAEnC,MAEA+hB,EAAI3e,EAAIA,EAAI,EAAIC,EAAIF,EACpBqjB,EAAQ7hB,KAAK4C,KAAKwa,GACdA,EAAI,IAERuE,IAAOljB,EAAIojB,IAAU,EAAIrjB,GACrB,EAAImjB,GAAMA,EAAK,GAAGD,EAAMhY,KAAKiY,GACjCC,IAAOnjB,EAAIojB,IAAU,EAAIrjB,GACrB,EAAIojB,GAAMA,EAAK,GAAGF,EAAMhY,KAAKkY,IAGrCpT,EAAU9D,GAAS+W,EAAa7Y,EAAOC,GAASwB,GAASoX,EAAa7Y,EAAOC,GAC7E6B,GAAS+W,EAAazY,EAAKC,GAE3B,IAAK,IAAIvM,EAAI,EAAGC,EAAM+kB,EAAM9kB,OAAQF,EAAIC,EAAKD,IACzCulB,GAAeP,EAAMhlB,GAAIkM,EAAOC,EAAOhB,EAAIG,EAAIF,EAAIG,EAAIe,EAAKC,EAAKpG,IACjE6H,GAAS+W,EAAa5e,GAAUf,EAAGe,GAAUd,EAGrD,EAEA,cAAAkgB,CAAe5mB,EAAWuN,EAAeC,EAAehB,EAAYG,EAAYF,EAAYG,EAAYe,EAAaC,EAAaoB,GAC9H,MAAM2X,EAAI,EAAI3mB,EAAGmD,EAAIwjB,EAAIA,EAAIA,EAAGvjB,EAAI,EAAIujB,EAAIA,EAAI3mB,EAAGqD,EAAI,EAAIsjB,EAAI3mB,EAAIA,EAAGsD,EAAItD,EAAIA,EAAIA,EAClFgP,EAASvI,EAAItD,EAAIoK,EAAQnK,EAAIoJ,EAAKnJ,EAAIoJ,EAAKnJ,EAAIqK,EAC/CqB,EAAStI,EAAIvD,EAAIqK,EAAQpK,EAAIuJ,EAAKtJ,EAAIuJ,EAAKtJ,EAAIsK,CACnD,EAEA,QAAA0C,CAAStQ,EAAWuN,EAAeC,EAAehB,EAAYG,EAAYF,EAAYG,EAAYe,EAAaC,GAC3G,MAAMrC,EAAQ,CAAA,EAEd,OADAqb,GAAe5mB,EAAGuN,EAAOC,EAAOhB,EAAIG,EAAIF,EAAIG,EAAIe,EAAKC,EAAKrC,GACnDA,CACX,EAEA,aAAAsb,CAAc7mB,EAAW8mB,EAAeC,EAAYC,EAAYC,GAC5D,MAAMN,EAAI,EAAI3mB,EACd,OAAO,EAAI2mB,EAAIA,GAAKI,EAAKD,GAAS,EAAIH,EAAI3mB,GAAKgnB,EAAKD,GAAM,EAAI/mB,EAAIA,GAAKinB,EAAMD,EACjF,IAIEJ,eAAEA,GAAcV,iBAAEA,WAAkBhH,IAAYgE,ICvQhD9b,IAAEA,GAAGC,IAAEA,GAAGE,KAAEA,GAAIyD,MAAEA,IAAUrG,MAC5Bua,QAAEA,IAAYgE,GAEPgE,GAAgB,CAGzB,aAAAC,CAAcnmB,EAAwBuM,EAAeC,EAAenC,EAAiBC,EAAiBlG,EAAkBgiB,EAAmBC,EAAmB1Z,EAAaC,EAAa0Z,GAEpL,MAAMC,GAAS5Z,EAAMJ,GAAS,EACxBia,GAAS5Z,EAAMJ,GAAS,EAExB6X,EAAiBjgB,EAAW0B,EAC5Bwe,EAAcle,GAAIie,GAClBE,EAAcle,GAAIge,GAElBoC,GAAMlC,EAAcgC,EAAQjC,EAAckC,EAC1CE,GAAMnC,EAAciC,EAAQlC,EAAciC,EAC1CI,EAAWtc,EAAUA,EACrBuc,EAAWtc,EAAUA,EACrBuc,EAAWH,EAAKA,EAChBI,EAAWL,EAAKA,EAEhBtkB,EAAIwkB,EAAWC,EAAWD,EAAWE,EAAWD,EAAWE,EACjE,IAAI9d,EAAI,EAER,GAAI7G,EAAI,EAAG,CACP,MAAMnD,EAAIuH,GAAK,EAAIpE,GAAKwkB,EAAWC,IACnCvc,GAAWrL,EACXsL,GAAWtL,CACf,MACIgK,GAAKod,IAAcC,GAAY,EAAK,GAAK9f,GAAKpE,GAAKwkB,EAAWE,EAAWD,EAAWE,IAGxF,MAAM3C,EAAKnb,EAAIqB,EAAUqc,EAAKpc,EACxB8Z,GAAMpb,EAAIsB,EAAUmc,EAAKpc,EAEzBoZ,EAAczZ,IAAO0c,EAAKtC,GAAM9Z,GAAUmc,EAAKtC,GAAM9Z,GACrDqZ,EAAY1Z,KAAQ0c,EAAKtC,GAAM9Z,IAAWmc,EAAKtC,GAAM9Z,GAE3D,IAAIwZ,EAAcH,EAAYD,EAEZ,IAAd4C,GAAmBxC,EAAc,EACjCA,GAAe9d,EACM,IAAdsgB,GAAmBxC,EAAc,IACxCA,GAAe9d,GAGnB,MAAMge,EAAUxX,EAAQga,EAAQhC,EAAcJ,EAAKG,EAAcF,EAC3DJ,EAAUxX,EAAQga,EAAQlC,EAAcH,EAAKI,EAAcH,EAE3DN,EAAgBD,EAAc,EAAI,EAAI,EAExCyC,GAAalqB,EAAS2qB,eACtB7I,GAAQle,EAAM+jB,EAASC,EAAS3Z,EAASC,EAASlG,EAAUqf,EAAc3d,EAAW4d,EAAY5d,EAAWge,GAExGzZ,IAAYC,GAAYlG,EAGxBpE,EAAKqN,KAAKmT,GAAeJ,EAAG2D,EAASC,EAAS3Z,EAASC,EAASlG,EAAUqf,EAAc3d,EAAW4d,EAAY5d,EAAWge,GAF1H9jB,EAAKqN,KAAKmT,GAAeF,EAAGyD,EAASC,EAAS3Z,EAASoZ,EAAc3d,EAAW4d,EAAY5d,EAAWge,EAKnH,ICpDEnc,EAAEA,GAAC8Y,EAAEA,GAACC,EAAEA,GAACC,EAAEA,GAACC,EAAEA,GAACC,EAAEA,GAACC,EAAEA,GAACC,EAAEA,GAACC,EAAEA,GAAC3e,EAAEA,GAAC4e,EAAEA,GAACjY,EAAEA,GAACkY,EAAEA,GAACC,EAAEA,GAACC,EAAEA,GAACpiB,EAAEA,GAACqiB,EAAEA,GAAClf,EAAEA,GAACmf,EAAEA,GAACC,EAAEA,GAACrB,EAAEA,GAAC9K,EAAEA,GAAC+K,EAAEA,GAACC,EAAEA,GAACC,EAAEA,GAACC,EAAEA,GAAC1V,EAAEA,GAAC2V,EAAEA,IAAMyG,IACzF1I,KAAEA,GAAIC,UAAEA,SAAWV,GAAKL,IAAEA,GAAGU,QAAEA,GAAOd,iBAAEA,IAAqB8E,IAC7DiE,cAAEA,IAAkBD,GACpBnQ,GAAQrC,GAAMzM,IAAI,eAElBkc,GAAc,CAAA,EAEP8D,GAAc,CAEvBC,QAAS,CAAEC,IAAK,GAEhB,SAAAtoB,CAAUmB,EAAwBonB,GAC9B,IAA8BC,EAAiCC,EAAiBC,EAA5ElnB,EAAI,EAAGC,EAAMN,EAAKO,OAAuBinB,EAAc,GAC3D,KAAOnnB,EAAIC,GAAK,CACZgnB,EAAUtnB,EAAKK,GACfgnB,EAAQzF,GAA2B0F,GAE/BE,GADAF,IAAYC,EACL,IAEA5F,GAAqB2F,GAGhC,IAAK,IAAIG,EAAI,EAAGA,EAAIJ,EAAOI,IACvBD,GAAO5jB,EAAWU,MAAMtE,EAAKK,EAAIonB,GAAIL,GACpCK,IAAMJ,EAAQ,IAAOG,GAAO,KAGjCD,EAAcD,EACdjnB,GAAKgnB,CACT,CACA,OAAOG,CACX,EAEA,KAAAvnB,CAAMynB,EAAoBpB,GAEtB,IAAIqB,EAAsBC,EAAcC,EAAkB5jB,EAAM,GAChE,MAAMjE,EAAyB,GACzB8nB,EAAiBxB,EAAY5E,GAA+BD,GAElE,IAAK,IAAIphB,EAAI,EAAGC,EAAMonB,EAAWnnB,OAAQF,EAAIC,EAAKD,IAE9CunB,EAAOF,EAAWrnB,GAEdmT,GAAgBoU,IAEH,MAATA,IACIV,GAAQC,MAAOY,GAAS/nB,EAAMiE,GAAMA,EAAM,IAC9CijB,GAAQC,OAGA,MAARljB,GAAwB,MAAT2jB,IAAgBG,GAAS/nB,EAAMiE,GAAMA,EAAM,IAE9DA,GAAO2jB,GAEAZ,GAAQY,IAEX3jB,IAAO8jB,GAAS/nB,EAAMiE,GAAMA,EAAM,IAEtCijB,GAAQ3lB,KAAOylB,GAAQY,GACvBV,GAAQ3mB,OAASihB,GAAqBoG,GACtCV,GAAQ1U,MAAQ,EAChBuV,GAAS/nB,EAAMknB,GAAQ3lB,OAElBomB,GAAeG,EAAeF,KAAOD,GAAc,IAI3C,MAATC,GAAyB,MAATA,EAEC,MAAbC,GAAiC,MAAbA,EACpB5jB,GAAO2jB,GAEH3jB,GAAK8jB,GAAS/nB,EAAMiE,GACxBA,EAAM2jB,GAIN3jB,IAAO8jB,GAAS/nB,EAAMiE,GAAMA,EAAM,IAK9C4jB,EAAWD,EAMf,OAFI3jB,GAAK8jB,GAAS/nB,EAAMiE,GAEjB0jB,EAAcV,GAAYe,aAAahoB,EAAMsmB,GAAatmB,CACrE,EAEA,YAAAgoB,CAAaC,EAAuB3B,GAEhC,IAA2D4B,EAAkBC,EAAkBb,EAAiBC,EAAqBa,EAAjI3iB,EAAI,EAAGC,EAAI,EAAG8F,EAAK,EAAGG,EAAK,EAAGtL,EAAI,EAAGC,EAAM2nB,EAAI1nB,OACnD,MAAMP,EAAyB,GAE/B,KAAOK,EAAIC,GAAK,CAIZ,OAFAgnB,EAAUW,EAAI5nB,GAENinB,GAEJ,KAAK7G,GACDwH,EAAI5nB,EAAI,IAAMoF,EACdwiB,EAAI5nB,EAAI,IAAMqF,EAClB,KAAKiC,GACDlC,EAAIwiB,EAAI5nB,EAAI,GACZqF,EAAIuiB,EAAI5nB,EAAI,GACZL,EAAKqN,KAAK1F,GAAGlC,EAAGC,GAChBrF,GAAK,EACL,MAGJ,KAAKwgB,GACDoH,EAAI5nB,EAAI,IAAMoF,EAClB,KAAKmb,GACDnb,EAAIwiB,EAAI5nB,EAAI,GACZL,EAAKqN,KAAKqT,GAAGjb,EAAGC,GAChBrF,GAAK,EACL,MAGJ,KAAK0gB,GACDkH,EAAI5nB,EAAI,IAAMqF,EAClB,KAAKob,GACDpb,EAAIuiB,EAAI5nB,EAAI,GACZL,EAAKqN,KAAKqT,GAAGjb,EAAGC,GAChBrF,GAAK,EACL,MAGJ,KAAKsgB,GACDsH,EAAI5nB,EAAI,IAAMoF,EACdwiB,EAAI5nB,EAAI,IAAMqF,EAClB,KAAKgb,GACDjb,EAAIwiB,EAAI5nB,EAAI,GACZqF,EAAIuiB,EAAI5nB,EAAI,GACZL,EAAKqN,KAAKqT,GAAGjb,EAAGC,GAChBrF,GAAK,EACL,MAGJ,KAAK2I,GACDif,EAAI5nB,EAAI,IAAMoF,EACdwiB,EAAI5nB,EAAI,IAAMqF,EACduiB,EAAI5nB,EAAI,IAAMoF,EACdwiB,EAAI5nB,EAAI,IAAMqF,EACd4hB,EAAUrG,GACd,KAAKA,GACDmH,EAAUb,IAAgBvG,IAAOuG,IAAgBtG,GACjDzV,EAAK4c,EAAc,EAAJ3iB,EAAQyiB,EAAYD,EAAI5nB,EAAI,GAC3CsL,EAAKyc,EAAc,EAAJ1iB,EAAQyiB,EAAYF,EAAI5nB,EAAI,GAC3C6nB,EAAWD,EAAI5nB,EAAI,GACnB8nB,EAAWF,EAAI5nB,EAAI,GACnBoF,EAAIwiB,EAAI5nB,EAAI,GACZqF,EAAIuiB,EAAI5nB,EAAI,GACZL,EAAKqN,KAAK2T,GAAGxV,EAAIG,EAAIuc,EAAUC,EAAU1iB,EAAGC,GAC5CrF,GAAK,EACL,MAGJ,KAAKgC,GACD4lB,EAAI5nB,EAAI,IAAMoF,EACdwiB,EAAI5nB,EAAI,IAAMqF,EACduiB,EAAI5nB,EAAI,IAAMoF,EACdwiB,EAAI5nB,EAAI,IAAMqF,EACduiB,EAAI5nB,EAAI,IAAMoF,EACdwiB,EAAI5nB,EAAI,IAAMqF,EACd4hB,EAAUtG,GACd,KAAKA,GACDkH,EAAWD,EAAI5nB,EAAI,GACnB8nB,EAAWF,EAAI5nB,EAAI,GACnBoF,EAAIwiB,EAAI5nB,EAAI,GACZqF,EAAIuiB,EAAI5nB,EAAI,GACZL,EAAKqN,KAAK2T,GAAGiH,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI6nB,EAAUC,EAAU1iB,EAAGC,GAC5DrF,GAAK,EACL,MAGJ,KAAKrB,GACDipB,EAAI5nB,EAAI,IAAMoF,EACdwiB,EAAI5nB,EAAI,IAAMqF,EACd4hB,EAAUlG,GACd,KAAKA,GACDgH,EAAUb,IAAgBrG,IAAOqG,IAAgBnG,GACjD8G,EAAWE,EAAc,EAAJ3iB,EAAQyiB,EAAYD,EAAI5nB,EAAI,GACjD8nB,EAAWC,EAAc,EAAJ1iB,EAAQyiB,EAAYF,EAAI5nB,EAAI,GACjDimB,EAAYlJ,GAAiBpd,EAAMyF,EAAGC,EAAGwiB,EAAUC,EAAUF,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,IAAML,EAAKqN,KAAK6T,GAAGgH,EAAUC,EAAUF,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,IAC5IoF,EAAIwiB,EAAI5nB,EAAI,GACZqF,EAAIuiB,EAAI5nB,EAAI,GACZA,GAAK,EACL,MAGJ,KAAK8gB,GACD8G,EAAI5nB,EAAI,IAAMoF,EACdwiB,EAAI5nB,EAAI,IAAMqF,EACduiB,EAAI5nB,EAAI,IAAMoF,EACdwiB,EAAI5nB,EAAI,IAAMqF,EACd4hB,EAAUpG,GACd,KAAKA,GACDgH,EAAWD,EAAI5nB,EAAI,GACnB8nB,EAAWF,EAAI5nB,EAAI,GACnBimB,EAAYlJ,GAAiBpd,EAAMyF,EAAGC,EAAGwiB,EAAUC,EAAUF,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,IAAML,EAAKqN,KAAK6T,GAAGgH,EAAUC,EAAUF,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,IAC5IoF,EAAIwiB,EAAI5nB,EAAI,GACZqF,EAAIuiB,EAAI5nB,EAAI,GACZA,GAAK,EACL,MAGJ,KAAK8B,GACD8lB,EAAI5nB,EAAI,IAAMoF,EACdwiB,EAAI5nB,EAAI,IAAMqF,EAClB,KAAK2b,GACD8E,GAAcnmB,EAAMyF,EAAGC,EAAGuiB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAIimB,GAC9G7gB,EAAIwiB,EAAI5nB,EAAI,GACZqF,EAAIuiB,EAAI5nB,EAAI,GACZA,GAAK,EACL,MACJ,KAAKkhB,GACL,KAAKD,GACDthB,EAAKqN,KAAKiU,IACVjhB,IACA,MAKJ,KAAK6f,GACDza,EAAIwiB,EAAI5nB,EAAI,GACZqF,EAAIuiB,EAAI5nB,EAAI,GACZimB,EAAYhI,GAAKte,EAAMyF,EAAGC,EAAGuiB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,IAAMgoB,GAASroB,EAAMioB,EAAK5nB,EAAG,GAC9EA,GAAK,EACL,MACJ,KAAK+U,GACD3P,EAAIwiB,EAAI5nB,EAAI,GACZqF,EAAIuiB,EAAI5nB,EAAI,GACZimB,EAAY/H,GAAUve,EAAMyF,EAAGC,EAAGuiB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI,CAAC4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,KAAOgoB,GAASroB,EAAMioB,EAAK5nB,EAAG,GACrIA,GAAK,EACL,MACJ,KAAK8f,GACD1a,EAAIwiB,EAAI5nB,EAAI,GACZqF,EAAIuiB,EAAI5nB,EAAI,GACZimB,EAAY/H,GAAUve,EAAMyF,EAAGC,EAAGuiB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,IAAMgoB,GAASroB,EAAMioB,EAAK5nB,EAAG,GAC/FA,GAAK,EACL,MACJ,KAAK+f,GACDlC,GAAQoI,EAAYtmB,EAAOqoB,GAASroB,EAAMioB,EAAK5nB,EAAG,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAA0B,KAAM8iB,IAClL1d,EAAI0d,GAAY1d,EAChBC,EAAIyd,GAAYzd,EAChBrF,GAAK,EACL,MACJ,KAAKggB,GACDiG,EAAYpI,GAAQle,EAAMioB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI,EAAG,EAAG,KAAK,GAASgoB,GAASroB,EAAMioB,EAAK5nB,EAAG,GACrHoF,EAAIwiB,EAAI5nB,EAAI,GAAK4nB,EAAI5nB,EAAI,GACzBqF,EAAIuiB,EAAI5nB,EAAI,GACZA,GAAK,EACL,MACJ,KAAKigB,GACD9C,GAAI8I,EAAYtmB,EAAOqoB,GAASroB,EAAMioB,EAAK5nB,EAAG,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAA0B,KAAM8iB,IACtJ1d,EAAI0d,GAAY1d,EAChBC,EAAIyd,GAAYzd,EAChBrF,GAAK,EACL,MACJ,KAAKuK,GACD0b,EAAY9I,GAAIxd,EAAMioB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI,EAAG,KAAK,GAASgoB,GAASroB,EAAMioB,EAAK5nB,EAAG,GAClGoF,EAAIwiB,EAAI5nB,EAAI,GAAK4nB,EAAI5nB,EAAI,GACzBqF,EAAIuiB,EAAI5nB,EAAI,GACZA,GAAK,EACL,MACJ,KAAKkgB,GACD1C,GAAMyI,EAAYtmB,EAAOqoB,GAASroB,EAAMioB,EAAK5nB,EAAG,GAAIoF,EAAGC,EAAGuiB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI4nB,EAAI5nB,EAAI,GAAI,KAAM8iB,IAC5H1d,EAAI0d,GAAY1d,EAChBC,EAAIyd,GAAYzd,EAChBrF,GAAK,EACL,MACJ,QAEI,OADA0V,GAAMF,MAAM,YAAYyR,YAAkBjnB,KAAM4nB,GACzCjoB,EAGfunB,EAAcD,CAClB,CAEA,OAAOtnB,CAEX,EAEA,kBAAAsoB,CAAmBnoB,GACf,MAAMH,EAAyB,GAU/B,OATAG,EAAKZ,QAAQuP,IACT,OAAQA,EAAKvN,MACT,IAAK,IAAKvB,EAAKqN,KAAK1F,GAAGmH,EAAKrJ,EAAGqJ,EAAKpJ,GAAI,MACxC,IAAK,IAAK1F,EAAKqN,KAAKqT,GAAG5R,EAAKrJ,EAAGqJ,EAAKpJ,GAAI,MACxC,IAAK,IAAK1F,EAAKqN,KAAK2T,GAAGlS,EAAKtD,GAAIsD,EAAKnD,GAAImD,EAAKrD,GAAIqD,EAAKlD,GAAIkD,EAAKrJ,EAAGqJ,EAAKpJ,GAAI,MAC5E,IAAK,IAAK1F,EAAKqN,KAAK6T,GAAGpS,EAAKtD,GAAIsD,EAAKnD,GAAImD,EAAKrJ,EAAGqJ,EAAKpJ,GAAI,MAC1D,IAAK,IAAK1F,EAAKqN,KAAKiU,OAGrBthB,CACX,EAEA,QAAAqoB,CAASroB,EAAwBioB,EAAuBzV,EAAe6U,GACnE,IAAK,IAAIhnB,EAAImS,EAAOqE,EAAMrE,EAAQ6U,EAAOhnB,EAAIwW,EAAKxW,IAC9CL,EAAKqN,KAAK4a,EAAI5nB,GAEtB,EAEA,QAAA0nB,CAAS/nB,EAAwBuoB,GACzBrB,GAAQ1U,QAAU0U,GAAQ3mB,SAC1B2mB,GAAQ1U,MAAQ,EAChBxS,EAAKqN,KAAK6Z,GAAQ3lB,OAGtBvB,EAAKqN,KAAKhP,OAAOkqB,IACjBrB,GAAQ1U,QACR0U,GAAQC,IAAM,CAClB,IAIED,QAAEA,GAAOa,SAAEA,GAAQM,SAAEA,IAAapB,IC1UlCtf,EAAEA,GAAC+Y,EAAEA,GAACM,EAAEA,GAACE,EAAEA,GAACI,EAAEA,GAACpB,EAAEA,GAAC9K,EAAEA,GAAC+K,EAAEA,GAACC,EAAEA,GAACC,EAAEA,GAACC,EAAEA,GAAC1V,EAAEA,GAAC2V,EAAEA,IAAMC,IAC5CzU,mBAAEA,GAAkBO,cAAEA,IAAkBrC,GACxCue,IAAEA,GAAG1kB,IAAEA,GAAGc,IAAEA,IAAQjB,KACpB8kB,GAAa,CAAA,EAENC,GAAwB,CAEjC,SAAA9L,CAAU5c,GACNA,EAAKO,OAAS,CAClB,EAIA,MAAAsc,CAAO7c,EAAwByF,EAAWC,GACtC1F,EAAKqN,KAAK1F,GAAGlC,EAAGC,EACpB,EAEA,MAAAoX,CAAO9c,EAAwByF,EAAWC,GACtC1F,EAAKqN,KAAKqT,GAAGjb,EAAGC,EACpB,EAEA,aAAAqX,CAAc/c,EAAwBwL,EAAYG,EAAYF,EAAYG,EAAYnG,EAAWC,GAC7F1F,EAAKqN,KAAK2T,GAAGxV,EAAIG,EAAIF,EAAIG,EAAInG,EAAGC,EACpC,EAEA,gBAAA0X,CAAiBpd,EAAwBwL,EAAYG,EAAYlG,EAAWC,GACxE1F,EAAKqN,KAAK6T,GAAG1V,EAAIG,EAAIlG,EAAGC,EAC5B,EAEA,SAAA6X,CAAUvd,GACNA,EAAKqN,KAAKiU,GACd,EAIA,IAAAhD,CAAKte,EAAwByF,EAAWC,EAAWL,EAAeE,GAC9DvF,EAAKqN,KAAK6S,GAAGza,EAAGC,EAAGL,EAAOE,EAC9B,EAEA,SAAAgZ,CAAUve,EAAwByF,EAAWC,EAAWL,EAAeE,EAAgByc,GACnF,GAAI1jB,EAAS0jB,GACThiB,EAAKqN,KAAK8S,GAAG1a,EAAGC,EAAGL,EAAOE,EAAQyc,OAC/B,CACH,MAAM2G,EAAc/kB,EAAWI,WAAWge,GACtC2G,EACA3oB,EAAKqN,KAAK+H,GAAG3P,EAAGC,EAAGL,EAAOE,KAAWojB,GAErC3oB,EAAKqN,KAAK6S,GAAGza,EAAGC,EAAGL,EAAOE,EAElC,CACJ,EAEA,OAAA2Y,CAAQle,EAAwByF,EAAWC,EAAW2E,EAAiBC,EAAiBlG,EAAmB6f,EAAqBC,EAAmBJ,GAC3I5lB,EAAOkG,GACPpE,EAAKqN,KAAKgT,GAAG5a,EAAGC,EAAG2E,EAASC,IAExBpM,EAAO+lB,KAAaA,EAAa,GACjC/lB,EAAOgmB,KAAWA,EAAW,KACjClkB,EAAKqN,KAAK+S,GAAG3a,EAAGC,EAAG2E,EAASC,EAASlG,EAAU6f,EAAYC,EAAUJ,EAAgB,EAAI,GAEjG,EAEA,GAAAtG,CAAIxd,EAAwByF,EAAWC,EAAWud,EAAgBgB,EAAqBC,EAAmBJ,GAClG5lB,EAAO+lB,GACPjkB,EAAKqN,KAAKzC,GAAGnF,EAAGC,EAAGud,IAEf/kB,EAAOgmB,KAAWA,EAAW,KACjClkB,EAAKqN,KAAKiT,GAAG7a,EAAGC,EAAGud,EAAQgB,EAAYC,EAAUJ,EAAgB,EAAI,GAE7E,EAEA,KAAAjG,CAAM7d,EAAwBwL,EAAYG,EAAYF,EAAYG,EAAYqX,EAAgB2F,EAAgBC,GAC1G,IAAK9qB,EAAY6qB,GAAQ,CACrB,MAAMtmB,EAAIyJ,GAAmB6c,EAAOC,EAAOrd,EAAIG,EAAIF,EAAIG,GACvDqX,EAASnf,GAAImf,EAAQnf,GAAIxB,EAAI,EAAGA,EAAI,EAAIsC,GAAI4jB,GAAIlc,GAAcsc,EAAOC,EAAOrd,EAAIG,EAAIF,EAAIG,GAAM,KAClG,CACA5L,EAAKqN,KAAKkT,GAAG/U,EAAIG,EAAIF,EAAIG,EAAIqX,EACjC,EAIA,WAAA6F,CAAY9oB,EAAwByF,EAAWC,EAAW2E,EAAiBC,EAAiBlG,EAAmB6f,EAAqBC,EAAmBJ,GACnJ5B,GAAahE,QAAQ,KAAMzY,EAAGC,EAAG2E,EAASC,EAASpM,EAAOkG,GAAY,EAAIA,EAAUlG,EAAO+lB,GAAc,EAAIA,EAAY/lB,EAAOgmB,GAAY,IAAMA,EAAUJ,EAAe,KAAM,KAAM2E,IACvLzoB,EAAKqN,KAAK1F,GAAG8gB,GAAWhjB,EAAGgjB,GAAW/iB,GACtCwY,GAAQle,EAAMyF,EAAGC,EAAG2E,EAASC,EAASlG,EAAU6f,EAAYC,EAAUJ,EAC1E,EAEA,OAAAiF,CAAQ/oB,EAAwByF,EAAWC,EAAWud,EAAgBgB,EAAqBC,EAAmBJ,GAC1G5B,GAAa1E,IAAI,KAAM/X,EAAGC,EAAGud,EAAQ/kB,EAAO+lB,GAAc,EAAIA,EAAY/lB,EAAOgmB,GAAY,IAAMA,EAAUJ,EAAe,KAAM,KAAM2E,IACxIzoB,EAAKqN,KAAK1F,GAAG8gB,GAAWhjB,EAAGgjB,GAAW/iB,GACtC8X,GAAIxd,EAAMyF,EAAGC,EAAGud,EAAQgB,EAAYC,EAAUJ,EAClD,EAEA,UAAAkF,CAAWhpB,EAAwBmN,EAAiCgV,EAA0BC,GAC1FF,GAAa/U,OAAOnN,EAAMmN,EAAQgV,EAAOC,EAC7C,YAIIlE,GAAOV,IAAEA,IAAQkL,ICpGnB7L,OAAEA,GAAMC,OAAEA,GAAMM,iBAAEA,GAAgBL,cAAEA,GAAaQ,UAAEA,GAASX,UAAEA,GAAS0B,KAAEA,GAAIC,UAAEA,GAASL,QAAEA,GAAOV,IAAEA,GAAGK,MAAEA,GAAKiL,YAAEA,GAAWC,QAAEA,GAAOC,WAAEA,IAAeN,SAE7IO,GAET,QAAWpoB,CAAK7C,GAA2B8C,KAAKooB,OAASlrB,CAAM,CAC/D,QAAW6C,GAAS,OAAOC,KAAKooB,MAAO,CAIvC,WAAAzpB,CAAYoB,GACRC,KAAKkG,IAAInG,EACb,CAEO,GAAAmG,CAAInG,GAEP,OADAC,KAAKooB,OAASroB,EAAQ1C,EAAS0C,GAAQ8e,GAAW1f,MAAMY,GAAQA,EAAQ,GACjEC,IACX,CAEO,SAAA8b,GAGH,OAFAA,GAAU9b,KAAKooB,QACfpoB,KAAKqoB,QACEroB,IACX,CAIO,MAAA+b,CAAOpX,EAAWC,GAGrB,OAFAmX,GAAO/b,KAAKooB,OAAQzjB,EAAGC,GACvB5E,KAAKqoB,QACEroB,IACX,CAEO,MAAAgc,CAAOrX,EAAWC,GAGrB,OAFAoX,GAAOhc,KAAKooB,OAAQzjB,EAAGC,GACvB5E,KAAKqoB,QACEroB,IACX,CAEO,aAAAic,CAAcvR,EAAYG,EAAYF,EAAYG,EAAYnG,EAAWC,GAG5E,OAFAqX,GAAcjc,KAAKooB,OAAQ1d,EAAIG,EAAIF,EAAIG,EAAInG,EAAGC,GAC9C5E,KAAKqoB,QACEroB,IACX,CAEO,gBAAAsc,CAAiB5R,EAAYG,EAAYlG,EAAWC,GAGvD,OAFA0X,GAAiBtc,KAAKooB,OAAQ1d,EAAIG,EAAIlG,EAAGC,GACzC5E,KAAKqoB,QACEroB,IACX,CAEO,SAAAyc,GAGH,OAFAA,GAAUzc,KAAKooB,QACfpoB,KAAKqoB,QACEroB,IACX,CAIO,IAAAwd,CAAK7Y,EAAWC,EAAWL,EAAeE,GAG7C,OAFA+Y,GAAKxd,KAAKooB,OAAQzjB,EAAGC,EAAGL,EAAOE,GAC/BzE,KAAKqoB,QACEroB,IACX,CAEO,SAAAyd,CAAU9Y,EAAWC,EAAWL,EAAeE,EAAgByc,GAGlE,OAFAzD,GAAUzd,KAAKooB,OAAQzjB,EAAGC,EAAGL,EAAOE,EAAQyc,GAC5ClhB,KAAKqoB,QACEroB,IACX,CAEO,OAAAod,CAAQzY,EAAWC,EAAW2E,EAAiBC,EAAiBlG,EAAmB6f,EAAqBC,EAAmBJ,GAG9H,OAFA5F,GAAQpd,KAAKooB,OAAQzjB,EAAGC,EAAG2E,EAASC,EAASlG,EAAU6f,EAAYC,EAAUJ,GAC7EhjB,KAAKqoB,QACEroB,IACX,CAEO,GAAA0c,CAAI/X,EAAWC,EAAWud,EAAgBgB,EAAqBC,EAAmBJ,GAGrF,OAFAtG,GAAI1c,KAAKooB,OAAQzjB,EAAGC,EAAGud,EAAQgB,EAAYC,EAAUJ,GACrDhjB,KAAKqoB,QACEroB,IACX,CAEO,KAAA+c,CAAMrS,EAAYG,EAAYF,EAAYG,EAAYqX,GAGzD,OAFApF,GAAM/c,KAAKooB,OAAQ1d,EAAIG,EAAIF,EAAIG,EAAIqX,GACnCniB,KAAKqoB,QACEroB,IACX,CAIO,WAAAgoB,CAAYrjB,EAAWC,EAAW2E,EAAiBC,EAAiBlG,EAAmB6f,EAAqBC,EAAmBJ,GAGlI,OAFAgF,GAAYhoB,KAAKooB,OAAQzjB,EAAGC,EAAG2E,EAASC,EAASlG,EAAU6f,EAAYC,EAAUJ,GACjFhjB,KAAKqoB,QACEroB,IACX,CAEO,OAAAioB,CAAQtjB,EAAWC,EAAWud,EAAgBgB,EAAqBC,EAAmBJ,GAGzF,OAFAiF,GAAQjoB,KAAKooB,OAAQzjB,EAAGC,EAAGud,EAAQgB,EAAYC,EAAUJ,GACzDhjB,KAAKqoB,QACEroB,IACX,CAEO,UAAAkoB,CAAW7b,EAAiCgV,EAA0BC,GAGzE,OAFA4G,GAAWloB,KAAKooB,OAAQ/b,EAAQgV,EAAOC,GACvCthB,KAAKqoB,QACEroB,IACX,CAEO,SAAAsoB,GACH,OAAOtoB,KAAK8b,WAChB,CAEO,KAAAuM,GAAgB,EChH3B,MAAMxhB,EAAEA,GAAC+Y,EAAEA,GAACM,EAAEA,GAACE,EAAEA,GAACI,EAAEA,GAACpB,EAAEA,GAAC9K,EAAEA,GAAC+K,EAAEA,GAACC,EAAEA,GAACC,EAAEA,GAACC,EAAEA,GAAC1V,EAAEA,GAAC2V,EAAEA,IAAMyG,GAC5CjR,GAAQrC,GAAMzM,IAAI,cAEXoiB,GAAa,CAEtB,cAAAC,CAAevH,EAAqB/hB,GAChC,IAAKA,EAAM,OAEX,IAAIsnB,EACAjnB,EAAI,EAAGC,EAAMN,EAAKO,OAEtB,KAAOF,EAAIC,GAEP,OADAgnB,EAAUtnB,EAAKK,GACPinB,GACJ,KAAK3f,GACDoa,EAAOlF,OAAO7c,EAAKK,EAAI,GAAIL,EAAKK,EAAI,IACpCA,GAAK,EACL,MACJ,KAAKqgB,GACDqB,EAAOjF,OAAO9c,EAAKK,EAAI,GAAIL,EAAKK,EAAI,IACpCA,GAAK,EACL,MACJ,KAAK2gB,GACDe,EAAOhF,cAAc/c,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,IAC/FA,GAAK,EACL,MACJ,KAAK6gB,GACDa,EAAO3E,iBAAiBpd,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,IACxEA,GAAK,EACL,MACJ,KAAKihB,GACDS,EAAOxE,YACPld,GAAK,EACL,MAIJ,KAAK6f,GACD6B,EAAOzD,KAAKte,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,IAC5DA,GAAK,EACL,MACJ,KAAK+U,GACD2M,EAAOxD,UAAUve,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAI,CAACL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,KACtHA,GAAK,EACL,MACJ,KAAK8f,GACD4B,EAAOxD,UAAUve,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,IAC9EA,GAAK,EACL,MACJ,KAAK+f,GACD2B,EAAO7D,QAAQle,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAKyF,EAAW9F,EAAKK,EAAI,GAAKyF,EAAW9F,EAAKK,EAAI,GAAKyF,EAAW9F,EAAKK,EAAI,IACvJA,GAAK,EACL,MACJ,KAAKggB,GACD0B,EAAO7D,QAAQle,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAI,EAAG,EAAG0F,GAAK,GAC9E1F,GAAK,EACL,MACJ,KAAKigB,GACDyB,EAAOvE,IAAIxd,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAKyF,EAAW9F,EAAKK,EAAI,GAAKyF,EAAW9F,EAAKK,EAAI,IAC7GA,GAAK,EACL,MACJ,KAAKuK,GACDmX,EAAOvE,IAAIxd,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAI,EAAG0F,GAAK,GAC1D1F,GAAK,EACL,MACJ,KAAKkgB,GACDwB,EAAOlE,MAAM7d,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,IAC1EA,GAAK,EACL,MACJ,QAEI,YADA0V,GAAMF,MAAM,YAAYyR,YAAkBjnB,KAAML,GAKhE,IC1EE2H,EAAEA,GAAC+Y,EAAEA,GAACM,EAAEA,GAACE,EAAEA,GAACI,EAAEA,GAACpB,EAAEA,GAAC9K,EAAEA,GAAC+K,EAAEA,GAACC,EAAEA,GAACC,EAAEA,GAACC,EAAEA,GAAC1V,EAAEA,GAAC2V,EAAEA,IAAMyG,IAC5C9B,iBAAEA,GAAgBC,iCAAEA,GAAgCtH,MAAEA,GAAKL,IAAEA,GAAGU,QAAEA,IAAYgE,IAC9E1T,eAAEA,GAActH,KAAEA,GAAImH,SAAEA,GAAQL,SAAEA,GAAQM,UAAEA,GAASG,SAAEA,IAAaX,GACpEiI,GAAQrC,GAAMzM,IAAI,cAExB,IAAIgc,GAAgB5Y,GAAiBC,GACrC,MAAMyD,GAAkB,CAAA,EAClBmV,GAAiB,CAAA,EACjBC,GAAc,CAAA,EAEPoG,GAAa,CAEtB,QAAA9a,CAASzO,EAAwB0O,GAC7B6a,GAAWrE,iBAAiBllB,EAAMkjB,IAClCzU,GAASyU,GAAgBxU,EAC7B,EAEA,gBAAAwW,CAAiBllB,EAAwBkjB,GACrC,IAAKljB,IAASA,EAAKO,OAAQ,OAAOyN,GAASkV,EAAgB,EAAG,GAE9D,IAAyB1X,EAAYG,EAAYgB,EAAaC,EAAa0a,EAAvEjnB,EAAI,EAAGoF,EAAI,EAAGC,EAAI,EAEtB,MAAMpF,EAAMN,EAAKO,OAEjB,KAAOF,EAAIC,GAWP,OAVAgnB,EAAUtnB,EAAKK,GAEL,IAANA,IACIinB,IAAYhG,IAAKgG,IAAYtG,IAAKsG,IAAYpG,GAC9ClT,GAASkV,EAAgBzd,EAAGC,GAE5BsI,GAASkV,EAAgBljB,EAAKK,EAAI,GAAIL,EAAKK,EAAI,KAI/CinB,GACJ,KAAK3f,GACL,KAAK+Y,GACDjb,EAAIzF,EAAKK,EAAI,GACbqF,EAAI1F,EAAKK,EAAI,GACbgO,GAAS6U,EAAgBzd,EAAGC,GAC5BrF,GAAK,EACL,MACJ,KAAK2gB,GACDrU,EAAM3M,EAAKK,EAAI,GACfuM,EAAM5M,EAAKK,EAAI,GACf6kB,GAAiBzf,EAAGC,EAAG1F,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIsM,EAAKC,EAAKmB,IACrFS,GAAe0U,EAAgBnV,IAC/BtI,EAAIkH,EACJjH,EAAIkH,EACJvM,GAAK,EACL,MACJ,KAAK6gB,GACD1V,EAAKxL,EAAKK,EAAI,GACdsL,EAAK3L,EAAKK,EAAI,GACdsM,EAAM3M,EAAKK,EAAI,GACfuM,EAAM5M,EAAKK,EAAI,GACf8kB,GAAiC1f,EAAGC,EAAG8F,EAAIG,EAAIgB,EAAKC,EAAKmB,IACzDS,GAAe0U,EAAgBnV,IAC/BtI,EAAIkH,EACJjH,EAAIkH,EACJvM,GAAK,EACL,MACJ,KAAKihB,GACDjhB,GAAK,EACL,MAIJ,KAAK6f,GACDza,EAAIzF,EAAKK,EAAI,GACbqF,EAAI1F,EAAKK,EAAI,GACbiO,GAAU4U,EAAgBzd,EAAGC,EAAG1F,EAAKK,EAAI,GAAIL,EAAKK,EAAI,IACtDA,GAAK,EACL,MACJ,KAAK+U,GACL,KAAK+K,GACD1a,EAAIzF,EAAKK,EAAI,GACbqF,EAAI1F,EAAKK,EAAI,GACbiO,GAAU4U,EAAgBzd,EAAGC,EAAG1F,EAAKK,EAAI,GAAIL,EAAKK,EAAI,IACtDA,GAAMinB,IAAYlS,GAAI,EAAI,EAC1B,MACJ,KAAKgL,GACDlC,GAAQ,KAAMle,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAA0B0N,GAAiBoV,IACvJ,IAAN9iB,EAAU6G,GAAKgc,EAAgBnV,IAAmBS,GAAe0U,EAAgBnV,IACjFtI,EAAI0d,GAAY1d,EAChBC,EAAIyd,GAAYzd,EAChBrF,GAAK,EACL,MACJ,KAAKggB,GACD5a,EAAIzF,EAAKK,EAAI,GACbqF,EAAI1F,EAAKK,EAAI,GACbgK,GAAUrK,EAAKK,EAAI,GACnBiK,GAAUtK,EAAKK,EAAI,GACnBiO,GAAU4U,EAAgBzd,EAAI4E,GAAS3E,EAAI4E,GAAmB,EAAVD,GAAuB,EAAVC,IACjE7E,GAAK4E,GACLhK,GAAK,EACL,MACJ,KAAKigB,GACD9C,GAAI,KAAMxd,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAA0B0N,GAAiBoV,IACzH,IAAN9iB,EAAU6G,GAAKgc,EAAgBnV,IAAmBS,GAAe0U,EAAgBnV,IACjFtI,EAAI0d,GAAY1d,EAChBC,EAAIyd,GAAYzd,EAChBrF,GAAK,EACL,MACJ,KAAKuK,GACDnF,EAAIzF,EAAKK,EAAI,GACbqF,EAAI1F,EAAKK,EAAI,GACb4iB,GAASjjB,EAAKK,EAAI,GAClBiO,GAAU4U,EAAgBzd,EAAIwd,GAAQvd,EAAIud,GAAiB,EAATA,GAAqB,EAATA,IAC9Dxd,GAAKwd,GACL5iB,GAAK,EACL,MACJ,KAAKkgB,GACD1C,GAAM,KAAMpY,EAAGC,EAAG1F,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAI0N,GAAiBoV,IAC9F,IAAN9iB,EAAU6G,GAAKgc,EAAgBnV,IAAmBS,GAAe0U,EAAgBnV,IACjFtI,EAAI0d,GAAY1d,EAChBC,EAAIyd,GAAYzd,EAChBrF,GAAK,EACL,MACJ,QAEI,YADA0V,GAAMF,MAAM,YAAYyR,YAAkBjnB,KAAML,GAKhE,IC/HE2H,EAAEA,GAAC+Y,EAAEA,GAACY,EAAEA,IAAM0F,IACdzb,WAAEA,GAAUG,WAAEA,IAAezB,GAC7B4T,MAAEA,IAAU6K,GAELc,GAAa,CAEtB,MAAApB,CAAOpoB,EAAwBgiB,EAAsByH,GAEjD,IAAInC,EAAiBC,EAAqBmC,EACtCrpB,EAAI,EAAGoF,EAAI,EAAGC,EAAI,EAAGsf,EAAS,EAAGC,EAAS,EAAG0E,EAAU,EAAGC,EAAU,EAAGhB,EAAQ,EAAGC,EAAQ,EAE9F,MAAMvoB,EAAMN,EAAKO,OACX6nB,EAA2B,GAEjC,KAAO/nB,EAAIC,GAAK,CAEZ,OADAgnB,EAAUtnB,EAAKK,GACPinB,GACJ,KAAK3f,GACDqd,EAAS4D,EAAQ5oB,EAAKK,EAAI,GAC1B4kB,EAAS4D,EAAQ7oB,EAAKK,EAAI,GAC1BA,GAAK,EACDL,EAAKK,KAAOqgB,IACZiJ,EAAU3pB,EAAKK,EAAI,GACnBupB,EAAU5pB,EAAKK,EAAI,GACnB+nB,EAAO/a,KAAK1F,GAAG4D,GAAWyZ,EAAQ2E,GAAUje,GAAWuZ,EAAQ2E,KAE/DxB,EAAO/a,KAAK1F,GAAGqd,EAAQC,GAE3B,MACJ,KAAKvE,GAID,OAHAjb,EAAIzF,EAAKK,EAAI,GACbqF,EAAI1F,EAAKK,EAAI,GACbA,GAAK,EACGL,EAAKK,IACT,KAAKqgB,GACD7C,GAAMuK,EAAQ3iB,EAAGC,EAAG1F,EAAKK,EAAI,GAAIL,EAAKK,EAAI,GAAI2hB,EAAc4G,EAAOC,GACnE,MACJ,KAAKvH,GACDzD,GAAMuK,EAAQ3iB,EAAGC,EAAGsf,EAAQC,EAAQjD,EAAc4G,EAAOC,GACzD,MACJ,QACIT,EAAO/a,KAAKqT,GAAGjb,EAAGC,GAE1BkjB,EAAQnjB,EACRojB,EAAQnjB,EACR,MACJ,KAAK4b,GACGiG,IAAgBjG,KAChBzD,GAAMuK,EAAQpD,EAAQC,EAAQ0E,EAASC,EAAS5H,EAAc4G,EAAOC,GACrET,EAAO/a,KAAKiU,KAEhBjhB,GAAK,EACL,MACJ,QACIqpB,EAAa9H,GAA2B0F,GACxC,IAAK,IAAIG,EAAI,EAAGA,EAAIiC,EAAYjC,IAAKW,EAAO/a,KAAKrN,EAAKK,EAAIonB,IAC1DpnB,GAAKqpB,EAEbnC,EAAcD,CAClB,CAOA,OALIA,IAAYhG,KACZ8G,EAAO,GAAKpD,EACZoD,EAAO,GAAKnD,GAGTmD,CACX,GCrDE,SAAUvnB,GAAKA,GACjB,OAAO,IAAIooB,GAAYpoB,EAC3B,CAEO,MAAMgpB,GAAMhpB,KAEnB8e,GAAWC,QAAU/e,KACrB8e,GAAW1f,MAAQgnB,GAAYhnB,MAC/B0f,GAAWI,oBAAsBkH,GAAYe,aCzB7C,MAAMlG,cAAEA,IAAkBD,GCFnB,MAAMiI,GAAa,CAEtBC,gBAAiB,CAAC,MAAO,OAAQ,OAEjCC,iBAAkB,CAAA,EAElBC,SAASlb,IACAA,GAAQA,EAAK7R,WAAW,SAAiB6R,GACjC,QAATA,IAAgBA,EAAO,QACpB,SAAWA,GAGtB,QAAAxS,CAAS2tB,GACL,MAAMvJ,EAAIuJ,EAASC,MAAM,KACzB,OAAOxJ,EAAEA,EAAEpgB,OAAS,EACxB,EAEA,aAAA6pB,CAAcF,GACV,MAAMnb,EAAOsR,GAAE9jB,SAAS2tB,GACxB,MAAO,CAAC,MAAO,QAAQ3U,KAAKzG,GAAQA,IAASC,EACjD,EAEA,gBAAAsb,CAAiBpoB,GACb,cAAeA,GACX,IAAK,SAAU,OAAOA,EACtB,IAAK,SAAU,MAAO,CAAEqoB,QAASroB,GACjC,IAAK,UAAW,MAAO,CAAEsoB,KAAMtoB,GAC/B,QAAS,MAAO,CAAA,EAExB,GAIEoe,GAAIyJ,GAEVzJ,GAAE0J,gBAAgBxqB,QAAQwP,GAAQsR,GAAE2J,iBAAiBjb,GAAQA,EAAKyb,eC9BlE,MAAMzU,GAAQrC,GAAMzM,IAAI,uBACXwjB,GAcT,WAAAhrB,CAAYirB,GARL5pB,KAAA6pB,UAAW,EACX7pB,KAAAgW,KAAO,EAQVhW,KAAK0V,GAAKpZ,EAAYO,OAAOP,EAAYG,MACzCuD,KAAK4pB,KAAOA,CAChB,CAEM,GAAAE,4CACF,IACQ9pB,KAAK4pB,OAAS5pB,KAAK+pB,YAAc/pB,KAAK2H,OAAOqiB,gBAAehqB,KAAK4pB,OACzE,CAAE,MAAO7U,GACLE,GAAMF,MAAMA,EAChB,CACJ,EAAC,CAEM,QAAAkV,GACHjqB,KAAK+pB,YAAa,EAClB/pB,KAAK2H,OAAS,KACd3H,KAAK4pB,KAAO,IAChB,CAEO,MAAAM,GACHlqB,KAAKmqB,UAAW,EAChBnqB,KAAKiqB,UACT,QCtCSG,GAcT,SAAWC,GAAkB,OAAOrqB,KAAKX,KAAKI,OAASO,KAAKsqB,WAAY,CAMxE,iBAAWC,GACP,OAAOvqB,KAAK+pB,WAAa,EAAI/pB,KAAK0R,MAAQ1R,KAAKwqB,qBACnD,CAEA,UAAWC,GACP,OAAOzqB,KAAK+pB,WAAa/pB,KAAKqqB,MAAQrqB,KAAKqqB,MAAQrqB,KAAKuqB,aAC5D,CAEA,WAAWG,GACP,MAAML,MAAEA,GAAUrqB,KAClB,IAAI2qB,EAAY,EAAGC,EAAU,EAE7B,IAAK,IAAIrrB,EAAI,EAAGA,EAAI8qB,EAAO9qB,IACnBA,GAAKS,KAAKuqB,eACVK,GAAW5qB,KAAKX,KAAKE,GAAGyW,KACpBzW,IAAMS,KAAKuqB,gBAAeI,EAAYC,IAE1CD,GAAa3qB,KAAKX,KAAKE,GAAGyW,KAIlC,OAAOhW,KAAK+pB,WAAa,EAAKa,EAAUD,CAC5C,CAGA,WAAAhsB,CAAYksB,GA3CL7qB,KAAA6qB,OAA+B,CAAEhB,SAAU,GAExC7pB,KAAAX,KAAoB,GAKvBW,KAAAgqB,SAAU,EACVhqB,KAAA+pB,YAAa,EAMb/pB,KAAA0R,MAAQ,EAER1R,KAAAsqB,YAAc,EA4BbO,GAAQ7sB,EAAWI,OAAO4B,KAAK6qB,OAAQA,GAC3C7qB,KAAK8qB,OACT,CAIO,GAAA9Z,CAAI+Z,EAAyB5pB,GAChC,IAAIqU,EAAgBqU,EAAmB7T,EAAcgV,EAErD,MAAMpB,EAAO,IAAID,GAASoB,GA6B1B,OA5BAnB,EAAKjiB,OAAS3H,KAEVxC,EAAS2D,GACT6pB,EAAQ7pB,EACDA,IACP0oB,EAAW1oB,EAAQ0oB,SACnBrU,EAAQrU,EAAQqU,MAChBQ,EAAO7U,EAAQ6U,KACfgV,EAAQ7pB,EAAQ6pB,OAGhBhV,IAAM4T,EAAK5T,KAAOA,IACL,IAAb6T,IAAoBD,EAAKC,UAAW,GAEpC5sB,EAAY+tB,GACZhrB,KAAKuM,KAAKqd,EAAMpU,IAEhBxV,KAAKsqB,cACL7T,WAAW,KACHzW,KAAKsqB,cACLtqB,KAAKsqB,cACLtqB,KAAKuM,KAAKqd,EAAMpU,KAErBwV,IAGPhrB,KAAK+pB,YAAa,EAEXH,CACX,CAEU,IAAArd,CAAKqd,EAAiBpU,GAC5BxV,KAAKX,KAAKkN,KAAKqd,IACD,IAAVpU,GAAoBxV,KAAKirB,QACzBjrB,KAAKirB,MAAQxU,WAAW,IAAMzW,KAAKwV,SAE3C,CAEU,KAAAsV,GACN9qB,KAAK0R,MAAQ,EACb1R,KAAKwqB,sBAAwB,EAC7BxqB,KAAKX,KAAO,GACZW,KAAKkrB,aAAe,GACpBlrB,KAAKsqB,YAAc,CACvB,CAIO,KAAA9U,GACExV,KAAKgqB,UACNhqB,KAAKgqB,SAAU,EACfhqB,KAAK+pB,YAAa,EAClB/pB,KAAK8pB,MAEb,CAEO,KAAAqB,GACHC,aAAaprB,KAAKirB,OAClBjrB,KAAKirB,MAAQ,KACbjrB,KAAKgqB,SAAU,CACnB,CAEO,MAAAqB,GACHrrB,KAAKwV,OACT,CAEO,IAAA8V,GACHtrB,KAAK0R,QACL1R,KAAKqrB,QACT,CAEO,IAAAE,GACHvrB,KAAK+pB,YAAa,EAClB/pB,KAAKX,KAAKZ,QAAQmrB,IAAeA,EAAKG,YAAYH,EAAKM,WACvDlqB,KAAKmrB,QACLnrB,KAAK8qB,OACT,CAIU,GAAAhB,GACD9pB,KAAKgqB,UAEVhqB,KAAKwrB,kBAEDxrB,KAAKkrB,aAAazrB,OAAS,EAE3BO,KAAKyrB,mBAILzrB,KAAKyqB,OAASzqB,KAAK0rB,UAAY1rB,KAAK2rB,aAG5C,CAEU,OAAAD,GACN,MAAM9B,EAAO5pB,KAAKX,KAAKW,KAAK0R,OACvBkY,EAILA,EAAKE,MAAM7Q,KAAK,KAEZjZ,KAAK4rB,OAAOhC,GAEZ5pB,KAAK0R,QACL1R,KAAK6rB,aAENC,MAAM/W,IACL/U,KAAK+rB,QAAQhX,KAXb/U,KAAK6rB,UAab,CAEU,gBAAAJ,GACNzrB,KAAKkrB,aAAazsB,QAAQmrB,GAAQ5pB,KAAKgsB,gBAAgBpC,GAC3D,CAEU,eAAAoC,CAAgBpC,GACtBA,EAAKE,MAAM7Q,KAAK,KAEZjZ,KAAK4rB,OAAOhC,GACZ5pB,KAAKisB,qBAENH,MAAM/W,IACL/U,KAAKksB,gBAAgBnX,IAE7B,CAEQ,QAAA8W,GACA7rB,KAAKqqB,QAAUrqB,KAAKuqB,cACpBvqB,KAAK2rB,aAEL3rB,KAAKirB,MAAQxU,WAAW,IAAMzW,KAAK8pB,MAE3C,CAEU,eAAA0B,GACN,IAAI5B,EAEJ5pB,KAAKkrB,aAAe,GACpBlrB,KAAKwqB,sBAAwB,EAC7B,IAAIzU,EAAM/V,KAAK0R,MAAQ1R,KAAK6qB,OAAOhB,SAE/B9T,EAAM/V,KAAKX,KAAKI,SAAQsW,EAAM/V,KAAKX,KAAKI,QAE5C,IAAK,IAAIF,EAAIS,KAAK0R,MAAOnS,EAAIwW,IACzB6T,EAAO5pB,KAAKX,KAAKE,GACbqqB,EAAKC,UAFqBtqB,IAG1BS,KAAKkrB,aAAa3e,KAAKqd,EAKnC,CAGU,gBAAAqC,GACN,IAAIrC,EACJ,MAAMsB,EAAelrB,KAAKkrB,aAG1BlrB,KAAKwqB,wBACLU,EAAaiB,MAGb,MAAMC,EAAqBlB,EAAazrB,OAClC4sB,EAAYrsB,KAAKuqB,cAAgB6B,EAEvC,GAAIlB,EAAazrB,OAAQ,CAErB,IAAKO,KAAKgqB,QAAS,OAEfqC,EAAYrsB,KAAKqqB,QAEjBT,EAAO5pB,KAAKX,KAAKgtB,GAEbzC,GAAQA,EAAKC,WACbqB,EAAa3e,KAAKqd,GAClB5pB,KAAKgsB,gBAAgBpC,IAKjC,MAEI5pB,KAAK0R,OAAS1R,KAAKwqB,sBACnBxqB,KAAKwqB,sBAAwB,EAC7BxqB,KAAK6rB,UAGb,CAIU,UAAAF,GACN3rB,KAAKurB,OACDvrB,KAAK6qB,OAAOc,YAAY3rB,KAAK6qB,OAAOc,YAC5C,CAEU,MAAAC,CAAOhC,GACbA,EAAKK,WACDjqB,KAAK6qB,OAAOe,QAAQ5rB,KAAK6qB,OAAOe,QACxC,CAEU,eAAAM,CAAgBnX,GAEtB/U,KAAKkrB,aAAazsB,QAAQmrB,IACtBA,EAAKC,UAAW,IAEpB7pB,KAAKkrB,aAAazrB,OAAS,EAC3BO,KAAKwqB,sBAAwB,EAE7BxqB,KAAK+rB,QAAQhX,EACjB,CAEU,OAAAgX,CAAQhX,GACd/U,KAAKmrB,QACDnrB,KAAK6qB,OAAOkB,SAAS/rB,KAAK6qB,OAAOkB,QAAQhX,EACjD,CAEO,OAAAtS,GACHzC,KAAKurB,MACT,ECrRJ,MAAMtW,GAAQrC,GAAMzM,IAAI,YAEXmmB,GAAsB,CAE/BC,OAAQ,IAAInC,GAEZ9qB,IAAK,CAAA,EAEL,cAAIyqB,GAAe,OAAOpU,GAAE4W,OAAOxC,UAAW,EAI9C,GAAA7jB,CAAIxH,EAAaxB,GACTyY,GAAErW,IAAIZ,IAAMuW,GAAMH,OAAOpW,GAC7BiX,GAAErW,IAAIZ,GAAOxB,CACjB,EAEAiJ,IAAIzH,GACOiX,GAAErW,IAAIZ,GAGjB,MAAA8tB,CAAO9tB,GACH,MAAMmF,EAAI8R,GAAErW,IAAIZ,GACZmF,IACIA,EAAEpB,SAASoB,EAAEpB,iBACVkT,GAAErW,IAAIZ,GAErB,EAIA,SAAA+tB,CAAU/tB,EAAaguB,GACnB,OAAO,IAAIlU,QAAQ,CAACC,EAASC,KACzB,MAAM9c,EAAQoE,KAAK2sB,SAASjuB,EAAKA,EAAKguB,GACtC9wB,EAAMgxB,KAAK,IAAMnU,EAAQ7c,GAAS6F,GAAWiX,EAAOjX,KAE5D,EAEA,QAAAkrB,CAASjuB,EAAaxB,EAAwDwvB,GAC1E,IAAI7B,EAKJ,OAJIxtB,EAASH,GAAQ2tB,EAAS,CAAEnvB,IAAKwB,GAC3BA,EAAMxB,MAAKmvB,EAAS,CAAEnvB,IAAKgD,EAAKmuB,KAAM3vB,IAC5C2tB,IAAQ6B,IAAW7B,EAAO6B,OAASA,GAASxvB,EAAQwZ,GAAQ9a,MAAMivB,IACtElV,GAAEzP,IAAIxH,EAAKxB,GACJA,CACX,EAGA,OAAAuF,GACIkT,GAAErW,IAAM,CAAA,CACZ,GAIEqW,GAAI2W,GCxDGQ,GAA8B,CAEvCC,YAAa,GAEbC,aAAc,GAEdC,cAAe,IAAI7C,GAEnB,GAAAjkB,CAAI0kB,GACA,IAAIjvB,EAAsB0wB,GAASnmB,IAAI0kB,EAAOnvB,KAG9C,OAFKE,GAAO0wB,GAASpmB,IAAI2kB,EAAOnvB,IAAKE,EAAQ8a,GAAQ9a,MAAMivB,IAC3DjvB,EAAMsxB,MACCtxB,CACX,EAEA,OAAAuxB,CAAQvxB,GACJA,EAAMsxB,MACNzW,WAAW,KAAa7a,EAAMsxB,KAAKnwB,GAAEiwB,aAAazgB,KAAK3Q,IAC3D,EAEA,aAAAwxB,GACI,MAAM/tB,EAAOtC,GAAEiwB,aACX3tB,EAAKI,OAAS1C,GAAEgwB,cAChB1tB,EAAKZ,QAAQ7C,IAAWA,EAAMsxB,KAAOtxB,EAAMF,KAAQ4wB,GAASE,OAAO5wB,EAAMF,MACzE2D,EAAKI,OAAS,EAEtB,EAEA4tB,cAAcxC,GACH7B,GAAWC,gBAAgBxU,KAAKzG,GAAQjR,GAAEuwB,SAAStf,EAAM6c,IAGpE,QAAAyC,CAASZ,EAAyB7B,GAC9B,GAAIA,EAAO6B,OAAQ,OAAO7B,EAAO6B,SAAWA,EAC5C,MAAMhxB,IAAEA,GAAQmvB,EAChB,GAAInvB,EAAIU,WAAW,UACf,GAAIV,EAAIU,WAAW,QAAU4sB,GAAWG,SAASuD,IAAU,OAAO,MAC/D,CACH,GAAIhxB,EAAIW,SAAS,IAAMqwB,IAAWhxB,EAAIW,SAAS,IAAM2sB,GAAWE,iBAAiBwD,IAAU,OAAO,EAC7F,GAAe,QAAXA,IAAqBhxB,EAAIW,SAAS,KAAM,OAAO,CAC5D,CACA,OAAO,CACX,EAEA,OAAAoG,GACI1F,GAAEiwB,aAAe,EACrB,GAIEjwB,GAAI+vB,IC/CJnwB,MAAEA,GAAKE,OAAEA,IAAWP,GACpBsS,MAAEA,GAAK3L,IAAEA,IAAQJ,KCRjB,SAAU0qB,GAAa1V,EAAWnZ,EAAa8uB,EAAmCC,GAC/EA,IAAgBD,EAAWE,aAAeF,EAAWG,YAAa,GACvEpvB,OAAO4Z,eAAeN,EAAQnZ,EAAK8uB,EACvC,CAEM,SAAUI,GAAcC,EAAiBptB,GAC3C,OAAOlC,OAAOyZ,yBAAyB6V,EAAQptB,EACnD,CAEM,SAAUqtB,GAAiBpvB,EAAaqvB,GAC1C,MAAMC,EAAa,IAAMtvB,EACzB,MAAO,CACH,GAAAyH,GAAQ,MAAM8Z,EAAKjgB,KAAiBguB,GAAa,OAAY,MAAL/N,EAAY8N,EAAe9N,CAAE,EACrF,GAAA/Z,CAAIhJ,GAAkB8C,KAAiBguB,GAAc9wB,CAAM,EAEnE,CCRM,SAAU+wB,GAAiBF,EAAuBG,GACpD,MAAO,CAACrW,EAAenZ,IAAgByvB,GAAetW,EAAQnZ,EAAKqvB,EAAcG,GAAgBA,EAAaxvB,GAClH,CAEM,SAAU0vB,GAAKC,GACjB,OAAOA,CACX,CAGM,SAAUF,GAAetW,EAAenZ,EAAaqvB,EAAuBM,GAC9E,MAAMC,EAAyC,CAC3C,GAAAnoB,GAAQ,OAAOnG,KAAKuuB,UAAU7vB,EAAK,EACnC,GAAAwH,CAAIhJ,GAAiB8C,KAAKwuB,UAAU9vB,EAAKxB,EAAO,GAEpDqwB,GAAU1V,EAAQnZ,EAAKH,OAAOH,OAAOkwB,EAAmBD,GAAkB,CAAA,IAC1EI,GAAoB5W,EAAQnZ,EAAKqvB,EACrC,CAwDM,SAAUW,GAAWX,EAAuBY,GAC9C,OAAOV,GAAiBF,EAAervB,IAAqB,CACxD,GAAAwH,CAAIhJ,GACA8C,KAAKwuB,UAAU9vB,EAAKxB,EAAOyxB,IAAsBC,GAAa5uB,KAClE,IAER,CAUM,SAAU4uB,GAAatuB,GACzBA,EAAKuuB,SAASC,YAAcxuB,EAAKuuB,SAASE,YACtCzuB,EAAK0uB,kBAAiB1uB,EAAKuuB,SAASI,eAAiB3uB,EAAKuuB,SAASK,eAC3E,CAcO,MAAMC,GAAWT,GAGlB,SAAUU,GAAuBrB,EAAuBsB,GAC1D,OAAOpB,GAAiBF,EAAervB,IAAqB,CACxD,GAAAwH,CAAIhJ,GACI8C,KAAKwuB,UAAU9vB,EAAKxB,KACpBoyB,GAAatvB,MACTqvB,IAAWrvB,KAAKuvB,GAAGC,aAAc,GAE7C,IAER,CAEM,SAAUF,GAAahvB,GACzBA,EAAKuuB,SAASY,eAAiBnvB,EAAKuuB,SAASa,eACzCpvB,EAAKivB,GAAGI,YAAYf,GAAatuB,EACzC,CAEO,MAAMsvB,GAAaR,GAuD1B,SAASS,GAAUvvB,GACf,MAAMqH,OAAEA,GAAWrH,EACnB,GAAIqH,EAAQ,CACR,MAAMmoB,UAAEA,GAAcnoB,EACtBA,EAAOooB,eACHD,IAAcnoB,EAAOmoB,WAAWnoB,EAAOqoB,aAC/C,CACJ,CAEA,SAASC,GAAU3vB,EAAa5B,EAAaxB,EAAegzB,GACpD5vB,EAAKkuB,UAAU9vB,EAAKxB,KACpBoD,EAAKuuB,SAASsB,gBAAkB7vB,EAAKuuB,SAASuB,gBAC7B,IAAbF,GAA4B,IAAVhzB,GAAa0xB,GAAatuB,GAExD,UAiFgBmuB,GAAoB5W,EAAenZ,EAAaqvB,GAE5D,MAAM7uB,EAAO2Y,EAAOwY,gBAAgBrZ,UAC9BsZ,EAAc,IAAM5xB,EACpB6xB,EAVV,SAA0B7xB,GACtB,MAAO,MAAQA,EAAI8xB,OAAO,GAAG9G,cAAgBhrB,EAAI+xB,MAAM,EAC3D,CAQ0BC,CAAiBhyB,GAEjC2a,EAA0CyU,GAAiBpvB,EAAKqvB,GAEtE,GAAI9wB,EAAY8wB,GACZ1U,EAASlT,IAAM,WAAc,OAAOnG,KAAKswB,EAAa,OACnD,GAA4B,mBAAjBvC,EACd1U,EAASlT,IAAM,WACX,MAAM8Z,EAAIjgB,KAAKswB,GACf,OAAY,MAALrQ,EAAY8N,EAAc/tB,KAAmBO,QAAU0f,CAClE,OACG,GAAIriB,EAASmwB,GAAe,CAC/B,MAAM1b,EAAUxU,EAAYkwB,GAC5B1U,EAASlT,IAAM,WACX,MAAM8Z,EAAIjgB,KAAKswB,GACf,OAAY,MAALrQ,EAAYjgB,KAAKswB,GAAeje,EAAU,CAAA,EAAKrU,EAAWiB,MAAM8uB,GAAgB9N,CAC3F,CACJ,CAEA,MAAM0Q,EAAQ9Y,EAAO+Y,aACT,UAARlyB,EACA2a,EAASlT,IAAM,WACX,MAAM8Z,EAAIjgB,KAAKswB,GACf,GAAS,MAALrQ,EAAW,CACX,MAAM/hB,EAAI8B,KAAmB6wB,EAAe3yB,EAAEqE,eAAgBjC,EAAOpC,EAAEqC,OACvE,OAAKwtB,GAAgBztB,EAAKwwB,YAAoBxwB,EAAKywB,UAAUxsB,MACzDssB,EAAsB3yB,EAAcod,SAAWpd,EAAE2B,kBAAqB3B,EAAcod,QAAUuV,EAAe3yB,EAAEsE,gBAAkBquB,EAC7HF,GAASrwB,EAAK0wB,SAASvxB,OAAUa,EAAKywB,UAAUxsB,MAAQwpB,CACpE,CAAO,OAAO9N,CAClB,EACe,WAARvhB,IACP2a,EAASlT,IAAM,WACX,MAAM8Z,EAAIjgB,KAAKswB,GACf,GAAS,MAALrQ,EAAW,CACX,MAAM/hB,EAAI8B,KAAmBixB,EAAgB/yB,EAAEsE,gBAAiBlC,EAAOpC,EAAEqC,OACzE,OAAKwtB,GAAgBztB,EAAKwwB,YAAoBxwB,EAAKywB,UAAUtsB,OACzDwsB,EAAuB/yB,EAAcmd,QAAUnd,EAAE2B,kBAAqB3B,EAAcmd,OAAS4V,EAAgB/yB,EAAEqE,eAAiB0uB,EAC5HN,GAASrwB,EAAK0wB,SAASvxB,OAAUa,EAAKywB,UAAUtsB,OAASspB,CACrE,CAAO,OAAO9N,CAClB,GAIJ,IAAIuN,EAAY/V,EAAOvY,EACvB,MAAQsuB,GAAc/V,GAClB+V,EAAaI,GAAcnW,EAAM/Y,GACjC+Y,EAAOA,EAAKyZ,UAGZ1D,GAAcA,EAAWtnB,MAAKmT,EAASnT,IAAMsnB,EAAWtnB,KAExDhH,EAAKqxB,KACLlX,EAASnT,IAAMhH,EAAKqxB,UACbrxB,EAAKqxB,IAGhBhD,GAAUruB,EAAMR,EAAK2a,EAEzB,CChVA,MAAMpE,GAAQ,IAAIrC,GAAM,WAElBvT,GAAuB,GACvB8xB,GAAe,CAAC,UAAW,eAiBjC,SAASC,GAAUrc,GACX1V,GAAKI,SACLJ,GAAKZ,QAAQuP,IACL+G,GAAOE,GAAMF,MAAM/G,EAAKvN,KAAM,4BAClCuN,EAAK8b,QAETzqB,GAAKI,OAAS,EAEtB,CAOM,SAAU4xB,GAAUC,EAAiBhzB,GACvC,OAAQuZ,IF1BN,IAAmBgW,GE2BHyD,EAAOta,WF3BJ6W,EE2ByByD,EAAOta,UF1B9CzY,OAAOgzB,oBAAoB1D,IE0BgCtvB,OAAOC,KAAK8yB,IACpE7yB,QAAQgC,IACV,KAAK0wB,GAAa90B,SAASoE,IAAWnC,GAAYA,EAAQjC,SAASoE,IAC/D,GAAI6wB,EAAOta,UAAW,CACR4W,GAAc0D,EAAOta,UAAWvW,GACpC+wB,WAAU3Z,EAAOb,UAAUvW,GAAQ6wB,EAAOta,UAAUvW,GAC9D,MACIoX,EAAOb,UAAUvW,GAAQ6wB,EAAO7wB,KAKpD,CAnBAgW,WAAW,IAAM2a,IAAU,ICjC3B,MAAMhrB,KAAEA,GAAIU,aAAEA,gBAAcqB,GAAYxB,aAAEA,GAAYQ,cAAEA,GAAaG,YAAEA,GAAWI,eAAEA,GAAcM,aAAEA,GAAYa,UAAEA,IAAc/C,EAC1H1E,GAAS,CAAA,GAAmBsB,MAAEA,IAAUG,KAEjC4uB,GAAa,CAEtB,eAAAC,CAAgBpxB,EAAaqxB,EAA2BC,GAKpD,GAJID,GAAmBrxB,EAAK0uB,iBAAmB1uB,EAAKuuB,SAASI,gBAAe2C,GAAiB,GAE7FC,GAAavxB,EAAMqxB,EAAiBC,GAEhCtxB,EAAK2B,SAAU,CACf,MAAM+uB,SAAEA,GAAa1wB,EACrB,IAAK,IAAIf,EAAI,EAAGC,EAAMwxB,EAASvxB,OAAQF,EAAIC,EAAKD,IAC5CmyB,GAAgBV,EAASzxB,GAAIoyB,EAAiBC,EAEtD,CACJ,EAEA,YAAAC,CAAavxB,EAAaqxB,EAA2BC,GACjD,MAAMppB,EAASlI,EAAKuuB,SAEhB8C,EACIC,IACAppB,EAAOopB,gBAAiB,EACpBtxB,EAAK0uB,kBAAiBxmB,EAAOymB,eAAgB,IAE9CzmB,EAAOopB,iBACdppB,EAAOopB,gBAAiB,GAGxBppB,EAAOymB,eAAe3uB,EAAKwxB,sBAC1BtpB,EAAOopB,gBAAgBtxB,EAAKyxB,qBACrC,EAEA,YAAAC,CAAa1xB,GACT,MAAMkI,EAASlI,EAAKuuB,SAChBrmB,EAAOypB,eAAe3xB,EAAK4xB,sBAC1B1pB,EAAOopB,gBAAgBtxB,EAAK6xB,qBACrC,EAEA,qBAAAC,CAAsB9xB,GAGlB,GAFAA,EAAK+xB,uBAED/xB,EAAK2B,SAAU,CACf,MAAM+uB,SAAEA,GAAa1wB,EACrB,IAAK,IAAIf,EAAI,EAAGC,EAAMwxB,EAASvxB,OAAQF,EAAIC,EAAKD,IAC5C6yB,GAAsBpB,EAASzxB,GAEvC,CACJ,EAEA,YAAA+yB,CAAahyB,GACT,MAAMkI,EAASlI,EAAKuuB,SAChBrmB,EAAO+pB,mBAAmBjyB,EAAKkyB,cAC/BhqB,EAAO2nB,gBAAgBiC,GAAsB9xB,GACjDA,EAAKmyB,gBACT,EAEA,eAAAC,CAAgBpyB,GAEZ,GADAgyB,GAAahyB,GACTA,EAAK2B,SAAU,CACf,MAAM+uB,SAAEA,GAAa1wB,EACrB,IAAK,IAAIf,EAAI,EAAGC,EAAMwxB,EAASvxB,OAAQF,EAAIC,EAAKD,IAC5CmzB,GAAgB1B,EAASzxB,GAEjC,CACJ,EAEA,aAAAozB,CAAcz0B,GACV,KAAOA,GAAG,CACN,IAAKA,EAAEqxB,GAAGqD,SAAU,OAAO,EAC3B10B,EAAIA,EAAEyJ,MACV,CACA,OAAO,CACX,EAEAkrB,UAAU30B,IACEA,EAAE20B,WAAa30B,EAAE40B,WAAa50B,EAAE60B,UAAY70B,EAAE80B,OAG1D,iBAAAC,CAAkB3yB,EAAa4yB,EAA8BC,EAA2BC,EAAyB/yB,EAAoBgzB,GAC5HD,IAAWA,EAAY9yB,EAAKsT,YAC7BtT,EAAKgzB,gBAAkBh4B,EAASi4B,gBAAiBL,EAAcM,iBAAiBL,EAAYC,EAAW9yB,EAAKsT,WAAYvT,EAAWgzB,GAClIH,EAAcO,iBAAiBN,EAAYC,EAAoC9yB,EAAKuuB,SAAS6E,aAAcrzB,EACpH,EAIA,SAAAszB,CAAUz1B,EAAUyG,EAAwBC,EAAI,EAAGgvB,EAAwBC,GACvE,MAAMC,EAAQl2B,EAAS+G,GAAIpG,OAAAH,OAAA,CAAA,EAAMuG,GAAM,CAAEA,IAAGC,KAC5CgvB,EAAezrB,GAAajK,EAAE61B,eAAgBD,EAAOA,GAAO,GAAS51B,EAAEyJ,QAAUb,GAAa5I,EAAEyJ,OAAOqsB,qBAAsBF,EAAOA,GAAO,GAC3IlU,GAAEqU,UAAU/1B,EAAG41B,EAAMnvB,EAAGmvB,EAAMlvB,EAAGivB,EACrC,EAEA,SAAAI,CAAU/1B,EAAUyG,EAAwBC,EAAI,EAAGivB,GAC3Cj2B,EAAS+G,KAAIC,EAAID,EAAEC,EAAGD,EAAIA,EAAEA,GAChCA,GAAKzG,EAAEyG,EACPC,GAAK1G,EAAE0G,EACH1G,EAAEg2B,QAAUh2B,EAAEg2B,OAAOrJ,OAAOsJ,YAAWxvB,EAAIjC,GAAMiC,GAAIC,EAAIlC,GAAMkC,IACnEivB,EAAa31B,EAAEk2B,QAAQ,CAAEzvB,IAAGC,KAAKivB,IAAe31B,EAAEyG,EAAIA,EAAGzG,EAAE0G,EAAIA,EACnE,EAEA,WAAAyvB,CAAYn2B,EAAU0I,EAAoBtC,EAAgBE,EAA+B8vB,EAAkBT,GACvGjU,GAAE2U,YAAYr2B,EAAGs2B,GAAat2B,EAAG0I,GAAStC,EAAQE,EAAQ8vB,EAAQT,EACtE,EAEA,WAAAU,CAAYr2B,EAAU0I,EAAoBtC,EAAgBE,EAA+BF,EAAQgwB,EAAkBT,GAC/G,MAAMhP,EAAI3mB,EAAEyD,cAOZ,GANKnE,EAASgH,KACNA,IAAQqvB,EAAarvB,GACzBA,EAASF,GAEb8B,GAAKhF,GAAQyjB,GACble,GAAavF,GAAQwF,EAAQtC,EAAQE,GACjCob,GAAE6U,gBAAgBv2B,GAClB0hB,GAAEvF,aAAanc,EAAGkD,GAAQkzB,EAAQT,OAC/B,CACH,MAAMlvB,EAAIzG,EAAEyG,EAAIvD,GAAOK,EAAIojB,EAAEpjB,EAAGmD,EAAI1G,EAAE0G,EAAIxD,GAAOM,EAAImjB,EAAEnjB,EACnDmyB,IAAeS,EAAQp2B,EAAEk2B,QAAQ,CAAEzvB,IAAGC,IAAGN,OAAQpG,EAAEoG,OAASA,EAAQE,OAAQtG,EAAEsG,OAASA,GAAUqvB,IAChG31B,EAAEyG,EAAIA,EAAGzG,EAAE0G,EAAIA,EAAG1G,EAAEw2B,YAAYpwB,EAAQE,GAAmB,IAAX8vB,GACzD,CACJ,EAEA,aAAAK,CAAcz2B,EAAU0I,EAAoBkG,EAAe+mB,GACvDjU,GAAEgV,cAAc12B,EAAGs2B,GAAat2B,EAAG0I,GAASkG,EAAO+mB,EACvD,EAEA,aAAAe,CAAc12B,EAAU0I,EAAoBkG,EAAe+mB,GACvD,MAAMhP,EAAI3mB,EAAEyD,cACZyE,GAAKhF,GAAQyjB,GACb1d,GAAc/F,GAAQwF,EAAQkG,GAC1B8S,GAAE6U,gBAAgBv2B,GAAI0hB,GAAEvF,aAAanc,EAAGkD,IAAQ,EAAOyyB,GACtD31B,EAAEgI,IAAI,CAAEvB,EAAGzG,EAAEyG,EAAIvD,GAAOK,EAAIojB,EAAEpjB,EAAGmD,EAAG1G,EAAE0G,EAAIxD,GAAOM,EAAImjB,EAAEnjB,EAAG4B,SAAUR,EAAWO,eAAenF,EAAEoF,SAAWwJ,IAAU+mB,EAC9H,EAEA,WAAAgB,CAAY32B,EAAU0I,EAAoBhB,EAAeC,EAAgByuB,EAAkBT,GACvFjU,GAAEkV,YAAY52B,EAAGs2B,GAAat2B,EAAG0I,GAAShB,EAAOC,EAAOyuB,EAAQT,EACpE,EAEA,WAAAiB,CAAY52B,EAAU0I,EAAoBhB,EAAeC,EAAgB,EAAGyuB,EAAkBT,GAC1FztB,GAAKhF,GAAQlD,EAAEyD,eACf2F,GAAYlG,GAAQwF,EAAQhB,EAAOC,GACnC+Z,GAAEvF,aAAanc,EAAGkD,GAAQkzB,EAAQT,EACtC,EAEA,cAAAkB,CAAe72B,EAAU2c,EAAwByZ,EAAkBT,GAC/DztB,GAAKhF,GAAQlD,EAAE82B,gBACfttB,GAAetG,GAAQyZ,GACnB3c,EAAEyJ,QAAQK,GAAa5G,GAAQlD,EAAEyJ,OAAOqsB,sBAC5CpU,GAAEvF,aAAanc,EAAGkD,GAAQkzB,EAAQT,EACtC,EAEA,SAAAhZ,CAAU3c,EAAU2c,EAAwByZ,EAAkBT,GAC1DztB,GAAKhF,GAAQlD,EAAE61B,gBACfrsB,GAAetG,GAAQyZ,GACvB+E,GAAEvF,aAAanc,EAAGkD,GAAQkzB,EAAQT,EACtC,EAEA,YAAAxZ,CAAanc,EAAU2c,EAAwByZ,EAAkBT,GAC7D,MAAM30B,EAAOhB,EAAEqxB,GAAI0F,EAAc/1B,EAAK0H,QAAUgZ,GAAEsV,eAAeh3B,EAAGgB,EAAK0H,QACnE4B,EAASK,GAAUgS,EAAWoa,EAAa/1B,EAAKuJ,QAAUmX,GAAEsV,eAAeh3B,EAAGgB,EAAKuJ,SAOzF,GALImX,GAAEuV,UAAUj3B,KACZsK,EAAO7D,GAAKzF,EAAK8Q,QACjBxH,EAAO5D,GAAK1F,EAAK+Q,SAGjBqkB,EAAQ,CACR,MAAMhwB,EAASkE,EAAOlE,OAASpG,EAAEoG,OAAQE,EAASgE,EAAOhE,OAAStG,EAAEsG,OAGpE,UAFOgE,EAAOlE,cAAekE,EAAOhE,OAEhCywB,EAAa,CACb9lB,GAAajL,MAAMhG,EAAE6yB,UAAWluB,KAAKiB,IAAIQ,GAASzB,KAAKiB,IAAIU,IAC3D,MAAM4wB,EAAexV,GAAEsV,eAAeh3B,EAAGgB,EAAK0H,QAC9CuC,EAAYS,KAAKpB,EAAQysB,EAAYtwB,EAAIywB,EAAazwB,EAAGswB,EAAYrwB,EAAIwwB,EAAaxwB,EAC1F,CAEA1G,EAAEgI,IAAIsC,GACNtK,EAAEw2B,YAAYpwB,EAAQE,GAAQ,EAElC,MAAOtG,EAAEgI,IAAIsC,EAAQqrB,EACzB,EAEA,gBAAAwB,CAAiBn3B,EAAUo3B,GACvB,MAAM3V,E3CrFwC,CAAEte,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,G2CsF3EsC,EAAgB,MAATsxB,EAAe,GAAI,EAEhC,OADA3uB,GAAagZ,EAAGC,GAAE2V,eAAer3B,EAAG,aAAgB8F,EAAM,EAAIA,GACvD2b,CACX,EAEA4V,eAAc,CAACr3B,EAAU0I,IACduC,EAAYgB,cAAcyV,GAAEsV,eAAeh3B,EAAG0I,GAAS1I,EAAE61B,gBAGpE,cAAAmB,CAAeh3B,EAAU0I,GACrB,MAAM4uB,EAAc,CAAA,EAEpB,OADAtnB,GAAaC,QAAQvH,EAAQ1I,EAAE6yB,UAAWyE,GACnCA,CACX,EAEAC,iBAAgB,CAACv3B,EAAUw3B,EAAiBxrB,KACxC9D,GAAKhF,GAAQlD,EAAE82B,gBACfhtB,GAAa5G,GAAQs0B,EAAS1B,sBACvB9pB,EAAO9I,GAAQ7C,OAAAH,OAAA,CAAA,EAAMgD,KAGhC,IAAAu0B,CAAKz3B,EAAUyJ,EAAe+J,EAAgB4iB,GAC1Cp2B,EAAEmc,aAAauF,GAAE6V,iBAAiBv3B,EAAGyJ,GAAQ,GAAO2sB,GACpD3sB,EAAOqJ,IAAI9S,EAAGwT,EAClB,EAEA+iB,gBAAgBv2B,GACJA,EAAE0I,QAAU1I,EAAEuK,QAAUmX,GAAEuV,UAAUj3B,GAGhDi3B,UAAUj3B,GACEA,EAAE8R,SAAW9R,EAAE+R,QAG3B,SAAA2lB,CAAUtpB,EAAU3E,GAChB,IAAKA,EAAQ,OAAO,EACpB,KAAO2E,GAAG,CACN,GAAI3E,IAAW2E,EAAG,OAAO,EACzBA,EAAIA,EAAE3E,MACV,CACJ,EAIA,WAAAkuB,CAAY33B,EAAU0L,EAAkBksB,EAAQ,IAC5C,GAAKlsB,EAAKjF,GAAMiF,EAAKhF,EACrB,GAAI/B,KAAKiB,IAAI8F,EAAKjF,GAAK,GAAK9B,KAAKiB,IAAI8F,EAAKhF,GAAK,EAC3C1G,EAAE0L,KAAKA,OACJ,CACH,MAAMjF,EAAIiF,EAAKjF,EAAImxB,EAAOlxB,EAAIgF,EAAKhF,EAAIkxB,EACvClsB,EAAKjF,GAAKA,EAAGiF,EAAKhF,GAAKA,EACvB1G,EAAE0L,KAAKjF,EAAGC,GACVtJ,EAASy6B,cAAc,IAAMnW,GAAEiW,YAAY33B,EAAG0L,EAAMksB,GACxD,CACJ,GAIElW,GAAI6R,IACJC,gBAAEA,GAAeG,aAAEA,GAAYO,sBAAEA,GAAqBM,gBAAEA,GAAeJ,aAAEA,IAAiB1S,GAEhG,SAAS4U,GAAat2B,EAAU83B,GAE5B,OADA93B,EAAE+3B,eACK/3B,EAAEyJ,OAASwB,EAAYc,cAAc+rB,EAAY93B,EAAEyJ,OAAOqsB,sBAAwBgC,CAC7F,CC5PO,MAAME,GAAmB,CAE5BC,YAAYte,GACDA,EAAOue,QAGlBC,eAAexe,GACJA,EAAO0X,GAAGnvB,QAAgC,IAAtByX,EAAO0X,GAAG+G,QAAgB,KAAQze,EAAO0e,SAAW1e,EAAOgX,SAG1F2H,kBAAkB3e,GACPA,EAAO0X,GAAGnvB,QAAgC,IAAtByX,EAAO0X,GAAG+G,QAAgB,KAAOze,EAAOgX,SAAS2H,kBAGhFC,kBAAkB5e,GACPA,EAAO0X,GAAGnvB,QAAgC,IAAtByX,EAAO0X,GAAG+G,QAAgB,KAAOze,EAAOgX,SAAS4H,kBAGhFC,mBAAkB,CAAC7e,EAAenG,IACvBme,GAAUhY,EAAQnG,IAAUmG,EAAO8e,iBAG9CC,sBAAqB,CAAC/e,EAAenG,IAC1Bme,GAAUhY,EAAQnG,IAAUmG,EAAOgX,SAAS2H,kBAGvDK,sBAAqB,CAAChf,EAAenG,IAC1Bme,GAAUhY,EAAQnG,IAAUmG,EAAOgX,SAAS4H,kBAGvDK,oBAAmB,CAACrvB,EAActG,OAC1BA,EAAQiO,QAAWjO,EAAQiO,OAAO2C,IAAItK,EAAM2uB,QAASj1B,EAAQC,aAC7DD,EAAQ41B,aAAc51B,EAAQ41B,WAAW16B,SAASoL,EAAM2uB,QAASj1B,EAAQC,UAOrF,IAAI41B,GAEJ,SAASnH,GAAUhY,EAAenG,GAG9B,OAFKA,IAAOslB,GAAW,GACnBnf,EAAO0X,GAAG0H,OAAMD,GAAW,GACxBA,GAAW,EAAI,MAAQA,KAAaA,IAAW,IAAK,EAC/D,CC5CA,MAAMhF,aAAEA,IAAiBP,GAEZyF,GAAe,CAExBC,KAAI,CAAC91B,EAAUC,IACHD,EAAEkuB,GAAG6H,SAAW91B,EAAEiuB,GAAG6H,OAAW/1B,EAAEg2B,aAAe/1B,EAAE+1B,aAAiBh2B,EAAEkuB,GAAG6H,OAAS91B,EAAEiuB,GAAG6H,OAKnG,kBAAAE,CAAmBC,EAAeC,GAG9B,GAFAD,EAAOF,aAAe,EAElBE,EAAOhI,GAAGkI,oBAAqB,CAC/B,MAAMzG,SAAEA,GAAauG,EACrB,IAAK,IAAIh4B,EAAI,EAAGC,EAAMwxB,EAASvxB,OAAQF,EAAIC,EAAKD,KAC5Cg4B,EAASvG,EAASzxB,IACP0C,WACPs1B,EAAOF,aAAe,EACtBG,EAASxmB,IAAIumB,GACbD,GAAmBC,EAAQC,GAGvC,CACJ,EAEA,aAAAE,CAAcp3B,EAAak3B,GACvB,MAAMh5B,KAAEA,GAAUg5B,EAClB,GAAIh5B,EACA,KAAO8B,EAAKqH,QACJ1K,EAAYuB,EAAK8B,EAAKqH,OAAOgwB,WAC7BH,EAASxmB,IAAI1Q,EAAKqH,QAClBrH,EAAOA,EAAKqH,YAMpB,KAAOrH,EAAKqH,QACR6vB,EAASxmB,IAAI1Q,EAAKqH,QAClBrH,EAAOA,EAAKqH,MAGxB,EAEA,kBAAAiwB,CAAmBL,EAAeM,GAC9B,IAAIriB,EAAQqiB,EAASp4B,OACrB,MAAMuxB,SAAEA,GAAauG,EACrB,IAAK,IAAIh4B,EAAI,EAAGC,EAAMwxB,EAASvxB,OAAQF,EAAIC,EAAKD,IACxCyxB,EAASzxB,GAAG0C,UACZ41B,EAAStrB,KAAKykB,EAASzxB,IAK/B,IAAK,IAAIA,EAAIiW,EAAOhW,EAAMq4B,EAASp4B,OAAQF,EAAIC,EAAKD,IAChDq4B,GAAmBC,EAASt4B,GAAIs4B,EAExC,EAEA,YAAA7F,CAAauF,EAAej5B,GACxB,MAAMw5B,EAAuB,CAACP,GAC9BK,GAAmBL,EAAQO,GAC3BC,GAA0BD,EAAax5B,EAC3C,EAEA,yBAAAy5B,CAA0BD,EAAsBx5B,GAC5C,IAAIi5B,EAAevG,EACnB,IAAK,IAAIzxB,EAAIu4B,EAAYr4B,OAAS,EAAGF,GAAI,EAAIA,IAAK,CAC9Cg4B,EAASO,EAAYv4B,GACrByxB,EAAWuG,EAAOvG,SAClB,IAAK,IAAIrK,EAAI,EAAGnnB,EAAMwxB,EAASvxB,OAAQknB,EAAInnB,EAAKmnB,IAC5CqL,GAAahB,EAASrK,IAEtBroB,GAAWA,IAAYi5B,GAC3BvF,GAAauF,EACjB,CACJ,IAGED,mBAAEA,GAAkBM,mBAAEA,GAAkBG,0BAAEA,IAA8Bb,GClFjEc,GAAa,CACtB,GAAAlO,CAAImO,GACA,GAAIA,GAAQA,EAAKx4B,OAAQ,CACrB,MAAMD,EAAMy4B,EAAKx4B,OACjB,IAAK,IAAIF,EAAI,EAAGA,EAAIC,EAAKD,IAAO04B,EAAK14B,KACrC04B,EAAKx4B,SAAWD,EAAMy4B,EAAKx4B,OAAS,EAAIw4B,EAAKC,OAAO,EAAG14B,EAC3D,CACJ,qBCFIi2B,GAAgBzD,aAAEA,IAAiBP,IACrClnB,UAAEA,GAASoH,UAAEA,QAAWvL,IAAS+I,GACjCgpB,GAAe,sBACfC,GAAe,sBAAuBC,GAAW,kBAAmBC,GAAc,2BAE3EC,GAQT,iBAAWC,GAA+B,OAAOx4B,KAAKy4B,gBAAkBz4B,KAAK+wB,SAAU,CACvF,iBAAWyH,CAAcppB,GAAuBpP,KAAKy4B,eAAiBrpB,CAAO,CAE7E,gBAAWspB,GAA8B,OAAO14B,KAAK24B,eAAiB34B,KAAK+wB,SAAU,CACrF,gBAAW2C,GAA8B,OAAO1zB,KAAK44B,eAAiB54B,KAAK+wB,SAAU,CACrF,gBAAW2C,CAAatkB,GAAuBpP,KAAK44B,cAAgBxpB,CAAO,CAQ3E,sBAAWypB,GAA4J,OAAxHtuB,GAAUvK,KAAKw4B,cAAex4B,KAAKM,KAAKqB,cAAe3B,KAAKm4B,MAAkBn4B,KAAKm4B,IAAgB,CAAA,IAA4Bn4B,KAAKm4B,GAAc,CAEjM,qBAAW3B,GAAmC,OAAOx2B,KAAK84B,oBAAsB94B,IAAK,CACrF,qBAAWy2B,GAAmC,OAAOz2B,KAAK+4B,oBAAsB/4B,IAAK,CAQrF,sBAAWg5B,GAAsJ,OAAlHzuB,GAAUvK,KAAKw4B,cAAex4B,KAAKM,KAAK81B,QAASp2B,KAAKo4B,MAAkBp4B,KAAKo4B,IAAgB,CAAA,IAA4Bp4B,KAAKo4B,GAAc,CAC3L,kBAAWa,GAAsI,OAAtG1uB,GAAUvK,KAAK+wB,UAAW/wB,KAAKM,KAAK81B,QAASp2B,KAAKq4B,MAAcr4B,KAAKq4B,IAAY,CAAA,IAA4Br4B,KAAKq4B,GAAU,CACvK,qBAAWa,GAAkJ,OAA/G3uB,GAAUvK,KAAK04B,aAAc14B,KAAKM,KAAK81B,QAASp2B,KAAKs4B,MAAiBt4B,KAAKs4B,IAAe,CAAA,IAA4Bt4B,KAAKs4B,GAAa,CA8CtL,KAAWj3B,GAAM,OAAO,CAAE,CAC1B,KAAWC,GAAM,OAAO,CAAE,CAC1B,KAAWC,GAAM,OAAO,CAAE,CAC1B,KAAWC,GAAM,OAAO,CAAE,CAC1B,KAAWC,GAAM,OAAOzB,KAAKM,KAAKivB,GAAG5qB,CAAE,CACvC,KAAWjD,GAAM,OAAO1B,KAAKM,KAAKivB,GAAG3qB,CAAE,CACvC,KAAWD,GAAM,OAAO3E,KAAKyB,EAAIzB,KAAK+wB,UAAUpsB,CAAE,CAClD,KAAWC,GAAM,OAAO5E,KAAK0B,EAAI1B,KAAK+wB,UAAUnsB,CAAE,CAClD,SAAWL,GAAU,OAAOvE,KAAK+wB,UAAUxsB,KAAM,CACjD,UAAWE,GAAW,OAAOzE,KAAK+wB,UAAUtsB,MAAO,CAGnD,WAAA9F,CAAY2B,GACRN,KAAKM,KAAOA,EACRN,KAAKM,KAAKi2B,UAASv2B,KAAK+4B,mBAAqB/4B,KAAK84B,mBAAqB94B,KAAKM,KAAKi2B,SACjFj2B,EAAK81B,UACLp2B,KAAK+wB,UAAY,CAAEpsB,EAAG,EAAGC,EAAG,EAAGL,MAAO,EAAGE,OAAQ,GACjDzE,KAAK+uB,YACL/uB,KAAKkvB,eAEb,CAEO,WAAAiK,GACH,MAAMrF,EAAQ9zB,KAAKM,KAAKi2B,QAAU,CAAEl1B,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGiD,EAAG,EAAGC,EAAG,EAAGL,MAAO,EAAGE,OAAQ,GACjGzE,KAAK84B,qBAAoB94B,KAAK84B,mBAAqBhF,GACnD9zB,KAAK+4B,qBAAoB/4B,KAAK+4B,mBAAqBjF,EAC5D,CAEO,MAAAsF,GACH,MAAM94B,KAAEA,GAASN,MAAMk0B,OAAEA,GAAW5zB,EACpC,GAAIA,EAAK+4B,MAAO,OAAOrH,GAAa1xB,GACpC,GAAI4zB,EACIA,EAAOoF,MAAOpF,EAAOqF,QAAQC,SAAWtF,EAAOuF,SAASjxB,SACvD0rB,EAAO1e,YACT,CACH,IAAIkkB,EAAOp5B,EACX,KAAOo5B,EAAK/xB,SAAW+xB,EAAK/xB,OAAOusB,QAAUwF,EAAOA,EAAK/xB,OACzD,MAAM9D,EAAI61B,EACV,GAAI71B,EAAE81B,gBAAiB,OACvB91B,EAAE81B,iBAAkB,EACpBr+B,EAASkN,OAAO3E,UACTA,EAAE81B,eACb,CACJ,CAEO,YAAAjf,CAAagb,EAAkC,SAClD11B,KAAKo5B,SACL,MAAM94B,KAAEA,GAASN,KACjB,OAAQ01B,GACJ,IAAK,QACD,OAAOp1B,EAAK81B,QAChB,IAAK,QACD,OAAO91B,EAAKqB,cAChB,IAAK,QACD,OAAOmE,EAAaC,cACxB,IAAK,OACD2vB,EAAWp1B,EAAKs5B,UACpB,QACI,OAAOnE,GAAiBn1B,EAAMo1B,GAE1C,CAEO,SAAAmE,CAAU5rB,EAAoBynB,EAAkC,SAEnE,OADA11B,KAAKo5B,SACG1D,GACJ,IAAK,QACD,OAAO11B,KAAK85B,eAAe7rB,GAC/B,IAAK,QACD,OAAOjO,KAAK+5B,eAAe9rB,GAC/B,IAAK,QACD,OAAOjO,KAAKg6B,eAAe/rB,GAC/B,IAAK,OACDynB,EAAW11B,KAAKM,KAAKs5B,UACzB,QACI,OAAO,IAAItnB,GAAOtS,KAAKg6B,eAAe/rB,IAAO1D,UAAUvK,KAAK0a,aAAagb,IAErF,CAEO,cAAAsE,CAAe/rB,EAAoB,OACtC,OAAQA,GACJ,IAAK,SACD,OAAOjO,KAAK0zB,aAChB,IAAK,UACD,GAAI1zB,KAAKw4B,cAAe,OAAOx4B,KAAKw4B,cACxC,IAAK,MACD,OAAOx4B,KAAK+wB,UAChB,IAAK,SACD,OAAO/wB,KAAK04B,aAExB,CAEO,cAAAqB,CAAe9rB,EAAoB,OACtC,OAAQA,GACJ,IAAK,SACD,OAAOjO,KAAKy2B,kBAChB,IAAK,SACD,OAAOz2B,KAAKw2B,kBAChB,IAAK,UACD,GAAIx2B,KAAKw4B,cAAe,OAAOx4B,KAAK64B,mBACxC,IAAK,MACD,OAAO74B,KAAKM,KAAKq2B,iBAE7B,CAEO,cAAAmD,CAAe7rB,EAAoB,OACtC,OAAQA,GACJ,IAAK,SACD,OAAOjO,KAAKM,KAAK81B,QACrB,IAAK,SACD,OAAOp2B,KAAKk5B,kBAChB,IAAK,UACD,GAAIl5B,KAAKw4B,cAAe,OAAOx4B,KAAKg5B,mBACxC,IAAK,MACD,OAAOh5B,KAAKi5B,eAExB,CAEO,eAAAgB,CAAgBhsB,EAAoBynB,EAAkC,QAASwE,GAClF,MAAM55B,KAAEA,GAASN,KACjB,IAAIyJ,EAAmBrI,EAAqB+4B,EAAiC/qB,EAAsBpP,KAAKg6B,eAAe/rB,GAEvH,OAAQynB,GACJ,IAAK,QACDjsB,EAAQnJ,EAAK85B,cAAchrB,GAC3BhO,EAASd,EAAK81B,QACd,MACJ,IAAK,QACD,MAAM9xB,OAAEA,EAAME,OAAEA,EAAMlB,SAAEA,EAAQsC,MAAEA,EAAKC,MAAEA,GAAUvF,EAAKivB,GACxD4K,EAAe,CAAE71B,SAAQE,SAAQlB,WAAUsC,QAAOC,SAClD4D,EAAQnJ,EAAK+5B,qBAAqBjrB,GAClC,MACJ,IAAK,QACD3F,EAAQ2F,EACRhO,EAAS0E,EAAaC,cACtB,MACJ,IAAK,OACD2vB,EAAWp1B,EAAKs5B,UACpB,QACInwB,EAAQnJ,EAAK85B,cAAchrB,EAAQsmB,GACnCt0B,EAASq0B,GAAiBn1B,EAAMo1B,GAAU,GAOlD,GAJKyE,IAAcA,EAAer0B,EAAa+C,UAAUzH,IACzDgF,GAAK+zB,EAAc/qB,GACnBjG,EAAY/C,KAAK+zB,EAAc1wB,GAE3BywB,EAAS,CACT,MAAM51B,OAAEA,EAAME,OAAEA,GAAW21B,EACrBG,EAAUz3B,KAAKiB,IAAIQ,GACnBi2B,EAAU13B,KAAKiB,IAAIU,GACT,IAAZ81B,GAA6B,IAAZC,IACjBJ,EAAa71B,QAAUg2B,EACvBH,EAAa31B,QAAU+1B,EACvBJ,EAAa51B,OAAS+1B,EACtBH,EAAa11B,QAAU81B,EAE/B,CAEA,OAAOJ,CACX,CAEO,eAAAK,CAAgBvsB,EAAoBynB,EAAkC,SACzE,MAAMp1B,KAAEA,GAASN,KACXqM,EAASsF,GAAU3R,KAAKg6B,eAAe/rB,IAC7C,IAAIwsB,EACJ,OAAQ/E,GACJ,IAAK,QACD+E,EAAe,KACf,MACJ,IAAK,QACDA,EAAen6B,EAAKqH,OACpB,MACJ,IAAK,QACD,MACJ,IAAK,OACD+tB,EAAWp1B,EAAKs5B,UACpB,QACIa,EAAe/E,EAGvB,OADKz4B,EAAYw9B,IAAepuB,EAAO5N,QAAQgL,GAASnJ,EAAKo6B,aAAajxB,EAAO,MAAM,EAAOgxB,IACvFpuB,CACX,CAIO,aAAAsuB,GACH,MAAMh2B,EAAEA,EAACC,EAAEA,EAACL,MAAEA,EAAKE,OAAEA,GAAWzE,KAAK+wB,UACrC/wB,KAAKy4B,eAAiB,CAAE9zB,IAAGC,IAAGL,QAAOE,SACzC,CAEO,YAAAm2B,GACH,MAAMj2B,EAAEA,EAACC,EAAEA,EAACL,MAAEA,EAAKE,OAAEA,GAAWzE,KAAK04B,aACrC14B,KAAK24B,cAAgB,CAAEh0B,IAAGC,IAAGL,QAAOE,UACpCzE,KAAK84B,mBAAqB,CAAEn0B,IAAGC,IAAGL,QAAOE,UACpCzE,KAAK66B,cAAc76B,KAAK86B,oBACjC,CACO,YAAAC,GACH,MAAMp2B,EAAEA,EAACC,EAAEA,EAACL,MAAEA,EAAKE,OAAEA,GAAWzE,KAAK0zB,aACrC1zB,KAAK44B,cAAgB,CAAEj0B,IAAGC,IAAGL,QAAOE,UACpCzE,KAAK+4B,mBAAqB,CAAEp0B,IAAGC,IAAGL,QAAOE,SAC7C,CAEO,mBAAAu2B,GACHh7B,KAAKy4B,oBAAiBt7B,CAC1B,CAEO,kBAAA89B,GACH,MAAMC,EAAOl7B,KAAK0zB,eAAiB1zB,KAAK04B,aACxC14B,KAAK24B,cAAgB34B,KAAK+wB,UAC1B/wB,KAAK84B,mBAAqB94B,KAAKM,KAAKq2B,iBAChCuE,GAAMl7B,KAAK86B,oBACnB,CACO,kBAAAA,GACH96B,KAAK44B,cAAgB54B,KAAK24B,cAC1B34B,KAAK+4B,mBAAqB/4B,KAAK84B,kBACnC,CAKO,SAAA/J,GACH/uB,KAAK8uB,YAAa,EAClB9uB,KAAKm7B,gBAAmBn7B,KAAKiyB,gBAAkBjyB,KAAKiyB,eAAgB,GAASjyB,KAAKo7B,iBAClFp7B,KAAKq7B,kBAAmB,CAC5B,CAEO,cAAAD,GACHp7B,KAAKm7B,iBAAkB,EACvBn7B,KAAKiyB,eAAgB,CACzB,CAEO,YAAAvC,GACH1vB,KAAKyvB,eAAgB,EACrBzvB,KAAKs7B,eAAiBt7B,KAAKs7B,aAAe,GAC1Ct7B,KAAKiyB,eAAgB,EACrBjyB,KAAKq7B,kBAAmB,CAC5B,CAEO,YAAAE,GACHv7B,KAAKw7B,eAAgB,EACrBx7B,KAAK66B,eAAiB76B,KAAK66B,aAAe,GAC1C76B,KAAKiyB,eAAgB,CACzB,CAKO,WAAAwJ,GACHz7B,KAAK07B,cAAe,EACpB17B,KAAK27B,wBACT,CAEO,cAAAC,GACH57B,KAAK67B,iBAAkB,EACvB77B,KAAK87B,gBAAiB,EACtB97B,KAAK27B,wBACT,CAEU,sBAAAA,GACN37B,KAAK+7B,uBAAwB,EAC7B/7B,KAAKkvB,eACAlvB,KAAKM,KAAKi2B,SAASv2B,KAAKm5B,aACjC,CAEO,YAAAjK,GACHlvB,KAAKivB,eAAgB,EACrBjvB,KAAKm7B,gBAAmBn7B,KAAKiyB,gBAAkBjyB,KAAKiyB,eAAgB,GAASjyB,KAAKo7B,gBACtF,CAKO,aAAAY,GACHh8B,KAAKi8B,gBAAiB,CAC1B,CAEO,aAAA7L,GACHpwB,KAAKmwB,gBAAiB,EACtBnwB,KAAKi8B,gBAAkBj8B,KAAKg8B,eAChC,CAEO,kBAAAE,GACEl8B,KAAKm8B,sBACNn8B,KAAKm8B,oBAAsBn8B,KAAKo8B,oBAAqB,EACrDp8B,KAAKM,KAAK0vB,YAAY,WAE9B,CAEO,OAAAvtB,GAAkB,QCxXhB2U,GAeT,WAAAzY,CAAYsP,EAAc4J,GAPjB7X,KAAAq8B,SAAmB,EAQxBr8B,KAAKiO,KAAOA,EACR4J,IAAQ7X,KAAK6X,OAASA,EAC9B,CAEO,WAAAykB,GACHt8B,KAAKu8B,eAAgB,EACjBv8B,KAAK4G,QAAQtL,EAASkhC,MAAMF,YAAYt8B,KAAK4G,OACrD,CAEO,OAAA61B,GACHz8B,KAAK08B,WAAY,EACjB18B,KAAK28B,QAAS,EACV38B,KAAK4G,QAAQtL,EAASkhC,MAAMC,QAAQz8B,KAAK4G,OACjD,CAEO,IAAA2kB,GACHvrB,KAAK28B,QAAS,EACV38B,KAAK4G,QAAQtL,EAASkhC,MAAMjR,KAAKvrB,KAAK4G,OAC9C,ECjCE,MAAOg2B,WAAmBxlB,GAa5B,WAAAzY,CAAYsP,EAAcxG,EAAeE,GACrCk1B,MAAM5uB,EAAMxG,GACZzH,KAAK2H,OAASA,EACd3H,KAAKyH,MAAQA,CACjB,EAfOm1B,GAAAE,IAAM,YACNF,GAAAG,OAAS,eAETH,GAAAI,QAAU,UACVJ,GAAAK,QAAU,UACVL,GAAAM,UAAY,YACZN,GAAAO,QAAU,UCRrB,MAAMC,GAAS,kBAET,MAAOC,WAAsBjmB,GAW/B,WAAAzY,CAAYsP,EAAc4J,EAAsBlY,EAAkBuwB,EAAmBoN,GACjFT,MAAM5uB,EAAM4J,GACZ7X,KAAKL,SAAWA,EAChBK,KAAKkwB,SAAWA,EAChBlwB,KAAKs9B,SAAWA,CACpB,EAdOD,GAAAE,OAAS,kBACTF,GAAAG,cAAgB,yBAEhBH,GAAAD,OAASA,GAgBb,MAAMK,GAAoC,CAC7C7tB,QAASwtB,GACTvtB,QAASutB,IC1BP,MAAOM,WAAmBtmB,GAY5B,WAAAzY,CAAYsP,EAAc/O,GACtB29B,MAAM5uB,GACN1P,OAAOH,OAAO4B,KAAMd,EACxB,EAbOw+B,GAAAC,KAAO,aACPD,GAAAE,OAAS,eACTF,GAAAG,MAAQ,cCHb,MAAOC,WAAoB1mB,GAW7B,eAAO2mB,CAASz9B,EAAoB2N,EAAc+vB,GACjC,OAATA,EACA/vB,IAASgwB,GAAQ39B,EAAK49B,iBAAkB,EAAO59B,EAAK69B,iBAAkB,GAEtE79B,EAAK69B,gBAAkB79B,EAAK89B,SAASC,KAAW/9B,EAAK89B,SAASE,KAAUh+B,EAAK89B,SAASG,IACtFj+B,EAAK49B,gBAAkB59B,EAAK89B,SAASH,IAE7C,CAEA,gBAAOO,CAAUl+B,GACb,GAAIA,EAAKm+B,cAAe,CACpB,MAAMC,QAAEA,GAAYp+B,EAAKuuB,SACT,UAAZ6P,IACAp+B,EAAKq+B,KAAKN,GAAQ/9B,GACF,UAAZo+B,GAAqBp+B,EAAKq+B,KAAKL,GAAOh+B,IAE9CA,EAAKq+B,KAAKJ,GAAOj+B,EACrB,CACJ,CAEA,gBAAOs+B,CAAUt+B,GACTA,EAAKm+B,eAAen+B,EAAKq+B,KAAKV,GAAOj+B,KAC7C,EA/BO89B,GAAAO,OAAS,gBAETP,GAAAQ,MAAQ,eAERR,GAAAS,MAAQ,eAERT,GAAAG,MAAQ,eA6BnB,MAAMI,OAAEA,GAAMC,MAAEA,GAAKC,MAAEA,GAAKN,MAAEA,IAAUH,GAG3Be,GAA0B,CAAA,EAEvC,CAACR,GAAQC,GAAOC,GAAON,IAAOx/B,QAAQC,GAAOmgC,GAAengC,GAAO,GCzC7D,MAAOogC,WAAoB1nB,GAU7B,UAAW2nB,GACP,IAAK/+B,KAAKmnB,IAAK,OAAO,EACtB,MAAM5iB,MAAEA,EAAKE,OAAEA,GAAWzE,KAAKmnB,IAC/B,OAAOnnB,KAAKuE,OAASA,GAASvE,KAAKyE,QAAUA,CACjD,CAEA,WAAWu6B,GACP,OAAQh/B,KAAK++B,MACjB,CAEA,kBAAWE,GACP,OAAKj/B,KAAKmnB,KACHnnB,KAAKyG,aAAezG,KAAKmnB,IAAI1gB,UACxC,CAIA,WAAA9H,CAAYwF,EAAgC+6B,GACpCthC,EAASuG,IACT04B,MAAMiC,GAAYT,QAClB9/B,OAAOH,OAAO4B,KAAMmE,IAEpB04B,MAAM14B,GAEVnE,KAAKmnB,IAAM+X,CACf,CAEA,iBAAOC,CAAW7+B,GACd,OAAON,KAAKo/B,eAAiBniC,EAAY+C,KAAKo/B,aAAa9+B,EAAKq3B,SACpE,EArCOmH,GAAAT,OAAiB,SCHtB,MAAOgB,WAAmBjoB,GAO5B,WAAAzY,CAAYsP,EAAc/O,GACtB29B,MAAM5uB,GACNjO,KAAKd,KAAOA,CAChB,EAROmgC,GAAAC,QAAU,gBACVD,GAAAE,KAAO,aCHZ,MAAOC,WAAoBpoB,GAiB7B,WAAAzY,CAAYsP,EAAc/O,EAA2BugC,GACjD5C,MAAM5uB,GACF/O,IACAc,KAAKd,KAAOA,EACZc,KAAKy/B,MAAQA,EAGrB,EAtBOD,GAAAF,QAAU,iBAEVE,GAAAE,MAAQ,eAERF,GAAAG,OAAS,gBACTH,GAAAI,OAAS,SACTJ,GAAAK,MAAQ,eAERL,GAAAM,MAAQ,eAERN,GAAAO,IAAM,aCZX,MAAOC,WAAoB5oB,GAuB7B,WAAAzY,CAAYsP,EAAcwxB,EAAgBrwB,EAAkBjO,GACxD07B,MAAM5uB,GACFwxB,IAAOz/B,KAAKy/B,MAAQA,GACpBrwB,IACApP,KAAK0zB,aAAetkB,EACpBpP,KAAKigC,cAAgB9+B,EAE7B,EA5BO6+B,GAAAV,QAAU,iBAEVU,GAAAE,YAAc,qBACdF,GAAAG,UAAY,mBAEZH,GAAAN,MAAQ,eAERM,GAAAL,OAAS,gBACTK,GAAAI,OAAS,SACTJ,GAAAH,MAAQ,eAERG,GAAAF,MAAQ,eAERE,GAAAD,IAAM,aAENC,GAAAK,KAAO,cCjBZ,MAAOC,WAAoBlpB,IAEtBkpB,GAAAZ,MAAQ,eAERY,GAAAC,aAAe,sBACfD,GAAAE,MAAQ,eACRF,GAAAG,YAAc,qBAEdH,GAAAI,WAAa,oBAEbJ,GAAAK,eAAiB,wBAEjBL,GAAAM,KAAO,cACPN,GAAAO,QAAU,iBAEVP,GAAAP,IAAM,aAENO,GAAAQ,YAAc,qBAGdR,GAAAS,UAAY,mBACZT,GAAAU,KAAO,cACPV,GAAAW,MAAQ,eACRX,GAAAY,OAAS,gBACTZ,GAAAa,KAAO,cAIlB,MAAMH,KAAEA,GAAIC,MAAEA,GAAKC,OAAEA,GAAMC,KAAEA,IAASb,GAEzBc,GAAqC,CAC9Cz8B,EAAGq8B,GACHp8B,EAAGo8B,GACH18B,OAAQ28B,GACRz8B,OAAQy8B,GACR39B,SAAU49B,GACVt7B,MAAOu7B,GACPt7B,MAAOs7B,ICnCLrW,GAAQ,CAAA,QAGDuW,GAaT,SAAW7E,CAAMl9B,GAAwBU,KAAKshC,GAAGhiC,EAAK,CAG/C,EAAAgiC,CAAGrzB,EAA4DszB,EAA2BpgC,GAE7F,IAAKogC,EAAU,CACX,IAAI/E,EACJ,GAAI9+B,EAAQuQ,GAAQA,EAAwBxP,QAAQuP,GAAQhO,KAAKshC,GAAGtzB,EAAK,GAAIA,EAAK,GAAIA,EAAK,UACtF,IAAK,IAAItP,KAAOuP,EAAyBvQ,EAAQ8+B,EAASvuB,EAAyBvP,IAAQsB,KAAKshC,GAAG5iC,EAAK89B,EAAM,GAAIA,EAAM,IAAMx8B,KAAKshC,GAAG5iC,EAAK89B,GAChJ,MACJ,CAEA,IAAIgF,EAAkBC,EAYlBC,EAXAvgC,IACgB,SAAZA,EACAsgC,GAAO,EACmB,kBAAZtgC,EACdqgC,EAAUrgC,GAEVqgC,EAAUrgC,EAAQqgC,QAClBC,EAAOtgC,EAAQsgC,OAKvB,MAAMniC,EAAMqiC,GAAiB3hC,KAAMwhC,GAAS,GACtCI,EAAWvkC,EAAS4Q,GAAQA,EAAKob,MAAM,KAAOpb,EAC9CD,EAAOyzB,EAAO,CAAEF,WAAUE,QAAS,CAAEF,YAE3CK,EAASnjC,QAAQwP,IACTA,IACAyzB,EAASpiC,EAAI2O,GACTyzB,GAC6D,IAAzDA,EAAOG,UAAU7zB,GAAQA,EAAKuzB,WAAaA,IAAkBG,EAAOn1B,KAAKyB,GAE7E1O,EAAI2O,GAAQ,CAACD,GAGb6wB,GAAe5wB,IAAO6vB,GAAYC,SAAS/9B,KAAMiO,EAAM,QAGvE,CAEO,GAAA6zB,CAAI7zB,EAA0BszB,EAA2BpgC,GAC5D,GAAI8M,EAAM,CAEN,MAAM2zB,EAAWvkC,EAAS4Q,GAAQA,EAAKob,MAAM,KAAOpb,EAEpD,GAAIszB,EAAU,CAEV,IAAIC,EAGAE,EAA8BhwB,EAF9BvQ,IAASqgC,EAA6B,kBAAZrgC,EAAwBA,EAAuB,SAAZA,GAA6BA,EAAQqgC,SAGtG,MAAMliC,EAAMqiC,GAAiB3hC,KAAMwhC,GAEnCI,EAASnjC,QAAQwP,IACTA,IACAyzB,EAASpiC,EAAI2O,GACTyzB,IACAhwB,EAAQgwB,EAAOG,UAAU7zB,GAAQA,EAAKuzB,WAAaA,GAC/C7vB,GAAQ,GAAIgwB,EAAOxJ,OAAOxmB,EAAO,GAChCgwB,EAAOjiC,eAAeH,EAAI2O,GAC3B4wB,GAAe5wB,IAAO6vB,GAAYC,SAAS/9B,KAAMiO,EAAM,UAK3E,KAAO,CAGH,MAAQ8zB,YAAazgC,EAAG0gC,aAAczgC,GAAMvB,KAC5C4hC,EAASnjC,QAAQwP,IACT3M,UAAUA,EAAE2M,GACZ1M,UAAUA,EAAE0M,IAGxB,CAEJ,MAEIjO,KAAK+hC,YAAc/hC,KAAKgiC,kBAAe7kC,CAI/C,CAEO,GAAA8kC,CAAIh0B,EAA0CszB,EAA2BpnB,EAAgBhZ,GAG5F,OAFKogC,EACAvhC,KAAKshC,GAAGrzB,EAAMkM,EAAOonB,EAAWA,EAASpnB,KAAKA,GAAQonB,EAAUpgC,GADtDzD,EAAQuQ,IAAUA,EAAwBxP,QAAQuP,GAAQhO,KAAKshC,GAAGtzB,EAAK,GAAIA,EAAK,GAAKA,EAAK,GAAKA,EAAK,GAAGmM,KAAKnM,EAAK,IAAMA,EAAK,GAAIA,EAAK,KAE7I,CAAEC,OAAMmY,QAASpmB,KAAauhC,WAAUpgC,UACnD,CAEO,IAAA+gC,CAAKxsB,GACR,IAAKA,EAAI,OACT,MAAMrW,EAAO3B,EAAQgY,GAAMA,EAAK,CAACA,GACjCrW,EAAKZ,QAAQuP,IACLA,IACKA,EAAKuzB,SACLvzB,EAAKoY,QAAQ0b,IAAI9zB,EAAKC,KAA2BD,EAAKuzB,SAAUvzB,EAAK7M,SADtDzD,EAAQsQ,EAAKC,OAAUD,EAAKC,KAAwBxP,QAAQwhB,GAAKjS,EAAKoY,QAAQ0b,IAAI7hB,EAAE,GAAIA,EAAE,GAAIA,EAAE,QAI5H5gB,EAAKI,OAAS,CAClB,CAEO,IAAAgiC,CAAKxzB,EAA0CszB,EAA2BY,EAAmCX,GAChH,IAAKD,EAAU,OAAO7jC,EAAQuQ,IAAUA,EAAwBxP,QAAQuP,GAAQhO,KAAKyhC,KAAKzzB,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,KACtHpQ,EAASukC,GAAgBZ,EAAWA,EAASpnB,KAAKgoB,GACjDX,EAAUW,EACfniC,KAAKshC,GAAGrzB,EAAMszB,EAAU,CAAEE,MAAM,EAAMD,WAC1C,CAEO,IAAA7C,CAAK1wB,EAAcuuB,EAA0BgF,IAC3ChF,GAAStlB,GAAaZ,IAAIrI,KAAOuuB,EAAQtlB,GAAa/Q,IAAI8H,EAAM,CAAEA,OAAM4J,OAAQ7X,KAAMomB,QAASpmB,QAEpG,MACMX,EADMsiC,GAAiB3hC,KAAMwhC,GAClBvzB,GACjB,GAAI5O,EAAM,CACN,IAAI2O,EACJ,IAAK,IAAIzO,EAAI,EAAGC,EAAMH,EAAKI,OAAQF,EAAIC,MAC/BwO,EAAO3O,EAAKE,MACZyO,EAAKuzB,SAAS/E,GACVxuB,EAAKyzB,OACLzhC,KAAK8hC,IAAI7zB,EAAMD,EAAKuzB,SAAUC,GAC9BjiC,IAAKC,KAELg9B,GAASA,EAAME,YAPiBn9B,KAUhD,CAEAS,KAAKoiC,aAAepiC,KAAKoiC,YAAYC,UAAU7F,EAAOgF,EAC1D,CAEO,SAAAa,CAAU7F,EAAegF,GAC5BhF,EAAMpW,QAAUpmB,KAChBA,KAAK2+B,KAAKnC,EAAMvuB,KAAMuuB,EAAOgF,EACjC,CAEO,QAAApD,CAASnwB,EAAcuzB,GAC1B,GAAIxhC,KAAKoiC,aAAepiC,KAAKoiC,YAAYhE,SAASnwB,EAAMuzB,GAAU,OAAO,EAEzE,MAAQO,YAAazgC,EAAG0gC,aAAczgC,GAAMvB,KACtCsiC,EAAOhhC,GAAKA,EAAE2M,GAAOs0B,EAAOhhC,GAAKA,EAAE0M,GACzC,SAAUhR,EAAYukC,GAAYc,GAAQC,EAASf,EAAUe,EAAOD,EACxE,CAEO,OAAA7/B,GACHzC,KAAKgiC,aAAehiC,KAAK+hC,YAAc/hC,KAAKoiC,YAAc,IAC9D,EAIJ,SAAST,GAAiBa,EAAuBhB,EAAmB3kC,GAChE,GAAI2kC,EAAS,CAET,MAAQQ,aAAczgC,GAAMihC,EAC5B,OAAIjhC,IAGO1E,EAAS2lC,EAAQR,aAAe,CAAA,EAAKlX,GAGpD,CAAO,CAEH,MAAQiX,YAAazgC,GAAMkhC,EAC3B,OAAIlhC,IAGOzE,EAAS2lC,EAAQT,YAAc,CAAA,EAAKjX,GAGnD,CACJ,CCjMA,MAAMwW,GAAEA,GAAEW,IAAEA,GAAGH,IAAEA,GAAGI,KAAEA,GAAIT,KAAEA,GAAI9C,KAAEA,GAAI0D,UAAEA,GAASjE,SAAEA,GAAQ37B,QAAEA,IAAY4+B,GAAQrqB,UAEpEyrB,GAAkC,CAAEnB,MAAIW,OAAKH,OAAKI,QAAMT,QAAM9C,QAAM0D,aAAWjE,YAAUsE,eAAgBjgC,ICChHwS,GAAQrC,GAAMzM,IAAI,WAEXw8B,GAAsC,CAE/C,SAAAnU,CAAU/tB,EAAc68B,EAAkB3O,GACtC,GAAI3uB,KAAK4iC,gBAAiB,CAEtB,MAAM1S,EAAWlwB,KAAKuvB,GAAGxuB,WAAWN,GAOpC,IALIkuB,GAAsBrxB,EAASggC,IAAcrgC,EAAYqgC,KACzDroB,GAAML,KAAK5U,KAAK6iC,UAAWpiC,EAAM68B,GACjCA,OAAWngC,GAGXS,EAAS0/B,IAAapN,IAAaoN,EAAU,CAI7C,GAFAt9B,KAAK8iC,cAAcriC,EAAM68B,GAErBt9B,KAAK+iC,SAAU,CACf/iC,KAAKqiC,UAAU,IAAIhF,GAAcA,GAAcG,cAAex9B,KAAMS,EAAMyvB,EAAUoN,IAEpF,MAAM0F,EAAqB5B,GAAuB3gC,GAC9CuiC,IACAhjC,KAAKqiC,UAAU,IAAI/B,GAAY0C,EAAoBhjC,OACnDA,KAAKqiC,UAAU,IAAI/B,GAAYA,GAAYS,UAAW/gC,OAE9D,CAEAA,KAAKijC,kBAAkB5F,GAAcE,OAAQ98B,EAAMyvB,EAAUoN,GAE7D,MAAM4F,EAAqBzF,GAAsBh9B,GAGjD,OAFIyiC,GAAoBljC,KAAKijC,kBAAkBC,EAAoBziC,EAAMyvB,EAAUoN,IAE5E,CACX,CACI,OAAO,CAGf,CAII,OAFAt9B,KAAK8iC,cAAcriC,EAAM68B,IAElB,CAGf,EAEA,iBAAA2F,CAAkBh1B,EAAcxN,EAAcyvB,EAAmBoN,GAC7D,MAAMd,EAAQ,IAAIa,GAAcpvB,EAAMjO,KAAMS,EAAMyvB,EAAUoN,GAC5Dt9B,KAAK+iC,UAAa/iC,KAAKo+B,SAASnwB,IAASjO,KAAKqiC,UAAU7F,GACxDx8B,KAAKk0B,OAAOmO,UAAU7F,EAC1B,EAEA,aAAAsG,CAAcriC,EAAc68B,GACxB,MAAMp+B,EAAOc,KAAKuvB,GAClBrwB,EAAKuB,GAAQ68B,EACTt9B,KAAKmjC,aAAanjC,KAAKojC,aAAa3iC,EAAM68B,GAC1Cp+B,EAAKmkC,cAAarjC,KAAKsjC,iBAAmBrmC,EAAYiC,EAAKmkC,YAAY5iC,MAAWvB,EAAKmkC,YAAY5iC,GAAQ68B,GACnH,EAGA,SAAA/O,CAAU9tB,GACN,OAAIT,KAAKmjC,YAAoBnjC,KAAKujC,aAAa9iC,GACxCT,KAAKuvB,GAAG/uB,MAAMC,EACzB,IClEE8H,UAAEA,GAASb,eAAEA,GAAcpB,eAAEA,GAAcN,aAAEA,IAAiBF,GAC9DqI,QAAEA,GAAOzI,UAAEA,IAAcwI,GAElBs1B,GAAgC,CAEzC,mBAAAzR,GAEI,MAAMpqB,OAAEA,EAAMknB,SAAEA,EAAQuH,QAAEA,EAAOqN,cAAEA,EAAalU,GAAEA,GAAOvvB,KACzD0H,GAAe1H,KAAKu2B,SAAW1H,EAAUlnB,EAAUA,EAAO87B,eAAiB97B,EAAOyuB,QAAWpwB,GAAcowB,IAAWvH,EAASkN,sBAAuBxM,GAElJkU,GAAen9B,GAAe/H,OAAOH,OAAOqlC,EAAerN,GAAU7G,EAAG3f,QAAS2f,EAAG1f,QAC5F,EAEA,mBAAAiiB,GAEI,GAAI9xB,KAAKu2B,QAAS,CAEd,MAAM/tB,EAASxI,KAAK6uB,SAAUiF,EAAQ9zB,KAAKu2B,QAASr3B,EAAOc,KAAKuvB,GAE5D/mB,EAAOuzB,wBAEFvzB,EAAOkzB,eAAiBlzB,EAAOk2B,UAAYl2B,EAAOk2B,QAAU,WAAcl2B,EAAOqzB,mBAClFtzB,GAAUurB,EAAO50B,EAAqB,KAAM,KAAMsJ,EAAOszB,gBACzDtzB,EAAOkzB,aAAelzB,EAAOqzB,qBAAkB1+B,GAKvD22B,EAAMryB,EAAIvC,EAAKyF,EAAIzF,EAAK8Q,QACxB8jB,EAAMpyB,EAAIxC,EAAK0F,EAAI1F,EAAK+Q,SAEpB/Q,EAAKuJ,QAAUvJ,EAAK0H,UACpBuH,GAAQjP,EAAKuJ,QAAUvJ,EAAK0H,OAAQ4B,EAAOuoB,UAAWrrB,IACtDY,GAAewtB,GAAQpuB,GAAUf,GAAIe,GAAUd,GAAI1F,EAAKuJ,QAGhE,CAEAzI,KAAK6uB,SAASI,mBAAgB9xB,CAElC,ICrCE00B,aAAEA,GAAYH,gBAAEA,IAAoBD,IACpCO,aAAEA,IAAiBkF,IACnB3sB,UAAEA,GAAS8E,cAAEA,QAAejJ,IAAS+I,IACrCxB,SAAEA,IAAa8a,GAERib,GAAgC,CAEzC,mBAAAvR,GAEI,MAAM3pB,EAASxI,KAAK6uB,SAEpBtkB,GAAU/B,EAAOkrB,aAAc1zB,KAAKo2B,QAASp2B,KAAKo2B,SAE9C5tB,EAAOk2B,UACgB,UAAnBl2B,EAAOk2B,SAAqB1+B,KAAK2jC,iBACjC3jC,KAAKm+B,iBAAiBL,GAAYU,UAAUx+B,MAChDwI,EAAOk2B,aAAUvhC,GAGjB6C,KAAKk+B,iBAAiBJ,GAAYc,UAAU5+B,KAEpD,EAEA,mBAAAkyB,GAEI,MAAM1pB,EAASxI,KAAK6uB,SAEhBrmB,EAAOsmB,aAEF9uB,KAAKuvB,GAAGrvB,eAAeF,KAAK4jC,eACjC5jC,KAAK6jC,qBAEL7jC,KAAK8jC,oBACLt7B,EAAOk2B,QAAU,SAIjBl2B,EAAO2yB,kBAEHn7B,KAAKu2B,SAASv2B,KAAK+jC,yBACvBv7B,EAAO2yB,qBAAkBh+B,EAErBqL,EAAO8yB,eAAc9yB,EAAOinB,eAAgB,GAC5CjnB,EAAOqyB,eAAcryB,EAAOgzB,eAAgB,GAC5Cx7B,KAAK2H,QAAQ3H,KAAK2H,OAAOknB,SAASE,aAI1CvmB,EAAOsmB,gBAAa3xB,EAGhBqL,EAAOinB,gBAEPjnB,EAAO8yB,aAAet7B,KAAKgkC,uBAEvBx7B,EAAO8yB,cAEH9yB,EAAOkwB,eAAiBlwB,EAAOuoB,WAAWvoB,EAAOoyB,eAErD56B,KAAKikC,uBACLjkC,KAAKkkC,6BAGL17B,EAAOyyB,qBAGXzyB,EAAOinB,mBAAgBtyB,GACnBqL,EAAOqyB,cAAgBryB,EAAO8yB,eAAiB9yB,EAAO27B,mBAAiB37B,EAAOgzB,eAAgB,GAE9Fx7B,KAAK2H,QAAQ3H,KAAK2H,OAAOknB,SAASa,eACtClnB,EAAOk2B,QAAU,SAIjBl2B,EAAOgzB,gBAEPhzB,EAAOqyB,aAAe76B,KAAKokC,uBAEvB57B,EAAOqyB,cAEHryB,EAAOkrB,eAAiBlrB,EAAOuoB,WAAavoB,EAAOkrB,eAAiBlrB,EAAOkwB,cAAclwB,EAAOuyB,eAEpG/6B,KAAKqkC,uBACLrkC,KAAKskC,6BAGL97B,EAAOsyB,qBAGXtyB,EAAOgzB,mBAAgBr+B,EAEnB6C,KAAK2H,QAAQ3H,KAAK2H,OAAOknB,SAAS0M,gBAG1C/yB,EAAOk2B,UAAYl2B,EAAOk2B,QAAU,SACpCl2B,EAAOypB,mBAAgB90B,CAE3B,EAEA,sBAAA4mC,GACQ/jC,KAAKukC,iBAAiBvkC,KAAKwkC,qBAC3BxkC,KAAKgvB,iBAAiBhvB,KAAKykC,qBAC/Bl6B,GAAUvK,KAAK6uB,SAASkC,UAAW/wB,KAAKu2B,QAASv2B,KAAKu2B,QAC1D,EAEA,yBAAA2N,GACI35B,GAAUvK,KAAK6uB,SAAS6J,aAAc14B,KAAK2B,cAAe3B,KAAK6uB,SAAS2H,kBAC5E,EAEA,yBAAA8N,GACI/5B,GAAUvK,KAAK6uB,SAAS6E,aAAc1zB,KAAK2B,cAAe3B,KAAK6uB,SAAS4H,kBAC5E,EAGA,iBAAAqN,CAAkBY,EAAyBC,GACvC,MAAMrjC,EAAItB,KAAK6uB,SAASkC,UAClB7xB,EAAOc,KAAKuvB,GACdrwB,EAAKe,aACL0N,GAASzO,EAAKa,KAAMuB,IAEpBA,EAAEqD,EAAI,EACNrD,EAAEsD,EAAI,EACNtD,EAAEiD,MAAQrF,EAAKqF,MACfjD,EAAEmD,OAASvF,EAAKuF,OAExB,EAGA,kBAAAggC,GACIzkC,KAAK6uB,SAASI,eAAgB,EAC1BjvB,KAAKiC,UAELjC,KAAK4kC,gBAED5kC,KAAKuvB,GAAGsV,MAEJ7kC,KAAK6uB,SAASC,YAAY9uB,KAAK8kC,qBAEnCpT,GAAgB1xB,MAChBgyB,GAAahyB,KAAMA,MAEfA,KAAKuvB,GAAGwV,YAAY/kC,KAAK8jC,mBAAkB,KAI/CpS,GAAgB1xB,MAChBgyB,GAAahyB,KAAMA,QAKvB6xB,GAAa7xB,KAErB,EAEA,mBAAAglC,GACI,MAAQzV,GAAIrwB,EAAM2vB,SAAUrmB,GAAWxI,KACvCd,EAAKqD,eAAiBiG,EAAOuoB,UAAUxsB,MACvCrF,EAAKsD,gBAAkBgG,EAAOuoB,UAAUtsB,MAC5C,EAEA,oBAAAw/B,CAAqBU,GACjB,MAAMn8B,EAASxI,KAAK6uB,SACpBxf,GAAc7G,EAAOkwB,aAAclwB,EAAOuoB,UAAWvoB,EAAO27B,gBAChE,EAEA,oBAAAE,CAAqBM,GACjB,MAAMn8B,EAASxI,KAAK6uB,SACpBrmB,EAAOqyB,aAAe,EAAIxrB,GAAc7G,EAAOkrB,aAAclrB,EAAOuoB,UAAWvoB,EAAOqyB,cAAgBz0B,GAAKoC,EAAOkrB,aAAclrB,EAAOkwB,aAC3I,GC3KSuM,GAAgC,CAEzC,QAAAC,CAAShyB,EAAuB/R,GAE5B,GAAIA,EAAQgkC,MAAO,OAAOnlC,KAAKolC,cAAclyB,EAAQ/R,GAErD,GAAInB,KAAKqlC,eAAgB,CAErB,MAAMnmC,EAAOc,KAAKuvB,GAElB,GAAIrwB,EAAKomC,SAAWnkC,EAAQokC,aAAc,OAAOpkC,EAAQqkC,QAAQx0B,IAAIhR,MAKrE,GAHAkT,EAAOW,SAAS7T,KAAK4T,WAAa5T,KAAKylC,cAActkC,IACrD+R,EAAOlR,QAAUb,EAAQukC,aAAexmC,EAAKymC,QAAUzmC,EAAK8C,QAAUb,EAAQukC,WAAaxmC,EAAK8C,QAE5FhC,KAAKuvB,GAAGltB,SAAU,CAElB,GAAoB,SAAhBnD,EAAKkB,OAAmB,OAAOJ,KAAK4lC,eAAe1yB,EAAQ/R,GAE/D,MAAM0kC,EAAa3yB,EAAO4yB,eAAc,GAAM,GAC9C9lC,KAAK+lC,OAAOF,EAAY1kC,EAAS+R,GAEjCue,GAAWwB,kBAAkBjzB,KAAMkT,EAAQ2yB,EAAY7lC,KAAK4T,WAAY1U,EAAKiB,aAAa,GAE1F0lC,EAAW1Y,QAAQntB,KAAK4T,WAE5B,MAEI5T,KAAK+lC,OAAO7yB,EAAQ/R,GAIpByR,GAAMc,YAAYd,GAAMW,WAAWvT,KAAMkT,EAAQ/R,EAEzD,CACJ,EAEA,aAAAikC,CAAclyB,EAAuB/R,GAC7BnB,KAAKqlC,iBACLnyB,EAAOW,SAAS7T,KAAK4T,WAAa5T,KAAKylC,cAActkC,IAErDnB,KAAKgmC,YAAY9yB,EAAQ/R,GAEjC,EAEA,MAAA8kC,CAAO/yB,EAAuB/R,GACtBnB,KAAKqlC,iBACLnyB,EAAOW,SAAS7T,KAAK4T,WAAa5T,KAAKylC,cAActkC,IACrDnB,KAAKkmC,iBAAiBhzB,GACtBA,EAAOizB,OAAOnmC,MAEtB,EAEA,oBAAAqyB,GACIryB,KAAKqlC,eAAiBrlC,KAAKuvB,GAAG+G,QAAWt2B,KAAK2H,OAAS3H,KAAK2H,OAAO09B,eAAiBrlC,KAAKuvB,GAAGvtB,QAAUhC,KAAKuvB,GAAGvtB,QAAW,EACrHhC,KAAK6uB,SAASsB,iBAAgBnwB,KAAK6uB,SAASsB,gBAAiB,EACrE,ICzDE2G,oBAAEA,IAAwBZ,GAEnBkQ,GAAoC,CAE7C,cAAA3T,GACI,MAAQ5D,SAAUrmB,GAAWxI,KACzBwI,EAAO2zB,sBACPn8B,KAAKqmC,uBACL79B,EAAO2zB,qBAAsB,GAGjCn8B,KAAKuvB,GAAGxtB,eACZ,EAGA,QAAAmjC,CAAShyB,EAAuB/R,GAI5B,GAFAnB,KAAK4T,WAAa5T,KAAKylC,cAActkC,GAEjCnB,KAAKqlC,eAAgB,CAErB,MAAMnmC,EAAOc,KAAKuvB,GAElB,GAAIrwB,EAAKonC,SACL,GAAIpnC,EAAKqnC,IAAKplC,EAAQukC,YAA0B,IAAbxmC,EAAKqnC,IAAe,GAAMrnC,EAAKqnC,QAC7D,IAAIrnC,EAAKomC,SAAWnkC,EAAQokC,aAAc,OAAOpkC,EAAQqkC,QAAQx0B,IAAIhR,MACjEd,EAAKymC,SAASxkC,EAAQukC,aAAevkC,EAAQukC,WAAa,EAAE,CAGzE,GAAIxmC,EAAKmD,WAAarC,KAAK4wB,aAAc,CAErC,GAAoB,SAAhB1xB,EAAKkB,OAAmB,OAAOJ,KAAK4lC,eAAe1yB,EAAQ/R,GAE/D,MAAM0kC,EAAa3yB,EAAO4yB,eAAc,GAAO,GAE/C9lC,KAAKwmC,eAAeX,EAAY1kC,GAEhC,MAAMslC,EAAWzmC,KAAK4T,WAEtBV,EAAOlR,QAAUb,EAAQukC,WAAaxmC,EAAK8C,QAAUb,EAAQukC,WAAaxmC,EAAK8C,QAC/EkR,EAAOsgB,iBAAiBqS,EAAYY,EAAUA,EAAUvnC,EAAKiB,aAAa,GAE1E0lC,EAAW1Y,QAAQsZ,EAEvB,MAEIzmC,KAAKwmC,eAAetzB,EAAQ/R,EAIpC,CAEJ,EAEA,cAAAqlC,CAAetzB,EAAuB/R,GAClC,GAAInB,KAAK8vB,UAEL9vB,KAAK0mC,aAAaxzB,EAAQ/R,OAEvB,CAEH,MAAM6vB,SAAEA,GAAahxB,KACrB,IAAK,IAAIT,EAAI,EAAGC,EAAMwxB,EAASvxB,OAAQF,EAAIC,EAAKD,IAC5Cu3B,GAAoB9F,EAASzxB,GAAI4B,IAAY6vB,EAASzxB,GAAG2lC,SAAShyB,EAAQ/R,EAGlF,CACJ,EAGA,MAAA8kC,CAAO/yB,EAAuB/R,GAC1B,GAAInB,KAAKqlC,eAAgB,CACrB,MAAMrU,SAAEA,GAAahxB,KACrB,IAAK,IAAIT,EAAI,EAAGC,EAAMwxB,EAASvxB,OAAQF,EAAIC,EAAKD,IAC5Cu3B,GAAoB9F,EAASzxB,GAAI4B,IAAY6vB,EAASzxB,GAAG0mC,OAAO/yB,EAAQ/R,EAEhF,CACJ,GCrEEwlC,GAAgB,CAAA,GAChBnqC,KAAEA,GAAIK,OAAEA,IAAWP,GACnBwK,aAAEA,GAAYqB,aAAEA,GAAYT,eAAEA,IAAmB5B,GACjDyE,UAAEA,IAAc4E,IAChB/I,KAAEA,GAAIwD,KAAEA,IAAST,GACjB8qB,UAAEA,GAASM,YAAEA,GAAWK,cAAEA,GAAaE,YAAEA,GAAWnB,UAAEA,GAASU,YAAEA,GAAWM,cAAEA,GAAaE,YAAEA,GAAWha,UAAEA,GAASka,eAAEA,GAAc1a,aAAEA,GAAYgb,iBAAEA,GAAgBE,eAAEA,GAAcE,iBAAEA,GAAgBE,KAAEA,IAASlE,GAOzMmV,QAAAA,KAAN,MAEH,OAAWhmC,GAAgB,OAAOZ,KAAK+W,KAAM,CAC7C,OAAWnW,CAAIimC,GAAkB,CAEjC,SAAW9vB,GAAkB,MAAO,MAAO,CAG3C,aAAW8rB,GAAsB,OAAO7iC,KAAKuvB,GAAG9uB,MAAQT,KAAKY,IAAMZ,KAAK23B,OAAQ,CAEhF,mBAAWtH,GAAoB,OAAOzwB,CAAS,CAC/C,qBAAWknC,GAAsB,OAAOvO,EAAW,CAKnD,mBAAWqK,GAA6B,OAAO5iC,KAAKk0B,QAAUl0B,KAAKk0B,OAAO6S,OAAQ,CAClF,iBAAWtI,GAA2B,OAAOz+B,KAAKk0B,QAAUl0B,KAAKk0B,OAAOoF,KAAM,CAE9E,YAAWyJ,GAAsB,OAAO,CAAM,CAC9C,YAAW9gC,GAAsB,OAAO,CAAM,CAC9C,gBAAW2uB,GAA0B,OAAO,CAAM,CAclD,iBAAWjvB,GAA+B,OAAO3B,KAAKu2B,SAAWv2B,KAAK6uB,QAAS,CAC/E,oBAAW8H,GAAkC,OAAO32B,KAAKu2B,SAAWv2B,KAAK6uB,QAAS,CAKlF,kBAAWmG,GAAyC,OAAOh1B,KAAK6uB,SAASnU,aAAa,QAAiC,CACvH,kBAAWqZ,GAAgC,OAAO/zB,KAAK6uB,SAASnU,aAAa,QAAS,CAGtF,wBAAWsZ,GAAoE,OAArBh0B,KAAKi2B,eAAuBj2B,KAAKyjC,eAAiBzjC,KAAKo2B,OAAQ,CAGzH,aAAWrF,GAA2B,OAAO/wB,KAAK65B,UAAU,MAAO,QAAS,CAC5E,gBAAWnG,GAA8B,OAAO1zB,KAAK65B,UAAU,SAAU,QAAS,CAClF,kBAAWZ,GAAgC,OAAOj5B,KAAK65B,UAAU,MAAO,CACxE,qBAAWX,GAAmC,OAAOl5B,KAAK65B,UAAU,SAAU,CAC9E,qBAAWmN,GAAmC,OAAOhnC,KAAK65B,UAAU,SAAU,CAG9E,gBAAWoN,GAA8C,OAArBjnC,KAAKi2B,eAAuBj2B,KAAKqlC,cAAe,CAKpF,kBAAW/R,GAA4B,OAAOtzB,KAAKo2B,QAAQ9xB,OAAS,GAAKtE,KAAKo2B,QAAQ5xB,OAAS,CAAE,CAOjG,iBAAW0iC,GAA2B,OAAOlnC,KAAK8vB,YAAc9vB,KAAKuvB,GAAG4X,WAAY,CACpF,oBAAWC,GAA8B,OAAQpnC,KAAK8vB,WAAa9vB,KAAKmC,cAAgBnC,KAAKuvB,GAAG4X,WAAY,CAC5G,kBAAWE,GAA4B,OAAOrnC,KAAK4iC,iBAAmB5iC,KAAKk0B,OAAOoT,WAAWv1B,IAAI/R,KAAKo2B,QAAS,CAE/G,eAAWtF,GAAyB,OAAO9wB,KAAKuvB,GAAGrvB,aAAoC,CAGvF,SAAWs8B,CAAMl9B,GAAwBU,KAAKshC,GAAGhiC,EAAK,CAetD,WAAAX,CAAYO,GACRc,KAAK23B,QAAU96B,GAAOL,IACtBwD,KAAKiJ,MAAM/J,GACPc,KAAK+hC,aAAa/hC,KAAKunC,gBAAgB3K,GAAWI,QAC1D,CAGO,KAAA/zB,CAAM/J,GACLc,KAAKk0B,QAAQl0B,KAAKk0B,OAAOsT,YAAYxnC,KAAKo2B,SAE1B,IAAhBl3B,IACAc,KAAKo2B,QAAU,CAAE/0B,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGiD,EAAG,EAAGC,EAAG,EAAGL,MAAO,EAAGE,OAAQ,EAAGH,OAAQ,EAAGE,OAAQ,GAC5F,OAATtF,IAAec,KAAKu2B,QAAU,CAAEl1B,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGiD,EAAG,EAAGC,EAAG,EAAGL,MAAO,EAAGE,OAAQ,KAG1GzE,KAAKqlC,eAAiB,EAEtBrlC,KAAKuvB,GAAK,IAAIvvB,KAAKqwB,gBAAgBrwB,MACnCA,KAAK6uB,SAAW,IAAI7uB,KAAK8mC,kBAAkB9mC,MAEvCA,KAAKynC,SAASznC,KAAK0nC,cACnBxoC,IACKA,EAAeqwB,KAAIrwB,EAAQA,EAAeyoC,UAC/CzoC,EAAK8xB,SAAWhxB,KAAKkG,IAAIhH,GAAQX,OAAOH,OAAO4B,KAAMd,GAE7D,CAEO,WAAAwoC,GACH1nC,KAAK8vB,UAAY9vB,KAAKmC,YAAc,KACpCnC,KAAKgwB,aACT,CAGO,UAAA4X,CAAW55B,EAAiBmM,GAC3BA,IAAMnM,EAAOA,EAAKmM,KAAKA,IAC3Bna,KAAK2H,OAASqG,IAAShO,KAAKshC,GAAG1E,GAAWE,IAAK9uB,EAAM,OACzD,CAEO,UAAA65B,CAAW75B,EAAiBmM,GAC3BA,IAAMnM,EAAOA,EAAKmM,KAAKA,IAC3Bna,KAAKk0B,OAASlmB,IAAShO,KAAKshC,GAAG1E,GAAWK,QAASjvB,EAAM,OAC7D,CAEO,UAAA85B,CAAW95B,EAAiBmM,EAAgB2nB,GAC/C9hC,KAAKk0B,OAASl0B,KAAKk0B,OAAO4T,WAAW95B,EAAMmM,EAAM2nB,GAAO9hC,KAAK6nC,WAAW,IAAM7nC,KAAKk0B,OAAO4T,WAAW95B,EAAMmM,EAAM2nB,GACrH,CAEO,gBAAAiG,CAAiB/5B,GACpBhO,KAAK8nC,WAAW95B,EAAM,KAAM,MAChC,CAEO,YAAAg6B,CAAa9T,GAgBhB,GAfIl0B,KAAK+iC,UAAuB,OAAX7O,IAAiBA,EAASl0B,MAE3CA,KAAKk0B,SAAWA,GAAQl0B,KAAKk0B,OAAO+T,QAExCjoC,KAAKk0B,OAASA,EAEVA,GACAA,EAAO+T,QACPjoC,KAAKynC,QAAUznC,KAAK2H,OAAS3H,KAAK2H,OAAO8/B,QAAU,EAAI,EAClDznC,KAAekoC,WAAWloC,KAAKmoC,eAAe,MAC/CnoC,KAAK+hC,aAAa/hC,KAAKunC,gBAAgB3K,GAAWK,UAEtDj9B,KAAKunC,gBAAgB3K,GAAWM,WAGhCl9B,KAAKiC,SAAU,CACf,MAAM+uB,SAAEA,GAAahxB,KACrB,IAAK,IAAIT,EAAI,EAAGC,EAAMwxB,EAASvxB,OAAQF,EAAIC,EAAKD,IAC5CyxB,EAASzxB,GAAGyoC,aAAa9T,EAEjC,CACJ,CAIO,GAAAhuB,CAAIkiC,EAAgBC,GAA2B,CAC/C,GAAAliC,CAAImiC,GAA4D,CAEhE,OAAAC,CAAQ9nC,EAAcvD,GAAqB8C,KAAiBS,GAAQvD,CAAM,CAC1E,OAAAsrC,CAAQ/nC,GAAqB,OAAQT,KAAiBS,EAAM,CAE5D,eAAAgoC,CAAgBhoC,GAAqB,OAAQT,KAAKuvB,GAAe9uB,EAAM,CAEvE,MAAAknC,CAAOxmC,GAEV,OADIA,GAASnB,KAAK6uB,SAASuK,SACpBp5B,KAAKuvB,GAAGtuB,eAAe,KAAME,EACxC,CAEO,QAAAunC,CAASvnC,GACZ,OAAOrD,KAAKC,UAAUiC,KAAK2nC,OAAOxmC,GACtC,CAEO,KAAAwnC,GAAmC,CAEnC,KAAAC,CAAMR,GAAwB,CAE9B,MAAAS,GAAoC,CAIpC,SAAAra,CAAUsa,EAAmBC,GAA8B,OAAO,CAAK,CAEvE,SAAAxa,CAAUua,GAA8C,CAExD,YAAA1F,CAAa0F,EAAmBC,GAA2B,CAE3D,YAAAxF,CAAauF,GAA8C,CAO3D,IAAArxB,CAAKuxB,EAA2Cx1B,GAA4C,CAE5F,OAAAy1B,CAAQC,GAAqD,CAE7D,OAAAC,CAAQH,EAA2Cx1B,GAAsD,CAEzG,MAAA41B,CAAOC,GAA4D,CAOnE,KAAAC,CAAMzC,GAA0B,CAEhC,WAAArU,GAAsB,CAKtB,YAAAyD,GACHj2B,KAAK6uB,SAASuK,QAClB,CAEO,WAAApJ,CAAYrwB,GACX1C,EAAY0C,GAAWA,EAAW,QAChB,YAAbA,IAAwBA,EAAW,aAC5C,MAAMzC,EAAQ8C,KAAKuvB,GAAGxuB,WAAWpB,GAChCK,KAAKuvB,GAAW5vB,GAAY1C,EAAYC,GAAS,UAAOC,EACxD6C,KAAaL,GAAYzC,CAC9B,CAEO,WAAAsqC,CAAY7C,EAAuB4E,GACtCvpC,KAAKgwB,YAAY,UACrB,CAEO,aAAA4U,GACC5kC,KAAKy+B,eAAez+B,KAAKk0B,OAAOuF,SAAS+P,SAASxpC,KAC1D,CAIO,mBAAA+xB,GAA8B,CAE9B,mBAAAD,GAA8B,CAM9B,mBAAAK,GAA8B,CAE9B,mBAAAD,GAA8B,CAG9B,sBAAA6R,GAAiC,CAEjC,yBAAAG,GAAoC,CAEpC,yBAAAI,GAAoC,CAIpC,iBAAAR,CAAkBY,EAAyBC,GAA+B,CAE1E,qBAAA8E,GAAgC,CAEhC,oBAAAxF,CAAqBU,GAA+B,CAEpD,oBAAAN,CAAqBM,GAA+B,CAGpD,kBAAAF,GAA6B,CAE7B,kBAAAK,GAA6B,CAE7B,mBAAAE,GAA8B,CAG9B,oBAAAhB,GAAiC,OAAO,CAAE,CAE1C,oBAAAI,GAAiC,OAAO,CAAE,CAE1C,cAAAT,GAAyB,CAKzB,cAAA+F,CAAexsC,GAClB8C,KAAKmC,cAAcjF,GAAe8C,KAAKgxB,SAASvc,KAAKzG,GAAQA,EAAKuhB,GAAGnvB,OACzE,CAEO,cAAAwlC,CAAe1yB,EAAuB/R,GACzC+R,EAAOyH,OACP3a,KAAKimC,OAAO/yB,EAAQ/R,GACpB,MAAQuyB,aAAc7vB,GAAM7D,KAAK6uB,SACjC3b,EAAOsI,UAAU3X,EAAEc,EAAGd,EAAEe,EAAGf,EAAEU,MAAOV,EAAEY,QACtCyO,EAAO0H,SACX,CAEO,YAAAmV,CAAa8W,GAChB7mC,KAAK8vB,UAAY9vB,KAAKgxB,SAASvc,KAAKzG,GAAQA,EAAKuhB,GAAG0H,MAAQjpB,EAAKuhB,GAAG+G,SAAWtoB,EAAKuhB,GAAGvtB,QAC3F,CAIO,YAAA0kC,CAAaiD,EAAwBn2B,GAAkC,CAQvE,aAAAiyB,CAActkC,GACjB,GAAIA,EAAQC,OAAQ,CACXpB,KAAK4pC,gBAAe5pC,KAAK4pC,cAAgB,CAAA,GAC9C,MAAMC,EAAc7pC,KAAK4pC,cAAe5gC,EAAQhJ,KAAKo2B,QAIrD,OAHA1uB,GAAesB,EAAO7H,EAAQC,OAAQyoC,OAAa1sC,EAAW6L,GAC9DuB,GAAUvK,KAAK6uB,SAAS6E,aAAcmW,EAAaA,GACnDA,EAAYC,OAAS9gC,EAAM8gC,OAASD,EAAYC,KAAO9gC,EAAM8gC,MACtDD,CACX,CACI,OAAO7pC,KAAKo2B,OAEpB,CAEO,mBAAA2T,GACH,IAAIzlC,OAAEA,GAAWtE,KAAK4T,YAAc5T,KAAKo2B,QAEzC,OADI9xB,EAAS,IAAGA,GAAUA,GACnBA,EAAS,EAAIA,EAAS,CACjC,CAEO,kBAAA0lC,CAAmBlmC,EAAemmC,GACrC,IAAI3lC,OAAEA,EAAME,OAAEA,GAAWsoB,GAAaod,cAAgBlqC,KAAKo2B,QAAUp2B,KAAK4T,WAK1E,OAJI9P,IAAKQ,EAAS,IAAMA,GAAUA,GAASE,EAAS,IAAMA,GAAUA,MACjD,IAAfylC,GAAuC,YAAfA,GAA4B3lC,EAAS,GAAKE,EAAS,KAAIF,EAASE,EAAS,GACrGmiC,GAAcriC,OAASA,EACvBqiC,GAAcniC,OAASA,EAChBmiC,EACX,CAEO,YAAAjsB,CAAagb,GAChB,OAAO11B,KAAK6uB,SAASnU,aAAagb,GAAY,QAClD,CAGO,SAAAmE,CAAU5rB,EAAoBynB,GACjC,OAAO11B,KAAK6uB,SAASgL,UAAU5rB,EAAMynB,EACzC,CAEO,eAAAuE,CAAgBhsB,EAAoBynB,EAAkCwE,GACzE,OAAOl6B,KAAK6uB,SAASoL,gBAAgBhsB,EAAMynB,EAAUwE,EACzD,CAEO,eAAAM,CAAgBvsB,EAAoBynB,GACvC,OAAO11B,KAAK6uB,SAAS2L,gBAAgBvsB,EAAMynB,EAC/C,CAGO,cAAAoE,CAAe1xB,EAAoBstB,EAAkByU,GACxD,MAAM/oC,EAASs0B,EAAWD,GAAiBz1B,KAAM01B,GAAY11B,KAAKg1B,eAC5DtuB,EAAKyjC,EAAS/hC,EAAQ,CAAA,EAE5B,OADAmC,GAAUnC,EAAOhH,EAAQsF,GAClBA,CACX,CAGO,YAAA0jC,CAAaphC,EAAmBtC,EAAiB2B,EAAoBqtB,GACpE11B,KAAK2H,OACL3H,KAAK2H,OAAO0iC,aAAarhC,EAAOtC,EAAI2B,EAAUqtB,GAE1ChvB,GAAIN,GAAKM,EAAIsC,EAEzB,CAEO,YAAAshC,CAAaxW,EAAmBptB,EAAiB2B,EAAoBqtB,GACpE11B,KAAK2H,OACL3H,KAAK2H,OAAO+yB,aAAa5G,EAAOptB,EAAI2B,EAAUqtB,GAE1ChvB,GAAIN,GAAKM,EAAIotB,EAEzB,CAEO,YAAAuW,CAAarhC,EAAmBtC,EAAiB2B,EAAoBqtB,GACpEA,IACAA,EAASgF,aAAa1xB,EAAOtC,EAAI2B,GACjCW,EAAQtC,GAAUsC,GAEtBlC,GAAa9G,KAAKg0B,qBAAsBhrB,EAAOtC,EAAI2B,EACvD,CAEO,YAAAqyB,CAAatyB,EAAmB1B,EAAiB2B,EAAoBqtB,GACxEvtB,GAAanI,KAAKg0B,qBAAsB5rB,EAAO1B,EAAI2B,GAC/CqtB,GAAUA,EAAS2U,aAAa3jC,GAAU0B,EAAO,KAAMC,EAC/D,CAIO,WAAAkiC,CAAYvhC,EAAmB0sB,EAAkBrtB,EAAoB8hC,GACxE,OAAOnqC,KAAKwqC,mBAAmBxqC,KAAKyqC,cAAczhC,EAAO0sB,EAAUrtB,EAAU8hC,GAAS,KAAM,MAAM,EACtG,CAEO,kBAAAK,CAAmBpiC,EAAmBsiC,EAAmBC,EAAqBR,GACjF,MAAM1gC,EAAQ0gC,EAAS/hC,EAAQ7J,OAAAH,OAAA,CAAA,EAAKgK,IAAuBzD,EAAEA,EAACC,EAAEA,GAAM5E,KAAK+wB,UAE3E,OADAnnB,GAAKH,GAAQ9E,GAAIC,GACV6E,CACX,CAEO,aAAAghC,CAAczhC,EAAmB0sB,EAAkBrtB,EAAoB8hC,GAC1E,MAAM1gC,EAAQ0gC,EAASnhC,EAAQ,CAAA,EAE/B,OADAhJ,KAAKqqC,aAAarhC,EAAOS,EAAOpB,EAAUqtB,GACnCjsB,CACX,CAEO,kBAAAmhC,CAAmBx8B,EAAiBs8B,EAAmBC,EAAqBR,GAC/E,MAAM1gC,EAAQ0gC,EAAS/7B,EAAM7P,OAAAH,OAAA,CAAA,EAAKgQ,IAAqBzJ,EAAEA,EAACC,EAAEA,GAAM5E,KAAK+wB,UAEvE,OADAnnB,GAAKH,EAAO9E,EAAGC,GACR6E,CACX,CAEO,oBAAAohC,CAAqB/W,EAAmB4W,EAAmBriC,EAAoB8hC,GAClF,OAAOnqC,KAAKyqC,cAAc3W,EAAO9zB,KAAK2H,OAAQU,EAAU8hC,EAC5D,CAEO,aAAAW,CAAc9hC,EAAmB0sB,EAAkBrtB,EAAoB8hC,GAC1E,MAAM1gC,EAAQ0gC,EAASnhC,EAAQ,CAAA,EAE/B,OADAhJ,KAAKoqC,aAAaphC,EAAOS,EAAOpB,EAAUqtB,GACnCjsB,CACX,CAEO,oBAAA4wB,CAAqBjyB,EAAmBsiC,EAAmBriC,EAAoB8hC,GAClF,OAAOnqC,KAAKo6B,cAAchyB,EAAOpI,KAAK2H,OAAQU,EAAU8hC,EAC5D,CAEO,YAAAY,CAAa/hC,EAAmB0sB,EAAkBrtB,EAAoB8hC,GAEzE,OADcnqC,KAAKk0B,OAASl0B,KAAKk0B,OAAO0F,UAAY55B,MACvCyqC,cAAczhC,EAAO0sB,EAAUrtB,EAAU8hC,EAC1D,CAEO,aAAA/P,CAAchyB,EAAmBstB,EAAkBrtB,EAAoB8hC,GAC1E,MAAM1gC,EAAQ0gC,EAAS/hC,EAAQ,CAAA,EAE/B,OADApI,KAAK06B,aAAatyB,EAAOqB,EAAOpB,EAAUqtB,GACnCjsB,CACX,CAEO,kBAAAuhC,CAAmB58B,EAAiBsnB,EAAkBrtB,EAAoB8hC,GAC7E,OAAOnqC,KAAKo6B,cAAcp6B,KAAK4qC,mBAAmBx8B,EAAK,KAAM,KAAM+7B,GAASzU,EAAUrtB,GAAU,EACpG,CAEO,oBAAA4iC,CAAqBnX,EAAmB4B,EAAkBrtB,EAAoB8hC,GACjF,MAAM1gC,EAAQ0gC,EAASrW,EAAQ,CAAA,EAE/B,OADA9zB,KAAKsqC,aAAaxW,EAAOrqB,EAAOpB,EAAUqtB,GACnCjsB,CACX,CAEO,mBAAAyhC,CAAoBC,EAAkBzV,EAAkBrtB,EAAoB8hC,GAE/E,OADcnqC,KAAKk0B,OAASl0B,KAAKk0B,OAAO0F,UAAY55B,MACvCo6B,cAAc+Q,EAAMzV,EAAUrtB,EAAU8hC,EACzD,CAKO,YAAA9vB,CAAajZ,EAAqBkzB,EAAkBT,GACvDxZ,GAAara,KAAMoB,EAAQkzB,EAAQT,EACvC,CAEO,SAAAhZ,CAAUzZ,EAAqBkzB,EAAkBT,GACpDhZ,GAAU7a,KAAMoB,EAAQkzB,EAAQT,EACpC,CAEO,IAAAjqB,CAAKjF,EAAwBC,EAAYivB,GAC5CI,GAAUj0B,KAAM2E,EAAGC,EAAGivB,EAC1B,CAGO,SAAAuX,CAAUzmC,EAAwBC,EAAYivB,GACjDF,GAAU3zB,KAAM2E,EAAGC,GAAG,EAAMivB,EAChC,CAEO,OAAAhqB,CAAQjD,EAA6BtC,EAAgBE,EAA+B8vB,EAAkBT,GACzGU,GAAYv0B,KAAMu1B,GAAev1B,KAAM4G,GAAStC,EAAQE,EAAQ8vB,EAAQT,EAC5E,CAEO,QAAApnB,CAAS7F,EAA6BtD,EAAkBuwB,GAC3De,GAAc50B,KAAMu1B,GAAev1B,KAAM4G,GAAStD,EAAUuwB,EAChE,CAEO,MAAAwX,CAAOzkC,EAA6BhB,EAAeC,EAAgByuB,EAAkBT,GACxFiB,GAAY90B,KAAMu1B,GAAev1B,KAAM4G,GAAShB,EAAOC,EAAOyuB,EAAQT,EAC1E,CAGO,cAAAkB,CAAeC,EAA8BV,EAAkBT,GAClEkB,GAAe/0B,KAAMg1B,EAAgBV,EAAQT,EACjD,CAEO,SAAAF,CAAUhvB,EAAwBC,EAAYivB,GACjDF,GAAU3zB,KAAM2E,EAAGC,GAAG,EAAOivB,EACjC,CAEO,YAAAyX,CAAaC,EAAyBjnC,EAAgBE,EAA+B8vB,EAAkBT,GAC1GQ,GAAYr0B,KAAMurC,EAAajnC,EAAQE,EAAQ8vB,EAAQT,EAC3D,CAEO,aAAAc,CAAc4W,EAAyBjoC,GAC1CqxB,GAAc30B,KAAMurC,EAAajoC,EACrC,CAEO,WAAAuxB,CAAY0W,EAAyB3lC,EAAeC,EAAgByuB,EAAkBT,GACzFgB,GAAY70B,KAAMurC,EAAa3lC,EAAOC,EAAOyuB,EAAQT,EACzD,CAEO,IAAA2X,CAAKlW,EAAazB,GACrBhZ,GAAU7a,KAAMq1B,GAAiBr1B,KAAMs1B,IAAO,EAAOzB,EACzD,CAKO,WAAAa,CAAYpwB,EAAgBE,EAASF,EAAQmnC,GAC/CzrC,KAAesE,QAAUA,EACzBtE,KAAewE,QAAUA,CAC9B,CAEO,aAAAknC,CAAcC,EAAiBC,GAAyB,CAGxD,WAAAC,CAAYxwB,GAAwB,CAEpC,YAAAywB,CAAaxwB,GAAyB,CAKtC,GAAAvJ,CAAIg6B,EAAoBC,GAAgC,OAAO,CAAK,CAEpE,UAAAC,CAAWC,GAAqC,OAAO,CAAK,CAE5D,KAAAC,CAAMC,GAAqC,OAAO,CAAK,CAEvD,SAAAC,CAAUC,GAAqC,OAAO,CAAK,CAE3D,WAAAC,CAAYD,EAA0BE,GAAiC,OAAO,CAAK,CAEnF,UAAAC,CAAWH,GAAqC,OAAO,CAAK,CAE5D,aAAAx4B,CAAc61B,GAAgC,CAE9C,iBAAA+C,GAA4B,CAO5B,QAAAxH,CAASyE,EAAwBn2B,GAAkC,CAEnE,UAAAm5B,CAAWhD,EAAwBn2B,GAAkC,CAErE,MAAAuyB,CAAO4D,EAAwBn2B,EAA0Bo5B,GAAuC,CAGhG,MAAA3G,CAAO0D,EAAwBn2B,GAAkC,CAEjE,aAAA4xB,CAAcuE,EAAwBn2B,GAAkC,CAExE,WAAAwyB,CAAY2D,EAAwBn2B,GAAkC,CAGtE,oBAAA6e,GAA+B,CAE/B,cAAAI,GAAyB,CAOzB,UAAAoa,CAAWlD,GAAgC,CAE3C,gBAAAzD,CAAiByD,GAAgC,CAEjD,YAAA/F,GAAuB,CAEvB,kBAAAC,GAA6B,CAO7B,iBAAAiJ,GACH,OAAO12B,GAAOI,KAAK,OACvB,CAEO,cAAAu2B,CAAeC,GAClB,OAAO52B,GAAOI,KAAK,OACvB,CAEO,cAAAy2B,GACH,OAAO,CACX,CAEO,kBAAAzI,GAA6B,CAM7B,cAAA2D,CAAe+E,EAAqBC,GAA+B,CAKnE,oBAAA9G,GAA+B,CAE/B,GAAAr1B,CAAIo8B,EAA6DC,GAAyB,CAE1F,MAAA7gB,CAAO4gB,EAAgD3qC,GACtDzC,KAAK2H,QAAQ3H,KAAK2H,OAAO6kB,OAAOxsB,KAAMyC,EAC9C,CAEO,MAAA6qC,CAAO3lC,EAAe+J,EAAgB4iB,GACzCqB,GAAK31B,KAAM2H,EAAQ+J,EAAO4iB,EAC9B,CAOO,EAAAgN,CAAG4L,EAA6DK,EAA4B/5B,GAAiC,CAE7H,GAAAsuB,CAAIoL,EAA2BK,EAA4B/5B,GAAiC,CAE5F,GAAAyuB,CAAIiL,EAA2CK,EAA4BC,EAAiBh6B,GAA8D,CAE1J,IAAA0uB,CAAKmH,GAAoD,CAEzD,IAAA5H,CAAKyL,EAA2CK,EAA4BE,EAAoCC,GAA4B,CAE5I,IAAA/O,CAAKuO,EAAeS,EAA2BD,GAA4B,CAE3E,SAAArL,CAAUsL,EAAiBD,GAA4B,CAEvD,QAAAtP,CAAS8O,EAAeQ,GAA+B,OAAO,CAAM,CAI3E,iBAAOE,CAAWjuC,EAAkBouB,EAAuC8f,GACvEA,EAAK7tC,KAAK8tC,QAAQnuC,EAAUouB,EAAc8f,GAAMpf,GAAoBzuB,KAAKgX,UAAWrX,EAAUouB,EAClG,CAEA,cAAO+f,CAAQnuC,EAAkBouB,EAAuC8f,EAAqBE,GACpFF,IAAIA,EAAKnf,IACdmf,EAAG9f,EAAcggB,EAAjBF,CAA4B7tC,KAAKgX,UAAWrX,EAChD,CAGO,eAAA4nC,CAAgBt5B,GACfjO,KAAKo+B,SAASnwB,IAAOjO,KAAKqiC,UAAU,IAAIzF,GAAW3uB,EAAMjO,KAAMA,KAAK2H,QAC5E,CAGO,OAAAlF,GACEzC,KAAKguC,YACFhuC,KAAK2H,QAAQ3H,KAAKwsB,SAClBxsB,KAAKgxB,UAAWhxB,KAA4BiuC,QAEhDjuC,KAAKunC,gBAAgB3K,GAAWO,SAEhCn9B,KAAKuvB,GAAG9sB,UACRzC,KAAK6uB,SAASpsB,UAEbzC,KAAe0iC,iBAChB1iC,KAAKguC,WAAY,EAEzB,GA3qBSpH,QAAAA,KAAIjvB,GAAA,CALhB0Z,GAAUsR,IACVtR,GAAUmS,IACVnS,GAAUqS,IACVrS,GAAUoR,IACVpR,GAAU4T,KACE2B,cCXb,MAAMz1B,cAAEA,IAAkBhC,IACpBgoB,KAAEA,IAASD,IACXb,eAAEA,GAAcG,kBAAEA,GAAiBC,kBAAEA,GAAiBC,mBAAEA,GAAkBE,sBAAEA,GAAqBC,sBAAEA,IAA0BX,GAC7HjhB,GAAQ,IAAIrC,GAAM,UAGXs7B,QAAAA,OAAN,cAAqBtH,aAIjB,oBAAA5C,GACH,MAAMhT,SAAEA,GAAahxB,KACrB,IAAK,IAAIT,EAAI,EAAGC,EAAMwxB,EAASvxB,OAAQF,EAAIC,EAAKD,IAC5C,GAAIyxB,EAASzxB,GAAGsvB,SAASyM,aAAc,OAAO,EAElD,OAAO,CACX,CAEO,oBAAA8I,GACH,MAAMpT,SAAEA,GAAahxB,KACrB,IAAK,IAAIT,EAAI,EAAGC,EAAMwxB,EAASvxB,OAAQF,EAAIC,EAAKD,IAC5C,GAAIyxB,EAASzxB,GAAGsvB,SAASgM,aAAc,OAAO,EAElD,OAAO,CACX,CAEO,iBAAAiJ,CAAkBY,EAAyBt1B,GAC9C+B,GAAc/B,GAAUpP,KAAK6uB,SAASkC,UAAW/wB,KAAKgxB,SAAUhxB,KAAK8vB,UAAY4G,GAAqBL,GAC1G,CAEO,oBAAA4N,CAAqB70B,GACxB+B,GAAc/B,GAAUpP,KAAK6uB,SAAS6J,aAAc14B,KAAKgxB,SAAUhxB,KAAK8vB,UAAY8G,GAAwBJ,GAChH,CAEO,oBAAA6N,CAAqBj1B,GACxB+B,GAAc/B,GAAUpP,KAAK6uB,SAAS6E,aAAc1zB,KAAKgxB,SAAUhxB,KAAK8vB,UAAY+G,GAAwBJ,GAChH,CAKO,oBAAA4P,GACH,IAAI8H,EACJ,MAAMnd,SAAEA,GAAahxB,KACrB,GAAIgxB,EAASvxB,OAAS,EAAG,CACrB,IAAK,IAAIF,EAAI,EAAGC,EAAMwxB,EAASvxB,OAAQF,EAAIC,EAAKD,IAC5CyxB,EAASzxB,GAAG83B,aAAe93B,EACvByxB,EAASzxB,GAAGgwB,GAAG6H,SAAQ+W,GAAa,GAE5Cnd,EAASmG,KAAKA,IACdn3B,KAAK6uB,SAASuN,mBAAqB+R,CACvC,CACJ,CAEO,GAAAn9B,CAAIvJ,EAAciK,GACrB,GAAIjK,IAAUzH,MAAQyH,EAAMumC,UAAW,OAAO/4B,GAAML,KAAK,yBAEzD,MAAMw5B,EAAUnxC,EAAYyU,GAC5B,IAAKjK,EAAM8nB,GAAI,CACX,GAAI7xB,EAAQ+J,GAAQ,OAAOA,EAAMhJ,QAAQuP,IAAUhO,KAAKgR,IAAIhD,EAAM0D,GAAQ08B,GAAW18B,MAChFjK,EAAQmP,GAAUzQ,IAAIsB,EAAM7G,IAAK6G,EAC1C,CAEIA,EAAME,QAAQF,EAAME,OAAO6kB,OAAO/kB,GACtCA,EAAME,OAAS3H,KAEfouC,EAAUpuC,KAAKgxB,SAASzkB,KAAK9E,GAASzH,KAAKgxB,SAASkH,OAAOxmB,EAAO,EAAGjK,GACjEA,EAAMxF,WAAUjC,KAAKuvB,GAAGkI,qBAAuBz3B,KAAKuvB,GAAGkI,qBAAuB,GAAK,GAEvF,MAAM4W,EAAc5mC,EAAMonB,SAC1Bwf,EAAYvf,YAAcuf,EAAYtf,YACtCsf,EAAYpf,eAAiBof,EAAYnf,eAErCznB,EAAMs6B,aAAat6B,EAAM8/B,gBAAgB3K,GAAWE,KAEpD98B,KAAKk0B,SACLzsB,EAAMugC,aAAahoC,KAAKk0B,QACpBl0B,KAAKk0B,OAAO6S,SAAS/mC,KAAKsuC,iBAAiB1R,GAAWE,IAAKr1B,IAGnEzH,KAAK6uB,SAASuN,oBAAsBp8B,KAAK6uB,SAASqN,oBACtD,CAEO,OAAAqS,IAAWvd,GAA2BhxB,KAAKgR,IAAIggB,EAAiB,CAEhE,MAAAxE,CAAO/kB,EAAehF,GACrBgF,EAEIA,EAAM8nB,GAED9nB,EAAgB+mC,aAAc/mC,EAAM0gC,eAAe,MAAO,IAAMnoC,KAAKyuC,SAAShnC,EAAOhF,IACrFzC,KAAKyuC,SAAShnC,EAAOhF,GAEvBzC,KAAKyX,KAAKhQ,GAAchJ,QAAQuP,GAAQhO,KAAKwsB,OAAOxe,EAAMvL,IAE1DxF,EAAYwK,IACnBo1B,MAAMrQ,OAAO,KAAM/pB,EAE3B,CAEO,SAAAisC,CAAUjsC,GACb,MAAMuuB,SAAEA,GAAahxB,KACjBgxB,EAASvxB,SACTO,KAAKgxB,SAAW,GAChBhxB,KAAK2uC,cACL3uC,KAAKuvB,GAAGkI,oBAAsB,EAC9BzG,EAASvyB,QAAQgJ,IACbzH,KAAK4uC,kBAAkBnnC,GACnBhF,GAASgF,EAAMhF,YAG/B,CAEO,KAAAwrC,GACHjuC,KAAK0uC,WAAU,EACnB,CAEU,QAAAD,CAAShnC,EAAehF,GAC9B,MAAMiP,EAAQ1R,KAAKgxB,SAAS6d,QAAQpnC,GAChCiK,GAAQ,IACR1R,KAAKgxB,SAASkH,OAAOxmB,EAAO,GACxBjK,EAAMxF,WAAUjC,KAAKuvB,GAAGkI,qBAAuBz3B,KAAKuvB,GAAGkI,qBAAuB,GAAK,GACvFz3B,KAAK2uC,cACL3uC,KAAK4uC,kBAAkBnnC,GACnBhF,GAASgF,EAAMhF,UAE3B,CAEU,WAAAksC,GACF3uC,KAAK8vB,WAAW9vB,KAAK+vB,eACrB/vB,KAAKmC,aAAanC,KAAK0pC,iBAC3B1pC,KAAK6uB,SAASE,YACd/uB,KAAK6uB,SAASuN,oBAAsBp8B,KAAK6uB,SAASqN,oBACtD,CAEU,iBAAA0S,CAAkBnnC,GACxBA,EAAM8/B,gBAAgB3K,GAAWG,QACjCt1B,EAAME,OAAS,KACX3H,KAAKk0B,SACLzsB,EAAMugC,aAAa,MACfhoC,KAAKk0B,OAAO6S,UACZ/mC,KAAKsuC,iBAAiB1R,GAAWG,OAAQt1B,GACrCzH,KAAKk0B,OAAO4a,kBAAkB9uC,KAAKk0B,OAAO4a,iBAAiBb,SAG3E,CAEU,gBAAAK,CAAiBrgC,EAAcxG,GACrC,MAAM+0B,EAAQ,IAAII,GAAW3uB,EAAMxG,EAAOzH,MACtCA,KAAKo+B,SAASnwB,KAAUjO,KAAK+iC,UAAU/iC,KAAKqiC,UAAU7F,GAC1Dx8B,KAAKk0B,OAAOmO,UAAU7F,EAC1B,GAjJS0R,QAAAA,OAAMv2B,GAAA,CADlB0Z,GAAU+U,KACE8H,sBChBAa,GAKT,UAAWtvC,GAAmB,OAAOO,KAAKX,KAAKI,MAAO,CAEtD,WAAAd,CAAYqP,GACRhO,KAAKiJ,QACD+E,IAAMtQ,EAAQsQ,GAAQhO,KAAKkR,QAAQlD,GAAQhO,KAAKgR,IAAIhD,GAC5D,CAEO,GAAAsI,CAAIhW,GACP,OAAOA,IAASrD,EAAY+C,KAAKxB,KAAK8B,EAAKq3B,SAC/C,CAEO,OAAAqX,CAAQt9B,GACX,OAAO1R,KAAKX,KAAKqS,EACrB,CAEO,OAAAm9B,CAAQvuC,GACX,MAAMoR,EAAQ1R,KAAKxB,KAAK8B,EAAKq3B,SAC7B,OAAO16B,EAAYyU,IAAS,EAAKA,CACrC,CAGO,GAAAV,CAAI1Q,GACP,MAAMjB,KAAEA,EAAIb,KAAEA,GAASwB,KACnB/C,EAAYuB,EAAK8B,EAAKq3B,YACtBt4B,EAAKkN,KAAKjM,GACV9B,EAAK8B,EAAKq3B,SAAWt4B,EAAKI,OAAS,EAE3C,CAEO,KAAAwvC,CAAM3uC,EAAaoR,EAAQ,GAC9B,MAAMlT,KAAEA,GAASwB,KACjB,GAAI/C,EAAYuB,EAAK8B,EAAKq3B,UAAW,CACjC,MAAMt4B,KAAEA,GAASW,KACjB,IAAK,IAAIT,EAAImS,EAAOlS,EAAMH,EAAKI,OAAQF,EAAIC,EAAKD,IAAMf,EAAKa,EAAKE,GAAGo4B,WACrD,IAAVjmB,EACArS,EAAK6vC,QAAQ5uC,IAEToR,EAAQrS,EAAKI,SAAQiS,EAAQrS,EAAKI,QACtCJ,EAAK64B,OAAOxmB,EAAO,EAAGpR,IAE1B9B,EAAK8B,EAAKq3B,SAAWjmB,CACzB,CACJ,CAEO,OAAAR,CAAQ7R,GACX,IAAK,IAAIE,EAAI,EAAGA,EAAIF,EAAKI,OAAQF,IAAKS,KAAKgR,IAAI3R,EAAKE,GACxD,CAGO,MAAAitB,CAAOlsB,GACV,MAAMjB,KAAEA,GAASW,KACjB,IAAI6hC,EACJ,IAAK,IAAItiC,EAAI,EAAGC,EAAMH,EAAKI,OAAQF,EAAIC,EAAKD,IACnCtC,EAAY4kC,GAENxiC,EAAKE,GAAGo4B,UAAYr3B,EAAKq3B,UAChCkK,EAAYtiC,SACLS,KAAKxB,KAAK8B,EAAKq3B,UAHtB33B,KAAKxB,KAAKa,EAAKE,GAAGo4B,SAAWp4B,EAAI,EAOpCtC,EAAY4kC,IAAYxiC,EAAK64B,OAAO2J,EAAW,EACxD,CAGO,IAAA1K,CAAKgY,GACR,MAAM9vC,KAAEA,GAASW,KACbmvC,EACA9vC,EAAK83B,KAAK,CAAC91B,EAAGC,IAAMA,EAAEmmC,QAAUpmC,EAAEomC,SAElCpoC,EAAK83B,KAAK,CAAC91B,EAAGC,IAAMD,EAAEomC,QAAUnmC,EAAEmmC,QAE1C,CAEO,OAAAhpC,CAAQ2wC,GACXpvC,KAAKX,KAAKZ,QAAQ2wC,EACtB,CAEO,KAAAnwC,GACH,MAAMI,EAAO,IAAI0vC,GAGjB,OAFA1vC,EAAKA,KAAO,IAAIW,KAAKX,MACrBA,EAAKb,KAAID,OAAAH,OAAA,CAAA,EAAQ4B,KAAKxB,MACfa,CACX,CAGO,MAAA+5B,GACHp5B,KAAKxB,KAAO,CAAA,EACZ,MAAMa,KAAEA,EAAIb,KAAEA,GAASwB,KACvB,IAAK,IAAIT,EAAI,EAAGC,EAAMH,EAAKI,OAAQF,EAAIC,EAAKD,IAAQf,EAAKa,EAAKE,GAAGo4B,SAAWp4B,CAChF,CAEO,KAAA0J,GACHjJ,KAAKX,KAAO,GACZW,KAAKxB,KAAO,CAAA,CAChB,CAEO,OAAAiE,GACHzC,KAAKiJ,OACT,0EC3FA,WAAAtK,CAAY0wC,EAAgCvgC,EAAgBC,EAAiBugC,EAAe/qC,EAAgBE,GACxG7G,EAASyxC,GAAOrvC,KAAKoG,KAAKipC,GAAOrvC,KAAKkG,IAAImpC,EAAKvgC,EAAOC,EAAQugC,EAAM/qC,EAAOE,EAC/E,CAEA,GAAAyB,CAAImpC,EAAM,EAAGvgC,EAAQ,EAAGC,EAAS,EAAGugC,EAAO,EAAG/qC,EAAQ,EAAGE,EAAS,GAC9DzE,KAAKqvC,IAAMA,EACXrvC,KAAK8O,MAAQA,EACb9O,KAAK+O,OAASA,EACd/O,KAAKsvC,KAAOA,EACZtvC,KAAKuE,MAAQA,EACbvE,KAAKyE,OAASA,CAClB,CAEA,IAAA2B,CAAKmpC,GACD,MAAMF,IAAEA,EAAGvgC,MAAEA,EAAKC,OAAEA,EAAMugC,KAAEA,EAAI/qC,MAAEA,EAAKE,OAAEA,GAAW8qC,EACpDvvC,KAAKkG,IAAImpC,EAAKvgC,EAAOC,EAAQugC,EAAM/qC,EAAOE,EAC9C,CAEA,aAAA+qC,CAAc7nC,GACV,MAAM0nC,IAAEA,EAAGvgC,MAAEA,EAAKC,OAAEA,EAAMugC,KAAEA,EAAI/qC,MAAEA,EAAKE,OAAEA,GAAWzE,KACpD,OAAO,IAAIsS,GAAOg9B,EAAMD,EAAK9qC,GAAgBoD,EAAOpD,MAAQ+qC,EAAOxgC,EAAOrK,GAAkBkD,EAAOlD,OAAS4qC,EAAMtgC,EACtH,wKClCJ,WAAApQ,GAEWqB,KAAAX,KAAwB,EA+CnC,CA7CW,GAAA2R,CAAIkC,GACPA,EAAOu8B,QAAUzvC,KACjBA,KAAKX,KAAKkN,KAAK2G,EACnB,CAEO,GAAA/M,CAAIhC,GACP,IAAIgjB,EACJ,MAAM9nB,KAAEA,GAASW,KACjB,IAAK,IAAIT,EAAI,EAAGC,EAAMH,EAAKI,OAAQF,EAAIC,EAAKD,IAExC,GADA4nB,EAAM9nB,EAAKE,GACP4nB,EAAIuoB,UAAYvoB,EAAIwoB,WAAWxrC,GAG/B,OAFAgjB,EAAIuoB,UAAW,EACfvoB,EAAIsoB,UAAYtoB,EAAIsoB,QAAUzvC,MACvBmnB,EAIf,MAAMjU,EAASwD,GAAQxD,OAAO/O,GAE9B,OADAnE,KAAKgR,IAAIkC,GACFA,CACX,CAEO,OAAAia,CAAQhG,GACXA,EAAIuoB,UAAW,CACnB,CAEO,aAAAtiB,GACH,IAAIla,EACJ,MAAM9Q,EAA0B,GAChC,IAAK,IAAI7C,EAAI,EAAGC,EAAMQ,KAAKX,KAAKI,OAAQF,EAAIC,EAAKD,IAC7C2T,EAASlT,KAAKX,KAAKE,GACnB2T,EAAOw8B,SAAWx8B,EAAOzQ,UAAYL,EAAOmK,KAAK2G,GAErDlT,KAAKX,KAAO+C,CAChB,CAEO,KAAA6rC,GACHjuC,KAAKX,KAAKZ,QAAQuP,IAAUA,EAAKvL,YACjCzC,KAAKX,KAAKI,OAAS,CACvB,CAEO,OAAAgD,GACHzC,KAAKiuC,OACT,qdCzCA,UAAWxuC,GAAmB,OAAOO,KAAK4vC,OAAQ,CAGlD,WAAAjxC,CAAYqP,GAFJhO,KAAA4vC,QAAU,EAGd5vC,KAAKiJ,QACD+E,IAAMtQ,EAAQsQ,GAAQhO,KAAKkR,QAAQlD,GAAQhO,KAAKgR,IAAIhD,GAC5D,CAEO,GAAAsI,CAAIhW,GACP,OAAQrD,EAAY+C,KAAKxB,KAAK8B,EAAKq3B,SACvC,CAEO,OAAAkY,CAAQvvC,GACX,OAAOrD,EAAY+C,KAAKxB,KAAK8B,EAAKq3B,SACtC,CAEO,IAAAR,CAAKgY,GACR,MAAMW,OAAEA,GAAW9vC,KACfmvC,EACAW,EAAO3Y,KAAK,CAAC91B,EAAGC,IAAMA,EAAID,GAE1ByuC,EAAO3Y,KAAK,CAAC91B,EAAGC,IAAMD,EAAIC,EAElC,CAEO,OAAA4P,CAAQ7R,GACXA,EAAKZ,QAAQ6B,IAAUN,KAAKgR,IAAI1Q,IACpC,CAEO,GAAA0Q,CAAI1Q,GACP,MAAM9B,KAAEA,EAAIuxC,SAAEA,GAAa/vC,KACtBxB,EAAK8B,EAAKq3B,WACXn5B,EAAK8B,EAAKq3B,SAAW,EAChBoY,EAASzvC,EAAKmnC,SAIfsI,EAASzvC,EAAKmnC,SAASl7B,KAAKjM,IAH5ByvC,EAASzvC,EAAKmnC,SAAW,CAACnnC,GAC1BN,KAAK8vC,OAAOvjC,KAAKjM,EAAKmnC,UAI1BznC,KAAK4vC,UAEb,CAEO,OAAAnxC,CAAQ2wC,GACX,IAAI/vC,EACJW,KAAK8vC,OAAOrxC,QAAQuxC,IAChB3wC,EAAOW,KAAK+vC,SAASC,GACrB,IAAK,IAAIzwC,EAAI,EAAGC,EAAMH,EAAKI,OAAQF,EAAIC,EAAKD,IACxC6vC,EAAa/vC,EAAKE,KAG9B,CAEO,KAAA0J,GACHjJ,KAAK+vC,SAAW,CAAA,EAChB/vC,KAAKxB,KAAO,CAAA,EACZwB,KAAK8vC,OAAS,GACd9vC,KAAK4vC,QAAU,CACnB,CAEO,OAAAntC,GACHzC,KAAK+vC,SAAW,IACpB,4FlD1DE,cAAgCn2B,GAUlC,SAAWrV,GAAkB,OAAOvE,KAAKmE,KAAKI,KAAM,CACpD,UAAWE,GAAmB,OAAOzE,KAAKmE,KAAKM,MAAO,CAEtD,cAAWgC,GAAuB,OAAOzG,KAAKmE,KAAKsC,UAAW,CAC9D,cAAWwpC,GAAuB,OAAOjwC,KAAKuE,MAAQvE,KAAKyG,YAAc,CAAE,CAC3E,eAAWypC,GAAwB,OAAOlwC,KAAKyE,OAASzE,KAAKyG,YAAc,CAAE,CAE7E,aAAW0pC,GAAuB,OAAOnwC,KAAK6qB,OAAOslB,SAAU,CAC/D,aAAWA,CAAUjzC,GAAkB8C,KAAK6qB,OAAOslB,UAAYjzC,CAAM,CAErE,wBAAWkzC,GAAkC,OAAOpwC,KAAK6sB,MAAQ7sB,KAAKqwC,UAAW,CAoBjF,WAAA1xC,CAAYksB,EAA8B4kB,GACtC5S,QAjCG78B,KAAAmE,KAAwB,CAAA,EA4BxBnE,KAAAg1B,eAA8B,CAAA,EAM5BnK,IAAQA,EAASlM,IAEtB3e,KAAKyvC,QAAUA,EACfzvC,KAAK23B,QAAUr7B,EAAYO,OAAOP,EAAYI,QAE9C,MAAM6H,MAAEA,EAAKE,OAAEA,EAAMgC,WAAEA,GAAeokB,EACtC7qB,KAAKswC,YAAc/rC,IAAUE,EAE7BzE,KAAKmE,KAAKsC,WAAaA,GAAcnL,EAASi1C,iBAC9CvwC,KAAK6qB,OAASA,EAEd7qB,KAAKwwC,MACT,CAEO,IAAAA,GAAe,CAEf,eAAAC,GACH,MAAM5jB,KAAEA,GAAS7sB,MACX0wC,gBAAEA,GAAoB1wC,KAAK6qB,OACjC7qB,KAAKsZ,QAAUo3B,EAAkB7jB,EAAK8jB,WAAW,KAAMD,GAAmB7jB,EAAK8jB,WAAW,MAC1F3wC,KAAKia,eACT,CAIO,OAAO22B,EAAqCp9B,GAAwF,CAEpI,MAAAq9B,CAAO3D,EAAyB4D,GAAsD,CAEtF,SAAAC,CAAU7D,EAA0B4D,GAAgE,CAEpG,MAAAE,CAAOJ,EAAmBE,GAAwD,CAIlF,MAAAxc,CAAOnwB,EAAuB8sC,GAAa,GAC9C,GAAIjxC,KAAK2vC,WAAWxrC,GAAO,OAE3B,IAAI+sC,EACAlxC,KAAKsZ,UAAYtZ,KAAKmxC,QAAUF,GAAcjxC,KAAKuE,QACnD2sC,EAAalxC,KAAK8lC,gBAClBoL,EAAWE,UAAUpxC,OAGzB,MAAMkI,EAAIlI,KAAKmE,KACfnG,EAAWc,UAAUoJ,EAAG/D,EAAMya,IAC9BA,GAAgBngB,QAAQC,GAAOwJ,EAAExJ,KAASwJ,EAAExJ,GAAO,IAEnDsB,KAAKoP,OAAS,IAAIkD,GAAO,EAAG,EAAGtS,KAAKuE,MAAOvE,KAAKyE,QAEhDzE,KAAKqxC,iBACLrxC,KAAKsxC,qBAEDtxC,KAAKsZ,UAELtZ,KAAKsnB,OAAStnB,KAAK6qB,OAAOvD,QAErBtnB,KAAKmxC,QAAUD,IAChBlxC,KAAKuxC,WAAWL,EAAW9hC,QAC3BpP,KAAKoxC,UAAUF,GACfA,EAAW/jB,WAKvB,CAEO,cAAAkkB,GAAyB,CACzB,kBAAAC,GAA6B,CAC7B,eAAAE,CAAgBpY,GAEnB,OADIA,GAAQp5B,KAAKsxC,qBACVtxC,KAAKyxC,cAAgBzxC,KAAKoP,MACrC,CAEO,eAAAsiC,CAAgBC,EAA0BpE,GAAyC,CACnF,cAAAqE,GAAyB,CAEzB,SAAAC,CAAUC,GAA8C,CAExD,QAAAj+B,CAASzS,EAAmC2wC,GAC/C,MAAMtrC,WAAEA,EAAU0pC,UAAEA,GAAcnwC,KAAM2T,EAAI3T,KAAKg1B,eAE7C+c,GAAcrqC,GAAetG,EAAQ2wC,EAAcp+B,GACvDnN,GAAWpF,EAAQqF,EAAYkN,GAE3Bw8B,IACI/uC,EAAO0oC,MAAS1oC,EAAO0oC,KAAOrjC,EAAc,GAAGkN,EAAElS,EAAIiB,GAAMiR,EAAElS,EAAI,IAAO,GAAKkS,EAAEjS,EAAIgB,GAAMiR,EAAEjS,EAAI,IAAO,KACrGiS,EAAElS,EAAIiB,GAAMiR,EAAElS,GAAIkS,EAAEjS,EAAIgB,GAAMiR,EAAEjS,KAGzC1B,KAAKqa,aAAa1G,EAAEtS,EAAGsS,EAAErS,EAAGqS,EAAEpS,EAAGoS,EAAEnS,EAAGmS,EAAElS,EAAGkS,EAAEjS,EACjD,CAEO,iBAAAswC,CAAkBhd,GACjBA,IAAgBh1B,KAAKg1B,eAAiBA,GAC1C,MAAMrhB,EAAI3T,KAAKg1B,eACXrhB,GAAG3T,KAAKqa,aAAa1G,EAAEtS,EAAGsS,EAAErS,EAAGqS,EAAEpS,EAAGoS,EAAEnS,EAAGmS,EAAElS,EAAGkS,EAAEjS,EACxD,CAEO,SAAAwS,CAAUf,EAAwB8+B,EAAqB9wC,EAAgC+wC,GACtFD,IAAajyC,KAAKiyC,YAAcA,GAChC9+B,IAAOnT,KAAKmyC,YAAch/B,GAC1BhS,GAASnB,KAAKoyC,iBAAiBjxC,EAAS+wC,EAChD,CAEO,gBAAAE,CAAiBjxC,EAA+B+wC,GACnD,IAAIG,UAAEA,EAASC,WAAEA,EAAUx4B,YAAEA,EAAWy4B,WAAEA,EAAUC,WAAEA,GAAerxC,EACjE+wC,IACIA,EAAaG,YAAWA,EAAYH,EAAaG,WACjDH,EAAaI,aAAYA,EAAaJ,EAAaI,YAClDr1C,EAAYi1C,EAAap4B,eAAcA,EAAco4B,EAAap4B,aAClE7c,EAAYi1C,EAAaK,cAAaA,EAAaL,EAAaK,YACjEL,EAAaM,aAAYA,EAAaN,EAAaM,aAE3DxyC,KAAKqyC,UAAYA,EACjBryC,KAAKsyC,WAAaA,EAClBtyC,KAAK8Z,YAAcA,EACnB9Z,KAAKuyC,WAAaA,EAClBvyC,KAAKwyC,WAAaA,CACtB,CAEO,aAAAC,CAAcpyC,GACjBL,KAAK0yC,eAAiB1yC,KAAKK,UAC3BL,KAAKK,UAAYA,CACrB,CAEO,gBAAAsyC,GACH3yC,KAAKK,UAAYL,KAAK0yC,cAC1B,CAIO,OAAAE,CAAQ1G,EAAoB2G,GAAqC,OAAO,CAAK,CAE7E,SAAAC,CAAU5G,EAAoBM,GAAkC,OAAO,CAAK,CAE5E,QAAAuG,CAASC,EAAgCC,EAAsBC,EAAS,GAAc,OAAO,CAAK,CAIlG,cAAAC,CAAexuC,EAAWC,EAAWwuC,EAAcjgC,GACtD,MAAM1M,WAAEA,GAAezG,KACvBA,KAAKqzC,cAAgB1uC,EAAI8B,EACzBzG,KAAKszC,cAAgB1uC,EAAI6B,EACzBzG,KAAKuzC,WAAaH,EAAO3sC,EACzBzG,KAAKwzC,YAAcrgC,GAAS,OAChC,CAEO,YAAAsgC,CAAaL,GAChB,MAAM3sC,WAAEA,GAAezG,KACvBA,KAAKoC,OAAS,QAAQgxC,EAAO3sC,MACjC,CAGO,SAAA2qC,CAAUl+B,EAAuBnU,EAAoB2H,EAAkBrG,EAAwBqzC,GAAqB,GACnHrzC,IAAWL,KAAKK,UAAYA,GAC5BtB,GACAiB,KAAK2zC,mBAAmB50C,EAAM20C,GACzBhtC,GACA1G,KAAK4zC,oBAAoBltC,EAAIgtC,GAAYhtC,EAAKgY,IAD1ChY,EAAK+X,GAGdze,KAAKyb,UAAUvI,EAAO2Z,KAA2BpO,GAAgB9Z,EAAG8Z,GAAgB7Z,EAAG6Z,GAAgBla,MAAOka,GAAgBha,OAAQiC,EAAG/B,EAAG+B,EAAG9B,EAAG8B,EAAGnC,MAAOmC,EAAGjC,SAE/JzE,KAAKyb,UAAUvI,EAAO2Z,KAA2B,EAAG,GAEpDxsB,IAAWL,KAAKK,UAAY,cACpC,CAEO,gBAAAozB,CAAiBvgB,EAAuBkgB,EAAkCygB,EAA4BxzC,EAAwBqzC,GAAqB,GAClJtgB,EAAU9xB,GAAK8xB,EAAU7xB,GACzBvB,KAAK2a,OACL3a,KAAKiU,iBACLjU,KAAKoxC,UAAUl+B,EAAQkgB,EAAWjkB,GAAahF,cAAc0pC,EAAezgB,GAAY/yB,EAAWqzC,GACnG1zC,KAAK4a,YAEDva,IAAWL,KAAKK,UAAYA,GAChCL,KAAK2zC,mBAAmBvgB,EAAWsgB,GACnC1zC,KAAKyb,UAAUvI,EAAO2Z,KAA2BpO,GAAgB9Z,EAAG8Z,GAAgB7Z,EAAG6Z,GAAgBla,MAAOka,GAAgBha,OAAQovC,EAAclvC,EAAGkvC,EAAcjvC,EAAGivC,EAActvC,MAAOsvC,EAAcpvC,QACvMpE,IAAWL,KAAKK,UAAY,eAExC,CAEO,gBAAAmzB,CAAiBtgB,EAAuBnU,EAAoB2H,EAAkBrG,EAAwBgzB,EAA8BqgB,GAAqB,GAC5J1zC,KAAKiU,iBACLjU,KAAKoxC,UAAUl+B,EAAQnU,EAAM2H,EAAIrG,EAAWqzC,GACvCrgB,GAAoBrzB,KAAKgyC,mBAClC,CAEO,iBAAA8B,CAAkB1kC,GAGrB,IAAI2kC,EAAeC,EAFnBh0C,KAAK2zC,mBAAmBvkC,GAAQ,GAAM,GAGtC,MAAMkK,QAAEA,GAAYtZ,KAAMi0C,EAAY36B,EAAQ46B,aAAaz1B,GAAgB9Z,EAAG8Z,GAAgB7Z,EAAG6Z,GAAgBla,MAAOka,GAAgBha,SAASvF,KAAEA,GAAS+0C,EAE5J,IAAK,IAAI10C,EAAI,EAAGC,EAAMN,EAAKO,OAAQF,EAAIC,EAAKD,GAAK,EAC7Cy0C,EAAkB,KAAV90C,EAAKK,GAA2B,KAAdL,EAAKK,EAAI,GAA2B,KAAdL,EAAKK,EAAI,IACrDw0C,EAAQ70C,EAAKK,EAAI,MAAIL,EAAKK,EAAI,GAAe,MAAVw0C,EAAgBC,EAAQD,GAASC,EAAQ,MAGpF16B,EAAQ66B,aAAaF,EAAWx1B,GAAgB9Z,EAAG8Z,GAAgB7Z,EACvE,CAEO,OAAAwvC,CAAQC,EAA2BC,EAA0B3mC,GAChE3N,KAAKoxC,UAAUiD,EAAYC,EAAY3mC,EAAU,iBACrD,CAEO,SAAA4mC,CAAUC,EAA6BF,EAA0B3mC,GACpE3N,KAAKoxC,UAAUoD,EAAcF,EAAY3mC,EAAU,kBACvD,CAEO,SAAAyF,CAAUhE,EAAqB+D,EAAwB9S,EAAwBqzC,GAC9ErzC,IAAWL,KAAKK,UAAYA,GAChCL,KAAK+T,UAAYZ,EACjBnT,KAAK2zC,mBAAmBvkC,EAAQskC,GAChC1zC,KAAKob,SAASqD,GAAgB9Z,EAAG8Z,GAAgB7Z,EAAG6Z,GAAgBla,MAAOka,GAAgBha,QACvFpE,IAAWL,KAAKK,UAAY,cACpC,CAEO,WAAAiT,CAAYlE,EAAqB+D,EAAwB9S,EAAwBqzC,GAChFrzC,IAAWL,KAAKK,UAAYA,GAChCL,KAAKmyC,YAAch/B,EACnBnT,KAAK2zC,mBAAmBvkC,EAAQskC,GAChC1zC,KAAKub,WAAWkD,GAAgB9Z,EAAG8Z,GAAgB7Z,EAAG6Z,GAAgBla,MAAOka,GAAgBha,QACzFpE,IAAWL,KAAKK,UAAY,cACpC,CAEO,SAAAo0C,CAAUrlC,EAAqBskC,GAAqB,GACvD1zC,KAAK8b,YACL9b,KAAK2zC,mBAAmBvkC,EAAQskC,GAChC1zC,KAAKwd,KAAKiB,GAAgB9Z,EAAG8Z,GAAgB7Z,EAAG6Z,GAAgBla,MAAOka,GAAgBha,QACvFzE,KAAKmb,MAET,CAEO,MAAAgrB,CAAOuO,GACVA,EAASC,YAAc30C,KAAKmb,KAAKu5B,EAASC,aAAe30C,KAAKmb,MAClE,CAEO,UAAAo2B,CAAWniC,EAAqBskC,GAAqB,GACxD1zC,KAAK2zC,mBAAmBvkC,EAAQskC,GAChC1zC,KAAKwb,UAAUiD,GAAgB9Z,EAAG8Z,GAAgB7Z,EAAG6Z,GAAgBla,MAAOka,GAAgBha,OAChG,CAEO,KAAAwpC,GACH,MAAMxnC,WAAEA,GAAezG,KACvBA,KAAKwb,UAAU,EAAG,EAAGxb,KAAKuE,MAAQkC,EAAa,EAAGzG,KAAKyE,OAASgC,EAAa,EACjF,CAKU,kBAAAktC,CAAmBvkC,EAAqBP,EAAgBsD,GAC9DnS,KAAK40C,kBAAkBn2B,GAAiBrP,EAAQP,EAAMsD,EAC1D,CAEU,mBAAAyhC,CAAoBxkC,EAAqBP,EAAgBsD,GAC/DnS,KAAK40C,kBAAkBl2B,GAAkBtP,EAAQP,EAAMsD,EAC3D,CAEU,iBAAAyiC,CAAkBC,EAAsBzlC,EAAqBP,EAAgBsD,GACnF0iC,EAAY3uC,IAAIkJ,GACZ+C,GAAW0iC,EAAY1iC,UAAUnS,KAAKoP,QAC1CylC,EAAY3wC,MAAMlE,KAAKyG,YACnBoI,GAAMgmC,EAAYhmC,MAC1B,CAEO,UAAA8gC,CAAWxrC,GACd,OAAOnE,KAAKuE,QAAUJ,EAAKI,OAASvE,KAAKyE,SAAWN,EAAKM,UAAYN,EAAKsC,YAAczG,KAAKyG,aAAetC,EAAKsC,WACrH,CAGO,aAAAq/B,CAAcgP,EAAiCC,GAClD,MAAM5wC,KAAEA,EAAIgsC,UAAEA,GAAcnwC,KAAMkT,EAASlT,KAAKyvC,QAAUzvC,KAAKyvC,QAAQtpC,IAAIhC,GAAQuS,GAAQxD,OAAM3U,OAAAH,OAAA,CAAA,EAAM+F,IAOvG,OANA+O,EAAOyH,OAEHm6B,IAAuB1uC,GAAK8M,EAAO8hB,eAAgBh1B,KAAKg1B,gBAAiB9hB,EAAO8+B,qBAChF+C,IAAe7hC,EAAOoU,OAAStnB,KAAKsnB,QACxCpU,EAAOi9B,YAAcA,IAAcj9B,EAAOi9B,UAAYA,GAE/Cj9B,CACX,CAEO,OAAAia,CAAQ6nB,GACNh1C,KAAK0vC,WACN1vC,KAAK4a,UACLo6B,EAAch1C,KAAKuxC,WAAWyD,GAAeh1C,KAAKiuC,QAClDjuC,KAAKyvC,QAAUzvC,KAAKyvC,QAAQtiB,QAAQntB,MAAQA,KAAKyC,UAEzD,CAEO,YAAAwyC,CAAatQ,GAA+B,CAE5C,YAAAuQ,GAAuB,CAEvB,OAAAzyC,GACHzC,KAAKyvC,QAAUzvC,KAAK6sB,KAAO7sB,KAAKqwC,WAAa,IACjD,oDmBhVA,OAAW30C,GAAQ,OAAOsE,KAAK6qB,OAAOnvB,GAAI,CAU1C,aAAWy5C,GAAc,OAAOn1C,KAAKs5B,SAAWt5B,KAAK+U,KAAM,CAgB3D,WAAApW,CAAYksB,GAGR,GAXG7qB,KAAAktB,IAAM,EAIHltB,KAAAo1C,aAA4B,GAKlCp1C,KAAK23B,QAAU96B,GAAOF,IACtBqD,KAAK6qB,OAASA,IAAWA,EAAS,CAAEnvB,IAAK,KACrCmvB,EAAOgC,KAAM,CACb,MAAMA,KAAEA,GAAShC,EACjB7qB,KAAKq1C,QAAQxoB,EAAKhC,OAASgC,EAAKA,KAAOA,EAC3C,CAEAC,GAAaQ,SAAS,MAAOzC,KAAY7qB,KAAKs1C,OAAQ,GACtDxoB,GAAaO,cAAcxC,KAAY7qB,KAAKqtB,eAAgB,EAChE,CAEO,IAAAT,CAAK2oB,EAAuBxpB,GAC/B,IAAK/rB,KAAKw1C,QAAS,CACfx1C,KAAKw1C,SAAU,EACf,IAAI/oB,UAAEA,EAASgpB,sBAAEA,GAA0Bn6C,EAASsL,OAAQ8uC,EAAa11C,KAAK6qB,OAAO8qB,cAAgBF,GAAyBz1C,KAAK01C,WAAWv7B,KAAKna,MAC/I01C,IAAYjpB,EAAYgpB,GAC5BnpB,GAASC,OAAOvb,IAAI,IAAWoH,GAAApY,UAAA,OAAA,EAAA,YAAC,aAAMysB,EAAUzsB,KAAKtE,IAAKg6C,GAAYz8B,KAAK28B,GAAO51C,KAAKq1C,QAAQO,IAAM9pB,MAAOrqB,IACxGzB,KAAK+U,MAAQtT,EACbzB,KAAK2rB,YAAW,IAClB,GACN,CAEA,OADA3rB,KAAKo1C,aAAa7oC,KAAKgpC,EAAWxpB,GAC3B/rB,KAAKo1C,aAAa31C,OAAS,CACtC,CAEO,MAAAo2C,CAAOnkC,EAAeokC,GACzB,MAAMj2B,EAAI7f,KAAKo1C,aACf,GAAIU,EAAW,CACX,MAAM/gC,EAAQ8K,EAAEnO,EAAQ,GACpBqD,GAAOA,EAAM,CAAE9G,KAAM,QAC7B,CACA4R,EAAEnO,GAASmO,EAAEnO,EAAQ,QAAKvU,CAC9B,CAEU,OAAAk4C,CAAQO,GACd51C,KAAKs5B,OAAQ,EACbt5B,KAAKuE,MAAQqxC,EAAI/kB,cAAgB+kB,EAAIrxC,MACrCvE,KAAKyE,OAASmxC,EAAI3kB,eAAiB2kB,EAAInxC,OACvCzE,KAAK6sB,KAAO+oB,EACZ51C,KAAK2rB,YAAW,EACpB,CAEU,UAAA+pB,CAAWK,GACjB/1C,KAAK+1C,SAAWA,CACpB,CAEU,UAAApqB,CAAWqqB,GACjB,IAAIC,EACJj2C,KAAKo1C,aAAa32C,QAAQ,CAACuP,EAAM0D,KAC7BukC,EAAMvkC,EAAQ,EACV1D,IACIgoC,EACKC,GAAKjoC,EAAKhO,MAEXi2C,GAAKjoC,EAAKhO,KAAK+U,UAI/B/U,KAAKo1C,aAAa31C,OAAS,EAC3BO,KAAKw1C,SAAU,CACnB,CAEO,OAAAU,CAAQC,GACX,OAAOn2C,KAAK6sB,IAChB,CAEO,SAAAupB,CAAU7xC,EAAeE,EAAgBzC,EAAkBm0C,EAAoBE,EAAeC,EAAehvB,GAIhH,GAHA/iB,IAAUA,EAAQvE,KAAKuE,OACvBE,IAAWA,EAASzE,KAAKyE,QAErBzE,KAAKu2C,MAAO,CACZ,IAAI7+B,OAAEA,EAAMxY,KAAEA,GAASc,KAAKu2C,MAC5B,IAAK,IAAIh3C,KAAKmY,EAAU,GAAIA,EAAOnY,KAAOwY,UAAUxY,GAAI,CAAEL,EAAO,KAAM,KAAM,CAC7E,GAAIA,EAAM,OAAOA,CACrB,CAEA,MAAMgU,EAAS5X,EAASsL,OAAO4vC,aAAavzC,GAAI2L,GAAMrK,GAAS8xC,GAAQ,IAAK,GAAIpzC,GAAI2L,GAAMnK,GAAU6xC,GAAQ,IAAK,IAC3GG,EAAMvjC,EAAOy9B,WAAW,MAO9B,OANI3uC,IAASy0C,EAAIC,YAAc10C,GAC/By0C,EAAIE,uBAAmC,IAAXrvB,EAC5BmvB,EAAIh7B,UAAUzb,KAAK6sB,KAAM,EAAG,EAAGtoB,EAAOE,GAEtCzE,KAAKu2C,MAAQv2C,KAAKktB,IAAM,EAAI,CAAEhuB,KAAMgU,EAAQwE,OAAQK,WAAc,KAE3D7E,CACX,CAEO,UAAA0jC,CAAW1jC,EAAa4B,EAAuB+F,EAAyBwN,GAC3E,MAAMwuB,EAAUv7C,EAAS4X,OAAO4K,cAAc5K,EAAQ4B,GACtD,IACQ+F,GAAag8B,EAAQx8B,eACrBw8B,EAAQx8B,aAAaQ,GACrBA,OAAY1d,EAEpB,CAAE,MAAAyB,GAAQ,CAEV,OADIypB,GAAOrqB,EAAW0B,SAAS2oB,EAAO,YAAaxN,GAC5Cg8B,CACX,CAEO,OAAAp0C,GACHzC,KAAK6qB,OAAS,CAAEnvB,IAAK,IACrBsE,KAAKu2C,MAAQ,KACbv2C,KAAKo1C,aAAa31C,OAAS,CAC/B,ozBEVE,SAAiCsuB,GACnC,OAAOE,GAAiBF,EAAervB,IAAqB,CACxD,GAAAwH,CAAIhJ,GACA8C,KAAKwuB,UAAU9vB,EAAKxB,GACpB8C,KAAK6uB,SAAS2M,eAAiBx7B,KAAK6uB,SAAS0M,cACjD,IAER,2EA3FM,SAAyBxN,GAC3B,OAAOE,GAAiBF,EAAervB,IAAqB,CACxD,GAAAwH,CAAIhJ,GACI8C,KAAKwuB,UAAU9vB,EAAKxB,KACpB8C,KAAKgvB,mBAAqBhvB,KAAK4G,QAAU5G,KAAKyI,QAAUzI,KAAK6kC,MACxD7kC,KAAKu2B,SAASv2B,KAAK6uB,SAASsK,cACjCvK,GAAa5uB,MAErB,IAER,4C8BzDM,SAAsBihB,ItCEtB,SAAoBA,GAElBA,IAAWA,EAAOxD,YAElBwD,EAAOxD,UAAY,SAAU9Y,EAAWC,EAAWL,EAAeE,EAAgByc,GAE9EF,GAAchhB,KAAqB2E,EAAGC,EAAGL,EAAOE,EAAQyc,EAC5D,EAGR,CsCXIzD,CAAUwD,EACd,4E9BgPM,SAAqB8M,GACvB,OAAOE,GAAiBF,EAAervB,IAAqB,CACxD,GAAAwH,CAAIhJ,GACA8C,KAAKwuB,UAAU9vB,EAAKxB,GAChB8C,KAAKk0B,QAAQl0B,KAAKk0B,OAAO4iB,cACjC,IAER,wBAKM,SAAwBC,GAC1B,MAAO,CAACl/B,EAAiBm/B,KACrBzpB,GAAU1V,EAAQ,kBAAmB,CACjC1R,IAAG,IAAY4wC,IAG3B,mBA5OM,SAAmBhpB,GACrB,OAAOE,GAAiBF,EAC5B,4HA0HM,SAAkBA,GACpB,OAAOE,GAAiBF,EAAervB,IAAqB,CACxD,GAAAwH,CAAIhJ,GACA,GAAI8C,KAAKwuB,UAAU9vB,EAAKxB,GAAQ,CAC5B,MAAMgC,EAAOc,KAAKuvB,GAClBvxB,EAAW0B,SAASR,EAAM,WAAaA,EAAKqnC,KAAOrnC,EAAKomC,QAAUpmC,EAAKymC,SACvE3lC,KAAK6uB,SAASmN,eAClB,CACJ,IAER,oE5CzJkC,CAAA,qB4CyN5B,SAAqBjO,GACvB,OAAOE,GAAiBF,EAAervB,IAAqB,CACxD,GAAAwH,CAAIhJ,GACA8C,KAAKwuB,UAAU9vB,EAAKxB,IAAU8C,KAAK4nC,WAAW,KAAQ5nC,KAAK2H,OAAO+hC,eAAexsC,IACrF,IAER,mJAEM,SAAkB6wB,GACpB,OAAOE,GAAiBF,EAAervB,IAAqB,CACxD,GAAAwH,CAAIhJ,GACI8C,KAAKwuB,UAAU9vB,EAAKxB,KACpB8C,KAAK6uB,SAASwM,kBAAmB,EACR,QAArBzoB,GAAMc,YAAsB1T,KAAK6uB,SAASmN,gBAC1Ch8B,KAAKk0B,QAAQl0B,KAAKk0B,OAAO4iB,eAErC,IAER,mC5C3MM,SAAmC55C,GACrC,OAAOU,EAASV,KAAWQ,EAAQR,EACvC,mK4C+NM,SAA0B65C,GAC5B,MAAO,CAACl/B,EAAiBm/B,KACrBzpB,GAAU1V,EAAQ,oBAAqB,CACnC1R,IAAG,IAAY4wC,IAG3B,qDAzDM,SAAmBhpB,GACrB,OAAOE,GAAiBF,EAAervB,IAAqB,CACxD,GAAAwH,CAAIhJ,GACI8C,KAAKwuB,UAAU9vB,EAAKxB,KACpB8C,KAAK6uB,SAASC,YAAc9uB,KAAK6uB,SAASE,YAC1C/uB,KAAK4nC,WAAW,KAAQ5nC,KAAK2H,OAAOooB,aAAa7yB,KAEzD,IAER,4BAvIM,SAA4B6wB,GAC9B,OAAOE,GAAiBF,EAAervB,IAAqB,CACxD,GAAAwH,CAAIhJ,GACA8C,KAAKwuB,UAAU9vB,EAAKxB,KAAW0xB,GAAa5uB,MAAOA,KAAKuvB,GAAGjtB,sBAC/D,IAER,sBAqEM,SAAsByrB,GACxB,OAAOE,GAAiBF,EAAervB,IAAqB,CACxD,GAAAwH,CAAIhJ,GACA8C,KAAKwuB,UAAU9vB,EAAKxB,KAAW8C,KAAK6uB,SAASsB,gBAAkBnwB,KAAK6uB,SAASuB,iBACzEpwB,KAAKi3B,MAAMpH,GAAU7vB,KAC7B,IAER,wCArEM,SAAwB+tB,GAC1B,OAAOE,GAAiBF,EAAervB,IAAqB,CACxD,GAAAwH,CAAIhJ,GACA,MAAMgC,EAAOc,KAAKuvB,GACS,IAAvBrwB,EAAKgB,gBAAqBhB,EAAKgB,cAAgBhD,EAAQ,EAAI,GAC1DA,IAAOgC,EAAK+3C,qBAAkB95C,GACnC6C,KAAKwuB,UAAU9vB,EAAKxB,GACpB0xB,GAAa5uB,KACjB,IAER,0DAhFM,SAAuB+tB,EAAuBY,GAChD,OAAOV,GAAiBF,EAAervB,IAAqB,CACxD,GAAAwH,CAAIhJ,GACA8C,KAAKwuB,UAAU9vB,EAAKxB,EAAOyxB,KAAuB3uB,KAAK6uB,SAASI,eAAiBjvB,KAAK6uB,SAASK,eACnG,IAER,gC+BlCI,OAAQrX,IACJjB,GAAUC,SAASgB,GAE3B,qCAGI,OAAQA,IACJX,GAAaL,SAASgB,GAE9B,kB9BIM,SAAkBqC,GACpB,MAAO,CAACrC,EAAiBnZ,KACrBW,GAAKkN,KAAK,CAAE9L,KAAMoX,EAAOlZ,YAAY8B,KAAO,IAAM/B,EAAKorB,IAAK,KAAQjS,EAAOnZ,GAAOwb,KAE1F,iCAGI,OAAQR,IACJ0X,KAER,uBD6CM,SAAuBrD,EAAuBY,GAChD,OAAOV,GAAiBF,EAAervB,IAAqB,CACxD,GAAAwH,CAAIhJ,GACA8C,KAAKwuB,UAAU9vB,EAAKxB,EAAOyxB,KAAuB3uB,KAAK6uB,SAASgN,iBAAmB77B,KAAK6uB,SAAS+M,iBACrG,IAGR,oBAhBM,SAAoB7N,EAAuBY,GAC7C,OAAOV,GAAiBF,EAAervB,IAAqB,CACxD,GAAAwH,CAAIhJ,GACA8C,KAAKwuB,UAAU9vB,EAAKxB,EAAOyxB,KAAuB3uB,KAAK6uB,SAAS6M,cAAgB17B,KAAK6uB,SAAS4M,cAElG,IAER,qBA9BM,SAAqB1N,EAAuBY,GAC9C,OAAOV,GAAiBF,EAAervB,IAAqB,CACxD,GAAAwH,CAAIhJ,GACI8C,KAAKwuB,UAAU9vB,EAAKxB,EAAOyxB,KAC3B3uB,KAAK6uB,SAASI,eAAiBjvB,KAAK6uB,SAASK,eAC7ClvB,KAAKyjC,gBAAkBzjC,KAAKyjC,cAAgB,CAAA,GAEpD,IAER,mBA2JM,SAAmB1V,GACrB,OAAOE,GAAiBF,EAAervB,IAAqB,CACxD,GAAAwH,CAAIhJ,GACI8C,KAAKwuB,UAAU9vB,EAAKxB,KACpB8C,KAAK6uB,SAASmN,gBACdh8B,KAAK4nC,WAAW,KAAQ5nC,KAAK2H,OAAOknB,SAASqN,uBAErD,IAER,4CArEM,SAAsBnO,GACxB,OAAOE,GAAiBF,EAAervB,IAAqB,CACxD,GAAAwH,CAAIhJ,GACA8C,KAAKwuB,UAAU9vB,EAAKxB,KAAW8C,KAAK6uB,SAASoN,gBAAkBj8B,KAAK6uB,SAASmN,gBACjF,IAER,qF5CvHM,SAAsB9+B,GACxB,MAAyB,iBAAVA,GAAsBO,EAAUy5C,KAAKh6C,IAAWA,EAAQA,CAC3E,uC4EXuB,4BhCuJjB,SAAsB6wB,GACxB,OAAOE,GAAiBF,EAAervB,IAAqB,CACxD,GAAAwH,CAAIhJ,GACA,MAAMgzB,EAAWlwB,KAAKs2B,QACtB,IAAiB,IAAbpG,GAA+B,IAAVhzB,GACrB,GAAI8C,KAAKwuC,aAAc,OAAOxuC,KAAKmoC,eAAe,MAAO,IAAMlY,GAAUjwB,KAAMtB,EAAKxB,EAAOgzB,SACvE,IAAbA,IAA4B,IAAVhzB,GACrB8C,KAAKkoC,WAAWloC,KAAKmoC,eAAe,MAE5ClY,GAAUjwB,KAAMtB,EAAKxB,EAAOgzB,GACxBlwB,KAAKi3B,MAAMpH,GAAU7vB,KAC7B,IAER","x_google_ignoreList":[23]}