All Downloads are FREE. Search and download functionalities are using the official Maven repository.

package.dist.zrender.js.map Maven / Gradle / Ivy

The newest version!
{"version":3,"file":"zrender.js","sources":["../src/core/env.ts","../src/core/platform.ts","../src/core/util.ts","../src/core/vector.ts","../src/mixin/Draggable.ts","../src/core/Eventful.ts","../src/core/fourPointsTransform.ts","../src/core/dom.ts","../src/core/event.ts","../src/core/GestureMgr.ts","../src/core/matrix.ts","../src/core/Point.ts","../src/core/BoundingRect.ts","../src/Handler.ts","../src/core/timsort.ts","../src/graphic/constants.ts","../src/Storage.ts","../src/animation/requestAnimationFrame.ts","../src/animation/easing.ts","../src/core/curve.ts","../src/animation/cubicEasing.ts","../src/animation/Clip.ts","../src/core/LRU.ts","../src/tool/color.ts","../src/svg/helper.ts","../src/animation/Animator.ts","../src/animation/Animation.ts","../src/dom/HandlerProxy.ts","../src/config.ts","../src/core/Transformable.ts","../src/contain/text.ts","../src/Element.ts","../src/graphic/Group.ts","../src/zrender.ts","../src/graphic/Displayable.ts","../src/core/bbox.ts","../src/core/PathProxy.ts","../src/contain/line.ts","../src/contain/cubic.ts","../src/contain/quadratic.ts","../src/contain/util.ts","../src/contain/arc.ts","../src/contain/windingLine.ts","../src/contain/path.ts","../src/graphic/Path.ts","../src/tool/transformPath.ts","../src/tool/path.ts","../src/graphic/Image.ts","../src/graphic/shape/Circle.ts","../src/graphic/helper/roundRect.ts","../src/graphic/helper/subPixelOptimize.ts","../src/graphic/shape/Rect.ts","../src/graphic/shape/Ellipse.ts","../src/graphic/shape/Line.ts","../src/graphic/helper/smoothBezier.ts","../src/graphic/helper/poly.ts","../src/graphic/shape/Polygon.ts","../src/graphic/shape/Polyline.ts","../src/graphic/Gradient.ts","../src/graphic/LinearGradient.ts","../src/graphic/RadialGradient.ts","../src/graphic/TSpan.ts","../src/tool/parseXML.ts","../src/tool/parseSVG.ts","../src/graphic/helper/roundSector.ts","../src/graphic/shape/Sector.ts","../src/tool/convertPath.ts","../src/tool/dividePath.ts","../src/tool/morphPath.ts","../src/graphic/CompoundPath.ts","../src/graphic/IncrementalDisplayable.ts","../src/graphic/helper/image.ts","../src/graphic/helper/parseText.ts","../src/graphic/Text.ts","../src/graphic/shape/Arc.ts","../src/graphic/shape/BezierCurve.ts","../src/graphic/shape/Droplet.ts","../src/graphic/shape/Heart.ts","../src/graphic/shape/Isogon.ts","../src/graphic/shape/Ring.ts","../src/graphic/shape/Rose.ts","../src/graphic/shape/Star.ts","../src/graphic/shape/Trochoid.ts","../src/graphic/Pattern.ts","../src/core/OrientedBoundingRect.ts","../src/debug/showDebugDirtyRect.ts","../src/canvas/helper.ts","../src/canvas/dashStyle.ts","../src/canvas/graphic.ts","../src/canvas/Layer.ts","../src/canvas/Painter.ts","../src/svg/SVGPathRebuilder.ts","../src/svg/mapStyleToAttrs.ts","../src/svg/core.ts","../src/svg/cssClassId.ts","../src/svg/cssAnimation.ts","../src/svg/cssEmphasis.ts","../src/svg/graphic.ts","../src/svg/domapi.ts","../src/svg/patch.ts","../src/svg/Painter.ts","../src/all.ts"],"sourcesContent":["declare const wx: {\n    getSystemInfoSync: Function\n};\n\nclass Browser {\n    firefox = false\n    ie = false\n    edge = false\n    newEdge = false\n    weChat = false\n    version: string | number\n}\n\nclass Env {\n    browser = new Browser()\n    node = false\n    wxa = false\n    worker = false\n\n    svgSupported = false\n    touchEventsSupported = false\n    pointerEventsSupported = false\n    domSupported = false\n    transformSupported = false\n    transform3dSupported = false\n\n    hasGlobalWindow = typeof window !== 'undefined'\n}\n\nconst env = new Env();\n\nif (typeof wx === 'object' && typeof wx.getSystemInfoSync === 'function') {\n    env.wxa = true;\n    env.touchEventsSupported = true;\n}\nelse if (typeof document === 'undefined' && typeof self !== 'undefined') {\n    // In worker\n    env.worker = true;\n}\nelse if (!env.hasGlobalWindow || 'Deno' in window) {\n    // In node\n    env.node = true;\n    env.svgSupported = true;\n}\nelse {\n    detect(navigator.userAgent, env);\n}\n\n// Zepto.js\n// (c) 2010-2013 Thomas Fuchs\n// Zepto.js may be freely distributed under the MIT license.\n\nfunction detect(ua: string, env: Env) {\n    const browser = env.browser;\n    const firefox = ua.match(/Firefox\\/([\\d.]+)/);\n    const ie = ua.match(/MSIE\\s([\\d.]+)/)\n        // IE 11 Trident/7.0; rv:11.0\n        || ua.match(/Trident\\/.+?rv:(([\\d.]+))/);\n    const edge = ua.match(/Edge?\\/([\\d.]+)/); // IE 12 and 12+\n\n    const weChat = (/micromessenger/i).test(ua);\n\n    if (firefox) {\n        browser.firefox = true;\n        browser.version = firefox[1];\n    }\n    if (ie) {\n        browser.ie = true;\n        browser.version = ie[1];\n    }\n\n    if (edge) {\n        browser.edge = true;\n        browser.version = edge[1];\n        browser.newEdge = +edge[1].split('.')[0] > 18;\n    }\n\n    // It is difficult to detect WeChat in Win Phone precisely, because ua can\n    // not be set on win phone. So we do not consider Win Phone.\n    if (weChat) {\n        browser.weChat = true;\n    }\n\n    env.svgSupported = typeof SVGRect !== 'undefined';\n    env.touchEventsSupported = 'ontouchstart' in window && !browser.ie && !browser.edge;\n    env.pointerEventsSupported = 'onpointerdown' in window\n        && (browser.edge || (browser.ie && +browser.version >= 11));\n    env.domSupported = typeof document !== 'undefined';\n\n    const style = document.documentElement.style;\n\n    env.transform3dSupported = (\n        // IE9 only supports transform 2D\n        // transform 3D supported since IE10\n        // we detect it by whether 'transition' is in style\n        (browser.ie && 'transition' in style)\n        // edge\n        || browser.edge\n        // webkit\n        || (('WebKitCSSMatrix' in window) && ('m11' in new WebKitCSSMatrix()))\n        // gecko-based browsers\n        || 'MozPerspective' in style\n    ) // Opera supports CSS transforms after version 12\n      && !('OTransition' in style);\n\n    // except IE 6-8 and very old firefox 2-3 & opera 10.1\n    // other browsers all support `transform`\n    env.transformSupported = env.transform3dSupported\n        // transform 2D is supported in IE9\n        || (browser.ie && +browser.version >= 9);\n\n}\n\n\nexport default env;\n","export const DEFAULT_FONT_SIZE = 12;\nexport const DEFAULT_FONT_FAMILY = 'sans-serif';\nexport const DEFAULT_FONT = `${DEFAULT_FONT_SIZE}px ${DEFAULT_FONT_FAMILY}`;\n\ninterface Platform {\n    // TODO CanvasLike?\n    createCanvas(): HTMLCanvasElement\n    measureText(text: string, font?: string): { width: number }\n    loadImage(\n        src: string,\n        onload: () => void | HTMLImageElement['onload'],\n        onerror: () => void | HTMLImageElement['onerror']\n    ): HTMLImageElement\n}\n\n// Text width map used for environment there is no canvas\n// Only common ascii is used for size concern.\n\n// Generated from following code\n//\n// ctx.font = '12px sans-serif';\n// const asciiRange = [32, 126];\n// let mapStr = '';\n// for (let i = asciiRange[0]; i <= asciiRange[1]; i++) {\n//     const char = String.fromCharCode(i);\n//     const width = ctx.measureText(char).width;\n//     const ratio = Math.round(width / 12 * 100);\n//     mapStr += String.fromCharCode(ratio + 20))\n// }\n// mapStr.replace(/\\\\/g, '\\\\\\\\');\nconst OFFSET = 20;\nconst SCALE = 100;\n// TODO other basic fonts?\n// eslint-disable-next-line\nconst defaultWidthMapStr = `007LLmW'55;N0500LLLLLLLLLL00NNNLzWW\\\\\\\\WQb\\\\0FWLg\\\\bWb\\\\WQ\\\\WrWWQ000CL5LLFLL0LL**F*gLLLL5F0LF\\\\FFF5.5N`;\n\nfunction getTextWidthMap(mapStr: string): Record {\n    const map: Record = {};\n    if (typeof JSON === 'undefined') {\n        return map;\n    }\n    for (let i = 0; i < mapStr.length; i++) {\n        const char = String.fromCharCode(i + 32);\n        const size = (mapStr.charCodeAt(i) - OFFSET) / SCALE;\n        map[char] = size;\n    }\n    return map;\n}\n\nexport const DEFAULT_TEXT_WIDTH_MAP = getTextWidthMap(defaultWidthMapStr);\n\nexport const platformApi: Platform = {\n    // Export methods\n    createCanvas() {\n        return typeof document !== 'undefined'\n            && document.createElement('canvas');\n    },\n\n    measureText: (function () {\n\n        let _ctx: CanvasRenderingContext2D;\n        let _cachedFont: string;\n        return (text: string, font?: string) => {\n            if (!_ctx) {\n                const canvas = platformApi.createCanvas();\n                _ctx = canvas && canvas.getContext('2d');\n            }\n            if (_ctx) {\n                if (_cachedFont !== font) {\n                    _cachedFont = _ctx.font = font || DEFAULT_FONT;\n                }\n                return _ctx.measureText(text);\n            }\n            else {\n                text = text || '';\n                font = font || DEFAULT_FONT;\n                // Use font size if there is no other method can be used.\n                const res = /((?:\\d+)?\\.?\\d*)px/.exec(font);\n                const fontSize = res && +res[1] || DEFAULT_FONT_SIZE;\n                let width = 0;\n                if (font.indexOf('mono') >= 0) {   // is monospace\n                    width = fontSize * text.length;\n                }\n                else {\n                    for (let i = 0; i < text.length; i++) {\n                        const preCalcWidth = DEFAULT_TEXT_WIDTH_MAP[text[i]];\n                        width += preCalcWidth == null ? fontSize : (preCalcWidth * fontSize);\n                    }\n                }\n                return { width };\n            }\n        };\n    })(),\n\n    loadImage(src, onload, onerror) {\n        const image = new Image();\n        image.onload = onload;\n        image.onerror = onerror;\n        image.src = src;\n        return image;\n    }\n};\n\nexport function setPlatformAPI(newPlatformApis: Partial) {\n    for (let key in platformApi) {\n        // Don't assign unknown methods.\n        if ((newPlatformApis as any)[key]) {\n            (platformApi as any)[key] = (newPlatformApis as any)[key];\n        }\n    }\n}\n","/* global: defineProperty */\nimport { Dictionary, ArrayLike, KeyOfDistributive } from './types';\nimport { GradientObject } from '../graphic/Gradient';\nimport { ImagePatternObject } from '../graphic/Pattern';\nimport { platformApi } from './platform';\n\n// 用于处理merge时无法遍历Date等对象的问题\nconst BUILTIN_OBJECT: Record = reduce([\n    'Function',\n    'RegExp',\n    'Date',\n    'Error',\n    'CanvasGradient',\n    'CanvasPattern',\n    // For node-canvas\n    'Image',\n    'Canvas'\n], (obj, val) => {\n    obj['[object ' + val + ']'] = true;\n    return obj;\n}, {} as Record);\n\nconst TYPED_ARRAY: Record = reduce([\n    'Int8',\n    'Uint8',\n    'Uint8Clamped',\n    'Int16',\n    'Uint16',\n    'Int32',\n    'Uint32',\n    'Float32',\n    'Float64'\n], (obj, val) => {\n    obj['[object ' + val + 'Array]'] = true;\n    return obj;\n}, {} as Record);\n\nconst objToString = Object.prototype.toString;\n\nconst arrayProto = Array.prototype;\nconst nativeForEach = arrayProto.forEach;\nconst nativeFilter = arrayProto.filter;\nconst nativeSlice = arrayProto.slice;\nconst nativeMap = arrayProto.map;\n// In case some env may redefine the global variable `Function`.\nconst ctorFunction = function () {}.constructor;\nconst protoFunction = ctorFunction ? ctorFunction.prototype : null;\nconst protoKey = '__proto__';\n\n\nlet idStart = 0x0907;\n\n/**\n * Generate unique id\n */\nexport function guid(): number {\n    return idStart++;\n}\n\nexport function logError(...args: any[]) {\n    if (typeof console !== 'undefined') {\n        console.error.apply(console, args);\n    }\n}\n/**\n * Those data types can be cloned:\n *     Plain object, Array, TypedArray, number, string, null, undefined.\n * Those data types will be assigned using the original data:\n *     BUILTIN_OBJECT\n * Instance of user defined class will be cloned to a plain object, without\n * properties in prototype.\n * Other data types is not supported (not sure what will happen).\n *\n * Caution: do not support clone Date, for performance consideration.\n * (There might be a large number of date in `series.data`).\n * So date should not be modified in and out of echarts.\n */\nexport function clone(source: T): T {\n    if (source == null || typeof source !== 'object') {\n        return source;\n    }\n\n    let result = source as any;\n    const typeStr = objToString.call(source);\n\n    if (typeStr === '[object Array]') {\n        if (!isPrimitive(source)) {\n            result = [] as any;\n            for (let i = 0, len = (source as any[]).length; i < len; i++) {\n                result[i] = clone((source as any[])[i]);\n            }\n        }\n    }\n    else if (TYPED_ARRAY[typeStr]) {\n        if (!isPrimitive(source)) {\n            /* eslint-disable-next-line */\n            const Ctor = source.constructor as typeof Float32Array;\n            if (Ctor.from) {\n                result = Ctor.from(source as Float32Array);\n            }\n            else {\n                result = new Ctor((source as Float32Array).length);\n                for (let i = 0, len = (source as Float32Array).length; i < len; i++) {\n                    result[i] = (source as Float32Array)[i];\n                }\n            }\n        }\n    }\n    else if (!BUILTIN_OBJECT[typeStr] && !isPrimitive(source) && !isDom(source)) {\n        result = {} as any;\n        for (let key in source) {\n            // Check if key is __proto__ to avoid prototype pollution\n            if (source.hasOwnProperty(key) && key !== protoKey) {\n                result[key] = clone(source[key]);\n            }\n        }\n    }\n\n    return result;\n}\n\nexport function merge<\n    T extends Dictionary,\n    S extends Dictionary\n>(target: T, source: S, overwrite?: boolean): T & S;\nexport function merge<\n    T extends any,\n    S extends any\n>(target: T, source: S, overwrite?: boolean): T | S;\nexport function merge(target: any, source: any, overwrite?: boolean): any {\n    // We should escapse that source is string\n    // and enter for ... in ...\n    if (!isObject(source) || !isObject(target)) {\n        return overwrite ? clone(source) : target;\n    }\n\n    for (let key in source) {\n        // Check if key is __proto__ to avoid prototype pollution\n        if (source.hasOwnProperty(key) && key !== protoKey) {\n            const targetProp = target[key];\n            const sourceProp = source[key];\n\n            if (isObject(sourceProp)\n                && isObject(targetProp)\n                && !isArray(sourceProp)\n                && !isArray(targetProp)\n                && !isDom(sourceProp)\n                && !isDom(targetProp)\n                && !isBuiltInObject(sourceProp)\n                && !isBuiltInObject(targetProp)\n                && !isPrimitive(sourceProp)\n                && !isPrimitive(targetProp)\n            ) {\n                // 如果需要递归覆盖,就递归调用merge\n                merge(targetProp, sourceProp, overwrite);\n            }\n            else if (overwrite || !(key in target)) {\n                // 否则只处理overwrite为true,或者在目标对象中没有此属性的情况\n                // NOTE,在 target[key] 不存在的时候也是直接覆盖\n                target[key] = clone(source[key]);\n            }\n        }\n    }\n\n    return target;\n}\n\n/**\n * @param targetAndSources The first item is target, and the rests are source.\n * @param overwrite\n * @return Merged result\n */\nexport function mergeAll(targetAndSources: any[], overwrite?: boolean): any {\n    let result = targetAndSources[0];\n    for (let i = 1, len = targetAndSources.length; i < len; i++) {\n        result = merge(result, targetAndSources[i], overwrite);\n    }\n    return result;\n}\n\nexport function extend<\n    T extends Dictionary,\n    S extends Dictionary\n>(target: T, source: S): T & S {\n    // @ts-ignore\n    if (Object.assign) {\n        // @ts-ignore\n        Object.assign(target, source);\n    }\n    else {\n        for (let key in source) {\n            // Check if key is __proto__ to avoid prototype pollution\n            if (source.hasOwnProperty(key) && key !== protoKey) {\n                (target as S & T)[key] = (source as T & S)[key];\n            }\n        }\n    }\n    return target as T & S;\n}\n\nexport function defaults<\n    T extends Dictionary,\n    S extends Dictionary\n>(target: T, source: S, overlay?: boolean): T & S {\n    const keysArr = keys(source);\n    for (let i = 0, len = keysArr.length; i < len; i++) {\n        let key = keysArr[i];\n        if ((overlay ? source[key] != null : (target as T & S)[key] == null)) {\n            (target as S & T)[key] = (source as T & S)[key];\n        }\n    }\n    return target as T & S;\n}\n\n// Expose createCanvas in util for compatibility\nexport const createCanvas = platformApi.createCanvas;\n\n/**\n * 查询数组中元素的index\n */\nexport function indexOf(array: T[] | readonly T[] | ArrayLike, value: T): number {\n    if (array) {\n        if ((array as T[]).indexOf) {\n            return (array as T[]).indexOf(value);\n        }\n        for (let i = 0, len = array.length; i < len; i++) {\n            if (array[i] === value) {\n                return i;\n            }\n        }\n    }\n    return -1;\n}\n\n/**\n * 构造类继承关系\n *\n * @param clazz 源类\n * @param baseClazz 基类\n */\nexport function inherits(clazz: Function, baseClazz: Function) {\n    const clazzPrototype = clazz.prototype;\n    function F() {}\n    F.prototype = baseClazz.prototype;\n    clazz.prototype = new (F as any)();\n\n    for (let prop in clazzPrototype) {\n        if (clazzPrototype.hasOwnProperty(prop)) {\n            clazz.prototype[prop] = clazzPrototype[prop];\n        }\n    }\n    clazz.prototype.constructor = clazz;\n    (clazz as any).superClass = baseClazz;\n}\n\nexport function mixin(target: T | Function, source: S | Function, override?: boolean) {\n    target = 'prototype' in target ? target.prototype : target;\n    source = 'prototype' in source ? source.prototype : source;\n    // If build target is ES6 class. prototype methods is not enumerable. Use getOwnPropertyNames instead\n    // TODO: Determine if source is ES6 class?\n    if (Object.getOwnPropertyNames) {\n        const keyList = Object.getOwnPropertyNames(source);\n        for (let i = 0; i < keyList.length; i++) {\n            const key = keyList[i];\n            if (key !== 'constructor') {\n                if ((override ? (source as any)[key] != null : (target as any)[key] == null)) {\n                    (target as any)[key] = (source as any)[key];\n                }\n            }\n        }\n    }\n    else {\n        defaults(target, source, override);\n    }\n}\n\n/**\n * Consider typed array.\n * @param data\n */\nexport function isArrayLike(data: any): data is ArrayLike {\n    if (!data) {\n        return false;\n    }\n    if (typeof data === 'string') {\n        return false;\n    }\n    return typeof data.length === 'number';\n}\n\n/**\n * 数组或对象遍历\n */\nexport function each | any[] | readonly any[] | ArrayLike, Context>(\n    arr: I,\n    cb: (\n        this: Context,\n        // Use unknown to avoid to infer to \"any\", which may disable typo check.\n        value: I extends (infer T)[] | readonly (infer T)[] | ArrayLike ? T\n            // Use Dictionary may cause infer fail when I is an interface.\n            // So here use a Record to infer type.\n            : I extends Dictionary ? I extends Record ? T : unknown : unknown,\n        index?: I extends any[] | readonly any[] | ArrayLike ? number : keyof I & string,  // keyof Dictionary will return number | string\n        arr?: I\n    ) => void,\n    context?: Context\n) {\n    if (!(arr && cb)) {\n        return;\n    }\n    if ((arr as any).forEach && (arr as any).forEach === nativeForEach) {\n        (arr as any).forEach(cb, context);\n    }\n    else if (arr.length === +arr.length) {\n        for (let i = 0, len = arr.length; i < len; i++) {\n            // FIXME: should the elided item be travelled? like `[33,,55]`.\n            cb.call(context, (arr as any[])[i], i as any, arr);\n        }\n    }\n    else {\n        for (let key in arr) {\n            if (arr.hasOwnProperty(key)) {\n                cb.call(context, (arr as Dictionary)[key], key as any, arr);\n            }\n        }\n    }\n}\n\n/**\n * Array mapping.\n * @typeparam T Type in Array\n * @typeparam R Type Returned\n * @return Must be an array.\n */\nexport function map(\n    arr: readonly T[],\n    cb: (this: Context, val: T, index?: number, arr?: readonly T[]) => R,\n    context?: Context\n): R[] {\n    // Take the same behavior with lodash when !arr and !cb,\n    // which might be some common sense.\n    if (!arr) {\n        return [];\n    }\n    if (!cb) {\n        return slice(arr) as unknown[] as R[];\n    }\n    if (arr.map && arr.map === nativeMap) {\n        return arr.map(cb, context);\n    }\n    else {\n        const result = [];\n        for (let i = 0, len = arr.length; i < len; i++) {\n            // FIXME: should the elided item be travelled, like `[33,,55]`.\n            result.push(cb.call(context, arr[i], i, arr));\n        }\n        return result;\n    }\n}\n\nexport function reduce(\n    arr: readonly T[],\n    cb: (this: Context, previousValue: S, currentValue: T, currentIndex?: number, arr?: readonly T[]) => S,\n    memo?: S,\n    context?: Context\n): S {\n    if (!(arr && cb)) {\n        return;\n    }\n    for (let i = 0, len = arr.length; i < len; i++) {\n        memo = cb.call(context, memo, arr[i], i, arr);\n    }\n    return memo;\n}\n\n/**\n * Array filtering.\n * @return Must be an array.\n */\nexport function filter(\n    arr: readonly T[],\n    cb: (this: Context, value: T, index: number, arr: readonly T[]) => boolean,\n    context?: Context\n): T[] {\n    // Take the same behavior with lodash when !arr and !cb,\n    // which might be some common sense.\n    if (!arr) {\n        return [];\n    }\n    if (!cb) {\n        return slice(arr);\n    }\n    if (arr.filter && arr.filter === nativeFilter) {\n        return arr.filter(cb, context);\n    }\n    else {\n        const result = [];\n        for (let i = 0, len = arr.length; i < len; i++) {\n            // FIXME: should the elided items be travelled? like `[33,,55]`.\n            if (cb.call(context, arr[i], i, arr)) {\n                result.push(arr[i]);\n            }\n        }\n        return result;\n    }\n}\n\n/**\n * 数组项查找\n */\nexport function find(\n    arr: readonly T[],\n    cb: (this: Context, value: T, index?: number, arr?: readonly T[]) => boolean,\n    context?: Context\n): T {\n    if (!(arr && cb)) {\n        return;\n    }\n    for (let i = 0, len = arr.length; i < len; i++) {\n        if (cb.call(context, arr[i], i, arr)) {\n            return arr[i];\n        }\n    }\n}\n\n/**\n * Get all object keys\n *\n * Will return an empty array if obj is null/undefined\n */\nexport function keys(obj: T): (KeyOfDistributive & string)[] {\n    if (!obj) {\n        return [];\n    }\n    // Return type should be `keyof T` but exclude `number`, becuase\n    // `Object.keys` only return string rather than `number | string`.\n    type TKeys = KeyOfDistributive & string;\n    if (Object.keys) {\n        return Object.keys(obj) as TKeys[];\n    }\n    let keyList: TKeys[] = [];\n    for (let key in obj) {\n        if (obj.hasOwnProperty(key)) {\n            keyList.push(key as any);\n        }\n    }\n    return keyList;\n}\n\n// Remove this type in returned function. Or it will conflicts wicth callback with given context. Like Eventful.\n// According to lib.es5.d.ts\n/* eslint-disable max-len*/\nexport type Bind1 = F extends (this: Ctx, ...args: infer A) => infer R ? (...args: A) => R : unknown;\nexport type Bind2 = F extends (this: Ctx, a: T1, ...args: infer A) => infer R ? (...args: A) => R : unknown;\nexport type Bind3 = F extends (this: Ctx, a: T1, b: T2, ...args: infer A) => infer R ? (...args: A) => R : unknown;\nexport type Bind4 = F extends (this: Ctx, a: T1, b: T2, c: T3, ...args: infer A) => infer R ? (...args: A) => R : unknown;\nexport type Bind5 = F extends (this: Ctx, a: T1, b: T2, c: T3, d: T4, ...args: infer A) => infer R ? (...args: A) => R : unknown;\ntype BindFunc = (this: Ctx, ...arg: any[]) => any\n\ninterface FunctionBind {\n    , Ctx>(func: F, ctx: Ctx): Bind1\n    , Ctx, T1 extends Parameters[0]>(func: F, ctx: Ctx, a: T1): Bind2\n    , Ctx, T1 extends Parameters[0], T2 extends Parameters[1]>(func: F, ctx: Ctx, a: T1, b: T2): Bind3\n    , Ctx, T1 extends Parameters[0], T2 extends Parameters[1], T3 extends Parameters[2]>(func: F, ctx: Ctx, a: T1, b: T2, c: T3): Bind4\n    , Ctx, T1 extends Parameters[0], T2 extends Parameters[1], T3 extends Parameters[2], T4 extends Parameters[3]>(func: F, ctx: Ctx, a: T1, b: T2, c: T3, d: T4): Bind5\n}\nfunction bindPolyfill any>(\n    func: Fn, context: Ctx, ...args: any[]\n): (...args: Parameters) => ReturnType {\n    return function (this: Ctx) {\n        return func.apply(context, args.concat(nativeSlice.call(arguments)));\n    };\n}\nexport const bind: FunctionBind = (protoFunction && isFunction(protoFunction.bind))\n    ? protoFunction.call.bind(protoFunction.bind)\n    : bindPolyfill;\n\nexport type Curry1 = F extends (a: T1, ...args: infer A) => infer R ? (...args: A) => R : unknown;\nexport type Curry2 = F extends (a: T1, b: T2, ...args: infer A) => infer R ? (...args: A) => R : unknown;\nexport type Curry3 = F extends (a: T1, b: T2, c: T3, ...args: infer A) => infer R ? (...args: A) => R : unknown;\nexport type Curry4 = F extends (a: T1, b: T2, c: T3, d: T4, ...args: infer A) => infer R ? (...args: A) => R : unknown;\ntype CurryFunc = (...arg: any[]) => any\n\nfunction curry[0]>(func: F, a: T1): Curry1\nfunction curry[0], T2 extends Parameters[1]>(func: F, a: T1, b: T2): Curry2\nfunction curry[0], T2 extends Parameters[1], T3 extends Parameters[2]>(func: F, a: T1, b: T2, c: T3): Curry3\nfunction curry[0], T2 extends Parameters[1], T3 extends Parameters[2], T4 extends Parameters[3]>(func: F, a: T1, b: T2, c: T3, d: T4): Curry4\nfunction curry(func: Function, ...args: any[]): Function {\n    return function (this: any) {\n        return func.apply(this, args.concat(nativeSlice.call(arguments)));\n    };\n}\nexport {curry};\n/* eslint-enable max-len*/\n\nexport function isArray(value: any): value is any[] {\n    if (Array.isArray) {\n        return Array.isArray(value);\n    }\n    return objToString.call(value) === '[object Array]';\n}\n\nexport function isFunction(value: any): value is Function {\n    return typeof value === 'function';\n}\n\nexport function isString(value: any): value is string {\n    // Faster than `objToString.call` several times in chromium and webkit.\n    // And `new String()` is rarely used.\n    return typeof value === 'string';\n}\n\nexport function isStringSafe(value: any): value is string {\n    return objToString.call(value) === '[object String]';\n}\n\nexport function isNumber(value: any): value is number {\n    // Faster than `objToString.call` several times in chromium and webkit.\n    // And `new Number()` is rarely used.\n    return typeof value === 'number';\n}\n\n// Usage: `isObject(xxx)` or `isObject(SomeType)(xxx)`\n// Generic T can be used to avoid \"ts type gruards\" casting the `value` from its original\n// type `Object` implicitly so that loose its original type info in the subsequent code.\nexport function isObject(value: T): value is (object & T) {\n    // Avoid a V8 JIT bug in Chrome 19-20.\n    // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n    const type = typeof value;\n    return type === 'function' || (!!value && type === 'object');\n}\n\nexport function isBuiltInObject(value: any): boolean {\n    return !!BUILTIN_OBJECT[objToString.call(value)];\n}\n\nexport function isTypedArray(value: any): boolean {\n    return !!TYPED_ARRAY[objToString.call(value)];\n}\n\nexport function isDom(value: any): value is HTMLElement {\n    return typeof value === 'object'\n        && typeof value.nodeType === 'number'\n        && typeof value.ownerDocument === 'object';\n}\n\nexport function isGradientObject(value: any): value is GradientObject {\n    return (value as GradientObject).colorStops != null;\n}\n\nexport function isImagePatternObject(value: any): value is ImagePatternObject {\n    return (value as ImagePatternObject).image != null;\n}\n\nexport function isRegExp(value: unknown): value is RegExp {\n    return objToString.call(value) === '[object RegExp]';\n}\n\n/**\n * Whether is exactly NaN. Notice isNaN('a') returns true.\n */\nexport function eqNaN(value: any): boolean {\n    /* eslint-disable-next-line no-self-compare */\n    return value !== value;\n}\n\n/**\n * If value1 is not null, then return value1, otherwise judget rest of values.\n * Low performance.\n * @return Final value\n */\nexport function retrieve(...args: T[]): T {\n    for (let i = 0, len = args.length; i < len; i++) {\n        if (args[i] != null) {\n            return args[i];\n        }\n    }\n}\n\nexport function retrieve2(value0: T, value1: R): T | R {\n    return value0 != null\n        ? value0\n        : value1;\n}\n\nexport function retrieve3(value0: T, value1: R, value2: W): T | R | W {\n    return value0 != null\n        ? value0\n        : value1 != null\n        ? value1\n        : value2;\n}\n\ntype SliceParams = Parameters;\nexport function slice(arr: ArrayLike, ...args: SliceParams): T[] {\n    return nativeSlice.apply(arr, args as any[]);\n}\n\n/**\n * Normalize css liked array configuration\n * e.g.\n *  3 => [3, 3, 3, 3]\n *  [4, 2] => [4, 2, 4, 2]\n *  [4, 3, 2] => [4, 3, 2, 3]\n */\nexport function normalizeCssArray(val: number | number[]) {\n    if (typeof (val) === 'number') {\n        return [val, val, val, val];\n    }\n    const len = val.length;\n    if (len === 2) {\n        // vertical | horizontal\n        return [val[0], val[1], val[0], val[1]];\n    }\n    else if (len === 3) {\n        // top | horizontal | bottom\n        return [val[0], val[1], val[2], val[1]];\n    }\n    return val;\n}\n\nexport function assert(condition: any, message?: string) {\n    if (!condition) {\n        throw new Error(message);\n    }\n}\n\n/**\n * @param str string to be trimmed\n * @return trimmed string\n */\nexport function trim(str: string): string {\n    if (str == null) {\n        return null;\n    }\n    else if (typeof str.trim === 'function') {\n        return str.trim();\n    }\n    else {\n        return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n    }\n}\n\nconst primitiveKey = '__ec_primitive__';\n/**\n * Set an object as primitive to be ignored traversing children in clone or merge\n */\nexport function setAsPrimitive(obj: any) {\n    obj[primitiveKey] = true;\n}\n\nexport function isPrimitive(obj: any): boolean {\n    return obj[primitiveKey];\n}\n\ninterface MapInterface {\n    delete(key: KEY): boolean;\n    has(key: KEY): boolean;\n    get(key: KEY): T | undefined;\n    set(key: KEY, value: T): this;\n    keys(): KEY[];\n    forEach(callback: (value: T, key: KEY) => void): void;\n}\n\nclass MapPolyfill implements MapInterface {\n    private data: Record = {} as Record;\n\n    delete(key: KEY): boolean {\n        const existed = this.has(key);\n        if (existed) {\n            delete this.data[key];\n        }\n        return existed;\n    }\n    has(key: KEY): boolean {\n        return this.data.hasOwnProperty(key);\n    }\n    get(key: KEY): T | undefined {\n        return this.data[key];\n    }\n    set(key: KEY, value: T): this {\n        this.data[key] = value;\n        return this;\n    }\n    keys(): KEY[] {\n        return keys(this.data);\n    }\n    forEach(callback: (value: T, key: KEY) => void): void {\n        // This is a potential performance bottleneck, see details in\n        // https://github.com/ecomfe/zrender/issues/965, however it is now\n        // less likely to occur as we default to native maps when possible.\n        const data = this.data;\n        for (const key in data) {\n            if (data.hasOwnProperty(key)) {\n                callback(data[key], key);\n            }\n        }\n    }\n}\n\n// We want to use native Map if it is available, but we do not want to polyfill the global scope\n// in case users ship their own polyfills or patch the native map object in any way.\nconst isNativeMapSupported = typeof Map === 'function';\nfunction maybeNativeMap(): MapInterface {\n    // Map may be a native class if we are running in an ES6 compatible environment.\n    // eslint-disable-next-line\n    return (isNativeMapSupported ? new Map() : new MapPolyfill()) as MapInterface;\n}\n\n/**\n * @constructor\n * @param {Object} obj\n */\nexport class HashMap {\n    data: MapInterface\n\n    constructor(obj?: HashMap | { [key in KEY]?: T } | KEY[]) {\n        const isArr = isArray(obj);\n        // Key should not be set on this, otherwise\n        // methods get/set/... may be overridden.\n        this.data = maybeNativeMap();\n        const thisMap = this;\n\n        (obj instanceof HashMap)\n            ? obj.each(visit)\n            : (obj && each(obj, visit));\n\n        function visit(value: any, key: any) {\n            isArr ? thisMap.set(value, key) : thisMap.set(key, value);\n        }\n    }\n\n    // `hasKey` instead of `has` for potential misleading.\n    hasKey(key: KEY): boolean {\n        return this.data.has(key);\n    }\n    get(key: KEY): T {\n        return this.data.get(key);\n    }\n    set(key: KEY, value: T): T {\n        // Comparing with invocation chaining, `return value` is more commonly\n        // used in this case: `const someVal = map.set('a', genVal());`\n        this.data.set(key, value);\n        return value;\n    }\n    // Although util.each can be performed on this hashMap directly, user\n    // should not use the exposed keys, who are prefixed.\n    each(\n        cb: (this: Context, value?: T, key?: KEY) => void,\n        context?: Context\n    ) {\n        this.data.forEach((value, key) => {\n            cb.call(context, value, key);\n        });\n    }\n    keys(): KEY[] {\n        const keys = this.data.keys();\n        return isNativeMapSupported\n            // Native map returns an iterator so we need to convert it to an array\n            ? Array.from(keys)\n            : keys;\n    }\n    // Do not use this method if performance sensitive.\n    removeKey(key: KEY): void {\n        this.data.delete(key);\n    }\n}\n\nexport function createHashMap(\n    obj?: HashMap | { [key in KEY]?: T } | KEY[]\n) {\n    return new HashMap(obj);\n}\n\nexport function concatArray(a: ArrayLike, b: ArrayLike): ArrayLike {\n    const newArray = new (a as any).constructor(a.length + b.length);\n    for (let i = 0; i < a.length; i++) {\n        newArray[i] = a[i];\n    }\n    const offset = a.length;\n    for (let i = 0; i < b.length; i++) {\n        newArray[i + offset] = b[i];\n    }\n    return newArray;\n}\n\nexport function createObject(proto?: object, properties?: T): T {\n    // Performance of Object.create\n    // https://jsperf.com/style-strategy-proto-or-others\n    let obj: T;\n    if (Object.create) {\n        obj = Object.create(proto);\n    }\n    else {\n        const StyleCtor = function () {};\n        StyleCtor.prototype = proto;\n        obj = new (StyleCtor as any)();\n    }\n    if (properties) {\n        extend(obj, properties);\n    }\n\n    return obj;\n}\n\n\nexport function disableUserSelect(dom: HTMLElement) {\n    const domStyle = dom.style;\n    domStyle.webkitUserSelect = 'none';\n    domStyle.userSelect = 'none';\n    // @ts-ignore\n    domStyle.webkitTapHighlightColor = 'rgba(0,0,0,0)';\n    (domStyle as any)['-webkit-touch-callout'] = 'none';\n}\n\nexport function hasOwn(own: object, prop: string): boolean {\n    return own.hasOwnProperty(prop);\n}\n\nexport function noop() {}\n\nexport const RADIAN_TO_DEGREE = 180 / Math.PI;","/**\r\n * @deprecated\r\n * Use zrender.Point class instead\r\n */\r\nimport { MatrixArray } from './matrix';\r\n\r\n/* global Float32Array */\r\n\r\n// const ArrayCtor = typeof Float32Array === 'undefined'\r\n//     ? Array\r\n//     : Float32Array;\r\n\r\nexport type VectorArray = number[]\r\n/**\r\n * 创建一个向量\r\n */\r\nexport function create(x?: number, y?: number): VectorArray {\r\n    if (x == null) {\r\n        x = 0;\r\n    }\r\n    if (y == null) {\r\n        y = 0;\r\n    }\r\n    return [x, y];\r\n}\r\n\r\n/**\r\n * 复制向量数据\r\n */\r\nexport function copy(out: T, v: VectorArray): T {\r\n    out[0] = v[0];\r\n    out[1] = v[1];\r\n    return out;\r\n}\r\n\r\n/**\r\n * 克隆一个向量\r\n */\r\nexport function clone(v: VectorArray): VectorArray {\r\n    return [v[0], v[1]];\r\n}\r\n\r\n/**\r\n * 设置向量的两个项\r\n */\r\nexport function set(out: T, a: number, b: number): T {\r\n    out[0] = a;\r\n    out[1] = b;\r\n    return out;\r\n}\r\n\r\n/**\r\n * 向量相加\r\n */\r\nexport function add(out: T, v1: VectorArray, v2: VectorArray): T {\r\n    out[0] = v1[0] + v2[0];\r\n    out[1] = v1[1] + v2[1];\r\n    return out;\r\n}\r\n\r\n/**\r\n * 向量缩放后相加\r\n */\r\nexport function scaleAndAdd(out: T, v1: VectorArray, v2: VectorArray, a: number): T {\r\n    out[0] = v1[0] + v2[0] * a;\r\n    out[1] = v1[1] + v2[1] * a;\r\n    return out;\r\n}\r\n\r\n/**\r\n * 向量相减\r\n */\r\nexport function sub(out: T, v1: VectorArray, v2: VectorArray): T {\r\n    out[0] = v1[0] - v2[0];\r\n    out[1] = v1[1] - v2[1];\r\n    return out;\r\n}\r\n\r\n/**\r\n * 向量长度\r\n */\r\nexport function len(v: VectorArray): number {\r\n    return Math.sqrt(lenSquare(v));\r\n}\r\nexport const length = len;\r\n\r\n/**\r\n * 向量长度平方\r\n */\r\nexport function lenSquare(v: VectorArray): number {\r\n    return v[0] * v[0] + v[1] * v[1];\r\n}\r\nexport const lengthSquare = lenSquare;\r\n\r\n/**\r\n * 向量乘法\r\n */\r\nexport function mul(out: T, v1: VectorArray, v2: VectorArray): T {\r\n    out[0] = v1[0] * v2[0];\r\n    out[1] = v1[1] * v2[1];\r\n    return out;\r\n}\r\n\r\n/**\r\n * 向量除法\r\n */\r\nexport function div(out: T, v1: VectorArray, v2: VectorArray): T {\r\n    out[0] = v1[0] / v2[0];\r\n    out[1] = v1[1] / v2[1];\r\n    return out;\r\n}\r\n\r\n/**\r\n * 向量点乘\r\n */\r\nexport function dot(v1: VectorArray, v2: VectorArray) {\r\n    return v1[0] * v2[0] + v1[1] * v2[1];\r\n}\r\n\r\n/**\r\n * 向量缩放\r\n */\r\nexport function scale(out: T, v: VectorArray, s: number): T {\r\n    out[0] = v[0] * s;\r\n    out[1] = v[1] * s;\r\n    return out;\r\n}\r\n\r\n/**\r\n * 向量归一化\r\n */\r\nexport function normalize(out: T, v: VectorArray): T {\r\n    const d = len(v);\r\n    if (d === 0) {\r\n        out[0] = 0;\r\n        out[1] = 0;\r\n    }\r\n    else {\r\n        out[0] = v[0] / d;\r\n        out[1] = v[1] / d;\r\n    }\r\n    return out;\r\n}\r\n\r\n/**\r\n * 计算向量间距离\r\n */\r\nexport function distance(v1: VectorArray, v2: VectorArray): number {\r\n    return Math.sqrt(\r\n        (v1[0] - v2[0]) * (v1[0] - v2[0])\r\n        + (v1[1] - v2[1]) * (v1[1] - v2[1])\r\n    );\r\n}\r\nexport const dist = distance;\r\n\r\n/**\r\n * 向量距离平方\r\n */\r\nexport function distanceSquare(v1: VectorArray, v2: VectorArray): number {\r\n    return (v1[0] - v2[0]) * (v1[0] - v2[0])\r\n        + (v1[1] - v2[1]) * (v1[1] - v2[1]);\r\n}\r\nexport const distSquare = distanceSquare;\r\n\r\n/**\r\n * 求负向量\r\n */\r\nexport function negate(out: T, v: VectorArray): T {\r\n    out[0] = -v[0];\r\n    out[1] = -v[1];\r\n    return out;\r\n}\r\n\r\n/**\r\n * 插值两个点\r\n */\r\nexport function lerp(out: T, v1: VectorArray, v2: VectorArray, t: number): T {\r\n    out[0] = v1[0] + t * (v2[0] - v1[0]);\r\n    out[1] = v1[1] + t * (v2[1] - v1[1]);\r\n    return out;\r\n}\r\n\r\n/**\r\n * 矩阵左乘向量\r\n */\r\nexport function applyTransform(out: T, v: VectorArray, m: MatrixArray): T {\r\n    const x = v[0];\r\n    const y = v[1];\r\n    out[0] = m[0] * x + m[2] * y + m[4];\r\n    out[1] = m[1] * x + m[3] * y + m[5];\r\n    return out;\r\n}\r\n\r\n/**\r\n * 求两个向量最小值\r\n */\r\nexport function min(out: T, v1: VectorArray, v2: VectorArray): T {\r\n    out[0] = Math.min(v1[0], v2[0]);\r\n    out[1] = Math.min(v1[1], v2[1]);\r\n    return out;\r\n}\r\n\r\n/**\r\n * 求两个向量最大值\r\n */\r\nexport function max(out: T, v1: VectorArray, v2: VectorArray): T {\r\n    out[0] = Math.max(v1[0], v2[0]);\r\n    out[1] = Math.max(v1[1], v2[1]);\r\n    return out;\r\n}\r\n","import Handler from '../Handler';\r\nimport Element, { ElementEvent } from '../Element';\r\nimport Displayable from '../graphic/Displayable';\r\n\r\nclass Param {\r\n\r\n    target: Element\r\n    topTarget: Element\r\n\r\n    constructor(target: Element, e?: ElementEvent) {\r\n        this.target = target;\r\n        this.topTarget = e && e.topTarget;\r\n    }\r\n}\r\n\r\n// FIXME Draggable on element which has parent rotation or scale\r\nexport default class Draggable {\r\n\r\n    handler: Handler\r\n\r\n    _draggingTarget: Element\r\n    _dropTarget: Element\r\n\r\n    _x: number\r\n    _y: number\r\n\r\n    constructor(handler: Handler) {\r\n        this.handler = handler;\r\n\r\n        handler.on('mousedown', this._dragStart, this);\r\n        handler.on('mousemove', this._drag, this);\r\n        handler.on('mouseup', this._dragEnd, this);\r\n        // `mosuemove` and `mouseup` can be continue to fire when dragging.\r\n        // See [DRAG_OUTSIDE] in `Handler.js`. So we do not need to trigger\r\n        // `_dragEnd` when globalout. That would brings better user experience.\r\n        // this.on('globalout', this._dragEnd, this);\r\n\r\n        // this._dropTarget = null;\r\n        // this._draggingTarget = null;\r\n\r\n        // this._x = 0;\r\n        // this._y = 0;\r\n    }\r\n\r\n    _dragStart(e: ElementEvent) {\r\n        let draggingTarget = e.target;\r\n        // Find if there is draggable in the ancestor\r\n        while (draggingTarget && !draggingTarget.draggable) {\r\n            draggingTarget = draggingTarget.parent || draggingTarget.__hostTarget;\r\n        }\r\n        if (draggingTarget) {\r\n            this._draggingTarget = draggingTarget;\r\n            draggingTarget.dragging = true;\r\n            this._x = e.offsetX;\r\n            this._y = e.offsetY;\r\n\r\n            this.handler.dispatchToElement(\r\n                new Param(draggingTarget, e), 'dragstart', e.event\r\n            );\r\n        }\r\n    }\r\n\r\n    _drag(e: ElementEvent) {\r\n        const draggingTarget = this._draggingTarget;\r\n        if (draggingTarget) {\r\n\r\n            const x = e.offsetX;\r\n            const y = e.offsetY;\r\n\r\n            const dx = x - this._x;\r\n            const dy = y - this._y;\r\n            this._x = x;\r\n            this._y = y;\r\n\r\n            draggingTarget.drift(dx, dy, e);\r\n            this.handler.dispatchToElement(\r\n                new Param(draggingTarget, e), 'drag', e.event\r\n            );\r\n\r\n            const dropTarget = this.handler.findHover(\r\n                x, y, draggingTarget as Displayable // PENDING\r\n            ).target;\r\n            const lastDropTarget = this._dropTarget;\r\n            this._dropTarget = dropTarget;\r\n\r\n            if (draggingTarget !== dropTarget) {\r\n                if (lastDropTarget && dropTarget !== lastDropTarget) {\r\n                    this.handler.dispatchToElement(\r\n                        new Param(lastDropTarget, e), 'dragleave', e.event\r\n                    );\r\n                }\r\n                if (dropTarget && dropTarget !== lastDropTarget) {\r\n                    this.handler.dispatchToElement(\r\n                        new Param(dropTarget, e), 'dragenter', e.event\r\n                    );\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    _dragEnd(e: ElementEvent) {\r\n        const draggingTarget = this._draggingTarget;\r\n\r\n        if (draggingTarget) {\r\n            draggingTarget.dragging = false;\r\n        }\r\n\r\n        this.handler.dispatchToElement(new Param(draggingTarget, e), 'dragend', e.event);\r\n\r\n        if (this._dropTarget) {\r\n            this.handler.dispatchToElement(new Param(this._dropTarget, e), 'drop', e.event);\r\n        }\r\n\r\n        this._draggingTarget = null;\r\n        this._dropTarget = null;\r\n    }\r\n\r\n}","import { Dictionary, WithThisType } from './types';\r\n\r\n// Return true to cancel bubble\r\nexport type EventCallbackSingleParam = EvtParam extends any\r\n    ? (params: EvtParam) => boolean | void\r\n    : never\r\n\r\nexport type EventCallback = EvtParams extends any[]\r\n    ? (...args: EvtParams) => boolean | void\r\n    : never\r\nexport type EventQuery = string | Object\r\n\r\ntype CbThis = unknown extends Ctx ? Impl : Ctx;\r\n\r\ntype EventHandler = {\r\n    h: EventCallback\r\n    ctx: CbThis\r\n    query: EventQuery\r\n\r\n    callAtLast: boolean\r\n}\r\n\r\ntype DefaultEventDefinition = Dictionary>;\r\n\r\nexport interface EventProcessor {\r\n    normalizeQuery?: (query: EventQuery) => EventQuery\r\n    filter?: (eventType: keyof EvtDef, query: EventQuery) => boolean\r\n    afterTrigger?: (eventType: keyof EvtDef) => void\r\n}\r\n\r\n/**\r\n * Event dispatcher.\r\n *\r\n * Event can be defined in EvtDef to enable type check. For example:\r\n * ```ts\r\n * interface FooEvents {\r\n *     // key: event name, value: the first event param in `trigger` and `callback`.\r\n *     myevent: {\r\n *        aa: string;\r\n *        bb: number;\r\n *     };\r\n * }\r\n * class Foo extends Eventful {\r\n *     fn() {\r\n *         // Type check of event name and the first event param is enabled here.\r\n *         this.trigger('myevent', {aa: 'xx', bb: 3});\r\n *     }\r\n * }\r\n * let foo = new Foo();\r\n * // Type check of event name and the first event param is enabled here.\r\n * foo.on('myevent', (eventParam) => { ... });\r\n * ```\r\n *\r\n * @param eventProcessor The object eventProcessor is the scope when\r\n *        `eventProcessor.xxx` called.\r\n * @param eventProcessor.normalizeQuery\r\n *        param: {string|Object} Raw query.\r\n *        return: {string|Object} Normalized query.\r\n * @param eventProcessor.filter Event will be dispatched only\r\n *        if it returns `true`.\r\n *        param: {string} eventType\r\n *        param: {string|Object} query\r\n *        return: {boolean}\r\n * @param eventProcessor.afterTrigger Called after all handlers called.\r\n *        param: {string} eventType\r\n */\r\nexport default class Eventful {\r\n\r\n    private _$handlers: Dictionary[]>\r\n\r\n    protected _$eventProcessor: EventProcessor\r\n\r\n    constructor(eventProcessors?: EventProcessor) {\r\n        if (eventProcessors) {\r\n            this._$eventProcessor = eventProcessors;\r\n        }\r\n    }\r\n\r\n    on(\r\n        event: EvtNm,\r\n        handler: WithThisType>,\r\n        context?: Ctx\r\n    ): this\r\n    on(\r\n        event: EvtNm,\r\n        query: EventQuery,\r\n        handler: WithThisType>,\r\n        context?: Ctx\r\n    ): this\r\n    /**\r\n     * Bind a handler.\r\n     *\r\n     * @param event The event name.\r\n     * @param Condition used on event filter.\r\n     * @param handler The event handler.\r\n     * @param context\r\n     */\r\n    on(\r\n        event: EvtNm,\r\n        query: EventQuery | WithThisType, CbThis>,\r\n        handler?: WithThisType, CbThis> | Ctx,\r\n        context?: Ctx\r\n    ): this {\r\n        if (!this._$handlers) {\r\n            this._$handlers = {};\r\n        }\r\n\r\n        const _h = this._$handlers;\r\n\r\n        if (typeof query === 'function') {\r\n            context = handler as Ctx;\r\n            handler = query as (...args: any) => any;\r\n            query = null;\r\n        }\r\n\r\n        if (!handler || !event) {\r\n            return this;\r\n        }\r\n\r\n        const eventProcessor = this._$eventProcessor;\r\n        if (query != null && eventProcessor && eventProcessor.normalizeQuery) {\r\n            query = eventProcessor.normalizeQuery(query);\r\n        }\r\n\r\n        if (!_h[event as string]) {\r\n            _h[event as string] = [];\r\n        }\r\n\r\n        for (let i = 0; i < _h[event as string].length; i++) {\r\n            if (_h[event as string][i].h === handler) {\r\n                return this;\r\n            }\r\n        }\r\n\r\n        const wrap: EventHandler = {\r\n            h: handler as EventCallback,\r\n            query: query,\r\n            ctx: (context || this) as CbThis,\r\n            // FIXME\r\n            // Do not publish this feature util it is proved that it makes sense.\r\n            callAtLast: (handler as any).zrEventfulCallAtLast\r\n        };\r\n\r\n        const lastIndex = _h[event as string].length - 1;\r\n        const lastWrap = _h[event as string][lastIndex];\r\n        (lastWrap && lastWrap.callAtLast)\r\n            ? _h[event as string].splice(lastIndex, 0, wrap)\r\n            : _h[event as string].push(wrap);\r\n\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Whether any handler has bound.\r\n     */\r\n    isSilent(eventName: keyof EvtDef): boolean {\r\n        const _h = this._$handlers;\r\n        return !_h || !_h[eventName as string] || !_h[eventName as string].length;\r\n    }\r\n\r\n    /**\r\n     * Unbind a event.\r\n     *\r\n     * @param eventType The event name.\r\n     *        If no `event` input, \"off\" all listeners.\r\n     * @param handler The event handler.\r\n     *        If no `handler` input, \"off\" all listeners of the `event`.\r\n     */\r\n    off(eventType?: keyof EvtDef, handler?: Function): this {\r\n        const _h = this._$handlers;\r\n\r\n        if (!_h) {\r\n            return this;\r\n        }\r\n\r\n        if (!eventType) {\r\n            this._$handlers = {};\r\n            return this;\r\n        }\r\n\r\n        if (handler) {\r\n            if (_h[eventType as string]) {\r\n                const newList = [];\r\n                for (let i = 0, l = _h[eventType as string].length; i < l; i++) {\r\n                    if (_h[eventType as string][i].h !== handler) {\r\n                        newList.push(_h[eventType as string][i]);\r\n                    }\r\n                }\r\n                _h[eventType as string] = newList;\r\n            }\r\n\r\n            if (_h[eventType as string] && _h[eventType as string].length === 0) {\r\n                delete _h[eventType as string];\r\n            }\r\n        }\r\n        else {\r\n            delete _h[eventType as string];\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Dispatch a event.\r\n     *\r\n     * @param {string} eventType The event name.\r\n     */\r\n    trigger(\r\n        eventType: EvtNm,\r\n        ...args: Parameters\r\n    ): this {\r\n        if (!this._$handlers) {\r\n            return this;\r\n        }\r\n\r\n        const _h = this._$handlers[eventType as string];\r\n        const eventProcessor = this._$eventProcessor;\r\n\r\n        if (_h) {\r\n            const argLen = args.length;\r\n\r\n            const len = _h.length;\r\n            for (let i = 0; i < len; i++) {\r\n                const hItem = _h[i];\r\n                if (eventProcessor\r\n                    && eventProcessor.filter\r\n                    && hItem.query != null\r\n                    && !eventProcessor.filter(eventType, hItem.query)\r\n                ) {\r\n                    continue;\r\n                }\r\n\r\n                // Optimize advise from backbone\r\n                switch (argLen) {\r\n                    case 0:\r\n                        hItem.h.call(hItem.ctx);\r\n                        break;\r\n                    case 1:\r\n                        hItem.h.call(hItem.ctx, args[0]);\r\n                        break;\r\n                    case 2:\r\n                        hItem.h.call(hItem.ctx, args[0], args[1]);\r\n                        break;\r\n                    default:\r\n                        // have more than 2 given arguments\r\n                        hItem.h.apply(hItem.ctx, args);\r\n                        break;\r\n                }\r\n            }\r\n        }\r\n\r\n        eventProcessor && eventProcessor.afterTrigger\r\n            && eventProcessor.afterTrigger(eventType);\r\n\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Dispatch a event with context, which is specified at the last parameter.\r\n     *\r\n     * @param {string} type The event name.\r\n     */\r\n    triggerWithContext(type: keyof EvtDef, ...args: any[]): this {\r\n        if (!this._$handlers) {\r\n            return this;\r\n        }\r\n\r\n        const _h = this._$handlers[type as string];\r\n        const eventProcessor = this._$eventProcessor;\r\n\r\n        if (_h) {\r\n            const argLen = args.length;\r\n            const ctx = args[argLen - 1];\r\n\r\n            const len = _h.length;\r\n            for (let i = 0; i < len; i++) {\r\n                const hItem = _h[i];\r\n                if (eventProcessor\r\n                    && eventProcessor.filter\r\n                    && hItem.query != null\r\n                    && !eventProcessor.filter(type, hItem.query)\r\n                ) {\r\n                    continue;\r\n                }\r\n\r\n                // Optimize advise from backbone\r\n                switch (argLen) {\r\n                    case 0:\r\n                        hItem.h.call(ctx);\r\n                        break;\r\n                    case 1:\r\n                        hItem.h.call(ctx, args[0]);\r\n                        break;\r\n                    case 2:\r\n                        hItem.h.call(ctx, args[0], args[1]);\r\n                        break;\r\n                    default:\r\n                        // have more than 2 given arguments\r\n                        hItem.h.apply(ctx, args.slice(1, argLen - 1));\r\n                        break;\r\n                }\r\n            }\r\n        }\r\n\r\n        eventProcessor && eventProcessor.afterTrigger\r\n            && eventProcessor.afterTrigger(type);\r\n\r\n        return this;\r\n    }\r\n\r\n}\r\n","/**\r\n * The algoritm is learnt from\r\n * https://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\r\n * And we made some optimization for matrix inversion.\r\n * Other similar approaches:\r\n * \"cv::getPerspectiveTransform\", \"Direct Linear Transformation\".\r\n */\r\n\r\nconst LN2 = Math.log(2);\r\n\r\nfunction determinant(\r\n    rows: number[][],\r\n    rank: number,\r\n    rowStart: number,\r\n    rowMask: number,\r\n    colMask: number,\r\n    detCache: {[key: string]: number}\r\n) {\r\n    const cacheKey = rowMask + '-' + colMask;\r\n    const fullRank = rows.length;\r\n\r\n    if (detCache.hasOwnProperty(cacheKey)) {\r\n        return detCache[cacheKey];\r\n    }\r\n\r\n    if (rank === 1) {\r\n        // In this case the colMask must be like: `11101111`. We can find the place of `0`.\r\n        const colStart = Math.round(Math.log(((1 << fullRank) - 1) & ~colMask) / LN2);\r\n        return rows[rowStart][colStart];\r\n    }\r\n\r\n    const subRowMask = rowMask | (1 << rowStart);\r\n    let subRowStart = rowStart + 1;\r\n    while (rowMask & (1 << subRowStart)) {\r\n        subRowStart++;\r\n    }\r\n\r\n    let sum = 0;\r\n    for (let j = 0, colLocalIdx = 0; j < fullRank; j++) {\r\n        const colTag = 1 << j;\r\n        if (!(colTag & colMask)) {\r\n            sum += (colLocalIdx % 2 ? -1 : 1) * rows[rowStart][j]\r\n                // det(subMatrix(0, j))\r\n                * determinant(rows, rank - 1, subRowStart, subRowMask, colMask | colTag, detCache);\r\n            colLocalIdx++;\r\n        }\r\n    }\r\n\r\n    detCache[cacheKey] = sum;\r\n\r\n    return sum;\r\n}\r\n\r\n/**\r\n * Usage:\r\n * ```js\r\n * const transformer = buildTransformer(\r\n *     [10, 44, 100, 44, 100, 300, 10, 300],\r\n *     [50, 54, 130, 14, 140, 330, 14, 220]\r\n * );\r\n * const out = [];\r\n * transformer && transformer([11, 33], out);\r\n * ```\r\n *\r\n * Notice: `buildTransformer` may take more than 10ms in some Android device.\r\n *\r\n * @param src source four points, [x0, y0, x1, y1, x2, y2, x3, y3]\r\n * @param dest destination four points, [x0, y0, x1, y1, x2, y2, x3, y3]\r\n * @return transformer If fail, return null/undefined.\r\n */\r\nexport function buildTransformer(src: number[], dest: number[]) {\r\n    const mA = [\r\n        [src[0], src[1], 1, 0, 0, 0, -dest[0] * src[0], -dest[0] * src[1]],\r\n        [0, 0, 0, src[0], src[1], 1, -dest[1] * src[0], -dest[1] * src[1]],\r\n        [src[2], src[3], 1, 0, 0, 0, -dest[2] * src[2], -dest[2] * src[3]],\r\n        [0, 0, 0, src[2], src[3], 1, -dest[3] * src[2], -dest[3] * src[3]],\r\n        [src[4], src[5], 1, 0, 0, 0, -dest[4] * src[4], -dest[4] * src[5]],\r\n        [0, 0, 0, src[4], src[5], 1, -dest[5] * src[4], -dest[5] * src[5]],\r\n        [src[6], src[7], 1, 0, 0, 0, -dest[6] * src[6], -dest[6] * src[7]],\r\n        [0, 0, 0, src[6], src[7], 1, -dest[7] * src[6], -dest[7] * src[7]]\r\n    ];\r\n\r\n    const detCache = {};\r\n    const det = determinant(mA, 8, 0, 0, 0, detCache);\r\n    if (det === 0) {\r\n        // can not make transformer when and only when\r\n        // any three of the markers are collinear.\r\n        return;\r\n    }\r\n\r\n    // `invert(mA) * dest`, that is, `adj(mA) / det * dest`.\r\n    const vh: number[] = [];\r\n    for (let i = 0; i < 8; i++) {\r\n        for (let j = 0; j < 8; j++) {\r\n            vh[j] == null && (vh[j] = 0);\r\n            vh[j] += ((i + j) % 2 ? -1 : 1)\r\n                // det(subMatrix(i, j))\r\n                * determinant(mA, 7, i === 0 ? 1 : 0, 1 << i, 1 << j, detCache)\r\n                / det * dest[i];\r\n        }\r\n    }\r\n\r\n    return function (out: number[], srcPointX: number, srcPointY: number) {\r\n        const pk = srcPointX * vh[6] + srcPointY * vh[7] + 1;\r\n        out[0] = (srcPointX * vh[0] + srcPointY * vh[1] + vh[2]) / pk;\r\n        out[1] = (srcPointX * vh[3] + srcPointY * vh[4] + vh[5]) / pk;\r\n    };\r\n}\r\n","\r\nimport env from './env';\r\nimport {buildTransformer} from './fourPointsTransform';\r\nimport {Dictionary} from './types';\r\n\r\nconst EVENT_SAVED_PROP = '___zrEVENTSAVED';\r\nconst _calcOut: number[] = [];\r\n\r\ntype SavedInfo = {\r\n    markers?: HTMLDivElement[]\r\n    trans?: ReturnType\r\n    invTrans?: ReturnType\r\n    srcCoords?: number[]\r\n}\r\n\r\n/**\r\n * Transform \"local coord\" from `elFrom` to `elTarget`.\r\n * \"local coord\": the coord based on the input `el`. The origin point is at\r\n *     the position of \"left: 0; top: 0;\" in the `el`.\r\n *\r\n * Support when CSS transform is used.\r\n *\r\n * Having the `out` (that is, `[outX, outY]`), we can create an DOM element\r\n * and set the CSS style as \"left: outX; top: outY;\" and append it to `elTarge`\r\n * to locate the element.\r\n *\r\n * For example, this code below positions a child of `document.body` on the event\r\n * point, no matter whether `body` has `margin`/`paddin`/`transfrom`/... :\r\n * ```js\r\n * transformLocalCoord(out, container, document.body, event.offsetX, event.offsetY);\r\n * if (!eqNaN(out[0])) {\r\n *     // Then locate the tip element on the event point.\r\n *     var tipEl = document.createElement('div');\r\n *     tipEl.style.cssText = 'position: absolute; left:' + out[0] + ';top:' + out[1] + ';';\r\n *     document.body.appendChild(tipEl);\r\n * }\r\n * ```\r\n *\r\n * Notice: In some env this method is not supported. If called, `out` will be `[NaN, NaN]`.\r\n *\r\n * @param {Array.} out [inX: number, inY: number] The output..\r\n *        If can not transform, `out` will not be modified but return `false`.\r\n * @param {HTMLElement} elFrom The `[inX, inY]` is based on elFrom.\r\n * @param {HTMLElement} elTarget The `out` is based on elTarget.\r\n * @param {number} inX\r\n * @param {number} inY\r\n * @return {boolean} Whether transform successfully.\r\n */\r\nexport function transformLocalCoord(\r\n    out: number[],\r\n    elFrom: HTMLElement,\r\n    elTarget: HTMLElement,\r\n    inX: number,\r\n    inY: number\r\n) {\r\n    return transformCoordWithViewport(_calcOut, elFrom, inX, inY, true)\r\n        && transformCoordWithViewport(out, elTarget, _calcOut[0], _calcOut[1]);\r\n}\r\n\r\n/**\r\n * Transform between a \"viewport coord\" and a \"local coord\".\r\n * \"viewport coord\": the coord based on the left-top corner of the viewport\r\n *     of the browser.\r\n * \"local coord\": the coord based on the input `el`. The origin point is at\r\n *     the position of \"left: 0; top: 0;\" in the `el`.\r\n *\r\n * Support the case when CSS transform is used on el.\r\n *\r\n * @param out [inX: number, inY: number] The output. If `inverse: false`,\r\n *        it represents \"local coord\", otherwise \"vireport coord\".\r\n *        If can not transform, `out` will not be modified but return `false`.\r\n * @param el The \"local coord\" is based on the `el`, see comment above.\r\n * @param inX If `inverse: false`,\r\n *        it represents \"vireport coord\", otherwise \"local coord\".\r\n * @param inY If `inverse: false`,\r\n *        it represents \"vireport coord\", otherwise \"local coord\".\r\n * @param inverse\r\n *        `true`: from \"viewport coord\" to \"local coord\".\r\n *        `false`: from \"local coord\" to \"viewport coord\".\r\n * @return {boolean} Whether transform successfully.\r\n */\r\nexport function transformCoordWithViewport(\r\n    out: number[],\r\n    el: HTMLElement,\r\n    inX: number,\r\n    inY: number,\r\n    inverse?: boolean\r\n) {\r\n    if (el.getBoundingClientRect && env.domSupported && !isCanvasEl(el)) {\r\n        const saved = (el as any)[EVENT_SAVED_PROP] || ((el as any)[EVENT_SAVED_PROP] = {});\r\n        const markers = prepareCoordMarkers(el, saved);\r\n        const transformer = preparePointerTransformer(markers, saved, inverse);\r\n        if (transformer) {\r\n            transformer(out, inX, inY);\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction prepareCoordMarkers(el: HTMLElement, saved: SavedInfo) {\r\n    let markers = saved.markers;\r\n    if (markers) {\r\n        return markers;\r\n    }\r\n\r\n    markers = saved.markers = [];\r\n    const propLR = ['left', 'right'];\r\n    const propTB = ['top', 'bottom'];\r\n\r\n    for (let i = 0; i < 4; i++) {\r\n        const marker = document.createElement('div');\r\n        const stl = marker.style;\r\n        const idxLR = i % 2;\r\n        const idxTB = (i >> 1) % 2;\r\n        stl.cssText = [\r\n            'position: absolute',\r\n            'visibility: hidden',\r\n            'padding: 0',\r\n            'margin: 0',\r\n            'border-width: 0',\r\n            'user-select: none',\r\n            'width:0',\r\n            'height:0',\r\n            // 'width: 5px',\r\n            // 'height: 5px',\r\n            propLR[idxLR] + ':0',\r\n            propTB[idxTB] + ':0',\r\n            propLR[1 - idxLR] + ':auto',\r\n            propTB[1 - idxTB] + ':auto',\r\n            ''\r\n        ].join('!important;');\r\n        el.appendChild(marker);\r\n        markers.push(marker);\r\n    }\r\n\r\n    return markers;\r\n}\r\n\r\nfunction preparePointerTransformer(markers: HTMLDivElement[], saved: SavedInfo, inverse?: boolean) {\r\n    const transformerName: 'invTrans' | 'trans' = inverse ? 'invTrans' : 'trans';\r\n    const transformer = saved[transformerName];\r\n    const oldSrcCoords = saved.srcCoords;\r\n    const srcCoords = [];\r\n    const destCoords = [];\r\n    let oldCoordTheSame = true;\r\n\r\n    for (let i = 0; i < 4; i++) {\r\n        const rect = markers[i].getBoundingClientRect();\r\n        const ii = 2 * i;\r\n        const x = rect.left;\r\n        const y = rect.top;\r\n        srcCoords.push(x, y);\r\n        oldCoordTheSame = oldCoordTheSame && oldSrcCoords && x === oldSrcCoords[ii] && y === oldSrcCoords[ii + 1];\r\n        destCoords.push(markers[i].offsetLeft, markers[i].offsetTop);\r\n    }\r\n    // Cache to avoid time consuming of `buildTransformer`.\r\n    return (oldCoordTheSame && transformer)\r\n        ? transformer\r\n        : (\r\n            saved.srcCoords = srcCoords,\r\n            saved[transformerName] = inverse\r\n                ? buildTransformer(destCoords, srcCoords)\r\n                : buildTransformer(srcCoords, destCoords)\r\n        );\r\n}\r\n\r\nexport function isCanvasEl(el: HTMLElement): el is HTMLCanvasElement {\r\n    return el.nodeName.toUpperCase() === 'CANVAS';\r\n}\r\n\r\nconst replaceReg = /([&<>\"'])/g;\r\nconst replaceMap: Dictionary = {\r\n    '&': '&',\r\n    '<': '<',\r\n    '>': '>',\r\n    '\"': '"',\r\n    '\\'': '''\r\n};\r\n\r\nexport function encodeHTML(source: string): string {\r\n    return source == null\r\n        ? ''\r\n        : (source + '').replace(replaceReg, function (str, c) {\r\n            return replaceMap[c];\r\n        });\r\n}\r\n","/**\n * Utilities for mouse or touch events.\n */\n\nimport Eventful from './Eventful';\nimport env from './env';\nimport { ZRRawEvent } from './types';\nimport {isCanvasEl, transformCoordWithViewport} from './dom';\n\nconst MOUSE_EVENT_REG = /^(?:mouse|pointer|contextmenu|drag|drop)|click/;\nconst _calcOut: number[] = [];\nconst firefoxNotSupportOffsetXY = env.browser.firefox\n    // use offsetX/offsetY for Firefox >= 39\n    // PENDING: consider Firefox for Android and Firefox OS? >= 43\n    && +(env.browser.version as string).split('.')[0] < 39;\n\ntype FirefoxMouseEvent = {\n    layerX: number\n    layerY: number\n}\n\n\n/**\n * Get the `zrX` and `zrY`, which are relative to the top-left of\n * the input `el`.\n * CSS transform (2D & 3D) is supported.\n *\n * The strategy to fetch the coords:\n * + If `calculate` is not set as `true`, users of this method should\n * ensure that `el` is the same or the same size & location as `e.target`.\n * Otherwise the result coords are probably not expected. Because we\n * firstly try to get coords from e.offsetX/e.offsetY.\n * + If `calculate` is set as `true`, the input `el` can be any element\n * and we force to calculate the coords based on `el`.\n * + The input `el` should be positionable (not position:static).\n *\n * The force `calculate` can be used in case like:\n * When mousemove event triggered on ec tooltip, `e.target` is not `el`(zr painter.dom).\n *\n * @param  el DOM element.\n * @param  e Mouse event or touch event.\n * @param  out Get `out.zrX` and `out.zrY` as the result.\n * @param  calculate Whether to force calculate\n *        the coordinates but not use ones provided by browser.\n */\nexport function clientToLocal(\n    el: HTMLElement,\n    e: ZRRawEvent | FirefoxMouseEvent | Touch,\n    out: {zrX?: number, zrY?: number},\n    calculate?: boolean\n) {\n    out = out || {};\n\n    // According to the W3C Working Draft, offsetX and offsetY should be relative\n    // to the padding edge of the target element. The only browser using this convention\n    // is IE. Webkit uses the border edge, Opera uses the content edge, and FireFox does\n    // not support the properties.\n    // (see http://www.jacklmoore.com/notes/mouse-position/)\n    // In zr painter.dom, padding edge equals to border edge.\n    if (calculate) {\n        calculateZrXY(el, e as ZRRawEvent, out);\n    }\n    // Caution: In FireFox, layerX/layerY Mouse position relative to the closest positioned\n    // ancestor element, so we should make sure el is positioned (e.g., not position:static).\n    // BTW1, Webkit don't return the same results as FF in non-simple cases (like add\n    // zoom-factor, overflow / opacity layers, transforms ...)\n    // BTW2, (ev.offsetY || ev.pageY - $(ev.target).offset().top) is not correct in preserve-3d.\n    // \n    // BTW3, In ff, offsetX/offsetY is always 0.\n    else if (firefoxNotSupportOffsetXY\n        && (e as FirefoxMouseEvent).layerX != null\n        && (e as FirefoxMouseEvent).layerX !== (e as MouseEvent).offsetX\n    ) {\n        out.zrX = (e as FirefoxMouseEvent).layerX;\n        out.zrY = (e as FirefoxMouseEvent).layerY;\n    }\n    // For IE6+, chrome, safari, opera, firefox >= 39\n    else if ((e as MouseEvent).offsetX != null) {\n        out.zrX = (e as MouseEvent).offsetX;\n        out.zrY = (e as MouseEvent).offsetY;\n    }\n    // For some other device, e.g., IOS safari.\n    else {\n        calculateZrXY(el, e as ZRRawEvent, out);\n    }\n\n    return out;\n}\n\nfunction calculateZrXY(\n    el: HTMLElement,\n    e: ZRRawEvent,\n    out: {zrX?: number, zrY?: number}\n) {\n    // BlackBerry 5, iOS 3 (original iPhone) don't have getBoundingRect.\n    if (env.domSupported && el.getBoundingClientRect) {\n        const ex = (e as MouseEvent).clientX;\n        const ey = (e as MouseEvent).clientY;\n\n        if (isCanvasEl(el)) {\n            // Original approach, which do not support CSS transform.\n            // marker can not be locationed in a canvas container\n            // (getBoundingClientRect is always 0). We do not support\n            // that input a pre-created canvas to zr while using css\n            // transform in iOS.\n            const box = el.getBoundingClientRect();\n            out.zrX = ex - box.left;\n            out.zrY = ey - box.top;\n            return;\n        }\n        else {\n            if (transformCoordWithViewport(_calcOut, el, ex, ey)) {\n                out.zrX = _calcOut[0];\n                out.zrY = _calcOut[1];\n                return;\n            }\n        }\n    }\n    out.zrX = out.zrY = 0;\n}\n\n/**\n * Find native event compat for legency IE.\n * Should be called at the begining of a native event listener.\n *\n * @param e Mouse event or touch event or pointer event.\n *        For lagency IE, we use `window.event` is used.\n * @return The native event.\n */\nexport function getNativeEvent(e: ZRRawEvent): ZRRawEvent {\n    return e\n        || (window.event as any);   // For IE\n}\n\n/**\n * Normalize the coordinates of the input event.\n *\n * Get the `e.zrX` and `e.zrY`, which are relative to the top-left of\n * the input `el`.\n * Get `e.zrDelta` if using mouse wheel.\n * Get `e.which`, see the comment inside this function.\n *\n * Do not calculate repeatly if `zrX` and `zrY` already exist.\n *\n * Notice: see comments in `clientToLocal`. check the relationship\n * between the result coords and the parameters `el` and `calculate`.\n *\n * @param el DOM element.\n * @param e See `getNativeEvent`.\n * @param calculate Whether to force calculate\n *        the coordinates but not use ones provided by browser.\n * @return The normalized native UIEvent.\n */\nexport function normalizeEvent(\n    el: HTMLElement,\n    e: ZRRawEvent,\n    calculate?: boolean\n) {\n\n    e = getNativeEvent(e);\n\n    if (e.zrX != null) {\n        return e;\n    }\n\n    const eventType = e.type;\n    const isTouch = eventType && eventType.indexOf('touch') >= 0;\n\n    if (!isTouch) {\n        clientToLocal(el, e, e, calculate);\n        const wheelDelta = getWheelDeltaMayPolyfill(e);\n        // FIXME: IE8- has \"wheelDeta\" in event \"mousewheel\" but hat different value (120 times)\n        // with Chrome and Safari. It's not correct for zrender event but we left it as it was.\n        e.zrDelta = wheelDelta ? wheelDelta / 120 : -(e.detail || 0) / 3;\n    }\n    else {\n        const touch = eventType !== 'touchend'\n            ? (e).targetTouches[0]\n            : (e).changedTouches[0];\n        touch && clientToLocal(el, touch, e, calculate);\n    }\n\n    // Add which for click: 1 === left; 2 === middle; 3 === right; otherwise: 0;\n    // See jQuery: https://github.com/jquery/jquery/blob/master/src/event.js\n    // If e.which has been defined, it may be readonly,\n    // see: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/which\n    const button = (e).button;\n    if (e.which == null && button !== undefined && MOUSE_EVENT_REG.test(e.type)) {\n        (e as any).which = (button & 1 ? 1 : (button & 2 ? 3 : (button & 4 ? 2 : 0)));\n    }\n    // [Caution]: `e.which` from browser is not always reliable. For example,\n    // when press left button and `mousemove (pointermove)` in Edge, the `e.which`\n    // is 65536 and the `e.button` is -1. But the `mouseup (pointerup)` and\n    // `mousedown (pointerdown)` is the same as Chrome does.\n\n    return e;\n}\n\n// TODO: also provide prop \"deltaX\" \"deltaY\" in zrender \"mousewheel\" event.\nfunction getWheelDeltaMayPolyfill(e: ZRRawEvent): number {\n    // Although event \"wheel\" do not has the prop \"wheelDelta\" in spec,\n    // agent like Chrome and Safari still provide \"wheelDelta\" like\n    // event \"mousewheel\" did (perhaps for backward compat).\n    // Since zrender has been using \"wheelDeta\" in zrender event \"mousewheel\".\n    // we currently do not break it.\n    // But event \"wheel\" in firefox do not has \"wheelDelta\", so we calculate\n    // \"wheelDeta\" from \"deltaX\", \"deltaY\" (which is the props in spec).\n    const rawWheelDelta = (e as any).wheelDelta;\n    // Theroetically `e.wheelDelta` won't be 0 unless some day it has been deprecated\n    // by agent like Chrome or Safari. So we also calculate it if rawWheelDelta is 0.\n    if (rawWheelDelta) {\n        return rawWheelDelta;\n    }\n\n    const deltaX = (e as any).deltaX;\n    const deltaY = (e as any).deltaY;\n    if (deltaX == null || deltaY == null) {\n        return rawWheelDelta;\n    }\n\n    // Test in Chrome and Safari (MacOS):\n    // The sign is corrent.\n    // The abs value is 99% corrent (inconsist case only like 62~63, 125~126 ...)\n    const delta = deltaY !== 0 ? Math.abs(deltaY) : Math.abs(deltaX);\n    const sign = deltaY > 0 ? -1\n        : deltaY < 0 ? 1\n        : deltaX > 0 ? -1\n        : 1;\n    return 3 * delta * sign;\n}\n\n\ntype AddEventListenerParams = Parameters\ntype RemoveEventListenerParams = Parameters\n/**\n * @param  el\n * @param  name\n * @param  handler\n * @param  opt If boolean, means `opt.capture`\n * @param  opt.capture\n * @param  opt.passive\n */\nexport function addEventListener(\n    el: HTMLElement | HTMLDocument,\n    name: AddEventListenerParams[0],\n    handler: AddEventListenerParams[1],\n    opt?: AddEventListenerParams[2]\n) {\n    // Reproduct the console warning:\n    // [Violation] Added non-passive event listener to a scroll-blocking  event.\n    // Consider marking event handler as 'passive' to make the page more responsive.\n    // Just set console log level: verbose in chrome dev tool.\n    // then the warning log will be printed when addEventListener called.\n    // See https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n    // We have not yet found a neat way to using passive. Because in zrender the dom event\n    // listener delegate all of the upper events of element. Some of those events need\n    // to prevent default. For example, the feature `preventDefaultMouseMove` of echarts.\n    // Before passive can be adopted, these issues should be considered:\n    // (1) Whether and how a zrender user specifies an event listener passive. And by default,\n    // passive or not.\n    // (2) How to tread that some zrender event listener is passive, and some is not. If\n    // we use other way but not preventDefault of mousewheel and touchmove, browser\n    // compatibility should be handled.\n\n    // const opts = (env.passiveSupported && name === 'mousewheel')\n    //     ? {passive: true}\n    //     // By default, the third param of el.addEventListener is `capture: false`.\n    //     : void 0;\n    // el.addEventListener(name, handler /* , opts */);\n    el.addEventListener(name, handler, opt);\n}\n\n/**\n * Parameter are the same as `addEventListener`.\n *\n * Notice that if a listener is registered twice, one with capture and one without,\n * remove each one separately. Removal of a capturing listener does not affect a\n * non-capturing version of the same listener, and vice versa.\n */\nexport function removeEventListener(\n    el: HTMLElement | HTMLDocument,\n    name: RemoveEventListenerParams[0],\n    handler: RemoveEventListenerParams[1],\n    opt: RemoveEventListenerParams[2]\n) {\n    el.removeEventListener(name, handler, opt);\n}\n\n/**\n * preventDefault and stopPropagation.\n * Notice: do not use this method in zrender. It can only be\n * used by upper applications if necessary.\n *\n * @param {Event} e A mouse or touch event.\n */\nexport const stop = function (e: MouseEvent | TouchEvent | PointerEvent) {\n    e.preventDefault();\n    e.stopPropagation();\n    e.cancelBubble = true;\n};\n\n/**\n * This method only works for mouseup and mousedown. The functionality is restricted\n * for fault tolerance, See the `e.which` compatibility above.\n *\n * params can be MouseEvent or ElementEvent\n */\nexport function isMiddleOrRightButtonOnMouseUpDown(e: { which: number }) {\n    return e.which === 2 || e.which === 3;\n}\n\n// For backward compatibility\nexport {Eventful as Dispatcher};\n","/**\n * Only implements needed gestures for mobile.\n */\n\nimport * as eventUtil from './event';\nimport { ZRRawTouchEvent, ZRPinchEvent, Dictionary } from './types';\nimport Displayable from '../graphic/Displayable';\n\ninterface TrackItem {\n    points: number[][]\n    touches: Touch[]\n    target: Displayable,\n    event: ZRRawTouchEvent\n}\n\nexport class GestureMgr {\n\n    private _track: TrackItem[] = []\n\n    constructor() {}\n\n    recognize(event: ZRRawTouchEvent, target: Displayable, root: HTMLElement) {\n        this._doTrack(event, target, root);\n        return this._recognize(event);\n    }\n\n    clear() {\n        this._track.length = 0;\n        return this;\n    }\n\n    _doTrack(event: ZRRawTouchEvent, target: Displayable, root: HTMLElement) {\n        const touches = event.touches;\n\n        if (!touches) {\n            return;\n        }\n\n        const trackItem: TrackItem = {\n            points: [],\n            touches: [],\n            target: target,\n            event: event\n        };\n\n        for (let i = 0, len = touches.length; i < len; i++) {\n            const touch = touches[i];\n            const pos = eventUtil.clientToLocal(root, touch, {});\n            trackItem.points.push([pos.zrX, pos.zrY]);\n            trackItem.touches.push(touch);\n        }\n\n        this._track.push(trackItem);\n    }\n\n    _recognize(event: ZRRawTouchEvent) {\n        for (let eventName in recognizers) {\n            if (recognizers.hasOwnProperty(eventName)) {\n                const gestureInfo = recognizers[eventName](this._track, event);\n                if (gestureInfo) {\n                    return gestureInfo;\n                }\n            }\n        }\n    }\n}\n\nfunction dist(pointPair: number[][]): number {\n    const dx = pointPair[1][0] - pointPair[0][0];\n    const dy = pointPair[1][1] - pointPair[0][1];\n\n    return Math.sqrt(dx * dx + dy * dy);\n}\n\nfunction center(pointPair: number[][]): number[] {\n    return [\n        (pointPair[0][0] + pointPair[1][0]) / 2,\n        (pointPair[0][1] + pointPair[1][1]) / 2\n    ];\n}\n\ntype Recognizer = (tracks: TrackItem[], event: ZRRawTouchEvent) => {\n    type: string\n    target: Displayable\n    event: ZRRawTouchEvent\n}\n\nconst recognizers: Dictionary = {\n\n    pinch: function (tracks: TrackItem[], event: ZRRawTouchEvent) {\n        const trackLen = tracks.length;\n\n        if (!trackLen) {\n            return;\n        }\n\n        const pinchEnd = (tracks[trackLen - 1] || {}).points;\n        const pinchPre = (tracks[trackLen - 2] || {}).points || pinchEnd;\n\n        if (pinchPre\n            && pinchPre.length > 1\n            && pinchEnd\n            && pinchEnd.length > 1\n        ) {\n            let pinchScale = dist(pinchEnd) / dist(pinchPre);\n            !isFinite(pinchScale) && (pinchScale = 1);\n\n            (event as ZRPinchEvent).pinchScale = pinchScale;\n\n            const pinchCenter = center(pinchEnd);\n            (event as ZRPinchEvent).pinchX = pinchCenter[0];\n            (event as ZRPinchEvent).pinchY = pinchCenter[1];\n\n            return {\n                type: 'pinch',\n                target: tracks[0].target,\n                event: event\n            };\n        }\n    }\n\n    // Only pinch currently.\n};","/**\n * 3x2矩阵操作类\n * @exports zrender/tool/matrix\n */\n\n/* global Float32Array */\n\nimport {VectorArray} from './vector';\n\nexport type MatrixArray = number[]\n/**\n * Create a identity matrix.\n */\nexport function create(): MatrixArray {\n    return [1, 0, 0, 1, 0, 0];\n}\n\n/**\n * 设置矩阵为单位矩阵\n */\nexport function identity(out: MatrixArray): MatrixArray {\n    out[0] = 1;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 1;\n    out[4] = 0;\n    out[5] = 0;\n    return out;\n}\n\n/**\n * 复制矩阵\n */\nexport function copy(out: MatrixArray, m: MatrixArray): MatrixArray {\n    out[0] = m[0];\n    out[1] = m[1];\n    out[2] = m[2];\n    out[3] = m[3];\n    out[4] = m[4];\n    out[5] = m[5];\n    return out;\n}\n\n/**\n * 矩阵相乘\n */\nexport function mul(out: MatrixArray, m1: MatrixArray, m2: MatrixArray): MatrixArray {\n    // Consider matrix.mul(m, m2, m);\n    // where out is the same as m2.\n    // So use temp constiable to escape error.\n    const out0 = m1[0] * m2[0] + m1[2] * m2[1];\n    const out1 = m1[1] * m2[0] + m1[3] * m2[1];\n    const out2 = m1[0] * m2[2] + m1[2] * m2[3];\n    const out3 = m1[1] * m2[2] + m1[3] * m2[3];\n    const out4 = m1[0] * m2[4] + m1[2] * m2[5] + m1[4];\n    const out5 = m1[1] * m2[4] + m1[3] * m2[5] + m1[5];\n    out[0] = out0;\n    out[1] = out1;\n    out[2] = out2;\n    out[3] = out3;\n    out[4] = out4;\n    out[5] = out5;\n    return out;\n}\n\n/**\n * 平移变换\n */\nexport function translate(out: MatrixArray, a: MatrixArray, v: VectorArray): MatrixArray {\n    out[0] = a[0];\n    out[1] = a[1];\n    out[2] = a[2];\n    out[3] = a[3];\n    out[4] = a[4] + v[0];\n    out[5] = a[5] + v[1];\n    return out;\n}\n\n/**\n * 旋转变换\n */\nexport function rotate(\n    out: MatrixArray,\n    a: MatrixArray,\n    rad: number,\n    pivot: VectorArray = [0, 0]\n): MatrixArray {\n    const aa = a[0];\n    const ac = a[2];\n    const atx = a[4];\n    const ab = a[1];\n    const ad = a[3];\n    const aty = a[5];\n    const st = Math.sin(rad);\n    const ct = Math.cos(rad);\n\n    out[0] = aa * ct + ab * st;\n    out[1] = -aa * st + ab * ct;\n    out[2] = ac * ct + ad * st;\n    out[3] = -ac * st + ct * ad;\n    out[4] = ct * (atx - pivot[0]) + st * (aty - pivot[1]) + pivot[0];\n    out[5] = ct * (aty - pivot[1]) - st * (atx - pivot[0]) + pivot[1];\n    return out;\n}\n\n/**\n * 缩放变换\n */\nexport function scale(out: MatrixArray, a: MatrixArray, v: VectorArray): MatrixArray {\n    const vx = v[0];\n    const vy = v[1];\n    out[0] = a[0] * vx;\n    out[1] = a[1] * vy;\n    out[2] = a[2] * vx;\n    out[3] = a[3] * vy;\n    out[4] = a[4] * vx;\n    out[5] = a[5] * vy;\n    return out;\n}\n\n/**\n * 求逆矩阵\n */\nexport function invert(out: MatrixArray, a: MatrixArray): MatrixArray | null {\n\n    const aa = a[0];\n    const ac = a[2];\n    const atx = a[4];\n    const ab = a[1];\n    const ad = a[3];\n    const aty = a[5];\n\n    let det = aa * ad - ab * ac;\n    if (!det) {\n        return null;\n    }\n    det = 1.0 / det;\n\n    out[0] = ad * det;\n    out[1] = -ab * det;\n    out[2] = -ac * det;\n    out[3] = aa * det;\n    out[4] = (ac * aty - ad * atx) * det;\n    out[5] = (ab * atx - aa * aty) * det;\n    return out;\n}\n\n/**\n * Clone a new matrix.\n */\nexport function clone(a: MatrixArray): MatrixArray {\n    const b = create();\n    copy(b, a);\n    return b;\n}\n","import { MatrixArray } from './matrix';\r\n\r\nexport interface PointLike {\r\n    x: number\r\n    y: number\r\n}\r\nexport default class Point {\r\n\r\n    x: number\r\n\r\n    y: number\r\n\r\n    constructor(x?: number, y?: number) {\r\n        this.x = x || 0;\r\n        this.y = y || 0;\r\n    }\r\n\r\n    /**\r\n     * Copy from another point\r\n     */\r\n    copy(other: PointLike) {\r\n        this.x = other.x;\r\n        this.y = other.y;\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Clone a point\r\n     */\r\n    clone() {\r\n        return new Point(this.x, this.y);\r\n    }\r\n\r\n    /**\r\n     * Set x and y\r\n     */\r\n    set(x: number, y: number) {\r\n        this.x = x;\r\n        this.y = y;\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * If equal to another point\r\n     */\r\n    equal(other: PointLike) {\r\n        return other.x === this.x && other.y === this.y;\r\n    }\r\n\r\n    /**\r\n     * Add another point\r\n     */\r\n    add(other: PointLike) {\r\n        this.x += other.x;\r\n        this.y += other.y;\r\n        return this;\r\n    }\r\n\r\n    scale(scalar: number) {\r\n        this.x *= scalar;\r\n        this.y *= scalar;\r\n    }\r\n\r\n    scaleAndAdd(other: PointLike, scalar: number) {\r\n        this.x += other.x * scalar;\r\n        this.y += other.y * scalar;\r\n    }\r\n\r\n    /**\r\n     * Sub another point\r\n     */\r\n    sub(other: PointLike) {\r\n        this.x -= other.x;\r\n        this.y -= other.y;\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Dot product with other point\r\n     */\r\n    dot(other: PointLike) {\r\n        return this.x * other.x + this.y * other.y;\r\n    }\r\n\r\n    /**\r\n     * Get length of point\r\n     */\r\n    len() {\r\n        return Math.sqrt(this.x * this.x + this.y * this.y);\r\n    }\r\n\r\n    /**\r\n     * Get squared length\r\n     */\r\n    lenSquare() {\r\n        return this.x * this.x + this.y * this.y;\r\n    }\r\n\r\n    /**\r\n     * Normalize\r\n     */\r\n    normalize() {\r\n        const len = this.len();\r\n        this.x /= len;\r\n        this.y /= len;\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Distance to another point\r\n     */\r\n    distance(other: PointLike) {\r\n        const dx = this.x - other.x;\r\n        const dy = this.y - other.y;\r\n        return Math.sqrt(dx * dx + dy * dy);\r\n    }\r\n\r\n    /**\r\n     * Square distance to another point\r\n     */\r\n    distanceSquare(other: Point) {\r\n        const dx = this.x - other.x;\r\n        const dy = this.y - other.y;\r\n        return dx * dx + dy * dy;\r\n    }\r\n\r\n    /**\r\n     * Negate\r\n     */\r\n    negate() {\r\n        this.x = -this.x;\r\n        this.y = -this.y;\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Apply a transform matrix array.\r\n     */\r\n    transform(m: MatrixArray) {\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const x = this.x;\r\n        const y = this.y;\r\n        this.x = m[0] * x + m[2] * y + m[4];\r\n        this.y = m[1] * x + m[3] * y + m[5];\r\n        return this;\r\n    }\r\n\r\n    toArray(out: number[]) {\r\n        out[0] = this.x;\r\n        out[1] = this.y;\r\n        return out;\r\n    }\r\n\r\n    fromArray(input: number[]) {\r\n        this.x = input[0];\r\n        this.y = input[1];\r\n    }\r\n\r\n    static set(p: PointLike, x: number, y: number) {\r\n        p.x = x;\r\n        p.y = y;\r\n    }\r\n\r\n    static copy(p: PointLike, p2: PointLike) {\r\n        p.x = p2.x;\r\n        p.y = p2.y;\r\n    }\r\n\r\n    static len(p: PointLike) {\r\n        return Math.sqrt(p.x * p.x + p.y * p.y);\r\n    }\r\n\r\n    static lenSquare(p: PointLike) {\r\n        return p.x * p.x + p.y * p.y;\r\n    }\r\n\r\n    static dot(p0: PointLike, p1: PointLike) {\r\n        return p0.x * p1.x + p0.y * p1.y;\r\n    }\r\n\r\n    static add(out: PointLike, p0: PointLike, p1: PointLike) {\r\n        out.x = p0.x + p1.x;\r\n        out.y = p0.y + p1.y;\r\n    }\r\n\r\n    static sub(out: PointLike, p0: PointLike, p1: PointLike) {\r\n        out.x = p0.x - p1.x;\r\n        out.y = p0.y - p1.y;\r\n    }\r\n\r\n    static scale(out: PointLike, p0: PointLike, scalar: number) {\r\n        out.x = p0.x * scalar;\r\n        out.y = p0.y * scalar;\r\n    }\r\n\r\n    static scaleAndAdd(out: PointLike, p0: PointLike, p1: PointLike, scalar: number) {\r\n        out.x = p0.x + p1.x * scalar;\r\n        out.y = p0.y + p1.y * scalar;\r\n    }\r\n\r\n    static lerp(out: PointLike, p0: PointLike, p1: PointLike, t: number) {\r\n        const onet = 1 - t;\r\n        out.x = onet * p0.x + t * p1.x;\r\n        out.y = onet * p0.y + t * p1.y;\r\n    }\r\n}","/**\r\n * @module echarts/core/BoundingRect\r\n */\r\n\r\nimport * as matrix from './matrix';\r\nimport Point, { PointLike } from './Point';\r\n\r\nconst mathMin = Math.min;\r\nconst mathMax = Math.max;\r\n\r\nconst lt = new Point();\r\nconst rb = new Point();\r\nconst lb = new Point();\r\nconst rt = new Point();\r\n\r\nconst minTv = new Point();\r\nconst maxTv = new Point();\r\n\r\nclass BoundingRect {\r\n\r\n    x: number\r\n    y: number\r\n    width: number\r\n    height: number\r\n\r\n    constructor(x: number, y: number, width: number, height: number) {\r\n        if (width < 0) {\r\n            x = x + width;\r\n            width = -width;\r\n        }\r\n        if (height < 0) {\r\n            y = y + height;\r\n            height = -height;\r\n        }\r\n\r\n        this.x = x;\r\n        this.y = y;\r\n        this.width = width;\r\n        this.height = height;\r\n    }\r\n\r\n    union(other: BoundingRect) {\r\n        const x = mathMin(other.x, this.x);\r\n        const y = mathMin(other.y, this.y);\r\n\r\n        // If x is -Infinity and width is Infinity (like in the case of\r\n        // IncrementalDisplayble), x + width would be NaN\r\n        if (isFinite(this.x) && isFinite(this.width)) {\r\n            this.width = mathMax(\r\n                other.x + other.width,\r\n                this.x + this.width\r\n            ) - x;\r\n        }\r\n        else {\r\n            this.width = other.width;\r\n        }\r\n\r\n        if (isFinite(this.y) && isFinite(this.height)) {\r\n            this.height = mathMax(\r\n                other.y + other.height,\r\n                this.y + this.height\r\n            ) - y;\r\n        }\r\n        else {\r\n            this.height = other.height;\r\n        }\r\n\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n\r\n    applyTransform(m: matrix.MatrixArray) {\r\n        BoundingRect.applyTransform(this, this, m);\r\n    }\r\n\r\n    calculateTransform(b: RectLike): matrix.MatrixArray {\r\n        const a = this;\r\n        const sx = b.width / a.width;\r\n        const sy = b.height / a.height;\r\n\r\n        const m = matrix.create();\r\n\r\n        // 矩阵右乘\r\n        matrix.translate(m, m, [-a.x, -a.y]);\r\n        matrix.scale(m, m, [sx, sy]);\r\n        matrix.translate(m, m, [b.x, b.y]);\r\n\r\n        return m;\r\n    }\r\n\r\n    intersect(b: RectLike, mtv?: PointLike): boolean {\r\n        if (!b) {\r\n            return false;\r\n        }\r\n\r\n        if (!(b instanceof BoundingRect)) {\r\n            // Normalize negative width/height.\r\n            b = BoundingRect.create(b);\r\n        }\r\n\r\n        const a = this;\r\n        const ax0 = a.x;\r\n        const ax1 = a.x + a.width;\r\n        const ay0 = a.y;\r\n        const ay1 = a.y + a.height;\r\n\r\n        const bx0 = b.x;\r\n        const bx1 = b.x + b.width;\r\n        const by0 = b.y;\r\n        const by1 = b.y + b.height;\r\n\r\n        let overlap = !(ax1 < bx0 || bx1 < ax0 || ay1 < by0 || by1 < ay0);\r\n        if (mtv) {\r\n            let dMin = Infinity;\r\n            let dMax = 0;\r\n            const d0 = Math.abs(ax1 - bx0);\r\n            const d1 = Math.abs(bx1 - ax0);\r\n            const d2 = Math.abs(ay1 - by0);\r\n            const d3 = Math.abs(by1 - ay0);\r\n            const dx = Math.min(d0, d1);\r\n            const dy = Math.min(d2, d3);\r\n            // On x axis\r\n            if (ax1 < bx0 || bx1 < ax0) {\r\n                if (dx > dMax) {\r\n                    dMax = dx;\r\n                    if (d0 < d1) {\r\n                        Point.set(maxTv, -d0, 0); // b is on the right\r\n                    }\r\n                    else {\r\n                        Point.set(maxTv, d1, 0);  // b is on the left\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                if (dx < dMin) {\r\n                    dMin = dx;\r\n                    if (d0 < d1) {\r\n                        Point.set(minTv, d0, 0); // b is on the right\r\n                    }\r\n                    else {\r\n                        Point.set(minTv, -d1, 0);  // b is on the left\r\n                    }\r\n                }\r\n            }\r\n\r\n            // On y axis\r\n            if (ay1 < by0 || by1 < ay0) {\r\n                if (dy > dMax) {\r\n                    dMax = dy;\r\n                    if (d2 < d3) {\r\n                        Point.set(maxTv, 0, -d2); // b is on the bottom(larger y)\r\n                    }\r\n                    else {\r\n                        Point.set(maxTv, 0, d3);  // b is on the top(smaller y)\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                if (dx < dMin) {\r\n                    dMin = dx;\r\n                    if (d2 < d3) {\r\n                        Point.set(minTv, 0, d2); // b is on the bottom\r\n                    }\r\n                    else {\r\n                        Point.set(minTv, 0, -d3);  // b is on the top\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        if (mtv) {\r\n            Point.copy(mtv, overlap ? minTv : maxTv);\r\n        }\r\n        return overlap;\r\n    }\r\n\r\n    contain(x: number, y: number): boolean {\r\n        const rect = this;\r\n        return x >= rect.x\r\n            && x <= (rect.x + rect.width)\r\n            && y >= rect.y\r\n            && y <= (rect.y + rect.height);\r\n    }\r\n\r\n    clone() {\r\n        return new BoundingRect(this.x, this.y, this.width, this.height);\r\n    }\r\n\r\n    /**\r\n     * Copy from another rect\r\n     */\r\n    copy(other: RectLike) {\r\n        BoundingRect.copy(this, other);\r\n    }\r\n\r\n    plain(): RectLike {\r\n        return {\r\n            x: this.x,\r\n            y: this.y,\r\n            width: this.width,\r\n            height: this.height\r\n        };\r\n    }\r\n\r\n    /**\r\n     * If not having NaN or Infinity with attributes\r\n     */\r\n    isFinite(): boolean {\r\n        return isFinite(this.x)\r\n            && isFinite(this.y)\r\n            && isFinite(this.width)\r\n            && isFinite(this.height);\r\n    }\r\n\r\n    isZero(): boolean {\r\n        return this.width === 0 || this.height === 0;\r\n    }\r\n\r\n    static create(rect: RectLike): BoundingRect {\r\n        return new BoundingRect(rect.x, rect.y, rect.width, rect.height);\r\n    }\r\n\r\n    static copy(target: RectLike, source: RectLike) {\r\n        target.x = source.x;\r\n        target.y = source.y;\r\n        target.width = source.width;\r\n        target.height = source.height;\r\n    }\r\n\r\n    static applyTransform(target: RectLike, source: RectLike, m: matrix.MatrixArray) {\r\n        // In case usage like this\r\n        // el.getBoundingRect().applyTransform(el.transform)\r\n        // And element has no transform\r\n        if (!m) {\r\n            if (target !== source) {\r\n                BoundingRect.copy(target, source);\r\n            }\r\n            return;\r\n        }\r\n        // Fast path when there is no rotation in matrix.\r\n        if (m[1] < 1e-5 && m[1] > -1e-5 && m[2] < 1e-5 && m[2] > -1e-5) {\r\n            const sx = m[0];\r\n            const sy = m[3];\r\n            const tx = m[4];\r\n            const ty = m[5];\r\n            target.x = source.x * sx + tx;\r\n            target.y = source.y * sy + ty;\r\n            target.width = source.width * sx;\r\n            target.height = source.height * sy;\r\n            if (target.width < 0) {\r\n                target.x += target.width;\r\n                target.width = -target.width;\r\n            }\r\n            if (target.height < 0) {\r\n                target.y += target.height;\r\n                target.height = -target.height;\r\n            }\r\n            return;\r\n        }\r\n\r\n        // source and target can be same instance.\r\n        lt.x = lb.x = source.x;\r\n        lt.y = rt.y = source.y;\r\n        rb.x = rt.x = source.x + source.width;\r\n        rb.y = lb.y = source.y + source.height;\r\n\r\n        lt.transform(m);\r\n        rt.transform(m);\r\n        rb.transform(m);\r\n        lb.transform(m);\r\n\r\n        target.x = mathMin(lt.x, rb.x, lb.x, rt.x);\r\n        target.y = mathMin(lt.y, rb.y, lb.y, rt.y);\r\n        const maxX = mathMax(lt.x, rb.x, lb.x, rt.x);\r\n        const maxY = mathMax(lt.y, rb.y, lb.y, rt.y);\r\n        target.width = maxX - target.x;\r\n        target.height = maxY - target.y;\r\n    }\r\n}\r\n\r\n\r\nexport type RectLike = {\r\n    x: number\r\n    y: number\r\n    width: number\r\n    height: number\r\n}\r\n\r\nexport default BoundingRect;","import * as util from './core/util';\nimport * as vec2 from './core/vector';\nimport Draggable from './mixin/Draggable';\nimport Eventful from './core/Eventful';\nimport * as eventTool from './core/event';\nimport {GestureMgr} from './core/GestureMgr';\nimport Displayable from './graphic/Displayable';\nimport {PainterBase} from './PainterBase';\nimport HandlerDomProxy, { HandlerProxyInterface } from './dom/HandlerProxy';\nimport { ZRRawEvent, ZRPinchEvent, ElementEventName, ElementEventNameWithOn, ZRRawTouchEvent } from './core/types';\nimport Storage from './Storage';\nimport Element, {ElementEvent} from './Element';\nimport CanvasPainter from './canvas/Painter';\nimport BoundingRect from './core/BoundingRect';\n\n/**\n * [The interface between `Handler` and `HandlerProxy`]:\n *\n * The default `HandlerProxy` only support the common standard web environment\n * (e.g., standalone browser, headless browser, embed browser in mobild APP, ...).\n * But `HandlerProxy` can be replaced to support more non-standard environment\n * (e.g., mini app), or to support more feature that the default `HandlerProxy`\n * not provided (like echarts-gl did).\n * So the interface between `Handler` and `HandlerProxy` should be stable. Do not\n * make break changes util inevitable. The interface include the public methods\n * of `Handler` and the events listed in `handlerNames` below, by which `HandlerProxy`\n * drives `Handler`.\n */\n\n/**\n * [DRAG_OUTSIDE]:\n *\n * That is, triggering `mousemove` and `mouseup` event when the pointer is out of the\n * zrender area when dragging. That is important for the improvement of the user experience\n * when dragging something near the boundary without being terminated unexpectedly.\n *\n * We originally consider to introduce new events like `pagemovemove` and `pagemouseup`\n * to resolve this issue. But some drawbacks of it is described in\n * https://github.com/ecomfe/zrender/pull/536#issuecomment-560286899\n *\n * Instead, we referenced the specifications:\n * https://www.w3.org/TR/touch-events/#the-touchmove-event\n * https://www.w3.org/TR/2014/WD-DOM-Level-3-Events-20140925/#event-type-mousemove\n * where the the mousemove/touchmove can be continue to fire if the user began a drag\n * operation and the pointer has left the boundary. (for the mouse event, browsers\n * only do it on `document` and when the pointer has left the boundary of the browser.)\n *\n * So the default `HandlerProxy` supports this feature similarly: if it is in the dragging\n * state (see `pointerCapture` in `HandlerProxy`), the `mousemove` and `mouseup` continue\n * to fire until release the pointer. That is implemented by listen to those event on\n * `document`.\n * If we implement some other `HandlerProxy` only for touch device, that would be easier.\n * The touch event support this feature by default.\n * The term \"pointer capture\" is from the spec:\n * https://www.w3.org/TR/pointerevents2/#idl-def-element-setpointercapture-pointerid\n *\n * Note:\n * There might be some cases that the mouse event can not be received on `document`.\n * For example,\n * (A) When `useCapture` is not supported and some user defined event listeners on the ancestor\n * of zr dom throw Error.\n * (B) When `useCapture` is not supported and some user defined event listeners on the ancestor of\n * zr dom call `stopPropagation`.\n * In these cases, the `mousemove` event might be keep triggering event when the mouse is released.\n * We try to reduce the side-effect in those cases, that is, use `isOutsideBoundary` to prevent\n * it from do anything (especially, `findHover`).\n * (`useCapture` mean, `addEvnetListener(listener, {capture: true})`, althought it may not be\n * suppported in some environments.)\n *\n * Note:\n * If `HandlerProxy` listens to `document` with `useCapture`, `HandlerProxy` needs to\n * prevent user-registered-handler from calling `stopPropagation` and `preventDefault`\n * when the `event.target` is not a zrender dom element. Otherwise the user-registered-handler\n * may be able to prevent other elements (that not relevant to zrender) in the web page from receiving\n * dom events.\n */\n\nconst SILENT = 'silent';\n\nfunction makeEventPacket(eveType: ElementEventName, targetInfo: {\n    target?: Element\n    topTarget?: Element\n}, event: ZRRawEvent): ElementEvent {\n    return {\n        type: eveType,\n        event: event,\n        // target can only be an element that is not silent.\n        target: targetInfo.target,\n        // topTarget can be a silent element.\n        topTarget: targetInfo.topTarget,\n        cancelBubble: false,\n        offsetX: event.zrX,\n        offsetY: event.zrY,\n        gestureEvent: (event as ZRPinchEvent).gestureEvent,\n        pinchX: (event as ZRPinchEvent).pinchX,\n        pinchY: (event as ZRPinchEvent).pinchY,\n        pinchScale: (event as ZRPinchEvent).pinchScale,\n        wheelDelta: event.zrDelta,\n        zrByTouch: event.zrByTouch,\n        which: event.which,\n        stop: stopEvent\n    };\n}\n\nfunction stopEvent(this: ElementEvent) {\n    eventTool.stop(this.event);\n}\n\nclass EmptyProxy extends Eventful {\n    handler: Handler = null\n    dispose() {}\n    setCursor() {}\n}\n\nclass HoveredResult {\n    x: number\n    y: number\n    target: Displayable\n    topTarget: Displayable\n    constructor(x?: number, y?: number) {\n        this.x = x;\n        this.y = y;\n    }\n}\n\nconst handlerNames = [\n    'click', 'dblclick', 'mousewheel', 'mouseout',\n    'mouseup', 'mousedown', 'mousemove', 'contextmenu'\n];\n\ntype HandlerName = 'click' |'dblclick' |'mousewheel' |'mouseout' |\n    'mouseup' |'mousedown' |'mousemove' |'contextmenu';\n\nconst tmpRect = new BoundingRect(0, 0, 0, 0);\n\n// TODO draggable\nclass Handler extends Eventful {\n\n    storage: Storage\n    painter: PainterBase\n    painterRoot: HTMLElement\n\n    proxy: HandlerProxyInterface\n\n    private _hovered = new HoveredResult(0, 0)\n\n    private _gestureMgr: GestureMgr\n\n    private _draggingMgr: Draggable\n\n    private _pointerSize: number\n\n    _downEl: Element\n    _upEl: Element\n    _downPoint: [number, number]\n\n    constructor(\n        storage: Storage,\n        painter: PainterBase,\n        proxy: HandlerProxyInterface,\n        painterRoot: HTMLElement,\n        pointerSize: number\n    ) {\n        super();\n\n        this.storage = storage;\n\n        this.painter = painter;\n\n        this.painterRoot = painterRoot;\n\n        this._pointerSize = pointerSize;\n\n        proxy = proxy || new EmptyProxy();\n\n        /**\n         * Proxy of event. can be Dom, WebGLSurface, etc.\n         */\n        this.proxy = null;\n\n        this.setHandlerProxy(proxy);\n\n        this._draggingMgr = new Draggable(this);\n    }\n\n    setHandlerProxy(proxy: HandlerProxyInterface) {\n        if (this.proxy) {\n            this.proxy.dispose();\n        }\n\n        if (proxy) {\n            util.each(handlerNames, function (name) {\n                proxy.on && proxy.on(name, this[name as HandlerName], this);\n            }, this);\n            // Attach handler\n            proxy.handler = this;\n        }\n        this.proxy = proxy;\n    }\n\n    mousemove(event: ZRRawEvent) {\n        const x = event.zrX;\n        const y = event.zrY;\n\n        const isOutside = isOutsideBoundary(this, x, y);\n\n        let lastHovered = this._hovered;\n        let lastHoveredTarget = lastHovered.target;\n\n        // If lastHoveredTarget is removed from zr (detected by '__zr') by some API call\n        // (like 'setOption' or 'dispatchAction') in event handlers, we should find\n        // lastHovered again here. Otherwise 'mouseout' can not be triggered normally.\n        // See #6198.\n        if (lastHoveredTarget && !lastHoveredTarget.__zr) {\n            lastHovered = this.findHover(lastHovered.x, lastHovered.y);\n            lastHoveredTarget = lastHovered.target;\n        }\n\n        const hovered = this._hovered = isOutside ? new HoveredResult(x, y) : this.findHover(x, y);\n        const hoveredTarget = hovered.target;\n\n        const proxy = this.proxy;\n        proxy.setCursor && proxy.setCursor(hoveredTarget ? hoveredTarget.cursor : 'default');\n\n        // Mouse out on previous hovered element\n        if (lastHoveredTarget && hoveredTarget !== lastHoveredTarget) {\n            this.dispatchToElement(lastHovered, 'mouseout', event);\n        }\n\n        // Mouse moving on one element\n        this.dispatchToElement(hovered, 'mousemove', event);\n\n        // Mouse over on a new element\n        if (hoveredTarget && hoveredTarget !== lastHoveredTarget) {\n            this.dispatchToElement(hovered, 'mouseover', event);\n        }\n    }\n\n    mouseout(event: ZRRawEvent) {\n        const eventControl = event.zrEventControl;\n\n        if (eventControl !== 'only_globalout') {\n            this.dispatchToElement(this._hovered, 'mouseout', event);\n        }\n\n        if (eventControl !== 'no_globalout') {\n            // FIXME: if the pointer moving from the extra doms to realy \"outside\",\n            // the `globalout` should have been triggered. But currently not.\n            this.trigger('globalout', {type: 'globalout', event: event});\n        }\n    }\n\n    /**\n     * Resize\n     */\n    resize() {\n        this._hovered = new HoveredResult(0, 0);\n    }\n\n    /**\n     * Dispatch event\n     */\n    dispatch(eventName: HandlerName, eventArgs?: any) {\n        const handler = this[eventName];\n        handler && handler.call(this, eventArgs);\n    }\n\n    /**\n     * Dispose\n     */\n    dispose() {\n\n        this.proxy.dispose();\n\n        this.storage = null;\n        this.proxy = null;\n        this.painter = null;\n    }\n\n    /**\n     * 设置默认的cursor style\n     * @param cursorStyle 例如 crosshair,默认为 'default'\n     */\n    setCursorStyle(cursorStyle: string) {\n        const proxy = this.proxy;\n        proxy.setCursor && proxy.setCursor(cursorStyle);\n    }\n\n    /**\n     * 事件分发代理\n     *\n     * @private\n     * @param {Object} targetInfo {target, topTarget} 目标图形元素\n     * @param {string} eventName 事件名称\n     * @param {Object} event 事件对象\n     */\n    dispatchToElement(targetInfo: {\n        target?: Element\n        topTarget?: Element\n    }, eventName: ElementEventName, event: ZRRawEvent) {\n\n        targetInfo = targetInfo || {};\n\n        let el = targetInfo.target as Element;\n        if (el && el.silent) {\n            return;\n        }\n        const eventKey = ('on' + eventName) as ElementEventNameWithOn;\n        const eventPacket = makeEventPacket(eventName, targetInfo, event);\n\n        while (el) {\n            el[eventKey]\n                && (eventPacket.cancelBubble = !!el[eventKey].call(el, eventPacket));\n\n            el.trigger(eventName, eventPacket);\n\n            // Bubble to the host if on the textContent.\n            // PENDING\n            el = el.__hostTarget ? el.__hostTarget : el.parent;\n\n            if (eventPacket.cancelBubble) {\n                break;\n            }\n        }\n\n        if (!eventPacket.cancelBubble) {\n            // 冒泡到顶级 zrender 对象\n            this.trigger(eventName, eventPacket);\n            // 分发事件到用户自定义层\n            // 用户有可能在全局 click 事件中 dispose,所以需要判断下 painter 是否存在\n            if (this.painter && (this.painter as CanvasPainter).eachOtherLayer) {\n                (this.painter as CanvasPainter).eachOtherLayer(function (layer) {\n                    if (typeof (layer[eventKey]) === 'function') {\n                        layer[eventKey].call(layer, eventPacket);\n                    }\n                    if (layer.trigger) {\n                        layer.trigger(eventName, eventPacket);\n                    }\n                });\n            }\n        }\n    }\n\n    findHover(x: number, y: number, exclude?: Displayable): HoveredResult {\n        const list = this.storage.getDisplayList();\n        const out = new HoveredResult(x, y);\n        setHoverTarget(list, out, x, y, exclude);\n\n        if (this._pointerSize && !out.target) {\n            /**\n             * If no element at pointer position, check intersection with\n             * elements with pointer enlarged by target size.\n             */\n            const candidates: Displayable[] = [];\n            const pointerSize = this._pointerSize;\n            const targetSizeHalf = pointerSize / 2;\n            const pointerRect = new BoundingRect(x - targetSizeHalf, y - targetSizeHalf, pointerSize, pointerSize);\n\n            for (let i = list.length - 1; i >= 0; i--) {\n                const el = list[i];\n                if (el !== exclude\n                    && !el.ignore\n                    && !el.ignoreCoarsePointer\n                    // If an element ignores, its textContent should also ignore.\n                    // TSpan's parent is not a Group but a ZRText.\n                    // See Text.js _getOrCreateChild\n                    && (!el.parent || !(el.parent as any).ignoreCoarsePointer)\n                ) {\n                    tmpRect.copy(el.getBoundingRect());\n                    if (el.transform) {\n                        tmpRect.applyTransform(el.transform);\n                    }\n                    if (tmpRect.intersect(pointerRect)) {\n                        candidates.push(el);\n                    }\n                }\n            }\n\n            /**\n             * If there are elements whose bounding boxes are near the pointer,\n             * use the most top one that intersects with the enlarged pointer.\n             */\n            if (candidates.length) {\n                const rStep = 4;\n                const thetaStep = Math.PI / 12;\n                const PI2 = Math.PI * 2;\n                for (let r = 0; r < targetSizeHalf; r += rStep) {\n                    for (let theta = 0; theta < PI2; theta += thetaStep) {\n                        const x1 = x + r * Math.cos(theta);\n                        const y1 = y + r * Math.sin(theta);\n                        setHoverTarget(candidates, out, x1, y1, exclude);\n                        if (out.target) {\n                            return out;\n                        }\n                    }\n                }\n            }\n        }\n\n        return out;\n    }\n\n    processGesture(event: ZRRawEvent, stage?: 'start' | 'end' | 'change') {\n        if (!this._gestureMgr) {\n            this._gestureMgr = new GestureMgr();\n        }\n        const gestureMgr = this._gestureMgr;\n\n        stage === 'start' && gestureMgr.clear();\n\n        const gestureInfo = gestureMgr.recognize(\n            event as ZRRawTouchEvent,\n            this.findHover(event.zrX, event.zrY, null).target,\n            (this.proxy as HandlerDomProxy).dom\n        );\n\n        stage === 'end' && gestureMgr.clear();\n\n        // Do not do any preventDefault here. Upper application do that if necessary.\n        if (gestureInfo) {\n            const type = gestureInfo.type;\n            (event as ZRPinchEvent).gestureEvent = type;\n\n            let res = new HoveredResult();\n            res.target = gestureInfo.target;\n            this.dispatchToElement(res, type as ElementEventName, gestureInfo.event as ZRRawEvent);\n        }\n    }\n\n    click: (event: ZRRawEvent) => void\n    mousedown: (event: ZRRawEvent) => void\n    mouseup: (event: ZRRawEvent) => void\n    mousewheel: (event: ZRRawEvent) => void\n    dblclick: (event: ZRRawEvent) => void\n    contextmenu: (event: ZRRawEvent) => void\n}\n\n// Common handlers\nutil.each(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name: HandlerName) {\n    Handler.prototype[name] = function (event) {\n        const x = event.zrX;\n        const y = event.zrY;\n        const isOutside = isOutsideBoundary(this, x, y);\n\n        let hovered;\n        let hoveredTarget;\n\n        if (name !== 'mouseup' || !isOutside) {\n            // Find hover again to avoid click event is dispatched manually. Or click is triggered without mouseover\n            hovered = this.findHover(x, y);\n            hoveredTarget = hovered.target;\n        }\n\n        if (name === 'mousedown') {\n            this._downEl = hoveredTarget;\n            this._downPoint = [event.zrX, event.zrY];\n            // In case click triggered before mouseup\n            this._upEl = hoveredTarget;\n        }\n        else if (name === 'mouseup') {\n            this._upEl = hoveredTarget;\n        }\n        else if (name === 'click') {\n            if (this._downEl !== this._upEl\n                // Original click event is triggered on the whole canvas element,\n                // including the case that `mousedown` - `mousemove` - `mouseup`,\n                // which should be filtered, otherwise it will bring trouble to\n                // pan and zoom.\n                || !this._downPoint\n                // Arbitrary value\n                || vec2.dist(this._downPoint, [event.zrX, event.zrY]) > 4\n            ) {\n                return;\n            }\n            this._downPoint = null;\n        }\n\n        this.dispatchToElement(hovered, name, event);\n    };\n});\n\nfunction isHover(displayable: Displayable, x: number, y: number) {\n    if (displayable[displayable.rectHover ? 'rectContain' : 'contain'](x, y)) {\n        let el: Element = displayable;\n        let isSilent;\n        let ignoreClip = false;\n        while (el) {\n            // Ignore clip on any ancestors.\n            if (el.ignoreClip) {\n                ignoreClip = true;\n            }\n            if (!ignoreClip) {\n                let clipPath = el.getClipPath();\n                // If clipped by ancestor.\n                // FIXME: If clipPath has neither stroke nor fill,\n                // el.clipPath.contain(x, y) will always return false.\n                if (clipPath && !clipPath.contain(x, y)) {\n                    return false;\n                }\n            }\n            if (el.silent) {\n                isSilent = true;\n            }\n            // Consider when el is textContent, also need to be silent\n            // if any of its host el and its ancestors is silent.\n            const hostEl = el.__hostTarget;\n            el = hostEl ? hostEl : el.parent;\n        }\n        return isSilent ? SILENT : true;\n    }\n\n    return false;\n}\n\nfunction setHoverTarget(\n    list: Displayable[],\n    out: HoveredResult,\n    x: number,\n    y: number,\n    exclude: Displayable\n) {\n    for (let i = list.length - 1; i >= 0; i--) {\n        const el = list[i];\n        let hoverCheckResult;\n        if (el !== exclude\n            // getDisplayList may include ignored item in VML mode\n            && !el.ignore\n            && (hoverCheckResult = isHover(el, x, y))\n        ) {\n            !out.topTarget && (out.topTarget = el);\n            if (hoverCheckResult !== SILENT) {\n                out.target = el;\n                break;\n            }\n        }\n    }\n}\n\n/**\n * See [DRAG_OUTSIDE].\n */\nfunction isOutsideBoundary(handlerInstance: Handler, x: number, y: number) {\n    const painter = handlerInstance.painter;\n    return x < 0 || x > painter.getWidth() || y < 0 || y > painter.getHeight();\n}\n\nexport default Handler;\n","// https://github.com/mziccard/node-timsort\nconst DEFAULT_MIN_MERGE = 32;\n\nconst DEFAULT_MIN_GALLOPING = 7;\n\ntype CompareFunc =(a: T, b: T) => number\n\nfunction minRunLength(n: number): number {\n    var r = 0;\n\n    while (n >= DEFAULT_MIN_MERGE) {\n        r |= n & 1;\n        n >>= 1;\n    }\n\n    return n + r;\n}\n\nfunction makeAscendingRun(array: T[], lo: number, hi: number, compare: CompareFunc) {\n    var runHi = lo + 1;\n\n    if (runHi === hi) {\n        return 1;\n    }\n\n    if (compare(array[runHi++], array[lo]) < 0) {\n        while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) {\n            runHi++;\n        }\n\n        reverseRun(array, lo, runHi);\n    }\n    else {\n        while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) {\n            runHi++;\n        }\n    }\n\n    return runHi - lo;\n}\n\nfunction reverseRun(array: T[], lo: number, hi: number) {\n    hi--;\n\n    while (lo < hi) {\n        var t = array[lo];\n        array[lo++] = array[hi];\n        array[hi--] = t;\n    }\n}\n\nfunction binaryInsertionSort(array: T[], lo: number, hi: number, start: number, compare: CompareFunc) {\n    if (start === lo) {\n        start++;\n    }\n\n    for (; start < hi; start++) {\n        var pivot = array[start];\n\n        var left = lo;\n        var right = start;\n        var mid;\n\n        while (left < right) {\n            mid = left + right >>> 1;\n\n            if (compare(pivot, array[mid]) < 0) {\n                right = mid;\n            }\n            else {\n                left = mid + 1;\n            }\n        }\n\n        var n = start - left;\n\n        switch (n) {\n            case 3:\n                array[left + 3] = array[left + 2];\n\n            case 2:\n                array[left + 2] = array[left + 1];\n\n            case 1:\n                array[left + 1] = array[left];\n                break;\n            default:\n                while (n > 0) {\n                    array[left + n] = array[left + n - 1];\n                    n--;\n                }\n        }\n\n        array[left] = pivot;\n    }\n}\n\nfunction gallopLeft(value: T, array: T[], start: number, length: number, hint: number, compare: CompareFunc) {\n    var lastOffset = 0;\n    var maxOffset = 0;\n    var offset = 1;\n\n    if (compare(value, array[start + hint]) > 0) {\n        maxOffset = length - hint;\n\n        while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) {\n            lastOffset = offset;\n            offset = (offset << 1) + 1;\n\n            if (offset <= 0) {\n                offset = maxOffset;\n            }\n        }\n\n        if (offset > maxOffset) {\n            offset = maxOffset;\n        }\n\n        lastOffset += hint;\n        offset += hint;\n    }\n    else {\n        maxOffset = hint + 1;\n        while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) {\n            lastOffset = offset;\n            offset = (offset << 1) + 1;\n\n            if (offset <= 0) {\n                offset = maxOffset;\n            }\n        }\n        if (offset > maxOffset) {\n            offset = maxOffset;\n        }\n\n        var tmp = lastOffset;\n        lastOffset = hint - offset;\n        offset = hint - tmp;\n    }\n\n    lastOffset++;\n    while (lastOffset < offset) {\n        var m = lastOffset + (offset - lastOffset >>> 1);\n\n        if (compare(value, array[start + m]) > 0) {\n            lastOffset = m + 1;\n        }\n        else {\n            offset = m;\n        }\n    }\n    return offset;\n}\n\nfunction gallopRight(value: T, array: T[], start: number, length: number, hint: number, compare: CompareFunc) {\n    var lastOffset = 0;\n    var maxOffset = 0;\n    var offset = 1;\n\n    if (compare(value, array[start + hint]) < 0) {\n        maxOffset = hint + 1;\n\n        while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) {\n            lastOffset = offset;\n            offset = (offset << 1) + 1;\n\n            if (offset <= 0) {\n                offset = maxOffset;\n            }\n        }\n\n        if (offset > maxOffset) {\n            offset = maxOffset;\n        }\n\n        var tmp = lastOffset;\n        lastOffset = hint - offset;\n        offset = hint - tmp;\n    }\n    else {\n        maxOffset = length - hint;\n\n        while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) {\n            lastOffset = offset;\n            offset = (offset << 1) + 1;\n\n            if (offset <= 0) {\n                offset = maxOffset;\n            }\n        }\n\n        if (offset > maxOffset) {\n            offset = maxOffset;\n        }\n\n        lastOffset += hint;\n        offset += hint;\n    }\n\n    lastOffset++;\n\n    while (lastOffset < offset) {\n        var m = lastOffset + (offset - lastOffset >>> 1);\n\n        if (compare(value, array[start + m]) < 0) {\n            offset = m;\n        }\n        else {\n            lastOffset = m + 1;\n        }\n    }\n\n    return offset;\n}\n\nfunction TimSort(array: T[], compare: CompareFunc) {\n    let minGallop = DEFAULT_MIN_GALLOPING;\n    let runStart: number[];\n    let runLength: number[];\n    let stackSize = 0;\n\n    var tmp: T[] = [];\n\n    runStart = [];\n    runLength = [];\n\n    function pushRun(_runStart: number, _runLength: number) {\n        runStart[stackSize] = _runStart;\n        runLength[stackSize] = _runLength;\n        stackSize += 1;\n    }\n\n    function mergeRuns() {\n        while (stackSize > 1) {\n            var n = stackSize - 2;\n\n            if (\n                (n >= 1 && runLength[n - 1] <= runLength[n] + runLength[n + 1])\n                || (n >= 2 && runLength[n - 2] <= runLength[n] + runLength[n - 1])\n            ) {\n                if (runLength[n - 1] < runLength[n + 1]) {\n                    n--;\n                }\n            }\n            else if (runLength[n] > runLength[n + 1]) {\n                break;\n            }\n            mergeAt(n);\n        }\n    }\n\n    function forceMergeRuns() {\n        while (stackSize > 1) {\n            var n = stackSize - 2;\n\n            if (n > 0 && runLength[n - 1] < runLength[n + 1]) {\n                n--;\n            }\n\n            mergeAt(n);\n        }\n    }\n\n    function mergeAt(i: number) {\n        var start1 = runStart[i];\n        var length1 = runLength[i];\n        var start2 = runStart[i + 1];\n        var length2 = runLength[i + 1];\n\n        runLength[i] = length1 + length2;\n\n        if (i === stackSize - 3) {\n            runStart[i + 1] = runStart[i + 2];\n            runLength[i + 1] = runLength[i + 2];\n        }\n\n        stackSize--;\n\n        var k = gallopRight(array[start2], array, start1, length1, 0, compare);\n        start1 += k;\n        length1 -= k;\n\n        if (length1 === 0) {\n            return;\n        }\n\n        length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare);\n\n        if (length2 === 0) {\n            return;\n        }\n\n        if (length1 <= length2) {\n            mergeLow(start1, length1, start2, length2);\n        }\n        else {\n            mergeHigh(start1, length1, start2, length2);\n        }\n    }\n\n    function mergeLow(start1: number, length1: number, start2: number, length2: number) {\n        var i = 0;\n\n        for (i = 0; i < length1; i++) {\n            tmp[i] = array[start1 + i];\n        }\n\n        var cursor1 = 0;\n        var cursor2 = start2;\n        var dest = start1;\n\n        array[dest++] = array[cursor2++];\n\n        if (--length2 === 0) {\n            for (i = 0; i < length1; i++) {\n                array[dest + i] = tmp[cursor1 + i];\n            }\n            return;\n        }\n\n        if (length1 === 1) {\n            for (i = 0; i < length2; i++) {\n                array[dest + i] = array[cursor2 + i];\n            }\n            array[dest + length2] = tmp[cursor1];\n            return;\n        }\n\n        var _minGallop = minGallop;\n        var count1;\n        var count2;\n        var exit;\n\n        while (1) {\n            count1 = 0;\n            count2 = 0;\n            exit = false;\n\n            do {\n                if (compare(array[cursor2], tmp[cursor1]) < 0) {\n                    array[dest++] = array[cursor2++];\n                    count2++;\n                    count1 = 0;\n\n                    if (--length2 === 0) {\n                        exit = true;\n                        break;\n                    }\n                }\n                else {\n                    array[dest++] = tmp[cursor1++];\n                    count1++;\n                    count2 = 0;\n                    if (--length1 === 1) {\n                        exit = true;\n                        break;\n                    }\n                }\n            } while ((count1 | count2) < _minGallop);\n\n            if (exit) {\n                break;\n            }\n\n            do {\n                count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare);\n\n                if (count1 !== 0) {\n                    for (i = 0; i < count1; i++) {\n                        array[dest + i] = tmp[cursor1 + i];\n                    }\n\n                    dest += count1;\n                    cursor1 += count1;\n                    length1 -= count1;\n                    if (length1 <= 1) {\n                        exit = true;\n                        break;\n                    }\n                }\n\n                array[dest++] = array[cursor2++];\n\n                if (--length2 === 0) {\n                    exit = true;\n                    break;\n                }\n\n                count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare);\n\n                if (count2 !== 0) {\n                    for (i = 0; i < count2; i++) {\n                        array[dest + i] = array[cursor2 + i];\n                    }\n\n                    dest += count2;\n                    cursor2 += count2;\n                    length2 -= count2;\n\n                    if (length2 === 0) {\n                        exit = true;\n                        break;\n                    }\n                }\n                array[dest++] = tmp[cursor1++];\n\n                if (--length1 === 1) {\n                    exit = true;\n                    break;\n                }\n\n                _minGallop--;\n            } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n\n            if (exit) {\n                break;\n            }\n\n            if (_minGallop < 0) {\n                _minGallop = 0;\n            }\n\n            _minGallop += 2;\n        }\n\n        minGallop = _minGallop;\n\n        minGallop < 1 && (minGallop = 1);\n\n        if (length1 === 1) {\n            for (i = 0; i < length2; i++) {\n                array[dest + i] = array[cursor2 + i];\n            }\n            array[dest + length2] = tmp[cursor1];\n        }\n        else if (length1 === 0) {\n            throw new Error();\n        }\n        else {\n            for (i = 0; i < length1; i++) {\n                array[dest + i] = tmp[cursor1 + i];\n            }\n        }\n    }\n\n    function mergeHigh(start1: number, length1: number, start2: number, length2: number) {\n        var i = 0;\n\n        for (i = 0; i < length2; i++) {\n            tmp[i] = array[start2 + i];\n        }\n\n        var cursor1 = start1 + length1 - 1;\n        var cursor2 = length2 - 1;\n        var dest = start2 + length2 - 1;\n        var customCursor = 0;\n        var customDest = 0;\n\n        array[dest--] = array[cursor1--];\n\n        if (--length1 === 0) {\n            customCursor = dest - (length2 - 1);\n\n            for (i = 0; i < length2; i++) {\n                array[customCursor + i] = tmp[i];\n            }\n\n            return;\n        }\n\n        if (length2 === 1) {\n            dest -= length1;\n            cursor1 -= length1;\n            customDest = dest + 1;\n            customCursor = cursor1 + 1;\n\n            for (i = length1 - 1; i >= 0; i--) {\n                array[customDest + i] = array[customCursor + i];\n            }\n\n            array[dest] = tmp[cursor2];\n            return;\n        }\n\n        var _minGallop = minGallop;\n\n        while (true) {\n            var count1 = 0;\n            var count2 = 0;\n            var exit = false;\n\n            do {\n                if (compare(tmp[cursor2], array[cursor1]) < 0) {\n                    array[dest--] = array[cursor1--];\n                    count1++;\n                    count2 = 0;\n                    if (--length1 === 0) {\n                        exit = true;\n                        break;\n                    }\n                }\n                else {\n                    array[dest--] = tmp[cursor2--];\n                    count2++;\n                    count1 = 0;\n                    if (--length2 === 1) {\n                        exit = true;\n                        break;\n                    }\n                }\n            } while ((count1 | count2) < _minGallop);\n\n            if (exit) {\n                break;\n            }\n\n            do {\n                count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare);\n\n                if (count1 !== 0) {\n                    dest -= count1;\n                    cursor1 -= count1;\n                    length1 -= count1;\n                    customDest = dest + 1;\n                    customCursor = cursor1 + 1;\n\n                    for (i = count1 - 1; i >= 0; i--) {\n                        array[customDest + i] = array[customCursor + i];\n                    }\n\n                    if (length1 === 0) {\n                        exit = true;\n                        break;\n                    }\n                }\n\n                array[dest--] = tmp[cursor2--];\n\n                if (--length2 === 1) {\n                    exit = true;\n                    break;\n                }\n\n                count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare);\n\n                if (count2 !== 0) {\n                    dest -= count2;\n                    cursor2 -= count2;\n                    length2 -= count2;\n                    customDest = dest + 1;\n                    customCursor = cursor2 + 1;\n\n                    for (i = 0; i < count2; i++) {\n                        array[customDest + i] = tmp[customCursor + i];\n                    }\n\n                    if (length2 <= 1) {\n                        exit = true;\n                        break;\n                    }\n                }\n\n                array[dest--] = array[cursor1--];\n\n                if (--length1 === 0) {\n                    exit = true;\n                    break;\n                }\n\n                _minGallop--;\n            } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n\n            if (exit) {\n                break;\n            }\n\n            if (_minGallop < 0) {\n                _minGallop = 0;\n            }\n\n            _minGallop += 2;\n        }\n\n        minGallop = _minGallop;\n\n        if (minGallop < 1) {\n            minGallop = 1;\n        }\n\n        if (length2 === 1) {\n            dest -= length1;\n            cursor1 -= length1;\n            customDest = dest + 1;\n            customCursor = cursor1 + 1;\n\n            for (i = length1 - 1; i >= 0; i--) {\n                array[customDest + i] = array[customCursor + i];\n            }\n\n            array[dest] = tmp[cursor2];\n        }\n        else if (length2 === 0) {\n            throw new Error();\n            // throw new Error('mergeHigh preconditions were not respected');\n        }\n        else {\n            customCursor = dest - (length2 - 1);\n            for (i = 0; i < length2; i++) {\n                array[customCursor + i] = tmp[i];\n            }\n        }\n    }\n\n    return {\n        mergeRuns,\n        forceMergeRuns,\n        pushRun\n    };\n}\n\nexport default function sort(\n    array: T[],\n    compare: CompareFunc,\n    lo?: number, hi?: number\n) {\n    if (!lo) {\n        lo = 0;\n    }\n    if (!hi) {\n        hi = array.length;\n    }\n\n    var remaining = hi - lo;\n\n    if (remaining < 2) {\n        return;\n    }\n\n    var runLength = 0;\n\n    if (remaining < DEFAULT_MIN_MERGE) {\n        runLength = makeAscendingRun(array, lo, hi, compare);\n        binaryInsertionSort(array, lo, hi, lo + runLength, compare);\n        return;\n    }\n\n    var ts = TimSort(array, compare);\n\n    var minRun = minRunLength(remaining);\n\n    do {\n        runLength = makeAscendingRun(array, lo, hi, compare);\n        if (runLength < minRun) {\n            var force = remaining;\n            if (force > minRun) {\n                force = minRun;\n            }\n\n            binaryInsertionSort(array, lo, lo + force, lo + runLength, compare);\n            runLength = force;\n        }\n\n        ts.pushRun(lo, runLength);\n        ts.mergeRuns();\n\n        remaining -= runLength;\n        lo += runLength;\n    } while (remaining !== 0);\n\n    ts.forceMergeRuns();\n}\n","// Bit masks to check which parts of element needs to be updated.\r\nexport const REDRAW_BIT = 1;\r\nexport const STYLE_CHANGED_BIT = 2;\r\nexport const SHAPE_CHANGED_BIT = 4;\r\n","import * as util from './core/util';\r\nimport Group, { GroupLike } from './graphic/Group';\r\nimport Element from './Element';\r\n\r\n// Use timsort because in most case elements are partially sorted\r\n// https://jsfiddle.net/pissang/jr4x7mdm/8/\r\nimport timsort from './core/timsort';\r\nimport Displayable from './graphic/Displayable';\r\nimport Path from './graphic/Path';\r\nimport { REDRAW_BIT } from './graphic/constants';\r\n\r\nlet invalidZErrorLogged = false;\r\nfunction logInvalidZError() {\r\n    if (invalidZErrorLogged) {\r\n        return;\r\n    }\r\n    invalidZErrorLogged = true;\r\n    console.warn('z / z2 / zlevel of displayable is invalid, which may cause unexpected errors');\r\n}\r\n\r\nfunction shapeCompareFunc(a: Displayable, b: Displayable) {\r\n    if (a.zlevel === b.zlevel) {\r\n        if (a.z === b.z) {\r\n            return a.z2 - b.z2;\r\n        }\r\n        return a.z - b.z;\r\n    }\r\n    return a.zlevel - b.zlevel;\r\n}\r\n\r\nexport default class Storage {\r\n\r\n    private _roots: Element[] = []\r\n\r\n    private _displayList: Displayable[] = []\r\n\r\n    private _displayListLen = 0\r\n\r\n    traverse(\r\n        cb: (this: T, el: Element) => void,\r\n        context?: T\r\n    ) {\r\n        for (let i = 0; i < this._roots.length; i++) {\r\n            this._roots[i].traverse(cb, context);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get a list of elements to be rendered\r\n     *\r\n     * @param {boolean} update whether to update elements before return\r\n     * @param {DisplayParams} params options\r\n     * @return {Displayable[]} a list of elements\r\n     */\r\n    getDisplayList(update?: boolean, includeIgnore?: boolean): Displayable[] {\r\n        includeIgnore = includeIgnore || false;\r\n        const displayList = this._displayList;\r\n        // If displaylist is not created yet. Update force\r\n        if (update || !displayList.length) {\r\n            this.updateDisplayList(includeIgnore);\r\n        }\r\n        return displayList;\r\n    }\r\n\r\n    /**\r\n     * 更新图形的绘制队列。\r\n     * 每次绘制前都会调用,该方法会先深度优先遍历整个树,更新所有Group和Shape的变换并且把所有可见的Shape保存到数组中,\r\n     * 最后根据绘制的优先级(zlevel > z > 插入顺序)排序得到绘制队列\r\n     */\r\n    updateDisplayList(includeIgnore?: boolean) {\r\n        this._displayListLen = 0;\r\n\r\n        const roots = this._roots;\r\n        const displayList = this._displayList;\r\n        for (let i = 0, len = roots.length; i < len; i++) {\r\n            this._updateAndAddDisplayable(roots[i], null, includeIgnore);\r\n        }\r\n\r\n        displayList.length = this._displayListLen;\r\n\r\n        timsort(displayList, shapeCompareFunc);\r\n    }\r\n\r\n    private _updateAndAddDisplayable(\r\n        el: Element,\r\n        clipPaths: Path[],\r\n        includeIgnore?: boolean\r\n    ) {\r\n        if (el.ignore && !includeIgnore) {\r\n            return;\r\n        }\r\n\r\n        el.beforeUpdate();\r\n        el.update();\r\n        el.afterUpdate();\r\n\r\n        const userSetClipPath = el.getClipPath();\r\n\r\n        if (el.ignoreClip) {\r\n            clipPaths = null;\r\n        }\r\n        else if (userSetClipPath) {\r\n\r\n            // FIXME 效率影响\r\n            if (clipPaths) {\r\n                clipPaths = clipPaths.slice();\r\n            }\r\n            else {\r\n                clipPaths = [];\r\n            }\r\n\r\n            let currentClipPath = userSetClipPath;\r\n            let parentClipPath = el;\r\n            // Recursively add clip path\r\n            while (currentClipPath) {\r\n                // clipPath 的变换是基于使用这个 clipPath 的元素\r\n                // TODO: parent should be group type.\r\n                currentClipPath.parent = parentClipPath as Group;\r\n                currentClipPath.updateTransform();\r\n\r\n                clipPaths.push(currentClipPath);\r\n\r\n                parentClipPath = currentClipPath;\r\n                currentClipPath = currentClipPath.getClipPath();\r\n            }\r\n        }\r\n\r\n        // ZRText and Group and combining morphing Path may use children\r\n        if ((el as GroupLike).childrenRef) {\r\n            const children = (el as GroupLike).childrenRef();\r\n\r\n            for (let i = 0; i < children.length; i++) {\r\n                const child = children[i];\r\n\r\n                // Force to mark as dirty if group is dirty\r\n                if (el.__dirty) {\r\n                    child.__dirty |= REDRAW_BIT;\r\n                }\r\n\r\n                this._updateAndAddDisplayable(child, clipPaths, includeIgnore);\r\n            }\r\n\r\n            // Mark group clean here\r\n            el.__dirty = 0;\r\n\r\n        }\r\n        else {\r\n            const disp = el as Displayable;\r\n            // Element is displayable\r\n            if (clipPaths && clipPaths.length) {\r\n                disp.__clipPaths = clipPaths;\r\n            }\r\n            else if (disp.__clipPaths && disp.__clipPaths.length > 0) {\r\n                disp.__clipPaths = [];\r\n            }\r\n\r\n            // Avoid invalid z, z2, zlevel cause sorting error.\r\n            if (isNaN(disp.z)) {\r\n                logInvalidZError();\r\n                disp.z = 0;\r\n            }\r\n            if (isNaN(disp.z2)) {\r\n                logInvalidZError();\r\n                disp.z2 = 0;\r\n            }\r\n            if (isNaN(disp.zlevel)) {\r\n                logInvalidZError();\r\n                disp.zlevel = 0;\r\n            }\r\n\r\n            this._displayList[this._displayListLen++] = disp;\r\n        }\r\n\r\n        // Add decal\r\n        const decalEl = (el as Path).getDecalElement && (el as Path).getDecalElement();\r\n        if (decalEl) {\r\n            this._updateAndAddDisplayable(decalEl, clipPaths, includeIgnore);\r\n        }\r\n\r\n        // Add attached text element and guide line.\r\n        const textGuide = el.getTextGuideLine();\r\n        if (textGuide) {\r\n            this._updateAndAddDisplayable(textGuide, clipPaths, includeIgnore);\r\n        }\r\n\r\n        const textEl = el.getTextContent();\r\n        if (textEl) {\r\n            this._updateAndAddDisplayable(textEl, clipPaths, includeIgnore);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * 添加图形(Displayable)或者组(Group)到根节点\r\n     */\r\n    addRoot(el: Element) {\r\n        if (el.__zr && el.__zr.storage === this) {\r\n            return;\r\n        }\r\n\r\n        this._roots.push(el);\r\n    }\r\n\r\n    /**\r\n     * 删除指定的图形(Displayable)或者组(Group)\r\n     * @param el\r\n     */\r\n    delRoot(el: Element | Element[]) {\r\n\r\n        if (el instanceof Array) {\r\n            for (let i = 0, l = el.length; i < l; i++) {\r\n                this.delRoot(el[i]);\r\n            }\r\n            return;\r\n        }\r\n\r\n        const idx = util.indexOf(this._roots, el);\r\n        if (idx >= 0) {\r\n            this._roots.splice(idx, 1);\r\n        }\r\n    }\r\n\r\n    delAllRoots() {\r\n        this._roots = [];\r\n        this._displayList = [];\r\n        this._displayListLen = 0;\r\n\r\n        return;\r\n    }\r\n\r\n    getRoots() {\r\n        return this._roots;\r\n    }\r\n\r\n    /**\r\n     * 清空并且释放Storage\r\n     */\r\n    dispose() {\r\n        this._displayList = null;\r\n        this._roots = null;\r\n    }\r\n\r\n    displayableSortFunc = shapeCompareFunc\r\n}","import env from '../core/env';\r\n\r\ntype RequestAnimationFrameType = typeof window.requestAnimationFrame\r\n\r\nlet requestAnimationFrame: RequestAnimationFrameType;\r\n\r\nrequestAnimationFrame = (\r\n\tenv.hasGlobalWindow\r\n\t\t&& (\r\n\t\t\t(window.requestAnimationFrame && window.requestAnimationFrame.bind(window))\r\n\t\t\t// https://github.com/ecomfe/zrender/issues/189#issuecomment-224919809\r\n\t\t\t|| ((window as any).msRequestAnimationFrame && (window as any).msRequestAnimationFrame.bind(window))\r\n\t\t\t|| (window as any).mozRequestAnimationFrame\r\n\t\t\t// @ts-ignore\r\n\t\t\t|| window.webkitRequestAnimationFrame\r\n\t\t)\r\n) || function (func: Parameters[0]): number {\r\n\treturn setTimeout(func, 16) as any;\r\n};\r\n\r\nexport default requestAnimationFrame;\r\n","/**\r\n * 缓动代码来自 https://github.com/sole/tween.js/blob/master/src/Tween.js\r\n * @see http://sole.github.io/tween.js/examples/03_graphs.html\r\n * @exports zrender/animation/easing\r\n */\r\n\r\ntype easingFunc = (percent: number) => number;\r\n\r\nexport type AnimationEasing = keyof typeof easingFuncs | easingFunc;\r\n\r\nconst easingFuncs = {\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    linear(k: number) {\r\n        return k;\r\n    },\r\n\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    quadraticIn(k: number) {\r\n        return k * k;\r\n    },\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    quadraticOut(k: number) {\r\n        return k * (2 - k);\r\n    },\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    quadraticInOut(k: number) {\r\n        if ((k *= 2) < 1) {\r\n            return 0.5 * k * k;\r\n        }\r\n        return -0.5 * (--k * (k - 2) - 1);\r\n    },\r\n\r\n    // 三次方的缓动(t^3)\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    cubicIn(k: number) {\r\n        return k * k * k;\r\n    },\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    cubicOut(k: number) {\r\n        return --k * k * k + 1;\r\n    },\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    cubicInOut(k: number) {\r\n        if ((k *= 2) < 1) {\r\n            return 0.5 * k * k * k;\r\n        }\r\n        return 0.5 * ((k -= 2) * k * k + 2);\r\n    },\r\n\r\n    // 四次方的缓动(t^4)\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    quarticIn(k: number) {\r\n        return k * k * k * k;\r\n    },\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    quarticOut(k: number) {\r\n        return 1 - (--k * k * k * k);\r\n    },\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    quarticInOut(k: number) {\r\n        if ((k *= 2) < 1) {\r\n            return 0.5 * k * k * k * k;\r\n        }\r\n        return -0.5 * ((k -= 2) * k * k * k - 2);\r\n    },\r\n\r\n    // 五次方的缓动(t^5)\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    quinticIn(k: number) {\r\n        return k * k * k * k * k;\r\n    },\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    quinticOut(k: number) {\r\n        return --k * k * k * k * k + 1;\r\n    },\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    quinticInOut(k: number) {\r\n        if ((k *= 2) < 1) {\r\n            return 0.5 * k * k * k * k * k;\r\n        }\r\n        return 0.5 * ((k -= 2) * k * k * k * k + 2);\r\n    },\r\n\r\n    // 正弦曲线的缓动(sin(t))\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    sinusoidalIn(k: number) {\r\n        return 1 - Math.cos(k * Math.PI / 2);\r\n    },\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    sinusoidalOut(k: number) {\r\n        return Math.sin(k * Math.PI / 2);\r\n    },\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    sinusoidalInOut(k: number) {\r\n        return 0.5 * (1 - Math.cos(Math.PI * k));\r\n    },\r\n\r\n    // 指数曲线的缓动(2^t)\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    exponentialIn(k: number) {\r\n        return k === 0 ? 0 : Math.pow(1024, k - 1);\r\n    },\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    exponentialOut(k: number) {\r\n        return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);\r\n    },\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    exponentialInOut(k: number) {\r\n        if (k === 0) {\r\n            return 0;\r\n        }\r\n        if (k === 1) {\r\n            return 1;\r\n        }\r\n        if ((k *= 2) < 1) {\r\n            return 0.5 * Math.pow(1024, k - 1);\r\n        }\r\n        return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);\r\n    },\r\n\r\n    // 圆形曲线的缓动(sqrt(1-t^2))\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    circularIn(k: number) {\r\n        return 1 - Math.sqrt(1 - k * k);\r\n    },\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    circularOut(k: number) {\r\n        return Math.sqrt(1 - (--k * k));\r\n    },\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    circularInOut(k: number) {\r\n        if ((k *= 2) < 1) {\r\n            return -0.5 * (Math.sqrt(1 - k * k) - 1);\r\n        }\r\n        return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);\r\n    },\r\n\r\n    // 创建类似于弹簧在停止前来回振荡的动画\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    elasticIn(k: number) {\r\n        let s;\r\n        let a = 0.1;\r\n        let p = 0.4;\r\n        if (k === 0) {\r\n            return 0;\r\n        }\r\n        if (k === 1) {\r\n            return 1;\r\n        }\r\n        if (!a || a < 1) {\r\n            a = 1;\r\n            s = p / 4;\r\n        }\r\n        else {\r\n            s = p * Math.asin(1 / a) / (2 * Math.PI);\r\n        }\r\n        return -(a * Math.pow(2, 10 * (k -= 1))\r\n                    * Math.sin((k - s) * (2 * Math.PI) / p));\r\n    },\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    elasticOut(k: number) {\r\n        let s;\r\n        let a = 0.1;\r\n        let p = 0.4;\r\n        if (k === 0) {\r\n            return 0;\r\n        }\r\n        if (k === 1) {\r\n            return 1;\r\n        }\r\n        if (!a || a < 1) {\r\n            a = 1;\r\n            s = p / 4;\r\n        }\r\n        else {\r\n            s = p * Math.asin(1 / a) / (2 * Math.PI);\r\n        }\r\n        return (a * Math.pow(2, -10 * k)\r\n                    * Math.sin((k - s) * (2 * Math.PI) / p) + 1);\r\n    },\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    elasticInOut(k: number) {\r\n        let s;\r\n        let a = 0.1;\r\n        let p = 0.4;\r\n        if (k === 0) {\r\n            return 0;\r\n        }\r\n        if (k === 1) {\r\n            return 1;\r\n        }\r\n        if (!a || a < 1) {\r\n            a = 1;\r\n            s = p / 4;\r\n        }\r\n        else {\r\n            s = p * Math.asin(1 / a) / (2 * Math.PI);\r\n        }\r\n        if ((k *= 2) < 1) {\r\n            return -0.5 * (a * Math.pow(2, 10 * (k -= 1))\r\n                * Math.sin((k - s) * (2 * Math.PI) / p));\r\n        }\r\n        return a * Math.pow(2, -10 * (k -= 1))\r\n                * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;\r\n\r\n    },\r\n\r\n    // 在某一动画开始沿指示的路径进行动画处理前稍稍收回该动画的移动\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    backIn(k: number) {\r\n        let s = 1.70158;\r\n        return k * k * ((s + 1) * k - s);\r\n    },\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    backOut(k: number) {\r\n        let s = 1.70158;\r\n        return --k * k * ((s + 1) * k + s) + 1;\r\n    },\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    backInOut(k: number) {\r\n        let s = 1.70158 * 1.525;\r\n        if ((k *= 2) < 1) {\r\n            return 0.5 * (k * k * ((s + 1) * k - s));\r\n        }\r\n        return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);\r\n    },\r\n\r\n    // 创建弹跳效果\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    bounceIn(k: number) {\r\n        return 1 - easingFuncs.bounceOut(1 - k);\r\n    },\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    bounceOut(k: number) {\r\n        if (k < (1 / 2.75)) {\r\n            return 7.5625 * k * k;\r\n        }\r\n        else if (k < (2 / 2.75)) {\r\n            return 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75;\r\n        }\r\n        else if (k < (2.5 / 2.75)) {\r\n            return 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375;\r\n        }\r\n        else {\r\n            return 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375;\r\n        }\r\n    },\r\n    /**\r\n    * @param {number} k\r\n    * @return {number}\r\n    */\r\n    bounceInOut(k: number) {\r\n        if (k < 0.5) {\r\n            return easingFuncs.bounceIn(k * 2) * 0.5;\r\n        }\r\n        return easingFuncs.bounceOut(k * 2 - 1) * 0.5 + 0.5;\r\n    }\r\n};\r\n\r\n\r\nexport default easingFuncs;","/**\r\n * 曲线辅助模块\r\n */\r\n\r\nimport {\r\n    create as v2Create,\r\n    distSquare as v2DistSquare,\r\n    VectorArray\r\n} from './vector';\r\n\r\nconst mathPow = Math.pow;\r\nconst mathSqrt = Math.sqrt;\r\n\r\nconst EPSILON = 1e-8;\r\nconst EPSILON_NUMERIC = 1e-4;\r\n\r\nconst THREE_SQRT = mathSqrt(3);\r\nconst ONE_THIRD = 1 / 3;\r\n\r\n// 临时变量\r\nconst _v0 = v2Create();\r\nconst _v1 = v2Create();\r\nconst _v2 = v2Create();\r\n\r\nfunction isAroundZero(val: number) {\r\n    return val > -EPSILON && val < EPSILON;\r\n}\r\nfunction isNotAroundZero(val: number) {\r\n    return val > EPSILON || val < -EPSILON;\r\n}\r\n/**\r\n * 计算三次贝塞尔值\r\n */\r\nexport function cubicAt(p0: number, p1: number, p2: number, p3: number, t: number): number {\r\n    const onet = 1 - t;\r\n    return onet * onet * (onet * p0 + 3 * t * p1)\r\n            + t * t * (t * p3 + 3 * onet * p2);\r\n}\r\n\r\n/**\r\n * 计算三次贝塞尔导数值\r\n */\r\nexport function cubicDerivativeAt(p0: number, p1: number, p2: number, p3: number, t: number): number {\r\n    const onet = 1 - t;\r\n    return 3 * (\r\n        ((p1 - p0) * onet + 2 * (p2 - p1) * t) * onet\r\n        + (p3 - p2) * t * t\r\n    );\r\n}\r\n\r\n/**\r\n * 计算三次贝塞尔方程根,使用盛金公式\r\n */\r\nexport function cubicRootAt(p0: number, p1: number, p2: number, p3: number, val: number, roots: number[]): number {\r\n    // Evaluate roots of cubic functions\r\n    const a = p3 + 3 * (p1 - p2) - p0;\r\n    const b = 3 * (p2 - p1 * 2 + p0);\r\n    const c = 3 * (p1 - p0);\r\n    const d = p0 - val;\r\n\r\n    const A = b * b - 3 * a * c;\r\n    const B = b * c - 9 * a * d;\r\n    const C = c * c - 3 * b * d;\r\n\r\n    let n = 0;\r\n\r\n    if (isAroundZero(A) && isAroundZero(B)) {\r\n        if (isAroundZero(b)) {\r\n            roots[0] = 0;\r\n        }\r\n        else {\r\n            const t1 = -c / b;  //t1, t2, t3, b is not zero\r\n            if (t1 >= 0 && t1 <= 1) {\r\n                roots[n++] = t1;\r\n            }\r\n        }\r\n    }\r\n    else {\r\n        const disc = B * B - 4 * A * C;\r\n\r\n        if (isAroundZero(disc)) {\r\n            const K = B / A;\r\n            const t1 = -b / a + K;  // t1, a is not zero\r\n            const t2 = -K / 2;  // t2, t3\r\n            if (t1 >= 0 && t1 <= 1) {\r\n                roots[n++] = t1;\r\n            }\r\n            if (t2 >= 0 && t2 <= 1) {\r\n                roots[n++] = t2;\r\n            }\r\n        }\r\n        else if (disc > 0) {\r\n            const discSqrt = mathSqrt(disc);\r\n            let Y1 = A * b + 1.5 * a * (-B + discSqrt);\r\n            let Y2 = A * b + 1.5 * a * (-B - discSqrt);\r\n            if (Y1 < 0) {\r\n                Y1 = -mathPow(-Y1, ONE_THIRD);\r\n            }\r\n            else {\r\n                Y1 = mathPow(Y1, ONE_THIRD);\r\n            }\r\n            if (Y2 < 0) {\r\n                Y2 = -mathPow(-Y2, ONE_THIRD);\r\n            }\r\n            else {\r\n                Y2 = mathPow(Y2, ONE_THIRD);\r\n            }\r\n            const t1 = (-b - (Y1 + Y2)) / (3 * a);\r\n            if (t1 >= 0 && t1 <= 1) {\r\n                roots[n++] = t1;\r\n            }\r\n        }\r\n        else {\r\n            const T = (2 * A * b - 3 * a * B) / (2 * mathSqrt(A * A * A));\r\n            const theta = Math.acos(T) / 3;\r\n            const ASqrt = mathSqrt(A);\r\n            const tmp = Math.cos(theta);\r\n\r\n            const t1 = (-b - 2 * ASqrt * tmp) / (3 * a);\r\n            const t2 = (-b + ASqrt * (tmp + THREE_SQRT * Math.sin(theta))) / (3 * a);\r\n            const t3 = (-b + ASqrt * (tmp - THREE_SQRT * Math.sin(theta))) / (3 * a);\r\n            if (t1 >= 0 && t1 <= 1) {\r\n                roots[n++] = t1;\r\n            }\r\n            if (t2 >= 0 && t2 <= 1) {\r\n                roots[n++] = t2;\r\n            }\r\n            if (t3 >= 0 && t3 <= 1) {\r\n                roots[n++] = t3;\r\n            }\r\n        }\r\n    }\r\n    return n;\r\n}\r\n\r\n/**\r\n * 计算三次贝塞尔方程极限值的位置\r\n * @return 有效数目\r\n */\r\nexport function cubicExtrema(p0: number, p1: number, p2: number, p3: number, extrema: number[]): number {\r\n    const b = 6 * p2 - 12 * p1 + 6 * p0;\r\n    const a = 9 * p1 + 3 * p3 - 3 * p0 - 9 * p2;\r\n    const c = 3 * p1 - 3 * p0;\r\n\r\n    let n = 0;\r\n    if (isAroundZero(a)) {\r\n        if (isNotAroundZero(b)) {\r\n            const t1 = -c / b;\r\n            if (t1 >= 0 && t1 <= 1) {\r\n                extrema[n++] = t1;\r\n            }\r\n        }\r\n    }\r\n    else {\r\n        const disc = b * b - 4 * a * c;\r\n        if (isAroundZero(disc)) {\r\n            extrema[0] = -b / (2 * a);\r\n        }\r\n        else if (disc > 0) {\r\n            const discSqrt = mathSqrt(disc);\r\n            const t1 = (-b + discSqrt) / (2 * a);\r\n            const t2 = (-b - discSqrt) / (2 * a);\r\n            if (t1 >= 0 && t1 <= 1) {\r\n                extrema[n++] = t1;\r\n            }\r\n            if (t2 >= 0 && t2 <= 1) {\r\n                extrema[n++] = t2;\r\n            }\r\n        }\r\n    }\r\n    return n;\r\n}\r\n\r\n/**\r\n * 细分三次贝塞尔曲线\r\n */\r\nexport function cubicSubdivide(p0: number, p1: number, p2: number, p3: number, t: number, out: number[]) {\r\n    const p01 = (p1 - p0) * t + p0;\r\n    const p12 = (p2 - p1) * t + p1;\r\n    const p23 = (p3 - p2) * t + p2;\r\n\r\n    const p012 = (p12 - p01) * t + p01;\r\n    const p123 = (p23 - p12) * t + p12;\r\n\r\n    const p0123 = (p123 - p012) * t + p012;\r\n    // Seg0\r\n    out[0] = p0;\r\n    out[1] = p01;\r\n    out[2] = p012;\r\n    out[3] = p0123;\r\n    // Seg1\r\n    out[4] = p0123;\r\n    out[5] = p123;\r\n    out[6] = p23;\r\n    out[7] = p3;\r\n}\r\n\r\n/**\r\n * 投射点到三次贝塞尔曲线上,返回投射距离。\r\n * 投射点有可能会有一个或者多个,这里只返回其中距离最短的一个。\r\n */\r\nexport function cubicProjectPoint(\r\n    x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, x3: number, y3: number,\r\n    x: number, y: number, out: VectorArray\r\n): number {\r\n    // http://pomax.github.io/bezierinfo/#projections\r\n    let t;\r\n    let interval = 0.005;\r\n    let d = Infinity;\r\n    let prev;\r\n    let next;\r\n    let d1;\r\n    let d2;\r\n\r\n    _v0[0] = x;\r\n    _v0[1] = y;\r\n\r\n    // 先粗略估计一下可能的最小距离的 t 值\r\n    // PENDING\r\n    for (let _t = 0; _t < 1; _t += 0.05) {\r\n        _v1[0] = cubicAt(x0, x1, x2, x3, _t);\r\n        _v1[1] = cubicAt(y0, y1, y2, y3, _t);\r\n        d1 = v2DistSquare(_v0, _v1);\r\n        if (d1 < d) {\r\n            t = _t;\r\n            d = d1;\r\n        }\r\n    }\r\n    d = Infinity;\r\n\r\n    // At most 32 iteration\r\n    for (let i = 0; i < 32; i++) {\r\n        if (interval < EPSILON_NUMERIC) {\r\n            break;\r\n        }\r\n        prev = t - interval;\r\n        next = t + interval;\r\n        // t - interval\r\n        _v1[0] = cubicAt(x0, x1, x2, x3, prev);\r\n        _v1[1] = cubicAt(y0, y1, y2, y3, prev);\r\n\r\n        d1 = v2DistSquare(_v1, _v0);\r\n\r\n        if (prev >= 0 && d1 < d) {\r\n            t = prev;\r\n            d = d1;\r\n        }\r\n        else {\r\n            // t + interval\r\n            _v2[0] = cubicAt(x0, x1, x2, x3, next);\r\n            _v2[1] = cubicAt(y0, y1, y2, y3, next);\r\n            d2 = v2DistSquare(_v2, _v0);\r\n\r\n            if (next <= 1 && d2 < d) {\r\n                t = next;\r\n                d = d2;\r\n            }\r\n            else {\r\n                interval *= 0.5;\r\n            }\r\n        }\r\n    }\r\n    // t\r\n    if (out) {\r\n        out[0] = cubicAt(x0, x1, x2, x3, t);\r\n        out[1] = cubicAt(y0, y1, y2, y3, t);\r\n    }\r\n    // console.log(interval, i);\r\n    return mathSqrt(d);\r\n}\r\n\r\n/**\r\n * 计算三次贝塞尔曲线长度\r\n */\r\nexport function cubicLength(\r\n    x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, x3: number, y3: number,\r\n    iteration: number\r\n) {\r\n    let px = x0;\r\n    let py = y0;\r\n\r\n    let d = 0;\r\n\r\n    const step = 1 / iteration;\r\n\r\n    for (let i = 1; i <= iteration; i++) {\r\n        let t = i * step;\r\n        const x = cubicAt(x0, x1, x2, x3, t);\r\n        const y = cubicAt(y0, y1, y2, y3, t);\r\n\r\n        const dx = x - px;\r\n        const dy = y - py;\r\n\r\n        d += Math.sqrt(dx * dx + dy * dy);\r\n\r\n        px = x;\r\n        py = y;\r\n    }\r\n\r\n    return d;\r\n}\r\n\r\n/**\r\n * 计算二次方贝塞尔值\r\n */\r\nexport function quadraticAt(p0: number, p1: number, p2: number, t: number): number {\r\n    const onet = 1 - t;\r\n    return onet * (onet * p0 + 2 * t * p1) + t * t * p2;\r\n}\r\n\r\n/**\r\n * 计算二次方贝塞尔导数值\r\n */\r\nexport function quadraticDerivativeAt(p0: number, p1: number, p2: number, t: number): number {\r\n    return 2 * ((1 - t) * (p1 - p0) + t * (p2 - p1));\r\n}\r\n\r\n/**\r\n * 计算二次方贝塞尔方程根\r\n * @return 有效根数目\r\n */\r\nexport function quadraticRootAt(p0: number, p1: number, p2: number, val: number, roots: number[]): number {\r\n    const a = p0 - 2 * p1 + p2;\r\n    const b = 2 * (p1 - p0);\r\n    const c = p0 - val;\r\n\r\n    let n = 0;\r\n    if (isAroundZero(a)) {\r\n        if (isNotAroundZero(b)) {\r\n            const t1 = -c / b;\r\n            if (t1 >= 0 && t1 <= 1) {\r\n                roots[n++] = t1;\r\n            }\r\n        }\r\n    }\r\n    else {\r\n        const disc = b * b - 4 * a * c;\r\n        if (isAroundZero(disc)) {\r\n            const t1 = -b / (2 * a);\r\n            if (t1 >= 0 && t1 <= 1) {\r\n                roots[n++] = t1;\r\n            }\r\n        }\r\n        else if (disc > 0) {\r\n            const discSqrt = mathSqrt(disc);\r\n            const t1 = (-b + discSqrt) / (2 * a);\r\n            const t2 = (-b - discSqrt) / (2 * a);\r\n            if (t1 >= 0 && t1 <= 1) {\r\n                roots[n++] = t1;\r\n            }\r\n            if (t2 >= 0 && t2 <= 1) {\r\n                roots[n++] = t2;\r\n            }\r\n        }\r\n    }\r\n    return n;\r\n}\r\n\r\n/**\r\n * 计算二次贝塞尔方程极限值\r\n */\r\nexport function quadraticExtremum(p0: number, p1: number, p2: number): number {\r\n    const divider = p0 + p2 - 2 * p1;\r\n    if (divider === 0) {\r\n        // p1 is center of p0 and p2\r\n        return 0.5;\r\n    }\r\n    else {\r\n        return (p0 - p1) / divider;\r\n    }\r\n}\r\n\r\n/**\r\n * 细分二次贝塞尔曲线\r\n */\r\nexport function quadraticSubdivide(p0: number, p1: number, p2: number, t: number, out: number[]) {\r\n    const p01 = (p1 - p0) * t + p0;\r\n    const p12 = (p2 - p1) * t + p1;\r\n    const p012 = (p12 - p01) * t + p01;\r\n\r\n    // Seg0\r\n    out[0] = p0;\r\n    out[1] = p01;\r\n    out[2] = p012;\r\n\r\n    // Seg1\r\n    out[3] = p012;\r\n    out[4] = p12;\r\n    out[5] = p2;\r\n}\r\n\r\n/**\r\n * 投射点到二次贝塞尔曲线上,返回投射距离。\r\n * 投射点有可能会有一个或者多个,这里只返回其中距离最短的一个。\r\n * @param {number} x0\r\n * @param {number} y0\r\n * @param {number} x1\r\n * @param {number} y1\r\n * @param {number} x2\r\n * @param {number} y2\r\n * @param {number} x\r\n * @param {number} y\r\n * @param {Array.} out 投射点\r\n * @return {number}\r\n */\r\nexport function quadraticProjectPoint(\r\n    x0: number, y0: number, x1: number, y1: number, x2: number, y2: number,\r\n    x: number, y: number, out: VectorArray\r\n): number {\r\n    // http://pomax.github.io/bezierinfo/#projections\r\n    let t: number;\r\n    let interval = 0.005;\r\n    let d = Infinity;\r\n\r\n    _v0[0] = x;\r\n    _v0[1] = y;\r\n\r\n    // 先粗略估计一下可能的最小距离的 t 值\r\n    // PENDING\r\n    for (let _t = 0; _t < 1; _t += 0.05) {\r\n        _v1[0] = quadraticAt(x0, x1, x2, _t);\r\n        _v1[1] = quadraticAt(y0, y1, y2, _t);\r\n        const d1 = v2DistSquare(_v0, _v1);\r\n        if (d1 < d) {\r\n            t = _t;\r\n            d = d1;\r\n        }\r\n    }\r\n    d = Infinity;\r\n\r\n    // At most 32 iteration\r\n    for (let i = 0; i < 32; i++) {\r\n        if (interval < EPSILON_NUMERIC) {\r\n            break;\r\n        }\r\n        const prev = t - interval;\r\n        const next = t + interval;\r\n        // t - interval\r\n        _v1[0] = quadraticAt(x0, x1, x2, prev);\r\n        _v1[1] = quadraticAt(y0, y1, y2, prev);\r\n\r\n        const d1 = v2DistSquare(_v1, _v0);\r\n\r\n        if (prev >= 0 && d1 < d) {\r\n            t = prev;\r\n            d = d1;\r\n        }\r\n        else {\r\n            // t + interval\r\n            _v2[0] = quadraticAt(x0, x1, x2, next);\r\n            _v2[1] = quadraticAt(y0, y1, y2, next);\r\n            const d2 = v2DistSquare(_v2, _v0);\r\n            if (next <= 1 && d2 < d) {\r\n                t = next;\r\n                d = d2;\r\n            }\r\n            else {\r\n                interval *= 0.5;\r\n            }\r\n        }\r\n    }\r\n    // t\r\n    if (out) {\r\n        out[0] = quadraticAt(x0, x1, x2, t);\r\n        out[1] = quadraticAt(y0, y1, y2, t);\r\n    }\r\n    // console.log(interval, i);\r\n    return mathSqrt(d);\r\n}\r\n\r\n/**\r\n * 计算二次贝塞尔曲线长度\r\n */\r\nexport function quadraticLength(\r\n    x0: number, y0: number, x1: number, y1: number, x2: number, y2: number,\r\n    iteration: number\r\n) {\r\n    let px = x0;\r\n    let py = y0;\r\n\r\n    let d = 0;\r\n\r\n    const step = 1 / iteration;\r\n\r\n    for (let i = 1; i <= iteration; i++) {\r\n        let t = i * step;\r\n        const x = quadraticAt(x0, x1, x2, t);\r\n        const y = quadraticAt(y0, y1, y2, t);\r\n\r\n        const dx = x - px;\r\n        const dy = y - py;\r\n\r\n        d += Math.sqrt(dx * dx + dy * dy);\r\n\r\n        px = x;\r\n        py = y;\r\n    }\r\n\r\n    return d;\r\n}\r\n","import { cubicAt, cubicRootAt } from '../core/curve';\r\nimport { trim } from '../core/util';\r\n\r\nconst regexp = /cubic-bezier\\(([0-9,\\.e ]+)\\)/;\r\n\r\nexport function createCubicEasingFunc(cubicEasingStr: string) {\r\n    const cubic = cubicEasingStr && regexp.exec(cubicEasingStr);\r\n    if (cubic) {\r\n        const points = cubic[1].split(',');\r\n        const a = +trim(points[0]);\r\n        const b = +trim(points[1]);\r\n        const c = +trim(points[2]);\r\n        const d = +trim(points[3]);\r\n\r\n        if (isNaN(a + b + c + d)) {\r\n            return;\r\n        }\r\n\r\n        const roots: number[] = [];\r\n        return (p: number) => {\r\n            return p <= 0\r\n                ? 0 : p >= 1\r\n                    ? 1\r\n                    : cubicRootAt(0, a, c, 1, p, roots) && cubicAt(0, b, d, 1, roots[0]);\r\n        };\r\n    }\r\n}","/**\r\n * 动画主控制器\r\n * @config target 动画对象,可以是数组,如果是数组的话会批量分发onframe等事件\r\n * @config life(1000) 动画时长\r\n * @config delay(0) 动画延迟时间\r\n * @config loop(true)\r\n * @config onframe\r\n * @config easing(optional)\r\n * @config ondestroy(optional)\r\n * @config onrestart(optional)\r\n *\r\n * TODO pause\r\n */\r\n\r\nimport easingFuncs, {AnimationEasing} from './easing';\r\nimport type Animation from './Animation';\r\nimport { isFunction, noop } from '../core/util';\r\nimport { createCubicEasingFunc } from './cubicEasing';\r\n\r\ntype OnframeCallback = (percent: number) => void;\r\ntype ondestroyCallback = () => void\r\ntype onrestartCallback = () => void\r\n\r\nexport type DeferredEventTypes = 'destroy' | 'restart'\r\n// type DeferredEventKeys = 'ondestroy' | 'onrestart'\r\n\r\nexport interface ClipProps {\r\n    life?: number\r\n    delay?: number\r\n    loop?: boolean\r\n    easing?: AnimationEasing\r\n\r\n    onframe?: OnframeCallback\r\n    ondestroy?: ondestroyCallback\r\n    onrestart?: onrestartCallback\r\n}\r\n\r\nexport default class Clip {\r\n\r\n    private _life: number\r\n    private _delay: number\r\n\r\n    private _inited: boolean = false\r\n    private _startTime = 0 // 开始时间单位毫秒\r\n\r\n    private _pausedTime = 0\r\n    private _paused = false\r\n\r\n    animation: Animation\r\n\r\n    loop: boolean\r\n\r\n    easing: AnimationEasing\r\n    easingFunc: (p: number) => number\r\n\r\n    // For linked list. Readonly\r\n    next: Clip\r\n    prev: Clip\r\n\r\n    onframe: OnframeCallback\r\n    ondestroy: ondestroyCallback\r\n    onrestart: onrestartCallback\r\n\r\n    constructor(opts: ClipProps) {\r\n\r\n        this._life = opts.life || 1000;\r\n        this._delay = opts.delay || 0;\r\n\r\n        this.loop = opts.loop || false;\r\n\r\n        this.onframe = opts.onframe || noop;\r\n        this.ondestroy = opts.ondestroy || noop;\r\n        this.onrestart = opts.onrestart || noop;\r\n\r\n        opts.easing && this.setEasing(opts.easing);\r\n    }\r\n\r\n    step(globalTime: number, deltaTime: number): boolean {\r\n        // Set startTime on first step, or _startTime may has milleseconds different between clips\r\n        // PENDING\r\n        if (!this._inited) {\r\n            this._startTime = globalTime + this._delay;\r\n            this._inited = true;\r\n        }\r\n\r\n        if (this._paused) {\r\n            this._pausedTime += deltaTime;\r\n            return;\r\n        }\r\n\r\n        const life = this._life;\r\n        let elapsedTime = globalTime - this._startTime - this._pausedTime;\r\n        let percent = elapsedTime / life;\r\n\r\n        // PENDING: Not begin yet. Still run the loop.\r\n        // In the case callback needs to be invoked.\r\n        // Or want to update to the begin state at next frame when `setToFinal` and `delay` are both used.\r\n        // To avoid the unexpected blink.\r\n        if (percent < 0) {\r\n            percent = 0;\r\n        }\r\n\r\n        percent = Math.min(percent, 1);\r\n\r\n        const easingFunc = this.easingFunc;\r\n        const schedule = easingFunc ? easingFunc(percent) : percent;\r\n\r\n        this.onframe(schedule);\r\n\r\n        // 结束\r\n        if (percent === 1) {\r\n            if (this.loop) {\r\n                // Restart\r\n                const remainder = elapsedTime % life;\r\n                this._startTime = globalTime - remainder;\r\n                this._pausedTime = 0;\r\n\r\n                this.onrestart();\r\n            }\r\n            else {\r\n                return true;\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    pause() {\r\n        this._paused = true;\r\n    }\r\n\r\n    resume() {\r\n        this._paused = false;\r\n    }\r\n\r\n    setEasing(easing: AnimationEasing) {\r\n        this.easing = easing;\r\n        this.easingFunc = isFunction(easing)\r\n            ? easing\r\n            : easingFuncs[easing] || createCubicEasingFunc(easing);\r\n    }\r\n}","import { Dictionary } from './types';\r\n\r\n// Simple LRU cache use doubly linked list\r\n// @module zrender/core/LRU\r\n\r\nexport class Entry {\r\n\r\n    value: T\r\n\r\n    key: string | number\r\n\r\n    next: Entry\r\n\r\n    prev: Entry\r\n\r\n    constructor(val: T) {\r\n        this.value = val;\r\n    }\r\n}\r\n/**\r\n * Simple double linked list. Compared with array, it has O(1) remove operation.\r\n * @constructor\r\n */\r\nexport class LinkedList {\r\n\r\n    head: Entry\r\n    tail: Entry\r\n\r\n    private _len = 0\r\n\r\n    /**\r\n     * Insert a new value at the tail\r\n     */\r\n    insert(val: T): Entry {\r\n        const entry = new Entry(val);\r\n        this.insertEntry(entry);\r\n        return entry;\r\n    }\r\n\r\n    /**\r\n     * Insert an entry at the tail\r\n     */\r\n    insertEntry(entry: Entry) {\r\n        if (!this.head) {\r\n            this.head = this.tail = entry;\r\n        }\r\n        else {\r\n            this.tail.next = entry;\r\n            entry.prev = this.tail;\r\n            entry.next = null;\r\n            this.tail = entry;\r\n        }\r\n        this._len++;\r\n    }\r\n\r\n    /**\r\n     * Remove entry.\r\n     */\r\n    remove(entry: Entry) {\r\n        const prev = entry.prev;\r\n        const next = entry.next;\r\n        if (prev) {\r\n            prev.next = next;\r\n        }\r\n        else {\r\n            // Is head\r\n            this.head = next;\r\n        }\r\n        if (next) {\r\n            next.prev = prev;\r\n        }\r\n        else {\r\n            // Is tail\r\n            this.tail = prev;\r\n        }\r\n        entry.next = entry.prev = null;\r\n        this._len--;\r\n    }\r\n\r\n    /**\r\n     * Get length\r\n     */\r\n    len(): number {\r\n        return this._len;\r\n    }\r\n\r\n    /**\r\n     * Clear list\r\n     */\r\n    clear() {\r\n        this.head = this.tail = null;\r\n        this._len = 0;\r\n    }\r\n\r\n}\r\n\r\n/**\r\n * LRU Cache\r\n */\r\nexport default class LRU {\r\n\r\n    private _list = new LinkedList()\r\n\r\n    private _maxSize = 10\r\n\r\n    private _lastRemovedEntry: Entry\r\n\r\n    private _map: Dictionary> = {}\r\n\r\n    constructor(maxSize: number) {\r\n        this._maxSize = maxSize;\r\n    }\r\n\r\n    /**\r\n     * @return Removed value\r\n     */\r\n    put(key: string | number, value: T): T {\r\n        const list = this._list;\r\n        const map = this._map;\r\n        let removed = null;\r\n        if (map[key] == null) {\r\n            const len = list.len();\r\n            // Reuse last removed entry\r\n            let entry = this._lastRemovedEntry;\r\n\r\n            if (len >= this._maxSize && len > 0) {\r\n                // Remove the least recently used\r\n                const leastUsedEntry = list.head;\r\n                list.remove(leastUsedEntry);\r\n                delete map[leastUsedEntry.key];\r\n\r\n                removed = leastUsedEntry.value;\r\n                this._lastRemovedEntry = leastUsedEntry;\r\n            }\r\n\r\n            if (entry) {\r\n                entry.value = value;\r\n            }\r\n            else {\r\n                entry = new Entry(value);\r\n            }\r\n            entry.key = key;\r\n            list.insertEntry(entry);\r\n            map[key] = entry;\r\n        }\r\n\r\n        return removed;\r\n    }\r\n\r\n    get(key: string | number): T {\r\n        const entry = this._map[key];\r\n        const list = this._list;\r\n        if (entry != null) {\r\n            // Put the latest used entry in the tail\r\n            if (entry !== list.tail) {\r\n                list.remove(entry);\r\n                list.insertEntry(entry);\r\n            }\r\n\r\n            return entry.value;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Clear the cache\r\n     */\r\n    clear() {\r\n        this._list.clear();\r\n        this._map = {};\r\n    }\r\n\r\n    len() {\r\n        return this._list.len();\r\n    }\r\n}","import LRU from '../core/LRU';\nimport { extend, isGradientObject, isString, map } from '../core/util';\nimport { GradientObject } from '../graphic/Gradient';\n\nconst kCSSColorTable = {\n    'transparent': [0, 0, 0, 0], 'aliceblue': [240, 248, 255, 1],\n    'antiquewhite': [250, 235, 215, 1], 'aqua': [0, 255, 255, 1],\n    'aquamarine': [127, 255, 212, 1], 'azure': [240, 255, 255, 1],\n    'beige': [245, 245, 220, 1], 'bisque': [255, 228, 196, 1],\n    'black': [0, 0, 0, 1], 'blanchedalmond': [255, 235, 205, 1],\n    'blue': [0, 0, 255, 1], 'blueviolet': [138, 43, 226, 1],\n    'brown': [165, 42, 42, 1], 'burlywood': [222, 184, 135, 1],\n    'cadetblue': [95, 158, 160, 1], 'chartreuse': [127, 255, 0, 1],\n    'chocolate': [210, 105, 30, 1], 'coral': [255, 127, 80, 1],\n    'cornflowerblue': [100, 149, 237, 1], 'cornsilk': [255, 248, 220, 1],\n    'crimson': [220, 20, 60, 1], 'cyan': [0, 255, 255, 1],\n    'darkblue': [0, 0, 139, 1], 'darkcyan': [0, 139, 139, 1],\n    'darkgoldenrod': [184, 134, 11, 1], 'darkgray': [169, 169, 169, 1],\n    'darkgreen': [0, 100, 0, 1], 'darkgrey': [169, 169, 169, 1],\n    'darkkhaki': [189, 183, 107, 1], 'darkmagenta': [139, 0, 139, 1],\n    'darkolivegreen': [85, 107, 47, 1], 'darkorange': [255, 140, 0, 1],\n    'darkorchid': [153, 50, 204, 1], 'darkred': [139, 0, 0, 1],\n    'darksalmon': [233, 150, 122, 1], 'darkseagreen': [143, 188, 143, 1],\n    'darkslateblue': [72, 61, 139, 1], 'darkslategray': [47, 79, 79, 1],\n    'darkslategrey': [47, 79, 79, 1], 'darkturquoise': [0, 206, 209, 1],\n    'darkviolet': [148, 0, 211, 1], 'deeppink': [255, 20, 147, 1],\n    'deepskyblue': [0, 191, 255, 1], 'dimgray': [105, 105, 105, 1],\n    'dimgrey': [105, 105, 105, 1], 'dodgerblue': [30, 144, 255, 1],\n    'firebrick': [178, 34, 34, 1], 'floralwhite': [255, 250, 240, 1],\n    'forestgreen': [34, 139, 34, 1], 'fuchsia': [255, 0, 255, 1],\n    'gainsboro': [220, 220, 220, 1], 'ghostwhite': [248, 248, 255, 1],\n    'gold': [255, 215, 0, 1], 'goldenrod': [218, 165, 32, 1],\n    'gray': [128, 128, 128, 1], 'green': [0, 128, 0, 1],\n    'greenyellow': [173, 255, 47, 1], 'grey': [128, 128, 128, 1],\n    'honeydew': [240, 255, 240, 1], 'hotpink': [255, 105, 180, 1],\n    'indianred': [205, 92, 92, 1], 'indigo': [75, 0, 130, 1],\n    'ivory': [255, 255, 240, 1], 'khaki': [240, 230, 140, 1],\n    'lavender': [230, 230, 250, 1], 'lavenderblush': [255, 240, 245, 1],\n    'lawngreen': [124, 252, 0, 1], 'lemonchiffon': [255, 250, 205, 1],\n    'lightblue': [173, 216, 230, 1], 'lightcoral': [240, 128, 128, 1],\n    'lightcyan': [224, 255, 255, 1], 'lightgoldenrodyellow': [250, 250, 210, 1],\n    'lightgray': [211, 211, 211, 1], 'lightgreen': [144, 238, 144, 1],\n    'lightgrey': [211, 211, 211, 1], 'lightpink': [255, 182, 193, 1],\n    'lightsalmon': [255, 160, 122, 1], 'lightseagreen': [32, 178, 170, 1],\n    'lightskyblue': [135, 206, 250, 1], 'lightslategray': [119, 136, 153, 1],\n    'lightslategrey': [119, 136, 153, 1], 'lightsteelblue': [176, 196, 222, 1],\n    'lightyellow': [255, 255, 224, 1], 'lime': [0, 255, 0, 1],\n    'limegreen': [50, 205, 50, 1], 'linen': [250, 240, 230, 1],\n    'magenta': [255, 0, 255, 1], 'maroon': [128, 0, 0, 1],\n    'mediumaquamarine': [102, 205, 170, 1], 'mediumblue': [0, 0, 205, 1],\n    'mediumorchid': [186, 85, 211, 1], 'mediumpurple': [147, 112, 219, 1],\n    'mediumseagreen': [60, 179, 113, 1], 'mediumslateblue': [123, 104, 238, 1],\n    'mediumspringgreen': [0, 250, 154, 1], 'mediumturquoise': [72, 209, 204, 1],\n    'mediumvioletred': [199, 21, 133, 1], 'midnightblue': [25, 25, 112, 1],\n    'mintcream': [245, 255, 250, 1], 'mistyrose': [255, 228, 225, 1],\n    'moccasin': [255, 228, 181, 1], 'navajowhite': [255, 222, 173, 1],\n    'navy': [0, 0, 128, 1], 'oldlace': [253, 245, 230, 1],\n    'olive': [128, 128, 0, 1], 'olivedrab': [107, 142, 35, 1],\n    'orange': [255, 165, 0, 1], 'orangered': [255, 69, 0, 1],\n    'orchid': [218, 112, 214, 1], 'palegoldenrod': [238, 232, 170, 1],\n    'palegreen': [152, 251, 152, 1], 'paleturquoise': [175, 238, 238, 1],\n    'palevioletred': [219, 112, 147, 1], 'papayawhip': [255, 239, 213, 1],\n    'peachpuff': [255, 218, 185, 1], 'peru': [205, 133, 63, 1],\n    'pink': [255, 192, 203, 1], 'plum': [221, 160, 221, 1],\n    'powderblue': [176, 224, 230, 1], 'purple': [128, 0, 128, 1],\n    'red': [255, 0, 0, 1], 'rosybrown': [188, 143, 143, 1],\n    'royalblue': [65, 105, 225, 1], 'saddlebrown': [139, 69, 19, 1],\n    'salmon': [250, 128, 114, 1], 'sandybrown': [244, 164, 96, 1],\n    'seagreen': [46, 139, 87, 1], 'seashell': [255, 245, 238, 1],\n    'sienna': [160, 82, 45, 1], 'silver': [192, 192, 192, 1],\n    'skyblue': [135, 206, 235, 1], 'slateblue': [106, 90, 205, 1],\n    'slategray': [112, 128, 144, 1], 'slategrey': [112, 128, 144, 1],\n    'snow': [255, 250, 250, 1], 'springgreen': [0, 255, 127, 1],\n    'steelblue': [70, 130, 180, 1], 'tan': [210, 180, 140, 1],\n    'teal': [0, 128, 128, 1], 'thistle': [216, 191, 216, 1],\n    'tomato': [255, 99, 71, 1], 'turquoise': [64, 224, 208, 1],\n    'violet': [238, 130, 238, 1], 'wheat': [245, 222, 179, 1],\n    'white': [255, 255, 255, 1], 'whitesmoke': [245, 245, 245, 1],\n    'yellow': [255, 255, 0, 1], 'yellowgreen': [154, 205, 50, 1]\n};\n\nfunction clampCssByte(i: number): number {  // Clamp to integer 0 .. 255.\n    i = Math.round(i);  // Seems to be what Chrome does (vs truncation).\n    return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clampCssAngle(i: number): number {  // Clamp to integer 0 .. 360.\n    i = Math.round(i);  // Seems to be what Chrome does (vs truncation).\n    return i < 0 ? 0 : i > 360 ? 360 : i;\n}\n\nfunction clampCssFloat(f: number): number {  // Clamp to float 0.0 .. 1.0.\n    return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parseCssInt(val: string | number): number {  // int or percentage.\n    let str = val as string;\n    if (str.length && str.charAt(str.length - 1) === '%') {\n        return clampCssByte(parseFloat(str) / 100 * 255);\n    }\n    return clampCssByte(parseInt(str, 10));\n}\n\nfunction parseCssFloat(val: string | number): number {  // float or percentage.\n    let str = val as string;\n    if (str.length && str.charAt(str.length - 1) === '%') {\n        return clampCssFloat(parseFloat(str) / 100);\n    }\n    return clampCssFloat(parseFloat(str));\n}\n\nfunction cssHueToRgb(m1: number, m2: number, h: number): number {\n    if (h < 0) {\n        h += 1;\n    }\n    else if (h > 1) {\n        h -= 1;\n    }\n\n    if (h * 6 < 1) {\n        return m1 + (m2 - m1) * h * 6;\n    }\n    if (h * 2 < 1) {\n        return m2;\n    }\n    if (h * 3 < 2) {\n        return m1 + (m2 - m1) * (2 / 3 - h) * 6;\n    }\n    return m1;\n}\n\nfunction lerpNumber(a: number, b: number, p: number): number {\n    return a + (b - a) * p;\n}\n\nfunction setRgba(out: number[], r: number, g: number, b: number, a: number): number[] {\n    out[0] = r;\n    out[1] = g;\n    out[2] = b;\n    out[3] = a;\n    return out;\n}\nfunction copyRgba(out: number[], a: number[]) {\n    out[0] = a[0];\n    out[1] = a[1];\n    out[2] = a[2];\n    out[3] = a[3];\n    return out;\n}\n\nconst colorCache = new LRU(20);\nlet lastRemovedArr: number[] = null;\n\nfunction putToCache(colorStr: string, rgbaArr: number[]) {\n    // Reuse removed array\n    if (lastRemovedArr) {\n        copyRgba(lastRemovedArr, rgbaArr);\n    }\n    lastRemovedArr = colorCache.put(colorStr, lastRemovedArr || (rgbaArr.slice()));\n}\n\nexport function parse(colorStr: string, rgbaArr?: number[]): number[] {\n    if (!colorStr) {\n        return;\n    }\n    rgbaArr = rgbaArr || [];\n\n    let cached = colorCache.get(colorStr);\n    if (cached) {\n        return copyRgba(rgbaArr, cached);\n    }\n\n    // colorStr may be not string\n    colorStr = colorStr + '';\n    // Remove all whitespace, not compliant, but should just be more accepting.\n    let str = colorStr.replace(/ /g, '').toLowerCase();\n\n    // Color keywords (and transparent) lookup.\n    if (str in kCSSColorTable) {\n        copyRgba(rgbaArr, kCSSColorTable[str as keyof typeof kCSSColorTable]);\n        putToCache(colorStr, rgbaArr);\n        return rgbaArr;\n    }\n\n    // supports the forms #rgb, #rrggbb, #rgba, #rrggbbaa\n    // #rrggbbaa(use the last pair of digits as alpha)\n    // see https://drafts.csswg.org/css-color/#hex-notation\n    const strLen = str.length;\n    if (str.charAt(0) === '#') {\n        if (strLen === 4 || strLen === 5) {\n            const iv = parseInt(str.slice(1, 4), 16);  // TODO(deanm): Stricter parsing.\n            if (!(iv >= 0 && iv <= 0xfff)) {\n                setRgba(rgbaArr, 0, 0, 0, 1);\n                return;  // Covers NaN.\n            }\n            // interpret values of the form #rgb as #rrggbb and #rgba as #rrggbbaa\n            setRgba(rgbaArr,\n                ((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n                (iv & 0xf0) | ((iv & 0xf0) >> 4),\n                (iv & 0xf) | ((iv & 0xf) << 4),\n                strLen === 5 ? parseInt(str.slice(4), 16) / 0xf : 1\n            );\n            putToCache(colorStr, rgbaArr);\n            return rgbaArr;\n        }\n        else if (strLen === 7 || strLen === 9) {\n            const iv = parseInt(str.slice(1, 7), 16);  // TODO(deanm): Stricter parsing.\n            if (!(iv >= 0 && iv <= 0xffffff)) {\n                setRgba(rgbaArr, 0, 0, 0, 1);\n                return;  // Covers NaN.\n            }\n            setRgba(rgbaArr,\n                (iv & 0xff0000) >> 16,\n                (iv & 0xff00) >> 8,\n                iv & 0xff,\n                strLen === 9 ? parseInt(str.slice(7), 16) / 0xff : 1\n            );\n            putToCache(colorStr, rgbaArr);\n            return rgbaArr;\n        }\n\n        return;\n    }\n    let op = str.indexOf('(');\n    let ep = str.indexOf(')');\n    if (op !== -1 && ep + 1 === strLen) {\n        let fname = str.substr(0, op);\n        let params: (number | string)[] = str.substr(op + 1, ep - (op + 1)).split(',');\n        let alpha = 1;  // To allow case fallthrough.\n        switch (fname) {\n            case 'rgba':\n                if (params.length !== 4) {\n                    return params.length === 3\n                        // to be compatible with rgb\n                        ? setRgba(rgbaArr, +params[0], +params[1], +params[2], 1)\n                        : setRgba(rgbaArr, 0, 0, 0, 1);\n                }\n                alpha = parseCssFloat(params.pop()); // jshint ignore:line\n            // Fall through.\n            case 'rgb':\n                if (params.length >= 3) {\n                    setRgba(rgbaArr,\n                        parseCssInt(params[0]),\n                        parseCssInt(params[1]),\n                        parseCssInt(params[2]),\n                        params.length === 3 ? alpha : parseCssFloat(params[3])\n                    );\n                    putToCache(colorStr, rgbaArr);\n                    return rgbaArr;\n                }\n                else {\n                    setRgba(rgbaArr, 0, 0, 0, 1);\n                    return;\n                }\n            case 'hsla':\n                if (params.length !== 4) {\n                    setRgba(rgbaArr, 0, 0, 0, 1);\n                    return;\n                }\n                params[3] = parseCssFloat(params[3]);\n                hsla2rgba(params, rgbaArr);\n                putToCache(colorStr, rgbaArr);\n                return rgbaArr;\n            case 'hsl':\n                if (params.length !== 3) {\n                    setRgba(rgbaArr, 0, 0, 0, 1);\n                    return;\n                }\n                hsla2rgba(params, rgbaArr);\n                putToCache(colorStr, rgbaArr);\n                return rgbaArr;\n            default:\n                return;\n        }\n    }\n\n    setRgba(rgbaArr, 0, 0, 0, 1);\n    return;\n}\n\nfunction hsla2rgba(hsla: (number | string) [], rgba?: number[]): number[] {\n    const h = (((parseFloat(hsla[0] as string) % 360) + 360) % 360) / 360;  // 0 .. 1\n    // NOTE(deanm): According to the CSS spec s/l should only be\n    // percentages, but we don't bother and let float or percentage.\n    const s = parseCssFloat(hsla[1]);\n    const l = parseCssFloat(hsla[2]);\n    const m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n    const m1 = l * 2 - m2;\n\n    rgba = rgba || [];\n    setRgba(rgba,\n        clampCssByte(cssHueToRgb(m1, m2, h + 1 / 3) * 255),\n        clampCssByte(cssHueToRgb(m1, m2, h) * 255),\n        clampCssByte(cssHueToRgb(m1, m2, h - 1 / 3) * 255),\n        1\n    );\n\n    if (hsla.length === 4) {\n        rgba[3] = hsla[3] as number;\n    }\n\n    return rgba;\n}\n\nfunction rgba2hsla(rgba: number[]): number[] {\n    if (!rgba) {\n        return;\n    }\n\n    // RGB from 0 to 255\n    const R = rgba[0] / 255;\n    const G = rgba[1] / 255;\n    const B = rgba[2] / 255;\n\n    const vMin = Math.min(R, G, B); // Min. value of RGB\n    const vMax = Math.max(R, G, B); // Max. value of RGB\n    const delta = vMax - vMin; // Delta RGB value\n\n    const L = (vMax + vMin) / 2;\n    let H;\n    let S;\n    // HSL results from 0 to 1\n    if (delta === 0) {\n        H = 0;\n        S = 0;\n    }\n    else {\n        if (L < 0.5) {\n            S = delta / (vMax + vMin);\n        }\n        else {\n            S = delta / (2 - vMax - vMin);\n        }\n\n        const deltaR = (((vMax - R) / 6) + (delta / 2)) / delta;\n        const deltaG = (((vMax - G) / 6) + (delta / 2)) / delta;\n        const deltaB = (((vMax - B) / 6) + (delta / 2)) / delta;\n\n        if (R === vMax) {\n            H = deltaB - deltaG;\n        }\n        else if (G === vMax) {\n            H = (1 / 3) + deltaR - deltaB;\n        }\n        else if (B === vMax) {\n            H = (2 / 3) + deltaG - deltaR;\n        }\n\n        if (H < 0) {\n            H += 1;\n        }\n\n        if (H > 1) {\n            H -= 1;\n        }\n    }\n\n    const hsla = [H * 360, S, L];\n\n    if (rgba[3] != null) {\n        hsla.push(rgba[3]);\n    }\n\n    return hsla;\n}\n\nexport function lift(color: string, level: number) {\n    const colorArr = parse(color);\n    if (colorArr) {\n        for (let i = 0; i < 3; i++) {\n            if (level < 0) {\n                colorArr[i] = colorArr[i] * (1 - level) | 0;\n            }\n            else {\n                colorArr[i] = ((255 - colorArr[i]) * level + colorArr[i]) | 0;\n            }\n            if (colorArr[i] > 255) {\n                colorArr[i] = 255;\n            }\n            else if (colorArr[i] < 0) {\n                colorArr[i] = 0;\n            }\n        }\n        return stringify(colorArr, colorArr.length === 4 ? 'rgba' : 'rgb');\n    }\n}\n\nexport function toHex(color: string): string {\n    const colorArr = parse(color);\n    if (colorArr) {\n        return ((1 << 24) + (colorArr[0] << 16) + (colorArr[1] << 8) + (+colorArr[2])).toString(16).slice(1);\n    }\n}\n\n/**\n * Map value to color. Faster than lerp methods because color is represented by rgba array.\n * @param normalizedValue A float between 0 and 1.\n * @param colors List of rgba color array\n * @param out Mapped gba color array\n * @return will be null/undefined if input illegal.\n */\nexport function fastLerp(\n    normalizedValue: number,\n    colors: number[][],\n    out?: number[]\n): number[] {\n    if (!(colors && colors.length)\n        || !(normalizedValue >= 0 && normalizedValue <= 1)\n    ) {\n        return;\n    }\n\n    out = out || [];\n\n    const value = normalizedValue * (colors.length - 1);\n    const leftIndex = Math.floor(value);\n    const rightIndex = Math.ceil(value);\n    const leftColor = colors[leftIndex];\n    const rightColor = colors[rightIndex];\n    const dv = value - leftIndex;\n    out[0] = clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv));\n    out[1] = clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv));\n    out[2] = clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv));\n    out[3] = clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv));\n\n    return out;\n}\n\n/**\n * @deprecated\n */\nexport const fastMapToColor = fastLerp;\n\ntype LerpFullOutput = {\n    color: string\n    leftIndex: number\n    rightIndex: number\n    value: number\n}\n/**\n * @param normalizedValue A float between 0 and 1.\n * @param colors Color list.\n * @param fullOutput Default false.\n * @return Result color. If fullOutput,\n            return {color: ..., leftIndex: ..., rightIndex: ..., value: ...},\n */\nexport function lerp(\n    normalizedValue: number,\n    colors: string[],\n    fullOutput: boolean\n): LerpFullOutput\nexport function lerp(\n    normalizedValue: number,\n    colors: string[]\n): string\nexport function lerp(\n    normalizedValue: number,\n    colors: string[],\n    fullOutput?: boolean\n): string | LerpFullOutput {\n    if (!(colors && colors.length)\n        || !(normalizedValue >= 0 && normalizedValue <= 1)\n    ) {\n        return;\n    }\n\n    const value = normalizedValue * (colors.length - 1);\n    const leftIndex = Math.floor(value);\n    const rightIndex = Math.ceil(value);\n    const leftColor = parse(colors[leftIndex]);\n    const rightColor = parse(colors[rightIndex]);\n    const dv = value - leftIndex;\n\n    const color = stringify(\n        [\n            clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv)),\n            clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv)),\n            clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv)),\n            clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv))\n        ],\n        'rgba'\n    );\n\n    return fullOutput\n        ? {\n            color: color,\n            leftIndex: leftIndex,\n            rightIndex: rightIndex,\n            value: value\n        }\n        : color;\n}\n\n/**\n * @deprecated\n */\nexport const mapToColor = lerp;\n\n/**\n * @param color\n * @param h 0 ~ 360, ignore when null.\n * @param s 0 ~ 1, ignore when null.\n * @param l 0 ~ 1, ignore when null.\n * @return Color string in rgba format.\n * @memberOf module:zrender/util/color\n */\nexport function modifyHSL(color: string, h?: number, s?: number, l?: number): string {\n    let colorArr = parse(color);\n\n    if (color) {\n        colorArr = rgba2hsla(colorArr);\n        h != null && (colorArr[0] = clampCssAngle(h));\n        s != null && (colorArr[1] = parseCssFloat(s));\n        l != null && (colorArr[2] = parseCssFloat(l));\n\n        return stringify(hsla2rgba(colorArr), 'rgba');\n    }\n}\n\n/**\n * @param color\n * @param alpha 0 ~ 1\n * @return Color string in rgba format.\n * @memberOf module:zrender/util/color\n */\nexport function modifyAlpha(color: string, alpha?: number): string {\n    const colorArr = parse(color);\n\n    if (colorArr && alpha != null) {\n        colorArr[3] = clampCssFloat(alpha);\n        return stringify(colorArr, 'rgba');\n    }\n}\n\n/**\n * @param arrColor like [12,33,44,0.4]\n * @param type 'rgba', 'hsva', ...\n * @return Result color. (If input illegal, return undefined).\n */\nexport function stringify(arrColor: number[], type: string): string {\n    if (!arrColor || !arrColor.length) {\n        return;\n    }\n    let colorStr = arrColor[0] + ',' + arrColor[1] + ',' + arrColor[2];\n    if (type === 'rgba' || type === 'hsva' || type === 'hsla') {\n        colorStr += ',' + arrColor[3];\n    }\n    return type + '(' + colorStr + ')';\n}\n\n/**\n * Calculate luminance. It will include alpha.\n */\nexport function lum(color: string, backgroundLum: number) {\n    const arr = parse(color);\n    return arr\n        ? (0.299 * arr[0] + 0.587 * arr[1] + 0.114 * arr[2]) * arr[3] / 255\n            + (1 - arr[3]) * backgroundLum  // Blending with assumed white background.\n        : 0;\n}\n\n/**\n * Generate a random color\n */\nexport function random(): string {\n    return stringify([\n        Math.round(Math.random() * 255),\n        Math.round(Math.random() * 255),\n        Math.round(Math.random() * 255)\n    ], 'rgb');\n}\n\nconst liftedColorCache = new LRU(100);\nexport function liftColor(color: GradientObject): GradientObject;\nexport function liftColor(color: string): string;\nexport function liftColor(color: string | GradientObject): string | GradientObject {\n    if (isString(color)) {\n        let liftedColor = liftedColorCache.get(color);\n        if (!liftedColor) {\n            liftedColor = lift(color, -0.1);\n            liftedColorCache.put(color, liftedColor);\n        }\n        return liftedColor;\n    }\n    else if (isGradientObject(color)) {\n        const ret = extend({}, color) as GradientObject;\n        ret.colorStops = map(color.colorStops, stop => ({\n            offset: stop.offset,\n            color: lift(stop.color, -0.1)\n        }));\n        return ret;\n    }\n    // Change nothing.\n    return color;\n}\n","// Shared methods of svg and svg-ssr\r\n\r\nimport { MatrixArray } from '../core/matrix';\r\nimport Transformable, { TransformProp } from '../core/Transformable';\r\nimport { RADIAN_TO_DEGREE, retrieve2, logError, isFunction } from '../core/util';\r\nimport Displayable from '../graphic/Displayable';\r\nimport { GradientObject } from '../graphic/Gradient';\r\nimport { LinearGradientObject } from '../graphic/LinearGradient';\r\nimport Path from '../graphic/Path';\r\nimport { ImagePatternObject, PatternObject, SVGPatternObject } from '../graphic/Pattern';\r\nimport { RadialGradientObject } from '../graphic/RadialGradient';\r\nimport { parse } from '../tool/color';\r\nimport env from '../core/env';\r\n\r\nconst mathRound = Math.round;\r\n\r\nexport function normalizeColor(color: string): { color: string; opacity: number; } {\r\n    let opacity;\r\n    if (!color || color === 'transparent') {\r\n        color = 'none';\r\n    }\r\n    else if (typeof color === 'string' && color.indexOf('rgba') > -1) {\r\n        const arr = parse(color);\r\n        if (arr) {\r\n            // TODO use hex?\r\n            color = 'rgb(' + arr[0] + ',' + arr[1] + ',' + arr[2] + ')';\r\n            opacity = arr[3];\r\n        }\r\n    }\r\n    return {\r\n        color,\r\n        opacity: opacity == null ? 1 : opacity\r\n    };\r\n}\r\nconst EPSILON = 1e-4;\r\nexport function isAroundZero(transform: number) {\r\n    return transform < EPSILON && transform > -EPSILON;\r\n}\r\n\r\nexport function round3(transform: number) {\r\n    return mathRound(transform * 1e3) / 1e3;\r\n}\r\nexport function round4(transform: number) {\r\n    return mathRound(transform * 1e4) / 1e4;\r\n}\r\nexport function round1(transform: number) {\r\n    return mathRound(transform * 10) / 10;\r\n}\r\n\r\nexport function getMatrixStr(m: MatrixArray) {\r\n    return 'matrix('\r\n        // Avoid large string of matrix\r\n        // PENDING If have precision issue when scaled\r\n        + round3(m[0]) + ','\r\n        + round3(m[1]) + ','\r\n        + round3(m[2]) + ','\r\n        + round3(m[3]) + ','\r\n        + round4(m[4]) + ','\r\n        + round4(m[5])\r\n        + ')';\r\n}\r\n\r\nexport const TEXT_ALIGN_TO_ANCHOR = {\r\n    left: 'start',\r\n    right: 'end',\r\n    center: 'middle',\r\n    middle: 'middle'\r\n};\r\n\r\nexport function adjustTextY(y: number, lineHeight: number, textBaseline: CanvasTextBaseline): number {\r\n    // TODO Other baselines.\r\n    if (textBaseline === 'top') {\r\n        y += lineHeight / 2;\r\n    }\r\n    else if (textBaseline === 'bottom') {\r\n        y -= lineHeight / 2;\r\n    }\r\n    return y;\r\n}\r\n\r\n\r\nexport function hasShadow(style: Displayable['style']) {\r\n    // TODO: textBoxShadowBlur is not supported yet\r\n    return style\r\n        && (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY);\r\n}\r\n\r\nexport function getShadowKey(displayable: Displayable) {\r\n    const style = displayable.style;\r\n    const globalScale = displayable.getGlobalScale();\r\n    return [\r\n        style.shadowColor,\r\n        (style.shadowBlur || 0).toFixed(2), // Reduce the precision\r\n        (style.shadowOffsetX || 0).toFixed(2),\r\n        (style.shadowOffsetY || 0).toFixed(2),\r\n        globalScale[0],\r\n        globalScale[1]\r\n    ].join(',');\r\n}\r\n\r\nexport function getClipPathsKey(clipPaths: Path[]) {\r\n    let key: number[] = [];\r\n    if (clipPaths) {\r\n        for (let i = 0; i < clipPaths.length; i++) {\r\n            const clipPath = clipPaths[i];\r\n            key.push(clipPath.id);\r\n        }\r\n    }\r\n    return key.join(',');\r\n}\r\n\r\nexport function isImagePattern(val: any): val is ImagePatternObject {\r\n    return val && (!!(val as ImagePatternObject).image);\r\n}\r\nexport function isSVGPattern(val: any): val is SVGPatternObject {\r\n    return val && (!!(val as SVGPatternObject).svgElement);\r\n}\r\nexport function isPattern(val: any): val is PatternObject {\r\n    return isImagePattern(val) || isSVGPattern(val);\r\n}\r\n\r\nexport function isLinearGradient(val: GradientObject): val is LinearGradientObject {\r\n    return val.type === 'linear';\r\n}\r\n\r\nexport function isRadialGradient(val: GradientObject): val is RadialGradientObject {\r\n    return val.type === 'radial';\r\n}\r\n\r\nexport function isGradient(val: any): val is GradientObject {\r\n    return val && (\r\n        (val as GradientObject).type === 'linear'\r\n        || (val as GradientObject).type === 'radial'\r\n    );\r\n}\r\n\r\nexport function getIdURL(id: string) {\r\n    return `url(#${id})`;\r\n}\r\n\r\nexport function getPathPrecision(el: Path) {\r\n    const scale = el.getGlobalScale();\r\n    const size = Math.max(scale[0], scale[1]);\r\n    return Math.max(Math.ceil(Math.log(size) / Math.log(10)), 1);\r\n}\r\n\r\nexport function getSRTTransformString(\r\n    transform: Partial>\r\n) {\r\n    const x = transform.x || 0;\r\n    const y = transform.y || 0;\r\n    const rotation = (transform.rotation || 0) * RADIAN_TO_DEGREE;\r\n    const scaleX = retrieve2(transform.scaleX, 1);\r\n    const scaleY = retrieve2(transform.scaleY, 1);\r\n    const skewX = transform.skewX || 0;\r\n    const skewY = transform.skewY || 0;\r\n    const res = [];\r\n    if (x || y) {\r\n        // TODO not using px unit?\r\n        res.push(`translate(${x}px,${y}px)`);\r\n    }\r\n    if (rotation) {\r\n        res.push(`rotate(${rotation})`);\r\n    }\r\n    if (scaleX !== 1 || scaleY !== 1) {\r\n        res.push(`scale(${scaleX},${scaleY})`);\r\n    }\r\n    if (skewX || skewY) {\r\n        res.push(`skew(${mathRound(skewX * RADIAN_TO_DEGREE)}deg, ${mathRound(skewY * RADIAN_TO_DEGREE)}deg)`);\r\n    }\r\n\r\n    return res.join(' ');\r\n}\r\n\r\nexport const encodeBase64 = (function () {\r\n    if (env.hasGlobalWindow && isFunction(window.btoa)) {\r\n        return function (str: string) {\r\n            return window.btoa(unescape(encodeURIComponent(str)));\r\n        };\r\n    }\r\n    if (typeof Buffer !== 'undefined') {\r\n        return function (str: string) {\r\n            return Buffer.from(str).toString('base64');\r\n        };\r\n    }\r\n    return function (str: string): string {\r\n        if (process.env.NODE_ENV !== 'production') {\r\n            logError('Base64 isn\\'t natively supported in the current environment.');\r\n        }\r\n        return null;\r\n    };\r\n})();","/**\r\n * @module echarts/animation/Animator\r\n */\r\n\r\nimport Clip from './Clip';\r\nimport * as color from '../tool/color';\r\nimport {\r\n    eqNaN,\r\n    extend,\r\n    isArrayLike,\r\n    isFunction,\r\n    isGradientObject,\r\n    isNumber,\r\n    isString,\r\n    keys,\r\n    logError,\r\n    map\r\n} from '../core/util';\r\nimport {ArrayLike, Dictionary} from '../core/types';\r\nimport easingFuncs, { AnimationEasing } from './easing';\r\nimport Animation from './Animation';\r\nimport { createCubicEasingFunc } from './cubicEasing';\r\nimport { isLinearGradient, isRadialGradient } from '../svg/helper';\r\n\r\ntype NumberArray = ArrayLike\r\ntype InterpolatableType = string | number | NumberArray | NumberArray[];\r\n\r\ninterface ParsedColorStop {\r\n    color: number[],\r\n    offset: number\r\n};\r\n\r\ninterface ParsedGradientObject {\r\n    colorStops: ParsedColorStop[]\r\n    x: number\r\n    y: number\r\n    global: boolean\r\n}\r\ninterface ParsedLinearGradientObject extends ParsedGradientObject {\r\n    x2: number\r\n    y2: number\r\n}\r\ninterface ParsedRadialGradientObject extends ParsedGradientObject {\r\n    r: number\r\n}\r\n\r\nconst arraySlice = Array.prototype.slice;\r\n\r\nfunction interpolateNumber(p0: number, p1: number, percent: number): number {\r\n    return (p1 - p0) * percent + p0;\r\n}\r\nfunction interpolate1DArray(\r\n    out: NumberArray,\r\n    p0: NumberArray,\r\n    p1: NumberArray,\r\n    percent: number\r\n) {\r\n    // TODO Handling different length TypedArray\r\n    const len = p0.length;\r\n    for (let i = 0; i < len; i++) {\r\n        out[i] = interpolateNumber(p0[i], p1[i], percent);\r\n    }\r\n    return out;\r\n}\r\n\r\nfunction interpolate2DArray(\r\n    out: NumberArray[],\r\n    p0: NumberArray[],\r\n    p1: NumberArray[],\r\n    percent: number\r\n) {\r\n    const len = p0.length;\r\n    // TODO differnt length on each item?\r\n    const len2 = len && p0[0].length;\r\n    for (let i = 0; i < len; i++) {\r\n        if (!out[i]) {\r\n            out[i] = [];\r\n        }\r\n        for (let j = 0; j < len2; j++) {\r\n            out[i][j] = interpolateNumber(p0[i][j], p1[i][j], percent);\r\n        }\r\n    }\r\n    return out;\r\n}\r\n\r\nfunction add1DArray(\r\n    out: NumberArray,\r\n    p0: NumberArray,\r\n    p1: NumberArray,\r\n    sign: 1 | -1\r\n) {\r\n    const len = p0.length;\r\n    for (let i = 0; i < len; i++) {\r\n        out[i] = p0[i] + p1[i] * sign;\r\n    }\r\n    return out;\r\n}\r\n\r\nfunction add2DArray(\r\n    out: NumberArray[],\r\n    p0: NumberArray[],\r\n    p1: NumberArray[],\r\n    sign: 1 | -1\r\n) {\r\n    const len = p0.length;\r\n    const len2 = len && p0[0].length;\r\n    for (let i = 0; i < len; i++) {\r\n        if (!out[i]) {\r\n            out[i] = [];\r\n        }\r\n        for (let j = 0; j < len2; j++) {\r\n            out[i][j] = p0[i][j] + p1[i][j] * sign;\r\n        }\r\n    }\r\n    return out;\r\n}\r\n\r\nfunction fillColorStops(val0: ParsedColorStop[], val1: ParsedColorStop[]) {\r\n    const len0 = val0.length;\r\n    const len1 = val1.length;\r\n\r\n    const shorterArr = len0 > len1 ? val1 : val0;\r\n    const shorterLen = Math.min(len0, len1);\r\n    const last = shorterArr[shorterLen - 1] || { color: [0, 0, 0, 0], offset: 0 };\r\n    for (let i = shorterLen; i < Math.max(len0, len1); i++) {\r\n        // Use last color stop to fill the shorter array\r\n        shorterArr.push({\r\n            offset: last.offset,\r\n            color: last.color.slice()\r\n        });\r\n    }\r\n}\r\n// arr0 is source array, arr1 is target array.\r\n// Do some preprocess to avoid error happened when interpolating from arr0 to arr1\r\nfunction fillArray(\r\n    val0: NumberArray | NumberArray[],\r\n    val1: NumberArray | NumberArray[],\r\n    arrDim: 1 | 2\r\n) {\r\n    // TODO Handling different length TypedArray\r\n    let arr0 = val0 as (number | number[])[];\r\n    let arr1 = val1 as (number | number[])[];\r\n    if (!arr0.push || !arr1.push) {\r\n        return;\r\n    }\r\n    const arr0Len = arr0.length;\r\n    const arr1Len = arr1.length;\r\n    if (arr0Len !== arr1Len) {\r\n        // FIXME Not work for TypedArray\r\n        const isPreviousLarger = arr0Len > arr1Len;\r\n        if (isPreviousLarger) {\r\n            // Cut the previous\r\n            arr0.length = arr1Len;\r\n        }\r\n        else {\r\n            // Fill the previous\r\n            for (let i = arr0Len; i < arr1Len; i++) {\r\n                arr0.push(arrDim === 1 ? arr1[i] : arraySlice.call(arr1[i]));\r\n            }\r\n        }\r\n    }\r\n    // Handling NaN value\r\n    const len2 = arr0[0] && (arr0[0] as number[]).length;\r\n    for (let i = 0; i < arr0.length; i++) {\r\n        if (arrDim === 1) {\r\n            if (isNaN(arr0[i] as number)) {\r\n                arr0[i] = arr1[i];\r\n            }\r\n        }\r\n        else {\r\n            for (let j = 0; j < len2; j++) {\r\n                if (isNaN((arr0 as number[][])[i][j])) {\r\n                    (arr0 as number[][])[i][j] = (arr1 as number[][])[i][j];\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport function cloneValue(value: InterpolatableType) {\r\n    if (isArrayLike(value)) {\r\n        const len = value.length;\r\n        if (isArrayLike(value[0])) {\r\n            const ret = [];\r\n            for (let i = 0; i < len; i++) {\r\n                ret.push(arraySlice.call(value[i]));\r\n            }\r\n            return ret;\r\n        }\r\n\r\n        return arraySlice.call(value);\r\n    }\r\n\r\n    return value;\r\n}\r\n\r\nfunction rgba2String(rgba: number[]): string {\r\n    rgba[0] = Math.floor(rgba[0]) || 0;\r\n    rgba[1] = Math.floor(rgba[1]) || 0;\r\n    rgba[2] = Math.floor(rgba[2]) || 0;\r\n    rgba[3] = rgba[3] == null ? 1 : rgba[3];\r\n\r\n    return 'rgba(' + rgba.join(',') + ')';\r\n}\r\n\r\nfunction guessArrayDim(value: ArrayLike): 1 | 2 {\r\n    return isArrayLike(value && (value as ArrayLike)[0]) ? 2 : 1;\r\n}\r\n\r\nconst VALUE_TYPE_NUMBER = 0;\r\nconst VALUE_TYPE_1D_ARRAY = 1;\r\nconst VALUE_TYPE_2D_ARRAY = 2;\r\nconst VALUE_TYPE_COLOR = 3;\r\nconst VALUE_TYPE_LINEAR_GRADIENT = 4;\r\nconst VALUE_TYPE_RADIAL_GRADIENT = 5;\r\n// Other value type that can only use discrete animation.\r\nconst VALUE_TYPE_UNKOWN = 6;\r\n\r\ntype ValueType = 0 | 1 | 2 | 3 | 4 | 5 | 6;\r\n\r\ntype Keyframe = {\r\n    time: number\r\n    value: unknown\r\n    percent: number\r\n    // Raw value for discrete animation.\r\n    rawValue: unknown\r\n\r\n    easing?: AnimationEasing    // Raw easing\r\n    easingFunc?: (percent: number) => number\r\n    additiveValue?: unknown\r\n}\r\n\r\n\r\nfunction isGradientValueType(valType: ValueType): valType is 4 | 5 {\r\n    return valType === VALUE_TYPE_LINEAR_GRADIENT || valType === VALUE_TYPE_RADIAL_GRADIENT;\r\n}\r\nfunction isArrayValueType(valType: ValueType): valType is 1 | 2 {\r\n    return valType === VALUE_TYPE_1D_ARRAY || valType === VALUE_TYPE_2D_ARRAY;\r\n}\r\n\r\n\r\nlet tmpRgba: number[] = [0, 0, 0, 0];\r\n\r\nclass Track {\r\n\r\n    keyframes: Keyframe[] = []\r\n\r\n    propName: string\r\n\r\n    valType: ValueType\r\n\r\n    discrete: boolean = false\r\n\r\n    _invalid: boolean = false;\r\n\r\n    private _finished: boolean\r\n\r\n    private _needsSort: boolean = false\r\n\r\n    private _additiveTrack: Track\r\n    // Temporal storage for interpolated additive value.\r\n    private _additiveValue: unknown\r\n\r\n    // Info for run\r\n    /**\r\n     * Last frame\r\n     */\r\n    private _lastFr = 0\r\n    /**\r\n     * Percent of last frame.\r\n     */\r\n    private _lastFrP = 0\r\n\r\n    constructor(propName: string) {\r\n        this.propName = propName;\r\n    }\r\n\r\n    isFinished() {\r\n        return this._finished;\r\n    }\r\n\r\n    setFinished() {\r\n        this._finished = true;\r\n        // Also set additive track to finished.\r\n        // Make sure the final value stopped on the latest track\r\n        if (this._additiveTrack) {\r\n            this._additiveTrack.setFinished();\r\n        }\r\n    }\r\n\r\n    needsAnimate() {\r\n        return this.keyframes.length >= 1;\r\n    }\r\n\r\n    getAdditiveTrack() {\r\n        return this._additiveTrack;\r\n    }\r\n\r\n    addKeyframe(time: number, rawValue: unknown, easing?: AnimationEasing) {\r\n        this._needsSort = true;\r\n\r\n        let keyframes = this.keyframes;\r\n        let len = keyframes.length;\r\n\r\n        let discrete = false;\r\n        let valType: ValueType = VALUE_TYPE_UNKOWN;\r\n        let value = rawValue;\r\n\r\n        // Handling values only if it's possible to be interpolated.\r\n        if (isArrayLike(rawValue)) {\r\n            let arrayDim = guessArrayDim(rawValue);\r\n            valType = arrayDim;\r\n            // Not a number array.\r\n            if (arrayDim === 1 && !isNumber(rawValue[0])\r\n                || arrayDim === 2 && !isNumber(rawValue[0][0])) {\r\n                discrete = true;\r\n            }\r\n        }\r\n        else {\r\n            if (isNumber(rawValue) && !eqNaN(rawValue)) {\r\n                valType = VALUE_TYPE_NUMBER;\r\n            }\r\n            else if (isString(rawValue)) {\r\n                if (!isNaN(+rawValue)) {    // Can be string number like '2'\r\n                    valType = VALUE_TYPE_NUMBER;\r\n                }\r\n                else {\r\n                    const colorArray = color.parse(rawValue);\r\n                    if (colorArray) {\r\n                        value = colorArray;\r\n                        valType = VALUE_TYPE_COLOR;\r\n                    }\r\n                }\r\n            }\r\n            else if (isGradientObject(rawValue)) {\r\n                // TODO Color to gradient or gradient to color.\r\n                const parsedGradient = extend({}, value) as unknown as ParsedGradientObject;\r\n                parsedGradient.colorStops = map(rawValue.colorStops, colorStop => ({\r\n                    offset: colorStop.offset,\r\n                    color: color.parse(colorStop.color)\r\n                }));\r\n                if (isLinearGradient(rawValue)) {\r\n                    valType = VALUE_TYPE_LINEAR_GRADIENT;\r\n                }\r\n                else if (isRadialGradient(rawValue)) {\r\n                    valType = VALUE_TYPE_RADIAL_GRADIENT;\r\n                }\r\n                value = parsedGradient;\r\n            }\r\n        }\r\n\r\n        if (len === 0) {\r\n            // Inference type from the first keyframe.\r\n            this.valType = valType;\r\n        }\r\n         // Not same value type or can't be interpolated.\r\n        else if (valType !== this.valType || valType === VALUE_TYPE_UNKOWN) {\r\n            discrete = true;\r\n        }\r\n\r\n        this.discrete = this.discrete || discrete;\r\n\r\n        const kf: Keyframe = {\r\n            time,\r\n            value,\r\n            rawValue,\r\n            percent: 0\r\n        };\r\n        if (easing) {\r\n            // Save the raw easing name to be used in css animation output\r\n            kf.easing = easing;\r\n            kf.easingFunc = isFunction(easing)\r\n                ? easing\r\n                : easingFuncs[easing] || createCubicEasingFunc(easing);\r\n        }\r\n        // Not check if value equal here.\r\n        keyframes.push(kf);\r\n        return kf;\r\n    }\r\n\r\n    prepare(maxTime: number, additiveTrack?: Track) {\r\n        let kfs = this.keyframes;\r\n        if (this._needsSort) {\r\n            // Sort keyframe as ascending\r\n            kfs.sort(function (a: Keyframe, b: Keyframe) {\r\n                return a.time - b.time;\r\n            });\r\n        }\r\n\r\n        const valType = this.valType;\r\n        const kfsLen = kfs.length;\r\n        const lastKf = kfs[kfsLen - 1];\r\n        const isDiscrete = this.discrete;\r\n        const isArr = isArrayValueType(valType);\r\n        const isGradient = isGradientValueType(valType);\r\n\r\n        for (let i = 0; i < kfsLen; i++) {\r\n            const kf = kfs[i];\r\n            const value = kf.value;\r\n            const lastValue = lastKf.value;\r\n            kf.percent = kf.time / maxTime;\r\n            if (!isDiscrete) {\r\n                if (isArr && i !== kfsLen - 1) {\r\n                    // Align array with target frame.\r\n                    fillArray(value as NumberArray, lastValue as NumberArray, valType);\r\n                }\r\n                else if (isGradient) {\r\n                    fillColorStops(\r\n                        (value as ParsedLinearGradientObject).colorStops,\r\n                        (lastValue as ParsedLinearGradientObject).colorStops\r\n                    );\r\n                }\r\n            }\r\n        }\r\n\r\n        // Only apply additive animaiton on INTERPOLABLE SAME TYPE values.\r\n        if (\r\n            !isDiscrete\r\n            // TODO support gradient\r\n            && valType !== VALUE_TYPE_RADIAL_GRADIENT\r\n            && additiveTrack\r\n            // If two track both will be animated and have same value format.\r\n            && this.needsAnimate()\r\n            && additiveTrack.needsAnimate()\r\n            && valType === additiveTrack.valType\r\n            && !additiveTrack._finished\r\n        ) {\r\n            this._additiveTrack = additiveTrack;\r\n\r\n            const startValue = kfs[0].value;\r\n            // Calculate difference\r\n            for (let i = 0; i < kfsLen; i++) {\r\n                if (valType === VALUE_TYPE_NUMBER) {\r\n                    kfs[i].additiveValue = kfs[i].value as number - (startValue as number);\r\n                }\r\n                else if (valType === VALUE_TYPE_COLOR) {\r\n                    kfs[i].additiveValue =\r\n                        add1DArray([], kfs[i].value as NumberArray, startValue as NumberArray, -1);\r\n                }\r\n                else if (isArrayValueType(valType)) {\r\n                    kfs[i].additiveValue = valType === VALUE_TYPE_1D_ARRAY\r\n                        ? add1DArray([], kfs[i].value as NumberArray, startValue as NumberArray, -1)\r\n                        : add2DArray([], kfs[i].value as NumberArray[], startValue as NumberArray[], -1);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    step(target: any, percent: number) {\r\n        if (this._finished) {   // Track may be set to finished.\r\n            return;\r\n        }\r\n\r\n        if (this._additiveTrack && this._additiveTrack._finished) {\r\n            // Remove additive track if it's finished.\r\n            this._additiveTrack = null;\r\n        }\r\n        const isAdditive = this._additiveTrack != null;\r\n        const valueKey = isAdditive ? 'additiveValue' : 'value';\r\n\r\n        const valType = this.valType;\r\n        const keyframes = this.keyframes;\r\n        const kfsNum = keyframes.length;\r\n        const propName = this.propName;\r\n        const isValueColor = valType === VALUE_TYPE_COLOR;\r\n        // Find the range keyframes\r\n        // kf1-----kf2---------current--------kf3\r\n        // find kf2 and kf3 and do interpolation\r\n        let frameIdx;\r\n        const lastFrame = this._lastFr;\r\n        const mathMin = Math.min;\r\n        let frame;\r\n        let nextFrame;\r\n        if (kfsNum === 1) {\r\n            frame = nextFrame = keyframes[0];\r\n        }\r\n        else {\r\n            // In the easing function like elasticOut, percent may less than 0\r\n            if (percent < 0) {\r\n                frameIdx = 0;\r\n            }\r\n            else if (percent < this._lastFrP) {\r\n                // Start from next key\r\n                // PENDING start from lastFrame ?\r\n                const start = mathMin(lastFrame + 1, kfsNum - 1);\r\n                for (frameIdx = start; frameIdx >= 0; frameIdx--) {\r\n                    if (keyframes[frameIdx].percent <= percent) {\r\n                        break;\r\n                    }\r\n                }\r\n                frameIdx = mathMin(frameIdx, kfsNum - 2);\r\n            }\r\n            else {\r\n                for (frameIdx = lastFrame; frameIdx < kfsNum; frameIdx++) {\r\n                    if (keyframes[frameIdx].percent > percent) {\r\n                        break;\r\n                    }\r\n                }\r\n                frameIdx = mathMin(frameIdx - 1, kfsNum - 2);\r\n            }\r\n\r\n            nextFrame = keyframes[frameIdx + 1];\r\n            frame = keyframes[frameIdx];\r\n        }\r\n\r\n        // Defensive coding.\r\n        if (!(frame && nextFrame)) {\r\n            return;\r\n        }\r\n\r\n        this._lastFr = frameIdx;\r\n        this._lastFrP = percent;\r\n\r\n        const interval = (nextFrame.percent - frame.percent);\r\n        let w = interval === 0 ? 1 : mathMin((percent - frame.percent) / interval, 1);\r\n\r\n        // Apply different easing of each keyframe.\r\n        // Use easing specified in target frame.\r\n        if (nextFrame.easingFunc) {\r\n            w = nextFrame.easingFunc(w);\r\n        }\r\n\r\n        // If value is arr\r\n        let targetArr = isAdditive ? this._additiveValue\r\n            : (isValueColor ? tmpRgba : target[propName]);\r\n\r\n        if ((isArrayValueType(valType) || isValueColor) && !targetArr) {\r\n            targetArr = this._additiveValue = [];\r\n        }\r\n\r\n        if (this.discrete) {\r\n            // use raw value without parse in discrete animation.\r\n            target[propName] = w < 1 ? frame.rawValue : nextFrame.rawValue;\r\n        }\r\n        else if (isArrayValueType(valType)) {\r\n            valType === VALUE_TYPE_1D_ARRAY\r\n                ? interpolate1DArray(\r\n                    targetArr as NumberArray,\r\n                    frame[valueKey] as NumberArray,\r\n                    nextFrame[valueKey] as NumberArray,\r\n                    w\r\n                )\r\n                : interpolate2DArray(\r\n                    targetArr as NumberArray[],\r\n                    frame[valueKey] as NumberArray[],\r\n                    nextFrame[valueKey] as NumberArray[],\r\n                    w\r\n                );\r\n        }\r\n        else if (isGradientValueType(valType)) {\r\n            const val = frame[valueKey] as ParsedGradientObject;\r\n            const nextVal = nextFrame[valueKey] as ParsedGradientObject;\r\n            const isLinearGradient = valType === VALUE_TYPE_LINEAR_GRADIENT;\r\n            target[propName] = {\r\n                type: isLinearGradient ? 'linear' : 'radial',\r\n                x: interpolateNumber(val.x, nextVal.x, w),\r\n                y: interpolateNumber(val.y, nextVal.y, w),\r\n                // TODO performance\r\n                colorStops: map(val.colorStops, (colorStop, idx) => {\r\n                    const nextColorStop = nextVal.colorStops[idx];\r\n                    return {\r\n                        offset: interpolateNumber(colorStop.offset, nextColorStop.offset, w),\r\n                        color: rgba2String(interpolate1DArray(\r\n                            [] as number[], colorStop.color, nextColorStop.color, w\r\n                        ) as number[])\r\n                    };\r\n                }),\r\n                global: nextVal.global\r\n            };\r\n            if (isLinearGradient) {\r\n                // Linear\r\n                target[propName].x2 = interpolateNumber(\r\n                    (val as ParsedLinearGradientObject).x2, (nextVal as ParsedLinearGradientObject).x2, w\r\n                );\r\n                target[propName].y2 = interpolateNumber(\r\n                    (val as ParsedLinearGradientObject).y2, (nextVal as ParsedLinearGradientObject).y2, w\r\n                );\r\n            }\r\n            else {\r\n                // Radial\r\n                target[propName].r = interpolateNumber(\r\n                    (val as ParsedRadialGradientObject).r, (nextVal as ParsedRadialGradientObject).r, w\r\n                );\r\n            }\r\n        }\r\n        else if (isValueColor) {\r\n            interpolate1DArray(\r\n                targetArr,\r\n                frame[valueKey] as NumberArray,\r\n                nextFrame[valueKey] as NumberArray,\r\n                w\r\n            );\r\n            if (!isAdditive) {  // Convert to string later:)\r\n                target[propName] = rgba2String(targetArr);\r\n            }\r\n        }\r\n        else {\r\n            const value = interpolateNumber(frame[valueKey] as number, nextFrame[valueKey] as number, w);\r\n            if (isAdditive) {\r\n                this._additiveValue = value;\r\n            }\r\n            else {\r\n                target[propName] = value;\r\n            }\r\n        }\r\n\r\n        // Add additive to target\r\n        if (isAdditive) {\r\n            this._addToTarget(target);\r\n        }\r\n    }\r\n\r\n    private _addToTarget(target: any) {\r\n        const valType = this.valType;\r\n        const propName = this.propName;\r\n        const additiveValue = this._additiveValue;\r\n\r\n        if (valType === VALUE_TYPE_NUMBER) {\r\n            // Add a difference value based on the change of previous frame.\r\n            target[propName] = target[propName] + additiveValue;\r\n        }\r\n        else if (valType === VALUE_TYPE_COLOR) {\r\n            // TODO reduce unnecessary parse\r\n            color.parse(target[propName], tmpRgba);\r\n            add1DArray(tmpRgba, tmpRgba, additiveValue as NumberArray, 1);\r\n            target[propName] = rgba2String(tmpRgba);\r\n        }\r\n        else if (valType === VALUE_TYPE_1D_ARRAY) {\r\n            add1DArray(target[propName], target[propName], additiveValue as NumberArray, 1);\r\n        }\r\n        else if (valType === VALUE_TYPE_2D_ARRAY) {\r\n            add2DArray(target[propName], target[propName], additiveValue as NumberArray[], 1);\r\n        }\r\n    }\r\n}\r\n\r\n\r\ntype DoneCallback = () => void;\r\ntype AbortCallback = () => void;\r\nexport type OnframeCallback = (target: T, percent: number) => void;\r\n\r\nexport type AnimationPropGetter = (target: T, key: string) => InterpolatableType;\r\nexport type AnimationPropSetter = (target: T, key: string, value: InterpolatableType) => void;\r\n\r\nexport default class Animator {\r\n\r\n    animation?: Animation\r\n\r\n    targetName?: string\r\n\r\n    scope?: string\r\n\r\n    __fromStateTransition?: string\r\n\r\n    private _tracks: Dictionary = {}\r\n    private _trackKeys: string[] = []\r\n\r\n    private _target: T\r\n\r\n    private _loop: boolean\r\n    private _delay: number\r\n    private _maxTime = 0\r\n\r\n    /**\r\n     * If force run regardless of empty tracks when duration is set.\r\n     */\r\n    private _force: boolean;\r\n\r\n    /**\r\n     * If animator is paused\r\n     * @default false\r\n     */\r\n    private _paused: boolean\r\n    // 0: Not started\r\n    // 1: Invoked started\r\n    // 2: Has been run for at least one frame.\r\n    private _started = 0\r\n\r\n    /**\r\n     * If allow discrete animation\r\n     * @default false\r\n     */\r\n    private _allowDiscrete: boolean\r\n\r\n    private _additiveAnimators: Animator[]\r\n\r\n    private _doneCbs: DoneCallback[]\r\n    private _onframeCbs: OnframeCallback[]\r\n\r\n    private _abortedCbs: AbortCallback[]\r\n\r\n    private _clip: Clip = null\r\n\r\n    constructor(\r\n        target: T,\r\n        loop: boolean,\r\n        allowDiscreteAnimation?: boolean,  // If doing discrete animation on the values can't be interpolated\r\n        additiveTo?: Animator[]\r\n    ) {\r\n        this._target = target;\r\n        this._loop = loop;\r\n        if (loop && additiveTo) {\r\n            logError('Can\\' use additive animation on looped animation.');\r\n            return;\r\n        }\r\n        this._additiveAnimators = additiveTo;\r\n\r\n        this._allowDiscrete = allowDiscreteAnimation;\r\n    }\r\n\r\n    getMaxTime() {\r\n        return this._maxTime;\r\n    }\r\n\r\n    getDelay() {\r\n        return this._delay;\r\n    }\r\n\r\n    getLoop() {\r\n        return this._loop;\r\n    }\r\n\r\n    getTarget() {\r\n        return this._target;\r\n    }\r\n\r\n    /**\r\n     * Target can be changed during animation\r\n     * For example if style is changed during state change.\r\n     * We need to change target to the new style object.\r\n     */\r\n    changeTarget(target: T) {\r\n        this._target = target;\r\n    }\r\n\r\n    /**\r\n     * Set Animation keyframe\r\n     * @param time time of keyframe in ms\r\n     * @param props key-value props of keyframe.\r\n     * @param easing\r\n     */\r\n    when(time: number, props: Dictionary, easing?: AnimationEasing) {\r\n        return this.whenWithKeys(time, props, keys(props) as string[], easing);\r\n    }\r\n\r\n\r\n    // Fast path for add keyframes of aniamteTo\r\n    whenWithKeys(time: number, props: Dictionary, propNames: string[], easing?: AnimationEasing) {\r\n        const tracks = this._tracks;\r\n        for (let i = 0; i < propNames.length; i++) {\r\n            const propName = propNames[i];\r\n\r\n            let track = tracks[propName];\r\n            if (!track) {\r\n                track = tracks[propName] = new Track(propName);\r\n\r\n                let initialValue;\r\n                const additiveTrack = this._getAdditiveTrack(propName);\r\n                if (additiveTrack) {\r\n                    const addtiveTrackKfs = additiveTrack.keyframes;\r\n                    const lastFinalKf = addtiveTrackKfs[addtiveTrackKfs.length - 1];\r\n                    // Use the last state of additived animator.\r\n                    initialValue = lastFinalKf && lastFinalKf.value;\r\n                    if (additiveTrack.valType === VALUE_TYPE_COLOR && initialValue) {\r\n                        // Convert to rgba string\r\n                        initialValue = rgba2String(initialValue as number[]);\r\n                    }\r\n                }\r\n                else {\r\n                    initialValue = (this._target as any)[propName];\r\n                }\r\n                // Invalid value\r\n                if (initialValue == null) {\r\n                    // zrLog('Invalid property ' + propName);\r\n                    continue;\r\n                }\r\n                // If time is <= 0\r\n                //  Then props is given initialize value\r\n                //  Note: initial percent can be negative, which means the initial value is before the animation start.\r\n                // Else\r\n                //  Initialize value from current prop value\r\n                if (time > 0) {\r\n                    track.addKeyframe(0, cloneValue(initialValue), easing);\r\n                }\r\n\r\n                this._trackKeys.push(propName);\r\n            }\r\n            track.addKeyframe(time, cloneValue(props[propName]), easing);\r\n        }\r\n        this._maxTime = Math.max(this._maxTime, time);\r\n        return this;\r\n    }\r\n\r\n    pause() {\r\n        this._clip.pause();\r\n        this._paused = true;\r\n    }\r\n\r\n    resume() {\r\n        this._clip.resume();\r\n        this._paused = false;\r\n    }\r\n\r\n    isPaused(): boolean {\r\n        return !!this._paused;\r\n    }\r\n\r\n    /**\r\n     * Set duration of animator.\r\n     * Will run this duration regardless the track max time or if trackes exits.\r\n     * @param duration\r\n     * @returns\r\n     */\r\n    duration(duration: number) {\r\n        this._maxTime = duration;\r\n        this._force = true;\r\n        return this;\r\n    }\r\n\r\n    private _doneCallback() {\r\n        this._setTracksFinished();\r\n        // Clear clip\r\n        this._clip = null;\r\n\r\n        const doneList = this._doneCbs;\r\n        if (doneList) {\r\n            const len = doneList.length;\r\n            for (let i = 0; i < len; i++) {\r\n                doneList[i].call(this);\r\n            }\r\n        }\r\n    }\r\n    private _abortedCallback() {\r\n        this._setTracksFinished();\r\n\r\n        const animation = this.animation;\r\n        const abortedList = this._abortedCbs;\r\n\r\n        if (animation) {\r\n            animation.removeClip(this._clip);\r\n        }\r\n        this._clip = null;\r\n\r\n        if (abortedList) {\r\n            for (let i = 0; i < abortedList.length; i++) {\r\n                abortedList[i].call(this);\r\n            }\r\n        }\r\n    }\r\n    private _setTracksFinished() {\r\n        const tracks = this._tracks;\r\n        const tracksKeys = this._trackKeys;\r\n        for (let i = 0; i < tracksKeys.length; i++) {\r\n            tracks[tracksKeys[i]].setFinished();\r\n        }\r\n    }\r\n\r\n    private _getAdditiveTrack(trackName: string): Track {\r\n        let additiveTrack;\r\n        const additiveAnimators = this._additiveAnimators;\r\n        if (additiveAnimators) {\r\n            for (let i = 0; i < additiveAnimators.length; i++) {\r\n                const track = additiveAnimators[i].getTrack(trackName);\r\n                if (track) {\r\n                    // Use the track of latest animator.\r\n                    additiveTrack = track;\r\n                }\r\n            }\r\n        }\r\n        return additiveTrack;\r\n    }\r\n\r\n    /**\r\n     * Start the animation\r\n     * @param easing\r\n     * @return\r\n     */\r\n    start(easing?: AnimationEasing) {\r\n        if (this._started > 0) {\r\n            return;\r\n        }\r\n        this._started = 1;\r\n\r\n        const self = this;\r\n\r\n        const tracks: Track[] = [];\r\n        const maxTime = this._maxTime || 0;\r\n        for (let i = 0; i < this._trackKeys.length; i++) {\r\n            const propName = this._trackKeys[i];\r\n            const track = this._tracks[propName];\r\n            const additiveTrack = this._getAdditiveTrack(propName);\r\n            const kfs = track.keyframes;\r\n            const kfsNum = kfs.length;\r\n            track.prepare(maxTime, additiveTrack);\r\n            if (track.needsAnimate()) {\r\n                // Set value directly if discrete animation is not allowed.\r\n                if (!this._allowDiscrete && track.discrete) {\r\n                    const lastKf = kfs[kfsNum - 1];\r\n                    // Set final value.\r\n                    if (lastKf) {\r\n                        // use raw value without parse.\r\n                        (self._target as any)[track.propName] = lastKf.rawValue;\r\n                    }\r\n                    track.setFinished();\r\n                }\r\n                else {\r\n                    tracks.push(track);\r\n                }\r\n            }\r\n        }\r\n        // Add during callback on the last clip\r\n        if (tracks.length || this._force) {\r\n            const clip = new Clip({\r\n                life: maxTime,\r\n                loop: this._loop,\r\n                delay: this._delay || 0,\r\n                onframe(percent: number) {\r\n                    self._started = 2;\r\n                    // Remove additived animator if it's finished.\r\n                    // For the purpose of memory effeciency.\r\n                    const additiveAnimators = self._additiveAnimators;\r\n                    if (additiveAnimators) {\r\n                        let stillHasAdditiveAnimator = false;\r\n                        for (let i = 0; i < additiveAnimators.length; i++) {\r\n                            if (additiveAnimators[i]._clip) {\r\n                                stillHasAdditiveAnimator = true;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (!stillHasAdditiveAnimator) {\r\n                            self._additiveAnimators = null;\r\n                        }\r\n                    }\r\n\r\n                    for (let i = 0; i < tracks.length; i++) {\r\n                        // NOTE: don't cache target outside.\r\n                        // Because target may be changed.\r\n                        tracks[i].step(self._target, percent);\r\n                    }\r\n\r\n                    const onframeList = self._onframeCbs;\r\n                    if (onframeList) {\r\n                        for (let i = 0; i < onframeList.length; i++) {\r\n                            onframeList[i](self._target, percent);\r\n                        }\r\n                    }\r\n                },\r\n                ondestroy() {\r\n                    self._doneCallback();\r\n                }\r\n            });\r\n            this._clip = clip;\r\n\r\n            if (this.animation) {\r\n                this.animation.addClip(clip);\r\n            }\r\n\r\n            if (easing) {\r\n                clip.setEasing(easing);\r\n            }\r\n        }\r\n        else {\r\n            // This optimization will help the case that in the upper application\r\n            // the view may be refreshed frequently, where animation will be\r\n            // called repeatly but nothing changed.\r\n            this._doneCallback();\r\n        }\r\n\r\n        return this;\r\n    }\r\n    /**\r\n     * Stop animation\r\n     * @param {boolean} forwardToLast If move to last frame before stop\r\n     */\r\n    stop(forwardToLast?: boolean) {\r\n        if (!this._clip) {\r\n            return;\r\n        }\r\n        const clip = this._clip;\r\n        if (forwardToLast) {\r\n            // Move to last frame before stop\r\n            clip.onframe(1);\r\n        }\r\n\r\n        this._abortedCallback();\r\n    }\r\n    /**\r\n     * Set when animation delay starts\r\n     * @param time 单位ms\r\n     */\r\n    delay(time: number) {\r\n        this._delay = time;\r\n        return this;\r\n    }\r\n    /**\r\n     * 添加动画每一帧的回调函数\r\n     * @param callback\r\n     */\r\n    during(cb: OnframeCallback) {\r\n        if (cb) {\r\n            if (!this._onframeCbs) {\r\n                this._onframeCbs = [];\r\n            }\r\n            this._onframeCbs.push(cb);\r\n        }\r\n        return this;\r\n    }\r\n    /**\r\n     * Add callback for animation end\r\n     * @param cb\r\n     */\r\n    done(cb: DoneCallback) {\r\n        if (cb) {\r\n            if (!this._doneCbs) {\r\n                this._doneCbs = [];\r\n            }\r\n            this._doneCbs.push(cb);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    aborted(cb: AbortCallback) {\r\n        if (cb) {\r\n            if (!this._abortedCbs) {\r\n                this._abortedCbs = [];\r\n            }\r\n            this._abortedCbs.push(cb);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    getClip() {\r\n        return this._clip;\r\n    }\r\n\r\n    getTrack(propName: string) {\r\n        return this._tracks[propName];\r\n    }\r\n\r\n    getTracks() {\r\n        return map(this._trackKeys, key => this._tracks[key]);\r\n    }\r\n\r\n    /**\r\n     * Return true if animator is not available anymore.\r\n     */\r\n    stopTracks(propNames: string[], forwardToLast?: boolean): boolean {\r\n        if (!propNames.length || !this._clip) {\r\n            return true;\r\n        }\r\n        const tracks = this._tracks;\r\n        const tracksKeys = this._trackKeys;\r\n\r\n        for (let i = 0; i < propNames.length; i++) {\r\n            const track = tracks[propNames[i]];\r\n            if (track && !track.isFinished()) {\r\n                if (forwardToLast) {\r\n                    track.step(this._target, 1);\r\n                }\r\n                // If the track has not been run for at least one frame.\r\n                // The property may be stayed at the final state. when setToFinal is set true.\r\n                // For example:\r\n                // Animate x from 0 to 100, then animate to 150 immediately.\r\n                // We want the x is translated from 0 to 150, not 100 to 150.\r\n                else if (this._started === 1) {\r\n                    track.step(this._target, 0);\r\n                }\r\n                // Set track to finished\r\n                track.setFinished();\r\n            }\r\n        }\r\n        let allAborted = true;\r\n        for (let i = 0; i < tracksKeys.length; i++) {\r\n            if (!tracks[tracksKeys[i]].isFinished()) {\r\n                allAborted = false;\r\n                break;\r\n            }\r\n        }\r\n        // Remove clip if all tracks has been aborted.\r\n        if (allAborted) {\r\n            this._abortedCallback();\r\n        }\r\n\r\n        return allAborted;\r\n    }\r\n\r\n    /**\r\n     * Save values of final state to target.\r\n     * It is mainly used in state mangement. When state is switching during animation.\r\n     * We need to save final state of animation to the normal state. Not interpolated value.\r\n     *\r\n     * @param target\r\n     * @param trackKeys\r\n     * @param firstOrLast If save first frame or last frame\r\n     */\r\n    saveTo(\r\n        target: T,\r\n        trackKeys?: readonly string[],\r\n        firstOrLast?: boolean\r\n    ) {\r\n        if (!target) {  // DO nothing if target is not given.\r\n            return;\r\n        }\r\n\r\n        trackKeys = trackKeys || this._trackKeys;\r\n\r\n        for (let i = 0; i < trackKeys.length; i++) {\r\n            const propName = trackKeys[i];\r\n            const track = this._tracks[propName];\r\n            if (!track || track.isFinished()) {   // Ignore finished track.\r\n                continue;\r\n            }\r\n            const kfs = track.keyframes;\r\n            const kf = kfs[firstOrLast ? 0 : kfs.length - 1];\r\n            if (kf) {\r\n                // TODO CLONE?\r\n                // Use raw value without parse.\r\n                (target as any)[propName] = cloneValue(kf.rawValue as any);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Change final value after animator has been started.\r\n    // NOTE: Be careful to use it.\r\n    __changeFinalValue(finalProps: Dictionary, trackKeys?: readonly string[]) {\r\n        trackKeys = trackKeys || keys(finalProps);\r\n\r\n        for (let i = 0; i < trackKeys.length; i++) {\r\n            const propName = trackKeys[i];\r\n\r\n            const track = this._tracks[propName];\r\n            if (!track) {\r\n                continue;\r\n            }\r\n\r\n            const kfs = track.keyframes;\r\n            if (kfs.length > 1) {\r\n                // Remove the original last kf and add again.\r\n                const lastKf = kfs.pop();\r\n\r\n                track.addKeyframe(lastKf.time, finalProps[propName]);\r\n                // Prepare again.\r\n                track.prepare(this._maxTime, track.getAdditiveTrack());\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport type AnimatorTrack = Track;","/**\r\n * Animation main class, dispatch and manage all animation controllers\r\n *\r\n */\r\n// TODO Additive animation\r\n// http://iosoteric.com/additive-animations-animatewithduration-in-ios-8/\r\n// https://developer.apple.com/videos/wwdc2014/#236\r\n\r\nimport Eventful from '../core/Eventful';\r\nimport requestAnimationFrame from './requestAnimationFrame';\r\nimport Animator from './Animator';\r\nimport Clip from './Clip';\r\n\r\nexport function getTime() {\r\n    return new Date().getTime();\r\n}\r\n\r\ninterface Stage {\r\n    update?: () => void\r\n}\r\n\r\ninterface AnimationOption {\r\n    stage?: Stage\r\n}\r\n/**\r\n * @example\r\n *     const animation = new Animation();\r\n *     const obj = {\r\n *         x: 100,\r\n *         y: 100\r\n *     };\r\n *     animation.animate(node.position)\r\n *         .when(1000, {\r\n *             x: 500,\r\n *             y: 500\r\n *         })\r\n *         .when(2000, {\r\n *             x: 100,\r\n *             y: 100\r\n *         })\r\n *         .start();\r\n */\r\n\r\nexport default class Animation extends Eventful {\r\n\r\n    stage: Stage\r\n\r\n    // Use linked list to store clip\r\n    private _head: Clip\r\n    private _tail: Clip\r\n\r\n    private _running = false\r\n\r\n    private _time = 0\r\n    private _pausedTime = 0\r\n    private _pauseStart = 0\r\n\r\n    private _paused = false;\r\n\r\n    constructor(opts?: AnimationOption) {\r\n        super();\r\n\r\n        opts = opts || {};\r\n\r\n        this.stage = opts.stage || {};\r\n    }\r\n\r\n    /**\r\n     * Add clip\r\n     */\r\n    addClip(clip: Clip) {\r\n        if (clip.animation) {\r\n            // Clip has been added\r\n            this.removeClip(clip);\r\n        }\r\n\r\n        if (!this._head) {\r\n            this._head = this._tail = clip;\r\n        }\r\n        else {\r\n            this._tail.next = clip;\r\n            clip.prev = this._tail;\r\n            clip.next = null;\r\n            this._tail = clip;\r\n        }\r\n        clip.animation = this;\r\n    }\r\n    /**\r\n     * Add animator\r\n     */\r\n    addAnimator(animator: Animator) {\r\n        animator.animation = this;\r\n        const clip = animator.getClip();\r\n        if (clip) {\r\n            this.addClip(clip);\r\n        }\r\n    }\r\n    /**\r\n     * Delete animation clip\r\n     */\r\n    removeClip(clip: Clip) {\r\n        if (!clip.animation) {\r\n            return;\r\n        }\r\n        const prev = clip.prev;\r\n        const next = clip.next;\r\n        if (prev) {\r\n            prev.next = next;\r\n        }\r\n        else {\r\n            // Is head\r\n            this._head = next;\r\n        }\r\n        if (next) {\r\n            next.prev = prev;\r\n        }\r\n        else {\r\n            // Is tail\r\n            this._tail = prev;\r\n        }\r\n        clip.next = clip.prev = clip.animation = null;\r\n    }\r\n\r\n    /**\r\n     * Delete animation clip\r\n     */\r\n    removeAnimator(animator: Animator) {\r\n        const clip = animator.getClip();\r\n        if (clip) {\r\n            this.removeClip(clip);\r\n        }\r\n        animator.animation = null;\r\n    }\r\n\r\n    update(notTriggerFrameAndStageUpdate?: boolean) {\r\n        const time = getTime() - this._pausedTime;\r\n        const delta = time - this._time;\r\n        let clip = this._head;\r\n\r\n        while (clip) {\r\n            // Save the nextClip before step.\r\n            // So the loop will not been affected if the clip is removed in the callback\r\n            const nextClip = clip.next;\r\n            let finished = clip.step(time, delta);\r\n            if (finished) {\r\n                clip.ondestroy();\r\n                this.removeClip(clip);\r\n                clip = nextClip;\r\n            }\r\n            else {\r\n                clip = nextClip;\r\n            }\r\n        }\r\n\r\n        this._time = time;\r\n\r\n        if (!notTriggerFrameAndStageUpdate) {\r\n\r\n            // 'frame' should be triggered before stage, because upper application\r\n            // depends on the sequence (e.g., echarts-stream and finish\r\n            // event judge)\r\n            this.trigger('frame', delta);\r\n\r\n            this.stage.update && this.stage.update();\r\n        }\r\n    }\r\n\r\n    _startLoop() {\r\n        const self = this;\r\n\r\n        this._running = true;\r\n\r\n        function step() {\r\n            if (self._running) {\r\n                requestAnimationFrame(step);\r\n                !self._paused && self.update();\r\n            }\r\n        }\r\n\r\n        requestAnimationFrame(step);\r\n    }\r\n\r\n    /**\r\n     * Start animation.\r\n     */\r\n    start() {\r\n        if (this._running) {\r\n            return;\r\n        }\r\n\r\n        this._time = getTime();\r\n        this._pausedTime = 0;\r\n\r\n        this._startLoop();\r\n    }\r\n\r\n    /**\r\n     * Stop animation.\r\n     */\r\n    stop() {\r\n        this._running = false;\r\n    }\r\n\r\n    /**\r\n     * Pause animation.\r\n     */\r\n    pause() {\r\n        if (!this._paused) {\r\n            this._pauseStart = getTime();\r\n            this._paused = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Resume animation.\r\n     */\r\n    resume() {\r\n        if (this._paused) {\r\n            this._pausedTime += getTime() - this._pauseStart;\r\n            this._paused = false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Clear animation.\r\n     */\r\n    clear() {\r\n        let clip = this._head;\r\n\r\n        while (clip) {\r\n            let nextClip = clip.next;\r\n            clip.prev = clip.next = clip.animation = null;\r\n            clip = nextClip;\r\n        }\r\n\r\n        this._head = this._tail = null;\r\n    }\r\n\r\n    /**\r\n     * Whether animation finished.\r\n     */\r\n    isFinished() {\r\n        return this._head == null;\r\n    }\r\n\r\n    /**\r\n     * Creat animator for a target, whose props can be animated.\r\n     */\r\n    // TODO Gap\r\n    animate(target: T, options: {\r\n        loop?: boolean  // Whether loop animation\r\n    }) {\r\n        options = options || {};\r\n\r\n        // Start animation loop\r\n        this.start();\r\n\r\n        const animator = new Animator(\r\n            target,\r\n            options.loop\r\n        );\r\n\r\n        this.addAnimator(animator);\r\n\r\n        return animator;\r\n    }\r\n}","\n/* global document */\n\nimport {\n    addEventListener,\n    removeEventListener,\n    normalizeEvent,\n    getNativeEvent\n} from '../core/event';\nimport * as zrUtil from '../core/util';\nimport Eventful from '../core/Eventful';\nimport env from '../core/env';\nimport { Dictionary, ZRRawEvent, ZRRawMouseEvent } from '../core/types';\nimport { VectorArray } from '../core/vector';\nimport Handler from '../Handler';\n\ntype DomHandlersMap = Dictionary<(this: HandlerDomProxy, event: ZRRawEvent) => void>\n\ntype DomExtended = Node & {\n    domBelongToZr: boolean\n}\n\nconst TOUCH_CLICK_DELAY = 300;\n\nconst globalEventSupported = env.domSupported;\n\n\nconst localNativeListenerNames = (function () {\n    const mouseHandlerNames = [\n        'click', 'dblclick', 'mousewheel', 'wheel', 'mouseout',\n        'mouseup', 'mousedown', 'mousemove', 'contextmenu'\n    ];\n    const touchHandlerNames = [\n        'touchstart', 'touchend', 'touchmove'\n    ];\n    const pointerEventNameMap = {\n        pointerdown: 1, pointerup: 1, pointermove: 1, pointerout: 1\n    };\n    const pointerHandlerNames = zrUtil.map(mouseHandlerNames, function (name) {\n        const nm = name.replace('mouse', 'pointer');\n        return pointerEventNameMap.hasOwnProperty(nm) ? nm : name;\n    });\n\n    return {\n        mouse: mouseHandlerNames,\n        touch: touchHandlerNames,\n        pointer: pointerHandlerNames\n    };\n})();\n\nconst globalNativeListenerNames = {\n    mouse: ['mousemove', 'mouseup'],\n    pointer: ['pointermove', 'pointerup']\n};\n\nlet wheelEventSupported = false;\n\n\n// Although firfox has 'DOMMouseScroll' event and do not has 'mousewheel' event,\n// the 'DOMMouseScroll' event do not performe the same behavior on touch pad device\n// (like on Mac) ('DOMMouseScroll' will be triggered only if a big wheel delta).\n// So we should not use it.\n// function eventNameFix(name: string) {\n//     return (name === 'mousewheel' && env.browser.firefox) ? 'DOMMouseScroll' : name;\n// }\n\nfunction isPointerFromTouch(event: ZRRawEvent) {\n    const pointerType = (event as any).pointerType;\n    return pointerType === 'pen' || pointerType === 'touch';\n}\n\n// function useMSGuesture(handlerProxy, event) {\n//     return isPointerFromTouch(event) && !!handlerProxy._msGesture;\n// }\n\n// function onMSGestureChange(proxy, event) {\n//     if (event.translationX || event.translationY) {\n//         // mousemove is carried by MSGesture to reduce the sensitivity.\n//         proxy.handler.dispatchToElement(event.target, 'mousemove', event);\n//     }\n//     if (event.scale !== 1) {\n//         event.pinchX = event.offsetX;\n//         event.pinchY = event.offsetY;\n//         event.pinchScale = event.scale;\n//         proxy.handler.dispatchToElement(event.target, 'pinch', event);\n//     }\n// }\n\n/**\n * Prevent mouse event from being dispatched after Touch Events action\n * @see \n * 1. Mobile browsers dispatch mouse events 300ms after touchend.\n * 2. Chrome for Android dispatch mousedown for long-touch about 650ms\n * Result: Blocking Mouse Events for 700ms.\n *\n * @param {DOMHandlerScope} scope\n */\nfunction setTouchTimer(scope: DOMHandlerScope) {\n    scope.touching = true;\n    if (scope.touchTimer != null) {\n        clearTimeout(scope.touchTimer);\n        scope.touchTimer = null;\n    }\n    scope.touchTimer = setTimeout(function () {\n        scope.touching = false;\n        scope.touchTimer = null;\n    }, 700);\n}\n\n// Mark touch, which is useful in distinguish touch and\n// mouse event in upper applicatoin.\nfunction markTouch(event: ZRRawEvent) {\n    event && (event.zrByTouch = true);\n}\n\n\n// function markTriggeredFromLocal(event) {\n//     event && (event.__zrIsFromLocal = true);\n// }\n\n// function isTriggeredFromLocal(instance, event) {\n//     return !!(event && event.__zrIsFromLocal);\n// }\n\nfunction normalizeGlobalEvent(instance: HandlerDomProxy, event: ZRRawEvent) {\n    // offsetX, offsetY still need to be calculated. They are necessary in the event\n    // handlers of the upper applications. Set `true` to force calculate them.\n    return normalizeEvent(\n        instance.dom,\n        // TODO ANY TYPE\n        new FakeGlobalEvent(instance, event) as any as ZRRawEvent,\n        true\n    );\n}\n\n/**\n * Detect whether the given el is in `painterRoot`.\n */\nfunction isLocalEl(instance: HandlerDomProxy, el: Node) {\n    let elTmp = el;\n    let isLocal = false;\n    while (elTmp && elTmp.nodeType !== 9\n        && !(\n            isLocal = (elTmp as DomExtended).domBelongToZr\n                || (elTmp !== el && elTmp === instance.painterRoot)\n        )\n    ) {\n        elTmp = elTmp.parentNode;\n    }\n    return isLocal;\n}\n\n/**\n * Make a fake event but not change the original event,\n * because the global event probably be used by other\n * listeners not belonging to zrender.\n * @class\n */\nclass FakeGlobalEvent {\n    type: string\n    target: HTMLElement\n    currentTarget: HTMLElement\n\n    pointerType: string\n    clientX: number\n    clientY: number\n\n    constructor(instance: HandlerDomProxy, event: ZRRawEvent) {\n        this.type = event.type;\n        this.target = this.currentTarget = instance.dom;\n        this.pointerType = (event as any).pointerType;\n        // Necessray for the force calculation of zrX, zrY\n        this.clientX = (event as ZRRawMouseEvent).clientX;\n        this.clientY = (event as ZRRawMouseEvent).clientY;\n        // Because we do not mount global listeners to touch events,\n        // we do not copy `targetTouches` and `changedTouches` here.\n    }\n\n    // we make the default methods on the event do nothing,\n    // otherwise it is dangerous. See more details in\n    // [DRAG_OUTSIDE] in `Handler.js`.\n    stopPropagation = zrUtil.noop\n    stopImmediatePropagation = zrUtil.noop\n    preventDefault = zrUtil.noop\n}\n\n\n/**\n * Local DOM Handlers\n * @this {HandlerProxy}\n */\nconst localDOMHandlers: DomHandlersMap = {\n\n    mousedown(event: ZRRawEvent) {\n        event = normalizeEvent(this.dom, event);\n\n        this.__mayPointerCapture = [event.zrX, event.zrY];\n\n        this.trigger('mousedown', event);\n    },\n\n    mousemove(event: ZRRawEvent) {\n        event = normalizeEvent(this.dom, event);\n\n        const downPoint = this.__mayPointerCapture;\n        if (downPoint && (event.zrX !== downPoint[0] || event.zrY !== downPoint[1])) {\n            this.__togglePointerCapture(true);\n        }\n\n        this.trigger('mousemove', event);\n    },\n\n    mouseup(event: ZRRawEvent) {\n        event = normalizeEvent(this.dom, event);\n\n        this.__togglePointerCapture(false);\n\n        this.trigger('mouseup', event);\n    },\n\n    mouseout(event: ZRRawEvent) {\n        event = normalizeEvent(this.dom, event);\n\n        // There might be some doms created by upper layer application\n        // at the same level of painter.getViewportRoot() (e.g., tooltip\n        // dom created by echarts), where 'globalout' event should not\n        // be triggered when mouse enters these doms. (But 'mouseout'\n        // should be triggered at the original hovered element as usual).\n        const element = (event as any).toElement || (event as ZRRawMouseEvent).relatedTarget;\n\n        // For SVG rendering, there are SVG elements inside `this.dom`.\n        // (especially in decal case). Should not to handle those \"mouseout\"..\n        if (!isLocalEl(this, element)) {\n            // Similarly to the browser did on `document` and touch event,\n            // `globalout` will be delayed to final pointer cature release.\n            if (this.__pointerCapturing) {\n                event.zrEventControl = 'no_globalout';\n            }\n\n            this.trigger('mouseout', event);\n        }\n    },\n\n    wheel(event: ZRRawEvent) {\n        // Morden agent has supported event `wheel` instead of `mousewheel`.\n        // About the polyfill of the props \"delta\", see \"arc/core/event.ts\".\n\n        // Firefox only support `wheel` rather than `mousewheel`. Although firfox has been supporting\n        // event `DOMMouseScroll`, it do not act the same behavior as `wheel` on touch pad device\n        // like on Mac, where `DOMMouseScroll` will be triggered only if a big wheel delta occurs,\n        // and it results in no chance to \"preventDefault\". So we should not use `DOMMouseScroll`.\n\n        wheelEventSupported = true;\n        event = normalizeEvent(this.dom, event);\n        // Follow the definition of the previous version, the zrender event name is still 'mousewheel'.\n        this.trigger('mousewheel', event);\n    },\n\n    mousewheel(event: ZRRawEvent) {\n        // IE8- and some other lagacy agent do not support event `wheel`, so we still listen\n        // to the legacy event `mouseevent`.\n        // Typically if event `wheel` is supported and the handler has been mounted on a\n        // DOM element, the legacy `mousewheel` event will not be triggered (Chrome and Safari).\n        // But we still do this guard to avoid to duplicated handle.\n        if (wheelEventSupported) {\n            return;\n        }\n        event = normalizeEvent(this.dom, event);\n        this.trigger('mousewheel', event);\n    },\n\n    touchstart(event: ZRRawEvent) {\n        // Default mouse behaviour should not be disabled here.\n        // For example, page may needs to be slided.\n        event = normalizeEvent(this.dom, event);\n\n        markTouch(event);\n\n        this.__lastTouchMoment = new Date();\n\n        this.handler.processGesture(event, 'start');\n\n        // For consistent event listener for both touch device and mouse device,\n        // we simulate \"mouseover-->mousedown\" in touch device. So we trigger\n        // `mousemove` here (to trigger `mouseover` inside), and then trigger\n        // `mousedown`.\n        localDOMHandlers.mousemove.call(this, event);\n        localDOMHandlers.mousedown.call(this, event);\n    },\n\n    touchmove(event: ZRRawEvent) {\n        event = normalizeEvent(this.dom, event);\n\n        markTouch(event);\n\n        this.handler.processGesture(event, 'change');\n\n        // Mouse move should always be triggered no matter whether\n        // there is gestrue event, because mouse move and pinch may\n        // be used at the same time.\n        localDOMHandlers.mousemove.call(this, event);\n    },\n\n    touchend(event: ZRRawEvent) {\n        event = normalizeEvent(this.dom, event);\n\n        markTouch(event);\n\n        this.handler.processGesture(event, 'end');\n\n        localDOMHandlers.mouseup.call(this, event);\n\n        // Do not trigger `mouseout` here, in spite of `mousemove`(`mouseover`) is\n        // triggered in `touchstart`. This seems to be illogical, but by this mechanism,\n        // we can conveniently implement \"hover style\" in both PC and touch device just\n        // by listening to `mouseover` to add \"hover style\" and listening to `mouseout`\n        // to remove \"hover style\" on an element, without any additional code for\n        // compatibility. (`mouseout` will not be triggered in `touchend`, so \"hover\n        // style\" will remain for user view)\n\n        // click event should always be triggered no matter whether\n        // there is gestrue event. System click can not be prevented.\n        if (+new Date() - (+this.__lastTouchMoment) < TOUCH_CLICK_DELAY) {\n            localDOMHandlers.click.call(this, event);\n        }\n    },\n\n    pointerdown(event: ZRRawEvent) {\n        localDOMHandlers.mousedown.call(this, event);\n\n        // if (useMSGuesture(this, event)) {\n        //     this._msGesture.addPointer(event.pointerId);\n        // }\n    },\n\n    pointermove(event: ZRRawEvent) {\n        // FIXME\n        // pointermove is so sensitive that it always triggered when\n        // tap(click) on touch screen, which affect some judgement in\n        // upper application. So, we don't support mousemove on MS touch\n        // device yet.\n        if (!isPointerFromTouch(event)) {\n            localDOMHandlers.mousemove.call(this, event);\n        }\n    },\n\n    pointerup(event: ZRRawEvent) {\n        localDOMHandlers.mouseup.call(this, event);\n    },\n\n    pointerout(event: ZRRawEvent) {\n        // pointerout will be triggered when tap on touch screen\n        // (IE11+/Edge on MS Surface) after click event triggered,\n        // which is inconsistent with the mousout behavior we defined\n        // in touchend. So we unify them.\n        // (check localDOMHandlers.touchend for detailed explanation)\n        if (!isPointerFromTouch(event)) {\n            localDOMHandlers.mouseout.call(this, event);\n        }\n    }\n\n};\n\n/**\n * Othere DOM UI Event handlers for zr dom.\n * @this {HandlerProxy}\n */\nzrUtil.each(['click', 'dblclick', 'contextmenu'], function (name) {\n    localDOMHandlers[name] = function (event) {\n        event = normalizeEvent(this.dom, event);\n        this.trigger(name, event);\n    };\n});\n\n\n/**\n * DOM UI Event handlers for global page.\n *\n * [Caution]:\n * those handlers should both support in capture phase and bubble phase!\n */\nconst globalDOMHandlers: DomHandlersMap = {\n\n    pointermove: function (event: ZRRawEvent) {\n        // FIXME\n        // pointermove is so sensitive that it always triggered when\n        // tap(click) on touch screen, which affect some judgement in\n        // upper application. So, we don't support mousemove on MS touch\n        // device yet.\n        if (!isPointerFromTouch(event)) {\n            globalDOMHandlers.mousemove.call(this, event);\n        }\n    },\n\n    pointerup: function (event: ZRRawEvent) {\n        globalDOMHandlers.mouseup.call(this, event);\n    },\n\n    mousemove: function (event: ZRRawEvent) {\n        this.trigger('mousemove', event);\n    },\n\n    mouseup: function (event: ZRRawEvent) {\n        const pointerCaptureReleasing = this.__pointerCapturing;\n\n        this.__togglePointerCapture(false);\n\n        this.trigger('mouseup', event);\n\n        if (pointerCaptureReleasing) {\n            event.zrEventControl = 'only_globalout';\n            this.trigger('mouseout', event);\n        }\n    }\n\n};\n\n\nfunction mountLocalDOMEventListeners(instance: HandlerDomProxy, scope: DOMHandlerScope) {\n    const domHandlers = scope.domHandlers;\n\n    if (env.pointerEventsSupported) { // Only IE11+/Edge\n        // 1. On devices that both enable touch and mouse (e.g., MS Surface and lenovo X240),\n        // IE11+/Edge do not trigger touch event, but trigger pointer event and mouse event\n        // at the same time.\n        // 2. On MS Surface, it probablely only trigger mousedown but no mouseup when tap on\n        // screen, which do not occurs in pointer event.\n        // So we use pointer event to both detect touch gesture and mouse behavior.\n        zrUtil.each(localNativeListenerNames.pointer, function (nativeEventName) {\n            mountSingleDOMEventListener(scope, nativeEventName, function (event) {\n                // markTriggeredFromLocal(event);\n                domHandlers[nativeEventName].call(instance, event);\n            });\n        });\n\n        // FIXME\n        // Note: MS Gesture require CSS touch-action set. But touch-action is not reliable,\n        // which does not prevent defuault behavior occasionally (which may cause view port\n        // zoomed in but use can not zoom it back). And event.preventDefault() does not work.\n        // So we have to not to use MSGesture and not to support touchmove and pinch on MS\n        // touch screen. And we only support click behavior on MS touch screen now.\n\n        // MS Gesture Event is only supported on IE11+/Edge and on Windows 8+.\n        // We don't support touch on IE on win7.\n        // See \n        // if (typeof MSGesture === 'function') {\n        //     (this._msGesture = new MSGesture()).target = dom; // jshint ignore:line\n        //     dom.addEventListener('MSGestureChange', onMSGestureChange);\n        // }\n    }\n    else {\n        if (env.touchEventsSupported) {\n            zrUtil.each(localNativeListenerNames.touch, function (nativeEventName) {\n                mountSingleDOMEventListener(scope, nativeEventName, function (event) {\n                    // markTriggeredFromLocal(event);\n                    domHandlers[nativeEventName].call(instance, event);\n                    setTouchTimer(scope);\n                });\n            });\n            // Handler of 'mouseout' event is needed in touch mode, which will be mounted below.\n            // addEventListener(root, 'mouseout', this._mouseoutHandler);\n        }\n\n        // 1. Considering some devices that both enable touch and mouse event (like on MS Surface\n        // and lenovo X240, @see #2350), we make mouse event be always listened, otherwise\n        // mouse event can not be handle in those devices.\n        // 2. On MS Surface, Chrome will trigger both touch event and mouse event. How to prevent\n        // mouseevent after touch event triggered, see `setTouchTimer`.\n        zrUtil.each(localNativeListenerNames.mouse, function (nativeEventName) {\n            mountSingleDOMEventListener(scope, nativeEventName, function (event: ZRRawEvent) {\n                event = getNativeEvent(event);\n                if (!scope.touching) {\n                    // markTriggeredFromLocal(event);\n                    domHandlers[nativeEventName].call(instance, event);\n                }\n            });\n        });\n    }\n}\n\nfunction mountGlobalDOMEventListeners(instance: HandlerDomProxy, scope: DOMHandlerScope) {\n    // Only IE11+/Edge. See the comment in `mountLocalDOMEventListeners`.\n    if (env.pointerEventsSupported) {\n        zrUtil.each(globalNativeListenerNames.pointer, mount);\n    }\n    // Touch event has implemented \"drag outside\" so we do not mount global listener for touch event.\n    // (see https://www.w3.org/TR/touch-events/#the-touchmove-event) (see also `DRAG_OUTSIDE`).\n    // We do not consider \"both-support-touch-and-mouse device\" for this feature (see the comment of\n    // `mountLocalDOMEventListeners`) to avoid bugs util some requirements come.\n    else if (!env.touchEventsSupported) {\n        zrUtil.each(globalNativeListenerNames.mouse, mount);\n    }\n\n    function mount(nativeEventName: string) {\n        function nativeEventListener(event: ZRRawEvent) {\n            event = getNativeEvent(event);\n            // See the reason in [DRAG_OUTSIDE] in `Handler.js`\n            // This checking supports both `useCapture` or not.\n            // PENDING: if there is performance issue in some devices,\n            // we probably can not use `useCapture` and change a easier\n            // to judes whether local (mark).\n            if (!isLocalEl(instance, event.target as Node)) {\n                event = normalizeGlobalEvent(instance, event);\n                scope.domHandlers[nativeEventName].call(instance, event);\n            }\n        }\n        mountSingleDOMEventListener(\n            scope, nativeEventName, nativeEventListener,\n            {capture: true} // See [DRAG_OUTSIDE] in `Handler.js`\n        );\n    }\n}\n\nfunction mountSingleDOMEventListener(\n    scope: DOMHandlerScope,\n    nativeEventName: string,\n    listener: EventListener,\n    opt?: boolean | AddEventListenerOptions\n) {\n    scope.mounted[nativeEventName] = listener;\n    scope.listenerOpts[nativeEventName] = opt;\n    addEventListener(scope.domTarget, nativeEventName, listener, opt);\n}\n\nfunction unmountDOMEventListeners(scope: DOMHandlerScope) {\n    const mounted = scope.mounted;\n    for (let nativeEventName in mounted) {\n        if (mounted.hasOwnProperty(nativeEventName)) {\n            removeEventListener(\n                scope.domTarget, nativeEventName, mounted[nativeEventName],\n                scope.listenerOpts[nativeEventName]\n            );\n        }\n    }\n    scope.mounted = {};\n}\n\n\nclass DOMHandlerScope {\n    domTarget: HTMLElement | HTMLDocument\n    domHandlers: DomHandlersMap\n\n    // Key: eventName, value: mounted handler functions.\n    // Used for unmount.\n    mounted: Dictionary = {};\n\n    listenerOpts: Dictionary = {};\n\n    touchTimer: ReturnType;\n    touching = false;\n\n    constructor(\n        domTarget: HTMLElement | HTMLDocument,\n        domHandlers: DomHandlersMap\n    ) {\n        this.domTarget = domTarget;\n        this.domHandlers = domHandlers;\n\n    }\n}\n\n\nexport default class HandlerDomProxy extends Eventful {\n\n    dom: HTMLElement\n    painterRoot: HTMLElement\n\n    handler: Handler\n\n    private _localHandlerScope: DOMHandlerScope\n    private _globalHandlerScope: DOMHandlerScope\n\n    __lastTouchMoment: Date\n\n    // See [DRAG_OUTSIDE] in `Handler.ts`.\n    __pointerCapturing = false\n    // [x, y]\n    __mayPointerCapture: VectorArray\n\n\n    constructor(dom: HTMLElement, painterRoot: HTMLElement) {\n        super();\n\n        this.dom = dom;\n        this.painterRoot = painterRoot;\n\n        this._localHandlerScope = new DOMHandlerScope(dom, localDOMHandlers);\n\n        if (globalEventSupported) {\n            this._globalHandlerScope = new DOMHandlerScope(document, globalDOMHandlers);\n        }\n\n        mountLocalDOMEventListeners(this, this._localHandlerScope);\n    }\n\n    dispose() {\n        unmountDOMEventListeners(this._localHandlerScope);\n        if (globalEventSupported) {\n            unmountDOMEventListeners(this._globalHandlerScope);\n        }\n    }\n\n    setCursor(cursorStyle: string) {\n        this.dom.style && (this.dom.style.cursor = cursorStyle || 'default');\n    }\n\n    /**\n     * See [DRAG_OUTSIDE] in `Handler.js`.\n     * @implement\n     * @param isPointerCapturing Should never be `null`/`undefined`.\n     *        `true`: start to capture pointer if it is not capturing.\n     *        `false`: end the capture if it is capturing.\n     */\n    __togglePointerCapture(isPointerCapturing?: boolean) {\n        this.__mayPointerCapture = null;\n\n        if (globalEventSupported\n            && ((+this.__pointerCapturing) ^ (+isPointerCapturing))\n        ) {\n            this.__pointerCapturing = isPointerCapturing;\n\n            const globalHandlerScope = this._globalHandlerScope;\n            isPointerCapturing\n                ? mountGlobalDOMEventListeners(this, globalHandlerScope)\n                : unmountDOMEventListeners(globalHandlerScope);\n        }\n    }\n}\n\nexport interface HandlerProxyInterface extends Eventful {\n    handler: Handler\n    dispose: () => void\n    setCursor: (cursorStyle?: string) => void\n}","import env from './core/env';\n\nlet dpr = 1;\n\n// If in browser environment\nif (env.hasGlobalWindow) {\n    dpr = Math.max(\n        window.devicePixelRatio\n        || (window.screen && (window.screen as any).deviceXDPI / (window.screen as any).logicalXDPI)\n        || 1, 1\n    );\n}\n\n/**\n * Debug log mode:\n * 0: Do nothing, for release.\n * 1: console.error, for debug.\n */\nexport const debugMode = 0;\n\n// retina 屏幕优化\nexport const devicePixelRatio = dpr;\n\n\n/**\n * Determine when to turn on dark mode based on the luminance of backgroundColor\n */\nexport const DARK_MODE_THRESHOLD = 0.4;\n\n/**\n * Color of default dark label.\n */\nexport const DARK_LABEL_COLOR = '#333';\n\n/**\n * Color of default light label.\n */\nexport const LIGHT_LABEL_COLOR = '#ccc';\n\n/**\n * Color of default light label.\n */\nexport const LIGHTER_LABEL_COLOR = '#eee';\n","import * as matrix from './matrix';\nimport * as vector from './vector';\n\nconst mIdentity = matrix.identity;\n\nconst EPSILON = 5e-5;\n\nfunction isNotAroundZero(val: number) {\n    return val > EPSILON || val < -EPSILON;\n}\n\nconst scaleTmp: vector.VectorArray = [];\nconst tmpTransform: matrix.MatrixArray = [];\nconst originTransform = matrix.create();\nconst abs = Math.abs;\n\nclass Transformable {\n\n    parent: Transformable\n\n    x: number\n    y: number\n\n    scaleX: number\n    scaleY: number\n\n    skewX: number\n    skewY: number\n\n    rotation: number\n\n    /**\n     * Will translated the element to the anchor position before applying other transforms.\n     */\n    anchorX: number\n    anchorY: number\n    /**\n     * Origin of scale, rotation, skew\n     */\n    originX: number\n    originY: number\n\n    /**\n     * Scale ratio\n     */\n    globalScaleRatio: number\n\n    transform: matrix.MatrixArray\n    invTransform: matrix.MatrixArray\n\n    /**\n     * Get computed local transform\n     */\n    getLocalTransform(m?: matrix.MatrixArray) {\n        return Transformable.getLocalTransform(this, m);\n    }\n\n    /**\n     * Set position from array\n     */\n    setPosition(arr: number[]) {\n        this.x = arr[0];\n        this.y = arr[1];\n    }\n    /**\n     * Set scale from array\n     */\n    setScale(arr: number[]) {\n        this.scaleX = arr[0];\n        this.scaleY = arr[1];\n    }\n\n    /**\n     * Set skew from array\n     */\n    setSkew(arr: number[]) {\n        this.skewX = arr[0];\n        this.skewY = arr[1];\n    }\n\n    /**\n     * Set origin from array\n     */\n    setOrigin(arr: number[]) {\n        this.originX = arr[0];\n        this.originY = arr[1];\n    }\n\n    /**\n     * If needs to compute transform\n     */\n    needLocalTransform(): boolean {\n        return isNotAroundZero(this.rotation)\n            || isNotAroundZero(this.x)\n            || isNotAroundZero(this.y)\n            || isNotAroundZero(this.scaleX - 1)\n            || isNotAroundZero(this.scaleY - 1)\n            || isNotAroundZero(this.skewX)\n            || isNotAroundZero(this.skewY);\n    }\n\n    /**\n     * Update global transform\n     */\n    updateTransform() {\n        const parentTransform = this.parent && this.parent.transform;\n        const needLocalTransform = this.needLocalTransform();\n\n        let m = this.transform;\n        if (!(needLocalTransform || parentTransform)) {\n            if (m) {\n                mIdentity(m);\n                // reset invTransform\n                this.invTransform = null;\n            }\n            return;\n        }\n\n        m = m || matrix.create();\n\n        if (needLocalTransform) {\n            this.getLocalTransform(m);\n        }\n        else {\n            mIdentity(m);\n        }\n\n        // 应用父节点变换\n        if (parentTransform) {\n            if (needLocalTransform) {\n                matrix.mul(m, parentTransform, m);\n            }\n            else {\n                matrix.copy(m, parentTransform);\n            }\n        }\n        // 保存这个变换矩阵\n        this.transform = m;\n\n        this._resolveGlobalScaleRatio(m);\n    }\n\n    private _resolveGlobalScaleRatio(m: matrix.MatrixArray) {\n        const globalScaleRatio = this.globalScaleRatio;\n        if (globalScaleRatio != null && globalScaleRatio !== 1) {\n            this.getGlobalScale(scaleTmp);\n            const relX = scaleTmp[0] < 0 ? -1 : 1;\n            const relY = scaleTmp[1] < 0 ? -1 : 1;\n            const sx = ((scaleTmp[0] - relX) * globalScaleRatio + relX) / scaleTmp[0] || 0;\n            const sy = ((scaleTmp[1] - relY) * globalScaleRatio + relY) / scaleTmp[1] || 0;\n\n            m[0] *= sx;\n            m[1] *= sx;\n            m[2] *= sy;\n            m[3] *= sy;\n        }\n\n        this.invTransform = this.invTransform || matrix.create();\n        matrix.invert(this.invTransform, m);\n    }\n\n    /**\n     * Get computed global transform\n     * NOTE: this method will force update transform on all ancestors.\n     * Please be aware of the potential performance cost.\n     */\n    getComputedTransform() {\n        let transformNode: Transformable = this;\n        const ancestors: Transformable[] = [];\n        while (transformNode) {\n            ancestors.push(transformNode);\n            transformNode = transformNode.parent;\n        }\n\n        // Update from topdown.\n        while (transformNode = ancestors.pop()) {\n            transformNode.updateTransform();\n        }\n\n        return this.transform;\n    }\n\n    setLocalTransform(m: vector.VectorArray) {\n        if (!m) {\n            // TODO return or set identity?\n            return;\n        }\n        let sx = m[0] * m[0] + m[1] * m[1];\n        let sy = m[2] * m[2] + m[3] * m[3];\n\n        const rotation = Math.atan2(m[1], m[0]);\n\n        const shearX = Math.PI / 2 + rotation - Math.atan2(m[3], m[2]);\n        sy = Math.sqrt(sy) * Math.cos(shearX);\n        sx = Math.sqrt(sx);\n\n        this.skewX = shearX;\n        this.skewY = 0;\n        this.rotation = -rotation;\n\n        this.x = +m[4];\n        this.y = +m[5];\n        this.scaleX = sx;\n        this.scaleY = sy;\n\n        this.originX = 0;\n        this.originY = 0;\n    }\n    /**\n     * 分解`transform`矩阵到`position`, `rotation`, `scale`\n     */\n    decomposeTransform() {\n        if (!this.transform) {\n            return;\n        }\n        const parent = this.parent;\n        let m = this.transform;\n        if (parent && parent.transform) {\n            // Get local transform and decompose them to position, scale, rotation\n            parent.invTransform = parent.invTransform || matrix.create();\n            matrix.mul(tmpTransform, parent.invTransform, m);\n            m = tmpTransform;\n        }\n        const ox = this.originX;\n        const oy = this.originY;\n        if (ox || oy) {\n            originTransform[4] = ox;\n            originTransform[5] = oy;\n            matrix.mul(tmpTransform, m, originTransform);\n            tmpTransform[4] -= ox;\n            tmpTransform[5] -= oy;\n            m = tmpTransform;\n        }\n\n        this.setLocalTransform(m);\n    }\n\n    /**\n     * Get global scale\n     */\n    getGlobalScale(out?: vector.VectorArray): vector.VectorArray {\n        const m = this.transform;\n        out = out || [];\n        if (!m) {\n            out[0] = 1;\n            out[1] = 1;\n            return out;\n        }\n        out[0] = Math.sqrt(m[0] * m[0] + m[1] * m[1]);\n        out[1] = Math.sqrt(m[2] * m[2] + m[3] * m[3]);\n        if (m[0] < 0) {\n            out[0] = -out[0];\n        }\n        if (m[3] < 0) {\n            out[1] = -out[1];\n        }\n        return out;\n    }\n    /**\n     * 变换坐标位置到 shape 的局部坐标空间\n     */\n    transformCoordToLocal(x: number, y: number): number[] {\n        const v2 = [x, y];\n        const invTransform = this.invTransform;\n        if (invTransform) {\n            vector.applyTransform(v2, v2, invTransform);\n        }\n        return v2;\n    }\n\n    /**\n     * 变换局部坐标位置到全局坐标空间\n     */\n    transformCoordToGlobal(x: number, y: number): number[] {\n        const v2 = [x, y];\n        const transform = this.transform;\n        if (transform) {\n            vector.applyTransform(v2, v2, transform);\n        }\n        return v2;\n    }\n\n\n    getLineScale() {\n        const m = this.transform;\n        // Get the line scale.\n        // Determinant of `m` means how much the area is enlarged by the\n        // transformation. So its square root can be used as a scale factor\n        // for width.\n        return m && abs(m[0] - 1) > 1e-10 && abs(m[3] - 1) > 1e-10\n            ? Math.sqrt(abs(m[0] * m[3] - m[2] * m[1]))\n            : 1;\n    }\n\n    copyTransform(source: Transformable) {\n        copyTransform(this, source);\n    }\n\n\n    static getLocalTransform(target: Transformable, m?: matrix.MatrixArray): matrix.MatrixArray {\n        m = m || [];\n\n        const ox = target.originX || 0;\n        const oy = target.originY || 0;\n        const sx = target.scaleX;\n        const sy = target.scaleY;\n        const ax = target.anchorX;\n        const ay = target.anchorY;\n        const rotation = target.rotation || 0;\n        const x = target.x;\n        const y = target.y;\n        const skewX = target.skewX ? Math.tan(target.skewX) : 0;\n        // TODO: zrender use different hand in coordinate system and y axis is inversed.\n        const skewY = target.skewY ? Math.tan(-target.skewY) : 0;\n\n        // The order of transform (-anchor * -origin * scale * skew * rotate * origin * translate).\n        // We merge (-origin * scale * skew) into one. Also did identity in these operations.\n        // origin\n        if (ox || oy || ax || ay) {\n            const dx = ox + ax;\n            const dy = oy + ay;\n            m[4] = -dx * sx - skewX * dy * sy;\n            m[5] = -dy * sy - skewY * dx * sx;\n        }\n        else {\n            m[4] = m[5] = 0;\n        }\n        // scale\n        m[0] = sx;\n        m[3] = sy;\n        // skew\n        m[1] = skewY * sx;\n        m[2] = skewX * sy;\n\n        // Apply rotation\n        rotation && matrix.rotate(m, m, rotation);\n\n        // Translate back from origin and apply translation\n        m[4] += ox + x;\n        m[5] += oy + y;\n\n        return m;\n    }\n\n    private static initDefaultProps = (function () {\n        const proto = Transformable.prototype;\n        proto.scaleX =\n        proto.scaleY =\n        proto.globalScaleRatio = 1;\n        proto.x =\n        proto.y =\n        proto.originX =\n        proto.originY =\n        proto.skewX =\n        proto.skewY =\n        proto.rotation =\n        proto.anchorX =\n        proto.anchorY = 0;\n    })()\n};\n\nexport const TRANSFORMABLE_PROPS = [\n    'x', 'y', 'originX', 'originY', 'anchorX', 'anchorY', 'rotation', 'scaleX', 'scaleY', 'skewX', 'skewY'\n] as const;\n\nexport type TransformProp = (typeof TRANSFORMABLE_PROPS)[number]\n\nexport function copyTransform(\n    target: Partial>,\n    source: Pick\n) {\n    for (let i = 0; i < TRANSFORMABLE_PROPS.length; i++) {\n        const propName = TRANSFORMABLE_PROPS[i];\n        target[propName] = source[propName];\n    }\n}\n\nexport default Transformable;","import BoundingRect, { RectLike } from '../core/BoundingRect';\r\nimport { Dictionary, TextAlign, TextVerticalAlign, BuiltinTextPosition } from '../core/types';\r\nimport LRU from '../core/LRU';\r\nimport { DEFAULT_FONT, platformApi } from '../core/platform';\r\n\r\nlet textWidthCache: Dictionary> = {};\r\n\r\nexport function getWidth(text: string, font: string): number {\r\n    font = font || DEFAULT_FONT;\r\n    let cacheOfFont = textWidthCache[font];\r\n    if (!cacheOfFont) {\r\n        cacheOfFont = textWidthCache[font] = new LRU(500);\r\n    }\r\n    let width = cacheOfFont.get(text);\r\n    if (width == null) {\r\n        width = platformApi.measureText(text, font).width;\r\n        cacheOfFont.put(text, width);\r\n    }\r\n\r\n    return width;\r\n}\r\n\r\n/**\r\n *\r\n * Get bounding rect for inner usage(TSpan)\r\n * Which not include text newline.\r\n */\r\nexport function innerGetBoundingRect(\r\n    text: string,\r\n    font: string,\r\n    textAlign?: TextAlign,\r\n    textBaseline?: TextVerticalAlign\r\n): BoundingRect {\r\n    const width = getWidth(text, font);\r\n    const height = getLineHeight(font);\r\n\r\n    const x = adjustTextX(0, width, textAlign);\r\n    const y = adjustTextY(0, height, textBaseline);\r\n\r\n    const rect = new BoundingRect(x, y, width, height);\r\n\r\n    return rect;\r\n}\r\n\r\n/**\r\n *\r\n * Get bounding rect for outer usage. Compatitable with old implementation\r\n * Which includes text newline.\r\n */\r\nexport function getBoundingRect(\r\n    text: string,\r\n    font: string,\r\n    textAlign?: TextAlign,\r\n    textBaseline?: TextVerticalAlign\r\n) {\r\n    const textLines = ((text || '') + '').split('\\n');\r\n    const len = textLines.length;\r\n    if (len === 1) {\r\n        return innerGetBoundingRect(textLines[0], font, textAlign, textBaseline);\r\n    }\r\n    else {\r\n        const uniondRect = new BoundingRect(0, 0, 0, 0);\r\n        for (let i = 0; i < textLines.length; i++) {\r\n            const rect = innerGetBoundingRect(textLines[i], font, textAlign, textBaseline);\r\n            i === 0 ? uniondRect.copy(rect) : uniondRect.union(rect);\r\n        }\r\n        return uniondRect;\r\n    }\r\n}\r\n\r\nexport function adjustTextX(x: number, width: number, textAlign: TextAlign): number {\r\n    // TODO Right to left language\r\n    if (textAlign === 'right') {\r\n        x -= width;\r\n    }\r\n    else if (textAlign === 'center') {\r\n        x -= width / 2;\r\n    }\r\n    return x;\r\n}\r\n\r\nexport function adjustTextY(y: number, height: number, verticalAlign: TextVerticalAlign): number {\r\n    if (verticalAlign === 'middle') {\r\n        y -= height / 2;\r\n    }\r\n    else if (verticalAlign === 'bottom') {\r\n        y -= height;\r\n    }\r\n    return y;\r\n}\r\n\r\n\r\nexport function getLineHeight(font?: string): number {\r\n    // FIXME A rough approach.\r\n    return getWidth('国', font);\r\n}\r\n\r\nexport function measureText(text: string, font?: string): {\r\n    width: number\r\n} {\r\n    return platformApi.measureText(text, font);\r\n}\r\n\r\n\r\nexport function parsePercent(value: number | string, maxValue: number): number {\r\n    if (typeof value === 'string') {\r\n        if (value.lastIndexOf('%') >= 0) {\r\n            return parseFloat(value) / 100 * maxValue;\r\n        }\r\n        return parseFloat(value);\r\n    }\r\n    return value;\r\n}\r\n\r\nexport interface TextPositionCalculationResult {\r\n    x: number\r\n    y: number\r\n    align: TextAlign\r\n    verticalAlign: TextVerticalAlign\r\n}\r\n/**\r\n * Follow same interface to `Displayable.prototype.calculateTextPosition`.\r\n * @public\r\n * @param out Prepared out object. If not input, auto created in the method.\r\n * @param style where `textPosition` and `textDistance` are visited.\r\n * @param rect {x, y, width, height} Rect of the host elment, according to which the text positioned.\r\n * @return The input `out`. Set: {x, y, textAlign, textVerticalAlign}\r\n */\r\nexport function calculateTextPosition(\r\n    out: TextPositionCalculationResult,\r\n    opts: {\r\n        position?: BuiltinTextPosition | (number | string)[]\r\n        distance?: number   // Default 5\r\n        global?: boolean\r\n    },\r\n    rect: RectLike\r\n): TextPositionCalculationResult {\r\n    const textPosition = opts.position || 'inside';\r\n    const distance = opts.distance != null ? opts.distance : 5;\r\n\r\n    const height = rect.height;\r\n    const width = rect.width;\r\n    const halfHeight = height / 2;\r\n\r\n    let x = rect.x;\r\n    let y = rect.y;\r\n\r\n    let textAlign: TextAlign = 'left';\r\n    let textVerticalAlign: TextVerticalAlign = 'top';\r\n\r\n    if (textPosition instanceof Array) {\r\n        x += parsePercent(textPosition[0], rect.width);\r\n        y += parsePercent(textPosition[1], rect.height);\r\n        // Not use textAlign / textVerticalAlign\r\n        textAlign = null;\r\n        textVerticalAlign = null;\r\n    }\r\n    else {\r\n        switch (textPosition) {\r\n            case 'left':\r\n                x -= distance;\r\n                y += halfHeight;\r\n                textAlign = 'right';\r\n                textVerticalAlign = 'middle';\r\n                break;\r\n            case 'right':\r\n                x += distance + width;\r\n                y += halfHeight;\r\n                textVerticalAlign = 'middle';\r\n                break;\r\n            case 'top':\r\n                x += width / 2;\r\n                y -= distance;\r\n                textAlign = 'center';\r\n                textVerticalAlign = 'bottom';\r\n                break;\r\n            case 'bottom':\r\n                x += width / 2;\r\n                y += height + distance;\r\n                textAlign = 'center';\r\n                break;\r\n            case 'inside':\r\n                x += width / 2;\r\n                y += halfHeight;\r\n                textAlign = 'center';\r\n                textVerticalAlign = 'middle';\r\n                break;\r\n            case 'insideLeft':\r\n                x += distance;\r\n                y += halfHeight;\r\n                textVerticalAlign = 'middle';\r\n                break;\r\n            case 'insideRight':\r\n                x += width - distance;\r\n                y += halfHeight;\r\n                textAlign = 'right';\r\n                textVerticalAlign = 'middle';\r\n                break;\r\n            case 'insideTop':\r\n                x += width / 2;\r\n                y += distance;\r\n                textAlign = 'center';\r\n                break;\r\n            case 'insideBottom':\r\n                x += width / 2;\r\n                y += height - distance;\r\n                textAlign = 'center';\r\n                textVerticalAlign = 'bottom';\r\n                break;\r\n            case 'insideTopLeft':\r\n                x += distance;\r\n                y += distance;\r\n                break;\r\n            case 'insideTopRight':\r\n                x += width - distance;\r\n                y += distance;\r\n                textAlign = 'right';\r\n                break;\r\n            case 'insideBottomLeft':\r\n                x += distance;\r\n                y += height - distance;\r\n                textVerticalAlign = 'bottom';\r\n                break;\r\n            case 'insideBottomRight':\r\n                x += width - distance;\r\n                y += height - distance;\r\n                textAlign = 'right';\r\n                textVerticalAlign = 'bottom';\r\n                break;\r\n        }\r\n    }\r\n\r\n    out = out || {} as TextPositionCalculationResult;\r\n    out.x = x;\r\n    out.y = y;\r\n    out.align = textAlign;\r\n    out.verticalAlign = textVerticalAlign;\r\n\r\n    return out;\r\n}\r\n","import Transformable, {TRANSFORMABLE_PROPS, TransformProp} from './core/Transformable';\nimport { AnimationEasing } from './animation/easing';\nimport Animator, {cloneValue} from './animation/Animator';\nimport { ZRenderType } from './zrender';\nimport {\n    Dictionary, ElementEventName, ZRRawEvent, BuiltinTextPosition, AllPropTypes,\n    TextVerticalAlign, TextAlign, MapToType\n} from './core/types';\nimport Path from './graphic/Path';\nimport BoundingRect, { RectLike } from './core/BoundingRect';\nimport Eventful from './core/Eventful';\nimport ZRText, { DefaultTextStyle } from './graphic/Text';\nimport { calculateTextPosition, TextPositionCalculationResult, parsePercent } from './contain/text';\nimport {\n    guid,\n    isObject,\n    keys,\n    extend,\n    indexOf,\n    logError,\n    mixin,\n    isArrayLike,\n    isTypedArray,\n    isGradientObject,\n    filter,\n    reduce\n} from './core/util';\nimport Polyline from './graphic/shape/Polyline';\nimport Group from './graphic/Group';\nimport Point from './core/Point';\nimport { LIGHT_LABEL_COLOR, DARK_LABEL_COLOR } from './config';\nimport { parse, stringify } from './tool/color';\nimport { REDRAW_BIT } from './graphic/constants';\n\nexport interface ElementAnimateConfig {\n    duration?: number\n    delay?: number\n    easing?: AnimationEasing\n    during?: (percent: number) => void\n\n    // `done` will be called when all of the animations of the target props are\n    // \"done\" or \"aborted\", and at least one \"done\" happened.\n    // Common cases: animations declared, but some of them are aborted (e.g., by state change).\n    // The calling of `animationTo` done rather than aborted if at least one done happened.\n    done?: Function\n    // `aborted` will be called when all of the animations of the target props are \"aborted\".\n    aborted?: Function\n\n    scope?: string\n    /**\n     * If force animate\n     * Prevent stop animation and callback\n     * immediently when target values are the same as current values.\n     */\n    force?: boolean\n    /**\n     * If use additive animation.\n     */\n    additive?: boolean\n    /**\n     * If set to final state before animation started.\n     * It can be useful if something you want to calcuate depends on the final state of element.\n     * Like bounding rect for text layouting.\n     *\n     * Only available in animateTo\n     */\n    setToFinal?: boolean\n}\n\nexport interface ElementTextConfig {\n    /**\n     * Position relative to the element bounding rect\n     * @default 'inside'\n     */\n    position?: BuiltinTextPosition | (number | string)[]\n\n    /**\n     * Rotation of the label.\n     */\n    rotation?: number\n\n    /**\n     * Rect that text will be positioned.\n     * Default to be the rect of element.\n     */\n    layoutRect?: RectLike\n\n    /**\n     * Offset of the label.\n     * The difference of offset and position is that it will be applied\n     * in the rotation\n     */\n    offset?: number[]\n\n    /**\n     * Origin or rotation. Which is relative to the bounding box of the attached element.\n     * Can be percent value. Relative to the bounding box.\n     * If specified center. It will be center of the bounding box.\n     *\n     * Only available when position and rotation are both set.\n     */\n    origin?: (number | string)[] | 'center'\n\n    /**\n     * Distance to the rect\n     * @default 5\n     */\n    distance?: number\n\n    /**\n     * If use local user space. Which will apply host's transform\n     * @default false\n     */\n    local?: boolean\n\n    /**\n     * `insideFill` is a color string or left empty.\n     * If a `textContent` is \"inside\", its final `fill` will be picked by this priority:\n     * `textContent.style.fill` > `textConfig.insideFill` > \"auto-calculated-fill\"\n     * In most cases, \"auto-calculated-fill\" is white.\n     */\n    insideFill?: string\n\n    /**\n     * `insideStroke` is a color string or left empty.\n     * If a `textContent` is \"inside\", its final `stroke` will be picked by this priority:\n     * `textContent.style.stroke` > `textConfig.insideStroke` > \"auto-calculated-stroke\"\n     *\n     * The rule of getting \"auto-calculated-stroke\":\n     * If (A) the `fill` is specified in style (either in `textContent.style` or `textContent.style.rich`)\n     * or (B) needed to draw text background (either defined in `textContent.style` or `textContent.style.rich`)\n     * \"auto-calculated-stroke\" will be null.\n     * Otherwise, \"auto-calculated-stroke\" will be the same as `fill` of this element if possible, or null.\n     *\n     * The reason of (A) is not decisive:\n     * 1. If users specify `fill` in style and still use \"auto-calculated-stroke\", the effect\n     * is not good and unexpected in some cases. It not easy and seams uncessary to auto calculate\n     * a proper `stroke` for the given `fill`, since they can specify `stroke` themselve.\n     * 2. Backward compat.\n     */\n    insideStroke?: string\n\n    /**\n     * `outsideFill` is a color string or left empty.\n     * If a `textContent` is \"inside\", its final `fill` will be picked by this priority:\n     * `textContent.style.fill` > `textConfig.outsideFill` > #000\n     */\n    outsideFill?: string\n\n    /**\n     * `outsideStroke` is a color string or left empth.\n     * If a `textContent` is not \"inside\", its final `stroke` will be picked by this priority:\n     * `textContent.style.stroke` > `textConfig.outsideStroke` > \"auto-calculated-stroke\"\n     *\n     * The rule of getting \"auto-calculated-stroke\":\n     * If (A) the `fill` is specified in style (either in `textContent.style` or `textContent.style.rich`)\n     * or (B) needed to draw text background (either defined in `textContent.style` or `textContent.style.rich`)\n     * \"auto-calculated-stroke\" will be null.\n     * Otherwise, \"auto-calculated-stroke\" will be a neer white color to distinguish \"front end\"\n     * label with messy background (like other text label, line or other graphic).\n     */\n    outsideStroke?: string\n\n    /**\n     * Tell zrender I can sure this text is inside or not.\n     * In case position is not using builtin `inside` hints.\n     */\n    inside?: boolean\n}\nexport interface ElementTextGuideLineConfig {\n    /**\n     * Anchor for text guide line.\n     * Notice: Won't work\n     */\n    anchor?: Point\n\n    /**\n     * If above the target element.\n     */\n    showAbove?: boolean\n\n    /**\n     * Candidates of connectors. Used when autoCalculate is true and anchor is not specified.\n     */\n    candidates?: ('left' | 'top' | 'right' | 'bottom')[]\n}\n\nexport interface ElementEvent {\n    type: ElementEventName,\n    event: ZRRawEvent,\n    // target can only be an element that is not silent.\n    target: Element,\n    // topTarget can be a silent element.\n    topTarget: Element,\n    cancelBubble: boolean,\n    offsetX: number,\n    offsetY: number,\n    gestureEvent: string,\n    pinchX: number,\n    pinchY: number,\n    pinchScale: number,\n    wheelDelta: number,\n    zrByTouch: boolean,\n    which: number,\n    stop: (this: ElementEvent) => void\n}\n\nexport type ElementEventCallback = (\n    this: CbThis, e: ElementEvent\n) => boolean | void\ntype CbThis = unknown extends Ctx ? Impl : Ctx;\n\ninterface ElementEventHandlerProps {\n    // Events\n    onclick: ElementEventCallback\n    ondblclick: ElementEventCallback\n    onmouseover: ElementEventCallback\n    onmouseout: ElementEventCallback\n    onmousemove: ElementEventCallback\n    onmousewheel: ElementEventCallback\n    onmousedown: ElementEventCallback\n    onmouseup: ElementEventCallback\n    oncontextmenu: ElementEventCallback\n\n    ondrag: ElementEventCallback\n    ondragstart: ElementEventCallback\n    ondragend: ElementEventCallback\n    ondragenter: ElementEventCallback\n    ondragleave: ElementEventCallback\n    ondragover: ElementEventCallback\n    ondrop: ElementEventCallback\n}\n\nexport interface ElementProps extends Partial, Partial> {\n    name?: string\n    ignore?: boolean\n    isGroup?: boolean\n    draggable?: boolean | 'horizontal' | 'vertical'\n\n    silent?: boolean\n\n    ignoreClip?: boolean\n    globalScaleRatio?: number\n\n    textConfig?: ElementTextConfig\n    textContent?: ZRText\n\n    clipPath?: Path\n    drift?: Element['drift']\n\n    extra?: Dictionary\n\n    // For echarts animation.\n    anid?: string\n}\n\n// Properties can be used in state.\nexport const PRESERVED_NORMAL_STATE = '__zr_normal__';\n// export const PRESERVED_MERGED_STATE = '__zr_merged__';\n\nconst PRIMARY_STATES_KEYS = (TRANSFORMABLE_PROPS as any).concat(['ignore']) as [TransformProp, 'ignore'];\nconst DEFAULT_ANIMATABLE_MAP = reduce(TRANSFORMABLE_PROPS, (obj, key) => {\n    obj[key] = true;\n    return obj;\n}, {ignore: false} as Partial>);\n\nexport type ElementStatePropNames = (typeof PRIMARY_STATES_KEYS)[number] | 'textConfig';\nexport type ElementState = Pick & ElementCommonState\n\nexport type ElementCommonState = {\n    hoverLayer?: boolean\n}\n\nexport type ElementCalculateTextPosition = (\n    out: TextPositionCalculationResult,\n    style: ElementTextConfig,\n    rect: RectLike\n) => TextPositionCalculationResult;\n\nlet tmpTextPosCalcRes = {} as TextPositionCalculationResult;\nlet tmpBoundingRect = new BoundingRect(0, 0, 0, 0);\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ninterface Element extends Transformable,\n    Eventful<{\n        [key in ElementEventName]: (e: ElementEvent) => void | boolean\n    } & {\n        [key in string]: (...args: any) => void | boolean\n    }>,\n    ElementEventHandlerProps {\n}\n\nclass Element {\n\n    id: number = guid()\n    /**\n     * Element type\n     */\n    type: string\n\n    /**\n     * Element name\n     */\n    name: string\n\n    /**\n     * If ignore drawing and events of the element object\n     */\n    ignore: boolean\n\n    /**\n     * Whether to respond to mouse events.\n     */\n    silent: boolean\n\n    /**\n     * 是否是 Group\n     */\n    isGroup: boolean\n\n    /**\n     * Whether it can be dragged.\n     */\n    draggable: boolean | 'horizontal' | 'vertical'\n\n    /**\n     * Whether is it dragging.\n     */\n    dragging: boolean\n\n    parent: Group\n\n    animators: Animator[] = []\n\n    /**\n     * If ignore clip from it's parent or hosts.\n     * Applied on itself and all it's children.\n     *\n     * NOTE: It won't affect the clipPath set on the children.\n     */\n    ignoreClip: boolean\n\n    /**\n     * If element is used as a component of other element.\n     */\n    __hostTarget: Element\n\n    /**\n     * ZRender instance will be assigned when element is associated with zrender\n     */\n    __zr: ZRenderType\n\n    /**\n     * Dirty bits.\n     * From which painter will determine if this displayable object needs brush.\n     */\n    __dirty: number\n\n    /**\n     * If element was painted on the screen\n     */\n    __isRendered: boolean;\n\n    /**\n     * If element has been moved to the hover layer.\n     *\n     * If so, dirty will only trigger the zrender refresh hover layer\n     */\n    __inHover: boolean\n\n    /**\n     * path to clip the elements and its children, if it is a group.\n     * @see http://www.w3.org/TR/2dcontext/#clipping-region\n     */\n    private _clipPath?: Path\n\n    /**\n     * Attached text element.\n     * `position`, `style.textAlign`, `style.textVerticalAlign`\n     * of element will be ignored if textContent.position is set\n     */\n    private _textContent?: ZRText\n\n    /**\n     * Text guide line.\n     */\n    private _textGuide?: Polyline\n\n    /**\n     * Config of textContent. Inlcuding layout, color, ...etc.\n     */\n    textConfig?: ElementTextConfig\n\n    /**\n     * Config for guide line calculating.\n     *\n     * NOTE: This is just a property signature. READ and WRITE are all done in echarts.\n     */\n    textGuideLineConfig?: ElementTextGuideLineConfig\n\n    // FOR ECHARTS\n    /**\n     * Id for mapping animation\n     */\n    anid: string\n\n    extra: Dictionary\n\n    currentStates?: string[] = []\n    // prevStates is for storager in echarts.\n    prevStates?: string[]\n    /**\n     * Store of element state.\n     * '__normal__' key is preserved for default properties.\n     */\n    states: Dictionary = {}\n\n    /**\n     * Animation config applied on state switching.\n     */\n    stateTransition: ElementAnimateConfig\n\n    /**\n     * Proxy function for getting state with given stateName.\n     * ZRender will first try to get with stateProxy. Then find from states if stateProxy returns nothing\n     *\n     * targetStates will be given in useStates\n     */\n    stateProxy?: (stateName: string, targetStates?: string[]) => ElementState\n\n    protected _normalState: ElementState\n\n    // Temporary storage for inside text color configuration.\n    private _innerTextDefaultStyle: DefaultTextStyle\n\n    constructor(props?: Props) {\n        this._init(props);\n    }\n\n    protected _init(props?: Props) {\n        // Init default properties\n        this.attr(props);\n    }\n\n    /**\n     * Drift element\n     * @param {number} dx dx on the global space\n     * @param {number} dy dy on the global space\n     */\n    drift(dx: number, dy: number, e?: ElementEvent) {\n        switch (this.draggable) {\n            case 'horizontal':\n                dy = 0;\n                break;\n            case 'vertical':\n                dx = 0;\n                break;\n        }\n\n        let m = this.transform;\n        if (!m) {\n            m = this.transform = [1, 0, 0, 1, 0, 0];\n        }\n        m[4] += dx;\n        m[5] += dy;\n\n        this.decomposeTransform();\n        this.markRedraw();\n    }\n\n    /**\n     * Hook before update\n     */\n    beforeUpdate() {}\n    /**\n     * Hook after update\n     */\n    afterUpdate() {}\n    /**\n     * Update each frame\n     */\n    update() {\n        this.updateTransform();\n\n        if (this.__dirty) {\n            this.updateInnerText();\n        }\n    }\n\n    updateInnerText(forceUpdate?: boolean) {\n        // Update textContent\n        const textEl = this._textContent;\n        if (textEl && (!textEl.ignore || forceUpdate)) {\n            if (!this.textConfig) {\n                this.textConfig = {};\n            }\n            const textConfig = this.textConfig;\n            const isLocal = textConfig.local;\n            const innerTransformable = textEl.innerTransformable;\n\n            let textAlign: TextAlign;\n            let textVerticalAlign: TextVerticalAlign;\n\n            let textStyleChanged = false;\n\n            // Apply host's transform.\n            innerTransformable.parent = isLocal ? this as unknown as Group : null;\n\n            let innerOrigin = false;\n\n            // Reset x/y/rotation\n            innerTransformable.copyTransform(textEl);\n\n            // Force set attached text's position if `position` is in config.\n            if (textConfig.position != null) {\n                let layoutRect = tmpBoundingRect;\n                if (textConfig.layoutRect) {\n                    layoutRect.copy(textConfig.layoutRect);\n                }\n                else {\n                    layoutRect.copy(this.getBoundingRect());\n                }\n                if (!isLocal) {\n                    layoutRect.applyTransform(this.transform);\n                }\n\n                if (this.calculateTextPosition) {\n                    this.calculateTextPosition(tmpTextPosCalcRes, textConfig, layoutRect);\n                }\n                else {\n                    calculateTextPosition(tmpTextPosCalcRes, textConfig, layoutRect);\n                }\n\n                // TODO Should modify back if textConfig.position is set to null again.\n                // Or textContent is detached.\n                innerTransformable.x = tmpTextPosCalcRes.x;\n                innerTransformable.y = tmpTextPosCalcRes.y;\n\n                // User specified align/verticalAlign has higher priority, which is\n                // useful in the case that attached text is rotated 90 degree.\n                textAlign = tmpTextPosCalcRes.align;\n                textVerticalAlign = tmpTextPosCalcRes.verticalAlign;\n\n                const textOrigin = textConfig.origin;\n                if (textOrigin && textConfig.rotation != null) {\n                    let relOriginX;\n                    let relOriginY;\n                    if (textOrigin === 'center') {\n                        relOriginX = layoutRect.width * 0.5;\n                        relOriginY = layoutRect.height * 0.5;\n                    }\n                    else {\n                        relOriginX = parsePercent(textOrigin[0], layoutRect.width);\n                        relOriginY = parsePercent(textOrigin[1], layoutRect.height);\n                    }\n\n                    innerOrigin = true;\n                    innerTransformable.originX = -innerTransformable.x + relOriginX + (isLocal ? 0 : layoutRect.x);\n                    innerTransformable.originY = -innerTransformable.y + relOriginY + (isLocal ? 0 : layoutRect.y);\n                }\n            }\n\n\n            if (textConfig.rotation != null) {\n                innerTransformable.rotation = textConfig.rotation;\n            }\n\n            // TODO\n            const textOffset = textConfig.offset;\n            if (textOffset) {\n                innerTransformable.x += textOffset[0];\n                innerTransformable.y += textOffset[1];\n\n                // Not change the user set origin.\n                if (!innerOrigin) {\n                    innerTransformable.originX = -textOffset[0];\n                    innerTransformable.originY = -textOffset[1];\n                }\n            }\n\n            // Calculate text color\n            const isInside = textConfig.inside == null  // Force to be inside or not.\n                ? (typeof textConfig.position === 'string' && textConfig.position.indexOf('inside') >= 0)\n                : textConfig.inside;\n            const innerTextDefaultStyle = this._innerTextDefaultStyle || (this._innerTextDefaultStyle = {});\n\n            let textFill;\n            let textStroke;\n            let autoStroke;\n            if (isInside && this.canBeInsideText()) {\n                // In most cases `textContent` need this \"auto\" strategy.\n                // So by default be 'auto'. Otherwise users need to literally\n                // set `insideFill: 'auto', insideStroke: 'auto'` each time.\n                textFill = textConfig.insideFill;\n                textStroke = textConfig.insideStroke;\n\n                if (textFill == null || textFill === 'auto') {\n                    textFill = this.getInsideTextFill();\n                }\n                if (textStroke == null || textStroke === 'auto') {\n                    textStroke = this.getInsideTextStroke(textFill);\n                    autoStroke = true;\n                }\n            }\n            else {\n                textFill = textConfig.outsideFill;\n                textStroke = textConfig.outsideStroke;\n\n                if (textFill == null || textFill === 'auto') {\n                    textFill = this.getOutsideFill();\n                }\n                // By default give a stroke to distinguish \"front end\" label with\n                // messy background (like other text label, line or other graphic).\n                // If textContent.style.fill specified, this auto stroke will not be used.\n                if (textStroke == null || textStroke === 'auto') {\n                    // If some time need to customize the default stroke getter,\n                    // add some kind of override method.\n                    textStroke = this.getOutsideStroke(textFill);\n                    autoStroke = true;\n                }\n            }\n            // Default `textFill` should must have a value to ensure text can be displayed.\n            textFill = textFill || '#000';\n\n            if (textFill !== innerTextDefaultStyle.fill\n                || textStroke !== innerTextDefaultStyle.stroke\n                || autoStroke !== innerTextDefaultStyle.autoStroke\n                || textAlign !== innerTextDefaultStyle.align\n                || textVerticalAlign !== innerTextDefaultStyle.verticalAlign\n            ) {\n\n                textStyleChanged = true;\n\n                innerTextDefaultStyle.fill = textFill;\n                innerTextDefaultStyle.stroke = textStroke;\n                innerTextDefaultStyle.autoStroke = autoStroke;\n                innerTextDefaultStyle.align = textAlign;\n                innerTextDefaultStyle.verticalAlign = textVerticalAlign;\n\n                textEl.setDefaultTextStyle(innerTextDefaultStyle);\n            }\n\n            // Mark textEl to update transform.\n            // DON'T use markRedraw. It will cause Element itself to dirty again.\n            textEl.__dirty |= REDRAW_BIT;\n\n            if (textStyleChanged) {\n                // Only mark style dirty if necessary. Update ZRText is costly.\n                textEl.dirtyStyle(true);\n            }\n        }\n    }\n\n    protected canBeInsideText() {\n        return true;\n    }\n\n    protected getInsideTextFill(): string | undefined {\n        return '#fff';\n    }\n\n    protected getInsideTextStroke(textFill: string): string | undefined {\n        return '#000';\n    }\n\n    protected getOutsideFill(): string | undefined {\n        return this.__zr && this.__zr.isDarkMode() ? LIGHT_LABEL_COLOR : DARK_LABEL_COLOR;\n    }\n\n    protected getOutsideStroke(textFill: string): string {\n        const backgroundColor = this.__zr && this.__zr.getBackgroundColor();\n        let colorArr = typeof backgroundColor === 'string' && parse(backgroundColor as string);\n        if (!colorArr) {\n            colorArr = [255, 255, 255, 1];\n        }\n        // Assume blending on a white / black(dark) background.\n        const alpha = colorArr[3];\n        const isDark = this.__zr.isDarkMode();\n        for (let i = 0; i < 3; i++) {\n            colorArr[i] = colorArr[i] * alpha + (isDark ? 0 : 255) * (1 - alpha);\n        }\n        colorArr[3] = 1;\n        return stringify(colorArr, 'rgba');\n    }\n\n    traverse(\n        cb: (this: Context, el: Element) => void,\n        context?: Context\n    ) {}\n\n    protected attrKV(key: string, value: unknown) {\n        if (key === 'textConfig') {\n            this.setTextConfig(value as ElementTextConfig);\n        }\n        else if (key === 'textContent') {\n            this.setTextContent(value as ZRText);\n        }\n        else if (key === 'clipPath') {\n            this.setClipPath(value as Path);\n        }\n        else if (key === 'extra') {\n            this.extra = this.extra || {};\n            extend(this.extra, value);\n        }\n        else {\n            (this as any)[key] = value;\n        }\n    }\n\n    /**\n     * Hide the element\n     */\n    hide() {\n        this.ignore = true;\n        this.markRedraw();\n    }\n\n    /**\n     * Show the element\n     */\n    show() {\n        this.ignore = false;\n        this.markRedraw();\n    }\n\n    attr(keyOrObj: Props): this\n    attr(keyOrObj: T, value: Props[T]): this\n    attr(keyOrObj: keyof Props | Props, value?: unknown): this {\n        if (typeof keyOrObj === 'string') {\n            this.attrKV(keyOrObj as keyof ElementProps, value as AllPropTypes);\n        }\n        else if (isObject(keyOrObj)) {\n            let obj = keyOrObj as object;\n            let keysArr = keys(obj);\n            for (let i = 0; i < keysArr.length; i++) {\n                let key = keysArr[i];\n                this.attrKV(key as keyof ElementProps, keyOrObj[key]);\n            }\n        }\n        this.markRedraw();\n        return this;\n    }\n\n    // Save current state to normal\n    saveCurrentToNormalState(toState: ElementState) {\n        this._innerSaveToNormal(toState);\n\n        // If we are switching from normal to other state during animation.\n        // We need to save final value of animation to the normal state. Not interpolated value.\n        const normalState = this._normalState;\n        for (let i = 0; i < this.animators.length; i++) {\n            const animator = this.animators[i];\n            const fromStateTransition = animator.__fromStateTransition;\n            // Ignore animation from state transition(except normal).\n            // Ignore loop animation.\n            if (animator.getLoop() || fromStateTransition && fromStateTransition !== PRESERVED_NORMAL_STATE) {\n                continue;\n            }\n\n            const targetName = animator.targetName;\n            // Respecting the order of animation if multiple animator is\n            // animating on the same property(If additive animation is used)\n            const target = targetName\n                ? (normalState as any)[targetName] : normalState;\n            // Only save keys that are changed by the states.\n            animator.saveTo(target);\n        }\n    }\n\n    protected _innerSaveToNormal(toState: ElementState) {\n        let normalState = this._normalState;\n        if (!normalState) {\n            // Clear previous stored normal states when switching from normalState to otherState.\n            normalState = this._normalState = {};\n        }\n        if (toState.textConfig && !normalState.textConfig) {\n            normalState.textConfig = this.textConfig;\n        }\n\n        this._savePrimaryToNormal(toState, normalState, PRIMARY_STATES_KEYS);\n    }\n\n    protected _savePrimaryToNormal(\n        toState: Dictionary, normalState: Dictionary, primaryKeys: readonly string[]\n    ) {\n        for (let i = 0; i < primaryKeys.length; i++) {\n            let key = primaryKeys[i];\n            // Only save property that will be changed by toState\n            // and has not been saved to normalState yet.\n            if (toState[key] != null && !(key in normalState)) {\n                (normalState as any)[key] = (this as any)[key];\n            }\n        }\n    }\n\n    /**\n     * If has any state.\n     */\n    hasState() {\n        return this.currentStates.length > 0;\n    }\n\n    /**\n     * Get state object\n     */\n    getState(name: string) {\n        return this.states[name];\n    }\n\n\n    /**\n     * Ensure state exists. If not, will create one and return.\n     */\n    ensureState(name: string) {\n        const states = this.states;\n        if (!states[name]) {\n            states[name] = {};\n        }\n        return states[name];\n    }\n\n    /**\n     * Clear all states.\n     */\n    clearStates(noAnimation?: boolean) {\n        this.useState(PRESERVED_NORMAL_STATE, false, noAnimation);\n        // TODO set _normalState to null?\n    }\n    /**\n     * Use state. State is a collection of properties.\n     * Will return current state object if state exists and stateName has been changed.\n     *\n     * @param stateName State name to be switched to\n     * @param keepCurrentState If keep current states.\n     *      If not, it will inherit from the normal state.\n     */\n    useState(stateName: string, keepCurrentStates?: boolean, noAnimation?: boolean, forceUseHoverLayer?: boolean) {\n        // Use preserved word __normal__\n        // TODO: Only restore changed properties when restore to normal???\n        const toNormalState = stateName === PRESERVED_NORMAL_STATE;\n        const hasStates = this.hasState();\n\n        if (!hasStates && toNormalState) {\n            // If switched from normal to normal.\n            return;\n        }\n\n        const currentStates = this.currentStates;\n        const animationCfg = this.stateTransition;\n\n        // No need to change in following cases:\n        // 1. Keep current states. and already being applied before.\n        // 2. Don't keep current states. And new state is same with the only one exists state.\n        if (indexOf(currentStates, stateName) >= 0 && (keepCurrentStates || currentStates.length === 1)) {\n            return;\n        }\n\n        let state;\n        if (this.stateProxy && !toNormalState) {\n            state = this.stateProxy(stateName);\n        }\n\n        if (!state) {\n            state = (this.states && this.states[stateName]);\n        }\n\n        if (!state && !toNormalState) {\n            logError(`State ${stateName} not exists.`);\n            return;\n        }\n\n        if (!toNormalState) {\n            this.saveCurrentToNormalState(state);\n        }\n\n        const useHoverLayer = !!((state && state.hoverLayer) || forceUseHoverLayer);\n\n        if (useHoverLayer) {\n            // Enter hover layer before states update.\n            this._toggleHoverLayerFlag(true);\n        }\n\n        this._applyStateObj(\n            stateName,\n            state,\n            this._normalState,\n            keepCurrentStates,\n            !noAnimation && !this.__inHover && animationCfg && animationCfg.duration > 0,\n            animationCfg\n        );\n\n        // Also set text content.\n        const textContent = this._textContent;\n        const textGuide = this._textGuide;\n        if (textContent) {\n            // Force textContent use hover layer if self is using it.\n            textContent.useState(stateName, keepCurrentStates, noAnimation, useHoverLayer);\n        }\n        if (textGuide) {\n            textGuide.useState(stateName, keepCurrentStates, noAnimation, useHoverLayer);\n        }\n\n        if (toNormalState) {\n            // Clear state\n            this.currentStates = [];\n            // Reset normal state.\n            this._normalState = {};\n        }\n        else {\n            if (!keepCurrentStates) {\n                this.currentStates = [stateName];\n            }\n            else {\n                this.currentStates.push(stateName);\n            }\n        }\n\n        // Update animating target to the new object after state changed.\n        this._updateAnimationTargets();\n\n        this.markRedraw();\n\n        if (!useHoverLayer && this.__inHover) {\n            // Leave hover layer after states update and markRedraw.\n            this._toggleHoverLayerFlag(false);\n            // NOTE: avoid unexpected refresh when moving out from hover layer!!\n            // Only clear from hover layer.\n            this.__dirty &= ~REDRAW_BIT;\n        }\n\n        // Return used state.\n        return state;\n    }\n\n    /**\n     * Apply multiple states.\n     * @param states States list.\n     */\n    useStates(states: string[], noAnimation?: boolean, forceUseHoverLayer?: boolean) {\n        if (!states.length) {\n            this.clearStates();\n        }\n        else {\n            const stateObjects: ElementState[] = [];\n            const currentStates = this.currentStates;\n            const len = states.length;\n            let notChange = len === currentStates.length;\n            if (notChange) {\n                for (let i = 0; i < len; i++) {\n                    if (states[i] !== currentStates[i]) {\n                        notChange = false;\n                        break;\n                    }\n                }\n            }\n            if (notChange) {\n                return;\n            }\n\n            for (let i = 0; i < len; i++) {\n                const stateName = states[i];\n                let stateObj: ElementState;\n                if (this.stateProxy) {\n                    stateObj = this.stateProxy(stateName, states);\n                }\n                if (!stateObj) {\n                    stateObj = this.states[stateName];\n                }\n                if (stateObj) {\n                    stateObjects.push(stateObj);\n                }\n            }\n\n            const lastStateObj = stateObjects[len - 1];\n            const useHoverLayer = !!((lastStateObj && lastStateObj.hoverLayer) || forceUseHoverLayer);\n            if (useHoverLayer) {\n                // Enter hover layer before states update.\n                this._toggleHoverLayerFlag(true);\n            }\n\n            const mergedState = this._mergeStates(stateObjects);\n            const animationCfg = this.stateTransition;\n\n            this.saveCurrentToNormalState(mergedState);\n\n            this._applyStateObj(\n                states.join(','),\n                mergedState,\n                this._normalState,\n                false,\n                !noAnimation && !this.__inHover && animationCfg && animationCfg.duration > 0,\n                animationCfg\n            );\n\n            const textContent = this._textContent;\n            const textGuide = this._textGuide;\n            if (textContent) {\n                textContent.useStates(states, noAnimation, useHoverLayer);\n            }\n            if (textGuide) {\n                textGuide.useStates(states, noAnimation, useHoverLayer);\n            }\n\n            this._updateAnimationTargets();\n\n            // Create a copy\n            this.currentStates = states.slice();\n            this.markRedraw();\n\n            if (!useHoverLayer && this.__inHover) {\n                // Leave hover layer after states update and markRedraw.\n                this._toggleHoverLayerFlag(false);\n                // NOTE: avoid unexpected refresh when moving out from hover layer!!\n                // Only clear from hover layer.\n                this.__dirty &= ~REDRAW_BIT;\n            }\n        }\n    }\n\n    /**\n     * Return if el.silent or any ancestor element has silent true.\n     */\n    isSilent() {\n        let isSilent = this.silent;\n        let ancestor = this.parent;\n        while (!isSilent && ancestor) {\n            if (ancestor.silent) {\n                isSilent = true;\n                break;\n            }\n            ancestor = ancestor.parent;\n        }\n        return isSilent;\n    }\n\n    /**\n     * Update animation targets when reference is changed.\n     */\n    private _updateAnimationTargets() {\n        for (let i = 0; i < this.animators.length; i++) {\n            const animator = this.animators[i];\n            if (animator.targetName) {\n                animator.changeTarget((this as any)[animator.targetName]);\n            }\n        }\n    }\n\n    /**\n     * Remove state\n     * @param state State to remove\n     */\n    removeState(state: string) {\n        const idx = indexOf(this.currentStates, state);\n        if (idx >= 0) {\n            const currentStates = this.currentStates.slice();\n            currentStates.splice(idx, 1);\n            this.useStates(currentStates);\n        }\n    }\n\n    /**\n     * Replace exists state.\n     * @param oldState\n     * @param newState\n     * @param forceAdd If still add when even if replaced target not exists.\n     */\n    replaceState(oldState: string, newState: string, forceAdd: boolean) {\n        const currentStates = this.currentStates.slice();\n        const idx = indexOf(currentStates, oldState);\n        const newStateExists = indexOf(currentStates, newState) >= 0;\n        if (idx >= 0) {\n            if (!newStateExists) {\n                // Replace the old with the new one.\n                currentStates[idx] = newState;\n            }\n            else {\n                // Only remove the old one.\n                currentStates.splice(idx, 1);\n            }\n        }\n        else if (forceAdd && !newStateExists) {\n            currentStates.push(newState);\n        }\n        this.useStates(currentStates);\n    }\n\n    /**\n     * Toogle state.\n     */\n    toggleState(state: string, enable: boolean) {\n        if (enable) {\n            this.useState(state, true);\n        }\n        else {\n            this.removeState(state);\n        }\n    }\n\n    protected _mergeStates(states: ElementState[]) {\n        const mergedState: ElementState = {};\n        let mergedTextConfig: ElementTextConfig;\n        for (let i = 0; i < states.length; i++) {\n            const state = states[i];\n            extend(mergedState, state);\n\n            if (state.textConfig) {\n                mergedTextConfig = mergedTextConfig || {};\n                extend(mergedTextConfig, state.textConfig);\n            }\n        }\n        if (mergedTextConfig) {\n            mergedState.textConfig = mergedTextConfig;\n        }\n\n        return mergedState;\n    }\n\n    protected _applyStateObj(\n        stateName: string,\n        state: ElementState,\n        normalState: ElementState,\n        keepCurrentStates: boolean,\n        transition: boolean,\n        animationCfg: ElementAnimateConfig\n    ) {\n        const needsRestoreToNormal = !(state && keepCurrentStates);\n\n        // TODO: Save current state to normal?\n        // TODO: Animation\n        if (state && state.textConfig) {\n            // Inherit from current state or normal state.\n            this.textConfig = extend(\n                {},\n                keepCurrentStates ? this.textConfig : normalState.textConfig\n            );\n            extend(this.textConfig, state.textConfig);\n        }\n        else if (needsRestoreToNormal) {\n            if (normalState.textConfig) {   // Only restore if changed and saved.\n                this.textConfig = normalState.textConfig;\n            }\n        }\n\n        const transitionTarget: Dictionary = {};\n        let hasTransition = false;\n\n        for (let i = 0; i < PRIMARY_STATES_KEYS.length; i++) {\n            const key = PRIMARY_STATES_KEYS[i];\n            const propNeedsTransition = transition && DEFAULT_ANIMATABLE_MAP[key];\n\n            if (state && state[key] != null) {\n                if (propNeedsTransition) {\n                    hasTransition = true;\n                    transitionTarget[key] = state[key];\n                }\n                else {\n                    // Replace if it exist in target state\n                    (this as any)[key] = state[key];\n                }\n            }\n            else if (needsRestoreToNormal) {\n                if (normalState[key] != null) {\n                    if (propNeedsTransition) {\n                        hasTransition = true;\n                        transitionTarget[key] = normalState[key];\n                    }\n                    else {\n                        // Restore to normal state\n                        (this as any)[key] = normalState[key];\n                    }\n                }\n            }\n        }\n\n        if (!transition) {\n            // Keep the running animation to the new values after states changed.\n            // Not simply stop animation. Or it may have jump effect.\n            for (let i = 0; i < this.animators.length; i++) {\n                const animator = this.animators[i];\n                const targetName = animator.targetName;\n                // Ignore loop animation\n                if (!animator.getLoop()) {\n                    animator.__changeFinalValue(targetName\n                        ? ((state || normalState) as any)[targetName]\n                        : (state || normalState)\n                    );\n                }\n            }\n        }\n\n        if (hasTransition) {\n            this._transitionState(\n                stateName,\n                transitionTarget as Props,\n                animationCfg\n            );\n        }\n    }\n\n    /**\n     * Component is some elements attached on this element for specific purpose.\n     * Like clipPath, textContent\n     */\n    private _attachComponent(componentEl: Element) {\n        if (componentEl.__zr && !componentEl.__hostTarget) {\n            if (process.env.NODE_ENV !== 'production') {\n                throw new Error('Text element has been added to zrender.');\n            }\n            return;\n        }\n\n        if (componentEl === this) {\n            if (process.env.NODE_ENV !== 'production') {\n                throw new Error('Recursive component attachment.');\n            }\n            return;\n        }\n\n        const zr = this.__zr;\n        if (zr) {\n            // Needs to add self to zrender. For rerender triggering, or animation.\n            componentEl.addSelfToZr(zr);\n        }\n\n        componentEl.__zr = zr;\n        componentEl.__hostTarget = this as unknown as Element;\n    }\n\n    private _detachComponent(componentEl: Element) {\n        if (componentEl.__zr) {\n            componentEl.removeSelfFromZr(componentEl.__zr);\n        }\n\n        componentEl.__zr = null;\n        componentEl.__hostTarget = null;\n    }\n\n    /**\n     * Get clip path\n     */\n    getClipPath() {\n        return this._clipPath;\n    }\n\n    /**\n     * Set clip path\n     *\n     * clipPath can't be shared between two elements.\n     */\n    setClipPath(clipPath: Path) {\n        // Remove previous clip path\n        if (this._clipPath && this._clipPath !== clipPath) {\n            this.removeClipPath();\n        }\n\n        this._attachComponent(clipPath);\n\n        this._clipPath = clipPath;\n        this.markRedraw();\n    }\n\n    /**\n     * Remove clip path\n     */\n    removeClipPath() {\n        const clipPath = this._clipPath;\n        if (clipPath) {\n            this._detachComponent(clipPath);\n            this._clipPath = null;\n            this.markRedraw();\n        }\n    }\n\n    /**\n     * Get attached text content.\n     */\n    getTextContent(): ZRText {\n        return this._textContent;\n    }\n\n    /**\n     * Attach text on element\n     */\n    setTextContent(textEl: ZRText) {\n        const previousTextContent = this._textContent;\n        if (previousTextContent === textEl) {\n            return;\n        }\n        // Remove previous textContent\n        if (previousTextContent && previousTextContent !== textEl) {\n            this.removeTextContent();\n        }\n        if (process.env.NODE_ENV !== 'production') {\n            if (textEl.__zr && !textEl.__hostTarget) {\n                throw new Error('Text element has been added to zrender.');\n            }\n        }\n\n        textEl.innerTransformable = new Transformable();\n\n        this._attachComponent(textEl);\n\n        this._textContent = textEl;\n\n        this.markRedraw();\n    }\n\n    /**\n     * Set layout of attached text. Will merge with the previous.\n     */\n    setTextConfig(cfg: ElementTextConfig) {\n        // TODO hide cfg property?\n        if (!this.textConfig) {\n            this.textConfig = {};\n        }\n        extend(this.textConfig, cfg);\n        this.markRedraw();\n    }\n\n    /**\n     * Remove text config\n     */\n    removeTextConfig() {\n        this.textConfig = null;\n        this.markRedraw();\n    }\n\n    /**\n     * Remove attached text element.\n     */\n    removeTextContent() {\n        const textEl = this._textContent;\n        if (textEl) {\n            textEl.innerTransformable = null;\n            this._detachComponent(textEl);\n            this._textContent = null;\n            this._innerTextDefaultStyle = null;\n            this.markRedraw();\n        }\n    }\n\n    getTextGuideLine(): Polyline {\n        return this._textGuide;\n    }\n\n    setTextGuideLine(guideLine: Polyline) {\n        // Remove previous clip path\n        if (this._textGuide && this._textGuide !== guideLine) {\n            this.removeTextGuideLine();\n        }\n\n        this._attachComponent(guideLine);\n\n        this._textGuide = guideLine;\n\n        this.markRedraw();\n    }\n\n    removeTextGuideLine() {\n        const textGuide = this._textGuide;\n        if (textGuide) {\n            this._detachComponent(textGuide);\n            this._textGuide = null;\n            this.markRedraw();\n        }\n    }\n    /**\n     * Mark element needs to be repainted\n     */\n    markRedraw() {\n        this.__dirty |= REDRAW_BIT;\n        const zr = this.__zr;\n        if (zr) {\n            if (this.__inHover) {\n                zr.refreshHover();\n            }\n            else {\n                zr.refresh();\n            }\n        }\n\n        // Used as a clipPath or textContent\n        if (this.__hostTarget) {\n            this.__hostTarget.markRedraw();\n        }\n    }\n\n    /**\n     * Besides marking elements to be refreshed.\n     * It will also invalid all cache and doing recalculate next frame.\n     */\n    dirty() {\n        this.markRedraw();\n    }\n\n    private _toggleHoverLayerFlag(inHover: boolean) {\n        this.__inHover = inHover;\n        const textContent = this._textContent;\n        const textGuide = this._textGuide;\n        if (textContent) {\n            textContent.__inHover = inHover;\n        }\n        if (textGuide) {\n            textGuide.__inHover = inHover;\n        }\n    }\n\n    /**\n     * Add self from zrender instance.\n     * Not recursively because it will be invoked when element added to storage.\n     */\n    addSelfToZr(zr: ZRenderType) {\n        if (this.__zr === zr) {\n            return;\n        }\n\n        this.__zr = zr;\n        // 添加动画\n        const animators = this.animators;\n        if (animators) {\n            for (let i = 0; i < animators.length; i++) {\n                zr.animation.addAnimator(animators[i]);\n            }\n        }\n\n        if (this._clipPath) {\n            this._clipPath.addSelfToZr(zr);\n        }\n        if (this._textContent) {\n            this._textContent.addSelfToZr(zr);\n        }\n        if (this._textGuide) {\n            this._textGuide.addSelfToZr(zr);\n        }\n    }\n\n    /**\n     * Remove self from zrender instance.\n     * Not recursively because it will be invoked when element added to storage.\n     */\n    removeSelfFromZr(zr: ZRenderType) {\n        if (!this.__zr) {\n            return;\n        }\n\n        this.__zr = null;\n        // Remove animation\n        const animators = this.animators;\n        if (animators) {\n            for (let i = 0; i < animators.length; i++) {\n                zr.animation.removeAnimator(animators[i]);\n            }\n        }\n\n        if (this._clipPath) {\n            this._clipPath.removeSelfFromZr(zr);\n        }\n        if (this._textContent) {\n            this._textContent.removeSelfFromZr(zr);\n        }\n        if (this._textGuide) {\n            this._textGuide.removeSelfFromZr(zr);\n        }\n    }\n\n    /**\n     * 动画\n     *\n     * @param path The key to fetch value from object. Mostly style or shape.\n     * @param loop Whether to loop animation.\n     * @param allowDiscreteAnimation Whether to allow discrete animation\n     * @example:\n     *     el.animate('style', false)\n     *         .when(1000, {x: 10} )\n     *         .done(function(){ // Animation done })\n     *         .start()\n     */\n    animate(key?: string, loop?: boolean, allowDiscreteAnimation?: boolean) {\n        let target = key ? (this as any)[key] : this;\n\n        if (process.env.NODE_ENV !== 'production') {\n            if (!target) {\n                logError(\n                    'Property \"'\n                    + key\n                    + '\" is not existed in element '\n                    + this.id\n                );\n                return;\n            }\n        }\n\n        const animator = new Animator(target, loop, allowDiscreteAnimation);\n        key && (animator.targetName = key);\n        this.addAnimator(animator, key);\n        return animator;\n    }\n\n    addAnimator(animator: Animator, key: string): void {\n        const zr = this.__zr;\n\n        const el = this;\n\n        animator.during(function () {\n            el.updateDuringAnimation(key as string);\n        }).done(function () {\n            const animators = el.animators;\n            // FIXME Animator will not be removed if use `Animator#stop` to stop animation\n            const idx = indexOf(animators, animator);\n            if (idx >= 0) {\n                animators.splice(idx, 1);\n            }\n        });\n\n        this.animators.push(animator);\n\n        // If animate after added to the zrender\n        if (zr) {\n            zr.animation.addAnimator(animator);\n        }\n\n        // Wake up zrender to start the animation loop.\n        zr && zr.wakeUp();\n    }\n\n    updateDuringAnimation(key: string) {\n        this.markRedraw();\n    }\n\n    /**\n     * 停止动画\n     * @param {boolean} forwardToLast If move to last frame before stop\n     */\n    stopAnimation(scope?: string, forwardToLast?: boolean) {\n        const animators = this.animators;\n        const len = animators.length;\n        const leftAnimators: Animator[] = [];\n        for (let i = 0; i < len; i++) {\n            const animator = animators[i];\n            if (!scope || scope === animator.scope) {\n                animator.stop(forwardToLast);\n            }\n            else {\n                leftAnimators.push(animator);\n            }\n        }\n        this.animators = leftAnimators;\n\n        return this;\n    }\n\n    /**\n     * @param animationProps A map to specify which property to animate. If not specified, will animate all.\n     * @example\n     *  // Animate position\n     *  el.animateTo({\n     *      position: [10, 10]\n     *  }, { done: () => { // done } })\n     *\n     *  // Animate shape, style and position in 100ms, delayed 100ms, with cubicOut easing\n     *  el.animateTo({\n     *      shape: {\n     *          width: 500\n     *      },\n     *      style: {\n     *          fill: 'red'\n     *      }\n     *      position: [10, 10]\n     *  }, {\n     *      duration: 100,\n     *      delay: 100,\n     *      easing: 'cubicOut',\n     *      done: () => { // done }\n     *  })\n     */\n    animateTo(target: Props, cfg?: ElementAnimateConfig, animationProps?: MapToType) {\n        animateTo(this, target, cfg, animationProps);\n    }\n\n    /**\n     * Animate from the target state to current state.\n     * The params and the value are the same as `this.animateTo`.\n     */\n\n    // Overload definitions\n    animateFrom(\n        target: Props, cfg: ElementAnimateConfig, animationProps?: MapToType\n    ) {\n        animateTo(this, target, cfg, animationProps, true);\n    }\n\n    protected _transitionState(\n        stateName: string, target: Props, cfg?: ElementAnimateConfig, animationProps?: MapToType\n    ) {\n        const animators = animateTo(this, target, cfg, animationProps);\n        for (let i = 0; i < animators.length; i++) {\n            animators[i].__fromStateTransition = stateName;\n        }\n    }\n\n    /**\n     * Interface of getting the minimum bounding box.\n     */\n    getBoundingRect(): BoundingRect {\n        return null;\n    }\n\n    getPaintRect(): BoundingRect {\n        return null;\n    }\n\n    /**\n     * The string value of `textPosition` needs to be calculated to a real postion.\n     * For example, `'inside'` is calculated to `[rect.width/2, rect.height/2]`\n     * by default. See `contain/text.js#calculateTextPosition` for more details.\n     * But some coutom shapes like \"pin\", \"flag\" have center that is not exactly\n     * `[width/2, height/2]`. So we provide this hook to customize the calculation\n     * for those shapes. It will be called if the `style.textPosition` is a string.\n     * @param {Obejct} [out] Prepared out object. If not provided, this method should\n     *        be responsible for creating one.\n     * @param {module:zrender/graphic/Style} style\n     * @param {Object} rect {x, y, width, height}\n     * @return {Obejct} out The same as the input out.\n     *         {\n     *             x: number. mandatory.\n     *             y: number. mandatory.\n     *             align: string. optional. use style.textAlign by default.\n     *             verticalAlign: string. optional. use style.textVerticalAlign by default.\n     *         }\n     */\n    calculateTextPosition: ElementCalculateTextPosition;\n\n    protected static initDefaultProps = (function () {\n        const elProto = Element.prototype;\n        elProto.type = 'element';\n        elProto.name = '';\n\n        elProto.ignore =\n        elProto.silent =\n        elProto.isGroup =\n        elProto.draggable =\n        elProto.dragging =\n        elProto.ignoreClip =\n        elProto.__inHover = false;\n\n        elProto.__dirty = REDRAW_BIT;\n\n\n        const logs: Dictionary = {};\n        function logDeprecatedError(key: string, xKey: string, yKey: string) {\n            if (!logs[key + xKey + yKey]) {\n                console.warn(`DEPRECATED: '${key}' has been deprecated. use '${xKey}', '${yKey}' instead`);\n                logs[key + xKey + yKey] = true;\n            }\n        }\n        // Legacy transform properties. position and scale\n        function createLegacyProperty(\n            key: string,\n            privateKey: string,\n            xKey: string,\n            yKey: string\n        ) {\n            Object.defineProperty(elProto, key, {\n                get() {\n                    if (process.env.NODE_ENV !== 'production') {\n                        logDeprecatedError(key, xKey, yKey);\n                    }\n                    if (!this[privateKey]) {\n                        const pos: number[] = this[privateKey] = [];\n                        enhanceArray(this, pos);\n                    }\n                    return this[privateKey];\n                },\n                set(pos: number[]) {\n                    if (process.env.NODE_ENV !== 'production') {\n                        logDeprecatedError(key, xKey, yKey);\n                    }\n                    this[xKey] = pos[0];\n                    this[yKey] = pos[1];\n                    this[privateKey] = pos;\n                    enhanceArray(this, pos);\n                }\n            });\n            function enhanceArray(self: any, pos: number[]) {\n                Object.defineProperty(pos, 0, {\n                    get() {\n                        return self[xKey];\n                    },\n                    set(val: number) {\n                        self[xKey] = val;\n                    }\n                });\n                Object.defineProperty(pos, 1, {\n                    get() {\n                        return self[yKey];\n                    },\n                    set(val: number) {\n                        self[yKey] = val;\n                    }\n                });\n            }\n        }\n        if (Object.defineProperty\n            // Just don't support ie8\n            // && (!(env as any).browser.ie || (env as any).browser.version > 8)\n        ) {\n            createLegacyProperty('position', '_legacyPos', 'x', 'y');\n            createLegacyProperty('scale', '_legacyScale', 'scaleX', 'scaleY');\n            createLegacyProperty('origin', '_legacyOrigin', 'originX', 'originY');\n        }\n    })()\n}\n\nmixin(Element, Eventful);\nmixin(Element, Transformable);\n\nfunction animateTo(\n    animatable: Element,\n    target: Dictionary,\n    cfg: ElementAnimateConfig,\n    animationProps: Dictionary,\n    reverse?: boolean\n) {\n    cfg = cfg || {};\n    const animators: Animator[] = [];\n    animateToShallow(\n        animatable,\n        '',\n        animatable,\n        target,\n        cfg,\n        animationProps,\n        animators,\n        reverse\n    );\n\n    let finishCount = animators.length;\n    let doneHappened = false;\n    const cfgDone = cfg.done;\n    const cfgAborted = cfg.aborted;\n\n    const doneCb = () => {\n        doneHappened = true;\n        finishCount--;\n        if (finishCount <= 0) {\n            doneHappened\n                ? (cfgDone && cfgDone())\n                : (cfgAborted && cfgAborted());\n        }\n    };\n\n    const abortedCb = () => {\n        finishCount--;\n        if (finishCount <= 0) {\n            doneHappened\n                ? (cfgDone && cfgDone())\n                : (cfgAborted && cfgAborted());\n        }\n    };\n\n    // No animators. This should be checked before animators[i].start(),\n    // because 'done' may be executed immediately if no need to animate.\n    if (!finishCount) {\n        cfgDone && cfgDone();\n    }\n\n    // Adding during callback to the first animator\n    if (animators.length > 0 && cfg.during) {\n        // TODO If there are two animators in animateTo, and the first one is stopped by other animator.\n        animators[0].during((target, percent) => {\n            cfg.during(percent);\n        });\n    }\n\n    // Start after all animators created\n    // Incase any animator is done immediately when all animation properties are not changed\n    for (let i = 0; i < animators.length; i++) {\n        const animator = animators[i];\n        if (doneCb) {\n            animator.done(doneCb);\n        }\n        if (abortedCb) {\n            animator.aborted(abortedCb);\n        }\n        if (cfg.force) {\n            animator.duration(cfg.duration);\n        }\n        animator.start(cfg.easing);\n    }\n\n    return animators;\n}\n\nfunction copyArrShallow(source: number[], target: number[], len: number) {\n    for (let i = 0; i < len; i++) {\n        source[i] = target[i];\n    }\n}\n\nfunction is2DArray(value: any[]): value is number[][] {\n    return isArrayLike(value[0]);\n}\n\nfunction copyValue(target: Dictionary, source: Dictionary, key: string) {\n    if (isArrayLike(source[key])) {\n        if (!isArrayLike(target[key])) {\n            target[key] = [];\n        }\n\n        if (isTypedArray(source[key])) {\n            const len = source[key].length;\n            if (target[key].length !== len) {\n                target[key] = new (source[key].constructor)(len);\n                copyArrShallow(target[key], source[key], len);\n            }\n        }\n        else {\n            const sourceArr = source[key] as any[];\n            const targetArr = target[key] as any[];\n\n            const len0 = sourceArr.length;\n            if (is2DArray(sourceArr)) {\n                // NOTE: each item should have same length\n                const len1 = sourceArr[0].length;\n\n                for (let i = 0; i < len0; i++) {\n                    if (!targetArr[i]) {\n                        targetArr[i] = Array.prototype.slice.call(sourceArr[i]);\n                    }\n                    else {\n                        copyArrShallow(targetArr[i], sourceArr[i], len1);\n                    }\n                }\n            }\n            else {\n                copyArrShallow(targetArr, sourceArr, len0);\n            }\n\n            targetArr.length = sourceArr.length;\n        }\n    }\n    else {\n        target[key] = source[key];\n    }\n}\n\nfunction isValueSame(val1: any, val2: any) {\n    return val1 === val2\n        // Only check 1 dimension array\n        || isArrayLike(val1) && isArrayLike(val2) && is1DArraySame(val1, val2);\n}\n\nfunction is1DArraySame(arr0: ArrayLike, arr1: ArrayLike) {\n    const len = arr0.length;\n    if (len !== arr1.length) {\n        return false;\n    }\n    for (let i = 0; i < len; i++) {\n        if (arr0[i] !== arr1[i]) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction animateToShallow(\n    animatable: Element,\n    topKey: string,\n    animateObj: Dictionary,\n    target: Dictionary,\n    cfg: ElementAnimateConfig,\n    animationProps: Dictionary | true,\n    animators: Animator[],\n    reverse: boolean    // If `true`, animate from the `target` to current state.\n) {\n    const targetKeys = keys(target);\n    const duration = cfg.duration;\n    const delay = cfg.delay;\n    const additive = cfg.additive;\n    const setToFinal = cfg.setToFinal;\n    const animateAll = !isObject(animationProps);\n    // Find last animator animating same prop.\n    const existsAnimators = animatable.animators;\n\n    let animationKeys: string[] = [];\n    for (let k = 0; k < targetKeys.length; k++) {\n        const innerKey = targetKeys[k] as string;\n        const targetVal = target[innerKey];\n\n        if (\n            targetVal != null && animateObj[innerKey] != null\n            && (animateAll || (animationProps as Dictionary)[innerKey])\n        ) {\n            if (isObject(targetVal)\n                && !isArrayLike(targetVal)\n                && !isGradientObject(targetVal)\n            ) {\n                if (topKey) {\n                    // logError('Only support 1 depth nest object animation.');\n                    // Assign directly.\n                    // TODO richText?\n                    if (!reverse) {\n                        animateObj[innerKey] = targetVal;\n                        animatable.updateDuringAnimation(topKey);\n                    }\n                    continue;\n                }\n                animateToShallow(\n                    animatable,\n                    innerKey,\n                    animateObj[innerKey],\n                    targetVal,\n                    cfg,\n                    animationProps && (animationProps as Dictionary)[innerKey],\n                    animators,\n                    reverse\n                );\n            }\n            else {\n                animationKeys.push(innerKey);\n            }\n        }\n        else if (!reverse) {\n            // Assign target value directly.\n            animateObj[innerKey] = targetVal;\n            animatable.updateDuringAnimation(topKey);\n            // Previous animation will be stopped on the changed keys.\n            // So direct assign is also included.\n            animationKeys.push(innerKey);\n        }\n    }\n\n    let keyLen = animationKeys.length;\n    // Stop previous animations on the same property.\n    if (!additive && keyLen) {\n        // Stop exists animation on specific tracks. Only one animator available for each property.\n        // TODO Should invoke previous animation callback?\n        for (let i = 0; i < existsAnimators.length; i++) {\n            const animator = existsAnimators[i];\n            if (animator.targetName === topKey) {\n                const allAborted = animator.stopTracks(animationKeys);\n                if (allAborted) {   // This animator can't be used.\n                    const idx = indexOf(existsAnimators, animator);\n                    existsAnimators.splice(idx, 1);\n                }\n            }\n        }\n    }\n\n    // Ignore values not changed.\n    // NOTE: Must filter it after previous animation stopped\n    // and make sure the value to compare is using initial frame if animation is not started yet when setToFinal is used.\n    if (!cfg.force) {\n        animationKeys = filter(animationKeys, key => !isValueSame(target[key], animateObj[key]));\n        keyLen = animationKeys.length;\n    }\n\n    if (keyLen > 0\n        // cfg.force is mainly for keep invoking onframe and ondone callback even if animation is not necessary.\n        // So if there is already has animators. There is no need to create another animator if not necessary.\n        // Or it will always add one more with empty target.\n        || (cfg.force && !animators.length)\n    ) {\n        let revertedSource: Dictionary;\n        let reversedTarget: Dictionary;\n        let sourceClone: Dictionary;\n        if (reverse) {\n            reversedTarget = {};\n            if (setToFinal) {\n                revertedSource = {};\n            }\n            for (let i = 0; i < keyLen; i++) {\n                const innerKey = animationKeys[i];\n                reversedTarget[innerKey] = animateObj[innerKey];\n                if (setToFinal) {\n                    revertedSource[innerKey] = target[innerKey];\n                }\n                else {\n                    // The usage of \"animateFrom\" expects that the element props has been updated dirctly to\n                    // \"final\" values outside, and input the \"from\" values here (i.e., in variable `target` here).\n                    // So here we assign the \"from\" values directly to element here (rather that in the next frame)\n                    // to prevent the \"final\" values from being read in any other places (like other running\n                    // animator during callbacks).\n                    // But if `setToFinal: true` this feature can not be satisfied.\n                    animateObj[innerKey] = target[innerKey];\n                }\n            }\n        }\n        else if (setToFinal) {\n            sourceClone = {};\n            for (let i = 0; i < keyLen; i++) {\n                const innerKey = animationKeys[i];\n                // NOTE: Must clone source after the stopTracks. The property may be modified in stopTracks.\n                sourceClone[innerKey] = cloneValue(animateObj[innerKey]);\n                // Use copy, not change the original reference\n                // Copy from target to source.\n                copyValue(animateObj, target, innerKey);\n            }\n        }\n\n        const animator = new Animator(animateObj, false, false, additive ? filter(\n            // Use key string instead object reference because ref may be changed.\n            existsAnimators, animator => animator.targetName === topKey\n        ) : null);\n\n        animator.targetName = topKey;\n        if (cfg.scope) {\n            animator.scope = cfg.scope;\n        }\n\n        if (setToFinal && revertedSource) {\n            animator.whenWithKeys(0, revertedSource, animationKeys);\n        }\n        if (sourceClone) {\n            animator.whenWithKeys(0, sourceClone, animationKeys);\n        }\n\n        animator.whenWithKeys(\n            duration == null ? 500 : duration,\n            reverse ? reversedTarget : target,\n            animationKeys\n        ).delay(delay || 0);\n\n        animatable.addAnimator(animator, topKey);\n        animators.push(animator);\n    }\n}\n\n\nexport default Element;\n","/**\r\n * Group是一个容器,可以插入子节点,Group的变换也会被应用到子节点上\r\n * @module zrender/graphic/Group\r\n * @example\r\n *     const Group = require('zrender/graphic/Group');\r\n *     const Circle = require('zrender/graphic/shape/Circle');\r\n *     const g = new Group();\r\n *     g.position[0] = 100;\r\n *     g.position[1] = 100;\r\n *     g.add(new Circle({\r\n *         style: {\r\n *             x: 100,\r\n *             y: 100,\r\n *             r: 20,\r\n *         }\r\n *     }));\r\n *     zr.add(g);\r\n */\r\n\r\nimport * as zrUtil from '../core/util';\r\nimport Element, { ElementProps } from '../Element';\r\nimport BoundingRect from '../core/BoundingRect';\r\nimport { MatrixArray } from '../core/matrix';\r\nimport Displayable from './Displayable';\r\nimport { ZRenderType } from '../zrender';\r\n\r\nexport interface GroupProps extends ElementProps {\r\n}\r\n\r\nclass Group extends Element {\r\n\r\n    readonly isGroup = true\r\n\r\n    private _children: Element[] = []\r\n\r\n\r\n    constructor(opts?: GroupProps) {\r\n        super();\r\n\r\n        this.attr(opts);\r\n    }\r\n\r\n    /**\r\n     * Get children reference.\r\n     */\r\n    childrenRef() {\r\n        return this._children;\r\n    }\r\n\r\n    /**\r\n     * Get children copy.\r\n     */\r\n    children() {\r\n        return this._children.slice();\r\n    }\r\n\r\n    /**\r\n     * 获取指定 index 的儿子节点\r\n     */\r\n    childAt(idx: number): Element {\r\n        return this._children[idx];\r\n    }\r\n\r\n    /**\r\n     * 获取指定名字的儿子节点\r\n     */\r\n    childOfName(name: string): Element {\r\n        const children = this._children;\r\n        for (let i = 0; i < children.length; i++) {\r\n            if (children[i].name === name) {\r\n                return children[i];\r\n            }\r\n        }\r\n    }\r\n\r\n    childCount(): number {\r\n        return this._children.length;\r\n    }\r\n\r\n    /**\r\n     * 添加子节点到最后\r\n     */\r\n    add(child: Element): Group {\r\n        if (child) {\r\n            if (child !== this && child.parent !== this) {\r\n                this._children.push(child);\r\n                this._doAdd(child);\r\n            }\r\n            if (process.env.NODE_ENV !== 'production') {\r\n                if (child.__hostTarget) {\r\n                    throw 'This elemenet has been used as an attachment';\r\n                }\r\n            }\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * 添加子节点在 nextSibling 之前\r\n     */\r\n    addBefore(child: Element, nextSibling: Element) {\r\n        if (child && child !== this && child.parent !== this\r\n            && nextSibling && nextSibling.parent === this) {\r\n\r\n            const children = this._children;\r\n            const idx = children.indexOf(nextSibling);\r\n\r\n            if (idx >= 0) {\r\n                children.splice(idx, 0, child);\r\n                this._doAdd(child);\r\n            }\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    replace(oldChild: Element, newChild: Element) {\r\n        const idx = zrUtil.indexOf(this._children, oldChild);\r\n        if (idx >= 0) {\r\n            this.replaceAt(newChild, idx);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    replaceAt(child: Element, index: number) {\r\n        const children = this._children;\r\n        const old = children[index];\r\n\r\n        if (child && child !== this && child.parent !== this && child !== old) {\r\n            children[index] = child;\r\n\r\n            old.parent = null;\r\n            const zr = this.__zr;\r\n            if (zr) {\r\n                old.removeSelfFromZr(zr);\r\n            }\r\n\r\n            this._doAdd(child);\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    _doAdd(child: Element) {\r\n        if (child.parent) {\r\n            // Parent must be a group\r\n            (child.parent as Group).remove(child);\r\n        }\r\n\r\n        child.parent = this;\r\n\r\n        const zr = this.__zr;\r\n        if (zr && zr !== (child as Group).__zr) {    // Only group has __storage\r\n\r\n            child.addSelfToZr(zr);\r\n        }\r\n\r\n        zr && zr.refresh();\r\n    }\r\n\r\n    /**\r\n     * Remove child\r\n     * @param child\r\n     */\r\n    remove(child: Element) {\r\n        const zr = this.__zr;\r\n        const children = this._children;\r\n\r\n        const idx = zrUtil.indexOf(children, child);\r\n        if (idx < 0) {\r\n            return this;\r\n        }\r\n        children.splice(idx, 1);\r\n\r\n        child.parent = null;\r\n\r\n        if (zr) {\r\n\r\n            child.removeSelfFromZr(zr);\r\n        }\r\n\r\n        zr && zr.refresh();\r\n\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Remove all children\r\n     */\r\n    removeAll() {\r\n        const children = this._children;\r\n        const zr = this.__zr;\r\n        for (let i = 0; i < children.length; i++) {\r\n            const child = children[i];\r\n            if (zr) {\r\n                child.removeSelfFromZr(zr);\r\n            }\r\n            child.parent = null;\r\n        }\r\n        children.length = 0;\r\n\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * 遍历所有子节点\r\n     */\r\n    eachChild(\r\n        cb: (this: Context, el: Element, index?: number) => void,\r\n        context?: Context\r\n    ) {\r\n        const children = this._children;\r\n        for (let i = 0; i < children.length; i++) {\r\n            const child = children[i];\r\n            cb.call(context, child, i);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Visit all descendants.\r\n     * Return false in callback to stop visit descendants of current node\r\n     */\r\n    // TODO Group itself should also invoke the callback.\r\n    traverse(\r\n        cb: (this: T, el: Element) => boolean | void,\r\n        context?: T\r\n    ) {\r\n        for (let i = 0; i < this._children.length; i++) {\r\n            const child = this._children[i];\r\n            const stopped = cb.call(context, child);\r\n\r\n            if (child.isGroup && !stopped) {\r\n                child.traverse(cb, context);\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    addSelfToZr(zr: ZRenderType) {\r\n        super.addSelfToZr(zr);\r\n        for (let i = 0; i < this._children.length; i++) {\r\n            const child = this._children[i];\r\n            child.addSelfToZr(zr);\r\n        }\r\n    }\r\n\r\n    removeSelfFromZr(zr: ZRenderType) {\r\n        super.removeSelfFromZr(zr);\r\n        for (let i = 0; i < this._children.length; i++) {\r\n            const child = this._children[i];\r\n            child.removeSelfFromZr(zr);\r\n        }\r\n    }\r\n\r\n    getBoundingRect(includeChildren?: Element[]): BoundingRect {\r\n        // TODO Caching\r\n        const tmpRect = new BoundingRect(0, 0, 0, 0);\r\n        const children = includeChildren || this._children;\r\n        const tmpMat: MatrixArray = [];\r\n        let rect = null;\r\n\r\n        for (let i = 0; i < children.length; i++) {\r\n            const child = children[i];\r\n            // TODO invisible?\r\n            if (child.ignore || (child as Displayable).invisible) {\r\n                continue;\r\n            }\r\n\r\n            const childRect = child.getBoundingRect();\r\n            const transform = child.getLocalTransform(tmpMat);\r\n            // TODO\r\n            // The boundingRect cacluated by transforming original\r\n            // rect may be bigger than the actual bundingRect when rotation\r\n            // is used. (Consider a circle rotated aginst its center, where\r\n            // the actual boundingRect should be the same as that not be\r\n            // rotated.) But we can not find better approach to calculate\r\n            // actual boundingRect yet, considering performance.\r\n            if (transform) {\r\n                BoundingRect.applyTransform(tmpRect, childRect, transform);\r\n                rect = rect || tmpRect.clone();\r\n                rect.union(tmpRect);\r\n            }\r\n            else {\r\n                rect = rect || childRect.clone();\r\n                rect.union(childRect);\r\n            }\r\n        }\r\n        return rect || tmpRect;\r\n    }\r\n}\r\n\r\nGroup.prototype.type = 'group';\r\n// Storage will use childrenRef to get children to render.\r\nexport interface GroupLike extends Element {\r\n    childrenRef(): Element[]\r\n}\r\n\r\nexport default Group;","/*!\n* ZRender, a high performance 2d drawing library.\n*\n* Copyright (c) 2013, Baidu Inc.\n* All rights reserved.\n*\n* LICENSE\n* https://github.com/ecomfe/zrender/blob/master/LICENSE.txt\n*/\n\nimport env from './core/env';\nimport * as zrUtil from './core/util';\nimport Handler from './Handler';\nimport Storage from './Storage';\nimport {PainterBase} from './PainterBase';\nimport Animation, {getTime} from './animation/Animation';\nimport HandlerProxy from './dom/HandlerProxy';\nimport Element, { ElementEventCallback } from './Element';\nimport { Dictionary, ElementEventName, RenderedEvent, WithThisType } from './core/types';\nimport { LayerConfig } from './canvas/Layer';\nimport { GradientObject } from './graphic/Gradient';\nimport { PatternObject } from './graphic/Pattern';\nimport { EventCallback } from './core/Eventful';\nimport Displayable from './graphic/Displayable';\nimport { lum } from './tool/color';\nimport { DARK_MODE_THRESHOLD } from './config';\nimport Group from './graphic/Group';\n\n\ntype PainterBaseCtor = {\n    new(dom: HTMLElement, storage: Storage, ...args: any[]): PainterBase\n}\n\nconst painterCtors: Dictionary = {};\n\nlet instances: { [key: number]: ZRender } = {};\n\nfunction delInstance(id: number) {\n    delete instances[id];\n}\n\nfunction isDarkMode(backgroundColor: string | GradientObject | PatternObject): boolean {\n    if (!backgroundColor) {\n        return false;\n    }\n    if (typeof backgroundColor === 'string') {\n        return lum(backgroundColor, 1) < DARK_MODE_THRESHOLD;\n    }\n    else if ((backgroundColor as GradientObject).colorStops) {\n        const colorStops = (backgroundColor as GradientObject).colorStops;\n        let totalLum = 0;\n        const len = colorStops.length;\n        // Simply do the math of average the color. Not consider the offset\n        for (let i = 0; i < len; i++) {\n            totalLum += lum(colorStops[i].color, 1);\n        }\n        totalLum /= len;\n\n        return totalLum < DARK_MODE_THRESHOLD;\n    }\n    // Can't determine\n    return false;\n}\n\nclass ZRender {\n    /**\n     * Not necessary if using SSR painter like svg-ssr\n     */\n    dom?: HTMLElement\n\n    id: number\n\n    storage: Storage\n    painter: PainterBase\n    handler: Handler\n    animation: Animation\n\n    private _sleepAfterStill = 10;\n\n    private _stillFrameAccum = 0;\n\n    private _needsRefresh = true\n    private _needsRefreshHover = true\n    private _disposed: boolean;\n    /**\n     * If theme is dark mode. It will determine the color strategy for labels.\n     */\n    private _darkMode = false;\n\n    private _backgroundColor: string | GradientObject | PatternObject;\n\n    constructor(id: number, dom?: HTMLElement, opts?: ZRenderInitOpt) {\n        opts = opts || {};\n\n        /**\n         * @type {HTMLDomElement}\n         */\n        this.dom = dom;\n\n        this.id = id;\n\n        const storage = new Storage();\n\n        let rendererType = opts.renderer || 'canvas';\n\n        if (!painterCtors[rendererType]) {\n            // Use the first registered renderer.\n            rendererType = zrUtil.keys(painterCtors)[0];\n        }\n        if (process.env.NODE_ENV !== 'production') {\n            if (!painterCtors[rendererType]) {\n                throw new Error(`Renderer '${rendererType}' is not imported. Please import it first.`);\n            }\n        }\n\n        opts.useDirtyRect = opts.useDirtyRect == null\n            ? false\n            : opts.useDirtyRect;\n\n        const painter = new painterCtors[rendererType](dom, storage, opts, id);\n        const ssrMode = opts.ssr || painter.ssrOnly;\n\n        this.storage = storage;\n        this.painter = painter;\n\n        const handlerProxy = (!env.node && !env.worker && !ssrMode)\n            ? new HandlerProxy(painter.getViewportRoot(), painter.root)\n            : null;\n\n        const useCoarsePointer = opts.useCoarsePointer;\n        const usePointerSize = (useCoarsePointer == null || useCoarsePointer === 'auto')\n            ? env.touchEventsSupported\n            : !!useCoarsePointer;\n        const defaultPointerSize = 44;\n        let pointerSize;\n        if (usePointerSize) {\n            pointerSize = zrUtil.retrieve2(opts.pointerSize, defaultPointerSize);\n        }\n\n        this.handler = new Handler(storage, painter, handlerProxy, painter.root, pointerSize);\n\n        this.animation = new Animation({\n            stage: {\n                update: ssrMode ? null : () => this._flush(true)\n            }\n        });\n\n        if (!ssrMode) {\n            this.animation.start();\n        }\n    }\n\n    /**\n     * 添加元素\n     */\n    add(el: Element) {\n        if (this._disposed || !el) {\n            return;\n        }\n        this.storage.addRoot(el);\n        el.addSelfToZr(this);\n        this.refresh();\n    }\n\n    /**\n     * 删除元素\n     */\n    remove(el: Element) {\n        if (this._disposed || !el) {\n            return;\n        }\n        this.storage.delRoot(el);\n        el.removeSelfFromZr(this);\n        this.refresh();\n    }\n\n    /**\n     * Change configuration of layer\n    */\n    configLayer(zLevel: number, config: LayerConfig) {\n        if (this._disposed) {\n            return;\n        }\n        if (this.painter.configLayer) {\n            this.painter.configLayer(zLevel, config);\n        }\n        this.refresh();\n    }\n\n    /**\n     * Set background color\n     */\n    setBackgroundColor(backgroundColor: string | GradientObject | PatternObject) {\n        if (this._disposed) {\n            return;\n        }\n        if (this.painter.setBackgroundColor) {\n            this.painter.setBackgroundColor(backgroundColor);\n        }\n        this.refresh();\n        this._backgroundColor = backgroundColor;\n        this._darkMode = isDarkMode(backgroundColor);\n    }\n\n    getBackgroundColor() {\n        return this._backgroundColor;\n    }\n\n    /**\n     * Force to set dark mode\n     */\n    setDarkMode(darkMode: boolean) {\n        this._darkMode = darkMode;\n    }\n\n    isDarkMode() {\n        return this._darkMode;\n    }\n\n    /**\n     * Repaint the canvas immediately\n     */\n    refreshImmediately(fromInside?: boolean) {\n        if (this._disposed) {\n            return;\n        }\n        // const start = new Date();\n        if (!fromInside) {\n            // Update animation if refreshImmediately is invoked from outside.\n            // Not trigger stage update to call flush again. Which may refresh twice\n            this.animation.update(true);\n        }\n\n        // Clear needsRefresh ahead to avoid something wrong happens in refresh\n        // Or it will cause zrender refreshes again and again.\n        this._needsRefresh = false;\n        this.painter.refresh();\n        // Avoid trigger zr.refresh in Element#beforeUpdate hook\n        this._needsRefresh = false;\n    }\n\n    /**\n     * Mark and repaint the canvas in the next frame of browser\n     */\n    refresh() {\n        if (this._disposed) {\n            return;\n        }\n        this._needsRefresh = true;\n        // Active the animation again.\n        this.animation.start();\n    }\n\n    /**\n     * Perform all refresh\n     */\n    flush() {\n        if (this._disposed) {\n            return;\n        }\n        this._flush(false);\n    }\n\n    private _flush(fromInside?: boolean) {\n        let triggerRendered;\n\n        const start = getTime();\n        if (this._needsRefresh) {\n            triggerRendered = true;\n            this.refreshImmediately(fromInside);\n        }\n\n        if (this._needsRefreshHover) {\n            triggerRendered = true;\n            this.refreshHoverImmediately();\n        }\n        const end = getTime();\n\n        if (triggerRendered) {\n            this._stillFrameAccum = 0;\n            this.trigger('rendered', {\n                elapsedTime: end - start\n            } as RenderedEvent);\n        }\n        else if (this._sleepAfterStill > 0) {\n            this._stillFrameAccum++;\n            // Stop the animation after still for 10 frames.\n            if (this._stillFrameAccum > this._sleepAfterStill) {\n                this.animation.stop();\n            }\n        }\n    }\n\n    /**\n     * Set sleep after still for frames.\n     * Disable auto sleep when it's 0.\n     */\n    setSleepAfterStill(stillFramesCount: number) {\n        this._sleepAfterStill = stillFramesCount;\n    }\n\n    /**\n     * Wake up animation loop. But not render.\n     */\n    wakeUp() {\n        if (this._disposed) {\n            return;\n        }\n        this.animation.start();\n        // Reset the frame count.\n        this._stillFrameAccum = 0;\n    }\n\n    /**\n     * Refresh hover in next frame\n     */\n    refreshHover() {\n        this._needsRefreshHover = true;\n    }\n\n    /**\n     * Refresh hover immediately\n     */\n    refreshHoverImmediately() {\n        if (this._disposed) {\n            return;\n        }\n        this._needsRefreshHover = false;\n        if (this.painter.refreshHover && this.painter.getType() === 'canvas') {\n            this.painter.refreshHover();\n        }\n    }\n\n    /**\n     * Resize the canvas.\n     * Should be invoked when container size is changed\n     */\n    resize(opts?: {\n        width?: number| string\n        height?: number | string\n    }) {\n        if (this._disposed) {\n            return;\n        }\n        opts = opts || {};\n        this.painter.resize(opts.width, opts.height);\n        this.handler.resize();\n    }\n\n    /**\n     * Stop and clear all animation immediately\n     */\n    clearAnimation() {\n        if (this._disposed) {\n            return;\n        }\n        this.animation.clear();\n    }\n\n    /**\n     * Get container width\n     */\n    getWidth(): number | undefined {\n        if (this._disposed) {\n            return;\n        }\n        return this.painter.getWidth();\n    }\n\n    /**\n     * Get container height\n     */\n    getHeight(): number | undefined {\n        if (this._disposed) {\n            return;\n        }\n        return this.painter.getHeight();\n    }\n\n    /**\n     * Set default cursor\n     * @param cursorStyle='default' 例如 crosshair\n     */\n    setCursorStyle(cursorStyle: string) {\n        if (this._disposed) {\n            return;\n        }\n        this.handler.setCursorStyle(cursorStyle);\n    }\n\n    /**\n     * Find hovered element\n     * @param x\n     * @param y\n     * @return {target, topTarget}\n     */\n    findHover(x: number, y: number): {\n        target: Displayable\n        topTarget: Displayable\n    } | undefined {\n        if (this._disposed) {\n            return;\n        }\n        return this.handler.findHover(x, y);\n    }\n\n    on(eventName: ElementEventName, eventHandler: ElementEventCallback, context?: Ctx): this\n    // eslint-disable-next-line max-len\n    on(eventName: string, eventHandler: WithThisType, unknown extends Ctx ? ZRenderType : Ctx>, context?: Ctx): this\n    // eslint-disable-next-line max-len\n    on(eventName: string, eventHandler: (...args: any) => any, context?: Ctx): this {\n        if (!this._disposed) {\n            this.handler.on(eventName, eventHandler, context);\n        }\n        return this;\n    }\n\n    /**\n     * Unbind event\n     * @param eventName Event name\n     * @param eventHandler Handler function\n     */\n    // eslint-disable-next-line max-len\n    off(eventName?: string, eventHandler?: EventCallback) {\n        if (this._disposed) {\n            return;\n        }\n        this.handler.off(eventName, eventHandler);\n    }\n\n    /**\n     * Trigger event manually\n     *\n     * @param eventName Event name\n     * @param event Event object\n     */\n    trigger(eventName: string, event?: unknown) {\n        if (this._disposed) {\n            return;\n        }\n        this.handler.trigger(eventName, event);\n    }\n\n\n    /**\n     * Clear all objects and the canvas.\n     */\n    clear() {\n        if (this._disposed) {\n            return;\n        }\n        const roots = this.storage.getRoots();\n        for (let i = 0; i < roots.length; i++) {\n            if (roots[i] instanceof Group) {\n                roots[i].removeSelfFromZr(this);\n            }\n        }\n        this.storage.delAllRoots();\n        this.painter.clear();\n    }\n\n    /**\n     * Dispose self.\n     */\n    dispose() {\n        if (this._disposed) {\n            return;\n        }\n\n        this.animation.stop();\n\n        this.clear();\n        this.storage.dispose();\n        this.painter.dispose();\n        this.handler.dispose();\n\n        this.animation =\n        this.storage =\n        this.painter =\n        this.handler = null;\n\n        this._disposed = true;\n\n        delInstance(this.id);\n    }\n}\n\n\nexport interface ZRenderInitOpt {\n    renderer?: string   // 'canvas' or 'svg\n    devicePixelRatio?: number\n    width?: number | string // 10, 10px, 'auto'\n    height?: number | string\n    useDirtyRect?: boolean\n    useCoarsePointer?: 'auto' | boolean\n    pointerSize?: number\n    ssr?: boolean   // If enable ssr mode.\n}\n\n/**\n * Initializing a zrender instance\n *\n * @param dom Not necessary if using SSR painter like svg-ssr\n */\nexport function init(dom?: HTMLElement | null, opts?: ZRenderInitOpt) {\n    const zr = new ZRender(zrUtil.guid(), dom, opts);\n    instances[zr.id] = zr;\n    return zr;\n}\n\n/**\n * Dispose zrender instance\n */\nexport function dispose(zr: ZRender) {\n    zr.dispose();\n}\n\n/**\n * Dispose all zrender instances\n */\nexport function disposeAll() {\n    for (let key in instances) {\n        if (instances.hasOwnProperty(key)) {\n            instances[key].dispose();\n        }\n    }\n    instances = {};\n}\n\n/**\n * Get zrender instance by id\n */\nexport function getInstance(id: number): ZRender {\n    return instances[id];\n}\n\nexport function registerPainter(name: string, Ctor: PainterBaseCtor) {\n    painterCtors[name] = Ctor;\n}\n\nexport type ElementSSRData = zrUtil.HashMap;\nexport type ElementSSRDataGetter = (el: Element) => zrUtil.HashMap;\n\nlet ssrDataGetter: ElementSSRDataGetter;\n\nexport function getElementSSRData(el: Element): ElementSSRData {\n    if (typeof ssrDataGetter === 'function') {\n        return ssrDataGetter(el);\n    }\n}\n\nexport function registerSSRDataGetter(getter: ElementSSRDataGetter) {\n    ssrDataGetter = getter;\n}\n\n/**\n * @type {string}\n */\nexport const version = '5.6.1';\n\n\nexport interface ZRenderType extends ZRender {};","/**\r\n * Base class of all displayable graphic objects\r\n */\r\n\r\nimport Element, {ElementProps, ElementStatePropNames, ElementAnimateConfig, ElementCommonState} from '../Element';\r\nimport BoundingRect from '../core/BoundingRect';\r\nimport { PropType, Dictionary, MapToType } from '../core/types';\r\nimport Path from './Path';\r\nimport { keys, extend, createObject } from '../core/util';\r\nimport Animator from '../animation/Animator';\r\nimport { REDRAW_BIT, STYLE_CHANGED_BIT } from './constants';\r\n\r\n// type CalculateTextPositionResult = ReturnType\r\n\r\nconst STYLE_MAGIC_KEY = '__zr_style_' + Math.round((Math.random() * 10));\r\n\r\nexport interface CommonStyleProps {\r\n    shadowBlur?: number\r\n    shadowOffsetX?: number\r\n    shadowOffsetY?: number\r\n    shadowColor?: string\r\n\r\n    opacity?: number\r\n    /**\r\n     * https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation\r\n     */\r\n    blend?: string\r\n}\r\n\r\nexport const DEFAULT_COMMON_STYLE: CommonStyleProps = {\r\n    shadowBlur: 0,\r\n    shadowOffsetX: 0,\r\n    shadowOffsetY: 0,\r\n    shadowColor: '#000',\r\n    opacity: 1,\r\n    blend: 'source-over'\r\n};\r\n\r\nexport const DEFAULT_COMMON_ANIMATION_PROPS: MapToType = {\r\n    style: {\r\n        shadowBlur: true,\r\n        shadowOffsetX: true,\r\n        shadowOffsetY: true,\r\n        shadowColor: true,\r\n        opacity: true\r\n    }\r\n };\r\n\r\n(DEFAULT_COMMON_STYLE as any)[STYLE_MAGIC_KEY] = true;\r\n\r\nexport interface DisplayableProps extends ElementProps {\r\n    style?: Dictionary\r\n\r\n    zlevel?: number\r\n    z?: number\r\n    z2?: number\r\n\r\n    culling?: boolean\r\n\r\n    // TODO list all cursors\r\n    cursor?: string\r\n\r\n    rectHover?: boolean\r\n\r\n    progressive?: boolean\r\n\r\n    incremental?: boolean\r\n\r\n    ignoreCoarsePointer?: boolean\r\n\r\n    batch?: boolean\r\n    invisible?: boolean\r\n}\r\n\r\ntype DisplayableKey = keyof DisplayableProps\r\ntype DisplayablePropertyType = PropType\r\n\r\nexport type DisplayableStatePropNames = ElementStatePropNames | 'style' | 'z' | 'z2' | 'invisible';\r\nexport type DisplayableState = Pick & ElementCommonState;\r\n\r\nconst PRIMARY_STATES_KEYS = ['z', 'z2', 'invisible'] as const;\r\nconst PRIMARY_STATES_KEYS_IN_HOVER_LAYER = ['invisible'] as const;\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\ninterface Displayable {\r\n    animate(key?: '', loop?: boolean): Animator\r\n    animate(key: 'style', loop?: boolean): Animator\r\n\r\n    getState(stateName: string): DisplayableState\r\n    ensureState(stateName: string): DisplayableState\r\n\r\n    states: Dictionary\r\n    stateProxy: (stateName: string) => DisplayableState\r\n}\r\n\r\nclass Displayable extends Element {\r\n\r\n    /**\r\n     * Whether the displayable object is visible. when it is true, the displayable object\r\n     * is not drawn, but the mouse event can still trigger the object.\r\n     */\r\n    invisible: boolean\r\n\r\n    z: number\r\n\r\n    z2: number\r\n\r\n    /**\r\n     * The z level determines the displayable object can be drawn in which layer canvas.\r\n     */\r\n    zlevel: number\r\n\r\n    /**\r\n     * If enable culling\r\n     */\r\n    culling: boolean\r\n\r\n    /**\r\n     * Mouse cursor when hovered\r\n     */\r\n    cursor: string\r\n\r\n    /**\r\n     * If hover area is bounding rect\r\n     */\r\n    rectHover: boolean\r\n    /**\r\n     * For increamental rendering\r\n     */\r\n    incremental: boolean\r\n\r\n    /**\r\n     * Never increase to target size\r\n     */\r\n    ignoreCoarsePointer?: boolean\r\n\r\n    style: Dictionary\r\n\r\n    protected _normalState: DisplayableState\r\n\r\n    protected _rect: BoundingRect\r\n    protected _paintRect: BoundingRect\r\n    protected _prevPaintRect: BoundingRect\r\n\r\n    dirtyRectTolerance: number\r\n\r\n    /************* Properties will be inejected in other modules. *******************/\r\n\r\n    // @deprecated.\r\n    useHoverLayer?: boolean\r\n\r\n    __hoverStyle?: CommonStyleProps\r\n\r\n    // TODO use WeakMap?\r\n\r\n    // Shapes for cascade clipping.\r\n    // Can only be `null`/`undefined` or an non-empty array, MUST NOT be an empty array.\r\n    // because it is easy to only using null to check whether clipPaths changed.\r\n    __clipPaths?: Path[]\r\n\r\n    // FOR CANVAS PAINTER\r\n    __canvasFillGradient: CanvasGradient\r\n    __canvasStrokeGradient: CanvasGradient\r\n    __canvasFillPattern: CanvasPattern\r\n    __canvasStrokePattern: CanvasPattern\r\n\r\n    // FOR SVG PAINTER\r\n    __svgEl: SVGElement\r\n\r\n    constructor(props?: Props) {\r\n        super(props);\r\n    }\r\n\r\n    protected _init(props?: Props) {\r\n        // Init default properties\r\n        const keysArr = keys(props);\r\n        for (let i = 0; i < keysArr.length; i++) {\r\n            const key = keysArr[i];\r\n            if (key === 'style') {\r\n                this.useStyle(props[key] as Props['style']);\r\n            }\r\n            else {\r\n                super.attrKV(key as any, props[key]);\r\n            }\r\n        }\r\n        // Give a empty style\r\n        if (!this.style) {\r\n            this.useStyle({});\r\n        }\r\n    }\r\n\r\n    // Hook provided to developers.\r\n    beforeBrush() {}\r\n    afterBrush() {}\r\n\r\n    // Hook provided to inherited classes.\r\n    // Executed between beforeBrush / afterBrush\r\n    innerBeforeBrush() {}\r\n    innerAfterBrush() {}\r\n\r\n    shouldBePainted(\r\n        viewWidth: number,\r\n        viewHeight: number,\r\n        considerClipPath: boolean,\r\n        considerAncestors: boolean\r\n    ) {\r\n        const m = this.transform;\r\n        if (\r\n            this.ignore\r\n            // Ignore invisible element\r\n            || this.invisible\r\n            // Ignore transparent element\r\n            || this.style.opacity === 0\r\n            // Ignore culled element\r\n            || (this.culling\r\n                && isDisplayableCulled(this, viewWidth, viewHeight)\r\n            )\r\n            // Ignore scale 0 element, in some environment like node-canvas\r\n            // Draw a scale 0 element can cause all following draw wrong\r\n            // And setTransform with scale 0 will cause set back transform failed.\r\n            || (m && !m[0] && !m[3])\r\n        ) {\r\n            return false;\r\n        }\r\n\r\n        if (considerClipPath && this.__clipPaths) {\r\n            for (let i = 0; i < this.__clipPaths.length; ++i) {\r\n                if (this.__clipPaths[i].isZeroArea()) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n\r\n        if (considerAncestors && this.parent) {\r\n            let parent = this.parent;\r\n            while (parent) {\r\n                if (parent.ignore) {\r\n                    return false;\r\n                }\r\n                parent = parent.parent;\r\n            }\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    /**\r\n     * If displayable element contain coord x, y\r\n     */\r\n    contain(x: number, y: number) {\r\n        return this.rectContain(x, y);\r\n    }\r\n\r\n    traverse(\r\n        cb: (this: Context, el: this) => void,\r\n        context?: Context\r\n    ) {\r\n        cb.call(context, this);\r\n    }\r\n\r\n    /**\r\n     * If bounding rect of element contain coord x, y\r\n     */\r\n    rectContain(x: number, y: number) {\r\n        const coord = this.transformCoordToLocal(x, y);\r\n        const rect = this.getBoundingRect();\r\n        return rect.contain(coord[0], coord[1]);\r\n    }\r\n\r\n    getPaintRect(): BoundingRect {\r\n        let rect = this._paintRect;\r\n        if (!this._paintRect || this.__dirty) {\r\n            const transform = this.transform;\r\n            const elRect = this.getBoundingRect();\r\n\r\n            const style = this.style;\r\n            const shadowSize = style.shadowBlur || 0;\r\n            const shadowOffsetX = style.shadowOffsetX || 0;\r\n            const shadowOffsetY = style.shadowOffsetY || 0;\r\n\r\n            rect = this._paintRect || (this._paintRect = new BoundingRect(0, 0, 0, 0));\r\n            if (transform) {\r\n                BoundingRect.applyTransform(rect, elRect, transform);\r\n            }\r\n            else {\r\n                rect.copy(elRect);\r\n            }\r\n\r\n            if (shadowSize || shadowOffsetX || shadowOffsetY) {\r\n                rect.width += shadowSize * 2 + Math.abs(shadowOffsetX);\r\n                rect.height += shadowSize * 2 + Math.abs(shadowOffsetY);\r\n                rect.x = Math.min(rect.x, rect.x + shadowOffsetX - shadowSize);\r\n                rect.y = Math.min(rect.y, rect.y + shadowOffsetY - shadowSize);\r\n\r\n            }\r\n\r\n            // For the accuracy tolerance of text height or line joint point\r\n            const tolerance = this.dirtyRectTolerance;\r\n            if (!rect.isZero()) {\r\n                rect.x = Math.floor(rect.x - tolerance);\r\n                rect.y = Math.floor(rect.y - tolerance);\r\n                rect.width = Math.ceil(rect.width + 1 + tolerance * 2);\r\n                rect.height = Math.ceil(rect.height + 1 + tolerance * 2);\r\n            }\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    setPrevPaintRect(paintRect: BoundingRect) {\r\n        if (paintRect) {\r\n            this._prevPaintRect = this._prevPaintRect || new BoundingRect(0, 0, 0, 0);\r\n            this._prevPaintRect.copy(paintRect);\r\n        }\r\n        else {\r\n            this._prevPaintRect = null;\r\n        }\r\n    }\r\n\r\n    getPrevPaintRect(): BoundingRect {\r\n        return this._prevPaintRect;\r\n    }\r\n\r\n    /**\r\n     * Alias for animate('style')\r\n     * @param loop\r\n     */\r\n    animateStyle(loop: boolean) {\r\n        return this.animate('style', loop);\r\n    }\r\n\r\n    // Override updateDuringAnimation\r\n    updateDuringAnimation(targetKey: string) {\r\n        if (targetKey === 'style') {\r\n            this.dirtyStyle();\r\n        }\r\n        else {\r\n            this.markRedraw();\r\n        }\r\n    }\r\n\r\n    attrKV(key: DisplayableKey, value: DisplayablePropertyType) {\r\n        if (key !== 'style') {\r\n            super.attrKV(key as keyof DisplayableProps, value);\r\n        }\r\n        else {\r\n            if (!this.style) {\r\n                this.useStyle(value as Dictionary);\r\n            }\r\n            else {\r\n                this.setStyle(value as Dictionary);\r\n            }\r\n        }\r\n    }\r\n\r\n    setStyle(obj: Props['style']): this\r\n    setStyle(obj: T, value: Props['style'][T]): this\r\n    setStyle(keyOrObj: keyof Props['style'] | Props['style'], value?: unknown): this {\r\n        if (typeof keyOrObj === 'string') {\r\n            this.style[keyOrObj] = value;\r\n        }\r\n        else {\r\n            extend(this.style, keyOrObj as Props['style']);\r\n        }\r\n        this.dirtyStyle();\r\n        return this;\r\n    }\r\n\r\n    // getDefaultStyleValue(key: T): Props['style'][T] {\r\n    //     // Default value is on the prototype.\r\n    //     return this.style.prototype[key];\r\n    // }\r\n\r\n    dirtyStyle(notRedraw?: boolean) {\r\n        if (!notRedraw) {\r\n            this.markRedraw();\r\n        }\r\n        this.__dirty |= STYLE_CHANGED_BIT;\r\n        // Clear bounding rect.\r\n        if (this._rect) {\r\n            this._rect = null;\r\n        }\r\n    }\r\n\r\n    dirty() {\r\n        this.dirtyStyle();\r\n    }\r\n\r\n    /**\r\n     * Is style changed. Used with dirtyStyle.\r\n     */\r\n    styleChanged() {\r\n        return !!(this.__dirty & STYLE_CHANGED_BIT);\r\n    }\r\n\r\n    /**\r\n     * Mark style updated. Only useful when style is used for caching. Like in the text.\r\n     */\r\n    styleUpdated() {\r\n        this.__dirty &= ~STYLE_CHANGED_BIT;\r\n    }\r\n\r\n    /**\r\n     * Create a style object with default values in it's prototype.\r\n     */\r\n    createStyle(obj?: Props['style']) {\r\n        return createObject(DEFAULT_COMMON_STYLE, obj);\r\n    }\r\n\r\n    /**\r\n     * Replace style property.\r\n     * It will create a new style if given obj is not a valid style object.\r\n     */\r\n     // PENDING should not createStyle if it's an style object.\r\n    useStyle(obj: Props['style']) {\r\n        if (!obj[STYLE_MAGIC_KEY]) {\r\n            obj = this.createStyle(obj);\r\n        }\r\n        if (this.__inHover) {\r\n            this.__hoverStyle = obj;    // Not affect exists style.\r\n        }\r\n        else {\r\n            this.style = obj;\r\n        }\r\n        this.dirtyStyle();\r\n    }\r\n\r\n    /**\r\n     * Determine if an object is a valid style object.\r\n     * Which means it is created by `createStyle.`\r\n     *\r\n     * A valid style object will have all default values in it's prototype.\r\n     * To avoid get null/undefined values.\r\n     */\r\n    isStyleObject(obj: Props['style']) {\r\n        return obj[STYLE_MAGIC_KEY];\r\n    }\r\n\r\n    protected _innerSaveToNormal(toState: DisplayableState) {\r\n        super._innerSaveToNormal(toState);\r\n\r\n        const normalState = this._normalState;\r\n        if (toState.style && !normalState.style) {\r\n            // Clone style object.\r\n            // TODO: Only save changed style.\r\n            normalState.style = this._mergeStyle(this.createStyle(), this.style);\r\n        }\r\n\r\n        this._savePrimaryToNormal(toState, normalState, PRIMARY_STATES_KEYS);\r\n    }\r\n\r\n    protected _applyStateObj(\r\n        stateName: string,\r\n        state: DisplayableState,\r\n        normalState: DisplayableState,\r\n        keepCurrentStates: boolean,\r\n        transition: boolean,\r\n        animationCfg: ElementAnimateConfig\r\n    ) {\r\n        super._applyStateObj(stateName, state, normalState, keepCurrentStates, transition, animationCfg);\r\n\r\n        const needsRestoreToNormal = !(state && keepCurrentStates);\r\n        let targetStyle: Props['style'];\r\n        if (state && state.style) {\r\n            // Only animate changed properties.\r\n            if (transition) {\r\n                if (keepCurrentStates) {\r\n                    targetStyle = state.style;\r\n                }\r\n                else {\r\n                    targetStyle = this._mergeStyle(this.createStyle(), normalState.style);\r\n                    this._mergeStyle(targetStyle, state.style);\r\n                }\r\n            }\r\n            else {\r\n                targetStyle = this._mergeStyle(\r\n                    this.createStyle(),\r\n                    keepCurrentStates ? this.style : normalState.style\r\n                );\r\n                this._mergeStyle(targetStyle, state.style);\r\n            }\r\n        }\r\n        else if (needsRestoreToNormal) {\r\n            targetStyle = normalState.style;\r\n        }\r\n\r\n        if (targetStyle) {\r\n            if (transition) {\r\n                // Clone a new style. Not affect the original one.\r\n                const sourceStyle = this.style;\r\n\r\n                this.style = this.createStyle(needsRestoreToNormal ? {} : sourceStyle);\r\n                // const sourceStyle = this.style = this.createStyle(this.style);\r\n\r\n                if (needsRestoreToNormal) {\r\n                    const changedKeys = keys(sourceStyle);\r\n                    for (let i = 0; i < changedKeys.length; i++) {\r\n                        const key = changedKeys[i];\r\n                        if (key in targetStyle) {   // Not use `key == null` because == null may means no stroke/fill.\r\n                            // Pick out from prototype. Or the property won't be animated.\r\n                            (targetStyle as any)[key] = targetStyle[key];\r\n                            // Omit the property has no default value.\r\n                            (this.style as any)[key] = sourceStyle[key];\r\n                        }\r\n                    }\r\n                }\r\n\r\n                // If states is switched twice in ONE FRAME, for example:\r\n                // one property(for example shadowBlur) changed from default value to a specifed value,\r\n                // then switched back in immediately. this.style may don't set this property yet when switching back.\r\n                // It won't treat it as an changed property when switching back. And it won't be animated.\r\n                // So here we make sure the properties will be animated from default value to a specifed value are set.\r\n                const targetKeys = keys(targetStyle);\r\n                for (let i = 0; i < targetKeys.length; i++) {\r\n                    const key = targetKeys[i];\r\n                    this.style[key] = this.style[key];\r\n                }\r\n\r\n                this._transitionState(stateName, {\r\n                    style: targetStyle\r\n                } as Props, animationCfg, this.getAnimationStyleProps() as MapToType);\r\n            }\r\n            else {\r\n                this.useStyle(targetStyle);\r\n            }\r\n        }\r\n\r\n        // Don't change z, z2 for element moved into hover layer.\r\n        // It's not necessary and will cause paint list order changed.\r\n        const statesKeys = this.__inHover ? PRIMARY_STATES_KEYS_IN_HOVER_LAYER : PRIMARY_STATES_KEYS;\r\n        for (let i = 0; i < statesKeys.length; i++) {\r\n            let key = statesKeys[i];\r\n            if (state && state[key] != null) {\r\n                // Replace if it exist in target state\r\n                (this as any)[key] = state[key];\r\n            }\r\n            else if (needsRestoreToNormal) {\r\n                // Restore to normal state\r\n                if (normalState[key] != null) {\r\n                    (this as any)[key] = normalState[key];\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected _mergeStates(states: DisplayableState[]) {\r\n        const mergedState = super._mergeStates(states) as DisplayableState;\r\n        let mergedStyle: Props['style'];\r\n        for (let i = 0; i < states.length; i++) {\r\n            const state = states[i];\r\n            if (state.style) {\r\n                mergedStyle = mergedStyle || {};\r\n                this._mergeStyle(mergedStyle, state.style);\r\n            }\r\n        }\r\n        if (mergedStyle) {\r\n            mergedState.style = mergedStyle;\r\n        }\r\n        return mergedState;\r\n    }\r\n\r\n    protected _mergeStyle(\r\n        targetStyle: CommonStyleProps,\r\n        sourceStyle: CommonStyleProps\r\n    ) {\r\n        extend(targetStyle, sourceStyle);\r\n        return targetStyle;\r\n    }\r\n\r\n    getAnimationStyleProps() {\r\n        return DEFAULT_COMMON_ANIMATION_PROPS;\r\n    }\r\n\r\n    /**\r\n     * The string value of `textPosition` needs to be calculated to a real postion.\r\n     * For example, `'inside'` is calculated to `[rect.width/2, rect.height/2]`\r\n     * by default. See `contain/text.js#calculateTextPosition` for more details.\r\n     * But some coutom shapes like \"pin\", \"flag\" have center that is not exactly\r\n     * `[width/2, height/2]`. So we provide this hook to customize the calculation\r\n     * for those shapes. It will be called if the `style.textPosition` is a string.\r\n     * @param out Prepared out object. If not provided, this method should\r\n     *        be responsible for creating one.\r\n     * @param style\r\n     * @param rect {x, y, width, height}\r\n     * @return out The same as the input out.\r\n     *         {\r\n     *             x: number. mandatory.\r\n     *             y: number. mandatory.\r\n     *             textAlign: string. optional. use style.textAlign by default.\r\n     *             textVerticalAlign: string. optional. use style.textVerticalAlign by default.\r\n     *         }\r\n     */\r\n    // calculateTextPosition: (out: CalculateTextPositionResult, style: Dictionary, rect: RectLike) => CalculateTextPositionResult\r\n\r\n    protected static initDefaultProps = (function () {\r\n        const dispProto = Displayable.prototype;\r\n        dispProto.type = 'displayable';\r\n        dispProto.invisible = false;\r\n        dispProto.z = 0;\r\n        dispProto.z2 = 0;\r\n        dispProto.zlevel = 0;\r\n        dispProto.culling = false;\r\n        dispProto.cursor = 'pointer';\r\n        dispProto.rectHover = false;\r\n        dispProto.incremental = false;\r\n        dispProto._rect = null;\r\n        dispProto.dirtyRectTolerance = 0;\r\n\r\n        dispProto.__dirty = REDRAW_BIT | STYLE_CHANGED_BIT;\r\n    })()\r\n}\r\n\r\nconst tmpRect = new BoundingRect(0, 0, 0, 0);\r\nconst viewRect = new BoundingRect(0, 0, 0, 0);\r\nfunction isDisplayableCulled(el: Displayable, width: number, height: number) {\r\n    tmpRect.copy(el.getBoundingRect());\r\n    if (el.transform) {\r\n        tmpRect.applyTransform(el.transform);\r\n    }\r\n    viewRect.width = width;\r\n    viewRect.height = height;\r\n    return !tmpRect.intersect(viewRect);\r\n}\r\n\r\nexport default Displayable;","/**\r\n * @author Yi Shen(https://github.com/pissang)\r\n */\r\n\r\nimport * as vec2 from './vector';\r\nimport * as curve from './curve';\r\n\r\nconst mathMin = Math.min;\r\nconst mathMax = Math.max;\r\nconst mathSin = Math.sin;\r\nconst mathCos = Math.cos;\r\nconst PI2 = Math.PI * 2;\r\n\r\nconst start = vec2.create();\r\nconst end = vec2.create();\r\nconst extremity = vec2.create();\r\n\r\n/**\r\n * 从顶点数组中计算出最小包围盒,写入`min`和`max`中\r\n */\r\nexport function fromPoints(points: ArrayLike[], min: vec2.VectorArray, max: vec2.VectorArray) {\r\n    if (points.length === 0) {\r\n        return;\r\n    }\r\n    let p = points[0];\r\n    let left = p[0];\r\n    let right = p[0];\r\n    let top = p[1];\r\n    let bottom = p[1];\r\n\r\n    for (let i = 1; i < points.length; i++) {\r\n        p = points[i];\r\n        left = mathMin(left, p[0]);\r\n        right = mathMax(right, p[0]);\r\n        top = mathMin(top, p[1]);\r\n        bottom = mathMax(bottom, p[1]);\r\n    }\r\n\r\n    min[0] = left;\r\n    min[1] = top;\r\n    max[0] = right;\r\n    max[1] = bottom;\r\n}\r\n\r\nexport function fromLine(\r\n    x0: number, y0: number, x1: number, y1: number,\r\n    min: vec2.VectorArray, max: vec2.VectorArray\r\n) {\r\n    min[0] = mathMin(x0, x1);\r\n    min[1] = mathMin(y0, y1);\r\n    max[0] = mathMax(x0, x1);\r\n    max[1] = mathMax(y0, y1);\r\n}\r\n\r\nconst xDim: number[] = [];\r\nconst yDim: number[] = [];\r\n/**\r\n * 从三阶贝塞尔曲线(p0, p1, p2, p3)中计算出最小包围盒,写入`min`和`max`中\r\n */\r\nexport function fromCubic(\r\n    x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, x3: number, y3: number,\r\n    min: vec2.VectorArray, max: vec2.VectorArray\r\n) {\r\n    const cubicExtrema = curve.cubicExtrema;\r\n    const cubicAt = curve.cubicAt;\r\n    let n = cubicExtrema(x0, x1, x2, x3, xDim);\r\n    min[0] = Infinity;\r\n    min[1] = Infinity;\r\n    max[0] = -Infinity;\r\n    max[1] = -Infinity;\r\n\r\n    for (let i = 0; i < n; i++) {\r\n        const x = cubicAt(x0, x1, x2, x3, xDim[i]);\r\n        min[0] = mathMin(x, min[0]);\r\n        max[0] = mathMax(x, max[0]);\r\n    }\r\n    n = cubicExtrema(y0, y1, y2, y3, yDim);\r\n    for (let i = 0; i < n; i++) {\r\n        const y = cubicAt(y0, y1, y2, y3, yDim[i]);\r\n        min[1] = mathMin(y, min[1]);\r\n        max[1] = mathMax(y, max[1]);\r\n    }\r\n\r\n    min[0] = mathMin(x0, min[0]);\r\n    max[0] = mathMax(x0, max[0]);\r\n    min[0] = mathMin(x3, min[0]);\r\n    max[0] = mathMax(x3, max[0]);\r\n\r\n    min[1] = mathMin(y0, min[1]);\r\n    max[1] = mathMax(y0, max[1]);\r\n    min[1] = mathMin(y3, min[1]);\r\n    max[1] = mathMax(y3, max[1]);\r\n}\r\n\r\n/**\r\n * 从二阶贝塞尔曲线(p0, p1, p2)中计算出最小包围盒,写入`min`和`max`中\r\n */\r\nexport function fromQuadratic(\r\n    x0: number, y0: number, x1: number, y1: number, x2: number, y2: number,\r\n    min: vec2.VectorArray, max: vec2.VectorArray\r\n) {\r\n    const quadraticExtremum = curve.quadraticExtremum;\r\n    const quadraticAt = curve.quadraticAt;\r\n    // Find extremities, where derivative in x dim or y dim is zero\r\n    const tx =\r\n        mathMax(\r\n            mathMin(quadraticExtremum(x0, x1, x2), 1), 0\r\n        );\r\n    const ty =\r\n        mathMax(\r\n            mathMin(quadraticExtremum(y0, y1, y2), 1), 0\r\n        );\r\n\r\n    const x = quadraticAt(x0, x1, x2, tx);\r\n    const y = quadraticAt(y0, y1, y2, ty);\r\n\r\n    min[0] = mathMin(x0, x2, x);\r\n    min[1] = mathMin(y0, y2, y);\r\n    max[0] = mathMax(x0, x2, x);\r\n    max[1] = mathMax(y0, y2, y);\r\n}\r\n\r\n/**\r\n * 从圆弧中计算出最小包围盒,写入`min`和`max`中\r\n */\r\nexport function fromArc(\r\n    x: number, y: number, rx: number, ry: number, startAngle: number, endAngle: number, anticlockwise: boolean,\r\n    min: vec2.VectorArray, max: vec2.VectorArray\r\n) {\r\n    const vec2Min = vec2.min;\r\n    const vec2Max = vec2.max;\r\n\r\n    const diff = Math.abs(startAngle - endAngle);\r\n\r\n\r\n    if (diff % PI2 < 1e-4 && diff > 1e-4) {\r\n        // Is a circle\r\n        min[0] = x - rx;\r\n        min[1] = y - ry;\r\n        max[0] = x + rx;\r\n        max[1] = y + ry;\r\n        return;\r\n    }\r\n\r\n    start[0] = mathCos(startAngle) * rx + x;\r\n    start[1] = mathSin(startAngle) * ry + y;\r\n\r\n    end[0] = mathCos(endAngle) * rx + x;\r\n    end[1] = mathSin(endAngle) * ry + y;\r\n\r\n    vec2Min(min, start, end);\r\n    vec2Max(max, start, end);\r\n\r\n    // Thresh to [0, Math.PI * 2]\r\n    startAngle = startAngle % (PI2);\r\n    if (startAngle < 0) {\r\n        startAngle = startAngle + PI2;\r\n    }\r\n    endAngle = endAngle % (PI2);\r\n    if (endAngle < 0) {\r\n        endAngle = endAngle + PI2;\r\n    }\r\n\r\n    if (startAngle > endAngle && !anticlockwise) {\r\n        endAngle += PI2;\r\n    }\r\n    else if (startAngle < endAngle && anticlockwise) {\r\n        startAngle += PI2;\r\n    }\r\n    if (anticlockwise) {\r\n        const tmp = endAngle;\r\n        endAngle = startAngle;\r\n        startAngle = tmp;\r\n    }\r\n\r\n    // const number = 0;\r\n    // const step = (anticlockwise ? -Math.PI : Math.PI) / 2;\r\n    for (let angle = 0; angle < endAngle; angle += Math.PI / 2) {\r\n        if (angle > startAngle) {\r\n            extremity[0] = mathCos(angle) * rx + x;\r\n            extremity[1] = mathSin(angle) * ry + y;\r\n\r\n            vec2Min(min, extremity, min);\r\n            vec2Max(max, extremity, max);\r\n        }\r\n    }\r\n}\r\n","/**\n * Path 代理,可以在`buildPath`中用于替代`ctx`, 会保存每个path操作的命令到pathCommands属性中\n * 可以用于 isInsidePath 判断以及获取boundingRect\n */\n\n// TODO getTotalLength, getPointAtLength, arcTo\n\n/* global Float32Array */\n\nimport * as vec2 from './vector';\nimport BoundingRect from './BoundingRect';\nimport {devicePixelRatio as dpr} from '../config';\nimport { fromLine, fromCubic, fromQuadratic, fromArc } from './bbox';\nimport { cubicLength, cubicSubdivide, quadraticLength, quadraticSubdivide } from './curve';\n\nconst CMD = {\n    M: 1,\n    L: 2,\n    C: 3,\n    Q: 4,\n    A: 5,\n    Z: 6,\n    // Rect\n    R: 7\n};\n\n// const CMD_MEM_SIZE = {\n//     M: 3,\n//     L: 3,\n//     C: 7,\n//     Q: 5,\n//     A: 9,\n//     R: 5,\n//     Z: 1\n// };\n\ninterface ExtendedCanvasRenderingContext2D extends CanvasRenderingContext2D {\n    dpr?: number\n}\n\nconst tmpOutX: number[] = [];\nconst tmpOutY: number[] = [];\n\nconst min: number[] = [];\nconst max: number[] = [];\nconst min2: number[] = [];\nconst max2: number[] = [];\nconst mathMin = Math.min;\nconst mathMax = Math.max;\nconst mathCos = Math.cos;\nconst mathSin = Math.sin;\nconst mathAbs = Math.abs;\n\nconst PI = Math.PI;\nconst PI2 = PI * 2;\n\nconst hasTypedArray = typeof Float32Array !== 'undefined';\n\nconst tmpAngles: number[] = [];\n\nfunction modPI2(radian: number) {\n    // It's much more stable to mod N instedof PI\n    const n = Math.round(radian / PI * 1e8) / 1e8;\n    return (n % 2) * PI;\n}\n/**\n * Normalize start and end angles.\n * startAngle will be normalized to 0 ~ PI*2\n * sweepAngle(endAngle - startAngle) will be normalized to 0 ~ PI*2 if clockwise.\n * -PI*2 ~ 0 if anticlockwise.\n */\nexport function normalizeArcAngles(angles: number[], anticlockwise: boolean): void {\n    let newStartAngle = modPI2(angles[0]);\n    if (newStartAngle < 0) {\n        // Normlize to 0 - PI2\n        newStartAngle += PI2;\n    }\n\n    let delta = newStartAngle - angles[0];\n    let newEndAngle = angles[1];\n    newEndAngle += delta;\n\n    // https://github.com/chromium/chromium/blob/c20d681c9c067c4e15bb1408f17114b9e8cba294/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc#L184\n    // Is circle\n    if (!anticlockwise && newEndAngle - newStartAngle >= PI2) {\n        newEndAngle = newStartAngle + PI2;\n    }\n    else if (anticlockwise && newStartAngle - newEndAngle >= PI2) {\n        newEndAngle = newStartAngle - PI2;\n    }\n    // Make startAngle < endAngle when clockwise, otherwise endAngle < startAngle.\n    // The sweep angle can never been larger than P2.\n    else if (!anticlockwise && newStartAngle > newEndAngle) {\n        newEndAngle = newStartAngle + (PI2 - modPI2(newStartAngle - newEndAngle));\n    }\n    else if (anticlockwise && newStartAngle < newEndAngle) {\n        newEndAngle = newStartAngle - (PI2 - modPI2(newEndAngle - newStartAngle));\n    }\n\n    angles[0] = newStartAngle;\n    angles[1] = newEndAngle;\n}\n\n\nexport default class PathProxy {\n\n    dpr = 1\n\n    data: number[] | Float32Array\n\n    /**\n     * Version is for tracking if the path has been changed.\n     */\n    private _version: number\n\n    /**\n     * If save path data.\n     */\n    private _saveData: boolean\n\n    /**\n     * If the line segment is too small to draw. It will be added to the pending pt.\n     * It will be added if the subpath needs to be finished before stroke, fill, or starting a new subpath.\n     */\n    private _pendingPtX: number;\n    private _pendingPtY: number;\n    // Distance of pending pt to previous point.\n    // 0 if there is no pending point.\n    // Only update the pending pt when distance is larger.\n    private _pendingPtDist: number;\n\n    private _ctx: ExtendedCanvasRenderingContext2D\n\n    private _xi = 0\n    private _yi = 0\n\n    private _x0 = 0\n    private _y0 = 0\n\n    private _len = 0\n\n    // Calculating path len and seg len.\n    private _pathSegLen: number[]\n    private _pathLen: number\n    // Unit x, Unit y. Provide for avoiding drawing that too short line segment\n    private _ux: number\n    private _uy: number\n\n    static CMD = CMD\n\n    constructor(notSaveData?: boolean) {\n        if (notSaveData) {\n            this._saveData = false;\n        }\n\n        if (this._saveData) {\n            this.data = [];\n        }\n    }\n\n    increaseVersion() {\n        this._version++;\n    }\n\n    /**\n     * Version can be used outside for compare if the path is changed.\n     * For example to determine if need to update svg d str in svg renderer.\n     */\n    getVersion() {\n        return this._version;\n    }\n\n    /**\n     * @readOnly\n     */\n    setScale(sx: number, sy: number, segmentIgnoreThreshold?: number) {\n        // Compat. Previously there is no segmentIgnoreThreshold.\n        segmentIgnoreThreshold = segmentIgnoreThreshold || 0;\n        if (segmentIgnoreThreshold > 0) {\n            this._ux = mathAbs(segmentIgnoreThreshold / dpr / sx) || 0;\n            this._uy = mathAbs(segmentIgnoreThreshold / dpr / sy) || 0;\n        }\n    }\n\n    setDPR(dpr: number) {\n        this.dpr = dpr;\n    }\n\n    setContext(ctx: ExtendedCanvasRenderingContext2D) {\n        this._ctx = ctx;\n    }\n\n    getContext(): ExtendedCanvasRenderingContext2D {\n        return this._ctx;\n    }\n\n    beginPath() {\n        this._ctx && this._ctx.beginPath();\n        this.reset();\n        return this;\n    }\n\n    /**\n     * Reset path data.\n     */\n    reset() {\n        // Reset\n        if (this._saveData) {\n            this._len = 0;\n        }\n\n        if (this._pathSegLen) {\n            this._pathSegLen = null;\n            this._pathLen = 0;\n        }\n\n        // Update version\n        this._version++;\n    }\n\n    moveTo(x: number, y: number) {\n        // Add pending point for previous path.\n        this._drawPendingPt();\n\n        this.addData(CMD.M, x, y);\n        this._ctx && this._ctx.moveTo(x, y);\n\n        // x0, y0, xi, yi 是记录在 _dashedXXXXTo 方法中使用\n        // xi, yi 记录当前点, x0, y0 在 closePath 的时候回到起始点。\n        // 有可能在 beginPath 之后直接调用 lineTo,这时候 x0, y0 需要\n        // 在 lineTo 方法中记录,这里先不考虑这种情况,dashed line 也只在 IE10- 中不支持\n        this._x0 = x;\n        this._y0 = y;\n\n        this._xi = x;\n        this._yi = y;\n\n        return this;\n    }\n\n    lineTo(x: number, y: number) {\n        const dx = mathAbs(x - this._xi);\n        const dy = mathAbs(y - this._yi);\n        const exceedUnit = dx > this._ux || dy > this._uy;\n\n        this.addData(CMD.L, x, y);\n\n        if (this._ctx && exceedUnit) {\n            this._ctx.lineTo(x, y);\n        }\n        if (exceedUnit) {\n            this._xi = x;\n            this._yi = y;\n            this._pendingPtDist = 0;\n        }\n        else {\n            const d2 = dx * dx + dy * dy;\n            // Only use the farthest pending point.\n            if (d2 > this._pendingPtDist) {\n                this._pendingPtX = x;\n                this._pendingPtY = y;\n                this._pendingPtDist = d2;\n            }\n        }\n\n        return this;\n    }\n\n    bezierCurveTo(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number) {\n        this._drawPendingPt();\n\n        this.addData(CMD.C, x1, y1, x2, y2, x3, y3);\n        if (this._ctx) {\n            this._ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n        }\n        this._xi = x3;\n        this._yi = y3;\n        return this;\n    }\n\n    quadraticCurveTo(x1: number, y1: number, x2: number, y2: number) {\n        this._drawPendingPt();\n\n        this.addData(CMD.Q, x1, y1, x2, y2);\n        if (this._ctx) {\n            this._ctx.quadraticCurveTo(x1, y1, x2, y2);\n        }\n        this._xi = x2;\n        this._yi = y2;\n        return this;\n    }\n\n    arc(cx: number, cy: number, r: number, startAngle: number, endAngle: number, anticlockwise?: boolean) {\n        this._drawPendingPt();\n\n        tmpAngles[0] = startAngle;\n        tmpAngles[1] = endAngle;\n        normalizeArcAngles(tmpAngles, anticlockwise);\n\n        startAngle = tmpAngles[0];\n        endAngle = tmpAngles[1];\n\n        let delta = endAngle - startAngle;\n\n        this.addData(\n            CMD.A, cx, cy, r, r, startAngle, delta, 0, anticlockwise ? 0 : 1\n        );\n\n        this._ctx && this._ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise);\n\n        this._xi = mathCos(endAngle) * r + cx;\n        this._yi = mathSin(endAngle) * r + cy;\n        return this;\n    }\n\n    // TODO\n    arcTo(x1: number, y1: number, x2: number, y2: number, radius: number) {\n        this._drawPendingPt();\n\n        if (this._ctx) {\n            this._ctx.arcTo(x1, y1, x2, y2, radius);\n        }\n        return this;\n    }\n\n    // TODO\n    rect(x: number, y: number, w: number, h: number) {\n        this._drawPendingPt();\n\n        this._ctx && this._ctx.rect(x, y, w, h);\n        this.addData(CMD.R, x, y, w, h);\n        return this;\n    }\n\n    closePath() {\n        // Add pending point for previous path.\n        this._drawPendingPt();\n\n        this.addData(CMD.Z);\n\n        const ctx = this._ctx;\n        const x0 = this._x0;\n        const y0 = this._y0;\n        if (ctx) {\n            ctx.closePath();\n        }\n\n        this._xi = x0;\n        this._yi = y0;\n        return this;\n    }\n\n    fill(ctx: CanvasRenderingContext2D) {\n        ctx && ctx.fill();\n        this.toStatic();\n    }\n\n    stroke(ctx: CanvasRenderingContext2D) {\n        ctx && ctx.stroke();\n        this.toStatic();\n    }\n\n    len() {\n        return this._len;\n    }\n\n    setData(data: Float32Array | number[]) {\n\n        const len = data.length;\n\n        if (!(this.data && this.data.length === len) && hasTypedArray) {\n            this.data = new Float32Array(len);\n        }\n\n        for (let i = 0; i < len; i++) {\n            this.data[i] = data[i];\n        }\n\n        this._len = len;\n    }\n\n    appendPath(path: PathProxy | PathProxy[]) {\n        if (!(path instanceof Array)) {\n            path = [path];\n        }\n        const len = path.length;\n        let appendSize = 0;\n        let offset = this._len;\n        for (let i = 0; i < len; i++) {\n            appendSize += path[i].len();\n        }\n        if (hasTypedArray && (this.data instanceof Float32Array)) {\n            this.data = new Float32Array(offset + appendSize);\n        }\n        for (let i = 0; i < len; i++) {\n            const appendPathData = path[i].data;\n            for (let k = 0; k < appendPathData.length; k++) {\n                this.data[offset++] = appendPathData[k];\n            }\n        }\n        this._len = offset;\n    }\n\n    /**\n     * 填充 Path 数据。\n     * 尽量复用而不申明新的数组。大部分图形重绘的指令数据长度都是不变的。\n     */\n    addData(\n        cmd: number,\n        a?: number,\n        b?: number,\n        c?: number,\n        d?: number,\n        e?: number,\n        f?: number,\n        g?: number,\n        h?: number\n    ) {\n        if (!this._saveData) {\n            return;\n        }\n\n        let data = this.data;\n        if (this._len + arguments.length > data.length) {\n            // 因为之前的数组已经转换成静态的 Float32Array\n            // 所以不够用时需要扩展一个新的动态数组\n            this._expandData();\n            data = this.data;\n        }\n        for (let i = 0; i < arguments.length; i++) {\n            data[this._len++] = arguments[i];\n        }\n    }\n\n    private _drawPendingPt() {\n        if (this._pendingPtDist > 0) {\n            this._ctx && this._ctx.lineTo(this._pendingPtX, this._pendingPtY);\n            this._pendingPtDist = 0;\n        }\n    }\n\n    private _expandData() {\n        // Only if data is Float32Array\n        if (!(this.data instanceof Array)) {\n            const newData = [];\n            for (let i = 0; i < this._len; i++) {\n                newData[i] = this.data[i];\n            }\n            this.data = newData;\n        }\n    }\n\n    /**\n     * Convert dynamic array to static Float32Array\n     *\n     * It will still use a normal array if command buffer length is less than 10\n     * Because Float32Array itself may take more memory than a normal array.\n     *\n     * 10 length will make sure at least one M command and one A(arc) command.\n     */\n    toStatic() {\n        if (!this._saveData) {\n            return;\n        }\n\n        this._drawPendingPt();\n\n        const data = this.data;\n        if (data instanceof Array) {\n            data.length = this._len;\n            if (hasTypedArray && this._len > 11) {\n                this.data = new Float32Array(data);\n            }\n        }\n    }\n\n\n    getBoundingRect() {\n        min[0] = min[1] = min2[0] = min2[1] = Number.MAX_VALUE;\n        max[0] = max[1] = max2[0] = max2[1] = -Number.MAX_VALUE;\n\n        const data = this.data;\n        let xi = 0;\n        let yi = 0;\n        let x0 = 0;\n        let y0 = 0;\n\n        let i;\n        for (i = 0; i < this._len;) {\n            const cmd = data[i++] as number;\n\n            const isFirst = i === 1;\n            if (isFirst) {\n                // 如果第一个命令是 L, C, Q\n                // 则 previous point 同绘制命令的第一个 point\n                // 第一个命令为 Arc 的情况下会在后面特殊处理\n                xi = data[i];\n                yi = data[i + 1];\n\n                x0 = xi;\n                y0 = yi;\n            }\n\n            switch (cmd) {\n                case CMD.M:\n                    // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n                    // 在 closePath 的时候使用\n                    xi = x0 = data[i++];\n                    yi = y0 = data[i++];\n                    min2[0] = x0;\n                    min2[1] = y0;\n                    max2[0] = x0;\n                    max2[1] = y0;\n                    break;\n                case CMD.L:\n                    fromLine(xi, yi, data[i], data[i + 1], min2, max2);\n                    xi = data[i++];\n                    yi = data[i++];\n                    break;\n                case CMD.C:\n                    fromCubic(\n                        xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1],\n                        min2, max2\n                    );\n                    xi = data[i++];\n                    yi = data[i++];\n                    break;\n                case CMD.Q:\n                    fromQuadratic(\n                        xi, yi, data[i++], data[i++], data[i], data[i + 1],\n                        min2, max2\n                    );\n                    xi = data[i++];\n                    yi = data[i++];\n                    break;\n                case CMD.A:\n                    const cx = data[i++];\n                    const cy = data[i++];\n                    const rx = data[i++];\n                    const ry = data[i++];\n                    const startAngle = data[i++];\n                    const endAngle = data[i++] + startAngle;\n                    // TODO Arc 旋转\n                    i += 1;\n                    const anticlockwise = !data[i++];\n\n                    if (isFirst) {\n                        // 直接使用 arc 命令\n                        // 第一个命令起点还未定义\n                        x0 = mathCos(startAngle) * rx + cx;\n                        y0 = mathSin(startAngle) * ry + cy;\n                    }\n\n                    fromArc(\n                        cx, cy, rx, ry, startAngle, endAngle,\n                        anticlockwise, min2, max2\n                    );\n\n                    xi = mathCos(endAngle) * rx + cx;\n                    yi = mathSin(endAngle) * ry + cy;\n                    break;\n                case CMD.R:\n                    x0 = xi = data[i++];\n                    y0 = yi = data[i++];\n                    const width = data[i++];\n                    const height = data[i++];\n                    // Use fromLine\n                    fromLine(x0, y0, x0 + width, y0 + height, min2, max2);\n                    break;\n                case CMD.Z:\n                    xi = x0;\n                    yi = y0;\n                    break;\n            }\n\n            // Union\n            vec2.min(min, min, min2);\n            vec2.max(max, max, max2);\n        }\n\n        // No data\n        if (i === 0) {\n            min[0] = min[1] = max[0] = max[1] = 0;\n        }\n\n        return new BoundingRect(\n            min[0], min[1], max[0] - min[0], max[1] - min[1]\n        );\n    }\n\n    private _calculateLength(): number {\n        const data = this.data;\n        const len = this._len;\n        const ux = this._ux;\n        const uy = this._uy;\n        let xi = 0;\n        let yi = 0;\n        let x0 = 0;\n        let y0 = 0;\n\n        if (!this._pathSegLen) {\n            this._pathSegLen = [];\n        }\n        const pathSegLen = this._pathSegLen;\n        let pathTotalLen = 0;\n        let segCount = 0;\n\n        for (let i = 0; i < len;) {\n            const cmd = data[i++] as number;\n            const isFirst = i === 1;\n\n            if (isFirst) {\n                // 如果第一个命令是 L, C, Q\n                // 则 previous point 同绘制命令的第一个 point\n                // 第一个命令为 Arc 的情况下会在后面特殊处理\n                xi = data[i];\n                yi = data[i + 1];\n\n                x0 = xi;\n                y0 = yi;\n            }\n\n            let l = -1;\n\n            switch (cmd) {\n                case CMD.M:\n                    // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n                    // 在 closePath 的时候使用\n                    xi = x0 = data[i++];\n                    yi = y0 = data[i++];\n                    break;\n                case CMD.L: {\n                    const x2 = data[i++];\n                    const y2 = data[i++];\n                    const dx = x2 - xi;\n                    const dy = y2 - yi;\n                    if (mathAbs(dx) > ux || mathAbs(dy) > uy || i === len - 1) {\n                        l = Math.sqrt(dx * dx + dy * dy);\n                        xi = x2;\n                        yi = y2;\n                    }\n                    break;\n                }\n                case CMD.C: {\n                    const x1 = data[i++];\n                    const y1 = data[i++];\n                    const x2 = data[i++];\n                    const y2 = data[i++];\n                    const x3 = data[i++];\n                    const y3 = data[i++];\n                    // TODO adaptive iteration\n                    l = cubicLength(xi, yi, x1, y1, x2, y2, x3, y3, 10);\n                    xi = x3;\n                    yi = y3;\n                    break;\n                }\n                case CMD.Q: {\n                    const x1 = data[i++];\n                    const y1 = data[i++];\n                    const x2 = data[i++];\n                    const y2 = data[i++];\n                    l = quadraticLength(xi, yi, x1, y1, x2, y2, 10);\n                    xi = x2;\n                    yi = y2;\n                    break;\n                }\n                case CMD.A:\n                    // TODO Arc 判断的开销比较大\n                    const cx = data[i++];\n                    const cy = data[i++];\n                    const rx = data[i++];\n                    const ry = data[i++];\n                    const startAngle = data[i++];\n                    let delta = data[i++];\n                    const endAngle = delta + startAngle;\n                    // TODO Arc 旋转\n                    i += 1;\n                    if (isFirst) {\n                        // 直接使用 arc 命令\n                        // 第一个命令起点还未定义\n                        x0 = mathCos(startAngle) * rx + cx;\n                        y0 = mathSin(startAngle) * ry + cy;\n                    }\n\n                    // TODO Ellipse\n                    l = mathMax(rx, ry) * mathMin(PI2, Math.abs(delta));\n\n                    xi = mathCos(endAngle) * rx + cx;\n                    yi = mathSin(endAngle) * ry + cy;\n                    break;\n                case CMD.R: {\n                    x0 = xi = data[i++];\n                    y0 = yi = data[i++];\n                    const width = data[i++];\n                    const height = data[i++];\n                    l = width * 2 + height * 2;\n                    break;\n                }\n                case CMD.Z: {\n                    const dx = x0 - xi;\n                    const dy = y0 - yi;\n                    l = Math.sqrt(dx * dx + dy * dy);\n\n                    xi = x0;\n                    yi = y0;\n                    break;\n                }\n            }\n\n            if (l >= 0) {\n                pathSegLen[segCount++] = l;\n                pathTotalLen += l;\n            }\n        }\n\n        // TODO Optimize memory cost.\n        this._pathLen = pathTotalLen;\n\n        return pathTotalLen;\n    }\n    /**\n     * Rebuild path from current data\n     * Rebuild path will not consider javascript implemented line dash.\n     * @param {CanvasRenderingContext2D} ctx\n     */\n    rebuildPath(ctx: PathRebuilder, percent: number) {\n        const d = this.data;\n        const ux = this._ux;\n        const uy = this._uy;\n        const len = this._len;\n        let x0;\n        let y0;\n        let xi;\n        let yi;\n        let x;\n        let y;\n\n        const drawPart = percent < 1;\n        let pathSegLen;\n        let pathTotalLen;\n        let accumLength = 0;\n        let segCount = 0;\n        let displayedLength;\n\n        let pendingPtDist = 0;\n        let pendingPtX: number;\n        let pendingPtY: number;\n\n\n        if (drawPart) {\n            if (!this._pathSegLen) {\n                this._calculateLength();\n            }\n            pathSegLen = this._pathSegLen;\n            pathTotalLen = this._pathLen;\n            displayedLength = percent * pathTotalLen;\n\n            if (!displayedLength) {\n                return;\n            }\n        }\n\n        lo: for (let i = 0; i < len;) {\n            const cmd = d[i++];\n            const isFirst = i === 1;\n\n            if (isFirst) {\n                // 如果第一个命令是 L, C, Q\n                // 则 previous point 同绘制命令的第一个 point\n                // 第一个命令为 Arc 的情况下会在后面特殊处理\n                xi = d[i];\n                yi = d[i + 1];\n\n                x0 = xi;\n                y0 = yi;\n            }\n            // Only lineTo support ignoring small segments.\n            // Otherwise if the pending point should always been flushed.\n            if (cmd !== CMD.L && pendingPtDist > 0) {\n                ctx.lineTo(pendingPtX, pendingPtY);\n                pendingPtDist = 0;\n            }\n            switch (cmd) {\n                case CMD.M:\n                    x0 = xi = d[i++];\n                    y0 = yi = d[i++];\n                    ctx.moveTo(xi, yi);\n                    break;\n                case CMD.L: {\n                    x = d[i++];\n                    y = d[i++];\n                    const dx = mathAbs(x - xi);\n                    const dy = mathAbs(y - yi);\n                    // Not draw too small seg between\n                    if (dx > ux || dy > uy) {\n                        if (drawPart) {\n                            const l = pathSegLen[segCount++];\n                            if (accumLength + l > displayedLength) {\n                                const t = (displayedLength - accumLength) / l;\n                                ctx.lineTo(xi * (1 - t) + x * t, yi * (1 - t) + y * t);\n                                break lo;\n                            }\n                            accumLength += l;\n                        }\n\n                        ctx.lineTo(x, y);\n                        xi = x;\n                        yi = y;\n                        pendingPtDist = 0;\n                    }\n                    else {\n                        const d2 = dx * dx + dy * dy;\n                        // Only use the farthest pending point.\n                        if (d2 > pendingPtDist) {\n                            pendingPtX = x;\n                            pendingPtY = y;\n                            pendingPtDist = d2;\n                        }\n                    }\n                    break;\n                }\n                case CMD.C: {\n                    const x1 = d[i++];\n                    const y1 = d[i++];\n                    const x2 = d[i++];\n                    const y2 = d[i++];\n                    const x3 = d[i++];\n                    const y3 = d[i++];\n                    if (drawPart) {\n                        const l = pathSegLen[segCount++];\n                        if (accumLength + l > displayedLength) {\n                            const t = (displayedLength - accumLength) / l;\n                            cubicSubdivide(xi, x1, x2, x3, t, tmpOutX);\n                            cubicSubdivide(yi, y1, y2, y3, t, tmpOutY);\n                            ctx.bezierCurveTo(tmpOutX[1], tmpOutY[1], tmpOutX[2], tmpOutY[2], tmpOutX[3], tmpOutY[3]);\n                            break lo;\n                        }\n                        accumLength += l;\n                    }\n\n                    ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n                    xi = x3;\n                    yi = y3;\n                    break;\n                }\n                case CMD.Q: {\n                    const x1 = d[i++];\n                    const y1 = d[i++];\n                    const x2 = d[i++];\n                    const y2 = d[i++];\n\n                    if (drawPart) {\n                        const l = pathSegLen[segCount++];\n                        if (accumLength + l > displayedLength) {\n                            const t = (displayedLength - accumLength) / l;\n                            quadraticSubdivide(xi, x1, x2, t, tmpOutX);\n                            quadraticSubdivide(yi, y1, y2, t, tmpOutY);\n                            ctx.quadraticCurveTo(tmpOutX[1], tmpOutY[1], tmpOutX[2], tmpOutY[2]);\n                            break lo;\n                        }\n                        accumLength += l;\n                    }\n\n                    ctx.quadraticCurveTo(x1, y1, x2, y2);\n                    xi = x2;\n                    yi = y2;\n                    break;\n                }\n                case CMD.A:\n                    const cx = d[i++];\n                    const cy = d[i++];\n                    const rx = d[i++];\n                    const ry = d[i++];\n                    let startAngle = d[i++];\n                    let delta = d[i++];\n                    const psi = d[i++];\n                    const anticlockwise = !d[i++];\n                    const r = (rx > ry) ? rx : ry;\n                    // const scaleX = (rx > ry) ? 1 : rx / ry;\n                    // const scaleY = (rx > ry) ? ry / rx : 1;\n                    const isEllipse = mathAbs(rx - ry) > 1e-3;\n                    let endAngle = startAngle + delta;\n                    let breakBuild = false;\n\n                    if (drawPart) {\n                        const l = pathSegLen[segCount++];\n                        if (accumLength + l > displayedLength) {\n                            endAngle = startAngle + delta * (displayedLength - accumLength) / l;\n                            breakBuild = true;\n                        }\n                        accumLength += l;\n                    }\n                    if (isEllipse && ctx.ellipse) {\n                        ctx.ellipse(cx, cy, rx, ry, psi, startAngle, endAngle, anticlockwise);\n                    }\n                    else {\n                        ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise);\n                    }\n\n                    if (breakBuild) {\n                        break lo;\n                    }\n\n                    if (isFirst) {\n                        // 直接使用 arc 命令\n                        // 第一个命令起点还未定义\n                        x0 = mathCos(startAngle) * rx + cx;\n                        y0 = mathSin(startAngle) * ry + cy;\n                    }\n                    xi = mathCos(endAngle) * rx + cx;\n                    yi = mathSin(endAngle) * ry + cy;\n                    break;\n                case CMD.R:\n                    x0 = xi = d[i];\n                    y0 = yi = d[i + 1];\n\n                    x = d[i++];\n                    y = d[i++];\n                    const width = d[i++];\n                    const height = d[i++];\n\n                    if (drawPart) {\n                        const l = pathSegLen[segCount++];\n                        if (accumLength + l > displayedLength) {\n                            let d = displayedLength - accumLength;\n                            ctx.moveTo(x, y);\n                            ctx.lineTo(x + mathMin(d, width), y);\n                            d -= width;\n                            if (d > 0) {\n                                ctx.lineTo(x + width, y + mathMin(d, height));\n                            }\n                            d -= height;\n                            if (d > 0) {\n                                ctx.lineTo(x + mathMax(width - d, 0), y + height);\n                            }\n                            d -= width;\n                            if (d > 0) {\n                                ctx.lineTo(x, y + mathMax(height - d, 0));\n                            }\n                            break lo;\n                        }\n                        accumLength += l;\n                    }\n                    ctx.rect(x, y, width, height);\n                    break;\n                case CMD.Z:\n                    if (drawPart) {\n                        const l = pathSegLen[segCount++];\n                        if (accumLength + l > displayedLength) {\n                            const t = (displayedLength - accumLength) / l;\n                            ctx.lineTo(xi * (1 - t) + x0 * t, yi * (1 - t) + y0 * t);\n                            break lo;\n                        }\n                        accumLength += l;\n                    }\n\n                    ctx.closePath();\n                    xi = x0;\n                    yi = y0;\n            }\n        }\n    }\n\n    clone() {\n        const newProxy = new PathProxy();\n        const data = this.data;\n        newProxy.data = data.slice ? data.slice()\n            : Array.prototype.slice.call(data);\n        newProxy._len = this._len;\n        return newProxy;\n    }\n\n    private static initDefaultProps = (function () {\n        const proto = PathProxy.prototype;\n        proto._saveData = true;\n        proto._ux = 0;\n        proto._uy = 0;\n        proto._pendingPtDist = 0;\n        proto._version = 0;\n    })()\n}\n\n\nexport interface PathRebuilder {\n    moveTo(x: number, y: number): void\n    lineTo(x: number, y: number): void\n    bezierCurveTo(x: number, y: number, x2: number, y2: number, x3: number, y3: number): void\n    quadraticCurveTo(x: number, y: number, x2: number, y2: number): void\n    arc(cx: number, cy: number, r: number, startAngle: number, endAngle: number, anticlockwise: boolean): void\n    // eslint-disable-next-line max-len\n    ellipse(cx: number, cy: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise: boolean): void\n    rect(x: number, y: number, width: number, height: number): void\n    closePath(): void\n}","\r\n/**\r\n * 线段包含判断\r\n * @param  {number}  x0\r\n * @param  {number}  y0\r\n * @param  {number}  x1\r\n * @param  {number}  y1\r\n * @param  {number}  lineWidth\r\n * @param  {number}  x\r\n * @param  {number}  y\r\n * @return {boolean}\r\n */\r\nexport function containStroke(\r\n    x0: number, y0: number, x1: number, y1: number,\r\n    lineWidth: number, x: number, y: number\r\n): boolean {\r\n    if (lineWidth === 0) {\r\n        return false;\r\n    }\r\n    const _l = lineWidth;\r\n    let _a = 0;\r\n    let _b = x0;\r\n    // Quick reject\r\n    if (\r\n        (y > y0 + _l && y > y1 + _l)\r\n        || (y < y0 - _l && y < y1 - _l)\r\n        || (x > x0 + _l && x > x1 + _l)\r\n        || (x < x0 - _l && x < x1 - _l)\r\n    ) {\r\n        return false;\r\n    }\r\n\r\n    if (x0 !== x1) {\r\n        _a = (y0 - y1) / (x0 - x1);\r\n        _b = (x0 * y1 - x1 * y0) / (x0 - x1);\r\n    }\r\n    else {\r\n        return Math.abs(x - x0) <= _l / 2;\r\n    }\r\n    const tmp = _a * x - y + _b;\r\n    const _s = tmp * tmp / (_a * _a + 1);\r\n    return _s <= _l / 2 * _l / 2;\r\n}","\r\nimport * as curve from '../core/curve';\r\n\r\n/**\r\n * 三次贝塞尔曲线描边包含判断\r\n */\r\nexport function containStroke(\r\n    x0: number, y0: number, x1: number, y1: number,\r\n    x2: number, y2: number, x3: number, y3: number,\r\n    lineWidth: number, x: number, y: number\r\n): boolean {\r\n    if (lineWidth === 0) {\r\n        return false;\r\n    }\r\n    const _l = lineWidth;\r\n    // Quick reject\r\n    if (\r\n        (y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l)\r\n        || (y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l)\r\n        || (x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l)\r\n        || (x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l)\r\n    ) {\r\n        return false;\r\n    }\r\n    const d = curve.cubicProjectPoint(\r\n        x0, y0, x1, y1, x2, y2, x3, y3,\r\n        x, y, null\r\n    );\r\n    return d <= _l / 2;\r\n}","import {quadraticProjectPoint} from '../core/curve';\r\n\r\n/**\r\n * 二次贝塞尔曲线描边包含判断\r\n */\r\nexport function containStroke(\r\n    x0: number, y0: number, x1: number, y1: number, x2: number, y2: number,\r\n    lineWidth: number, x: number, y: number\r\n): boolean {\r\n    if (lineWidth === 0) {\r\n        return false;\r\n    }\r\n    const _l = lineWidth;\r\n    // Quick reject\r\n    if (\r\n        (y > y0 + _l && y > y1 + _l && y > y2 + _l)\r\n        || (y < y0 - _l && y < y1 - _l && y < y2 - _l)\r\n        || (x > x0 + _l && x > x1 + _l && x > x2 + _l)\r\n        || (x < x0 - _l && x < x1 - _l && x < x2 - _l)\r\n    ) {\r\n        return false;\r\n    }\r\n    const d = quadraticProjectPoint(\r\n        x0, y0, x1, y1, x2, y2,\r\n        x, y, null\r\n    );\r\n    return d <= _l / 2;\r\n}\r\n","\r\nconst PI2 = Math.PI * 2;\r\n\r\nexport function normalizeRadian(angle: number): number {\r\n    angle %= PI2;\r\n    if (angle < 0) {\r\n        angle += PI2;\r\n    }\r\n    return angle;\r\n}","\r\nimport {normalizeRadian} from './util';\r\n\r\nconst PI2 = Math.PI * 2;\r\n\r\n/**\r\n * 圆弧描边包含判断\r\n */\r\nexport function containStroke(\r\n    cx: number, cy: number, r: number, startAngle: number, endAngle: number,\r\n    anticlockwise: boolean,\r\n    lineWidth: number, x: number, y: number\r\n): boolean {\r\n\r\n    if (lineWidth === 0) {\r\n        return false;\r\n    }\r\n    const _l = lineWidth;\r\n\r\n    x -= cx;\r\n    y -= cy;\r\n    const d = Math.sqrt(x * x + y * y);\r\n\r\n    if ((d - _l > r) || (d + _l < r)) {\r\n        return false;\r\n    }\r\n    // TODO\r\n    if (Math.abs(startAngle - endAngle) % PI2 < 1e-4) {\r\n        // Is a circle\r\n        return true;\r\n    }\r\n    if (anticlockwise) {\r\n        const tmp = startAngle;\r\n        startAngle = normalizeRadian(endAngle);\r\n        endAngle = normalizeRadian(tmp);\r\n    }\r\n    else {\r\n        startAngle = normalizeRadian(startAngle);\r\n        endAngle = normalizeRadian(endAngle);\r\n    }\r\n    if (startAngle > endAngle) {\r\n        endAngle += PI2;\r\n    }\r\n\r\n    let angle = Math.atan2(y, x);\r\n    if (angle < 0) {\r\n        angle += PI2;\r\n    }\r\n    return (angle >= startAngle && angle <= endAngle)\r\n        || (angle + PI2 >= startAngle && angle + PI2 <= endAngle);\r\n}","\r\nexport default function windingLine(\r\n    x0: number, y0: number, x1: number, y1: number, x: number, y: number\r\n): number {\r\n    if ((y > y0 && y > y1) || (y < y0 && y < y1)) {\r\n        return 0;\r\n    }\r\n    // Ignore horizontal line\r\n    if (y1 === y0) {\r\n        return 0;\r\n    }\r\n    const t = (y - y0) / (y1 - y0);\r\n\r\n    let dir = y1 < y0 ? 1 : -1;\r\n    // Avoid winding error when intersection point is the connect point of two line of polygon\r\n    if (t === 1 || t === 0) {\r\n        dir = y1 < y0 ? 0.5 : -0.5;\r\n    }\r\n\r\n    const x_ = t * (x1 - x0) + x0;\r\n\r\n    // If (x, y) on the line, considered as \"contain\".\r\n    return x_ === x ? Infinity : x_ > x ? dir : 0;\r\n}","import PathProxy from '../core/PathProxy';\r\nimport * as line from './line';\r\nimport * as cubic from './cubic';\r\nimport * as quadratic from './quadratic';\r\nimport * as arc from './arc';\r\nimport * as curve from '../core/curve';\r\nimport windingLine from './windingLine';\r\n\r\nconst CMD = PathProxy.CMD;\r\nconst PI2 = Math.PI * 2;\r\n\r\nconst EPSILON = 1e-4;\r\n\r\nfunction isAroundEqual(a: number, b: number) {\r\n    return Math.abs(a - b) < EPSILON;\r\n}\r\n\r\n// 临时数组\r\nconst roots = [-1, -1, -1];\r\nconst extrema = [-1, -1];\r\n\r\nfunction swapExtrema() {\r\n    const tmp = extrema[0];\r\n    extrema[0] = extrema[1];\r\n    extrema[1] = tmp;\r\n}\r\n\r\nfunction windingCubic(\r\n    x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, x3: number, y3: number,\r\n    x: number, y: number\r\n): number {\r\n    // Quick reject\r\n    if (\r\n        (y > y0 && y > y1 && y > y2 && y > y3)\r\n        || (y < y0 && y < y1 && y < y2 && y < y3)\r\n    ) {\r\n        return 0;\r\n    }\r\n    const nRoots = curve.cubicRootAt(y0, y1, y2, y3, y, roots);\r\n    if (nRoots === 0) {\r\n        return 0;\r\n    }\r\n    else {\r\n        let w = 0;\r\n        let nExtrema = -1;\r\n        let y0_;\r\n        let y1_;\r\n        for (let i = 0; i < nRoots; i++) {\r\n            let t = roots[i];\r\n\r\n            // Avoid winding error when intersection point is the connect point of two line of polygon\r\n            let unit = (t === 0 || t === 1) ? 0.5 : 1;\r\n\r\n            let x_ = curve.cubicAt(x0, x1, x2, x3, t);\r\n            if (x_ < x) { // Quick reject\r\n                continue;\r\n            }\r\n            if (nExtrema < 0) {\r\n                nExtrema = curve.cubicExtrema(y0, y1, y2, y3, extrema);\r\n                if (extrema[1] < extrema[0] && nExtrema > 1) {\r\n                    swapExtrema();\r\n                }\r\n                y0_ = curve.cubicAt(y0, y1, y2, y3, extrema[0]);\r\n                if (nExtrema > 1) {\r\n                    y1_ = curve.cubicAt(y0, y1, y2, y3, extrema[1]);\r\n                }\r\n            }\r\n            if (nExtrema === 2) {\r\n                // 分成三段单调函数\r\n                if (t < extrema[0]) {\r\n                    w += y0_ < y0 ? unit : -unit;\r\n                }\r\n                else if (t < extrema[1]) {\r\n                    w += y1_ < y0_ ? unit : -unit;\r\n                }\r\n                else {\r\n                    w += y3 < y1_ ? unit : -unit;\r\n                }\r\n            }\r\n            else {\r\n                // 分成两段单调函数\r\n                if (t < extrema[0]) {\r\n                    w += y0_ < y0 ? unit : -unit;\r\n                }\r\n                else {\r\n                    w += y3 < y0_ ? unit : -unit;\r\n                }\r\n            }\r\n        }\r\n        return w;\r\n    }\r\n}\r\n\r\nfunction windingQuadratic(\r\n    x0: number, y0: number, x1: number, y1: number, x2: number, y2: number,\r\n    x: number, y: number\r\n): number {\r\n    // Quick reject\r\n    if (\r\n        (y > y0 && y > y1 && y > y2)\r\n        || (y < y0 && y < y1 && y < y2)\r\n    ) {\r\n        return 0;\r\n    }\r\n    const nRoots = curve.quadraticRootAt(y0, y1, y2, y, roots);\r\n    if (nRoots === 0) {\r\n        return 0;\r\n    }\r\n    else {\r\n        const t = curve.quadraticExtremum(y0, y1, y2);\r\n        if (t >= 0 && t <= 1) {\r\n            let w = 0;\r\n            let y_ = curve.quadraticAt(y0, y1, y2, t);\r\n            for (let i = 0; i < nRoots; i++) {\r\n                // Remove one endpoint.\r\n                let unit = (roots[i] === 0 || roots[i] === 1) ? 0.5 : 1;\r\n\r\n                let x_ = curve.quadraticAt(x0, x1, x2, roots[i]);\r\n                if (x_ < x) {   // Quick reject\r\n                    continue;\r\n                }\r\n                if (roots[i] < t) {\r\n                    w += y_ < y0 ? unit : -unit;\r\n                }\r\n                else {\r\n                    w += y2 < y_ ? unit : -unit;\r\n                }\r\n            }\r\n            return w;\r\n        }\r\n        else {\r\n            // Remove one endpoint.\r\n            const unit = (roots[0] === 0 || roots[0] === 1) ? 0.5 : 1;\r\n\r\n            const x_ = curve.quadraticAt(x0, x1, x2, roots[0]);\r\n            if (x_ < x) {   // Quick reject\r\n                return 0;\r\n            }\r\n            return y2 < y0 ? unit : -unit;\r\n        }\r\n    }\r\n}\r\n// TODO\r\n// Arc 旋转\r\n// startAngle, endAngle has been normalized by normalizeArcAngles\r\nfunction windingArc(\r\n    cx: number, cy: number, r: number, startAngle: number, endAngle: number, anticlockwise: boolean,\r\n    x: number, y: number\r\n) {\r\n    y -= cy;\r\n    if (y > r || y < -r) {\r\n        return 0;\r\n    }\r\n    const tmp = Math.sqrt(r * r - y * y);\r\n    roots[0] = -tmp;\r\n    roots[1] = tmp;\r\n\r\n    const dTheta = Math.abs(startAngle - endAngle);\r\n    if (dTheta < 1e-4) {\r\n        return 0;\r\n    }\r\n    if (dTheta >= PI2 - 1e-4) {\r\n        // Is a circle\r\n        startAngle = 0;\r\n        endAngle = PI2;\r\n        const dir = anticlockwise ? 1 : -1;\r\n        if (x >= roots[0] + cx && x <= roots[1] + cx) {\r\n            return dir;\r\n        }\r\n        else {\r\n            return 0;\r\n        }\r\n    }\r\n\r\n    if (startAngle > endAngle) {\r\n        // Swap, make sure startAngle is smaller than endAngle.\r\n        const tmp = startAngle;\r\n        startAngle = endAngle;\r\n        endAngle = tmp;\r\n    }\r\n    // endAngle - startAngle is normalized to 0 - 2*PI.\r\n    // So following will normalize them to 0 - 4*PI\r\n    if (startAngle < 0) {\r\n        startAngle += PI2;\r\n        endAngle += PI2;\r\n    }\r\n\r\n    let w = 0;\r\n    for (let i = 0; i < 2; i++) {\r\n        const x_ = roots[i];\r\n        if (x_ + cx > x) {\r\n            let angle = Math.atan2(y, x_);\r\n            let dir = anticlockwise ? 1 : -1;\r\n            if (angle < 0) {\r\n                angle = PI2 + angle;\r\n            }\r\n            if (\r\n                (angle >= startAngle && angle <= endAngle)\r\n                || (angle + PI2 >= startAngle && angle + PI2 <= endAngle)\r\n            ) {\r\n                if (angle > Math.PI / 2 && angle < Math.PI * 1.5) {\r\n                    dir = -dir;\r\n                }\r\n                w += dir;\r\n            }\r\n        }\r\n    }\r\n    return w;\r\n}\r\n\r\n\r\nfunction containPath(\r\n    path: PathProxy, lineWidth: number, isStroke: boolean, x: number, y: number\r\n): boolean {\r\n    const data = path.data;\r\n    const len = path.len();\r\n    let w = 0;\r\n    let xi = 0;\r\n    let yi = 0;\r\n    let x0 = 0;\r\n    let y0 = 0;\r\n    let x1;\r\n    let y1;\r\n\r\n    for (let i = 0; i < len;) {\r\n        const cmd = data[i++];\r\n        const isFirst = i === 1;\r\n        // Begin a new subpath\r\n        if (cmd === CMD.M && i > 1) {\r\n            // Close previous subpath\r\n            if (!isStroke) {\r\n                w += windingLine(xi, yi, x0, y0, x, y);\r\n            }\r\n            // 如果被任何一个 subpath 包含\r\n            // if (w !== 0) {\r\n            //     return true;\r\n            // }\r\n        }\r\n\r\n        if (isFirst) {\r\n            // 如果第一个命令是 L, C, Q\r\n            // 则 previous point 同绘制命令的第一个 point\r\n            //\r\n            // 第一个命令为 Arc 的情况下会在后面特殊处理\r\n            xi = data[i];\r\n            yi = data[i + 1];\r\n\r\n            x0 = xi;\r\n            y0 = yi;\r\n        }\r\n\r\n        switch (cmd) {\r\n            case CMD.M:\r\n                // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\r\n                // 在 closePath 的时候使用\r\n                x0 = data[i++];\r\n                y0 = data[i++];\r\n                xi = x0;\r\n                yi = y0;\r\n                break;\r\n            case CMD.L:\r\n                if (isStroke) {\r\n                    if (line.containStroke(xi, yi, data[i], data[i + 1], lineWidth, x, y)) {\r\n                        return true;\r\n                    }\r\n                }\r\n                else {\r\n                    // NOTE 在第一个命令为 L, C, Q 的时候会计算出 NaN\r\n                    w += windingLine(xi, yi, data[i], data[i + 1], x, y) || 0;\r\n                }\r\n                xi = data[i++];\r\n                yi = data[i++];\r\n                break;\r\n            case CMD.C:\r\n                if (isStroke) {\r\n                    if (cubic.containStroke(xi, yi,\r\n                        data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1],\r\n                        lineWidth, x, y\r\n                    )) {\r\n                        return true;\r\n                    }\r\n                }\r\n                else {\r\n                    w += windingCubic(\r\n                        xi, yi,\r\n                        data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1],\r\n                        x, y\r\n                    ) || 0;\r\n                }\r\n                xi = data[i++];\r\n                yi = data[i++];\r\n                break;\r\n            case CMD.Q:\r\n                if (isStroke) {\r\n                    if (quadratic.containStroke(xi, yi,\r\n                        data[i++], data[i++], data[i], data[i + 1],\r\n                        lineWidth, x, y\r\n                    )) {\r\n                        return true;\r\n                    }\r\n                }\r\n                else {\r\n                    w += windingQuadratic(\r\n                        xi, yi,\r\n                        data[i++], data[i++], data[i], data[i + 1],\r\n                        x, y\r\n                    ) || 0;\r\n                }\r\n                xi = data[i++];\r\n                yi = data[i++];\r\n                break;\r\n            case CMD.A:\r\n                // TODO Arc 判断的开销比较大\r\n                const cx = data[i++];\r\n                const cy = data[i++];\r\n                const rx = data[i++];\r\n                const ry = data[i++];\r\n                const theta = data[i++];\r\n                const dTheta = data[i++];\r\n                // TODO Arc 旋转\r\n                i += 1;\r\n                const anticlockwise = !!(1 - data[i++]);\r\n                x1 = Math.cos(theta) * rx + cx;\r\n                y1 = Math.sin(theta) * ry + cy;\r\n                // 不是直接使用 arc 命令\r\n                if (!isFirst) {\r\n                    w += windingLine(xi, yi, x1, y1, x, y);\r\n                }\r\n                else {\r\n                    // 第一个命令起点还未定义\r\n                    x0 = x1;\r\n                    y0 = y1;\r\n                }\r\n                // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放\r\n                const _x = (x - cx) * ry / rx + cx;\r\n                if (isStroke) {\r\n                    if (arc.containStroke(\r\n                        cx, cy, ry, theta, theta + dTheta, anticlockwise,\r\n                        lineWidth, _x, y\r\n                    )) {\r\n                        return true;\r\n                    }\r\n                }\r\n                else {\r\n                    w += windingArc(\r\n                        cx, cy, ry, theta, theta + dTheta, anticlockwise,\r\n                        _x, y\r\n                    );\r\n                }\r\n                xi = Math.cos(theta + dTheta) * rx + cx;\r\n                yi = Math.sin(theta + dTheta) * ry + cy;\r\n                break;\r\n            case CMD.R:\r\n                x0 = xi = data[i++];\r\n                y0 = yi = data[i++];\r\n                const width = data[i++];\r\n                const height = data[i++];\r\n                x1 = x0 + width;\r\n                y1 = y0 + height;\r\n                if (isStroke) {\r\n                    if (line.containStroke(x0, y0, x1, y0, lineWidth, x, y)\r\n                        || line.containStroke(x1, y0, x1, y1, lineWidth, x, y)\r\n                        || line.containStroke(x1, y1, x0, y1, lineWidth, x, y)\r\n                        || line.containStroke(x0, y1, x0, y0, lineWidth, x, y)\r\n                    ) {\r\n                        return true;\r\n                    }\r\n                }\r\n                else {\r\n                    // FIXME Clockwise ?\r\n                    w += windingLine(x1, y0, x1, y1, x, y);\r\n                    w += windingLine(x0, y1, x0, y0, x, y);\r\n                }\r\n                break;\r\n            case CMD.Z:\r\n                if (isStroke) {\r\n                    if (line.containStroke(\r\n                        xi, yi, x0, y0, lineWidth, x, y\r\n                    )) {\r\n                        return true;\r\n                    }\r\n                }\r\n                else {\r\n                    // Close a subpath\r\n                    w += windingLine(xi, yi, x0, y0, x, y);\r\n                    // 如果被任何一个 subpath 包含\r\n                    // FIXME subpaths may overlap\r\n                    // if (w !== 0) {\r\n                    //     return true;\r\n                    // }\r\n                }\r\n                xi = x0;\r\n                yi = y0;\r\n                break;\r\n        }\r\n    }\r\n    if (!isStroke && !isAroundEqual(yi, y0)) {\r\n        w += windingLine(xi, yi, x0, y0, x, y) || 0;\r\n    }\r\n    return w !== 0;\r\n}\r\n\r\nexport function contain(pathProxy: PathProxy, x: number, y: number): boolean {\r\n    return containPath(pathProxy, 0, false, x, y);\r\n}\r\n\r\nexport function containStroke(pathProxy: PathProxy, lineWidth: number, x: number, y: number): boolean {\r\n    return containPath(pathProxy, lineWidth, true, x, y);\r\n}","import Displayable, { DisplayableProps,\r\n    CommonStyleProps,\r\n    DEFAULT_COMMON_STYLE,\r\n    DisplayableStatePropNames,\r\n    DEFAULT_COMMON_ANIMATION_PROPS\r\n} from './Displayable';\r\nimport Element, { ElementAnimateConfig } from '../Element';\r\nimport PathProxy from '../core/PathProxy';\r\nimport * as pathContain from '../contain/path';\r\nimport { PatternObject } from './Pattern';\r\nimport { Dictionary, PropType, MapToType } from '../core/types';\r\nimport BoundingRect from '../core/BoundingRect';\r\nimport { LinearGradientObject } from './LinearGradient';\r\nimport { RadialGradientObject } from './RadialGradient';\r\nimport { defaults, keys, extend, clone, isString, createObject } from '../core/util';\r\nimport Animator from '../animation/Animator';\r\nimport { lum } from '../tool/color';\r\nimport { DARK_LABEL_COLOR, LIGHT_LABEL_COLOR, DARK_MODE_THRESHOLD, LIGHTER_LABEL_COLOR } from '../config';\r\nimport { REDRAW_BIT, SHAPE_CHANGED_BIT, STYLE_CHANGED_BIT } from './constants';\r\nimport { TRANSFORMABLE_PROPS } from '../core/Transformable';\r\n\r\n\r\nexport interface PathStyleProps extends CommonStyleProps {\r\n    fill?: string | PatternObject | LinearGradientObject | RadialGradientObject\r\n    stroke?: string | PatternObject | LinearGradientObject | RadialGradientObject\r\n    decal?: PatternObject\r\n\r\n    /**\r\n     * Still experimental, not works weel on arc with edge cases(large angle).\r\n     */\r\n    strokePercent?: number\r\n    strokeNoScale?: boolean\r\n    fillOpacity?: number\r\n    strokeOpacity?: number\r\n\r\n    /**\r\n     * `true` is not supported.\r\n     * `false`/`null`/`undefined` are the same.\r\n     * `false` is used to remove lineDash in some\r\n     * case that `null`/`undefined` can not be set.\r\n     * (e.g., emphasis.lineStyle in echarts)\r\n     */\r\n    lineDash?: false | number[] | 'solid' | 'dashed' | 'dotted'\r\n    lineDashOffset?: number\r\n\r\n    lineWidth?: number\r\n    lineCap?: CanvasLineCap\r\n    lineJoin?: CanvasLineJoin\r\n\r\n    miterLimit?: number\r\n    /**\r\n     * Paint order, if do stroke first. Similar to SVG paint-order\r\n     * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/paint-order\r\n     */\r\n    strokeFirst?: boolean\r\n}\r\n\r\nexport const DEFAULT_PATH_STYLE: PathStyleProps = defaults({\r\n    fill: '#000',\r\n    stroke: null,\r\n    strokePercent: 1,\r\n    fillOpacity: 1,\r\n    strokeOpacity: 1,\r\n\r\n    lineDashOffset: 0,\r\n    lineWidth: 1,\r\n    lineCap: 'butt',\r\n    miterLimit: 10,\r\n\r\n    strokeNoScale: false,\r\n    strokeFirst: false\r\n} as PathStyleProps, DEFAULT_COMMON_STYLE);\r\n\r\n\r\nexport const DEFAULT_PATH_ANIMATION_PROPS: MapToType = {\r\n    style: defaults, MapToType>({\r\n        fill: true,\r\n        stroke: true,\r\n        strokePercent: true,\r\n        fillOpacity: true,\r\n        strokeOpacity: true,\r\n        lineDashOffset: true,\r\n        lineWidth: true,\r\n        miterLimit: true\r\n    } as MapToType, DEFAULT_COMMON_ANIMATION_PROPS.style)\r\n };\r\n\r\nexport interface PathProps extends DisplayableProps {\r\n    strokeContainThreshold?: number\r\n    segmentIgnoreThreshold?: number\r\n    subPixelOptimize?: boolean\r\n\r\n    style?: PathStyleProps\r\n    shape?: Dictionary\r\n\r\n    autoBatch?: boolean\r\n\r\n    __value?: (string | number)[] | (string | number)\r\n\r\n    buildPath?: (\r\n        ctx: PathProxy | CanvasRenderingContext2D,\r\n        shapeCfg: Dictionary,\r\n        inBatch?: boolean\r\n    ) => void\r\n}\r\n\r\n\r\ntype PathKey = keyof PathProps\r\ntype PathPropertyType = PropType\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\ninterface Path {\r\n    animate(key?: '', loop?: boolean): Animator\r\n    animate(key: 'style', loop?: boolean): Animator\r\n    animate(key: 'shape', loop?: boolean): Animator\r\n\r\n    getState(stateName: string): PathState\r\n    ensureState(stateName: string): PathState\r\n\r\n    states: Dictionary\r\n    stateProxy: (stateName: string) => PathState\r\n}\r\n\r\nexport type PathStatePropNames = DisplayableStatePropNames | 'shape';\r\nexport type PathState = Pick & {\r\n    hoverLayer?: boolean\r\n}\r\n\r\nconst pathCopyParams = (TRANSFORMABLE_PROPS as readonly string[]).concat(['invisible',\r\n    'culling', 'z', 'z2', 'zlevel', 'parent'\r\n]) as (keyof Path)[];\r\n\r\nclass Path extends Displayable {\r\n\r\n    path: PathProxy\r\n\r\n    strokeContainThreshold: number\r\n\r\n    // This item default to be false. But in map series in echarts,\r\n    // in order to improve performance, it should be set to true,\r\n    // so the shorty segment won't draw.\r\n    segmentIgnoreThreshold: number\r\n\r\n    subPixelOptimize: boolean\r\n\r\n    style: PathStyleProps\r\n    /**\r\n     * If element can be batched automatically\r\n     */\r\n    autoBatch: boolean\r\n\r\n    private _rectStroke: BoundingRect\r\n\r\n    protected _normalState: PathState\r\n\r\n    protected _decalEl: Path\r\n\r\n    // Must have an initial value on shape.\r\n    // It will be assigned by default value.\r\n    shape: Dictionary\r\n\r\n    constructor(opts?: Props) {\r\n        super(opts);\r\n    }\r\n\r\n    update() {\r\n        super.update();\r\n\r\n        const style = this.style;\r\n        if (style.decal) {\r\n            const decalEl: Path = this._decalEl = this._decalEl || new Path();\r\n            if (decalEl.buildPath === Path.prototype.buildPath) {\r\n                decalEl.buildPath = ctx => {\r\n                    this.buildPath(ctx, this.shape);\r\n                };\r\n            }\r\n\r\n            decalEl.silent = true;\r\n\r\n            const decalElStyle = decalEl.style;\r\n\r\n            for (let key in style) {\r\n                if ((decalElStyle as any)[key] !== (style as any)[key]) {\r\n                    (decalElStyle as any)[key] = (style as any)[key];\r\n                }\r\n            }\r\n            decalElStyle.fill = style.fill ? style.decal : null;\r\n            decalElStyle.decal = null;\r\n            decalElStyle.shadowColor = null;\r\n            style.strokeFirst && (decalElStyle.stroke = null);\r\n\r\n            for (let i = 0; i < pathCopyParams.length; ++i) {\r\n                (decalEl as any)[pathCopyParams[i]] = this[pathCopyParams[i]];\r\n            }\r\n\r\n            decalEl.__dirty |= REDRAW_BIT;\r\n        }\r\n        else if (this._decalEl) {\r\n            this._decalEl = null;\r\n        }\r\n    }\r\n\r\n    getDecalElement() {\r\n        return this._decalEl;\r\n    }\r\n\r\n    protected _init(props?: Props) {\r\n        // Init default properties\r\n        const keysArr = keys(props);\r\n\r\n        this.shape = this.getDefaultShape();\r\n        const defaultStyle = this.getDefaultStyle();\r\n        if (defaultStyle) {\r\n            this.useStyle(defaultStyle);\r\n        }\r\n\r\n        for (let i = 0; i < keysArr.length; i++) {\r\n            const key = keysArr[i];\r\n            const value = props[key];\r\n            if (key === 'style') {\r\n                if (!this.style) {\r\n                    // PENDING Reuse style object if possible?\r\n                    this.useStyle(value as Props['style']);\r\n                }\r\n                else {\r\n                    extend(this.style, value as Props['style']);\r\n                }\r\n            }\r\n            else if (key === 'shape') {\r\n                // this.shape = value;\r\n                extend(this.shape, value as Props['shape']);\r\n            }\r\n            else {\r\n                super.attrKV(key as any, value);\r\n            }\r\n        }\r\n\r\n        // Create an empty one if no style object exists.\r\n        if (!this.style) {\r\n            this.useStyle({});\r\n        }\r\n        // const defaultShape = this.getDefaultShape();\r\n        // if (!this.shape) {\r\n        //     this.shape = defaultShape;\r\n        // }\r\n        // else {\r\n        //     defaults(this.shape, defaultShape);\r\n        // }\r\n    }\r\n\r\n    protected getDefaultStyle(): Props['style'] {\r\n        return null;\r\n    }\r\n\r\n    // Needs to override\r\n    protected getDefaultShape() {\r\n        return {};\r\n    }\r\n\r\n    protected canBeInsideText() {\r\n        return this.hasFill();\r\n    }\r\n\r\n    protected getInsideTextFill() {\r\n        const pathFill = this.style.fill;\r\n        if (pathFill !== 'none') {\r\n            if (isString(pathFill)) {\r\n                const fillLum = lum(pathFill, 0);\r\n                // Determin text color based on the lum of path fill.\r\n                // TODO use (1 - DARK_MODE_THRESHOLD)?\r\n                if (fillLum > 0.5) {   // TODO Consider background lum?\r\n                    return DARK_LABEL_COLOR;\r\n                }\r\n                else if (fillLum > 0.2) {\r\n                    return LIGHTER_LABEL_COLOR;\r\n                }\r\n                return LIGHT_LABEL_COLOR;\r\n            }\r\n            else if (pathFill) {\r\n                return LIGHT_LABEL_COLOR;\r\n            }\r\n\r\n        }\r\n        return DARK_LABEL_COLOR;\r\n    }\r\n\r\n    protected getInsideTextStroke(textFill?: string) {\r\n        const pathFill = this.style.fill;\r\n        // Not stroke on none fill object or gradient object\r\n        if (isString(pathFill)) {\r\n            const zr = this.__zr;\r\n            const isDarkMode = !!(zr && zr.isDarkMode());\r\n            const isDarkLabel = lum(textFill, 0) < DARK_MODE_THRESHOLD;\r\n            // All dark or all light.\r\n            if (isDarkMode === isDarkLabel) {\r\n                return pathFill;\r\n            }\r\n        }\r\n    }\r\n\r\n    // When bundling path, some shape may decide if use moveTo to begin a new subpath or closePath\r\n    // Like in circle\r\n    buildPath(\r\n        ctx: PathProxy | CanvasRenderingContext2D,\r\n        shapeCfg: Dictionary,\r\n        inBatch?: boolean\r\n    ) {}\r\n\r\n    pathUpdated() {\r\n        this.__dirty &= ~SHAPE_CHANGED_BIT;\r\n    }\r\n\r\n    getUpdatedPathProxy(inBatch?: boolean) {\r\n        // Update path proxy data to latest.\r\n        !this.path && this.createPathProxy();\r\n        this.path.beginPath();\r\n        this.buildPath(this.path, this.shape, inBatch);\r\n        return this.path;\r\n    }\r\n\r\n    createPathProxy() {\r\n        this.path = new PathProxy(false);\r\n    }\r\n\r\n    hasStroke() {\r\n        const style = this.style;\r\n        const stroke = style.stroke;\r\n        return !(stroke == null || stroke === 'none' || !(style.lineWidth > 0));\r\n    }\r\n\r\n    hasFill() {\r\n        const style = this.style;\r\n        const fill = style.fill;\r\n        return fill != null && fill !== 'none';\r\n    }\r\n\r\n    getBoundingRect(): BoundingRect {\r\n        let rect = this._rect;\r\n        const style = this.style;\r\n        const needsUpdateRect = !rect;\r\n        if (needsUpdateRect) {\r\n            let firstInvoke = false;\r\n            if (!this.path) {\r\n                firstInvoke = true;\r\n                // Create path on demand.\r\n                this.createPathProxy();\r\n            }\r\n            let path = this.path;\r\n            if (firstInvoke || (this.__dirty & SHAPE_CHANGED_BIT)) {\r\n                path.beginPath();\r\n                this.buildPath(path, this.shape, false);\r\n                this.pathUpdated();\r\n            }\r\n            rect = path.getBoundingRect();\r\n        }\r\n        this._rect = rect;\r\n\r\n        if (this.hasStroke() && this.path && this.path.len() > 0) {\r\n            // Needs update rect with stroke lineWidth when\r\n            // 1. Element changes scale or lineWidth\r\n            // 2. Shape is changed\r\n            const rectStroke = this._rectStroke || (this._rectStroke = rect.clone());\r\n            if (this.__dirty || needsUpdateRect) {\r\n                rectStroke.copy(rect);\r\n                // PENDING, Min line width is needed when line is horizontal or vertical\r\n                const lineScale = style.strokeNoScale ? this.getLineScale() : 1;\r\n                // FIXME Must after updateTransform\r\n                let w = style.lineWidth;\r\n\r\n                // Only add extra hover lineWidth when there are no fill\r\n                if (!this.hasFill()) {\r\n                    const strokeContainThreshold = this.strokeContainThreshold;\r\n                    w = Math.max(w, strokeContainThreshold == null ? 4 : strokeContainThreshold);\r\n                }\r\n                // Consider line width\r\n                // Line scale can't be 0;\r\n                if (lineScale > 1e-10) {\r\n                    rectStroke.width += w / lineScale;\r\n                    rectStroke.height += w / lineScale;\r\n                    rectStroke.x -= w / lineScale / 2;\r\n                    rectStroke.y -= w / lineScale / 2;\r\n                }\r\n            }\r\n\r\n            // Return rect with stroke\r\n            return rectStroke;\r\n        }\r\n\r\n        return rect;\r\n    }\r\n\r\n    contain(x: number, y: number): boolean {\r\n        const localPos = this.transformCoordToLocal(x, y);\r\n        const rect = this.getBoundingRect();\r\n        const style = this.style;\r\n        x = localPos[0];\r\n        y = localPos[1];\r\n\r\n        if (rect.contain(x, y)) {\r\n            const pathProxy = this.path;\r\n            if (this.hasStroke()) {\r\n                let lineWidth = style.lineWidth;\r\n                let lineScale = style.strokeNoScale ? this.getLineScale() : 1;\r\n                // Line scale can't be 0;\r\n                if (lineScale > 1e-10) {\r\n                    // Only add extra hover lineWidth when there are no fill\r\n                    if (!this.hasFill()) {\r\n                        lineWidth = Math.max(lineWidth, this.strokeContainThreshold);\r\n                    }\r\n                    if (pathContain.containStroke(\r\n                        pathProxy, lineWidth / lineScale, x, y\r\n                    )) {\r\n                        return true;\r\n                    }\r\n                }\r\n            }\r\n            if (this.hasFill()) {\r\n                return pathContain.contain(pathProxy, x, y);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Shape changed\r\n     */\r\n    dirtyShape() {\r\n        this.__dirty |= SHAPE_CHANGED_BIT;\r\n        if (this._rect) {\r\n            this._rect = null;\r\n        }\r\n        if (this._decalEl) {\r\n            this._decalEl.dirtyShape();\r\n        }\r\n        this.markRedraw();\r\n    }\r\n\r\n    dirty() {\r\n        this.dirtyStyle();\r\n        this.dirtyShape();\r\n    }\r\n\r\n    /**\r\n     * Alias for animate('shape')\r\n     * @param {boolean} loop\r\n     */\r\n    animateShape(loop: boolean) {\r\n        return this.animate('shape', loop);\r\n    }\r\n\r\n    // Override updateDuringAnimation\r\n    updateDuringAnimation(targetKey: string) {\r\n        if (targetKey === 'style') {\r\n            this.dirtyStyle();\r\n        }\r\n        else if (targetKey === 'shape') {\r\n            this.dirtyShape();\r\n        }\r\n        else {\r\n            this.markRedraw();\r\n        }\r\n    }\r\n\r\n    // Overwrite attrKV\r\n    attrKV(key: PathKey, value: PathPropertyType) {\r\n        // FIXME\r\n        if (key === 'shape') {\r\n            this.setShape(value as Props['shape']);\r\n        }\r\n        else {\r\n            super.attrKV(key as keyof DisplayableProps, value);\r\n        }\r\n    }\r\n\r\n    setShape(obj: Props['shape']): this\r\n    setShape(obj: T, value: Props['shape'][T]): this\r\n    setShape(keyOrObj: keyof Props['shape'] | Props['shape'], value?: unknown): this {\r\n        let shape = this.shape;\r\n        if (!shape) {\r\n            shape = this.shape = {};\r\n        }\r\n        // Path from string may not have shape\r\n        if (typeof keyOrObj === 'string') {\r\n            shape[keyOrObj] = value;\r\n        }\r\n        else {\r\n            extend(shape, keyOrObj as Props['shape']);\r\n        }\r\n        this.dirtyShape();\r\n\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * If shape changed. used with dirtyShape\r\n     */\r\n    shapeChanged() {\r\n        return !!(this.__dirty & SHAPE_CHANGED_BIT);\r\n    }\r\n\r\n    /**\r\n     * Create a path style object with default values in it's prototype.\r\n     * @override\r\n     */\r\n    createStyle(obj?: Props['style']) {\r\n        return createObject(DEFAULT_PATH_STYLE, obj);\r\n    }\r\n\r\n    protected _innerSaveToNormal(toState: PathState) {\r\n        super._innerSaveToNormal(toState);\r\n\r\n        const normalState = this._normalState;\r\n        // Clone a new one. DON'T share object reference between states and current using.\r\n        // TODO: Clone array in shape?.\r\n        // TODO: Only save changed shape.\r\n        if (toState.shape && !normalState.shape) {\r\n            normalState.shape = extend({}, this.shape);\r\n        }\r\n    }\r\n\r\n    protected _applyStateObj(\r\n        stateName: string,\r\n        state: PathState,\r\n        normalState: PathState,\r\n        keepCurrentStates: boolean,\r\n        transition: boolean,\r\n        animationCfg: ElementAnimateConfig\r\n    ) {\r\n        super._applyStateObj(stateName, state, normalState, keepCurrentStates, transition, animationCfg);\r\n        const needsRestoreToNormal = !(state && keepCurrentStates);\r\n        let targetShape: Props['shape'];\r\n        if (state && state.shape) {\r\n            // Only animate changed properties.\r\n            if (transition) {\r\n                if (keepCurrentStates) {\r\n                    targetShape = state.shape;\r\n                }\r\n                else {\r\n                    // Inherits from normal state.\r\n                    targetShape = extend({}, normalState.shape);\r\n                    extend(targetShape, state.shape);\r\n                }\r\n            }\r\n            else {\r\n                // Because the shape will be replaced. So inherits from current shape.\r\n                targetShape = extend({}, keepCurrentStates ? this.shape : normalState.shape);\r\n                extend(targetShape, state.shape);\r\n            }\r\n        }\r\n        else if (needsRestoreToNormal) {\r\n            targetShape = normalState.shape;\r\n        }\r\n\r\n        if (targetShape) {\r\n            if (transition) {\r\n                // Clone a new shape.\r\n                this.shape = extend({}, this.shape);\r\n                // Only supports transition on primary props. Because shape is not deep cloned.\r\n                const targetShapePrimaryProps: Props['shape'] = {};\r\n                const shapeKeys = keys(targetShape);\r\n                for (let i = 0; i < shapeKeys.length; i++) {\r\n                    const key = shapeKeys[i];\r\n                    if (typeof targetShape[key] === 'object') {\r\n                        (this.shape as Props['shape'])[key] = targetShape[key];\r\n                    }\r\n                    else {\r\n                        targetShapePrimaryProps[key] = targetShape[key];\r\n                    }\r\n                }\r\n                this._transitionState(stateName, {\r\n                    shape: targetShapePrimaryProps\r\n                } as Props, animationCfg);\r\n            }\r\n            else {\r\n                this.shape = targetShape;\r\n                this.dirtyShape();\r\n            }\r\n        }\r\n    }\r\n\r\n    protected _mergeStates(states: PathState[]) {\r\n        const mergedState = super._mergeStates(states) as PathState;\r\n        let mergedShape: Props['shape'];\r\n        for (let i = 0; i < states.length; i++) {\r\n            const state = states[i];\r\n            if (state.shape) {\r\n                mergedShape = mergedShape || {};\r\n                this._mergeStyle(mergedShape, state.shape);\r\n            }\r\n        }\r\n        if (mergedShape) {\r\n            mergedState.shape = mergedShape;\r\n        }\r\n        return mergedState;\r\n    }\r\n\r\n    getAnimationStyleProps() {\r\n        return DEFAULT_PATH_ANIMATION_PROPS;\r\n    }\r\n    /**\r\n     * If path shape is zero area\r\n     */\r\n    isZeroArea(): boolean {\r\n        return false;\r\n    }\r\n    /**\r\n     * 扩展一个 Path element, 比如星形,圆等。\r\n     * Extend a path element\r\n     * @DEPRECATED Use class extends\r\n     * @param props\r\n     * @param props.type Path type\r\n     * @param props.init Initialize\r\n     * @param props.buildPath Overwrite buildPath method\r\n     * @param props.style Extended default style config\r\n     * @param props.shape Extended default shape config\r\n     */\r\n    static extend>(defaultProps: {\r\n        type?: string\r\n        shape?: Shape\r\n        style?: PathStyleProps\r\n        beforeBrush?: Displayable['beforeBrush']\r\n        afterBrush?: Displayable['afterBrush']\r\n        getBoundingRect?: Displayable['getBoundingRect']\r\n\r\n        calculateTextPosition?: Element['calculateTextPosition']\r\n        buildPath(this: Path, ctx: CanvasRenderingContext2D | PathProxy, shape: Shape, inBatch?: boolean): void\r\n        init?(this: Path, opts: PathProps): void // TODO Should be SubPathOption\r\n    }): {\r\n        new(opts?: PathProps & {shape: Shape}): Path\r\n    } {\r\n        interface SubPathOption extends PathProps {\r\n            shape: Shape\r\n        }\r\n\r\n        class Sub extends Path {\r\n\r\n            shape: Shape\r\n\r\n            getDefaultStyle() {\r\n                return clone(defaultProps.style);\r\n            }\r\n\r\n            getDefaultShape() {\r\n                return clone(defaultProps.shape);\r\n            }\r\n\r\n            constructor(opts?: SubPathOption) {\r\n                super(opts);\r\n                defaultProps.init && defaultProps.init.call(this as any, opts);\r\n            }\r\n        }\r\n\r\n        // TODO Legacy usage. Extend functions\r\n        for (let key in defaultProps) {\r\n            if (typeof (defaultProps as any)[key] === 'function') {\r\n                (Sub.prototype as any)[key] = (defaultProps as any)[key];\r\n            }\r\n        }\r\n        // Sub.prototype.buildPath = defaultProps.buildPath;\r\n        // Sub.prototype.beforeBrush = defaultProps.beforeBrush;\r\n        // Sub.prototype.afterBrush = defaultProps.afterBrush;\r\n\r\n        return Sub as any;\r\n    }\r\n\r\n    protected static initDefaultProps = (function () {\r\n        const pathProto = Path.prototype;\r\n        pathProto.type = 'path';\r\n        pathProto.strokeContainThreshold = 5;\r\n        pathProto.segmentIgnoreThreshold = 0;\r\n        pathProto.subPixelOptimize = false;\r\n        pathProto.autoBatch = false;\r\n        pathProto.__dirty = REDRAW_BIT | STYLE_CHANGED_BIT | SHAPE_CHANGED_BIT;\r\n    })()\r\n}\r\n\r\nexport default Path;","import PathProxy from '../core/PathProxy';\r\nimport {applyTransform as v2ApplyTransform, VectorArray} from '../core/vector';\r\nimport { MatrixArray } from '../core/matrix';\r\n\r\nconst CMD = PathProxy.CMD;\r\n\r\nconst points: VectorArray[] = [[], [], []];\r\nconst mathSqrt = Math.sqrt;\r\nconst mathAtan2 = Math.atan2;\r\n\r\nexport default function transformPath(path: PathProxy, m: MatrixArray) {\r\n    if (!m) {\r\n        return;\r\n    }\r\n\r\n    let data = path.data;\r\n    const len = path.len();\r\n    let cmd;\r\n    let nPoint: number;\r\n    let i: number;\r\n    let j: number;\r\n    let k: number;\r\n    let p: VectorArray;\r\n\r\n    const M = CMD.M;\r\n    const C = CMD.C;\r\n    const L = CMD.L;\r\n    const R = CMD.R;\r\n    const A = CMD.A;\r\n    const Q = CMD.Q;\r\n\r\n    for (i = 0, j = 0; i < len;) {\r\n        cmd = data[i++];\r\n        j = i;\r\n        nPoint = 0;\r\n\r\n        switch (cmd) {\r\n            case M:\r\n                nPoint = 1;\r\n                break;\r\n            case L:\r\n                nPoint = 1;\r\n                break;\r\n            case C:\r\n                nPoint = 3;\r\n                break;\r\n            case Q:\r\n                nPoint = 2;\r\n                break;\r\n            case A:\r\n                const x = m[4];\r\n                const y = m[5];\r\n                const sx = mathSqrt(m[0] * m[0] + m[1] * m[1]);\r\n                const sy = mathSqrt(m[2] * m[2] + m[3] * m[3]);\r\n                const angle = mathAtan2(-m[1] / sy, m[0] / sx);\r\n                // cx\r\n                data[i] *= sx;\r\n                data[i++] += x;\r\n                // cy\r\n                data[i] *= sy;\r\n                data[i++] += y;\r\n                // Scale rx and ry\r\n                // FIXME Assume psi is 0 here\r\n                data[i++] *= sx;\r\n                data[i++] *= sy;\r\n\r\n                // Start angle\r\n                data[i++] += angle;\r\n                // end angle\r\n                data[i++] += angle;\r\n                // FIXME psi\r\n                i += 2;\r\n                j = i;\r\n                break;\r\n            case R:\r\n                // x0, y0\r\n                p[0] = data[i++];\r\n                p[1] = data[i++];\r\n                v2ApplyTransform(p, p, m);\r\n                data[j++] = p[0];\r\n                data[j++] = p[1];\r\n                // x1, y1\r\n                p[0] += data[i++];\r\n                p[1] += data[i++];\r\n                v2ApplyTransform(p, p, m);\r\n                data[j++] = p[0];\r\n                data[j++] = p[1];\r\n        }\r\n\r\n        for (k = 0; k < nPoint; k++) {\r\n            let p = points[k];\r\n            p[0] = data[i++];\r\n            p[1] = data[i++];\r\n\r\n            v2ApplyTransform(p, p, m);\r\n            // Write back\r\n            data[j++] = p[0];\r\n            data[j++] = p[1];\r\n        }\r\n    }\r\n\r\n    path.increaseVersion();\r\n}\r\n","import Path, { PathProps } from '../graphic/Path';\nimport PathProxy from '../core/PathProxy';\nimport transformPath from './transformPath';\nimport { VectorArray } from '../core/vector';\nimport { MatrixArray } from '../core/matrix';\nimport { extend } from '../core/util';\n\n// command chars\n// const cc = [\n//     'm', 'M', 'l', 'L', 'v', 'V', 'h', 'H', 'z', 'Z',\n//     'c', 'C', 'q', 'Q', 't', 'T', 's', 'S', 'a', 'A'\n// ];\n\nconst mathSqrt = Math.sqrt;\nconst mathSin = Math.sin;\nconst mathCos = Math.cos;\nconst PI = Math.PI;\n\nfunction vMag(v: VectorArray): number {\n    return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n};\nfunction vRatio(u: VectorArray, v: VectorArray): number {\n    return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));\n};\nfunction vAngle(u: VectorArray, v: VectorArray): number {\n    return (u[0] * v[1] < u[1] * v[0] ? -1 : 1)\n            * Math.acos(vRatio(u, v));\n};\n\nfunction processArc(\n    x1: number, y1: number, x2: number, y2: number, fa: number, fs: number,\n    rx: number, ry: number, psiDeg: number, cmd: number, path: PathProxy\n) {\n    // https://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n    const psi = psiDeg * (PI / 180.0);\n    const xp = mathCos(psi) * (x1 - x2) / 2.0\n                + mathSin(psi) * (y1 - y2) / 2.0;\n    const yp = -1 * mathSin(psi) * (x1 - x2) / 2.0\n                + mathCos(psi) * (y1 - y2) / 2.0;\n\n    const lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n\n    if (lambda > 1) {\n        rx *= mathSqrt(lambda);\n        ry *= mathSqrt(lambda);\n    }\n\n    const f = (fa === fs ? -1 : 1)\n        * mathSqrt((((rx * rx) * (ry * ry))\n                - ((rx * rx) * (yp * yp))\n                - ((ry * ry) * (xp * xp))) / ((rx * rx) * (yp * yp)\n                + (ry * ry) * (xp * xp))\n            ) || 0;\n\n    const cxp = f * rx * yp / ry;\n    const cyp = f * -ry * xp / rx;\n\n    const cx = (x1 + x2) / 2.0\n                + mathCos(psi) * cxp\n                - mathSin(psi) * cyp;\n    const cy = (y1 + y2) / 2.0\n            + mathSin(psi) * cxp\n            + mathCos(psi) * cyp;\n\n    const theta = vAngle([ 1, 0 ], [ (xp - cxp) / rx, (yp - cyp) / ry ]);\n    const u = [ (xp - cxp) / rx, (yp - cyp) / ry ];\n    const v = [ (-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry ];\n    let dTheta = vAngle(u, v);\n\n    if (vRatio(u, v) <= -1) {\n        dTheta = PI;\n    }\n    if (vRatio(u, v) >= 1) {\n        dTheta = 0;\n    }\n\n    if (dTheta < 0) {\n        const n = Math.round(dTheta / PI * 1e6) / 1e6;\n        // Convert to positive\n        dTheta = PI * 2 + (n % 2) * PI;\n    }\n\n    path.addData(cmd, cx, cy, rx, ry, theta, dTheta, psi, fs);\n}\n\n\nconst commandReg = /([mlvhzcqtsa])([^mlvhzcqtsa]*)/ig;\n// Consider case:\n// (1) delimiter can be comma or space, where continuous commas\n// or spaces should be seen as one comma.\n// (2) value can be like:\n// '2e-4', 'l.5.9' (ignore 0), 'M-10-10', 'l-2.43e-1,34.9983',\n// 'l-.5E1,54', '121-23-44-11' (no delimiter)\nconst numberReg = /-?([0-9]*\\.)?[0-9]+([eE]-?[0-9]+)?/g;\n// const valueSplitReg = /[\\s,]+/;\n\nfunction createPathProxyFromString(data: string) {\n    const path = new PathProxy();\n\n    if (!data) {\n        return path;\n    }\n\n    // const data = data.replace(/-/g, ' -')\n    //     .replace(/  /g, ' ')\n    //     .replace(/ /g, ',')\n    //     .replace(/,,/g, ',');\n\n    // const n;\n    // create pipes so that we can split the data\n    // for (n = 0; n < cc.length; n++) {\n    //     cs = cs.replace(new RegExp(cc[n], 'g'), '|' + cc[n]);\n    // }\n\n    // data = data.replace(/-/g, ',-');\n\n    // create array\n    // const arr = cs.split('|');\n    // init context point\n    let cpx = 0;\n    let cpy = 0;\n    let subpathX = cpx;\n    let subpathY = cpy;\n    let prevCmd;\n\n    const CMD = PathProxy.CMD;\n\n    // commandReg.lastIndex = 0;\n    // const cmdResult;\n    // while ((cmdResult = commandReg.exec(data)) != null) {\n    //     const cmdStr = cmdResult[1];\n    //     const cmdContent = cmdResult[2];\n\n    const cmdList = data.match(commandReg);\n    if (!cmdList) {\n        // Invalid svg path.\n        return path;\n    }\n\n    for (let l = 0; l < cmdList.length; l++) {\n        const cmdText = cmdList[l];\n        let cmdStr = cmdText.charAt(0);\n\n        let cmd;\n\n        // String#split is faster a little bit than String#replace or RegExp#exec.\n        // const p = cmdContent.split(valueSplitReg);\n        // const pLen = 0;\n        // for (let i = 0; i < p.length; i++) {\n        //     // '' and other invalid str => NaN\n        //     const val = parseFloat(p[i]);\n        //     !isNaN(val) && (p[pLen++] = val);\n        // }\n\n\n        // Following code will convert string to number. So convert type to number here\n        const p = cmdText.match(numberReg) as any[] as number[] || [];\n        const pLen = p.length;\n        for (let i = 0; i < pLen; i++) {\n            p[i] = parseFloat(p[i] as any as string);\n        }\n\n        let off = 0;\n        while (off < pLen) {\n            let ctlPtx;\n            let ctlPty;\n\n            let rx;\n            let ry;\n            let psi;\n            let fa;\n            let fs;\n\n            let x1 = cpx;\n            let y1 = cpy;\n\n            let len: number;\n            let pathData: number[] | Float32Array;\n            // convert l, H, h, V, and v to L\n            switch (cmdStr) {\n                case 'l':\n                    cpx += p[off++];\n                    cpy += p[off++];\n                    cmd = CMD.L;\n                    path.addData(cmd, cpx, cpy);\n                    break;\n                case 'L':\n                    cpx = p[off++];\n                    cpy = p[off++];\n                    cmd = CMD.L;\n                    path.addData(cmd, cpx, cpy);\n                    break;\n                case 'm':\n                    cpx += p[off++];\n                    cpy += p[off++];\n                    cmd = CMD.M;\n                    path.addData(cmd, cpx, cpy);\n                    subpathX = cpx;\n                    subpathY = cpy;\n                    cmdStr = 'l';\n                    break;\n                case 'M':\n                    cpx = p[off++];\n                    cpy = p[off++];\n                    cmd = CMD.M;\n                    path.addData(cmd, cpx, cpy);\n                    subpathX = cpx;\n                    subpathY = cpy;\n                    cmdStr = 'L';\n                    break;\n                case 'h':\n                    cpx += p[off++];\n                    cmd = CMD.L;\n                    path.addData(cmd, cpx, cpy);\n                    break;\n                case 'H':\n                    cpx = p[off++];\n                    cmd = CMD.L;\n                    path.addData(cmd, cpx, cpy);\n                    break;\n                case 'v':\n                    cpy += p[off++];\n                    cmd = CMD.L;\n                    path.addData(cmd, cpx, cpy);\n                    break;\n                case 'V':\n                    cpy = p[off++];\n                    cmd = CMD.L;\n                    path.addData(cmd, cpx, cpy);\n                    break;\n                case 'C':\n                    cmd = CMD.C;\n                    path.addData(\n                        cmd, p[off++], p[off++], p[off++], p[off++], p[off++], p[off++]\n                    );\n                    cpx = p[off - 2];\n                    cpy = p[off - 1];\n                    break;\n                case 'c':\n                    cmd = CMD.C;\n                    path.addData(\n                        cmd,\n                        p[off++] + cpx, p[off++] + cpy,\n                        p[off++] + cpx, p[off++] + cpy,\n                        p[off++] + cpx, p[off++] + cpy\n                    );\n                    cpx += p[off - 2];\n                    cpy += p[off - 1];\n                    break;\n                case 'S':\n                    ctlPtx = cpx;\n                    ctlPty = cpy;\n                    len = path.len();\n                    pathData = path.data;\n                    if (prevCmd === CMD.C) {\n                        ctlPtx += cpx - pathData[len - 4];\n                        ctlPty += cpy - pathData[len - 3];\n                    }\n                    cmd = CMD.C;\n                    x1 = p[off++];\n                    y1 = p[off++];\n                    cpx = p[off++];\n                    cpy = p[off++];\n                    path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy);\n                    break;\n                case 's':\n                    ctlPtx = cpx;\n                    ctlPty = cpy;\n                    len = path.len();\n                    pathData = path.data;\n                    if (prevCmd === CMD.C) {\n                        ctlPtx += cpx - pathData[len - 4];\n                        ctlPty += cpy - pathData[len - 3];\n                    }\n                    cmd = CMD.C;\n                    x1 = cpx + p[off++];\n                    y1 = cpy + p[off++];\n                    cpx += p[off++];\n                    cpy += p[off++];\n                    path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy);\n                    break;\n                case 'Q':\n                    x1 = p[off++];\n                    y1 = p[off++];\n                    cpx = p[off++];\n                    cpy = p[off++];\n                    cmd = CMD.Q;\n                    path.addData(cmd, x1, y1, cpx, cpy);\n                    break;\n                case 'q':\n                    x1 = p[off++] + cpx;\n                    y1 = p[off++] + cpy;\n                    cpx += p[off++];\n                    cpy += p[off++];\n                    cmd = CMD.Q;\n                    path.addData(cmd, x1, y1, cpx, cpy);\n                    break;\n                case 'T':\n                    ctlPtx = cpx;\n                    ctlPty = cpy;\n                    len = path.len();\n                    pathData = path.data;\n                    if (prevCmd === CMD.Q) {\n                        ctlPtx += cpx - pathData[len - 4];\n                        ctlPty += cpy - pathData[len - 3];\n                    }\n                    cpx = p[off++];\n                    cpy = p[off++];\n                    cmd = CMD.Q;\n                    path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);\n                    break;\n                case 't':\n                    ctlPtx = cpx;\n                    ctlPty = cpy;\n                    len = path.len();\n                    pathData = path.data;\n                    if (prevCmd === CMD.Q) {\n                        ctlPtx += cpx - pathData[len - 4];\n                        ctlPty += cpy - pathData[len - 3];\n                    }\n                    cpx += p[off++];\n                    cpy += p[off++];\n                    cmd = CMD.Q;\n                    path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);\n                    break;\n                case 'A':\n                    rx = p[off++];\n                    ry = p[off++];\n                    psi = p[off++];\n                    fa = p[off++];\n                    fs = p[off++];\n\n                    x1 = cpx, y1 = cpy;\n                    cpx = p[off++];\n                    cpy = p[off++];\n                    cmd = CMD.A;\n                    processArc(\n                        x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path\n                    );\n                    break;\n                case 'a':\n                    rx = p[off++];\n                    ry = p[off++];\n                    psi = p[off++];\n                    fa = p[off++];\n                    fs = p[off++];\n\n                    x1 = cpx, y1 = cpy;\n                    cpx += p[off++];\n                    cpy += p[off++];\n                    cmd = CMD.A;\n                    processArc(\n                        x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path\n                    );\n                    break;\n            }\n        }\n\n        if (cmdStr === 'z' || cmdStr === 'Z') {\n            cmd = CMD.Z;\n            path.addData(cmd);\n            // z may be in the middle of the path.\n            cpx = subpathX;\n            cpy = subpathY;\n        }\n\n        prevCmd = cmd;\n    }\n\n    path.toStatic();\n\n    return path;\n}\n\ntype SVGPathOption = Omit\ninterface InnerSVGPathOption extends PathProps {\n    applyTransform?: (m: MatrixArray) => void\n}\nclass SVGPath extends Path {\n    applyTransform(m: MatrixArray) {}\n}\n\nfunction isPathProxy(path: PathProxy | CanvasRenderingContext2D): path is PathProxy {\n    return (path as PathProxy).setData != null;\n}\n// TODO Optimize double memory cost problem\nfunction createPathOptions(str: string, opts: SVGPathOption): InnerSVGPathOption {\n    const pathProxy = createPathProxyFromString(str);\n    const innerOpts: InnerSVGPathOption = extend({}, opts);\n    innerOpts.buildPath = function (path: PathProxy | CanvasRenderingContext2D) {\n        if (isPathProxy(path)) {\n            path.setData(pathProxy.data);\n            // Svg and vml renderer don't have context\n            const ctx = path.getContext();\n            if (ctx) {\n                path.rebuildPath(ctx, 1);\n            }\n        }\n        else {\n            const ctx = path;\n            pathProxy.rebuildPath(ctx, 1);\n        }\n    };\n\n    innerOpts.applyTransform = function (this: SVGPath, m: MatrixArray) {\n        transformPath(pathProxy, m);\n        this.dirtyShape();\n    };\n\n    return innerOpts;\n}\n\n/**\n * Create a Path object from path string data\n * http://www.w3.org/TR/SVG/paths.html#PathData\n * @param  opts Other options\n */\nexport function createFromString(str: string, opts?: SVGPathOption): SVGPath {\n    // PENDING\n    return new SVGPath(createPathOptions(str, opts));\n}\n\n/**\n * Create a Path class from path string data\n * @param  str\n * @param  opts Other options\n */\nexport function extendFromString(str: string, defaultOpts?: SVGPathOption): typeof SVGPath {\n    const innerOpts = createPathOptions(str, defaultOpts);\n    class Sub extends SVGPath {\n        constructor(opts: InnerSVGPathOption) {\n            super(opts);\n            this.applyTransform = innerOpts.applyTransform;\n            this.buildPath = innerOpts.buildPath;\n        }\n    }\n    return Sub;\n}\n\n/**\n * Merge multiple paths\n */\n// TODO Apply transform\n// TODO stroke dash\n// TODO Optimize double memory cost problem\nexport function mergePath(pathEls: Path[], opts: PathProps) {\n    const pathList: PathProxy[] = [];\n    const len = pathEls.length;\n    for (let i = 0; i < len; i++) {\n        const pathEl = pathEls[i];\n        pathList.push(pathEl.getUpdatedPathProxy(true));\n    }\n\n    const pathBundle = new Path(opts);\n    // Need path proxy.\n    pathBundle.createPathProxy();\n    pathBundle.buildPath = function (path: PathProxy | CanvasRenderingContext2D) {\n        if (isPathProxy(path)) {\n            path.appendPath(pathList);\n            // Svg and vml renderer don't have context\n            const ctx = path.getContext();\n            if (ctx) {\n                // Path bundle not support percent draw.\n                path.rebuildPath(ctx, 1);\n            }\n        }\n    };\n\n    return pathBundle;\n}\n\n/**\n * Clone a path.\n */\nexport function clonePath(sourcePath: Path, opts?: {\n    /**\n     * If bake global transform to path.\n     */\n    bakeTransform?: boolean\n    /**\n     * Convert global transform to local.\n     */\n    toLocal?: boolean\n}) {\n    opts = opts || {};\n    const path = new Path();\n    if (sourcePath.shape) {\n        path.setShape(sourcePath.shape);\n    }\n    path.setStyle(sourcePath.style);\n\n    if (opts.bakeTransform) {\n        transformPath(path.path, sourcePath.getComputedTransform());\n    }\n    else {\n        // TODO Copy getLocalTransform, updateTransform since they can be changed.\n        if (opts.toLocal) {\n            path.setLocalTransform(sourcePath.getComputedTransform());\n        }\n        else {\n            path.copyTransform(sourcePath);\n        }\n    }\n\n    // These methods may be overridden\n    path.buildPath = sourcePath.buildPath;\n    (path as SVGPath).applyTransform = (path as SVGPath).applyTransform;\n\n    path.z = sourcePath.z;\n    path.z2 = sourcePath.z2;\n    path.zlevel = sourcePath.zlevel;\n\n    return path;\n}\n","import Displayable, { DisplayableProps,\n    CommonStyleProps,\n    DEFAULT_COMMON_STYLE,\n    DisplayableStatePropNames,\n    DEFAULT_COMMON_ANIMATION_PROPS\n} from './Displayable';\nimport BoundingRect from '../core/BoundingRect';\nimport { ImageLike, MapToType } from '../core/types';\nimport { defaults, createObject } from '../core/util';\nimport { ElementCommonState } from '../Element';\n\nexport interface ImageStyleProps extends CommonStyleProps {\n    image?: string | ImageLike\n    x?: number\n    y?: number\n    width?: number\n    height?: number\n    sx?: number\n    sy?: number\n    sWidth?: number\n    sHeight?: number\n}\n\nexport const DEFAULT_IMAGE_STYLE: CommonStyleProps = defaults({\n    x: 0,\n    y: 0\n}, DEFAULT_COMMON_STYLE);\n\nexport const DEFAULT_IMAGE_ANIMATION_PROPS: MapToType = {\n    style: defaults, MapToType>({\n        x: true,\n        y: true,\n        width: true,\n        height: true,\n        sx: true,\n        sy: true,\n        sWidth: true,\n        sHeight: true\n    }, DEFAULT_COMMON_ANIMATION_PROPS.style)\n };\n\nexport interface ImageProps extends DisplayableProps {\n    style?: ImageStyleProps\n\n    onload?: (image: ImageLike) => void\n}\n\nexport type ImageState = Pick & ElementCommonState\n\nfunction isImageLike(source: unknown): source is HTMLImageElement {\n    return !!(source\n        && typeof source !== 'string'\n        // Image source is an image, canvas, video.\n        && (source as HTMLImageElement).width && (source as HTMLImageElement).height);\n}\n\nclass ZRImage extends Displayable {\n\n    style: ImageStyleProps\n\n    // FOR CANVAS RENDERER\n    __image: ImageLike\n    // FOR SVG RENDERER\n    __imageSrc: string\n\n    onload: (image: ImageLike) => void\n\n    /**\n     * Create an image style object with default values in it's prototype.\n     * @override\n     */\n    createStyle(obj?: ImageStyleProps) {\n        return createObject(DEFAULT_IMAGE_STYLE, obj);\n    }\n\n    private _getSize(dim: 'width' | 'height') {\n        const style = this.style;\n\n        let size = style[dim];\n        if (size != null) {\n            return size;\n        }\n\n        const imageSource = isImageLike(style.image)\n            ? style.image : this.__image;\n\n        if (!imageSource) {\n            return 0;\n        }\n\n        const otherDim = dim === 'width' ? 'height' : 'width';\n        let otherDimSize = style[otherDim];\n        if (otherDimSize == null) {\n            return imageSource[dim];\n        }\n        else {\n            return imageSource[dim] / imageSource[otherDim] * otherDimSize;\n        }\n    }\n\n    getWidth(): number {\n        return this._getSize('width');\n    }\n\n    getHeight(): number {\n        return this._getSize('height');\n    }\n\n    getAnimationStyleProps() {\n        return DEFAULT_IMAGE_ANIMATION_PROPS;\n    }\n\n    getBoundingRect(): BoundingRect {\n        const style = this.style;\n        if (!this._rect) {\n            this._rect = new BoundingRect(\n                style.x || 0, style.y || 0, this.getWidth(), this.getHeight()\n            );\n        }\n        return this._rect;\n    }\n}\n\nZRImage.prototype.type = 'image';\n\nexport default ZRImage;","/**\r\n * 圆形\r\n */\r\n\r\nimport Path, { PathProps } from '../Path';\r\n\r\nexport class CircleShape {\r\n    cx = 0\r\n    cy = 0\r\n    r = 0\r\n}\r\n\r\nexport interface CircleProps extends PathProps {\r\n    shape?: Partial\r\n}\r\nclass Circle extends Path {\r\n\r\n    shape: CircleShape\r\n\r\n    constructor(opts?: CircleProps) {\r\n        super(opts);\r\n    }\r\n\r\n    getDefaultShape() {\r\n        return new CircleShape();\r\n    }\r\n\r\n    buildPath(ctx: CanvasRenderingContext2D, shape: CircleShape) {\r\n        // Use moveTo to start a new sub path.\r\n        // Or it will be connected to other subpaths when in CompoundPath\r\n        ctx.moveTo(shape.cx + shape.r, shape.cy);\r\n        ctx.arc(shape.cx, shape.cy, shape.r, 0, Math.PI * 2);\r\n    }\r\n};\r\n\r\nCircle.prototype.type = 'circle';\r\n\r\nexport default Circle;","import PathProxy from '../../core/PathProxy';\r\n\r\nexport function buildPath(ctx: CanvasRenderingContext2D | PathProxy, shape: {\r\n    x: number\r\n    y: number\r\n    width: number\r\n    height: number\r\n    r?: number | number[]\r\n}) {\r\n    let x = shape.x;\r\n    let y = shape.y;\r\n    let width = shape.width;\r\n    let height = shape.height;\r\n    let r = shape.r;\r\n    let r1;\r\n    let r2;\r\n    let r3;\r\n    let r4;\r\n\r\n    // Convert width and height to positive for better borderRadius\r\n    if (width < 0) {\r\n        x = x + width;\r\n        width = -width;\r\n    }\r\n    if (height < 0) {\r\n        y = y + height;\r\n        height = -height;\r\n    }\r\n\r\n    if (typeof r === 'number') {\r\n        r1 = r2 = r3 = r4 = r;\r\n    }\r\n    else if (r instanceof Array) {\r\n        if (r.length === 1) {\r\n            r1 = r2 = r3 = r4 = r[0];\r\n        }\r\n        else if (r.length === 2) {\r\n            r1 = r3 = r[0];\r\n            r2 = r4 = r[1];\r\n        }\r\n        else if (r.length === 3) {\r\n            r1 = r[0];\r\n            r2 = r4 = r[1];\r\n            r3 = r[2];\r\n        }\r\n        else {\r\n            r1 = r[0];\r\n            r2 = r[1];\r\n            r3 = r[2];\r\n            r4 = r[3];\r\n        }\r\n    }\r\n    else {\r\n        r1 = r2 = r3 = r4 = 0;\r\n    }\r\n\r\n    let total;\r\n    if (r1 + r2 > width) {\r\n        total = r1 + r2;\r\n        r1 *= width / total;\r\n        r2 *= width / total;\r\n    }\r\n    if (r3 + r4 > width) {\r\n        total = r3 + r4;\r\n        r3 *= width / total;\r\n        r4 *= width / total;\r\n    }\r\n    if (r2 + r3 > height) {\r\n        total = r2 + r3;\r\n        r2 *= height / total;\r\n        r3 *= height / total;\r\n    }\r\n    if (r1 + r4 > height) {\r\n        total = r1 + r4;\r\n        r1 *= height / total;\r\n        r4 *= height / total;\r\n    }\r\n    ctx.moveTo(x + r1, y);\r\n    ctx.lineTo(x + width - r2, y);\r\n    r2 !== 0 && ctx.arc(x + width - r2, y + r2, r2, -Math.PI / 2, 0);\r\n    ctx.lineTo(x + width, y + height - r3);\r\n    r3 !== 0 && ctx.arc(x + width - r3, y + height - r3, r3, 0, Math.PI / 2);\r\n    ctx.lineTo(x + r4, y + height);\r\n    r4 !== 0 && ctx.arc(x + r4, y + height - r4, r4, Math.PI / 2, Math.PI);\r\n    ctx.lineTo(x, y + r1);\r\n    r1 !== 0 && ctx.arc(x + r1, y + r1, r1, Math.PI, Math.PI * 1.5);\r\n}\r\n","import { PathStyleProps } from '../Path';\r\n\r\n/**\r\n * Sub-pixel optimize for canvas rendering, prevent from blur\r\n * when rendering a thin vertical/horizontal line.\r\n */\r\n\r\nconst round = Math.round;\r\n\r\ntype LineShape = {\r\n    x1: number\r\n    y1: number\r\n    x2: number\r\n    y2: number\r\n}\r\n\r\ntype RectShape = {\r\n    x: number\r\n    y: number\r\n    width: number\r\n    height: number\r\n    r?: number | number[]\r\n}\r\n/**\r\n * Sub pixel optimize line for canvas\r\n *\r\n * @param outputShape The modification will be performed on `outputShape`.\r\n *                 `outputShape` and `inputShape` can be the same object.\r\n *                 `outputShape` object can be used repeatly, because all of\r\n *                 the `x1`, `x2`, `y1`, `y2` will be assigned in this method.\r\n */\r\nexport function subPixelOptimizeLine(\r\n    outputShape: Partial,\r\n    inputShape: LineShape,\r\n    style: Pick   // DO not optimize when lineWidth is 0\r\n): LineShape {\r\n    if (!inputShape) {\r\n        return;\r\n    }\r\n\r\n    const x1 = inputShape.x1;\r\n    const x2 = inputShape.x2;\r\n    const y1 = inputShape.y1;\r\n    const y2 = inputShape.y2;\r\n\r\n    outputShape.x1 = x1;\r\n    outputShape.x2 = x2;\r\n    outputShape.y1 = y1;\r\n    outputShape.y2 = y2;\r\n\r\n    const lineWidth = style && style.lineWidth;\r\n    if (!lineWidth) {\r\n        return outputShape as LineShape;\r\n    }\r\n\r\n    if (round(x1 * 2) === round(x2 * 2)) {\r\n        outputShape.x1 = outputShape.x2 = subPixelOptimize(x1, lineWidth, true);\r\n    }\r\n    if (round(y1 * 2) === round(y2 * 2)) {\r\n        outputShape.y1 = outputShape.y2 = subPixelOptimize(y1, lineWidth, true);\r\n    }\r\n\r\n    return outputShape as LineShape;\r\n}\r\n\r\n/**\r\n * Sub pixel optimize rect for canvas\r\n *\r\n * @param outputShape The modification will be performed on `outputShape`.\r\n *                 `outputShape` and `inputShape` can be the same object.\r\n *                 `outputShape` object can be used repeatly, because all of\r\n *                 the `x`, `y`, `width`, `height` will be assigned in this method.\r\n */\r\nexport function subPixelOptimizeRect(\r\n    outputShape: Partial,\r\n    inputShape: RectShape,\r\n    style: Pick   // DO not optimize when lineWidth is 0\r\n): RectShape {\r\n    if (!inputShape) {\r\n        return;\r\n    }\r\n\r\n    const originX = inputShape.x;\r\n    const originY = inputShape.y;\r\n    const originWidth = inputShape.width;\r\n    const originHeight = inputShape.height;\r\n\r\n    outputShape.x = originX;\r\n    outputShape.y = originY;\r\n    outputShape.width = originWidth;\r\n    outputShape.height = originHeight;\r\n\r\n    const lineWidth = style && style.lineWidth;\r\n    if (!lineWidth) {\r\n        return outputShape as RectShape;\r\n    }\r\n\r\n    outputShape.x = subPixelOptimize(originX, lineWidth, true);\r\n    outputShape.y = subPixelOptimize(originY, lineWidth, true);\r\n    outputShape.width = Math.max(\r\n        subPixelOptimize(originX + originWidth, lineWidth, false) - outputShape.x,\r\n        originWidth === 0 ? 0 : 1\r\n    );\r\n    outputShape.height = Math.max(\r\n        subPixelOptimize(originY + originHeight, lineWidth, false) - outputShape.y,\r\n        originHeight === 0 ? 0 : 1\r\n    );\r\n\r\n    return outputShape as RectShape;\r\n}\r\n\r\n/**\r\n * Sub pixel optimize for canvas\r\n *\r\n * @param position Coordinate, such as x, y\r\n * @param lineWidth If `null`/`undefined`/`0`, do not optimize.\r\n * @param positiveOrNegative Default false (negative).\r\n * @return Optimized position.\r\n */\r\nexport function subPixelOptimize(\r\n    position: number,\r\n    lineWidth?: number,\r\n    positiveOrNegative?: boolean\r\n) {\r\n    if (!lineWidth) {\r\n        return position;\r\n    }\r\n    // Assure that (position + lineWidth / 2) is near integer edge,\r\n    // otherwise line will be fuzzy in canvas.\r\n    const doubledPosition = round(position * 2);\r\n    return (doubledPosition + round(lineWidth)) % 2 === 0\r\n        ? doubledPosition / 2\r\n        : (doubledPosition + (positiveOrNegative ? 1 : -1)) / 2;\r\n}\r\n","/**\r\n * 矩形\r\n * @module zrender/graphic/shape/Rect\r\n */\r\n\r\nimport Path, { PathProps } from '../Path';\r\nimport * as roundRectHelper from '../helper/roundRect';\r\nimport {subPixelOptimizeRect} from '../helper/subPixelOptimize';\r\n\r\nexport class RectShape {\r\n    // 左上、右上、右下、左下角的半径依次为r1、r2、r3、r4\r\n    // r缩写为1         相当于 [1, 1, 1, 1]\r\n    // r缩写为[1]       相当于 [1, 1, 1, 1]\r\n    // r缩写为[1, 2]    相当于 [1, 2, 1, 2]\r\n    // r缩写为[1, 2, 3] 相当于 [1, 2, 3, 2]\r\n    r?: number | number[]\r\n\r\n    x = 0\r\n    y = 0\r\n    width = 0\r\n    height = 0\r\n}\r\n\r\nexport interface RectProps extends PathProps {\r\n    shape?: Partial\r\n}\r\n// Avoid create repeatly.\r\nconst subPixelOptimizeOutputShape = {};\r\n\r\nclass Rect extends Path {\r\n\r\n    shape: RectShape\r\n\r\n    constructor(opts?: RectProps) {\r\n        super(opts);\r\n    }\r\n\r\n    getDefaultShape() {\r\n        return new RectShape();\r\n    }\r\n\r\n    buildPath(ctx: CanvasRenderingContext2D, shape: RectShape) {\r\n        let x: number;\r\n        let y: number;\r\n        let width: number;\r\n        let height: number;\r\n\r\n        if (this.subPixelOptimize) {\r\n            const optimizedShape = subPixelOptimizeRect(subPixelOptimizeOutputShape, shape, this.style);\r\n            x = optimizedShape.x;\r\n            y = optimizedShape.y;\r\n            width = optimizedShape.width;\r\n            height = optimizedShape.height;\r\n            optimizedShape.r = shape.r;\r\n            shape = optimizedShape;\r\n        }\r\n        else {\r\n            x = shape.x;\r\n            y = shape.y;\r\n            width = shape.width;\r\n            height = shape.height;\r\n        }\r\n\r\n        if (!shape.r) {\r\n            ctx.rect(x, y, width, height);\r\n        }\r\n        else {\r\n            roundRectHelper.buildPath(ctx, shape);\r\n        }\r\n    }\r\n\r\n    isZeroArea() {\r\n        return !this.shape.width || !this.shape.height;\r\n    }\r\n}\r\n\r\nRect.prototype.type = 'rect';\r\n\r\nexport default Rect;","/**\r\n * 椭圆形状\r\n */\r\n\r\nimport Path, { PathProps } from '../Path';\r\n\r\nexport class EllipseShape {\r\n    cx = 0\r\n    cy = 0\r\n    rx = 0\r\n    ry = 0\r\n}\r\n\r\nexport interface EllipseProps extends PathProps {\r\n    shape?: Partial\r\n}\r\nclass Ellipse extends Path {\r\n\r\n    shape: EllipseShape\r\n\r\n    constructor(opts?: EllipseProps) {\r\n        super(opts);\r\n    }\r\n\r\n    getDefaultShape() {\r\n        return new EllipseShape();\r\n    }\r\n\r\n    buildPath(ctx: CanvasRenderingContext2D, shape: EllipseShape) {\r\n        const k = 0.5522848;\r\n        const x = shape.cx;\r\n        const y = shape.cy;\r\n        const a = shape.rx;\r\n        const b = shape.ry;\r\n        const ox = a * k; // 水平控制点偏移量\r\n        const oy = b * k; // 垂直控制点偏移量\r\n        // 从椭圆的左端点开始顺时针绘制四条三次贝塞尔曲线\r\n        ctx.moveTo(x - a, y);\r\n        ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b);\r\n        ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y);\r\n        ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b);\r\n        ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y);\r\n        ctx.closePath();\r\n    }\r\n}\r\n\r\nEllipse.prototype.type = 'ellipse';\r\n\r\nexport default Ellipse;","/**\r\n * 直线\r\n * @module zrender/graphic/shape/Line\r\n */\r\n\r\nimport Path, { PathProps } from '../Path';\r\nimport {subPixelOptimizeLine} from '../helper/subPixelOptimize';\r\nimport { VectorArray } from '../../core/vector';\r\n\r\n// Avoid create repeatly.\r\nconst subPixelOptimizeOutputShape = {};\r\n\r\nexport class LineShape {\r\n    // Start point\r\n    x1 = 0\r\n    y1 = 0\r\n    // End point\r\n    x2 = 0\r\n    y2 = 0\r\n\r\n    percent = 1\r\n}\r\n\r\nexport interface LineProps extends PathProps {\r\n    shape?: Partial\r\n}\r\nclass Line extends Path {\r\n\r\n    shape: LineShape\r\n\r\n    constructor(opts?: LineProps) {\r\n        super(opts);\r\n    }\r\n\r\n    getDefaultStyle() {\r\n        return {\r\n            stroke: '#000',\r\n            fill: null as string\r\n        };\r\n    }\r\n\r\n    getDefaultShape() {\r\n        return new LineShape();\r\n    }\r\n\r\n    buildPath(ctx: CanvasRenderingContext2D, shape: LineShape) {\r\n        let x1;\r\n        let y1;\r\n        let x2;\r\n        let y2;\r\n\r\n        if (this.subPixelOptimize) {\r\n            const optimizedShape = subPixelOptimizeLine(\r\n                subPixelOptimizeOutputShape, shape, this.style\r\n            );\r\n            x1 = optimizedShape.x1;\r\n            y1 = optimizedShape.y1;\r\n            x2 = optimizedShape.x2;\r\n            y2 = optimizedShape.y2;\r\n        }\r\n        else {\r\n            x1 = shape.x1;\r\n            y1 = shape.y1;\r\n            x2 = shape.x2;\r\n            y2 = shape.y2;\r\n        }\r\n\r\n        const percent = shape.percent;\r\n\r\n        if (percent === 0) {\r\n            return;\r\n        }\r\n\r\n        ctx.moveTo(x1, y1);\r\n\r\n        if (percent < 1) {\r\n            x2 = x1 * (1 - percent) + x2 * percent;\r\n            y2 = y1 * (1 - percent) + y2 * percent;\r\n        }\r\n        ctx.lineTo(x2, y2);\r\n    }\r\n\r\n    /**\r\n     * Get point at percent\r\n     */\r\n    pointAt(p: number): VectorArray {\r\n        const shape = this.shape;\r\n        return [\r\n            shape.x1 * (1 - p) + shape.x2 * p,\r\n            shape.y1 * (1 - p) + shape.y2 * p\r\n        ];\r\n    }\r\n}\r\n\r\nLine.prototype.type = 'line';\r\nexport default Line;","/**\r\n * 贝塞尔平滑曲线\r\n */\r\n\r\nimport {\r\n    min as v2Min,\r\n    max as v2Max,\r\n    scale as v2Scale,\r\n    distance as v2Distance,\r\n    add as v2Add,\r\n    clone as v2Clone,\r\n    sub as v2Sub,\r\n    VectorArray\r\n} from '../../core/vector';\r\n\r\n/**\r\n * 贝塞尔平滑曲线\r\n * @param points 线段顶点数组\r\n * @param smooth 平滑等级, 0-1\r\n * @param isLoop\r\n * @param constraint 将计算出来的控制点约束在一个包围盒内\r\n *                           比如 [[0, 0], [100, 100]], 这个包围盒会与\r\n *                           整个折线的包围盒做一个并集用来约束控制点。\r\n * @param 计算出来的控制点数组\r\n */\r\nexport default function smoothBezier(\r\n    points: VectorArray[],\r\n    smooth?: number,\r\n    isLoop?: boolean,\r\n    constraint?: VectorArray[]\r\n) {\r\n    const cps = [];\r\n\r\n    const v: VectorArray = [];\r\n    const v1: VectorArray = [];\r\n    const v2: VectorArray = [];\r\n    let prevPoint;\r\n    let nextPoint;\r\n\r\n    let min;\r\n    let max;\r\n    if (constraint) {\r\n        min = [Infinity, Infinity];\r\n        max = [-Infinity, -Infinity];\r\n        for (let i = 0, len = points.length; i < len; i++) {\r\n            v2Min(min, min, points[i]);\r\n            v2Max(max, max, points[i]);\r\n        }\r\n        // 与指定的包围盒做并集\r\n        v2Min(min, min, constraint[0]);\r\n        v2Max(max, max, constraint[1]);\r\n    }\r\n\r\n    for (let i = 0, len = points.length; i < len; i++) {\r\n        const point = points[i];\r\n\r\n        if (isLoop) {\r\n            prevPoint = points[i ? i - 1 : len - 1];\r\n            nextPoint = points[(i + 1) % len];\r\n        }\r\n        else {\r\n            if (i === 0 || i === len - 1) {\r\n                cps.push(v2Clone(points[i]));\r\n                continue;\r\n            }\r\n            else {\r\n                prevPoint = points[i - 1];\r\n                nextPoint = points[i + 1];\r\n            }\r\n        }\r\n\r\n        v2Sub(v, nextPoint, prevPoint);\r\n\r\n        // use degree to scale the handle length\r\n        v2Scale(v, v, smooth);\r\n\r\n        let d0 = v2Distance(point, prevPoint);\r\n        let d1 = v2Distance(point, nextPoint);\r\n        const sum = d0 + d1;\r\n        if (sum !== 0) {\r\n            d0 /= sum;\r\n            d1 /= sum;\r\n        }\r\n\r\n        v2Scale(v1, v, -d0);\r\n        v2Scale(v2, v, d1);\r\n        const cp0 = v2Add([], point, v1);\r\n        const cp1 = v2Add([], point, v2);\r\n        if (constraint) {\r\n            v2Max(cp0, cp0, min);\r\n            v2Min(cp0, cp0, max);\r\n            v2Max(cp1, cp1, min);\r\n            v2Min(cp1, cp1, max);\r\n        }\r\n        cps.push(cp0);\r\n        cps.push(cp1);\r\n    }\r\n\r\n    if (isLoop) {\r\n        cps.push(cps.shift());\r\n    }\r\n\r\n    return cps;\r\n}","\r\nimport smoothBezier from './smoothBezier';\r\nimport { VectorArray } from '../../core/vector';\r\nimport PathProxy from '../../core/PathProxy';\r\n\r\nexport function buildPath(\r\n    ctx: CanvasRenderingContext2D | PathProxy,\r\n    shape: {\r\n        points: VectorArray[],\r\n        smooth?: number\r\n        smoothConstraint?: VectorArray[]\r\n    },\r\n    closePath: boolean\r\n) {\r\n    const smooth = shape.smooth;\r\n    let points = shape.points;\r\n    if (points && points.length >= 2) {\r\n        if (smooth) {\r\n            const controlPoints = smoothBezier(\r\n                points, smooth, closePath, shape.smoothConstraint\r\n            );\r\n\r\n            ctx.moveTo(points[0][0], points[0][1]);\r\n            const len = points.length;\r\n            for (let i = 0; i < (closePath ? len : len - 1); i++) {\r\n                const cp1 = controlPoints[i * 2];\r\n                const cp2 = controlPoints[i * 2 + 1];\r\n                const p = points[(i + 1) % len];\r\n                ctx.bezierCurveTo(\r\n                    cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]\r\n                );\r\n            }\r\n        }\r\n        else {\r\n            ctx.moveTo(points[0][0], points[0][1]);\r\n            for (let i = 1, l = points.length; i < l; i++) {\r\n                ctx.lineTo(points[i][0], points[i][1]);\r\n            }\r\n        }\r\n\r\n        closePath && ctx.closePath();\r\n    }\r\n}\r\n","/**\r\n * 多边形\r\n * @module zrender/shape/Polygon\r\n */\r\n\r\nimport Path, { PathProps } from '../Path';\r\nimport * as polyHelper from '../helper/poly';\r\nimport { VectorArray } from '../../core/vector';\r\n\r\nexport class PolygonShape {\r\n    points: VectorArray[] = null\r\n    smooth?: number = 0\r\n    smoothConstraint?: VectorArray[] = null\r\n}\r\n\r\nexport interface PolygonProps extends PathProps {\r\n    shape?: Partial\r\n}\r\nclass Polygon extends Path {\r\n\r\n    shape: PolygonShape\r\n\r\n    constructor(opts?: PolygonProps) {\r\n        super(opts);\r\n    }\r\n\r\n    getDefaultShape() {\r\n        return new PolygonShape();\r\n    }\r\n\r\n    buildPath(ctx: CanvasRenderingContext2D, shape: PolygonShape) {\r\n        polyHelper.buildPath(ctx, shape, true);\r\n    }\r\n};\r\n\r\nPolygon.prototype.type = 'polygon';\r\n\r\nexport default Polygon;","/**\r\n * @module zrender/graphic/shape/Polyline\r\n */\r\n\r\nimport Path, { PathProps } from '../Path';\r\nimport * as polyHelper from '../helper/poly';\r\nimport { VectorArray } from '../../core/vector';\r\n\r\nexport class PolylineShape {\r\n    points: VectorArray[] = null\r\n    // Percent of displayed polyline. For animating purpose\r\n    percent?: number = 1\r\n    smooth?: number = 0\r\n    smoothConstraint?: VectorArray[] = null\r\n}\r\n\r\nexport interface PolylineProps extends PathProps {\r\n    shape?: Partial\r\n}\r\nclass Polyline extends Path {\r\n\r\n    shape: PolylineShape\r\n\r\n    constructor(opts?: PolylineProps) {\r\n        super(opts);\r\n    }\r\n\r\n    getDefaultStyle() {\r\n        return {\r\n            stroke: '#000',\r\n            fill: null as string\r\n        };\r\n    }\r\n\r\n    getDefaultShape() {\r\n        return new PolylineShape();\r\n    }\r\n\r\n    buildPath(ctx: CanvasRenderingContext2D, shape: PolylineShape) {\r\n        polyHelper.buildPath(ctx, shape, false);\r\n    }\r\n}\r\n\r\nPolyline.prototype.type = 'polyline';\r\nexport default Polyline;","// TODO Should GradientObject been LinearGradientObject | RadialGradientObject\r\nexport interface GradientObject {\r\n\r\n    id?: number\r\n\r\n    type: string\r\n\r\n    colorStops: GradientColorStop[]\r\n\r\n    global?: boolean\r\n}\r\n\r\nexport interface InnerGradientObject extends GradientObject {\r\n    __canvasGradient: CanvasGradient\r\n    __width: number\r\n    __height: number\r\n}\r\n\r\nexport interface GradientColorStop {\r\n    offset: number\r\n    color: string\r\n}\r\n\r\nexport default class Gradient {\r\n\r\n    id?: number\r\n\r\n    type: string\r\n\r\n    colorStops: GradientColorStop[]\r\n\r\n    global: boolean\r\n\r\n    constructor(colorStops: GradientColorStop[]) {\r\n        this.colorStops = colorStops || [];\r\n    }\r\n\r\n    addColorStop(offset: number, color: string) {\r\n        this.colorStops.push({\r\n            offset,\r\n            color\r\n        });\r\n    }\r\n}","import Gradient, {GradientObject, GradientColorStop} from './Gradient';\r\n\r\nexport interface LinearGradientObject extends GradientObject {\r\n    type: 'linear'\r\n\r\n    x: number\r\n    y: number\r\n    x2: number\r\n    y2: number\r\n}\r\n/**\r\n * x, y, x2, y2 are all percent from 0 to 1 when globalCoord is false\r\n */\r\n\r\nexport default class LinearGradient extends Gradient {\r\n\r\n    type: 'linear'\r\n\r\n    x: number\r\n    y: number\r\n    x2: number\r\n    y2: number\r\n\r\n    constructor(\r\n        x: number, y: number, x2: number, y2: number,\r\n        colorStops?: GradientColorStop[], globalCoord?: boolean\r\n    ) {\r\n\r\n        super(colorStops);\r\n\r\n        // Should do nothing more in this constructor. Because gradient can be\r\n        // declard by `color: {type: 'linear', colorStops: ...}`, where\r\n        // this constructor will not be called.\r\n\r\n        this.x = x == null ? 0 : x;\r\n\r\n        this.y = y == null ? 0 : y;\r\n\r\n        this.x2 = x2 == null ? 1 : x2;\r\n\r\n        this.y2 = y2 == null ? 0 : y2;\r\n\r\n        // Can be cloned\r\n        this.type = 'linear';\r\n\r\n        // If use global coord\r\n        this.global = globalCoord || false;\r\n    }\r\n};\r\n","import Gradient, {GradientColorStop, GradientObject} from './Gradient';\r\n\r\nexport interface RadialGradientObject extends GradientObject {\r\n    type: 'radial'\r\n\r\n    x: number\r\n    y: number\r\n    r: number\r\n}\r\n/**\r\n * x, y, r are all percent from 0 to 1 when globalCoord is false\r\n */\r\nclass RadialGradient extends Gradient {\r\n\r\n    type: 'radial'\r\n\r\n    x: number\r\n    y: number\r\n    r: number\r\n\r\n    constructor(\r\n        x: number, y: number, r: number,\r\n        colorStops?: GradientColorStop[], globalCoord?: boolean\r\n    ) {\r\n        super(colorStops);\r\n        // Should do nothing more in this constructor. Because gradient can be\r\n        // declard by `color: {type: 'radial', colorStops: ...}`, where\r\n        // this constructor will not be called.\r\n        this.x = x == null ? 0.5 : x;\r\n\r\n        this.y = y == null ? 0.5 : y;\r\n\r\n        this.r = r == null ? 0.5 : r;\r\n\r\n        // Can be cloned\r\n        this.type = 'radial';\r\n\r\n        // If use global coord\r\n        this.global = globalCoord || false;\r\n    }\r\n}\r\n\r\nexport default RadialGradient;","import Displayable, { DisplayableProps, DisplayableStatePropNames } from './Displayable';\nimport { getBoundingRect } from '../contain/text';\nimport BoundingRect from '../core/BoundingRect';\nimport { PathStyleProps, DEFAULT_PATH_STYLE } from './Path';\nimport { createObject, defaults } from '../core/util';\nimport { FontStyle, FontWeight, TextAlign, TextVerticalAlign } from '../core/types';\nimport { DEFAULT_FONT } from '../core/platform';\n\nexport interface TSpanStyleProps extends PathStyleProps {\n\n    x?: number\n    y?: number\n\n    // TODO Text is assigned inside zrender\n    text?: string\n\n    // Final generated font string\n    // Used in canvas, and when developers specified it.\n    font?: string\n\n    // Value for each part of font\n    // Used in svg.\n    // NOTE: font should always been sync with these 4 properties.\n    fontSize?: number\n    fontWeight?: FontWeight\n    fontStyle?: FontStyle\n    fontFamily?: string\n\n    textAlign?: CanvasTextAlign\n\n    textBaseline?: CanvasTextBaseline\n}\n\nexport const DEFAULT_TSPAN_STYLE: TSpanStyleProps = defaults({\n    strokeFirst: true,\n    font: DEFAULT_FONT,\n    x: 0,\n    y: 0,\n    textAlign: 'left',\n    textBaseline: 'top',\n    miterLimit: 2\n} as TSpanStyleProps, DEFAULT_PATH_STYLE);\n\n\nexport interface TSpanProps extends DisplayableProps {\n    style?: TSpanStyleProps\n}\n\nexport type TSpanState = Pick\n\nclass TSpan extends Displayable {\n\n    style: TSpanStyleProps\n\n    hasStroke() {\n        const style = this.style;\n        const stroke = style.stroke;\n        return stroke != null && stroke !== 'none' && style.lineWidth > 0;\n    }\n\n    hasFill() {\n        const style = this.style;\n        const fill = style.fill;\n        return fill != null && fill !== 'none';\n    }\n\n    /**\n     * Create an image style object with default values in it's prototype.\n     * @override\n     */\n    createStyle(obj?: TSpanStyleProps) {\n        return createObject(DEFAULT_TSPAN_STYLE, obj);\n    }\n\n    /**\n     * Set bounding rect calculated from Text\n     * For reducing time of calculating bounding rect.\n     */\n    setBoundingRect(rect: BoundingRect) {\n        this._rect = rect;\n    }\n\n    getBoundingRect(): BoundingRect {\n        const style = this.style;\n\n        if (!this._rect) {\n            let text = style.text;\n            text != null ? (text += '') : (text = '');\n\n            const rect = getBoundingRect(\n                text,\n                style.font,\n                style.textAlign as TextAlign,\n                style.textBaseline as TextVerticalAlign\n            );\n\n            rect.x += style.x || 0;\n            rect.y += style.y || 0;\n\n            if (this.hasStroke()) {\n                const w = style.lineWidth;\n                rect.x -= w / 2;\n                rect.y -= w / 2;\n                rect.width += w;\n                rect.height += w;\n            }\n\n            this._rect = rect;\n        }\n\n        return this._rect;\n    }\n\n    protected static initDefaultProps = (function () {\n        const tspanProto = TSpan.prototype;\n        // TODO Calculate tolerance smarter\n        tspanProto.dirtyRectTolerance = 10;\n    })()\n}\n\nTSpan.prototype.type = 'tspan';\n\nexport default TSpan;","import { isString } from '../core/util';\r\n\r\n/**\r\n * For big svg string, this method might be time consuming.\r\n */\r\nexport function parseXML(svg: Document | string | SVGElement): SVGElement {\r\n    if (isString(svg)) {\r\n        const parser = new DOMParser();\r\n        svg = parser.parseFromString(svg, 'text/xml');\r\n    }\r\n    let svgNode: Node = svg;\r\n    // Document node. If using $.get, doc node may be input.\r\n    if (svgNode.nodeType === 9) {\r\n        svgNode = svgNode.firstChild;\r\n    }\r\n    // nodeName of  is also 'svg'.\r\n    while (svgNode.nodeName.toLowerCase() !== 'svg' || svgNode.nodeType !== 1) {\r\n        svgNode = svgNode.nextSibling;\r\n    }\r\n\r\n    return svgNode as SVGElement;\r\n}\r\n","import Group from '../graphic/Group';\nimport ZRImage from '../graphic/Image';\nimport Circle from '../graphic/shape/Circle';\nimport Rect from '../graphic/shape/Rect';\nimport Ellipse from '../graphic/shape/Ellipse';\nimport Line from '../graphic/shape/Line';\nimport Polygon from '../graphic/shape/Polygon';\nimport Polyline from '../graphic/shape/Polyline';\nimport * as matrix from '../core/matrix';\nimport { createFromString } from './path';\nimport { defaults, trim, each, map, keys, hasOwn } from '../core/util';\nimport Displayable from '../graphic/Displayable';\nimport Element from '../Element';\nimport { RectLike } from '../core/BoundingRect';\nimport { Dictionary } from '../core/types';\nimport { PatternObject } from '../graphic/Pattern';\nimport LinearGradient, { LinearGradientObject } from '../graphic/LinearGradient';\nimport RadialGradient, { RadialGradientObject } from '../graphic/RadialGradient';\nimport Gradient, { GradientObject } from '../graphic/Gradient';\nimport TSpan, { TSpanStyleProps } from '../graphic/TSpan';\nimport { parseXML } from './parseXML';\n\n\ninterface SVGParserOption {\n    // Default width if svg width not specified or is a percent value.\n    width?: number;\n    // Default height if svg height not specified or is a percent value.\n    height?: number;\n    ignoreViewBox?: boolean;\n    ignoreRootClip?: boolean;\n}\n\nexport interface SVGParserResult {\n    // Group, The root of the the result tree of zrender shapes\n    root: Group;\n    // number, the viewport width of the SVG\n    width: number;\n    // number, the viewport height of the SVG\n    height: number;\n    //  {x, y, width, height}, the declared viewBox rect of the SVG, if exists\n    viewBoxRect: RectLike;\n    // the {scale, position} calculated by viewBox and viewport, is exists\n    viewBoxTransform: {\n        x: number;\n        y: number;\n        scale: number;\n    };\n    named: SVGParserResultNamedItem[];\n}\nexport interface SVGParserResultNamedItem {\n    name: string;\n    // If a tag has no name attribute but its ancester  is named,\n    // `namedFrom` is set to the named item of the ancester .\n    // Otherwise null/undefined\n    namedFrom: SVGParserResultNamedItem;\n    svgNodeTagLower: SVGNodeTagLower;\n    el: Element;\n};\n\nexport type SVGNodeTagLower =\n    'g' | 'rect' | 'circle' | 'line' | 'ellipse' | 'polygon'\n    | 'polyline' | 'image' | 'text' | 'tspan' | 'path' | 'defs' | 'switch';\n\n\ntype DefsId = string;\ntype DefsMap = { [id in DefsId]: LinearGradientObject | RadialGradientObject | PatternObject };\ntype DefsUsePending = [Displayable, 'fill' | 'stroke', DefsId][];\n\ntype ElementExtended = Element & {\n    __inheritedStyle?: InheritedStyleByZRKey;\n    __selfStyle?: SelfStyleByZRKey;\n}\ntype DisplayableExtended = Displayable & {\n    __inheritedStyle?: InheritedStyleByZRKey;\n    __selfStyle?: SelfStyleByZRKey;\n}\n\ntype TextStyleOptionExtended = TSpanStyleProps & {\n    fontSize: number;\n    fontFamily: string;\n    fontWeight: string;\n    fontStyle: string;\n}\nlet nodeParsers: {[name in SVGNodeTagLower]?: (\n    this: SVGParser, xmlNode: SVGElement, parentGroup: Group\n) => Element};\n\ntype InheritedStyleByZRKey = {[name in InheritableStyleZRKey]?: string};\ntype InheritableStyleZRKey =\n    typeof INHERITABLE_STYLE_ATTRIBUTES_MAP[keyof typeof INHERITABLE_STYLE_ATTRIBUTES_MAP];\nconst INHERITABLE_STYLE_ATTRIBUTES_MAP = {\n    'fill': 'fill',\n    'stroke': 'stroke',\n    'stroke-width': 'lineWidth',\n    'opacity': 'opacity',\n    'fill-opacity': 'fillOpacity',\n    'stroke-opacity': 'strokeOpacity',\n    'stroke-dasharray': 'lineDash',\n    'stroke-dashoffset': 'lineDashOffset',\n    'stroke-linecap': 'lineCap',\n    'stroke-linejoin': 'lineJoin',\n    'stroke-miterlimit': 'miterLimit',\n    'font-family': 'fontFamily',\n    'font-size': 'fontSize',\n    'font-style': 'fontStyle',\n    'font-weight': 'fontWeight',\n    'text-anchor': 'textAlign',\n    'visibility': 'visibility',\n    'display': 'display'\n} as const;\nconst INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS = keys(INHERITABLE_STYLE_ATTRIBUTES_MAP);\n\ntype SelfStyleByZRKey = {[name in SelfStyleZRKey]?: string};\ntype SelfStyleZRKey =\n    typeof SELF_STYLE_ATTRIBUTES_MAP[keyof typeof SELF_STYLE_ATTRIBUTES_MAP];\nconst SELF_STYLE_ATTRIBUTES_MAP = {\n    'alignment-baseline': 'textBaseline',\n    'stop-color': 'stopColor'\n};\nconst SELF_STYLE_ATTRIBUTES_MAP_KEYS = keys(SELF_STYLE_ATTRIBUTES_MAP);\n\n\nclass SVGParser {\n\n    private _defs: DefsMap = {};\n    // The use of  can be in front of  declared.\n    // So save them temporarily in `_defsUsePending`.\n    private _defsUsePending: DefsUsePending;\n    private _root: Group = null;\n\n    private _textX: number;\n    private _textY: number;\n\n    parse(xml: string | Document | SVGElement, opt: SVGParserOption): SVGParserResult {\n        opt = opt || {};\n\n        const svg = parseXML(xml);\n\n        if (process.env.NODE_ENV !== 'production') {\n            if (!svg) {\n                throw new Error('Illegal svg');\n            }\n        }\n\n        this._defsUsePending = [];\n        let root = new Group();\n        this._root = root;\n        const named: SVGParserResult['named'] = [];\n        // parse view port\n        const viewBox = svg.getAttribute('viewBox') || '';\n\n        // If width/height not specified, means \"100%\" of `opt.width/height`.\n        // TODO: Other percent value not supported yet.\n        let width = parseFloat((svg.getAttribute('width') || opt.width) as string);\n        let height = parseFloat((svg.getAttribute('height') || opt.height) as string);\n        // If width/height not specified, set as null for output.\n        isNaN(width) && (width = null);\n        isNaN(height) && (height = null);\n\n        // Apply inline style on svg element.\n        parseAttributes(svg, root, null, true, false);\n\n        let child = svg.firstChild as SVGElement;\n        while (child) {\n            this._parseNode(child, root, named, null, false, false);\n            child = child.nextSibling as SVGElement;\n        }\n\n        applyDefs(this._defs, this._defsUsePending);\n        this._defsUsePending = [];\n\n        let viewBoxRect;\n        let viewBoxTransform;\n\n        if (viewBox) {\n            const viewBoxArr = splitNumberSequence(viewBox);\n            // Some invalid case like viewBox: 'none'.\n            if (viewBoxArr.length >= 4) {\n                viewBoxRect = {\n                    x: parseFloat((viewBoxArr[0] || 0) as string),\n                    y: parseFloat((viewBoxArr[1] || 0) as string),\n                    width: parseFloat(viewBoxArr[2]),\n                    height: parseFloat(viewBoxArr[3])\n                };\n            }\n        }\n\n        if (viewBoxRect && width != null && height != null) {\n            viewBoxTransform = makeViewBoxTransform(viewBoxRect, { x: 0, y: 0, width: width, height: height });\n\n            if (!opt.ignoreViewBox) {\n                // If set transform on the output group, it probably bring trouble when\n                // some users only intend to show the clipped content inside the viewBox,\n                // but not intend to transform the output group. So we keep the output\n                // group no transform. If the user intend to use the viewBox as a\n                // camera, just set `opt.ignoreViewBox` as `true` and set transfrom\n                // manually according to the viewBox info in the output of this method.\n                const elRoot = root;\n                root = new Group();\n                root.add(elRoot);\n                elRoot.scaleX = elRoot.scaleY = viewBoxTransform.scale;\n                elRoot.x = viewBoxTransform.x;\n                elRoot.y = viewBoxTransform.y;\n            }\n        }\n\n        // Some shapes might be overflow the viewport, which should be\n        // clipped despite whether the viewBox is used, as the SVG does.\n        if (!opt.ignoreRootClip && width != null && height != null) {\n            root.setClipPath(new Rect({\n                shape: {x: 0, y: 0, width: width, height: height}\n            }));\n        }\n\n        // Set width/height on group just for output the viewport size.\n        return {\n            root: root,\n            width: width,\n            height: height,\n            viewBoxRect: viewBoxRect,\n            viewBoxTransform: viewBoxTransform,\n            named: named\n        };\n    }\n\n    private _parseNode(\n        xmlNode: SVGElement,\n        parentGroup: Group,\n        named: SVGParserResultNamedItem[],\n        namedFrom: SVGParserResultNamedItem['namedFrom'],\n        isInDefs: boolean,\n        isInText: boolean\n    ): void {\n\n        const nodeName = xmlNode.nodeName.toLowerCase() as SVGNodeTagLower;\n\n        // TODO:\n        // support  in svg, where nodeName is 'style',\n        // CSS classes is defined globally wherever the style tags are declared.\n\n        let el;\n        let namedFromForSub = namedFrom;\n\n        if (nodeName === 'defs') {\n            isInDefs = true;\n        }\n        if (nodeName === 'text') {\n            isInText = true;\n        }\n\n        if (nodeName === 'defs' || nodeName === 'switch') {\n            // Just make  displayable. Do not support\n            // the full feature of it.\n            el = parentGroup;\n        }\n        else {\n            // In , elments will not be rendered.\n            // TODO:\n            // do not support elements in  yet, until requirement come.\n            // other graphic elements can also be in  and referenced by\n            // \n            // multiple times\n            if (!isInDefs) {\n                const parser = nodeParsers[nodeName];\n                if (parser && hasOwn(nodeParsers, nodeName)) {\n\n                    el = parser.call(this, xmlNode, parentGroup);\n\n                    // Do not support empty string;\n                    const nameAttr = xmlNode.getAttribute('name');\n                    if (nameAttr) {\n                        const newNamed: SVGParserResultNamedItem = {\n                            name: nameAttr,\n                            namedFrom: null,\n                            svgNodeTagLower: nodeName,\n                            el: el\n                        };\n                        named.push(newNamed);\n                        if (nodeName === 'g') {\n                            namedFromForSub = newNamed;\n                        }\n                    }\n                    else if (namedFrom) {\n                        named.push({\n                            name: namedFrom.name,\n                            namedFrom: namedFrom,\n                            svgNodeTagLower: nodeName,\n                            el: el\n                        });\n                    }\n\n                    parentGroup.add(el);\n                }\n            }\n\n            // Whether gradients/patterns are declared in  or not,\n            // they all work.\n            const parser = paintServerParsers[nodeName];\n            if (parser && hasOwn(paintServerParsers, nodeName)) {\n                const def = parser.call(this, xmlNode);\n                const id = xmlNode.getAttribute('id');\n                if (id) {\n                    this._defs[id] = def;\n                }\n            }\n        }\n\n        // If xmlNode is , , , , ,\n        // el will be a group, and traverse the children.\n        if (el && el.isGroup) {\n            let child = xmlNode.firstChild as SVGElement;\n            while (child) {\n                if (child.nodeType === 1) {\n                    this._parseNode(child, el as Group, named, namedFromForSub, isInDefs, isInText);\n                }\n                // Is plain text rather than a tagged node.\n                else if (child.nodeType === 3 && isInText) {\n                    this._parseText(child, el as Group);\n                }\n                child = child.nextSibling as SVGElement;\n            }\n        }\n\n    }\n\n    private _parseText(xmlNode: SVGElement, parentGroup: Group): TSpan {\n        const text = new TSpan({\n            style: {\n                text: xmlNode.textContent\n            },\n            silent: true,\n            x: this._textX || 0,\n            y: this._textY || 0\n        });\n\n        inheritStyle(parentGroup, text);\n\n        parseAttributes(xmlNode, text, this._defsUsePending, false, false);\n\n        applyTextAlignment(text, parentGroup);\n\n        const textStyle = text.style as TextStyleOptionExtended;\n        const fontSize = textStyle.fontSize;\n        if (fontSize && fontSize < 9) {\n            // PENDING\n            textStyle.fontSize = 9;\n            text.scaleX *= fontSize / 9;\n            text.scaleY *= fontSize / 9;\n        }\n\n        const font = (textStyle.fontSize || textStyle.fontFamily) && [\n            textStyle.fontStyle,\n            textStyle.fontWeight,\n            (textStyle.fontSize || 12) + 'px',\n            // If font properties are defined, `fontFamily` should not be ignored.\n            textStyle.fontFamily || 'sans-serif'\n        ].join(' ');\n        // Make font\n        textStyle.font = font;\n\n        const rect = text.getBoundingRect();\n        this._textX += rect.width;\n\n        parentGroup.add(text);\n\n        return text;\n    }\n\n    static internalField = (function () {\n\n        nodeParsers = {\n            'g': function (xmlNode, parentGroup) {\n                const g = new Group();\n                inheritStyle(parentGroup, g);\n                parseAttributes(xmlNode, g, this._defsUsePending, false, false);\n\n                return g;\n            },\n            'rect': function (xmlNode, parentGroup) {\n                const rect = new Rect();\n                inheritStyle(parentGroup, rect);\n                parseAttributes(xmlNode, rect, this._defsUsePending, false, false);\n\n                rect.setShape({\n                    x: parseFloat(xmlNode.getAttribute('x') || '0'),\n                    y: parseFloat(xmlNode.getAttribute('y') || '0'),\n                    width: parseFloat(xmlNode.getAttribute('width') || '0'),\n                    height: parseFloat(xmlNode.getAttribute('height') || '0')\n                });\n\n                rect.silent = true;\n\n                return rect;\n            },\n            'circle': function (xmlNode, parentGroup) {\n                const circle = new Circle();\n                inheritStyle(parentGroup, circle);\n                parseAttributes(xmlNode, circle, this._defsUsePending, false, false);\n\n                circle.setShape({\n                    cx: parseFloat(xmlNode.getAttribute('cx') || '0'),\n                    cy: parseFloat(xmlNode.getAttribute('cy') || '0'),\n                    r: parseFloat(xmlNode.getAttribute('r') || '0')\n                });\n\n                circle.silent = true;\n\n                return circle;\n            },\n            'line': function (xmlNode, parentGroup) {\n                const line = new Line();\n                inheritStyle(parentGroup, line);\n                parseAttributes(xmlNode, line, this._defsUsePending, false, false);\n\n                line.setShape({\n                    x1: parseFloat(xmlNode.getAttribute('x1') || '0'),\n                    y1: parseFloat(xmlNode.getAttribute('y1') || '0'),\n                    x2: parseFloat(xmlNode.getAttribute('x2') || '0'),\n                    y2: parseFloat(xmlNode.getAttribute('y2') || '0')\n                });\n\n                line.silent = true;\n\n                return line;\n            },\n            'ellipse': function (xmlNode, parentGroup) {\n                const ellipse = new Ellipse();\n                inheritStyle(parentGroup, ellipse);\n                parseAttributes(xmlNode, ellipse, this._defsUsePending, false, false);\n\n                ellipse.setShape({\n                    cx: parseFloat(xmlNode.getAttribute('cx') || '0'),\n                    cy: parseFloat(xmlNode.getAttribute('cy') || '0'),\n                    rx: parseFloat(xmlNode.getAttribute('rx') || '0'),\n                    ry: parseFloat(xmlNode.getAttribute('ry') || '0')\n                });\n\n                ellipse.silent = true;\n\n                return ellipse;\n            },\n            'polygon': function (xmlNode, parentGroup) {\n                const pointsStr = xmlNode.getAttribute('points');\n                let pointsArr;\n                if (pointsStr) {\n                    pointsArr = parsePoints(pointsStr);\n                }\n                const polygon = new Polygon({\n                    shape: {\n                        points: pointsArr || []\n                    },\n                    silent: true\n                });\n\n                inheritStyle(parentGroup, polygon);\n                parseAttributes(xmlNode, polygon, this._defsUsePending, false, false);\n\n                return polygon;\n            },\n            'polyline': function (xmlNode, parentGroup) {\n                const pointsStr = xmlNode.getAttribute('points');\n                let pointsArr;\n                if (pointsStr) {\n                    pointsArr = parsePoints(pointsStr);\n                }\n                const polyline = new Polyline({\n                    shape: {\n                        points: pointsArr || []\n                    },\n                    silent: true\n                });\n\n                inheritStyle(parentGroup, polyline);\n                parseAttributes(xmlNode, polyline, this._defsUsePending, false, false);\n\n                return polyline;\n            },\n            'image': function (xmlNode, parentGroup) {\n                const img = new ZRImage();\n                inheritStyle(parentGroup, img);\n                parseAttributes(xmlNode, img, this._defsUsePending, false, false);\n\n                img.setStyle({\n                    image: xmlNode.getAttribute('xlink:href') || xmlNode.getAttribute('href'),\n                    x: +xmlNode.getAttribute('x'),\n                    y: +xmlNode.getAttribute('y'),\n                    width: +xmlNode.getAttribute('width'),\n                    height: +xmlNode.getAttribute('height')\n                });\n                img.silent = true;\n\n                return img;\n            },\n            'text': function (xmlNode, parentGroup) {\n                const x = xmlNode.getAttribute('x') || '0';\n                const y = xmlNode.getAttribute('y') || '0';\n                const dx = xmlNode.getAttribute('dx') || '0';\n                const dy = xmlNode.getAttribute('dy') || '0';\n\n                this._textX = parseFloat(x) + parseFloat(dx);\n                this._textY = parseFloat(y) + parseFloat(dy);\n\n                const g = new Group();\n                inheritStyle(parentGroup, g);\n                parseAttributes(xmlNode, g, this._defsUsePending, false, true);\n\n                return g;\n            },\n            'tspan': function (xmlNode, parentGroup) {\n                const x = xmlNode.getAttribute('x');\n                const y = xmlNode.getAttribute('y');\n                if (x != null) {\n                    // new offset x\n                    this._textX = parseFloat(x);\n                }\n                if (y != null) {\n                    // new offset y\n                    this._textY = parseFloat(y);\n                }\n                const dx = xmlNode.getAttribute('dx') || '0';\n                const dy = xmlNode.getAttribute('dy') || '0';\n\n                const g = new Group();\n\n                inheritStyle(parentGroup, g);\n                parseAttributes(xmlNode, g, this._defsUsePending, false, true);\n\n                this._textX += parseFloat(dx);\n                this._textY += parseFloat(dy);\n\n                return g;\n            },\n            'path': function (xmlNode, parentGroup) {\n                // TODO svg fill rule\n                // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-rule\n                // path.style.globalCompositeOperation = 'xor';\n                const d = xmlNode.getAttribute('d') || '';\n\n                // Performance sensitive.\n\n                const path = createFromString(d);\n\n                inheritStyle(parentGroup, path);\n                parseAttributes(xmlNode, path, this._defsUsePending, false, false);\n\n                path.silent = true;\n\n                return path;\n            }\n        };\n\n\n    })();\n}\n\nconst paintServerParsers: Dictionary<(xmlNode: SVGElement) => any> = {\n\n    'lineargradient': function (xmlNode: SVGElement) {\n        // TODO:\n        // Support that x1,y1,x2,y2 are not declared lineargradient but in node.\n        const x1 = parseInt(xmlNode.getAttribute('x1') || '0', 10);\n        const y1 = parseInt(xmlNode.getAttribute('y1') || '0', 10);\n        const x2 = parseInt(xmlNode.getAttribute('x2') || '10', 10);\n        const y2 = parseInt(xmlNode.getAttribute('y2') || '0', 10);\n\n        const gradient = new LinearGradient(x1, y1, x2, y2);\n\n        parsePaintServerUnit(xmlNode, gradient);\n\n        parseGradientColorStops(xmlNode, gradient);\n\n        return gradient;\n    },\n\n    'radialgradient': function (xmlNode) {\n        // TODO:\n        // Support that x1,y1,x2,y2 are not declared radialgradient but in node.\n        // TODO:\n        // Support fx, fy, fr.\n        const cx = parseInt(xmlNode.getAttribute('cx') || '0', 10);\n        const cy = parseInt(xmlNode.getAttribute('cy') || '0', 10);\n        const r = parseInt(xmlNode.getAttribute('r') || '0', 10);\n\n        const gradient = new RadialGradient(cx, cy, r);\n\n        parsePaintServerUnit(xmlNode, gradient);\n\n        parseGradientColorStops(xmlNode, gradient);\n\n        return gradient;\n    }\n\n    // TODO\n    // 'pattern': function (xmlNode: SVGElement) {\n    // }\n};\n\nfunction parsePaintServerUnit(xmlNode: SVGElement, gradient: Gradient) {\n    const gradientUnits = xmlNode.getAttribute('gradientUnits');\n    if (gradientUnits === 'userSpaceOnUse') {\n        gradient.global = true;\n    }\n}\n\nfunction parseGradientColorStops(xmlNode: SVGElement, gradient: GradientObject): void {\n\n    let stop = xmlNode.firstChild as SVGStopElement;\n\n    while (stop) {\n        if (stop.nodeType === 1\n            // there might be some other irrelevant tags used by editor.\n            && stop.nodeName.toLocaleLowerCase() === 'stop'\n        ) {\n            const offsetStr = stop.getAttribute('offset');\n            let offset: number;\n            if (offsetStr && offsetStr.indexOf('%') > 0) {  // percentage\n                offset = parseInt(offsetStr, 10) / 100;\n            }\n            else if (offsetStr) { // number from 0 to 1\n                offset = parseFloat(offsetStr);\n            }\n            else {\n                offset = 0;\n            }\n\n            //  has higher priority than\n            // \n            const styleVals = {} as Dictionary;\n            parseInlineStyle(stop, styleVals, styleVals);\n            const stopColor = styleVals.stopColor\n                || stop.getAttribute('stop-color')\n                || '#000000';\n\n            gradient.colorStops.push({\n                offset: offset,\n                color: stopColor\n            });\n        }\n        stop = stop.nextSibling as SVGStopElement;\n    }\n}\n\nfunction inheritStyle(parent: Element, child: Element): void {\n    if (parent && (parent as ElementExtended).__inheritedStyle) {\n        if (!(child as ElementExtended).__inheritedStyle) {\n            (child as ElementExtended).__inheritedStyle = {};\n        }\n        defaults((child as ElementExtended).__inheritedStyle, (parent as ElementExtended).__inheritedStyle);\n    }\n}\n\nfunction parsePoints(pointsString: string): number[][] {\n    const list = splitNumberSequence(pointsString);\n    const points = [];\n\n    for (let i = 0; i < list.length; i += 2) {\n        const x = parseFloat(list[i]);\n        const y = parseFloat(list[i + 1]);\n        points.push([x, y]);\n    }\n    return points;\n}\n\nfunction parseAttributes(\n    xmlNode: SVGElement,\n    el: Element,\n    defsUsePending: DefsUsePending,\n    onlyInlineStyle: boolean,\n    isTextGroup: boolean\n): void {\n    const disp = el as DisplayableExtended;\n    const inheritedStyle = disp.__inheritedStyle = disp.__inheritedStyle || {};\n    const selfStyle: SelfStyleByZRKey = {};\n\n    // TODO Shadow\n    if (xmlNode.nodeType === 1) {\n        parseTransformAttribute(xmlNode, el);\n\n        parseInlineStyle(xmlNode, inheritedStyle, selfStyle);\n\n        if (!onlyInlineStyle) {\n            parseAttributeStyle(xmlNode, inheritedStyle, selfStyle);\n        }\n    }\n\n    disp.style = disp.style || {};\n\n    if (inheritedStyle.fill != null) {\n        disp.style.fill = getFillStrokeStyle(disp, 'fill', inheritedStyle.fill, defsUsePending);\n    }\n    if (inheritedStyle.stroke != null) {\n        disp.style.stroke = getFillStrokeStyle(disp, 'stroke', inheritedStyle.stroke, defsUsePending);\n    }\n\n    each([\n        'lineWidth', 'opacity', 'fillOpacity', 'strokeOpacity', 'miterLimit', 'fontSize'\n    ] as const, function (propName) {\n        if (inheritedStyle[propName] != null) {\n            disp.style[propName] = parseFloat(inheritedStyle[propName]);\n        }\n    });\n\n    each([\n        'lineDashOffset', 'lineCap', 'lineJoin', 'fontWeight', 'fontFamily', 'fontStyle', 'textAlign'\n    ] as const, function (propName) {\n        if (inheritedStyle[propName] != null) {\n            disp.style[propName] = inheritedStyle[propName];\n        }\n    });\n\n    // Because selfStyle only support textBaseline, so only text group need it.\n    // in other cases selfStyle can be released.\n    if (isTextGroup) {\n        disp.__selfStyle = selfStyle;\n    }\n\n    if (inheritedStyle.lineDash) {\n        disp.style.lineDash = map(splitNumberSequence(inheritedStyle.lineDash), function (str) {\n            return parseFloat(str);\n        });\n    }\n\n    if (inheritedStyle.visibility === 'hidden' || inheritedStyle.visibility === 'collapse') {\n        disp.invisible = true;\n    }\n\n    if (inheritedStyle.display === 'none') {\n        disp.ignore = true;\n    }\n}\n\nfunction applyTextAlignment(\n    text: TSpan,\n    parentGroup: Group\n): void {\n    const parentSelfStyle = (parentGroup as ElementExtended).__selfStyle;\n    if (parentSelfStyle) {\n        const textBaseline = parentSelfStyle.textBaseline;\n        let zrTextBaseline = textBaseline as CanvasTextBaseline;\n        if (!textBaseline || textBaseline === 'auto') {\n            // FIXME: 'auto' means the value is the dominant-baseline of the script to\n            // which the character belongs - i.e., use the dominant-baseline of the parent.\n            zrTextBaseline = 'alphabetic';\n        }\n        else if (textBaseline === 'baseline') {\n            zrTextBaseline = 'alphabetic';\n        }\n        else if (textBaseline === 'before-edge' || textBaseline === 'text-before-edge') {\n            zrTextBaseline = 'top';\n        }\n        else if (textBaseline === 'after-edge' || textBaseline === 'text-after-edge') {\n            zrTextBaseline = 'bottom';\n        }\n        else if (textBaseline === 'central' || textBaseline === 'mathematical') {\n            zrTextBaseline = 'middle';\n        }\n        text.style.textBaseline = zrTextBaseline;\n    }\n\n    const parentInheritedStyle = (parentGroup as ElementExtended).__inheritedStyle;\n    if (parentInheritedStyle) {\n        // PENDING:\n        // canvas `direction` is an experimental attribute.\n        // so we do not support SVG direction \"rtl\" for text-anchor yet.\n        const textAlign = parentInheritedStyle.textAlign;\n        let zrTextAlign = textAlign as CanvasTextAlign;\n        if (textAlign) {\n            if (textAlign === 'middle') {\n                zrTextAlign = 'center';\n            }\n            text.style.textAlign = zrTextAlign;\n        }\n    }\n}\n\n// Support `fill:url(#someId)`.\nconst urlRegex = /^url\\(\\s*#(.*?)\\)/;\nfunction getFillStrokeStyle(\n    el: Displayable,\n    method: 'fill' | 'stroke',\n    str: string,\n    defsUsePending: DefsUsePending\n): string {\n    const urlMatch = str && str.match(urlRegex);\n    if (urlMatch) {\n        const url = trim(urlMatch[1]);\n        defsUsePending.push([el, method, url]);\n        return;\n    }\n    // SVG fill and stroke can be 'none'.\n    if (str === 'none') {\n        str = null;\n    }\n    return str;\n}\n\nfunction applyDefs(\n    defs: DefsMap,\n    defsUsePending: DefsUsePending\n): void {\n    for (let i = 0; i < defsUsePending.length; i++) {\n        const item = defsUsePending[i];\n        item[0].style[item[1]] = defs[item[2]];\n    }\n}\n\n// value can be like:\n// '2e-4', 'l.5.9' (ignore 0), 'M-10-10', 'l-2.43e-1,34.9983',\n// 'l-.5E1,54', '121-23-44-11' (no delimiter)\n// PENDING: here continuous commas are treat as one comma, but the\n// browser SVG parser treats this by printing error.\nconst numberReg = /-?([0-9]*\\.)?[0-9]+([eE]-?[0-9]+)?/g;\nfunction splitNumberSequence(rawStr: string): string[] {\n    return rawStr.match(numberReg) || [];\n}\n// Most of the values can be separated by comma and/or white space.\n// const DILIMITER_REG = /[\\s,]+/;\n\n\nconst transformRegex = /(translate|scale|rotate|skewX|skewY|matrix)\\(([\\-\\s0-9\\.eE,]*)\\)/g;\nconst DEGREE_TO_ANGLE = Math.PI / 180;\n\nfunction parseTransformAttribute(xmlNode: SVGElement, node: Element): void {\n    let transform = xmlNode.getAttribute('transform');\n    if (transform) {\n        transform = transform.replace(/,/g, ' ');\n        const transformOps: string[] = [];\n        let mt = null;\n        transform.replace(transformRegex, function (str: string, type: string, value: string) {\n            transformOps.push(type, value);\n            return '';\n        });\n\n        for (let i = transformOps.length - 1; i > 0; i -= 2) {\n            const value = transformOps[i];\n            const type = transformOps[i - 1];\n            const valueArr: string[] = splitNumberSequence(value);\n            mt = mt || matrix.create();\n            switch (type) {\n                case 'translate':\n                    matrix.translate(mt, mt, [parseFloat(valueArr[0]), parseFloat(valueArr[1] || '0')]);\n                    break;\n                case 'scale':\n                    matrix.scale(mt, mt, [parseFloat(valueArr[0]), parseFloat(valueArr[1] || valueArr[0])]);\n                    break;\n                case 'rotate':\n                    // TODO: zrender use different hand in coordinate system.\n                    matrix.rotate(mt, mt, -parseFloat(valueArr[0]) * DEGREE_TO_ANGLE, [\n                        parseFloat(valueArr[1] || '0'),\n                        parseFloat(valueArr[2] || '0')\n                    ]);\n                    break;\n                case 'skewX':\n                    const sx = Math.tan(parseFloat(valueArr[0]) * DEGREE_TO_ANGLE);\n                    matrix.mul(mt, [1, 0, sx, 1, 0, 0], mt);\n                    break;\n                case 'skewY':\n                    const sy = Math.tan(parseFloat(valueArr[0]) * DEGREE_TO_ANGLE);\n                    matrix.mul(mt, [1, sy, 0, 1, 0, 0], mt);\n                    break;\n                case 'matrix':\n                    mt[0] = parseFloat(valueArr[0]);\n                    mt[1] = parseFloat(valueArr[1]);\n                    mt[2] = parseFloat(valueArr[2]);\n                    mt[3] = parseFloat(valueArr[3]);\n                    mt[4] = parseFloat(valueArr[4]);\n                    mt[5] = parseFloat(valueArr[5]);\n                    break;\n            }\n        }\n        node.setLocalTransform(mt);\n    }\n}\n\n// Value may contain space.\nconst styleRegex = /([^\\s:;]+)\\s*:\\s*([^:;]+)/g;\nfunction parseInlineStyle(\n    xmlNode: SVGElement,\n    inheritableStyleResult: Dictionary,\n    selfStyleResult: Dictionary\n): void {\n    const style = xmlNode.getAttribute('style');\n\n    if (!style) {\n        return;\n    }\n\n    styleRegex.lastIndex = 0;\n    let styleRegResult;\n    while ((styleRegResult = styleRegex.exec(style)) != null) {\n        const svgStlAttr = styleRegResult[1];\n\n        const zrInheritableStlAttr = hasOwn(INHERITABLE_STYLE_ATTRIBUTES_MAP, svgStlAttr)\n            ? INHERITABLE_STYLE_ATTRIBUTES_MAP[svgStlAttr as keyof typeof INHERITABLE_STYLE_ATTRIBUTES_MAP]\n            : null;\n        if (zrInheritableStlAttr) {\n            inheritableStyleResult[zrInheritableStlAttr] = styleRegResult[2];\n        }\n\n        const zrSelfStlAttr = hasOwn(SELF_STYLE_ATTRIBUTES_MAP, svgStlAttr)\n            ? SELF_STYLE_ATTRIBUTES_MAP[svgStlAttr as keyof typeof SELF_STYLE_ATTRIBUTES_MAP]\n            : null;\n        if (zrSelfStlAttr) {\n            selfStyleResult[zrSelfStlAttr] = styleRegResult[2];\n        }\n    }\n}\n\nfunction parseAttributeStyle(\n    xmlNode: SVGElement,\n    inheritableStyleResult: Dictionary,\n    selfStyleResult: Dictionary\n): void {\n    for (let i = 0; i < INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS.length; i++) {\n        const svgAttrName = INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS[i];\n        const attrValue = xmlNode.getAttribute(svgAttrName);\n        if (attrValue != null) {\n            inheritableStyleResult[INHERITABLE_STYLE_ATTRIBUTES_MAP[svgAttrName]] = attrValue;\n        }\n    }\n    for (let i = 0; i < SELF_STYLE_ATTRIBUTES_MAP_KEYS.length; i++) {\n        const svgAttrName = SELF_STYLE_ATTRIBUTES_MAP_KEYS[i];\n        const attrValue = xmlNode.getAttribute(svgAttrName);\n        if (attrValue != null) {\n            selfStyleResult[SELF_STYLE_ATTRIBUTES_MAP[svgAttrName]] = attrValue;\n        }\n    }\n}\n\nexport function makeViewBoxTransform(viewBoxRect: RectLike, boundingRect: RectLike): {\n    scale: number;\n    x: number;\n    y: number;\n} {\n    const scaleX = boundingRect.width / viewBoxRect.width;\n    const scaleY = boundingRect.height / viewBoxRect.height;\n    const scale = Math.min(scaleX, scaleY);\n    // preserveAspectRatio 'xMidYMid'\n\n    return {\n        scale,\n        x: -(viewBoxRect.x + viewBoxRect.width / 2) * scale + (boundingRect.x + boundingRect.width / 2),\n        y: -(viewBoxRect.y + viewBoxRect.height / 2) * scale + (boundingRect.y + boundingRect.height / 2)\n    };\n}\n\nexport function parseSVG(xml: string | Document | SVGElement, opt: SVGParserOption): SVGParserResult {\n    const parser = new SVGParser();\n    return parser.parse(xml, opt);\n}\n\n\n// Also export parseXML to avoid breaking change.\nexport {parseXML};\n","import PathProxy from '../../core/PathProxy';\nimport { isArray } from '../../core/util';\n\nconst PI = Math.PI;\nconst PI2 = PI * 2;\nconst mathSin = Math.sin;\nconst mathCos = Math.cos;\nconst mathACos = Math.acos;\nconst mathATan2 = Math.atan2;\nconst mathAbs = Math.abs;\nconst mathSqrt = Math.sqrt;\nconst mathMax = Math.max;\nconst mathMin = Math.min;\nconst e = 1e-4;\n\nfunction intersect(\n    x0: number, y0: number,\n    x1: number, y1: number,\n    x2: number, y2: number,\n    x3: number, y3: number\n): [number, number] {\n    const dx10 = x1 - x0;\n    const dy10 = y1 - y0;\n    const dx32 = x3 - x2;\n    const dy32 = y3 - y2;\n    let t = dy32 * dx10 - dx32 * dy10;\n    if (t * t < e) {\n        return;\n    }\n    t = (dx32 * (y0 - y2) - dy32 * (x0 - x2)) / t;\n    return [x0 + t * dx10, y0 + t * dy10];\n}\n\n// Compute perpendicular offset line of length rc.\nfunction computeCornerTangents(\n    x0: number, y0: number,\n    x1: number, y1: number,\n    radius: number, cr: number,\n    clockwise: boolean\n) {\n    const x01 = x0 - x1;\n    const y01 = y0 - y1;\n    const lo = (clockwise ? cr : -cr) / mathSqrt(x01 * x01 + y01 * y01);\n    const ox = lo * y01;\n    const oy = -lo * x01;\n    const x11 = x0 + ox;\n    const y11 = y0 + oy;\n    const x10 = x1 + ox;\n    const y10 = y1 + oy;\n    const x00 = (x11 + x10) / 2;\n    const y00 = (y11 + y10) / 2;\n    const dx = x10 - x11;\n    const dy = y10 - y11;\n    const d2 = dx * dx + dy * dy;\n    const r = radius - cr;\n    const s = x11 * y10 - x10 * y11;\n    const d = (dy < 0 ? -1 : 1) * mathSqrt(mathMax(0, r * r * d2 - s * s));\n    let cx0 = (s * dy - dx * d) / d2;\n    let cy0 = (-s * dx - dy * d) / d2;\n    const cx1 = (s * dy + dx * d) / d2;\n    const cy1 = (-s * dx + dy * d) / d2;\n    const dx0 = cx0 - x00;\n    const dy0 = cy0 - y00;\n    const dx1 = cx1 - x00;\n    const dy1 = cy1 - y00;\n\n    // Pick the closer of the two intersection points\n    // TODO: Is there a faster way to determine which intersection to use?\n    if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) {\n        cx0 = cx1;\n        cy0 = cy1;\n    }\n\n    return {\n        cx: cx0,\n        cy: cy0,\n        x0: -ox,\n        y0: -oy,\n        x1: cx0 * (radius / r - 1),\n        y1: cy0 * (radius / r - 1)\n    };\n}\n\n// For compatibility, don't use normalizeCssArray\n// 5 represents [5, 5, 5, 5]\n// [5] represents [5, 5, 0, 0]\n// [5, 10] represents [5, 5, 10, 10]\n// [5, 10, 15] represents [5, 10, 15, 15]\n// [5, 10, 15, 20] represents [5, 10, 15, 20]\nfunction normalizeCornerRadius(cr: number | number[]): number[] {\n    let arr: number[];\n    if (isArray(cr)) {\n        const len = cr.length;\n        if (!len) {\n            return cr as number[];\n        }\n        if (len === 1) {\n            arr = [cr[0], cr[0], 0, 0];\n        }\n        else if (len === 2) {\n            arr = [cr[0], cr[0], cr[1], cr[1]];\n        }\n        else if (len === 3) {\n            arr = cr.concat(cr[2]);\n        }\n        else {\n            arr = cr;\n        }\n    }\n    else {\n        arr = [cr, cr, cr, cr];\n    }\n    return arr;\n}\n\nexport function buildPath(ctx: CanvasRenderingContext2D | PathProxy, shape: {\n    cx: number\n    cy: number\n    startAngle: number\n    endAngle: number\n    clockwise?: boolean,\n    r?: number,\n    r0?: number,\n    cornerRadius?: number | number[]\n}) {\n    let radius = mathMax(shape.r, 0);\n    let innerRadius = mathMax(shape.r0 || 0, 0);\n    const hasRadius = radius > 0;\n    const hasInnerRadius = innerRadius > 0;\n\n    if (!hasRadius && !hasInnerRadius) {\n        return;\n    }\n\n    if (!hasRadius) {\n        // use innerRadius as radius if no radius\n        radius = innerRadius;\n        innerRadius = 0;\n    }\n\n    if (innerRadius > radius) {\n        // swap, ensure that radius is always larger than innerRadius\n        const tmp = radius;\n        radius = innerRadius;\n        innerRadius = tmp;\n    }\n\n    const { startAngle, endAngle } = shape;\n    if (isNaN(startAngle) || isNaN(endAngle)) {\n        return;\n    }\n\n    const { cx, cy } = shape;\n    const clockwise = !!shape.clockwise;\n\n    let arc = mathAbs(endAngle - startAngle);\n    const mod = arc > PI2 && arc % PI2;\n    mod > e && (arc = mod);\n\n    // is a point\n    if (!(radius > e)) {\n        ctx.moveTo(cx, cy);\n    }\n    // is a circle or annulus\n    else if (arc > PI2 - e) {\n        ctx.moveTo(\n            cx + radius * mathCos(startAngle),\n            cy + radius * mathSin(startAngle)\n        );\n        ctx.arc(cx, cy, radius, startAngle, endAngle, !clockwise);\n\n        if (innerRadius > e) {\n            ctx.moveTo(\n                cx + innerRadius * mathCos(endAngle),\n                cy + innerRadius * mathSin(endAngle)\n            );\n            ctx.arc(cx, cy, innerRadius, endAngle, startAngle, clockwise);\n        }\n    }\n    // is a circular or annular sector\n    else {\n        let icrStart;\n        let icrEnd;\n        let ocrStart;\n        let ocrEnd;\n\n        let ocrs;\n        let ocre;\n        let icrs;\n        let icre;\n\n        let ocrMax;\n        let icrMax;\n        let limitedOcrMax;\n        let limitedIcrMax;\n\n        let xre;\n        let yre;\n        let xirs;\n        let yirs;\n\n        const xrs = radius * mathCos(startAngle);\n        const yrs = radius * mathSin(startAngle);\n        const xire = innerRadius * mathCos(endAngle);\n        const yire = innerRadius * mathSin(endAngle);\n\n        const hasArc = arc > e;\n        if (hasArc) {\n            const cornerRadius = shape.cornerRadius;\n            if (cornerRadius) {\n                [icrStart, icrEnd, ocrStart, ocrEnd] = normalizeCornerRadius(cornerRadius);\n            }\n\n            const halfRd = mathAbs(radius - innerRadius) / 2;\n            ocrs = mathMin(halfRd, ocrStart);\n            ocre = mathMin(halfRd, ocrEnd);\n            icrs = mathMin(halfRd, icrStart);\n            icre = mathMin(halfRd, icrEnd);\n\n            limitedOcrMax = ocrMax = mathMax(ocrs, ocre);\n            limitedIcrMax = icrMax = mathMax(icrs, icre);\n\n            // draw corner radius\n            if (ocrMax > e || icrMax > e) {\n                xre = radius * mathCos(endAngle);\n                yre = radius * mathSin(endAngle);\n                xirs = innerRadius * mathCos(startAngle);\n                yirs = innerRadius * mathSin(startAngle);\n\n                // restrict the max value of corner radius\n                if (arc < PI) {\n                    const it = intersect(xrs, yrs, xirs, yirs, xre, yre, xire, yire);\n                    if (it) {\n                        const x0 = xrs - it[0];\n                        const y0 = yrs - it[1];\n                        const x1 = xre - it[0];\n                        const y1 = yre - it[1];\n                        const a = 1 / mathSin(\n                            // eslint-disable-next-line max-len\n                            mathACos((x0 * x1 + y0 * y1) / (mathSqrt(x0 * x0 + y0 * y0) * mathSqrt(x1 * x1 + y1 * y1))) / 2\n                        );\n                        const b = mathSqrt(it[0] * it[0] + it[1] * it[1]);\n                        limitedOcrMax = mathMin(ocrMax, (radius - b) / (a + 1));\n                        limitedIcrMax = mathMin(icrMax, (innerRadius - b) / (a - 1));\n                    }\n                }\n            }\n        }\n\n        // the sector is collapsed to a line\n        if (!hasArc) {\n            ctx.moveTo(cx + xrs, cy + yrs);\n        }\n        // the outer ring has corners\n        else if (limitedOcrMax > e) {\n            const crStart = mathMin(ocrStart, limitedOcrMax);\n            const crEnd = mathMin(ocrEnd, limitedOcrMax);\n            const ct0 = computeCornerTangents(xirs, yirs, xrs, yrs, radius, crStart, clockwise);\n            const ct1 = computeCornerTangents(xre, yre, xire, yire, radius, crEnd, clockwise);\n\n            ctx.moveTo(cx + ct0.cx + ct0.x0, cy + ct0.cy + ct0.y0);\n\n            // Have the corners merged?\n            if (limitedOcrMax < ocrMax && crStart === crEnd) {\n                // eslint-disable-next-line max-len\n                ctx.arc(cx + ct0.cx, cy + ct0.cy, limitedOcrMax, mathATan2(ct0.y0, ct0.x0), mathATan2(ct1.y0, ct1.x0), !clockwise);\n            }\n            else {\n                // draw the two corners and the ring\n                // eslint-disable-next-line max-len\n                crStart > 0 && ctx.arc(cx + ct0.cx, cy + ct0.cy, crStart, mathATan2(ct0.y0, ct0.x0), mathATan2(ct0.y1, ct0.x1), !clockwise);\n                // eslint-disable-next-line max-len\n                ctx.arc(cx, cy, radius, mathATan2(ct0.cy + ct0.y1, ct0.cx + ct0.x1), mathATan2(ct1.cy + ct1.y1, ct1.cx + ct1.x1), !clockwise);\n                // eslint-disable-next-line max-len\n                crEnd > 0 && ctx.arc(cx + ct1.cx, cy + ct1.cy, crEnd, mathATan2(ct1.y1, ct1.x1), mathATan2(ct1.y0, ct1.x0), !clockwise);\n            }\n        }\n        // the outer ring is a circular arc\n        else {\n            ctx.moveTo(cx + xrs, cy + yrs);\n            ctx.arc(cx, cy, radius, startAngle, endAngle, !clockwise);\n        }\n\n        // no inner ring, is a circular sector\n        if (!(innerRadius > e) || !hasArc) {\n            ctx.lineTo(cx + xire, cy + yire);\n        }\n        // the inner ring has corners\n        else if (limitedIcrMax > e) {\n            const crStart = mathMin(icrStart, limitedIcrMax);\n            const crEnd = mathMin(icrEnd, limitedIcrMax);\n            const ct0 = computeCornerTangents(xire, yire, xre, yre, innerRadius, -crEnd, clockwise);\n            const ct1 = computeCornerTangents(xrs, yrs, xirs, yirs, innerRadius, -crStart, clockwise);\n            ctx.lineTo(cx + ct0.cx + ct0.x0, cy + ct0.cy + ct0.y0);\n\n            // Have the corners merged?\n            if (limitedIcrMax < icrMax && crStart === crEnd) {\n                // eslint-disable-next-line max-len\n                ctx.arc(cx + ct0.cx, cy + ct0.cy, limitedIcrMax, mathATan2(ct0.y0, ct0.x0), mathATan2(ct1.y0, ct1.x0), !clockwise);\n            }\n            // draw the two corners and the ring\n            else {\n                // eslint-disable-next-line max-len\n                crEnd > 0 && ctx.arc(cx + ct0.cx, cy + ct0.cy, crEnd, mathATan2(ct0.y0, ct0.x0), mathATan2(ct0.y1, ct0.x1), !clockwise);\n                // eslint-disable-next-line max-len\n                ctx.arc(cx, cy, innerRadius, mathATan2(ct0.cy + ct0.y1, ct0.cx + ct0.x1), mathATan2(ct1.cy + ct1.y1, ct1.cx + ct1.x1), clockwise);\n                // eslint-disable-next-line max-len\n                crStart > 0 && ctx.arc(cx + ct1.cx, cy + ct1.cy, crStart, mathATan2(ct1.y1, ct1.x1), mathATan2(ct1.y0, ct1.x0), !clockwise);\n            }\n        }\n        // the inner ring is just a circular arc\n        else {\n            // FIXME: if no lineTo, svg renderer will perform an abnormal drawing behavior.\n            ctx.lineTo(cx + xire, cy + yire);\n\n            ctx.arc(cx, cy, innerRadius, endAngle, startAngle, clockwise);\n        }\n    }\n\n    ctx.closePath();\n}\n","import Path, { PathProps } from '../Path';\r\nimport * as roundSectorHelper from '../helper/roundSector';\r\n\r\nexport class SectorShape {\r\n    cx = 0\r\n    cy = 0\r\n    r0 = 0\r\n    r = 0\r\n    startAngle = 0\r\n    endAngle = Math.PI * 2\r\n    clockwise = true\r\n    /**\r\n     * Corner radius of sector\r\n     *\r\n     * clockwise, from inside to outside, four corners are\r\n     * inner start -> inner end\r\n     * outer start -> outer end\r\n     *\r\n     * 5               => [5, 5, 5, 5]\r\n     * [5]             => [5, 5, 0, 0]\r\n     * [5, 10]         => [5, 5, 10, 10]\r\n     * [5, 10, 15]     => [5, 10, 15, 15]\r\n     * [5, 10, 15, 20] => [5, 10, 15, 20]\r\n     */\r\n    cornerRadius: number | number[] = 0\r\n}\r\n\r\nexport interface SectorProps extends PathProps {\r\n    shape?: Partial\r\n}\r\n\r\nclass Sector extends Path {\r\n\r\n    shape: SectorShape\r\n\r\n    constructor(opts?: SectorProps) {\r\n        super(opts);\r\n    }\r\n\r\n    getDefaultShape() {\r\n        return new SectorShape();\r\n    }\r\n\r\n    buildPath(ctx: CanvasRenderingContext2D, shape: SectorShape) {\r\n        roundSectorHelper.buildPath(ctx, shape);\r\n    }\r\n\r\n    isZeroArea() {\r\n        return this.shape.startAngle === this.shape.endAngle\r\n            || this.shape.r === this.shape.r0;\r\n    }\r\n}\r\n\r\nSector.prototype.type = 'sector';\r\n\r\nexport default Sector;\r\n","import { cubicSubdivide } from '../core/curve';\r\nimport PathProxy from '../core/PathProxy';\r\n\r\nconst CMD = PathProxy.CMD;\r\n\r\nfunction aroundEqual(a: number, b: number) {\r\n    return Math.abs(a - b) < 1e-5;\r\n}\r\n\r\nexport function pathToBezierCurves(path: PathProxy) {\r\n\r\n    const data = path.data;\r\n    const len = path.len();\r\n\r\n    const bezierArrayGroups: number[][] = [];\r\n    let currentSubpath: number[];\r\n\r\n    let xi = 0;\r\n    let yi = 0;\r\n    let x0 = 0;\r\n    let y0 = 0;\r\n\r\n    function createNewSubpath(x: number, y: number) {\r\n        // More than one M command\r\n        if (currentSubpath && currentSubpath.length > 2) {\r\n            bezierArrayGroups.push(currentSubpath);\r\n        }\r\n        currentSubpath = [x, y];\r\n    }\r\n\r\n    function addLine(x0: number, y0: number, x1: number, y1: number) {\r\n        if (!(aroundEqual(x0, x1) && aroundEqual(y0, y1))) {\r\n            currentSubpath.push(x0, y0, x1, y1, x1, y1);\r\n        }\r\n    }\r\n\r\n    function addArc(startAngle: number, endAngle: number, cx: number, cy: number, rx: number, ry: number) {\r\n        // https://stackoverflow.com/questions/1734745/how-to-create-circle-with-b%C3%A9zier-curves\r\n        const delta = Math.abs(endAngle - startAngle);\r\n        const len = Math.tan(delta / 4) * 4 / 3;\r\n        const dir = endAngle < startAngle ? -1 : 1;\r\n\r\n        const c1 = Math.cos(startAngle);\r\n        const s1 = Math.sin(startAngle);\r\n        const c2 = Math.cos(endAngle);\r\n        const s2 = Math.sin(endAngle);\r\n\r\n        const x1 = c1 * rx + cx;\r\n        const y1 = s1 * ry + cy;\r\n\r\n        const x4 = c2 * rx + cx;\r\n        const y4 = s2 * ry + cy;\r\n\r\n        const hx = rx * len * dir;\r\n        const hy = ry * len * dir;\r\n        currentSubpath.push(\r\n            // Move control points on tangent.\r\n            x1 - hx * s1, y1 + hy * c1,\r\n            x4 + hx * s2, y4 - hy * c2,\r\n            x4, y4\r\n        );\r\n    }\r\n\r\n    let x1;\r\n    let y1;\r\n    let x2;\r\n    let y2;\r\n\r\n    for (let i = 0; i < len;) {\r\n        const cmd = data[i++];\r\n        const isFirst = i === 1;\r\n\r\n        if (isFirst) {\r\n            // 如果第一个命令是 L, C, Q\r\n            // 则 previous point 同绘制命令的第一个 point\r\n            // 第一个命令为 Arc 的情况下会在后面特殊处理\r\n            xi = data[i];\r\n            yi = data[i + 1];\r\n\r\n            x0 = xi;\r\n            y0 = yi;\r\n\r\n            if (cmd === CMD.L || cmd === CMD.C || cmd === CMD.Q) {\r\n                // Start point\r\n                currentSubpath = [x0, y0];\r\n            }\r\n        }\r\n\r\n        switch (cmd) {\r\n            case CMD.M:\r\n                // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\r\n                // 在 closePath 的时候使用\r\n                xi = x0 = data[i++];\r\n                yi = y0 = data[i++];\r\n\r\n                createNewSubpath(x0, y0);\r\n                break;\r\n            case CMD.L:\r\n                x1 = data[i++];\r\n                y1 = data[i++];\r\n                addLine(xi, yi, x1, y1);\r\n                xi = x1;\r\n                yi = y1;\r\n                break;\r\n            case CMD.C:\r\n                currentSubpath.push(\r\n                    data[i++], data[i++], data[i++], data[i++],\r\n                    xi = data[i++], yi = data[i++]\r\n                );\r\n                break;\r\n            case CMD.Q:\r\n                x1 = data[i++];\r\n                y1 = data[i++];\r\n                x2 = data[i++];\r\n                y2 = data[i++];\r\n                currentSubpath.push(\r\n                    // Convert quadratic to cubic\r\n                    xi + 2 / 3 * (x1 - xi), yi + 2 / 3 * (y1 - yi),\r\n                    x2 + 2 / 3 * (x1 - x2), y2 + 2 / 3 * (y1 - y2),\r\n                    x2, y2\r\n                );\r\n                xi = x2;\r\n                yi = y2;\r\n                break;\r\n            case CMD.A:\r\n                const cx = data[i++];\r\n                const cy = data[i++];\r\n                const rx = data[i++];\r\n                const ry = data[i++];\r\n                const startAngle = data[i++];\r\n                const endAngle = data[i++] + startAngle;\r\n\r\n                // TODO Arc rotation\r\n                i += 1;\r\n                const anticlockwise = !data[i++];\r\n\r\n                x1 = Math.cos(startAngle) * rx + cx;\r\n                y1 = Math.sin(startAngle) * ry + cy;\r\n                if (isFirst) {\r\n                    // 直接使用 arc 命令\r\n                    // 第一个命令起点还未定义\r\n                    x0 = x1;\r\n                    y0 = y1;\r\n                    createNewSubpath(x0, y0);\r\n                }\r\n                else {\r\n                    // Connect a line between current point to arc start point.\r\n                    addLine(xi, yi, x1, y1);\r\n                }\r\n\r\n                xi = Math.cos(endAngle) * rx + cx;\r\n                yi = Math.sin(endAngle) * ry + cy;\r\n\r\n                const step = (anticlockwise ? -1 : 1) * Math.PI / 2;\r\n\r\n                for (let angle = startAngle; anticlockwise ? angle > endAngle : angle < endAngle; angle += step) {\r\n                    const nextAngle = anticlockwise ? Math.max(angle + step, endAngle)\r\n                        : Math.min(angle + step, endAngle);\r\n                    addArc(angle, nextAngle, cx, cy, rx, ry);\r\n                }\r\n\r\n                break;\r\n            case CMD.R:\r\n                x0 = xi = data[i++];\r\n                y0 = yi = data[i++];\r\n                x1 = x0 + data[i++];\r\n                y1 = y0 + data[i++];\r\n\r\n                // rect is an individual path.\r\n                createNewSubpath(x1, y0);\r\n                addLine(x1, y0, x1, y1);\r\n                addLine(x1, y1, x0, y1);\r\n                addLine(x0, y1, x0, y0);\r\n                addLine(x0, y0, x1, y0);\r\n                break;\r\n            case CMD.Z:\r\n                currentSubpath && addLine(xi, yi, x0, y0);\r\n                xi = x0;\r\n                yi = y0;\r\n                break;\r\n        }\r\n    }\r\n\r\n    if (currentSubpath && currentSubpath.length > 2) {\r\n        bezierArrayGroups.push(currentSubpath);\r\n    }\r\n\r\n    return bezierArrayGroups;\r\n}\r\n\r\nfunction adpativeBezier(\r\n    x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, x3: number, y3: number,\r\n    out: number[], scale: number\r\n) {\r\n    // This bezier is used to simulates a line when converting path to beziers.\r\n    if (aroundEqual(x0, x1) && aroundEqual(y0, y1) && aroundEqual(x2, x3) && aroundEqual(y2, y3)) {\r\n        out.push(x3, y3);\r\n        return;\r\n    }\r\n\r\n    const PIXEL_DISTANCE = 2 / scale;\r\n    const PIXEL_DISTANCE_SQR = PIXEL_DISTANCE * PIXEL_DISTANCE;\r\n\r\n    // Determine if curve is straight enough\r\n    let dx = x3 - x0;\r\n    let dy = y3 - y0;\r\n    const d = Math.sqrt(dx * dx + dy * dy);\r\n    dx /= d;\r\n    dy /= d;\r\n\r\n    const dx1 = x1 - x0;\r\n    const dy1 = y1 - y0;\r\n    const dx2 = x2 - x3;\r\n    const dy2 = y2 - y3;\r\n\r\n    const cp1LenSqr = dx1 * dx1 + dy1 * dy1;\r\n    const cp2LenSqr = dx2 * dx2 + dy2 * dy2;\r\n\r\n    if (cp1LenSqr < PIXEL_DISTANCE_SQR && cp2LenSqr < PIXEL_DISTANCE_SQR) {\r\n        // Add small segment\r\n        out.push(x3, y3);\r\n        return;\r\n    }\r\n\r\n    // Project length of cp1\r\n    const projLen1 = dx * dx1 + dy * dy1;\r\n    // Project length of cp2\r\n    const projLen2 = -dx * dx2 - dy * dy2;\r\n\r\n    // Distance from cp1 to start-end line.\r\n    const d1Sqr = cp1LenSqr - projLen1 * projLen1;\r\n    // Distance from cp2 to start-end line.\r\n    const d2Sqr = cp2LenSqr - projLen2 * projLen2;\r\n\r\n    // IF the cp1 and cp2 is near to the start-line enough\r\n    // We treat it straight enough\r\n    if (d1Sqr < PIXEL_DISTANCE_SQR && projLen1 >= 0\r\n        && d2Sqr < PIXEL_DISTANCE_SQR && projLen2 >= 0\r\n    ) {\r\n        out.push(x3, y3);\r\n        return;\r\n    }\r\n\r\n\r\n    const tmpSegX: number[] = [];\r\n    const tmpSegY: number[] = [];\r\n    // Subdivide\r\n    cubicSubdivide(x0, x1, x2, x3, 0.5, tmpSegX);\r\n    cubicSubdivide(y0, y1, y2, y3, 0.5, tmpSegY);\r\n\r\n    adpativeBezier(\r\n        tmpSegX[0], tmpSegY[0], tmpSegX[1], tmpSegY[1], tmpSegX[2], tmpSegY[2], tmpSegX[3], tmpSegY[3],\r\n        out, scale\r\n    );\r\n    adpativeBezier(\r\n        tmpSegX[4], tmpSegY[4], tmpSegX[5], tmpSegY[5], tmpSegX[6], tmpSegY[6], tmpSegX[7], tmpSegY[7],\r\n        out, scale\r\n    );\r\n}\r\n\r\nexport function pathToPolygons(path: PathProxy, scale?: number) {\r\n    // TODO Optimize simple case like path is polygon and rect?\r\n    const bezierArrayGroups = pathToBezierCurves(path);\r\n\r\n    const polygons: number[][] = [];\r\n\r\n    scale = scale || 1;\r\n\r\n    for (let i = 0; i < bezierArrayGroups.length; i++) {\r\n        const beziers = bezierArrayGroups[i];\r\n        const polygon: number[] = [];\r\n        let x0 = beziers[0];\r\n        let y0 = beziers[1];\r\n\r\n        polygon.push(x0, y0);\r\n\r\n        for (let k = 2; k < beziers.length;) {\r\n\r\n            const x1 = beziers[k++];\r\n            const y1 = beziers[k++];\r\n            const x2 = beziers[k++];\r\n            const y2 = beziers[k++];\r\n            const x3 = beziers[k++];\r\n            const y3 = beziers[k++];\r\n\r\n            adpativeBezier(x0, y0, x1, y1, x2, y2, x3, y3, polygon, scale);\r\n\r\n            x0 = x3;\r\n            y0 = y3;\r\n        }\r\n\r\n        polygons.push(polygon);\r\n    }\r\n    return polygons;\r\n}\r\n","import { fromPoints } from '../core/bbox';\r\nimport BoundingRect from '../core/BoundingRect';\r\nimport Point from '../core/Point';\r\nimport { map } from '../core/util';\r\nimport Path from '../graphic/Path';\r\nimport Polygon from '../graphic/shape/Polygon';\r\nimport Rect from '../graphic/shape/Rect';\r\nimport Sector from '../graphic/shape/Sector';\r\nimport { pathToPolygons } from './convertPath';\r\nimport { clonePath } from './path';\r\n\r\n// Default shape dividers\r\n// TODO divide polygon by grids.\r\ninterface BinaryDivide {\r\n    (shape: Path['shape']): Path['shape'][]\r\n}\r\n\r\n/**\r\n * Calculating a grid to divide the shape.\r\n */\r\nfunction getDividingGrids(dimSize: number[], rowDim: number, count: number) {\r\n    const rowSize = dimSize[rowDim];\r\n    const columnSize = dimSize[1 - rowDim];\r\n\r\n    const ratio = Math.abs(rowSize / columnSize);\r\n    let rowCount = Math.ceil(Math.sqrt(ratio * count));\r\n    let columnCount = Math.floor(count / rowCount);\r\n    if (columnCount === 0) {\r\n        columnCount = 1;\r\n        rowCount = count;\r\n    }\r\n\r\n    const grids: number[] = [];\r\n    for (let i = 0; i < rowCount; i++) {\r\n        grids.push(columnCount);\r\n    }\r\n    const currentCount = rowCount * columnCount;\r\n    // Distribute the remaind grid evenly on each row.\r\n    const remained = count - currentCount;\r\n    if (remained > 0) {\r\n        // const stride = Math.max(Math.floor(rowCount / remained), 1);\r\n        for (let i = 0; i < remained; i++) {\r\n            grids[i % rowCount] += 1;\r\n        }\r\n    }\r\n    return grids;\r\n}\r\n\r\n\r\n// TODO cornerRadius\r\nfunction divideSector(sectorShape: Sector['shape'], count: number, outShapes: Sector['shape'][]) {\r\n    const r0 = sectorShape.r0;\r\n    const r = sectorShape.r;\r\n    const startAngle = sectorShape.startAngle;\r\n    const endAngle = sectorShape.endAngle;\r\n    const angle = Math.abs(endAngle - startAngle);\r\n    const arcLen = angle * r;\r\n    const deltaR = r - r0;\r\n\r\n    const isAngleRow = arcLen > Math.abs(deltaR);\r\n    const grids = getDividingGrids([arcLen, deltaR], isAngleRow ? 0 : 1, count);\r\n\r\n    const rowSize = (isAngleRow ? angle : deltaR) / grids.length;\r\n\r\n    for (let row = 0; row < grids.length; row++) {\r\n        const columnSize = (isAngleRow ? deltaR : angle) / grids[row];\r\n        for (let column = 0; column < grids[row]; column++) {\r\n            const newShape = {} as Sector['shape'];\r\n\r\n            if (isAngleRow) {\r\n                newShape.startAngle = startAngle + rowSize * row;\r\n                newShape.endAngle = startAngle + rowSize * (row + 1);\r\n                newShape.r0 = r0 + columnSize * column;\r\n                newShape.r = r0 + columnSize * (column + 1);\r\n            }\r\n            else {\r\n                newShape.startAngle = startAngle + columnSize * column;\r\n                newShape.endAngle = startAngle + columnSize * (column + 1);\r\n                newShape.r0 = r0 + rowSize * row;\r\n                newShape.r = r0 + rowSize * (row + 1);\r\n            }\r\n\r\n            newShape.clockwise = sectorShape.clockwise;\r\n            newShape.cx = sectorShape.cx;\r\n            newShape.cy = sectorShape.cy;\r\n\r\n            outShapes.push(newShape);\r\n        }\r\n    }\r\n}\r\n\r\nfunction divideRect(rectShape: Rect['shape'], count: number, outShapes: Rect['shape'][]) {\r\n    const width = rectShape.width;\r\n    const height = rectShape.height;\r\n\r\n    const isHorizontalRow = width > height;\r\n    const grids = getDividingGrids([width, height], isHorizontalRow ? 0 : 1, count);\r\n    const rowSizeDim = isHorizontalRow ? 'width' : 'height';\r\n    const columnSizeDim = isHorizontalRow ? 'height' : 'width';\r\n    const rowDim = isHorizontalRow ? 'x' : 'y';\r\n    const columnDim = isHorizontalRow ? 'y' : 'x';\r\n    const rowSize = rectShape[rowSizeDim] / grids.length;\r\n\r\n    for (let row = 0; row < grids.length; row++) {\r\n        const columnSize = rectShape[columnSizeDim] / grids[row];\r\n        for (let column = 0; column < grids[row]; column++) {\r\n            const newShape = {} as Rect['shape'];\r\n            newShape[rowDim] = row * rowSize;\r\n            newShape[columnDim] = column * columnSize;\r\n            newShape[rowSizeDim] = rowSize;\r\n            newShape[columnSizeDim] = columnSize;\r\n\r\n            newShape.x += rectShape.x;\r\n            newShape.y += rectShape.y;\r\n\r\n            outShapes.push(newShape);\r\n        }\r\n    }\r\n}\r\n\r\nfunction crossProduct2d(x1: number, y1: number, x2: number, y2: number) {\r\n    return x1 * y2 - x2 * y1;\r\n}\r\n\r\nfunction lineLineIntersect(\r\n    a1x: number, a1y: number, a2x: number, a2y: number, // p1\r\n    b1x: number, b1y: number, b2x: number, b2y: number // p2\r\n): Point {\r\n    const mx = a2x - a1x;\r\n    const my = a2y - a1y;\r\n    const nx = b2x - b1x;\r\n    const ny = b2y - b1y;\r\n\r\n    const nmCrossProduct = crossProduct2d(nx, ny, mx, my);\r\n    if (Math.abs(nmCrossProduct) < 1e-6) {\r\n        return null;\r\n    }\r\n\r\n    const b1a1x = a1x - b1x;\r\n    const b1a1y = a1y - b1y;\r\n\r\n    const p = crossProduct2d(b1a1x, b1a1y, nx, ny) / nmCrossProduct;\r\n    if (p < 0 || p > 1) {\r\n        return null;\r\n    }\r\n    // p2 is an infinite line\r\n    return new Point(\r\n        p * mx + a1x,\r\n        p * my + a1y\r\n    );\r\n}\r\n\r\nfunction projPtOnLine(pt: Point, lineA: Point, lineB: Point): number {\r\n    const dir = new Point();\r\n    Point.sub(dir, lineB, lineA);\r\n    dir.normalize();\r\n    const dir2 = new Point();\r\n    Point.sub(dir2, pt, lineA);\r\n    const len = dir2.dot(dir);\r\n    return len;\r\n}\r\n\r\nfunction addToPoly(poly: number[][], pt: number[]) {\r\n    const last = poly[poly.length - 1];\r\n    if (last && last[0] === pt[0] && last[1] === pt[1]) {\r\n        return;\r\n    }\r\n    poly.push(pt);\r\n}\r\n\r\nfunction splitPolygonByLine(points: number[][], lineA: Point, lineB: Point) {\r\n    const len = points.length;\r\n    const intersections: {\r\n        projPt: number,\r\n        pt: Point\r\n        idx: number\r\n    }[] = [];\r\n    for (let i = 0; i < len; i++) {\r\n        const p0 = points[i];\r\n        const p1 = points[(i + 1) % len];\r\n        const intersectionPt = lineLineIntersect(\r\n            p0[0], p0[1], p1[0], p1[1],\r\n            lineA.x, lineA.y, lineB.x, lineB.y\r\n        );\r\n        if (intersectionPt) {\r\n            intersections.push({\r\n                projPt: projPtOnLine(intersectionPt, lineA, lineB),\r\n                pt: intersectionPt,\r\n                idx: i\r\n            });\r\n        }\r\n    }\r\n\r\n    // TODO No intersection?\r\n    if (intersections.length < 2) {\r\n        // Do clone\r\n        return [ { points}, {points} ];\r\n    }\r\n\r\n    // Find two farthest points.\r\n    intersections.sort((a, b) => {\r\n        return a.projPt - b.projPt;\r\n    });\r\n    let splitPt0 = intersections[0];\r\n    let splitPt1 = intersections[intersections.length - 1];\r\n    if (splitPt1.idx < splitPt0.idx) {\r\n        const tmp = splitPt0;\r\n        splitPt0 = splitPt1;\r\n        splitPt1 = tmp;\r\n    }\r\n\r\n    const splitPt0Arr = [splitPt0.pt.x, splitPt0.pt.y];\r\n    const splitPt1Arr = [splitPt1.pt.x, splitPt1.pt.y];\r\n\r\n    const newPolyA: number[][] = [splitPt0Arr];\r\n    const newPolyB: number[][] = [splitPt1Arr];\r\n\r\n    for (let i = splitPt0.idx + 1; i <= splitPt1.idx; i++) {\r\n        addToPoly(newPolyA, points[i].slice());\r\n    }\r\n    addToPoly(newPolyA, splitPt1Arr);\r\n    // Close the path\r\n    addToPoly(newPolyA, splitPt0Arr);\r\n\r\n    for (let i = splitPt1.idx + 1; i <= splitPt0.idx + len; i++) {\r\n        addToPoly(newPolyB, points[i % len].slice());\r\n    }\r\n    addToPoly(newPolyB, splitPt0Arr);\r\n    // Close the path\r\n    addToPoly(newPolyB, splitPt1Arr);\r\n\r\n    return [{\r\n        points: newPolyA\r\n    }, {\r\n        points: newPolyB\r\n    }];\r\n}\r\n\r\nfunction binaryDividePolygon(\r\n    polygonShape: Pick\r\n) {\r\n    const points = polygonShape.points;\r\n    const min: number[] = [];\r\n    const max: number[] = [];\r\n    fromPoints(points, min, max);\r\n    const boundingRect = new BoundingRect(\r\n        min[0], min[1], max[0] - min[0], max[1] - min[1]\r\n    );\r\n\r\n    const width = boundingRect.width;\r\n    const height = boundingRect.height;\r\n    const x = boundingRect.x;\r\n    const y = boundingRect.y;\r\n\r\n    const pt0 = new Point();\r\n    const pt1 = new Point();\r\n    if (width > height) {\r\n        pt0.x = pt1.x = x + width / 2;\r\n        pt0.y = y;\r\n        pt1.y = y + height;\r\n    }\r\n    else {\r\n        pt0.y = pt1.y = y + height / 2;\r\n        pt0.x = x;\r\n        pt1.x = x + width;\r\n    }\r\n    return splitPolygonByLine(points, pt0, pt1);\r\n}\r\n\r\n\r\nfunction binaryDivideRecursive(\r\n    divider: BinaryDivide, shape: T, count: number, out: T[]\r\n): T[] {\r\n    if (count === 1) {\r\n        out.push(shape);\r\n    }\r\n    else {\r\n        const mid = Math.floor(count / 2);\r\n        const sub = divider(shape);\r\n        binaryDivideRecursive(divider, sub[0], mid, out);\r\n        binaryDivideRecursive(divider, sub[1], count - mid, out);\r\n    }\r\n\r\n    return out;\r\n}\r\n\r\nexport function clone(path: Path, count: number) {\r\n    const paths = [];\r\n    for (let i = 0; i < count; i++) {\r\n        paths.push(clonePath(path));\r\n    }\r\n    return paths;\r\n}\r\n\r\nfunction copyPathProps(source: Path, target: Path) {\r\n    target.setStyle(source.style);\r\n    target.z = source.z;\r\n    target.z2 = source.z2;\r\n    target.zlevel = source.zlevel;\r\n}\r\n\r\nfunction polygonConvert(points: number[]): number[][] {\r\n    const out = [];\r\n    for (let i = 0; i < points.length;) {\r\n        out.push([points[i++], points[i++]]);\r\n    }\r\n    return out;\r\n}\r\n\r\nexport function split(\r\n    path: Path, count: number\r\n) {\r\n    const outShapes: Path['shape'][] = [];\r\n    const shape = path.shape;\r\n    let OutShapeCtor: new() => Path;\r\n    // TODO Use clone when shape size is small\r\n    switch (path.type) {\r\n        case 'rect':\r\n            divideRect(shape as Rect['shape'], count, outShapes as Rect['shape'][]);\r\n            OutShapeCtor = Rect;\r\n            break;\r\n        case 'sector':\r\n            divideSector(shape as Sector['shape'], count, outShapes as Sector['shape'][]);\r\n            OutShapeCtor = Sector;\r\n            break;\r\n        case 'circle':\r\n            divideSector({\r\n                r0: 0, r: shape.r, startAngle: 0, endAngle: Math.PI * 2,\r\n                cx: shape.cx, cy: shape.cy\r\n            } as Sector['shape'], count, outShapes as Sector['shape'][]);\r\n            OutShapeCtor = Sector;\r\n            break;\r\n        default:\r\n            const m = path.getComputedTransform();\r\n            const scale = m ? Math.sqrt(Math.max(m[0] * m[0] + m[1] * m[1], m[2] * m[2] + m[3] * m[3])) : 1;\r\n            const polygons = map(\r\n                pathToPolygons(path.getUpdatedPathProxy(), scale),\r\n                poly => polygonConvert(poly)\r\n            );\r\n            const polygonCount = polygons.length;\r\n            if (polygonCount === 0) {\r\n                binaryDivideRecursive(binaryDividePolygon, {\r\n                    points: polygons[0]\r\n                }, count, outShapes);\r\n            }\r\n            else if (polygonCount === count) {   // In case we only split batched paths to non-batched paths. No need to split.\r\n                for (let i = 0; i < polygonCount; i++) {\r\n                    outShapes.push({\r\n                        points: polygons[i]\r\n                    } as Polygon['shape']);\r\n                }\r\n            }\r\n            else {\r\n                // Most complex case. Assign multiple subpath to each polygon based on it's area.\r\n                let totalArea = 0;\r\n                const items = map(polygons, poly => {\r\n                    const min: number[] = [];\r\n                    const max: number[] = [];\r\n                    fromPoints(poly, min, max);\r\n                    // TODO: polygon area?\r\n                    const area = (max[1] - min[1]) * (max[0] - min[0]);\r\n                    totalArea += area;\r\n                    return { poly, area };\r\n                });\r\n                items.sort((a, b) => b.area - a.area);\r\n\r\n                let left = count;\r\n                for (let i = 0; i < polygonCount; i++) {\r\n                    const item = items[i];\r\n                    if (left <= 0) {\r\n                        break;\r\n                    }\r\n\r\n                    const selfCount = i === polygonCount - 1\r\n                        ? left   // Use the last piece directly\r\n                        : Math.ceil(item.area / totalArea * count);\r\n\r\n                    if (selfCount < 0) {\r\n                        continue;\r\n                    }\r\n\r\n                    binaryDivideRecursive(binaryDividePolygon, {\r\n                        points: item.poly\r\n                    }, selfCount, outShapes);\r\n                    left -= selfCount;\r\n                };\r\n            }\r\n            OutShapeCtor = Polygon;\r\n            break;\r\n    }\r\n\r\n    if (!OutShapeCtor) {\r\n        // Unkown split algorithm. Use clone instead\r\n        return clone(path, count);\r\n    }\r\n    const out: Path[] = [];\r\n\r\n    for (let i = 0; i < outShapes.length; i++) {\r\n        const subPath = new OutShapeCtor();\r\n        subPath.setShape(outShapes[i]);\r\n        copyPathProps(path, subPath);\r\n        out.push(subPath);\r\n    }\r\n\r\n    return out;\r\n}","import PathProxy from '../core/PathProxy';\r\nimport { cubicSubdivide } from '../core/curve';\r\nimport Path from '../graphic/Path';\r\nimport Element, { ElementAnimateConfig } from '../Element';\r\nimport { defaults, map } from '../core/util';\r\nimport { lerp } from '../core/vector';\r\nimport Group, { GroupLike } from '../graphic/Group';\r\nimport { clonePath } from './path';\r\nimport { MatrixArray } from '../core/matrix';\r\nimport Transformable from '../core/Transformable';\r\nimport { ZRenderType } from '../zrender';\r\nimport { split } from './dividePath';\r\nimport { pathToBezierCurves } from './convertPath';\r\n\r\nfunction alignSubpath(subpath1: number[], subpath2: number[]): [number[], number[]] {\r\n    const len1 = subpath1.length;\r\n    const len2 = subpath2.length;\r\n    if (len1 === len2) {\r\n        return [subpath1, subpath2];\r\n    }\r\n    const tmpSegX: number[] = [];\r\n    const tmpSegY: number[] = [];\r\n\r\n    const shorterPath = len1 < len2 ? subpath1 : subpath2;\r\n    const shorterLen = Math.min(len1, len2);\r\n    // Should divide excatly\r\n    const diff = Math.abs(len2 - len1) / 6;\r\n    const shorterBezierCount = (shorterLen - 2) / 6;\r\n    // Add `diff` number of beziers\r\n    const eachCurveSubDivCount = Math.ceil(diff / shorterBezierCount) + 1;\r\n\r\n    const newSubpath = [shorterPath[0], shorterPath[1]];\r\n    let remained = diff;\r\n\r\n    for (let i = 2; i < shorterLen;) {\r\n        let x0 = shorterPath[i - 2];\r\n        let y0 = shorterPath[i - 1];\r\n        let x1 = shorterPath[i++];\r\n        let y1 = shorterPath[i++];\r\n        let x2 = shorterPath[i++];\r\n        let y2 = shorterPath[i++];\r\n        let x3 = shorterPath[i++];\r\n        let y3 = shorterPath[i++];\r\n\r\n        if (remained <= 0) {\r\n            newSubpath.push(x1, y1, x2, y2, x3, y3);\r\n            continue;\r\n        }\r\n\r\n        let actualSubDivCount = Math.min(remained, eachCurveSubDivCount - 1) + 1;\r\n        for (let k = 1; k <= actualSubDivCount; k++) {\r\n            const p = k / actualSubDivCount;\r\n\r\n            cubicSubdivide(x0, x1, x2, x3, p, tmpSegX);\r\n            cubicSubdivide(y0, y1, y2, y3, p, tmpSegY);\r\n\r\n            // tmpSegX[3] === tmpSegX[4]\r\n            x0 = tmpSegX[3];\r\n            y0 = tmpSegY[3];\r\n\r\n            newSubpath.push(tmpSegX[1], tmpSegY[1], tmpSegX[2], tmpSegY[2], x0, y0);\r\n            x1 = tmpSegX[5];\r\n            y1 = tmpSegY[5];\r\n            x2 = tmpSegX[6];\r\n            y2 = tmpSegY[6];\r\n            // The last point (x3, y3) is still the same.\r\n        }\r\n        remained -= actualSubDivCount - 1;\r\n    }\r\n\r\n    return shorterPath === subpath1 ? [newSubpath, subpath2] : [subpath1, newSubpath];\r\n}\r\n\r\nfunction createSubpath(lastSubpathSubpath: number[], otherSubpath: number[]) {\r\n    const len = lastSubpathSubpath.length;\r\n    const lastX = lastSubpathSubpath[len - 2];\r\n    const lastY = lastSubpathSubpath[len - 1];\r\n\r\n    const newSubpath: number[] = [];\r\n    for (let i = 0; i < otherSubpath.length;) {\r\n        newSubpath[i++] = lastX;\r\n        newSubpath[i++] = lastY;\r\n    }\r\n    return newSubpath;\r\n}\r\n\r\n/**\r\n * Make two bezier arrays aligns on structure. To have better animation.\r\n *\r\n * It will:\r\n * Make two bezier arrays have same number of subpaths.\r\n * Make each subpath has equal number of bezier curves.\r\n *\r\n * array is the convert result of pathToBezierCurves.\r\n */\r\nexport function alignBezierCurves(array1: number[][], array2: number[][]) {\r\n\r\n    let lastSubpath1;\r\n    let lastSubpath2;\r\n\r\n    let newArray1 = [];\r\n    let newArray2 = [];\r\n\r\n    for (let i = 0; i < Math.max(array1.length, array2.length); i++) {\r\n        const subpath1 = array1[i];\r\n        const subpath2 = array2[i];\r\n\r\n        let newSubpath1;\r\n        let newSubpath2;\r\n\r\n        if (!subpath1) {\r\n            newSubpath1 = createSubpath(lastSubpath1 || subpath2, subpath2);\r\n            newSubpath2 = subpath2;\r\n        }\r\n        else if (!subpath2) {\r\n            newSubpath2 = createSubpath(lastSubpath2 || subpath1, subpath1);\r\n            newSubpath1 = subpath1;\r\n        }\r\n        else {\r\n            [newSubpath1, newSubpath2] = alignSubpath(subpath1, subpath2);\r\n            lastSubpath1 = newSubpath1;\r\n            lastSubpath2 = newSubpath2;\r\n        }\r\n\r\n        newArray1.push(newSubpath1);\r\n        newArray2.push(newSubpath2);\r\n    }\r\n\r\n    return [newArray1, newArray2];\r\n}\r\n\r\ninterface MorphingPath extends Path {\r\n    __morphT: number;\r\n}\r\n\r\nexport interface CombineMorphingPath extends Path {\r\n    childrenRef(): (CombineMorphingPath | Path)[]\r\n    __isCombineMorphing: boolean;\r\n}\r\n\r\nexport function centroid(array: number[]) {\r\n    // https://en.wikipedia.org/wiki/Centroid#Of_a_polygon\r\n    let signedArea = 0;\r\n    let cx = 0;\r\n    let cy = 0;\r\n    const len = array.length;\r\n    // Polygon should been closed.\r\n    for (let i = 0, j = len - 2; i < len; j = i, i += 2) {\r\n        const x0 = array[j];\r\n        const y0 = array[j + 1];\r\n        const x1 = array[i];\r\n        const y1 = array[i + 1];\r\n        const a = x0 * y1 - x1 * y0;\r\n        signedArea += a;\r\n        cx += (x0 + x1) * a;\r\n        cy += (y0 + y1) * a;\r\n    }\r\n\r\n    if (signedArea === 0) {\r\n        return [array[0] || 0, array[1] || 0];\r\n    }\r\n\r\n    return [cx / signedArea / 3, cy / signedArea / 3, signedArea];\r\n}\r\n\r\n/**\r\n * Offset the points to find the nearest morphing distance.\r\n * Return beziers count needs to be offset.\r\n */\r\nfunction findBestRingOffset(\r\n    fromSubBeziers: number[],\r\n    toSubBeziers: number[],\r\n    fromCp: number[],\r\n    toCp: number[]\r\n) {\r\n    const bezierCount = (fromSubBeziers.length - 2) / 6;\r\n    let bestScore = Infinity;\r\n    let bestOffset = 0;\r\n\r\n    const len = fromSubBeziers.length;\r\n    const len2 = len - 2;\r\n    for (let offset = 0; offset < bezierCount; offset++) {\r\n        const cursorOffset = offset * 6;\r\n        let score = 0;\r\n\r\n        for (let k = 0; k < len; k += 2) {\r\n            let idx = k === 0 ? cursorOffset : ((cursorOffset + k - 2) % len2 + 2);\r\n\r\n            const x0 = fromSubBeziers[idx] - fromCp[0];\r\n            const y0 = fromSubBeziers[idx + 1] - fromCp[1];\r\n            const x1 = toSubBeziers[k] - toCp[0];\r\n            const y1 = toSubBeziers[k + 1] - toCp[1];\r\n\r\n            const dx = x1 - x0;\r\n            const dy = y1 - y0;\r\n            score += dx * dx + dy * dy;\r\n        }\r\n        if (score < bestScore) {\r\n            bestScore = score;\r\n            bestOffset = offset;\r\n        }\r\n    }\r\n\r\n    return bestOffset;\r\n}\r\n\r\nfunction reverse(array: number[]) {\r\n    const newArr: number[] = [];\r\n    const len = array.length;\r\n    for (let i = 0; i < len; i += 2) {\r\n        newArr[i] = array[len - i - 2];\r\n        newArr[i + 1] = array[len - i - 1];\r\n    }\r\n    return newArr;\r\n}\r\n\r\ntype MorphingData = {\r\n    from: number[];\r\n    to: number[];\r\n    fromCp: number[];\r\n    toCp: number[];\r\n    rotation: number;\r\n}[];\r\n\r\n/**\r\n * If we interpolating between two bezier curve arrays.\r\n * It will have many broken effects during the transition.\r\n * So we try to apply an extra rotation which can make each bezier curve morph as small as possible.\r\n */\r\nfunction findBestMorphingRotation(\r\n    fromArr: number[][],\r\n    toArr: number[][],\r\n    searchAngleIteration: number,\r\n    searchAngleRange: number\r\n): MorphingData {\r\n    const result = [];\r\n\r\n    let fromNeedsReverse: boolean;\r\n\r\n    for (let i = 0; i < fromArr.length; i++) {\r\n        let fromSubpathBezier = fromArr[i];\r\n        const toSubpathBezier = toArr[i];\r\n\r\n        const fromCp = centroid(fromSubpathBezier);\r\n        const toCp = centroid(toSubpathBezier);\r\n\r\n        if (fromNeedsReverse == null) {\r\n            // Reverse from array if two have different directions.\r\n            // Determine the clockwise based on the first subpath.\r\n            // Reverse all subpaths or not. Avoid winding rule changed.\r\n            fromNeedsReverse = fromCp[2] < 0 !== toCp[2] < 0;\r\n        }\r\n\r\n        const newFromSubpathBezier: number[] = [];\r\n        const newToSubpathBezier: number[] = [];\r\n        let bestAngle = 0;\r\n        let bestScore = Infinity;\r\n        let tmpArr: number[] = [];\r\n\r\n        const len = fromSubpathBezier.length;\r\n        if (fromNeedsReverse) {\r\n            // Make sure clockwise\r\n            fromSubpathBezier = reverse(fromSubpathBezier);\r\n        }\r\n        const offset = findBestRingOffset(fromSubpathBezier, toSubpathBezier, fromCp, toCp) * 6;\r\n\r\n        const len2 = len - 2;\r\n        for (let k = 0; k < len2; k += 2) {\r\n            // Not include the start point.\r\n            const idx = (offset + k) % len2 + 2;\r\n            newFromSubpathBezier[k + 2] = fromSubpathBezier[idx] - fromCp[0];\r\n            newFromSubpathBezier[k + 3] = fromSubpathBezier[idx + 1] - fromCp[1];\r\n        }\r\n        newFromSubpathBezier[0] = fromSubpathBezier[offset] - fromCp[0];\r\n        newFromSubpathBezier[1] = fromSubpathBezier[offset + 1] - fromCp[1];\r\n\r\n        if (searchAngleIteration > 0) {\r\n            const step = searchAngleRange / searchAngleIteration;\r\n            for (let angle = -searchAngleRange / 2; angle <= searchAngleRange / 2; angle += step) {\r\n                const sa = Math.sin(angle);\r\n                const ca = Math.cos(angle);\r\n                let score = 0;\r\n\r\n                for (let k = 0; k < fromSubpathBezier.length; k += 2) {\r\n                    const x0 = newFromSubpathBezier[k];\r\n                    const y0 = newFromSubpathBezier[k + 1];\r\n                    const x1 = toSubpathBezier[k] - toCp[0];\r\n                    const y1 = toSubpathBezier[k + 1] - toCp[1];\r\n\r\n                    // Apply rotation on the target point.\r\n                    const newX1 = x1 * ca - y1 * sa;\r\n                    const newY1 = x1 * sa + y1 * ca;\r\n\r\n                    tmpArr[k] = newX1;\r\n                    tmpArr[k + 1] = newY1;\r\n\r\n                    const dx = newX1 - x0;\r\n                    const dy = newY1 - y0;\r\n\r\n                    // Use dot product to have min direction change.\r\n                    // const d = Math.sqrt(x0 * x0 + y0 * y0);\r\n                    // score += x0 * dx / d + y0 * dy / d;\r\n                    score += dx * dx + dy * dy;\r\n                }\r\n\r\n                if (score < bestScore) {\r\n                    bestScore = score;\r\n                    bestAngle = angle;\r\n                    // Copy.\r\n                    for (let m = 0; m < tmpArr.length; m++) {\r\n                        newToSubpathBezier[m] = tmpArr[m];\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            for (let i = 0; i < len; i += 2) {\r\n                newToSubpathBezier[i] = toSubpathBezier[i] - toCp[0];\r\n                newToSubpathBezier[i + 1] = toSubpathBezier[i + 1] - toCp[1];\r\n            }\r\n        }\r\n\r\n        result.push({\r\n            from: newFromSubpathBezier,\r\n            to: newToSubpathBezier,\r\n            fromCp,\r\n            toCp,\r\n            rotation: -bestAngle\r\n        });\r\n    }\r\n    return result;\r\n}\r\n\r\nexport function isCombineMorphing(path: Element): path is CombineMorphingPath {\r\n    return (path as CombineMorphingPath).__isCombineMorphing;\r\n}\r\n\r\nexport function isMorphing(el: Element) {\r\n    return (el as MorphingPath).__morphT >= 0;\r\n}\r\n\r\nconst SAVED_METHOD_PREFIX = '__mOriginal_';\r\nfunction saveAndModifyMethod(\r\n    obj: T,\r\n    methodName: M,\r\n    modifiers: { replace?: T[M], after?: T[M], before?: T[M] }\r\n) {\r\n    const savedMethodName = SAVED_METHOD_PREFIX + methodName;\r\n    const originalMethod = (obj as any)[savedMethodName] || obj[methodName];\r\n    if (!(obj as any)[savedMethodName]) {\r\n        (obj as any)[savedMethodName] = obj[methodName];\r\n    }\r\n    const replace = modifiers.replace;\r\n    const after = modifiers.after;\r\n    const before = modifiers.before;\r\n\r\n    (obj as any)[methodName] = function () {\r\n        const args = arguments;\r\n        let res;\r\n        before && (before as unknown as Function).apply(this, args);\r\n        // Still call the original method if not replacement.\r\n        if (replace) {\r\n            res = (replace as unknown as Function).apply(this, args);\r\n        }\r\n        else {\r\n            res = originalMethod.apply(this, args);\r\n        }\r\n        after && (after as unknown as Function).apply(this, args);\r\n        return res;\r\n    };\r\n}\r\nfunction restoreMethod(\r\n    obj: T,\r\n    methodName: keyof T\r\n) {\r\n    const savedMethodName = SAVED_METHOD_PREFIX + methodName;\r\n    if ((obj as any)[savedMethodName]) {\r\n        obj[methodName] = (obj as any)[savedMethodName];\r\n        (obj as any)[savedMethodName] = null;\r\n    }\r\n}\r\n\r\nfunction applyTransformOnBeziers(bezierCurves: number[][], mm: MatrixArray) {\r\n    for (let i = 0; i < bezierCurves.length; i++) {\r\n        const subBeziers = bezierCurves[i];\r\n        for (let k = 0; k < subBeziers.length;) {\r\n            const x = subBeziers[k];\r\n            const y = subBeziers[k + 1];\r\n\r\n            subBeziers[k++] = mm[0] * x + mm[2] * y + mm[4];\r\n            subBeziers[k++] = mm[1] * x + mm[3] * y + mm[5];\r\n        }\r\n    }\r\n}\r\n\r\nfunction prepareMorphPath(\r\n    fromPath: Path,\r\n    toPath: Path\r\n) {\r\n    const fromPathProxy = fromPath.getUpdatedPathProxy();\r\n    const toPathProxy = toPath.getUpdatedPathProxy();\r\n\r\n    const [fromBezierCurves, toBezierCurves] =\r\n        alignBezierCurves(pathToBezierCurves(fromPathProxy), pathToBezierCurves(toPathProxy));\r\n\r\n    const fromPathTransform = fromPath.getComputedTransform();\r\n    const toPathTransform = toPath.getComputedTransform();\r\n    function updateIdentityTransform(this: Transformable) {\r\n        this.transform = null;\r\n    }\r\n    fromPathTransform && applyTransformOnBeziers(fromBezierCurves, fromPathTransform);\r\n    toPathTransform && applyTransformOnBeziers(toBezierCurves, toPathTransform);\r\n    // Just ignore transform\r\n    saveAndModifyMethod(toPath, 'updateTransform', { replace: updateIdentityTransform });\r\n    toPath.transform = null;\r\n\r\n    const morphingData = findBestMorphingRotation(fromBezierCurves, toBezierCurves, 10, Math.PI);\r\n\r\n    const tmpArr: number[] = [];\r\n\r\n    saveAndModifyMethod(toPath, 'buildPath', { replace(path: PathProxy) {\r\n        const t = (toPath as MorphingPath).__morphT;\r\n        const onet = 1 - t;\r\n\r\n        const newCp: number[] = [];\r\n\r\n        for (let i = 0; i < morphingData.length; i++) {\r\n            const item = morphingData[i];\r\n            const from = item.from;\r\n            const to = item.to;\r\n            const angle = item.rotation * t;\r\n            const fromCp = item.fromCp;\r\n            const toCp = item.toCp;\r\n            const sa = Math.sin(angle);\r\n            const ca = Math.cos(angle);\r\n\r\n            lerp(newCp, fromCp, toCp, t);\r\n\r\n            for (let m = 0; m < from.length; m += 2) {\r\n                const x0 = from[m];\r\n                const y0 = from[m + 1];\r\n                const x1 = to[m];\r\n                const y1 = to[m + 1];\r\n\r\n                const x = x0 * onet + x1 * t;\r\n                const y = y0 * onet + y1 * t;\r\n\r\n                tmpArr[m] = (x * ca - y * sa) + newCp[0];\r\n                tmpArr[m + 1] = (x * sa + y * ca) + newCp[1];\r\n            }\r\n\r\n            let x0 = tmpArr[0];\r\n            let y0 = tmpArr[1];\r\n\r\n            path.moveTo(x0, y0);\r\n\r\n            for (let m = 2; m < from.length;) {\r\n                const x1 = tmpArr[m++];\r\n                const y1 = tmpArr[m++];\r\n                const x2 = tmpArr[m++];\r\n                const y2 = tmpArr[m++];\r\n                const x3 = tmpArr[m++];\r\n                const y3 = tmpArr[m++];\r\n\r\n                // Is a line.\r\n                if (x0 === x1 && y0 === y1 && x2 === x3 && y2 === y3) {\r\n                    path.lineTo(x3, y3);\r\n                }\r\n                else {\r\n                    path.bezierCurveTo(x1, y1, x2, y2, x3, y3);\r\n                }\r\n                x0 = x3;\r\n                y0 = y3;\r\n            }\r\n        }\r\n    } });\r\n}\r\n\r\n/**\r\n * Morphing from old path to new path.\r\n */\r\nexport function morphPath(\r\n    fromPath: Path,\r\n    toPath: Path,\r\n    animationOpts: ElementAnimateConfig\r\n): Path {\r\n    if (!fromPath || !toPath) {\r\n        return toPath;\r\n    }\r\n\r\n    const oldDone = animationOpts.done;\r\n    // const oldAborted = animationOpts.aborted;\r\n    const oldDuring = animationOpts.during;\r\n\r\n    prepareMorphPath(fromPath, toPath);\r\n\r\n    (toPath as MorphingPath).__morphT = 0;\r\n\r\n    function restoreToPath() {\r\n        restoreMethod(toPath, 'buildPath');\r\n        restoreMethod(toPath, 'updateTransform');\r\n        // Mark as not in morphing\r\n        (toPath as MorphingPath).__morphT = -1;\r\n        // Cleanup.\r\n        toPath.createPathProxy();\r\n        toPath.dirtyShape();\r\n    }\r\n\r\n    toPath.animateTo({\r\n        __morphT: 1\r\n    } as any, defaults({\r\n        during(p) {\r\n            toPath.dirtyShape();\r\n            oldDuring && oldDuring(p);\r\n        },\r\n        done() {\r\n            restoreToPath();\r\n            oldDone && oldDone();\r\n        }\r\n        // NOTE: Don't do restore if aborted.\r\n        // Because all status was just set when animation started.\r\n        // aborted() {\r\n        //     oldAborted && oldAborted();\r\n        // }\r\n    } as ElementAnimateConfig, animationOpts));\r\n\r\n    return toPath;\r\n}\r\n\r\n// https://github.com/mapbox/earcut/blob/master/src/earcut.js#L437\r\n// https://jsfiddle.net/pissang/2jk7x145/\r\n// function zOrder(x: number, y: number, minX: number, minY: number, maxX: number, maxY: number) {\r\n//     // Normalize coords to 0 - 1\r\n//     // The transformed into non-negative 15-bit integer range\r\n//     x = (maxX === minX) ? 0 : Math.round(32767 * (x - minX) / (maxX - minX));\r\n//     y = (maxY === minY) ? 0 : Math.round(32767 * (y - minY) / (maxY - minY));\r\n\r\n//     x = (x | (x << 8)) & 0x00FF00FF;\r\n//     x = (x | (x << 4)) & 0x0F0F0F0F;\r\n//     x = (x | (x << 2)) & 0x33333333;\r\n//     x = (x | (x << 1)) & 0x55555555;\r\n\r\n//     y = (y | (y << 8)) & 0x00FF00FF;\r\n//     y = (y | (y << 4)) & 0x0F0F0F0F;\r\n//     y = (y | (y << 2)) & 0x33333333;\r\n//     y = (y | (y << 1)) & 0x55555555;\r\n\r\n//     return x | (y << 1);\r\n// }\r\n\r\n// https://github.com/w8r/hilbert/blob/master/hilbert.js#L30\r\n// https://jsfiddle.net/pissang/xdnbzg6v/\r\nfunction hilbert(x: number, y: number, minX: number, minY: number, maxX: number, maxY: number) {\r\n    const bits = 16;\r\n    x = (maxX === minX) ? 0 : Math.round(32767 * (x - minX) / (maxX - minX));\r\n    y = (maxY === minY) ? 0 : Math.round(32767 * (y - minY) / (maxY - minY));\r\n\r\n    let d = 0;\r\n    let tmp: number;\r\n    for (let s = (1 << bits) / 2; s > 0; s /= 2) {\r\n        let rx = 0;\r\n        let ry = 0;\r\n\r\n        if ((x & s) > 0) {\r\n            rx = 1;\r\n        }\r\n        if ((y & s) > 0) {\r\n            ry = 1;\r\n        }\r\n\r\n        d += s * s * ((3 * rx) ^ ry);\r\n\r\n        if (ry === 0) {\r\n            if (rx === 1) {\r\n                x = s - 1 - x;\r\n                y = s - 1 - y;\r\n            }\r\n            tmp = x;\r\n            x = y;\r\n            y = tmp;\r\n        }\r\n    }\r\n    return d;\r\n}\r\n\r\n// Sort paths on hilbert. Not using z-order because it may still have large cross.\r\n// So the left most source can animate to the left most target, not right most target.\r\n// Hope in this way. We can make sure each element is animated to the proper target. Not the farthest.\r\nfunction sortPaths(pathList: Path[]): Path[] {\r\n    let xMin = Infinity;\r\n    let yMin = Infinity;\r\n    let xMax = -Infinity;\r\n    let yMax = -Infinity;\r\n    const cps = map(pathList, path => {\r\n        const rect = path.getBoundingRect();\r\n        const m = path.getComputedTransform();\r\n        const x = rect.x + rect.width / 2 + (m ? m[4] : 0);\r\n        const y = rect.y + rect.height / 2 + (m ? m[5] : 0);\r\n        xMin = Math.min(x, xMin);\r\n        yMin = Math.min(y, yMin);\r\n        xMax = Math.max(x, xMax);\r\n        yMax = Math.max(y, yMax);\r\n        return [x, y];\r\n    });\r\n\r\n    const items = map(cps, (cp, idx) => {\r\n        return {\r\n            cp,\r\n            z: hilbert(cp[0], cp[1], xMin, yMin, xMax, yMax),\r\n            path: pathList[idx]\r\n        };\r\n    });\r\n\r\n    return items.sort((a, b) => a.z - b.z).map(item => item.path);\r\n}\r\n\r\nexport interface DividePathParams {\r\n    path: Path,\r\n    count: number\r\n};\r\nexport interface DividePath {\r\n    (params: DividePathParams): Path[]\r\n}\r\n\r\nexport interface IndividualDelay {\r\n    (index: number, count: number, fromPath: Path, toPath: Path): number\r\n}\r\n\r\nfunction defaultDividePath(param: DividePathParams) {\r\n    return split(param.path, param.count);\r\n}\r\nexport interface CombineConfig extends ElementAnimateConfig {\r\n    /**\r\n     * Transform of returned will be ignored.\r\n     */\r\n    dividePath?: DividePath\r\n    /**\r\n     * delay of each individual.\r\n     * Because individual are sorted on z-order. The index is also sorted top-left / right-down.\r\n     */\r\n    individualDelay?: IndividualDelay\r\n    /**\r\n     * If sort splitted paths so the movement between them can be more natural\r\n     */\r\n    // sort?: boolean\r\n}\r\n\r\nfunction createEmptyReturn() {\r\n    return {\r\n        fromIndividuals: [] as Path[],\r\n        toIndividuals: [] as Path[],\r\n        count: 0\r\n    };\r\n}\r\n/**\r\n * Make combine morphing from many paths to one.\r\n * Will return a group to replace the original path.\r\n */\r\nexport function combineMorph(\r\n    fromList: (CombineMorphingPath | Path)[],\r\n    toPath: Path,\r\n    animationOpts: CombineConfig\r\n) {\r\n    let fromPathList: Path[] = [];\r\n\r\n    function addFromPath(fromList: Element[]) {\r\n        for (let i = 0; i < fromList.length; i++) {\r\n            const from = fromList[i];\r\n            if (isCombineMorphing(from)) {\r\n                addFromPath((from as GroupLike).childrenRef());\r\n            }\r\n            else if (from instanceof Path) {\r\n                fromPathList.push(from);\r\n            }\r\n        }\r\n    }\r\n    addFromPath(fromList);\r\n\r\n    const separateCount = fromPathList.length;\r\n\r\n    // fromPathList.length is 0.\r\n    if (!separateCount) {\r\n        return createEmptyReturn();\r\n    }\r\n\r\n    const dividePath = animationOpts.dividePath || defaultDividePath;\r\n\r\n    let toSubPathList = dividePath({\r\n        path: toPath, count: separateCount\r\n    });\r\n    if (toSubPathList.length !== separateCount) {\r\n        console.error('Invalid morphing: unmatched splitted path');\r\n        return createEmptyReturn();\r\n    }\r\n\r\n    fromPathList = sortPaths(fromPathList);\r\n    toSubPathList = sortPaths(toSubPathList);\r\n\r\n    const oldDone = animationOpts.done;\r\n    // const oldAborted = animationOpts.aborted;\r\n    const oldDuring = animationOpts.during;\r\n    const individualDelay = animationOpts.individualDelay;\r\n\r\n    const identityTransform = new Transformable();\r\n\r\n    for (let i = 0; i < separateCount; i++) {\r\n        const from = fromPathList[i];\r\n        const to = toSubPathList[i];\r\n\r\n        to.parent = toPath as unknown as Group;\r\n\r\n        // Ignore transform in each subpath.\r\n        to.copyTransform(identityTransform);\r\n\r\n        // Will do morphPath for each individual if individualDelay is set.\r\n        if (!individualDelay) {\r\n            prepareMorphPath(from, to);\r\n        }\r\n    }\r\n\r\n    (toPath as CombineMorphingPath).__isCombineMorphing = true;\r\n    (toPath as CombineMorphingPath).childrenRef = function () {\r\n        return toSubPathList;\r\n    };\r\n\r\n    function addToSubPathListToZr(zr: ZRenderType) {\r\n        for (let i = 0; i < toSubPathList.length; i++) {\r\n            toSubPathList[i].addSelfToZr(zr);\r\n        }\r\n    }\r\n    saveAndModifyMethod(toPath, 'addSelfToZr', {\r\n        after(zr) {\r\n            addToSubPathListToZr(zr);\r\n        }\r\n    });\r\n    saveAndModifyMethod(toPath, 'removeSelfFromZr', {\r\n        after(zr) {\r\n            for (let i = 0; i < toSubPathList.length; i++) {\r\n                toSubPathList[i].removeSelfFromZr(zr);\r\n            }\r\n        }\r\n    });\r\n\r\n    function restoreToPath() {\r\n        (toPath as CombineMorphingPath).__isCombineMorphing = false;\r\n        // Mark as not in morphing\r\n        (toPath as MorphingPath).__morphT = -1;\r\n        (toPath as CombineMorphingPath).childrenRef = null;\r\n\r\n        restoreMethod(toPath, 'addSelfToZr');\r\n        restoreMethod(toPath, 'removeSelfFromZr');\r\n    }\r\n\r\n    const toLen = toSubPathList.length;\r\n\r\n    if (individualDelay) {\r\n        let animating = toLen;\r\n        const eachDone = () => {\r\n            animating--;\r\n            if (animating === 0) {\r\n                restoreToPath();\r\n                oldDone && oldDone();\r\n            }\r\n        };\r\n        // Animate each element individually.\r\n        for (let i = 0; i < toLen; i++) {\r\n            // TODO only call during once?\r\n            const indivdualAnimationOpts = individualDelay ? defaults({\r\n                delay: (animationOpts.delay || 0) + individualDelay(i, toLen, fromPathList[i], toSubPathList[i]),\r\n                done: eachDone\r\n            } as ElementAnimateConfig, animationOpts) : animationOpts;\r\n            morphPath(fromPathList[i], toSubPathList[i], indivdualAnimationOpts);\r\n        }\r\n    }\r\n    else {\r\n        (toPath as MorphingPath).__morphT = 0;\r\n        toPath.animateTo({\r\n            __morphT: 1\r\n        } as any, defaults({\r\n            during(p) {\r\n                for (let i = 0; i < toLen; i++) {\r\n                    const child = toSubPathList[i] as MorphingPath;\r\n                    child.__morphT = (toPath as MorphingPath).__morphT;\r\n                    child.dirtyShape();\r\n                }\r\n                oldDuring && oldDuring(p);\r\n            },\r\n            done() {\r\n                restoreToPath();\r\n                for (let i = 0; i < fromList.length; i++) {\r\n                    restoreMethod(fromList[i], 'updateTransform');\r\n                }\r\n                oldDone && oldDone();\r\n            }\r\n        } as ElementAnimateConfig, animationOpts));\r\n    }\r\n\r\n    if (toPath.__zr) {\r\n        addToSubPathListToZr(toPath.__zr);\r\n    }\r\n\r\n    return {\r\n        fromIndividuals: fromPathList,\r\n        toIndividuals: toSubPathList,\r\n        count: toLen\r\n    };\r\n}\r\nexport interface SeparateConfig extends ElementAnimateConfig {\r\n    dividePath?: DividePath\r\n    individualDelay?: IndividualDelay\r\n    /**\r\n     * If sort splitted paths so the movement between them can be more natural\r\n     */\r\n    // sort?: boolean\r\n    // // If the from path of separate animation is doing combine animation.\r\n    // // And the paths number is not same with toPathList. We need to do enter/leave animation\r\n    // // on the missing/spare paths.\r\n    // enter?: (el: Path) => void\r\n    // leave?: (el: Path) => void\r\n}\r\n\r\n/**\r\n * Make separate morphing from one path to many paths.\r\n * Make the MorphingKind of `toPath` become `'ONE_ONE'`.\r\n */\r\nexport function separateMorph(\r\n    fromPath: Path,\r\n    toPathList: Path[],\r\n    animationOpts: SeparateConfig\r\n) {\r\n    const toLen = toPathList.length;\r\n    let fromPathList: Path[] = [];\r\n\r\n    const dividePath = animationOpts.dividePath || defaultDividePath;\r\n\r\n    function addFromPath(fromList: Element[]) {\r\n        for (let i = 0; i < fromList.length; i++) {\r\n            const from = fromList[i];\r\n            if (isCombineMorphing(from)) {\r\n                addFromPath((from as GroupLike).childrenRef());\r\n            }\r\n            else if (from instanceof Path) {\r\n                fromPathList.push(from);\r\n            }\r\n        }\r\n    }\r\n    // This case most happen when a combining path is called to reverse the animation\r\n    // to its original separated state.\r\n    if (isCombineMorphing(fromPath)) {\r\n        addFromPath(fromPath.childrenRef());\r\n\r\n        const fromLen = fromPathList.length;\r\n        if (fromLen < toLen) {\r\n            let k = 0;\r\n            for (let i = fromLen; i < toLen; i++) {\r\n                // Create a clone\r\n                fromPathList.push(clonePath(fromPathList[k++ % fromLen]));\r\n            }\r\n        }\r\n        // Else simply remove if fromLen > toLen\r\n        fromPathList.length = toLen;\r\n    }\r\n    else {\r\n        fromPathList = dividePath({ path: fromPath, count: toLen });\r\n        const fromPathTransform = fromPath.getComputedTransform();\r\n        for (let i = 0; i < fromPathList.length; i++) {\r\n            // Force use transform of source path.\r\n            fromPathList[i].setLocalTransform(fromPathTransform);\r\n        }\r\n        if (fromPathList.length !== toLen) {\r\n            console.error('Invalid morphing: unmatched splitted path');\r\n            return createEmptyReturn();\r\n        }\r\n    }\r\n\r\n    fromPathList = sortPaths(fromPathList);\r\n    toPathList = sortPaths(toPathList);\r\n\r\n    const individualDelay = animationOpts.individualDelay;\r\n    for (let i = 0; i < toLen; i++) {\r\n        const indivdualAnimationOpts = individualDelay ? defaults({\r\n            delay: (animationOpts.delay || 0) + individualDelay(i, toLen, fromPathList[i], toPathList[i])\r\n        } as ElementAnimateConfig, animationOpts) : animationOpts;\r\n        morphPath(fromPathList[i], toPathList[i], indivdualAnimationOpts);\r\n    }\r\n\r\n    return {\r\n        fromIndividuals: fromPathList,\r\n        toIndividuals: toPathList,\r\n        count: toPathList.length\r\n    };\r\n}\r\n\r\nexport { split as defaultDividePath };\r\n","// CompoundPath to improve performance\r\n\r\nimport Path from './Path';\r\nimport PathProxy from '../core/PathProxy';\r\n\r\nexport interface CompoundPathShape {\r\n    paths: Path[]\r\n}\r\n\r\nexport default class CompoundPath extends Path {\r\n\r\n    type = 'compound'\r\n\r\n    shape: CompoundPathShape\r\n\r\n    private _updatePathDirty() {\r\n        const paths = this.shape.paths;\r\n        let dirtyPath = this.shapeChanged();\r\n        for (let i = 0; i < paths.length; i++) {\r\n            // Mark as dirty if any subpath is dirty\r\n            dirtyPath = dirtyPath || paths[i].shapeChanged();\r\n        }\r\n        if (dirtyPath) {\r\n            this.dirtyShape();\r\n        }\r\n    }\r\n\r\n    beforeBrush() {\r\n        this._updatePathDirty();\r\n        const paths = this.shape.paths || [];\r\n        const scale = this.getGlobalScale();\r\n        // Update path scale\r\n        for (let i = 0; i < paths.length; i++) {\r\n            if (!paths[i].path) {\r\n                paths[i].createPathProxy();\r\n            }\r\n            paths[i].path.setScale(scale[0], scale[1], paths[i].segmentIgnoreThreshold);\r\n        }\r\n    }\r\n\r\n    buildPath(ctx: PathProxy | CanvasRenderingContext2D, shape: CompoundPathShape) {\r\n        const paths = shape.paths || [];\r\n        for (let i = 0; i < paths.length; i++) {\r\n            paths[i].buildPath(ctx, paths[i].shape, true);\r\n        }\r\n    }\r\n\r\n    afterBrush() {\r\n        const paths = this.shape.paths || [];\r\n        for (let i = 0; i < paths.length; i++) {\r\n            paths[i].pathUpdated();\r\n        }\r\n    }\r\n\r\n    getBoundingRect() {\r\n        this._updatePathDirty.call(this);\r\n        return Path.prototype.getBoundingRect.call(this);\r\n    }\r\n}","/**\r\n * Displayable for incremental rendering. It will be rendered in a separate layer\r\n * IncrementalDisplay have two main methods. `clearDisplayables` and `addDisplayables`\r\n * addDisplayables will render the added displayables incremetally.\r\n *\r\n * It use a notClear flag to tell the painter don't clear the layer if it's the first element.\r\n *\r\n * It's not available for SVG rendering.\r\n */\r\nimport Displayble from './Displayable';\r\nimport BoundingRect from '../core/BoundingRect';\r\nimport { MatrixArray } from '../core/matrix';\r\nimport Group from './Group';\r\n\r\nconst m: MatrixArray = [];\r\n// TODO Style override ?\r\n\r\nexport default class IncrementalDisplayable extends Displayble {\r\n\r\n    notClear: boolean = true\r\n\r\n    incremental = true\r\n\r\n    private _displayables: Displayble[] = []\r\n    private _temporaryDisplayables: Displayble[] = []\r\n\r\n    private _cursor = 0\r\n\r\n    traverse(\r\n        cb: (this: T, el: this) => void,\r\n        context: T\r\n    ) {\r\n        cb.call(context, this);\r\n    }\r\n\r\n    useStyle() {\r\n        // Use an empty style\r\n        // PENDING\r\n        this.style = {};\r\n    }\r\n\r\n    // getCurrentCursor / updateCursorAfterBrush\r\n    // is used in graphic.ts. It's not provided for developers\r\n    getCursor() {\r\n        return this._cursor;\r\n    }\r\n    // Update cursor after brush.\r\n    innerAfterBrush() {\r\n        this._cursor = this._displayables.length;\r\n    }\r\n\r\n    clearDisplaybles() {\r\n        this._displayables = [];\r\n        this._temporaryDisplayables = [];\r\n        this._cursor = 0;\r\n        this.markRedraw();\r\n\r\n        this.notClear = false;\r\n    }\r\n\r\n    clearTemporalDisplayables() {\r\n        this._temporaryDisplayables = [];\r\n    }\r\n\r\n    addDisplayable(displayable: Displayble, notPersistent?: boolean) {\r\n        if (notPersistent) {\r\n            this._temporaryDisplayables.push(displayable);\r\n        }\r\n        else {\r\n            this._displayables.push(displayable);\r\n        }\r\n        this.markRedraw();\r\n    }\r\n\r\n    addDisplayables(displayables: Displayble[], notPersistent?: boolean) {\r\n        notPersistent = notPersistent || false;\r\n        for (let i = 0; i < displayables.length; i++) {\r\n            this.addDisplayable(displayables[i], notPersistent);\r\n        }\r\n    }\r\n\r\n    getDisplayables(): Displayble[] {\r\n        return this._displayables;\r\n    }\r\n\r\n    getTemporalDisplayables(): Displayble[] {\r\n        return this._temporaryDisplayables;\r\n    }\r\n\r\n    eachPendingDisplayable(cb: (displayable: Displayble) => void) {\r\n        for (let i = this._cursor; i < this._displayables.length; i++) {\r\n            cb && cb(this._displayables[i]);\r\n        }\r\n        for (let i = 0; i < this._temporaryDisplayables.length; i++) {\r\n            cb && cb(this._temporaryDisplayables[i]);\r\n        }\r\n    }\r\n\r\n    update() {\r\n        this.updateTransform();\r\n        for (let i = this._cursor; i < this._displayables.length; i++) {\r\n            const displayable = this._displayables[i];\r\n            // PENDING\r\n            displayable.parent = this as unknown as Group;\r\n            displayable.update();\r\n            displayable.parent = null;\r\n        }\r\n        for (let i = 0; i < this._temporaryDisplayables.length; i++) {\r\n            const displayable = this._temporaryDisplayables[i];\r\n            // PENDING\r\n            displayable.parent = this as unknown as Group;\r\n            displayable.update();\r\n            displayable.parent = null;\r\n        }\r\n    }\r\n\r\n    getBoundingRect() {\r\n        if (!this._rect) {\r\n            const rect = new BoundingRect(Infinity, Infinity, -Infinity, -Infinity);\r\n            for (let i = 0; i < this._displayables.length; i++) {\r\n                const displayable = this._displayables[i];\r\n                const childRect = displayable.getBoundingRect().clone();\r\n                if (displayable.needLocalTransform()) {\r\n                    childRect.applyTransform(displayable.getLocalTransform(m));\r\n                }\r\n                rect.union(childRect);\r\n            }\r\n            this._rect = rect;\r\n        }\r\n        return this._rect;\r\n    }\r\n\r\n    contain(x: number, y: number): boolean {\r\n        const localPos = this.transformCoordToLocal(x, y);\r\n        const rect = this.getBoundingRect();\r\n\r\n        if (rect.contain(localPos[0], localPos[1])) {\r\n            for (let i = 0; i < this._displayables.length; i++) {\r\n                const displayable = this._displayables[i];\r\n                if (displayable.contain(x, y)) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n}","\r\nimport LRU from '../../core/LRU';\r\nimport { platformApi } from '../../core/platform';\r\nimport { ImageLike } from '../../core/types';\r\n\r\nconst globalImageCache = new LRU(50);\r\n\r\ntype PendingWrap = {\r\n    hostEl: {dirty: () => void}\r\n    cb: (image: ImageLike, payload: any) => void\r\n    cbPayload: any\r\n}\r\n\r\ntype CachedImageObj = {\r\n    image: ImageLike\r\n    pending: PendingWrap[]\r\n}\r\n\r\nexport function findExistImage(newImageOrSrc: string | ImageLike): ImageLike {\r\n    if (typeof newImageOrSrc === 'string') {\r\n        const cachedImgObj = globalImageCache.get(newImageOrSrc);\r\n        return cachedImgObj && cachedImgObj.image;\r\n    }\r\n    else {\r\n        return newImageOrSrc;\r\n    }\r\n}\r\n\r\n/**\r\n * Caution: User should cache loaded images, but not just count on LRU.\r\n * Consider if required images more than LRU size, will dead loop occur?\r\n *\r\n * @param newImageOrSrc\r\n * @param image Existent image.\r\n * @param hostEl For calling `dirty`.\r\n * @param onload params: (image, cbPayload)\r\n * @param cbPayload Payload on cb calling.\r\n * @return image\r\n */\r\nexport function createOrUpdateImage(\r\n    newImageOrSrc: string | ImageLike,\r\n    image: ImageLike,\r\n    hostEl: { dirty: () => void },\r\n    onload?: (image: ImageLike, payload: T) => void,\r\n    cbPayload?: T\r\n) {\r\n    if (!newImageOrSrc) {\r\n        return image;\r\n    }\r\n    else if (typeof newImageOrSrc === 'string') {\r\n\r\n        // Image should not be loaded repeatly.\r\n        if ((image && (image as any).__zrImageSrc === newImageOrSrc) || !hostEl) {\r\n            return image;\r\n        }\r\n\r\n        // Only when there is no existent image or existent image src\r\n        // is different, this method is responsible for load.\r\n        const cachedImgObj = globalImageCache.get(newImageOrSrc);\r\n\r\n        const pendingWrap = {hostEl: hostEl, cb: onload, cbPayload: cbPayload};\r\n\r\n        if (cachedImgObj) {\r\n            image = cachedImgObj.image;\r\n            !isImageReady(image) && cachedImgObj.pending.push(pendingWrap);\r\n        }\r\n        else {\r\n            image = platformApi.loadImage(\r\n                newImageOrSrc, imageOnLoad, imageOnLoad\r\n            );\r\n            (image as any).__zrImageSrc = newImageOrSrc;\r\n\r\n            globalImageCache.put(\r\n                newImageOrSrc,\r\n                (image as any).__cachedImgObj = {\r\n                    image: image,\r\n                    pending: [pendingWrap]\r\n                }\r\n            );\r\n        }\r\n\r\n        return image;\r\n    }\r\n    // newImageOrSrc is an HTMLImageElement or HTMLCanvasElement or Canvas\r\n    else {\r\n        return newImageOrSrc;\r\n    }\r\n}\r\n\r\nfunction imageOnLoad(this: any) {\r\n    const cachedImgObj = this.__cachedImgObj;\r\n    this.onload = this.onerror = this.__cachedImgObj = null;\r\n\r\n    for (let i = 0; i < cachedImgObj.pending.length; i++) {\r\n        const pendingWrap = cachedImgObj.pending[i];\r\n        const cb = pendingWrap.cb;\r\n        cb && cb(this, pendingWrap.cbPayload);\r\n        pendingWrap.hostEl.dirty();\r\n    }\r\n    cachedImgObj.pending.length = 0;\r\n}\r\n\r\nexport function isImageReady(image: ImageLike) {\r\n    return image && image.width && image.height;\r\n}\r\n\r\n","import * as imageHelper from '../helper/image';\nimport {\n    extend,\n    retrieve2,\n    retrieve3,\n    reduce\n} from '../../core/util';\nimport { TextAlign, TextVerticalAlign, ImageLike, Dictionary } from '../../core/types';\nimport { TextStyleProps } from '../Text';\nimport { getLineHeight, getWidth, parsePercent } from '../../contain/text';\n\nconst STYLE_REG = /\\{([a-zA-Z0-9_]+)\\|([^}]*)\\}/g;\n\ninterface InnerTruncateOption {\n    maxIteration?: number\n    // If truncate result are less than minChar, ellipsis will not show\n    // which is better for user hint in some cases\n    minChar?: number\n    // When all truncated, use the placeholder\n    placeholder?: string\n\n    maxIterations?: number\n}\n\ninterface InnerPreparedTruncateOption extends Required {\n    font: string\n\n    ellipsis: string\n    ellipsisWidth: number\n    contentWidth: number\n\n    containerWidth: number\n    cnCharWidth: number\n    ascCharWidth: number\n}\n\n/**\n * Show ellipsis if overflow.\n */\nexport function truncateText(\n    text: string,\n    containerWidth: number,\n    font: string,\n    ellipsis?: string,\n    options?: InnerTruncateOption\n): string {\n    const out = {} as Parameters[0];\n    truncateText2(out, text, containerWidth, font, ellipsis, options);\n    return out.text;\n}\n\n// PENDING: not sure whether `truncateText` is used outside zrender, since it has an `export`\n// specifier. So keep it and perform the interface modification in `truncateText2`.\nfunction truncateText2(\n    out: {text: string, isTruncated: boolean},\n    text: string,\n    containerWidth: number,\n    font: string,\n    ellipsis?: string,\n    options?: InnerTruncateOption\n): void {\n    if (!containerWidth) {\n        out.text = '';\n        out.isTruncated = false;\n        return;\n    }\n\n    const textLines = (text + '').split('\\n');\n    options = prepareTruncateOptions(containerWidth, font, ellipsis, options);\n\n    // FIXME\n    // It is not appropriate that every line has '...' when truncate multiple lines.\n    let isTruncated = false;\n    const truncateOut = {} as Parameters[0];\n    for (let i = 0, len = textLines.length; i < len; i++) {\n        truncateSingleLine(truncateOut, textLines[i], options as InnerPreparedTruncateOption);\n        textLines[i] = truncateOut.textLine;\n        isTruncated = isTruncated || truncateOut.isTruncated;\n    }\n\n    out.text = textLines.join('\\n');\n    out.isTruncated = isTruncated;\n}\n\nfunction prepareTruncateOptions(\n    containerWidth: number,\n    font: string,\n    ellipsis?: string,\n    options?: InnerTruncateOption\n): InnerPreparedTruncateOption {\n    options = options || {};\n    let preparedOpts = extend({}, options) as InnerPreparedTruncateOption;\n\n    preparedOpts.font = font;\n    ellipsis = retrieve2(ellipsis, '...');\n    preparedOpts.maxIterations = retrieve2(options.maxIterations, 2);\n    const minChar = preparedOpts.minChar = retrieve2(options.minChar, 0);\n    // FIXME\n    // Other languages?\n    preparedOpts.cnCharWidth = getWidth('国', font);\n    // FIXME\n    // Consider proportional font?\n    const ascCharWidth = preparedOpts.ascCharWidth = getWidth('a', font);\n    preparedOpts.placeholder = retrieve2(options.placeholder, '');\n\n    // Example 1: minChar: 3, text: 'asdfzxcv', truncate result: 'asdf', but not: 'a...'.\n    // Example 2: minChar: 3, text: '维度', truncate result: '维', but not: '...'.\n    let contentWidth = containerWidth = Math.max(0, containerWidth - 1); // Reserve some gap.\n    for (let i = 0; i < minChar && contentWidth >= ascCharWidth; i++) {\n        contentWidth -= ascCharWidth;\n    }\n\n    let ellipsisWidth = getWidth(ellipsis, font);\n    if (ellipsisWidth > contentWidth) {\n        ellipsis = '';\n        ellipsisWidth = 0;\n    }\n\n    contentWidth = containerWidth - ellipsisWidth;\n\n    preparedOpts.ellipsis = ellipsis;\n    preparedOpts.ellipsisWidth = ellipsisWidth;\n    preparedOpts.contentWidth = contentWidth;\n    preparedOpts.containerWidth = containerWidth;\n\n    return preparedOpts;\n}\n\nfunction truncateSingleLine(\n    out: {textLine: string, isTruncated: boolean},\n    textLine: string,\n    options: InnerPreparedTruncateOption\n): void {\n    const containerWidth = options.containerWidth;\n    const font = options.font;\n    const contentWidth = options.contentWidth;\n\n    if (!containerWidth) {\n        out.textLine = '';\n        out.isTruncated = false;\n        return;\n    }\n\n    let lineWidth = getWidth(textLine, font);\n\n    if (lineWidth <= containerWidth) {\n        out.textLine = textLine;\n        out.isTruncated = false;\n        return;\n    }\n\n    for (let j = 0; ; j++) {\n        if (lineWidth <= contentWidth || j >= options.maxIterations) {\n            textLine += options.ellipsis;\n            break;\n        }\n\n        const subLength = j === 0\n            ? estimateLength(textLine, contentWidth, options.ascCharWidth, options.cnCharWidth)\n            : lineWidth > 0\n            ? Math.floor(textLine.length * contentWidth / lineWidth)\n            : 0;\n\n        textLine = textLine.substr(0, subLength);\n        lineWidth = getWidth(textLine, font);\n    }\n\n    if (textLine === '') {\n        textLine = options.placeholder;\n    }\n\n    out.textLine = textLine;\n    out.isTruncated = true;\n}\n\nfunction estimateLength(\n    text: string, contentWidth: number, ascCharWidth: number, cnCharWidth: number\n): number {\n    let width = 0;\n    let i = 0;\n    for (let len = text.length; i < len && width < contentWidth; i++) {\n        const charCode = text.charCodeAt(i);\n        width += (0 <= charCode && charCode <= 127) ? ascCharWidth : cnCharWidth;\n    }\n    return i;\n}\n\nexport interface PlainTextContentBlock {\n    lineHeight: number\n    // Line height of actual content.\n    calculatedLineHeight: number\n\n    contentWidth: number\n    contentHeight: number\n\n    width: number\n    height: number\n\n    /**\n     * Real text width containing padding.\n     * It should be the same as `width` if background is rendered\n     * and `width` is set by user.\n     */\n    outerWidth: number\n    outerHeight: number\n\n    lines: string[]\n\n    // Be `true` if and only if the result text is modified due to overflow, due to\n    // settings on either `overflow` or `lineOverflow`\n    isTruncated: boolean\n}\n\nexport function parsePlainText(\n    text: string,\n    style?: TextStyleProps\n): PlainTextContentBlock {\n    text != null && (text += '');\n\n    // textPadding has been normalized\n    const overflow = style.overflow;\n    const padding = style.padding as number[];\n    const font = style.font;\n    const truncate = overflow === 'truncate';\n    const calculatedLineHeight = getLineHeight(font);\n    const lineHeight = retrieve2(style.lineHeight, calculatedLineHeight);\n    const bgColorDrawn = !!(style.backgroundColor);\n\n    const truncateLineOverflow = style.lineOverflow === 'truncate';\n    let isTruncated = false;\n\n    let width = style.width;\n    let lines: string[];\n\n    if (width != null && (overflow === 'break' || overflow === 'breakAll')) {\n        lines = text ? wrapText(text, style.font, width, overflow === 'breakAll', 0).lines : [];\n    }\n    else {\n        lines = text ? text.split('\\n') : [];\n    }\n\n    const contentHeight = lines.length * lineHeight;\n    const height = retrieve2(style.height, contentHeight);\n\n    // Truncate lines.\n    if (contentHeight > height && truncateLineOverflow) {\n        const lineCount = Math.floor(height / lineHeight);\n\n        isTruncated = isTruncated || (lines.length > lineCount);\n        lines = lines.slice(0, lineCount);\n\n        // TODO If show ellipse for line truncate\n        // if (style.ellipsis) {\n        //     const options = prepareTruncateOptions(width, font, style.ellipsis, {\n        //         minChar: style.truncateMinChar,\n        //         placeholder: style.placeholder\n        //     });\n        //     lines[lineCount - 1] = truncateSingleLine(lastLine, options);\n        // }\n    }\n\n    if (text && truncate && width != null) {\n        const options = prepareTruncateOptions(width, font, style.ellipsis, {\n            minChar: style.truncateMinChar,\n            placeholder: style.placeholder\n        });\n        // Having every line has '...' when truncate multiple lines.\n        const singleOut = {} as Parameters[0];\n        for (let i = 0; i < lines.length; i++) {\n            truncateSingleLine(singleOut, lines[i], options);\n            lines[i] = singleOut.textLine;\n            isTruncated = isTruncated || singleOut.isTruncated;\n        }\n    }\n\n    // Calculate real text width and height\n    let outerHeight = height;\n    let contentWidth = 0;\n    for (let i = 0; i < lines.length; i++) {\n        contentWidth = Math.max(getWidth(lines[i], font), contentWidth);\n    }\n    if (width == null) {\n        // When width is not explicitly set, use outerWidth as width.\n        width = contentWidth;\n    }\n\n    let outerWidth = contentWidth;\n    if (padding) {\n        outerHeight += padding[0] + padding[2];\n        outerWidth += padding[1] + padding[3];\n        width += padding[1] + padding[3];\n    }\n\n    if (bgColorDrawn) {\n        // When render background, outerWidth should be the same as width.\n        outerWidth = width;\n    }\n\n    return {\n        lines: lines,\n        height: height,\n        outerWidth: outerWidth,\n        outerHeight: outerHeight,\n        lineHeight: lineHeight,\n        calculatedLineHeight: calculatedLineHeight,\n        contentWidth: contentWidth,\n        contentHeight: contentHeight,\n        width: width,\n        isTruncated: isTruncated\n    };\n}\n\nclass RichTextToken {\n    styleName: string\n    text: string\n    width: number\n    height: number\n\n    // Inner height exclude padding\n    innerHeight: number\n\n    // Width and height of actual text content.\n    contentHeight: number\n    contentWidth: number\n\n    lineHeight: number\n    font: string\n    align: TextAlign\n    verticalAlign: TextVerticalAlign\n\n    textPadding: number[]\n    percentWidth?: string\n\n    isLineHolder: boolean\n}\nclass RichTextLine {\n    lineHeight: number\n    width: number\n    tokens: RichTextToken[] = []\n\n    constructor(tokens?: RichTextToken[]) {\n        if (tokens) {\n            this.tokens = tokens;\n        }\n    }\n}\nexport class RichTextContentBlock {\n    // width/height of content\n    width: number = 0\n    height: number = 0\n    // Calculated text height\n    contentWidth: number = 0\n    contentHeight: number = 0\n    // outerWidth/outerHeight with padding\n    outerWidth: number = 0\n    outerHeight: number = 0\n    lines: RichTextLine[] = []\n    // Be `true` if and only if the result text is modified due to overflow, due to\n    // settings on either `overflow` or `lineOverflow`\n    isTruncated: boolean = false\n}\n\ntype WrapInfo = {\n    width: number,\n    accumWidth: number,\n    breakAll: boolean\n}\n/**\n * For example: 'some text {a|some text}other text{b|some text}xxx{c|}xxx'\n * Also consider 'bbbb{a|xxx\\nzzz}xxxx\\naaaa'.\n * If styleName is undefined, it is plain text.\n */\nexport function parseRichText(text: string, style: TextStyleProps): RichTextContentBlock {\n    const contentBlock = new RichTextContentBlock();\n\n    text != null && (text += '');\n    if (!text) {\n        return contentBlock;\n    }\n\n    const topWidth = style.width;\n    const topHeight = style.height;\n    const overflow = style.overflow;\n    let wrapInfo: WrapInfo = (overflow === 'break' || overflow === 'breakAll') && topWidth != null\n        ? {width: topWidth, accumWidth: 0, breakAll: overflow === 'breakAll'}\n        : null;\n\n    let lastIndex = STYLE_REG.lastIndex = 0;\n    let result;\n    while ((result = STYLE_REG.exec(text)) != null) {\n        const matchedIndex = result.index;\n        if (matchedIndex > lastIndex) {\n            pushTokens(contentBlock, text.substring(lastIndex, matchedIndex), style, wrapInfo);\n        }\n        pushTokens(contentBlock, result[2], style, wrapInfo, result[1]);\n        lastIndex = STYLE_REG.lastIndex;\n    }\n\n    if (lastIndex < text.length) {\n        pushTokens(contentBlock, text.substring(lastIndex, text.length), style, wrapInfo);\n    }\n\n    // For `textWidth: xx%`\n    let pendingList = [];\n\n    let calculatedHeight = 0;\n    let calculatedWidth = 0;\n\n    const stlPadding = style.padding as number[];\n\n    const truncate = overflow === 'truncate';\n    const truncateLine = style.lineOverflow === 'truncate';\n    const tmpTruncateOut = {} as Parameters[0];\n\n    // let prevToken: RichTextToken;\n\n    function finishLine(line: RichTextLine, lineWidth: number, lineHeight: number) {\n        line.width = lineWidth;\n        line.lineHeight = lineHeight;\n        calculatedHeight += lineHeight;\n        calculatedWidth = Math.max(calculatedWidth, lineWidth);\n    }\n    // Calculate layout info of tokens.\n    outer: for (let i = 0; i < contentBlock.lines.length; i++) {\n        const line = contentBlock.lines[i];\n        let lineHeight = 0;\n        let lineWidth = 0;\n\n        for (let j = 0; j < line.tokens.length; j++) {\n            const token = line.tokens[j];\n            const tokenStyle = token.styleName && style.rich[token.styleName] || {};\n            // textPadding should not inherit from style.\n            const textPadding = token.textPadding = tokenStyle.padding as number[];\n            const paddingH = textPadding ? textPadding[1] + textPadding[3] : 0;\n\n            const font = token.font = tokenStyle.font || style.font;\n\n            token.contentHeight = getLineHeight(font);\n            // textHeight can be used when textVerticalAlign is specified in token.\n            let tokenHeight = retrieve2(\n                // textHeight should not be inherited, consider it can be specified\n                // as box height of the block.\n                tokenStyle.height, token.contentHeight\n            );\n            token.innerHeight = tokenHeight;\n\n            textPadding && (tokenHeight += textPadding[0] + textPadding[2]);\n            token.height = tokenHeight;\n            // Inlcude padding in lineHeight.\n            token.lineHeight = retrieve3(\n                tokenStyle.lineHeight, style.lineHeight, tokenHeight\n            );\n\n            token.align = tokenStyle && tokenStyle.align || style.align;\n            token.verticalAlign = tokenStyle && tokenStyle.verticalAlign || 'middle';\n\n            if (truncateLine && topHeight != null && calculatedHeight + token.lineHeight > topHeight) {\n                // TODO Add ellipsis on the previous token.\n                // prevToken.text =\n                const originalLength = contentBlock.lines.length;\n                if (j > 0) {\n                    line.tokens = line.tokens.slice(0, j);\n                    finishLine(line, lineWidth, lineHeight);\n                    contentBlock.lines = contentBlock.lines.slice(0, i + 1);\n                }\n                else {\n                    contentBlock.lines = contentBlock.lines.slice(0, i);\n                }\n                contentBlock.isTruncated = contentBlock.isTruncated || (contentBlock.lines.length < originalLength);\n                break outer;\n            }\n\n            let styleTokenWidth = tokenStyle.width;\n            let tokenWidthNotSpecified = styleTokenWidth == null || styleTokenWidth === 'auto';\n\n            // Percent width, can be `100%`, can be used in drawing separate\n            // line when box width is needed to be auto.\n            if (typeof styleTokenWidth === 'string' && styleTokenWidth.charAt(styleTokenWidth.length - 1) === '%') {\n                token.percentWidth = styleTokenWidth;\n                pendingList.push(token);\n\n                token.contentWidth = getWidth(token.text, font);\n                // Do not truncate in this case, because there is no user case\n                // and it is too complicated.\n            }\n            else {\n                if (tokenWidthNotSpecified) {\n                    // FIXME: If image is not loaded and textWidth is not specified, calling\n                    // `getBoundingRect()` will not get correct result.\n                    const textBackgroundColor = tokenStyle.backgroundColor;\n                    let bgImg = textBackgroundColor && (textBackgroundColor as { image: ImageLike }).image;\n\n                    if (bgImg) {\n                        bgImg = imageHelper.findExistImage(bgImg);\n                        if (imageHelper.isImageReady(bgImg)) {\n                            // Update token width from image size.\n                            token.width = Math.max(token.width, bgImg.width * tokenHeight / bgImg.height);\n                        }\n                    }\n                }\n\n                const remainTruncWidth = truncate && topWidth != null\n                    ? topWidth - lineWidth : null;\n\n                if (remainTruncWidth != null && remainTruncWidth < token.width) {\n                    if (!tokenWidthNotSpecified || remainTruncWidth < paddingH) {\n                        token.text = '';\n                        token.width = token.contentWidth = 0;\n                    }\n                    else {\n                        truncateText2(\n                            tmpTruncateOut,\n                            token.text, remainTruncWidth - paddingH, font, style.ellipsis,\n                            {minChar: style.truncateMinChar}\n                        );\n                        token.text = tmpTruncateOut.text;\n                        contentBlock.isTruncated = contentBlock.isTruncated || tmpTruncateOut.isTruncated;\n                        token.width = token.contentWidth = getWidth(token.text, font);\n                    }\n                }\n                else {\n                    token.contentWidth = getWidth(token.text, font);\n                }\n            }\n\n            token.width += paddingH;\n\n            lineWidth += token.width;\n            tokenStyle && (lineHeight = Math.max(lineHeight, token.lineHeight));\n\n            // prevToken = token;\n        }\n\n        finishLine(line, lineWidth, lineHeight);\n    }\n\n    contentBlock.outerWidth = contentBlock.width = retrieve2(topWidth, calculatedWidth);\n    contentBlock.outerHeight = contentBlock.height = retrieve2(topHeight, calculatedHeight);\n    contentBlock.contentHeight = calculatedHeight;\n    contentBlock.contentWidth = calculatedWidth;\n\n    if (stlPadding) {\n        contentBlock.outerWidth += stlPadding[1] + stlPadding[3];\n        contentBlock.outerHeight += stlPadding[0] + stlPadding[2];\n    }\n\n    for (let i = 0; i < pendingList.length; i++) {\n        const token = pendingList[i];\n        const percentWidth = token.percentWidth;\n        // Should not base on outerWidth, because token can not be placed out of padding.\n        token.width = parseInt(percentWidth, 10) / 100 * contentBlock.width;\n    }\n\n    return contentBlock;\n}\n\ntype TokenStyle = TextStyleProps['rich'][string];\n\nfunction pushTokens(\n    block: RichTextContentBlock,\n    str: string,\n    style: TextStyleProps,\n    wrapInfo: WrapInfo,\n    styleName?: string\n) {\n    const isEmptyStr = str === '';\n    const tokenStyle: TokenStyle = styleName && style.rich[styleName] || {};\n    const lines = block.lines;\n    const font = tokenStyle.font || style.font;\n    let newLine = false;\n    let strLines;\n    let linesWidths;\n\n    if (wrapInfo) {\n        const tokenPadding = tokenStyle.padding as number[];\n        let tokenPaddingH = tokenPadding ? tokenPadding[1] + tokenPadding[3] : 0;\n        if (tokenStyle.width != null && tokenStyle.width !== 'auto') {\n            // Wrap the whole token if tokenWidth if fixed.\n            const outerWidth = parsePercent(tokenStyle.width, wrapInfo.width) + tokenPaddingH;\n            if (lines.length > 0) { // Not first line\n                if (outerWidth + wrapInfo.accumWidth > wrapInfo.width) {\n                    // TODO Support wrap text in token.\n                    strLines = str.split('\\n');\n                    newLine = true;\n                }\n            }\n\n            wrapInfo.accumWidth = outerWidth;\n        }\n        else {\n            const res = wrapText(str, font, wrapInfo.width, wrapInfo.breakAll, wrapInfo.accumWidth);\n            wrapInfo.accumWidth = res.accumWidth + tokenPaddingH;\n            linesWidths = res.linesWidths;\n            strLines = res.lines;\n        }\n    }\n    else {\n        strLines = str.split('\\n');\n    }\n\n    for (let i = 0; i < strLines.length; i++) {\n        const text = strLines[i];\n        const token = new RichTextToken();\n        token.styleName = styleName;\n        token.text = text;\n        token.isLineHolder = !text && !isEmptyStr;\n\n        if (typeof tokenStyle.width === 'number') {\n            token.width = tokenStyle.width;\n        }\n        else {\n            token.width = linesWidths\n                ? linesWidths[i] // Caculated width in the wrap\n                : getWidth(text, font);\n        }\n\n        // The first token should be appended to the last line if not new line.\n        if (!i && !newLine) {\n            const tokens = (lines[lines.length - 1] || (lines[0] = new RichTextLine())).tokens;\n\n            // Consider cases:\n            // (1) ''.split('\\n') => ['', '\\n', ''], the '' at the first item\n            // (which is a placeholder) should be replaced by new token.\n            // (2) A image backage, where token likes {a|}.\n            // (3) A redundant '' will affect textAlign in line.\n            // (4) tokens with the same tplName should not be merged, because\n            // they should be displayed in different box (with border and padding).\n            const tokensLen = tokens.length;\n            (tokensLen === 1 && tokens[0].isLineHolder)\n                ? (tokens[0] = token)\n                // Consider text is '', only insert when it is the \"lineHolder\" or\n                // \"emptyStr\". Otherwise a redundant '' will affect textAlign in line.\n                : ((text || !tokensLen || isEmptyStr) && tokens.push(token));\n        }\n        // Other tokens always start a new line.\n        else {\n            // If there is '', insert it as a placeholder.\n            lines.push(new RichTextLine([token]));\n        }\n    }\n}\n\n\nfunction isAlphabeticLetter(ch: string) {\n    // Unicode Character Ranges\n    // https://jrgraphix.net/research/unicode_blocks.php\n    // The following ranges may not cover all letter ranges but only the more\n    // popular ones. Developers could make pull requests when they find those\n    // not covered.\n    let code = ch.charCodeAt(0);\n    return code >= 0x20 && code <= 0x24F // Latin\n        || code >= 0x370 && code <= 0x10FF // Greek, Coptic, Cyrilic, and etc.\n        || code >= 0x1200 && code <= 0x13FF // Ethiopic and Cherokee\n        || code >= 0x1E00 && code <= 0x206F; // Latin and Greek extended\n}\n\nconst breakCharMap = reduce(',&?/;] '.split(''), function (obj, ch) {\n    obj[ch] = true;\n    return obj;\n}, {} as Dictionary);\n/**\n * If break by word. For latin languages.\n */\nfunction isWordBreakChar(ch: string) {\n    if (isAlphabeticLetter(ch)) {\n        if (breakCharMap[ch]) {\n            return true;\n        }\n        return false;\n    }\n    return true;\n}\n\nfunction wrapText(\n    text: string,\n    font: string,\n    lineWidth: number,\n    isBreakAll: boolean,\n    lastAccumWidth: number\n) {\n    let lines: string[] = [];\n    let linesWidths: number[] = [];\n    let line = '';\n    let currentWord = '';\n    let currentWordWidth = 0;\n    let accumWidth = 0;\n\n    for (let i = 0; i < text.length; i++) {\n\n        const ch = text.charAt(i);\n        if (ch === '\\n') {\n            if (currentWord) {\n                line += currentWord;\n                accumWidth += currentWordWidth;\n            }\n            lines.push(line);\n            linesWidths.push(accumWidth);\n            // Reset\n            line = '';\n            currentWord = '';\n            currentWordWidth = 0;\n            accumWidth = 0;\n            continue;\n        }\n\n        const chWidth = getWidth(ch, font);\n        const inWord = isBreakAll ? false : !isWordBreakChar(ch);\n\n        if (!lines.length\n            ? lastAccumWidth + accumWidth + chWidth > lineWidth\n            : accumWidth + chWidth > lineWidth\n        ) {\n            if (!accumWidth) {  // If nothing appended yet.\n                if (inWord) {\n                    // The word length is still too long for one line\n                    // Force break the word\n                    lines.push(currentWord);\n                    linesWidths.push(currentWordWidth);\n\n                    currentWord = ch;\n                    currentWordWidth = chWidth;\n                }\n                else {\n                    // lineWidth is too small for ch\n                    lines.push(ch);\n                    linesWidths.push(chWidth);\n                }\n            }\n            else if (line || currentWord) {\n                if (inWord) {\n                    if (!line) {\n                        // The one word is still too long for one line\n                        // Force break the word\n                        // TODO Keep the word?\n                        line = currentWord;\n                        currentWord = '';\n                        currentWordWidth = 0;\n                        accumWidth = currentWordWidth;\n                    }\n\n                    lines.push(line);\n                    linesWidths.push(accumWidth - currentWordWidth);\n\n                    // Break the whole word\n                    currentWord += ch;\n                    currentWordWidth += chWidth;\n                    line = '';\n                    accumWidth = currentWordWidth;\n                }\n                else {\n                    // Append lastWord if have\n                    if (currentWord) {\n                        line += currentWord;\n                        currentWord = '';\n                        currentWordWidth = 0;\n                    }\n                    lines.push(line);\n                    linesWidths.push(accumWidth);\n\n                    line = ch;\n                    accumWidth = chWidth;\n                }\n            }\n\n            continue;\n        }\n\n        accumWidth += chWidth;\n\n        if (inWord) {\n            currentWord += ch;\n            currentWordWidth += chWidth;\n        }\n        else {\n            // Append whole word\n            if (currentWord) {\n                line += currentWord;\n                // Reset\n                currentWord = '';\n                currentWordWidth = 0;\n            }\n\n            // Append character\n            line += ch;\n        }\n    }\n\n    if (!lines.length && !line) {\n        line = text;\n        currentWord = '';\n        currentWordWidth = 0;\n    }\n\n    // Append last line.\n    if (currentWord) {\n        line += currentWord;\n    }\n    if (line) {\n        lines.push(line);\n        linesWidths.push(accumWidth);\n    }\n\n    if (lines.length === 1) {\n        // No new line.\n        accumWidth += lastAccumWidth;\n    }\n\n    return {\n        // Accum width of last line\n        accumWidth,\n        lines: lines,\n        linesWidths\n    };\n}","/**\n * RichText is a container that manages complex text label.\n * It will parse text string and create sub displayble elements respectively.\n */\nimport { TextAlign, TextVerticalAlign, ImageLike, Dictionary, MapToType, FontWeight, FontStyle } from '../core/types';\nimport { parseRichText, parsePlainText } from './helper/parseText';\nimport TSpan, { TSpanStyleProps } from './TSpan';\nimport { retrieve2, each, normalizeCssArray, trim, retrieve3, extend, keys, defaults } from '../core/util';\nimport { adjustTextX, adjustTextY } from '../contain/text';\nimport ZRImage from './Image';\nimport Rect from './shape/Rect';\nimport BoundingRect from '../core/BoundingRect';\nimport { MatrixArray } from '../core/matrix';\nimport Displayable, {\n    DisplayableStatePropNames,\n    DisplayableProps,\n    DEFAULT_COMMON_ANIMATION_PROPS\n} from './Displayable';\nimport { ZRenderType } from '../zrender';\nimport Animator from '../animation/Animator';\nimport Transformable from '../core/Transformable';\nimport { ElementCommonState } from '../Element';\nimport { GroupLike } from './Group';\nimport { DEFAULT_FONT, DEFAULT_FONT_SIZE } from '../core/platform';\n\ntype TextContentBlock = ReturnType\ntype TextLine = TextContentBlock['lines'][0]\ntype TextToken = TextLine['tokens'][0]\n\n// TODO Default value?\nexport interface TextStylePropsPart {\n    // TODO Text is assigned inside zrender\n    text?: string\n\n    fill?: string\n    stroke?: string\n    strokeNoScale?: boolean\n\n    opacity?: number\n    fillOpacity?: number\n    strokeOpacity?: number\n    /**\n     * textStroke may be set as some color as a default\n     * value in upper applicaion, where the default value\n     * of lineWidth should be 0 to make sure that\n     * user can choose to do not use text stroke.\n     */\n    lineWidth?: number\n    lineDash?: false | number[]\n    lineDashOffset?: number\n    borderDash?: false | number[]\n    borderDashOffset?: number\n\n    /**\n     * If `fontSize` or `fontFamily` exists, `font` will be reset by\n     * `fontSize`, `fontStyle`, `fontWeight`, `fontFamily`.\n     * So do not visit it directly in upper application (like echarts),\n     * but use `contain/text#makeFont` instead.\n     */\n    font?: string\n    /**\n     * The same as font. Use font please.\n     * @deprecated\n     */\n    textFont?: string\n\n    /**\n     * It helps merging respectively, rather than parsing an entire font string.\n     */\n    fontStyle?: FontStyle\n    /**\n     * It helps merging respectively, rather than parsing an entire font string.\n     */\n    fontWeight?: FontWeight\n    /**\n     * It helps merging respectively, rather than parsing an entire font string.\n     */\n    fontFamily?: string\n    /**\n     * It helps merging respectively, rather than parsing an entire font string.\n     * Should be 12 but not '12px'.\n     */\n    fontSize?: number | string\n\n    align?: TextAlign\n    verticalAlign?: TextVerticalAlign\n\n    /**\n     * Line height. Default to be text height of '国'\n     */\n    lineHeight?: number\n    /**\n     * Width of text block. Not include padding\n     * Used for background, truncate, wrap\n     */\n    width?: number | string\n    /**\n     * Height of text block. Not include padding\n     * Used for background, truncate\n     */\n    height?: number\n    /**\n     * Reserved for special functinality, like 'hr'.\n     */\n    tag?: string\n\n    textShadowColor?: string\n    textShadowBlur?: number\n    textShadowOffsetX?: number\n    textShadowOffsetY?: number\n\n    // Shadow, background, border of text box.\n    backgroundColor?: string | {\n        image: ImageLike | string\n    }\n\n    /**\n     * Can be `2` or `[2, 4]` or `[2, 3, 4, 5]`\n     */\n    padding?: number | number[]\n    /**\n     * Margin of label. Used when layouting the label.\n     */\n    margin?: number\n\n    borderColor?: string\n    borderWidth?: number\n    borderRadius?: number | number[]\n\n    /**\n     * Shadow color for background box.\n     */\n    shadowColor?: string\n    /**\n     * Shadow blur for background box.\n     */\n    shadowBlur?: number\n    /**\n     * Shadow offset x for background box.\n     */\n    shadowOffsetX?: number\n    /**\n     * Shadow offset y for background box.\n     */\n    shadowOffsetY?: number\n}\nexport interface TextStyleProps extends TextStylePropsPart {\n\n    text?: string\n\n    x?: number\n    y?: number\n\n    /**\n     * Only support number in the top block.\n     */\n    width?: number\n    /**\n     * Text styles for rich text.\n     */\n    rich?: Dictionary\n\n    /**\n     * Strategy when calculated text width exceeds textWidth.\n     * break: break by word\n     * break: will break inside the word\n     * truncate: truncate the text and show ellipsis\n     * Do nothing if not set\n     */\n    overflow?: 'break' | 'breakAll' | 'truncate' | 'none'\n\n    /**\n     * Strategy when text lines exceeds textHeight.\n     * Do nothing if not set\n     */\n    lineOverflow?: 'truncate'\n\n    /**\n     * Epllipsis used if text is truncated\n     */\n    ellipsis?: string\n    /**\n     * Placeholder used if text is truncated to empty\n     */\n    placeholder?: string\n    /**\n     * Min characters for truncating\n     */\n    truncateMinChar?: number\n}\n\nexport interface TextProps extends DisplayableProps {\n    style?: TextStyleProps\n\n    zlevel?: number\n    z?: number\n    z2?: number\n\n    culling?: boolean\n    cursor?: string\n}\n\nexport type TextState = Pick & ElementCommonState\n\nexport type DefaultTextStyle = Pick & {\n    autoStroke?: boolean\n};\n\nconst DEFAULT_RICH_TEXT_COLOR = {\n    fill: '#000'\n};\nconst DEFAULT_STROKE_LINE_WIDTH = 2;\n\n// const DEFAULT_TEXT_STYLE: TextStyleProps = {\n//     x: 0,\n//     y: 0,\n//     fill: '#000',\n//     stroke: null,\n//     opacity: 0,\n//     fillOpacity:\n// }\n\nexport const DEFAULT_TEXT_ANIMATION_PROPS: MapToType = {\n    style: defaults, MapToType>({\n        fill: true,\n        stroke: true,\n        fillOpacity: true,\n        strokeOpacity: true,\n        lineWidth: true,\n        fontSize: true,\n        lineHeight: true,\n        width: true,\n        height: true,\n        textShadowColor: true,\n        textShadowBlur: true,\n        textShadowOffsetX: true,\n        textShadowOffsetY: true,\n        backgroundColor: true,\n        padding: true,  // TODO needs normalize padding before animate\n        borderColor: true,\n        borderWidth: true,\n        borderRadius: true  // TODO needs normalize radius before animate\n    }, DEFAULT_COMMON_ANIMATION_PROPS.style)\n };\n\n\ninterface ZRText {\n    animate(key?: '', loop?: boolean): Animator\n    animate(key: 'style', loop?: boolean): Animator\n\n    getState(stateName: string): TextState\n    ensureState(stateName: string): TextState\n\n    states: Dictionary\n    stateProxy: (stateName: string) => TextState\n}\n\nclass ZRText extends Displayable implements GroupLike {\n\n    type = 'text'\n\n    style: TextStyleProps\n\n    /**\n     * How to handling label overlap\n     *\n     * hidden:\n     */\n    overlap: 'hidden' | 'show' | 'blur'\n\n    /**\n     * Will use this to calculate transform matrix\n     * instead of Element itseelf if it's give.\n     * Not exposed to developers\n     */\n    innerTransformable: Transformable\n\n    // Be `true` if and only if the result text is modified due to overflow, due to\n    // settings on either `overflow` or `lineOverflow`. Based on this the caller can\n    // take some action like showing the original text in a particular tip.\n    // Only take effect after rendering. So do not visit it before it.\n    isTruncated: boolean\n\n    private _children: (ZRImage | Rect | TSpan)[] = []\n\n    private _childCursor: 0\n\n    private _defaultStyle: DefaultTextStyle = DEFAULT_RICH_TEXT_COLOR\n\n    constructor(opts?: TextProps) {\n        super();\n        this.attr(opts);\n    }\n\n    childrenRef() {\n        return this._children;\n    }\n\n    update() {\n\n        super.update();\n\n        // Update children\n        if (this.styleChanged()) {\n            this._updateSubTexts();\n        }\n\n        for (let i = 0; i < this._children.length; i++) {\n            const child = this._children[i];\n            // Set common properties.\n            child.zlevel = this.zlevel;\n            child.z = this.z;\n            child.z2 = this.z2;\n            child.culling = this.culling;\n            child.cursor = this.cursor;\n            child.invisible = this.invisible;\n        }\n    }\n\n     updateTransform() {\n        const innerTransformable = this.innerTransformable;\n        if (innerTransformable) {\n            innerTransformable.updateTransform();\n            if (innerTransformable.transform) {\n                this.transform = innerTransformable.transform;\n            }\n        }\n        else {\n            super.updateTransform();\n        }\n    }\n\n    getLocalTransform(m?: MatrixArray): MatrixArray {\n        const innerTransformable = this.innerTransformable;\n        return innerTransformable\n            ? innerTransformable.getLocalTransform(m)\n            : super.getLocalTransform(m);\n    }\n\n    // TODO override setLocalTransform?\n    getComputedTransform() {\n        if (this.__hostTarget) {\n            // Update host target transform\n            this.__hostTarget.getComputedTransform();\n            // Update text position.\n            this.__hostTarget.updateInnerText(true);\n        }\n\n        return super.getComputedTransform();\n    }\n\n    private _updateSubTexts() {\n        // Reset child visit cursor\n        this._childCursor = 0;\n\n        normalizeTextStyle(this.style);\n        this.style.rich\n            ? this._updateRichTexts()\n            : this._updatePlainTexts();\n\n        this._children.length = this._childCursor;\n\n        this.styleUpdated();\n    }\n\n    addSelfToZr(zr: ZRenderType) {\n        super.addSelfToZr(zr);\n        for (let i = 0; i < this._children.length; i++) {\n            // Also need mount __zr for case like hover detection.\n            // The case: hover on a label (position: 'top') causes host el\n            // scaled and label Y position lifts a bit so that out of the\n            // pointer, then mouse move should be able to trigger \"mouseout\".\n            this._children[i].__zr = zr;\n        }\n    }\n\n    removeSelfFromZr(zr: ZRenderType) {\n        super.removeSelfFromZr(zr);\n        for (let i = 0; i < this._children.length; i++) {\n            this._children[i].__zr = null;\n        }\n    }\n\n    getBoundingRect(): BoundingRect {\n        if (this.styleChanged()) {\n            this._updateSubTexts();\n        }\n        if (!this._rect) {\n            // TODO: Optimize when using width and overflow: wrap/truncate\n            const tmpRect = new BoundingRect(0, 0, 0, 0);\n            const children = this._children;\n            const tmpMat: MatrixArray = [];\n            let rect = null;\n\n            for (let i = 0; i < children.length; i++) {\n                const child = children[i];\n                const childRect = child.getBoundingRect();\n                const transform = child.getLocalTransform(tmpMat);\n\n                if (transform) {\n                    tmpRect.copy(childRect);\n                    tmpRect.applyTransform(transform);\n                    rect = rect || tmpRect.clone();\n                    rect.union(tmpRect);\n                }\n                else {\n                    rect = rect || childRect.clone();\n                    rect.union(childRect);\n                }\n            }\n            this._rect = rect || tmpRect;\n        }\n        return this._rect;\n    }\n\n    // Can be set in Element. To calculate text fill automatically when textContent is inside element\n    setDefaultTextStyle(defaultTextStyle: DefaultTextStyle) {\n        // Use builtin if defaultTextStyle is not given.\n        this._defaultStyle = defaultTextStyle || DEFAULT_RICH_TEXT_COLOR;\n    }\n\n    setTextContent(textContent: never) {\n        if (process.env.NODE_ENV !== 'production') {\n            throw new Error('Can\\'t attach text on another text');\n        }\n    }\n\n    // getDefaultStyleValue(key: T): TextStyleProps[T] {\n    //     // Default value is on the prototype.\n    //     return this.style.prototype[key];\n    // }\n\n    protected _mergeStyle(targetStyle: TextStyleProps, sourceStyle: TextStyleProps) {\n        if (!sourceStyle) {\n            return targetStyle;\n        }\n\n        // DO deep merge on rich configurations.\n        const sourceRich = sourceStyle.rich;\n        const targetRich = targetStyle.rich || (sourceRich && {});  // Create a new one if source have rich but target don't\n\n        extend(targetStyle, sourceStyle);\n\n        if (sourceRich && targetRich) {\n            // merge rich and assign rich again.\n            this._mergeRich(targetRich, sourceRich);\n            targetStyle.rich = targetRich;\n        }\n        else if (targetRich) {\n            // If source rich not exists. DON'T override the target rich\n            targetStyle.rich = targetRich;\n        }\n\n        return targetStyle;\n    }\n\n    private _mergeRich(targetRich: TextStyleProps['rich'], sourceRich: TextStyleProps['rich']) {\n        const richNames = keys(sourceRich);\n        // Merge by rich names.\n        for (let i = 0; i < richNames.length; i++) {\n            const richName = richNames[i];\n            targetRich[richName] = targetRich[richName] || {};\n            extend(targetRich[richName], sourceRich[richName]);\n        }\n    }\n\n    getAnimationStyleProps() {\n        return DEFAULT_TEXT_ANIMATION_PROPS;\n    }\n\n\n    private _getOrCreateChild(Ctor: {new(): TSpan}): TSpan\n    private _getOrCreateChild(Ctor: {new(): ZRImage}): ZRImage\n    private _getOrCreateChild(Ctor: {new(): Rect}): Rect\n    private _getOrCreateChild(Ctor: {new(): TSpan | Rect | ZRImage}): TSpan | Rect | ZRImage {\n        let child = this._children[this._childCursor];\n        if (!child || !(child instanceof Ctor)) {\n            child = new Ctor();\n        }\n        this._children[this._childCursor++] = child;\n        child.__zr = this.__zr;\n        // TODO to users parent can only be group.\n        child.parent = this as any;\n        return child;\n    }\n\n    private _updatePlainTexts() {\n        const style = this.style;\n        const textFont = style.font || DEFAULT_FONT;\n        const textPadding = style.padding as number[];\n\n        const text = getStyleText(style);\n        const contentBlock = parsePlainText(text, style);\n        const needDrawBg = needDrawBackground(style);\n        const bgColorDrawn = !!(style.backgroundColor);\n\n        const outerHeight = contentBlock.outerHeight;\n        const outerWidth = contentBlock.outerWidth;\n        const contentWidth = contentBlock.contentWidth;\n\n        const textLines = contentBlock.lines;\n        const lineHeight = contentBlock.lineHeight;\n\n        const defaultStyle = this._defaultStyle;\n\n        this.isTruncated = !!contentBlock.isTruncated;\n\n        const baseX = style.x || 0;\n        const baseY = style.y || 0;\n        const textAlign = style.align || defaultStyle.align || 'left';\n        const verticalAlign = style.verticalAlign || defaultStyle.verticalAlign || 'top';\n\n        let textX = baseX;\n        let textY = adjustTextY(baseY, contentBlock.contentHeight, verticalAlign);\n\n        if (needDrawBg || textPadding) {\n            // Consider performance, do not call getTextWidth util necessary.\n            const boxX = adjustTextX(baseX, outerWidth, textAlign);\n            const boxY = adjustTextY(baseY, outerHeight, verticalAlign);\n            needDrawBg && this._renderBackground(style, style, boxX, boxY, outerWidth, outerHeight);\n        }\n\n        // `textBaseline` is set as 'middle'.\n        textY += lineHeight / 2;\n\n        if (textPadding) {\n            textX = getTextXForPadding(baseX, textAlign, textPadding);\n            if (verticalAlign === 'top') {\n                textY += textPadding[0];\n            }\n            else if (verticalAlign === 'bottom') {\n                textY -= textPadding[2];\n            }\n        }\n\n        let defaultLineWidth = 0;\n        let useDefaultFill = false;\n        const textFill = getFill(\n            'fill' in style\n                ? style.fill\n                : (useDefaultFill = true, defaultStyle.fill)\n        );\n        const textStroke = getStroke(\n            'stroke' in style\n                ? style.stroke\n                : (!bgColorDrawn\n                    // If we use \"auto lineWidth\" widely, it probably bring about some bad case.\n                    // So the current strategy is:\n                    // If `style.fill` is specified (i.e., `useDefaultFill` is `false`)\n                    // (A) And if `textConfig.insideStroke/outsideStroke` is not specified as a color\n                    //   (i.e., `defaultStyle.autoStroke` is `true`), we do not actually display\n                    //   the auto stroke because we can not make sure wether the stoke is approperiate to\n                    //   the given `fill`.\n                    // (B) But if `textConfig.insideStroke/outsideStroke` is specified as a color,\n                    // we give the auto lineWidth to display the given stoke color.\n                    && (!defaultStyle.autoStroke || useDefaultFill)\n                )\n                ? (defaultLineWidth = DEFAULT_STROKE_LINE_WIDTH, defaultStyle.stroke)\n                : null\n        );\n\n        const hasShadow = style.textShadowBlur > 0;\n\n        const fixedBoundingRect = style.width != null\n            && (style.overflow === 'truncate' || style.overflow === 'break' || style.overflow === 'breakAll');\n        const calculatedLineHeight = contentBlock.calculatedLineHeight;\n\n        for (let i = 0; i < textLines.length; i++) {\n            const el = this._getOrCreateChild(TSpan);\n            // Always create new style.\n            const subElStyle: TSpanStyleProps = el.createStyle();\n            el.useStyle(subElStyle);\n            subElStyle.text = textLines[i];\n            subElStyle.x = textX;\n            subElStyle.y = textY;\n            // Always set textAlign and textBase line, because it is difficute to calculate\n            // textAlign from prevEl, and we dont sure whether textAlign will be reset if\n            // font set happened.\n            if (textAlign) {\n                subElStyle.textAlign = textAlign;\n            }\n            // Force baseline to be \"middle\". Otherwise, if using \"top\", the\n            // text will offset downward a little bit in font \"Microsoft YaHei\".\n            subElStyle.textBaseline = 'middle';\n            subElStyle.opacity = style.opacity;\n            // Fill after stroke so the outline will not cover the main part.\n            subElStyle.strokeFirst = true;\n\n            if (hasShadow) {\n                subElStyle.shadowBlur = style.textShadowBlur || 0;\n                subElStyle.shadowColor = style.textShadowColor || 'transparent';\n                subElStyle.shadowOffsetX = style.textShadowOffsetX || 0;\n                subElStyle.shadowOffsetY = style.textShadowOffsetY || 0;\n            }\n\n            // Always override default fill and stroke value.\n            subElStyle.stroke = textStroke as string;\n            subElStyle.fill = textFill as string;\n\n            if (textStroke) {\n                subElStyle.lineWidth = style.lineWidth || defaultLineWidth;\n                subElStyle.lineDash = style.lineDash;\n                subElStyle.lineDashOffset = style.lineDashOffset || 0;\n            }\n\n            subElStyle.font = textFont;\n            setSeparateFont(subElStyle, style);\n\n            textY += lineHeight;\n\n            if (fixedBoundingRect) {\n                el.setBoundingRect(new BoundingRect(\n                    adjustTextX(subElStyle.x, contentWidth, subElStyle.textAlign as TextAlign),\n                    adjustTextY(subElStyle.y, calculatedLineHeight, subElStyle.textBaseline as TextVerticalAlign),\n                    /**\n                     * Text boundary should be the real text width.\n                     * Otherwise, there will be extra space in the\n                     * bounding rect calculated.\n                     */\n                    contentWidth,\n                    calculatedLineHeight\n                ));\n            }\n        }\n    }\n\n\n    private _updateRichTexts() {\n        const style = this.style;\n\n        // TODO Only parse when text changed?\n        const text = getStyleText(style);\n        const contentBlock = parseRichText(text, style);\n\n        const contentWidth = contentBlock.width;\n        const outerWidth = contentBlock.outerWidth;\n        const outerHeight = contentBlock.outerHeight;\n        const textPadding = style.padding as number[];\n\n        const baseX = style.x || 0;\n        const baseY = style.y || 0;\n        const defaultStyle = this._defaultStyle;\n        const textAlign = style.align || defaultStyle.align;\n        const verticalAlign = style.verticalAlign || defaultStyle.verticalAlign;\n\n        this.isTruncated = !!contentBlock.isTruncated;\n\n        const boxX = adjustTextX(baseX, outerWidth, textAlign);\n        const boxY = adjustTextY(baseY, outerHeight, verticalAlign);\n        let xLeft = boxX;\n        let lineTop = boxY;\n\n        if (textPadding) {\n            xLeft += textPadding[3];\n            lineTop += textPadding[0];\n        }\n\n        let xRight = xLeft + contentWidth;\n\n        if (needDrawBackground(style)) {\n            this._renderBackground(style, style, boxX, boxY, outerWidth, outerHeight);\n        }\n        const bgColorDrawn = !!(style.backgroundColor);\n\n        for (let i = 0; i < contentBlock.lines.length; i++) {\n            const line = contentBlock.lines[i];\n            const tokens = line.tokens;\n            const tokenCount = tokens.length;\n            const lineHeight = line.lineHeight;\n\n            let remainedWidth = line.width;\n            let leftIndex = 0;\n            let lineXLeft = xLeft;\n            let lineXRight = xRight;\n            let rightIndex = tokenCount - 1;\n            let token;\n\n            while (\n                leftIndex < tokenCount\n                && (token = tokens[leftIndex], !token.align || token.align === 'left')\n            ) {\n                this._placeToken(token, style, lineHeight, lineTop, lineXLeft, 'left', bgColorDrawn);\n                remainedWidth -= token.width;\n                lineXLeft += token.width;\n                leftIndex++;\n            }\n\n            while (\n                rightIndex >= 0\n                && (token = tokens[rightIndex], token.align === 'right')\n            ) {\n                this._placeToken(token, style, lineHeight, lineTop, lineXRight, 'right', bgColorDrawn);\n                remainedWidth -= token.width;\n                lineXRight -= token.width;\n                rightIndex--;\n            }\n\n            // The other tokens are placed as textAlign 'center' if there is enough space.\n            lineXLeft += (contentWidth - (lineXLeft - xLeft) - (xRight - lineXRight) - remainedWidth) / 2;\n            while (leftIndex <= rightIndex) {\n                token = tokens[leftIndex];\n                // Consider width specified by user, use 'center' rather than 'left'.\n                this._placeToken(\n                    token, style, lineHeight, lineTop,\n                    lineXLeft + token.width / 2, 'center', bgColorDrawn\n                );\n                lineXLeft += token.width;\n                leftIndex++;\n            }\n\n            lineTop += lineHeight;\n        }\n    }\n\n    private _placeToken(\n        token: TextToken,\n        style: TextStyleProps,\n        lineHeight: number,\n        lineTop: number,\n        x: number,\n        textAlign: string,\n        parentBgColorDrawn: boolean\n    ) {\n        const tokenStyle = style.rich[token.styleName] || {};\n        tokenStyle.text = token.text;\n\n        // 'ctx.textBaseline' is always set as 'middle', for sake of\n        // the bias of \"Microsoft YaHei\".\n        const verticalAlign = token.verticalAlign;\n        let y = lineTop + lineHeight / 2;\n        if (verticalAlign === 'top') {\n            y = lineTop + token.height / 2;\n        }\n        else if (verticalAlign === 'bottom') {\n            y = lineTop + lineHeight - token.height / 2;\n        }\n\n        const needDrawBg = !token.isLineHolder && needDrawBackground(tokenStyle);\n        needDrawBg && this._renderBackground(\n            tokenStyle,\n            style,\n            textAlign === 'right'\n                ? x - token.width\n                : textAlign === 'center'\n                ? x - token.width / 2\n                : x,\n            y - token.height / 2,\n            token.width,\n            token.height\n        );\n        const bgColorDrawn = !!tokenStyle.backgroundColor;\n\n        const textPadding = token.textPadding;\n        if (textPadding) {\n            x = getTextXForPadding(x, textAlign, textPadding);\n            y -= token.height / 2 - textPadding[0] - token.innerHeight / 2;\n        }\n\n        const el = this._getOrCreateChild(TSpan);\n        const subElStyle: TSpanStyleProps = el.createStyle();\n        // Always create new style.\n        el.useStyle(subElStyle);\n\n        const defaultStyle = this._defaultStyle;\n        let useDefaultFill = false;\n        let defaultLineWidth = 0;\n        const textFill = getFill(\n            'fill' in tokenStyle ? tokenStyle.fill\n                : 'fill' in style ? style.fill\n                : (useDefaultFill = true, defaultStyle.fill)\n        );\n        const textStroke = getStroke(\n            'stroke' in tokenStyle ? tokenStyle.stroke\n                : 'stroke' in style ? style.stroke\n                : (\n                    !bgColorDrawn\n                    && !parentBgColorDrawn\n                    // See the strategy explained above.\n                    && (!defaultStyle.autoStroke || useDefaultFill)\n                ) ? (defaultLineWidth = DEFAULT_STROKE_LINE_WIDTH, defaultStyle.stroke)\n                : null\n        );\n\n        const hasShadow = tokenStyle.textShadowBlur > 0\n            || style.textShadowBlur > 0;\n\n        subElStyle.text = token.text;\n        subElStyle.x = x;\n        subElStyle.y = y;\n        if (hasShadow) {\n            subElStyle.shadowBlur = tokenStyle.textShadowBlur || style.textShadowBlur || 0;\n            subElStyle.shadowColor = tokenStyle.textShadowColor || style.textShadowColor || 'transparent';\n            subElStyle.shadowOffsetX = tokenStyle.textShadowOffsetX || style.textShadowOffsetX || 0;\n            subElStyle.shadowOffsetY = tokenStyle.textShadowOffsetY || style.textShadowOffsetY || 0;\n        }\n\n        subElStyle.textAlign = textAlign as CanvasTextAlign;\n        // Force baseline to be \"middle\". Otherwise, if using \"top\", the\n        // text will offset downward a little bit in font \"Microsoft YaHei\".\n        subElStyle.textBaseline = 'middle';\n        subElStyle.font = token.font || DEFAULT_FONT;\n        subElStyle.opacity = retrieve3(tokenStyle.opacity, style.opacity, 1);\n\n\n        // TODO inherit each item from top style in token style?\n        setSeparateFont(subElStyle, tokenStyle);\n\n        if (textStroke) {\n            subElStyle.lineWidth = retrieve3(tokenStyle.lineWidth, style.lineWidth, defaultLineWidth);\n            subElStyle.lineDash = retrieve2(tokenStyle.lineDash, style.lineDash);\n            subElStyle.lineDashOffset = style.lineDashOffset || 0;\n            subElStyle.stroke = textStroke;\n        }\n        if (textFill) {\n            subElStyle.fill = textFill;\n        }\n\n        const textWidth = token.contentWidth;\n        const textHeight = token.contentHeight;\n        // NOTE: Should not call dirtyStyle after setBoundingRect. Or it will be cleared.\n        el.setBoundingRect(new BoundingRect(\n            adjustTextX(subElStyle.x, textWidth, subElStyle.textAlign as TextAlign),\n            adjustTextY(subElStyle.y, textHeight, subElStyle.textBaseline as TextVerticalAlign),\n            textWidth,\n            textHeight\n        ));\n    }\n\n    private _renderBackground(\n        style: TextStylePropsPart,\n        topStyle: TextStylePropsPart,\n        x: number,\n        y: number,\n        width: number,\n        height: number\n    ) {\n        const textBackgroundColor = style.backgroundColor;\n        const textBorderWidth = style.borderWidth;\n        const textBorderColor = style.borderColor;\n        const isImageBg = textBackgroundColor && (textBackgroundColor as {image: ImageLike}).image;\n        const isPlainOrGradientBg = textBackgroundColor && !isImageBg;\n        const textBorderRadius = style.borderRadius;\n        const self = this;\n\n        let rectEl: Rect;\n        let imgEl: ZRImage;\n        if (isPlainOrGradientBg || style.lineHeight || (textBorderWidth && textBorderColor)) {\n            // Background is color\n            rectEl = this._getOrCreateChild(Rect);\n            rectEl.useStyle(rectEl.createStyle());    // Create an empty style.\n            rectEl.style.fill = null;\n            const rectShape = rectEl.shape;\n            rectShape.x = x;\n            rectShape.y = y;\n            rectShape.width = width;\n            rectShape.height = height;\n            rectShape.r = textBorderRadius;\n            rectEl.dirtyShape();\n        }\n\n        if (isPlainOrGradientBg) {\n            const rectStyle = rectEl.style;\n            rectStyle.fill = textBackgroundColor as string || null;\n            rectStyle.fillOpacity = retrieve2(style.fillOpacity, 1);\n        }\n        else if (isImageBg) {\n            imgEl = this._getOrCreateChild(ZRImage);\n            imgEl.onload = function () {\n                // Refresh and relayout after image loaded.\n                self.dirtyStyle();\n            };\n            const imgStyle = imgEl.style;\n            imgStyle.image = (textBackgroundColor as {image: ImageLike}).image;\n            imgStyle.x = x;\n            imgStyle.y = y;\n            imgStyle.width = width;\n            imgStyle.height = height;\n        }\n\n        if (textBorderWidth && textBorderColor) {\n            const rectStyle = rectEl.style;\n            rectStyle.lineWidth = textBorderWidth;\n            rectStyle.stroke = textBorderColor;\n            rectStyle.strokeOpacity = retrieve2(style.strokeOpacity, 1);\n            rectStyle.lineDash = style.borderDash;\n            rectStyle.lineDashOffset = style.borderDashOffset || 0;\n            rectEl.strokeContainThreshold = 0;\n\n            // Making shadow looks better.\n            if (rectEl.hasFill() && rectEl.hasStroke()) {\n                rectStyle.strokeFirst = true;\n                rectStyle.lineWidth *= 2;\n            }\n        }\n\n        const commonStyle = (rectEl || imgEl).style;\n        commonStyle.shadowBlur = style.shadowBlur || 0;\n        commonStyle.shadowColor = style.shadowColor || 'transparent';\n        commonStyle.shadowOffsetX = style.shadowOffsetX || 0;\n        commonStyle.shadowOffsetY = style.shadowOffsetY || 0;\n        commonStyle.opacity = retrieve3(style.opacity, topStyle.opacity, 1);\n    }\n\n    static makeFont(style: TextStylePropsPart): string {\n        // FIXME in node-canvas fontWeight is before fontStyle\n        // Use `fontSize` `fontFamily` to check whether font properties are defined.\n        let font = '';\n        if (hasSeparateFont(style)) {\n            font = [\n                style.fontStyle,\n                style.fontWeight,\n                parseFontSize(style.fontSize),\n                // If font properties are defined, `fontFamily` should not be ignored.\n                style.fontFamily || 'sans-serif'\n            ].join(' ');\n        }\n        return font && trim(font) || style.textFont || style.font;\n    }\n}\n\n\nconst VALID_TEXT_ALIGN = {left: true, right: 1, center: 1};\nconst VALID_TEXT_VERTICAL_ALIGN = {top: 1, bottom: 1, middle: 1};\n\nconst FONT_PARTS = ['fontStyle', 'fontWeight', 'fontSize', 'fontFamily'] as const;\n\nexport function parseFontSize(fontSize: number | string) {\n    if (\n        typeof fontSize === 'string'\n        && (\n            fontSize.indexOf('px') !== -1\n            || fontSize.indexOf('rem') !== -1\n            || fontSize.indexOf('em') !== -1\n        )\n    ) {\n        return fontSize;\n    }\n    else if (!isNaN(+fontSize)) {\n        return fontSize + 'px';\n    }\n    else {\n        return DEFAULT_FONT_SIZE + 'px';\n    }\n}\n\nfunction setSeparateFont(\n    targetStyle: TSpanStyleProps,\n    sourceStyle: TextStylePropsPart\n) {\n    for (let i = 0; i < FONT_PARTS.length; i++) {\n        const fontProp = FONT_PARTS[i];\n        const val = sourceStyle[fontProp];\n        if (val != null) {\n            (targetStyle as any)[fontProp] = val;\n        }\n    }\n}\n\nexport function hasSeparateFont(style: Pick) {\n    return style.fontSize != null || style.fontFamily || style.fontWeight;\n}\n\nexport function normalizeTextStyle(style: TextStyleProps): TextStyleProps {\n    normalizeStyle(style);\n    // TODO inherit each item from top style in token style?\n    each(style.rich, normalizeStyle);\n    return style;\n}\n\nfunction normalizeStyle(style: TextStylePropsPart) {\n    if (style) {\n        style.font = ZRText.makeFont(style);\n        let textAlign = style.align;\n        // 'middle' is invalid, convert it to 'center'\n        (textAlign as string) === 'middle' && (textAlign = 'center');\n        style.align = (\n            textAlign == null || VALID_TEXT_ALIGN[textAlign]\n        ) ? textAlign : 'left';\n\n        // Compatible with textBaseline.\n        let verticalAlign = style.verticalAlign;\n        (verticalAlign as string) === 'center' && (verticalAlign = 'middle');\n        style.verticalAlign = (\n            verticalAlign == null || VALID_TEXT_VERTICAL_ALIGN[verticalAlign]\n        ) ? verticalAlign : 'top';\n\n        // TODO Should not change the orignal value.\n        const textPadding = style.padding;\n        if (textPadding) {\n            style.padding = normalizeCssArray(style.padding);\n        }\n    }\n}\n\n/**\n * @param stroke If specified, do not check style.textStroke.\n * @param lineWidth If specified, do not check style.textStroke.\n */\nfunction getStroke(\n    stroke?: TextStylePropsPart['stroke'],\n    lineWidth?: number\n) {\n    return (stroke == null || lineWidth <= 0 || stroke === 'transparent' || stroke === 'none')\n        ? null\n        : ((stroke as any).image || (stroke as any).colorStops)\n        ? '#000'\n        : stroke;\n}\n\nfunction getFill(\n    fill?: TextStylePropsPart['fill']\n) {\n    return (fill == null || fill === 'none')\n        ? null\n        // TODO pattern and gradient?\n        : ((fill as any).image || (fill as any).colorStops)\n        ? '#000'\n        : fill;\n}\n\nfunction getTextXForPadding(x: number, textAlign: string, textPadding: number[]): number {\n    return textAlign === 'right'\n        ? (x - textPadding[1])\n        : textAlign === 'center'\n        ? (x + textPadding[3] / 2 - textPadding[1] / 2)\n        : (x + textPadding[3]);\n}\n\nfunction getStyleText(style: TextStylePropsPart): string {\n    // Compat: set number to text is supported.\n    // set null/undefined to text is supported.\n    let text = style.text;\n    text != null && (text += '');\n    return text;\n}\n\n/**\n * If needs draw background\n * @param style Style of element\n */\nfunction needDrawBackground(style: TextStylePropsPart): boolean {\n    return !!(\n        style.backgroundColor\n        || style.lineHeight\n        || (style.borderWidth && style.borderColor)\n    );\n}\n\nexport default ZRText;","/**\r\n * 圆弧\r\n */\r\n\r\nimport Path, { PathProps } from '../Path';\r\n\r\nexport class ArcShape {\r\n    cx = 0;\r\n    cy = 0;\r\n    r = 0;\r\n    startAngle = 0;\r\n    endAngle = Math.PI * 2\r\n    clockwise? = true\r\n}\r\n\r\nexport interface ArcProps extends PathProps {\r\n    shape?: Partial\r\n}\r\n\r\nclass Arc extends Path {\r\n\r\n    shape: ArcShape\r\n\r\n    constructor(opts?: ArcProps) {\r\n        super(opts);\r\n    }\r\n\r\n    getDefaultStyle() {\r\n        return {\r\n            stroke: '#000',\r\n            fill: null as string\r\n        };\r\n    }\r\n\r\n    getDefaultShape() {\r\n        return new ArcShape();\r\n    }\r\n\r\n    buildPath(ctx: CanvasRenderingContext2D, shape: ArcShape) {\r\n\r\n        const x = shape.cx;\r\n        const y = shape.cy;\r\n        const r = Math.max(shape.r, 0);\r\n        const startAngle = shape.startAngle;\r\n        const endAngle = shape.endAngle;\r\n        const clockwise = shape.clockwise;\r\n\r\n        const unitX = Math.cos(startAngle);\r\n        const unitY = Math.sin(startAngle);\r\n\r\n        ctx.moveTo(unitX * r + x, unitY * r + y);\r\n        ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\r\n    }\r\n}\r\n\r\nArc.prototype.type = 'arc';\r\n\r\nexport default Arc;","/**\r\n * 贝塞尔曲线\r\n */\r\n\r\nimport Path, { PathProps } from '../Path';\r\nimport * as vec2 from '../../core/vector';\r\nimport {\r\n    quadraticSubdivide,\r\n    cubicSubdivide,\r\n    quadraticAt,\r\n    cubicAt,\r\n    quadraticDerivativeAt,\r\n    cubicDerivativeAt\r\n} from '../../core/curve';\r\n\r\nconst out: number[] = [];\r\n\r\nexport class BezierCurveShape {\r\n    x1 = 0\r\n    y1 = 0\r\n    x2 = 0\r\n    y2 = 0\r\n    cpx1 = 0\r\n    cpy1 = 0\r\n    cpx2?: number\r\n    cpy2?: number\r\n    // Curve show percent, for animating\r\n    percent = 1\r\n}\r\n\r\nfunction someVectorAt(shape: BezierCurveShape, t: number, isTangent: boolean) {\r\n    const cpx2 = shape.cpx2;\r\n    const cpy2 = shape.cpy2;\r\n    if (cpx2 != null || cpy2 != null) {\r\n        return [\r\n            (isTangent ? cubicDerivativeAt : cubicAt)(shape.x1, shape.cpx1, shape.cpx2, shape.x2, t),\r\n            (isTangent ? cubicDerivativeAt : cubicAt)(shape.y1, shape.cpy1, shape.cpy2, shape.y2, t)\r\n        ];\r\n    }\r\n    else {\r\n        return [\r\n            (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.x1, shape.cpx1, shape.x2, t),\r\n            (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.y1, shape.cpy1, shape.y2, t)\r\n        ];\r\n    }\r\n}\r\n\r\nexport interface BezierCurveProps extends PathProps {\r\n    shape?: Partial\r\n}\r\nclass BezierCurve extends Path {\r\n\r\n    shape: BezierCurveShape\r\n\r\n    constructor(opts?: BezierCurveProps) {\r\n        super(opts);\r\n    }\r\n\r\n    getDefaultStyle() {\r\n        return {\r\n            stroke: '#000',\r\n            fill: null as string\r\n        };\r\n    }\r\n\r\n    getDefaultShape() {\r\n        return new BezierCurveShape();\r\n    }\r\n\r\n    buildPath(ctx: CanvasRenderingContext2D, shape: BezierCurveShape) {\r\n        let x1 = shape.x1;\r\n        let y1 = shape.y1;\r\n        let x2 = shape.x2;\r\n        let y2 = shape.y2;\r\n        let cpx1 = shape.cpx1;\r\n        let cpy1 = shape.cpy1;\r\n        let cpx2 = shape.cpx2;\r\n        let cpy2 = shape.cpy2;\r\n        let percent = shape.percent;\r\n        if (percent === 0) {\r\n            return;\r\n        }\r\n\r\n        ctx.moveTo(x1, y1);\r\n\r\n        if (cpx2 == null || cpy2 == null) {\r\n            if (percent < 1) {\r\n                quadraticSubdivide(x1, cpx1, x2, percent, out);\r\n                cpx1 = out[1];\r\n                x2 = out[2];\r\n                quadraticSubdivide(y1, cpy1, y2, percent, out);\r\n                cpy1 = out[1];\r\n                y2 = out[2];\r\n            }\r\n\r\n            ctx.quadraticCurveTo(\r\n                cpx1, cpy1,\r\n                x2, y2\r\n            );\r\n        }\r\n        else {\r\n            if (percent < 1) {\r\n                cubicSubdivide(x1, cpx1, cpx2, x2, percent, out);\r\n                cpx1 = out[1];\r\n                cpx2 = out[2];\r\n                x2 = out[3];\r\n                cubicSubdivide(y1, cpy1, cpy2, y2, percent, out);\r\n                cpy1 = out[1];\r\n                cpy2 = out[2];\r\n                y2 = out[3];\r\n            }\r\n            ctx.bezierCurveTo(\r\n                cpx1, cpy1,\r\n                cpx2, cpy2,\r\n                x2, y2\r\n            );\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get point at percent\r\n     */\r\n    pointAt(t: number) {\r\n        return someVectorAt(this.shape, t, false);\r\n    }\r\n\r\n    /**\r\n     * Get tangent at percent\r\n     */\r\n    tangentAt(t: number) {\r\n        const p = someVectorAt(this.shape, t, true);\r\n        return vec2.normalize(p, p);\r\n    }\r\n};\r\n\r\nBezierCurve.prototype.type = 'bezier-curve';\r\n\r\nexport default BezierCurve;\r\n","/**\r\n * 水滴形状\r\n */\r\n\r\nimport Path, { PathProps } from '../Path';\r\n\r\nexport class DropletShape {\r\n    cx = 0\r\n    cy = 0\r\n    width = 0\r\n    height = 0\r\n}\r\n\r\nexport interface DropletProps extends PathProps {\r\n    shape?: Partial\r\n}\r\nclass Droplet extends Path {\r\n\r\n    shape: DropletShape\r\n\r\n    constructor(opts?: DropletProps) {\r\n        super(opts);\r\n    }\r\n\r\n    getDefaultShape() {\r\n        return new DropletShape();\r\n    }\r\n\r\n    buildPath(ctx: CanvasRenderingContext2D, shape: DropletShape) {\r\n        const x = shape.cx;\r\n        const y = shape.cy;\r\n        const a = shape.width;\r\n        const b = shape.height;\r\n\r\n        ctx.moveTo(x, y + a);\r\n        ctx.bezierCurveTo(\r\n            x + a,\r\n            y + a,\r\n            x + a * 3 / 2,\r\n            y - a / 3,\r\n            x,\r\n            y - b\r\n        );\r\n        ctx.bezierCurveTo(\r\n            x - a * 3 / 2,\r\n            y - a / 3,\r\n            x - a,\r\n            y + a,\r\n            x,\r\n            y + a\r\n        );\r\n        ctx.closePath();\r\n    }\r\n}\r\n\r\nDroplet.prototype.type = 'droplet';\r\n\r\nexport default Droplet;\r\n","/**\r\n * 心形\r\n */\r\n\r\nimport Path, { PathProps } from '../Path';\r\n\r\nexport class HeartShape {\r\n    cx = 0\r\n    cy = 0\r\n    width = 0\r\n    height = 0\r\n}\r\n\r\nexport interface HeartProps extends PathProps {\r\n    shape?: Partial\r\n}\r\nclass Heart extends Path {\r\n\r\n    shape: HeartShape\r\n\r\n    constructor(opts?: HeartProps) {\r\n        super(opts);\r\n    }\r\n\r\n    getDefaultShape() {\r\n        return new HeartShape();\r\n    }\r\n\r\n    buildPath(ctx: CanvasRenderingContext2D, shape: HeartShape) {\r\n        const x = shape.cx;\r\n        const y = shape.cy;\r\n        const a = shape.width;\r\n        const b = shape.height;\r\n        ctx.moveTo(x, y);\r\n        ctx.bezierCurveTo(\r\n            x + a / 2, y - b * 2 / 3,\r\n            x + a * 2, y + b / 3,\r\n            x, y + b\r\n        );\r\n        ctx.bezierCurveTo(\r\n            x - a * 2, y + b / 3,\r\n            x - a / 2, y - b * 2 / 3,\r\n            x, y\r\n        );\r\n    }\r\n}\r\n\r\n\r\nHeart.prototype.type = 'heart';\r\n\r\nexport default Heart;","/**\r\n * 正多边形\r\n */\r\n\r\nimport Path, { PathProps } from '../Path';\r\n\r\nconst PI = Math.PI;\r\nconst sin = Math.sin;\r\nconst cos = Math.cos;\r\n\r\nexport class IsogonShape {\r\n    x = 0\r\n    y = 0\r\n    r = 0\r\n    n = 0\r\n}\r\n\r\nexport interface IsogonProps extends PathProps {\r\n    shape?: Partial\r\n}\r\nclass Isogon extends Path {\r\n\r\n    shape: IsogonShape\r\n\r\n    constructor(opts?: IsogonProps) {\r\n        super(opts);\r\n    }\r\n\r\n    getDefaultShape() {\r\n        return new IsogonShape();\r\n    }\r\n\r\n    buildPath(ctx: CanvasRenderingContext2D, shape: IsogonShape) {\r\n        const n = shape.n;\r\n        if (!n || n < 2) {\r\n            return;\r\n        }\r\n\r\n        const x = shape.x;\r\n        const y = shape.y;\r\n        const r = shape.r;\r\n\r\n        const dStep = 2 * PI / n;\r\n        let deg = -PI / 2;\r\n\r\n        ctx.moveTo(x + r * cos(deg), y + r * sin(deg));\r\n        for (let i = 0, end = n - 1; i < end; i++) {\r\n            deg += dStep;\r\n            ctx.lineTo(x + r * cos(deg), y + r * sin(deg));\r\n        }\r\n\r\n        ctx.closePath();\r\n\r\n        return;\r\n    }\r\n}\r\n\r\nIsogon.prototype.type = 'isogon';\r\n\r\nexport default Isogon;\r\n","/**\r\n * 圆环\r\n */\r\n\r\nimport Path, { PathProps } from '../Path';\r\n\r\nexport class RingShape {\r\n    cx = 0\r\n    cy = 0\r\n    r = 0\r\n    r0 = 0\r\n}\r\n\r\nexport interface RingProps extends PathProps {\r\n    shape?: Partial\r\n}\r\nclass Ring extends Path {\r\n\r\n    shape: RingShape\r\n\r\n    constructor(opts?: RingProps) {\r\n        super(opts);\r\n    }\r\n\r\n    getDefaultShape() {\r\n        return new RingShape();\r\n    }\r\n\r\n    buildPath(ctx: CanvasRenderingContext2D, shape: RingShape) {\r\n        const x = shape.cx;\r\n        const y = shape.cy;\r\n        const PI2 = Math.PI * 2;\r\n        ctx.moveTo(x + shape.r, y);\r\n        ctx.arc(x, y, shape.r, 0, PI2, false);\r\n        ctx.moveTo(x + shape.r0, y);\r\n        ctx.arc(x, y, shape.r0, 0, PI2, true);\r\n    }\r\n}\r\n\r\nRing.prototype.type = 'ring';\r\nexport default Ring;","/**\r\n * 玫瑰线\r\n * @module zrender/graphic/shape/Rose\r\n */\r\n\r\nimport Path, { PathProps } from '../Path';\r\n\r\nconst sin = Math.sin;\r\nconst cos = Math.cos;\r\nconst radian = Math.PI / 180;\r\n\r\nexport class RoseShape {\r\n    cx = 0\r\n    cy = 0\r\n    r: number[] = []\r\n    k = 0\r\n    n = 1\r\n}\r\n\r\nexport interface RoseProps extends PathProps {\r\n    shape?: Partial\r\n}\r\nclass Rose extends Path {\r\n\r\n    shape: RoseShape\r\n\r\n    constructor(opts?: RoseProps) {\r\n        super(opts);\r\n    }\r\n\r\n    getDefaultStyle() {\r\n        return {\r\n            stroke: '#000',\r\n            fill: null as string\r\n        };\r\n    }\r\n\r\n    getDefaultShape() {\r\n        return new RoseShape();\r\n    }\r\n\r\n\r\n    buildPath(ctx: CanvasRenderingContext2D, shape: RoseShape) {\r\n        const R = shape.r;\r\n        const k = shape.k;\r\n        const n = shape.n;\r\n        const x0 = shape.cx;\r\n        const y0 = shape.cy;\r\n        let x;\r\n        let y;\r\n        let r;\r\n\r\n\r\n        ctx.moveTo(x0, y0);\r\n\r\n        for (let i = 0, len = R.length; i < len; i++) {\r\n            r = R[i];\r\n\r\n            for (let j = 0; j <= 360 * n; j++) {\r\n                x = r\r\n                        * sin(k / n * j % 360 * radian)\r\n                        * cos(j * radian)\r\n                        + x0;\r\n                y = r\r\n                        * sin(k / n * j % 360 * radian)\r\n                        * sin(j * radian)\r\n                        + y0;\r\n                ctx.lineTo(x, y);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nRose.prototype.type = 'rose';\r\n\r\nexport default Rose;","/**\r\n * n角星(n>3)\r\n * @module zrender/graphic/shape/Star\r\n */\r\n\r\nimport Path, { PathProps } from '../Path';\r\n\r\nconst PI = Math.PI;\r\nconst cos = Math.cos;\r\nconst sin = Math.sin;\r\n\r\nexport class StarShape {\r\n    cx = 0\r\n    cy = 0\r\n    n = 3\r\n    r0: number\r\n    r = 0\r\n}\r\n\r\nexport interface StarProps extends PathProps {\r\n    shape?: Partial\r\n}\r\nclass Star extends Path {\r\n\r\n    shape: StarShape\r\n\r\n    constructor(opts?: StarProps) {\r\n        super(opts);\r\n    }\r\n\r\n    getDefaultShape() {\r\n        return new StarShape();\r\n    }\r\n\r\n    buildPath(ctx: CanvasRenderingContext2D, shape: StarShape) {\r\n\r\n        const n = shape.n;\r\n        if (!n || n < 2) {\r\n            return;\r\n        }\r\n\r\n        const x = shape.cx;\r\n        const y = shape.cy;\r\n        const r = shape.r;\r\n        let r0 = shape.r0;\r\n\r\n        // 如果未指定内部顶点外接圆半径,则自动计算\r\n        if (r0 == null) {\r\n            r0 = n > 4\r\n                // 相隔的外部顶点的连线的交点,\r\n                // 被取为内部交点,以此计算r0\r\n                ? r * cos(2 * PI / n) / cos(PI / n)\r\n                // 二三四角星的特殊处理\r\n                : r / 3;\r\n        }\r\n\r\n        const dStep = PI / n;\r\n        let deg = -PI / 2;\r\n        const xStart = x + r * cos(deg);\r\n        const yStart = y + r * sin(deg);\r\n        deg += dStep;\r\n\r\n        // 记录边界点,用于判断inside\r\n        ctx.moveTo(xStart, yStart);\r\n        for (let i = 0, end = n * 2 - 1, ri; i < end; i++) {\r\n            ri = i % 2 === 0 ? r0 : r;\r\n            ctx.lineTo(x + ri * cos(deg), y + ri * sin(deg));\r\n            deg += dStep;\r\n        }\r\n\r\n        ctx.closePath();\r\n    }\r\n}\r\n\r\nStar.prototype.type = 'star';\r\nexport default Star;","/**\r\n * 内外旋轮曲线\r\n * @module zrender/graphic/shape/Trochold\r\n */\r\n\r\nimport Path, { PathProps } from '../Path';\r\n\r\nconst cos = Math.cos;\r\nconst sin = Math.sin;\r\n\r\nexport class TrochoidShape {\r\n    cx = 0\r\n    cy = 0\r\n    r = 0\r\n    r0 = 0\r\n    d = 0\r\n    location = 'out'\r\n}\r\n\r\nexport interface TrochoidProps extends PathProps {\r\n    shape?: Partial\r\n}\r\nclass Trochoid extends Path {\r\n\r\n    shape: TrochoidShape\r\n\r\n    constructor(opts?: TrochoidProps) {\r\n        super(opts);\r\n    }\r\n\r\n    getDefaultStyle() {\r\n        return {\r\n            stroke: '#000',\r\n            fill: null as string\r\n        };\r\n    }\r\n\r\n    getDefaultShape() {\r\n        return new TrochoidShape();\r\n    }\r\n\r\n    buildPath(ctx: CanvasRenderingContext2D, shape: TrochoidShape) {\r\n        const R = shape.r;\r\n        const r = shape.r0;\r\n        const d = shape.d;\r\n        const offsetX = shape.cx;\r\n        const offsetY = shape.cy;\r\n        const delta = shape.location === 'out' ? 1 : -1;\r\n        let x1;\r\n        let y1;\r\n        let x2;\r\n        let y2;\r\n\r\n        if (shape.location && R <= r) {\r\n            return;\r\n        }\r\n\r\n        let num = 0;\r\n        let i = 1;\r\n        let theta;\r\n\r\n        x1 = (R + delta * r) * cos(0)\r\n            - delta * d * cos(0) + offsetX;\r\n        y1 = (R + delta * r) * sin(0)\r\n            - d * sin(0) + offsetY;\r\n\r\n        ctx.moveTo(x1, y1);\r\n\r\n        // 计算结束时的i\r\n        do {\r\n            num++;\r\n        }\r\n        while ((r * num) % (R + delta * r) !== 0);\r\n\r\n        do {\r\n            theta = Math.PI / 180 * i;\r\n            x2 = (R + delta * r) * cos(theta)\r\n                    - delta * d * cos((R / r + delta) * theta)\r\n                    + offsetX;\r\n            y2 = (R + delta * r) * sin(theta)\r\n                    - d * sin((R / r + delta) * theta)\r\n                    + offsetY;\r\n            ctx.lineTo(x2, y2);\r\n            i++;\r\n        }\r\n        while (i <= (r * num) / (R + delta * r) * 360);\r\n\r\n    }\r\n}\r\n\r\nTrochoid.prototype.type = 'trochoid';\r\nexport default Trochoid;","import { ImageLike } from '../core/types';\r\nimport { SVGVNode } from '../svg/core';\r\n\r\ntype ImagePatternRepeat = 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat'\r\n\r\nexport interface PatternObjectBase {\r\n    id?: number\r\n    // type is now unused, so make it optional\r\n    type?: 'pattern'\r\n\r\n    x?: number\r\n    y?: number\r\n    rotation?: number\r\n    scaleX?: number\r\n    scaleY?: number\r\n}\r\n\r\nexport interface ImagePatternObject extends PatternObjectBase {\r\n    image: ImageLike | string\r\n    repeat?: ImagePatternRepeat\r\n\r\n    /**\r\n     * Width and height of image.\r\n     * `imageWidth` and `imageHeight` are only used in svg-ssr renderer.\r\n     * Because we can't get the size of image in svg-ssr renderer.\r\n     * They need to be give explictly.\r\n     */\r\n    imageWidth?: number\r\n    imageHeight?: number\r\n}\r\n\r\nexport interface InnerImagePatternObject extends ImagePatternObject {\r\n    // Cached image. Which is created in the canvas painter.\r\n    __image?: ImageLike\r\n}\r\n\r\nexport interface SVGPatternObject extends PatternObjectBase {\r\n    /**\r\n     * svg vnode can only be used in svg renderer currently.\r\n     * svgWidth, svgHeight defines width and height used for pattern.\r\n     */\r\n    svgElement?: SVGVNode\r\n    svgWidth?: number\r\n    svgHeight?: number\r\n}\r\n\r\nexport type PatternObject = ImagePatternObject | SVGPatternObject\r\n\r\nclass Pattern {\r\n\r\n    type: 'pattern'\r\n\r\n    image: ImageLike | string\r\n    /**\r\n     * svg element can only be used in svg renderer currently.\r\n     *\r\n     * Will be string if using SSR rendering.\r\n     */\r\n    svgElement: SVGElement | string\r\n\r\n    repeat: ImagePatternRepeat\r\n\r\n    x: number\r\n    y: number\r\n    rotation: number\r\n    scaleX: number\r\n    scaleY: number\r\n\r\n    constructor(image: ImageLike | string, repeat: ImagePatternRepeat) {\r\n        // Should do nothing more in this constructor. Because gradient can be\r\n        // declard by `color: {image: ...}`, where this constructor will not be called.\r\n        this.image = image;\r\n        this.repeat = repeat;\r\n\r\n        this.x = 0;\r\n        this.y = 0;\r\n        this.rotation = 0;\r\n        this.scaleX = 1;\r\n        this.scaleY = 1;\r\n    }\r\n}\r\n\r\nexport default Pattern;","/*\r\n* Licensed to the Apache Software Foundation (ASF) under one\r\n* or more contributor license agreements.  See the NOTICE file\r\n* distributed with this work for additional information\r\n* regarding copyright ownership.  The ASF licenses this file\r\n* to you under the Apache License, Version 2.0 (the\r\n* \"License\"); you may not use this file except in compliance\r\n* with the License.  You may obtain a copy of the License at\r\n*\r\n*   http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing,\r\n* software distributed under the License is distributed on an\r\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n* KIND, either express or implied.  See the License for the\r\n* specific language governing permissions and limitations\r\n* under the License.\r\n*/\r\n\r\nimport Point, { PointLike } from './Point';\r\nimport BoundingRect from './BoundingRect';\r\nimport { MatrixArray } from './matrix';\r\n\r\nconst extent = [0, 0];\r\nconst extent2 = [0, 0];\r\n\r\nconst minTv = new Point();\r\nconst maxTv = new Point();\r\n\r\nclass OrientedBoundingRect {\r\n\r\n    // lt, rt, rb, lb\r\n    private _corners: Point[] = [];\r\n\r\n    private _axes: Point[] = [];\r\n\r\n    private _origin: number[] = [0, 0];\r\n\r\n    constructor(rect?: BoundingRect, transform?: MatrixArray) {\r\n        for (let i = 0; i < 4; i++) {\r\n            this._corners[i] = new Point();\r\n        }\r\n        for (let i = 0; i < 2; i++) {\r\n            this._axes[i] = new Point();\r\n        }\r\n\r\n        if (rect) {\r\n            this.fromBoundingRect(rect, transform);\r\n        }\r\n    }\r\n\r\n    fromBoundingRect(rect: BoundingRect, transform?: MatrixArray) {\r\n        const corners = this._corners;\r\n        const axes = this._axes;\r\n        const x = rect.x;\r\n        const y = rect.y;\r\n        const x2 = x + rect.width;\r\n        const y2 = y + rect.height;\r\n        corners[0].set(x, y);\r\n        corners[1].set(x2, y);\r\n        corners[2].set(x2, y2);\r\n        corners[3].set(x, y2);\r\n\r\n        if (transform) {\r\n            for (let i = 0; i < 4; i++) {\r\n                corners[i].transform(transform);\r\n            }\r\n        }\r\n\r\n        // Calculate axes\r\n        Point.sub(axes[0], corners[1], corners[0]);\r\n        Point.sub(axes[1], corners[3], corners[0]);\r\n        axes[0].normalize();\r\n        axes[1].normalize();\r\n\r\n        // Calculate projected origin\r\n        for (let i = 0; i < 2; i++) {\r\n            this._origin[i] = axes[i].dot(corners[0]);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * If intersect with another OBB\r\n     * @param other Bounding rect to be intersected with\r\n     * @param mtv Calculated .\r\n     *  If it's not overlapped. it means needs to move given rect with Maximum Translation Vector to be overlapped.\r\n     *  Else it means needs to move given rect with Minimum Translation Vector to be not overlapped.\r\n     */\r\n    intersect(other: OrientedBoundingRect, mtv?: PointLike): boolean {\r\n        // OBB collision with SAT method\r\n\r\n        let overlapped = true;\r\n        const noMtv = !mtv;\r\n        minTv.set(Infinity, Infinity);\r\n        maxTv.set(0, 0);\r\n        // Check two axes for both two obb.\r\n        if (!this._intersectCheckOneSide(this, other, minTv, maxTv, noMtv, 1)) {\r\n            overlapped = false;\r\n            if (noMtv) {\r\n                // Early return if no need to calculate mtv\r\n                return overlapped;\r\n            }\r\n        }\r\n        if (!this._intersectCheckOneSide(other, this, minTv, maxTv, noMtv, -1)) {\r\n            overlapped = false;\r\n            if (noMtv) {\r\n                return overlapped;\r\n            }\r\n        }\r\n\r\n        if (!noMtv) {\r\n            Point.copy(mtv, overlapped ? minTv : maxTv);\r\n        }\r\n\r\n        return overlapped;\r\n    }\r\n\r\n\r\n    private _intersectCheckOneSide(\r\n        self: OrientedBoundingRect,\r\n        other: OrientedBoundingRect,\r\n        minTv: Point,\r\n        maxTv: Point,\r\n        noMtv: boolean,\r\n        inverse: 1 | -1\r\n    ): boolean {\r\n        let overlapped = true;\r\n        for (let i = 0; i < 2; i++) {\r\n            const axis = this._axes[i];\r\n            this._getProjMinMaxOnAxis(i, self._corners, extent);\r\n            this._getProjMinMaxOnAxis(i, other._corners, extent2);\r\n\r\n            // Not overlap on the any axis.\r\n            if (extent[1] < extent2[0] || extent[0] > extent2[1]) {\r\n                overlapped = false;\r\n                if (noMtv) {\r\n                    return overlapped;\r\n                }\r\n                const dist0 = Math.abs(extent2[0] - extent[1]);\r\n                const dist1 = Math.abs(extent[0] - extent2[1]);\r\n\r\n                // Find longest distance of all axes.\r\n                if (Math.min(dist0, dist1) > maxTv.len()) {\r\n                    if (dist0 < dist1) {\r\n                        Point.scale(maxTv, axis, -dist0 * inverse);\r\n                    }\r\n                    else {\r\n                        Point.scale(maxTv, axis, dist1 * inverse);\r\n                    }\r\n                }\r\n            }\r\n            else if (minTv) {\r\n                const dist0 = Math.abs(extent2[0] - extent[1]);\r\n                const dist1 = Math.abs(extent[0] - extent2[1]);\r\n\r\n                if (Math.min(dist0, dist1) < minTv.len()) {\r\n                    if (dist0 < dist1) {\r\n                        Point.scale(minTv, axis, dist0 * inverse);\r\n                    }\r\n                    else {\r\n                        Point.scale(minTv, axis, -dist1 * inverse);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        return overlapped;\r\n    }\r\n\r\n    private _getProjMinMaxOnAxis(dim: number, corners: Point[], out: number[]) {\r\n        const axis = this._axes[dim];\r\n        const origin = this._origin;\r\n        const proj = corners[0].dot(axis) + origin[dim];\r\n        let min = proj;\r\n        let max = proj;\r\n\r\n        for (let i = 1; i < corners.length; i++) {\r\n            const proj = corners[i].dot(axis) + origin[dim];\r\n            min = Math.min(proj, min);\r\n            max = Math.max(proj, max);\r\n        }\r\n\r\n        out[0] = min;\r\n        out[1] = max;\r\n    }\r\n}\r\n\r\nexport default OrientedBoundingRect;","import type { ZRenderType } from '../zrender';\r\nimport type CanvasPainter from '../canvas/Painter';\r\nimport type BoundingRect from '../core/BoundingRect';\r\nimport { extend } from '../core/util';\r\n\r\nclass DebugRect {\r\n\r\n    dom: HTMLDivElement\r\n\r\n    private _hideTimeout: number\r\n\r\n    constructor(style: Opts['style']) {\r\n        const dom = this.dom = document.createElement('div');\r\n        dom.className = 'ec-debug-dirty-rect';\r\n\r\n        style = extend({}, style);\r\n        extend(style, {\r\n            backgroundColor: 'rgba(0, 0, 255, 0.2)',\r\n            border: '1px solid #00f'\r\n        });\r\n        dom.style.cssText = `\r\nposition: absolute;\r\nopacity: 0;\r\ntransition: opacity 0.5s linear;\r\npointer-events: none;\r\n`;\r\n\r\n        for (let key in style) {\r\n            if (style.hasOwnProperty(key)) {\r\n                (dom.style as any)[key] = (style as any)[key];\r\n            }\r\n        }\r\n    }\r\n\r\n    update(rect: BoundingRect) {\r\n        const domStyle = this.dom.style;\r\n        domStyle.width = rect.width + 'px';\r\n        domStyle.height = rect.height + 'px';\r\n        domStyle.left = rect.x + 'px';\r\n        domStyle.top = rect.y + 'px';\r\n    }\r\n\r\n    hide() {\r\n        this.dom.style.opacity = '0';\r\n    }\r\n    show(autoHideDelay?: number) {\r\n        clearTimeout(this._hideTimeout);\r\n\r\n        this.dom.style.opacity = '1';\r\n\r\n        // Auto hide after 2 second\r\n        this._hideTimeout = setTimeout(() => {\r\n            this.hide();\r\n        }, autoHideDelay || 1000) as unknown as number;\r\n    }\r\n\r\n}\r\n\r\ninterface Opts {\r\n    style?: {\r\n        backgroundColor?: string\r\n        color?: string\r\n    }\r\n\r\n    autoHideDelay?: number\r\n}\r\n\r\nexport default function showDebugDirtyRect(zr: ZRenderType, opts?: Opts) {\r\n    opts = opts || {};\r\n    const painter = zr.painter as CanvasPainter;\r\n    if (!painter.getLayers) {\r\n        throw new Error('Debug dirty rect can only been used on canvas renderer.');\r\n    }\r\n    if (painter.isSingleCanvas()) {\r\n        throw new Error('Debug dirty rect can only been used on zrender inited with container.');\r\n    }\r\n    const debugViewRoot = document.createElement('div');\r\n    debugViewRoot.style.cssText = `\r\nposition:absolute;\r\nleft:0;\r\ntop:0;\r\nright:0;\r\nbottom:0;\r\npointer-events:none;\r\n`;\r\n    debugViewRoot.className = 'ec-debug-dirty-rect-container';\r\n\r\n    const debugRects: DebugRect[] = [];\r\n    const dom = zr.dom;\r\n    dom.appendChild(debugViewRoot);\r\n    const computedStyle = getComputedStyle(dom);\r\n    if (computedStyle.position === 'static') {\r\n        dom.style.position = 'relative';\r\n    }\r\n\r\n    zr.on('rendered', function () {\r\n        if (painter.getLayers) {\r\n            let idx = 0;\r\n            painter.eachBuiltinLayer((layer) => {\r\n                if (!layer.debugGetPaintRects) {\r\n                    return;\r\n                }\r\n                const paintRects = layer.debugGetPaintRects();\r\n                for (let i = 0; i < paintRects.length; i++) {\r\n                    if (!paintRects[i].width || !paintRects[i].height) {\r\n                        continue;\r\n                    }\r\n\r\n                    if (!debugRects[idx]) {\r\n                        debugRects[idx] = new DebugRect(opts.style);\r\n                        debugViewRoot.appendChild(debugRects[idx].dom);\r\n                    }\r\n                    debugRects[idx].show(opts.autoHideDelay);\r\n                    debugRects[idx].update(paintRects[i]);\r\n                    idx++;\r\n                }\r\n            });\r\n            for (let i = idx; i < debugRects.length; i++) {\r\n                debugRects[i].hide();\r\n            }\r\n        }\r\n    });\r\n}","import { LinearGradientObject } from '../graphic/LinearGradient';\r\nimport { RadialGradientObject } from '../graphic/RadialGradient';\r\nimport { GradientObject } from '../graphic/Gradient';\r\nimport { RectLike } from '../core/BoundingRect';\r\nimport Path from '../graphic/Path';\r\n\r\nfunction isSafeNum(num: number) {\r\n    // NaN、Infinity、undefined、'xx'\r\n    return isFinite(num);\r\n}\r\n\r\nexport function createLinearGradient(\r\n    this: void,\r\n    ctx: CanvasRenderingContext2D,\r\n    obj: LinearGradientObject,\r\n    rect: RectLike\r\n) {\r\n    let x = obj.x == null ? 0 : obj.x;\r\n    let x2 = obj.x2 == null ? 1 : obj.x2;\r\n    let y = obj.y == null ? 0 : obj.y;\r\n    let y2 = obj.y2 == null ? 0 : obj.y2;\r\n\r\n    if (!obj.global) {\r\n        x = x * rect.width + rect.x;\r\n        x2 = x2 * rect.width + rect.x;\r\n        y = y * rect.height + rect.y;\r\n        y2 = y2 * rect.height + rect.y;\r\n    }\r\n\r\n    // Fix NaN when rect is Infinity\r\n    x = isSafeNum(x) ? x : 0;\r\n    x2 = isSafeNum(x2) ? x2 : 1;\r\n    y = isSafeNum(y) ? y : 0;\r\n    y2 = isSafeNum(y2) ? y2 : 0;\r\n\r\n    const canvasGradient = ctx.createLinearGradient(x, y, x2, y2);\r\n\r\n    return canvasGradient;\r\n}\r\n\r\nexport function createRadialGradient(\r\n    this: void,\r\n    ctx: CanvasRenderingContext2D,\r\n    obj: RadialGradientObject,\r\n    rect: RectLike\r\n) {\r\n    const width = rect.width;\r\n    const height = rect.height;\r\n    const min = Math.min(width, height);\r\n\r\n    let x = obj.x == null ? 0.5 : obj.x;\r\n    let y = obj.y == null ? 0.5 : obj.y;\r\n    let r = obj.r == null ? 0.5 : obj.r;\r\n\r\n    if (!obj.global) {\r\n        x = x * width + rect.x;\r\n        y = y * height + rect.y;\r\n        r = r * min;\r\n    }\r\n\r\n    x = isSafeNum(x) ? x : 0.5;\r\n    y = isSafeNum(y) ? y : 0.5;\r\n    r = r >= 0 && isSafeNum(r) ? r : 0.5;\r\n\r\n    const canvasGradient = ctx.createRadialGradient(x, y, 0, x, y, r);\r\n\r\n    return canvasGradient;\r\n}\r\n\r\nexport function getCanvasGradient(this: void, ctx: CanvasRenderingContext2D, obj: GradientObject, rect: RectLike) {\r\n    // TODO Cache?\r\n    const canvasGradient = obj.type === 'radial'\r\n        ? createRadialGradient(ctx, obj as RadialGradientObject, rect)\r\n        : createLinearGradient(ctx, obj as LinearGradientObject, rect);\r\n\r\n    const colorStops = obj.colorStops;\r\n    for (let i = 0; i < colorStops.length; i++) {\r\n        canvasGradient.addColorStop(\r\n            colorStops[i].offset, colorStops[i].color\r\n        );\r\n    }\r\n    return canvasGradient;\r\n}\r\n\r\nexport function isClipPathChanged(clipPaths: Path[], prevClipPaths: Path[]): boolean {\r\n    // displayable.__clipPaths can only be `null`/`undefined` or an non-empty array.\r\n    if (clipPaths === prevClipPaths || (!clipPaths && !prevClipPaths)) {\r\n        return false;\r\n    }\r\n    if (!clipPaths || !prevClipPaths || (clipPaths.length !== prevClipPaths.length)) {\r\n        return true;\r\n    }\r\n    for (let i = 0; i < clipPaths.length; i++) {\r\n        if (clipPaths[i] !== prevClipPaths[i]) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction parseInt10(val: string) {\r\n    return parseInt(val, 10);\r\n}\r\nexport function getSize(\r\n    root: HTMLElement,\r\n    whIdx: number,\r\n    opts: { width?: number | string, height?: number | string}\r\n) {\r\n\r\n    const wh = ['width', 'height'][whIdx] as 'width' | 'height';\r\n    const cwh = ['clientWidth', 'clientHeight'][whIdx] as 'clientWidth' | 'clientHeight';\r\n    const plt = ['paddingLeft', 'paddingTop'][whIdx] as 'paddingLeft' | 'paddingTop';\r\n    const prb = ['paddingRight', 'paddingBottom'][whIdx] as 'paddingRight' | 'paddingBottom';\r\n\r\n    if (opts[wh] != null && opts[wh] !== 'auto') {\r\n        return parseFloat(opts[wh] as string);\r\n    }\r\n\r\n    // IE8 does not support getComputedStyle, but it use VML.\r\n    const stl = document.defaultView.getComputedStyle(root);\r\n\r\n    return (\r\n        (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh]))\r\n        - (parseInt10(stl[plt]) || 0)\r\n        - (parseInt10(stl[prb]) || 0)\r\n    ) | 0;\r\n}","import { isArray, isNumber, map } from '../core/util';\r\nimport Path from '../graphic/Path';\r\nimport TSpan from '../graphic/TSpan';\r\n\r\nexport function normalizeLineDash(lineType: any, lineWidth?: number): number[] | false {\r\n    if (!lineType || lineType === 'solid' || !(lineWidth > 0)) {\r\n        return null;\r\n    }\r\n    return lineType === 'dashed'\r\n        ? [4 * lineWidth, 2 * lineWidth]\r\n        : lineType === 'dotted'\r\n            ? [lineWidth]\r\n            : isNumber(lineType)\r\n                ? [lineType] : isArray(lineType) ? lineType : null;\r\n}\r\nexport function getLineDash(el: Path | TSpan): [number[] | false, number] {\r\n    const style = el.style;\r\n\r\n    let lineDash = style.lineDash && style.lineWidth > 0 && normalizeLineDash(style.lineDash, style.lineWidth);\r\n    let lineDashOffset = style.lineDashOffset;\r\n\r\n    if (lineDash) {\r\n        const lineScale = (style.strokeNoScale && el.getLineScale) ? el.getLineScale() : 1;\r\n        if (lineScale && lineScale !== 1) {\r\n            lineDash = map(lineDash, function (rawVal) {\r\n                return rawVal / lineScale;\r\n            });\r\n            lineDashOffset /= lineScale;\r\n        }\r\n    }\r\n    return [lineDash, lineDashOffset];\r\n}","import Displayable, { DEFAULT_COMMON_STYLE } from '../graphic/Displayable';\nimport PathProxy from '../core/PathProxy';\nimport { GradientObject } from '../graphic/Gradient';\nimport { ImagePatternObject, InnerImagePatternObject } from '../graphic/Pattern';\nimport { LinearGradientObject } from '../graphic/LinearGradient';\nimport { RadialGradientObject } from '../graphic/RadialGradient';\nimport { ZRCanvasRenderingContext } from '../core/types';\nimport { createOrUpdateImage, isImageReady } from '../graphic/helper/image';\nimport { getCanvasGradient, isClipPathChanged } from './helper';\nimport Path, { PathStyleProps } from '../graphic/Path';\nimport ZRImage, { ImageStyleProps } from '../graphic/Image';\nimport TSpan, {TSpanStyleProps} from '../graphic/TSpan';\nimport { MatrixArray } from '../core/matrix';\nimport { RADIAN_TO_DEGREE } from '../core/util';\nimport { getLineDash } from './dashStyle';\nimport { REDRAW_BIT, SHAPE_CHANGED_BIT } from '../graphic/constants';\nimport type IncrementalDisplayable from '../graphic/IncrementalDisplayable';\nimport { DEFAULT_FONT } from '../core/platform';\n\nconst pathProxyForDraw = new PathProxy(true);\n\n// Not use el#hasStroke because style may be different.\nfunction styleHasStroke(style: PathStyleProps) {\n    const stroke = style.stroke;\n    return !(stroke == null || stroke === 'none' || !(style.lineWidth > 0));\n}\n\n// ignore lineWidth and must be string\n// Expected color but found '[' when color is gradient\nfunction isValidStrokeFillStyle(\n    strokeOrFill: PathStyleProps['stroke'] | PathStyleProps['fill']\n): strokeOrFill is string {\n    return typeof strokeOrFill === 'string' && strokeOrFill !== 'none';\n}\n\nfunction styleHasFill(style: PathStyleProps) {\n    const fill = style.fill;\n    return fill != null && fill !== 'none';\n}\nfunction doFillPath(ctx: CanvasRenderingContext2D, style: PathStyleProps) {\n    if (style.fillOpacity != null && style.fillOpacity !== 1) {\n        const originalGlobalAlpha = ctx.globalAlpha;\n        ctx.globalAlpha = style.fillOpacity * style.opacity;\n        ctx.fill();\n        // Set back globalAlpha\n        ctx.globalAlpha = originalGlobalAlpha;\n    }\n    else {\n        ctx.fill();\n    }\n}\n\nfunction doStrokePath(ctx: CanvasRenderingContext2D, style: PathStyleProps) {\n    if (style.strokeOpacity != null && style.strokeOpacity !== 1) {\n        const originalGlobalAlpha = ctx.globalAlpha;\n        ctx.globalAlpha = style.strokeOpacity * style.opacity;\n        ctx.stroke();\n        // Set back globalAlpha\n        ctx.globalAlpha = originalGlobalAlpha;\n    }\n    else {\n        ctx.stroke();\n    }\n}\n\nexport function createCanvasPattern(\n    this: void,\n    ctx: CanvasRenderingContext2D,\n    pattern: ImagePatternObject,\n    el: {dirty: () => void}\n): CanvasPattern {\n    const image = createOrUpdateImage(pattern.image, (pattern as InnerImagePatternObject).__image, el);\n    if (isImageReady(image)) {\n        const canvasPattern = ctx.createPattern(image, pattern.repeat || 'repeat');\n        if (\n            typeof DOMMatrix === 'function'\n            && canvasPattern                // image may be not ready\n            && canvasPattern.setTransform   // setTransform may not be supported in some old devices.\n        ) {\n            const matrix = new DOMMatrix();\n            matrix.translateSelf((pattern.x || 0), (pattern.y || 0));\n            matrix.rotateSelf(0, 0, (pattern.rotation || 0) * RADIAN_TO_DEGREE);\n            matrix.scaleSelf((pattern.scaleX || 1), (pattern.scaleY || 1));\n            canvasPattern.setTransform(matrix);\n        }\n        return canvasPattern;\n    }\n}\n\n// Draw Path Elements\nfunction brushPath(ctx: CanvasRenderingContext2D, el: Path, style: PathStyleProps, inBatch: boolean) {\n    let hasStroke = styleHasStroke(style);\n    let hasFill = styleHasFill(style);\n\n    const strokePercent = style.strokePercent;\n    const strokePart = strokePercent < 1;\n\n    // TODO Reduce path memory cost.\n    const firstDraw = !el.path;\n    // Create path for each element when:\n    // 1. Element has interactions.\n    // 2. Element draw part of the line.\n    if ((!el.silent || strokePart) && firstDraw) {\n        el.createPathProxy();\n    }\n\n    const path = el.path || pathProxyForDraw;\n    const dirtyFlag = el.__dirty;\n\n    if (!inBatch) {\n        const fill = style.fill;\n        const stroke = style.stroke;\n\n        const hasFillGradient = hasFill && !!(fill as GradientObject).colorStops;\n        const hasStrokeGradient = hasStroke && !!(stroke as GradientObject).colorStops;\n        const hasFillPattern = hasFill && !!(fill as ImagePatternObject).image;\n        const hasStrokePattern = hasStroke && !!(stroke as ImagePatternObject).image;\n\n        let fillGradient;\n        let strokeGradient;\n        let fillPattern;\n        let strokePattern;\n        let rect;\n        if (hasFillGradient || hasStrokeGradient) {\n            rect = el.getBoundingRect();\n        }\n\n        // Update gradient because bounding rect may changed\n        if (hasFillGradient) {\n            fillGradient = dirtyFlag\n                ? getCanvasGradient(ctx, fill as (LinearGradientObject | RadialGradientObject), rect)\n                : el.__canvasFillGradient;\n            // No need to clear cache when fill is not gradient.\n            // It will always been updated when fill changed back to gradient.\n            el.__canvasFillGradient = fillGradient;\n        }\n        if (hasStrokeGradient) {\n            strokeGradient = dirtyFlag\n                ? getCanvasGradient(ctx, stroke as (LinearGradientObject | RadialGradientObject), rect)\n                : el.__canvasStrokeGradient;\n            el.__canvasStrokeGradient = strokeGradient;\n        }\n        if (hasFillPattern) {\n            // Pattern might be null if image not ready (even created from dataURI)\n            fillPattern = (dirtyFlag || !el.__canvasFillPattern)\n                ? createCanvasPattern(ctx, fill as ImagePatternObject, el)\n                : el.__canvasFillPattern;\n            el.__canvasFillPattern = fillPattern;\n        }\n        if (hasStrokePattern) {\n            // Pattern might be null if image not ready (even created from dataURI)\n            strokePattern = (dirtyFlag || !el.__canvasStrokePattern)\n                ? createCanvasPattern(ctx, stroke as ImagePatternObject, el)\n                : el.__canvasStrokePattern;\n            el.__canvasStrokePattern = fillPattern;\n        }\n        // Use the gradient or pattern\n        if (hasFillGradient) {\n            // PENDING If may have affect the state\n            ctx.fillStyle = fillGradient;\n        }\n        else if (hasFillPattern) {\n            if (fillPattern) {  // createCanvasPattern may return false if image is not ready.\n                ctx.fillStyle = fillPattern;\n            }\n            else {\n                // Don't fill if image is not ready\n                hasFill = false;\n            }\n        }\n        if (hasStrokeGradient) {\n            ctx.strokeStyle = strokeGradient;\n        }\n        else if (hasStrokePattern) {\n            if (strokePattern) {\n                ctx.strokeStyle = strokePattern;\n            }\n            else {\n                // Don't stroke if image is not ready\n                hasStroke = false;\n            }\n        }\n    }\n\n    // Update path sx, sy\n    const scale = el.getGlobalScale();\n    path.setScale(scale[0], scale[1], el.segmentIgnoreThreshold);\n\n    let lineDash;\n    let lineDashOffset;\n    if (ctx.setLineDash && style.lineDash) {\n        [lineDash, lineDashOffset] = getLineDash(el);\n    }\n\n    let needsRebuild = true;\n\n    if (firstDraw || (dirtyFlag & SHAPE_CHANGED_BIT)) {\n        path.setDPR((ctx as any).dpr);\n        if (strokePart) {\n            // Use rebuildPath for percent stroke, so no context.\n            path.setContext(null);\n        }\n        else {\n            path.setContext(ctx);\n            needsRebuild = false;\n        }\n        path.reset();\n\n        el.buildPath(path, el.shape, inBatch);\n        path.toStatic();\n\n        // Clear path dirty flag\n        el.pathUpdated();\n    }\n\n    // Not support separate fill and stroke. For the compatibility of SVG\n    if (needsRebuild) {\n        path.rebuildPath(ctx, strokePart ? strokePercent : 1);\n    }\n\n    if (lineDash) {\n        ctx.setLineDash(lineDash);\n        ctx.lineDashOffset = lineDashOffset;\n    }\n\n    if (!inBatch) {\n        if (style.strokeFirst) {\n            if (hasStroke) {\n                doStrokePath(ctx, style);\n            }\n            if (hasFill) {\n                doFillPath(ctx, style);\n            }\n        }\n        else {\n            if (hasFill) {\n                doFillPath(ctx, style);\n            }\n            if (hasStroke) {\n                doStrokePath(ctx, style);\n            }\n        }\n    }\n\n    if (lineDash) {\n        // PENDING\n        // Remove lineDash\n        ctx.setLineDash([]);\n    }\n}\n\n// Draw Image Elements\nfunction brushImage(ctx: CanvasRenderingContext2D, el: ZRImage, style: ImageStyleProps) {\n    const image = el.__image = createOrUpdateImage(\n        style.image,\n        el.__image,\n        el,\n        el.onload\n    );\n\n    if (!image || !isImageReady(image)) {\n        return;\n    }\n\n    const x = style.x || 0;\n    const y = style.y || 0;\n    let width = el.getWidth();\n    let height = el.getHeight();\n    const aspect = image.width / image.height;\n    if (width == null && height != null) {\n        // Keep image/height ratio\n        width = height * aspect;\n    }\n    else if (height == null && width != null) {\n        height = width / aspect;\n    }\n    else if (width == null && height == null) {\n        width = image.width;\n        height = image.height;\n    }\n\n    if (style.sWidth && style.sHeight) {\n        const sx = style.sx || 0;\n        const sy = style.sy || 0;\n        ctx.drawImage(\n            image,\n            sx, sy, style.sWidth, style.sHeight,\n            x, y, width, height\n        );\n    }\n    else if (style.sx && style.sy) {\n        const sx = style.sx;\n        const sy = style.sy;\n        const sWidth = width - sx;\n        const sHeight = height - sy;\n        ctx.drawImage(\n            image,\n            sx, sy, sWidth, sHeight,\n            x, y, width, height\n        );\n    }\n    else {\n        ctx.drawImage(image, x, y, width, height);\n    }\n}\n\n// Draw Text Elements\nfunction brushText(ctx: CanvasRenderingContext2D, el: TSpan, style: TSpanStyleProps) {\n\n    let text = style.text;\n    // Convert to string\n    text != null && (text += '');\n\n    if (text) {\n        ctx.font = style.font || DEFAULT_FONT;\n        ctx.textAlign = style.textAlign;\n        ctx.textBaseline = style.textBaseline;\n\n        let lineDash;\n        let lineDashOffset;\n        if (ctx.setLineDash && style.lineDash) {\n            [lineDash, lineDashOffset] = getLineDash(el);\n        }\n\n        if (lineDash) {\n            ctx.setLineDash(lineDash);\n            ctx.lineDashOffset = lineDashOffset;\n        }\n\n        if (style.strokeFirst) {\n            if (styleHasStroke(style)) {\n                ctx.strokeText(text, style.x, style.y);\n            }\n            if (styleHasFill(style)) {\n                ctx.fillText(text, style.x, style.y);\n            }\n        }\n        else {\n            if (styleHasFill(style)) {\n                ctx.fillText(text, style.x, style.y);\n            }\n            if (styleHasStroke(style)) {\n                ctx.strokeText(text, style.x, style.y);\n            }\n        }\n\n        if (lineDash) {\n            // Remove lineDash\n            ctx.setLineDash([]);\n        }\n    }\n\n}\n\nconst SHADOW_NUMBER_PROPS = ['shadowBlur', 'shadowOffsetX', 'shadowOffsetY'] as const;\nconst STROKE_PROPS = [\n    ['lineCap', 'butt'], ['lineJoin', 'miter'], ['miterLimit', 10]\n] as const;\n\ntype AllStyleOption = PathStyleProps | TSpanStyleProps | ImageStyleProps;\n// type ShadowPropNames = typeof SHADOW_PROPS[number][0];\n// type StrokePropNames = typeof STROKE_PROPS[number][0];\n// type DrawPropNames = typeof DRAW_PROPS[number][0];\n\nfunction bindCommonProps(\n    ctx: CanvasRenderingContext2D,\n    style: AllStyleOption,\n    prevStyle: AllStyleOption,\n    forceSetAll: boolean,\n    scope: BrushScope\n): boolean {\n    let styleChanged = false;\n\n    if (!forceSetAll) {\n        prevStyle = prevStyle || {};\n\n        // Shared same style.\n        if (style === prevStyle) {\n            return false;\n        }\n    }\n    if (forceSetAll || style.opacity !== prevStyle.opacity) {\n        flushPathDrawn(ctx, scope);\n        styleChanged = true;\n        // Ensure opacity is between 0 ~ 1. Invalid opacity will lead to a failure set and use the leaked opacity from the previous.\n        const opacity = Math.max(Math.min(style.opacity, 1), 0);\n        ctx.globalAlpha = isNaN(opacity) ? DEFAULT_COMMON_STYLE.opacity : opacity;\n    }\n\n    if (forceSetAll || style.blend !== prevStyle.blend) {\n        if (!styleChanged) {\n            flushPathDrawn(ctx, scope);\n            styleChanged = true;\n        }\n        ctx.globalCompositeOperation = style.blend || DEFAULT_COMMON_STYLE.blend;\n    }\n    for (let i = 0; i < SHADOW_NUMBER_PROPS.length; i++) {\n        const propName = SHADOW_NUMBER_PROPS[i];\n        if (forceSetAll || style[propName] !== prevStyle[propName]) {\n            if (!styleChanged) {\n                flushPathDrawn(ctx, scope);\n                styleChanged = true;\n            }\n            // FIXME Invalid property value will cause style leak from previous element.\n            ctx[propName] = (ctx as ZRCanvasRenderingContext).dpr * (style[propName] || 0);\n        }\n    }\n    if (forceSetAll || style.shadowColor !== prevStyle.shadowColor) {\n        if (!styleChanged) {\n            flushPathDrawn(ctx, scope);\n            styleChanged = true;\n        }\n        ctx.shadowColor = style.shadowColor || DEFAULT_COMMON_STYLE.shadowColor;\n    }\n    return styleChanged;\n}\n\nfunction bindPathAndTextCommonStyle(\n    ctx: CanvasRenderingContext2D,\n    el: TSpan | Path,\n    prevEl: TSpan | Path,\n    forceSetAll: boolean,\n    scope: BrushScope\n) {\n    const style = getStyle(el, scope.inHover);\n    const prevStyle = forceSetAll\n        ? null\n        : (prevEl && getStyle(prevEl, scope.inHover) || {});\n    // Shared same style. prevStyle will be null if forceSetAll.\n    if (style === prevStyle) {\n        return false;\n    }\n\n    let styleChanged = bindCommonProps(ctx, style, prevStyle, forceSetAll, scope);\n\n    if (forceSetAll || style.fill !== prevStyle.fill) {\n        if (!styleChanged) {\n            // Flush before set\n            flushPathDrawn(ctx, scope);\n            styleChanged = true;\n        }\n        isValidStrokeFillStyle(style.fill) && (ctx.fillStyle = style.fill);\n    }\n    if (forceSetAll || style.stroke !== prevStyle.stroke) {\n        if (!styleChanged) {\n            flushPathDrawn(ctx, scope);\n            styleChanged = true;\n        }\n        isValidStrokeFillStyle(style.stroke) && (ctx.strokeStyle = style.stroke);\n    }\n    if (forceSetAll || style.opacity !== prevStyle.opacity) {\n        if (!styleChanged) {\n            flushPathDrawn(ctx, scope);\n            styleChanged = true;\n        }\n        ctx.globalAlpha = style.opacity == null ? 1 : style.opacity;\n    }\n    if (el.hasStroke()) {\n        const lineWidth = style.lineWidth;\n        const newLineWidth = lineWidth / (\n            (style.strokeNoScale && el.getLineScale) ? el.getLineScale() : 1\n        );\n        if (ctx.lineWidth !== newLineWidth) {\n            if (!styleChanged) {\n                flushPathDrawn(ctx, scope);\n                styleChanged = true;\n            }\n            ctx.lineWidth = newLineWidth;\n        }\n    }\n\n    for (let i = 0; i < STROKE_PROPS.length; i++) {\n        const prop = STROKE_PROPS[i];\n        const propName = prop[0];\n        if (forceSetAll || style[propName] !== prevStyle[propName]) {\n            if (!styleChanged) {\n                flushPathDrawn(ctx, scope);\n                styleChanged = true;\n            }\n            // FIXME Invalid property value will cause style leak from previous element.\n            (ctx as any)[propName] = style[propName] || prop[1];\n        }\n    }\n\n    return styleChanged;\n}\n\nfunction bindImageStyle(\n    ctx: CanvasRenderingContext2D,\n    el: ZRImage,\n    prevEl: ZRImage,\n    // forceSetAll must be true if prevEl is null\n    forceSetAll: boolean,\n    scope: BrushScope\n) {\n    return bindCommonProps(\n        ctx,\n        getStyle(el, scope.inHover),\n        prevEl && getStyle(prevEl, scope.inHover),\n        forceSetAll,\n        scope\n    );\n}\n\nfunction setContextTransform(ctx: CanvasRenderingContext2D, el: Displayable) {\n    const m = el.transform;\n    const dpr = (ctx as ZRCanvasRenderingContext).dpr || 1;\n    if (m) {\n        ctx.setTransform(dpr * m[0], dpr * m[1], dpr * m[2], dpr * m[3], dpr * m[4], dpr * m[5]);\n    }\n    else {\n        ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n    }\n}\n\nfunction updateClipStatus(clipPaths: Path[], ctx: CanvasRenderingContext2D, scope: BrushScope) {\n    let allClipped = false;\n    for (let i = 0; i < clipPaths.length; i++) {\n        const clipPath = clipPaths[i];\n        // Ignore draw following elements if clipPath has zero area.\n        allClipped = allClipped || clipPath.isZeroArea();\n\n        setContextTransform(ctx, clipPath);\n        ctx.beginPath();\n        clipPath.buildPath(ctx, clipPath.shape);\n        ctx.clip();\n    }\n    scope.allClipped = allClipped;\n}\n\nfunction isTransformChanged(m0: MatrixArray, m1: MatrixArray): boolean {\n    if (m0 && m1) {\n        return m0[0] !== m1[0]\n            || m0[1] !== m1[1]\n            || m0[2] !== m1[2]\n            || m0[3] !== m1[3]\n            || m0[4] !== m1[4]\n            || m0[5] !== m1[5];\n    }\n    else if (!m0 && !m1) {  // All identity matrix.\n        return false;\n    }\n\n    return true;\n}\n\nconst DRAW_TYPE_PATH = 1;\nconst DRAW_TYPE_IMAGE = 2;\nconst DRAW_TYPE_TEXT = 3;\nconst DRAW_TYPE_INCREMENTAL = 4;\n\nexport type BrushScope = {\n    inHover: boolean\n\n    // width / height of viewport\n    viewWidth: number\n    viewHeight: number\n\n    // Status for clipping\n    prevElClipPaths?: Path[]\n    prevEl?: Displayable\n    allClipped?: boolean    // If the whole element can be clipped\n\n    // Status for batching\n    batchFill?: string\n    batchStroke?: string\n\n    lastDrawType?: number\n}\n\n// If path can be batched\nfunction canPathBatch(style: PathStyleProps) {\n\n    const hasFill = styleHasFill(style);\n    const hasStroke = styleHasStroke(style);\n\n    return !(\n        // Line dash is dynamically set in brush function.\n        style.lineDash\n        // Can't batch if element is both set fill and stroke. Or both not set\n        || !(+hasFill ^ +hasStroke)\n        // Can't batch if element is drawn with gradient or pattern.\n        || (hasFill && typeof style.fill !== 'string')\n        || (hasStroke && typeof style.stroke !== 'string')\n        // Can't batch if element only stroke part of line.\n        || style.strokePercent < 1\n        // Has stroke or fill opacity\n        || style.strokeOpacity < 1\n        || style.fillOpacity < 1\n    );\n}\n\nfunction flushPathDrawn(ctx: CanvasRenderingContext2D, scope: BrushScope) {\n    // Force flush all after drawn last element\n    scope.batchFill && ctx.fill();\n    scope.batchStroke && ctx.stroke();\n    scope.batchFill = '';\n    scope.batchStroke = '';\n}\n\nfunction getStyle(el: Displayable, inHover?: boolean) {\n    return inHover ? (el.__hoverStyle || el.style) : el.style;\n}\n\nexport function brushSingle(ctx: CanvasRenderingContext2D, el: Displayable) {\n    brush(ctx, el, { inHover: false, viewWidth: 0, viewHeight: 0 }, true);\n}\n\n// Brush different type of elements.\nexport function brush(\n    ctx: CanvasRenderingContext2D,\n    el: Displayable,\n    scope: BrushScope,\n    isLast: boolean\n) {\n    const m = el.transform;\n\n    if (!el.shouldBePainted(scope.viewWidth, scope.viewHeight, false, false)) {\n        // Needs to mark el rendered.\n        // Or this element will always been rendered in progressive rendering.\n        // But other dirty bit should not be cleared, otherwise it cause the shape\n        // can not be updated in this case.\n        el.__dirty &= ~REDRAW_BIT;\n        el.__isRendered = false;\n        return;\n    }\n\n    // HANDLE CLIPPING\n    const clipPaths = el.__clipPaths;\n    const prevElClipPaths = scope.prevElClipPaths;\n\n    let forceSetTransform = false;\n    let forceSetStyle = false;\n    // Optimize when clipping on group with several elements\n    if (!prevElClipPaths || isClipPathChanged(clipPaths, prevElClipPaths)) {\n        // If has previous clipping state, restore from it\n        if (prevElClipPaths && prevElClipPaths.length) {\n            // Flush restore\n            flushPathDrawn(ctx, scope);\n\n            ctx.restore();\n            // Must set all style and transform because context changed by restore\n            forceSetStyle = forceSetTransform = true;\n\n            scope.prevElClipPaths = null;\n            scope.allClipped = false;\n            // Reset prevEl since context has been restored\n            scope.prevEl = null;\n        }\n        // New clipping state\n        if (clipPaths && clipPaths.length) {\n            // Flush before clip\n            flushPathDrawn(ctx, scope);\n\n            ctx.save();\n            updateClipStatus(clipPaths, ctx, scope);\n            // Must set transform because it's changed when clip.\n            forceSetTransform = true;\n        }\n        scope.prevElClipPaths = clipPaths;\n    }\n\n    // Not rendering elements if it's clipped by a zero area path.\n    // Or it may cause bug on some version of IE11 (like 11.0.9600.178**),\n    // where exception \"unexpected call to method or property access\"\n    // might be thrown when calling ctx.fill or ctx.stroke after a path\n    // whose area size is zero is drawn and ctx.clip() is called and\n    // shadowBlur is set. See #4572, #3112, #5777.\n    // (e.g.,\n    //  ctx.moveTo(10, 10);\n    //  ctx.lineTo(20, 10);\n    //  ctx.closePath();\n    //  ctx.clip();\n    //  ctx.shadowBlur = 10;\n    //  ...\n    //  ctx.fill();\n    // )\n    if (scope.allClipped) {\n        el.__isRendered = false;\n        return;\n    }\n\n    // START BRUSH\n    el.beforeBrush && el.beforeBrush();\n    el.innerBeforeBrush();\n\n    const prevEl = scope.prevEl;\n    // TODO el type changed.\n    if (!prevEl) {\n        forceSetStyle = forceSetTransform = true;\n    }\n\n    let canBatchPath = el instanceof Path   // Only path supports batch\n        && el.autoBatch\n        && canPathBatch(el.style);\n\n    if (forceSetTransform || isTransformChanged(m, prevEl.transform)) {\n        // Flush\n        flushPathDrawn(ctx, scope);\n        setContextTransform(ctx, el);\n    }\n    else if (!canBatchPath) {\n        // Flush\n        flushPathDrawn(ctx, scope);\n    }\n\n    const style = getStyle(el, scope.inHover);\n    if (el instanceof Path) {\n        // PENDING do we need to rebind all style if displayable type changed?\n        if (scope.lastDrawType !== DRAW_TYPE_PATH) {\n            forceSetStyle = true;\n            scope.lastDrawType = DRAW_TYPE_PATH;\n        }\n\n        bindPathAndTextCommonStyle(ctx, el as Path, prevEl as Path, forceSetStyle, scope);\n        // Begin path at start\n        if (!canBatchPath || (!scope.batchFill && !scope.batchStroke)) {\n            ctx.beginPath();\n        }\n        brushPath(ctx, el as Path, style, canBatchPath);\n\n        if (canBatchPath) {\n            scope.batchFill = style.fill as string || '';\n            scope.batchStroke = style.stroke as string || '';\n        }\n    }\n    else {\n        if (el instanceof TSpan) {\n            if (scope.lastDrawType !== DRAW_TYPE_TEXT) {\n                forceSetStyle = true;\n                scope.lastDrawType = DRAW_TYPE_TEXT;\n            }\n\n            bindPathAndTextCommonStyle(ctx, el as TSpan, prevEl as TSpan, forceSetStyle, scope);\n            brushText(ctx, el as TSpan, style);\n        }\n        else if (el instanceof ZRImage) {\n            if (scope.lastDrawType !== DRAW_TYPE_IMAGE) {\n                forceSetStyle = true;\n                scope.lastDrawType = DRAW_TYPE_IMAGE;\n            }\n\n            bindImageStyle(ctx, el as ZRImage, prevEl as ZRImage, forceSetStyle, scope);\n            brushImage(ctx, el as ZRImage, style);\n        }\n        // Assume it's a IncrementalDisplayable\n        else if ((el as IncrementalDisplayable).getTemporalDisplayables) {\n            if (scope.lastDrawType !== DRAW_TYPE_INCREMENTAL) {\n                forceSetStyle = true;\n                scope.lastDrawType = DRAW_TYPE_INCREMENTAL;\n            }\n\n            brushIncremental(ctx, el as IncrementalDisplayable, scope);\n        }\n\n    }\n\n    if (canBatchPath && isLast) {\n        flushPathDrawn(ctx, scope);\n    }\n\n    el.innerAfterBrush();\n    el.afterBrush && el.afterBrush();\n\n    scope.prevEl = el;\n\n    // Mark as painted.\n    el.__dirty = 0;\n    el.__isRendered = true;\n}\n\nfunction brushIncremental(\n    ctx: CanvasRenderingContext2D,\n    el: IncrementalDisplayable,\n    scope: BrushScope\n) {\n    let displayables = el.getDisplayables();\n    let temporalDisplayables = el.getTemporalDisplayables();\n    // Provide an inner scope.\n    // Save current context and restore after brushed.\n    ctx.save();\n    let innerScope: BrushScope = {\n        prevElClipPaths: null,\n        prevEl: null,\n        allClipped: false,\n        viewWidth: scope.viewWidth,\n        viewHeight: scope.viewHeight,\n        inHover: scope.inHover\n    };\n    let i;\n    let len;\n    // Render persistant displayables.\n    for (i = el.getCursor(), len = displayables.length; i < len; i++) {\n        const displayable = displayables[i];\n        displayable.beforeBrush && displayable.beforeBrush();\n        displayable.innerBeforeBrush();\n        brush(ctx, displayable, innerScope, i === len - 1);\n        displayable.innerAfterBrush();\n        displayable.afterBrush && displayable.afterBrush();\n        innerScope.prevEl = displayable;\n    }\n    // Render temporary displayables.\n    for (let i = 0, len = temporalDisplayables.length; i < len; i++) {\n        const displayable = temporalDisplayables[i];\n        displayable.beforeBrush && displayable.beforeBrush();\n        displayable.innerBeforeBrush();\n        brush(ctx, displayable, innerScope, i === len - 1);\n        displayable.innerAfterBrush();\n        displayable.afterBrush && displayable.afterBrush();\n        innerScope.prevEl = displayable;\n    }\n    el.clearTemporalDisplayables();\n    el.notClear = true;\n\n    ctx.restore();\n}","import * as util from '../core/util';\nimport {devicePixelRatio} from '../config';\nimport { ImagePatternObject } from '../graphic/Pattern';\nimport CanvasPainter from './Painter';\nimport { GradientObject, InnerGradientObject } from '../graphic/Gradient';\nimport { ZRCanvasRenderingContext } from '../core/types';\nimport Eventful from '../core/Eventful';\nimport { ElementEventCallback } from '../Element';\nimport { getCanvasGradient } from './helper';\nimport { createCanvasPattern } from './graphic';\nimport Displayable from '../graphic/Displayable';\nimport BoundingRect from '../core/BoundingRect';\nimport { REDRAW_BIT } from '../graphic/constants';\nimport { platformApi } from '../core/platform';\n\nfunction createDom(id: string, painter: CanvasPainter, dpr: number) {\n    const newDom = platformApi.createCanvas();\n    const width = painter.getWidth();\n    const height = painter.getHeight();\n\n    const newDomStyle = newDom.style;\n    if (newDomStyle) {  // In node or some other non-browser environment\n        newDomStyle.position = 'absolute';\n        newDomStyle.left = '0';\n        newDomStyle.top = '0';\n        newDomStyle.width = width + 'px';\n        newDomStyle.height = height + 'px';\n\n        newDom.setAttribute('data-zr-dom-id', id);\n    }\n\n    newDom.width = width * dpr;\n    newDom.height = height * dpr;\n\n    return newDom;\n}\n\nexport interface LayerConfig {\n    // 每次清空画布的颜色\n    clearColor?: string | GradientObject | ImagePatternObject\n    // 是否开启动态模糊\n    motionBlur?: boolean\n    // 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显\n    lastFrameAlpha?: number\n};\n\nexport default class Layer extends Eventful {\n\n    id: string\n\n    dom: HTMLCanvasElement\n    domBack: HTMLCanvasElement\n\n    ctx: CanvasRenderingContext2D\n    ctxBack: CanvasRenderingContext2D\n\n    painter: CanvasPainter\n\n    // Configs\n    /**\n     * 每次清空画布的颜色\n     */\n    clearColor: string | GradientObject | ImagePatternObject\n    /**\n     * 是否开启动态模糊\n     */\n    motionBlur = false\n    /**\n     * 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显\n     */\n    lastFrameAlpha = 0.7\n    /**\n     * Layer dpr\n     */\n    dpr = 1\n\n    /**\n     * Virtual layer will not be inserted into dom.\n     */\n    virtual = false\n\n    config = {}\n\n    incremental = false\n\n    zlevel = 0\n\n    maxRepaintRectCount = 5\n\n    private _paintRects: BoundingRect[]\n\n    __dirty = true\n    __firstTimePaint = true\n\n    __used = false\n\n    __drawIndex = 0\n    __startIndex = 0\n    __endIndex = 0\n\n    // indices in the previous frame\n    __prevStartIndex: number = null\n    __prevEndIndex: number = null\n\n    __builtin__: boolean\n\n    constructor(id: string | HTMLCanvasElement, painter: CanvasPainter, dpr?: number) {\n        super();\n\n        let dom;\n        dpr = dpr || devicePixelRatio;\n        if (typeof id === 'string') {\n            dom = createDom(id, painter, dpr);\n        }\n        // Not using isDom because in node it will return false\n        else if (util.isObject(id)) {\n            dom = id;\n            id = dom.id;\n        }\n        this.id = id as string;\n        this.dom = dom;\n\n        const domStyle = dom.style;\n        if (domStyle) { // Not in node\n            util.disableUserSelect(dom);\n            dom.onselectstart = () => false;\n            domStyle.padding = '0';\n            domStyle.margin = '0';\n            domStyle.borderWidth = '0';\n        }\n\n        this.painter = painter;\n\n        this.dpr = dpr;\n    }\n\n    getElementCount() {\n        return this.__endIndex - this.__startIndex;\n    }\n\n    afterBrush() {\n        this.__prevStartIndex = this.__startIndex;\n        this.__prevEndIndex = this.__endIndex;\n    }\n\n    initContext() {\n        this.ctx = this.dom.getContext('2d');\n        (this.ctx as ZRCanvasRenderingContext).dpr = this.dpr;\n    }\n\n    setUnpainted() {\n        this.__firstTimePaint = true;\n    }\n\n    createBackBuffer() {\n        const dpr = this.dpr;\n\n        this.domBack = createDom('back-' + this.id, this.painter, dpr);\n        this.ctxBack = this.domBack.getContext('2d');\n\n        if (dpr !== 1) {\n            this.ctxBack.scale(dpr, dpr);\n        }\n    }\n\n    /**\n     * Create repaint list when using dirty rect rendering.\n     *\n     * @param displayList current rendering list\n     * @param prevList last frame rendering list\n     * @return repaint rects. null for the first frame, [] for no element dirty\n     */\n    createRepaintRects(\n        displayList: Displayable[],\n        prevList: Displayable[],\n        viewWidth: number,\n        viewHeight: number\n    ) {\n        if (this.__firstTimePaint) {\n            this.__firstTimePaint = false;\n            return null;\n        }\n\n        const mergedRepaintRects: BoundingRect[] = [];\n        const maxRepaintRectCount = this.maxRepaintRectCount;\n        let full = false;\n        const pendingRect = new BoundingRect(0, 0, 0, 0);\n\n        function addRectToMergePool(rect: BoundingRect) {\n            if (!rect.isFinite() || rect.isZero()) {\n                return;\n            }\n\n            if (mergedRepaintRects.length === 0) {\n                // First rect, create new merged rect\n                const boundingRect = new BoundingRect(0, 0, 0, 0);\n                boundingRect.copy(rect);\n                mergedRepaintRects.push(boundingRect);\n            }\n            else {\n                let isMerged = false;\n                let minDeltaArea = Infinity;\n                let bestRectToMergeIdx = 0;\n                for (let i = 0; i < mergedRepaintRects.length; ++i) {\n                    const mergedRect = mergedRepaintRects[i];\n\n                    // Merge if has intersection\n                    if (mergedRect.intersect(rect)) {\n                        const pendingRect = new BoundingRect(0, 0, 0, 0);\n                        pendingRect.copy(mergedRect);\n                        pendingRect.union(rect);\n                        mergedRepaintRects[i] = pendingRect;\n                        isMerged = true;\n                        break;\n                    }\n                    else if (full) {\n                        // Merged to exists rectangles if full\n                        pendingRect.copy(rect);\n                        pendingRect.union(mergedRect);\n                        const aArea = rect.width * rect.height;\n                        const bArea = mergedRect.width * mergedRect.height;\n                        const pendingArea = pendingRect.width * pendingRect.height;\n                        const deltaArea = pendingArea - aArea - bArea;\n                        if (deltaArea < minDeltaArea) {\n                            minDeltaArea = deltaArea;\n                            bestRectToMergeIdx = i;\n                        }\n                    }\n                }\n\n                if (full) {\n                    mergedRepaintRects[bestRectToMergeIdx].union(rect);\n                    isMerged = true;\n                }\n\n                if (!isMerged) {\n                    // Create new merged rect if cannot merge with current\n                    const boundingRect = new BoundingRect(0, 0, 0, 0);\n                    boundingRect.copy(rect);\n                    mergedRepaintRects.push(boundingRect);\n                }\n                if (!full) {\n                    full = mergedRepaintRects.length >= maxRepaintRectCount;\n                }\n            }\n        }\n\n        /**\n         * Loop the paint list of this frame and get the dirty rects of elements\n         * in this frame.\n         */\n        for (let i = this.__startIndex; i < this.__endIndex; ++i) {\n            const el = displayList[i];\n            if (el) {\n                /**\n                 * `shouldPaint` is true only when the element is not ignored or\n                 * invisible and all its ancestors are not ignored.\n                 * `shouldPaint` being true means it will be brushed this frame.\n                 *\n                 * `__isRendered` being true means the element is currently on\n                 * the canvas.\n                 *\n                 * `__dirty` being true means the element should be brushed this\n                 * frame.\n                 *\n                 * We only need to repaint the element's previous painting rect\n                 * if it's currently on the canvas and needs repaint this frame\n                 * or not painted this frame.\n                 */\n                const shouldPaint = el.shouldBePainted(viewWidth, viewHeight, true, true);\n                const prevRect = el.__isRendered && ((el.__dirty & REDRAW_BIT) || !shouldPaint)\n                    ? el.getPrevPaintRect()\n                    : null;\n                if (prevRect) {\n                    addRectToMergePool(prevRect);\n                }\n\n                /**\n                 * On the other hand, we only need to paint the current rect\n                 * if the element should be brushed this frame and either being\n                 * dirty or not rendered before.\n                 */\n                const curRect = shouldPaint && ((el.__dirty & REDRAW_BIT) || !el.__isRendered)\n                    ? el.getPaintRect()\n                    : null;\n                if (curRect) {\n                    addRectToMergePool(curRect);\n                }\n            }\n        }\n\n        /**\n         * The above loop calculates the dirty rects of elements that are in the\n         * paint list this frame, which does not include those elements removed\n         * in this frame. So we loop the `prevList` to get the removed elements.\n         */\n        for (let i = this.__prevStartIndex; i < this.__prevEndIndex; ++i) {\n            const el = prevList[i];\n            /**\n             * Consider the elements whose ancestors are invisible, they should\n             * not be painted and their previous painting rects should be\n             * cleared if they are rendered on the canvas (`__isRendered` being\n             * true). `!shouldPaint` means the element is not brushed in this\n             * frame.\n             *\n             * `!el.__zr` means it's removed from the storage.\n             *\n             * In conclusion, an element needs to repaint the previous painting\n             * rect if and only if it's not painted this frame and was\n             * previously painted on the canvas.\n             */\n            const shouldPaint = el && el.shouldBePainted(viewWidth, viewHeight, true, true);\n            if (el && (!shouldPaint || !el.__zr) && el.__isRendered) {\n                // el was removed\n                const prevRect = el.getPrevPaintRect();\n                if (prevRect) {\n                    addRectToMergePool(prevRect);\n                }\n            }\n        }\n\n        // Merge intersected rects in the result\n        let hasIntersections;\n        do {\n            hasIntersections = false;\n            for (let i = 0; i < mergedRepaintRects.length;) {\n                if (mergedRepaintRects[i].isZero()) {\n                    mergedRepaintRects.splice(i, 1);\n                    continue;\n                }\n                for (let j = i + 1; j < mergedRepaintRects.length;) {\n                    if (mergedRepaintRects[i].intersect(mergedRepaintRects[j])) {\n                        hasIntersections = true;\n                        mergedRepaintRects[i].union(mergedRepaintRects[j]);\n                        mergedRepaintRects.splice(j, 1);\n                    }\n                    else {\n                        j++;\n                    }\n                }\n                i++;\n            }\n        } while (hasIntersections);\n\n        this._paintRects = mergedRepaintRects;\n\n        return mergedRepaintRects;\n    }\n\n    /**\n     * Get paint rects for debug usage.\n     */\n    debugGetPaintRects() {\n        return (this._paintRects || []).slice();\n    }\n\n    resize(width: number, height: number) {\n        const dpr = this.dpr;\n\n        const dom = this.dom;\n        const domStyle = dom.style;\n        const domBack = this.domBack;\n\n        if (domStyle) {\n            domStyle.width = width + 'px';\n            domStyle.height = height + 'px';\n        }\n\n        dom.width = width * dpr;\n        dom.height = height * dpr;\n\n        if (domBack) {\n            domBack.width = width * dpr;\n            domBack.height = height * dpr;\n\n            if (dpr !== 1) {\n                this.ctxBack.scale(dpr, dpr);\n            }\n        }\n    }\n\n    /**\n     * 清空该层画布\n     */\n    clear(\n        clearAll?: boolean,\n        clearColor?: string | GradientObject | ImagePatternObject,\n        repaintRects?: BoundingRect[]\n    ) {\n        const dom = this.dom;\n        const ctx = this.ctx;\n        const width = dom.width;\n        const height = dom.height;\n\n        clearColor = clearColor || this.clearColor;\n        const haveMotionBLur = this.motionBlur && !clearAll;\n        const lastFrameAlpha = this.lastFrameAlpha;\n\n        const dpr = this.dpr;\n        const self = this;\n\n        if (haveMotionBLur) {\n            if (!this.domBack) {\n                this.createBackBuffer();\n            }\n\n            this.ctxBack.globalCompositeOperation = 'copy';\n            this.ctxBack.drawImage(\n                dom, 0, 0,\n                width / dpr,\n                height / dpr\n            );\n        }\n\n        const domBack = this.domBack;\n\n        function doClear(x: number, y: number, width: number, height: number) {\n            ctx.clearRect(x, y, width, height);\n            if (clearColor && clearColor !== 'transparent') {\n                let clearColorGradientOrPattern;\n                // Gradient\n                if (util.isGradientObject(clearColor)) {\n                    // shouldn't cache when clearColor is not global and size changed\n                    const shouldCache = clearColor.global || (\n                        (clearColor as InnerGradientObject).__width === width\n                        && (clearColor as InnerGradientObject).__height === height\n                    );\n                    // Cache canvas gradient\n                    clearColorGradientOrPattern = shouldCache\n                        && (clearColor as InnerGradientObject).__canvasGradient\n                        || getCanvasGradient(ctx, clearColor, {\n                            x: 0,\n                            y: 0,\n                            width: width,\n                            height: height\n                        });\n\n                    (clearColor as InnerGradientObject).__canvasGradient = clearColorGradientOrPattern;\n                    (clearColor as InnerGradientObject).__width = width;\n                    (clearColor as InnerGradientObject).__height = height;\n                }\n                // Pattern\n                else if (util.isImagePatternObject(clearColor)) {\n                    // scale pattern by dpr\n                    clearColor.scaleX = clearColor.scaleX || dpr;\n                    clearColor.scaleY = clearColor.scaleY || dpr;\n                    clearColorGradientOrPattern = createCanvasPattern(\n                        ctx, clearColor, {\n                            dirty() {\n                                self.setUnpainted();\n                                self.painter.refresh();\n                            }\n                        }\n                    );\n                }\n                ctx.save();\n                ctx.fillStyle = clearColorGradientOrPattern || (clearColor as string);\n                ctx.fillRect(x, y, width, height);\n                ctx.restore();\n            }\n\n            if (haveMotionBLur) {\n                ctx.save();\n                ctx.globalAlpha = lastFrameAlpha;\n                ctx.drawImage(domBack, x, y, width, height);\n                ctx.restore();\n            }\n        };\n\n        if (!repaintRects || haveMotionBLur) {\n            // Clear the full canvas\n            doClear(0, 0, width, height);\n        }\n        else if (repaintRects.length) {\n            // Clear the repaint areas\n            util.each(repaintRects, rect => {\n                doClear(\n                    rect.x * dpr,\n                    rect.y * dpr,\n                    rect.width * dpr,\n                    rect.height * dpr\n                );\n            });\n        }\n    }\n\n    // Interface of refresh\n    refresh: (clearColor?: string | GradientObject | ImagePatternObject) => void\n\n    // Interface of renderToCanvas in getRenderedCanvas\n    renderToCanvas: (ctx: CanvasRenderingContext2D) => void\n\n    // Events\n    onclick: ElementEventCallback\n    ondblclick: ElementEventCallback\n    onmouseover: ElementEventCallback\n    onmouseout: ElementEventCallback\n    onmousemove: ElementEventCallback\n    onmousewheel: ElementEventCallback\n    onmousedown: ElementEventCallback\n    onmouseup: ElementEventCallback\n    oncontextmenu: ElementEventCallback\n\n    ondrag: ElementEventCallback\n    ondragstart: ElementEventCallback\n    ondragend: ElementEventCallback\n    ondragenter: ElementEventCallback\n    ondragleave: ElementEventCallback\n    ondragover: ElementEventCallback\n    ondrop: ElementEventCallback\n}\n","import {devicePixelRatio} from '../config';\nimport * as util from '../core/util';\nimport Layer, { LayerConfig } from './Layer';\nimport requestAnimationFrame from '../animation/requestAnimationFrame';\nimport env from '../core/env';\nimport Displayable from '../graphic/Displayable';\nimport { WXCanvasRenderingContext } from '../core/types';\nimport { GradientObject } from '../graphic/Gradient';\nimport { ImagePatternObject } from '../graphic/Pattern';\nimport Storage from '../Storage';\nimport { brush, BrushScope, brushSingle } from './graphic';\nimport { PainterBase } from '../PainterBase';\nimport BoundingRect from '../core/BoundingRect';\nimport { REDRAW_BIT } from '../graphic/constants';\nimport { getSize } from './helper';\nimport type IncrementalDisplayable from '../graphic/IncrementalDisplayable';\n\nconst HOVER_LAYER_ZLEVEL = 1e5;\nconst CANVAS_ZLEVEL = 314159;\n\nconst EL_AFTER_INCREMENTAL_INC = 0.01;\nconst INCREMENTAL_INC = 0.001;\n\n\nfunction isLayerValid(layer: Layer) {\n    if (!layer) {\n        return false;\n    }\n\n    if (layer.__builtin__) {\n        return true;\n    }\n\n    if (typeof (layer.resize) !== 'function'\n        || typeof (layer.refresh) !== 'function'\n    ) {\n        return false;\n    }\n\n    return true;\n}\n\nfunction createRoot(width: number, height: number) {\n    const domRoot = document.createElement('div');\n\n    // domRoot.onselectstart = returnFalse; // Avoid page selected\n    domRoot.style.cssText = [\n        'position:relative',\n        // IOS13 safari probably has a compositing bug (z order of the canvas and the consequent\n        // dom does not act as expected) when some of the parent dom has\n        // `-webkit-overflow-scrolling: touch;` and the webpage is longer than one screen and\n        // the canvas is not at the top part of the page.\n        // Check `https://bugs.webkit.org/show_bug.cgi?id=203681` for more details. We remove\n        // this `overflow:hidden` to avoid the bug.\n        // 'overflow:hidden',\n        'width:' + width + 'px',\n        'height:' + height + 'px',\n        'padding:0',\n        'margin:0',\n        'border-width:0'\n    ].join(';') + ';';\n\n    return domRoot;\n}\n\ninterface CanvasPainterOption {\n    devicePixelRatio?: number\n    width?: number | string  // Can be 10 / 10px / auto\n    height?: number | string,\n    useDirtyRect?: boolean\n}\n\nexport default class CanvasPainter implements PainterBase {\n\n    type = 'canvas'\n\n    root: HTMLElement\n\n    dpr: number\n\n    storage: Storage\n\n    private _singleCanvas: boolean\n\n    private _opts: CanvasPainterOption\n\n    private _zlevelList: number[] = []\n\n    private _prevDisplayList: Displayable[] = []\n\n    private _layers: {[key: number]: Layer} = {} // key is zlevel\n\n    private _layerConfig: {[key: number]: LayerConfig} = {} // key is zlevel\n\n    /**\n     * zrender will do compositing when root is a canvas and have multiple zlevels.\n     */\n    private _needsManuallyCompositing = false\n\n    private _width: number\n    private _height: number\n\n    private _domRoot: HTMLElement\n\n    private _hoverlayer: Layer\n\n    private _redrawId: number\n\n    private _backgroundColor: string | GradientObject | ImagePatternObject\n\n\n    constructor(root: HTMLElement, storage: Storage, opts: CanvasPainterOption, id: number) {\n\n        this.type = 'canvas';\n\n        // In node environment using node-canvas\n        const singleCanvas = !root.nodeName // In node ?\n            || root.nodeName.toUpperCase() === 'CANVAS';\n\n        this._opts = opts = util.extend({}, opts || {}) as CanvasPainterOption;\n\n        /**\n         * @type {number}\n         */\n        this.dpr = opts.devicePixelRatio || devicePixelRatio;\n        /**\n         * @type {boolean}\n         * @private\n         */\n        this._singleCanvas = singleCanvas;\n        /**\n         * 绘图容器\n         * @type {HTMLElement}\n         */\n        this.root = root;\n\n        const rootStyle = root.style;\n\n        if (rootStyle) {\n            // @ts-ignore\n            util.disableUserSelect(root);\n            root.innerHTML = '';\n        }\n\n        /**\n         * @type {module:zrender/Storage}\n         */\n        this.storage = storage;\n\n        const zlevelList: number[] = this._zlevelList;\n\n        this._prevDisplayList = [];\n\n        const layers = this._layers;\n\n        if (!singleCanvas) {\n            this._width = getSize(root, 0, opts);\n            this._height = getSize(root, 1, opts);\n\n            const domRoot = this._domRoot = createRoot(\n                this._width, this._height\n            );\n            root.appendChild(domRoot);\n        }\n        else {\n            const rootCanvas = root as HTMLCanvasElement;\n            let width = rootCanvas.width;\n            let height = rootCanvas.height;\n\n            if (opts.width != null) {\n                // TODO sting?\n                width = opts.width as number;\n            }\n            if (opts.height != null) {\n                // TODO sting?\n                height = opts.height as number;\n            }\n            this.dpr = opts.devicePixelRatio || 1;\n\n            // Use canvas width and height directly\n            rootCanvas.width = width * this.dpr;\n            rootCanvas.height = height * this.dpr;\n\n            this._width = width;\n            this._height = height;\n\n            // Create layer if only one given canvas\n            // Device can be specified to create a high dpi image.\n            const mainLayer = new Layer(rootCanvas, this, this.dpr);\n            mainLayer.__builtin__ = true;\n            mainLayer.initContext();\n            // FIXME Use canvas width and height\n            // mainLayer.resize(width, height);\n            layers[CANVAS_ZLEVEL] = mainLayer;\n            mainLayer.zlevel = CANVAS_ZLEVEL;\n            // Not use common zlevel.\n            zlevelList.push(CANVAS_ZLEVEL);\n\n            this._domRoot = root;\n        }\n    }\n\n\n    getType() {\n        return 'canvas';\n    }\n\n    /**\n     * If painter use a single canvas\n     */\n    isSingleCanvas() {\n        return this._singleCanvas;\n    }\n\n    getViewportRoot() {\n        return this._domRoot;\n    }\n\n    getViewportRootOffset() {\n        const viewportRoot = this.getViewportRoot();\n        if (viewportRoot) {\n            return {\n                offsetLeft: viewportRoot.offsetLeft || 0,\n                offsetTop: viewportRoot.offsetTop || 0\n            };\n        }\n    }\n\n    /**\n     * 刷新\n     * @param paintAll 强制绘制所有displayable\n     */\n    refresh(paintAll?: boolean) {\n        const list = this.storage.getDisplayList(true);\n        const prevList = this._prevDisplayList;\n\n        const zlevelList = this._zlevelList;\n\n        this._redrawId = Math.random();\n\n        this._paintList(list, prevList, paintAll, this._redrawId);\n\n        // Paint custum layers\n        for (let i = 0; i < zlevelList.length; i++) {\n            const z = zlevelList[i];\n            const layer = this._layers[z];\n            if (!layer.__builtin__ && layer.refresh) {\n                const clearColor = i === 0 ? this._backgroundColor : null;\n                layer.refresh(clearColor);\n            }\n        }\n\n        if (this._opts.useDirtyRect) {\n            this._prevDisplayList = list.slice();\n        }\n\n        return this;\n    }\n\n\n    refreshHover() {\n        this._paintHoverList(this.storage.getDisplayList(false));\n    }\n\n    private _paintHoverList(list: Displayable[]) {\n        let len = list.length;\n        let hoverLayer = this._hoverlayer;\n        hoverLayer && hoverLayer.clear();\n\n        if (!len) {\n            return;\n        }\n\n        const scope: BrushScope = {\n            inHover: true,\n            viewWidth: this._width,\n            viewHeight: this._height\n        };\n\n        let ctx;\n        for (let i = 0; i < len; i++) {\n            const el = list[i];\n            if (el.__inHover) {\n                // Use a extream large zlevel\n                // FIXME?\n                if (!hoverLayer) {\n                    hoverLayer = this._hoverlayer = this.getLayer(HOVER_LAYER_ZLEVEL);\n                }\n\n                if (!ctx) {\n                    ctx = hoverLayer.ctx;\n                    ctx.save();\n                }\n\n                brush(ctx, el, scope, i === len - 1);\n            }\n        }\n        if (ctx) {\n            ctx.restore();\n        }\n    }\n\n    getHoverLayer() {\n        return this.getLayer(HOVER_LAYER_ZLEVEL);\n    }\n\n    paintOne(ctx: CanvasRenderingContext2D, el: Displayable) {\n        brushSingle(ctx, el);\n    }\n\n    private _paintList(list: Displayable[], prevList: Displayable[], paintAll: boolean, redrawId?: number) {\n        if (this._redrawId !== redrawId) {\n            return;\n        }\n\n        paintAll = paintAll || false;\n\n        this._updateLayerStatus(list);\n\n        const {finished, needsRefreshHover} = this._doPaintList(list, prevList, paintAll);\n\n        if (this._needsManuallyCompositing) {\n            this._compositeManually();\n        }\n\n        if (needsRefreshHover) {\n            this._paintHoverList(list);\n        }\n\n        if (!finished) {\n            const self = this;\n            requestAnimationFrame(function () {\n                self._paintList(list, prevList, paintAll, redrawId);\n            });\n        }\n        else {\n            this.eachLayer(layer => {\n                layer.afterBrush && layer.afterBrush();\n            });\n        }\n    }\n\n    private _compositeManually() {\n        const ctx = this.getLayer(CANVAS_ZLEVEL).ctx;\n        const width = (this._domRoot as HTMLCanvasElement).width;\n        const height = (this._domRoot as HTMLCanvasElement).height;\n        ctx.clearRect(0, 0, width, height);\n        // PENDING, If only builtin layer?\n        this.eachBuiltinLayer(function (layer) {\n            if (layer.virtual) {\n                ctx.drawImage(layer.dom, 0, 0, width, height);\n            }\n        });\n    }\n\n    private _doPaintList(\n        list: Displayable[],\n        prevList: Displayable[],\n        paintAll?: boolean\n    ): {\n        finished: boolean\n        needsRefreshHover: boolean\n    } {\n        const layerList = [];\n        const useDirtyRect = this._opts.useDirtyRect;\n        for (let zi = 0; zi < this._zlevelList.length; zi++) {\n            const zlevel = this._zlevelList[zi];\n            const layer = this._layers[zlevel];\n            if (layer.__builtin__\n                && layer !== this._hoverlayer\n                && (layer.__dirty || paintAll)\n                // Layer with hover elements can't be redrawn.\n                // && !layer.__hasHoverLayerELement\n            ) {\n                layerList.push(layer);\n            }\n        }\n\n        let finished = true;\n        let needsRefreshHover = false;\n\n        for (let k = 0; k < layerList.length; k++) {\n            const layer = layerList[k];\n            const ctx = layer.ctx;\n\n            const repaintRects = useDirtyRect\n                && layer.createRepaintRects(list, prevList, this._width, this._height);\n\n            let start = paintAll ? layer.__startIndex : layer.__drawIndex;\n\n            const useTimer = !paintAll && layer.incremental && Date.now;\n            const startTime = useTimer && Date.now();\n\n            const clearColor = layer.zlevel === this._zlevelList[0]\n                ? this._backgroundColor : null;\n\n            // All elements in this layer are removed.\n            if (layer.__startIndex === layer.__endIndex) {\n                layer.clear(false, clearColor, repaintRects);\n            }\n            else if (start === layer.__startIndex) {\n                const firstEl = list[start];\n                if (!firstEl.incremental || !(firstEl as IncrementalDisplayable).notClear || paintAll) {\n                    layer.clear(false, clearColor, repaintRects);\n                }\n            }\n            if (start === -1) {\n                console.error('For some unknown reason. drawIndex is -1');\n                start = layer.__startIndex;\n            }\n            let i: number;\n            /* eslint-disable-next-line */\n            const repaint = (repaintRect?: BoundingRect) => {\n                const scope: BrushScope = {\n                    inHover: false,\n                    allClipped: false,\n                    prevEl: null,\n                    viewWidth: this._width,\n                    viewHeight: this._height\n                };\n\n                for (i = start; i < layer.__endIndex; i++) {\n                    const el = list[i];\n\n                    if (el.__inHover) {\n                        needsRefreshHover = true;\n                    }\n\n                    this._doPaintEl(el, layer, useDirtyRect, repaintRect, scope, i === layer.__endIndex - 1);\n\n                    if (useTimer) {\n                        // Date.now can be executed in 13,025,305 ops/second.\n                        const dTime = Date.now() - startTime;\n                        // Give 15 millisecond to draw.\n                        // The rest elements will be drawn in the next frame.\n                        if (dTime > 15) {\n                            break;\n                        }\n                    }\n                }\n\n                if (scope.prevElClipPaths) {\n                    // Needs restore the state. If last drawn element is in the clipping area.\n                    ctx.restore();\n                }\n            };\n\n            if (repaintRects) {\n                if (repaintRects.length === 0) {\n                    // Nothing to repaint, mark as finished\n                    i = layer.__endIndex;\n                }\n                else {\n                    const dpr = this.dpr;\n                    // Set repaintRect as clipPath\n                    for (var r = 0; r < repaintRects.length; ++r) {\n                        const rect = repaintRects[r];\n\n                        ctx.save();\n                        ctx.beginPath();\n                        ctx.rect(\n                            rect.x * dpr,\n                            rect.y * dpr,\n                            rect.width * dpr,\n                            rect.height * dpr\n                        );\n                        ctx.clip();\n\n                        repaint(rect);\n                        ctx.restore();\n                    }\n                }\n            }\n            else {\n                // Paint all once\n                ctx.save();\n                repaint();\n                ctx.restore();\n            }\n\n            layer.__drawIndex = i;\n\n            if (layer.__drawIndex < layer.__endIndex) {\n                finished = false;\n            }\n        }\n\n        if (env.wxa) {\n            // Flush for weixin application\n            util.each(this._layers, function (layer) {\n                if (layer && layer.ctx && (layer.ctx as WXCanvasRenderingContext).draw) {\n                    (layer.ctx as WXCanvasRenderingContext).draw();\n                }\n            });\n        }\n\n        return {\n            finished,\n            needsRefreshHover\n        };\n    }\n\n    private _doPaintEl(\n        el: Displayable,\n        currentLayer: Layer,\n        useDirtyRect: boolean,\n        repaintRect: BoundingRect,\n        scope: BrushScope,\n        isLast: boolean\n    ) {\n        const ctx = currentLayer.ctx;\n        if (useDirtyRect) {\n            const paintRect = el.getPaintRect();\n            if (!repaintRect || paintRect && paintRect.intersect(repaintRect)) {\n                brush(ctx, el, scope, isLast);\n                el.setPrevPaintRect(paintRect);\n            }\n        }\n        else {\n            brush(ctx, el, scope, isLast);\n        }\n    }\n\n    /**\n     * 获取 zlevel 所在层,如果不存在则会创建一个新的层\n     * @param zlevel\n     * @param virtual Virtual layer will not be inserted into dom.\n     */\n    getLayer(zlevel: number, virtual?: boolean) {\n        if (this._singleCanvas && !this._needsManuallyCompositing) {\n            zlevel = CANVAS_ZLEVEL;\n        }\n        let layer = this._layers[zlevel];\n        if (!layer) {\n            // Create a new layer\n            layer = new Layer('zr_' + zlevel, this, this.dpr);\n            layer.zlevel = zlevel;\n            layer.__builtin__ = true;\n\n            if (this._layerConfig[zlevel]) {\n                util.merge(layer, this._layerConfig[zlevel], true);\n            }\n            // TODO Remove EL_AFTER_INCREMENTAL_INC magic number\n            else if (this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC]) {\n                util.merge(layer, this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC], true);\n            }\n\n            if (virtual) {\n                layer.virtual = virtual;\n            }\n\n            this.insertLayer(zlevel, layer);\n\n            // Context is created after dom inserted to document\n            // Or excanvas will get 0px clientWidth and clientHeight\n            layer.initContext();\n        }\n\n        return layer;\n    }\n\n    insertLayer(zlevel: number, layer: Layer) {\n\n        const layersMap = this._layers;\n        const zlevelList = this._zlevelList;\n        const len = zlevelList.length;\n        const domRoot = this._domRoot;\n        let prevLayer = null;\n        let i = -1;\n\n        if (layersMap[zlevel]) {\n            if (process.env.NODE_ENV !== 'production') {\n                util.logError('ZLevel ' + zlevel + ' has been used already');\n            }\n            return;\n        }\n        // Check if is a valid layer\n        if (!isLayerValid(layer)) {\n            if (process.env.NODE_ENV !== 'production') {\n                util.logError('Layer of zlevel ' + zlevel + ' is not valid');\n            }\n            return;\n        }\n\n        if (len > 0 && zlevel > zlevelList[0]) {\n            for (i = 0; i < len - 1; i++) {\n                if (\n                    zlevelList[i] < zlevel\n                    && zlevelList[i + 1] > zlevel\n                ) {\n                    break;\n                }\n            }\n            prevLayer = layersMap[zlevelList[i]];\n        }\n        zlevelList.splice(i + 1, 0, zlevel);\n\n        layersMap[zlevel] = layer;\n\n        // Virtual layer will not directly show on the screen.\n        // (It can be a WebGL layer and assigned to a ZRImage element)\n        // But it still under management of zrender.\n        if (!layer.virtual) {\n            if (prevLayer) {\n                const prevDom = prevLayer.dom;\n                if (prevDom.nextSibling) {\n                    domRoot.insertBefore(\n                        layer.dom,\n                        prevDom.nextSibling\n                    );\n                }\n                else {\n                    domRoot.appendChild(layer.dom);\n                }\n            }\n            else {\n                if (domRoot.firstChild) {\n                    domRoot.insertBefore(layer.dom, domRoot.firstChild);\n                }\n                else {\n                    domRoot.appendChild(layer.dom);\n                }\n            }\n        }\n\n        layer.painter || (layer.painter = this);\n    }\n\n    // Iterate each layer\n    eachLayer(cb: (this: T, layer: Layer, z: number) => void, context?: T) {\n        const zlevelList = this._zlevelList;\n        for (let i = 0; i < zlevelList.length; i++) {\n            const z = zlevelList[i];\n            cb.call(context, this._layers[z], z);\n        }\n    }\n\n    // Iterate each buildin layer\n    eachBuiltinLayer(cb: (this: T, layer: Layer, z: number) => void, context?: T) {\n        const zlevelList = this._zlevelList;\n        for (let i = 0; i < zlevelList.length; i++) {\n            const z = zlevelList[i];\n            const layer = this._layers[z];\n            if (layer.__builtin__) {\n                cb.call(context, layer, z);\n            }\n        }\n    }\n\n    // Iterate each other layer except buildin layer\n    eachOtherLayer(cb: (this: T, layer: Layer, z: number) => void, context?: T) {\n        const zlevelList = this._zlevelList;\n        for (let i = 0; i < zlevelList.length; i++) {\n            const z = zlevelList[i];\n            const layer = this._layers[z];\n            if (!layer.__builtin__) {\n                cb.call(context, layer, z);\n            }\n        }\n    }\n\n    /**\n     * 获取所有已创建的层\n     * @param prevLayer\n     */\n    getLayers() {\n        return this._layers;\n    }\n\n    _updateLayerStatus(list: Displayable[]) {\n\n        this.eachBuiltinLayer(function (layer, z) {\n            layer.__dirty = layer.__used = false;\n        });\n\n        function updatePrevLayer(idx: number) {\n            if (prevLayer) {\n                if (prevLayer.__endIndex !== idx) {\n                    prevLayer.__dirty = true;\n                }\n                prevLayer.__endIndex = idx;\n            }\n        }\n\n        if (this._singleCanvas) {\n            for (let i = 1; i < list.length; i++) {\n                const el = list[i];\n                if (el.zlevel !== list[i - 1].zlevel || el.incremental) {\n                    this._needsManuallyCompositing = true;\n                    break;\n                }\n            }\n        }\n\n        let prevLayer: Layer = null;\n        let incrementalLayerCount = 0;\n        let prevZlevel;\n        let i;\n\n        for (i = 0; i < list.length; i++) {\n            const el = list[i];\n            const zlevel = el.zlevel;\n            let layer;\n\n            if (prevZlevel !== zlevel) {\n                prevZlevel = zlevel;\n                incrementalLayerCount = 0;\n            }\n\n            // TODO Not use magic number on zlevel.\n\n            // Each layer with increment element can be separated to 3 layers.\n            //          (Other Element drawn after incremental element)\n            // -----------------zlevel + EL_AFTER_INCREMENTAL_INC--------------------\n            //                      (Incremental element)\n            // ----------------------zlevel + INCREMENTAL_INC------------------------\n            //              (Element drawn before incremental element)\n            // --------------------------------zlevel--------------------------------\n            if (el.incremental) {\n                layer = this.getLayer(zlevel + INCREMENTAL_INC, this._needsManuallyCompositing);\n                layer.incremental = true;\n                incrementalLayerCount = 1;\n            }\n            else {\n                layer = this.getLayer(\n                    zlevel + (incrementalLayerCount > 0 ? EL_AFTER_INCREMENTAL_INC : 0),\n                    this._needsManuallyCompositing\n                );\n            }\n\n            if (!layer.__builtin__) {\n                util.logError('ZLevel ' + zlevel + ' has been used by unkown layer ' + layer.id);\n            }\n\n            if (layer !== prevLayer) {\n                layer.__used = true;\n                if (layer.__startIndex !== i) {\n                    layer.__dirty = true;\n                }\n                layer.__startIndex = i;\n                if (!layer.incremental) {\n                    layer.__drawIndex = i;\n                }\n                else {\n                    // Mark layer draw index needs to update.\n                    layer.__drawIndex = -1;\n                }\n                updatePrevLayer(i);\n                prevLayer = layer;\n            }\n            if ((el.__dirty & REDRAW_BIT) && !el.__inHover) {  // Ignore dirty elements in hover layer.\n                layer.__dirty = true;\n                if (layer.incremental && layer.__drawIndex < 0) {\n                    // Start draw from the first dirty element.\n                    layer.__drawIndex = i;\n                }\n            }\n        }\n\n        updatePrevLayer(i);\n\n        this.eachBuiltinLayer(function (layer, z) {\n            // Used in last frame but not in this frame. Needs clear\n            if (!layer.__used && layer.getElementCount() > 0) {\n                layer.__dirty = true;\n                layer.__startIndex = layer.__endIndex = layer.__drawIndex = 0;\n            }\n            // For incremental layer. In case start index changed and no elements are dirty.\n            if (layer.__dirty && layer.__drawIndex < 0) {\n                layer.__drawIndex = layer.__startIndex;\n            }\n        });\n    }\n\n    /**\n     * 清除hover层外所有内容\n     */\n    clear() {\n        this.eachBuiltinLayer(this._clearLayer);\n        return this;\n    }\n\n    _clearLayer(layer: Layer) {\n        layer.clear();\n    }\n\n    setBackgroundColor(backgroundColor: string | GradientObject | ImagePatternObject) {\n        this._backgroundColor = backgroundColor;\n\n        util.each(this._layers, layer => {\n            layer.setUnpainted();\n        });\n    }\n\n    /**\n     * 修改指定zlevel的绘制参数\n     */\n    configLayer(zlevel: number, config: LayerConfig) {\n        if (config) {\n            const layerConfig = this._layerConfig;\n            if (!layerConfig[zlevel]) {\n                layerConfig[zlevel] = config;\n            }\n            else {\n                util.merge(layerConfig[zlevel], config, true);\n            }\n\n            for (let i = 0; i < this._zlevelList.length; i++) {\n                const _zlevel = this._zlevelList[i];\n                // TODO Remove EL_AFTER_INCREMENTAL_INC magic number\n                if (_zlevel === zlevel || _zlevel === zlevel + EL_AFTER_INCREMENTAL_INC) {\n                    const layer = this._layers[_zlevel];\n                    util.merge(layer, layerConfig[zlevel], true);\n                }\n            }\n        }\n    }\n\n    /**\n     * 删除指定层\n     * @param zlevel 层所在的zlevel\n     */\n    delLayer(zlevel: number) {\n        const layers = this._layers;\n        const zlevelList = this._zlevelList;\n        const layer = layers[zlevel];\n        if (!layer) {\n            return;\n        }\n        layer.dom.parentNode.removeChild(layer.dom);\n        delete layers[zlevel];\n\n        zlevelList.splice(util.indexOf(zlevelList, zlevel), 1);\n    }\n\n    /**\n     * 区域大小变化后重绘\n     */\n    resize(\n        width?: number | string,\n        height?: number | string\n    ) {\n        if (!this._domRoot.style) { // Maybe in node or worker\n            if (width == null || height == null) {\n                return;\n            }\n            // TODO width / height may be string\n            this._width = width as number;\n            this._height = height as number;\n\n            this.getLayer(CANVAS_ZLEVEL).resize(width as number, height as number);\n        }\n        else {\n            const domRoot = this._domRoot;\n            // FIXME Why ?\n            domRoot.style.display = 'none';\n\n            // Save input w/h\n            const opts = this._opts;\n            const root = this.root;\n            width != null && (opts.width = width);\n            height != null && (opts.height = height);\n\n            width = getSize(root, 0, opts);\n            height = getSize(root, 1, opts);\n\n            domRoot.style.display = '';\n\n            // 优化没有实际改变的resize\n            if (this._width !== width || height !== this._height) {\n                domRoot.style.width = width + 'px';\n                domRoot.style.height = height + 'px';\n\n                for (let id in this._layers) {\n                    if (this._layers.hasOwnProperty(id)) {\n                        this._layers[id].resize(width, height);\n                    }\n                }\n\n                this.refresh(true);\n            }\n\n            this._width = width;\n            this._height = height;\n\n        }\n        return this;\n    }\n\n    /**\n     * 清除单独的一个层\n     * @param {number} zlevel\n     */\n    clearLayer(zlevel: number) {\n        const layer = this._layers[zlevel];\n        if (layer) {\n            layer.clear();\n        }\n    }\n\n    /**\n     * 释放\n     */\n    dispose() {\n        this.root.innerHTML = '';\n\n        this.root =\n        this.storage =\n\n        this._domRoot =\n        this._layers = null;\n    }\n\n    /**\n     * Get canvas which has all thing rendered\n     */\n    getRenderedCanvas(opts?: {\n        backgroundColor?: string | GradientObject | ImagePatternObject\n        pixelRatio?: number\n    }) {\n        opts = opts || {};\n        if (this._singleCanvas && !this._compositeManually) {\n            return this._layers[CANVAS_ZLEVEL].dom;\n        }\n\n        const imageLayer = new Layer('image', this, opts.pixelRatio || this.dpr);\n        imageLayer.initContext();\n        imageLayer.clear(false, opts.backgroundColor || this._backgroundColor);\n\n        const ctx = imageLayer.ctx;\n\n        if (opts.pixelRatio <= this.dpr) {\n            this.refresh();\n\n            const width = imageLayer.dom.width;\n            const height = imageLayer.dom.height;\n            this.eachLayer(function (layer) {\n                if (layer.__builtin__) {\n                    ctx.drawImage(layer.dom, 0, 0, width, height);\n                }\n                else if (layer.renderToCanvas) {\n                    ctx.save();\n                    layer.renderToCanvas(ctx);\n                    ctx.restore();\n                }\n            });\n        }\n        else {\n            // PENDING, echarts-gl and incremental rendering.\n            const scope = {\n                inHover: false,\n                viewWidth: this._width,\n                viewHeight: this._height\n            };\n            const displayList = this.storage.getDisplayList(true);\n            for (let i = 0, len = displayList.length; i < len; i++) {\n                const el = displayList[i];\n                brush(ctx, el, scope, i === len - 1);\n            }\n        }\n\n        return imageLayer.dom;\n    }\n    /**\n     * 获取绘图区域宽度\n     */\n    getWidth() {\n        return this._width;\n    }\n\n    /**\n     * 获取绘图区域高度\n     */\n    getHeight() {\n        return this._height;\n    }\n};","import { PathRebuilder } from '../core/PathProxy';\r\nimport { isAroundZero } from './helper';\r\n\r\nconst mathSin = Math.sin;\r\nconst mathCos = Math.cos;\r\nconst PI = Math.PI;\r\nconst PI2 = Math.PI * 2;\r\nconst degree = 180 / PI;\r\n\r\n\r\nexport default class SVGPathRebuilder implements PathRebuilder {\r\n    private _d: (string | number)[]\r\n    private _str: string\r\n    private _invalid: boolean\r\n\r\n    // If is start of subpath\r\n    private _start: boolean\r\n    private _p: number\r\n\r\n    reset(precision?: number) {\r\n        this._start = true;\r\n        this._d = [];\r\n        this._str = '';\r\n\r\n        this._p = Math.pow(10, precision || 4);\r\n    }\r\n    moveTo(x: number, y: number) {\r\n        this._add('M', x, y);\r\n    }\r\n    lineTo(x: number, y: number) {\r\n        this._add('L', x, y);\r\n    }\r\n    bezierCurveTo(x: number, y: number, x2: number, y2: number, x3: number, y3: number) {\r\n        this._add('C', x, y, x2, y2, x3, y3);\r\n    }\r\n    quadraticCurveTo(x: number, y: number, x2: number, y2: number) {\r\n        this._add('Q', x, y, x2, y2);\r\n    }\r\n    arc(cx: number, cy: number, r: number, startAngle: number, endAngle: number, anticlockwise: boolean) {\r\n        this.ellipse(cx, cy, r, r, 0, startAngle, endAngle, anticlockwise);\r\n    }\r\n    ellipse(\r\n        cx: number, cy: number,\r\n        rx: number, ry: number,\r\n        psi: number,\r\n        startAngle: number,\r\n        endAngle: number,\r\n        anticlockwise: boolean\r\n    ) {\r\n        let dTheta = endAngle - startAngle;\r\n        const clockwise = !anticlockwise;\r\n\r\n        const dThetaPositive = Math.abs(dTheta);\r\n        const isCircle = isAroundZero(dThetaPositive - PI2)\r\n            || (clockwise ? dTheta >= PI2 : -dTheta >= PI2);\r\n\r\n        // Mapping to 0~2PI\r\n        const unifiedTheta = dTheta > 0 ? dTheta % PI2 : (dTheta % PI2 + PI2);\r\n\r\n        let large = false;\r\n        if (isCircle) {\r\n            large = true;\r\n        }\r\n        else if (isAroundZero(dThetaPositive)) {\r\n            large = false;\r\n        }\r\n        else {\r\n            large = (unifiedTheta >= PI) === !!clockwise;\r\n        }\r\n\r\n        const x0 = cx + rx * mathCos(startAngle);\r\n        const y0 = cy + ry * mathSin(startAngle);\r\n\r\n        if (this._start) {\r\n            // Move to (x0, y0) only when CMD.A comes at the\r\n            // first position of a shape.\r\n            // For instance, when drawing a ring, CMD.A comes\r\n            // after CMD.M, so it's unnecessary to move to\r\n            // (x0, y0).\r\n            this._add('M', x0, y0);\r\n        }\r\n\r\n        const xRot = Math.round(psi * degree);\r\n        // It will not draw if start point and end point are exactly the same\r\n        // We need to add two arcs\r\n        if (isCircle) {\r\n            const p = 1 / this._p;\r\n            const dTheta = (clockwise ? 1 : -1) * (PI2 - p);\r\n            this._add(\r\n                'A', rx, ry, xRot, 1, +clockwise,\r\n                cx + rx * mathCos(startAngle + dTheta),\r\n                cy + ry * mathSin(startAngle + dTheta)\r\n            );\r\n            // TODO.\r\n            // Usually we can simply divide the circle into two halfs arcs.\r\n            // But it will cause slightly diff with previous screenshot.\r\n            // We can't tell it but visual regression test can. To avoid too much breaks.\r\n            // We keep the logic on the browser as before.\r\n            // But in SSR mode wich has lower precision. We close the circle by adding another arc.\r\n            if (p > 1e-2) {\r\n                this._add('A', rx, ry, xRot, 0, +clockwise, x0, y0);\r\n            }\r\n        }\r\n        else {\r\n            const x = cx + rx * mathCos(endAngle);\r\n            const y = cy + ry * mathSin(endAngle);\r\n\r\n            // FIXME Ellipse\r\n            this._add('A', rx, ry, xRot, +large, +clockwise, x, y);\r\n        }\r\n\r\n    }\r\n    rect(x: number, y: number, w: number, h: number) {\r\n        this._add('M', x, y);\r\n        // Use relative coordinates to reduce the size.\r\n        this._add('l', w, 0);\r\n        this._add('l', 0, h);\r\n        this._add('l', -w, 0);\r\n        // this._add('L', x, y);\r\n        this._add('Z');\r\n    }\r\n    closePath() {\r\n        // Not use Z as first command\r\n        if (this._d.length > 0) {\r\n            this._add('Z');\r\n        }\r\n    }\r\n\r\n    _add(cmd: string, a?: number, b?: number, c?: number, d?: number, e?: number, f?: number, g?: number, h?: number) {\r\n        const vals = [];\r\n        const p = this._p;\r\n        for (let i = 1; i < arguments.length; i++) {\r\n            const val = arguments[i];\r\n            if (isNaN(val)) {\r\n                this._invalid = true;\r\n                return;\r\n            }\r\n            vals.push(Math.round(val * p) / p);\r\n        }\r\n        this._d.push(cmd + vals.join(' '));\r\n        this._start = cmd === 'Z';\r\n    }\r\n\r\n    generateStr() {\r\n        this._str = this._invalid ? '' : this._d.join('');\r\n        this._d = [];\r\n    }\r\n    getStr() {\r\n        return this._str;\r\n    }\r\n}","\r\nimport Path, { DEFAULT_PATH_STYLE, PathStyleProps } from '../graphic/Path';\r\nimport ZRImage, { ImageStyleProps } from '../graphic/Image';\r\nimport TSpan, { TSpanStyleProps } from '../graphic/TSpan';\r\nimport { getLineDash } from '../canvas/dashStyle';\r\nimport { map } from '../core/util';\r\nimport { normalizeColor } from './helper';\r\n\r\ntype AllStyleOption = PathStyleProps | TSpanStyleProps | ImageStyleProps;\r\n\r\nconst NONE = 'none';\r\nconst mathRound = Math.round;\r\n\r\nfunction pathHasFill(style: AllStyleOption): style is PathStyleProps {\r\n    const fill = (style as PathStyleProps).fill;\r\n    return fill != null && fill !== NONE;\r\n}\r\n\r\nfunction pathHasStroke(style: AllStyleOption): style is PathStyleProps {\r\n    const stroke = (style as PathStyleProps).stroke;\r\n    return stroke != null && stroke !== NONE;\r\n}\r\n\r\nconst strokeProps = ['lineCap', 'miterLimit', 'lineJoin'] as const;\r\nconst svgStrokeProps = map(strokeProps, prop => `stroke-${prop.toLowerCase()}`);\r\n\r\nexport default function mapStyleToAttrs(\r\n    updateAttr: (key: string, val: string | number) => void,\r\n    style: AllStyleOption,\r\n    el: Path | TSpan | ZRImage,\r\n    /**\r\n     * Will try not to set the attribute if it's using default value if not using forceUpdate.\r\n     * Mainly for reduce the generated size in svg-ssr mode.\r\n     */\r\n    forceUpdate: boolean\r\n): void {\r\n    const opacity = style.opacity == null ? 1 : style.opacity;\r\n\r\n    // only set opacity. stroke and fill cannot be applied to svg image\r\n    if (el instanceof ZRImage) {\r\n        updateAttr('opacity', opacity);\r\n        return;\r\n    }\r\n\r\n    if (pathHasFill(style)) {\r\n        const fill = normalizeColor(style.fill as string);\r\n        updateAttr('fill', fill.color);\r\n        const fillOpacity = style.fillOpacity != null\r\n            ? style.fillOpacity * fill.opacity * opacity\r\n            : fill.opacity * opacity;\r\n        if (forceUpdate || fillOpacity < 1) {\r\n            updateAttr('fill-opacity', fillOpacity);\r\n        }\r\n    }\r\n    else {\r\n        updateAttr('fill', NONE);\r\n    }\r\n\r\n    if (pathHasStroke(style)) {\r\n        const stroke = normalizeColor(style.stroke as string);\r\n        updateAttr('stroke', stroke.color);\r\n        const strokeScale = style.strokeNoScale\r\n            ? (el as Path).getLineScale()\r\n            : 1;\r\n        const strokeWidth = (strokeScale ? (style.lineWidth || 0) / strokeScale : 0);\r\n        const strokeOpacity = style.strokeOpacity != null\r\n            ? style.strokeOpacity * stroke.opacity * opacity\r\n            : stroke.opacity * opacity;\r\n        const strokeFirst = style.strokeFirst;\r\n\r\n        if (forceUpdate || strokeWidth !== 1) {\r\n            updateAttr('stroke-width', strokeWidth);\r\n        }\r\n        // stroke then fill for text; fill then stroke for others\r\n        if (forceUpdate || strokeFirst) {\r\n            updateAttr('paint-order', strokeFirst ? 'stroke' : 'fill');\r\n        }\r\n        if (forceUpdate || strokeOpacity < 1) {\r\n            updateAttr('stroke-opacity', strokeOpacity);\r\n        }\r\n\r\n        if (style.lineDash) {\r\n            let [lineDash, lineDashOffset] = getLineDash(el);\r\n            if (lineDash) {\r\n                lineDashOffset = mathRound(lineDashOffset || 0);\r\n                updateAttr('stroke-dasharray', lineDash.join(','));\r\n                if (lineDashOffset || forceUpdate) {\r\n                    updateAttr('stroke-dashoffset', lineDashOffset);\r\n                }\r\n            }\r\n        }\r\n        else if (forceUpdate) {\r\n            // Reset if force update.\r\n            updateAttr('stroke-dasharray', NONE);\r\n        }\r\n\r\n        // PENDING reset\r\n        for (let i = 0; i < strokeProps.length; i++) {\r\n            const propName = strokeProps[i];\r\n            if (forceUpdate || style[propName] !== DEFAULT_PATH_STYLE[propName]) {\r\n                const val = style[propName] || DEFAULT_PATH_STYLE[propName];\r\n                // TODO reset\r\n                val && updateAttr(svgStrokeProps[i], val);\r\n            }\r\n        }\r\n    }\r\n    else if (forceUpdate) {\r\n        updateAttr('stroke', NONE);\r\n    }\r\n}\r\n","import { keys, map } from '../core/util';\nimport { encodeHTML } from '../core/dom';\n\nexport type CSSSelectorVNode = Record\nexport type CSSAnimationVNode = Record>\n\nexport const SVGNS = 'http://www.w3.org/2000/svg';\nexport const XLINKNS = 'http://www.w3.org/1999/xlink';\nexport const XMLNS = 'http://www.w3.org/2000/xmlns/';\nexport const XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace';\nexport const META_DATA_PREFIX = 'ecmeta_';\n\nexport function createElement(name: string) {\n    return document.createElementNS(SVGNS, name);\n}\n\nexport type SVGVNodeAttrs = Record\nexport interface SVGVNode {\n    tag: string,\n    attrs: SVGVNodeAttrs,\n    children?: SVGVNode[],\n    text?: string\n\n    // For patching\n    elm?: Node\n    key: string\n};\nexport function createVNode(\n    tag: string,\n    key: string,\n    attrs?: SVGVNodeAttrs,\n    children?: SVGVNode[],\n    text?: string\n): SVGVNode {\n    return {\n        tag,\n        attrs: attrs || {},\n        children,\n        text,\n        key\n    };\n}\n\nfunction createElementOpen(name: string, attrs?: SVGVNodeAttrs) {\n    const attrsStr: string[] = [];\n    if (attrs) {\n        // eslint-disable-next-line\n        for (let key in attrs) {\n            const val = attrs[key];\n            let part = key;\n            // Same with the logic in patch.\n            if (val === false) {\n                continue;\n            }\n            else if (val !== true && val != null) {\n                part += `=\"${val}\"`;\n            }\n            attrsStr.push(part);\n        }\n    }\n    return `<${name} ${attrsStr.join(' ')}>`;\n}\n\nfunction createElementClose(name: string) {\n    return ``;\n}\n\nexport function vNodeToString(el: SVGVNode, opts?: {\n    newline?: boolean\n}) {\n    opts = opts || {};\n    const S = opts.newline ? '\\n' : '';\n    function convertElToString(el: SVGVNode): string {\n        const {children, tag, attrs, text} = el;\n        return createElementOpen(tag, attrs)\n            + (tag !== 'style' ? encodeHTML(text) : text || '')\n            + (children ? `${S}${map(children, child => convertElToString(child)).join(S)}${S}` : '')\n            + createElementClose(tag);\n    }\n    return convertElToString(el);\n}\n\nexport function getCssString(\n    selectorNodes: Record,\n    animationNodes: Record,\n    opts?: {\n        newline?: boolean\n    }\n) {\n    opts = opts || {};\n    const S = opts.newline ? '\\n' : '';\n    const bracketBegin = ` {${S}`;\n    const bracketEnd = `${S}}`;\n    const selectors = map(keys(selectorNodes), className => {\n        return className + bracketBegin + map(keys(selectorNodes[className]), attrName => {\n            return `${attrName}:${selectorNodes[className][attrName]};`;\n        }).join(S) + bracketEnd;\n    }).join(S);\n    const animations = map(keys(animationNodes), (animationName) => {\n        return `@keyframes ${animationName}${bracketBegin}` + map(keys(animationNodes[animationName]), percent => {\n            return percent + bracketBegin + map(keys(animationNodes[animationName][percent]), attrName => {\n                let val = animationNodes[animationName][percent][attrName];\n                // postprocess\n                if (attrName === 'd') {\n                    val = `path(\"${val}\")`;\n                }\n                return `${attrName}:${val};`;\n            }).join(S) + bracketEnd;\n        }).join(S) + bracketEnd;\n    }).join(S);\n\n    if (!selectors && !animations) {\n        return '';\n    }\n\n    return [''].join(S);\n}\n\n\nexport interface BrushScope {\n    zrId: string\n\n    shadowCache: Record\n    gradientCache: Record\n    patternCache: Record\n    clipPathCache: Record\n\n    defs: Record\n\n    cssNodes: Record\n    cssAnims: Record>>\n    /**\n     * Cache for css style string, mapping from style string to class name.\n     */\n    cssStyleCache: Record\n\n    cssAnimIdx: number\n\n    shadowIdx: number\n    gradientIdx: number\n    patternIdx: number\n    clipPathIdx: number\n    // configs\n    /**\n     * If create animates nodes.\n     */\n    animation?: boolean,\n    /**\n     * If create emphasis styles.\n     */\n    emphasis?: boolean,\n\n    /**\n     * If will update. Some optimization for string generation can't be applied.\n     */\n    willUpdate?: boolean\n\n    /**\n     * If compress the output string.\n     */\n    compress?: boolean\n\n    ssr?: boolean\n}\n\nexport function createBrushScope(zrId: string): BrushScope {\n    return {\n        zrId,\n        shadowCache: {},\n        patternCache: {},\n        gradientCache: {},\n        clipPathCache: {},\n        defs: {},\n\n        cssNodes: {},\n        cssAnims: {},\n        cssStyleCache: {},\n\n        cssAnimIdx: 0,\n\n        shadowIdx: 0,\n        gradientIdx: 0,\n        patternIdx: 0,\n        clipPathIdx: 0\n    };\n}\n\nexport function createSVGVNode(\n    width: number | string,\n    height: number | string,\n    children?: SVGVNode[],\n    useViewBox?: boolean\n) {\n    return createVNode(\n        'svg',\n        'root',\n        {\n            'width': width,\n            'height': height,\n            'xmlns': SVGNS,\n            'xmlns:xlink': XLINKNS,\n            'version': '1.1',\n            'baseProfile': 'full',\n            'viewBox': useViewBox ? `0 0 ${width} ${height}` : false\n        },\n        children\n    );\n}","let cssClassIdx = 0;\n\nexport function getClassId() {\n    return cssClassIdx++;\n}\n","import Transformable, { copyTransform } from '../core/Transformable';\nimport Displayable from '../graphic/Displayable';\nimport { SVGVNodeAttrs, BrushScope, createBrushScope} from './core';\nimport Path from '../graphic/Path';\nimport SVGPathRebuilder from './SVGPathRebuilder';\nimport PathProxy from '../core/PathProxy';\nimport { getPathPrecision, getSRTTransformString } from './helper';\nimport { each, extend, filter, isNumber, isString, keys } from '../core/util';\nimport Animator from '../animation/Animator';\nimport CompoundPath from '../graphic/CompoundPath';\nimport { AnimationEasing } from '../animation/easing';\nimport { createCubicEasingFunc } from '../animation/cubicEasing';\nimport { getClassId } from './cssClassId';\n\nexport const EASING_MAP: Record = {\n    // From https://easings.net/\n    cubicIn: '0.32,0,0.67,0',\n    cubicOut: '0.33,1,0.68,1',\n    cubicInOut: '0.65,0,0.35,1',\n    quadraticIn: '0.11,0,0.5,0',\n    quadraticOut: '0.5,1,0.89,1',\n    quadraticInOut: '0.45,0,0.55,1',\n    quarticIn: '0.5,0,0.75,0',\n    quarticOut: '0.25,1,0.5,1',\n    quarticInOut: '0.76,0,0.24,1',\n    quinticIn: '0.64,0,0.78,0',\n    quinticOut: '0.22,1,0.36,1',\n    quinticInOut: '0.83,0,0.17,1',\n    sinusoidalIn: '0.12,0,0.39,0',\n    sinusoidalOut: '0.61,1,0.88,1',\n    sinusoidalInOut: '0.37,0,0.63,1',\n    exponentialIn: '0.7,0,0.84,0',\n    exponentialOut: '0.16,1,0.3,1',\n    exponentialInOut: '0.87,0,0.13,1',\n    circularIn: '0.55,0,1,0.45',\n    circularOut: '0,0.55,0.45,1',\n    circularInOut: '0.85,0,0.15,1'\n    // TODO elastic, bounce\n};\n\nconst transformOriginKey = 'transform-origin';\n\nfunction buildPathString(el: Path, kfShape: Path['shape'], path: PathProxy) {\n    const shape = extend({}, el.shape);\n    extend(shape, kfShape);\n\n    el.buildPath(path, shape);\n    const svgPathBuilder = new SVGPathRebuilder();\n    svgPathBuilder.reset(getPathPrecision(el));\n    path.rebuildPath(svgPathBuilder, 1);\n    svgPathBuilder.generateStr();\n    // will add path(\"\") when generated to css string in the final step.\n    return svgPathBuilder.getStr();\n}\n\nfunction setTransformOrigin(target: Record, transform: Transformable) {\n    const {originX, originY} = transform;\n    if (originX || originY) {\n        target[transformOriginKey] = `${originX}px ${originY}px`;\n    }\n}\n\nexport const ANIMATE_STYLE_MAP: Record = {\n    fill: 'fill',\n    opacity: 'opacity',\n    lineWidth: 'stroke-width',\n    lineDashOffset: 'stroke-dashoffset'\n    // TODO shadow is not supported.\n};\n\ntype CssKF = Record;\n\nfunction addAnimation(cssAnim: Record, scope: BrushScope) {\n    const animationName = scope.zrId + '-ani-' + scope.cssAnimIdx++;\n    scope.cssAnims[animationName] = cssAnim;\n    return animationName;\n}\n\nfunction createCompoundPathCSSAnimation(\n    el: CompoundPath,\n    attrs: SVGVNodeAttrs,\n    scope: BrushScope\n) {\n    const paths = el.shape.paths;\n    const composedAnim: Record = {};\n    let cssAnimationCfg: string;\n    let cssAnimationName: string;\n    each(paths, path => {\n        const subScope = createBrushScope(scope.zrId);\n        subScope.animation = true;\n        createCSSAnimation(path, {}, subScope, true);\n        const cssAnims = subScope.cssAnims;\n        const cssNodes = subScope.cssNodes;\n        const animNames = keys(cssAnims);\n        const len = animNames.length;\n        if (!len) {\n            return;\n        }\n        cssAnimationName = animNames[len - 1];\n        // Only use last animation because they are conflicted.\n        const lastAnim = cssAnims[cssAnimationName];\n        // eslint-disable-next-line\n        for (let percent in lastAnim) {\n            const kf = lastAnim[percent];\n            composedAnim[percent] = composedAnim[percent] || { d: '' };\n            composedAnim[percent].d += kf.d || '';\n        }\n        // eslint-disable-next-line\n        for (let className in cssNodes) {\n            const val = cssNodes[className].animation;\n            if (val.indexOf(cssAnimationName) >= 0) {\n                // Only pick the animation configuration of last subpath.\n                cssAnimationCfg = val;\n            }\n        }\n    });\n\n    if (!cssAnimationCfg) {\n        return;\n    }\n\n    // Remove the attrs in the element because it will be set by animation.\n    // Reduce the size.\n    attrs.d = false;\n    const animationName = addAnimation(composedAnim, scope);\n    return cssAnimationCfg.replace(cssAnimationName, animationName);\n}\n\nfunction getEasingFunc(easing: AnimationEasing) {\n    return isString(easing)\n        ? EASING_MAP[easing]\n            ? `cubic-bezier(${EASING_MAP[easing]})`\n            : createCubicEasingFunc(easing) ? easing : ''\n        : '';\n}\n\nexport function createCSSAnimation(\n    el: Displayable,\n    attrs: SVGVNodeAttrs,\n    scope: BrushScope,\n    onlyShape?: boolean\n) {\n    const animators = el.animators;\n    const len = animators.length;\n\n    const cssAnimations: string[] = [];\n\n    if (el instanceof CompoundPath) {\n        const animationCfg = createCompoundPathCSSAnimation(el, attrs, scope);\n        if (animationCfg) {\n            cssAnimations.push(animationCfg);\n        }\n        else if (!len) {\n            return;\n        }\n    }\n    else if (!len) {\n        return;\n    }\n    // Group animators by it's configuration\n    const groupAnimators: Record[]]> = {};\n    for (let i = 0; i < len; i++) {\n        const animator = animators[i];\n        const cfgArr: (string | number)[] = [animator.getMaxTime() / 1000 + 's'];\n        const easing = getEasingFunc(animator.getClip().easing);\n        const delay = animator.getDelay();\n\n        if (easing) {\n            cfgArr.push(easing);\n        }\n        else {\n            cfgArr.push('linear');\n        }\n        if (delay) {\n            cfgArr.push(delay / 1000 + 's');\n        }\n        if (animator.getLoop()) {\n            cfgArr.push('infinite');\n        }\n        const cfg = cfgArr.join(' ');\n\n        // TODO fill mode\n        groupAnimators[cfg] = groupAnimators[cfg] || [cfg, [] as Animator[]];\n        groupAnimators[cfg][1].push(animator);\n    }\n\n    function createSingleCSSAnimation(groupAnimator: [string, Animator[]]) {\n        const animators = groupAnimator[1];\n        const len = animators.length;\n        const transformKfs: Record = {};\n        const shapeKfs: Record = {};\n\n        const finalKfs: Record = {};\n\n        const animationTimingFunctionAttrName = 'animation-timing-function';\n\n        function saveAnimatorTrackToCssKfs(\n            animator: Animator,\n            cssKfs: Record,\n            toCssAttrName?: (propName: string) => string\n        ) {\n            const tracks = animator.getTracks();\n            const maxTime = animator.getMaxTime();\n            for (let k = 0; k < tracks.length; k++) {\n                const track = tracks[k];\n                if (track.needsAnimate()) {\n                    const kfs = track.keyframes;\n                    let attrName = track.propName;\n                    toCssAttrName && (attrName = toCssAttrName(attrName));\n                    if (attrName) {\n                        for (let i = 0; i < kfs.length; i++) {\n                            const kf = kfs[i];\n                            const percent = Math.round(kf.time / maxTime * 100) + '%';\n                            const kfEasing = getEasingFunc(kf.easing);\n                            const rawValue = kf.rawValue;\n\n                            // TODO gradient\n                            if (isString(rawValue) || isNumber(rawValue)) {\n                                cssKfs[percent] = cssKfs[percent] || {};\n                                cssKfs[percent][attrName] = kf.rawValue;\n\n                                if (kfEasing) {\n                                    // TODO. If different property have different easings.\n                                    cssKfs[percent][animationTimingFunctionAttrName] = kfEasing;\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n\n        // Find all transform animations.\n        // TODO origin, parent\n        for (let i = 0; i < len; i++) {\n            const animator = animators[i];\n            const targetProp = animator.targetName;\n            if (!targetProp) {\n                !onlyShape && saveAnimatorTrackToCssKfs(animator, transformKfs);\n            }\n            else if (targetProp === 'shape') {\n                saveAnimatorTrackToCssKfs(animator, shapeKfs);\n            }\n        }\n\n        // eslint-disable-next-line\n        for (let percent in transformKfs) {\n            const transform = {} as Transformable;\n            copyTransform(transform, el);\n            extend(transform, transformKfs[percent]);\n            const str = getSRTTransformString(transform);\n            const timingFunction = transformKfs[percent][animationTimingFunctionAttrName];\n            finalKfs[percent] = str ? {\n                transform: str\n            } : {};\n            // TODO set transform origin in element?\n            setTransformOrigin(finalKfs[percent], transform);\n\n            // Save timing function\n            if (timingFunction) {\n                finalKfs[percent][animationTimingFunctionAttrName] = timingFunction;\n            }\n        };\n\n\n        let path: PathProxy;\n        let canAnimateShape = true;\n        // eslint-disable-next-line\n        for (let percent in shapeKfs) {\n            finalKfs[percent] = finalKfs[percent] || {};\n\n            const isFirst = !path;\n            const timingFunction = shapeKfs[percent][animationTimingFunctionAttrName];\n\n            if (isFirst) {\n                path = new PathProxy();\n            }\n            let len = path.len();\n            path.reset();\n            finalKfs[percent].d = buildPathString(el as Path, shapeKfs[percent], path);\n            let newLen = path.len();\n            // Path data don't match.\n            if (!isFirst && len !== newLen) {\n                canAnimateShape = false;\n                break;\n            }\n\n            // Save timing function\n            if (timingFunction) {\n                finalKfs[percent][animationTimingFunctionAttrName] = timingFunction;\n            }\n        };\n        if (!canAnimateShape) {\n            // eslint-disable-next-line\n            for (let percent in finalKfs) {\n                delete finalKfs[percent].d;\n            }\n        }\n\n        if (!onlyShape) {\n            for (let i = 0; i < len; i++) {\n                const animator = animators[i];\n                const targetProp = animator.targetName;\n                if (targetProp === 'style') {\n                    saveAnimatorTrackToCssKfs(\n                        animator, finalKfs, (propName) => ANIMATE_STYLE_MAP[propName]\n                    );\n                }\n            }\n        }\n\n        const percents = keys(finalKfs);\n\n        // Set transform origin in attribute to reduce the size.\n        let allTransformOriginSame = true;\n        let transformOrigin;\n        for (let i = 1; i < percents.length; i++) {\n            const p0 = percents[i - 1];\n            const p1 = percents[i];\n            if (finalKfs[p0][transformOriginKey] !== finalKfs[p1][transformOriginKey]) {\n                allTransformOriginSame = false;\n                break;\n            }\n            transformOrigin = finalKfs[p0][transformOriginKey];\n        }\n        if (allTransformOriginSame && transformOrigin) {\n            for (const percent in finalKfs) {\n                if (finalKfs[percent][transformOriginKey]) {\n                    delete finalKfs[percent][transformOriginKey];\n                }\n            }\n            attrs[transformOriginKey] = transformOrigin;\n        }\n\n        if (filter(\n            percents, (percent) => keys(finalKfs[percent]).length > 0\n        ).length) {\n            const animationName = addAnimation(finalKfs, scope);\n            // eslint-disable-next-line\n            // for (const attrName in finalKfs[percents[0]]) {\n            //     // Remove the attrs in the element because it will be set by animation.\n            //     // Reduce the size.\n            //     attrs[attrName] = false;\n            // }\n            // animationName {duration easing delay loop} fillMode\n            return `${animationName} ${groupAnimator[0]} both`;\n        }\n    }\n\n    // eslint-disable-next-line\n    for (let key in groupAnimators) {\n        const animationCfg = createSingleCSSAnimation(groupAnimators[key]);\n        if (animationCfg) {\n            cssAnimations.push(animationCfg);\n        }\n    }\n\n    if (cssAnimations.length) {\n        const className = scope.zrId + '-cls-' + getClassId();\n        scope.cssNodes['.' + className] = {\n            animation: cssAnimations.join(',')\n        };\n        // TODO exists class?\n        attrs.class = className;\n    }\n}","import Displayable from '../graphic/Displayable';\nimport { liftColor } from '../tool/color';\nimport { BrushScope, SVGVNodeAttrs } from './core';\nimport { getClassId } from './cssClassId';\n\nexport function createCSSEmphasis(\n    el: Displayable,\n    attrs: SVGVNodeAttrs,\n    scope: BrushScope\n) {\n    if (!el.ignore) {\n        if (el.isSilent()) {\n            // If el is silent, it can not be hovered nor selected.\n            // So set pointer-events to pass through.\n            const style = {\n                'pointer-events': 'none'\n            };\n            setClassAttribute(style, attrs, scope, true);\n        }\n        else {\n            const emphasisStyle = el.states.emphasis && el.states.emphasis.style\n                ? el.states.emphasis.style\n                : {};\n            let fill = emphasisStyle.fill;\n            if (!fill) {\n                // No empahsis fill, lift color\n                const normalFill = el.style && el.style.fill;\n                const selectFill = el.states.select\n                    && el.states.select.style\n                    && el.states.select.style.fill;\n                const fromFill = el.currentStates.indexOf('select') >= 0\n                    ? (selectFill || normalFill)\n                    : normalFill;\n                if (fromFill) {\n                    fill = liftColor(fromFill);\n                }\n            }\n            let lineWidth = emphasisStyle.lineWidth;\n            if (lineWidth) {\n                // Symbols use transform to set size, so lineWidth\n                // should be divided by scaleX\n                const scaleX = (!emphasisStyle.strokeNoScale && el.transform)\n                    ? el.transform[0]\n                    : 1;\n                lineWidth = lineWidth / scaleX;\n            }\n            const style = {\n                cursor: 'pointer', // TODO: Should this be customized?\n            } as any;\n            if (fill) {\n                style.fill = fill;\n            }\n            if (emphasisStyle.stroke) {\n                style.stroke = emphasisStyle.stroke;\n            }\n            if (lineWidth) {\n                style['stroke-width'] = lineWidth;\n            }\n            setClassAttribute(style, attrs, scope, true);\n        }\n    }\n}\n\nfunction setClassAttribute(style: object, attrs: SVGVNodeAttrs, scope: BrushScope, withHover: boolean) {\n    const styleKey = JSON.stringify(style);\n    let className = scope.cssStyleCache[styleKey];\n    if (!className) {\n        className = scope.zrId + '-cls-' + getClassId();\n        scope.cssStyleCache[styleKey] = className;\n        scope.cssNodes['.' + className + (withHover ? ':hover' : '')] = style as any;\n    }\n    attrs.class = attrs.class ? (attrs.class + ' ' + className) : className;\n}\n","// TODO\n// 1. shadow\n// 2. Image: sx, sy, sw, sh\n\nimport {\n    adjustTextY,\n    getIdURL,\n    getMatrixStr,\n    getPathPrecision,\n    getShadowKey,\n    getSRTTransformString,\n    hasShadow,\n    isAroundZero,\n    isGradient,\n    isImagePattern,\n    isLinearGradient,\n    isPattern,\n    isRadialGradient,\n    normalizeColor,\n    round4,\n    TEXT_ALIGN_TO_ANCHOR\n} from './helper';\nimport Path, { PathStyleProps } from '../graphic/Path';\nimport ZRImage, { ImageStyleProps } from '../graphic/Image';\nimport { getLineHeight } from '../contain/text';\nimport TSpan, { TSpanStyleProps } from '../graphic/TSpan';\nimport SVGPathRebuilder from './SVGPathRebuilder';\nimport mapStyleToAttrs from './mapStyleToAttrs';\nimport { SVGVNodeAttrs, createVNode, SVGVNode, vNodeToString, BrushScope, META_DATA_PREFIX } from './core';\nimport { MatrixArray } from '../core/matrix';\nimport Displayable from '../graphic/Displayable';\nimport { assert, clone, isFunction, isString, logError, map, retrieve2 } from '../core/util';\nimport Polyline from '../graphic/shape/Polyline';\nimport Polygon from '../graphic/shape/Polygon';\nimport { GradientObject } from '../graphic/Gradient';\nimport { ImagePatternObject, SVGPatternObject } from '../graphic/Pattern';\nimport { createOrUpdateImage } from '../graphic/helper/image';\nimport { ImageLike } from '../core/types';\nimport { createCSSAnimation } from './cssAnimation';\nimport { hasSeparateFont, parseFontSize } from '../graphic/Text';\nimport { DEFAULT_FONT, DEFAULT_FONT_FAMILY } from '../core/platform';\nimport { createCSSEmphasis } from './cssEmphasis';\nimport { getElementSSRData } from '../zrender';\n\nconst round = Math.round;\n\nfunction isImageLike(val: any): val is HTMLImageElement {\n    return val && isString(val.src);\n}\nfunction isCanvasLike(val: any): val is HTMLCanvasElement {\n    return val && isFunction(val.toDataURL);\n}\n\n\ntype AllStyleOption = PathStyleProps | TSpanStyleProps | ImageStyleProps;\n\nfunction setStyleAttrs(attrs: SVGVNodeAttrs, style: AllStyleOption, el: Path | TSpan | ZRImage, scope: BrushScope) {\n    mapStyleToAttrs((key, val) => {\n        const isFillStroke = key === 'fill' || key === 'stroke';\n        if (isFillStroke && isGradient(val)) {\n            setGradient(style, attrs, key, scope);\n        }\n        else if (isFillStroke && isPattern(val)) {\n            setPattern(el, attrs, key, scope);\n        }\n        else {\n            attrs[key] = val;\n        }\n        if (isFillStroke && scope.ssr && val === 'none') {\n            // When is none, it cannot be interacted when ssr\n            // Setting `pointer-events` as `visible` to make it responding\n            // See also https://www.w3.org/TR/SVG/interact.html#PointerEventsProperty\n            attrs['pointer-events'] = 'visible';\n        }\n    }, style, el, false);\n\n    setShadow(el, attrs, scope);\n}\n\nfunction setMetaData(attrs: SVGVNodeAttrs, el: Path | TSpan | ZRImage) {\n    const metaData = getElementSSRData(el);\n    if (metaData) {\n        metaData.each((val, key) => {\n            val != null && (attrs[(META_DATA_PREFIX + key).toLowerCase()] = val + '');\n        });\n        if (el.isSilent()) {\n            attrs[META_DATA_PREFIX + 'silent'] = 'true';\n        }\n    }\n}\n\nfunction noRotateScale(m: MatrixArray) {\n    return isAroundZero(m[0] - 1)\n        && isAroundZero(m[1])\n        && isAroundZero(m[2])\n        && isAroundZero(m[3] - 1);\n}\n\nfunction noTranslate(m: MatrixArray) {\n    return isAroundZero(m[4]) && isAroundZero(m[5]);\n}\n\nfunction setTransform(attrs: SVGVNodeAttrs, m: MatrixArray, compress?: boolean) {\n    if (m && !(noTranslate(m) && noRotateScale(m))) {\n        const mul = compress ? 10 : 1e4;\n        // Use translate possible to reduce the size a bit.\n        attrs.transform = noRotateScale(m)\n            ? `translate(${round(m[4] * mul) / mul} ${round(m[5] * mul) / mul})` : getMatrixStr(m);\n    }\n}\n\ntype ShapeMapDesc = (string | [string, string])[];\ntype ConvertShapeToAttr = (shape: any, attrs: SVGVNodeAttrs, mul?: number) => void;\ntype ShapeValidator = (shape: any) => boolean;\n\nfunction convertPolyShape(shape: Polygon['shape'], attrs: SVGVNodeAttrs, mul: number) {\n    const points = shape.points;\n    const strArr = [];\n    for (let i = 0; i < points.length; i++) {\n        strArr.push(round(points[i][0] * mul) / mul);\n        strArr.push(round(points[i][1] * mul) / mul);\n    }\n    attrs.points = strArr.join(' ');\n}\n\nfunction validatePolyShape(shape: Polyline['shape']) {\n    return !shape.smooth;\n}\n\nfunction createAttrsConvert(desc: ShapeMapDesc): ConvertShapeToAttr {\n    const normalizedDesc: [string, string][] = map(desc, (item) =>\n        (typeof item === 'string' ? [item, item] : item)\n    );\n\n    return function (shape, attrs, mul) {\n        for (let i = 0; i < normalizedDesc.length; i++) {\n            const item = normalizedDesc[i];\n            const val = shape[item[0]];\n            if (val != null) {\n                attrs[item[1]] = round(val * mul) / mul;\n            }\n        }\n    };\n}\n\nconst builtinShapesDef: Record = {\n    circle: [createAttrsConvert(['cx', 'cy', 'r'])],\n    polyline: [convertPolyShape, validatePolyShape],\n    polygon: [convertPolyShape, validatePolyShape]\n    // Ignore line because it will be larger.\n};\n\ninterface PathWithSVGBuildPath extends Path {\n    __svgPathVersion: number\n    __svgPathBuilder: SVGPathRebuilder\n    __svgPathStrokePercent: number\n}\n\nfunction hasShapeAnimation(el: Displayable) {\n    const animators = el.animators;\n    for (let i = 0; i < animators.length; i++) {\n        if (animators[i].targetName === 'shape') {\n            return true;\n        }\n    }\n    return false;\n}\n\nexport function brushSVGPath(el: Path, scope: BrushScope) {\n    const style = el.style;\n    const shape = el.shape;\n    const builtinShpDef = builtinShapesDef[el.type];\n    const attrs: SVGVNodeAttrs = {};\n    const needsAnimate = scope.animation;\n    let svgElType = 'path';\n    const strokePercent = el.style.strokePercent;\n    const precision = (scope.compress && getPathPrecision(el)) || 4;\n    // Using SVG builtin shapes if possible\n    if (builtinShpDef\n        // Force to use path if it will update later.\n        // To avoid some animation(like morph) fail\n        && !scope.willUpdate\n        && !(builtinShpDef[1] && !builtinShpDef[1](shape))\n        // use `path` to simplify the animate element creation logic.\n        && !(needsAnimate && hasShapeAnimation(el))\n        && !(strokePercent < 1)\n    ) {\n        svgElType = el.type;\n        const mul = Math.pow(10, precision);\n        builtinShpDef[0](shape, attrs, mul);\n    }\n    else {\n        const needBuildPath = !el.path || el.shapeChanged();\n        if (!el.path) {\n            el.createPathProxy();\n        }\n        const path = el.path;\n\n        if (needBuildPath) {\n            path.beginPath();\n            el.buildPath(path, el.shape);\n            el.pathUpdated();\n        }\n        const pathVersion = path.getVersion();\n        const elExt = el as PathWithSVGBuildPath;\n\n        let svgPathBuilder = elExt.__svgPathBuilder;\n        if (elExt.__svgPathVersion !== pathVersion\n            || !svgPathBuilder\n            || strokePercent !== elExt.__svgPathStrokePercent\n        ) {\n            if (!svgPathBuilder) {\n                svgPathBuilder = elExt.__svgPathBuilder = new SVGPathRebuilder();\n            }\n            svgPathBuilder.reset(precision);\n            path.rebuildPath(svgPathBuilder, strokePercent);\n            svgPathBuilder.generateStr();\n            elExt.__svgPathVersion = pathVersion;\n            elExt.__svgPathStrokePercent = strokePercent;\n        }\n\n        attrs.d = svgPathBuilder.getStr();\n    }\n\n    setTransform(attrs, el.transform);\n    setStyleAttrs(attrs, style, el, scope);\n    setMetaData(attrs, el);\n\n    scope.animation && createCSSAnimation(el, attrs, scope);\n    scope.emphasis && createCSSEmphasis(el, attrs, scope);\n\n    return createVNode(svgElType, el.id + '', attrs);\n}\n\nexport function brushSVGImage(el: ZRImage, scope: BrushScope) {\n    const style = el.style;\n    let image = style.image;\n\n    if (image && !isString(image)) {\n        if (isImageLike(image)) {\n            image = image.src;\n        }\n        // heatmap layer in geo may be a canvas\n        else if (isCanvasLike(image)) {\n            image = image.toDataURL();\n        }\n    }\n\n    if (!image) {\n        return;\n    }\n\n    const x = style.x || 0;\n    const y = style.y || 0;\n\n    const dw = style.width;\n    const dh = style.height;\n\n    const attrs: SVGVNodeAttrs = {\n        href: image as string,\n        width: dw,\n        height: dh\n    };\n    if (x) {\n        attrs.x = x;\n    }\n    if (y) {\n        attrs.y = y;\n    }\n\n    setTransform(attrs, el.transform);\n    setStyleAttrs(attrs, style, el, scope);\n    setMetaData(attrs, el);\n\n    scope.animation && createCSSAnimation(el, attrs, scope);\n\n    return createVNode('image', el.id + '', attrs);\n};\n\nexport function brushSVGTSpan(el: TSpan, scope: BrushScope) {\n    const style = el.style;\n\n    let text = style.text;\n    // Convert to string\n    text != null && (text += '');\n    if (!text || isNaN(style.x) || isNaN(style.y)) {\n        return;\n    }\n\n    // style.font has been normalized by `normalizeTextStyle`.\n    const font = style.font || DEFAULT_FONT;\n\n    // Consider different font display differently in vertical align, we always\n    // set verticalAlign as 'middle', and use 'y' to locate text vertically.\n    const x = style.x || 0;\n    const y = adjustTextY(style.y || 0, getLineHeight(font), style.textBaseline);\n    const textAlign = TEXT_ALIGN_TO_ANCHOR[style.textAlign as keyof typeof TEXT_ALIGN_TO_ANCHOR]\n        || style.textAlign;\n\n    const attrs: SVGVNodeAttrs = {\n        'dominant-baseline': 'central',\n        'text-anchor': textAlign\n    };\n\n    if (hasSeparateFont(style)) {\n        // Set separate font attributes if possible. Or some platform like PowerPoint may not support it.\n        let separatedFontStr = '';\n        const fontStyle = style.fontStyle;\n        const fontSize = parseFontSize(style.fontSize);\n        if (!parseFloat(fontSize)) {    // is 0px\n            return;\n        }\n\n        const fontFamily = style.fontFamily || DEFAULT_FONT_FAMILY;\n        const fontWeight = style.fontWeight;\n        separatedFontStr += `font-size:${fontSize};font-family:${fontFamily};`;\n\n        // TODO reduce the attribute to set. But should it inherit from the container element?\n        if (fontStyle && fontStyle !== 'normal') {\n            separatedFontStr += `font-style:${fontStyle};`;\n        }\n        if (fontWeight && fontWeight !== 'normal') {\n            separatedFontStr += `font-weight:${fontWeight};`;\n        }\n        attrs.style = separatedFontStr;\n    }\n    else {\n        // Use set font manually\n        attrs.style = `font: ${font}`;\n    }\n\n\n    if (text.match(/\\s/)) {\n        // only enabled when have space in text.\n        attrs['xml:space'] = 'preserve';\n    }\n    if (x) {\n        attrs.x = x;\n    }\n    if (y) {\n        attrs.y = y;\n    }\n    setTransform(attrs, el.transform);\n    setStyleAttrs(attrs, style, el, scope);\n    setMetaData(attrs, el);\n\n    scope.animation && createCSSAnimation(el, attrs, scope);\n\n    return createVNode('text', el.id + '', attrs, undefined, text);\n}\n\nexport function brush(el: Displayable, scope: BrushScope): SVGVNode {\n    if (el instanceof Path) {\n        return brushSVGPath(el, scope);\n    }\n    else if (el instanceof ZRImage) {\n        return brushSVGImage(el, scope);\n    }\n    else if (el instanceof TSpan) {\n        return brushSVGTSpan(el, scope);\n    }\n}\n\nfunction setShadow(\n    el: Displayable,\n    attrs: SVGVNodeAttrs,\n    scope: BrushScope\n) {\n    const style = el.style;\n    if (hasShadow(style)) {\n        const shadowKey = getShadowKey(el);\n        const shadowCache = scope.shadowCache;\n        let shadowId = shadowCache[shadowKey];\n        if (!shadowId) {\n            const globalScale = el.getGlobalScale();\n            const scaleX = globalScale[0];\n            const scaleY = globalScale[1];\n            if (!scaleX || !scaleY) {\n                return;\n            }\n\n            const offsetX = style.shadowOffsetX || 0;\n            const offsetY = style.shadowOffsetY || 0;\n            const blur = style.shadowBlur;\n            const {opacity, color} = normalizeColor(style.shadowColor);\n            const stdDx = blur / 2 / scaleX;\n            const stdDy = blur / 2 / scaleY;\n            const stdDeviation = stdDx + ' ' + stdDy;\n            // Use a simple prefix to reduce the size\n            shadowId = scope.zrId + '-s' + scope.shadowIdx++;\n            scope.defs[shadowId] = createVNode(\n                'filter', shadowId,\n                {\n                    'id': shadowId,\n                    'x': '-100%',\n                    'y': '-100%',\n                    'width': '300%',\n                    'height': '300%'\n                },\n                [\n                    createVNode('feDropShadow', '', {\n                        'dx': offsetX / scaleX,\n                        'dy': offsetY / scaleY,\n                        'stdDeviation': stdDeviation,\n                        'flood-color': color,\n                        'flood-opacity': opacity\n                    })\n                ]\n            );\n            shadowCache[shadowKey] = shadowId;\n        }\n        attrs.filter = getIdURL(shadowId);\n    }\n}\n\nexport function setGradient(\n    style: PathStyleProps,\n    attrs: SVGVNodeAttrs,\n    target: 'fill' | 'stroke',\n    scope: BrushScope\n) {\n    const val = style[target] as GradientObject;\n    let gradientTag;\n    let gradientAttrs: SVGVNodeAttrs = {\n        'gradientUnits': val.global\n            ? 'userSpaceOnUse' // x1, x2, y1, y2 in range of 0 to canvas width or height\n            : 'objectBoundingBox' // x1, x2, y1, y2 in range of 0 to 1]\n    };\n    if (isLinearGradient(val)) {\n        gradientTag = 'linearGradient';\n        gradientAttrs.x1 = val.x;\n        gradientAttrs.y1 = val.y;\n        gradientAttrs.x2 = val.x2;\n        gradientAttrs.y2 = val.y2;\n    }\n    else if (isRadialGradient(val)) {\n        gradientTag = 'radialGradient';\n        gradientAttrs.cx = retrieve2(val.x, 0.5);\n        gradientAttrs.cy = retrieve2(val.y, 0.5);\n        gradientAttrs.r = retrieve2(val.r, 0.5);\n    }\n    else {\n        if (process.env.NODE_ENV !== 'production') {\n            logError('Illegal gradient type.');\n        }\n        return;\n    }\n\n    const colors = val.colorStops;\n\n    const colorStops = [];\n    for (let i = 0, len = colors.length; i < len; ++i) {\n        const offset = round4(colors[i].offset) * 100 + '%';\n\n        const stopColor = colors[i].color;\n        // Fix Safari bug that stop-color not recognizing alpha #9014\n        const {color, opacity} = normalizeColor(stopColor);\n\n        const stopsAttrs: SVGVNodeAttrs = {\n            'offset': offset\n        };\n        // stop-color cannot be color, since:\n        // The opacity value used for the gradient calculation is the\n        // *product* of the value of stop-opacity and the opacity of the\n        // value of stop-color.\n        // See https://www.w3.org/TR/SVG2/pservers.html#StopOpacityProperty\n\n        stopsAttrs['stop-color'] = color;\n        if (opacity < 1) {\n            stopsAttrs['stop-opacity'] = opacity;\n        }\n        colorStops.push(\n            createVNode('stop', i + '', stopsAttrs)\n        );\n    }\n\n    // Use the whole html as cache key.\n    const gradientVNode = createVNode(gradientTag, '', gradientAttrs, colorStops);\n    const gradientKey = vNodeToString(gradientVNode);\n    const gradientCache = scope.gradientCache;\n    let gradientId = gradientCache[gradientKey];\n    if (!gradientId) {\n        gradientId = scope.zrId + '-g' + scope.gradientIdx++;\n        gradientCache[gradientKey] = gradientId;\n\n        gradientAttrs.id = gradientId;\n        scope.defs[gradientId] = createVNode(\n            gradientTag, gradientId, gradientAttrs, colorStops\n        );\n    }\n\n    attrs[target] = getIdURL(gradientId);\n}\n\nexport function setPattern(\n    el: Displayable,\n    attrs: SVGVNodeAttrs,\n    target: 'fill' | 'stroke',\n    scope: BrushScope\n) {\n    const val = el.style[target] as ImagePatternObject | SVGPatternObject;\n    const boundingRect = el.getBoundingRect();\n    const patternAttrs: SVGVNodeAttrs = {};\n    const repeat = (val as ImagePatternObject).repeat;\n    const noRepeat = repeat === 'no-repeat';\n    const repeatX = repeat === 'repeat-x';\n    const repeatY = repeat === 'repeat-y';\n    let child: SVGVNode;\n    if (isImagePattern(val)) {\n        let imageWidth = val.imageWidth;\n        let imageHeight = val.imageHeight;\n        let imageSrc;\n        const patternImage = val.image;\n        if (isString(patternImage)) {\n            imageSrc = patternImage;\n        }\n        else if (isImageLike(patternImage)) {\n            imageSrc = patternImage.src;\n        }\n        else if (isCanvasLike(patternImage)) {\n            imageSrc = patternImage.toDataURL();\n        }\n\n        if (typeof Image === 'undefined') {\n            const errMsg = 'Image width/height must been given explictly in svg-ssr renderer.';\n            assert(imageWidth, errMsg);\n            assert(imageHeight, errMsg);\n        }\n        else if (imageWidth == null || imageHeight == null) {\n            // TODO\n            const setSizeToVNode = (vNode: SVGVNode, img: ImageLike) => {\n                if (vNode) {\n                    const svgEl = vNode.elm as SVGElement;\n                    let width = imageWidth || img.width;\n                    let height = imageHeight || img.height;\n                    if (vNode.tag === 'pattern') {\n                        if (repeatX) {\n                            height = 1;\n                            width /= boundingRect.width;\n                        }\n                        else if (repeatY) {\n                            width = 1;\n                            height /= boundingRect.height;\n                        }\n                    }\n                    vNode.attrs.width = width;\n                    vNode.attrs.height = height;\n                    if (svgEl) {\n                        svgEl.setAttribute('width', width as any);\n                        svgEl.setAttribute('height', height as any);\n                    }\n                }\n            };\n            const createdImage = createOrUpdateImage(\n                imageSrc, null, el, (img) => {\n                    noRepeat || setSizeToVNode(patternVNode, img);\n                    setSizeToVNode(child, img);\n                }\n            );\n            if (createdImage && createdImage.width && createdImage.height) {\n                // Loaded before\n                imageWidth = imageWidth || createdImage.width;\n                imageHeight = imageHeight || createdImage.height;\n            }\n        }\n\n        child = createVNode(\n            'image',\n            'img',\n            {\n                href: imageSrc,\n                width: imageWidth,\n                height: imageHeight\n            }\n        );\n        patternAttrs.width = imageWidth;\n        patternAttrs.height = imageHeight;\n    }\n    else if (val.svgElement) {  // Only string supported in SSR.\n        // TODO it's not so good to use textContent as innerHTML\n        child = clone(val.svgElement);\n        patternAttrs.width = val.svgWidth;\n        patternAttrs.height = val.svgHeight;\n    }\n    if (!child) {\n        return;\n    }\n\n    let patternWidth;\n    let patternHeight;\n    if (noRepeat) {\n        patternWidth = patternHeight = 1;\n    }\n    else if (repeatX) {\n        patternHeight = 1;\n        patternWidth = (patternAttrs.width as number) / boundingRect.width;\n    }\n    else if (repeatY) {\n        patternWidth = 1;\n        patternHeight = (patternAttrs.height as number) / boundingRect.height;\n    }\n    else {\n        patternAttrs.patternUnits = 'userSpaceOnUse';\n    }\n\n    if (patternWidth != null && !isNaN(patternWidth)) {\n        patternAttrs.width = patternWidth;\n    }\n    if (patternHeight != null && !isNaN(patternHeight)) {\n        patternAttrs.height = patternHeight;\n    }\n\n    const patternTransform = getSRTTransformString(val);\n    patternTransform && (patternAttrs.patternTransform = patternTransform);\n\n    // Use the whole html as cache key.\n    let patternVNode = createVNode(\n        'pattern',\n        '',\n        patternAttrs,\n        [child]\n    );\n    const patternKey = vNodeToString(patternVNode);\n    const patternCache = scope.patternCache;\n    let patternId = patternCache[patternKey];\n    if (!patternId) {\n        patternId = scope.zrId + '-p' + scope.patternIdx++;\n        patternCache[patternKey] = patternId;\n        patternAttrs.id = patternId;\n        patternVNode = scope.defs[patternId] = createVNode(\n            'pattern',\n            patternId,\n            patternAttrs,\n            [child]\n        );\n    }\n\n    attrs[target] = getIdURL(patternId);\n}\n\nexport function setClipPath(\n    clipPath: Path,\n    attrs: SVGVNodeAttrs,\n    scope: BrushScope\n) {\n    const {clipPathCache, defs} = scope;\n    let clipPathId = clipPathCache[clipPath.id];\n    if (!clipPathId) {\n        clipPathId = scope.zrId + '-c' + scope.clipPathIdx++;\n        const clipPathAttrs: SVGVNodeAttrs = {\n            id: clipPathId\n        };\n\n        clipPathCache[clipPath.id] = clipPathId;\n        defs[clipPathId] = createVNode(\n            'clipPath', clipPathId, clipPathAttrs,\n            [brushSVGPath(clipPath, scope)]\n        );\n    }\n    attrs['clip-path'] = getIdURL(clipPathId);\n}\n","export function createTextNode(text: string): Text {\r\n    return document.createTextNode(text);\r\n}\r\n\r\nexport function createComment(text: string): Comment {\r\n    return document.createComment(text);\r\n}\r\n\r\nexport function insertBefore(\r\n    parentNode: Node,\r\n    newNode: Node,\r\n    referenceNode: Node | null\r\n): void {\r\n    parentNode.insertBefore(newNode, referenceNode);\r\n}\r\n\r\nexport function removeChild(node: Node, child: Node): void {\r\n    node.removeChild(child);\r\n}\r\n\r\nexport function appendChild(node: Node, child: Node): void {\r\n    node.appendChild(child);\r\n}\r\n\r\nexport function parentNode(node: Node): Node | null {\r\n    return node.parentNode;\r\n}\r\n\r\nexport function nextSibling(node: Node): Node | null {\r\n    return node.nextSibling;\r\n}\r\n\r\nexport function tagName(elm: Element): string {\r\n    return elm.tagName;\r\n}\r\n\r\nexport function setTextContent(node: Node, text: string | null): void {\r\n    node.textContent = text;\r\n}\r\n\r\nexport function getTextContent(node: Node): string | null {\r\n    return node.textContent;\r\n}\r\n\r\nexport function isElement(node: Node): node is Element {\r\n    return node.nodeType === 1;\r\n}\r\n\r\nexport function isText(node: Node): node is Text {\r\n    return node.nodeType === 3;\r\n}\r\n\r\nexport function isComment(node: Node): node is Comment {\r\n    return node.nodeType === 8;\r\n}\r\n","/**\n * Virtual DOM patching\n * Modified from snabbdom https://github.com/snabbdom/snabbdom/blob/master/src/init.ts\n *\n * The design has been simplified to focus on the purpose in SVG rendering in SVG.\n *\n * Licensed under the MIT License\n * https://github.com/paldepind/snabbdom/blob/master/LICENSE\n */\n\nimport { isArray, isObject } from '../core/util';\nimport { createElement, createVNode, SVGVNode, XMLNS, XML_NAMESPACE, XLINKNS } from './core';\nimport * as api from './domapi';\n\nconst colonChar = 58;\nconst xChar = 120;\nconst emptyNode = createVNode('', '');\n\ntype NonUndefined = T extends undefined ? never : T;\n\nfunction isUndef(s: any): boolean {\n    return s === undefined;\n}\n\nfunction isDef(s: A): s is NonUndefined {\n    return s !== undefined;\n}\n\nfunction createKeyToOldIdx(\n    children: SVGVNode[],\n    beginIdx: number,\n    endIdx: number\n): KeyToIndexMap {\n    const map: KeyToIndexMap = {};\n    for (let i = beginIdx; i <= endIdx; ++i) {\n        const key = children[i].key;\n        if (key !== undefined) {\n            if (process.env.NODE_ENV !== 'production') {\n                if (map[key] != null) {\n                    console.error(`Duplicate key ${key}`);\n                }\n            }\n            map[key] = i;\n        }\n    }\n    return map;\n}\n\nfunction sameVnode(vnode1: SVGVNode, vnode2: SVGVNode): boolean {\n    const isSameKey = vnode1.key === vnode2.key;\n    const isSameTag = vnode1.tag === vnode2.tag;\n\n    return isSameTag && isSameKey;\n}\n\ntype KeyToIndexMap = { [key: string]: number };\n\nfunction createElm(vnode: SVGVNode): Node {\n    let i: any;\n    const children = vnode.children;\n    const tag = vnode.tag;\n    // if (tag === '!') {\n    //     if (isUndef(vnode.text)) {\n    //         vnode.text = '';\n    //     }\n    //     vnode.elm = api.createComment(vnode.text!);\n    // }\n    // else\n    if (isDef(tag)) {\n        const elm = (vnode.elm = createElement(tag));\n\n        updateAttrs(emptyNode, vnode);\n\n        if (isArray(children)) {\n            for (i = 0; i < children.length; ++i) {\n                const ch = children[i];\n                if (ch != null) {\n                    api.appendChild(elm, createElm(ch));\n                }\n            }\n        }\n        else if (isDef(vnode.text) && !isObject(vnode.text)) {\n            api.appendChild(elm, api.createTextNode(vnode.text));\n        }\n    }\n    else {\n        vnode.elm = api.createTextNode(vnode.text!);\n    }\n    return vnode.elm;\n}\n\nfunction addVnodes(\n    parentElm: Node,\n    before: Node | null,\n    vnodes: SVGVNode[],\n    startIdx: number,\n    endIdx: number\n) {\n    for (; startIdx <= endIdx; ++startIdx) {\n        const ch = vnodes[startIdx];\n        if (ch != null) {\n            api.insertBefore(parentElm, createElm(ch), before);\n        }\n    }\n}\n\nfunction removeVnodes(parentElm: Node, vnodes: SVGVNode[], startIdx: number, endIdx: number): void {\n    for (; startIdx <= endIdx; ++startIdx) {\n        const ch = vnodes[startIdx];\n        if (ch != null) {\n            if (isDef(ch.tag)) {\n                const parent = api.parentNode(ch.elm);\n                api.removeChild(parent, ch.elm);\n            }\n            else {\n                // Text node\n                api.removeChild(parentElm, ch.elm!);\n            }\n        }\n    }\n}\n\nexport function updateAttrs(oldVnode: SVGVNode, vnode: SVGVNode): void {\n    let key: string;\n    const elm = vnode.elm as SVGElement;\n    const oldAttrs = oldVnode && oldVnode.attrs || {};\n    const attrs = vnode.attrs || {};\n\n    if (oldAttrs === attrs) {\n        return;\n    }\n\n    // update modified attributes, add new attributes\n    // eslint-disable-next-line\n    for (key in attrs) {\n        const cur = attrs[key];\n        const old = oldAttrs[key];\n        if (old !== cur) {\n            if (cur === true) {\n                elm.setAttribute(key, '');\n            }\n            else if (cur === false) {\n                elm.removeAttribute(key);\n            }\n            else {\n                if (key === 'style') {\n                    elm.style.cssText = cur as string;\n                }\n                else if (key.charCodeAt(0) !== xChar) {\n                    elm.setAttribute(key, cur as any);\n                }\n                // TODO\n                else if (key === 'xmlns:xlink' || key === 'xmlns') {\n                    elm.setAttributeNS(XMLNS, key, cur as any);\n                }\n                else if (key.charCodeAt(3) === colonChar) {\n                    // Assume xml namespace\n                    elm.setAttributeNS(XML_NAMESPACE, key, cur as any);\n                }\n                else if (key.charCodeAt(5) === colonChar) {\n                    // Assume xlink namespace\n                    elm.setAttributeNS(XLINKNS, key, cur as any);\n                }\n                else {\n                    elm.setAttribute(key, cur as any);\n                }\n            }\n        }\n    }\n\n    // remove removed attributes\n    // use `in` operator since the previous `for` iteration uses it (.i.e. add even attributes with undefined value)\n    // the other option is to remove all attributes with value == undefined\n    for (key in oldAttrs) {\n        if (!(key in attrs)) {\n            elm.removeAttribute(key);\n        }\n    }\n}\n\n\nfunction updateChildren(parentElm: Node, oldCh: SVGVNode[], newCh: SVGVNode[]) {\n    let oldStartIdx = 0;\n    let newStartIdx = 0;\n    let oldEndIdx = oldCh.length - 1;\n    let oldStartVnode = oldCh[0];\n    let oldEndVnode = oldCh[oldEndIdx];\n    let newEndIdx = newCh.length - 1;\n    let newStartVnode = newCh[0];\n    let newEndVnode = newCh[newEndIdx];\n    let oldKeyToIdx: KeyToIndexMap | undefined;\n    let idxInOld: number;\n    let elmToMove: SVGVNode;\n    let before: any;\n\n    while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n        if (oldStartVnode == null) {\n            oldStartVnode = oldCh[++oldStartIdx]; // Vnode might have been moved left\n        }\n        else if (oldEndVnode == null) {\n            oldEndVnode = oldCh[--oldEndIdx];\n        }\n        else if (newStartVnode == null) {\n            newStartVnode = newCh[++newStartIdx];\n        }\n        else if (newEndVnode == null) {\n            newEndVnode = newCh[--newEndIdx];\n        }\n        else if (sameVnode(oldStartVnode, newStartVnode)) {\n            patchVnode(oldStartVnode, newStartVnode);\n            oldStartVnode = oldCh[++oldStartIdx];\n            newStartVnode = newCh[++newStartIdx];\n        }\n        else if (sameVnode(oldEndVnode, newEndVnode)) {\n            patchVnode(oldEndVnode, newEndVnode);\n            oldEndVnode = oldCh[--oldEndIdx];\n            newEndVnode = newCh[--newEndIdx];\n        }\n        else if (sameVnode(oldStartVnode, newEndVnode)) {\n            // Vnode moved right\n            patchVnode(oldStartVnode, newEndVnode);\n            api.insertBefore(parentElm, oldStartVnode.elm!, api.nextSibling(oldEndVnode.elm!));\n            oldStartVnode = oldCh[++oldStartIdx];\n            newEndVnode = newCh[--newEndIdx];\n        }\n        else if (sameVnode(oldEndVnode, newStartVnode)) {\n            // Vnode moved left\n            patchVnode(oldEndVnode, newStartVnode);\n            api.insertBefore(parentElm, oldEndVnode.elm!, oldStartVnode.elm!);\n            oldEndVnode = oldCh[--oldEndIdx];\n            newStartVnode = newCh[++newStartIdx];\n        }\n        else {\n            if (isUndef(oldKeyToIdx)) {\n                oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);\n            }\n            idxInOld = oldKeyToIdx[newStartVnode.key];\n            if (isUndef(idxInOld)) {\n                // New element\n                api.insertBefore(parentElm, createElm(newStartVnode), oldStartVnode.elm!);\n            }\n            else {\n                elmToMove = oldCh[idxInOld];\n                if (elmToMove.tag !== newStartVnode.tag) {\n                    api.insertBefore(parentElm, createElm(newStartVnode), oldStartVnode.elm!);\n                }\n                else {\n                    patchVnode(elmToMove, newStartVnode);\n                    oldCh[idxInOld] = undefined;\n                    api.insertBefore(parentElm, elmToMove.elm!, oldStartVnode.elm!);\n                }\n            }\n            newStartVnode = newCh[++newStartIdx];\n        }\n    }\n    if (oldStartIdx <= oldEndIdx || newStartIdx <= newEndIdx) {\n        if (oldStartIdx > oldEndIdx) {\n            before = newCh[newEndIdx + 1] == null ? null : newCh[newEndIdx + 1].elm;\n            addVnodes(parentElm, before, newCh, newStartIdx, newEndIdx);\n        }\n        else {\n            removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\n        }\n    }\n}\n\nfunction patchVnode(oldVnode: SVGVNode, vnode: SVGVNode) {\n    const elm = (vnode.elm = oldVnode.elm)!;\n    const oldCh = oldVnode.children;\n    const ch = vnode.children;\n    if (oldVnode === vnode) {\n        return;\n    }\n\n    updateAttrs(oldVnode, vnode);\n\n    if (isUndef(vnode.text)) {\n        if (isDef(oldCh) && isDef(ch)) {\n            if (oldCh !== ch) {\n                updateChildren(elm, oldCh, ch);\n            }\n        }\n        else if (isDef(ch)) {\n            if (isDef(oldVnode.text)) {\n                api.setTextContent(elm, '');\n            }\n            addVnodes(elm, null, ch, 0, ch.length - 1);\n        }\n        else if (isDef(oldCh)) {\n            removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n        }\n        else if (isDef(oldVnode.text)) {\n            api.setTextContent(elm, '');\n        }\n    }\n    else if (oldVnode.text !== vnode.text) {\n        if (isDef(oldCh)) {\n            removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n        }\n        api.setTextContent(elm, vnode.text!);\n    }\n}\n\nexport default function patch(oldVnode: SVGVNode, vnode: SVGVNode): SVGVNode {\n    if (sameVnode(oldVnode, vnode)) {\n        patchVnode(oldVnode, vnode);\n    }\n    else {\n        const elm = oldVnode.elm!;\n        const parent = api.parentNode(elm);\n\n        createElm(vnode);\n\n        if (parent !== null) {\n            api.insertBefore(parent, vnode.elm!, api.nextSibling(elm));\n            removeVnodes(parent, [oldVnode], 0, 0);\n        }\n    }\n\n    return vnode;\n}\n","/**\n * SVG Painter\n */\n\nimport {\n    brush,\n    setClipPath,\n    setGradient,\n    setPattern\n} from './graphic';\nimport Displayable from '../graphic/Displayable';\nimport Storage from '../Storage';\nimport { PainterBase } from '../PainterBase';\nimport {\n    createElement,\n    createVNode,\n    vNodeToString,\n    SVGVNodeAttrs,\n    SVGVNode,\n    getCssString,\n    BrushScope,\n    createBrushScope,\n    createSVGVNode\n} from './core';\nimport { normalizeColor, encodeBase64, isGradient, isPattern } from './helper';\nimport { extend, keys, logError, map, noop, retrieve2 } from '../core/util';\nimport Path from '../graphic/Path';\nimport patch, { updateAttrs } from './patch';\nimport { getSize } from '../canvas/helper';\nimport { GradientObject } from '../graphic/Gradient';\nimport { PatternObject } from '../graphic/Pattern';\n\nlet svgId = 0;\n\ninterface SVGPainterOption {\n    width?: number\n    height?: number\n    ssr?: boolean\n}\n\ntype SVGPainterBackgroundColor = string | GradientObject | PatternObject;\n\nclass SVGPainter implements PainterBase {\n\n    type = 'svg'\n\n    storage: Storage\n\n    root: HTMLElement\n\n    private _svgDom: SVGElement\n    private _viewport: HTMLElement\n\n    private _opts: SVGPainterOption\n\n    private _oldVNode: SVGVNode\n    private _bgVNode: SVGVNode\n    private _mainVNode: SVGVNode\n\n    private _width: number\n    private _height: number\n\n    private _backgroundColor: SVGPainterBackgroundColor\n\n    private _id: string\n\n    constructor(root: HTMLElement, storage: Storage, opts: SVGPainterOption) {\n        this.storage = storage;\n        this._opts = opts = extend({}, opts);\n\n        this.root = root;\n        // A unique id for generating svg ids.\n        this._id = 'zr' + svgId++;\n\n        this._oldVNode = createSVGVNode(opts.width, opts.height);\n\n        if (root && !opts.ssr) {\n            const viewport = this._viewport = document.createElement('div');\n            viewport.style.cssText = 'position:relative;overflow:hidden';\n            const svgDom = this._svgDom = this._oldVNode.elm = createElement('svg');\n            updateAttrs(null, this._oldVNode);\n            viewport.appendChild(svgDom);\n            root.appendChild(viewport);\n        }\n\n        this.resize(opts.width, opts.height);\n    }\n\n    getType() {\n        return this.type;\n    }\n\n    getViewportRoot() {\n        return this._viewport;\n    }\n    getViewportRootOffset() {\n        const viewportRoot = this.getViewportRoot();\n        if (viewportRoot) {\n            return {\n                offsetLeft: viewportRoot.offsetLeft || 0,\n                offsetTop: viewportRoot.offsetTop || 0\n            };\n        }\n    }\n\n    getSvgDom() {\n        return this._svgDom;\n    }\n\n    refresh() {\n        if (this.root) {\n            const vnode = this.renderToVNode({\n                willUpdate: true\n            });\n            // Disable user selection.\n            vnode.attrs.style = 'position:absolute;left:0;top:0;user-select:none';\n            patch(this._oldVNode, vnode);\n            this._oldVNode = vnode;\n        }\n    }\n\n    renderOneToVNode(el: Displayable) {\n        return brush(el, createBrushScope(this._id));\n    }\n\n    renderToVNode(opts?: {\n        animation?: boolean,\n        willUpdate?: boolean,\n        compress?: boolean,\n        useViewBox?: boolean,\n        emphasis?: boolean\n    }) {\n\n        opts = opts || {};\n\n        const list = this.storage.getDisplayList(true);\n        const width = this._width;\n        const height = this._height;\n\n        const scope = createBrushScope(this._id);\n        scope.animation = opts.animation;\n        scope.willUpdate = opts.willUpdate;\n        scope.compress = opts.compress;\n        scope.emphasis = opts.emphasis;\n        scope.ssr = this._opts.ssr;\n\n        const children: SVGVNode[] = [];\n\n        const bgVNode = this._bgVNode = createBackgroundVNode(width, height, this._backgroundColor, scope);\n        bgVNode && children.push(bgVNode);\n\n        // Ignore the root g if wan't the output to be more tight.\n        const mainVNode = !opts.compress\n            ? (this._mainVNode = createVNode('g', 'main', {}, [])) : null;\n        this._paintList(list, scope, mainVNode ? mainVNode.children : children);\n        mainVNode && children.push(mainVNode);\n\n        const defs = map(keys(scope.defs), (id) => scope.defs[id]);\n        if (defs.length) {\n            children.push(createVNode('defs', 'defs', {}, defs));\n        }\n\n        if (opts.animation) {\n            const animationCssStr = getCssString(scope.cssNodes, scope.cssAnims, { newline: true });\n            if (animationCssStr) {\n                const styleNode = createVNode('style', 'stl', {}, [], animationCssStr);\n                children.push(styleNode);\n            }\n        }\n\n        return createSVGVNode(width, height, children, opts.useViewBox);\n    }\n\n    renderToString(opts?: {\n        /**\n         * If add css animation.\n         * @default true\n         */\n        cssAnimation?: boolean,\n        /**\n         * If add css emphasis.\n         * @default true\n         */\n        cssEmphasis?: boolean,\n        /**\n         * If use viewBox\n         * @default true\n         */\n        useViewBox?: boolean\n    }) {\n        opts = opts || {};\n        return vNodeToString(this.renderToVNode({\n            animation: retrieve2(opts.cssAnimation, true),\n            emphasis: retrieve2(opts.cssEmphasis, true),\n            willUpdate: false,\n            compress: true,\n            useViewBox: retrieve2(opts.useViewBox, true)\n        }), { newline: true });\n    }\n\n    setBackgroundColor(backgroundColor: SVGPainterBackgroundColor) {\n        this._backgroundColor = backgroundColor;\n    }\n\n    getSvgRoot() {\n        return this._mainVNode && this._mainVNode.elm as SVGElement;\n    }\n\n    _paintList(list: Displayable[], scope: BrushScope, out?: SVGVNode[]) {\n        const listLen = list.length;\n\n        const clipPathsGroupsStack: SVGVNode[] = [];\n        let clipPathsGroupsStackDepth = 0;\n        let currentClipPathGroup;\n        let prevClipPaths: Path[];\n        let clipGroupNodeIdx = 0;\n        for (let i = 0; i < listLen; i++) {\n            const displayable = list[i];\n            if (!displayable.invisible) {\n                const clipPaths = displayable.__clipPaths;\n                const len = clipPaths && clipPaths.length || 0;\n                const prevLen = prevClipPaths && prevClipPaths.length || 0;\n                let lca;\n                // Find the lowest common ancestor\n                for (lca = Math.max(len - 1, prevLen - 1); lca >= 0; lca--) {\n                    if (clipPaths && prevClipPaths\n                        && clipPaths[lca] === prevClipPaths[lca]\n                    ) {\n                        break;\n                    }\n                }\n                // pop the stack\n                for (let i = prevLen - 1; i > lca; i--) {\n                    clipPathsGroupsStackDepth--;\n                    // svgEls.push(closeGroup);\n                    currentClipPathGroup = clipPathsGroupsStack[clipPathsGroupsStackDepth - 1];\n                }\n                // Pop clip path group for clipPaths not match the previous.\n                for (let i = lca + 1; i < len; i++) {\n                    const groupAttrs: SVGVNodeAttrs = {};\n                    setClipPath(\n                        clipPaths[i],\n                        groupAttrs,\n                        scope\n                    );\n                    const g = createVNode(\n                        'g',\n                        'clip-g-' + clipGroupNodeIdx++,\n                        groupAttrs,\n                        []\n                    );\n                    (currentClipPathGroup ? currentClipPathGroup.children : out).push(g);\n                    clipPathsGroupsStack[clipPathsGroupsStackDepth++] = g;\n                    currentClipPathGroup = g;\n                }\n                prevClipPaths = clipPaths;\n\n                const ret = brush(displayable, scope);\n                if (ret) {\n                    (currentClipPathGroup ? currentClipPathGroup.children : out).push(ret);\n                }\n            }\n        }\n    }\n\n    resize(width: number, height: number) {\n        // Save input w/h\n        const opts = this._opts;\n        const root = this.root;\n        const viewport = this._viewport;\n        width != null && (opts.width = width);\n        height != null && (opts.height = height);\n\n        if (root && viewport) {\n            // FIXME Why ?\n            viewport.style.display = 'none';\n\n            width = getSize(root, 0, opts);\n            height = getSize(root, 1, opts);\n\n            viewport.style.display = '';\n        }\n\n        if (this._width !== width || this._height !== height) {\n            this._width = width;\n            this._height = height;\n\n            if (viewport) {\n                const viewportStyle = viewport.style;\n                viewportStyle.width = width + 'px';\n                viewportStyle.height = height + 'px';\n            }\n\n            if (!isPattern(this._backgroundColor)) {\n                const svgDom = this._svgDom;\n                if (svgDom) {\n                    // Set width by 'svgRoot.width = width' is invalid\n                    svgDom.setAttribute('width', width as any);\n                    svgDom.setAttribute('height', height as any);\n                }\n\n                const bgEl = this._bgVNode && this._bgVNode.elm as SVGElement;\n                if (bgEl) {\n                    bgEl.setAttribute('width', width as any);\n                    bgEl.setAttribute('height', height as any);\n                }\n            }\n            else {\n                // pattern backgroundColor requires a full refresh\n                this.refresh();\n            }\n        }\n    }\n\n    /**\n     * 获取绘图区域宽度\n     */\n    getWidth() {\n        return this._width;\n    }\n\n    /**\n     * 获取绘图区域高度\n     */\n    getHeight() {\n        return this._height;\n    }\n\n    dispose() {\n        if (this.root) {\n            this.root.innerHTML = '';\n        }\n\n        this._svgDom =\n        this._viewport =\n        this.storage =\n        this._oldVNode =\n        this._bgVNode =\n        this._mainVNode = null;\n    }\n    clear() {\n        if (this._svgDom) {\n            this._svgDom.innerHTML = null;\n        }\n        this._oldVNode = null;\n    }\n    toDataURL(base64?: boolean) {\n        let str = this.renderToString();\n        const prefix = 'data:image/svg+xml;';\n        if (base64) {\n            str = encodeBase64(str);\n            return str && prefix + 'base64,' + str;\n        }\n        return prefix + 'charset=UTF-8,' + encodeURIComponent(str);\n    }\n\n    refreshHover = createMethodNotSupport('refreshHover') as PainterBase['refreshHover'];\n    configLayer = createMethodNotSupport('configLayer') as PainterBase['configLayer'];\n}\n\n\n// Not supported methods\nfunction createMethodNotSupport(method: string): any {\n    return function () {\n        if (process.env.NODE_ENV !== 'production') {\n            logError('In SVG mode painter not support method \"' + method + '\"');\n        }\n    };\n}\n\nfunction createBackgroundVNode(\n    width: number,\n    height: number,\n    backgroundColor: SVGPainterBackgroundColor,\n    scope: BrushScope\n) {\n    let bgVNode;\n    if (backgroundColor && backgroundColor !== 'none') {\n        bgVNode = createVNode(\n            'rect',\n            'bg',\n            {\n                width,\n                height,\n                x: '0',\n                y: '0'\n            }\n        );\n        if (isGradient(backgroundColor)) {\n            setGradient({ fill: backgroundColor as any }, bgVNode.attrs, 'fill', scope);\n        }\n        else if (isPattern(backgroundColor)) {\n            setPattern({\n                style: {\n                    fill: backgroundColor\n                },\n                dirty: noop,\n                getBoundingRect: () => ({ width, height })\n            } as any, bgVNode.attrs, 'fill', scope);\n        }\n        else {\n            const { color, opacity } = normalizeColor(backgroundColor);\n            bgVNode.attrs.fill = color;\n            opacity < 1 && (bgVNode.attrs['fill-opacity'] = opacity);\n        }\n    }\n    return bgVNode;\n}\n\nexport default SVGPainter;\n","export * from './zrender';\r\nexport * from './export';\r\n\r\nimport {registerPainter} from './zrender';\r\nimport CanvasPainter from './canvas/Painter';\r\nimport SVGPainter from './svg/Painter';\r\nregisterPainter('canvas', CanvasPainter);\r\nregisterPainter('svg', SVGPainter);\r\n"],"names":["clone","eventUtil.clientToLocal","dist","create","copy","mul","scale","matrix.create","matrix.translate","matrix.scale","eventTool.stop","util.each","vec2.dist","timsort","util.indexOf","v2Create","v2DistSquare","lerp","EPSILON","isAroundZero","color.parse","requestAnimationFrame","zrUtil.map","zrUtil.noop","zrUtil.each","matrix.identity","isNotAroundZero","matrix.mul","matrix.copy","matrix.invert","vector.applyTransform","matrix.rotate","adjustTextY","zrUtil.indexOf","zrUtil.keys","HandlerProxy","zrUtil.retrieve2","zrUtil.guid","PRIMARY_STATES_KEYS","tmpRect","mathMin","mathMax","vec2.create","cubicExtrema","curve.cubicExtrema","cubicAt","curve.cubicAt","quadraticExtremum","curve.quadraticExtremum","quadraticAt","curve.quadraticAt","min","max","vec2.min","vec2.max","mathCos","mathSin","PI2","dpr","containStroke","curve.cubicProjectPoint","CMD","curve.cubicRootAt","curve.quadraticRootAt","line.containStroke","cubic.containStroke","quadratic.containStroke","arc.containStroke","pathContain.containStroke","pathContain.contain","mathSqrt","v2ApplyTransform","PI","roundRectHelper.buildPath","subPixelOptimizeOutputShape","v2Min","v2Max","v2Clone","v2Sub","v2Scale","v2Distance","v2Add","buildPath","polyHelper.buildPath","numberReg","mathAbs","roundSectorHelper.buildPath","Displayble","imageHelper.findExistImage","imageHelper.isImageReady","vec2.normalize","sin","cos","minTv","maxTv","util.isObject","util.disableUserSelect","util.isGradientObject","util.isImagePatternObject","util.extend","util.merge","util.logError","mathRound","round","isImageLike","brush","api.appendChild","api.createTextNode","api.insertBefore","api.parentNode","api.removeChild","api.nextSibling","api.setTextContent"],"mappings":";;;;;;IAIA;QAAA;YACI,YAAO,GAAG,KAAK,CAAA;YACf,OAAE,GAAG,KAAK,CAAA;YACV,SAAI,GAAG,KAAK,CAAA;YACZ,YAAO,GAAG,KAAK,CAAA;YACf,WAAM,GAAG,KAAK,CAAA;SAEjB;QAAD,cAAC;IAAD,CAAC,IAAA;IAED;QAAA;YACI,YAAO,GAAG,IAAI,OAAO,EAAE,CAAA;YACvB,SAAI,GAAG,KAAK,CAAA;YACZ,QAAG,GAAG,KAAK,CAAA;YACX,WAAM,GAAG,KAAK,CAAA;YAEd,iBAAY,GAAG,KAAK,CAAA;YACpB,yBAAoB,GAAG,KAAK,CAAA;YAC5B,2BAAsB,GAAG,KAAK,CAAA;YAC9B,iBAAY,GAAG,KAAK,CAAA;YACpB,uBAAkB,GAAG,KAAK,CAAA;YAC1B,yBAAoB,GAAG,KAAK,CAAA;YAE5B,oBAAe,GAAG,OAAO,MAAM,KAAK,WAAW,CAAA;SAClD;QAAD,UAAC;IAAD,CAAC,IAAA;IAED,IAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IAEtB,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,CAAC,iBAAiB,KAAK,UAAU,EAAE;QACtE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC;QACf,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC;KACnC;SACI,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;QAErE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;KACrB;SACI,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,MAAM,IAAI,MAAM,EAAE;QAE/C,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAChB,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC;KAC3B;SACI;QACD,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;KACpC;IAMD,SAAS,MAAM,CAAC,EAAU,EAAE,GAAQ;QAChC,IAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC5B,IAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC9C,IAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC;eAE9B,EAAE,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC7C,IAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAEzC,IAAM,MAAM,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAE5C,IAAI,OAAO,EAAE;YACT,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;YACvB,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;SAChC;QACD,IAAI,EAAE,EAAE;YACJ,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC;YAClB,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;SAC3B;QAED,IAAI,IAAI,EAAE;YACN,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;YACpB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1B,OAAO,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;SACjD;QAID,IAAI,MAAM,EAAE;YACR,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;SACzB;QAED,GAAG,CAAC,YAAY,GAAG,OAAO,OAAO,KAAK,WAAW,CAAC;QAClD,GAAG,CAAC,oBAAoB,GAAG,cAAc,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QACpF,GAAG,CAAC,sBAAsB,GAAG,eAAe,IAAI,MAAM;gBAC9C,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QAChE,GAAG,CAAC,YAAY,GAAG,OAAO,QAAQ,KAAK,WAAW,CAAC;QAEnD,IAAM,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC;QAE7C,GAAG,CAAC,oBAAoB,GAAG,CAIvB,CAAC,OAAO,CAAC,EAAE,IAAI,YAAY,IAAI,KAAK;eAEjC,OAAO,CAAC,IAAI;gBAEX,CAAC,iBAAiB,IAAI,MAAM,MAAM,KAAK,IAAI,IAAI,eAAe,EAAE,CAAC,CAAC;eAEnE,gBAAgB,IAAI,KAAK;eAE3B,EAAE,aAAa,IAAI,KAAK,CAAC,CAAC;QAI/B,GAAG,CAAC,kBAAkB,GAAG,GAAG,CAAC,oBAAoB;gBAEzC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;IAEjD;;IC/GO,IAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,IAAO,IAAM,mBAAmB,GAAG,YAAY,CAAC;AAChD,IAAO,IAAM,YAAY,GAAM,iBAAiB,WAAM,mBAAqB,CAAC;IA4B5E,IAAM,MAAM,GAAG,EAAE,CAAC;IAClB,IAAM,KAAK,GAAG,GAAG,CAAC;IAGlB,IAAM,kBAAkB,GAAG,wGAAwG,CAAC;IAEpI,SAAS,eAAe,CAAC,MAAc;QACnC,IAAM,GAAG,GAA2B,EAAE,CAAC;QACvC,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;YAC7B,OAAO,GAAG,CAAC;SACd;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,IAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YACzC,IAAM,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC;YACrD,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;SACpB;QACD,OAAO,GAAG,CAAC;IACf,CAAC;AAED,IAAO,IAAM,sBAAsB,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAC;AAE1E,IAAO,IAAM,WAAW,GAAa;QAEjC,YAAY;YACR,OAAO,OAAO,QAAQ,KAAK,WAAW;mBAC/B,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;SAC3C;QAED,WAAW,EAAE,CAAC;YAEV,IAAI,IAA8B,CAAC;YACnC,IAAI,WAAmB,CAAC;YACxB,OAAO,UAAC,IAAY,EAAE,IAAa;gBAC/B,IAAI,CAAC,IAAI,EAAE;oBACP,IAAM,MAAM,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC;oBAC1C,IAAI,GAAG,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;iBAC5C;gBACD,IAAI,IAAI,EAAE;oBACN,IAAI,WAAW,KAAK,IAAI,EAAE;wBACtB,WAAW,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,YAAY,CAAC;qBAClD;oBACD,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;iBACjC;qBACI;oBACD,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;oBAClB,IAAI,GAAG,IAAI,IAAI,YAAY,CAAC;oBAE5B,IAAM,GAAG,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC5C,IAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC;oBACrD,IAAI,KAAK,GAAG,CAAC,CAAC;oBACd,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;wBAC3B,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;qBAClC;yBACI;wBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;4BAClC,IAAM,YAAY,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;4BACrD,KAAK,IAAI,YAAY,IAAI,IAAI,GAAG,QAAQ,IAAI,YAAY,GAAG,QAAQ,CAAC,CAAC;yBACxE;qBACJ;oBACD,OAAO,EAAE,KAAK,OAAA,EAAE,CAAC;iBACpB;aACJ,CAAC;SACL,GAAG;QAEJ,SAAS,YAAC,GAAG,EAAE,MAAM,EAAE,OAAO;YAC1B,IAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;YAC1B,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YACtB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;YACxB,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;YAChB,OAAO,KAAK,CAAC;SAChB;KACJ,CAAC;AAEF,aAAgB,cAAc,CAAC,eAAkC;QAC7D,KAAK,IAAI,GAAG,IAAI,WAAW,EAAE;YAEzB,IAAK,eAAuB,CAAC,GAAG,CAAC,EAAE;gBAC9B,WAAmB,CAAC,GAAG,CAAC,GAAI,eAAuB,CAAC,GAAG,CAAC,CAAC;aAC7D;SACJ;IACL,CAAC;;ICvGD,IAAM,cAAc,GAA4B,MAAM,CAAC;QACnD,UAAU;QACV,QAAQ;QACR,MAAM;QACN,OAAO;QACP,gBAAgB;QAChB,eAAe;QAEf,OAAO;QACP,QAAQ;KACX,EAAE,UAAC,GAAG,EAAE,GAAG;QACR,GAAG,CAAC,UAAU,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;QACnC,OAAO,GAAG,CAAC;IACf,CAAC,EAAE,EAA6B,CAAC,CAAC;IAElC,IAAM,WAAW,GAA4B,MAAM,CAAC;QAChD,MAAM;QACN,OAAO;QACP,cAAc;QACd,OAAO;QACP,QAAQ;QACR,OAAO;QACP,QAAQ;QACR,SAAS;QACT,SAAS;KACZ,EAAE,UAAC,GAAG,EAAE,GAAG;QACR,GAAG,CAAC,UAAU,GAAG,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC;QACxC,OAAO,GAAG,CAAC;IACf,CAAC,EAAE,EAA6B,CAAC,CAAC;IAElC,IAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;IAE9C,IAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;IACnC,IAAM,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC;IACzC,IAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC;IACvC,IAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC;IACrC,IAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC;IAEjC,IAAM,YAAY,GAAG,eAAc,CAAC,WAAW,CAAC;IAChD,IAAM,aAAa,GAAG,YAAY,GAAG,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC;IACnE,IAAM,QAAQ,GAAG,WAAW,CAAC;IAG7B,IAAI,OAAO,GAAG,MAAM,CAAC;AAKrB,aAAgB,IAAI;QAChB,OAAO,OAAO,EAAE,CAAC;IACrB,CAAC;AAED,aAAgB,QAAQ;QAAC,cAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,yBAAc;;QACnC,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;YAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SACtC;IACL,CAAC;AAcD,aAAgB,KAAK,CAAgB,MAAS;QAC1C,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;YAC9C,OAAO,MAAM,CAAC;SACjB;QAED,IAAI,MAAM,GAAG,MAAa,CAAC;QAC3B,IAAM,OAAO,GAAW,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEjD,IAAI,OAAO,KAAK,gBAAgB,EAAE;YAC9B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;gBACtB,MAAM,GAAG,EAAS,CAAC;gBACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAI,MAAgB,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oBAC1D,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAE,MAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3C;aACJ;SACJ;aACI,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE;YAC3B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;gBAEtB,IAAM,IAAI,GAAG,MAAM,CAAC,WAAkC,CAAC;gBACvD,IAAI,IAAI,CAAC,IAAI,EAAE;oBACX,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAsB,CAAC,CAAC;iBAC9C;qBACI;oBACD,MAAM,GAAG,IAAI,IAAI,CAAE,MAAuB,CAAC,MAAM,CAAC,CAAC;oBACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAI,MAAuB,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;wBACjE,MAAM,CAAC,CAAC,CAAC,GAAI,MAAuB,CAAC,CAAC,CAAC,CAAC;qBAC3C;iBACJ;aACJ;SACJ;aACI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACzE,MAAM,GAAG,EAAS,CAAC;YACnB,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;gBAEpB,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,QAAQ,EAAE;oBAChD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;iBACpC;aACJ;SACJ;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;AAUD,aAAgB,KAAK,CAAC,MAAW,EAAE,MAAW,EAAE,SAAmB;QAG/D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YACxC,OAAO,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;SAC7C;QAED,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;YAEpB,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,QAAQ,EAAE;gBAChD,IAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC/B,IAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAE/B,IAAI,QAAQ,CAAC,UAAU,CAAC;uBACjB,QAAQ,CAAC,UAAU,CAAC;uBACpB,CAAC,OAAO,CAAC,UAAU,CAAC;uBACpB,CAAC,OAAO,CAAC,UAAU,CAAC;uBACpB,CAAC,KAAK,CAAC,UAAU,CAAC;uBAClB,CAAC,KAAK,CAAC,UAAU,CAAC;uBAClB,CAAC,eAAe,CAAC,UAAU,CAAC;uBAC5B,CAAC,eAAe,CAAC,UAAU,CAAC;uBAC5B,CAAC,WAAW,CAAC,UAAU,CAAC;uBACxB,CAAC,WAAW,CAAC,UAAU,CAAC,EAC7B;oBAEE,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;iBAC5C;qBACI,IAAI,SAAS,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,EAAE;oBAGpC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;iBACpC;aACJ;SACJ;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;AAOD,aAAgB,QAAQ,CAAC,gBAAuB,EAAE,SAAmB;QACjE,IAAI,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YACzD,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;SAC1D;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;AAED,aAAgB,MAAM,CAGpB,MAAS,EAAE,MAAS;QAElB,IAAI,MAAM,CAAC,MAAM,EAAE;YAEf,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SACjC;aACI;YACD,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;gBAEpB,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,QAAQ,EAAE;oBAC/C,MAAgB,CAAC,GAAG,CAAC,GAAI,MAAgB,CAAC,GAAG,CAAC,CAAC;iBACnD;aACJ;SACJ;QACD,OAAO,MAAe,CAAC;IAC3B,CAAC;AAED,aAAgB,QAAQ,CAGtB,MAAS,EAAE,MAAS,EAAE,OAAiB;QACrC,IAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAChD,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACrB,KAAK,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,GAAI,MAAgB,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG;gBACjE,MAAgB,CAAC,GAAG,CAAC,GAAI,MAAgB,CAAC,GAAG,CAAC,CAAC;aACnD;SACJ;QACD,OAAO,MAAe,CAAC;IAC3B,CAAC;AAGD,IAAO,IAAM,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC;AAKrD,aAAgB,OAAO,CAAI,KAAwC,EAAE,KAAQ;QACzE,IAAI,KAAK,EAAE;YACP,IAAK,KAAa,CAAC,OAAO,EAAE;gBACxB,OAAQ,KAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aACxC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC9C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;oBACpB,OAAO,CAAC,CAAC;iBACZ;aACJ;SACJ;QACD,OAAO,CAAC,CAAC,CAAC;IACd,CAAC;AAQD,aAAgB,QAAQ,CAAC,KAAe,EAAE,SAAmB;QACzD,IAAM,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC;QACvC,SAAS,CAAC,MAAK;QACf,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;QAClC,KAAK,CAAC,SAAS,GAAG,IAAK,CAAS,EAAE,CAAC;QAEnC,KAAK,IAAI,IAAI,IAAI,cAAc,EAAE;YAC7B,IAAI,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;gBACrC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;aAChD;SACJ;QACD,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,KAAK,CAAC;QACnC,KAAa,CAAC,UAAU,GAAG,SAAS,CAAC;IAC1C,CAAC;AAED,aAAgB,KAAK,CAAO,MAAoB,EAAE,MAAoB,EAAE,QAAkB;QACtF,MAAM,GAAG,WAAW,IAAI,MAAM,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC;QAC3D,MAAM,GAAG,WAAW,IAAI,MAAM,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC;QAG3D,IAAI,MAAM,CAAC,mBAAmB,EAAE;YAC5B,IAAM,OAAO,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrC,IAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,GAAG,KAAK,aAAa,EAAE;oBACvB,KAAK,QAAQ,GAAI,MAAc,CAAC,GAAG,CAAC,IAAI,IAAI,GAAI,MAAc,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG;wBACzE,MAAc,CAAC,GAAG,CAAC,GAAI,MAAc,CAAC,GAAG,CAAC,CAAC;qBAC/C;iBACJ;aACJ;SACJ;aACI;YACD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;SACtC;IACL,CAAC;AAMD,aAAgB,WAAW,CAAC,IAAS;QACjC,IAAI,CAAC,IAAI,EAAE;YACP,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC1B,OAAO,KAAK,CAAC;SAChB;QACD,OAAO,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC;IAC3C,CAAC;AAKD,aAAgB,IAAI,CAChB,GAAM,EACN,EASS,EACT,OAAiB;QAEjB,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE;YACd,OAAO;SACV;QACD,IAAK,GAAW,CAAC,OAAO,IAAK,GAAW,CAAC,OAAO,KAAK,aAAa,EAAE;YAC/D,GAAW,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;SACrC;aACI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE;YACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAE5C,EAAE,CAAC,IAAI,CAAC,OAAO,EAAG,GAAa,CAAC,CAAC,CAAC,EAAE,CAAQ,EAAE,GAAG,CAAC,CAAC;aACtD;SACJ;aACI;YACD,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;gBACjB,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBACzB,EAAE,CAAC,IAAI,CAAC,OAAO,EAAG,GAAuB,CAAC,GAAG,CAAC,EAAE,GAAU,EAAE,GAAG,CAAC,CAAC;iBACpE;aACJ;SACJ;IACL,CAAC;AAQD,aAAgB,GAAG,CACf,GAAiB,EACjB,EAAoE,EACpE,OAAiB;QAIjB,IAAI,CAAC,GAAG,EAAE;YACN,OAAO,EAAE,CAAC;SACb;QACD,IAAI,CAAC,EAAE,EAAE;YACL,OAAO,KAAK,CAAC,GAAG,CAAqB,CAAC;SACzC;QACD,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE;YAClC,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;SAC/B;aACI;YACD,IAAM,MAAM,GAAG,EAAE,CAAC;YAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAE5C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;aACjD;YACD,OAAO,MAAM,CAAC;SACjB;IACL,CAAC;AAED,aAAgB,MAAM,CAClB,GAAiB,EACjB,EAAsG,EACtG,IAAQ,EACR,OAAiB;QAEjB,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE;YACd,OAAO;SACV;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC5C,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;SACjD;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;AAMD,aAAgB,MAAM,CAClB,GAAiB,EACjB,EAA0E,EAC1E,OAAiB;QAIjB,IAAI,CAAC,GAAG,EAAE;YACN,OAAO,EAAE,CAAC;SACb;QACD,IAAI,CAAC,EAAE,EAAE;YACL,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;SACrB;QACD,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,YAAY,EAAE;YAC3C,OAAO,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;SAClC;aACI;YACD,IAAM,MAAM,GAAG,EAAE,CAAC;YAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAE5C,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;oBAClC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvB;aACJ;YACD,OAAO,MAAM,CAAC;SACjB;IACL,CAAC;AAKD,aAAgB,IAAI,CAChB,GAAiB,EACjB,EAA4E,EAC5E,OAAiB;QAEjB,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE;YACd,OAAO;SACV;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC5C,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;gBAClC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;aACjB;SACJ;IACL,CAAC;AAOD,aAAgB,IAAI,CAAmB,GAAM;QACzC,IAAI,CAAC,GAAG,EAAE;YACN,OAAO,EAAE,CAAC;SACb;QAID,IAAI,MAAM,CAAC,IAAI,EAAE;YACb,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAY,CAAC;SACtC;QACD,IAAI,OAAO,GAAY,EAAE,CAAC;QAC1B,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;YACjB,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBACzB,OAAO,CAAC,IAAI,CAAC,GAAU,CAAC,CAAC;aAC5B;SACJ;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAmBD,SAAS,YAAY,CACjB,IAAQ,EAAE,OAAY;QAAE,cAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,6BAAc;;QAEtC,OAAO;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SACxE,CAAC;IACN,CAAC;AACD,IAAO,IAAM,IAAI,GAAiB,CAAC,aAAa,IAAI,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC;UAC5E,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;UAC3C,YAAY,CAAC;IAYnB,SAAS,KAAK,CAAC,IAAc;QAAE,cAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,6BAAc;;QACzC,OAAO;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SACrE,CAAC;IACN,CAAC;AACD,aAGgB,OAAO,CAAC,KAAU;QAC9B,IAAI,KAAK,CAAC,OAAO,EAAE;YACf,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC/B;QACD,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,gBAAgB,CAAC;IACxD,CAAC;AAED,aAAgB,UAAU,CAAC,KAAU;QACjC,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC;IACvC,CAAC;AAED,aAAgB,QAAQ,CAAC,KAAU;QAG/B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;IACrC,CAAC;AAED,aAAgB,YAAY,CAAC,KAAU;QACnC,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAC;IACzD,CAAC;AAED,aAAgB,QAAQ,CAAC,KAAU;QAG/B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;IACrC,CAAC;AAKD,aAAgB,QAAQ,CAAc,KAAQ;QAG1C,IAAM,IAAI,GAAG,OAAO,KAAK,CAAC;QAC1B,OAAO,IAAI,KAAK,UAAU,KAAK,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,QAAQ,CAAC,CAAC;IACjE,CAAC;AAED,aAAgB,eAAe,CAAC,KAAU;QACtC,OAAO,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC;AAED,aAAgB,YAAY,CAAC,KAAU;QACnC,OAAO,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,CAAC;AAED,aAAgB,KAAK,CAAC,KAAU;QAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ;eACzB,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ;eAClC,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,CAAC;IACnD,CAAC;AAED,aAAgB,gBAAgB,CAAC,KAAU;QACvC,OAAQ,KAAwB,CAAC,UAAU,IAAI,IAAI,CAAC;IACxD,CAAC;AAED,aAAgB,oBAAoB,CAAC,KAAU;QAC3C,OAAQ,KAA4B,CAAC,KAAK,IAAI,IAAI,CAAC;IACvD,CAAC;AAED,aAAgB,QAAQ,CAAC,KAAc;QACnC,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAC;IACzD,CAAC;AAKD,aAAgB,KAAK,CAAC,KAAU;QAE5B,OAAO,KAAK,KAAK,KAAK,CAAC;IAC3B,CAAC;AAOD,aAAgB,QAAQ;QAAI,cAAY;aAAZ,UAAY,EAAZ,qBAAY,EAAZ,IAAY;YAAZ,yBAAY;;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC7C,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;gBACjB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;aAClB;SACJ;IACL,CAAC;AAED,aAAgB,SAAS,CAAO,MAAS,EAAE,MAAS;QAChD,OAAO,MAAM,IAAI,IAAI;cACf,MAAM;cACN,MAAM,CAAC;IACjB,CAAC;AAED,aAAgB,SAAS,CAAU,MAAS,EAAE,MAAS,EAAE,MAAS;QAC9D,OAAO,MAAM,IAAI,IAAI;cACf,MAAM;cACN,MAAM,IAAI,IAAI;kBACd,MAAM;kBACN,MAAM,CAAC;IACjB,CAAC;AAGD,aAAgB,KAAK,CAAI,GAAiB;QAAE,cAAoB;aAApB,UAAoB,EAApB,qBAAoB,EAApB,IAAoB;YAApB,6BAAoB;;QAC5D,OAAO,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,IAAa,CAAC,CAAC;IACjD,CAAC;AASD,aAAgB,iBAAiB,CAAC,GAAsB;QACpD,IAAI,QAAQ,GAAG,CAAC,KAAK,QAAQ,EAAE;YAC3B,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;SAC/B;QACD,IAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;QACvB,IAAI,GAAG,KAAK,CAAC,EAAE;YAEX,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3C;aACI,IAAI,GAAG,KAAK,CAAC,EAAE;YAEhB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3C;QACD,OAAO,GAAG,CAAC;IACf,CAAC;AAED,aAAgB,MAAM,CAAC,SAAc,EAAE,OAAgB;QACnD,IAAI,CAAC,SAAS,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;SAC5B;IACL,CAAC;AAMD,aAAgB,IAAI,CAAC,GAAW;QAC5B,IAAI,GAAG,IAAI,IAAI,EAAE;YACb,OAAO,IAAI,CAAC;SACf;aACI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE;YACrC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;SACrB;aACI;YACD,OAAO,GAAG,CAAC,OAAO,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAC;SAChE;IACL,CAAC;IAED,IAAM,YAAY,GAAG,kBAAkB,CAAC;AAIxC,aAAgB,cAAc,CAAC,GAAQ;QACnC,GAAG,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IAC7B,CAAC;AAED,aAAgB,WAAW,CAAC,GAAQ;QAChC,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC;IAC7B,CAAC;IAWD;QAAA;YACY,SAAI,GAAmB,EAAoB,CAAC;SAiCvD;QA/BG,sBAAA,QAAM,CAAA,GAAN,UAAO,GAAQ;YACX,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,OAAO,EAAE;gBACT,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACzB;YACD,OAAO,OAAO,CAAC;SAClB;QACD,yBAAG,GAAH,UAAI,GAAQ;YACR,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;SACxC;QACD,yBAAG,GAAH,UAAI,GAAQ;YACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACzB;QACD,yBAAG,GAAH,UAAI,GAAQ,EAAE,KAAQ;YAClB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACvB,OAAO,IAAI,CAAC;SACf;QACD,0BAAI,GAAJ;YACI,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC1B;QACD,6BAAO,GAAP,UAAQ,QAAsC;YAI1C,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,KAAK,IAAM,GAAG,IAAI,IAAI,EAAE;gBACpB,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;iBAC5B;aACJ;SACJ;QACL,kBAAC;IAAD,CAAC,IAAA;IAID,IAAM,oBAAoB,GAAG,OAAO,GAAG,KAAK,UAAU,CAAC;IACvD,SAAS,cAAc;QAGnB,QAAQ,oBAAoB,GAAG,IAAI,GAAG,EAAU,GAAG,IAAI,WAAW,EAAU,EAA0B;IAC1G,CAAC;IAMD;QAGI,iBAAY,GAAoD;YAC5D,IAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAG3B,IAAI,CAAC,IAAI,GAAG,cAAc,EAAU,CAAC;YACrC,IAAM,OAAO,GAAG,IAAI,CAAC;YAErB,CAAC,GAAG,YAAY,OAAO;kBACjB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;mBACd,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YAEhC,SAAS,KAAK,CAAC,KAAU,EAAE,GAAQ;gBAC/B,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;aAC7D;SACJ;QAGD,wBAAM,GAAN,UAAO,GAAQ;YACX,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SAC7B;QACD,qBAAG,GAAH,UAAI,GAAQ;YACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SAC7B;QACD,qBAAG,GAAH,UAAI,GAAQ,EAAE,KAAQ;YAGlB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC1B,OAAO,KAAK,CAAC;SAChB;QAGD,sBAAI,GAAJ,UACI,EAAiD,EACjD,OAAiB;YAEjB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,GAAG;gBACzB,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;aAChC,CAAC,CAAC;SACN;QACD,sBAAI,GAAJ;YACI,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9B,OAAO,oBAAoB;kBAErB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;kBAChB,IAAI,CAAC;SACd;QAED,2BAAS,GAAT,UAAU,GAAQ;YACd,IAAI,CAAC,IAAI,CAAC,QAAM,CAAA,CAAC,GAAG,CAAC,CAAC;SACzB;QACL,cAAC;IAAD,CAAC,IAAA;aAEe,aAAa,CACzB,GAAoD;QAEpD,OAAO,IAAI,OAAO,CAAS,GAAG,CAAC,CAAC;IACpC,CAAC;AAED,aAAgB,WAAW,CAAO,CAAe,EAAE,CAAe;QAC9D,IAAM,QAAQ,GAAG,IAAK,CAAS,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;QACjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC/B,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SACtB;QACD,IAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC/B,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/B;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;AAED,aAAgB,YAAY,CAAI,KAAc,EAAE,UAAc;QAG1D,IAAI,GAAM,CAAC;QACX,IAAI,MAAM,CAAC,MAAM,EAAE;YACf,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAC9B;aACI;YACD,IAAM,SAAS,GAAG,eAAc,CAAC;YACjC,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC;YAC5B,GAAG,GAAG,IAAK,SAAiB,EAAE,CAAC;SAClC;QACD,IAAI,UAAU,EAAE;YACZ,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;SAC3B;QAED,OAAO,GAAG,CAAC;IACf,CAAC;AAGD,aAAgB,iBAAiB,CAAC,GAAgB;QAC9C,IAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC;QAC3B,QAAQ,CAAC,gBAAgB,GAAG,MAAM,CAAC;QACnC,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC;QAE7B,QAAQ,CAAC,uBAAuB,GAAG,eAAe,CAAC;QAClD,QAAgB,CAAC,uBAAuB,CAAC,GAAG,MAAM,CAAC;IACxD,CAAC;AAED,aAAgB,MAAM,CAAC,GAAW,EAAE,IAAY;QAC5C,OAAO,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;AAED,aAAgB,IAAI,MAAK;AAEzB,IAAO,IAAM,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aCryB9B,MAAM,CAAC,CAAU,EAAE,CAAU;QACzC,IAAI,CAAC,IAAI,IAAI,EAAE;YACX,CAAC,GAAG,CAAC,CAAC;SACT;QACD,IAAI,CAAC,IAAI,IAAI,EAAE;YACX,CAAC,GAAG,CAAC,CAAC;SACT;QACD,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClB,CAAC;AAKD,aAAgB,IAAI,CAAwB,GAAM,EAAE,CAAc;QAC9D,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,OAAO,GAAG,CAAC;IACf,CAAC;AAKD,aAAgBA,OAAK,CAAC,CAAc;QAChC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;AAKD,aAAgB,GAAG,CAAwB,GAAM,EAAE,CAAS,EAAE,CAAS;QACnE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,OAAO,GAAG,CAAC;IACf,CAAC;AAKD,aAAgB,GAAG,CAAwB,GAAM,EAAE,EAAe,EAAE,EAAe;QAC/E,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACvB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACvB,OAAO,GAAG,CAAC;IACf,CAAC;AAKD,aAAgB,WAAW,CAAwB,GAAM,EAAE,EAAe,EAAE,EAAe,EAAE,CAAS;QAClG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3B,OAAO,GAAG,CAAC;IACf,CAAC;AAKD,aAAgB,GAAG,CAAwB,GAAM,EAAE,EAAe,EAAE,EAAe;QAC/E,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACvB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACvB,OAAO,GAAG,CAAC;IACf,CAAC;AAKD,aAAgB,GAAG,CAAC,CAAc;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;AACD,IAAO,IAAM,MAAM,GAAG,GAAG,CAAC;AAK1B,aAAgB,SAAS,CAAC,CAAc;QACpC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;AACD,IAAO,IAAM,YAAY,GAAG,SAAS,CAAC;AAKtC,aAAgB,GAAG,CAAwB,GAAM,EAAE,EAAe,EAAE,EAAe;QAC/E,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACvB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACvB,OAAO,GAAG,CAAC;IACf,CAAC;AAKD,aAAgB,GAAG,CAAwB,GAAM,EAAE,EAAe,EAAE,EAAe;QAC/E,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACvB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACvB,OAAO,GAAG,CAAC;IACf,CAAC;AAKD,aAAgB,GAAG,CAAC,EAAe,EAAE,EAAe;QAChD,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;AAKD,aAAgB,KAAK,CAAwB,GAAM,EAAE,CAAc,EAAE,CAAS;QAC1E,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClB,OAAO,GAAG,CAAC;IACf,CAAC;AAKD,aAAgB,SAAS,CAAwB,GAAM,EAAE,CAAc;QACnE,IAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,KAAK,CAAC,EAAE;YACT,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SACd;aACI;YACD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAClB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SACrB;QACD,OAAO,GAAG,CAAC;IACf,CAAC;AAKD,aAAgB,QAAQ,CAAC,EAAe,EAAE,EAAe;QACrD,OAAO,IAAI,CAAC,IAAI,CACZ,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;cAC/B,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CACtC,CAAC;IACN,CAAC;AACD,IAAO,IAAM,IAAI,GAAG,QAAQ,CAAC;AAK7B,aAAgB,cAAc,CAAC,EAAe,EAAE,EAAe;QAC3D,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;cAClC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;AACD,IAAO,IAAM,UAAU,GAAG,cAAc,CAAC;AAKzC,aAAgB,MAAM,CAAwB,GAAM,EAAE,CAAc;QAChE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACf,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACf,OAAO,GAAG,CAAC;IACf,CAAC;AAKD,aAAgB,IAAI,CAAwB,GAAM,EAAE,EAAe,EAAE,EAAe,EAAE,CAAS;QAC3F,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,GAAG,CAAC;IACf,CAAC;AAKD,aAAgB,cAAc,CAAwB,GAAM,EAAE,CAAc,EAAE,CAAc;QACxF,IAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACf,IAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACf,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,OAAO,GAAG,CAAC;IACf,CAAC;AAKD,aAAgB,GAAG,CAAwB,GAAM,EAAE,EAAe,EAAE,EAAe;QAC/E,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,OAAO,GAAG,CAAC;IACf,CAAC;AAKD,aAAgB,GAAG,CAAwB,GAAM,EAAE,EAAe,EAAE,EAAe;QAC/E,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,OAAO,GAAG,CAAC;IACf,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC7MD;QAKI,eAAY,MAAe,EAAE,CAAgB;YACzC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;SACrC;QACL,YAAC;IAAD,CAAC,IAAA;IAGD;QAUI,mBAAY,OAAgB;YACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YAEvB,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC/C,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC1C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;SAW9C;QAED,8BAAU,GAAV,UAAW,CAAe;YACtB,IAAI,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;YAE9B,OAAO,cAAc,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE;gBAChD,cAAc,GAAG,cAAc,CAAC,MAAM,IAAI,cAAc,CAAC,YAAY,CAAC;aACzE;YACD,IAAI,cAAc,EAAE;gBAChB,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;gBACtC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAC/B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC;gBACpB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC;gBAEpB,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAC1B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CACrD,CAAC;aACL;SACJ;QAED,yBAAK,GAAL,UAAM,CAAe;YACjB,IAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;YAC5C,IAAI,cAAc,EAAE;gBAEhB,IAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;gBACpB,IAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;gBAEpB,IAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;gBACvB,IAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;gBACZ,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;gBAEZ,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;gBAChC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAC1B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAChD,CAAC;gBAEF,IAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CACrC,CAAC,EAAE,CAAC,EAAE,cAA6B,CACtC,CAAC,MAAM,CAAC;gBACT,IAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC;gBACxC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;gBAE9B,IAAI,cAAc,KAAK,UAAU,EAAE;oBAC/B,IAAI,cAAc,IAAI,UAAU,KAAK,cAAc,EAAE;wBACjD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAC1B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CACrD,CAAC;qBACL;oBACD,IAAI,UAAU,IAAI,UAAU,KAAK,cAAc,EAAE;wBAC7C,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAC1B,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CACjD,CAAC;qBACL;iBACJ;aACJ;SACJ;QAED,4BAAQ,GAAR,UAAS,CAAe;YACpB,IAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;YAE5C,IAAI,cAAc,EAAE;gBAChB,cAAc,CAAC,QAAQ,GAAG,KAAK,CAAC;aACnC;YAED,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAEjF,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;aACnF;YAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;SAC3B;QAEL,gBAAC;IAAD,CAAC,IAAA;;ICnDD;QAMI,kBAAY,eAAwC;YAChD,IAAI,eAAe,EAAE;gBACjB,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;aAC3C;SACJ;QAqBD,qBAAE,GAAF,UACI,KAAY,EACZ,KAAiF,EACjF,OAA6E,EAC7E,OAAa;YAEb,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBAClB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;aACxB;YAED,IAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;YAE3B,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;gBAC7B,OAAO,GAAG,OAAc,CAAC;gBACzB,OAAO,GAAG,KAA8B,CAAC;gBACzC,KAAK,GAAG,IAAI,CAAC;aAChB;YAED,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE;gBACpB,OAAO,IAAI,CAAC;aACf;YAED,IAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAC7C,IAAI,KAAK,IAAI,IAAI,IAAI,cAAc,IAAI,cAAc,CAAC,cAAc,EAAE;gBAClE,KAAK,GAAG,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;aAChD;YAED,IAAI,CAAC,EAAE,CAAC,KAAe,CAAC,EAAE;gBACtB,EAAE,CAAC,KAAe,CAAC,GAAG,EAAE,CAAC;aAC5B;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAe,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjD,IAAI,EAAE,CAAC,KAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;oBACtC,OAAO,IAAI,CAAC;iBACf;aACJ;YAED,IAAM,IAAI,GAAuC;gBAC7C,CAAC,EAAE,OAAmC;gBACtC,KAAK,EAAE,KAAK;gBACZ,GAAG,GAAG,OAAO,IAAI,IAAI,CAAsB;gBAG3C,UAAU,EAAG,OAAe,CAAC,oBAAoB;aACpD,CAAC;YAEF,IAAM,SAAS,GAAG,EAAE,CAAC,KAAe,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YACjD,IAAM,QAAQ,GAAG,EAAE,CAAC,KAAe,CAAC,CAAC,SAAS,CAAC,CAAC;YAChD,CAAC,QAAQ,IAAI,QAAQ,CAAC,UAAU;kBAC1B,EAAE,CAAC,KAAe,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC;kBAC9C,EAAE,CAAC,KAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAErC,OAAO,IAAI,CAAC;SACf;QAKD,2BAAQ,GAAR,UAAS,SAAuB;YAC5B,IAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;YAC3B,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,SAAmB,CAAC,CAAC,MAAM,CAAC;SAC7E;QAUD,sBAAG,GAAH,UAAI,SAAwB,EAAE,OAAkB;YAC5C,IAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;YAE3B,IAAI,CAAC,EAAE,EAAE;gBACL,OAAO,IAAI,CAAC;aACf;YAED,IAAI,CAAC,SAAS,EAAE;gBACZ,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAC;aACf;YAED,IAAI,OAAO,EAAE;gBACT,IAAI,EAAE,CAAC,SAAmB,CAAC,EAAE;oBACzB,IAAM,OAAO,GAAG,EAAE,CAAC;oBACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAmB,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC5D,IAAI,EAAE,CAAC,SAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;4BAC1C,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,SAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;yBAC5C;qBACJ;oBACD,EAAE,CAAC,SAAmB,CAAC,GAAG,OAAO,CAAC;iBACrC;gBAED,IAAI,EAAE,CAAC,SAAmB,CAAC,IAAI,EAAE,CAAC,SAAmB,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;oBACjE,OAAO,EAAE,CAAC,SAAmB,CAAC,CAAC;iBAClC;aACJ;iBACI;gBACD,OAAO,EAAE,CAAC,SAAmB,CAAC,CAAC;aAClC;YAED,OAAO,IAAI,CAAC;SACf;QAOD,0BAAO,GAAP,UACI,SAAgB;YAChB,cAAkC;iBAAlC,UAAkC,EAAlC,qBAAkC,EAAlC,IAAkC;gBAAlC,6BAAkC;;YAElC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBAClB,OAAO,IAAI,CAAC;aACf;YAED,IAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,SAAmB,CAAC,CAAC;YAChD,IAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAE7C,IAAI,EAAE,EAAE;gBACJ,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBAE3B,IAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;gBACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oBAC1B,IAAM,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;oBACpB,IAAI,cAAc;2BACX,cAAc,CAAC,MAAM;2BACrB,KAAK,CAAC,KAAK,IAAI,IAAI;2BACnB,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,EACnD;wBACE,SAAS;qBACZ;oBAGD,QAAQ,MAAM;wBACV,KAAK,CAAC;4BACF,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;4BACxB,MAAM;wBACV,KAAK,CAAC;4BACF,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;4BACjC,MAAM;wBACV,KAAK,CAAC;4BACF,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC1C,MAAM;wBACV;4BAEI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;4BAC/B,MAAM;qBACb;iBACJ;aACJ;YAED,cAAc,IAAI,cAAc,CAAC,YAAY;mBACtC,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAE9C,OAAO,IAAI,CAAC;SACf;QAOD,qCAAkB,GAAlB,UAAmB,IAAkB;YAAE,cAAc;iBAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;gBAAd,6BAAc;;YACjD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBAClB,OAAO,IAAI,CAAC;aACf;YAED,IAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,IAAc,CAAC,CAAC;YAC3C,IAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAE7C,IAAI,EAAE,EAAE;gBACJ,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC3B,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAE7B,IAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;gBACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oBAC1B,IAAM,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;oBACpB,IAAI,cAAc;2BACX,cAAc,CAAC,MAAM;2BACrB,KAAK,CAAC,KAAK,IAAI,IAAI;2BACnB,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,EAC9C;wBACE,SAAS;qBACZ;oBAGD,QAAQ,MAAM;wBACV,KAAK,CAAC;4BACF,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BAClB,MAAM;wBACV,KAAK,CAAC;4BACF,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC3B,MAAM;wBACV,KAAK,CAAC;4BACF,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;4BACpC,MAAM;wBACV;4BAEI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;4BAC9C,MAAM;qBACb;iBACJ;aACJ;YAED,cAAc,IAAI,cAAc,CAAC,YAAY;mBACtC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAEzC,OAAO,IAAI,CAAC;SACf;QAEL,eAAC;IAAD,CAAC,IAAA;;IC9SD,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAExB,SAAS,WAAW,CAChB,IAAgB,EAChB,IAAY,EACZ,QAAgB,EAChB,OAAe,EACf,OAAe,EACf,QAAiC;QAEjC,IAAM,QAAQ,GAAG,OAAO,GAAG,GAAG,GAAG,OAAO,CAAC;QACzC,IAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;QAE7B,IAAI,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;YACnC,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;SAC7B;QAED,IAAI,IAAI,KAAK,CAAC,EAAE;YAEZ,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;YAC9E,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;SACnC;QAED,IAAM,UAAU,GAAG,OAAO,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC;QAC7C,IAAI,WAAW,GAAG,QAAQ,GAAG,CAAC,CAAC;QAC/B,OAAO,OAAO,IAAI,CAAC,IAAI,WAAW,CAAC,EAAE;YACjC,WAAW,EAAE,CAAC;SACjB;QAED,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;YAChD,IAAM,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE;gBACrB,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;sBAE/C,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACvF,WAAW,EAAE,CAAC;aACjB;SACJ;QAED,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;QAEzB,OAAO,GAAG,CAAC;IACf,CAAC;AAmBD,aAAgB,gBAAgB,CAAC,GAAa,EAAE,IAAc;QAC1D,IAAM,EAAE,GAAG;YACP,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;SACrE,CAAC;QAEF,IAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,IAAM,GAAG,GAAG,WAAW,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,GAAG,KAAK,CAAC,EAAE;YAGX,OAAO;SACV;QAGD,IAAM,EAAE,GAAa,EAAE,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBACxB,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7B,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;sBAExB,WAAW,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;sBAC7D,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;aACvB;SACJ;QAED,OAAO,UAAU,GAAa,EAAE,SAAiB,EAAE,SAAiB;YAChE,IAAM,EAAE,GAAG,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACrD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9D,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACjE,CAAC;IACN,CAAC;;ICtGD,IAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAC3C,aA2EgB,0BAA0B,CACtC,GAAa,EACb,EAAe,EACf,GAAW,EACX,GAAW,EACX,OAAiB;QAEjB,IAAI,EAAE,CAAC,qBAAqB,IAAI,GAAG,CAAC,YAAY,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;YACjE,IAAM,KAAK,GAAI,EAAU,CAAC,gBAAgB,CAAC,KAAM,EAAU,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC;YACpF,IAAM,OAAO,GAAG,mBAAmB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC/C,IAAM,WAAW,GAAG,yBAAyB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YACvE,IAAI,WAAW,EAAE;gBACb,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC3B,OAAO,IAAI,CAAC;aACf;SACJ;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,SAAS,mBAAmB,CAAC,EAAe,EAAE,KAAgB;QAC1D,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC5B,IAAI,OAAO,EAAE;YACT,OAAO,OAAO,CAAC;SAClB;QAED,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;QAC7B,IAAM,MAAM,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,IAAM,MAAM,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxB,IAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;YACzB,IAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB,IAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,GAAG,CAAC,OAAO,GAAG;gBACV,oBAAoB;gBACpB,oBAAoB;gBACpB,YAAY;gBACZ,WAAW;gBACX,iBAAiB;gBACjB,mBAAmB;gBACnB,SAAS;gBACT,UAAU;gBAGV,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI;gBACpB,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI;gBACpB,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO;gBAC3B,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO;gBAC3B,EAAE;aACL,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACtB,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACxB;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,SAAS,yBAAyB,CAAC,OAAyB,EAAE,KAAgB,EAAE,OAAiB;QAC7F,IAAM,eAAe,GAAyB,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;QAC7E,IAAM,WAAW,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;QAC3C,IAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC;QACrC,IAAM,SAAS,GAAG,EAAE,CAAC;QACrB,IAAM,UAAU,GAAG,EAAE,CAAC;QACtB,IAAI,eAAe,GAAG,IAAI,CAAC;QAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxB,IAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC;YAChD,IAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YACjB,IAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;YACpB,IAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;YACnB,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,eAAe,GAAG,eAAe,IAAI,YAAY,IAAI,CAAC,KAAK,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC1G,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;SAChE;QAED,OAAO,CAAC,eAAe,IAAI,WAAW;cAChC,WAAW;eAET,KAAK,CAAC,SAAS,GAAG,SAAS;gBAC3B,KAAK,CAAC,eAAe,CAAC,GAAG,OAAO;sBAC1B,gBAAgB,CAAC,UAAU,EAAE,SAAS,CAAC;sBACvC,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,CAChD,CAAC;IACV,CAAC;AAED,aAAgB,UAAU,CAAC,EAAe;QACtC,OAAO,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC;IAClD,CAAC;IAED,IAAM,UAAU,GAAG,YAAY,CAAC;IAChC,IAAM,UAAU,GAAuB;QACnC,GAAG,EAAE,OAAO;QACZ,GAAG,EAAE,MAAM;QACX,GAAG,EAAE,MAAM;QACX,GAAG,EAAE,QAAQ;QACb,IAAI,EAAE,OAAO;KAChB,CAAC;AAEF,aAAgB,UAAU,CAAC,MAAc;QACrC,OAAO,MAAM,IAAI,IAAI;cACf,EAAE;cACF,CAAC,MAAM,GAAG,EAAE,EAAE,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG,EAAE,CAAC;gBAChD,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;aACxB,CAAC,CAAC;IACX,CAAC;;ICjLD,IAAM,eAAe,GAAG,gDAAgD,CAAC;IACzE,IAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAM,yBAAyB,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO;WAG9C,CAAE,GAAG,CAAC,OAAO,CAAC,OAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AA+B3D,aAAgB,aAAa,CACzB,EAAe,EACf,CAAyC,EACzC,GAAiC,EACjC,SAAmB;QAEnB,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;QAQhB,IAAI,SAAS,EAAE;YACX,aAAa,CAAC,EAAE,EAAE,CAAe,EAAE,GAAG,CAAC,CAAC;SAC3C;aAQI,IAAI,yBAAyB;eAC1B,CAAuB,CAAC,MAAM,IAAI,IAAI;eACtC,CAAuB,CAAC,MAAM,KAAM,CAAgB,CAAC,OAAO,EAClE;YACE,GAAG,CAAC,GAAG,GAAI,CAAuB,CAAC,MAAM,CAAC;YAC1C,GAAG,CAAC,GAAG,GAAI,CAAuB,CAAC,MAAM,CAAC;SAC7C;aAEI,IAAK,CAAgB,CAAC,OAAO,IAAI,IAAI,EAAE;YACxC,GAAG,CAAC,GAAG,GAAI,CAAgB,CAAC,OAAO,CAAC;YACpC,GAAG,CAAC,GAAG,GAAI,CAAgB,CAAC,OAAO,CAAC;SACvC;aAEI;YACD,aAAa,CAAC,EAAE,EAAE,CAAe,EAAE,GAAG,CAAC,CAAC;SAC3C;QAED,OAAO,GAAG,CAAC;IACf,CAAC;IAED,SAAS,aAAa,CAClB,EAAe,EACf,CAAa,EACb,GAAiC;QAGjC,IAAI,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,qBAAqB,EAAE;YAC9C,IAAM,EAAE,GAAI,CAAgB,CAAC,OAAO,CAAC;YACrC,IAAM,EAAE,GAAI,CAAgB,CAAC,OAAO,CAAC;YAErC,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE;gBAMhB,IAAM,GAAG,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;gBACvC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;gBACxB,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC;gBACvB,OAAO;aACV;iBACI;gBACD,IAAI,0BAA0B,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;oBAClD,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACtB,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACtB,OAAO;iBACV;aACJ;SACJ;QACD,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IAC1B,CAAC;AAUD,aAAgB,cAAc,CAAC,CAAa;QACxC,OAAO,CAAC;eACA,MAAM,CAAC,KAAa,CAAC;IACjC,CAAC;AAqBD,aAAgB,cAAc,CAC1B,EAAe,EACf,CAAa,EACb,SAAmB;QAGnB,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QAEtB,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE;YACf,OAAO,CAAC,CAAC;SACZ;QAED,IAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC;QACzB,IAAM,OAAO,GAAG,SAAS,IAAI,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAE7D,IAAI,CAAC,OAAO,EAAE;YACV,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;YACnC,IAAM,UAAU,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAC;YAG/C,CAAC,CAAC,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;SACpE;aACI;YACD,IAAM,KAAK,GAAG,SAAS,KAAK,UAAU;kBACnB,CAAE,CAAC,aAAa,CAAC,CAAC,CAAC;kBACnB,CAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACxC,KAAK,IAAI,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;SACnD;QAMD,IAAM,MAAM,GAAgB,CAAE,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;YACxE,CAAS,CAAC,KAAK,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SACjF;QAMD,OAAO,CAAC,CAAC;IACb,CAAC;IAGD,SAAS,wBAAwB,CAAC,CAAa;QAQ3C,IAAM,aAAa,GAAI,CAAS,CAAC,UAAU,CAAC;QAG5C,IAAI,aAAa,EAAE;YACf,OAAO,aAAa,CAAC;SACxB;QAED,IAAM,MAAM,GAAI,CAAS,CAAC,MAAM,CAAC;QACjC,IAAM,MAAM,GAAI,CAAS,CAAC,MAAM,CAAC;QACjC,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE;YAClC,OAAO,aAAa,CAAC;SACxB;QAKD,IAAM,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjE,IAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;cACtB,MAAM,GAAG,CAAC,GAAG,CAAC;kBACd,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;sBACf,CAAC,CAAC;QACR,OAAO,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IAC5B,CAAC;AAaD,aAAgB,gBAAgB,CAC5B,EAA8B,EAC9B,IAA+B,EAC/B,OAAkC,EAClC,GAA+B;QAuB/B,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;AASD,aAAgB,mBAAmB,CAC/B,EAA8B,EAC9B,IAAkC,EAClC,OAAqC,EACrC,GAAiC;QAEjC,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC;AASD,IAAO,IAAM,IAAI,GAAG,UAAU,CAAyC;QACnE,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC;IAC1B,CAAC,CAAC;;IC5RF;QAII;YAFQ,WAAM,GAAgB,EAAE,CAAA;SAEhB;QAEhB,8BAAS,GAAT,UAAU,KAAsB,EAAE,MAAmB,EAAE,IAAiB;YACpE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SACjC;QAED,0BAAK,GAAL;YACI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;SACf;QAED,6BAAQ,GAAR,UAAS,KAAsB,EAAE,MAAmB,EAAE,IAAiB;YACnE,IAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAE9B,IAAI,CAAC,OAAO,EAAE;gBACV,OAAO;aACV;YAED,IAAM,SAAS,GAAc;gBACzB,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE,EAAE;gBACX,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,KAAK;aACf,CAAC;YAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAChD,IAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAM,GAAG,GAAGC,aAAuB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBACrD,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC1C,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACjC;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC/B;QAED,+BAAU,GAAV,UAAW,KAAsB;YAC7B,KAAK,IAAI,SAAS,IAAI,WAAW,EAAE;gBAC/B,IAAI,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;oBACvC,IAAM,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;oBAC/D,IAAI,WAAW,EAAE;wBACb,OAAO,WAAW,CAAC;qBACtB;iBACJ;aACJ;SACJ;QACL,iBAAC;IAAD,CAAC,IAAA;IAED,SAASC,MAAI,CAAC,SAAqB;QAC/B,IAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7C,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,SAAS,MAAM,CAAC,SAAqB;QACjC,OAAO;YACH,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACvC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;SAC1C,CAAC;IACN,CAAC;IAQD,IAAM,WAAW,GAA2B;QAExC,KAAK,EAAE,UAAU,MAAmB,EAAE,KAAsB;YACxD,IAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;YAE/B,IAAI,CAAC,QAAQ,EAAE;gBACX,OAAO;aACV;YAED,IAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC;YACrD,IAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,IAAI,QAAQ,CAAC;YAEjE,IAAI,QAAQ;mBACL,QAAQ,CAAC,MAAM,GAAG,CAAC;mBACnB,QAAQ;mBACR,QAAQ,CAAC,MAAM,GAAG,CAAC,EACxB;gBACE,IAAI,UAAU,GAAGA,MAAI,CAAC,QAAQ,CAAC,GAAGA,MAAI,CAAC,QAAQ,CAAC,CAAC;gBACjD,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,UAAU,GAAG,CAAC,CAAC,CAAC;gBAEzC,KAAsB,CAAC,UAAU,GAAG,UAAU,CAAC;gBAEhD,IAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACpC,KAAsB,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC/C,KAAsB,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAEhD,OAAO;oBACH,IAAI,EAAE,OAAO;oBACb,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;oBACxB,KAAK,EAAE,KAAK;iBACf,CAAC;aACL;SACJ;KAGJ,CAAC;;aC7GcC,QAAM;QAClB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;AAKD,aAAgB,QAAQ,CAAC,GAAgB;QACrC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,OAAO,GAAG,CAAC;IACf,CAAC;AAKD,aAAgBC,MAAI,CAAC,GAAgB,EAAE,CAAc;QACjD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,OAAO,GAAG,CAAC;IACf,CAAC;AAKD,aAAgBC,KAAG,CAAC,GAAgB,EAAE,EAAe,EAAE,EAAe;QAIlE,IAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACnD,IAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACnD,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACd,OAAO,GAAG,CAAC;IACf,CAAC;AAKD,aAAgB,SAAS,CAAC,GAAgB,EAAE,CAAc,EAAE,CAAc;QACtE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,OAAO,GAAG,CAAC;IACf,CAAC;AAKD,aAAgB,MAAM,CAClB,GAAgB,EAChB,CAAc,EACd,GAAW,EACX,KAA2B;QAA3B,sBAAA,EAAA,SAAsB,CAAC,EAAE,CAAC,CAAC;QAE3B,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEzB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAClE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAClE,OAAO,GAAG,CAAC;IACf,CAAC;AAKD,aAAgBC,OAAK,CAAC,GAAgB,EAAE,CAAc,EAAE,CAAc;QAClE,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACnB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACnB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACnB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACnB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACnB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACnB,OAAO,GAAG,CAAC;IACf,CAAC;AAKD,aAAgB,MAAM,CAAC,GAAgB,EAAE,CAAc;QAEnD,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjB,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,GAAG,EAAE;YACN,OAAO,IAAI,CAAC;SACf;QACD,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QAEhB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC;QAClB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC;QACnB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC;QACnB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC;QAClB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,GAAG,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,GAAG,CAAC;QACrC,OAAO,GAAG,CAAC;IACf,CAAC;AAKD,aAAgBN,OAAK,CAAC,CAAc;QAChC,IAAM,CAAC,GAAGG,QAAM,EAAE,CAAC;QACnBC,MAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACX,OAAO,CAAC,CAAC;IACb,CAAC;;;;;;;;;;;;;;;ICpJD;QAMI,eAAY,CAAU,EAAE,CAAU;YAC9B,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChB,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACnB;QAKD,oBAAI,GAAJ,UAAK,KAAgB;YACjB,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YACjB,OAAO,IAAI,CAAC;SACf;QAKD,qBAAK,GAAL;YACI,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;SACpC;QAKD,mBAAG,GAAH,UAAI,CAAS,EAAE,CAAS;YACpB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,OAAO,IAAI,CAAC;SACf;QAKD,qBAAK,GAAL,UAAM,KAAgB;YAClB,OAAO,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;SACnD;QAKD,mBAAG,GAAH,UAAI,KAAgB;YAChB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;YAClB,OAAO,IAAI,CAAC;SACf;QAED,qBAAK,GAAL,UAAM,MAAc;YAChB,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC;YACjB,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC;SACpB;QAED,2BAAW,GAAX,UAAY,KAAgB,EAAE,MAAc;YACxC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC;YAC3B,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC;SAC9B;QAKD,mBAAG,GAAH,UAAI,KAAgB;YAChB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;YAClB,OAAO,IAAI,CAAC;SACf;QAKD,mBAAG,GAAH,UAAI,KAAgB;YAChB,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;SAC9C;QAKD,mBAAG,GAAH;YACI,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;SACvD;QAKD,yBAAS,GAAT;YACI,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;SAC5C;QAKD,yBAAS,GAAT;YACI,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC;YACd,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC;YACd,OAAO,IAAI,CAAC;SACf;QAKD,wBAAQ,GAAR,UAAS,KAAgB;YACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAC5B,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;SACvC;QAKD,8BAAc,GAAd,UAAe,KAAY;YACvB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAC5B,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAC5B,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;SAC5B;QAKD,sBAAM,GAAN;YACI,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YACjB,OAAO,IAAI,CAAC;SACf;QAKD,yBAAS,GAAT,UAAU,CAAc;YACpB,IAAI,CAAC,CAAC,EAAE;gBACJ,OAAO;aACV;YACD,IAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACjB,IAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC;SACf;QAED,uBAAO,GAAP,UAAQ,GAAa;YACjB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YAChB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YAChB,OAAO,GAAG,CAAC;SACd;QAED,yBAAS,GAAT,UAAU,KAAe;YACrB,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;SACrB;QAEM,SAAG,GAAV,UAAW,CAAY,EAAE,CAAS,EAAE,CAAS;YACzC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACR,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SACX;QAEM,UAAI,GAAX,UAAY,CAAY,EAAE,EAAa;YACnC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACX,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;SACd;QAEM,SAAG,GAAV,UAAW,CAAY;YACnB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3C;QAEM,eAAS,GAAhB,UAAiB,CAAY;YACzB,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAChC;QAEM,SAAG,GAAV,UAAW,EAAa,EAAE,EAAa;YACnC,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;SACpC;QAEM,SAAG,GAAV,UAAW,GAAc,EAAE,EAAa,EAAE,EAAa;YACnD,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACpB,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;SACvB;QAEM,SAAG,GAAV,UAAW,GAAc,EAAE,EAAa,EAAE,EAAa;YACnD,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACpB,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;SACvB;QAEM,WAAK,GAAZ,UAAa,GAAc,EAAE,EAAa,EAAE,MAAc;YACtD,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;YACtB,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;SACzB;QAEM,iBAAW,GAAlB,UAAmB,GAAc,EAAE,EAAa,EAAE,EAAa,EAAE,MAAc;YAC3E,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;YAC7B,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;SAChC;QAEM,UAAI,GAAX,UAAY,GAAc,EAAE,EAAa,EAAE,EAAa,EAAE,CAAS;YAC/D,IAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC/B,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;SAClC;QACL,YAAC;IAAD,CAAC,IAAA;;ICxMD,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IAEzB,IAAM,EAAE,GAAG,IAAI,KAAK,EAAE,CAAC;IACvB,IAAM,EAAE,GAAG,IAAI,KAAK,EAAE,CAAC;IACvB,IAAM,EAAE,GAAG,IAAI,KAAK,EAAE,CAAC;IACvB,IAAM,EAAE,GAAG,IAAI,KAAK,EAAE,CAAC;IAEvB,IAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAC1B,IAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAE1B;QAOI,sBAAY,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc;YAC3D,IAAI,KAAK,GAAG,CAAC,EAAE;gBACX,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACd,KAAK,GAAG,CAAC,KAAK,CAAC;aAClB;YACD,IAAI,MAAM,GAAG,CAAC,EAAE;gBACZ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;gBACf,MAAM,GAAG,CAAC,MAAM,CAAC;aACpB;YAED,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;SACxB;QAED,4BAAK,GAAL,UAAM,KAAmB;YACrB,IAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YACnC,IAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAInC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAC1C,IAAI,CAAC,KAAK,GAAG,OAAO,CAChB,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,EACrB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CACtB,GAAG,CAAC,CAAC;aACT;iBACI;gBACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;aAC5B;YAED,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAC3C,IAAI,CAAC,MAAM,GAAG,OAAO,CACjB,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,EACtB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CACvB,GAAG,CAAC,CAAC;aACT;iBACI;gBACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;aAC9B;YAED,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;SACd;QAED,qCAAc,GAAd,UAAe,CAAqB;YAChC,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;SAC9C;QAED,yCAAkB,GAAlB,UAAmB,CAAW;YAC1B,IAAM,CAAC,GAAG,IAAI,CAAC;YACf,IAAM,EAAE,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;YAC7B,IAAM,EAAE,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;YAE/B,IAAM,CAAC,GAAGG,QAAa,EAAE,CAAC;YAG1BC,SAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrCC,OAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAC7BD,SAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEnC,OAAO,CAAC,CAAC;SACZ;QAED,gCAAS,GAAT,UAAU,CAAW,EAAE,GAAe;YAClC,IAAI,CAAC,CAAC,EAAE;gBACJ,OAAO,KAAK,CAAC;aAChB;YAED,IAAI,EAAE,CAAC,YAAY,YAAY,CAAC,EAAE;gBAE9B,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aAC9B;YAED,IAAM,CAAC,GAAG,IAAI,CAAC;YACf,IAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAChB,IAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YAC1B,IAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAChB,IAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;YAE3B,IAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAChB,IAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YAC1B,IAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAChB,IAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;YAE3B,IAAI,OAAO,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;YAClE,IAAI,GAAG,EAAE;gBACL,IAAI,IAAI,GAAG,QAAQ,CAAC;gBACpB,IAAI,IAAI,GAAG,CAAC,CAAC;gBACb,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;gBAC/B,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;gBAC/B,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;gBAC/B,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;gBAC/B,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC5B,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAE5B,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE;oBACxB,IAAI,EAAE,GAAG,IAAI,EAAE;wBACX,IAAI,GAAG,EAAE,CAAC;wBACV,IAAI,EAAE,GAAG,EAAE,EAAE;4BACT,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;yBAC5B;6BACI;4BACD,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;yBAC3B;qBACJ;iBACJ;qBACI;oBACD,IAAI,EAAE,GAAG,IAAI,EAAE;wBACX,IAAI,GAAG,EAAE,CAAC;wBACV,IAAI,EAAE,GAAG,EAAE,EAAE;4BACT,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;yBAC3B;6BACI;4BACD,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;yBAC5B;qBACJ;iBACJ;gBAGD,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE;oBACxB,IAAI,EAAE,GAAG,IAAI,EAAE;wBACX,IAAI,GAAG,EAAE,CAAC;wBACV,IAAI,EAAE,GAAG,EAAE,EAAE;4BACT,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;yBAC5B;6BACI;4BACD,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;yBAC3B;qBACJ;iBACJ;qBACI;oBACD,IAAI,EAAE,GAAG,IAAI,EAAE;wBACX,IAAI,GAAG,EAAE,CAAC;wBACV,IAAI,EAAE,GAAG,EAAE,EAAE;4BACT,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;yBAC3B;6BACI;4BACD,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;yBAC5B;qBACJ;iBACJ;aACJ;YAED,IAAI,GAAG,EAAE;gBACL,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC;aAC5C;YACD,OAAO,OAAO,CAAC;SAClB;QAED,8BAAO,GAAP,UAAQ,CAAS,EAAE,CAAS;YACxB,IAAM,IAAI,GAAG,IAAI,CAAC;YAClB,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;mBACX,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;mBAC1B,CAAC,IAAI,IAAI,CAAC,CAAC;mBACX,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;SACtC;QAED,4BAAK,GAAL;YACI,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;SACpE;QAKD,2BAAI,GAAJ,UAAK,KAAe;YAChB,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAClC;QAED,4BAAK,GAAL;YACI,OAAO;gBACH,CAAC,EAAE,IAAI,CAAC,CAAC;gBACT,CAAC,EAAE,IAAI,CAAC,CAAC;gBACT,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;aACtB,CAAC;SACL;QAKD,+BAAQ,GAAR;YACI,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;mBAChB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;mBAChB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;mBACpB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAChC;QAED,6BAAM,GAAN;YACI,OAAO,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;SAChD;QAEM,mBAAM,GAAb,UAAc,IAAc;YACxB,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;SACpE;QAEM,iBAAI,GAAX,UAAY,MAAgB,EAAE,MAAgB;YAC1C,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;YACpB,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;YACpB,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC5B,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;SACjC;QAEM,2BAAc,GAArB,UAAsB,MAAgB,EAAE,MAAgB,EAAE,CAAqB;YAI3E,IAAI,CAAC,CAAC,EAAE;gBACJ,IAAI,MAAM,KAAK,MAAM,EAAE;oBACnB,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;iBACrC;gBACD,OAAO;aACV;YAED,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE;gBAC5D,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBAC9B,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBAC9B,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;gBACjC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;gBACnC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE;oBAClB,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC;oBACzB,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;iBAChC;gBACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;oBACnB,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC;oBAC1B,MAAM,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;iBAClC;gBACD,OAAO;aACV;YAGD,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;YACvB,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;YACvB,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;YACtC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;YAEvC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAChB,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAChB,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAChB,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAEhB,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAM,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAM,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;SACnC;QACL,mBAAC;IAAD,CAAC,IAAA;;ICzMD,IAAM,MAAM,GAAG,QAAQ,CAAC;IAExB,SAAS,eAAe,CAAC,OAAyB,EAAE,UAGnD,EAAE,KAAiB;QAChB,OAAO;YACH,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,KAAK;YAEZ,MAAM,EAAE,UAAU,CAAC,MAAM;YAEzB,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,YAAY,EAAE,KAAK;YACnB,OAAO,EAAE,KAAK,CAAC,GAAG;YAClB,OAAO,EAAE,KAAK,CAAC,GAAG;YAClB,YAAY,EAAG,KAAsB,CAAC,YAAY;YAClD,MAAM,EAAG,KAAsB,CAAC,MAAM;YACtC,MAAM,EAAG,KAAsB,CAAC,MAAM;YACtC,UAAU,EAAG,KAAsB,CAAC,UAAU;YAC9C,UAAU,EAAE,KAAK,CAAC,OAAO;YACzB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,IAAI,EAAE,SAAS;SAClB,CAAC;IACN,CAAC;IAED,SAAS,SAAS;QACdE,IAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED;QAAyB,8BAAQ;QAAjC;YAAA,qEAIC;YAHG,aAAO,GAAY,IAAI,CAAA;;SAG1B;QAFG,4BAAO,GAAP,eAAY;QACZ,8BAAS,GAAT,eAAc;QAClB,iBAAC;IAAD,CAJA,CAAyB,QAAQ,GAIhC;IAED;QAKI,uBAAY,CAAU,EAAE,CAAU;YAC9B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;SACd;QACL,oBAAC;IAAD,CAAC,IAAA;IAED,IAAM,YAAY,GAAG;QACjB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU;QAC7C,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa;KACrD,CAAC;IAKF,IAAM,OAAO,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAG7C;QAAsB,2BAAQ;QAoB1B,iBACI,OAAgB,EAChB,OAAoB,EACpB,KAA4B,EAC5B,WAAwB,EACxB,WAAmB;YALvB,YAOI,iBAAO,SAoBV;YAvCO,cAAQ,GAAG,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAqBtC,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YAEvB,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YAEvB,KAAI,CAAC,WAAW,GAAG,WAAW,CAAC;YAE/B,KAAI,CAAC,YAAY,GAAG,WAAW,CAAC;YAEhC,KAAK,GAAG,KAAK,IAAI,IAAI,UAAU,EAAE,CAAC;YAKlC,KAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAElB,KAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAE5B,KAAI,CAAC,YAAY,GAAG,IAAI,SAAS,CAAC,KAAI,CAAC,CAAC;;SAC3C;QAED,iCAAe,GAAf,UAAgB,KAA4B;YACxC,IAAI,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;aACxB;YAED,IAAI,KAAK,EAAE;gBACPC,IAAS,CAAC,YAAY,EAAE,UAAU,IAAI;oBAClC,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAmB,CAAC,EAAE,IAAI,CAAC,CAAC;iBAC/D,EAAE,IAAI,CAAC,CAAC;gBAET,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;aACxB;YACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACtB;QAED,2BAAS,GAAT,UAAU,KAAiB;YACvB,IAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;YACpB,IAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;YAEpB,IAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAEhD,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;YAChC,IAAI,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAAC;YAM3C,IAAI,iBAAiB,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;gBAC9C,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC3D,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAAC;aAC1C;YAED,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,SAAS,GAAG,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3F,IAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;YAErC,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,aAAa,GAAG,aAAa,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;YAGrF,IAAI,iBAAiB,IAAI,aAAa,KAAK,iBAAiB,EAAE;gBAC1D,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;aAC1D;YAGD,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;YAGpD,IAAI,aAAa,IAAI,aAAa,KAAK,iBAAiB,EAAE;gBACtD,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;aACvD;SACJ;QAED,0BAAQ,GAAR,UAAS,KAAiB;YACtB,IAAM,YAAY,GAAG,KAAK,CAAC,cAAc,CAAC;YAE1C,IAAI,YAAY,KAAK,gBAAgB,EAAE;gBACnC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;aAC5D;YAED,IAAI,YAAY,KAAK,cAAc,EAAE;gBAGjC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAC,CAAC,CAAC;aAChE;SACJ;QAKD,wBAAM,GAAN;YACI,IAAI,CAAC,QAAQ,GAAG,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC3C;QAKD,0BAAQ,GAAR,UAAS,SAAsB,EAAE,SAAe;YAC5C,IAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;YAChC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;SAC5C;QAKD,yBAAO,GAAP;YAEI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YAErB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACvB;QAMD,gCAAc,GAAd,UAAe,WAAmB;YAC9B,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;SACnD;QAUD,mCAAiB,GAAjB,UAAkB,UAGjB,EAAE,SAA2B,EAAE,KAAiB;YAE7C,UAAU,GAAG,UAAU,IAAI,EAAE,CAAC;YAE9B,IAAI,EAAE,GAAG,UAAU,CAAC,MAAiB,CAAC;YACtC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE;gBACjB,OAAO;aACV;YACD,IAAM,QAAQ,IAAI,IAAI,GAAG,SAAS,CAA2B,CAAC;YAC9D,IAAM,WAAW,GAAG,eAAe,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;YAElE,OAAO,EAAE,EAAE;gBACP,EAAE,CAAC,QAAQ,CAAC;wBACJ,WAAW,CAAC,YAAY,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;gBAEzE,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;gBAInC,EAAE,GAAG,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,MAAM,CAAC;gBAEnD,IAAI,WAAW,CAAC,YAAY,EAAE;oBAC1B,MAAM;iBACT;aACJ;YAED,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;gBAE3B,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;gBAGrC,IAAI,IAAI,CAAC,OAAO,IAAK,IAAI,CAAC,OAAyB,CAAC,cAAc,EAAE;oBAC/D,IAAI,CAAC,OAAyB,CAAC,cAAc,CAAC,UAAU,KAAK;wBAC1D,IAAI,QAAQ,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,UAAU,EAAE;4BACzC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;yBAC5C;wBACD,IAAI,KAAK,CAAC,OAAO,EAAE;4BACf,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;yBACzC;qBACJ,CAAC,CAAC;iBACN;aACJ;SACJ;QAED,2BAAS,GAAT,UAAU,CAAS,EAAE,CAAS,EAAE,OAAqB;YACjD,IAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3C,IAAM,GAAG,GAAG,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACpC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YAEzC,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBAKlC,IAAM,UAAU,GAAkB,EAAE,CAAC;gBACrC,IAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;gBACtC,IAAM,cAAc,GAAG,WAAW,GAAG,CAAC,CAAC;gBACvC,IAAM,WAAW,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,cAAc,EAAE,CAAC,GAAG,cAAc,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;gBAEvG,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;oBACvC,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACnB,IAAI,EAAE,KAAK,OAAO;2BACX,CAAC,EAAE,CAAC,MAAM;2BACV,CAAC,EAAE,CAAC,mBAAmB;4BAItB,CAAC,EAAE,CAAC,MAAM,IAAI,CAAE,EAAE,CAAC,MAAc,CAAC,mBAAmB,CAAC,EAC5D;wBACE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;wBACnC,IAAI,EAAE,CAAC,SAAS,EAAE;4BACd,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;yBACxC;wBACD,IAAI,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE;4BAChC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;yBACvB;qBACJ;iBACJ;gBAMD,IAAI,UAAU,CAAC,MAAM,EAAE;oBACnB,IAAM,KAAK,GAAG,CAAC,CAAC;oBAChB,IAAM,SAAS,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;oBAC/B,IAAM,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;oBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,IAAI,KAAK,EAAE;wBAC5C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,SAAS,EAAE;4BACjD,IAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;4BACnC,IAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;4BACnC,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;4BACjD,IAAI,GAAG,CAAC,MAAM,EAAE;gCACZ,OAAO,GAAG,CAAC;6BACd;yBACJ;qBACJ;iBACJ;aACJ;YAED,OAAO,GAAG,CAAC;SACd;QAED,gCAAc,GAAd,UAAe,KAAiB,EAAE,KAAkC;YAChE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACnB,IAAI,CAAC,WAAW,GAAG,IAAI,UAAU,EAAE,CAAC;aACvC;YACD,IAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YAEpC,KAAK,KAAK,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YAExC,IAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CACpC,KAAwB,EACxB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,MAAM,EAChD,IAAI,CAAC,KAAyB,CAAC,GAAG,CACtC,CAAC;YAEF,KAAK,KAAK,KAAK,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YAGtC,IAAI,WAAW,EAAE;gBACb,IAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;gBAC7B,KAAsB,CAAC,YAAY,GAAG,IAAI,CAAC;gBAE5C,IAAI,GAAG,GAAG,IAAI,aAAa,EAAE,CAAC;gBAC9B,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;gBAChC,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAwB,EAAE,WAAW,CAAC,KAAmB,CAAC,CAAC;aAC1F;SACJ;QAQL,cAAC;IAAD,CA3SA,CAAsB,QAAQ,GA2S7B;AAGDA,QAAS,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,UAAU,IAAiB;QAC7G,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,UAAU,KAAK;YACrC,IAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;YACpB,IAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;YACpB,IAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAEhD,IAAI,OAAO,CAAC;YACZ,IAAI,aAAa,CAAC;YAElB,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,SAAS,EAAE;gBAElC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/B,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;aAClC;YAED,IAAI,IAAI,KAAK,WAAW,EAAE;gBACtB,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC;gBAC7B,IAAI,CAAC,UAAU,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;gBAEzC,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC;aAC9B;iBACI,IAAI,IAAI,KAAK,SAAS,EAAE;gBACzB,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC;aAC9B;iBACI,IAAI,IAAI,KAAK,OAAO,EAAE;gBACvB,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,KAAK;uBAKxB,CAAC,IAAI,CAAC,UAAU;uBAEhBC,IAAS,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAC3D;oBACE,OAAO;iBACV;gBACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;aAC1B;YAED,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;SAChD,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,SAAS,OAAO,CAAC,WAAwB,EAAE,CAAS,EAAE,CAAS;QAC3D,IAAI,WAAW,CAAC,WAAW,CAAC,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACtE,IAAI,EAAE,GAAY,WAAW,CAAC;YAC9B,IAAI,QAAQ,SAAA,CAAC;YACb,IAAI,UAAU,GAAG,KAAK,CAAC;YACvB,OAAO,EAAE,EAAE;gBAEP,IAAI,EAAE,CAAC,UAAU,EAAE;oBACf,UAAU,GAAG,IAAI,CAAC;iBACrB;gBACD,IAAI,CAAC,UAAU,EAAE;oBACb,IAAI,QAAQ,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;oBAIhC,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;wBACrC,OAAO,KAAK,CAAC;qBAChB;iBACJ;gBACD,IAAI,EAAE,CAAC,MAAM,EAAE;oBACX,QAAQ,GAAG,IAAI,CAAC;iBACnB;gBAGD,IAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC;gBAC/B,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;aACpC;YACD,OAAO,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC;SACnC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,SAAS,cAAc,CACnB,IAAmB,EACnB,GAAkB,EAClB,CAAS,EACT,CAAS,EACT,OAAoB;QAEpB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YACvC,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,gBAAgB,SAAA,CAAC;YACrB,IAAI,EAAE,KAAK,OAAO;mBAEX,CAAC,EAAE,CAAC,MAAM;oBACT,gBAAgB,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAC3C;gBACE,CAAC,GAAG,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;gBACvC,IAAI,gBAAgB,KAAK,MAAM,EAAE;oBAC7B,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;oBAChB,MAAM;iBACT;aACJ;SACJ;IACL,CAAC;IAKD,SAAS,iBAAiB,CAAC,eAAwB,EAAE,CAAS,EAAE,CAAS;QACrE,IAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAC/E,CAAC;;IC/hBD,IAAM,iBAAiB,GAAG,EAAE,CAAC;IAE7B,IAAM,qBAAqB,GAAG,CAAC,CAAC;IAIhC,SAAS,YAAY,CAAC,CAAS;QAC3B,IAAI,CAAC,GAAG,CAAC,CAAC;QAEV,OAAO,CAAC,IAAI,iBAAiB,EAAE;YAC3B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACX,CAAC,KAAK,CAAC,CAAC;SACX;QAED,OAAO,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IAED,SAAS,gBAAgB,CAAI,KAAU,EAAE,EAAU,EAAE,EAAU,EAAE,OAAuB;QACpF,IAAI,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;QAEnB,IAAI,KAAK,KAAK,EAAE,EAAE;YACd,OAAO,CAAC,CAAC;SACZ;QAED,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE;YACxC,OAAO,KAAK,GAAG,EAAE,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;gBAC9D,KAAK,EAAE,CAAC;aACX;YAED,UAAU,CAAI,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;SACnC;aACI;YACD,OAAO,KAAK,GAAG,EAAE,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;gBAC/D,KAAK,EAAE,CAAC;aACX;SACJ;QAED,OAAO,KAAK,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,SAAS,UAAU,CAAI,KAAU,EAAE,EAAU,EAAE,EAAU;QACrD,EAAE,EAAE,CAAC;QAEL,OAAO,EAAE,GAAG,EAAE,EAAE;YACZ,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;YACxB,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;SACnB;IACL,CAAC;IAED,SAAS,mBAAmB,CAAI,KAAU,EAAE,EAAU,EAAE,EAAU,EAAE,KAAa,EAAE,OAAuB;QACtG,IAAI,KAAK,KAAK,EAAE,EAAE;YACd,KAAK,EAAE,CAAC;SACX;QAED,OAAO,KAAK,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE;YACxB,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAEzB,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,IAAI,GAAG,CAAC;YAER,OAAO,IAAI,GAAG,KAAK,EAAE;gBACjB,GAAG,GAAG,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC;gBAEzB,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE;oBAChC,KAAK,GAAG,GAAG,CAAC;iBACf;qBACI;oBACD,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;iBAClB;aACJ;YAED,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;YAErB,QAAQ,CAAC;gBACL,KAAK,CAAC;oBACF,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;gBAEtC,KAAK,CAAC;oBACF,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;gBAEtC,KAAK,CAAC;oBACF,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC9B,MAAM;gBACV;oBACI,OAAO,CAAC,GAAG,CAAC,EAAE;wBACV,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;wBACtC,CAAC,EAAE,CAAC;qBACP;aACR;YAED,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;SACvB;IACL,CAAC;IAED,SAAS,UAAU,CAAI,KAAQ,EAAE,KAAU,EAAE,KAAa,EAAE,MAAc,EAAE,IAAY,EAAE,OAAuB;QAC7G,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;YACzC,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC;YAE1B,OAAO,MAAM,GAAG,SAAS,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE;gBAC3E,UAAU,GAAG,MAAM,CAAC;gBACpB,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;gBAE3B,IAAI,MAAM,IAAI,CAAC,EAAE;oBACb,MAAM,GAAG,SAAS,CAAC;iBACtB;aACJ;YAED,IAAI,MAAM,GAAG,SAAS,EAAE;gBACpB,MAAM,GAAG,SAAS,CAAC;aACtB;YAED,UAAU,IAAI,IAAI,CAAC;YACnB,MAAM,IAAI,IAAI,CAAC;SAClB;aACI;YACD,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC;YACrB,OAAO,MAAM,GAAG,SAAS,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE;gBAC5E,UAAU,GAAG,MAAM,CAAC;gBACpB,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;gBAE3B,IAAI,MAAM,IAAI,CAAC,EAAE;oBACb,MAAM,GAAG,SAAS,CAAC;iBACtB;aACJ;YACD,IAAI,MAAM,GAAG,SAAS,EAAE;gBACpB,MAAM,GAAG,SAAS,CAAC;aACtB;YAED,IAAI,GAAG,GAAG,UAAU,CAAC;YACrB,UAAU,GAAG,IAAI,GAAG,MAAM,CAAC;YAC3B,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC;SACvB;QAED,UAAU,EAAE,CAAC;QACb,OAAO,UAAU,GAAG,MAAM,EAAE;YACxB,IAAI,CAAC,GAAG,UAAU,IAAI,MAAM,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC;YAEjD,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;gBACtC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;aACtB;iBACI;gBACD,MAAM,GAAG,CAAC,CAAC;aACd;SACJ;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,SAAS,WAAW,CAAI,KAAQ,EAAE,KAAU,EAAE,KAAa,EAAE,MAAc,EAAE,IAAY,EAAE,OAAuB;QAC9G,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;YACzC,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC;YAErB,OAAO,MAAM,GAAG,SAAS,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE;gBAC3E,UAAU,GAAG,MAAM,CAAC;gBACpB,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;gBAE3B,IAAI,MAAM,IAAI,CAAC,EAAE;oBACb,MAAM,GAAG,SAAS,CAAC;iBACtB;aACJ;YAED,IAAI,MAAM,GAAG,SAAS,EAAE;gBACpB,MAAM,GAAG,SAAS,CAAC;aACtB;YAED,IAAI,GAAG,GAAG,UAAU,CAAC;YACrB,UAAU,GAAG,IAAI,GAAG,MAAM,CAAC;YAC3B,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC;SACvB;aACI;YACD,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC;YAE1B,OAAO,MAAM,GAAG,SAAS,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE;gBAC5E,UAAU,GAAG,MAAM,CAAC;gBACpB,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;gBAE3B,IAAI,MAAM,IAAI,CAAC,EAAE;oBACb,MAAM,GAAG,SAAS,CAAC;iBACtB;aACJ;YAED,IAAI,MAAM,GAAG,SAAS,EAAE;gBACpB,MAAM,GAAG,SAAS,CAAC;aACtB;YAED,UAAU,IAAI,IAAI,CAAC;YACnB,MAAM,IAAI,IAAI,CAAC;SAClB;QAED,UAAU,EAAE,CAAC;QAEb,OAAO,UAAU,GAAG,MAAM,EAAE;YACxB,IAAI,CAAC,GAAG,UAAU,IAAI,MAAM,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC;YAEjD,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;gBACtC,MAAM,GAAG,CAAC,CAAC;aACd;iBACI;gBACD,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;aACtB;SACJ;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,SAAS,OAAO,CAAI,KAAU,EAAE,OAAuB;QACnD,IAAI,SAAS,GAAG,qBAAqB,CAAC;QACtC,IAAI,QAAkB,CAAC;QACvB,IAAI,SAAmB,CAAC;QACxB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,IAAI,GAAG,GAAQ,EAAE,CAAC;QAElB,QAAQ,GAAG,EAAE,CAAC;QACd,SAAS,GAAG,EAAE,CAAC;QAEf,SAAS,OAAO,CAAC,SAAiB,EAAE,UAAkB;YAClD,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;YAChC,SAAS,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC;YAClC,SAAS,IAAI,CAAC,CAAC;SAClB;QAED,SAAS,SAAS;YACd,OAAO,SAAS,GAAG,CAAC,EAAE;gBAClB,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;gBAEtB,IACI,CAAC,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;wBAC1D,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EACpE;oBACE,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;wBACrC,CAAC,EAAE,CAAC;qBACP;iBACJ;qBACI,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;oBACtC,MAAM;iBACT;gBACD,OAAO,CAAC,CAAC,CAAC,CAAC;aACd;SACJ;QAED,SAAS,cAAc;YACnB,OAAO,SAAS,GAAG,CAAC,EAAE;gBAClB,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;gBAEtB,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;oBAC9C,CAAC,EAAE,CAAC;iBACP;gBAED,OAAO,CAAC,CAAC,CAAC,CAAC;aACd;SACJ;QAED,SAAS,OAAO,CAAC,CAAS;YACtB,IAAI,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,MAAM,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7B,IAAI,OAAO,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAE/B,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC;YAEjC,IAAI,CAAC,KAAK,SAAS,GAAG,CAAC,EAAE;gBACrB,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAClC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;aACvC;YAED,SAAS,EAAE,CAAC;YAEZ,IAAI,CAAC,GAAG,WAAW,CAAI,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YAC1E,MAAM,IAAI,CAAC,CAAC;YACZ,OAAO,IAAI,CAAC,CAAC;YAEb,IAAI,OAAO,KAAK,CAAC,EAAE;gBACf,OAAO;aACV;YAED,OAAO,GAAG,UAAU,CAAI,KAAK,CAAC,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;YAEnG,IAAI,OAAO,KAAK,CAAC,EAAE;gBACf,OAAO;aACV;YAED,IAAI,OAAO,IAAI,OAAO,EAAE;gBACpB,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;aAC9C;iBACI;gBACD,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;aAC/C;SACJ;QAED,SAAS,QAAQ,CAAC,MAAc,EAAE,OAAe,EAAE,MAAc,EAAE,OAAe;YAC9E,IAAI,CAAC,GAAG,CAAC,CAAC;YAEV,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;gBAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;aAC9B;YAED,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,IAAI,OAAO,GAAG,MAAM,CAAC;YACrB,IAAI,IAAI,GAAG,MAAM,CAAC;YAElB,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAEjC,IAAI,EAAE,OAAO,KAAK,CAAC,EAAE;gBACjB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;oBAC1B,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;iBACtC;gBACD,OAAO;aACV;YAED,IAAI,OAAO,KAAK,CAAC,EAAE;gBACf,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;oBAC1B,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;iBACxC;gBACD,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;gBACrC,OAAO;aACV;YAED,IAAI,UAAU,GAAG,SAAS,CAAC;YAC3B,IAAI,MAAM,CAAC;YACX,IAAI,MAAM,CAAC;YACX,IAAI,IAAI,CAAC;YAET,OAAO,CAAC,EAAE;gBACN,MAAM,GAAG,CAAC,CAAC;gBACX,MAAM,GAAG,CAAC,CAAC;gBACX,IAAI,GAAG,KAAK,CAAC;gBAEb,GAAG;oBACC,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE;wBAC3C,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;wBACjC,MAAM,EAAE,CAAC;wBACT,MAAM,GAAG,CAAC,CAAC;wBAEX,IAAI,EAAE,OAAO,KAAK,CAAC,EAAE;4BACjB,IAAI,GAAG,IAAI,CAAC;4BACZ,MAAM;yBACT;qBACJ;yBACI;wBACD,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;wBAC/B,MAAM,EAAE,CAAC;wBACT,MAAM,GAAG,CAAC,CAAC;wBACX,IAAI,EAAE,OAAO,KAAK,CAAC,EAAE;4BACjB,IAAI,GAAG,IAAI,CAAC;4BACZ,MAAM;yBACT;qBACJ;iBACJ,QAAQ,CAAC,MAAM,GAAG,MAAM,IAAI,UAAU,EAAE;gBAEzC,IAAI,IAAI,EAAE;oBACN,MAAM;iBACT;gBAED,GAAG;oBACC,MAAM,GAAG,WAAW,CAAI,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;oBAE3E,IAAI,MAAM,KAAK,CAAC,EAAE;wBACd,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;4BACzB,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;yBACtC;wBAED,IAAI,IAAI,MAAM,CAAC;wBACf,OAAO,IAAI,MAAM,CAAC;wBAClB,OAAO,IAAI,MAAM,CAAC;wBAClB,IAAI,OAAO,IAAI,CAAC,EAAE;4BACd,IAAI,GAAG,IAAI,CAAC;4BACZ,MAAM;yBACT;qBACJ;oBAED,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBAEjC,IAAI,EAAE,OAAO,KAAK,CAAC,EAAE;wBACjB,IAAI,GAAG,IAAI,CAAC;wBACZ,MAAM;qBACT;oBAED,MAAM,GAAG,UAAU,CAAI,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;oBAE1E,IAAI,MAAM,KAAK,CAAC,EAAE;wBACd,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;4BACzB,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;yBACxC;wBAED,IAAI,IAAI,MAAM,CAAC;wBACf,OAAO,IAAI,MAAM,CAAC;wBAClB,OAAO,IAAI,MAAM,CAAC;wBAElB,IAAI,OAAO,KAAK,CAAC,EAAE;4BACf,IAAI,GAAG,IAAI,CAAC;4BACZ,MAAM;yBACT;qBACJ;oBACD,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;oBAE/B,IAAI,EAAE,OAAO,KAAK,CAAC,EAAE;wBACjB,IAAI,GAAG,IAAI,CAAC;wBACZ,MAAM;qBACT;oBAED,UAAU,EAAE,CAAC;iBAChB,QAAQ,MAAM,IAAI,qBAAqB,IAAI,MAAM,IAAI,qBAAqB,EAAE;gBAE7E,IAAI,IAAI,EAAE;oBACN,MAAM;iBACT;gBAED,IAAI,UAAU,GAAG,CAAC,EAAE;oBAChB,UAAU,GAAG,CAAC,CAAC;iBAClB;gBAED,UAAU,IAAI,CAAC,CAAC;aACnB;YAED,SAAS,GAAG,UAAU,CAAC;YAEvB,SAAS,GAAG,CAAC,KAAK,SAAS,GAAG,CAAC,CAAC,CAAC;YAEjC,IAAI,OAAO,KAAK,CAAC,EAAE;gBACf,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;oBAC1B,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;iBACxC;gBACD,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;aACxC;iBACI,IAAI,OAAO,KAAK,CAAC,EAAE;gBACpB,MAAM,IAAI,KAAK,EAAE,CAAC;aACrB;iBACI;gBACD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;oBAC1B,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;iBACtC;aACJ;SACJ;QAED,SAAS,SAAS,CAAC,MAAc,EAAE,OAAe,EAAE,MAAc,EAAE,OAAe;YAC/E,IAAI,CAAC,GAAG,CAAC,CAAC;YAEV,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;gBAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;aAC9B;YAED,IAAI,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC;YACnC,IAAI,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC;YAC1B,IAAI,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC;YAChC,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,IAAI,UAAU,GAAG,CAAC,CAAC;YAEnB,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAEjC,IAAI,EAAE,OAAO,KAAK,CAAC,EAAE;gBACjB,YAAY,GAAG,IAAI,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;gBAEpC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;oBAC1B,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;iBACpC;gBAED,OAAO;aACV;YAED,IAAI,OAAO,KAAK,CAAC,EAAE;gBACf,IAAI,IAAI,OAAO,CAAC;gBAChB,OAAO,IAAI,OAAO,CAAC;gBACnB,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC;gBACtB,YAAY,GAAG,OAAO,GAAG,CAAC,CAAC;gBAE3B,KAAK,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC/B,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;iBACnD;gBAED,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC3B,OAAO;aACV;YAED,IAAI,UAAU,GAAG,SAAS,CAAC;YAE3B,OAAO,IAAI,EAAE;gBACT,IAAI,MAAM,GAAG,CAAC,CAAC;gBACf,IAAI,MAAM,GAAG,CAAC,CAAC;gBACf,IAAI,IAAI,GAAG,KAAK,CAAC;gBAEjB,GAAG;oBACC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE;wBAC3C,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;wBACjC,MAAM,EAAE,CAAC;wBACT,MAAM,GAAG,CAAC,CAAC;wBACX,IAAI,EAAE,OAAO,KAAK,CAAC,EAAE;4BACjB,IAAI,GAAG,IAAI,CAAC;4BACZ,MAAM;yBACT;qBACJ;yBACI;wBACD,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;wBAC/B,MAAM,EAAE,CAAC;wBACT,MAAM,GAAG,CAAC,CAAC;wBACX,IAAI,EAAE,OAAO,KAAK,CAAC,EAAE;4BACjB,IAAI,GAAG,IAAI,CAAC;4BACZ,MAAM;yBACT;qBACJ;iBACJ,QAAQ,CAAC,MAAM,GAAG,MAAM,IAAI,UAAU,EAAE;gBAEzC,IAAI,IAAI,EAAE;oBACN,MAAM;iBACT;gBAED,GAAG;oBACC,MAAM,GAAG,OAAO,GAAG,WAAW,CAAI,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;oBAE9F,IAAI,MAAM,KAAK,CAAC,EAAE;wBACd,IAAI,IAAI,MAAM,CAAC;wBACf,OAAO,IAAI,MAAM,CAAC;wBAClB,OAAO,IAAI,MAAM,CAAC;wBAClB,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC;wBACtB,YAAY,GAAG,OAAO,GAAG,CAAC,CAAC;wBAE3B,KAAK,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;4BAC9B,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;yBACnD;wBAED,IAAI,OAAO,KAAK,CAAC,EAAE;4BACf,IAAI,GAAG,IAAI,CAAC;4BACZ,MAAM;yBACT;qBACJ;oBAED,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;oBAE/B,IAAI,EAAE,OAAO,KAAK,CAAC,EAAE;wBACjB,IAAI,GAAG,IAAI,CAAC;wBACZ,MAAM;qBACT;oBAED,MAAM,GAAG,OAAO,GAAG,UAAU,CAAI,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;oBAExF,IAAI,MAAM,KAAK,CAAC,EAAE;wBACd,IAAI,IAAI,MAAM,CAAC;wBACf,OAAO,IAAI,MAAM,CAAC;wBAClB,OAAO,IAAI,MAAM,CAAC;wBAClB,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC;wBACtB,YAAY,GAAG,OAAO,GAAG,CAAC,CAAC;wBAE3B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;4BACzB,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;yBACjD;wBAED,IAAI,OAAO,IAAI,CAAC,EAAE;4BACd,IAAI,GAAG,IAAI,CAAC;4BACZ,MAAM;yBACT;qBACJ;oBAED,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBAEjC,IAAI,EAAE,OAAO,KAAK,CAAC,EAAE;wBACjB,IAAI,GAAG,IAAI,CAAC;wBACZ,MAAM;qBACT;oBAED,UAAU,EAAE,CAAC;iBAChB,QAAQ,MAAM,IAAI,qBAAqB,IAAI,MAAM,IAAI,qBAAqB,EAAE;gBAE7E,IAAI,IAAI,EAAE;oBACN,MAAM;iBACT;gBAED,IAAI,UAAU,GAAG,CAAC,EAAE;oBAChB,UAAU,GAAG,CAAC,CAAC;iBAClB;gBAED,UAAU,IAAI,CAAC,CAAC;aACnB;YAED,SAAS,GAAG,UAAU,CAAC;YAEvB,IAAI,SAAS,GAAG,CAAC,EAAE;gBACf,SAAS,GAAG,CAAC,CAAC;aACjB;YAED,IAAI,OAAO,KAAK,CAAC,EAAE;gBACf,IAAI,IAAI,OAAO,CAAC;gBAChB,OAAO,IAAI,OAAO,CAAC;gBACnB,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC;gBACtB,YAAY,GAAG,OAAO,GAAG,CAAC,CAAC;gBAE3B,KAAK,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC/B,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;iBACnD;gBAED,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;aAC9B;iBACI,IAAI,OAAO,KAAK,CAAC,EAAE;gBACpB,MAAM,IAAI,KAAK,EAAE,CAAC;aAErB;iBACI;gBACD,YAAY,GAAG,IAAI,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;gBACpC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;oBAC1B,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;iBACpC;aACJ;SACJ;QAED,OAAO;YACH,SAAS,WAAA;YACT,cAAc,gBAAA;YACd,OAAO,SAAA;SACV,CAAC;IACN,CAAC;AAED,aAAwB,IAAI,CACxB,KAAU,EACV,OAAuB,EACvB,EAAW,EAAE,EAAW;QAExB,IAAI,CAAC,EAAE,EAAE;YACL,EAAE,GAAG,CAAC,CAAC;SACV;QACD,IAAI,CAAC,EAAE,EAAE;YACL,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;SACrB;QAED,IAAI,SAAS,GAAG,EAAE,GAAG,EAAE,CAAC;QAExB,IAAI,SAAS,GAAG,CAAC,EAAE;YACf,OAAO;SACV;QAED,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,IAAI,SAAS,GAAG,iBAAiB,EAAE;YAC/B,SAAS,GAAG,gBAAgB,CAAI,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;YACxD,mBAAmB,CAAI,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,SAAS,EAAE,OAAO,CAAC,CAAC;YAC/D,OAAO;SACV;QAED,IAAI,EAAE,GAAG,OAAO,CAAI,KAAK,EAAE,OAAO,CAAC,CAAC;QAEpC,IAAI,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QAErC,GAAG;YACC,SAAS,GAAG,gBAAgB,CAAI,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;YACxD,IAAI,SAAS,GAAG,MAAM,EAAE;gBACpB,IAAI,KAAK,GAAG,SAAS,CAAC;gBACtB,IAAI,KAAK,GAAG,MAAM,EAAE;oBAChB,KAAK,GAAG,MAAM,CAAC;iBAClB;gBAED,mBAAmB,CAAI,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,SAAS,EAAE,OAAO,CAAC,CAAC;gBACvE,SAAS,GAAG,KAAK,CAAC;aACrB;YAED,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAC1B,EAAE,CAAC,SAAS,EAAE,CAAC;YAEf,SAAS,IAAI,SAAS,CAAC;YACvB,EAAE,IAAI,SAAS,CAAC;SACnB,QAAQ,SAAS,KAAK,CAAC,EAAE;QAE1B,EAAE,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;;IC7pBM,IAAM,UAAU,GAAG,CAAC,CAAC;AAC5B,IAAO,IAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,IAAO,IAAM,iBAAiB,GAAG,CAAC,CAAC;;ICQnC,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAChC,SAAS,gBAAgB;QACrB,IAAI,mBAAmB,EAAE;YACrB,OAAO;SACV;QACD,mBAAmB,GAAG,IAAI,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;IACjG,CAAC;IAED,SAAS,gBAAgB,CAAC,CAAc,EAAE,CAAc;QACpD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE;YACvB,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACb,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;aACtB;YACD,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACpB;QACD,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED;QAAA;YAEY,WAAM,GAAc,EAAE,CAAA;YAEtB,iBAAY,GAAkB,EAAE,CAAA;YAEhC,oBAAe,GAAG,CAAC,CAAA;YA6M3B,wBAAmB,GAAG,gBAAgB,CAAA;SACzC;QA5MG,0BAAQ,GAAR,UACI,EAAkC,EAClC,OAAW;YAEX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;aACxC;SACJ;QASD,gCAAc,GAAd,UAAe,MAAgB,EAAE,aAAuB;YACpD,aAAa,GAAG,aAAa,IAAI,KAAK,CAAC;YACvC,IAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;YAEtC,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;gBAC/B,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;aACzC;YACD,OAAO,WAAW,CAAC;SACtB;QAOD,mCAAiB,GAAjB,UAAkB,aAAuB;YACrC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;YAEzB,IAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;YAC1B,IAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC9C,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;aAChE;YAED,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;YAE1CC,IAAO,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;SAC1C;QAEO,0CAAwB,GAAhC,UACI,EAAW,EACX,SAAiB,EACjB,aAAuB;YAEvB,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE;gBAC7B,OAAO;aACV;YAED,EAAE,CAAC,YAAY,EAAE,CAAC;YAClB,EAAE,CAAC,MAAM,EAAE,CAAC;YACZ,EAAE,CAAC,WAAW,EAAE,CAAC;YAEjB,IAAM,eAAe,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;YAEzC,IAAI,EAAE,CAAC,UAAU,EAAE;gBACf,SAAS,GAAG,IAAI,CAAC;aACpB;iBACI,IAAI,eAAe,EAAE;gBAGtB,IAAI,SAAS,EAAE;oBACX,SAAS,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;iBACjC;qBACI;oBACD,SAAS,GAAG,EAAE,CAAC;iBAClB;gBAED,IAAI,eAAe,GAAG,eAAe,CAAC;gBACtC,IAAI,cAAc,GAAG,EAAE,CAAC;gBAExB,OAAO,eAAe,EAAE;oBAGpB,eAAe,CAAC,MAAM,GAAG,cAAuB,CAAC;oBACjD,eAAe,CAAC,eAAe,EAAE,CAAC;oBAElC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;oBAEhC,cAAc,GAAG,eAAe,CAAC;oBACjC,eAAe,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;iBACnD;aACJ;YAGD,IAAK,EAAgB,CAAC,WAAW,EAAE;gBAC/B,IAAM,QAAQ,GAAI,EAAgB,CAAC,WAAW,EAAE,CAAC;gBAEjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACtC,IAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAG1B,IAAI,EAAE,CAAC,OAAO,EAAE;wBACZ,KAAK,CAAC,OAAO,IAAI,UAAU,CAAC;qBAC/B;oBAED,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;iBAClE;gBAGD,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC;aAElB;iBACI;gBACD,IAAM,IAAI,GAAG,EAAiB,CAAC;gBAE/B,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE;oBAC/B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;iBAChC;qBACI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;oBACtD,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;iBACzB;gBAGD,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;oBACf,gBAAgB,EAAE,CAAC;oBACnB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;iBACd;gBACD,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;oBAChB,gBAAgB,EAAE,CAAC;oBACnB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;iBACf;gBACD,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;oBACpB,gBAAgB,EAAE,CAAC;oBACnB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;iBACnB;gBAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,IAAI,CAAC;aACpD;YAGD,IAAM,OAAO,GAAI,EAAW,CAAC,eAAe,IAAK,EAAW,CAAC,eAAe,EAAE,CAAC;YAC/E,IAAI,OAAO,EAAE;gBACT,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;aACpE;YAGD,IAAM,SAAS,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC;YACxC,IAAI,SAAS,EAAE;gBACX,IAAI,CAAC,wBAAwB,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;aACtE;YAED,IAAM,MAAM,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC;YACnC,IAAI,MAAM,EAAE;gBACR,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;aACnE;SACJ;QAKD,yBAAO,GAAP,UAAQ,EAAW;YACf,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;gBACrC,OAAO;aACV;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACxB;QAMD,yBAAO,GAAP,UAAQ,EAAuB;YAE3B,IAAI,EAAE,YAAY,KAAK,EAAE;gBACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACvC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvB;gBACD,OAAO;aACV;YAED,IAAM,GAAG,GAAGC,OAAY,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC1C,IAAI,GAAG,IAAI,CAAC,EAAE;gBACV,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;aAC9B;SACJ;QAED,6BAAW,GAAX;YACI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;YAEzB,OAAO;SACV;QAED,0BAAQ,GAAR;YACI,OAAO,IAAI,CAAC,MAAM,CAAC;SACtB;QAKD,yBAAO,GAAP;YACI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACtB;QAGL,cAAC;IAAD,CAAC,IAAA;;IC9OD,IAAI,qBAAgD,CAAC;IAErD,qBAAqB,GAAG,CACvB,GAAG,CAAC,eAAe;YAEjB,CAAC,MAAM,CAAC,qBAAqB,IAAI,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC;gBAErE,MAAc,CAAC,uBAAuB,IAAK,MAAc,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;eAChG,MAAc,CAAC,wBAAwB;eAExC,MAAM,CAAC,2BAA2B,CACrC,KACE,UAAU,IAA8C;QAC5D,OAAO,UAAU,CAAC,IAAI,EAAE,EAAE,CAAQ,CAAC;IACpC,CAAC,CAAC;AAEF,kCAAe,qBAAqB,CAAC;;ICVrC,IAAM,WAAW,GAAG;QAKhB,MAAM,EAAN,UAAO,CAAS;YACZ,OAAO,CAAC,CAAC;SACZ;QAMD,WAAW,EAAX,UAAY,CAAS;YACjB,OAAO,CAAC,GAAG,CAAC,CAAC;SAChB;QAKD,YAAY,EAAZ,UAAa,CAAS;YAClB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;SACtB;QAKD,cAAc,EAAd,UAAe,CAAS;YACpB,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACd,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;aACtB;YACD,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SACrC;QAOD,OAAO,EAAP,UAAQ,CAAS;YACb,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACpB;QAKD,QAAQ,EAAR,UAAS,CAAS;YACd,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SAC1B;QAKD,UAAU,EAAV,UAAW,CAAS;YAChB,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACd,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAC1B;YACD,OAAO,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;SACvC;QAOD,SAAS,EAAT,UAAU,CAAS;YACf,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACxB;QAKD,UAAU,EAAV,UAAW,CAAS;YAChB,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;SAChC;QAKD,YAAY,EAAZ,UAAa,CAAS;YAClB,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACd,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAC9B;YACD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;SAC5C;QAOD,SAAS,EAAT,UAAU,CAAS;YACf,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SAC5B;QAKD,UAAU,EAAV,UAAW,CAAS;YAChB,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SAClC;QAKD,YAAY,EAAZ,UAAa,CAAS;YAClB,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACd,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAClC;YACD,OAAO,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;SAC/C;QAOD,YAAY,EAAZ,UAAa,CAAS;YAClB,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;SACxC;QAKD,aAAa,EAAb,UAAc,CAAS;YACnB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;SACpC;QAKD,eAAe,EAAf,UAAgB,CAAS;YACrB,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;SAC5C;QAOD,aAAa,EAAb,UAAc,CAAS;YACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SAC9C;QAKD,cAAc,EAAd,UAAe,CAAS;YACpB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;SACjD;QAKD,gBAAgB,EAAhB,UAAiB,CAAS;YACtB,IAAI,CAAC,KAAK,CAAC,EAAE;gBACT,OAAO,CAAC,CAAC;aACZ;YACD,IAAI,CAAC,KAAK,CAAC,EAAE;gBACT,OAAO,CAAC,CAAC;aACZ;YACD,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACd,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;aACtC;YACD,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SAClD;QAOD,UAAU,EAAV,UAAW,CAAS;YAChB,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;SACnC;QAKD,WAAW,EAAX,UAAY,CAAS;YACjB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACnC;QAKD,aAAa,EAAb,UAAc,CAAS;YACnB,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACd,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;aAC5C;YACD,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SAClD;QAOD,SAAS,EAAT,UAAU,CAAS;YACf,IAAI,CAAC,CAAC;YACN,IAAI,CAAC,GAAG,GAAG,CAAC;YACZ,IAAI,CAAC,GAAG,GAAG,CAAC;YACZ,IAAI,CAAC,KAAK,CAAC,EAAE;gBACT,OAAO,CAAC,CAAC;aACZ;YACD,IAAI,CAAC,KAAK,CAAC,EAAE;gBACT,OAAO,CAAC,CAAC;aACZ;YACD,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBACb,CAAC,GAAG,CAAC,CAAC;gBACN,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aACb;iBACI;gBACD,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;aAC5C;YACD,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;kBACzB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACxD;QAKD,UAAU,EAAV,UAAW,CAAS;YAChB,IAAI,CAAC,CAAC;YACN,IAAI,CAAC,GAAG,GAAG,CAAC;YACZ,IAAI,CAAC,GAAG,GAAG,CAAC;YACZ,IAAI,CAAC,KAAK,CAAC,EAAE;gBACT,OAAO,CAAC,CAAC;aACZ;YACD,IAAI,CAAC,KAAK,CAAC,EAAE;gBACT,OAAO,CAAC,CAAC;aACZ;YACD,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBACb,CAAC,GAAG,CAAC,CAAC;gBACN,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aACb;iBACI;gBACD,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;aAC5C;YACD,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;kBAClB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE;SAC5D;QAKD,YAAY,EAAZ,UAAa,CAAS;YAClB,IAAI,CAAC,CAAC;YACN,IAAI,CAAC,GAAG,GAAG,CAAC;YACZ,IAAI,CAAC,GAAG,GAAG,CAAC;YACZ,IAAI,CAAC,KAAK,CAAC,EAAE;gBACT,OAAO,CAAC,CAAC;aACZ;YACD,IAAI,CAAC,KAAK,CAAC,EAAE;gBACT,OAAO,CAAC,CAAC;aACZ;YACD,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBACb,CAAC,GAAG,CAAC,CAAC;gBACN,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aACb;iBACI;gBACD,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;aAC5C;YACD,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACd,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;sBACvC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAChD;YACD,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;kBAC5B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;SAE7D;QAOD,MAAM,EAAN,UAAO,CAAS;YACZ,IAAI,CAAC,GAAG,OAAO,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;SACpC;QAKD,OAAO,EAAP,UAAQ,CAAS;YACb,IAAI,CAAC,GAAG,OAAO,CAAC;YAChB,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;SAC1C;QAKD,SAAS,EAAT,UAAU,CAAS;YACf,IAAI,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACd,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAC5C;YACD,OAAO,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SACvD;QAOD,QAAQ,EAAR,UAAS,CAAS;YACd,OAAO,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SAC3C;QAKD,SAAS,EAAT,UAAU,CAAS;YACf,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;gBAChB,OAAO,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;aACzB;iBACI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;gBACrB,OAAO,MAAM,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;aAClD;iBACI,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE;gBACvB,OAAO,MAAM,IAAI,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;aACrD;iBACI;gBACD,OAAO,MAAM,IAAI,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;aACxD;SACJ;QAKD,WAAW,EAAX,UAAY,CAAS;YACjB,IAAI,CAAC,GAAG,GAAG,EAAE;gBACT,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;aAC5C;YACD,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;SACvD;KACJ,CAAC;;ICjVF,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAE3B,IAAM,OAAO,GAAG,IAAI,CAAC;IACrB,IAAM,eAAe,GAAG,IAAI,CAAC;IAE7B,IAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAM,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;IAGxB,IAAM,GAAG,GAAGC,MAAQ,EAAE,CAAC;IACvB,IAAM,GAAG,GAAGA,MAAQ,EAAE,CAAC;IACvB,IAAM,GAAG,GAAGA,MAAQ,EAAE,CAAC;IAEvB,SAAS,YAAY,CAAC,GAAW;QAC7B,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,GAAG,OAAO,CAAC;IAC3C,CAAC;IACD,SAAS,eAAe,CAAC,GAAW;QAChC,OAAO,GAAG,GAAG,OAAO,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC;IAC3C,CAAC;AAID,aAAgB,OAAO,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,CAAS;QAC7E,IAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;cACnC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;IAC/C,CAAC;AAKD,aAAgB,iBAAiB,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,CAAS;QACvF,IAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,IACJ,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI;cAC3C,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CACtB,CAAC;IACN,CAAC;AAKD,aAAgB,WAAW,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,GAAW,EAAE,KAAe;QAEpG,IAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;QAClC,IAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QACjC,IAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACxB,IAAM,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC;QAEnB,IAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE5B,IAAI,CAAC,GAAG,CAAC,CAAC;QAEV,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE;YACpC,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE;gBACjB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aAChB;iBACI;gBACD,IAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;oBACpB,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;iBACnB;aACJ;SACJ;aACI;YACD,IAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAE/B,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE;gBACpB,IAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAChB,IAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACtB,IAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;oBACpB,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;iBACnB;gBACD,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;oBACpB,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;iBACnB;aACJ;iBACI,IAAI,IAAI,GAAG,CAAC,EAAE;gBACf,IAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;gBAC3C,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;gBAC3C,IAAI,EAAE,GAAG,CAAC,EAAE;oBACR,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;iBACjC;qBACI;oBACD,EAAE,GAAG,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;iBAC/B;gBACD,IAAI,EAAE,GAAG,CAAC,EAAE;oBACR,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;iBACjC;qBACI;oBACD,EAAE,GAAG,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;iBAC/B;gBACD,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;oBACpB,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;iBACnB;aACJ;iBACI;gBACD,IAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC9D,IAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC/B,IAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAE5B,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5C,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,GAAG,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzE,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,GAAG,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;oBACpB,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;iBACnB;gBACD,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;oBACpB,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;iBACnB;gBACD,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;oBACpB,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;iBACnB;aACJ;SACJ;QACD,OAAO,CAAC,CAAC;IACb,CAAC;AAMD,aAAgB,YAAY,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,OAAiB;QAC1F,IAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;QACpC,IAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;QAC5C,IAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;QAE1B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE;YACjB,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE;gBACpB,IAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;oBACpB,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;iBACrB;aACJ;SACJ;aACI;YACD,IAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE;gBACpB,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;aAC7B;iBACI,IAAI,IAAI,GAAG,CAAC,EAAE;gBACf,IAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrC,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;oBACpB,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;iBACrB;gBACD,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;oBACpB,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;iBACrB;aACJ;SACJ;QACD,OAAO,CAAC,CAAC;IACb,CAAC;AAKD,aAAgB,cAAc,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,CAAS,EAAE,GAAa;QACnG,IAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QAE/B,IAAM,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;QACnC,IAAM,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;QAEnC,IAAM,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;QAEvC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACZ,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACb,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAEf,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACf,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACb,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;AAMD,aAAgB,iBAAiB,CAC7B,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAC9F,CAAS,EAAE,CAAS,EAAE,GAAgB;QAGtC,IAAI,CAAC,CAAC;QACN,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,GAAG,QAAQ,CAAC;QACjB,IAAI,IAAI,CAAC;QACT,IAAI,IAAI,CAAC;QACT,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,CAAC;QAEP,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAIX,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,IAAI,EAAE;YACjC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACrC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACrC,EAAE,GAAGC,UAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5B,IAAI,EAAE,GAAG,CAAC,EAAE;gBACR,CAAC,GAAG,EAAE,CAAC;gBACP,CAAC,GAAG,EAAE,CAAC;aACV;SACJ;QACD,CAAC,GAAG,QAAQ,CAAC;QAGb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;YACzB,IAAI,QAAQ,GAAG,eAAe,EAAE;gBAC5B,MAAM;aACT;YACD,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC;YACpB,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC;YAEpB,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YACvC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAEvC,EAAE,GAAGA,UAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAE5B,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;gBACrB,CAAC,GAAG,IAAI,CAAC;gBACT,CAAC,GAAG,EAAE,CAAC;aACV;iBACI;gBAED,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;gBACvC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;gBACvC,EAAE,GAAGA,UAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAE5B,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;oBACrB,CAAC,GAAG,IAAI,CAAC;oBACT,CAAC,GAAG,EAAE,CAAC;iBACV;qBACI;oBACD,QAAQ,IAAI,GAAG,CAAC;iBACnB;aACJ;SACJ;QAED,IAAI,GAAG,EAAE;YACL,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YACpC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;SACvC;QAED,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;AAKD,aAAgB,WAAW,CACvB,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAC9F,SAAiB;QAEjB,IAAI,EAAE,GAAG,EAAE,CAAC;QACZ,IAAI,EAAE,GAAG,EAAE,CAAC;QAEZ,IAAI,CAAC,GAAG,CAAC,CAAC;QAEV,IAAM,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC;QAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE;YACjC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACjB,IAAM,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YACrC,IAAM,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAErC,IAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;YAClB,IAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;YAElB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YAElC,EAAE,GAAG,CAAC,CAAC;YACP,EAAE,GAAG,CAAC,CAAC;SACV;QAED,OAAO,CAAC,CAAC;IACb,CAAC;AAKD,aAAgB,WAAW,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,CAAS;QACrE,IAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,IAAI,IAAI,IAAI,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IACxD,CAAC;AAKD,aAAgB,qBAAqB,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,CAAS;QAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;AAMD,aAAgB,eAAe,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,GAAW,EAAE,KAAe;QAC5F,IAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;QAC3B,IAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACxB,IAAM,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC;QAEnB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE;YACjB,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE;gBACpB,IAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;oBACpB,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;iBACnB;aACJ;SACJ;aACI;YACD,IAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE;gBACpB,IAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACxB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;oBACpB,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;iBACnB;aACJ;iBACI,IAAI,IAAI,GAAG,CAAC,EAAE;gBACf,IAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrC,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;oBACpB,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;iBACnB;gBACD,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;oBACpB,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;iBACnB;aACJ;SACJ;QACD,OAAO,CAAC,CAAC;IACb,CAAC;AAKD,aAAgB,iBAAiB,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU;QAChE,IAAM,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;QACjC,IAAI,OAAO,KAAK,CAAC,EAAE;YAEf,OAAO,GAAG,CAAC;SACd;aACI;YACD,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,OAAO,CAAC;SAC9B;IACL,CAAC;AAKD,aAAgB,kBAAkB,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,CAAS,EAAE,GAAa;QAC3F,IAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAM,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;QAGnC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACZ,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACb,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAGd,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACb,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;AAgBD,aAAgB,qBAAqB,CACjC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EACtE,CAAS,EAAE,CAAS,EAAE,GAAgB;QAGtC,IAAI,CAAS,CAAC;QACd,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,GAAG,QAAQ,CAAC;QAEjB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAIX,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,IAAI,EAAE;YACjC,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACrC,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACrC,IAAM,EAAE,GAAGA,UAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAClC,IAAI,EAAE,GAAG,CAAC,EAAE;gBACR,CAAC,GAAG,EAAE,CAAC;gBACP,CAAC,GAAG,EAAE,CAAC;aACV;SACJ;QACD,CAAC,GAAG,QAAQ,CAAC;QAGb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;YACzB,IAAI,QAAQ,GAAG,eAAe,EAAE;gBAC5B,MAAM;aACT;YACD,IAAM,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC;YAC1B,IAAM,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC;YAE1B,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YACvC,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAEvC,IAAM,EAAE,GAAGA,UAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAElC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;gBACrB,CAAC,GAAG,IAAI,CAAC;gBACT,CAAC,GAAG,EAAE,CAAC;aACV;iBACI;gBAED,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;gBACvC,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;gBACvC,IAAM,EAAE,GAAGA,UAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAClC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;oBACrB,CAAC,GAAG,IAAI,CAAC;oBACT,CAAC,GAAG,EAAE,CAAC;iBACV;qBACI;oBACD,QAAQ,IAAI,GAAG,CAAC;iBACnB;aACJ;SACJ;QAED,IAAI,GAAG,EAAE;YACL,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YACpC,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;SACvC;QAED,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;AAKD,aAAgB,eAAe,CAC3B,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EACtE,SAAiB;QAEjB,IAAI,EAAE,GAAG,EAAE,CAAC;QACZ,IAAI,EAAE,GAAG,EAAE,CAAC;QAEZ,IAAI,CAAC,GAAG,CAAC,CAAC;QAEV,IAAM,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC;QAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE;YACjC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACjB,IAAM,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YACrC,IAAM,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAErC,IAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;YAClB,IAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;YAElB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YAElC,EAAE,GAAG,CAAC,CAAC;YACP,EAAE,GAAG,CAAC,CAAC;SACV;QAED,OAAO,CAAC,CAAC;IACb,CAAC;;IChfD,IAAM,MAAM,GAAG,+BAA+B,CAAC;AAE/C,aAAgB,qBAAqB,CAAC,cAAsB;QACxD,IAAM,KAAK,GAAG,cAAc,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5D,IAAI,KAAK,EAAE;YACP,IAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC,IAAM,GAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAM,GAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAM,GAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAM,GAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAE3B,IAAI,KAAK,CAAC,GAAC,GAAG,GAAC,GAAG,GAAC,GAAG,GAAC,CAAC,EAAE;gBACtB,OAAO;aACV;YAED,IAAM,OAAK,GAAa,EAAE,CAAC;YAC3B,OAAO,UAAC,CAAS;gBACb,OAAO,CAAC,IAAI,CAAC;sBACP,CAAC,GAAG,CAAC,IAAI,CAAC;sBACN,CAAC;sBACD,WAAW,CAAC,CAAC,EAAE,GAAC,EAAE,GAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAK,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,GAAC,EAAE,GAAC,EAAE,CAAC,EAAE,OAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aAChF,CAAC;SACL;IACL,CAAC;;ICWD;QA0BI,cAAY,IAAe;YArBnB,YAAO,GAAY,KAAK,CAAA;YACxB,eAAU,GAAG,CAAC,CAAA;YAEd,gBAAW,GAAG,CAAC,CAAA;YACf,YAAO,GAAG,KAAK,CAAA;YAmBnB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;YAC/B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;YAE9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC;YAE/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;YACpC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;YACxC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;YAExC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC9C;QAED,mBAAI,GAAJ,UAAK,UAAkB,EAAE,SAAiB;YAGtC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACf,IAAI,CAAC,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC3C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;aACvB;YAED,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC;gBAC9B,OAAO;aACV;YAED,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,IAAI,WAAW,GAAG,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YAClE,IAAI,OAAO,GAAG,WAAW,GAAG,IAAI,CAAC;YAMjC,IAAI,OAAO,GAAG,CAAC,EAAE;gBACb,OAAO,GAAG,CAAC,CAAC;aACf;YAED,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAE/B,IAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACnC,IAAM,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;YAE5D,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAGvB,IAAI,OAAO,KAAK,CAAC,EAAE;gBACf,IAAI,IAAI,CAAC,IAAI,EAAE;oBAEX,IAAM,SAAS,GAAG,WAAW,GAAG,IAAI,CAAC;oBACrC,IAAI,CAAC,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;oBACzC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;oBAErB,IAAI,CAAC,SAAS,EAAE,CAAC;iBACpB;qBACI;oBACD,OAAO,IAAI,CAAC;iBACf;aACJ;YAED,OAAO,KAAK,CAAC;SAChB;QAED,oBAAK,GAAL;YACI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACvB;QAED,qBAAM,GAAN;YACI,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;SACxB;QAED,wBAAS,GAAT,UAAU,MAAuB;YAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;kBAC9B,MAAM;kBACN,WAAW,CAAC,MAAM,CAAC,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;SAC9D;QACL,WAAC;IAAD,CAAC,IAAA;;ICxID;QAUI,eAAY,GAAM;YACd,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;SACpB;QACL,YAAC;IAAD,CAAC,IAAA;IAKD;QAAA;YAKY,SAAI,GAAG,CAAC,CAAA;SAkEnB;QA7DG,2BAAM,GAAN,UAAO,GAAM;YACT,IAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACxB,OAAO,KAAK,CAAC;SAChB;QAKD,gCAAW,GAAX,UAAY,KAAe;YACvB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACZ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;aACjC;iBACI;gBACD,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBACvB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACvB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;gBAClB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;aACrB;YACD,IAAI,CAAC,IAAI,EAAE,CAAC;SACf;QAKD,2BAAM,GAAN,UAAO,KAAe;YAClB,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YACxB,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YACxB,IAAI,IAAI,EAAE;gBACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;aACpB;iBACI;gBAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;aACpB;YACD,IAAI,IAAI,EAAE;gBACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;aACpB;iBACI;gBAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;aACpB;YACD,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;SACf;QAKD,wBAAG,GAAH;YACI,OAAO,IAAI,CAAC,IAAI,CAAC;SACpB;QAKD,0BAAK,GAAL;YACI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;SACjB;QAEL,iBAAC;IAAD,CAAC,IAAA;IAKD;QAUI,aAAY,OAAe;YARnB,UAAK,GAAG,IAAI,UAAU,EAAK,CAAA;YAE3B,aAAQ,GAAG,EAAE,CAAA;YAIb,SAAI,GAAyB,EAAE,CAAA;YAGnC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;SAC3B;QAKD,iBAAG,GAAH,UAAI,GAAoB,EAAE,KAAQ;YAC9B,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;YACtB,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;gBAClB,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAEvB,IAAI,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC;gBAEnC,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,IAAI,GAAG,GAAG,CAAC,EAAE;oBAEjC,IAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC;oBACjC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;oBAC5B,OAAO,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;oBAE/B,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC;oBAC/B,IAAI,CAAC,iBAAiB,GAAG,cAAc,CAAC;iBAC3C;gBAED,IAAI,KAAK,EAAE;oBACP,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;iBACvB;qBACI;oBACD,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;iBAC5B;gBACD,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;gBAChB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACxB,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aACpB;YAED,OAAO,OAAO,CAAC;SAClB;QAED,iBAAG,GAAH,UAAI,GAAoB;YACpB,IAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,IAAI,KAAK,IAAI,IAAI,EAAE;gBAEf,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE;oBACrB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACnB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;iBAC3B;gBAED,OAAO,KAAK,CAAC,KAAK,CAAC;aACtB;SACJ;QAKD,mBAAK,GAAL;YACI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;SAClB;QAED,iBAAG,GAAH;YACI,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;SAC3B;QACL,UAAC;IAAD,CAAC,IAAA;;IC1KD,IAAM,cAAc,GAAG;QACnB,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5D,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5D,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7D,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACzD,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3D,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACvD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1D,WAAW,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9D,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1D,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACpE,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACrD,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACxD,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAClE,WAAW,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3D,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAChE,gBAAgB,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAClE,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1D,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACpE,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACnE,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACnE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7D,aAAa,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9D,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9D,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAChE,aAAa,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5D,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACjE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACnD,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5D,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7D,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACxD,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACxD,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACnE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACjE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACjE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,sBAAsB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3E,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACjE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAChE,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACrE,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACxE,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1E,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACzD,WAAW,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1D,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACrD,kBAAkB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACpE,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACrE,gBAAgB,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1E,mBAAmB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3E,iBAAiB,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACtE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAChE,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACjE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACrD,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACzD,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACxD,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACjE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACpE,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACrE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1D,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACtD,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5D,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACtD,WAAW,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/D,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7D,UAAU,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5D,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACxD,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7D,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAChE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3D,WAAW,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACzD,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACvD,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1D,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACzD,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7D,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;KAC/D,CAAC;IAEF,SAAS,YAAY,CAAC,CAAS;QAC3B,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,SAAS,aAAa,CAAC,CAAS;QAC5B,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,SAAS,aAAa,CAAC,CAAS;QAC5B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,SAAS,WAAW,CAAC,GAAoB;QACrC,IAAI,GAAG,GAAG,GAAa,CAAC;QACxB,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;YAClD,OAAO,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;SACpD;QACD,OAAO,YAAY,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,SAAS,aAAa,CAAC,GAAoB;QACvC,IAAI,GAAG,GAAG,GAAa,CAAC;QACxB,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;YAClD,OAAO,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;SAC/C;QACD,OAAO,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,SAAS,WAAW,CAAC,EAAU,EAAE,EAAU,EAAE,CAAS;QAClD,IAAI,CAAC,GAAG,CAAC,EAAE;YACP,CAAC,IAAI,CAAC,CAAC;SACV;aACI,IAAI,CAAC,GAAG,CAAC,EAAE;YACZ,CAAC,IAAI,CAAC,CAAC;SACV;QAED,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACX,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;SACjC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACX,OAAO,EAAE,CAAC;SACb;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACX,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;SAC3C;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IAED,SAAS,UAAU,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QAC/C,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,SAAS,OAAO,CAAC,GAAa,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;QACtE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,OAAO,GAAG,CAAC;IACf,CAAC;IACD,SAAS,QAAQ,CAAC,GAAa,EAAE,CAAW;QACxC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,OAAO,GAAG,CAAC;IACf,CAAC;IAED,IAAM,UAAU,GAAG,IAAI,GAAG,CAAW,EAAE,CAAC,CAAC;IACzC,IAAI,cAAc,GAAa,IAAI,CAAC;IAEpC,SAAS,UAAU,CAAC,QAAgB,EAAE,OAAiB;QAEnD,IAAI,cAAc,EAAE;YAChB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;SACrC;QACD,cAAc,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACnF,CAAC;AAED,aAAgB,KAAK,CAAC,QAAgB,EAAE,OAAkB;QACtD,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO;SACV;QACD,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QAExB,IAAI,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,MAAM,EAAE;YACR,OAAO,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SACpC;QAGD,QAAQ,GAAG,QAAQ,GAAG,EAAE,CAAC;QAEzB,IAAI,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAGnD,IAAI,GAAG,IAAI,cAAc,EAAE;YACvB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,GAAkC,CAAC,CAAC,CAAC;YACtE,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC9B,OAAO,OAAO,CAAC;SAClB;QAKD,IAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YACvB,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE;gBAC9B,IAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACzC,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE;oBAC3B,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC7B,OAAO;iBACV;gBAED,OAAO,CAAC,OAAO,EACX,CAAC,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC,EACzC,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC,EAChC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,EAC9B,MAAM,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CACtD,CAAC;gBACF,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC9B,OAAO,OAAO,CAAC;aAClB;iBACI,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE;gBACnC,IAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACzC,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC,EAAE;oBAC9B,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC7B,OAAO;iBACV;gBACD,OAAO,CAAC,OAAO,EACX,CAAC,EAAE,GAAG,QAAQ,KAAK,EAAE,EACrB,CAAC,EAAE,GAAG,MAAM,KAAK,CAAC,EAClB,EAAE,GAAG,IAAI,EACT,MAAM,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CACvD,CAAC;gBACF,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC9B,OAAO,OAAO,CAAC;aAClB;YAED,OAAO;SACV;QACD,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,MAAM,EAAE;YAChC,IAAI,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B,IAAI,MAAM,GAAwB,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/E,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,QAAQ,KAAK;gBACT,KAAK,MAAM;oBACP,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;wBACrB,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC;8BAEpB,OAAO,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;8BACvD,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;qBACtC;oBACD,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;gBAExC,KAAK,KAAK;oBACN,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;wBACpB,OAAO,CAAC,OAAO,EACX,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EACtB,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EACtB,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EACtB,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CACzD,CAAC;wBACF,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;wBAC9B,OAAO,OAAO,CAAC;qBAClB;yBACI;wBACD,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBAC7B,OAAO;qBACV;gBACL,KAAK,MAAM;oBACP,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;wBACrB,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBAC7B,OAAO;qBACV;oBACD,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBAC3B,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;oBAC9B,OAAO,OAAO,CAAC;gBACnB,KAAK,KAAK;oBACN,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;wBACrB,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBAC7B,OAAO;qBACV;oBACD,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBAC3B,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;oBAC9B,OAAO,OAAO,CAAC;gBACnB;oBACI,OAAO;aACd;SACJ;QAED,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7B,OAAO;IACX,CAAC;IAED,SAAS,SAAS,CAAC,IAA0B,EAAE,IAAe;QAC1D,IAAM,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAW,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC;QAGtE,IAAM,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,IAAM,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,IAAM,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClD,IAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QAEtB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,EACR,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAClD,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,EAC1C,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAClD,CAAC,CACJ,CAAC;QAEF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACnB,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAW,CAAC;SAC/B;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,SAAS,SAAS,CAAC,IAAc;QAC7B,IAAI,CAAC,IAAI,EAAE;YACP,OAAO;SACV;QAGD,IAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACxB,IAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACxB,IAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAExB,IAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/B,IAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/B,IAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;QAE1B,IAAM,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC;QACN,IAAI,CAAC,CAAC;QAEN,IAAI,KAAK,KAAK,CAAC,EAAE;YACb,CAAC,GAAG,CAAC,CAAC;YACN,CAAC,GAAG,CAAC,CAAC;SACT;aACI;YACD,IAAI,CAAC,GAAG,GAAG,EAAE;gBACT,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC;aAC7B;iBACI;gBACD,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;aACjC;YAED,IAAM,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC;YACxD,IAAM,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC;YACxD,IAAM,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC;YAExD,IAAI,CAAC,KAAK,IAAI,EAAE;gBACZ,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC;aACvB;iBACI,IAAI,CAAC,KAAK,IAAI,EAAE;gBACjB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,MAAM,CAAC;aACjC;iBACI,IAAI,CAAC,KAAK,IAAI,EAAE;gBACjB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,MAAM,CAAC;aACjC;YAED,IAAI,CAAC,GAAG,CAAC,EAAE;gBACP,CAAC,IAAI,CAAC,CAAC;aACV;YAED,IAAI,CAAC,GAAG,CAAC,EAAE;gBACP,CAAC,IAAI,CAAC,CAAC;aACV;SACJ;QAED,IAAM,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAE7B,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;YACjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SACtB;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;AAED,aAAgB,IAAI,CAAC,KAAa,EAAE,KAAa;QAC7C,IAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,QAAQ,EAAE;YACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBACxB,IAAI,KAAK,GAAG,CAAC,EAAE;oBACX,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;iBAC/C;qBACI;oBACD,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;iBACjE;gBACD,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE;oBACnB,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;iBACrB;qBACI,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;oBACtB,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;iBACnB;aACJ;YACD,OAAO,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC;SACtE;IACL,CAAC;AAED,aAAgB,KAAK,CAAC,KAAa;QAC/B,IAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,QAAQ,EAAE;YACV,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACxG;IACL,CAAC;AASD,aAAgB,QAAQ,CACpB,eAAuB,EACvB,MAAkB,EAClB,GAAc;QAEd,IAAI,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;eACvB,EAAE,eAAe,IAAI,CAAC,IAAI,eAAe,IAAI,CAAC,CAAC,EACpD;YACE,OAAO;SACV;QAED,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;QAEhB,IAAM,KAAK,GAAG,eAAe,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpD,IAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,IAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,IAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QACpC,IAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QACtC,IAAM,EAAE,GAAG,KAAK,GAAG,SAAS,CAAC;QAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACnE,GAAG,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACnE,GAAG,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACnE,GAAG,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAEpE,OAAO,GAAG,CAAC;IACf,CAAC;AAKD,IAAO,IAAM,cAAc,GAAG,QAAQ,CAAC;AAwBvC,aAAgBC,MAAI,CAChB,eAAuB,EACvB,MAAgB,EAChB,UAAoB;QAEpB,IAAI,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;eACvB,EAAE,eAAe,IAAI,CAAC,IAAI,eAAe,IAAI,CAAC,CAAC,EACpD;YACE,OAAO;SACV;QAED,IAAM,KAAK,GAAG,eAAe,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpD,IAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,IAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,IAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3C,IAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QAC7C,IAAM,EAAE,GAAG,KAAK,GAAG,SAAS,CAAC;QAE7B,IAAM,KAAK,GAAG,SAAS,CACnB;YACI,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzD,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzD,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzD,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SAC7D,EACD,MAAM,CACT,CAAC;QAEF,OAAO,UAAU;cACX;gBACE,KAAK,EAAE,KAAK;gBACZ,SAAS,EAAE,SAAS;gBACpB,UAAU,EAAE,UAAU;gBACtB,KAAK,EAAE,KAAK;aACf;cACC,KAAK,CAAC;IAChB,CAAC;AAKD,IAAO,IAAM,UAAU,GAAGA,MAAI,CAAC;AAU/B,aAAgB,SAAS,CAAC,KAAa,EAAE,CAAU,EAAE,CAAU,EAAE,CAAU;QACvE,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAE5B,IAAI,KAAK,EAAE;YACP,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC,IAAI,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC,IAAI,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC,IAAI,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YAE9C,OAAO,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;SACjD;IACL,CAAC;AAQD,aAAgB,WAAW,CAAC,KAAa,EAAE,KAAc;QACrD,IAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAE9B,IAAI,QAAQ,IAAI,KAAK,IAAI,IAAI,EAAE;YAC3B,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YACnC,OAAO,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;SACtC;IACL,CAAC;AAOD,aAAgB,SAAS,CAAC,QAAkB,EAAE,IAAY;QACtD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC/B,OAAO;SACV;QACD,IAAI,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnE,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,EAAE;YACvD,QAAQ,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;SACjC;QACD,OAAO,IAAI,GAAG,GAAG,GAAG,QAAQ,GAAG,GAAG,CAAC;IACvC,CAAC;AAKD,aAAgB,GAAG,CAAC,KAAa,EAAE,aAAqB;QACpD,IAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,GAAG;cACJ,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;kBAC7D,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,aAAa;cAChC,CAAC,CAAC;IACZ,CAAC;AAKD,aAAgB,MAAM;QAClB,OAAO,SAAS,CAAC;YACb,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;SAClC,EAAE,KAAK,CAAC,CAAC;IACd,CAAC;IAED,IAAM,gBAAgB,GAAG,IAAI,GAAG,CAAS,GAAG,CAAC,CAAC;AAG9C,aAAgB,SAAS,CAAC,KAA8B;QACpD,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;YACjB,IAAI,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,WAAW,EAAE;gBACd,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;gBAChC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;aAC5C;YACD,OAAO,WAAW,CAAC;SACtB;aACI,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE;YAC9B,IAAM,GAAG,GAAG,MAAM,CAAC,EAAE,EAAE,KAAK,CAAmB,CAAC;YAChD,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,UAAA,IAAI,IAAI,QAAC;gBAC5C,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC;aAChC,IAAC,CAAC,CAAC;YACJ,OAAO,GAAG,CAAC;SACd;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;;;;;;;;;;;;;;;;;;;ICpkBD,IAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;AAE7B,aAAgB,cAAc,CAAC,KAAa;QACxC,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,aAAa,EAAE;YACnC,KAAK,GAAG,MAAM,CAAC;SAClB;aACI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;YAC9D,IAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,GAAG,EAAE;gBAEL,KAAK,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBAC5D,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;aACpB;SACJ;QACD,OAAO;YACH,KAAK,OAAA;YACL,OAAO,EAAE,OAAO,IAAI,IAAI,GAAG,CAAC,GAAG,OAAO;SACzC,CAAC;IACN,CAAC;IACD,IAAMC,SAAO,GAAG,IAAI,CAAC;AACrB,aAAgBC,cAAY,CAAC,SAAiB;QAC1C,OAAO,SAAS,GAAGD,SAAO,IAAI,SAAS,GAAG,CAACA,SAAO,CAAC;IACvD,CAAC;AAED,aAAgB,MAAM,CAAC,SAAiB;QACpC,OAAO,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAC5C,CAAC;AACD,aAAgB,MAAM,CAAC,SAAiB;QACpC,OAAO,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAC5C,CAAC;AACD,aAIgB,YAAY,CAAC,CAAc;QACvC,OAAO,SAAS;cAGV,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;cAClB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;cAClB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;cAClB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;cAClB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;cAClB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;cACZ,GAAG,CAAC;IACd,CAAC;AAED,IAAO,IAAM,oBAAoB,GAAG;QAChC,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,QAAQ;KACnB,CAAC;AAEF,aAAgB,WAAW,CAAC,CAAS,EAAE,UAAkB,EAAE,YAAgC;QAEvF,IAAI,YAAY,KAAK,KAAK,EAAE;YACxB,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC;SACvB;aACI,IAAI,YAAY,KAAK,QAAQ,EAAE;YAChC,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC;SACvB;QACD,OAAO,CAAC,CAAC;IACb,CAAC;AAGD,aAAgB,SAAS,CAAC,KAA2B;QAEjD,OAAO,KAAK;gBACJ,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5E,CAAC;AAED,aAAgB,YAAY,CAAC,WAAwB;QACjD,IAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;QAChC,IAAM,WAAW,GAAG,WAAW,CAAC,cAAc,EAAE,CAAC;QACjD,OAAO;YACH,KAAK,CAAC,WAAW;YACjB,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YAClC,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YACrC,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YACrC,WAAW,CAAC,CAAC,CAAC;YACd,WAAW,CAAC,CAAC,CAAC;SACjB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;AAED,aAWgB,cAAc,CAAC,GAAQ;QACnC,OAAO,GAAG,KAAK,CAAC,CAAE,GAA0B,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;AACD,aAAgB,YAAY,CAAC,GAAQ;QACjC,OAAO,GAAG,KAAK,CAAC,CAAE,GAAwB,CAAC,UAAU,CAAC,CAAC;IAC3D,CAAC;AACD,aAAgB,SAAS,CAAC,GAAQ;QAC9B,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;IACpD,CAAC;AAED,aAAgB,gBAAgB,CAAC,GAAmB;QAChD,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC;IACjC,CAAC;AAED,aAAgB,gBAAgB,CAAC,GAAmB;QAChD,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC;IACjC,CAAC;AAED,aAAgB,UAAU,CAAC,GAAQ;QAC/B,OAAO,GAAG,KACL,GAAsB,CAAC,IAAI,KAAK,QAAQ;eACrC,GAAsB,CAAC,IAAI,KAAK,QAAQ,CAC/C,CAAC;IACN,CAAC;AAED,aAAgB,QAAQ,CAAC,EAAU;QAC/B,OAAO,UAAQ,EAAE,MAAG,CAAC;IACzB,CAAC;AAED,aAAgB,gBAAgB,CAAC,EAAQ;QACrC,IAAM,KAAK,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC;QAClC,IAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;AAED,aAAgB,qBAAqB,CACjC,SAAsD;QAEtD,IAAM,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAM,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAM,QAAQ,GAAG,CAAC,SAAS,CAAC,QAAQ,IAAI,CAAC,IAAI,gBAAgB,CAAC;QAC9D,IAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC9C,IAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC9C,IAAM,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC;QACnC,IAAM,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC;QACnC,IAAM,GAAG,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,IAAI,CAAC,EAAE;YAER,GAAG,CAAC,IAAI,CAAC,eAAa,CAAC,WAAM,CAAC,QAAK,CAAC,CAAC;SACxC;QACD,IAAI,QAAQ,EAAE;YACV,GAAG,CAAC,IAAI,CAAC,YAAU,QAAQ,MAAG,CAAC,CAAC;SACnC;QACD,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE;YAC9B,GAAG,CAAC,IAAI,CAAC,WAAS,MAAM,SAAI,MAAM,MAAG,CAAC,CAAC;SAC1C;QACD,IAAI,KAAK,IAAI,KAAK,EAAE;YAChB,GAAG,CAAC,IAAI,CAAC,UAAQ,SAAS,CAAC,KAAK,GAAG,gBAAgB,CAAC,aAAQ,SAAS,CAAC,KAAK,GAAG,gBAAgB,CAAC,SAAM,CAAC,CAAC;SAC1G;QAED,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;AAED,IAAO,IAAM,YAAY,GAAG,CAAC;QACzB,IAAI,GAAG,CAAC,eAAe,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YAChD,OAAO,UAAU,GAAW;gBACxB,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACzD,CAAC;SACL;QACD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YAC/B,OAAO,UAAU,GAAW;gBACxB,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;aAC9C,CAAC;SACL;QACD,OAAO,UAAU,GAAW;YACxB,AAA2C;gBACvC,QAAQ,CAAC,8DAA8D,CAAC,CAAC;aAC5E;YACD,OAAO,IAAI,CAAC;SACf,CAAC;IACN,CAAC,GAAG,CAAC;;ICjJL,IAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;IAEzC,SAAS,iBAAiB,CAAC,EAAU,EAAE,EAAU,EAAE,OAAe;QAC9D,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC;IACpC,CAAC;IACD,SAAS,kBAAkB,CACvB,GAAgB,EAChB,EAAe,EACf,EAAe,EACf,OAAe;QAGf,IAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;SACrD;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,SAAS,kBAAkB,CACvB,GAAkB,EAClB,EAAiB,EACjB,EAAiB,EACjB,OAAe;QAEf,IAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;QAEtB,IAAM,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBACT,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;aACf;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC3B,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;aAC9D;SACJ;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,SAAS,UAAU,CACf,GAAgB,EAChB,EAAe,EACf,EAAe,EACf,IAAY;QAEZ,IAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;SACjC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,SAAS,UAAU,CACf,GAAkB,EAClB,EAAiB,EACjB,EAAiB,EACjB,IAAY;QAEZ,IAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;QACtB,IAAM,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBACT,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;aACf;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC3B,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;aAC1C;SACJ;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,SAAS,cAAc,CAAC,IAAuB,EAAE,IAAuB;QACpE,IAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QAEzB,IAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QAC7C,IAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxC,IAAM,IAAI,GAAG,UAAU,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAC9E,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAEpD,UAAU,CAAC,IAAI,CAAC;gBACZ,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;aAC5B,CAAC,CAAC;SACN;IACL,CAAC;IAGD,SAAS,SAAS,CACd,IAAiC,EACjC,IAAiC,EACjC,MAAa;QAGb,IAAI,IAAI,GAAG,IAA6B,CAAC;QACzC,IAAI,IAAI,GAAG,IAA6B,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAC1B,OAAO;SACV;QACD,IAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,IAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,IAAI,OAAO,KAAK,OAAO,EAAE;YAErB,IAAM,gBAAgB,GAAG,OAAO,GAAG,OAAO,CAAC;YAC3C,IAAI,gBAAgB,EAAE;gBAElB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;aACzB;iBACI;gBAED,KAAK,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAChE;aACJ;SACJ;QAED,IAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAK,IAAI,CAAC,CAAC,CAAc,CAAC,MAAM,CAAC;QACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAClC,IAAI,MAAM,KAAK,CAAC,EAAE;gBACd,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAW,CAAC,EAAE;oBAC1B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;iBACrB;aACJ;iBACI;gBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;oBAC3B,IAAI,KAAK,CAAE,IAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;wBAClC,IAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAI,IAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC3D;iBACJ;aACJ;SACJ;IACL,CAAC;AAED,aAAgB,UAAU,CAAC,KAAyB;QAChD,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;YACpB,IAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;YACzB,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;gBACvB,IAAM,GAAG,GAAG,EAAE,CAAC;gBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oBAC1B,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC;gBACD,OAAO,GAAG,CAAC;aACd;YAED,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACjC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,SAAS,WAAW,CAAC,IAAc;QAC/B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAExC,OAAO,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAC1C,CAAC;IAED,SAAS,aAAa,CAAC,KAAyB;QAC5C,OAAO,WAAW,CAAC,KAAK,IAAK,KAA4B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1E,CAAC;IAED,IAAM,iBAAiB,GAAG,CAAC,CAAC;IAC5B,IAAM,mBAAmB,GAAG,CAAC,CAAC;IAC9B,IAAM,mBAAmB,GAAG,CAAC,CAAC;IAC9B,IAAM,gBAAgB,GAAG,CAAC,CAAC;IAC3B,IAAM,0BAA0B,GAAG,CAAC,CAAC;IACrC,IAAM,0BAA0B,GAAG,CAAC,CAAC;IAErC,IAAM,iBAAiB,GAAG,CAAC,CAAC;IAiB5B,SAAS,mBAAmB,CAAC,OAAkB;QAC3C,OAAO,OAAO,KAAK,0BAA0B,IAAI,OAAO,KAAK,0BAA0B,CAAC;IAC5F,CAAC;IACD,SAAS,gBAAgB,CAAC,OAAkB;QACxC,OAAO,OAAO,KAAK,mBAAmB,IAAI,OAAO,KAAK,mBAAmB,CAAC;IAC9E,CAAC;IAGD,IAAI,OAAO,GAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAErC;QA8BI,eAAY,QAAgB;YA5B5B,cAAS,GAAe,EAAE,CAAA;YAM1B,aAAQ,GAAY,KAAK,CAAA;YAEzB,aAAQ,GAAY,KAAK,CAAC;YAIlB,eAAU,GAAY,KAAK,CAAA;YAU3B,YAAO,GAAG,CAAC,CAAA;YAIX,aAAQ,GAAG,CAAC,CAAA;YAGhB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;SAC5B;QAED,0BAAU,GAAV;YACI,OAAO,IAAI,CAAC,SAAS,CAAC;SACzB;QAED,2BAAW,GAAX;YACI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YAGtB,IAAI,IAAI,CAAC,cAAc,EAAE;gBACrB,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;aACrC;SACJ;QAED,4BAAY,GAAZ;YACI,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC;SACrC;QAED,gCAAgB,GAAhB;YACI,OAAO,IAAI,CAAC,cAAc,CAAC;SAC9B;QAED,2BAAW,GAAX,UAAY,IAAY,EAAE,QAAiB,EAAE,MAAwB;YACjE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YAEvB,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAC/B,IAAI,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC;YAE3B,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,IAAI,OAAO,GAAc,iBAAiB,CAAC;YAC3C,IAAI,KAAK,GAAG,QAAQ,CAAC;YAGrB,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE;gBACvB,IAAI,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACvC,OAAO,GAAG,QAAQ,CAAC;gBAEnB,IAAI,QAAQ,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;uBACrC,QAAQ,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;oBAChD,QAAQ,GAAG,IAAI,CAAC;iBACnB;aACJ;iBACI;gBACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;oBACxC,OAAO,GAAG,iBAAiB,CAAC;iBAC/B;qBACI,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;oBACzB,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE;wBACnB,OAAO,GAAG,iBAAiB,CAAC;qBAC/B;yBACI;wBACD,IAAM,UAAU,GAAGE,KAAW,CAAC,QAAQ,CAAC,CAAC;wBACzC,IAAI,UAAU,EAAE;4BACZ,KAAK,GAAG,UAAU,CAAC;4BACnB,OAAO,GAAG,gBAAgB,CAAC;yBAC9B;qBACJ;iBACJ;qBACI,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE;oBAEjC,IAAM,cAAc,GAAG,MAAM,CAAC,EAAE,EAAE,KAAK,CAAoC,CAAC;oBAC5E,cAAc,CAAC,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAA,SAAS,IAAI,QAAC;wBAC/D,MAAM,EAAE,SAAS,CAAC,MAAM;wBACxB,KAAK,EAAEA,KAAW,CAAC,SAAS,CAAC,KAAK,CAAC;qBACtC,IAAC,CAAC,CAAC;oBACJ,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE;wBAC5B,OAAO,GAAG,0BAA0B,CAAC;qBACxC;yBACI,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE;wBACjC,OAAO,GAAG,0BAA0B,CAAC;qBACxC;oBACD,KAAK,GAAG,cAAc,CAAC;iBAC1B;aACJ;YAED,IAAI,GAAG,KAAK,CAAC,EAAE;gBAEX,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;aAC1B;iBAEI,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,iBAAiB,EAAE;gBAChE,QAAQ,GAAG,IAAI,CAAC;aACnB;YAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC;YAE1C,IAAM,EAAE,GAAa;gBACjB,IAAI,MAAA;gBACJ,KAAK,OAAA;gBACL,QAAQ,UAAA;gBACR,OAAO,EAAE,CAAC;aACb,CAAC;YACF,IAAI,MAAM,EAAE;gBAER,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC;gBACnB,EAAE,CAAC,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;sBAC5B,MAAM;sBACN,WAAW,CAAC,MAAM,CAAC,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;aAC9D;YAED,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnB,OAAO,EAAE,CAAC;SACb;QAED,uBAAO,GAAP,UAAQ,OAAe,EAAE,aAAqB;YAC1C,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;YACzB,IAAI,IAAI,CAAC,UAAU,EAAE;gBAEjB,GAAG,CAAC,IAAI,CAAC,UAAU,CAAW,EAAE,CAAW;oBACvC,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;iBAC1B,CAAC,CAAC;aACN;YAED,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;YAC1B,IAAM,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC/B,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;YACjC,IAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACxC,IAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAEhD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7B,IAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBAClB,IAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;gBACvB,IAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;gBAC/B,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,IAAI,GAAG,OAAO,CAAC;gBAC/B,IAAI,CAAC,UAAU,EAAE;oBACb,IAAI,KAAK,IAAI,CAAC,KAAK,MAAM,GAAG,CAAC,EAAE;wBAE3B,SAAS,CAAC,KAAoB,EAAE,SAAwB,EAAE,OAAO,CAAC,CAAC;qBACtE;yBACI,IAAI,UAAU,EAAE;wBACjB,cAAc,CACT,KAAoC,CAAC,UAAU,EAC/C,SAAwC,CAAC,UAAU,CACvD,CAAC;qBACL;iBACJ;aACJ;YAGD,IACI,CAAC,UAAU;mBAER,OAAO,KAAK,0BAA0B;mBACtC,aAAa;mBAEb,IAAI,CAAC,YAAY,EAAE;mBACnB,aAAa,CAAC,YAAY,EAAE;mBAC5B,OAAO,KAAK,aAAa,CAAC,OAAO;mBACjC,CAAC,aAAa,CAAC,SAAS,EAC7B;gBACE,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;gBAEpC,IAAM,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC7B,IAAI,OAAO,KAAK,iBAAiB,EAAE;wBAC/B,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAe,GAAI,UAAqB,CAAC;qBAC1E;yBACI,IAAI,OAAO,KAAK,gBAAgB,EAAE;wBACnC,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa;4BAChB,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAoB,EAAE,UAAyB,EAAE,CAAC,CAAC,CAAC,CAAC;qBAClF;yBACI,IAAI,gBAAgB,CAAC,OAAO,CAAC,EAAE;wBAChC,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,OAAO,KAAK,mBAAmB;8BAChD,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAoB,EAAE,UAAyB,EAAE,CAAC,CAAC,CAAC;8BAC1E,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAsB,EAAE,UAA2B,EAAE,CAAC,CAAC,CAAC,CAAC;qBACxF;iBACJ;aACJ;SACJ;QAED,oBAAI,GAAJ,UAAK,MAAW,EAAE,OAAe;YAC7B,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,OAAO;aACV;YAED,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE;gBAEtD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;aAC9B;YACD,IAAM,UAAU,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC;YAC/C,IAAM,QAAQ,GAAG,UAAU,GAAG,eAAe,GAAG,OAAO,CAAC;YAExD,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,IAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAChC,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/B,IAAM,YAAY,GAAG,OAAO,KAAK,gBAAgB,CAAC;YAIlD,IAAI,QAAQ,CAAC;YACb,IAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;YAC/B,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;YACzB,IAAI,KAAK,CAAC;YACV,IAAI,SAAS,CAAC;YACd,IAAI,MAAM,KAAK,CAAC,EAAE;gBACd,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;aACpC;iBACI;gBAED,IAAI,OAAO,GAAG,CAAC,EAAE;oBACb,QAAQ,GAAG,CAAC,CAAC;iBAChB;qBACI,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;oBAG9B,IAAM,KAAK,GAAG,OAAO,CAAC,SAAS,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;oBACjD,KAAK,QAAQ,GAAG,KAAK,EAAE,QAAQ,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE;wBAC9C,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,IAAI,OAAO,EAAE;4BACxC,MAAM;yBACT;qBACJ;oBACD,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;iBAC5C;qBACI;oBACD,KAAK,QAAQ,GAAG,SAAS,EAAE,QAAQ,GAAG,MAAM,EAAE,QAAQ,EAAE,EAAE;wBACtD,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,GAAG,OAAO,EAAE;4BACvC,MAAM;yBACT;qBACJ;oBACD,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;iBAChD;gBAED,SAAS,GAAG,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;gBACpC,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;aAC/B;YAGD,IAAI,EAAE,KAAK,IAAI,SAAS,CAAC,EAAE;gBACvB,OAAO;aACV;YAED,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;YACxB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;YAExB,IAAM,QAAQ,IAAI,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;YACrD,IAAI,CAAC,GAAG,QAAQ,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC;YAI9E,IAAI,SAAS,CAAC,UAAU,EAAE;gBACtB,CAAC,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;aAC/B;YAGD,IAAI,SAAS,GAAG,UAAU,GAAG,IAAI,CAAC,cAAc;mBACzC,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAElD,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,YAAY,KAAK,CAAC,SAAS,EAAE;gBAC3D,SAAS,GAAG,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;aACxC;YAED,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAEf,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;aAClE;iBACI,IAAI,gBAAgB,CAAC,OAAO,CAAC,EAAE;gBAChC,OAAO,KAAK,mBAAmB;sBACzB,kBAAkB,CAChB,SAAwB,EACxB,KAAK,CAAC,QAAQ,CAAgB,EAC9B,SAAS,CAAC,QAAQ,CAAgB,EAClC,CAAC,CACJ;sBACC,kBAAkB,CAChB,SAA0B,EAC1B,KAAK,CAAC,QAAQ,CAAkB,EAChC,SAAS,CAAC,QAAQ,CAAkB,EACpC,CAAC,CACJ,CAAC;aACT;iBACI,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE;gBACnC,IAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAyB,CAAC;gBACpD,IAAM,SAAO,GAAG,SAAS,CAAC,QAAQ,CAAyB,CAAC;gBAC5D,IAAM,kBAAgB,GAAG,OAAO,KAAK,0BAA0B,CAAC;gBAChE,MAAM,CAAC,QAAQ,CAAC,GAAG;oBACf,IAAI,EAAE,kBAAgB,GAAG,QAAQ,GAAG,QAAQ;oBAC5C,CAAC,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC;oBACzC,CAAC,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC;oBAEzC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,UAAC,SAAS,EAAE,GAAG;wBAC3C,IAAM,aAAa,GAAG,SAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;wBAC9C,OAAO;4BACH,MAAM,EAAE,iBAAiB,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;4BACpE,KAAK,EAAE,WAAW,CAAC,kBAAkB,CACjC,EAAc,EAAE,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC,CAC9C,CAAC;yBACjB,CAAC;qBACL,CAAC;oBACF,MAAM,EAAE,SAAO,CAAC,MAAM;iBACzB,CAAC;gBACF,IAAI,kBAAgB,EAAE;oBAElB,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,iBAAiB,CAClC,GAAkC,CAAC,EAAE,EAAG,SAAsC,CAAC,EAAE,EAAE,CAAC,CACxF,CAAC;oBACF,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,iBAAiB,CAClC,GAAkC,CAAC,EAAE,EAAG,SAAsC,CAAC,EAAE,EAAE,CAAC,CACxF,CAAC;iBACL;qBACI;oBAED,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,iBAAiB,CACjC,GAAkC,CAAC,CAAC,EAAG,SAAsC,CAAC,CAAC,EAAE,CAAC,CACtF,CAAC;iBACL;aACJ;iBACI,IAAI,YAAY,EAAE;gBACnB,kBAAkB,CACd,SAAS,EACT,KAAK,CAAC,QAAQ,CAAgB,EAC9B,SAAS,CAAC,QAAQ,CAAgB,EAClC,CAAC,CACJ,CAAC;gBACF,IAAI,CAAC,UAAU,EAAE;oBACb,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;iBAC7C;aACJ;iBACI;gBACD,IAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAW,EAAE,SAAS,CAAC,QAAQ,CAAW,EAAE,CAAC,CAAC,CAAC;gBAC7F,IAAI,UAAU,EAAE;oBACZ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;iBAC/B;qBACI;oBACD,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;iBAC5B;aACJ;YAGD,IAAI,UAAU,EAAE;gBACZ,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;aAC7B;SACJ;QAEO,4BAAY,GAApB,UAAqB,MAAW;YAC5B,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/B,IAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;YAE1C,IAAI,OAAO,KAAK,iBAAiB,EAAE;gBAE/B,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC;aACvD;iBACI,IAAI,OAAO,KAAK,gBAAgB,EAAE;gBAEnCA,KAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;gBACvC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,aAA4B,EAAE,CAAC,CAAC,CAAC;gBAC9D,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;aAC3C;iBACI,IAAI,OAAO,KAAK,mBAAmB,EAAE;gBACtC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,aAA4B,EAAE,CAAC,CAAC,CAAC;aACnF;iBACI,IAAI,OAAO,KAAK,mBAAmB,EAAE;gBACtC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,aAA8B,EAAE,CAAC,CAAC,CAAC;aACrF;SACJ;QACL,YAAC;IAAD,CAAC,IAAA;IAUD;QAiDI,kBACI,MAAS,EACT,IAAa,EACb,sBAAgC,EAChC,UAA4B;YA3CxB,YAAO,GAAsB,EAAE,CAAA;YAC/B,eAAU,GAAa,EAAE,CAAA;YAMzB,aAAQ,GAAG,CAAC,CAAA;YAeZ,aAAQ,GAAG,CAAC,CAAA;YAeZ,UAAK,GAAS,IAAI,CAAA;YAQtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,IAAI,IAAI,UAAU,EAAE;gBACpB,QAAQ,CAAC,mDAAmD,CAAC,CAAC;gBAC9D,OAAO;aACV;YACD,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC;YAErC,IAAI,CAAC,cAAc,GAAG,sBAAsB,CAAC;SAChD;QAED,6BAAU,GAAV;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;SACxB;QAED,2BAAQ,GAAR;YACI,OAAO,IAAI,CAAC,MAAM,CAAC;SACtB;QAED,0BAAO,GAAP;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;SACrB;QAED,4BAAS,GAAT;YACI,OAAO,IAAI,CAAC,OAAO,CAAC;SACvB;QAOD,+BAAY,GAAZ,UAAa,MAAS;YAClB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;SACzB;QAQD,uBAAI,GAAJ,UAAK,IAAY,EAAE,KAAsB,EAAE,MAAwB;YAC/D,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAa,EAAE,MAAM,CAAC,CAAC;SAC1E;QAID,+BAAY,GAAZ,UAAa,IAAY,EAAE,KAAsB,EAAE,SAAmB,EAAE,MAAwB;YAC5F,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;YAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACvC,IAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAE9B,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC7B,IAAI,CAAC,KAAK,EAAE;oBACR,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAE/C,IAAI,YAAY,SAAA,CAAC;oBACjB,IAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;oBACvD,IAAI,aAAa,EAAE;wBACf,IAAM,eAAe,GAAG,aAAa,CAAC,SAAS,CAAC;wBAChD,IAAM,WAAW,GAAG,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBAEhE,YAAY,GAAG,WAAW,IAAI,WAAW,CAAC,KAAK,CAAC;wBAChD,IAAI,aAAa,CAAC,OAAO,KAAK,gBAAgB,IAAI,YAAY,EAAE;4BAE5D,YAAY,GAAG,WAAW,CAAC,YAAwB,CAAC,CAAC;yBACxD;qBACJ;yBACI;wBACD,YAAY,GAAI,IAAI,CAAC,OAAe,CAAC,QAAQ,CAAC,CAAC;qBAClD;oBAED,IAAI,YAAY,IAAI,IAAI,EAAE;wBAEtB,SAAS;qBACZ;oBAMD,IAAI,IAAI,GAAG,CAAC,EAAE;wBACV,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;qBAC1D;oBAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBAClC;gBACD,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;aAChE;YACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC9C,OAAO,IAAI,CAAC;SACf;QAED,wBAAK,GAAL;YACI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACvB;QAED,yBAAM,GAAN;YACI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;SACxB;QAED,2BAAQ,GAAR;YACI,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;SACzB;QAQD,2BAAQ,GAAR,UAAS,QAAgB;YACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,OAAO,IAAI,CAAC;SACf;QAEO,gCAAa,GAArB;YACI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAE1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAElB,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/B,IAAI,QAAQ,EAAE;gBACV,IAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC;gBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oBAC1B,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC1B;aACJ;SACJ;QACO,mCAAgB,GAAxB;YACI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAE1B,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,IAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YAErC,IAAI,SAAS,EAAE;gBACX,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACpC;YACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAElB,IAAI,WAAW,EAAE;gBACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACzC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC7B;aACJ;SACJ;QACO,qCAAkB,GAA1B;YACI,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;YAC5B,IAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;aACvC;SACJ;QAEO,oCAAiB,GAAzB,UAA0B,SAAiB;YACvC,IAAI,aAAa,CAAC;YAClB,IAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAClD,IAAI,iBAAiB,EAAE;gBACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC/C,IAAM,KAAK,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;oBACvD,IAAI,KAAK,EAAE;wBAEP,aAAa,GAAG,KAAK,CAAC;qBACzB;iBACJ;aACJ;YACD,OAAO,aAAa,CAAC;SACxB;QAOD,wBAAK,GAAL,UAAM,MAAwB;YAC1B,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE;gBACnB,OAAO;aACV;YACD,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YAElB,IAAM,IAAI,GAAG,IAAI,CAAC;YAElB,IAAM,MAAM,GAAY,EAAE,CAAC;YAC3B,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;YACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7C,IAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACrC,IAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBACvD,IAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC;gBAC5B,IAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;gBAC1B,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;gBACtC,IAAI,KAAK,CAAC,YAAY,EAAE,EAAE;oBAEtB,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC,QAAQ,EAAE;wBACxC,IAAM,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBAE/B,IAAI,MAAM,EAAE;4BAEP,IAAI,CAAC,OAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;yBAC3D;wBACD,KAAK,CAAC,WAAW,EAAE,CAAC;qBACvB;yBACI;wBACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBACtB;iBACJ;aACJ;YAED,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC9B,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC;oBAClB,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,IAAI,CAAC,KAAK;oBAChB,KAAK,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC;oBACvB,OAAO,EAAP,UAAQ,OAAe;wBACnB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;wBAGlB,IAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC;wBAClD,IAAI,iBAAiB,EAAE;4BACnB,IAAI,wBAAwB,GAAG,KAAK,CAAC;4BACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gCAC/C,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;oCAC5B,wBAAwB,GAAG,IAAI,CAAC;oCAChC,MAAM;iCACT;6BACJ;4BACD,IAAI,CAAC,wBAAwB,EAAE;gCAC3B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;6BAClC;yBACJ;wBAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;4BAGpC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;yBACzC;wBAED,IAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;wBACrC,IAAI,WAAW,EAAE;4BACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gCACzC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;6BACzC;yBACJ;qBACJ;oBACD,SAAS;wBACL,IAAI,CAAC,aAAa,EAAE,CAAC;qBACxB;iBACJ,CAAC,CAAC;gBACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;gBAElB,IAAI,IAAI,CAAC,SAAS,EAAE;oBAChB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBAChC;gBAED,IAAI,MAAM,EAAE;oBACR,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;iBAC1B;aACJ;iBACI;gBAID,IAAI,CAAC,aAAa,EAAE,CAAC;aACxB;YAED,OAAO,IAAI,CAAC;SACf;QAKD,uBAAI,GAAJ,UAAK,aAAuB;YACxB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACb,OAAO;aACV;YACD,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,IAAI,aAAa,EAAE;gBAEf,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aACnB;YAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;QAKD,wBAAK,GAAL,UAAM,IAAY;YACd,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,OAAO,IAAI,CAAC;SACf;QAKD,yBAAM,GAAN,UAAO,EAAsB;YACzB,IAAI,EAAE,EAAE;gBACJ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;oBACnB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;iBACzB;gBACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC7B;YACD,OAAO,IAAI,CAAC;SACf;QAKD,uBAAI,GAAJ,UAAK,EAAgB;YACjB,IAAI,EAAE,EAAE;gBACJ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;oBAChB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;iBACtB;gBACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC1B;YACD,OAAO,IAAI,CAAC;SACf;QAED,0BAAO,GAAP,UAAQ,EAAiB;YACrB,IAAI,EAAE,EAAE;gBACJ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;oBACnB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;iBACzB;gBACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC7B;YACD,OAAO,IAAI,CAAC;SACf;QAED,0BAAO,GAAP;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;SACrB;QAED,2BAAQ,GAAR,UAAS,QAAgB;YACrB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;SACjC;QAED,4BAAS,GAAT;YAAA,iBAEC;YADG,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAA,CAAC,CAAC;SACzD;QAKD,6BAAU,GAAV,UAAW,SAAmB,EAAE,aAAuB;YACnD,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBAClC,OAAO,IAAI,CAAC;aACf;YACD,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;YAC5B,IAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACvC,IAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE;oBAC9B,IAAI,aAAa,EAAE;wBACf,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;qBAC/B;yBAMI,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE;wBAC1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;qBAC/B;oBAED,KAAK,CAAC,WAAW,EAAE,CAAC;iBACvB;aACJ;YACD,IAAI,UAAU,GAAG,IAAI,CAAC;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE;oBACrC,UAAU,GAAG,KAAK,CAAC;oBACnB,MAAM;iBACT;aACJ;YAED,IAAI,UAAU,EAAE;gBACZ,IAAI,CAAC,gBAAgB,EAAE,CAAC;aAC3B;YAED,OAAO,UAAU,CAAC;SACrB;QAWD,yBAAM,GAAN,UACI,MAAS,EACT,SAA6B,EAC7B,WAAqB;YAErB,IAAI,CAAC,MAAM,EAAE;gBACT,OAAO;aACV;YAED,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC;YAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACvC,IAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACrC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,EAAE;oBAC9B,SAAS;iBACZ;gBACD,IAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC;gBAC5B,IAAM,EAAE,GAAG,GAAG,CAAC,WAAW,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACjD,IAAI,EAAE,EAAE;oBAGH,MAAc,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,QAAe,CAAC,CAAC;iBAC9D;aACJ;SACJ;QAID,qCAAkB,GAAlB,UAAmB,UAA2B,EAAE,SAA6B;YACzE,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;YAE1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACvC,IAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAE9B,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACrC,IAAI,CAAC,KAAK,EAAE;oBACR,SAAS;iBACZ;gBAED,IAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC;gBAC5B,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;oBAEhB,IAAM,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;oBAEzB,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAErD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC;iBAC1D;aACJ;SACJ;QACL,eAAC;IAAD,CAAC,IAAA;;aC7mCe,OAAO;QACnB,OAAO,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC;IA4BD;QAAuC,6BAAQ;QAgB3C,mBAAY,IAAsB;YAAlC,YACI,iBAAO,SAKV;YAdO,cAAQ,GAAG,KAAK,CAAA;YAEhB,WAAK,GAAG,CAAC,CAAA;YACT,iBAAW,GAAG,CAAC,CAAA;YACf,iBAAW,GAAG,CAAC,CAAA;YAEf,aAAO,GAAG,KAAK,CAAC;YAKpB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAElB,KAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;;SACjC;QAKD,2BAAO,GAAP,UAAQ,IAAU;YACd,IAAI,IAAI,CAAC,SAAS,EAAE;gBAEhB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aACzB;YAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACb,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;aAClC;iBACI;gBACD,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;gBACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;aACrB;YACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;SACzB;QAID,+BAAW,GAAX,UAAY,QAAuB;YAC/B,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;YAC1B,IAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;YAChC,IAAI,IAAI,EAAE;gBACN,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aACtB;SACJ;QAID,8BAAU,GAAV,UAAW,IAAU;YACjB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACjB,OAAO;aACV;YACD,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,IAAI,IAAI,EAAE;gBACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;aACpB;iBACI;gBAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;aACrB;YACD,IAAI,IAAI,EAAE;gBACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;aACpB;iBACI;gBAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;aACrB;YACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;SACjD;QAKD,kCAAc,GAAd,UAAe,QAAuB;YAClC,IAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;YAChC,IAAI,IAAI,EAAE;gBACN,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aACzB;YACD,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;SAC7B;QAED,0BAAM,GAAN,UAAO,6BAAuC;YAC1C,IAAM,IAAI,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;YAC1C,IAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YAChC,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YAEtB,OAAO,IAAI,EAAE;gBAGT,IAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC3B,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACtC,IAAI,QAAQ,EAAE;oBACV,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBACtB,IAAI,GAAG,QAAQ,CAAC;iBACnB;qBACI;oBACD,IAAI,GAAG,QAAQ,CAAC;iBACnB;aACJ;YAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAElB,IAAI,CAAC,6BAA6B,EAAE;gBAKhC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAE7B,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;aAC5C;SACJ;QAED,8BAAU,GAAV;YACI,IAAM,IAAI,GAAG,IAAI,CAAC;YAElB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YAErB,SAAS,IAAI;gBACT,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACfC,uBAAqB,CAAC,IAAI,CAAC,CAAC;oBAC5B,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;iBAClC;aACJ;YAEDA,uBAAqB,CAAC,IAAI,CAAC,CAAC;SAC/B;QAKD,yBAAK,GAAL;YACI,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,OAAO;aACV;YAED,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YAErB,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;QAKD,wBAAI,GAAJ;YACI,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;SACzB;QAKD,yBAAK,GAAL;YACI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACf,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,CAAC;gBAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;aACvB;SACJ;QAKD,0BAAM,GAAN;YACI,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,WAAW,IAAI,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;gBACjD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;aACxB;SACJ;QAKD,yBAAK,GAAL;YACI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YAEtB,OAAO,IAAI,EAAE;gBACT,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;gBACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBAC9C,IAAI,GAAG,QAAQ,CAAC;aACnB;YAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SAClC;QAKD,8BAAU,GAAV;YACI,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;SAC7B;QAMD,2BAAO,GAAP,UAAW,MAAS,EAAE,OAErB;YACG,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;YAGxB,IAAI,CAAC,KAAK,EAAE,CAAC;YAEb,IAAM,QAAQ,GAAG,IAAI,QAAQ,CACzB,MAAM,EACN,OAAO,CAAC,IAAI,CACf,CAAC;YAEF,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAE3B,OAAO,QAAQ,CAAC;SACnB;QACL,gBAAC;IAAD,CA/NA,CAAuC,QAAQ,GA+N9C;;ICpPD,IAAM,iBAAiB,GAAG,GAAG,CAAC;IAE9B,IAAM,oBAAoB,GAAG,GAAG,CAAC,YAAY,CAAC;IAG9C,IAAM,wBAAwB,GAAG,CAAC;QAC9B,IAAM,iBAAiB,GAAG;YACtB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU;YACtD,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa;SACrD,CAAC;QACF,IAAM,iBAAiB,GAAG;YACtB,YAAY,EAAE,UAAU,EAAE,WAAW;SACxC,CAAC;QACF,IAAM,mBAAmB,GAAG;YACxB,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;SAC9D,CAAC;QACF,IAAM,mBAAmB,GAAGC,GAAU,CAAC,iBAAiB,EAAE,UAAU,IAAI;YACpE,IAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC5C,OAAO,mBAAmB,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;SAC7D,CAAC,CAAC;QAEH,OAAO;YACH,KAAK,EAAE,iBAAiB;YACxB,KAAK,EAAE,iBAAiB;YACxB,OAAO,EAAE,mBAAmB;SAC/B,CAAC;IACN,CAAC,GAAG,CAAC;IAEL,IAAM,yBAAyB,GAAG;QAC9B,KAAK,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC;QAC/B,OAAO,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC;KACxC,CAAC;IAEF,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAWhC,SAAS,kBAAkB,CAAC,KAAiB;QACzC,IAAM,WAAW,GAAI,KAAa,CAAC,WAAW,CAAC;QAC/C,OAAO,WAAW,KAAK,KAAK,IAAI,WAAW,KAAK,OAAO,CAAC;IAC5D,CAAC;IA4BD,SAAS,aAAa,CAAC,KAAsB;QACzC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QACtB,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI,EAAE;YAC1B,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC/B,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;SAC3B;QACD,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;YAC1B,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;YACvB,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;SAC3B,EAAE,GAAG,CAAC,CAAC;IACZ,CAAC;IAID,SAAS,SAAS,CAAC,KAAiB;QAChC,KAAK,KAAK,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IACtC,CAAC;IAWD,SAAS,oBAAoB,CAAC,QAAyB,EAAE,KAAiB;QAGtE,OAAO,cAAc,CACjB,QAAQ,CAAC,GAAG,EAEZ,IAAI,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAsB,EACzD,IAAI,CACP,CAAC;IACN,CAAC;IAKD,SAAS,SAAS,CAAC,QAAyB,EAAE,EAAQ;QAClD,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,OAAO,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC;eAC7B,EACC,OAAO,GAAI,KAAqB,CAAC,aAAa;oBACtC,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,QAAQ,CAAC,WAAW,CAAC,CAC1D,EACH;YACE,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC;SAC5B;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAQD;QASI,yBAAY,QAAyB,EAAE,KAAiB;YAcxD,oBAAe,GAAGC,IAAW,CAAA;YAC7B,6BAAwB,GAAGA,IAAW,CAAA;YACtC,mBAAc,GAAGA,IAAW,CAAA;YAfxB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC;YAChD,IAAI,CAAC,WAAW,GAAI,KAAa,CAAC,WAAW,CAAC;YAE9C,IAAI,CAAC,OAAO,GAAI,KAAyB,CAAC,OAAO,CAAC;YAClD,IAAI,CAAC,OAAO,GAAI,KAAyB,CAAC,OAAO,CAAC;SAGrD;QAQL,sBAAC;IAAD,CAAC,IAAA;IAOD,IAAM,gBAAgB,GAAmB;QAErC,SAAS,EAAT,UAAU,KAAiB;YACvB,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAExC,IAAI,CAAC,mBAAmB,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YAElD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;SACpC;QAED,SAAS,EAAT,UAAU,KAAiB;YACvB,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAExC,IAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC;YAC3C,IAAI,SAAS,KAAK,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;gBACzE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;aACrC;YAED,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;SACpC;QAED,OAAO,EAAP,UAAQ,KAAiB;YACrB,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAExC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;YAEnC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;SAClC;QAED,QAAQ,EAAR,UAAS,KAAiB;YACtB,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAOxC,IAAM,OAAO,GAAI,KAAa,CAAC,SAAS,IAAK,KAAyB,CAAC,aAAa,CAAC;YAIrF,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;gBAG3B,IAAI,IAAI,CAAC,kBAAkB,EAAE;oBACzB,KAAK,CAAC,cAAc,GAAG,cAAc,CAAC;iBACzC;gBAED,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;aACnC;SACJ;QAED,KAAK,EAAL,UAAM,KAAiB;YASnB,mBAAmB,GAAG,IAAI,CAAC;YAC3B,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAExC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;SACrC;QAED,UAAU,EAAV,UAAW,KAAiB;YAMxB,IAAI,mBAAmB,EAAE;gBACrB,OAAO;aACV;YACD,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;SACrC;QAED,UAAU,EAAV,UAAW,KAAiB;YAGxB,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAExC,SAAS,CAAC,KAAK,CAAC,CAAC;YAEjB,IAAI,CAAC,iBAAiB,GAAG,IAAI,IAAI,EAAE,CAAC;YAEpC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAM5C,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC7C,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAChD;QAED,SAAS,EAAT,UAAU,KAAiB;YACvB,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAExC,SAAS,CAAC,KAAK,CAAC,CAAC;YAEjB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAK7C,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAChD;QAED,QAAQ,EAAR,UAAS,KAAiB;YACtB,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAExC,SAAS,CAAC,KAAK,CAAC,CAAC;YAEjB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAE1C,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAY3C,IAAI,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,EAAE;gBAC7D,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aAC5C;SACJ;QAED,WAAW,EAAX,UAAY,KAAiB;YACzB,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAKhD;QAED,WAAW,EAAX,UAAY,KAAiB;YAMzB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;gBAC5B,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aAChD;SACJ;QAED,SAAS,EAAT,UAAU,KAAiB;YACvB,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC9C;QAED,UAAU,EAAV,UAAW,KAAiB;YAMxB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;gBAC5B,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aAC/C;SACJ;KAEJ,CAAC;AAMFC,QAAW,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,UAAU,IAAI;QAC5D,gBAAgB,CAAC,IAAI,CAAC,GAAG,UAAU,KAAK;YACpC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC7B,CAAC;IACN,CAAC,CAAC,CAAC;IASH,IAAM,iBAAiB,GAAmB;QAEtC,WAAW,EAAE,UAAU,KAAiB;YAMpC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;gBAC5B,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aACjD;SACJ;QAED,SAAS,EAAE,UAAU,KAAiB;YAClC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC/C;QAED,SAAS,EAAE,UAAU,KAAiB;YAClC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;SACpC;QAED,OAAO,EAAE,UAAU,KAAiB;YAChC,IAAM,uBAAuB,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAExD,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;YAEnC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAE/B,IAAI,uBAAuB,EAAE;gBACzB,KAAK,CAAC,cAAc,GAAG,gBAAgB,CAAC;gBACxC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;aACnC;SACJ;KAEJ,CAAC;IAGF,SAAS,2BAA2B,CAAC,QAAyB,EAAE,KAAsB;QAClF,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAEtC,IAAI,GAAG,CAAC,sBAAsB,EAAE;YAO5BA,IAAW,CAAC,wBAAwB,CAAC,OAAO,EAAE,UAAU,eAAe;gBACnE,2BAA2B,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,KAAK;oBAE/D,WAAW,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;iBACtD,CAAC,CAAC;aACN,CAAC,CAAC;SAgBN;aACI;YACD,IAAI,GAAG,CAAC,oBAAoB,EAAE;gBAC1BA,IAAW,CAAC,wBAAwB,CAAC,KAAK,EAAE,UAAU,eAAe;oBACjE,2BAA2B,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,KAAK;wBAE/D,WAAW,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;wBACnD,aAAa,CAAC,KAAK,CAAC,CAAC;qBACxB,CAAC,CAAC;iBACN,CAAC,CAAC;aAGN;YAODA,IAAW,CAAC,wBAAwB,CAAC,KAAK,EAAE,UAAU,eAAe;gBACjE,2BAA2B,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,KAAiB;oBAC3E,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;oBAC9B,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;wBAEjB,WAAW,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;qBACtD;iBACJ,CAAC,CAAC;aACN,CAAC,CAAC;SACN;IACL,CAAC;IAED,SAAS,4BAA4B,CAAC,QAAyB,EAAE,KAAsB;QAEnF,IAAI,GAAG,CAAC,sBAAsB,EAAE;YAC5BA,IAAW,CAAC,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SACzD;aAKI,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE;YAChCA,IAAW,CAAC,yBAAyB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;SACvD;QAED,SAAS,KAAK,CAAC,eAAuB;YAClC,SAAS,mBAAmB,CAAC,KAAiB;gBAC1C,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;gBAM9B,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAc,CAAC,EAAE;oBAC5C,KAAK,GAAG,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;oBAC9C,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;iBAC5D;aACJ;YACD,2BAA2B,CACvB,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAC3C,EAAC,OAAO,EAAE,IAAI,EAAC,CAClB,CAAC;SACL;IACL,CAAC;IAED,SAAS,2BAA2B,CAChC,KAAsB,EACtB,eAAuB,EACvB,QAAuB,EACvB,GAAuC;QAEvC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,QAAQ,CAAC;QAC1C,KAAK,CAAC,YAAY,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC;QAC1C,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACtE,CAAC;IAED,SAAS,wBAAwB,CAAC,KAAsB;QACpD,IAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,KAAK,IAAI,eAAe,IAAI,OAAO,EAAE;YACjC,IAAI,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE;gBACzC,mBAAmB,CACf,KAAK,CAAC,SAAS,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,CAAC,EAC1D,KAAK,CAAC,YAAY,CAAC,eAAe,CAAC,CACtC,CAAC;aACL;SACJ;QACD,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;IACvB,CAAC;IAGD;QAaI,yBACI,SAAqC,EACrC,WAA2B;YAT/B,YAAO,GAA8B,EAAE,CAAC;YAExC,iBAAY,GAAkD,EAAE,CAAC;YAGjE,aAAQ,GAAG,KAAK,CAAC;YAMb,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;SAElC;QACL,sBAAC;IAAD,CAAC,IAAA;IAGD;QAA6C,mCAAQ;QAkBjD,yBAAY,GAAgB,EAAE,WAAwB;YAAtD,YACI,iBAAO,SAYV;YAlBD,wBAAkB,GAAG,KAAK,CAAA;YAQtB,KAAI,CAAC,GAAG,GAAG,GAAG,CAAC;YACf,KAAI,CAAC,WAAW,GAAG,WAAW,CAAC;YAE/B,KAAI,CAAC,kBAAkB,GAAG,IAAI,eAAe,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;YAErE,IAAI,oBAAoB,EAAE;gBACtB,KAAI,CAAC,mBAAmB,GAAG,IAAI,eAAe,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;aAC/E;YAED,2BAA2B,CAAC,KAAI,EAAE,KAAI,CAAC,kBAAkB,CAAC,CAAC;;SAC9D;QAED,iCAAO,GAAP;YACI,wBAAwB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAClD,IAAI,oBAAoB,EAAE;gBACtB,wBAAwB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;aACtD;SACJ;QAED,mCAAS,GAAT,UAAU,WAAmB;YACzB,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW,IAAI,SAAS,CAAC,CAAC;SACxE;QASD,gDAAsB,GAAtB,UAAuB,kBAA4B;YAC/C,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAEhC,IAAI,oBAAoB;oBAChB,CAAC,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,kBAAkB,CAAC,CAAC,EACzD;gBACE,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;gBAE7C,IAAM,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC;gBACpD,kBAAkB;sBACZ,4BAA4B,CAAC,IAAI,EAAE,kBAAkB,CAAC;sBACtD,wBAAwB,CAAC,kBAAkB,CAAC,CAAC;aACtD;SACJ;QACL,sBAAC;IAAD,CAjEA,CAA6C,QAAQ,GAiEpD;;ICjnBD,IAAI,GAAG,GAAG,CAAC,CAAC;IAGZ,IAAI,GAAG,CAAC,eAAe,EAAE;QACrB,GAAG,GAAG,IAAI,CAAC,GAAG,CACV,MAAM,CAAC,gBAAgB;gBACnB,MAAM,CAAC,MAAM,IAAK,MAAM,CAAC,MAAc,CAAC,UAAU,GAAI,MAAM,CAAC,MAAc,CAAC,WAAW,CAAC;eACzF,CAAC,EAAE,CAAC,CACV,CAAC;KACL;AAOD,IAGO,IAAM,gBAAgB,GAAG,GAAG,CAAC;AAMpC,IAAO,IAAM,mBAAmB,GAAG,GAAG,CAAC;AAKvC,IAAO,IAAM,gBAAgB,GAAG,MAAM,CAAC;AAKvC,IAAO,IAAM,iBAAiB,GAAG,MAAM,CAAC;AAKxC,IAAO,IAAM,mBAAmB,GAAG,MAAM,CAAC;;ICvC1C,IAAM,SAAS,GAAGC,QAAe,CAAC;IAElC,IAAMP,SAAO,GAAG,IAAI,CAAC;IAErB,SAASQ,iBAAe,CAAC,GAAW;QAChC,OAAO,GAAG,GAAGR,SAAO,IAAI,GAAG,GAAG,CAACA,SAAO,CAAC;IAC3C,CAAC;IAED,IAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,IAAM,YAAY,GAAuB,EAAE,CAAC;IAC5C,IAAM,eAAe,GAAGX,QAAa,EAAE,CAAC;IACxC,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IAErB;QAAA;SAuVC;QAlTG,yCAAiB,GAAjB,UAAkB,CAAsB;YACpC,OAAO,aAAa,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;SACnD;QAKD,mCAAW,GAAX,UAAY,GAAa;YACrB,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;SACnB;QAID,gCAAQ,GAAR,UAAS,GAAa;YAClB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;SACxB;QAKD,+BAAO,GAAP,UAAQ,GAAa;YACjB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;SACvB;QAKD,iCAAS,GAAT,UAAU,GAAa;YACnB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;SACzB;QAKD,0CAAkB,GAAlB;YACI,OAAOmB,iBAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;mBAC9BA,iBAAe,CAAC,IAAI,CAAC,CAAC,CAAC;mBACvBA,iBAAe,CAAC,IAAI,CAAC,CAAC,CAAC;mBACvBA,iBAAe,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;mBAChCA,iBAAe,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;mBAChCA,iBAAe,CAAC,IAAI,CAAC,KAAK,CAAC;mBAC3BA,iBAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACtC;QAKD,uCAAe,GAAf;YACI,IAAM,eAAe,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YAC7D,IAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAErD,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YACvB,IAAI,EAAE,kBAAkB,IAAI,eAAe,CAAC,EAAE;gBAC1C,IAAI,CAAC,EAAE;oBACH,SAAS,CAAC,CAAC,CAAC,CAAC;oBAEb,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;iBAC5B;gBACD,OAAO;aACV;YAED,CAAC,GAAG,CAAC,IAAInB,QAAa,EAAE,CAAC;YAEzB,IAAI,kBAAkB,EAAE;gBACpB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;aAC7B;iBACI;gBACD,SAAS,CAAC,CAAC,CAAC,CAAC;aAChB;YAGD,IAAI,eAAe,EAAE;gBACjB,IAAI,kBAAkB,EAAE;oBACpBoB,KAAU,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;iBACrC;qBACI;oBACDC,MAAW,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;iBACnC;aACJ;YAED,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YAEnB,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;SACpC;QAEO,gDAAwB,GAAhC,UAAiC,CAAqB;YAClD,IAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAC/C,IAAI,gBAAgB,IAAI,IAAI,IAAI,gBAAgB,KAAK,CAAC,EAAE;gBACpD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;gBAC9B,IAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACtC,IAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACtC,IAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,gBAAgB,GAAG,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC/E,IAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,gBAAgB,GAAG,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAE/E,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACX,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACX,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACX,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACd;YAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAIrB,QAAa,EAAE,CAAC;YACzDsB,MAAa,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;SACvC;QAOD,4CAAoB,GAApB;YACI,IAAI,aAAa,GAAkB,IAAI,CAAC;YACxC,IAAM,SAAS,GAAoB,EAAE,CAAC;YACtC,OAAO,aAAa,EAAE;gBAClB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC9B,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC;aACxC;YAGD,OAAO,aAAa,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE;gBACpC,aAAa,CAAC,eAAe,EAAE,CAAC;aACnC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC;SACzB;QAED,yCAAiB,GAAjB,UAAkB,CAAqB;YACnC,IAAI,CAAC,CAAC,EAAE;gBAEJ,OAAO;aACV;YACD,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAEnC,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAExC,IAAM,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACtC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEnB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;YACpB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACf,IAAI,CAAC,QAAQ,GAAG,CAAC,QAAQ,CAAC;YAE1B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YAEjB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;SACpB;QAID,0CAAkB,GAAlB;YACI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACjB,OAAO;aACV;YACD,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YACvB,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,EAAE;gBAE5B,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAItB,QAAa,EAAE,CAAC;gBAC7DoB,KAAU,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;gBACjD,CAAC,GAAG,YAAY,CAAC;aACpB;YACD,IAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;YACxB,IAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;YACxB,IAAI,EAAE,IAAI,EAAE,EAAE;gBACV,eAAe,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;gBACxB,eAAe,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;gBACxBA,KAAU,CAAC,YAAY,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;gBAC7C,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtB,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtB,CAAC,GAAG,YAAY,CAAC;aACpB;YAED,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;SAC7B;QAKD,sCAAc,GAAd,UAAe,GAAwB;YACnC,IAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YACzB,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;YAChB,IAAI,CAAC,CAAC,EAAE;gBACJ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACX,OAAO,GAAG,CAAC;aACd;YACD,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;gBACV,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACpB;YACD,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;gBACV,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACpB;YACD,OAAO,GAAG,CAAC;SACd;QAID,6CAAqB,GAArB,UAAsB,CAAS,EAAE,CAAS;YACtC,IAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClB,IAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YACvC,IAAI,YAAY,EAAE;gBACdG,cAAqB,CAAC,EAAE,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;aAC/C;YACD,OAAO,EAAE,CAAC;SACb;QAKD,8CAAsB,GAAtB,UAAuB,CAAS,EAAE,CAAS;YACvC,IAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClB,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,IAAI,SAAS,EAAE;gBACXA,cAAqB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;aAC5C;YACD,OAAO,EAAE,CAAC;SACb;QAGD,oCAAY,GAAZ;YACI,IAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YAKzB,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK;kBACpD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;kBACzC,CAAC,CAAC;SACX;QAED,qCAAa,GAAb,UAAc,MAAqB;YAC/B,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SAC/B;QAGM,+BAAiB,GAAxB,UAAyB,MAAqB,EAAE,CAAsB;YAClE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAEZ,IAAM,EAAE,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;YAC/B,IAAM,EAAE,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;YAC/B,IAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;YACzB,IAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;YACzB,IAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;YAC1B,IAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;YAC1B,IAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;YACtC,IAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;YACnB,IAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;YACnB,IAAM,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAExD,IAAM,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAKzD,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;gBACtB,IAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;gBACnB,IAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;gBACnB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;gBAClC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;aACrC;iBACI;gBACD,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aACnB;YAED,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACV,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YAEV,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAClB,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAGlB,QAAQ,IAAIC,MAAa,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;YAG1C,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACf,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAEf,OAAO,CAAC,CAAC;SACZ;QAEc,8BAAgB,GAAG,CAAC;YAC/B,IAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC;YACtC,KAAK,CAAC,MAAM;gBACZ,KAAK,CAAC,MAAM;oBACZ,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC;YAC3B,KAAK,CAAC,CAAC;gBACP,KAAK,CAAC,CAAC;oBACP,KAAK,CAAC,OAAO;wBACb,KAAK,CAAC,OAAO;4BACb,KAAK,CAAC,KAAK;gCACX,KAAK,CAAC,KAAK;oCACX,KAAK,CAAC,QAAQ;wCACd,KAAK,CAAC,OAAO;4CACb,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;SACrB,GAAG,CAAA;QACR,oBAAC;KAvVD,IAuVC;AAAA,IAEM,IAAM,mBAAmB,GAAG;QAC/B,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO;KAChG,CAAC;AAIX,aAAgB,aAAa,CACzB,MAAmD,EACnD,MAA0C;QAE1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACjD,IAAM,QAAQ,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;SACvC;IACL,CAAC;;IClXD,IAAI,cAAc,GAA4B,EAAE,CAAC;AAEjD,aAAgB,QAAQ,CAAC,IAAY,EAAE,IAAY;QAC/C,IAAI,GAAG,IAAI,IAAI,YAAY,CAAC;QAC5B,IAAI,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,WAAW,EAAE;YACd,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;SACrD;QACD,IAAI,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,KAAK,IAAI,IAAI,EAAE;YACf,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC;YAClD,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAChC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;AAOD,aAAgB,oBAAoB,CAChC,IAAY,EACZ,IAAY,EACZ,SAAqB,EACrB,YAAgC;QAEhC,IAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACnC,IAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAEnC,IAAM,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC3C,IAAM,CAAC,GAAGC,aAAW,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QAE/C,IAAM,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAEnD,OAAO,IAAI,CAAC;IAChB,CAAC;AAOD,aAAgB,eAAe,CAC3B,IAAY,EACZ,IAAY,EACZ,SAAqB,EACrB,YAAgC;QAEhC,IAAM,SAAS,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAClD,IAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC;QAC7B,IAAI,GAAG,KAAK,CAAC,EAAE;YACX,OAAO,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;SAC5E;aACI;YACD,IAAM,UAAU,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACvC,IAAM,IAAI,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;gBAC/E,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aAC5D;YACD,OAAO,UAAU,CAAC;SACrB;IACL,CAAC;AAED,aAAgB,WAAW,CAAC,CAAS,EAAE,KAAa,EAAE,SAAoB;QAEtE,IAAI,SAAS,KAAK,OAAO,EAAE;YACvB,CAAC,IAAI,KAAK,CAAC;SACd;aACI,IAAI,SAAS,KAAK,QAAQ,EAAE;YAC7B,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;SAClB;QACD,OAAO,CAAC,CAAC;IACb,CAAC;AAED,aAAgBA,aAAW,CAAC,CAAS,EAAE,MAAc,EAAE,aAAgC;QACnF,IAAI,aAAa,KAAK,QAAQ,EAAE;YAC5B,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC;SACnB;aACI,IAAI,aAAa,KAAK,QAAQ,EAAE;YACjC,CAAC,IAAI,MAAM,CAAC;SACf;QACD,OAAO,CAAC,CAAC;IACb,CAAC;AAGD,aAAgB,aAAa,CAAC,IAAa;QAEvC,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;AAED,aAOgB,YAAY,CAAC,KAAsB,EAAE,QAAgB;QACjE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC3B,IAAI,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC7B,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC;aAC7C;YACD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;SAC5B;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;AAgBD,aAAgB,qBAAqB,CACjC,GAAkC,EAClC,IAIC,EACD,IAAc;QAEd,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC;QAC/C,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAE3D,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAM,UAAU,GAAG,MAAM,GAAG,CAAC,CAAC;QAE9B,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACf,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAEf,IAAI,SAAS,GAAc,MAAM,CAAC;QAClC,IAAI,iBAAiB,GAAsB,KAAK,CAAC;QAEjD,IAAI,YAAY,YAAY,KAAK,EAAE;YAC/B,CAAC,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/C,CAAC,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAEhD,SAAS,GAAG,IAAI,CAAC;YACjB,iBAAiB,GAAG,IAAI,CAAC;SAC5B;aACI;YACD,QAAQ,YAAY;gBAChB,KAAK,MAAM;oBACP,CAAC,IAAI,QAAQ,CAAC;oBACd,CAAC,IAAI,UAAU,CAAC;oBAChB,SAAS,GAAG,OAAO,CAAC;oBACpB,iBAAiB,GAAG,QAAQ,CAAC;oBAC7B,MAAM;gBACV,KAAK,OAAO;oBACR,CAAC,IAAI,QAAQ,GAAG,KAAK,CAAC;oBACtB,CAAC,IAAI,UAAU,CAAC;oBAChB,iBAAiB,GAAG,QAAQ,CAAC;oBAC7B,MAAM;gBACV,KAAK,KAAK;oBACN,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;oBACf,CAAC,IAAI,QAAQ,CAAC;oBACd,SAAS,GAAG,QAAQ,CAAC;oBACrB,iBAAiB,GAAG,QAAQ,CAAC;oBAC7B,MAAM;gBACV,KAAK,QAAQ;oBACT,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;oBACf,CAAC,IAAI,MAAM,GAAG,QAAQ,CAAC;oBACvB,SAAS,GAAG,QAAQ,CAAC;oBACrB,MAAM;gBACV,KAAK,QAAQ;oBACT,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;oBACf,CAAC,IAAI,UAAU,CAAC;oBAChB,SAAS,GAAG,QAAQ,CAAC;oBACrB,iBAAiB,GAAG,QAAQ,CAAC;oBAC7B,MAAM;gBACV,KAAK,YAAY;oBACb,CAAC,IAAI,QAAQ,CAAC;oBACd,CAAC,IAAI,UAAU,CAAC;oBAChB,iBAAiB,GAAG,QAAQ,CAAC;oBAC7B,MAAM;gBACV,KAAK,aAAa;oBACd,CAAC,IAAI,KAAK,GAAG,QAAQ,CAAC;oBACtB,CAAC,IAAI,UAAU,CAAC;oBAChB,SAAS,GAAG,OAAO,CAAC;oBACpB,iBAAiB,GAAG,QAAQ,CAAC;oBAC7B,MAAM;gBACV,KAAK,WAAW;oBACZ,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;oBACf,CAAC,IAAI,QAAQ,CAAC;oBACd,SAAS,GAAG,QAAQ,CAAC;oBACrB,MAAM;gBACV,KAAK,cAAc;oBACf,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;oBACf,CAAC,IAAI,MAAM,GAAG,QAAQ,CAAC;oBACvB,SAAS,GAAG,QAAQ,CAAC;oBACrB,iBAAiB,GAAG,QAAQ,CAAC;oBAC7B,MAAM;gBACV,KAAK,eAAe;oBAChB,CAAC,IAAI,QAAQ,CAAC;oBACd,CAAC,IAAI,QAAQ,CAAC;oBACd,MAAM;gBACV,KAAK,gBAAgB;oBACjB,CAAC,IAAI,KAAK,GAAG,QAAQ,CAAC;oBACtB,CAAC,IAAI,QAAQ,CAAC;oBACd,SAAS,GAAG,OAAO,CAAC;oBACpB,MAAM;gBACV,KAAK,kBAAkB;oBACnB,CAAC,IAAI,QAAQ,CAAC;oBACd,CAAC,IAAI,MAAM,GAAG,QAAQ,CAAC;oBACvB,iBAAiB,GAAG,QAAQ,CAAC;oBAC7B,MAAM;gBACV,KAAK,mBAAmB;oBACpB,CAAC,IAAI,KAAK,GAAG,QAAQ,CAAC;oBACtB,CAAC,IAAI,MAAM,GAAG,QAAQ,CAAC;oBACvB,SAAS,GAAG,OAAO,CAAC;oBACpB,iBAAiB,GAAG,QAAQ,CAAC;oBAC7B,MAAM;aACb;SACJ;QAED,GAAG,GAAG,GAAG,IAAI,EAAmC,CAAC;QACjD,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACV,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACV,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC;QACtB,GAAG,CAAC,aAAa,GAAG,iBAAiB,CAAC;QAEtC,OAAO,GAAG,CAAC;IACf,CAAC;;ICkBM,IAAM,sBAAsB,GAAG,eAAe,CAAC;IAGtD,IAAM,mBAAmB,GAAI,mBAA2B,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAA8B,CAAC;IACzG,IAAM,sBAAsB,GAAG,MAAM,CAAC,mBAAmB,EAAE,UAAC,GAAG,EAAE,GAAG;QAChE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAChB,OAAO,GAAG,CAAC;IACf,CAAC,EAAE,EAAC,MAAM,EAAE,KAAK,EAAoD,CAAC,CAAC;IAevE,IAAI,iBAAiB,GAAG,EAAmC,CAAC;IAC5D,IAAI,eAAe,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAYnD;QA+II,iBAAY,KAAa;YA7IzB,OAAE,GAAW,IAAI,EAAE,CAAA;YAsCnB,cAAS,GAAoB,EAAE,CAAA;YA4E/B,kBAAa,GAAc,EAAE,CAAA;YAO7B,WAAM,GAA6B,EAAE,CAAA;YAqBjC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACrB;QAES,uBAAK,GAAf,UAAgB,KAAa;YAEzB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACpB;QAOD,uBAAK,GAAL,UAAM,EAAU,EAAE,EAAU,EAAE,CAAgB;YAC1C,QAAQ,IAAI,CAAC,SAAS;gBAClB,KAAK,YAAY;oBACb,EAAE,GAAG,CAAC,CAAC;oBACP,MAAM;gBACV,KAAK,UAAU;oBACX,EAAE,GAAG,CAAC,CAAC;oBACP,MAAM;aACb;YAED,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YACvB,IAAI,CAAC,CAAC,EAAE;gBACJ,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;aAC3C;YACD,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACX,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAEX,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;QAKD,8BAAY,GAAZ,eAAiB;QAIjB,6BAAW,GAAX,eAAgB;QAIhB,wBAAM,GAAN;YACI,IAAI,CAAC,eAAe,EAAE,CAAC;YAEvB,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,eAAe,EAAE,CAAC;aAC1B;SACJ;QAED,iCAAe,GAAf,UAAgB,WAAqB;YAEjC,IAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;YACjC,IAAI,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,WAAW,CAAC,EAAE;gBAC3C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;oBAClB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;iBACxB;gBACD,IAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;gBACnC,IAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC;gBACjC,IAAM,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;gBAErD,IAAI,SAAS,SAAW,CAAC;gBACzB,IAAI,iBAAiB,SAAmB,CAAC;gBAEzC,IAAI,gBAAgB,GAAG,KAAK,CAAC;gBAG7B,kBAAkB,CAAC,MAAM,GAAG,OAAO,GAAG,IAAwB,GAAG,IAAI,CAAC;gBAEtE,IAAI,WAAW,GAAG,KAAK,CAAC;gBAGxB,kBAAkB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAGzC,IAAI,UAAU,CAAC,QAAQ,IAAI,IAAI,EAAE;oBAC7B,IAAI,UAAU,GAAG,eAAe,CAAC;oBACjC,IAAI,UAAU,CAAC,UAAU,EAAE;wBACvB,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;qBAC1C;yBACI;wBACD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;qBAC3C;oBACD,IAAI,CAAC,OAAO,EAAE;wBACV,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;qBAC7C;oBAED,IAAI,IAAI,CAAC,qBAAqB,EAAE;wBAC5B,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;qBACzE;yBACI;wBACD,qBAAqB,CAAC,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;qBACpE;oBAID,kBAAkB,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;oBAC3C,kBAAkB,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;oBAI3C,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC;oBACpC,iBAAiB,GAAG,iBAAiB,CAAC,aAAa,CAAC;oBAEpD,IAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;oBACrC,IAAI,UAAU,IAAI,UAAU,CAAC,QAAQ,IAAI,IAAI,EAAE;wBAC3C,IAAI,UAAU,SAAA,CAAC;wBACf,IAAI,UAAU,SAAA,CAAC;wBACf,IAAI,UAAU,KAAK,QAAQ,EAAE;4BACzB,UAAU,GAAG,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC;4BACpC,UAAU,GAAG,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC;yBACxC;6BACI;4BACD,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;4BAC3D,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;yBAC/D;wBAED,WAAW,GAAG,IAAI,CAAC;wBACnB,kBAAkB,CAAC,OAAO,GAAG,CAAC,kBAAkB,CAAC,CAAC,GAAG,UAAU,IAAI,OAAO,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;wBAC/F,kBAAkB,CAAC,OAAO,GAAG,CAAC,kBAAkB,CAAC,CAAC,GAAG,UAAU,IAAI,OAAO,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;qBAClG;iBACJ;gBAGD,IAAI,UAAU,CAAC,QAAQ,IAAI,IAAI,EAAE;oBAC7B,kBAAkB,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;iBACrD;gBAGD,IAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;gBACrC,IAAI,UAAU,EAAE;oBACZ,kBAAkB,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;oBACtC,kBAAkB,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;oBAGtC,IAAI,CAAC,WAAW,EAAE;wBACd,kBAAkB,CAAC,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;wBAC5C,kBAAkB,CAAC,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;qBAC/C;iBACJ;gBAGD,IAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,IAAI,IAAI;uBACnC,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;sBACtF,UAAU,CAAC,MAAM,CAAC;gBACxB,IAAM,qBAAqB,GAAG,IAAI,CAAC,sBAAsB,KAAK,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,CAAC;gBAEhG,IAAI,QAAQ,SAAA,CAAC;gBACb,IAAI,UAAU,SAAA,CAAC;gBACf,IAAI,UAAU,SAAA,CAAC;gBACf,IAAI,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;oBAIpC,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC;oBACjC,UAAU,GAAG,UAAU,CAAC,YAAY,CAAC;oBAErC,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK,MAAM,EAAE;wBACzC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;qBACvC;oBACD,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,KAAK,MAAM,EAAE;wBAC7C,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;wBAChD,UAAU,GAAG,IAAI,CAAC;qBACrB;iBACJ;qBACI;oBACD,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC;oBAClC,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC;oBAEtC,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK,MAAM,EAAE;wBACzC,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;qBACpC;oBAID,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,KAAK,MAAM,EAAE;wBAG7C,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;wBAC7C,UAAU,GAAG,IAAI,CAAC;qBACrB;iBACJ;gBAED,QAAQ,GAAG,QAAQ,IAAI,MAAM,CAAC;gBAE9B,IAAI,QAAQ,KAAK,qBAAqB,CAAC,IAAI;uBACpC,UAAU,KAAK,qBAAqB,CAAC,MAAM;uBAC3C,UAAU,KAAK,qBAAqB,CAAC,UAAU;uBAC/C,SAAS,KAAK,qBAAqB,CAAC,KAAK;uBACzC,iBAAiB,KAAK,qBAAqB,CAAC,aAAa,EAC9D;oBAEE,gBAAgB,GAAG,IAAI,CAAC;oBAExB,qBAAqB,CAAC,IAAI,GAAG,QAAQ,CAAC;oBACtC,qBAAqB,CAAC,MAAM,GAAG,UAAU,CAAC;oBAC1C,qBAAqB,CAAC,UAAU,GAAG,UAAU,CAAC;oBAC9C,qBAAqB,CAAC,KAAK,GAAG,SAAS,CAAC;oBACxC,qBAAqB,CAAC,aAAa,GAAG,iBAAiB,CAAC;oBAExD,MAAM,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,CAAC;iBACrD;gBAID,MAAM,CAAC,OAAO,IAAI,UAAU,CAAC;gBAE7B,IAAI,gBAAgB,EAAE;oBAElB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;iBAC3B;aACJ;SACJ;QAES,iCAAe,GAAzB;YACI,OAAO,IAAI,CAAC;SACf;QAES,mCAAiB,GAA3B;YACI,OAAO,MAAM,CAAC;SACjB;QAES,qCAAmB,GAA7B,UAA8B,QAAgB;YAC1C,OAAO,MAAM,CAAC;SACjB;QAES,gCAAc,GAAxB;YACI,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;SACrF;QAES,kCAAgB,GAA1B,UAA2B,QAAgB;YACvC,IAAM,eAAe,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACpE,IAAI,QAAQ,GAAG,OAAO,eAAe,KAAK,QAAQ,IAAI,KAAK,CAAC,eAAyB,CAAC,CAAC;YACvF,IAAI,CAAC,QAAQ,EAAE;gBACX,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;aACjC;YAED,IAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBACxB,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;aACxE;YACD,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAChB,OAAO,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;SACtC;QAED,0BAAQ,GAAR,UACI,EAA+C,EAC/C,OAAiB,KACjB;QAEM,wBAAM,GAAhB,UAAiB,GAAW,EAAE,KAAc;YACxC,IAAI,GAAG,KAAK,YAAY,EAAE;gBACtB,IAAI,CAAC,aAAa,CAAC,KAA0B,CAAC,CAAC;aAClD;iBACI,IAAI,GAAG,KAAK,aAAa,EAAE;gBAC5B,IAAI,CAAC,cAAc,CAAC,KAAe,CAAC,CAAC;aACxC;iBACI,IAAI,GAAG,KAAK,UAAU,EAAE;gBACzB,IAAI,CAAC,WAAW,CAAC,KAAa,CAAC,CAAC;aACnC;iBACI,IAAI,GAAG,KAAK,OAAO,EAAE;gBACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;aAC7B;iBACI;gBACA,IAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aAC9B;SACJ;QAKD,sBAAI,GAAJ;YACI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;QAKD,sBAAI,GAAJ;YACI,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;QAID,sBAAI,GAAJ,UAAK,QAA6B,EAAE,KAAe;YAC/C,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;gBAC9B,IAAI,CAAC,MAAM,CAAC,QAA8B,EAAE,KAAmC,CAAC,CAAC;aACpF;iBACI,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBACzB,IAAI,GAAG,GAAG,QAAkB,CAAC;gBAC7B,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACrC,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBACrB,IAAI,CAAC,MAAM,CAAC,GAAyB,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;iBACzD;aACJ;YACD,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;SACf;QAGD,0CAAwB,GAAxB,UAAyB,OAAqB;YAC1C,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAIjC,IAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,IAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAM,mBAAmB,GAAG,QAAQ,CAAC,qBAAqB,CAAC;gBAG3D,IAAI,QAAQ,CAAC,OAAO,EAAE,IAAI,mBAAmB,IAAI,mBAAmB,KAAK,sBAAsB,EAAE;oBAC7F,SAAS;iBACZ;gBAED,IAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;gBAGvC,IAAM,MAAM,GAAG,UAAU;sBAClB,WAAmB,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC;gBAErD,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;aAC3B;SACJ;QAES,oCAAkB,GAA5B,UAA6B,OAAqB;YAC9C,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;YACpC,IAAI,CAAC,WAAW,EAAE;gBAEd,WAAW,GAAG,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;aACxC;YACD,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;gBAC/C,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;aAC5C;YAED,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,mBAAmB,CAAC,CAAC;SACxE;QAES,sCAAoB,GAA9B,UACI,OAAwB,EAAE,WAA4B,EAAE,WAA8B;YAEtF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,IAAI,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAGzB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,GAAG,IAAI,WAAW,CAAC,EAAE;oBAC9C,WAAmB,CAAC,GAAG,CAAC,GAAI,IAAY,CAAC,GAAG,CAAC,CAAC;iBAClD;aACJ;SACJ;QAKD,0BAAQ,GAAR;YACI,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;SACxC;QAKD,0BAAQ,GAAR,UAAS,IAAY;YACjB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAC5B;QAMD,6BAAW,GAAX,UAAY,IAAY;YACpB,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;gBACf,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;aACrB;YACD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;SACvB;QAKD,6BAAW,GAAX,UAAY,WAAqB;YAC7B,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;SAE7D;QASD,0BAAQ,GAAR,UAAS,SAAiB,EAAE,iBAA2B,EAAE,WAAqB,EAAE,kBAA4B;YAGxG,IAAM,aAAa,GAAG,SAAS,KAAK,sBAAsB,CAAC;YAC3D,IAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAElC,IAAI,CAAC,SAAS,IAAI,aAAa,EAAE;gBAE7B,OAAO;aACV;YAED,IAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;YACzC,IAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC;YAK1C,IAAI,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,iBAAiB,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;gBAC7F,OAAO;aACV;YAED,IAAI,KAAK,CAAC;YACV,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,aAAa,EAAE;gBACnC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;aACtC;YAED,IAAI,CAAC,KAAK,EAAE;gBACR,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;aACnD;YAED,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,EAAE;gBAC1B,QAAQ,CAAC,WAAS,SAAS,iBAAc,CAAC,CAAC;gBAC3C,OAAO;aACV;YAED,IAAI,CAAC,aAAa,EAAE;gBAChB,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;aACxC;YAED,IAAM,aAAa,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,KAAK,kBAAkB,CAAC,CAAC;YAE5E,IAAI,aAAa,EAAE;gBAEf,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;aACpC;YAED,IAAI,CAAC,cAAc,CACf,SAAS,EACT,KAAK,EACL,IAAI,CAAC,YAAY,EACjB,iBAAiB,EACjB,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,YAAY,IAAI,YAAY,CAAC,QAAQ,GAAG,CAAC,EAC5E,YAAY,CACf,CAAC;YAGF,IAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;YACtC,IAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;YAClC,IAAI,WAAW,EAAE;gBAEb,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;aAClF;YACD,IAAI,SAAS,EAAE;gBACX,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;aAChF;YAED,IAAI,aAAa,EAAE;gBAEf,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;gBAExB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;aAC1B;iBACI;gBACD,IAAI,CAAC,iBAAiB,EAAE;oBACpB,IAAI,CAAC,aAAa,GAAG,CAAC,SAAS,CAAC,CAAC;iBACpC;qBACI;oBACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBACtC;aACJ;YAGD,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAE/B,IAAI,CAAC,UAAU,EAAE,CAAC;YAElB,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,EAAE;gBAElC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAGlC,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC;aAC/B;YAGD,OAAO,KAAK,CAAC;SAChB;QAMD,2BAAS,GAAT,UAAU,MAAgB,EAAE,WAAqB,EAAE,kBAA4B;YAC3E,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gBAChB,IAAI,CAAC,WAAW,EAAE,CAAC;aACtB;iBACI;gBACD,IAAM,YAAY,GAAmB,EAAE,CAAC;gBACxC,IAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;gBACzC,IAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC1B,IAAI,SAAS,GAAG,GAAG,KAAK,aAAa,CAAC,MAAM,CAAC;gBAC7C,IAAI,SAAS,EAAE;oBACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;wBAC1B,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE;4BAChC,SAAS,GAAG,KAAK,CAAC;4BAClB,MAAM;yBACT;qBACJ;iBACJ;gBACD,IAAI,SAAS,EAAE;oBACX,OAAO;iBACV;gBAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oBAC1B,IAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC5B,IAAI,QAAQ,SAAc,CAAC;oBAC3B,IAAI,IAAI,CAAC,UAAU,EAAE;wBACjB,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;qBACjD;oBACD,IAAI,CAAC,QAAQ,EAAE;wBACX,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;qBACrC;oBACD,IAAI,QAAQ,EAAE;wBACV,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;qBAC/B;iBACJ;gBAED,IAAM,YAAY,GAAG,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBAC3C,IAAM,aAAa,GAAG,CAAC,EAAE,CAAC,YAAY,IAAI,YAAY,CAAC,UAAU,KAAK,kBAAkB,CAAC,CAAC;gBAC1F,IAAI,aAAa,EAAE;oBAEf,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;iBACpC;gBAED,IAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;gBACpD,IAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC;gBAE1C,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC;gBAE3C,IAAI,CAAC,cAAc,CACf,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAChB,WAAW,EACX,IAAI,CAAC,YAAY,EACjB,KAAK,EACL,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,YAAY,IAAI,YAAY,CAAC,QAAQ,GAAG,CAAC,EAC5E,YAAY,CACf,CAAC;gBAEF,IAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;gBACtC,IAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;gBAClC,IAAI,WAAW,EAAE;oBACb,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;iBAC7D;gBACD,IAAI,SAAS,EAAE;oBACX,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;iBAC3D;gBAED,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAG/B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;gBACpC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAElB,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,EAAE;oBAElC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;oBAGlC,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC;iBAC/B;aACJ;SACJ;QAKD,0BAAQ,GAAR;YACI,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,OAAO,CAAC,QAAQ,IAAI,QAAQ,EAAE;gBAC1B,IAAI,QAAQ,CAAC,MAAM,EAAE;oBACjB,QAAQ,GAAG,IAAI,CAAC;oBAChB,MAAM;iBACT;gBACD,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;aAC9B;YACD,OAAO,QAAQ,CAAC;SACnB;QAKO,yCAAuB,GAA/B;YACI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,IAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,QAAQ,CAAC,UAAU,EAAE;oBACrB,QAAQ,CAAC,YAAY,CAAE,IAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;iBAC7D;aACJ;SACJ;QAMD,6BAAW,GAAX,UAAY,KAAa;YACrB,IAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YAC/C,IAAI,GAAG,IAAI,CAAC,EAAE;gBACV,IAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;gBACjD,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC7B,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;aACjC;SACJ;QAQD,8BAAY,GAAZ,UAAa,QAAgB,EAAE,QAAgB,EAAE,QAAiB;YAC9D,IAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YACjD,IAAM,GAAG,GAAG,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAC7C,IAAM,cAAc,GAAG,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7D,IAAI,GAAG,IAAI,CAAC,EAAE;gBACV,IAAI,CAAC,cAAc,EAAE;oBAEjB,aAAa,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;iBACjC;qBACI;oBAED,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;iBAChC;aACJ;iBACI,IAAI,QAAQ,IAAI,CAAC,cAAc,EAAE;gBAClC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAChC;YACD,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;SACjC;QAKD,6BAAW,GAAX,UAAY,KAAa,EAAE,MAAe;YACtC,IAAI,MAAM,EAAE;gBACR,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;aAC9B;iBACI;gBACD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aAC3B;SACJ;QAES,8BAAY,GAAtB,UAAuB,MAAsB;YACzC,IAAM,WAAW,GAAiB,EAAE,CAAC;YACrC,IAAI,gBAAmC,CAAC;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACpC,IAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACxB,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;gBAE3B,IAAI,KAAK,CAAC,UAAU,EAAE;oBAClB,gBAAgB,GAAG,gBAAgB,IAAI,EAAE,CAAC;oBAC1C,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;iBAC9C;aACJ;YACD,IAAI,gBAAgB,EAAE;gBAClB,WAAW,CAAC,UAAU,GAAG,gBAAgB,CAAC;aAC7C;YAED,OAAO,WAAW,CAAC;SACtB;QAES,gCAAc,GAAxB,UACI,SAAiB,EACjB,KAAmB,EACnB,WAAyB,EACzB,iBAA0B,EAC1B,UAAmB,EACnB,YAAkC;YAElC,IAAM,oBAAoB,GAAG,EAAE,KAAK,IAAI,iBAAiB,CAAC,CAAC;YAI3D,IAAI,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE;gBAE3B,IAAI,CAAC,UAAU,GAAG,MAAM,CACpB,EAAE,EACF,iBAAiB,GAAG,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,UAAU,CAC/D,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;aAC7C;iBACI,IAAI,oBAAoB,EAAE;gBAC3B,IAAI,WAAW,CAAC,UAAU,EAAE;oBACxB,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;iBAC5C;aACJ;YAED,IAAM,gBAAgB,GAAoB,EAAE,CAAC;YAC7C,IAAI,aAAa,GAAG,KAAK,CAAC;YAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjD,IAAM,GAAG,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAM,mBAAmB,GAAG,UAAU,IAAI,sBAAsB,CAAC,GAAG,CAAC,CAAC;gBAEtE,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;oBAC7B,IAAI,mBAAmB,EAAE;wBACrB,aAAa,GAAG,IAAI,CAAC;wBACrB,gBAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;qBACtC;yBACI;wBAEA,IAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;qBACnC;iBACJ;qBACI,IAAI,oBAAoB,EAAE;oBAC3B,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;wBAC1B,IAAI,mBAAmB,EAAE;4BACrB,aAAa,GAAG,IAAI,CAAC;4BACrB,gBAAgB,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;yBAC5C;6BACI;4BAEA,IAAY,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;yBACzC;qBACJ;iBACJ;aACJ;YAED,IAAI,CAAC,UAAU,EAAE;gBAGb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC5C,IAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBACnC,IAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;oBAEvC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE;wBACrB,QAAQ,CAAC,kBAAkB,CAAC,UAAU;8BAC/B,CAAC,KAAK,IAAI,WAAW,EAAU,UAAU,CAAC;+BAC1C,KAAK,IAAI,WAAW,CAAC,CAC3B,CAAC;qBACL;iBACJ;aACJ;YAED,IAAI,aAAa,EAAE;gBACf,IAAI,CAAC,gBAAgB,CACjB,SAAS,EACT,gBAAyB,EACzB,YAAY,CACf,CAAC;aACL;SACJ;QAMO,kCAAgB,GAAxB,UAAyB,WAAoB;YACzC,IAAI,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;gBAC/C,AAA2C;oBACvC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;iBAC9D;aAEJ;YAED,IAAI,WAAW,KAAK,IAAI,EAAE;gBACtB,AAA2C;oBACvC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;iBACtD;aAEJ;YAED,IAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,IAAI,EAAE,EAAE;gBAEJ,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;aAC/B;YAED,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC;YACtB,WAAW,CAAC,YAAY,GAAG,IAA0B,CAAC;SACzD;QAEO,kCAAgB,GAAxB,UAAyB,WAAoB;YACzC,IAAI,WAAW,CAAC,IAAI,EAAE;gBAClB,WAAW,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aAClD;YAED,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;YACxB,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC;SACnC;QAKD,6BAAW,GAAX;YACI,OAAO,IAAI,CAAC,SAAS,CAAC;SACzB;QAOD,6BAAW,GAAX,UAAY,QAAc;YAEtB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;gBAC/C,IAAI,CAAC,cAAc,EAAE,CAAC;aACzB;YAED,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAEhC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;YAC1B,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;QAKD,gCAAc,GAAd;YACI,IAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;YAChC,IAAI,QAAQ,EAAE;gBACV,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,IAAI,CAAC,UAAU,EAAE,CAAC;aACrB;SACJ;QAKD,gCAAc,GAAd;YACI,OAAO,IAAI,CAAC,YAAY,CAAC;SAC5B;QAKD,gCAAc,GAAd,UAAe,MAAc;YACzB,IAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC;YAC9C,IAAI,mBAAmB,KAAK,MAAM,EAAE;gBAChC,OAAO;aACV;YAED,IAAI,mBAAmB,IAAI,mBAAmB,KAAK,MAAM,EAAE;gBACvD,IAAI,CAAC,iBAAiB,EAAE,CAAC;aAC5B;YACD,AAA2C;gBACvC,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;oBACrC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;iBAC9D;aACJ;YAED,MAAM,CAAC,kBAAkB,GAAG,IAAI,aAAa,EAAE,CAAC;YAEhD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAE9B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;YAE3B,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;QAKD,+BAAa,GAAb,UAAc,GAAsB;YAEhC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBAClB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;aACxB;YACD,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;QAKD,kCAAgB,GAAhB;YACI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;QAKD,mCAAiB,GAAjB;YACI,IAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;YACjC,IAAI,MAAM,EAAE;gBACR,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC;gBACjC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBACzB,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;gBACnC,IAAI,CAAC,UAAU,EAAE,CAAC;aACrB;SACJ;QAED,kCAAgB,GAAhB;YACI,OAAO,IAAI,CAAC,UAAU,CAAC;SAC1B;QAED,kCAAgB,GAAhB,UAAiB,SAAmB;YAEhC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;gBAClD,IAAI,CAAC,mBAAmB,EAAE,CAAC;aAC9B;YAED,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YAEjC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAE5B,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;QAED,qCAAmB,GAAnB;YACI,IAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;YAClC,IAAI,SAAS,EAAE;gBACX,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,UAAU,EAAE,CAAC;aACrB;SACJ;QAID,4BAAU,GAAV;YACI,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC;YAC3B,IAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,IAAI,EAAE,EAAE;gBACJ,IAAI,IAAI,CAAC,SAAS,EAAE;oBAChB,EAAE,CAAC,YAAY,EAAE,CAAC;iBACrB;qBACI;oBACD,EAAE,CAAC,OAAO,EAAE,CAAC;iBAChB;aACJ;YAGD,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;aAClC;SACJ;QAMD,uBAAK,GAAL;YACI,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;QAEO,uCAAqB,GAA7B,UAA8B,OAAgB;YAC1C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;YACzB,IAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;YACtC,IAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;YAClC,IAAI,WAAW,EAAE;gBACb,WAAW,CAAC,SAAS,GAAG,OAAO,CAAC;aACnC;YACD,IAAI,SAAS,EAAE;gBACX,SAAS,CAAC,SAAS,GAAG,OAAO,CAAC;aACjC;SACJ;QAMD,6BAAW,GAAX,UAAY,EAAe;YACvB,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,EAAE;gBAClB,OAAO;aACV;YAED,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;YAEf,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,IAAI,SAAS,EAAE;gBACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACvC,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC1C;aACJ;YAED,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;aAClC;YACD,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;aACrC;YACD,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;aACnC;SACJ;QAMD,kCAAgB,GAAhB,UAAiB,EAAe;YAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACZ,OAAO;aACV;YAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YAEjB,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,IAAI,SAAS,EAAE;gBACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACvC,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC7C;aACJ;YAED,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;aACvC;YACD,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;aAC1C;YACD,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;aACxC;SACJ;QAcD,yBAAO,GAAP,UAAQ,GAAY,EAAE,IAAc,EAAE,sBAAgC;YAClE,IAAI,MAAM,GAAG,GAAG,GAAI,IAAY,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YAE7C,AAA2C;gBACvC,IAAI,CAAC,MAAM,EAAE;oBACT,QAAQ,CACJ,YAAY;0BACV,GAAG;0BACH,8BAA8B;0BAC9B,IAAI,CAAC,EAAE,CACZ,CAAC;oBACF,OAAO;iBACV;aACJ;YAED,IAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,sBAAsB,CAAC,CAAC;YACpE,GAAG,KAAK,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;YACnC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAChC,OAAO,QAAQ,CAAC;SACnB;QAED,6BAAW,GAAX,UAAY,QAAuB,EAAE,GAAW;YAC5C,IAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;YAErB,IAAM,EAAE,GAAG,IAAI,CAAC;YAEhB,QAAQ,CAAC,MAAM,CAAC;gBACZ,EAAE,CAAC,qBAAqB,CAAC,GAAa,CAAC,CAAC;aAC3C,CAAC,CAAC,IAAI,CAAC;gBACJ,IAAM,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;gBAE/B,IAAM,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;gBACzC,IAAI,GAAG,IAAI,CAAC,EAAE;oBACV,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;iBAC5B;aACJ,CAAC,CAAC;YAEH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAG9B,IAAI,EAAE,EAAE;gBACJ,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;aACtC;YAGD,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;SACrB;QAED,uCAAqB,GAArB,UAAsB,GAAW;YAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;QAMD,+BAAa,GAAb,UAAc,KAAc,EAAE,aAAuB;YACjD,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,IAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC;YAC7B,IAAM,aAAa,GAAoB,EAAE,CAAC;YAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC1B,IAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,QAAQ,CAAC,KAAK,EAAE;oBACpC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBAChC;qBACI;oBACD,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBAChC;aACJ;YACD,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC;YAE/B,OAAO,IAAI,CAAC;SACf;QA0BD,2BAAS,GAAT,UAAU,MAAa,EAAE,GAA0B,EAAE,cAA0C;YAC3F,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;SAChD;QAQD,6BAAW,GAAX,UACI,MAAa,EAAE,GAAyB,EAAE,cAA0C;YAEpF,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;SACtD;QAES,kCAAgB,GAA1B,UACI,SAAiB,EAAE,MAAa,EAAE,GAA0B,EAAE,cAA0C;YAExG,IAAM,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;YAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACvC,SAAS,CAAC,CAAC,CAAC,CAAC,qBAAqB,GAAG,SAAS,CAAC;aAClD;SACJ;QAKD,iCAAe,GAAf;YACI,OAAO,IAAI,CAAC;SACf;QAED,8BAAY,GAAZ;YACI,OAAO,IAAI,CAAC;SACf;QAuBgB,wBAAgB,GAAG,CAAC;YACjC,IAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC;YAClC,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;YACzB,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;YAElB,OAAO,CAAC,MAAM;gBACd,OAAO,CAAC,MAAM;oBACd,OAAO,CAAC,OAAO;wBACf,OAAO,CAAC,SAAS;4BACjB,OAAO,CAAC,QAAQ;gCAChB,OAAO,CAAC,UAAU;oCAClB,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;YAE1B,OAAO,CAAC,OAAO,GAAG,UAAU,CAAC;YAG7B,IAAM,IAAI,GAAwB,EAAE,CAAC;YACrC,SAAS,kBAAkB,CAAC,GAAW,EAAE,IAAY,EAAE,IAAY;gBAC/D,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,EAAE;oBAC1B,OAAO,CAAC,IAAI,CAAC,kBAAgB,GAAG,oCAA+B,IAAI,YAAO,IAAI,cAAW,CAAC,CAAC;oBAC3F,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;iBAClC;aACJ;YAED,SAAS,oBAAoB,CACzB,GAAW,EACX,UAAkB,EAClB,IAAY,EACZ,IAAY;gBAEZ,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE;oBAChC,GAAG,EAAH;wBACI,AAA2C;4BACvC,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;yBACvC;wBACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;4BACnB,IAAM,GAAG,GAAa,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;4BAC5C,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;yBAC3B;wBACD,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;qBAC3B;oBACD,GAAG,EAAH,UAAI,GAAa;wBACb,AAA2C;4BACvC,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;yBACvC;wBACD,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;wBACpB,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;wBACpB,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC;wBACvB,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;qBAC3B;iBACJ,CAAC,CAAC;gBACH,SAAS,YAAY,CAAC,IAAS,EAAE,GAAa;oBAC1C,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE;wBAC1B,GAAG;4BACC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;yBACrB;wBACD,GAAG,EAAH,UAAI,GAAW;4BACX,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;yBACpB;qBACJ,CAAC,CAAC;oBACH,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE;wBAC1B,GAAG;4BACC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;yBACrB;wBACD,GAAG,EAAH,UAAI,GAAW;4BACX,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;yBACpB;qBACJ,CAAC,CAAC;iBACN;aACJ;YACD,IAAI,MAAM,CAAC,cAAc,EAGvB;gBACE,oBAAoB,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACzD,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAClE,oBAAoB,CAAC,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;aACzE;SACJ,GAAG,CAAA;QACR,cAAC;KA34CD,IA24CC;IAED,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACzB,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAE9B,SAAS,SAAS,CACd,UAAsB,EACtB,MAAuB,EACvB,GAAyB,EACzB,cAA+B,EAC/B,OAAiB;QAEjB,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;QAChB,IAAM,SAAS,GAAoB,EAAE,CAAC;QACtC,gBAAgB,CACZ,UAAU,EACV,EAAE,EACF,UAAU,EACV,MAAM,EACN,GAAG,EACH,cAAc,EACd,SAAS,EACT,OAAO,CACV,CAAC;QAEF,IAAI,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC;QACnC,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,IAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;QACzB,IAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC;QAE/B,IAAM,MAAM,GAAG;YACX,YAAY,GAAG,IAAI,CAAC;YACpB,WAAW,EAAE,CAAC;YACd,IAAI,WAAW,IAAI,CAAC,EAAE;gBAClB,YAAY;uBACL,OAAO,IAAI,OAAO,EAAE;uBACpB,UAAU,IAAI,UAAU,EAAE,CAAC,CAAC;aACtC;SACJ,CAAC;QAEF,IAAM,SAAS,GAAG;YACd,WAAW,EAAE,CAAC;YACd,IAAI,WAAW,IAAI,CAAC,EAAE;gBAClB,YAAY;uBACL,OAAO,IAAI,OAAO,EAAE;uBACpB,UAAU,IAAI,UAAU,EAAE,CAAC,CAAC;aACtC;SACJ,CAAC;QAIF,IAAI,CAAC,WAAW,EAAE;YACd,OAAO,IAAI,OAAO,EAAE,CAAC;SACxB;QAGD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE;YAEpC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAC,MAAM,EAAE,OAAO;gBAChC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;aACvB,CAAC,CAAC;SACN;QAID,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,IAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,MAAM,EAAE;gBACR,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACzB;YACD,IAAI,SAAS,EAAE;gBACX,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;aAC/B;YACD,IAAI,GAAG,CAAC,KAAK,EAAE;gBACX,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;aACnC;YACD,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;SAC9B;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,SAAS,cAAc,CAAC,MAAgB,EAAE,MAAgB,EAAE,GAAW;QACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;SACzB;IACL,CAAC;IAED,SAAS,SAAS,CAAC,KAAY;QAC3B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,SAAS,SAAS,CAAC,MAAuB,EAAE,MAAuB,EAAE,GAAW;QAC5E,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;YAC1B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;gBAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;aACpB;YAED,IAAI,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;gBAC3B,IAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;gBAC/B,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,GAAG,EAAE;oBAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;oBACjD,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;iBACjD;aACJ;iBACI;gBACD,IAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAU,CAAC;gBACvC,IAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAU,CAAC;gBAEvC,IAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;gBAC9B,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE;oBAEtB,IAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;oBAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;wBAC3B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;4BACf,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;yBAC3D;6BACI;4BACD,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;yBACpD;qBACJ;iBACJ;qBACI;oBACD,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;iBAC9C;gBAED,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;aACvC;SACJ;aACI;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;SAC7B;IACL,CAAC;IAED,SAAS,WAAW,CAAC,IAAS,EAAE,IAAS;QACrC,OAAO,IAAI,KAAK,IAAI;eAEb,WAAW,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/E,CAAC;IAED,SAAS,aAAa,CAAC,IAAuB,EAAE,IAAuB;QACnE,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM,EAAE;YACrB,OAAO,KAAK,CAAC;SAChB;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE;gBACrB,OAAO,KAAK,CAAC;aAChB;SACJ;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,SAAS,gBAAgB,CACrB,UAAsB,EACtB,MAAc,EACd,UAA2B,EAC3B,MAAuB,EACvB,GAAyB,EACzB,cAAsC,EACtC,SAA0B,EAC1B,OAAgB;QAEhB,IAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,IAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC9B,IAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;QACxB,IAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC9B,IAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;QAClC,IAAM,UAAU,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAE7C,IAAM,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC;QAE7C,IAAI,aAAa,GAAa,EAAE,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,IAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAW,CAAC;YACzC,IAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YAEnC,IACI,SAAS,IAAI,IAAI,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI;oBAC7C,UAAU,IAAK,cAAkC,CAAC,QAAQ,CAAC,CAAC,EAClE;gBACE,IAAI,QAAQ,CAAC,SAAS,CAAC;uBAChB,CAAC,WAAW,CAAC,SAAS,CAAC;uBACvB,CAAC,gBAAgB,CAAC,SAAS,CAAC,EACjC;oBACE,IAAI,MAAM,EAAE;wBAIR,IAAI,CAAC,OAAO,EAAE;4BACV,UAAU,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;4BACjC,UAAU,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;yBAC5C;wBACD,SAAS;qBACZ;oBACD,gBAAgB,CACZ,UAAU,EACV,QAAQ,EACR,UAAU,CAAC,QAAQ,CAAC,EACpB,SAAS,EACT,GAAG,EACH,cAAc,IAAK,cAAkC,CAAC,QAAQ,CAAC,EAC/D,SAAS,EACT,OAAO,CACV,CAAC;iBACL;qBACI;oBACD,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBAChC;aACJ;iBACI,IAAI,CAAC,OAAO,EAAE;gBAEf,UAAU,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;gBACjC,UAAU,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;gBAGzC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAChC;SACJ;QAED,IAAI,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;QAElC,IAAI,CAAC,QAAQ,IAAI,MAAM,EAAE;YAGrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7C,IAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,QAAQ,CAAC,UAAU,KAAK,MAAM,EAAE;oBAChC,IAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;oBACtD,IAAI,UAAU,EAAE;wBACZ,IAAM,GAAG,GAAG,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;wBAC/C,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;qBAClC;iBACJ;aACJ;SACJ;QAKD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;YACZ,aAAa,GAAG,MAAM,CAAC,aAAa,EAAE,UAAA,GAAG,IAAI,OAAA,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,GAAA,CAAC,CAAC;YACzF,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;SACjC;QAED,IAAI,MAAM,GAAG,CAAC;gBAIN,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EACrC;YACE,IAAI,cAAc,SAAiB,CAAC;YACpC,IAAI,cAAc,SAAiB,CAAC;YACpC,IAAI,WAAW,SAAiB,CAAC;YACjC,IAAI,OAAO,EAAE;gBACT,cAAc,GAAG,EAAE,CAAC;gBACpB,IAAI,UAAU,EAAE;oBACZ,cAAc,GAAG,EAAE,CAAC;iBACvB;gBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC7B,IAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;oBAClC,cAAc,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;oBAChD,IAAI,UAAU,EAAE;wBACZ,cAAc,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;qBAC/C;yBACI;wBAOD,UAAU,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;qBAC3C;iBACJ;aACJ;iBACI,IAAI,UAAU,EAAE;gBACjB,WAAW,GAAG,EAAE,CAAC;gBACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC7B,IAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;oBAElC,WAAW,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAGzD,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;iBAC3C;aACJ;YAED,IAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,CAErE,eAAe,EAAE,UAAA,QAAQ,IAAI,OAAA,QAAQ,CAAC,UAAU,KAAK,MAAM,GAAA,CAC9D,GAAG,IAAI,CAAC,CAAC;YAEV,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC;YAC7B,IAAI,GAAG,CAAC,KAAK,EAAE;gBACX,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;aAC9B;YAED,IAAI,UAAU,IAAI,cAAc,EAAE;gBAC9B,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;aAC3D;YACD,IAAI,WAAW,EAAE;gBACb,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;aACxD;YAED,QAAQ,CAAC,YAAY,CACjB,QAAQ,IAAI,IAAI,GAAG,GAAG,GAAG,QAAQ,EACjC,OAAO,GAAG,cAAc,GAAG,MAAM,EACjC,aAAa,CAChB,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;YAEpB,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACzC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC5B;IACL,CAAC;;IC78DD;QAAoB,yBAAmB;QAOnC,eAAY,IAAiB;YAA7B,YACI,iBAAO,SAGV;YATQ,aAAO,GAAG,IAAI,CAAA;YAEf,eAAS,GAAc,EAAE,CAAA;YAM7B,KAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;SACnB;QAKD,2BAAW,GAAX;YACI,OAAO,IAAI,CAAC,SAAS,CAAC;SACzB;QAKD,wBAAQ,GAAR;YACI,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;SACjC;QAKD,uBAAO,GAAP,UAAQ,GAAW;YACf,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;SAC9B;QAKD,2BAAW,GAAX,UAAY,IAAY;YACpB,IAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;YAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE;oBAC3B,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;iBACtB;aACJ;SACJ;QAED,0BAAU,GAAV;YACI,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAChC;QAKD,mBAAG,GAAH,UAAI,KAAc;YACd,IAAI,KAAK,EAAE;gBACP,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE;oBACzC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;iBACtB;gBACD,AAA2C;oBACvC,IAAI,KAAK,CAAC,YAAY,EAAE;wBACpB,MAAM,8CAA8C,CAAC;qBACxD;iBACJ;aACJ;YAED,OAAO,IAAI,CAAC;SACf;QAKD,yBAAS,GAAT,UAAU,KAAc,EAAE,WAAoB;YAC1C,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI;mBAC7C,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,IAAI,EAAE;gBAE/C,IAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;gBAChC,IAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBAE1C,IAAI,GAAG,IAAI,CAAC,EAAE;oBACV,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;oBAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;iBACtB;aACJ;YAED,OAAO,IAAI,CAAC;SACf;QAED,uBAAO,GAAP,UAAQ,QAAiB,EAAE,QAAiB;YACxC,IAAM,GAAG,GAAGC,OAAc,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACrD,IAAI,GAAG,IAAI,CAAC,EAAE;gBACV,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;aACjC;YACD,OAAO,IAAI,CAAC;SACf;QAED,yBAAS,GAAT,UAAU,KAAc,EAAE,KAAa;YACnC,IAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;YAChC,IAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAE5B,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK,GAAG,EAAE;gBACnE,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;gBAExB,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;gBAClB,IAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;gBACrB,IAAI,EAAE,EAAE;oBACJ,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;iBAC5B;gBAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACtB;YAED,OAAO,IAAI,CAAC;SACf;QAED,sBAAM,GAAN,UAAO,KAAc;YACjB,IAAI,KAAK,CAAC,MAAM,EAAE;gBAEb,KAAK,CAAC,MAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACzC;YAED,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;YAEpB,IAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,IAAI,EAAE,IAAI,EAAE,KAAM,KAAe,CAAC,IAAI,EAAE;gBAEpC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;aACzB;YAED,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;SACtB;QAMD,sBAAM,GAAN,UAAO,KAAc;YACjB,IAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,IAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;YAEhC,IAAM,GAAG,GAAGA,OAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC5C,IAAI,GAAG,GAAG,CAAC,EAAE;gBACT,OAAO,IAAI,CAAC;aACf;YACD,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAExB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;YAEpB,IAAI,EAAE,EAAE;gBAEJ,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;aAC9B;YAED,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YAEnB,OAAO,IAAI,CAAC;SACf;QAKD,yBAAS,GAAT;YACI,IAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;YAChC,IAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,EAAE,EAAE;oBACJ,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;iBAC9B;gBACD,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;aACvB;YACD,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAEpB,OAAO,IAAI,CAAC;SACf;QAKD,yBAAS,GAAT,UACI,EAAwD,EACxD,OAAiB;YAEjB,IAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;YAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC1B,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;aAC9B;YACD,OAAO,IAAI,CAAC;SACf;QAOD,wBAAQ,GAAR,UACI,EAA4C,EAC5C,OAAW;YAEX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,IAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAExC,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE;oBAC3B,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;iBAC/B;aACJ;YACD,OAAO,IAAI,CAAC;SACf;QAED,2BAAW,GAAX,UAAY,EAAe;YACvB,iBAAM,WAAW,YAAC,EAAE,CAAC,CAAC;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,IAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAChC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;aACzB;SACJ;QAED,gCAAgB,GAAhB,UAAiB,EAAe;YAC5B,iBAAM,gBAAgB,YAAC,EAAE,CAAC,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,IAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAChC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;aAC9B;SACJ;QAED,+BAAe,GAAf,UAAgB,eAA2B;YAEvC,IAAM,OAAO,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7C,IAAM,QAAQ,GAAG,eAAe,IAAI,IAAI,CAAC,SAAS,CAAC;YACnD,IAAM,MAAM,GAAgB,EAAE,CAAC;YAC/B,IAAI,IAAI,GAAG,IAAI,CAAC;YAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAE1B,IAAI,KAAK,CAAC,MAAM,IAAK,KAAqB,CAAC,SAAS,EAAE;oBAClD,SAAS;iBACZ;gBAED,IAAM,SAAS,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC;gBAC1C,IAAM,SAAS,GAAG,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAQlD,IAAI,SAAS,EAAE;oBACX,YAAY,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;oBAC3D,IAAI,GAAG,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;iBACvB;qBACI;oBACD,IAAI,GAAG,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;oBACjC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;iBACzB;aACJ;YACD,OAAO,IAAI,IAAI,OAAO,CAAC;SAC1B;QACL,YAAC;IAAD,CAtQA,CAAoB,OAAO,GAsQ1B;IAED,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC;;ICrS/B;;;;;;;;;AAUA,IAuBA,IAAM,YAAY,GAAgC,EAAE,CAAC;IAErD,IAAI,SAAS,GAA+B,EAAE,CAAC;IAE/C,SAAS,WAAW,CAAC,EAAU;QAC3B,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,SAAS,UAAU,CAAC,eAAwD;QACxE,IAAI,CAAC,eAAe,EAAE;YAClB,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE;YACrC,OAAO,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,GAAG,mBAAmB,CAAC;SACxD;aACI,IAAK,eAAkC,CAAC,UAAU,EAAE;YACrD,IAAM,UAAU,GAAI,eAAkC,CAAC,UAAU,CAAC;YAClE,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC;YAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC1B,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aAC3C;YACD,QAAQ,IAAI,GAAG,CAAC;YAEhB,OAAO,QAAQ,GAAG,mBAAmB,CAAC;SACzC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;QA2BI,iBAAY,EAAU,EAAE,GAAiB,EAAE,IAAqB;YAAhE,iBA2DC;YAzEO,qBAAgB,GAAG,EAAE,CAAC;YAEtB,qBAAgB,GAAG,CAAC,CAAC;YAErB,kBAAa,GAAG,IAAI,CAAA;YACpB,uBAAkB,GAAG,IAAI,CAAA;YAKzB,cAAS,GAAG,KAAK,CAAC;YAKtB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAKlB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;YAEf,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;YAEb,IAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;YAE9B,IAAI,YAAY,GAAG,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC;YAE7C,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE;gBAE7B,YAAY,GAAGC,IAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;aAC/C;YACD,AAA2C;gBACvC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE;oBAC7B,MAAM,IAAI,KAAK,CAAC,eAAa,YAAY,+CAA4C,CAAC,CAAC;iBAC1F;aACJ;YAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI;kBACvC,KAAK;kBACL,IAAI,CAAC,YAAY,CAAC;YAExB,IAAM,OAAO,GAAG,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YACvE,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;YAE5C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YAEvB,IAAM,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO;kBACpD,IAAIC,eAAY,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC;kBACzD,IAAI,CAAC;YAEX,IAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAC/C,IAAM,cAAc,GAAG,CAAC,gBAAgB,IAAI,IAAI,IAAI,gBAAgB,KAAK,MAAM;kBACzE,GAAG,CAAC,oBAAoB;kBACxB,CAAC,CAAC,gBAAgB,CAAC;YACzB,IAAM,kBAAkB,GAAG,EAAE,CAAC;YAC9B,IAAI,WAAW,CAAC;YAChB,IAAI,cAAc,EAAE;gBAChB,WAAW,GAAGC,SAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;aACxE;YAED,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAEtF,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC;gBAC3B,KAAK,EAAE;oBACH,MAAM,EAAE,OAAO,GAAG,IAAI,GAAG,cAAM,OAAA,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAA;iBACnD;aACJ,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,EAAE;gBACV,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;aAC1B;SACJ;QAKD,qBAAG,GAAH,UAAI,EAAW;YACX,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,EAAE;gBACvB,OAAO;aACV;YACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACzB,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACrB,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;QAKD,wBAAM,GAAN,UAAO,EAAW;YACd,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,EAAE;gBACvB,OAAO;aACV;YACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACzB,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;QAKD,6BAAW,GAAX,UAAY,MAAc,EAAE,MAAmB;YAC3C,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,OAAO;aACV;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBAC1B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;aAC5C;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;QAKD,oCAAkB,GAAlB,UAAmB,eAAwD;YACvE,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,OAAO;aACV;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE;gBACjC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;aACpD;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;YACxC,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;SAChD;QAED,oCAAkB,GAAlB;YACI,OAAO,IAAI,CAAC,gBAAgB,CAAC;SAChC;QAKD,6BAAW,GAAX,UAAY,QAAiB;YACzB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;SAC7B;QAED,4BAAU,GAAV;YACI,OAAO,IAAI,CAAC,SAAS,CAAC;SACzB;QAKD,oCAAkB,GAAlB,UAAmB,UAAoB;YACnC,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,OAAO;aACV;YAED,IAAI,CAAC,UAAU,EAAE;gBAGb,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aAC/B;YAID,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAEvB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;SAC9B;QAKD,yBAAO,GAAP;YACI,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,OAAO;aACV;YACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAE1B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;SAC1B;QAKD,uBAAK,GAAL;YACI,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,OAAO;aACV;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACtB;QAEO,wBAAM,GAAd,UAAe,UAAoB;YAC/B,IAAI,eAAe,CAAC;YAEpB,IAAM,KAAK,GAAG,OAAO,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpB,eAAe,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;aACvC;YAED,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBACzB,eAAe,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,uBAAuB,EAAE,CAAC;aAClC;YACD,IAAM,GAAG,GAAG,OAAO,EAAE,CAAC;YAEtB,IAAI,eAAe,EAAE;gBACjB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;gBAC1B,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;oBACrB,WAAW,EAAE,GAAG,GAAG,KAAK;iBACV,CAAC,CAAC;aACvB;iBACI,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC,EAAE;gBAChC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAExB,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE;oBAC/C,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;iBACzB;aACJ;SACJ;QAMD,oCAAkB,GAAlB,UAAmB,gBAAwB;YACvC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;SAC5C;QAKD,wBAAM,GAAN;YACI,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,OAAO;aACV;YACD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAEvB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;SAC7B;QAKD,8BAAY,GAAZ;YACI,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;SAClC;QAKD,yCAAuB,GAAvB;YACI,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,OAAO;aACV;YACD,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAChC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,QAAQ,EAAE;gBAClE,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;aAC/B;SACJ;QAMD,wBAAM,GAAN,UAAO,IAGN;YACG,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,OAAO;aACV;YACD,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;SACzB;QAKD,gCAAc,GAAd;YACI,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,OAAO;aACV;YACD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;SAC1B;QAKD,0BAAQ,GAAR;YACI,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,OAAO;aACV;YACD,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;SAClC;QAKD,2BAAS,GAAT;YACI,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,OAAO;aACV;YACD,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;SACnC;QAMD,gCAAc,GAAd,UAAe,WAAmB;YAC9B,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,OAAO;aACV;YACD,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;SAC5C;QAQD,2BAAS,GAAT,UAAU,CAAS,EAAE,CAAS;YAI1B,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,OAAO;aACV;YACD,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACvC;QAMD,oBAAE,GAAF,UAAQ,SAAiB,EAAE,YAAmC,EAAE,OAAa;YACzE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACjB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;aACrD;YACD,OAAO,IAAI,CAAC;SACf;QAQD,qBAAG,GAAH,UAAI,SAAkB,EAAE,YAA4B;YAChD,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,OAAO;aACV;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;SAC7C;QAQD,yBAAO,GAAP,UAAQ,SAAiB,EAAE,KAAe;YACtC,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,OAAO;aACV;YACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;SAC1C;QAMD,uBAAK,GAAL;YACI,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,OAAO;aACV;YACD,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAI,KAAK,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE;oBAC3B,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;iBACnC;aACJ;YACD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;SACxB;QAKD,yBAAO,GAAP;YACI,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,OAAO;aACV;YAED,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YAEtB,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAEvB,IAAI,CAAC,SAAS;gBACd,IAAI,CAAC,OAAO;oBACZ,IAAI,CAAC,OAAO;wBACZ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YAEpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YAEtB,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACxB;QACL,cAAC;IAAD,CAAC,IAAA;AAmBD,aAAgB,IAAI,CAAC,GAAwB,EAAE,IAAqB;QAChE,IAAM,EAAE,GAAG,IAAI,OAAO,CAACC,IAAW,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACjD,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACd,CAAC;AAKD,aAAgB,OAAO,CAAC,EAAW;QAC/B,EAAE,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;AAKD,aAAgB,UAAU;QACtB,KAAK,IAAI,GAAG,IAAI,SAAS,EAAE;YACvB,IAAI,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBAC/B,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;aAC5B;SACJ;QACD,SAAS,GAAG,EAAE,CAAC;IACnB,CAAC;AAKD,aAAgB,WAAW,CAAC,EAAU;QAClC,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;AAED,aAAgB,eAAe,CAAC,IAAY,EAAE,IAAqB;QAC/D,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9B,CAAC;IAKD,IAAI,aAA4C,CAAC;AAEjD,aAAgB,iBAAiB,CAAC,EAAW;QACzC,IAAI,OAAO,aAAa,KAAK,UAAU,EAAE;YACrC,OAAO,aAAa,CAAC,EAAE,CAAC,CAAC;SAC5B;IACL,CAAC;AAED,aAAgB,qBAAqB,CAAI,MAA+B;QACpE,aAAa,GAAG,MAAM,CAAC;IAC3B,CAAC;AAKD,QAAa,OAAO,GAAG,OAAO;;IChiB9B,IAAM,eAAe,GAAG,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;AAezE,IAAO,IAAM,oBAAoB,GAAqB;QAClD,UAAU,EAAE,CAAC;QACb,aAAa,EAAE,CAAC;QAChB,aAAa,EAAE,CAAC;QAChB,WAAW,EAAE,MAAM;QACnB,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,aAAa;KACvB,CAAC;AAEF,IAAO,IAAM,8BAA8B,GAAyC;QAChF,KAAK,EAAE;YACH,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,IAAI;YACnB,aAAa,EAAE,IAAI;YACnB,WAAW,EAAE,IAAI;YACjB,OAAO,EAAE,IAAI;SAChB;KACH,CAAC;IAEF,oBAA4B,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;IAgCtD,IAAMC,qBAAmB,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,CAAU,CAAC;IAC9D,IAAM,kCAAkC,GAAG,CAAC,WAAW,CAAU,CAAC;IAclE;QAA6E,+BAAc;QA0EvF,qBAAY,KAAa;mBACrB,kBAAM,KAAK,CAAC;SACf;QAES,2BAAK,GAAf,UAAgB,KAAa;YAEzB,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrC,IAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,GAAG,KAAK,OAAO,EAAE;oBACjB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC,CAAC;iBAC/C;qBACI;oBACD,iBAAM,MAAM,YAAC,GAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;iBACxC;aACJ;YAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACb,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;aACrB;SACJ;QAGD,iCAAW,GAAX,eAAgB;QAChB,gCAAU,GAAV,eAAe;QAIf,sCAAgB,GAAhB,eAAqB;QACrB,qCAAe,GAAf,eAAoB;QAEpB,qCAAe,GAAf,UACI,SAAiB,EACjB,UAAkB,EAClB,gBAAyB,EACzB,iBAA0B;YAE1B,IAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YACzB,IACI,IAAI,CAAC,MAAM;mBAER,IAAI,CAAC,SAAS;mBAEd,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC;oBAEvB,IAAI,CAAC,OAAO;uBACT,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CACtD;oBAIG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1B;gBACE,OAAO,KAAK,CAAC;aAChB;YAED,IAAI,gBAAgB,IAAI,IAAI,CAAC,WAAW,EAAE;gBACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;oBAC9C,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE;wBAClC,OAAO,KAAK,CAAC;qBAChB;iBACJ;aACJ;YAED,IAAI,iBAAiB,IAAI,IAAI,CAAC,MAAM,EAAE;gBAClC,IAAI,QAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBACzB,OAAO,QAAM,EAAE;oBACX,IAAI,QAAM,CAAC,MAAM,EAAE;wBACf,OAAO,KAAK,CAAC;qBAChB;oBACD,QAAM,GAAG,QAAM,CAAC,MAAM,CAAC;iBAC1B;aACJ;YAED,OAAO,IAAI,CAAC;SACf;QAKD,6BAAO,GAAP,UAAQ,CAAS,EAAE,CAAS;YACxB,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACjC;QAED,8BAAQ,GAAR,UACI,EAAqC,EACrC,OAAiB;YAEjB,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SAC1B;QAKD,iCAAW,GAAX,UAAY,CAAS,EAAE,CAAS;YAC5B,IAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/C,IAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3C;QAED,kCAAY,GAAZ;YACI,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE;gBAClC,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;gBACjC,IAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;gBAEtC,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACzB,IAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;gBACzC,IAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;gBAC/C,IAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;gBAE/C,IAAI,GAAG,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC3E,IAAI,SAAS,EAAE;oBACX,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;iBACxD;qBACI;oBACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBACrB;gBAED,IAAI,UAAU,IAAI,aAAa,IAAI,aAAa,EAAE;oBAC9C,IAAI,CAAC,KAAK,IAAI,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;oBACvD,IAAI,CAAC,MAAM,IAAI,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;oBACxD,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,aAAa,GAAG,UAAU,CAAC,CAAC;oBAC/D,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,aAAa,GAAG,UAAU,CAAC,CAAC;iBAElE;gBAGD,IAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;oBAChB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;oBACxC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;oBACxC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;oBACvD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;iBAC5D;aACJ;YACD,OAAO,IAAI,CAAC;SACf;QAED,sCAAgB,GAAhB,UAAiB,SAAuB;YACpC,IAAI,SAAS,EAAE;gBACX,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC1E,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACvC;iBACI;gBACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;aAC9B;SACJ;QAED,sCAAgB,GAAhB;YACI,OAAO,IAAI,CAAC,cAAc,CAAC;SAC9B;QAMD,kCAAY,GAAZ,UAAa,IAAa;YACtB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SACtC;QAGD,2CAAqB,GAArB,UAAsB,SAAiB;YACnC,IAAI,SAAS,KAAK,OAAO,EAAE;gBACvB,IAAI,CAAC,UAAU,EAAE,CAAC;aACrB;iBACI;gBACD,IAAI,CAAC,UAAU,EAAE,CAAC;aACrB;SACJ;QAED,4BAAM,GAAN,UAAO,GAAmB,EAAE,KAA8B;YACtD,IAAI,GAAG,KAAK,OAAO,EAAE;gBACjB,iBAAM,MAAM,YAAC,GAA6B,EAAE,KAAK,CAAC,CAAC;aACtD;iBACI;gBACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;oBACb,IAAI,CAAC,QAAQ,CAAC,KAAwB,CAAC,CAAC;iBAC3C;qBACI;oBACD,IAAI,CAAC,QAAQ,CAAC,KAAwB,CAAC,CAAC;iBAC3C;aACJ;SACJ;QAID,8BAAQ,GAAR,UAAS,QAA+C,EAAE,KAAe;YACrE,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;aAChC;iBACI;gBACD,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAA0B,CAAC,CAAC;aAClD;YACD,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;SACf;QAOD,gCAAU,GAAV,UAAW,SAAmB;YAC1B,IAAI,CAAC,SAAS,EAAE;gBACZ,IAAI,CAAC,UAAU,EAAE,CAAC;aACrB;YACD,IAAI,CAAC,OAAO,IAAI,iBAAiB,CAAC;YAElC,IAAI,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;aACrB;SACJ;QAED,2BAAK,GAAL;YACI,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;QAKD,kCAAY,GAAZ;YACI,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC,CAAC;SAC/C;QAKD,kCAAY,GAAZ;YACI,IAAI,CAAC,OAAO,IAAI,CAAC,iBAAiB,CAAC;SACtC;QAKD,iCAAW,GAAX,UAAY,GAAoB;YAC5B,OAAO,YAAY,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;SAClD;QAOD,8BAAQ,GAAR,UAAS,GAAmB;YACxB,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE;gBACvB,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;aAC/B;YACD,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;aAC3B;iBACI;gBACD,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;aACpB;YACD,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;QASD,mCAAa,GAAb,UAAc,GAAmB;YAC7B,OAAO,GAAG,CAAC,eAAe,CAAC,CAAC;SAC/B;QAES,wCAAkB,GAA5B,UAA6B,OAAyB;YAClD,iBAAM,kBAAkB,YAAC,OAAO,CAAC,CAAC;YAElC,IAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;YACtC,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;gBAGrC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;aACxE;YAED,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAEA,qBAAmB,CAAC,CAAC;SACxE;QAES,oCAAc,GAAxB,UACI,SAAiB,EACjB,KAAuB,EACvB,WAA6B,EAC7B,iBAA0B,EAC1B,UAAmB,EACnB,YAAkC;YAElC,iBAAM,cAAc,YAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;YAEjG,IAAM,oBAAoB,GAAG,EAAE,KAAK,IAAI,iBAAiB,CAAC,CAAC;YAC3D,IAAI,WAA2B,CAAC;YAChC,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE;gBAEtB,IAAI,UAAU,EAAE;oBACZ,IAAI,iBAAiB,EAAE;wBACnB,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;qBAC7B;yBACI;wBACD,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;wBACtE,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;qBAC9C;iBACJ;qBACI;oBACD,WAAW,GAAG,IAAI,CAAC,WAAW,CAC1B,IAAI,CAAC,WAAW,EAAE,EAClB,iBAAiB,GAAG,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CACrD,CAAC;oBACF,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;iBAC9C;aACJ;iBACI,IAAI,oBAAoB,EAAE;gBAC3B,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC;aACnC;YAED,IAAI,WAAW,EAAE;gBACb,IAAI,UAAU,EAAE;oBAEZ,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;oBAE/B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,oBAAoB,GAAG,EAAE,GAAG,WAAW,CAAC,CAAC;oBAGvE,IAAI,oBAAoB,EAAE;wBACtB,IAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;wBACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;4BACzC,IAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;4BAC3B,IAAI,GAAG,IAAI,WAAW,EAAE;gCAEnB,WAAmB,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;gCAE5C,IAAI,CAAC,KAAa,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;6BAC/C;yBACJ;qBACJ;oBAOD,IAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;oBACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACxC,IAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;wBAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;qBACrC;oBAED,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE;wBAC7B,KAAK,EAAE,WAAW;qBACZ,EAAE,YAAY,EAAE,IAAI,CAAC,sBAAsB,EAA+B,CAAC,CAAC;iBACzF;qBACI;oBACD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;iBAC9B;aACJ;YAID,IAAM,UAAU,GAAG,IAAI,CAAC,SAAS,GAAG,kCAAkC,GAAGA,qBAAmB,CAAC;YAC7F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,IAAI,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;oBAE5B,IAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;iBACnC;qBACI,IAAI,oBAAoB,EAAE;oBAE3B,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;wBACzB,IAAY,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;qBACzC;iBACJ;aACJ;SACJ;QAES,kCAAY,GAAtB,UAAuB,MAA0B;YAC7C,IAAM,WAAW,GAAG,iBAAM,YAAY,YAAC,MAAM,CAAqB,CAAC;YACnE,IAAI,WAA2B,CAAC;YAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACpC,IAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAI,KAAK,CAAC,KAAK,EAAE;oBACb,WAAW,GAAG,WAAW,IAAI,EAAE,CAAC;oBAChC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;iBAC9C;aACJ;YACD,IAAI,WAAW,EAAE;gBACb,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC;aACnC;YACD,OAAO,WAAW,CAAC;SACtB;QAES,iCAAW,GAArB,UACI,WAA6B,EAC7B,WAA6B;YAE7B,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACjC,OAAO,WAAW,CAAC;SACtB;QAED,4CAAsB,GAAtB;YACI,OAAO,8BAA8B,CAAC;SACzC;QAuBgB,4BAAgB,GAAG,CAAC;YACjC,IAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;YACxC,SAAS,CAAC,IAAI,GAAG,aAAa,CAAC;YAC/B,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC;YAC5B,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;YAChB,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;YACjB,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YACrB,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;YAC1B,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC;YAC7B,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC;YAC5B,SAAS,CAAC,WAAW,GAAG,KAAK,CAAC;YAC9B,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC;YACvB,SAAS,CAAC,kBAAkB,GAAG,CAAC,CAAC;YAEjC,SAAS,CAAC,OAAO,GAAG,UAAU,GAAG,iBAAiB,CAAC;SACtD,GAAG,CAAA;QACR,kBAAC;KAAA,CAlgB4E,OAAO,GAkgBnF;IAED,IAAMC,SAAO,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7C,IAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,SAAS,mBAAmB,CAAC,EAAe,EAAE,KAAa,EAAE,MAAc;QACvEA,SAAO,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;QACnC,IAAI,EAAE,CAAC,SAAS,EAAE;YACdA,SAAO,CAAC,cAAc,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;SACxC;QACD,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;QACvB,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;QACzB,OAAO,CAACA,SAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;;ICtmBD,IAAMC,SAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAMC,SAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAM,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IAExB,IAAM,KAAK,GAAGC,MAAW,EAAE,CAAC;IAC5B,IAAM,GAAG,GAAGA,MAAW,EAAE,CAAC;IAC1B,IAAM,SAAS,GAAGA,MAAW,EAAE,CAAC;AAKhC,aAAgB,UAAU,CAAC,MAA2B,EAAE,GAAqB,EAAE,GAAqB;QAChG,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACrB,OAAO;SACV;QACD,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACf,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACd,IAAI,GAAGF,SAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,KAAK,GAAGC,SAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,GAAG,GAAGD,SAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,GAAGC,SAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAClC;QAED,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACb,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACf,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IACpB,CAAC;AAED,aAAgB,QAAQ,CACpB,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAC9C,GAAqB,EAAE,GAAqB;QAE5C,GAAG,CAAC,CAAC,CAAC,GAAGD,SAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACzB,GAAG,CAAC,CAAC,CAAC,GAAGA,SAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACzB,GAAG,CAAC,CAAC,CAAC,GAAGC,SAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACzB,GAAG,CAAC,CAAC,CAAC,GAAGA,SAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,IAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAM,IAAI,GAAa,EAAE,CAAC;AAI1B,aAAgB,SAAS,CACrB,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAC9F,GAAqB,EAAE,GAAqB;QAE5C,IAAME,cAAY,GAAGC,YAAkB,CAAC;QACxC,IAAMC,SAAO,GAAGC,OAAa,CAAC;QAC9B,IAAI,CAAC,GAAGH,cAAY,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3C,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;QAClB,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;QAClB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;QAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxB,IAAM,CAAC,GAAGE,SAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,GAAG,CAAC,CAAC,CAAC,GAAGL,SAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,GAAG,CAAC,CAAC,CAAC,GAAGC,SAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/B;QACD,CAAC,GAAGE,cAAY,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxB,IAAM,CAAC,GAAGE,SAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,GAAG,CAAC,CAAC,CAAC,GAAGL,SAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,GAAG,CAAC,CAAC,CAAC,GAAGC,SAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/B;QAED,GAAG,CAAC,CAAC,CAAC,GAAGD,SAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,GAAG,CAAC,CAAC,CAAC,GAAGC,SAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,GAAG,CAAC,CAAC,CAAC,GAAGD,SAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,GAAG,CAAC,CAAC,CAAC,GAAGC,SAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7B,GAAG,CAAC,CAAC,CAAC,GAAGD,SAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,GAAG,CAAC,CAAC,CAAC,GAAGC,SAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,GAAG,CAAC,CAAC,CAAC,GAAGD,SAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,GAAG,CAAC,CAAC,CAAC,GAAGC,SAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;AAKD,aAAgB,aAAa,CACzB,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EACtE,GAAqB,EAAE,GAAqB;QAE5C,IAAMM,mBAAiB,GAAGC,iBAAuB,CAAC;QAClD,IAAMC,aAAW,GAAGC,WAAiB,CAAC;QAEtC,IAAM,EAAE,GACJT,SAAO,CACHD,SAAO,CAACO,mBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAC/C,CAAC;QACN,IAAM,EAAE,GACJN,SAAO,CACHD,SAAO,CAACO,mBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAC/C,CAAC;QAEN,IAAM,CAAC,GAAGE,aAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACtC,IAAM,CAAC,GAAGA,aAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAEtC,GAAG,CAAC,CAAC,CAAC,GAAGT,SAAO,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5B,GAAG,CAAC,CAAC,CAAC,GAAGA,SAAO,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5B,GAAG,CAAC,CAAC,CAAC,GAAGC,SAAO,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5B,GAAG,CAAC,CAAC,CAAC,GAAGA,SAAO,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAChC,CAAC;AAKD,aAAgB,OAAO,CACnB,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,UAAkB,EAAE,QAAgB,EAAE,aAAsB,EAC1GU,KAAqB,EAAEC,KAAqB;QAE5C,IAAM,OAAO,GAAGC,GAAQ,CAAC;QACzB,IAAM,OAAO,GAAGC,GAAQ,CAAC;QAEzB,IAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC;QAG7C,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;YAElCH,KAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YAChBA,KAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YAChBC,KAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YAChBA,KAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YAChB,OAAO;SACV;QAED,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACxC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAExC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACpC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEpC,OAAO,CAACD,KAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACzB,OAAO,CAACC,KAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAGzB,UAAU,GAAG,UAAU,IAAI,GAAG,CAAC,CAAC;QAChC,IAAI,UAAU,GAAG,CAAC,EAAE;YAChB,UAAU,GAAG,UAAU,GAAG,GAAG,CAAC;SACjC;QACD,QAAQ,GAAG,QAAQ,IAAI,GAAG,CAAC,CAAC;QAC5B,IAAI,QAAQ,GAAG,CAAC,EAAE;YACd,QAAQ,GAAG,QAAQ,GAAG,GAAG,CAAC;SAC7B;QAED,IAAI,UAAU,GAAG,QAAQ,IAAI,CAAC,aAAa,EAAE;YACzC,QAAQ,IAAI,GAAG,CAAC;SACnB;aACI,IAAI,UAAU,GAAG,QAAQ,IAAI,aAAa,EAAE;YAC7C,UAAU,IAAI,GAAG,CAAC;SACrB;QACD,IAAI,aAAa,EAAE;YACf,IAAM,GAAG,GAAG,QAAQ,CAAC;YACrB,QAAQ,GAAG,UAAU,CAAC;YACtB,UAAU,GAAG,GAAG,CAAC;SACpB;QAID,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE;YACxD,IAAI,KAAK,GAAG,UAAU,EAAE;gBACpB,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACvC,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAEvC,OAAO,CAACD,KAAG,EAAE,SAAS,EAAEA,KAAG,CAAC,CAAC;gBAC7B,OAAO,CAACC,KAAG,EAAE,SAAS,EAAEA,KAAG,CAAC,CAAC;aAChC;SACJ;IACL,CAAC;;IC3KD,IAAM,GAAG,GAAG;QACR,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QAEJ,CAAC,EAAE,CAAC;KACP,CAAC;IAgBF,IAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAMD,KAAG,GAAa,EAAE,CAAC;IACzB,IAAMC,KAAG,GAAa,EAAE,CAAC;IACzB,IAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAMZ,SAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAMC,SAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAMc,SAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAMC,SAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IAEzB,IAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IACnB,IAAMC,KAAG,GAAG,EAAE,GAAG,CAAC,CAAC;IAEnB,IAAM,aAAa,GAAG,OAAO,YAAY,KAAK,WAAW,CAAC;IAE1D,IAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,SAAS,MAAM,CAAC,MAAc;QAE1B,IAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QAC9C,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;AAOD,aAAgB,kBAAkB,CAAC,MAAgB,EAAE,aAAsB;QACvE,IAAI,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,aAAa,GAAG,CAAC,EAAE;YAEnB,aAAa,IAAIA,KAAG,CAAC;SACxB;QAED,IAAI,KAAK,GAAG,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5B,WAAW,IAAI,KAAK,CAAC;QAIrB,IAAI,CAAC,aAAa,IAAI,WAAW,GAAG,aAAa,IAAIA,KAAG,EAAE;YACtD,WAAW,GAAG,aAAa,GAAGA,KAAG,CAAC;SACrC;aACI,IAAI,aAAa,IAAI,aAAa,GAAG,WAAW,IAAIA,KAAG,EAAE;YAC1D,WAAW,GAAG,aAAa,GAAGA,KAAG,CAAC;SACrC;aAGI,IAAI,CAAC,aAAa,IAAI,aAAa,GAAG,WAAW,EAAE;YACpD,WAAW,GAAG,aAAa,IAAIA,KAAG,GAAG,MAAM,CAAC,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC;SAC7E;aACI,IAAI,aAAa,IAAI,aAAa,GAAG,WAAW,EAAE;YACnD,WAAW,GAAG,aAAa,IAAIA,KAAG,GAAG,MAAM,CAAC,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC;SAC7E;QAED,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;QAC1B,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;IAC5B,CAAC;IAGD;QA8CI,mBAAY,WAAqB;YA5CjC,QAAG,GAAG,CAAC,CAAA;YA2BC,QAAG,GAAG,CAAC,CAAA;YACP,QAAG,GAAG,CAAC,CAAA;YAEP,QAAG,GAAG,CAAC,CAAA;YACP,QAAG,GAAG,CAAC,CAAA;YAEP,SAAI,GAAG,CAAC,CAAA;YAYZ,IAAI,WAAW,EAAE;gBACb,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;aAC1B;YAED,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;aAClB;SACJ;QAED,mCAAe,GAAf;YACI,IAAI,CAAC,QAAQ,EAAE,CAAC;SACnB;QAMD,8BAAU,GAAV;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;SACxB;QAKD,4BAAQ,GAAR,UAAS,EAAU,EAAE,EAAU,EAAE,sBAA+B;YAE5D,sBAAsB,GAAG,sBAAsB,IAAI,CAAC,CAAC;YACrD,IAAI,sBAAsB,GAAG,CAAC,EAAE;gBAC5B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,sBAAsB,GAAGC,gBAAG,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBAC3D,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,sBAAsB,GAAGA,gBAAG,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;aAC9D;SACJ;QAED,0BAAM,GAAN,UAAO,GAAW;YACd,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;SAClB;QAED,8BAAU,GAAV,UAAW,GAAqC;YAC5C,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;SACnB;QAED,8BAAU,GAAV;YACI,OAAO,IAAI,CAAC,IAAI,CAAC;SACpB;QAED,6BAAS,GAAT;YACI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;SACf;QAKD,yBAAK,GAAL;YAEI,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;aACjB;YAED,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;aACrB;YAGD,IAAI,CAAC,QAAQ,EAAE,CAAC;SACnB;QAED,0BAAM,GAAN,UAAO,CAAS,EAAE,CAAS;YAEvB,IAAI,CAAC,cAAc,EAAE,CAAC;YAEtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAMpC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YACb,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YAEb,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YACb,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YAEb,OAAO,IAAI,CAAC;SACf;QAED,0BAAM,GAAN,UAAO,CAAS,EAAE,CAAS;YACvB,IAAM,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACjC,IAAM,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACjC,IAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;YAElD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE1B,IAAI,IAAI,CAAC,IAAI,IAAI,UAAU,EAAE;gBACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAC1B;YACD,IAAI,UAAU,EAAE;gBACZ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;gBACb,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;gBACb,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;aAC3B;iBACI;gBACD,IAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;gBAE7B,IAAI,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;oBAC1B,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;oBACrB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;oBACrB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;iBAC5B;aACJ;YAED,OAAO,IAAI,CAAC;SACf;QAED,iCAAa,GAAb,UAAc,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;YAChF,IAAI,CAAC,cAAc,EAAE,CAAC;YAEtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;aACnD;YACD,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;SACf;QAED,oCAAgB,GAAhB,UAAiB,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;YAC3D,IAAI,CAAC,cAAc,EAAE,CAAC;YAEtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACpC,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;aAC9C;YACD,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;SACf;QAED,uBAAG,GAAH,UAAI,EAAU,EAAE,EAAU,EAAE,CAAS,EAAE,UAAkB,EAAE,QAAgB,EAAE,aAAuB;YAChG,IAAI,CAAC,cAAc,EAAE,CAAC;YAEtB,SAAS,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;YAC1B,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;YACxB,kBAAkB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;YAE7C,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1B,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAExB,IAAI,KAAK,GAAG,QAAQ,GAAG,UAAU,CAAC;YAElC,IAAI,CAAC,OAAO,CACR,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,GAAG,CAAC,GAAG,CAAC,CACnE,CAAC;YAEF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;YAE3E,IAAI,CAAC,GAAG,GAAGH,SAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACtC,IAAI,CAAC,GAAG,GAAGC,SAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;SACf;QAGD,yBAAK,GAAL,UAAM,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,MAAc;YAChE,IAAI,CAAC,cAAc,EAAE,CAAC;YAEtB,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;aAC3C;YACD,OAAO,IAAI,CAAC;SACf;QAGD,wBAAI,GAAJ,UAAK,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;YAC3C,IAAI,CAAC,cAAc,EAAE,CAAC;YAEtB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC;SACf;QAED,6BAAS,GAAT;YAEI,IAAI,CAAC,cAAc,EAAE,CAAC;YAEtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAEpB,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;YACtB,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;YACpB,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;YACpB,IAAI,GAAG,EAAE;gBACL,GAAG,CAAC,SAAS,EAAE,CAAC;aACnB;YAED,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;SACf;QAED,wBAAI,GAAJ,UAAK,GAA6B;YAC9B,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;SACnB;QAED,0BAAM,GAAN,UAAO,GAA6B;YAChC,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACpB,IAAI,CAAC,QAAQ,EAAE,CAAC;SACnB;QAED,uBAAG,GAAH;YACI,OAAO,IAAI,CAAC,IAAI,CAAC;SACpB;QAED,2BAAO,GAAP,UAAQ,IAA6B;YAEjC,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;YAExB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,aAAa,EAAE;gBAC3D,IAAI,CAAC,IAAI,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;aACrC;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC1B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;aAC1B;YAED,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;SACnB;QAED,8BAAU,GAAV,UAAW,IAA6B;YACpC,IAAI,EAAE,IAAI,YAAY,KAAK,CAAC,EAAE;gBAC1B,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;aACjB;YACD,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;YACxB,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC1B,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;aAC/B;YACD,IAAI,aAAa,KAAK,IAAI,CAAC,IAAI,YAAY,YAAY,CAAC,EAAE;gBACtD,IAAI,CAAC,IAAI,GAAG,IAAI,YAAY,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;aACrD;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC1B,IAAM,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC5C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;iBAC3C;aACJ;YACD,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;SACtB;QAMD,2BAAO,GAAP,UACI,GAAW,EACX,CAAU,EACV,CAAU,EACV,CAAU,EACV,CAAU,EACV,CAAU,EACV,CAAU,EACV,CAAU,EACV,CAAU;YAEV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACjB,OAAO;aACV;YAED,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;gBAG5C,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;aACpB;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACvC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;aACpC;SACJ;QAEO,kCAAc,GAAtB;YACI,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE;gBACzB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBAClE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;aAC3B;SACJ;QAEO,+BAAW,GAAnB;YAEI,IAAI,EAAE,IAAI,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE;gBAC/B,IAAM,OAAO,GAAG,EAAE,CAAC;gBACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;oBAChC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBAC7B;gBACD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;aACvB;SACJ;QAUD,4BAAQ,GAAR;YACI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACjB,OAAO;aACV;YAED,IAAI,CAAC,cAAc,EAAE,CAAC;YAEtB,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,IAAI,IAAI,YAAY,KAAK,EAAE;gBACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;gBACxB,IAAI,aAAa,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE;oBACjC,IAAI,CAAC,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;iBACtC;aACJ;SACJ;QAGD,mCAAe,GAAf;YACIL,KAAG,CAAC,CAAC,CAAC,GAAGA,KAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;YACvDC,KAAG,CAAC,CAAC,CAAC,GAAGA,KAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;YAExD,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YAEX,IAAI,CAAC,CAAC;YACN,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG;gBACxB,IAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAW,CAAC;gBAEhC,IAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;gBACxB,IAAI,OAAO,EAAE;oBAIT,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACb,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAEjB,EAAE,GAAG,EAAE,CAAC;oBACR,EAAE,GAAG,EAAE,CAAC;iBACX;gBAED,QAAQ,GAAG;oBACP,KAAK,GAAG,CAAC,CAAC;wBAGN,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACpB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACpB,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;wBACb,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;wBACb,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;wBACb,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;wBACb,MAAM;oBACV,KAAK,GAAG,CAAC,CAAC;wBACN,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;wBACnD,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACf,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACf,MAAM;oBACV,KAAK,GAAG,CAAC,CAAC;wBACN,SAAS,CACL,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EACxE,IAAI,EAAE,IAAI,CACb,CAAC;wBACF,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACf,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACf,MAAM;oBACV,KAAK,GAAG,CAAC,CAAC;wBACN,aAAa,CACT,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAClD,IAAI,EAAE,IAAI,CACb,CAAC;wBACF,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACf,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACf,MAAM;oBACV,KAAK,GAAG,CAAC,CAAC;wBACN,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAM,UAAU,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC7B,IAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;wBAExC,CAAC,IAAI,CAAC,CAAC;wBACP,IAAM,aAAa,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBAEjC,IAAI,OAAO,EAAE;4BAGT,EAAE,GAAGG,SAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;4BACnC,EAAE,GAAGC,SAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;yBACtC;wBAED,OAAO,CACH,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,EACpC,aAAa,EAAE,IAAI,EAAE,IAAI,CAC5B,CAAC;wBAEF,EAAE,GAAGD,SAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;wBACjC,EAAE,GAAGC,SAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;wBACjC,MAAM;oBACV,KAAK,GAAG,CAAC,CAAC;wBACN,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACpB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACpB,IAAM,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACxB,IAAM,MAAM,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBAEzB,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;wBACtD,MAAM;oBACV,KAAK,GAAG,CAAC,CAAC;wBACN,EAAE,GAAG,EAAE,CAAC;wBACR,EAAE,GAAG,EAAE,CAAC;wBACR,MAAM;iBACb;gBAGDH,GAAQ,CAACF,KAAG,EAAEA,KAAG,EAAE,IAAI,CAAC,CAAC;gBACzBG,GAAQ,CAACF,KAAG,EAAEA,KAAG,EAAE,IAAI,CAAC,CAAC;aAC5B;YAGD,IAAI,CAAC,KAAK,CAAC,EAAE;gBACTD,KAAG,CAAC,CAAC,CAAC,GAAGA,KAAG,CAAC,CAAC,CAAC,GAAGC,KAAG,CAAC,CAAC,CAAC,GAAGA,KAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aACzC;YAED,OAAO,IAAI,YAAY,CACnBD,KAAG,CAAC,CAAC,CAAC,EAAEA,KAAG,CAAC,CAAC,CAAC,EAAEC,KAAG,CAAC,CAAC,CAAC,GAAGD,KAAG,CAAC,CAAC,CAAC,EAAEC,KAAG,CAAC,CAAC,CAAC,GAAGD,KAAG,CAAC,CAAC,CAAC,CACnD,CAAC;SACL;QAEO,oCAAgB,GAAxB;YACI,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;YACtB,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;YACpB,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;YACpB,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YAEX,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACnB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;aACzB;YACD,IAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YACpC,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,IAAI,QAAQ,GAAG,CAAC,CAAC;YAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG;gBACtB,IAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAW,CAAC;gBAChC,IAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;gBAExB,IAAI,OAAO,EAAE;oBAIT,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACb,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAEjB,EAAE,GAAG,EAAE,CAAC;oBACR,EAAE,GAAG,EAAE,CAAC;iBACX;gBAED,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAEX,QAAQ,GAAG;oBACP,KAAK,GAAG,CAAC,CAAC;wBAGN,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACpB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACpB,MAAM;oBACV,KAAK,GAAG,CAAC,CAAC,EAAE;wBACR,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;wBACnB,IAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;wBACnB,IAAI,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE;4BACvD,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;4BACjC,EAAE,GAAG,EAAE,CAAC;4BACR,EAAE,GAAG,EAAE,CAAC;yBACX;wBACD,MAAM;qBACT;oBACD,KAAK,GAAG,CAAC,CAAC,EAAE;wBACR,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBAErB,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;wBACpD,EAAE,GAAG,EAAE,CAAC;wBACR,EAAE,GAAG,EAAE,CAAC;wBACR,MAAM;qBACT;oBACD,KAAK,GAAG,CAAC,CAAC,EAAE;wBACR,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,CAAC,GAAG,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;wBAChD,EAAE,GAAG,EAAE,CAAC;wBACR,EAAE,GAAG,EAAE,CAAC;wBACR,MAAM;qBACT;oBACD,KAAK,GAAG,CAAC,CAAC;wBAEN,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAM,UAAU,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC7B,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACtB,IAAM,QAAQ,GAAG,KAAK,GAAG,UAAU,CAAC;wBAEpC,CAAC,IAAI,CAAC,CAAC;wBACP,IAAI,OAAO,EAAE;4BAGT,EAAE,GAAGI,SAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;4BACnC,EAAE,GAAGC,SAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;yBACtC;wBAGD,CAAC,GAAGf,SAAO,CAAC,EAAE,EAAE,EAAE,CAAC,GAAGD,SAAO,CAACiB,KAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;wBAEpD,EAAE,GAAGF,SAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;wBACjC,EAAE,GAAGC,SAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;wBACjC,MAAM;oBACV,KAAK,GAAG,CAAC,CAAC,EAAE;wBACR,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACpB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACpB,IAAM,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACxB,IAAM,MAAM,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBACzB,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;wBAC3B,MAAM;qBACT;oBACD,KAAK,GAAG,CAAC,CAAC,EAAE;wBACR,IAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;wBACnB,IAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;wBACnB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;wBAEjC,EAAE,GAAG,EAAE,CAAC;wBACR,EAAE,GAAG,EAAE,CAAC;wBACR,MAAM;qBACT;iBACJ;gBAED,IAAI,CAAC,IAAI,CAAC,EAAE;oBACR,UAAU,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;oBAC3B,YAAY,IAAI,CAAC,CAAC;iBACrB;aACJ;YAGD,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;YAE7B,OAAO,YAAY,CAAC;SACvB;QAMD,+BAAW,GAAX,UAAY,GAAkB,EAAE,OAAe;YAC3C,IAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;YACpB,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;YACpB,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;YACpB,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;YACtB,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC;YACP,IAAI,CAAC,CAAC;YACN,IAAI,CAAC,CAAC;YAEN,IAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC;YAC7B,IAAI,UAAU,CAAC;YACf,IAAI,YAAY,CAAC;YACjB,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,eAAe,CAAC;YAEpB,IAAI,aAAa,GAAG,CAAC,CAAC;YACtB,IAAI,UAAkB,CAAC;YACvB,IAAI,UAAkB,CAAC;YAGvB,IAAI,QAAQ,EAAE;gBACV,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;oBACnB,IAAI,CAAC,gBAAgB,EAAE,CAAC;iBAC3B;gBACD,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC9B,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC7B,eAAe,GAAG,OAAO,GAAG,YAAY,CAAC;gBAEzC,IAAI,CAAC,eAAe,EAAE;oBAClB,OAAO;iBACV;aACJ;YAED,EAAE,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG;gBAC1B,IAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACnB,IAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;gBAExB,IAAI,OAAO,EAAE;oBAIT,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACV,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAEd,EAAE,GAAG,EAAE,CAAC;oBACR,EAAE,GAAG,EAAE,CAAC;iBACX;gBAGD,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE;oBACpC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;oBACnC,aAAa,GAAG,CAAC,CAAC;iBACrB;gBACD,QAAQ,GAAG;oBACP,KAAK,GAAG,CAAC,CAAC;wBACN,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACjB,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACjB,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;wBACnB,MAAM;oBACV,KAAK,GAAG,CAAC,CAAC,EAAE;wBACR,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACX,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACX,IAAM,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBAC3B,IAAM,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBAE3B,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;4BACpB,IAAI,QAAQ,EAAE;gCACV,IAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;gCACjC,IAAI,WAAW,GAAG,CAAC,GAAG,eAAe,EAAE;oCACnC,IAAM,CAAC,GAAG,CAAC,eAAe,GAAG,WAAW,IAAI,CAAC,CAAC;oCAC9C,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oCACvD,MAAM,EAAE,CAAC;iCACZ;gCACD,WAAW,IAAI,CAAC,CAAC;6BACpB;4BAED,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;4BACjB,EAAE,GAAG,CAAC,CAAC;4BACP,EAAE,GAAG,CAAC,CAAC;4BACP,aAAa,GAAG,CAAC,CAAC;yBACrB;6BACI;4BACD,IAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;4BAE7B,IAAI,EAAE,GAAG,aAAa,EAAE;gCACpB,UAAU,GAAG,CAAC,CAAC;gCACf,UAAU,GAAG,CAAC,CAAC;gCACf,aAAa,GAAG,EAAE,CAAC;6BACtB;yBACJ;wBACD,MAAM;qBACT;oBACD,KAAK,GAAG,CAAC,CAAC,EAAE;wBACR,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAClB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAClB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAClB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAClB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAClB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAClB,IAAI,QAAQ,EAAE;4BACV,IAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;4BACjC,IAAI,WAAW,GAAG,CAAC,GAAG,eAAe,EAAE;gCACnC,IAAM,CAAC,GAAG,CAAC,eAAe,GAAG,WAAW,IAAI,CAAC,CAAC;gCAC9C,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;gCAC3C,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;gCAC3C,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gCAC1F,MAAM,EAAE,CAAC;6BACZ;4BACD,WAAW,IAAI,CAAC,CAAC;yBACpB;wBAED,GAAG,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;wBAC1C,EAAE,GAAG,EAAE,CAAC;wBACR,EAAE,GAAG,EAAE,CAAC;wBACR,MAAM;qBACT;oBACD,KAAK,GAAG,CAAC,CAAC,EAAE;wBACR,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAClB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAClB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAClB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAElB,IAAI,QAAQ,EAAE;4BACV,IAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;4BACjC,IAAI,WAAW,GAAG,CAAC,GAAG,eAAe,EAAE;gCACnC,IAAM,CAAC,GAAG,CAAC,eAAe,GAAG,WAAW,IAAI,CAAC,CAAC;gCAC9C,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;gCAC3C,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;gCAC3C,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gCACrE,MAAM,EAAE,CAAC;6BACZ;4BACD,WAAW,IAAI,CAAC,CAAC;yBACpB;wBAED,GAAG,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;wBACrC,EAAE,GAAG,EAAE,CAAC;wBACR,EAAE,GAAG,EAAE,CAAC;wBACR,MAAM;qBACT;oBACD,KAAK,GAAG,CAAC,CAAC;wBACN,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAClB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAClB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAClB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAClB,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACxB,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACnB,IAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACnB,IAAM,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC9B,IAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;wBAG9B,IAAM,SAAS,GAAG,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;wBAC1C,IAAI,QAAQ,GAAG,UAAU,GAAG,KAAK,CAAC;wBAClC,IAAI,UAAU,GAAG,KAAK,CAAC;wBAEvB,IAAI,QAAQ,EAAE;4BACV,IAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;4BACjC,IAAI,WAAW,GAAG,CAAC,GAAG,eAAe,EAAE;gCACnC,QAAQ,GAAG,UAAU,GAAG,KAAK,IAAI,eAAe,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;gCACpE,UAAU,GAAG,IAAI,CAAC;6BACrB;4BACD,WAAW,IAAI,CAAC,CAAC;yBACpB;wBACD,IAAI,SAAS,IAAI,GAAG,CAAC,OAAO,EAAE;4BAC1B,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;yBACzE;6BACI;4BACD,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;yBAC3D;wBAED,IAAI,UAAU,EAAE;4BACZ,MAAM,EAAE,CAAC;yBACZ;wBAED,IAAI,OAAO,EAAE;4BAGT,EAAE,GAAGD,SAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;4BACnC,EAAE,GAAGC,SAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;yBACtC;wBACD,EAAE,GAAGD,SAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;wBACjC,EAAE,GAAGC,SAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;wBACjC,MAAM;oBACV,KAAK,GAAG,CAAC,CAAC;wBACN,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBACf,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBAEnB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACX,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACX,IAAM,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAM,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAEtB,IAAI,QAAQ,EAAE;4BACV,IAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;4BACjC,IAAI,WAAW,GAAG,CAAC,GAAG,eAAe,EAAE;gCACnC,IAAI,GAAC,GAAG,eAAe,GAAG,WAAW,CAAC;gCACtC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gCACjB,GAAG,CAAC,MAAM,CAAC,CAAC,GAAGhB,SAAO,CAAC,GAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;gCACrC,GAAC,IAAI,KAAK,CAAC;gCACX,IAAI,GAAC,GAAG,CAAC,EAAE;oCACP,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAGA,SAAO,CAAC,GAAC,EAAE,MAAM,CAAC,CAAC,CAAC;iCACjD;gCACD,GAAC,IAAI,MAAM,CAAC;gCACZ,IAAI,GAAC,GAAG,CAAC,EAAE;oCACP,GAAG,CAAC,MAAM,CAAC,CAAC,GAAGC,SAAO,CAAC,KAAK,GAAG,GAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;iCACrD;gCACD,GAAC,IAAI,KAAK,CAAC;gCACX,IAAI,GAAC,GAAG,CAAC,EAAE;oCACP,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAGA,SAAO,CAAC,MAAM,GAAG,GAAC,EAAE,CAAC,CAAC,CAAC,CAAC;iCAC7C;gCACD,MAAM,EAAE,CAAC;6BACZ;4BACD,WAAW,IAAI,CAAC,CAAC;yBACpB;wBACD,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;wBAC9B,MAAM;oBACV,KAAK,GAAG,CAAC,CAAC;wBACN,IAAI,QAAQ,EAAE;4BACV,IAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;4BACjC,IAAI,WAAW,GAAG,CAAC,GAAG,eAAe,EAAE;gCACnC,IAAM,CAAC,GAAG,CAAC,eAAe,GAAG,WAAW,IAAI,CAAC,CAAC;gCAC9C,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;gCACzD,MAAM,EAAE,CAAC;6BACZ;4BACD,WAAW,IAAI,CAAC,CAAC;yBACpB;wBAED,GAAG,CAAC,SAAS,EAAE,CAAC;wBAChB,EAAE,GAAG,EAAE,CAAC;wBACR,EAAE,GAAG,EAAE,CAAC;iBACf;aACJ;SACJ;QAED,yBAAK,GAAL;YACI,IAAM,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAC;YACjC,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;kBACnC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAC1B,OAAO,QAAQ,CAAC;SACnB;QAtzBM,aAAG,GAAG,GAAG,CAAA;QAwzBD,0BAAgB,GAAG,CAAC;YAC/B,IAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC;YAClC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;YACvB,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;YACd,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;YACd,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;YACzB,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;SACtB,GAAG,CAAA;QACR,gBAAC;KA52BD,IA42BC;;aCx8Be,aAAa,CACzB,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAC9C,SAAiB,EAAE,CAAS,EAAE,CAAS;QAEvC,IAAI,SAAS,KAAK,CAAC,EAAE;YACjB,OAAO,KAAK,CAAC;SAChB;QACD,IAAM,EAAE,GAAG,SAAS,CAAC;QACrB,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,EAAE,GAAG,EAAE,CAAC;QAEZ,IACI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;gBACvB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBAC3B,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBAC3B,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EACjC;YACE,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,EAAE,KAAK,EAAE,EAAE;YACX,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAC3B,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;SACxC;aACI;YACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SACrC;QACD,IAAM,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAM,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACrC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC;;aCpCekB,eAAa,CACzB,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAC9C,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAC9C,SAAiB,EAAE,CAAS,EAAE,CAAS;QAEvC,IAAI,SAAS,KAAK,CAAC,EAAE;YACjB,OAAO,KAAK,CAAC;SAChB;QACD,IAAM,EAAE,GAAG,SAAS,CAAC;QAErB,IACI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;gBACrD,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBACzD,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBACzD,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAC/D;YACE,OAAO,KAAK,CAAC;SAChB;QACD,IAAM,CAAC,GAAGC,iBAAuB,CAC7B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,CAAC,EAAE,CAAC,EAAE,IAAI,CACb,CAAC;QACF,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACvB,CAAC;;aCxBeD,eAAa,CACzB,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EACtE,SAAiB,EAAE,CAAS,EAAE,CAAS;QAEvC,IAAI,SAAS,KAAK,CAAC,EAAE;YACjB,OAAO,KAAK,CAAC;SAChB;QACD,IAAM,EAAE,GAAG,SAAS,CAAC;QAErB,IACI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;gBACtC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBAC1C,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBAC1C,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAChD;YACE,OAAO,KAAK,CAAC;SAChB;QACD,IAAM,CAAC,GAAG,qBAAqB,CAC3B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EACtB,CAAC,EAAE,CAAC,EAAE,IAAI,CACb,CAAC;QACF,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACvB,CAAC;;IC1BD,IAAMF,KAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AAExB,aAAgB,eAAe,CAAC,KAAa;QACzC,KAAK,IAAIA,KAAG,CAAC;QACb,IAAI,KAAK,GAAG,CAAC,EAAE;YACX,KAAK,IAAIA,KAAG,CAAC;SAChB;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;;ICND,IAAMA,KAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AAKxB,aAAgBE,eAAa,CACzB,EAAU,EAAE,EAAU,EAAE,CAAS,EAAE,UAAkB,EAAE,QAAgB,EACvE,aAAsB,EACtB,SAAiB,EAAE,CAAS,EAAE,CAAS;QAGvC,IAAI,SAAS,KAAK,CAAC,EAAE;YACjB,OAAO,KAAK,CAAC;SAChB;QACD,IAAM,EAAE,GAAG,SAAS,CAAC;QAErB,CAAC,IAAI,EAAE,CAAC;QACR,CAAC,IAAI,EAAE,CAAC;QACR,IAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAEnC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE;YAC9B,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,GAAGF,KAAG,GAAG,IAAI,EAAE;YAE9C,OAAO,IAAI,CAAC;SACf;QACD,IAAI,aAAa,EAAE;YACf,IAAM,GAAG,GAAG,UAAU,CAAC;YACvB,UAAU,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;YACvC,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;SACnC;aACI;YACD,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;YACzC,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;SACxC;QACD,IAAI,UAAU,GAAG,QAAQ,EAAE;YACvB,QAAQ,IAAIA,KAAG,CAAC;SACnB;QAED,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7B,IAAI,KAAK,GAAG,CAAC,EAAE;YACX,KAAK,IAAIA,KAAG,CAAC;SAChB;QACD,OAAO,CAAC,KAAK,IAAI,UAAU,IAAI,KAAK,IAAI,QAAQ;gBACxC,KAAK,GAAGA,KAAG,IAAI,UAAU,IAAI,KAAK,GAAGA,KAAG,IAAI,QAAQ,CAAC,CAAC;IAClE,CAAC;;aCjDuB,WAAW,CAC/B,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,CAAS,EAAE,CAAS;QAEpE,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE;YAC1C,OAAO,CAAC,CAAC;SACZ;QAED,IAAI,EAAE,KAAK,EAAE,EAAE;YACX,OAAO,CAAC,CAAC;SACZ;QACD,IAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAE/B,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAE3B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACpB,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;SAC9B;QAED,IAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;QAG9B,OAAO,EAAE,KAAK,CAAC,GAAG,QAAQ,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IAClD,CAAC;;ICfD,IAAMI,KAAG,GAAG,SAAS,CAAC,GAAG,CAAC;IAC1B,IAAMJ,KAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IAExB,IAAMvC,SAAO,GAAG,IAAI,CAAC;IAErB,SAAS,aAAa,CAAC,CAAS,EAAE,CAAS;QACvC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAGA,SAAO,CAAC;IACrC,CAAC;IAGD,IAAM,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAM,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEzB,SAAS,WAAW;QAChB,IAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACvB,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACrB,CAAC;IAED,SAAS,YAAY,CACjB,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAC9F,CAAS,EAAE,CAAS;QAGpB,IACI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;gBACjC,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAC3C;YACE,OAAO,CAAC,CAAC;SACZ;QACD,IAAM,MAAM,GAAG4C,WAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3D,IAAI,MAAM,KAAK,CAAC,EAAE;YACd,OAAO,CAAC,CAAC;SACZ;aACI;YACD,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;YAClB,IAAI,GAAG,SAAA,CAAC;YACR,IAAI,GAAG,SAAA,CAAC;YACR,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7B,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAGjB,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;gBAE1C,IAAI,EAAE,GAAGhB,OAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC1C,IAAI,EAAE,GAAG,CAAC,EAAE;oBACR,SAAS;iBACZ;gBACD,IAAI,QAAQ,GAAG,CAAC,EAAE;oBACd,QAAQ,GAAGF,YAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;oBACvD,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;wBACzC,WAAW,EAAE,CAAC;qBACjB;oBACD,GAAG,GAAGE,OAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChD,IAAI,QAAQ,GAAG,CAAC,EAAE;wBACd,GAAG,GAAGA,OAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;qBACnD;iBACJ;gBACD,IAAI,QAAQ,KAAK,CAAC,EAAE;oBAEhB,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE;wBAChB,CAAC,IAAI,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;qBAChC;yBACI,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE;wBACrB,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;qBACjC;yBACI;wBACD,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;qBAChC;iBACJ;qBACI;oBAED,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE;wBAChB,CAAC,IAAI,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;qBAChC;yBACI;wBACD,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;qBAChC;iBACJ;aACJ;YACD,OAAO,CAAC,CAAC;SACZ;IACL,CAAC;IAED,SAAS,gBAAgB,CACrB,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EACtE,CAAS,EAAE,CAAS;QAGpB,IACI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;gBACvB,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EACjC;YACE,OAAO,CAAC,CAAC;SACZ;QACD,IAAM,MAAM,GAAGiB,eAAqB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3D,IAAI,MAAM,KAAK,CAAC,EAAE;YACd,OAAO,CAAC,CAAC;SACZ;aACI;YACD,IAAM,CAAC,GAAGf,iBAAuB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAClB,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,IAAI,EAAE,GAAGE,WAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;oBAE7B,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;oBAExD,IAAI,EAAE,GAAGA,WAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjD,IAAI,EAAE,GAAG,CAAC,EAAE;wBACR,SAAS;qBACZ;oBACD,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;wBACd,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;qBAC/B;yBACI;wBACD,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;qBAC/B;iBACJ;gBACD,OAAO,CAAC,CAAC;aACZ;iBACI;gBAED,IAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;gBAE1D,IAAM,EAAE,GAAGA,WAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnD,IAAI,EAAE,GAAG,CAAC,EAAE;oBACR,OAAO,CAAC,CAAC;iBACZ;gBACD,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;aACjC;SACJ;IACL,CAAC;IAID,SAAS,UAAU,CACf,EAAU,EAAE,EAAU,EAAE,CAAS,EAAE,UAAkB,EAAE,QAAgB,EAAE,aAAsB,EAC/F,CAAS,EAAE,CAAS;QAEpB,CAAC,IAAI,EAAE,CAAC;QACR,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;YACjB,OAAO,CAAC,CAAC;SACZ;QACD,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QAChB,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAEf,IAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC;QAC/C,IAAI,MAAM,GAAG,IAAI,EAAE;YACf,OAAO,CAAC,CAAC;SACZ;QACD,IAAI,MAAM,IAAIO,KAAG,GAAG,IAAI,EAAE;YAEtB,UAAU,GAAG,CAAC,CAAC;YACf,QAAQ,GAAGA,KAAG,CAAC;YACf,IAAM,GAAG,GAAG,aAAa,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC1C,OAAO,GAAG,CAAC;aACd;iBACI;gBACD,OAAO,CAAC,CAAC;aACZ;SACJ;QAED,IAAI,UAAU,GAAG,QAAQ,EAAE;YAEvB,IAAM,KAAG,GAAG,UAAU,CAAC;YACvB,UAAU,GAAG,QAAQ,CAAC;YACtB,QAAQ,GAAG,KAAG,CAAC;SAClB;QAGD,IAAI,UAAU,GAAG,CAAC,EAAE;YAChB,UAAU,IAAIA,KAAG,CAAC;YAClB,QAAQ,IAAIA,KAAG,CAAC;SACnB;QAED,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxB,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;gBACb,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9B,IAAI,GAAG,GAAG,aAAa,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjC,IAAI,KAAK,GAAG,CAAC,EAAE;oBACX,KAAK,GAAGA,KAAG,GAAG,KAAK,CAAC;iBACvB;gBACD,IACI,CAAC,KAAK,IAAI,UAAU,IAAI,KAAK,IAAI,QAAQ;wBACrC,KAAK,GAAGA,KAAG,IAAI,UAAU,IAAI,KAAK,GAAGA,KAAG,IAAI,QAAQ,CAAC,EAC3D;oBACE,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE;wBAC9C,GAAG,GAAG,CAAC,GAAG,CAAC;qBACd;oBACD,CAAC,IAAI,GAAG,CAAC;iBACZ;aACJ;SACJ;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAGD,SAAS,WAAW,CAChB,IAAe,EAAE,SAAiB,EAAE,QAAiB,EAAE,CAAS,EAAE,CAAS;QAE3E,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,CAAC;QAEP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG;YACtB,IAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YACtB,IAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;YAExB,IAAI,GAAG,KAAKI,KAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAExB,IAAI,CAAC,QAAQ,EAAE;oBACX,CAAC,IAAI,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;iBAC1C;aAKJ;YAED,IAAI,OAAO,EAAE;gBAKT,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACb,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAEjB,EAAE,GAAG,EAAE,CAAC;gBACR,EAAE,GAAG,EAAE,CAAC;aACX;YAED,QAAQ,GAAG;gBACP,KAAKA,KAAG,CAAC,CAAC;oBAGN,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACf,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACf,EAAE,GAAG,EAAE,CAAC;oBACR,EAAE,GAAG,EAAE,CAAC;oBACR,MAAM;gBACV,KAAKA,KAAG,CAAC,CAAC;oBACN,IAAI,QAAQ,EAAE;wBACV,IAAIG,aAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;4BACnE,OAAO,IAAI,CAAC;yBACf;qBACJ;yBACI;wBAED,CAAC,IAAI,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;qBAC7D;oBACD,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACf,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACf,MAAM;gBACV,KAAKH,KAAG,CAAC,CAAC;oBACN,IAAI,QAAQ,EAAE;wBACV,IAAII,eAAmB,CAAC,EAAE,EAAE,EAAE,EAC1B,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAChE,SAAS,EAAE,CAAC,EAAE,CAAC,CAClB,EAAE;4BACC,OAAO,IAAI,CAAC;yBACf;qBACJ;yBACI;wBACD,CAAC,IAAI,YAAY,CACb,EAAE,EAAE,EAAE,EACN,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAChE,CAAC,EAAE,CAAC,CACP,IAAI,CAAC,CAAC;qBACV;oBACD,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACf,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACf,MAAM;gBACV,KAAKJ,KAAG,CAAC,CAAC;oBACN,IAAI,QAAQ,EAAE;wBACV,IAAIK,eAAuB,CAAC,EAAE,EAAE,EAAE,EAC9B,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAC1C,SAAS,EAAE,CAAC,EAAE,CAAC,CAClB,EAAE;4BACC,OAAO,IAAI,CAAC;yBACf;qBACJ;yBACI;wBACD,CAAC,IAAI,gBAAgB,CACjB,EAAE,EAAE,EAAE,EACN,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAC1C,CAAC,EAAE,CAAC,CACP,IAAI,CAAC,CAAC;qBACV;oBACD,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACf,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACf,MAAM;gBACV,KAAKL,KAAG,CAAC,CAAC;oBAEN,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACrB,IAAM,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACxB,IAAM,MAAM,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBAEzB,CAAC,IAAI,CAAC,CAAC;oBACP,IAAM,aAAa,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACxC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;oBAC/B,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;oBAE/B,IAAI,CAAC,OAAO,EAAE;wBACV,CAAC,IAAI,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;qBAC1C;yBACI;wBAED,EAAE,GAAG,EAAE,CAAC;wBACR,EAAE,GAAG,EAAE,CAAC;qBACX;oBAED,IAAM,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;oBACnC,IAAI,QAAQ,EAAE;wBACV,IAAIM,eAAiB,CACjB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,aAAa,EAChD,SAAS,EAAE,EAAE,EAAE,CAAC,CACnB,EAAE;4BACC,OAAO,IAAI,CAAC;yBACf;qBACJ;yBACI;wBACD,CAAC,IAAI,UAAU,CACX,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,aAAa,EAChD,EAAE,EAAE,CAAC,CACR,CAAC;qBACL;oBACD,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;oBACxC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;oBACxC,MAAM;gBACV,KAAKN,KAAG,CAAC,CAAC;oBACN,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACpB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACpB,IAAM,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACxB,IAAM,MAAM,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACzB,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;oBAChB,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;oBACjB,IAAI,QAAQ,EAAE;wBACV,IAAIG,aAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;+BAChDA,aAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;+BACnDA,aAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;+BACnDA,aAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,EACxD;4BACE,OAAO,IAAI,CAAC;yBACf;qBACJ;yBACI;wBAED,CAAC,IAAI,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBACvC,CAAC,IAAI,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;qBAC1C;oBACD,MAAM;gBACV,KAAKH,KAAG,CAAC,CAAC;oBACN,IAAI,QAAQ,EAAE;wBACV,IAAIG,aAAkB,CAClB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAClC,EAAE;4BACC,OAAO,IAAI,CAAC;yBACf;qBACJ;yBACI;wBAED,CAAC,IAAI,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;qBAM1C;oBACD,EAAE,GAAG,EAAE,CAAC;oBACR,EAAE,GAAG,EAAE,CAAC;oBACR,MAAM;aACb;SACJ;QACD,IAAI,CAAC,QAAQ,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;YACrC,CAAC,IAAI,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;SAC/C;QACD,OAAO,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;AAED,aAAgB,OAAO,CAAC,SAAoB,EAAE,CAAS,EAAE,CAAS;QAC9D,OAAO,WAAW,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;AAED,aAAgBL,eAAa,CAAC,SAAoB,EAAE,SAAiB,EAAE,CAAS,EAAE,CAAS;QACvF,OAAO,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;;IC/VM,IAAM,kBAAkB,GAAmB,QAAQ,CAAC;QACvD,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,CAAC;QAChB,WAAW,EAAE,CAAC;QACd,aAAa,EAAE,CAAC;QAEhB,cAAc,EAAE,CAAC;QACjB,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,EAAE;QAEd,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,KAAK;KACH,EAAE,oBAAoB,CAAC,CAAC;AAG3C,IAAO,IAAM,4BAA4B,GAAkC;QACvE,KAAK,EAAE,QAAQ,CAAyE;YACpF,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,IAAI;YACZ,aAAa,EAAE,IAAI;YACnB,WAAW,EAAE,IAAI;YACjB,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,IAAI;YACpB,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,IAAI;SACmB,EAAE,8BAA8B,CAAC,KAAK,CAAC;KAChF,CAAC;IA2CH,IAAM,cAAc,GAAI,mBAAyC,CAAC,MAAM,CAAC,CAAC,WAAW;QACjF,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ;KAC3C,CAAmB,CAAC;IAErB;QAAwD,wBAAkB;QA6BtE,cAAY,IAAY;mBACpB,kBAAM,IAAI,CAAC;SACd;QAED,qBAAM,GAAN;YAAA,iBAmCC;YAlCG,iBAAM,MAAM,WAAE,CAAC;YAEf,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,IAAI,KAAK,CAAC,KAAK,EAAE;gBACb,IAAM,OAAO,GAAS,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,EAAE,CAAC;gBAClE,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;oBAChD,OAAO,CAAC,SAAS,GAAG,UAAA,GAAG;wBACnB,KAAI,CAAC,SAAS,CAAC,GAAG,EAAE,KAAI,CAAC,KAAK,CAAC,CAAC;qBACnC,CAAC;iBACL;gBAED,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;gBAEtB,IAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;gBAEnC,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE;oBACnB,IAAK,YAAoB,CAAC,GAAG,CAAC,KAAM,KAAa,CAAC,GAAG,CAAC,EAAE;wBACnD,YAAoB,CAAC,GAAG,CAAC,GAAI,KAAa,CAAC,GAAG,CAAC,CAAC;qBACpD;iBACJ;gBACD,YAAY,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;gBACpD,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC;gBAC1B,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC;gBAChC,KAAK,CAAC,WAAW,KAAK,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;gBAElD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;oBAC3C,OAAe,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;iBACjE;gBAED,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC;aACjC;iBACI,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;aACxB;SACJ;QAED,8BAAe,GAAf;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;SACxB;QAES,oBAAK,GAAf,UAAgB,KAAa;YAEzB,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YAE5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACpC,IAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YAC5C,IAAI,YAAY,EAAE;gBACd,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;aAC/B;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrC,IAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACzB,IAAI,GAAG,KAAK,OAAO,EAAE;oBACjB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;wBAEb,IAAI,CAAC,QAAQ,CAAC,KAAuB,CAAC,CAAC;qBAC1C;yBACI;wBACD,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAuB,CAAC,CAAC;qBAC/C;iBACJ;qBACI,IAAI,GAAG,KAAK,OAAO,EAAE;oBAEtB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAuB,CAAC,CAAC;iBAC/C;qBACI;oBACD,iBAAM,MAAM,YAAC,GAAU,EAAE,KAAK,CAAC,CAAC;iBACnC;aACJ;YAGD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACb,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;aACrB;SAQJ;QAES,8BAAe,GAAzB;YACI,OAAO,IAAI,CAAC;SACf;QAGS,8BAAe,GAAzB;YACI,OAAO,EAAE,CAAC;SACb;QAES,8BAAe,GAAzB;YACI,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;SACzB;QAES,gCAAiB,GAA3B;YACI,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACjC,IAAI,QAAQ,KAAK,MAAM,EAAE;gBACrB,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;oBACpB,IAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBAGjC,IAAI,OAAO,GAAG,GAAG,EAAE;wBACf,OAAO,gBAAgB,CAAC;qBAC3B;yBACI,IAAI,OAAO,GAAG,GAAG,EAAE;wBACpB,OAAO,mBAAmB,CAAC;qBAC9B;oBACD,OAAO,iBAAiB,CAAC;iBAC5B;qBACI,IAAI,QAAQ,EAAE;oBACf,OAAO,iBAAiB,CAAC;iBAC5B;aAEJ;YACD,OAAO,gBAAgB,CAAC;SAC3B;QAES,kCAAmB,GAA7B,UAA8B,QAAiB;YAC3C,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAEjC,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBACpB,IAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;gBACrB,IAAM,UAAU,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC7C,IAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,mBAAmB,CAAC;gBAE3D,IAAI,UAAU,KAAK,WAAW,EAAE;oBAC5B,OAAO,QAAQ,CAAC;iBACnB;aACJ;SACJ;QAID,wBAAS,GAAT,UACI,GAAyC,EACzC,QAAyB,EACzB,OAAiB,KACjB;QAEJ,0BAAW,GAAX;YACI,IAAI,CAAC,OAAO,IAAI,CAAC,iBAAiB,CAAC;SACtC;QAED,kCAAmB,GAAnB,UAAoB,OAAiB;YAEjC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC,IAAI,CAAC;SACpB;QAED,8BAAe,GAAf;YACI,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;SACpC;QAED,wBAAS,GAAT;YACI,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAC5B,OAAO,EAAE,MAAM,IAAI,IAAI,IAAI,MAAM,KAAK,MAAM,IAAI,EAAE,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;SAC3E;QAED,sBAAO,GAAP;YACI,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YACxB,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,MAAM,CAAC;SAC1C;QAED,8BAAe,GAAf;YACI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YACtB,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,IAAM,eAAe,GAAG,CAAC,IAAI,CAAC;YAC9B,IAAI,eAAe,EAAE;gBACjB,IAAI,WAAW,GAAG,KAAK,CAAC;gBACxB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBACZ,WAAW,GAAG,IAAI,CAAC;oBAEnB,IAAI,CAAC,eAAe,EAAE,CAAC;iBAC1B;gBACD,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACrB,IAAI,WAAW,KAAK,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC,EAAE;oBACnD,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBACxC,IAAI,CAAC,WAAW,EAAE,CAAC;iBACtB;gBACD,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;aACjC;YACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAElB,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;gBAItD,IAAM,UAAU,GAAG,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBACzE,IAAI,IAAI,CAAC,OAAO,IAAI,eAAe,EAAE;oBACjC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAEtB,IAAM,SAAS,GAAG,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;oBAEhE,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC;oBAGxB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;wBACjB,IAAM,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC;wBAC3D,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,IAAI,IAAI,GAAG,CAAC,GAAG,sBAAsB,CAAC,CAAC;qBAChF;oBAGD,IAAI,SAAS,GAAG,KAAK,EAAE;wBACnB,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;wBAClC,UAAU,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;wBACnC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;wBAClC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;qBACrC;iBACJ;gBAGD,OAAO,UAAU,CAAC;aACrB;YAED,OAAO,IAAI,CAAC;SACf;QAED,sBAAO,GAAP,UAAQ,CAAS,EAAE,CAAS;YACxB,IAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClD,IAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACpC,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAChB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAEhB,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;gBACpB,IAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC5B,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;oBAClB,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;oBAChC,IAAI,SAAS,GAAG,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;oBAE9D,IAAI,SAAS,GAAG,KAAK,EAAE;wBAEnB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;4BACjB,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;yBAChE;wBACD,IAAIS,eAAyB,CACzB,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC,CACzC,EAAE;4BACC,OAAO,IAAI,CAAC;yBACf;qBACJ;iBACJ;gBACD,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;oBAChB,OAAOC,OAAmB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;iBAC/C;aACJ;YACD,OAAO,KAAK,CAAC;SAChB;QAKD,yBAAU,GAAV;YACI,IAAI,CAAC,OAAO,IAAI,iBAAiB,CAAC;YAClC,IAAI,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;aACrB;YACD,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;aAC9B;YACD,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;QAED,oBAAK,GAAL;YACI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;QAMD,2BAAY,GAAZ,UAAa,IAAa;YACtB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SACtC;QAGD,oCAAqB,GAArB,UAAsB,SAAiB;YACnC,IAAI,SAAS,KAAK,OAAO,EAAE;gBACvB,IAAI,CAAC,UAAU,EAAE,CAAC;aACrB;iBACI,IAAI,SAAS,KAAK,OAAO,EAAE;gBAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;aACrB;iBACI;gBACD,IAAI,CAAC,UAAU,EAAE,CAAC;aACrB;SACJ;QAGD,qBAAM,GAAN,UAAO,GAAY,EAAE,KAAuB;YAExC,IAAI,GAAG,KAAK,OAAO,EAAE;gBACjB,IAAI,CAAC,QAAQ,CAAC,KAAuB,CAAC,CAAC;aAC1C;iBACI;gBACD,iBAAM,MAAM,YAAC,GAA6B,EAAE,KAAK,CAAC,CAAC;aACtD;SACJ;QAID,uBAAQ,GAAR,UAAS,QAA+C,EAAE,KAAe;YACrE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACvB,IAAI,CAAC,KAAK,EAAE;gBACR,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;aAC3B;YAED,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;gBAC9B,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;aAC3B;iBACI;gBACD,MAAM,CAAC,KAAK,EAAE,QAA0B,CAAC,CAAC;aAC7C;YACD,IAAI,CAAC,UAAU,EAAE,CAAC;YAElB,OAAO,IAAI,CAAC;SACf;QAKD,2BAAY,GAAZ;YACI,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC,CAAC;SAC/C;QAMD,0BAAW,GAAX,UAAY,GAAoB;YAC5B,OAAO,YAAY,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;SAChD;QAES,iCAAkB,GAA5B,UAA6B,OAAkB;YAC3C,iBAAM,kBAAkB,YAAC,OAAO,CAAC,CAAC;YAElC,IAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;YAItC,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;gBACrC,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;aAC9C;SACJ;QAES,6BAAc,GAAxB,UACI,SAAiB,EACjB,KAAgB,EAChB,WAAsB,EACtB,iBAA0B,EAC1B,UAAmB,EACnB,YAAkC;YAElC,iBAAM,cAAc,YAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;YACjG,IAAM,oBAAoB,GAAG,EAAE,KAAK,IAAI,iBAAiB,CAAC,CAAC;YAC3D,IAAI,WAA2B,CAAC;YAChC,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE;gBAEtB,IAAI,UAAU,EAAE;oBACZ,IAAI,iBAAiB,EAAE;wBACnB,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;qBAC7B;yBACI;wBAED,WAAW,GAAG,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;wBAC5C,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;qBACpC;iBACJ;qBACI;oBAED,WAAW,GAAG,MAAM,CAAC,EAAE,EAAE,iBAAiB,GAAG,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;oBAC7E,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;iBACpC;aACJ;iBACI,IAAI,oBAAoB,EAAE;gBAC3B,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC;aACnC;YAED,IAAI,WAAW,EAAE;gBACb,IAAI,UAAU,EAAE;oBAEZ,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;oBAEpC,IAAM,uBAAuB,GAAmB,EAAE,CAAC;oBACnD,IAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;oBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACvC,IAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;wBACzB,IAAI,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;4BACrC,IAAI,CAAC,KAAwB,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;yBAC1D;6BACI;4BACD,uBAAuB,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;yBACnD;qBACJ;oBACD,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE;wBAC7B,KAAK,EAAE,uBAAuB;qBACxB,EAAE,YAAY,CAAC,CAAC;iBAC7B;qBACI;oBACD,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;oBACzB,IAAI,CAAC,UAAU,EAAE,CAAC;iBACrB;aACJ;SACJ;QAES,2BAAY,GAAtB,UAAuB,MAAmB;YACtC,IAAM,WAAW,GAAG,iBAAM,YAAY,YAAC,MAAM,CAAc,CAAC;YAC5D,IAAI,WAA2B,CAAC;YAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACpC,IAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAI,KAAK,CAAC,KAAK,EAAE;oBACb,WAAW,GAAG,WAAW,IAAI,EAAE,CAAC;oBAChC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;iBAC9C;aACJ;YACD,IAAI,WAAW,EAAE;gBACb,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC;aACnC;YACD,OAAO,WAAW,CAAC;SACtB;QAED,qCAAsB,GAAtB;YACI,OAAO,4BAA4B,CAAC;SACvC;QAID,yBAAU,GAAV;YACI,OAAO,KAAK,CAAC;SAChB;QAYM,WAAM,GAAb,UAA6C,YAW5C;YAOG;gBAAkB,uBAAI;gBAYlB,aAAY,IAAoB;oBAAhC,YACI,kBAAM,IAAI,CAAC,SAEd;oBADG,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAW,EAAE,IAAI,CAAC,CAAC;;iBAClE;gBAXD,6BAAe,GAAf;oBACI,OAAO,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;iBACpC;gBAED,6BAAe,GAAf;oBACI,OAAO,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;iBACpC;gBAML,UAAC;aAhBD,CAAkB,IAAI,GAgBrB;YAGD,KAAK,IAAI,GAAG,IAAI,YAAY,EAAE;gBAC1B,IAAI,OAAQ,YAAoB,CAAC,GAAG,CAAC,KAAK,UAAU,EAAE;oBACjD,GAAG,CAAC,SAAiB,CAAC,GAAG,CAAC,GAAI,YAAoB,CAAC,GAAG,CAAC,CAAC;iBAC5D;aACJ;YAKD,OAAO,GAAU,CAAC;SACrB;QAEgB,qBAAgB,GAAG,CAAC;YACjC,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC;YACxB,SAAS,CAAC,sBAAsB,GAAG,CAAC,CAAC;YACrC,SAAS,CAAC,sBAAsB,GAAG,CAAC,CAAC;YACrC,SAAS,CAAC,gBAAgB,GAAG,KAAK,CAAC;YACnC,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC;YAC5B,SAAS,CAAC,OAAO,GAAG,UAAU,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;SAC1E,GAAG,CAAA;QACR,WAAC;KAAA,CA9hBuD,WAAW,GA8hBlE;;IC9pBD,IAAMR,KAAG,GAAG,SAAS,CAAC,GAAG,CAAC;IAE1B,IAAM,MAAM,GAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3C,IAAMS,UAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAC3B,IAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;AAE7B,aAAwB,aAAa,CAAC,IAAe,EAAE,CAAc;QACjE,IAAI,CAAC,CAAC,EAAE;YACJ,OAAO;SACV;QAED,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC;QACR,IAAI,MAAc,CAAC;QACnB,IAAI,CAAS,CAAC;QACd,IAAI,CAAS,CAAC;QACd,IAAI,CAAS,CAAC;QACd,IAAI,CAAc,CAAC;QAEnB,IAAM,CAAC,GAAGT,KAAG,CAAC,CAAC,CAAC;QAChB,IAAM,CAAC,GAAGA,KAAG,CAAC,CAAC,CAAC;QAChB,IAAM,CAAC,GAAGA,KAAG,CAAC,CAAC,CAAC;QAChB,IAAM,CAAC,GAAGA,KAAG,CAAC,CAAC,CAAC;QAChB,IAAM,CAAC,GAAGA,KAAG,CAAC,CAAC,CAAC;QAChB,IAAM,CAAC,GAAGA,KAAG,CAAC,CAAC,CAAC;QAEhB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG;YACzB,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YAChB,CAAC,GAAG,CAAC,CAAC;YACN,MAAM,GAAG,CAAC,CAAC;YAEX,QAAQ,GAAG;gBACP,KAAK,CAAC;oBACF,MAAM,GAAG,CAAC,CAAC;oBACX,MAAM;gBACV,KAAK,CAAC;oBACF,MAAM,GAAG,CAAC,CAAC;oBACX,MAAM;gBACV,KAAK,CAAC;oBACF,MAAM,GAAG,CAAC,CAAC;oBACX,MAAM;gBACV,KAAK,CAAC;oBACF,MAAM,GAAG,CAAC,CAAC;oBACX,MAAM;gBACV,KAAK,CAAC;oBACF,IAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACf,IAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACf,IAAM,EAAE,GAAGS,UAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/C,IAAM,EAAE,GAAGA,UAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/C,IAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;oBAE/C,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;oBAEf,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;oBAGf,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;oBAChB,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;oBAGhB,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;oBAEnB,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;oBAEnB,CAAC,IAAI,CAAC,CAAC;oBACP,CAAC,GAAG,CAAC,CAAC;oBACN,MAAM;gBACV,KAAK,CAAC;oBAEF,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACjB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACjBC,cAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC1B,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEjB,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBAClB,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBAClBA,cAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC1B,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aACxB;YAED,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzB,IAAI,GAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAClB,GAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;gBACjB,GAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;gBAEjBA,cAAgB,CAAC,GAAC,EAAE,GAAC,EAAE,CAAC,CAAC,CAAC;gBAE1B,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,GAAC,CAAC,CAAC,CAAC,CAAC;gBACjB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,GAAC,CAAC,CAAC,CAAC,CAAC;aACpB;SACJ;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;IAC3B,CAAC;;ICzFD,IAAMD,UAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAC3B,IAAMd,SAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAMD,SAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAMiB,IAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IAEnB,SAAS,IAAI,CAAC,CAAc;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;AAAA,IACD,SAAS,MAAM,CAAC,CAAc,EAAE,CAAc;QAC1C,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;AAAA,IACD,SAAS,MAAM,CAAC,CAAc,EAAE,CAAc;QAC1C,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;cAChC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;AAAA,IAED,SAAS,UAAU,CACf,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EACtE,EAAU,EAAE,EAAU,EAAE,MAAc,EAAE,GAAW,EAAE,IAAe;QAGpE,IAAM,GAAG,GAAG,MAAM,IAAIA,IAAE,GAAG,KAAK,CAAC,CAAC;QAClC,IAAM,EAAE,GAAGjB,SAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,GAAG;cAC3BC,SAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;QAC7C,IAAM,EAAE,GAAG,CAAC,CAAC,GAAGA,SAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,GAAG;cAChCD,SAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;QAE7C,IAAM,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAE7D,IAAI,MAAM,GAAG,CAAC,EAAE;YACZ,EAAE,IAAIe,UAAQ,CAAC,MAAM,CAAC,CAAC;YACvB,EAAE,IAAIA,UAAQ,CAAC,MAAM,CAAC,CAAC;SAC1B;QAED,IAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;cACvBA,UAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;mBACvB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;mBACtB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;kBACjD,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAC3B,IAAI,CAAC,CAAC;QAEf,IAAM,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC7B,IAAM,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAE9B,IAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG;cACZf,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG;cAClBC,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QACjC,IAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG;cAChBA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG;cAClBD,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAE7B,IAAM,KAAK,GAAG,MAAM,CAAC,CAAE,CAAC,EAAE,CAAC,CAAE,EAAE,CAAE,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,CAAE,CAAC,CAAC;QACrE,IAAM,CAAC,GAAG,CAAE,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,CAAE,CAAC;QAC/C,IAAM,CAAC,GAAG,CAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,CAAE,CAAC;QACzD,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE1B,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;YACpB,MAAM,GAAGiB,IAAE,CAAC;SACf;QACD,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE;YACnB,MAAM,GAAG,CAAC,CAAC;SACd;QAED,IAAI,MAAM,GAAG,CAAC,EAAE;YACZ,IAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAGA,IAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YAE9C,MAAM,GAAGA,IAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAIA,IAAE,CAAC;SAClC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC;IAGD,IAAM,UAAU,GAAG,kCAAkC,CAAC;IAOtD,IAAM,SAAS,GAAG,qCAAqC,CAAC;IAGxD,SAAS,yBAAyB,CAAC,IAAY;QAC3C,IAAM,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;QAE7B,IAAI,CAAC,IAAI,EAAE;YACP,OAAO,IAAI,CAAC;SACf;QAkBD,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,QAAQ,GAAG,GAAG,CAAC;QACnB,IAAI,QAAQ,GAAG,GAAG,CAAC;QACnB,IAAI,OAAO,CAAC;QAEZ,IAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC;QAQ1B,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,EAAE;YAEV,OAAO,IAAI,CAAC;SACf;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,IAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAE/B,IAAI,GAAG,SAAA,CAAC;YAaR,IAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAsB,IAAI,EAAE,CAAC;YAC9D,IAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC3B,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;aAC5C;YAED,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,OAAO,GAAG,GAAG,IAAI,EAAE;gBACf,IAAI,MAAM,SAAA,CAAC;gBACX,IAAI,MAAM,SAAA,CAAC;gBAEX,IAAI,EAAE,SAAA,CAAC;gBACP,IAAI,EAAE,SAAA,CAAC;gBACP,IAAI,GAAG,SAAA,CAAC;gBACR,IAAI,EAAE,SAAA,CAAC;gBACP,IAAI,EAAE,SAAA,CAAC;gBAEP,IAAI,EAAE,GAAG,GAAG,CAAC;gBACb,IAAI,EAAE,GAAG,GAAG,CAAC;gBAEb,IAAI,GAAG,SAAQ,CAAC;gBAChB,IAAI,QAAQ,SAAyB,CAAC;gBAEtC,QAAQ,MAAM;oBACV,KAAK,GAAG;wBACJ,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBAChB,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBAChB,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;wBACZ,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;wBAC5B,MAAM;oBACV,KAAK,GAAG;wBACJ,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACf,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACf,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;wBACZ,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;wBAC5B,MAAM;oBACV,KAAK,GAAG;wBACJ,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBAChB,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBAChB,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;wBACZ,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;wBAC5B,QAAQ,GAAG,GAAG,CAAC;wBACf,QAAQ,GAAG,GAAG,CAAC;wBACf,MAAM,GAAG,GAAG,CAAC;wBACb,MAAM;oBACV,KAAK,GAAG;wBACJ,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACf,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACf,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;wBACZ,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;wBAC5B,QAAQ,GAAG,GAAG,CAAC;wBACf,QAAQ,GAAG,GAAG,CAAC;wBACf,MAAM,GAAG,GAAG,CAAC;wBACb,MAAM;oBACV,KAAK,GAAG;wBACJ,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBAChB,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;wBACZ,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;wBAC5B,MAAM;oBACV,KAAK,GAAG;wBACJ,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACf,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;wBACZ,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;wBAC5B,MAAM;oBACV,KAAK,GAAG;wBACJ,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBAChB,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;wBACZ,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;wBAC5B,MAAM;oBACV,KAAK,GAAG;wBACJ,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACf,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;wBACZ,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;wBAC5B,MAAM;oBACV,KAAK,GAAG;wBACJ,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;wBACZ,IAAI,CAAC,OAAO,CACR,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAClE,CAAC;wBACF,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;wBACjB,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;wBACjB,MAAM;oBACV,KAAK,GAAG;wBACJ,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;wBACZ,IAAI,CAAC,OAAO,CACR,GAAG,EACH,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAC9B,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAC9B,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CACjC,CAAC;wBACF,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;wBAClB,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;wBAClB,MAAM;oBACV,KAAK,GAAG;wBACJ,MAAM,GAAG,GAAG,CAAC;wBACb,MAAM,GAAG,GAAG,CAAC;wBACb,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBACjB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;wBACrB,IAAI,OAAO,KAAK,GAAG,CAAC,CAAC,EAAE;4BACnB,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;4BAClC,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;yBACrC;wBACD,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;wBACZ,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACd,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACd,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACf,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACf,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;wBACpD,MAAM;oBACV,KAAK,GAAG;wBACJ,MAAM,GAAG,GAAG,CAAC;wBACb,MAAM,GAAG,GAAG,CAAC;wBACb,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBACjB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;wBACrB,IAAI,OAAO,KAAK,GAAG,CAAC,CAAC,EAAE;4BACnB,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;4BAClC,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;yBACrC;wBACD,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;wBACZ,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACpB,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACpB,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBAChB,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBAChB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;wBACpD,MAAM;oBACV,KAAK,GAAG;wBACJ,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACd,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACd,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACf,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACf,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;wBACZ,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;wBACpC,MAAM;oBACV,KAAK,GAAG;wBACJ,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;wBACpB,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;wBACpB,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBAChB,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBAChB,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;wBACZ,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;wBACpC,MAAM;oBACV,KAAK,GAAG;wBACJ,MAAM,GAAG,GAAG,CAAC;wBACb,MAAM,GAAG,GAAG,CAAC;wBACb,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBACjB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;wBACrB,IAAI,OAAO,KAAK,GAAG,CAAC,CAAC,EAAE;4BACnB,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;4BAClC,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;yBACrC;wBACD,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACf,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACf,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;wBACZ,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;wBAC5C,MAAM;oBACV,KAAK,GAAG;wBACJ,MAAM,GAAG,GAAG,CAAC;wBACb,MAAM,GAAG,GAAG,CAAC;wBACb,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBACjB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;wBACrB,IAAI,OAAO,KAAK,GAAG,CAAC,CAAC,EAAE;4BACnB,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;4BAClC,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;yBACrC;wBACD,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBAChB,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBAChB,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;wBACZ,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;wBAC5C,MAAM;oBACV,KAAK,GAAG;wBACJ,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACd,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACd,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACf,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACd,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBAEd,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC;wBACnB,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACf,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACf,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;wBACZ,UAAU,CACN,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CACnD,CAAC;wBACF,MAAM;oBACV,KAAK,GAAG;wBACJ,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACd,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACd,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACf,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBACd,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBAEd,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC;wBACnB,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBAChB,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;wBAChB,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;wBACZ,UAAU,CACN,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CACnD,CAAC;wBACF,MAAM;iBACb;aACJ;YAED,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE;gBAClC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;gBACZ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAElB,GAAG,GAAG,QAAQ,CAAC;gBACf,GAAG,GAAG,QAAQ,CAAC;aAClB;YAED,OAAO,GAAG,GAAG,CAAC;SACjB;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,OAAO,IAAI,CAAC;IAChB,CAAC;IAMD;QAAsB,2BAAI;QAA1B;;SAEC;QADG,gCAAc,GAAd,UAAe,CAAc,KAAI;QACrC,cAAC;IAAD,CAFA,CAAsB,IAAI,GAEzB;IAED,SAAS,WAAW,CAAC,IAA0C;QAC3D,OAAQ,IAAkB,CAAC,OAAO,IAAI,IAAI,CAAC;IAC/C,CAAC;IAED,SAAS,iBAAiB,CAAC,GAAW,EAAE,IAAmB;QACvD,IAAM,SAAS,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;QACjD,IAAM,SAAS,GAAuB,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACvD,SAAS,CAAC,SAAS,GAAG,UAAU,IAA0C;YACtE,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE;gBACnB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAE7B,IAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC9B,IAAI,GAAG,EAAE;oBACL,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;iBAC5B;aACJ;iBACI;gBACD,IAAM,GAAG,GAAG,IAAI,CAAC;gBACjB,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;aACjC;SACJ,CAAC;QAEF,SAAS,CAAC,cAAc,GAAG,UAAyB,CAAc;YAC9D,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB,CAAC;QAEF,OAAO,SAAS,CAAC;IACrB,CAAC;AAOD,aAAgB,gBAAgB,CAAC,GAAW,EAAE,IAAoB;QAE9D,OAAO,IAAI,OAAO,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IACrD,CAAC;AAOD,aAAgB,gBAAgB,CAAC,GAAW,EAAE,WAA2B;QACrE,IAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACtD;YAAkB,uBAAO;YACrB,aAAY,IAAwB;gBAApC,YACI,kBAAM,IAAI,CAAC,SAGd;gBAFG,KAAI,CAAC,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC;gBAC/C,KAAI,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;;aACxC;YACL,UAAC;SAND,CAAkB,OAAO,GAMxB;QACD,OAAO,GAAG,CAAC;IACf,CAAC;AAQD,aAAgB,SAAS,CAAC,OAAe,EAAE,IAAe;QACtD,IAAM,QAAQ,GAAgB,EAAE,CAAC;QACjC,IAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;SACnD;QAED,IAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QAElC,UAAU,CAAC,eAAe,EAAE,CAAC;QAC7B,UAAU,CAAC,SAAS,GAAG,UAAU,IAA0C;YACvE,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE;gBACnB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAE1B,IAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC9B,IAAI,GAAG,EAAE;oBAEL,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;iBAC5B;aACJ;SACJ,CAAC;QAEF,OAAO,UAAU,CAAC;IACtB,CAAC;AAKD,aAAgB,SAAS,CAAC,UAAgB,EAAE,IAS3C;QACG,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAClB,IAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,UAAU,CAAC,KAAK,EAAE;YAClB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SACnC;QACD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAEhC,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;SAC/D;aACI;YAED,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;aAC7D;iBACI;gBACD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;aAClC;SACJ;QAGD,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;QACrC,IAAgB,CAAC,cAAc,GAAI,IAAgB,CAAC,cAAc,CAAC;QAEpE,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QAEhC,OAAO,IAAI,CAAC;IAChB,CAAC;;;;;;;;;;IC1eM,IAAM,mBAAmB,GAAqB,QAAQ,CAAC;QAC1D,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;KACP,EAAE,oBAAoB,CAAC,CAAC;AAEzB,IAAO,IAAM,6BAA6B,GAAmC;QACzE,KAAK,EAAE,QAAQ,CAA2E;YACtF,CAAC,EAAE,IAAI;YACP,CAAC,EAAE,IAAI;YACP,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;YACZ,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI;SAChB,EAAE,8BAA8B,CAAC,KAAK,CAAC;KAC1C,CAAC;IAUH,SAAS,WAAW,CAAC,MAAe;QAChC,OAAO,CAAC,EAAE,MAAM;eACT,OAAO,MAAM,KAAK,QAAQ;eAEzB,MAA2B,CAAC,KAAK,IAAK,MAA2B,CAAC,MAAM,CAAC,CAAC;IACtF,CAAC;IAED;QAAsB,2BAAuB;QAA7C;;SAiEC;QAlDG,6BAAW,GAAX,UAAY,GAAqB;YAC7B,OAAO,YAAY,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;SACjD;QAEO,0BAAQ,GAAhB,UAAiB,GAAuB;YACpC,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAEzB,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,IAAI,IAAI,IAAI,EAAE;gBACd,OAAO,IAAI,CAAC;aACf;YAED,IAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;kBACtC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;YAEjC,IAAI,CAAC,WAAW,EAAE;gBACd,OAAO,CAAC,CAAC;aACZ;YAED,IAAM,QAAQ,GAAG,GAAG,KAAK,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;YACtD,IAAI,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,YAAY,IAAI,IAAI,EAAE;gBACtB,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;aAC3B;iBACI;gBACD,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC;aAClE;SACJ;QAED,0BAAQ,GAAR;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SACjC;QAED,2BAAS,GAAT;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;SAClC;QAED,wCAAsB,GAAtB;YACI,OAAO,6BAA6B,CAAC;SACxC;QAED,iCAAe,GAAf;YACI,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACb,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,CACzB,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAChE,CAAC;aACL;YACD,OAAO,IAAI,CAAC,KAAK,CAAC;SACrB;QACL,cAAC;IAAD,CAjEA,CAAsB,WAAW,GAiEhC;IAED,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC;;;QCrHjC;YACI,OAAE,GAAG,CAAC,CAAA;YACN,OAAE,GAAG,CAAC,CAAA;YACN,MAAC,GAAG,CAAC,CAAA;SACR;QAAD,kBAAC;IAAD,CAAC,IAAA;IAKD;QAAqB,0BAAiB;QAIlC,gBAAY,IAAkB;mBAC1B,kBAAM,IAAI,CAAC;SACd;QAED,gCAAe,GAAf;YACI,OAAO,IAAI,WAAW,EAAE,CAAC;SAC5B;QAED,0BAAS,GAAT,UAAU,GAA6B,EAAE,KAAkB;YAGvD,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACzC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;SACxD;QACL,aAAC;IAAD,CAlBA,CAAqB,IAAI,GAkBxB;AAAA,IAED,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC;;aCjCjB,SAAS,CAAC,GAAyC,EAAE,KAMpE;QACG,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAChB,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAChB,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACxB,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAChB,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,CAAC;QAGP,IAAI,KAAK,GAAG,CAAC,EAAE;YACX,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACd,KAAK,GAAG,CAAC,KAAK,CAAC;SAClB;QACD,IAAI,MAAM,GAAG,CAAC,EAAE;YACZ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;YACf,MAAM,GAAG,CAAC,MAAM,CAAC;SACpB;QAED,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;YACvB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;SACzB;aACI,IAAI,CAAC,YAAY,KAAK,EAAE;YACzB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;gBAChB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC5B;iBACI,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrB,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACf,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAClB;iBACI,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACV,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACf,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aACb;iBACI;gBACD,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACV,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACV,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACV,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aACb;SACJ;aACI;YACD,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;SACzB;QAED,IAAI,KAAK,CAAC;QACV,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE;YACjB,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;YAChB,EAAE,IAAI,KAAK,GAAG,KAAK,CAAC;YACpB,EAAE,IAAI,KAAK,GAAG,KAAK,CAAC;SACvB;QACD,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE;YACjB,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;YAChB,EAAE,IAAI,KAAK,GAAG,KAAK,CAAC;YACpB,EAAE,IAAI,KAAK,GAAG,KAAK,CAAC;SACvB;QACD,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE;YAClB,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;YAChB,EAAE,IAAI,MAAM,GAAG,KAAK,CAAC;YACrB,EAAE,IAAI,MAAM,GAAG,KAAK,CAAC;SACxB;QACD,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE;YAClB,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;YAChB,EAAE,IAAI,MAAM,GAAG,KAAK,CAAC;YACrB,EAAE,IAAI,MAAM,GAAG,KAAK,CAAC;SACxB;QACD,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QACtB,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9B,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACjE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC;QACvC,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACzE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;QAC/B,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACvE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QACtB,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;IACpE,CAAC;;IC/ED,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAwBzB,aAAgB,oBAAoB,CAChC,WAA+B,EAC/B,UAAqB,EACrB,KAAwC;QAExC,IAAI,CAAC,UAAU,EAAE;YACb,OAAO;SACV;QAED,IAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC;QACzB,IAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC;QACzB,IAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC;QACzB,IAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC;QAEzB,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC;QACpB,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC;QACpB,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC;QACpB,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC;QAEpB,IAAM,SAAS,GAAG,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC;QAC3C,IAAI,CAAC,SAAS,EAAE;YACZ,OAAO,WAAwB,CAAC;SACnC;QAED,IAAI,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;YACjC,WAAW,CAAC,EAAE,GAAG,WAAW,CAAC,EAAE,GAAG,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;SAC3E;QACD,IAAI,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;YACjC,WAAW,CAAC,EAAE,GAAG,WAAW,CAAC,EAAE,GAAG,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;SAC3E;QAED,OAAO,WAAwB,CAAC;IACpC,CAAC;AAUD,aAAgB,oBAAoB,CAChC,WAA+B,EAC/B,UAAqB,EACrB,KAAwC;QAExC,IAAI,CAAC,UAAU,EAAE;YACb,OAAO;SACV;QAED,IAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC;QAC7B,IAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC;QAC7B,IAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC;QACrC,IAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC;QAEvC,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC;QACxB,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC;QACxB,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC;QAChC,WAAW,CAAC,MAAM,GAAG,YAAY,CAAC;QAElC,IAAM,SAAS,GAAG,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC;QAC3C,IAAI,CAAC,SAAS,EAAE;YACZ,OAAO,WAAwB,CAAC;SACnC;QAED,WAAW,CAAC,CAAC,GAAG,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAC3D,WAAW,CAAC,CAAC,GAAG,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAC3D,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CACxB,gBAAgB,CAAC,OAAO,GAAG,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC,EACzE,WAAW,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAC5B,CAAC;QACF,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CACzB,gBAAgB,CAAC,OAAO,GAAG,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC,EAC1E,YAAY,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAC7B,CAAC;QAEF,OAAO,WAAwB,CAAC;IACpC,CAAC;AAUD,aAAgB,gBAAgB,CAC5B,QAAgB,EAChB,SAAkB,EAClB,kBAA4B;QAE5B,IAAI,CAAC,SAAS,EAAE;YACZ,OAAO,QAAQ,CAAC;SACnB;QAGD,IAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;cAC/C,eAAe,GAAG,CAAC;cACnB,CAAC,eAAe,IAAI,kBAAkB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;;;QC5HD;YAQI,MAAC,GAAG,CAAC,CAAA;YACL,MAAC,GAAG,CAAC,CAAA;YACL,UAAK,GAAG,CAAC,CAAA;YACT,WAAM,GAAG,CAAC,CAAA;SACb;QAAD,gBAAC;IAAD,CAAC,IAAA;IAMD,IAAM,2BAA2B,GAAG,EAAE,CAAC;IAEvC;QAAmB,wBAAe;QAI9B,cAAY,IAAgB;mBACxB,kBAAM,IAAI,CAAC;SACd;QAED,8BAAe,GAAf;YACI,OAAO,IAAI,SAAS,EAAE,CAAC;SAC1B;QAED,wBAAS,GAAT,UAAU,GAA6B,EAAE,KAAgB;YACrD,IAAI,CAAS,CAAC;YACd,IAAI,CAAS,CAAC;YACd,IAAI,KAAa,CAAC;YAClB,IAAI,MAAc,CAAC;YAEnB,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,IAAM,cAAc,GAAG,oBAAoB,CAAC,2BAA2B,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC5F,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;gBACrB,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;gBACrB,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;gBAC7B,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;gBAC/B,cAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBAC3B,KAAK,GAAG,cAAc,CAAC;aAC1B;iBACI;gBACD,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACZ,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACZ,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gBACpB,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;aACzB;YAED,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;gBACV,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;aACjC;iBACI;gBACDC,SAAyB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;aACzC;SACJ;QAED,yBAAU,GAAV;YACI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;SAClD;QACL,WAAC;IAAD,CA7CA,CAAmB,IAAI,GA6CtB;IAED,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC;;;QCtE7B;YACI,OAAE,GAAG,CAAC,CAAA;YACN,OAAE,GAAG,CAAC,CAAA;YACN,OAAE,GAAG,CAAC,CAAA;YACN,OAAE,GAAG,CAAC,CAAA;SACT;QAAD,mBAAC;IAAD,CAAC,IAAA;IAKD;QAAsB,2BAAkB;QAIpC,iBAAY,IAAmB;mBAC3B,kBAAM,IAAI,CAAC;SACd;QAED,iCAAe,GAAf;YACI,OAAO,IAAI,YAAY,EAAE,CAAC;SAC7B;QAED,2BAAS,GAAT,UAAU,GAA6B,EAAE,KAAmB;YACxD,IAAM,CAAC,GAAG,SAAS,CAAC;YACpB,IAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YACnB,IAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YACnB,IAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YACnB,IAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YACnB,IAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YACjB,IAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YAEjB,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,GAAG,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1D,GAAG,CAAC,aAAa,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1D,GAAG,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1D,GAAG,CAAC,aAAa,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1D,GAAG,CAAC,SAAS,EAAE,CAAC;SACnB;QACL,cAAC;IAAD,CA5BA,CAAsB,IAAI,GA4BzB;IAED,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC;;ICpCnC,IAAMC,6BAA2B,GAAG,EAAE,CAAC;AAEvC;QAAA;YAEI,OAAE,GAAG,CAAC,CAAA;YACN,OAAE,GAAG,CAAC,CAAA;YAEN,OAAE,GAAG,CAAC,CAAA;YACN,OAAE,GAAG,CAAC,CAAA;YAEN,YAAO,GAAG,CAAC,CAAA;SACd;QAAD,gBAAC;IAAD,CAAC,IAAA;IAKD;QAAmB,wBAAe;QAI9B,cAAY,IAAgB;mBACxB,kBAAM,IAAI,CAAC;SACd;QAED,8BAAe,GAAf;YACI,OAAO;gBACH,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,IAAc;aACvB,CAAC;SACL;QAED,8BAAe,GAAf;YACI,OAAO,IAAI,SAAS,EAAE,CAAC;SAC1B;QAED,wBAAS,GAAT,UAAU,GAA6B,EAAE,KAAgB;YACrD,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC;YAEP,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,IAAM,cAAc,GAAG,oBAAoB,CACvCA,6BAA2B,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CACjD,CAAC;gBACF,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC;gBACvB,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC;gBACvB,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC;gBACvB,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC;aAC1B;iBACI;gBACD,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;gBACd,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;gBACd,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;gBACd,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;aACjB;YAED,IAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAE9B,IAAI,OAAO,KAAK,CAAC,EAAE;gBACf,OAAO;aACV;YAED,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAEnB,IAAI,OAAO,GAAG,CAAC,EAAE;gBACb,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;gBACvC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;aAC1C;YACD,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;SACtB;QAKD,sBAAO,GAAP,UAAQ,CAAS;YACb,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,OAAO;gBACH,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC;gBACjC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC;aACpC,CAAC;SACL;QACL,WAAC;IAAD,CAlEA,CAAmB,IAAI,GAkEtB;IAED,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC;;aCrEL,YAAY,CAChC,MAAqB,EACrB,MAAe,EACf,MAAgB,EAChB,UAA0B;QAE1B,IAAM,GAAG,GAAG,EAAE,CAAC;QAEf,IAAM,CAAC,GAAgB,EAAE,CAAC;QAC1B,IAAM,EAAE,GAAgB,EAAE,CAAC;QAC3B,IAAM,EAAE,GAAgB,EAAE,CAAC;QAC3B,IAAI,SAAS,CAAC;QACd,IAAI,SAAS,CAAC;QAEd,IAAIvB,KAAG,CAAC;QACR,IAAIC,KAAG,CAAC;QACR,IAAI,UAAU,EAAE;YACZD,KAAG,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC3BC,KAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC/CuB,GAAK,CAACxB,KAAG,EAAEA,KAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3ByB,GAAK,CAACxB,KAAG,EAAEA,KAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;aAC9B;YAEDuB,GAAK,CAACxB,KAAG,EAAEA,KAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/ByB,GAAK,CAACxB,KAAG,EAAEA,KAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;SAClC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC/C,IAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAExB,IAAI,MAAM,EAAE;gBACR,SAAS,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;gBACxC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;aACrC;iBACI;gBACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE;oBAC1B,GAAG,CAAC,IAAI,CAACyB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7B,SAAS;iBACZ;qBACI;oBACD,SAAS,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC1B,SAAS,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;iBAC7B;aACJ;YAEDC,GAAK,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YAG/BC,KAAO,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;YAEtB,IAAI,EAAE,GAAGC,QAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACtC,IAAI,EAAE,GAAGA,QAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACtC,IAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;YACpB,IAAI,GAAG,KAAK,CAAC,EAAE;gBACX,EAAE,IAAI,GAAG,CAAC;gBACV,EAAE,IAAI,GAAG,CAAC;aACb;YAEDD,KAAO,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACpBA,KAAO,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,IAAM,GAAG,GAAGE,GAAK,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACjC,IAAM,GAAG,GAAGA,GAAK,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACjC,IAAI,UAAU,EAAE;gBACZL,GAAK,CAAC,GAAG,EAAE,GAAG,EAAEzB,KAAG,CAAC,CAAC;gBACrBwB,GAAK,CAAC,GAAG,EAAE,GAAG,EAAEvB,KAAG,CAAC,CAAC;gBACrBwB,GAAK,CAAC,GAAG,EAAE,GAAG,EAAEzB,KAAG,CAAC,CAAC;gBACrBwB,GAAK,CAAC,GAAG,EAAE,GAAG,EAAEvB,KAAG,CAAC,CAAC;aACxB;YACD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACjB;QAED,IAAI,MAAM,EAAE;YACR,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;SACzB;QAED,OAAO,GAAG,CAAC;IACf,CAAC;;aClGe8B,WAAS,CACrB,GAAyC,EACzC,KAIC,EACD,SAAkB;QAElB,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC1B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;YAC9B,IAAI,MAAM,EAAE;gBACR,IAAM,aAAa,GAAG,YAAY,CAC9B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,gBAAgB,CACpD,CAAC;gBAEF,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvC,IAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBAClD,IAAM,GAAG,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACjC,IAAM,GAAG,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBACrC,IAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;oBAChC,GAAG,CAAC,aAAa,CACb,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAC7C,CAAC;iBACL;aACJ;iBACI;gBACD,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC3C,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC1C;aACJ;YAED,SAAS,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;SAChC;IACL,CAAC;;;QCjCD;YACI,WAAM,GAAkB,IAAI,CAAA;YAC5B,WAAM,GAAY,CAAC,CAAA;YACnB,qBAAgB,GAAmB,IAAI,CAAA;SAC1C;QAAD,mBAAC;IAAD,CAAC,IAAA;IAKD;QAAsB,2BAAkB;QAIpC,iBAAY,IAAmB;mBAC3B,kBAAM,IAAI,CAAC;SACd;QAED,iCAAe,GAAf;YACI,OAAO,IAAI,YAAY,EAAE,CAAC;SAC7B;QAED,2BAAS,GAAT,UAAU,GAA6B,EAAE,KAAmB;YACxDC,WAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;SAC1C;QACL,cAAC;IAAD,CAfA,CAAsB,IAAI,GAezB;AAAA,IAED,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC;;;QC3BnC;YACI,WAAM,GAAkB,IAAI,CAAA;YAE5B,YAAO,GAAY,CAAC,CAAA;YACpB,WAAM,GAAY,CAAC,CAAA;YACnB,qBAAgB,GAAmB,IAAI,CAAA;SAC1C;QAAD,oBAAC;IAAD,CAAC,IAAA;IAKD;QAAuB,4BAAmB;QAItC,kBAAY,IAAoB;mBAC5B,kBAAM,IAAI,CAAC;SACd;QAED,kCAAe,GAAf;YACI,OAAO;gBACH,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,IAAc;aACvB,CAAC;SACL;QAED,kCAAe,GAAf;YACI,OAAO,IAAI,aAAa,EAAE,CAAC;SAC9B;QAED,4BAAS,GAAT,UAAU,GAA6B,EAAE,KAAoB;YACzDA,WAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SAC3C;QACL,eAAC;IAAD,CAtBA,CAAuB,IAAI,GAsB1B;IAED,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,UAAU,CAAC;;ICpBrC;QAUI,kBAAY,UAA+B;YACvC,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,EAAE,CAAC;SACtC;QAED,+BAAY,GAAZ,UAAa,MAAc,EAAE,KAAa;YACtC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACjB,MAAM,QAAA;gBACN,KAAK,OAAA;aACR,CAAC,CAAC;SACN;QACL,eAAC;IAAD,CAAC,IAAA;;IC7BD;QAA4C,kCAAQ;QAShD,wBACI,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,EAC5C,UAAgC,EAAE,WAAqB;YAF3D,YAKI,kBAAM,UAAU,CAAC,SAmBpB;YAbG,KAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAE3B,KAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAE3B,KAAI,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YAE9B,KAAI,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YAG9B,KAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;YAGrB,KAAI,CAAC,MAAM,GAAG,WAAW,IAAI,KAAK,CAAC;;SACtC;QACL,qBAAC;IAAD,CAlCA,CAA4C,QAAQ,GAkCnD;;ICpCD;QAA6B,kCAAQ;QAQjC,wBACI,CAAS,EAAE,CAAS,EAAE,CAAS,EAC/B,UAAgC,EAAE,WAAqB;YAF3D,YAII,kBAAM,UAAU,CAAC,SAepB;YAXG,KAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;YAE7B,KAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;YAE7B,KAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;YAG7B,KAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;YAGrB,KAAI,CAAC,MAAM,GAAG,WAAW,IAAI,KAAK,CAAC;;SACtC;QACL,qBAAC;IAAD,CA5BA,CAA6B,QAAQ,GA4BpC;;ICPM,IAAM,mBAAmB,GAAoB,QAAQ,CAAC;QACzD,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,YAAY;QAClB,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,SAAS,EAAE,MAAM;QACjB,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,CAAC;KACG,EAAE,kBAAkB,CAAC,CAAC;IAS1C;QAAoB,yBAAuB;QAA3C;;SAoEC;QAhEG,yBAAS,GAAT;YACI,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAC5B,OAAO,MAAM,IAAI,IAAI,IAAI,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;SACrE;QAED,uBAAO,GAAP;YACI,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YACxB,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,MAAM,CAAC;SAC1C;QAMD,2BAAW,GAAX,UAAY,GAAqB;YAC7B,OAAO,YAAY,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;SACjD;QAMD,+BAAe,GAAf,UAAgB,IAAkB;YAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACrB;QAED,+BAAe,GAAf;YACI,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAEzB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACb,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;gBACtB,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;gBAE1C,IAAM,IAAI,GAAG,eAAe,CACxB,IAAI,EACJ,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAsB,EAC5B,KAAK,CAAC,YAAiC,CAC1C,CAAC;gBAEF,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;gBACvB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;gBAEvB,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;oBAClB,IAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC;oBAC1B,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAChB,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAChB,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;oBAChB,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;iBACpB;gBAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;aACrB;YAED,OAAO,IAAI,CAAC,KAAK,CAAC;SACrB;QAEgB,sBAAgB,GAAG,CAAC;YACjC,IAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;YAEnC,UAAU,CAAC,kBAAkB,GAAG,EAAE,CAAC;SACtC,GAAG,CAAA;QACR,YAAC;KAAA,CApEmB,WAAW,GAoE9B;IAED,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC;;aCnHf,QAAQ,CAAC,GAAmC;QACxD,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE;YACf,IAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC/B,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;SACjD;QACD,IAAI,OAAO,GAAS,GAAG,CAAC;QAExB,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE;YACxB,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;SAChC;QAED,OAAO,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,KAAK,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE;YACvE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;SACjC;QAED,OAAO,OAAqB,CAAC;IACjC,CAAC;;IC8DD,IAAI,WAES,CAAC;IAKd,IAAM,gCAAgC,GAAG;QACrC,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,QAAQ;QAClB,cAAc,EAAE,WAAW;QAC3B,SAAS,EAAE,SAAS;QACpB,cAAc,EAAE,aAAa;QAC7B,gBAAgB,EAAE,eAAe;QACjC,kBAAkB,EAAE,UAAU;QAC9B,mBAAmB,EAAE,gBAAgB;QACrC,gBAAgB,EAAE,SAAS;QAC3B,iBAAiB,EAAE,UAAU;QAC7B,mBAAmB,EAAE,YAAY;QACjC,aAAa,EAAE,YAAY;QAC3B,WAAW,EAAE,UAAU;QACvB,YAAY,EAAE,WAAW;QACzB,aAAa,EAAE,YAAY;QAC3B,aAAa,EAAE,WAAW;QAC1B,YAAY,EAAE,YAAY;QAC1B,SAAS,EAAE,SAAS;KACd,CAAC;IACX,IAAM,qCAAqC,GAAG,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAKrF,IAAM,yBAAyB,GAAG;QAC9B,oBAAoB,EAAE,cAAc;QACpC,YAAY,EAAE,WAAW;KAC5B,CAAC;IACF,IAAM,8BAA8B,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAGvE;QAAA;YAEY,UAAK,GAAY,EAAE,CAAC;YAIpB,UAAK,GAAU,IAAI,CAAC;SAya/B;QApaG,yBAAK,GAAL,UAAM,GAAmC,EAAE,GAAoB;YAC3D,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;YAEhB,IAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YAE1B,AAA2C;gBACvC,IAAI,CAAC,GAAG,EAAE;oBACN,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;iBAClC;aACJ;YAED,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;YAC1B,IAAI,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAM,KAAK,GAA6B,EAAE,CAAC;YAE3C,IAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YAIlD,IAAI,KAAK,GAAG,UAAU,EAAE,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,KAAK,EAAY,CAAC;YAC3E,IAAI,MAAM,GAAG,UAAU,EAAE,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,MAAM,EAAY,CAAC;YAE9E,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC;YAC/B,KAAK,CAAC,MAAM,CAAC,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC;YAGjC,eAAe,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAE9C,IAAI,KAAK,GAAG,GAAG,CAAC,UAAwB,CAAC;YACzC,OAAO,KAAK,EAAE;gBACV,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBACxD,KAAK,GAAG,KAAK,CAAC,WAAyB,CAAC;aAC3C;YAED,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YAC5C,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;YAE1B,IAAI,WAAW,CAAC;YAChB,IAAI,gBAAgB,CAAC;YAErB,IAAI,OAAO,EAAE;gBACT,IAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;gBAEhD,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;oBACxB,WAAW,GAAG;wBACV,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAY;wBAC7C,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAY;wBAC7C,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;wBAChC,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;qBACpC,CAAC;iBACL;aACJ;YAED,IAAI,WAAW,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE;gBAChD,gBAAgB,GAAG,oBAAoB,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBAEnG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;oBAOpB,IAAM,MAAM,GAAG,IAAI,CAAC;oBACpB,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;oBACnB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACjB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC;oBACvD,MAAM,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;oBAC9B,MAAM,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;iBACjC;aACJ;YAID,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE;gBACxD,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC;oBACtB,KAAK,EAAE,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAC;iBACpD,CAAC,CAAC,CAAC;aACP;YAGD,OAAO;gBACH,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,WAAW;gBACxB,gBAAgB,EAAE,gBAAgB;gBAClC,KAAK,EAAE,KAAK;aACf,CAAC;SACL;QAEO,8BAAU,GAAlB,UACI,OAAmB,EACnB,WAAkB,EAClB,KAAiC,EACjC,SAAgD,EAChD,QAAiB,EACjB,QAAiB;YAGjB,IAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAqB,CAAC;YAMnE,IAAI,EAAE,CAAC;YACP,IAAI,eAAe,GAAG,SAAS,CAAC;YAEhC,IAAI,QAAQ,KAAK,MAAM,EAAE;gBACrB,QAAQ,GAAG,IAAI,CAAC;aACnB;YACD,IAAI,QAAQ,KAAK,MAAM,EAAE;gBACrB,QAAQ,GAAG,IAAI,CAAC;aACnB;YAED,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE;gBAG9C,EAAE,GAAG,WAAW,CAAC;aACpB;iBACI;gBAOD,IAAI,CAAC,QAAQ,EAAE;oBACX,IAAM,QAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;oBACrC,IAAI,QAAM,IAAI,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE;wBAEzC,EAAE,GAAG,QAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;wBAG7C,IAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;wBAC9C,IAAI,QAAQ,EAAE;4BACV,IAAM,QAAQ,GAA6B;gCACvC,IAAI,EAAE,QAAQ;gCACd,SAAS,EAAE,IAAI;gCACf,eAAe,EAAE,QAAQ;gCACzB,EAAE,EAAE,EAAE;6BACT,CAAC;4BACF,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;4BACrB,IAAI,QAAQ,KAAK,GAAG,EAAE;gCAClB,eAAe,GAAG,QAAQ,CAAC;6BAC9B;yBACJ;6BACI,IAAI,SAAS,EAAE;4BAChB,KAAK,CAAC,IAAI,CAAC;gCACP,IAAI,EAAE,SAAS,CAAC,IAAI;gCACpB,SAAS,EAAE,SAAS;gCACpB,eAAe,EAAE,QAAQ;gCACzB,EAAE,EAAE,EAAE;6BACT,CAAC,CAAC;yBACN;wBAED,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;qBACvB;iBACJ;gBAID,IAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;gBAC5C,IAAI,MAAM,IAAI,MAAM,CAAC,kBAAkB,EAAE,QAAQ,CAAC,EAAE;oBAChD,IAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBACvC,IAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;oBACtC,IAAI,EAAE,EAAE;wBACJ,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;qBACxB;iBACJ;aACJ;YAID,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE;gBAClB,IAAI,KAAK,GAAG,OAAO,CAAC,UAAwB,CAAC;gBAC7C,OAAO,KAAK,EAAE;oBACV,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE;wBACtB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAW,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;qBACnF;yBAEI,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,IAAI,QAAQ,EAAE;wBACvC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAW,CAAC,CAAC;qBACvC;oBACD,KAAK,GAAG,KAAK,CAAC,WAAyB,CAAC;iBAC3C;aACJ;SAEJ;QAEO,8BAAU,GAAlB,UAAmB,OAAmB,EAAE,WAAkB;YACtD,IAAM,IAAI,GAAG,IAAI,KAAK,CAAC;gBACnB,KAAK,EAAE;oBACH,IAAI,EAAE,OAAO,CAAC,WAAW;iBAC5B;gBACD,MAAM,EAAE,IAAI;gBACZ,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC;gBACnB,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC;aACtB,CAAC,CAAC;YAEH,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAEhC,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAEnE,kBAAkB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAEtC,IAAM,SAAS,GAAG,IAAI,CAAC,KAAgC,CAAC;YACxD,IAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;YACpC,IAAI,QAAQ,IAAI,QAAQ,GAAG,CAAC,EAAE;gBAE1B,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACvB,IAAI,CAAC,MAAM,IAAI,QAAQ,GAAG,CAAC,CAAC;gBAC5B,IAAI,CAAC,MAAM,IAAI,QAAQ,GAAG,CAAC,CAAC;aAC/B;YAED,IAAM,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,UAAU,KAAK;gBACzD,SAAS,CAAC,SAAS;gBACnB,SAAS,CAAC,UAAU;gBACpB,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,IAAI,IAAI;gBAEjC,SAAS,CAAC,UAAU,IAAI,YAAY;aACvC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAEZ,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;YAEtB,IAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC;YAE1B,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAEtB,OAAO,IAAI,CAAC;SACf;QAEM,uBAAa,GAAG,CAAC;YAEpB,WAAW,GAAG;gBACV,GAAG,EAAE,UAAU,OAAO,EAAE,WAAW;oBAC/B,IAAM,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC;oBACtB,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;oBAC7B,eAAe,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBAEhE,OAAO,CAAC,CAAC;iBACZ;gBACD,MAAM,EAAE,UAAU,OAAO,EAAE,WAAW;oBAClC,IAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;oBACxB,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;oBAChC,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBAEnE,IAAI,CAAC,QAAQ,CAAC;wBACV,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;wBAC/C,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;wBAC/C,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;wBACvD,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;qBAC5D,CAAC,CAAC;oBAEH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;oBAEnB,OAAO,IAAI,CAAC;iBACf;gBACD,QAAQ,EAAE,UAAU,OAAO,EAAE,WAAW;oBACpC,IAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;oBAC5B,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;oBAClC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBAErE,MAAM,CAAC,QAAQ,CAAC;wBACZ,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;wBACjD,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;wBACjD,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;qBAClD,CAAC,CAAC;oBAEH,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;oBAErB,OAAO,MAAM,CAAC;iBACjB;gBACD,MAAM,EAAE,UAAU,OAAO,EAAE,WAAW;oBAClC,IAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;oBACxB,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;oBAChC,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBAEnE,IAAI,CAAC,QAAQ,CAAC;wBACV,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;wBACjD,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;wBACjD,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;wBACjD,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;qBACpD,CAAC,CAAC;oBAEH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;oBAEnB,OAAO,IAAI,CAAC;iBACf;gBACD,SAAS,EAAE,UAAU,OAAO,EAAE,WAAW;oBACrC,IAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;oBAC9B,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;oBACnC,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBAEtE,OAAO,CAAC,QAAQ,CAAC;wBACb,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;wBACjD,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;wBACjD,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;wBACjD,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;qBACpD,CAAC,CAAC;oBAEH,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;oBAEtB,OAAO,OAAO,CAAC;iBAClB;gBACD,SAAS,EAAE,UAAU,OAAO,EAAE,WAAW;oBACrC,IAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;oBACjD,IAAI,SAAS,CAAC;oBACd,IAAI,SAAS,EAAE;wBACX,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;qBACtC;oBACD,IAAM,OAAO,GAAG,IAAI,OAAO,CAAC;wBACxB,KAAK,EAAE;4BACH,MAAM,EAAE,SAAS,IAAI,EAAE;yBAC1B;wBACD,MAAM,EAAE,IAAI;qBACf,CAAC,CAAC;oBAEH,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;oBACnC,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBAEtE,OAAO,OAAO,CAAC;iBAClB;gBACD,UAAU,EAAE,UAAU,OAAO,EAAE,WAAW;oBACtC,IAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;oBACjD,IAAI,SAAS,CAAC;oBACd,IAAI,SAAS,EAAE;wBACX,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;qBACtC;oBACD,IAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;wBAC1B,KAAK,EAAE;4BACH,MAAM,EAAE,SAAS,IAAI,EAAE;yBAC1B;wBACD,MAAM,EAAE,IAAI;qBACf,CAAC,CAAC;oBAEH,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;oBACpC,eAAe,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBAEvE,OAAO,QAAQ,CAAC;iBACnB;gBACD,OAAO,EAAE,UAAU,OAAO,EAAE,WAAW;oBACnC,IAAM,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC;oBAC1B,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;oBAC/B,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBAElE,GAAG,CAAC,QAAQ,CAAC;wBACT,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC;wBACzE,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC;wBAC7B,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC;wBAC7B,KAAK,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;wBACrC,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC;qBAC1C,CAAC,CAAC;oBACH,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;oBAElB,OAAO,GAAG,CAAC;iBACd;gBACD,MAAM,EAAE,UAAU,OAAO,EAAE,WAAW;oBAClC,IAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;oBAC3C,IAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;oBAC3C,IAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;oBAC7C,IAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;oBAE7C,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;oBAC7C,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;oBAE7C,IAAM,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC;oBACtB,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;oBAC7B,eAAe,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;oBAE/D,OAAO,CAAC,CAAC;iBACZ;gBACD,OAAO,EAAE,UAAU,OAAO,EAAE,WAAW;oBACnC,IAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;oBACpC,IAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;oBACpC,IAAI,CAAC,IAAI,IAAI,EAAE;wBAEX,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;qBAC/B;oBACD,IAAI,CAAC,IAAI,IAAI,EAAE;wBAEX,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;qBAC/B;oBACD,IAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;oBAC7C,IAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;oBAE7C,IAAM,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC;oBAEtB,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;oBAC7B,eAAe,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;oBAE/D,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;oBAC9B,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;oBAE9B,OAAO,CAAC,CAAC;iBACZ;gBACD,MAAM,EAAE,UAAU,OAAO,EAAE,WAAW;oBAIlC,IAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;oBAI1C,IAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;oBAEjC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;oBAChC,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBAEnE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;oBAEnB,OAAO,IAAI,CAAC;iBACf;aACJ,CAAC;SAGL,GAAG,CAAC;QACT,gBAAC;KA/aD,IA+aC;IAED,IAAM,kBAAkB,GAA6C;QAEjE,gBAAgB,EAAE,UAAU,OAAmB;YAG3C,IAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3D,IAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3D,IAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;YAC5D,IAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YAE3D,IAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAEpD,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAExC,uBAAuB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAE3C,OAAO,QAAQ,CAAC;SACnB;QAED,gBAAgB,EAAE,UAAU,OAAO;YAK/B,IAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3D,IAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3D,IAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YAEzD,IAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAE/C,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAExC,uBAAuB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAE3C,OAAO,QAAQ,CAAC;SACnB;KAKJ,CAAC;IAEF,SAAS,oBAAoB,CAAC,OAAmB,EAAE,QAAkB;QACjE,IAAM,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;QAC5D,IAAI,aAAa,KAAK,gBAAgB,EAAE;YACpC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;SAC1B;IACL,CAAC;IAED,SAAS,uBAAuB,CAAC,OAAmB,EAAE,QAAwB;QAE1E,IAAI,IAAI,GAAG,OAAO,CAAC,UAA4B,CAAC;QAEhD,OAAO,IAAI,EAAE;YACT,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC;mBAEhB,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,KAAK,MAAM,EACjD;gBACE,IAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAC9C,IAAI,MAAM,SAAQ,CAAC;gBACnB,IAAI,SAAS,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBACzC,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;iBAC1C;qBACI,IAAI,SAAS,EAAE;oBAChB,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;iBAClC;qBACI;oBACD,MAAM,GAAG,CAAC,CAAC;iBACd;gBAID,IAAM,SAAS,GAAG,EAAwB,CAAC;gBAC3C,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;gBAC7C,IAAM,SAAS,GAAG,SAAS,CAAC,SAAS;uBAC9B,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;uBAC/B,SAAS,CAAC;gBAEjB,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;oBACrB,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE,SAAS;iBACnB,CAAC,CAAC;aACN;YACD,IAAI,GAAG,IAAI,CAAC,WAA6B,CAAC;SAC7C;IACL,CAAC;IAED,SAAS,YAAY,CAAC,MAAe,EAAE,KAAc;QACjD,IAAI,MAAM,IAAK,MAA0B,CAAC,gBAAgB,EAAE;YACxD,IAAI,CAAE,KAAyB,CAAC,gBAAgB,EAAE;gBAC7C,KAAyB,CAAC,gBAAgB,GAAG,EAAE,CAAC;aACpD;YACD,QAAQ,CAAE,KAAyB,CAAC,gBAAgB,EAAG,MAA0B,CAAC,gBAAgB,CAAC,CAAC;SACvG;IACL,CAAC;IAED,SAAS,WAAW,CAAC,YAAoB;QACrC,IAAM,IAAI,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAC/C,IAAM,MAAM,GAAG,EAAE,CAAC;QAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YACrC,IAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SACvB;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,SAAS,eAAe,CACpB,OAAmB,EACnB,EAAW,EACX,cAA8B,EAC9B,eAAwB,EACxB,WAAoB;QAEpB,IAAM,IAAI,GAAG,EAAyB,CAAC;QACvC,IAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC;QAC3E,IAAM,SAAS,GAAqB,EAAE,CAAC;QAGvC,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE;YACxB,uBAAuB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAErC,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;YAErD,IAAI,CAAC,eAAe,EAAE;gBAClB,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;aAC3D;SACJ;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAE9B,IAAI,cAAc,CAAC,IAAI,IAAI,IAAI,EAAE;YAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;SAC3F;QACD,IAAI,cAAc,CAAC,MAAM,IAAI,IAAI,EAAE;YAC/B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;SACjG;QAED,IAAI,CAAC;YACD,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU;SAC1E,EAAE,UAAU,QAAQ;YAC1B,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;gBAClC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;aAC/D;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC;YACD,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW;SACvF,EAAE,UAAU,QAAQ;YAC1B,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;gBAClC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;aACnD;SACJ,CAAC,CAAC;QAIH,IAAI,WAAW,EAAE;YACb,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;SAChC;QAED,IAAI,cAAc,CAAC,QAAQ,EAAE;YACzB,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,mBAAmB,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,UAAU,GAAG;gBACjF,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;aAC1B,CAAC,CAAC;SACN;QAED,IAAI,cAAc,CAAC,UAAU,KAAK,QAAQ,IAAI,cAAc,CAAC,UAAU,KAAK,UAAU,EAAE;YACpF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;SACzB;QAED,IAAI,cAAc,CAAC,OAAO,KAAK,MAAM,EAAE;YACnC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACtB;IACL,CAAC;IAED,SAAS,kBAAkB,CACvB,IAAW,EACX,WAAkB;QAElB,IAAM,eAAe,GAAI,WAA+B,CAAC,WAAW,CAAC;QACrE,IAAI,eAAe,EAAE;YACjB,IAAM,YAAY,GAAG,eAAe,CAAC,YAAY,CAAC;YAClD,IAAI,cAAc,GAAG,YAAkC,CAAC;YACxD,IAAI,CAAC,YAAY,IAAI,YAAY,KAAK,MAAM,EAAE;gBAG1C,cAAc,GAAG,YAAY,CAAC;aACjC;iBACI,IAAI,YAAY,KAAK,UAAU,EAAE;gBAClC,cAAc,GAAG,YAAY,CAAC;aACjC;iBACI,IAAI,YAAY,KAAK,aAAa,IAAI,YAAY,KAAK,kBAAkB,EAAE;gBAC5E,cAAc,GAAG,KAAK,CAAC;aAC1B;iBACI,IAAI,YAAY,KAAK,YAAY,IAAI,YAAY,KAAK,iBAAiB,EAAE;gBAC1E,cAAc,GAAG,QAAQ,CAAC;aAC7B;iBACI,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,cAAc,EAAE;gBACpE,cAAc,GAAG,QAAQ,CAAC;aAC7B;YACD,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,cAAc,CAAC;SAC5C;QAED,IAAM,oBAAoB,GAAI,WAA+B,CAAC,gBAAgB,CAAC;QAC/E,IAAI,oBAAoB,EAAE;YAItB,IAAM,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC;YACjD,IAAI,WAAW,GAAG,SAA4B,CAAC;YAC/C,IAAI,SAAS,EAAE;gBACX,IAAI,SAAS,KAAK,QAAQ,EAAE;oBACxB,WAAW,GAAG,QAAQ,CAAC;iBAC1B;gBACD,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,WAAW,CAAC;aACtC;SACJ;IACL,CAAC;IAGD,IAAM,QAAQ,GAAG,mBAAmB,CAAC;IACrC,SAAS,kBAAkB,CACvB,EAAe,EACf,MAAyB,EACzB,GAAW,EACX,cAA8B;QAE9B,IAAM,QAAQ,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,QAAQ,EAAE;YACV,IAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;YACvC,OAAO;SACV;QAED,IAAI,GAAG,KAAK,MAAM,EAAE;YAChB,GAAG,GAAG,IAAI,CAAC;SACd;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,SAAS,SAAS,CACd,IAAa,EACb,cAA8B;QAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,IAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SAC1C;IACL,CAAC;IAOD,IAAMC,WAAS,GAAG,qCAAqC,CAAC;IACxD,SAAS,mBAAmB,CAAC,MAAc;QACvC,OAAO,MAAM,CAAC,KAAK,CAACA,WAAS,CAAC,IAAI,EAAE,CAAC;IACzC,CAAC;IAKD,IAAM,cAAc,GAAG,mEAAmE,CAAC;IAC3F,IAAM,eAAe,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;IAEtC,SAAS,uBAAuB,CAAC,OAAmB,EAAE,IAAa;QAC/D,IAAI,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,SAAS,EAAE;YACX,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACzC,IAAM,cAAY,GAAa,EAAE,CAAC;YAClC,IAAI,EAAE,GAAG,IAAI,CAAC;YACd,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,UAAU,GAAW,EAAE,IAAY,EAAE,KAAa;gBAChF,cAAY,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC/B,OAAO,EAAE,CAAC;aACb,CAAC,CAAC;YAEH,KAAK,IAAI,CAAC,GAAG,cAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;gBACjD,IAAM,KAAK,GAAG,cAAY,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAM,IAAI,GAAG,cAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjC,IAAM,QAAQ,GAAa,mBAAmB,CAAC,KAAK,CAAC,CAAC;gBACtD,EAAE,GAAG,EAAE,IAAI7E,QAAa,EAAE,CAAC;gBAC3B,QAAQ,IAAI;oBACR,KAAK,WAAW;wBACZC,SAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;wBACpF,MAAM;oBACV,KAAK,OAAO;wBACRC,OAAY,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACxF,MAAM;oBACV,KAAK,QAAQ;wBAETsB,MAAa,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,EAAE;4BAC9D,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;4BAC9B,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;yBACjC,CAAC,CAAC;wBACH,MAAM;oBACV,KAAK,OAAO;wBACR,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC;wBAC/DJ,KAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACxC,MAAM;oBACV,KAAK,OAAO;wBACR,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC;wBAC/DA,KAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACxC,MAAM;oBACV,KAAK,QAAQ;wBACT,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;wBAChC,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;wBAChC,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;wBAChC,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;wBAChC,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;wBAChC,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;wBAChC,MAAM;iBACb;aACJ;YACD,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;SAC9B;IACL,CAAC;IAGD,IAAM,UAAU,GAAG,4BAA4B,CAAC;IAChD,SAAS,gBAAgB,CACrB,OAAmB,EACnB,sBAA0C,EAC1C,eAAmC;QAEnC,IAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI,CAAC,KAAK,EAAE;YACR,OAAO;SACV;QAED,UAAU,CAAC,SAAS,GAAG,CAAC,CAAC;QACzB,IAAI,cAAc,CAAC;QACnB,OAAO,CAAC,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE;YACtD,IAAM,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAErC,IAAM,oBAAoB,GAAG,MAAM,CAAC,gCAAgC,EAAE,UAAU,CAAC;kBAC3E,gCAAgC,CAAC,UAA2D,CAAC;kBAC7F,IAAI,CAAC;YACX,IAAI,oBAAoB,EAAE;gBACtB,sBAAsB,CAAC,oBAAoB,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;aACpE;YAED,IAAM,aAAa,GAAG,MAAM,CAAC,yBAAyB,EAAE,UAAU,CAAC;kBAC7D,yBAAyB,CAAC,UAAoD,CAAC;kBAC/E,IAAI,CAAC;YACX,IAAI,aAAa,EAAE;gBACf,eAAe,CAAC,aAAa,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;aACtD;SACJ;IACL,CAAC;IAED,SAAS,mBAAmB,CACxB,OAAmB,EACnB,sBAA0C,EAC1C,eAAmC;QAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,qCAAqC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnE,IAAM,WAAW,GAAG,qCAAqC,CAAC,CAAC,CAAC,CAAC;YAC7D,IAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YACpD,IAAI,SAAS,IAAI,IAAI,EAAE;gBACnB,sBAAsB,CAAC,gCAAgC,CAAC,WAAW,CAAC,CAAC,GAAG,SAAS,CAAC;aACrF;SACJ;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,8BAA8B,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5D,IAAM,WAAW,GAAG,8BAA8B,CAAC,CAAC,CAAC,CAAC;YACtD,IAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YACpD,IAAI,SAAS,IAAI,IAAI,EAAE;gBACnB,eAAe,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC,GAAG,SAAS,CAAC;aACvE;SACJ;IACL,CAAC;AAED,aAAgB,oBAAoB,CAAC,WAAqB,EAAE,YAAsB;QAK9E,IAAM,MAAM,GAAG,YAAY,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;QACtD,IAAM,MAAM,GAAG,YAAY,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;QACxD,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAGvC,OAAO;YACH,KAAK,OAAA;YACL,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC;YAC/F,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;SACpG,CAAC;IACN,CAAC;AAED,aAAgB,QAAQ,CAAC,GAAmC,EAAE,GAAoB;QAC9E,IAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;;ICl7BD,IAAM6C,IAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IACnB,IAAMf,KAAG,GAAGe,IAAE,GAAG,CAAC,CAAC;IACnB,IAAMhB,SAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAMD,SAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAC3B,IAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;IAC7B,IAAM8B,SAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAMf,UAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAC3B,IAAM7B,SAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAMD,SAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAM,CAAC,GAAG,IAAI,CAAC;IAEf,SAAS,SAAS,CACd,EAAU,EAAE,EAAU,EACtB,EAAU,EAAE,EAAU,EACtB,EAAU,EAAE,EAAU,EACtB,EAAU,EAAE,EAAU;QAEtB,IAAM,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;QACrB,IAAM,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;QACrB,IAAM,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;QACrB,IAAM,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACX,OAAO;SACV;QACD,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1C,CAAC;IAGD,SAAS,qBAAqB,CAC1B,EAAU,EAAE,EAAU,EACtB,EAAU,EAAE,EAAU,EACtB,MAAc,EAAE,EAAU,EAC1B,SAAkB;QAElB,IAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;QACpB,IAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;QACpB,IAAM,EAAE,GAAG,CAAC,SAAS,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI8B,UAAQ,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;QACpE,IAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;QACpB,IAAM,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC;QACrB,IAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;QACpB,IAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;QACpB,IAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;QACpB,IAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;QACpB,IAAM,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;QAC5B,IAAM,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;QAC5B,IAAM,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;QACrB,IAAM,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;QACrB,IAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC7B,IAAM,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC;QACtB,IAAM,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QAChC,IAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAIA,UAAQ,CAAC7B,SAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvE,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QAClC,IAAM,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QACnC,IAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QACpC,IAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACtB,IAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACtB,IAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACtB,IAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QAItB,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;YAC/C,GAAG,GAAG,GAAG,CAAC;YACV,GAAG,GAAG,GAAG,CAAC;SACb;QAED,OAAO;YACH,EAAE,EAAE,GAAG;YACP,EAAE,EAAE,GAAG;YACP,EAAE,EAAE,CAAC,EAAE;YACP,EAAE,EAAE,CAAC,EAAE;YACP,EAAE,EAAE,GAAG,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1B,EAAE,EAAE,GAAG,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;SAC7B,CAAC;IACN,CAAC;IAQD,SAAS,qBAAqB,CAAC,EAAqB;QAChD,IAAI,GAAa,CAAC;QAClB,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE;YACb,IAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;YACtB,IAAI,CAAC,GAAG,EAAE;gBACN,OAAO,EAAc,CAAC;aACzB;YACD,IAAI,GAAG,KAAK,CAAC,EAAE;gBACX,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;aAC9B;iBACI,IAAI,GAAG,KAAK,CAAC,EAAE;gBAChB,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aACtC;iBACI,IAAI,GAAG,KAAK,CAAC,EAAE;gBAChB,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAC1B;iBACI;gBACD,GAAG,GAAG,EAAE,CAAC;aACZ;SACJ;aACI;YACD,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;SAC1B;QACD,OAAO,GAAG,CAAC;IACf,CAAC;AAED,aAAgByC,WAAS,CAAC,GAAyC,EAAE,KASpE;;QACG,IAAI,MAAM,GAAGzC,SAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,IAAI,WAAW,GAAGA,SAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5C,IAAM,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC;QAC7B,IAAM,cAAc,GAAG,WAAW,GAAG,CAAC,CAAC;QAEvC,IAAI,CAAC,SAAS,IAAI,CAAC,cAAc,EAAE;YAC/B,OAAO;SACV;QAED,IAAI,CAAC,SAAS,EAAE;YAEZ,MAAM,GAAG,WAAW,CAAC;YACrB,WAAW,GAAG,CAAC,CAAC;SACnB;QAED,IAAI,WAAW,GAAG,MAAM,EAAE;YAEtB,IAAM,GAAG,GAAG,MAAM,CAAC;YACnB,MAAM,GAAG,WAAW,CAAC;YACrB,WAAW,GAAG,GAAG,CAAC;SACrB;QAEO,IAAA,UAAU,GAAe,KAAK,WAApB,EAAE,QAAQ,GAAK,KAAK,SAAV,CAAW;QACvC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE;YACtC,OAAO;SACV;QAEO,IAAA,EAAE,GAAS,KAAK,GAAd,EAAE,EAAE,GAAK,KAAK,GAAV,CAAW;QACzB,IAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;QAEpC,IAAI,GAAG,GAAG4C,SAAO,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC;QACzC,IAAM,GAAG,GAAG,GAAG,GAAG5B,KAAG,IAAI,GAAG,GAAGA,KAAG,CAAC;QACnC,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;QAGvB,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE;YACf,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;SACtB;aAEI,IAAI,GAAG,GAAGA,KAAG,GAAG,CAAC,EAAE;YACpB,GAAG,CAAC,MAAM,CACN,EAAE,GAAG,MAAM,GAAGF,SAAO,CAAC,UAAU,CAAC,EACjC,EAAE,GAAG,MAAM,GAAGC,SAAO,CAAC,UAAU,CAAC,CACpC,CAAC;YACF,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC;YAE1D,IAAI,WAAW,GAAG,CAAC,EAAE;gBACjB,GAAG,CAAC,MAAM,CACN,EAAE,GAAG,WAAW,GAAGD,SAAO,CAAC,QAAQ,CAAC,EACpC,EAAE,GAAG,WAAW,GAAGC,SAAO,CAAC,QAAQ,CAAC,CACvC,CAAC;gBACF,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;aACjE;SACJ;aAEI;YACD,IAAI,QAAQ,SAAA,CAAC;YACb,IAAI,MAAM,SAAA,CAAC;YACX,IAAI,QAAQ,SAAA,CAAC;YACb,IAAI,MAAM,SAAA,CAAC;YAEX,IAAI,IAAI,SAAA,CAAC;YACT,IAAI,IAAI,SAAA,CAAC;YACT,IAAI,IAAI,SAAA,CAAC;YACT,IAAI,IAAI,SAAA,CAAC;YAET,IAAI,MAAM,SAAA,CAAC;YACX,IAAI,MAAM,SAAA,CAAC;YACX,IAAI,aAAa,SAAA,CAAC;YAClB,IAAI,aAAa,SAAA,CAAC;YAElB,IAAI,GAAG,SAAA,CAAC;YACR,IAAI,GAAG,SAAA,CAAC;YACR,IAAI,IAAI,SAAA,CAAC;YACT,IAAI,IAAI,SAAA,CAAC;YAET,IAAM,GAAG,GAAG,MAAM,GAAGD,SAAO,CAAC,UAAU,CAAC,CAAC;YACzC,IAAM,GAAG,GAAG,MAAM,GAAGC,SAAO,CAAC,UAAU,CAAC,CAAC;YACzC,IAAM,IAAI,GAAG,WAAW,GAAGD,SAAO,CAAC,QAAQ,CAAC,CAAC;YAC7C,IAAM,IAAI,GAAG,WAAW,GAAGC,SAAO,CAAC,QAAQ,CAAC,CAAC;YAE7C,IAAM,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;YACvB,IAAI,MAAM,EAAE;gBACR,IAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;gBACxC,IAAI,YAAY,EAAE;oBACd,KAAuC,qBAAqB,CAAC,YAAY,CAAC,EAAzE,QAAQ,QAAA,EAAE,MAAM,QAAA,EAAE,QAAQ,QAAA,EAAE,MAAM,QAAA,CAAwC;iBAC9E;gBAED,IAAM,MAAM,GAAG6B,SAAO,CAAC,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;gBACjD,IAAI,GAAG7C,SAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACjC,IAAI,GAAGA,SAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC/B,IAAI,GAAGA,SAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACjC,IAAI,GAAGA,SAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAE/B,aAAa,GAAG,MAAM,GAAGC,SAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC7C,aAAa,GAAG,MAAM,GAAGA,SAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAG7C,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;oBAC1B,GAAG,GAAG,MAAM,GAAGc,SAAO,CAAC,QAAQ,CAAC,CAAC;oBACjC,GAAG,GAAG,MAAM,GAAGC,SAAO,CAAC,QAAQ,CAAC,CAAC;oBACjC,IAAI,GAAG,WAAW,GAAGD,SAAO,CAAC,UAAU,CAAC,CAAC;oBACzC,IAAI,GAAG,WAAW,GAAGC,SAAO,CAAC,UAAU,CAAC,CAAC;oBAGzC,IAAI,GAAG,GAAGgB,IAAE,EAAE;wBACV,IAAM,IAAE,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;wBACjE,IAAI,IAAE,EAAE;4BACJ,IAAM,EAAE,GAAG,GAAG,GAAG,IAAE,CAAC,CAAC,CAAC,CAAC;4BACvB,IAAM,EAAE,GAAG,GAAG,GAAG,IAAE,CAAC,CAAC,CAAC,CAAC;4BACvB,IAAM,EAAE,GAAG,GAAG,GAAG,IAAE,CAAC,CAAC,CAAC,CAAC;4BACvB,IAAM,EAAE,GAAG,GAAG,GAAG,IAAE,CAAC,CAAC,CAAC,CAAC;4BACvB,IAAM,CAAC,GAAG,CAAC,GAAGhB,SAAO,CAEjB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAKc,UAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAGA,UAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAClG,CAAC;4BACF,IAAM,CAAC,GAAGA,UAAQ,CAAC,IAAE,CAAC,CAAC,CAAC,GAAG,IAAE,CAAC,CAAC,CAAC,GAAG,IAAE,CAAC,CAAC,CAAC,GAAG,IAAE,CAAC,CAAC,CAAC,CAAC,CAAC;4BAClD,aAAa,GAAG9B,SAAO,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;4BACxD,aAAa,GAAGA,SAAO,CAAC,MAAM,EAAE,CAAC,WAAW,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;yBAChE;qBACJ;iBACJ;aACJ;YAGD,IAAI,CAAC,MAAM,EAAE;gBACT,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC;aAClC;iBAEI,IAAI,aAAa,GAAG,CAAC,EAAE;gBACxB,IAAM,OAAO,GAAGA,SAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;gBACjD,IAAM,KAAK,GAAGA,SAAO,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;gBAC7C,IAAM,GAAG,GAAG,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;gBACpF,IAAM,GAAG,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;gBAElF,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;gBAGvD,IAAI,aAAa,GAAG,MAAM,IAAI,OAAO,KAAK,KAAK,EAAE;oBAE7C,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;iBACtH;qBACI;oBAGD,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;oBAE5H,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;oBAE9H,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;iBAC3H;aACJ;iBAEI;gBACD,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC;gBAC/B,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC;aAC7D;YAGD,IAAI,EAAE,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;gBAC/B,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;aACpC;iBAEI,IAAI,aAAa,GAAG,CAAC,EAAE;gBACxB,IAAM,OAAO,GAAGA,SAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;gBACjD,IAAM,KAAK,GAAGA,SAAO,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;gBAC7C,IAAM,GAAG,GAAG,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBACxF,IAAM,GAAG,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBAC1F,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;gBAGvD,IAAI,aAAa,GAAG,MAAM,IAAI,OAAO,KAAK,KAAK,EAAE;oBAE7C,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;iBACtH;qBAEI;oBAED,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;oBAExH,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;oBAElI,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;iBAC/H;aACJ;iBAEI;gBAED,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;gBAEjC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;aACjE;SACJ;QAED,GAAG,CAAC,SAAS,EAAE,CAAC;IACpB,CAAC;;;QC7TD;YACI,OAAE,GAAG,CAAC,CAAA;YACN,OAAE,GAAG,CAAC,CAAA;YACN,OAAE,GAAG,CAAC,CAAA;YACN,MAAC,GAAG,CAAC,CAAA;YACL,eAAU,GAAG,CAAC,CAAA;YACd,aAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA;YACtB,cAAS,GAAG,IAAI,CAAA;YAchB,iBAAY,GAAsB,CAAC,CAAA;SACtC;QAAD,kBAAC;IAAD,CAAC,IAAA;IAMD;QAAqB,0BAAiB;QAIlC,gBAAY,IAAkB;mBAC1B,kBAAM,IAAI,CAAC;SACd;QAED,gCAAe,GAAf;YACI,OAAO,IAAI,WAAW,EAAE,CAAC;SAC5B;QAED,0BAAS,GAAT,UAAU,GAA6B,EAAE,KAAkB;YACvD8C,WAA2B,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAC3C;QAED,2BAAU,GAAV;YACI,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ;mBAC7C,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;SACzC;QACL,aAAC;IAAD,CApBA,CAAqB,IAAI,GAoBxB;IAED,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC;;IClDjC,IAAMzB,KAAG,GAAG,SAAS,CAAC,GAAG,CAAC;IAE1B,SAAS,WAAW,CAAC,CAAS,EAAE,CAAS;QACrC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;IAClC,CAAC;AAED,aAAgB,kBAAkB,CAAC,IAAe;QAE9C,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,IAAM,iBAAiB,GAAe,EAAE,CAAC;QACzC,IAAI,cAAwB,CAAC;QAE7B,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,EAAE,GAAG,CAAC,CAAC;QAEX,SAAS,gBAAgB,CAAC,CAAS,EAAE,CAAS;YAE1C,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC7C,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;aAC1C;YACD,cAAc,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC3B;QAED,SAAS,OAAO,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;YAC3D,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE;gBAC/C,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;aAC/C;SACJ;QAED,SAAS,MAAM,CAAC,UAAkB,EAAE,QAAgB,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;YAEhG,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC;YAC9C,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxC,IAAM,GAAG,GAAG,QAAQ,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAE3C,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAChC,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAChC,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC9B,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE9B,IAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YACxB,IAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YAExB,IAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YACxB,IAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YAExB,IAAM,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;YAC1B,IAAM,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;YAC1B,cAAc,CAAC,IAAI,CAEf,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAC1B,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAC1B,EAAE,EAAE,EAAE,CACT,CAAC;SACL;QAED,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,CAAC;QAEP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG;YACtB,IAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YACtB,IAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;YAExB,IAAI,OAAO,EAAE;gBAIT,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACb,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAEjB,EAAE,GAAG,EAAE,CAAC;gBACR,EAAE,GAAG,EAAE,CAAC;gBAER,IAAI,GAAG,KAAKA,KAAG,CAAC,CAAC,IAAI,GAAG,KAAKA,KAAG,CAAC,CAAC,IAAI,GAAG,KAAKA,KAAG,CAAC,CAAC,EAAE;oBAEjD,cAAc,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;iBAC7B;aACJ;YAED,QAAQ,GAAG;gBACP,KAAKA,KAAG,CAAC,CAAC;oBAGN,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACpB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBAEpB,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBACzB,MAAM;gBACV,KAAKA,KAAG,CAAC,CAAC;oBACN,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACf,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACf,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBACxB,EAAE,GAAG,EAAE,CAAC;oBACR,EAAE,GAAG,EAAE,CAAC;oBACR,MAAM;gBACV,KAAKA,KAAG,CAAC,CAAC;oBACN,cAAc,CAAC,IAAI,CACf,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAC1C,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CACjC,CAAC;oBACF,MAAM;gBACV,KAAKA,KAAG,CAAC,CAAC;oBACN,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACf,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACf,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACf,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACf,cAAc,CAAC,IAAI,CAEf,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAC9C,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAC9C,EAAE,EAAE,EAAE,CACT,CAAC;oBACF,EAAE,GAAG,EAAE,CAAC;oBACR,EAAE,GAAG,EAAE,CAAC;oBACR,MAAM;gBACV,KAAKA,KAAG,CAAC,CAAC;oBACN,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACrB,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACrB,IAAM,UAAU,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC7B,IAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;oBAGxC,CAAC,IAAI,CAAC,CAAC;oBACP,IAAM,aAAa,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBAEjC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;oBACpC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;oBACpC,IAAI,OAAO,EAAE;wBAGT,EAAE,GAAG,EAAE,CAAC;wBACR,EAAE,GAAG,EAAE,CAAC;wBACR,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;qBAC5B;yBACI;wBAED,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;qBAC3B;oBAED,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;oBAClC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;oBAElC,IAAM,IAAI,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;oBAEpD,KAAK,IAAI,KAAK,GAAG,UAAU,EAAE,aAAa,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,EAAE,KAAK,IAAI,IAAI,EAAE;wBAC7F,IAAM,SAAS,GAAG,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,QAAQ,CAAC;8BAC5D,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC;wBACvC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;qBAC5C;oBAED,MAAM;gBACV,KAAKA,KAAG,CAAC,CAAC;oBACN,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACpB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACpB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACpB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBAGpB,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBACzB,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBACxB,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBACxB,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBACxB,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBACxB,MAAM;gBACV,KAAKA,KAAG,CAAC,CAAC;oBACN,cAAc,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC1C,EAAE,GAAG,EAAE,CAAC;oBACR,EAAE,GAAG,EAAE,CAAC;oBACR,MAAM;aACb;SACJ;QAED,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7C,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SAC1C;QAED,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAED,SAAS,cAAc,CACnB,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAC9F,GAAa,EAAE,KAAa;QAG5B,IAAI,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;YAC1F,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACjB,OAAO;SACV;QAED,IAAM,cAAc,GAAG,CAAC,GAAG,KAAK,CAAC;QACjC,IAAM,kBAAkB,GAAG,cAAc,GAAG,cAAc,CAAC;QAG3D,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACjB,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACjB,IAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACvC,EAAE,IAAI,CAAC,CAAC;QACR,EAAE,IAAI,CAAC,CAAC;QAER,IAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;QACpB,IAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;QACpB,IAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;QACpB,IAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;QAEpB,IAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,IAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QAExC,IAAI,SAAS,GAAG,kBAAkB,IAAI,SAAS,GAAG,kBAAkB,EAAE;YAElE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACjB,OAAO;SACV;QAGD,IAAM,QAAQ,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;QAErC,IAAM,QAAQ,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;QAGtC,IAAM,KAAK,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;QAE9C,IAAM,KAAK,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;QAI9C,IAAI,KAAK,GAAG,kBAAkB,IAAI,QAAQ,IAAI,CAAC;eACxC,KAAK,GAAG,kBAAkB,IAAI,QAAQ,IAAI,CAAC,EAChD;YACE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACjB,OAAO;SACV;QAGD,IAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAC7C,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAE7C,cAAc,CACV,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAC9F,GAAG,EAAE,KAAK,CACb,CAAC;QACF,cAAc,CACV,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAC9F,GAAG,EAAE,KAAK,CACb,CAAC;IACN,CAAC;AAED,aAAgB,cAAc,CAAC,IAAe,EAAE,KAAc;QAE1D,IAAM,iBAAiB,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAEnD,IAAM,QAAQ,GAAe,EAAE,CAAC;QAEhC,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC;QAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC/C,IAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;YACrC,IAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAEpB,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG;gBAEjC,IAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;gBACxB,IAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;gBACxB,IAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;gBACxB,IAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;gBACxB,IAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;gBACxB,IAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;gBAExB,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;gBAE/D,EAAE,GAAG,EAAE,CAAC;gBACR,EAAE,GAAG,EAAE,CAAC;aACX;YAED,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC1B;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;;IClRD,SAAS,gBAAgB,CAAC,OAAiB,EAAE,MAAc,EAAE,KAAa;QACtE,IAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAChC,IAAM,UAAU,GAAG,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAEvC,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC;QAC7C,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;QACnD,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;QAC/C,IAAI,WAAW,KAAK,CAAC,EAAE;YACnB,WAAW,GAAG,CAAC,CAAC;YAChB,QAAQ,GAAG,KAAK,CAAC;SACpB;QAED,IAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;YAC/B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAC3B;QACD,IAAM,YAAY,GAAG,QAAQ,GAAG,WAAW,CAAC;QAE5C,IAAM,QAAQ,GAAG,KAAK,GAAG,YAAY,CAAC;QACtC,IAAI,QAAQ,GAAG,CAAC,EAAE;YAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;gBAC/B,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;aAC5B;SACJ;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAID,SAAS,YAAY,CAAC,WAA4B,EAAE,KAAa,EAAE,SAA4B;QAC3F,IAAM,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC;QAC1B,IAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;QACxB,IAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;QAC1C,IAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;QACtC,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC;QAC9C,IAAM,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC;QACzB,IAAM,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;QAEtB,IAAM,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAE5E,IAAM,OAAO,GAAG,CAAC,UAAU,GAAG,KAAK,GAAG,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;QAE7D,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YACzC,IAAM,UAAU,GAAG,CAAC,UAAU,GAAG,MAAM,GAAG,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9D,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE;gBAChD,IAAM,QAAQ,GAAG,EAAqB,CAAC;gBAEvC,IAAI,UAAU,EAAE;oBACZ,QAAQ,CAAC,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,GAAG,CAAC;oBACjD,QAAQ,CAAC,QAAQ,GAAG,UAAU,GAAG,OAAO,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;oBACrD,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,UAAU,GAAG,MAAM,CAAC;oBACvC,QAAQ,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;iBAC/C;qBACI;oBACD,QAAQ,CAAC,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;oBACvD,QAAQ,CAAC,QAAQ,GAAG,UAAU,GAAG,UAAU,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC3D,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,GAAG,GAAG,CAAC;oBACjC,QAAQ,CAAC,CAAC,GAAG,EAAE,GAAG,OAAO,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;iBACzC;gBAED,QAAQ,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;gBAC3C,QAAQ,CAAC,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC;gBAC7B,QAAQ,CAAC,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC;gBAE7B,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC5B;SACJ;IACL,CAAC;IAED,SAAS,UAAU,CAAC,SAAwB,EAAE,KAAa,EAAE,SAA0B;QACnF,IAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAC9B,IAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAEhC,IAAM,eAAe,GAAG,KAAK,GAAG,MAAM,CAAC;QACvC,IAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAChF,IAAM,UAAU,GAAG,eAAe,GAAG,OAAO,GAAG,QAAQ,CAAC;QACxD,IAAM,aAAa,GAAG,eAAe,GAAG,QAAQ,GAAG,OAAO,CAAC;QAC3D,IAAM,MAAM,GAAG,eAAe,GAAG,GAAG,GAAG,GAAG,CAAC;QAC3C,IAAM,SAAS,GAAG,eAAe,GAAG,GAAG,GAAG,GAAG,CAAC;QAC9C,IAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QAErD,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YACzC,IAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACzD,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE;gBAChD,IAAM,QAAQ,GAAG,EAAmB,CAAC;gBACrC,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC;gBACjC,QAAQ,CAAC,SAAS,CAAC,GAAG,MAAM,GAAG,UAAU,CAAC;gBAC1C,QAAQ,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;gBAC/B,QAAQ,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC;gBAErC,QAAQ,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC;gBAC1B,QAAQ,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC;gBAE1B,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC5B;SACJ;IACL,CAAC;IAED,SAAS,cAAc,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;QAClE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC7B,CAAC;IAED,SAAS,iBAAiB,CACtB,GAAW,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW,EAClD,GAAW,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW;QAElD,IAAM,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;QACrB,IAAM,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;QACrB,IAAM,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;QACrB,IAAM,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;QAErB,IAAM,cAAc,GAAG,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACtD,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,IAAI,EAAE;YACjC,OAAO,IAAI,CAAC;SACf;QAED,IAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;QACxB,IAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;QAExB,IAAM,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,cAAc,CAAC;QAChE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAChB,OAAO,IAAI,CAAC;SACf;QAED,OAAO,IAAI,KAAK,CACZ,CAAC,GAAG,EAAE,GAAG,GAAG,EACZ,CAAC,GAAG,EAAE,GAAG,GAAG,CACf,CAAC;IACN,CAAC;IAED,SAAS,YAAY,CAAC,EAAS,EAAE,KAAY,EAAE,KAAY;QACvD,IAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC7B,GAAG,CAAC,SAAS,EAAE,CAAC;QAChB,IAAM,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAC3B,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,GAAG,CAAC;IACf,CAAC;IAED,SAAS,SAAS,CAAC,IAAgB,EAAE,EAAY;QAC7C,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;YAChD,OAAO;SACV;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,SAAS,kBAAkB,CAAC,MAAkB,EAAE,KAAY,EAAE,KAAY;QACtE,IAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;QAC1B,IAAM,aAAa,GAIb,EAAE,CAAC;QACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACrB,IAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YACjC,IAAM,cAAc,GAAG,iBAAiB,CACpC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAC1B,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CACrC,CAAC;YACF,IAAI,cAAc,EAAE;gBAChB,aAAa,CAAC,IAAI,CAAC;oBACf,MAAM,EAAE,YAAY,CAAC,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC;oBAClD,EAAE,EAAE,cAAc;oBAClB,GAAG,EAAE,CAAC;iBACT,CAAC,CAAC;aACN;SACJ;QAGD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YAE1B,OAAO,CAAE,EAAE,MAAM,QAAA,EAAC,EAAE,EAAC,MAAM,QAAA,EAAC,CAAE,CAAC;SAClC;QAGD,aAAa,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;SAC9B,CAAC,CAAC;QACH,IAAI,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,QAAQ,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvD,IAAI,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE;YAC7B,IAAM,GAAG,GAAG,QAAQ,CAAC;YACrB,QAAQ,GAAG,QAAQ,CAAC;YACpB,QAAQ,GAAG,GAAG,CAAC;SAClB;QAED,IAAM,WAAW,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnD,IAAM,WAAW,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEnD,IAAM,QAAQ,GAAe,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAM,QAAQ,GAAe,CAAC,WAAW,CAAC,CAAC;QAE3C,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YACnD,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;SAC1C;QACD,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAEjC,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAEjC,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YACzD,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;SAChD;QACD,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAEjC,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAEjC,OAAO,CAAC;gBACJ,MAAM,EAAE,QAAQ;aACnB,EAAE;gBACC,MAAM,EAAE,QAAQ;aACnB,CAAC,CAAC;IACP,CAAC;IAED,SAAS,mBAAmB,CACxB,YAA8C;QAE9C,IAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;QACnC,IAAM,GAAG,GAAa,EAAE,CAAC;QACzB,IAAM,GAAG,GAAa,EAAE,CAAC;QACzB,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC7B,IAAM,YAAY,GAAG,IAAI,YAAY,CACjC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CACnD,CAAC;QAEF,IAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;QACjC,IAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;QACnC,IAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;QACzB,IAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;QAEzB,IAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,KAAK,GAAG,MAAM,EAAE;YAChB,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YAC9B,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACV,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;SACtB;aACI;YACD,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;YAC/B,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACV,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;SACrB;QACD,OAAO,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;IAGD,SAAS,qBAAqB,CAC1B,OAAqB,EAAE,KAAQ,EAAE,KAAa,EAAE,GAAQ;QAExD,IAAI,KAAK,KAAK,CAAC,EAAE;YACb,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACnB;aACI;YACD,IAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAClC,IAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC3B,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACjD,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;SAC5D;QAED,OAAO,GAAG,CAAC;IACf,CAAC;AAED,aAAgB7D,OAAK,CAAC,IAAU,EAAE,KAAa;QAC3C,IAAM,KAAK,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC5B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;SAC/B;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,SAAS,aAAa,CAAC,MAAY,EAAE,MAAY;QAC7C,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,CAAC;IAED,SAAS,cAAc,CAAC,MAAgB;QACpC,IAAM,GAAG,GAAG,EAAE,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG;YAChC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SACxC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;AAED,aAAgB,KAAK,CACjB,IAAU,EAAE,KAAa;QAEzB,IAAM,SAAS,GAAoB,EAAE,CAAC;QACtC,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,YAA2B,CAAC;QAEhC,QAAQ,IAAI,CAAC,IAAI;YACb,KAAK,MAAM;gBACP,UAAU,CAAC,KAAsB,EAAE,KAAK,EAAE,SAA4B,CAAC,CAAC;gBACxE,YAAY,GAAG,IAAI,CAAC;gBACpB,MAAM;YACV,KAAK,QAAQ;gBACT,YAAY,CAAC,KAAwB,EAAE,KAAK,EAAE,SAA8B,CAAC,CAAC;gBAC9E,YAAY,GAAG,MAAM,CAAC;gBACtB,MAAM;YACV,KAAK,QAAQ;gBACT,YAAY,CAAC;oBACT,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC;oBACvD,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE;iBACV,EAAE,KAAK,EAAE,SAA8B,CAAC,CAAC;gBAC7D,YAAY,GAAG,MAAM,CAAC;gBACtB,MAAM;YACV;gBACI,IAAM,CAAC,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACtC,IAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAChG,IAAM,QAAQ,GAAG,GAAG,CAChB,cAAc,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,KAAK,CAAC,EACjD,UAAA,IAAI,IAAI,OAAA,cAAc,CAAC,IAAI,CAAC,GAAA,CAC/B,CAAC;gBACF,IAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC;gBACrC,IAAI,YAAY,KAAK,CAAC,EAAE;oBACpB,qBAAqB,CAAC,mBAAmB,EAAE;wBACvC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;qBACtB,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;iBACxB;qBACI,IAAI,YAAY,KAAK,KAAK,EAAE;oBAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;wBACnC,SAAS,CAAC,IAAI,CAAC;4BACX,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;yBACF,CAAC,CAAC;qBAC1B;iBACJ;qBACI;oBAED,IAAI,WAAS,GAAG,CAAC,CAAC;oBAClB,IAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,UAAA,IAAI;wBAC5B,IAAM,GAAG,GAAa,EAAE,CAAC;wBACzB,IAAM,GAAG,GAAa,EAAE,CAAC;wBACzB,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;wBAE3B,IAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBACnD,WAAS,IAAI,IAAI,CAAC;wBAClB,OAAO,EAAE,IAAI,MAAA,EAAE,IAAI,MAAA,EAAE,CAAC;qBACzB,CAAC,CAAC;oBACH,KAAK,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,GAAA,CAAC,CAAC;oBAEtC,IAAI,IAAI,GAAG,KAAK,CAAC;oBACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;wBACnC,IAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wBACtB,IAAI,IAAI,IAAI,CAAC,EAAE;4BACX,MAAM;yBACT;wBAED,IAAM,SAAS,GAAG,CAAC,KAAK,YAAY,GAAG,CAAC;8BAClC,IAAI;8BACJ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,WAAS,GAAG,KAAK,CAAC,CAAC;wBAE/C,IAAI,SAAS,GAAG,CAAC,EAAE;4BACf,SAAS;yBACZ;wBAED,qBAAqB,CAAC,mBAAmB,EAAE;4BACvC,MAAM,EAAE,IAAI,CAAC,IAAI;yBACpB,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;wBACzB,IAAI,IAAI,SAAS,CAAC;qBACrB;iBACJ;gBACD,YAAY,GAAG,OAAO,CAAC;gBACvB,MAAM;SACb;QAED,IAAI,CAAC,YAAY,EAAE;YAEf,OAAOA,OAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC7B;QACD,IAAM,GAAG,GAAW,EAAE,CAAC;QAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,IAAM,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;YACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACrB;QAED,OAAO,GAAG,CAAC;IACf,CAAC;;ICvYD,SAAS,YAAY,CAAC,QAAkB,EAAE,QAAkB;QACxD,IAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC7B,IAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC7B,IAAI,IAAI,KAAK,IAAI,EAAE;YACf,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;SAC/B;QACD,IAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,IAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC;QACtD,IAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAExC,IAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACvC,IAAM,kBAAkB,GAAG,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,CAAC;QAEhD,IAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAEtE,IAAM,UAAU,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,IAAI,QAAQ,GAAG,IAAI,CAAC;QAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,GAAG;YAC7B,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1B,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1B,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1B,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1B,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1B,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;YAE1B,IAAI,QAAQ,IAAI,CAAC,EAAE;gBACf,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBACxC,SAAS;aACZ;YAED,IAAI,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,oBAAoB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,iBAAiB,EAAE,CAAC,EAAE,EAAE;gBACzC,IAAM,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC;gBAEhC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC3C,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;gBAG3C,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAChB,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAEhB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBACxE,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAChB,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAChB,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAChB,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;aAEnB;YACD,QAAQ,IAAI,iBAAiB,GAAG,CAAC,CAAC;SACrC;QAED,OAAO,WAAW,KAAK,QAAQ,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACtF,CAAC;IAED,SAAS,aAAa,CAAC,kBAA4B,EAAE,YAAsB;QACvE,IAAM,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC;QACtC,IAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAC1C,IAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAE1C,IAAM,UAAU,GAAa,EAAE,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG;YACtC,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;YACxB,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;SAC3B;QACD,OAAO,UAAU,CAAC;IACtB,CAAC;AAWD,aAAgB,iBAAiB,CAAC,MAAkB,EAAE,MAAkB;;QAEpE,IAAI,YAAY,CAAC;QACjB,IAAI,YAAY,CAAC;QAEjB,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,SAAS,GAAG,EAAE,CAAC;QAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE;YAC7D,IAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAE3B,IAAI,WAAW,SAAA,CAAC;YAChB,IAAI,WAAW,SAAA,CAAC;YAEhB,IAAI,CAAC,QAAQ,EAAE;gBACX,WAAW,GAAG,aAAa,CAAC,YAAY,IAAI,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAChE,WAAW,GAAG,QAAQ,CAAC;aAC1B;iBACI,IAAI,CAAC,QAAQ,EAAE;gBAChB,WAAW,GAAG,aAAa,CAAC,YAAY,IAAI,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAChE,WAAW,GAAG,QAAQ,CAAC;aAC1B;iBACI;gBACD,KAA6B,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAA5D,WAAW,QAAA,EAAE,WAAW,QAAA,CAAqC;gBAC9D,YAAY,GAAG,WAAW,CAAC;gBAC3B,YAAY,GAAG,WAAW,CAAC;aAC9B;YAED,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC5B,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAC/B;QAED,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAClC,CAAC;AAWD,aAAgB,QAAQ,CAAC,KAAe;QAEpC,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;QAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YACjD,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,IAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YAC5B,UAAU,IAAI,CAAC,CAAC;YAChB,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACpB,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;SACvB;QAED,IAAI,UAAU,KAAK,CAAC,EAAE;YAClB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;SACzC;QAED,OAAO,CAAC,EAAE,GAAG,UAAU,GAAG,CAAC,EAAE,EAAE,GAAG,UAAU,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;IAClE,CAAC;IAMD,SAAS,kBAAkB,CACvB,cAAwB,EACxB,YAAsB,EACtB,MAAgB,EAChB,IAAc;QAEd,IAAM,WAAW,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,SAAS,GAAG,QAAQ,CAAC;QACzB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,IAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC;QAClC,IAAM,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;QACrB,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,MAAM,EAAE,EAAE;YACjD,IAAM,YAAY,GAAG,MAAM,GAAG,CAAC,CAAC;YAChC,IAAI,KAAK,GAAG,CAAC,CAAC;YAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;gBAC7B,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,YAAY,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;gBAEvE,IAAM,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC3C,IAAM,EAAE,GAAG,cAAc,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC/C,IAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACrC,IAAM,EAAE,GAAG,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAEzC,IAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;gBACnB,IAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;gBACnB,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;aAC9B;YACD,IAAI,KAAK,GAAG,SAAS,EAAE;gBACnB,SAAS,GAAG,KAAK,CAAC;gBAClB,UAAU,GAAG,MAAM,CAAC;aACvB;SACJ;QAED,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,SAAS,OAAO,CAAC,KAAe;QAC5B,IAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;YAC7B,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;SACtC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAeD,SAAS,wBAAwB,CAC7B,OAAmB,EACnB,KAAiB,EACjB,oBAA4B,EAC5B,gBAAwB;QAExB,IAAM,MAAM,GAAG,EAAE,CAAC;QAElB,IAAI,gBAAyB,CAAC;QAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,IAAI,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACnC,IAAM,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAEjC,IAAM,MAAM,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC;YAC3C,IAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;YAEvC,IAAI,gBAAgB,IAAI,IAAI,EAAE;gBAI1B,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aACpD;YAED,IAAM,oBAAoB,GAAa,EAAE,CAAC;YAC1C,IAAM,kBAAkB,GAAa,EAAE,CAAC;YACxC,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,SAAS,GAAG,QAAQ,CAAC;YACzB,IAAI,MAAM,GAAa,EAAE,CAAC;YAE1B,IAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC;YACrC,IAAI,gBAAgB,EAAE;gBAElB,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;aAClD;YACD,IAAM,MAAM,GAAG,kBAAkB,CAAC,iBAAiB,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAExF,IAAM,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;gBAE9B,IAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;gBACpC,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACjE,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;aACxE;YACD,oBAAoB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAChE,oBAAoB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAEpE,IAAI,oBAAoB,GAAG,CAAC,EAAE;gBAC1B,IAAM,IAAI,GAAG,gBAAgB,GAAG,oBAAoB,CAAC;gBACrD,KAAK,IAAI,KAAK,GAAG,CAAC,gBAAgB,GAAG,CAAC,EAAE,KAAK,IAAI,gBAAgB,GAAG,CAAC,EAAE,KAAK,IAAI,IAAI,EAAE;oBAClF,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBAC3B,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBAC3B,IAAI,KAAK,GAAG,CAAC,CAAC;oBAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;wBAClD,IAAM,EAAE,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;wBACnC,IAAM,EAAE,GAAG,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBACvC,IAAM,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;wBACxC,IAAM,EAAE,GAAG,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;wBAG5C,IAAM,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;wBAChC,IAAM,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;wBAEhC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;wBAClB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;wBAEtB,IAAM,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;wBACtB,IAAM,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;wBAKtB,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;qBAC9B;oBAED,IAAI,KAAK,GAAG,SAAS,EAAE;wBACnB,SAAS,GAAG,KAAK,CAAC;wBAClB,SAAS,GAAG,KAAK,CAAC;wBAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;4BACpC,kBAAkB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;yBACrC;qBACJ;iBACJ;aACJ;iBACI;gBACD,KAAK,IAAI,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,GAAG,EAAE,GAAC,IAAI,CAAC,EAAE;oBAC7B,kBAAkB,CAAC,GAAC,CAAC,GAAG,eAAe,CAAC,GAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACrD,kBAAkB,CAAC,GAAC,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,GAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;iBAChE;aACJ;YAED,MAAM,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE,oBAAoB;gBAC1B,EAAE,EAAE,kBAAkB;gBACtB,MAAM,QAAA;gBACN,IAAI,MAAA;gBACJ,QAAQ,EAAE,CAAC,SAAS;aACvB,CAAC,CAAC;SACN;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;AAED,aAAgB,iBAAiB,CAAC,IAAa;QAC3C,OAAQ,IAA4B,CAAC,mBAAmB,CAAC;IAC7D,CAAC;AAED,aAAgB,UAAU,CAAC,EAAW;QAClC,OAAQ,EAAmB,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,IAAM,mBAAmB,GAAG,cAAc,CAAC;IAC3C,SAAS,mBAAmB,CACxB,GAAM,EACN,UAAa,EACb,SAA0D;QAE1D,IAAM,eAAe,GAAG,mBAAmB,GAAG,UAAU,CAAC;QACzD,IAAM,cAAc,GAAI,GAAW,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QACxE,IAAI,CAAE,GAAW,CAAC,eAAe,CAAC,EAAE;YAC/B,GAAW,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;SACnD;QACD,IAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;QAClC,IAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAC9B,IAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAE/B,GAAW,CAAC,UAAU,CAAC,GAAG;YACvB,IAAM,IAAI,GAAG,SAAS,CAAC;YACvB,IAAI,GAAG,CAAC;YACR,MAAM,IAAK,MAA8B,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAE5D,IAAI,OAAO,EAAE;gBACT,GAAG,GAAI,OAA+B,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aAC5D;iBACI;gBACD,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aAC1C;YACD,KAAK,IAAK,KAA6B,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC1D,OAAO,GAAG,CAAC;SACd,CAAC;IACN,CAAC;IACD,SAAS,aAAa,CAClB,GAAM,EACN,UAAmB;QAEnB,IAAM,eAAe,GAAG,mBAAmB,GAAG,UAAU,CAAC;QACzD,IAAK,GAAW,CAAC,eAAe,CAAC,EAAE;YAC/B,GAAG,CAAC,UAAU,CAAC,GAAI,GAAW,CAAC,eAAe,CAAC,CAAC;YAC/C,GAAW,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;SACxC;IACL,CAAC;IAED,SAAS,uBAAuB,CAAC,YAAwB,EAAE,EAAe;QACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG;gBACpC,IAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAM,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAE5B,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBAChD,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;aACnD;SACJ;IACL,CAAC;IAED,SAAS,gBAAgB,CACrB,QAAc,EACd,MAAY;QAEZ,IAAM,aAAa,GAAG,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QACrD,IAAM,WAAW,GAAG,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAE3C,IAAA,KACF,iBAAiB,CAAC,kBAAkB,CAAC,aAAa,CAAC,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC,EADlF,gBAAgB,QAAA,EAAE,cAAc,QACkD,CAAC;QAE1F,IAAM,iBAAiB,GAAG,QAAQ,CAAC,oBAAoB,EAAE,CAAC;QAC1D,IAAM,eAAe,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAC;QACtD,SAAS,uBAAuB;YAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;SACzB;QACD,iBAAiB,IAAI,uBAAuB,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;QAClF,eAAe,IAAI,uBAAuB,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;QAE5E,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACrF,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;QAExB,IAAM,YAAY,GAAG,wBAAwB,CAAC,gBAAgB,EAAE,cAAc,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAE7F,IAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO,EAAP,UAAQ,IAAe;gBAC9D,IAAM,CAAC,GAAI,MAAuB,CAAC,QAAQ,CAAC;gBAC5C,IAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gBAEnB,IAAM,KAAK,GAAa,EAAE,CAAC;gBAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC1C,IAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;oBAC7B,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;oBACvB,IAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;oBACnB,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;oBAChC,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;oBAC3B,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;oBACvB,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBAC3B,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBAE3B,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;oBAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;wBACrC,IAAM,IAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;wBACnB,IAAM,IAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBACvB,IAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;wBACjB,IAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBAErB,IAAM,CAAC,GAAG,IAAE,GAAG,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;wBAC7B,IAAM,CAAC,GAAG,IAAE,GAAG,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;wBAE7B,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;wBACzC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;qBAChD;oBAED,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBACnB,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBAEnB,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG;wBAC9B,IAAM,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;wBACvB,IAAM,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;wBACvB,IAAM,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;wBACvB,IAAM,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;wBACvB,IAAM,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;wBACvB,IAAM,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;wBAGvB,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;4BAClD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;yBACvB;6BACI;4BACD,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;yBAC9C;wBACD,EAAE,GAAG,EAAE,CAAC;wBACR,EAAE,GAAG,EAAE,CAAC;qBACX;iBACJ;aACJ,EAAE,CAAC,CAAC;IACT,CAAC;AAKD,aAAgB,SAAS,CACrB,QAAc,EACd,MAAY,EACZ,aAAmC;QAEnC,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE;YACtB,OAAO,MAAM,CAAC;SACjB;QAED,IAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC;QAEnC,IAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC;QAEvC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAElC,MAAuB,CAAC,QAAQ,GAAG,CAAC,CAAC;QAEtC,SAAS,aAAa;YAClB,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACnC,aAAa,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;YAExC,MAAuB,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YAEvC,MAAM,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,CAAC,UAAU,EAAE,CAAC;SACvB;QAED,MAAM,CAAC,SAAS,CAAC;YACb,QAAQ,EAAE,CAAC;SACP,EAAE,QAAQ,CAAC;YACf,MAAM,YAAC,CAAC;gBACJ,MAAM,CAAC,UAAU,EAAE,CAAC;gBACpB,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;aAC7B;YACD,IAAI;gBACA,aAAa,EAAE,CAAC;gBAChB,OAAO,IAAI,OAAO,EAAE,CAAC;aACxB;SAMoB,EAAE,aAAa,CAAC,CAAC,CAAC;QAE3C,OAAO,MAAM,CAAC;IAClB,CAAC;IAyBD,SAAS,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,IAAY,EAAE,IAAY,EAAE,IAAY,EAAE,IAAY;QACzF,IAAM,IAAI,GAAG,EAAE,CAAC;QAChB,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;QACzE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;QAEzE,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,GAAW,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YACzC,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YAEX,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACb,EAAE,GAAG,CAAC,CAAC;aACV;YACD,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACb,EAAE,GAAG,CAAC,CAAC;aACV;YAED,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YAE7B,IAAI,EAAE,KAAK,CAAC,EAAE;gBACV,IAAI,EAAE,KAAK,CAAC,EAAE;oBACV,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACd,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;iBACjB;gBACD,GAAG,GAAG,CAAC,CAAC;gBACR,CAAC,GAAG,CAAC,CAAC;gBACN,CAAC,GAAG,GAAG,CAAC;aACX;SACJ;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAKD,SAAS,SAAS,CAAC,QAAgB;QAC/B,IAAI,IAAI,GAAG,QAAQ,CAAC;QACpB,IAAI,IAAI,GAAG,QAAQ,CAAC;QACpB,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;QACrB,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;QACrB,IAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,UAAA,IAAI;YAC1B,IAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACpC,IAAM,CAAC,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACtC,IAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACnD,IAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACzB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACzB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACzB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACzB,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACjB,CAAC,CAAC;QAEH,IAAM,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,UAAC,EAAE,EAAE,GAAG;YAC3B,OAAO;gBACH,EAAE,IAAA;gBACF,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;gBAChD,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC;aACtB,CAAC;SACL,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAA,CAAC,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,IAAI,GAAA,CAAC,CAAC;IAClE,CAAC;AAKA,IASD,SAAS,iBAAiB,CAAC,KAAuB;QAC9C,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAiBD,SAAS,iBAAiB;QACtB,OAAO;YACH,eAAe,EAAE,EAAY;YAC7B,aAAa,EAAE,EAAY;YAC3B,KAAK,EAAE,CAAC;SACX,CAAC;IACN,CAAC;AAKD,aAAgB,YAAY,CACxB,QAAwC,EACxC,MAAY,EACZ,aAA4B;QAE5B,IAAI,YAAY,GAAW,EAAE,CAAC;QAE9B,SAAS,WAAW,CAAC,QAAmB;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE;oBACzB,WAAW,CAAE,IAAkB,CAAC,WAAW,EAAE,CAAC,CAAC;iBAClD;qBACI,IAAI,IAAI,YAAY,IAAI,EAAE;oBAC3B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC3B;aACJ;SACJ;QACD,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEtB,IAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CAAC;QAG1C,IAAI,CAAC,aAAa,EAAE;YAChB,OAAO,iBAAiB,EAAE,CAAC;SAC9B;QAED,IAAM,UAAU,GAAG,aAAa,CAAC,UAAU,IAAI,iBAAiB,CAAC;QAEjE,IAAI,aAAa,GAAG,UAAU,CAAC;YAC3B,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa;SACrC,CAAC,CAAC;QACH,IAAI,aAAa,CAAC,MAAM,KAAK,aAAa,EAAE;YACxC,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC3D,OAAO,iBAAiB,EAAE,CAAC;SAC9B;QAED,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;QACvC,aAAa,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;QAEzC,IAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC;QAEnC,IAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC;QACvC,IAAM,eAAe,GAAG,aAAa,CAAC,eAAe,CAAC;QAEtD,IAAM,iBAAiB,GAAG,IAAI,aAAa,EAAE,CAAC;QAE9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE;YACpC,IAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAE5B,EAAE,CAAC,MAAM,GAAG,MAA0B,CAAC;YAGvC,EAAE,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;YAGpC,IAAI,CAAC,eAAe,EAAE;gBAClB,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;aAC9B;SACJ;QAEA,MAA8B,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAC1D,MAA8B,CAAC,WAAW,GAAG;YAC1C,OAAO,aAAa,CAAC;SACxB,CAAC;QAEF,SAAS,oBAAoB,CAAC,EAAe;YACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC3C,aAAa,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;aACpC;SACJ;QACD,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE;YACvC,KAAK,YAAC,EAAE;gBACJ,oBAAoB,CAAC,EAAE,CAAC,CAAC;aAC5B;SACJ,CAAC,CAAC;QACH,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,EAAE;YAC5C,KAAK,YAAC,EAAE;gBACJ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC3C,aAAa,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;iBACzC;aACJ;SACJ,CAAC,CAAC;QAEH,SAAS,aAAa;YACjB,MAA8B,CAAC,mBAAmB,GAAG,KAAK,CAAC;YAE3D,MAAuB,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YACtC,MAA8B,CAAC,WAAW,GAAG,IAAI,CAAC;YAEnD,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YACrC,aAAa,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;SAC7C;QAED,IAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC;QAEnC,IAAI,eAAe,EAAE;YACjB,IAAI,WAAS,GAAG,KAAK,CAAC;YACtB,IAAM,QAAQ,GAAG;gBACb,WAAS,EAAE,CAAC;gBACZ,IAAI,WAAS,KAAK,CAAC,EAAE;oBACjB,aAAa,EAAE,CAAC;oBAChB,OAAO,IAAI,OAAO,EAAE,CAAC;iBACxB;aACJ,CAAC;YAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAE5B,IAAM,sBAAsB,GAAG,eAAe,GAAG,QAAQ,CAAC;oBACtD,KAAK,EAAE,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,IAAI,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;oBAChG,IAAI,EAAE,QAAQ;iBACO,EAAE,aAAa,CAAC,GAAG,aAAa,CAAC;gBAC1D,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;aACxE;SACJ;aACI;YACA,MAAuB,CAAC,QAAQ,GAAG,CAAC,CAAC;YACtC,MAAM,CAAC,SAAS,CAAC;gBACb,QAAQ,EAAE,CAAC;aACP,EAAE,QAAQ,CAAC;gBACf,MAAM,EAAN,UAAO,CAAC;oBACJ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;wBAC5B,IAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAiB,CAAC;wBAC/C,KAAK,CAAC,QAAQ,GAAI,MAAuB,CAAC,QAAQ,CAAC;wBACnD,KAAK,CAAC,UAAU,EAAE,CAAC;qBACtB;oBACD,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;iBAC7B;gBACD,IAAI;oBACA,aAAa,EAAE,CAAC;oBAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACtC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;qBACjD;oBACD,OAAO,IAAI,OAAO,EAAE,CAAC;iBACxB;aACoB,EAAE,aAAa,CAAC,CAAC,CAAC;SAC9C;QAED,IAAI,MAAM,CAAC,IAAI,EAAE;YACb,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACrC;QAED,OAAO;YACH,eAAe,EAAE,YAAY;YAC7B,aAAa,EAAE,aAAa;YAC5B,KAAK,EAAE,KAAK;SACf,CAAC;IACN,CAAC;AAmBD,aAAgB,aAAa,CACzB,QAAc,EACd,UAAkB,EAClB,aAA6B;QAE7B,IAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC;QAChC,IAAI,YAAY,GAAW,EAAE,CAAC;QAE9B,IAAM,UAAU,GAAG,aAAa,CAAC,UAAU,IAAI,iBAAiB,CAAC;QAEjE,SAAS,WAAW,CAAC,QAAmB;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE;oBACzB,WAAW,CAAE,IAAkB,CAAC,WAAW,EAAE,CAAC,CAAC;iBAClD;qBACI,IAAI,IAAI,YAAY,IAAI,EAAE;oBAC3B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC3B;aACJ;SACJ;QAGD,IAAI,iBAAiB,CAAC,QAAQ,CAAC,EAAE;YAC7B,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;YAEpC,IAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC;YACpC,IAAI,OAAO,GAAG,KAAK,EAAE;gBACjB,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,KAAK,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;oBAElC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;iBAC7D;aACJ;YAED,YAAY,CAAC,MAAM,GAAG,KAAK,CAAC;SAC/B;aACI;YACD,YAAY,GAAG,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5D,IAAM,iBAAiB,GAAG,QAAQ,CAAC,oBAAoB,EAAE,CAAC;YAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAE1C,YAAY,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;aACxD;YACD,IAAI,YAAY,CAAC,MAAM,KAAK,KAAK,EAAE;gBAC/B,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAC3D,OAAO,iBAAiB,EAAE,CAAC;aAC9B;SACJ;QAED,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;QACvC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;QAEnC,IAAM,eAAe,GAAG,aAAa,CAAC,eAAe,CAAC;QACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC5B,IAAM,sBAAsB,GAAG,eAAe,GAAG,QAAQ,CAAC;gBACtD,KAAK,EAAE,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,IAAI,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;aACxE,EAAE,aAAa,CAAC,GAAG,aAAa,CAAC;YAC1D,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;SACrE;QAED,OAAO;YACH,eAAe,EAAE,YAAY;YAC7B,aAAa,EAAE,UAAU;YACzB,KAAK,EAAE,UAAU,CAAC,MAAM;SAC3B,CAAC;IACN,CAAC;;;;;;;;;;;;;;ICl3BD;QAA0C,gCAAI;QAA9C;YAAA,qEAiDC;YA/CG,UAAI,GAAG,UAAU,CAAA;;SA+CpB;QA3CW,uCAAgB,GAAxB;YACI,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAC/B,IAAI,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAEnC,SAAS,GAAG,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;aACpD;YACD,IAAI,SAAS,EAAE;gBACX,IAAI,CAAC,UAAU,EAAE,CAAC;aACrB;SACJ;QAED,kCAAW,GAAX;YACI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YACrC,IAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;oBAChB,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;iBAC9B;gBACD,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;aAC/E;SACJ;QAED,gCAAS,GAAT,UAAU,GAAyC,EAAE,KAAwB;YACzE,IAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;aACjD;SACJ;QAED,iCAAU,GAAV;YACI,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;aAC1B;SACJ;QAED,sCAAe,GAAf;YACI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACpD;QACL,mBAAC;IAAD,CAjDA,CAA0C,IAAI,GAiD7C;;IC5CD,IAAM,CAAC,GAAgB,EAAE,CAAC;IAG1B;QAAoD,0CAAU;QAA9D;YAAA,qEAkIC;YAhIG,cAAQ,GAAY,IAAI,CAAA;YAExB,iBAAW,GAAG,IAAI,CAAA;YAEV,mBAAa,GAAiB,EAAE,CAAA;YAChC,4BAAsB,GAAiB,EAAE,CAAA;YAEzC,aAAO,GAAG,CAAC,CAAA;;SAyHtB;QAvHG,yCAAQ,GAAR,UACI,EAA+B,EAC/B,OAAU;YAEV,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SAC1B;QAED,yCAAQ,GAAR;YAGI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;SACnB;QAID,0CAAS,GAAT;YACI,OAAO,IAAI,CAAC,OAAO,CAAC;SACvB;QAED,gDAAe,GAAf;YACI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;SAC5C;QAED,iDAAgB,GAAhB;YACI,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;YACxB,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YACjB,IAAI,CAAC,UAAU,EAAE,CAAC;YAElB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;SACzB;QAED,0DAAyB,GAAzB;YACI,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;SACpC;QAED,+CAAc,GAAd,UAAe,WAAuB,EAAE,aAAuB;YAC3D,IAAI,aAAa,EAAE;gBACf,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACjD;iBACI;gBACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACxC;YACD,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;QAED,gDAAe,GAAf,UAAgB,YAA0B,EAAE,aAAuB;YAC/D,aAAa,GAAG,aAAa,IAAI,KAAK,CAAC;YACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;aACvD;SACJ;QAED,gDAAe,GAAf;YACI,OAAO,IAAI,CAAC,aAAa,CAAC;SAC7B;QAED,wDAAuB,GAAvB;YACI,OAAO,IAAI,CAAC,sBAAsB,CAAC;SACtC;QAED,uDAAsB,GAAtB,UAAuB,EAAqC;YACxD,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC3D,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;aACnC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzD,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;aAC5C;SACJ;QAED,uCAAM,GAAN;YACI,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC3D,IAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBAE1C,WAAW,CAAC,MAAM,GAAG,IAAwB,CAAC;gBAC9C,WAAW,CAAC,MAAM,EAAE,CAAC;gBACrB,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC;aAC7B;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzD,IAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;gBAEnD,WAAW,CAAC,MAAM,GAAG,IAAwB,CAAC;gBAC9C,WAAW,CAAC,MAAM,EAAE,CAAC;gBACrB,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC;aAC7B;SACJ;QAED,gDAAe,GAAf;YACI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACb,IAAM,IAAI,GAAG,IAAI,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;gBACxE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAChD,IAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBAC1C,IAAM,SAAS,GAAG,WAAW,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,CAAC;oBACxD,IAAI,WAAW,CAAC,kBAAkB,EAAE,EAAE;wBAClC,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC9D;oBACD,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;iBACzB;gBACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;aACrB;YACD,OAAO,IAAI,CAAC,KAAK,CAAC;SACrB;QAED,wCAAO,GAAP,UAAQ,CAAS,EAAE,CAAS;YACxB,IAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClD,IAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YAEpC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;gBACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAChD,IAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBAC1C,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;wBAC3B,OAAO,IAAI,CAAC;qBACf;iBACJ;aACJ;YACD,OAAO,KAAK,CAAC;SAChB;QAEL,6BAAC;IAAD,CAlIA,CAAoDuF,WAAU,GAkI7D;;IC9ID,IAAM,gBAAgB,GAAG,IAAI,GAAG,CAAiB,EAAE,CAAC,CAAC;AAarD,aAAgB,cAAc,CAAC,aAAiC;QAC5D,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;YACnC,IAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACzD,OAAO,YAAY,IAAI,YAAY,CAAC,KAAK,CAAC;SAC7C;aACI;YACD,OAAO,aAAa,CAAC;SACxB;IACL,CAAC;AAaD,aAAgB,mBAAmB,CAC/B,aAAiC,EACjC,KAAgB,EAChB,MAA6B,EAC7B,MAA+C,EAC/C,SAAa;QAEb,IAAI,CAAC,aAAa,EAAE;YAChB,OAAO,KAAK,CAAC;SAChB;aACI,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;YAGxC,IAAI,CAAC,KAAK,IAAK,KAAa,CAAC,YAAY,KAAK,aAAa,KAAK,CAAC,MAAM,EAAE;gBACrE,OAAO,KAAK,CAAC;aAChB;YAID,IAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAEzD,IAAM,WAAW,GAAG,EAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAC,CAAC;YAEvE,IAAI,YAAY,EAAE;gBACd,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;gBAC3B,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aAClE;iBACI;gBACD,KAAK,GAAG,WAAW,CAAC,SAAS,CACzB,aAAa,EAAE,WAAW,EAAE,WAAW,CAC1C,CAAC;gBACD,KAAa,CAAC,YAAY,GAAG,aAAa,CAAC;gBAE5C,gBAAgB,CAAC,GAAG,CAChB,aAAa,EACZ,KAAa,CAAC,cAAc,GAAG;oBAC5B,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,CAAC,WAAW,CAAC;iBACzB,CACJ,CAAC;aACL;YAED,OAAO,KAAK,CAAC;SAChB;aAEI;YACD,OAAO,aAAa,CAAC;SACxB;IACL,CAAC;IAED,SAAS,WAAW;QAChB,IAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAExD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAClD,IAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAM,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC;YAC1B,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;YACtC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;SAC9B;QACD,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACpC,CAAC;AAED,aAAgB,YAAY,CAAC,KAAgB;QACzC,OAAO,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;IAChD,CAAC;;IC7FD,IAAM,SAAS,GAAG,+BAA+B,CAAC;AA4BlD,IAcA,SAAS,aAAa,CAClB,GAAyC,EACzC,IAAY,EACZ,cAAsB,EACtB,IAAY,EACZ,QAAiB,EACjB,OAA6B;QAE7B,IAAI,CAAC,cAAc,EAAE;YACjB,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;YACxB,OAAO;SACV;QAED,IAAM,SAAS,GAAG,CAAC,IAAI,GAAG,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,OAAO,GAAG,sBAAsB,CAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAI1E,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAM,WAAW,GAAG,EAA8C,CAAC;QACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAClD,kBAAkB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,OAAsC,CAAC,CAAC;YACtF,SAAS,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC;YACpC,WAAW,GAAG,WAAW,IAAI,WAAW,CAAC,WAAW,CAAC;SACxD;QAED,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;IAClC,CAAC;IAED,SAAS,sBAAsB,CAC3B,cAAsB,EACtB,IAAY,EACZ,QAAiB,EACjB,OAA6B;QAE7B,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QACxB,IAAI,YAAY,GAAG,MAAM,CAAC,EAAE,EAAE,OAAO,CAAgC,CAAC;QAEtE,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC;QACzB,QAAQ,GAAG,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACtC,YAAY,CAAC,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QACjE,IAAM,OAAO,GAAG,YAAY,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAGrE,YAAY,CAAC,WAAW,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAG/C,IAAM,YAAY,GAAG,YAAY,CAAC,YAAY,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACrE,YAAY,CAAC,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAI9D,IAAI,YAAY,GAAG,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;QACpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,IAAI,YAAY,IAAI,YAAY,EAAE,CAAC,EAAE,EAAE;YAC9D,YAAY,IAAI,YAAY,CAAC;SAChC;QAED,IAAI,aAAa,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,aAAa,GAAG,YAAY,EAAE;YAC9B,QAAQ,GAAG,EAAE,CAAC;YACd,aAAa,GAAG,CAAC,CAAC;SACrB;QAED,YAAY,GAAG,cAAc,GAAG,aAAa,CAAC;QAE9C,YAAY,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACjC,YAAY,CAAC,aAAa,GAAG,aAAa,CAAC;QAC3C,YAAY,CAAC,YAAY,GAAG,YAAY,CAAC;QACzC,YAAY,CAAC,cAAc,GAAG,cAAc,CAAC;QAE7C,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,SAAS,kBAAkB,CACvB,GAA6C,EAC7C,QAAgB,EAChB,OAAoC;QAEpC,IAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC9C,IAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC1B,IAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QAE1C,IAAI,CAAC,cAAc,EAAE;YACjB,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;YAClB,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;YACxB,OAAO;SACV;QAED,IAAI,SAAS,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEzC,IAAI,SAAS,IAAI,cAAc,EAAE;YAC7B,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACxB,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;YACxB,OAAO;SACV;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,GAAI,CAAC,EAAE,EAAE;YACnB,IAAI,SAAS,IAAI,YAAY,IAAI,CAAC,IAAI,OAAO,CAAC,aAAa,EAAE;gBACzD,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;gBAC7B,MAAM;aACT;YAED,IAAM,SAAS,GAAG,CAAC,KAAK,CAAC;kBACnB,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,WAAW,CAAC;kBACjF,SAAS,GAAG,CAAC;sBACb,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;sBACtD,CAAC,CAAC;YAER,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACzC,SAAS,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;SACxC;QAED,IAAI,QAAQ,KAAK,EAAE,EAAE;YACjB,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC;SAClC;QAED,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACxB,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,SAAS,cAAc,CACnB,IAAY,EAAE,YAAoB,EAAE,YAAoB,EAAE,WAAmB;QAE7E,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,IAAI,KAAK,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;YAC9D,IAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACpC,KAAK,IAAI,CAAC,CAAC,IAAI,QAAQ,IAAI,QAAQ,IAAI,GAAG,IAAI,YAAY,GAAG,WAAW,CAAC;SAC5E;QACD,OAAO,CAAC,CAAC;IACb,CAAC;AA4BD,aAAgB,cAAc,CAC1B,IAAY,EACZ,KAAsB;QAEtB,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;QAG7B,IAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAChC,IAAM,OAAO,GAAG,KAAK,CAAC,OAAmB,CAAC;QAC1C,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,IAAM,QAAQ,GAAG,QAAQ,KAAK,UAAU,CAAC;QACzC,IAAM,oBAAoB,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACjD,IAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;QACrE,IAAM,YAAY,GAAG,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;QAE/C,IAAM,oBAAoB,GAAG,KAAK,CAAC,YAAY,KAAK,UAAU,CAAC;QAC/D,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACxB,IAAI,KAAe,CAAC;QAEpB,IAAI,KAAK,IAAI,IAAI,KAAK,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,UAAU,CAAC,EAAE;YACpE,KAAK,GAAG,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,UAAU,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;SAC3F;aACI;YACD,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;SACxC;QAED,IAAM,aAAa,GAAG,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC;QAChD,IAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAGtD,IAAI,aAAa,GAAG,MAAM,IAAI,oBAAoB,EAAE;YAChD,IAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;YAElD,WAAW,GAAG,WAAW,KAAK,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;YACxD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;SAUrC;QAED,IAAI,IAAI,IAAI,QAAQ,IAAI,KAAK,IAAI,IAAI,EAAE;YACnC,IAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE;gBAChE,OAAO,EAAE,KAAK,CAAC,eAAe;gBAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;aACjC,CAAC,CAAC;YAEH,IAAM,SAAS,GAAG,EAA8C,CAAC;YACjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACjD,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC;gBAC9B,WAAW,GAAG,WAAW,IAAI,SAAS,CAAC,WAAW,CAAC;aACtD;SACJ;QAGD,IAAI,WAAW,GAAG,MAAM,CAAC;QACzB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;SACnE;QACD,IAAI,KAAK,IAAI,IAAI,EAAE;YAEf,KAAK,GAAG,YAAY,CAAC;SACxB;QAED,IAAI,UAAU,GAAG,YAAY,CAAC;QAC9B,IAAI,OAAO,EAAE;YACT,WAAW,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACvC,UAAU,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACtC,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;SACpC;QAED,IAAI,YAAY,EAAE;YAEd,UAAU,GAAG,KAAK,CAAC;SACtB;QAED,OAAO;YACH,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,UAAU;YACtB,WAAW,EAAE,WAAW;YACxB,UAAU,EAAE,UAAU;YACtB,oBAAoB,EAAE,oBAAoB;YAC1C,YAAY,EAAE,YAAY;YAC1B,aAAa,EAAE,aAAa;YAC5B,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,WAAW;SAC3B,CAAC;IACN,CAAC;IAED;QAAA;SAsBC;QAAD,oBAAC;IAAD,CAAC,IAAA;IACD;QAKI,sBAAY,MAAwB;YAFpC,WAAM,GAAoB,EAAE,CAAA;YAGxB,IAAI,MAAM,EAAE;gBACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;aACxB;SACJ;QACL,mBAAC;IAAD,CAAC,IAAA;IACD;QAAA;YAEI,UAAK,GAAW,CAAC,CAAA;YACjB,WAAM,GAAW,CAAC,CAAA;YAElB,iBAAY,GAAW,CAAC,CAAA;YACxB,kBAAa,GAAW,CAAC,CAAA;YAEzB,eAAU,GAAW,CAAC,CAAA;YACtB,gBAAW,GAAW,CAAC,CAAA;YACvB,UAAK,GAAmB,EAAE,CAAA;YAG1B,gBAAW,GAAY,KAAK,CAAA;SAC/B;QAAD,2BAAC;IAAD,CAAC,IAAA;aAYe,aAAa,CAAC,IAAY,EAAE,KAAqB;QAC7D,IAAM,YAAY,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAEhD,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE;YACP,OAAO,YAAY,CAAC;SACvB;QAED,IAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;QAC7B,IAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;QAC/B,IAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAChC,IAAI,QAAQ,GAAa,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,UAAU,KAAK,QAAQ,IAAI,IAAI;cACxF,EAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,KAAK,UAAU,EAAC;cACnE,IAAI,CAAC;QAEX,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC;QACX,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC5C,IAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;YAClC,IAAI,YAAY,GAAG,SAAS,EAAE;gBAC1B,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;aACtF;YACD,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;SACnC;QAED,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE;YACzB,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;SACrF;QAGD,IAAI,WAAW,GAAG,EAAE,CAAC;QAErB,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,eAAe,GAAG,CAAC,CAAC;QAExB,IAAM,UAAU,GAAG,KAAK,CAAC,OAAmB,CAAC;QAE7C,IAAM,QAAQ,GAAG,QAAQ,KAAK,UAAU,CAAC;QACzC,IAAM,YAAY,GAAG,KAAK,CAAC,YAAY,KAAK,UAAU,CAAC;QACvD,IAAM,cAAc,GAAG,EAAyC,CAAC;QAIjE,SAAS,UAAU,CAAC,IAAkB,EAAE,SAAiB,EAAE,UAAkB;YACzE,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YACvB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;YAC7B,gBAAgB,IAAI,UAAU,CAAC;YAC/B,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;SAC1D;QAED,KAAK,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvD,IAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,IAAI,SAAS,GAAG,CAAC,CAAC;YAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,IAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC7B,IAAM,UAAU,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;gBAExE,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,GAAG,UAAU,CAAC,OAAmB,CAAC;gBACvE,IAAM,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAEnE,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;gBAExD,KAAK,CAAC,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;gBAE1C,IAAI,WAAW,GAAG,SAAS,CAGvB,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CACzC,CAAC;gBACF,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;gBAEhC,WAAW,KAAK,WAAW,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChE,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;gBAE3B,KAAK,CAAC,UAAU,GAAG,SAAS,CACxB,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,WAAW,CACvD,CAAC;gBAEF,KAAK,CAAC,KAAK,GAAG,UAAU,IAAI,UAAU,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;gBAC5D,KAAK,CAAC,aAAa,GAAG,UAAU,IAAI,UAAU,CAAC,aAAa,IAAI,QAAQ,CAAC;gBAEzE,IAAI,YAAY,IAAI,SAAS,IAAI,IAAI,IAAI,gBAAgB,GAAG,KAAK,CAAC,UAAU,GAAG,SAAS,EAAE;oBAGtF,IAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC;oBACjD,IAAI,CAAC,GAAG,CAAC,EAAE;wBACP,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBACtC,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;wBACxC,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;qBAC3D;yBACI;wBACD,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;qBACvD;oBACD,YAAY,CAAC,WAAW,GAAG,YAAY,CAAC,WAAW,KAAK,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC;oBACpG,MAAM,KAAK,CAAC;iBACf;gBAED,IAAI,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC;gBACvC,IAAI,sBAAsB,GAAG,eAAe,IAAI,IAAI,IAAI,eAAe,KAAK,MAAM,CAAC;gBAInF,IAAI,OAAO,eAAe,KAAK,QAAQ,IAAI,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;oBACnG,KAAK,CAAC,YAAY,GAAG,eAAe,CAAC;oBACrC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAExB,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;iBAGnD;qBACI;oBACD,IAAI,sBAAsB,EAAE;wBAGxB,IAAM,mBAAmB,GAAG,UAAU,CAAC,eAAe,CAAC;wBACvD,IAAI,KAAK,GAAG,mBAAmB,IAAK,mBAA4C,CAAC,KAAK,CAAC;wBAEvF,IAAI,KAAK,EAAE;4BACP,KAAK,GAAGC,cAA0B,CAAC,KAAK,CAAC,CAAC;4BAC1C,IAAIC,YAAwB,CAAC,KAAK,CAAC,EAAE;gCAEjC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;6BACjF;yBACJ;qBACJ;oBAED,IAAM,gBAAgB,GAAG,QAAQ,IAAI,QAAQ,IAAI,IAAI;0BAC/C,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC;oBAElC,IAAI,gBAAgB,IAAI,IAAI,IAAI,gBAAgB,GAAG,KAAK,CAAC,KAAK,EAAE;wBAC5D,IAAI,CAAC,sBAAsB,IAAI,gBAAgB,GAAG,QAAQ,EAAE;4BACxD,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;4BAChB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;yBACxC;6BACI;4BACD,aAAa,CACT,cAAc,EACd,KAAK,CAAC,IAAI,EAAE,gBAAgB,GAAG,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAC7D,EAAC,OAAO,EAAE,KAAK,CAAC,eAAe,EAAC,CACnC,CAAC;4BACF,KAAK,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;4BACjC,YAAY,CAAC,WAAW,GAAG,YAAY,CAAC,WAAW,IAAI,cAAc,CAAC,WAAW,CAAC;4BAClF,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;yBACjE;qBACJ;yBACI;wBACD,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;qBACnD;iBACJ;gBAED,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC;gBAExB,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC;gBACzB,UAAU,KAAK,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;aAGvE;YAED,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;SAC3C;QAED,YAAY,CAAC,UAAU,GAAG,YAAY,CAAC,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QACpF,YAAY,CAAC,WAAW,GAAG,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACxF,YAAY,CAAC,aAAa,GAAG,gBAAgB,CAAC;QAC9C,YAAY,CAAC,YAAY,GAAG,eAAe,CAAC;QAE5C,IAAI,UAAU,EAAE;YACZ,YAAY,CAAC,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACzD,YAAY,CAAC,WAAW,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;SAC7D;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACzC,IAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;YAExC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC;SACvE;QAED,OAAO,YAAY,CAAC;IACxB,CAAC;IAID,SAAS,UAAU,CACf,KAA2B,EAC3B,GAAW,EACX,KAAqB,EACrB,QAAkB,EAClB,SAAkB;QAElB,IAAM,UAAU,GAAG,GAAG,KAAK,EAAE,CAAC;QAC9B,IAAM,UAAU,GAAe,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACxE,IAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,IAAM,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;QAC3C,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,QAAQ,CAAC;QACb,IAAI,WAAW,CAAC;QAEhB,IAAI,QAAQ,EAAE;YACV,IAAM,YAAY,GAAG,UAAU,CAAC,OAAmB,CAAC;YACpD,IAAI,aAAa,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACzE,IAAI,UAAU,CAAC,KAAK,IAAI,IAAI,IAAI,UAAU,CAAC,KAAK,KAAK,MAAM,EAAE;gBAEzD,IAAM,YAAU,GAAG,YAAY,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC;gBAClF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClB,IAAI,YAAU,GAAG,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,KAAK,EAAE;wBAEnD,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC3B,OAAO,GAAG,IAAI,CAAC;qBAClB;iBACJ;gBAED,QAAQ,CAAC,UAAU,GAAG,YAAU,CAAC;aACpC;iBACI;gBACD,IAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACxF,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,GAAG,aAAa,CAAC;gBACrD,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;gBAC9B,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC;aACxB;SACJ;aACI;YACD,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC9B;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,IAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzB,IAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;YAClC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;YAC5B,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;YAClB,KAAK,CAAC,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC;YAE1C,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,QAAQ,EAAE;gBACtC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;aAClC;iBACI;gBACD,KAAK,CAAC,KAAK,GAAG,WAAW;sBACnB,WAAW,CAAC,CAAC,CAAC;sBACd,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aAC9B;YAGD,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE;gBAChB,IAAM,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,YAAY,EAAE,CAAC,EAAE,MAAM,CAAC;gBASnF,IAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;gBAChC,CAAC,SAAS,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY;uBACnC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK;uBAGjB,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,UAAU,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aACpE;iBAEI;gBAED,KAAK,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACzC;SACJ;IACL,CAAC;IAGD,SAAS,kBAAkB,CAAC,EAAU;QAMlC,IAAI,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC5B,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK;eAC7B,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM;eAC/B,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM;eAChC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC;IAC5C,CAAC;IAED,IAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,UAAU,GAAG,EAAE,EAAE;QAC9D,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;QACf,OAAO,GAAG,CAAC;IACf,CAAC,EAAE,EAAyB,CAAC,CAAC;IAI9B,SAAS,eAAe,CAAC,EAAU;QAC/B,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAAE;YACxB,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE;gBAClB,OAAO,IAAI,CAAC;aACf;YACD,OAAO,KAAK,CAAC;SAChB;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,SAAS,QAAQ,CACb,IAAY,EACZ,IAAY,EACZ,SAAiB,EACjB,UAAmB,EACnB,cAAsB;QAEtB,IAAI,KAAK,GAAa,EAAE,CAAC;QACzB,IAAI,WAAW,GAAa,EAAE,CAAC;QAC/B,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAElC,IAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,EAAE,KAAK,IAAI,EAAE;gBACb,IAAI,WAAW,EAAE;oBACb,IAAI,IAAI,WAAW,CAAC;oBACpB,UAAU,IAAI,gBAAgB,CAAC;iBAClC;gBACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAE7B,IAAI,GAAG,EAAE,CAAC;gBACV,WAAW,GAAG,EAAE,CAAC;gBACjB,gBAAgB,GAAG,CAAC,CAAC;gBACrB,UAAU,GAAG,CAAC,CAAC;gBACf,SAAS;aACZ;YAED,IAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACnC,IAAM,MAAM,GAAG,UAAU,GAAG,KAAK,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;YAEzD,IAAI,CAAC,KAAK,CAAC,MAAM;kBACX,cAAc,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS;kBACjD,UAAU,GAAG,OAAO,GAAG,SAAS,EACpC;gBACE,IAAI,CAAC,UAAU,EAAE;oBACb,IAAI,MAAM,EAAE;wBAGR,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBACxB,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;wBAEnC,WAAW,GAAG,EAAE,CAAC;wBACjB,gBAAgB,GAAG,OAAO,CAAC;qBAC9B;yBACI;wBAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACf,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;qBAC7B;iBACJ;qBACI,IAAI,IAAI,IAAI,WAAW,EAAE;oBAC1B,IAAI,MAAM,EAAE;wBACR,IAAI,CAAC,IAAI,EAAE;4BAIP,IAAI,GAAG,WAAW,CAAC;4BACnB,WAAW,GAAG,EAAE,CAAC;4BACjB,gBAAgB,GAAG,CAAC,CAAC;4BACrB,UAAU,GAAG,gBAAgB,CAAC;yBACjC;wBAED,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACjB,WAAW,CAAC,IAAI,CAAC,UAAU,GAAG,gBAAgB,CAAC,CAAC;wBAGhD,WAAW,IAAI,EAAE,CAAC;wBAClB,gBAAgB,IAAI,OAAO,CAAC;wBAC5B,IAAI,GAAG,EAAE,CAAC;wBACV,UAAU,GAAG,gBAAgB,CAAC;qBACjC;yBACI;wBAED,IAAI,WAAW,EAAE;4BACb,IAAI,IAAI,WAAW,CAAC;4BACpB,WAAW,GAAG,EAAE,CAAC;4BACjB,gBAAgB,GAAG,CAAC,CAAC;yBACxB;wBACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACjB,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBAE7B,IAAI,GAAG,EAAE,CAAC;wBACV,UAAU,GAAG,OAAO,CAAC;qBACxB;iBACJ;gBAED,SAAS;aACZ;YAED,UAAU,IAAI,OAAO,CAAC;YAEtB,IAAI,MAAM,EAAE;gBACR,WAAW,IAAI,EAAE,CAAC;gBAClB,gBAAgB,IAAI,OAAO,CAAC;aAC/B;iBACI;gBAED,IAAI,WAAW,EAAE;oBACb,IAAI,IAAI,WAAW,CAAC;oBAEpB,WAAW,GAAG,EAAE,CAAC;oBACjB,gBAAgB,GAAG,CAAC,CAAC;iBACxB;gBAGD,IAAI,IAAI,EAAE,CAAC;aACd;SACJ;QAED,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE;YACxB,IAAI,GAAG,IAAI,CAAC;YACZ,WAAW,GAAG,EAAE,CAAC;YACjB,gBAAgB,GAAG,CAAC,CAAC;SACxB;QAGD,IAAI,WAAW,EAAE;YACb,IAAI,IAAI,WAAW,CAAC;SACvB;QACD,IAAI,IAAI,EAAE;YACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAChC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YAEpB,UAAU,IAAI,cAAc,CAAC;SAChC;QAED,OAAO;YAEH,UAAU,YAAA;YACV,KAAK,EAAE,KAAK;YACZ,WAAW,aAAA;SACd,CAAC;IACN,CAAC;;IC7lBD,IAAM,uBAAuB,GAAG;QAC5B,IAAI,EAAE,MAAM;KACf,CAAC;IACF,IAAM,yBAAyB,GAAG,CAAC,CAAC;AAWpC,IAAO,IAAM,4BAA4B,GAAkC;QACvE,KAAK,EAAE,QAAQ,CAAyE;YACpF,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,IAAI;YACjB,aAAa,EAAE,IAAI;YACnB,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;YACZ,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,IAAI;YACpB,iBAAiB,EAAE,IAAI;YACvB,iBAAiB,EAAE,IAAI;YACvB,eAAe,EAAE,IAAI;YACrB,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,IAAI;SACrB,EAAE,8BAA8B,CAAC,KAAK,CAAC;KAC1C,CAAC;IAcH;QAAqB,0BAAsB;QAgCvC,gBAAY,IAAgB;YAA5B,YACI,iBAAO,SAEV;YAjCD,UAAI,GAAG,MAAM,CAAA;YAwBL,eAAS,GAA+B,EAAE,CAAA;YAI1C,mBAAa,GAAqB,uBAAuB,CAAA;YAI7D,KAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;SACnB;QAED,4BAAW,GAAX;YACI,OAAO,IAAI,CAAC,SAAS,CAAC;SACzB;QAED,uBAAM,GAAN;YAEI,iBAAM,MAAM,WAAE,CAAC;YAGf,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;gBACrB,IAAI,CAAC,eAAe,EAAE,CAAC;aAC1B;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,IAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAEhC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC3B,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;gBACjB,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;gBACnB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;gBAC7B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC3B,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;aACpC;SACJ;QAEA,gCAAe,GAAf;YACG,IAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;YACnD,IAAI,kBAAkB,EAAE;gBACpB,kBAAkB,CAAC,eAAe,EAAE,CAAC;gBACrC,IAAI,kBAAkB,CAAC,SAAS,EAAE;oBAC9B,IAAI,CAAC,SAAS,GAAG,kBAAkB,CAAC,SAAS,CAAC;iBACjD;aACJ;iBACI;gBACD,iBAAM,eAAe,WAAE,CAAC;aAC3B;SACJ;QAED,kCAAiB,GAAjB,UAAkB,CAAe;YAC7B,IAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;YACnD,OAAO,kBAAkB;kBACnB,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC;kBACvC,iBAAM,iBAAiB,YAAC,CAAC,CAAC,CAAC;SACpC;QAGD,qCAAoB,GAApB;YACI,IAAI,IAAI,CAAC,YAAY,EAAE;gBAEnB,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC;gBAEzC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;aAC3C;YAED,OAAO,iBAAM,oBAAoB,WAAE,CAAC;SACvC;QAEO,gCAAe,GAAvB;YAEI,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YAEtB,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,IAAI;kBACT,IAAI,CAAC,gBAAgB,EAAE;kBACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAE/B,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;YAE1C,IAAI,CAAC,YAAY,EAAE,CAAC;SACvB;QAED,4BAAW,GAAX,UAAY,EAAe;YACvB,iBAAM,WAAW,YAAC,EAAE,CAAC,CAAC;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAK5C,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;aAC/B;SACJ;QAED,iCAAgB,GAAhB,UAAiB,EAAe;YAC5B,iBAAM,gBAAgB,YAAC,EAAE,CAAC,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;aACjC;SACJ;QAED,gCAAe,GAAf;YACI,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;gBACrB,IAAI,CAAC,eAAe,EAAE,CAAC;aAC1B;YACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBAEb,IAAM,OAAO,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7C,IAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;gBAChC,IAAM,MAAM,GAAgB,EAAE,CAAC;gBAC/B,IAAI,IAAI,GAAG,IAAI,CAAC;gBAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACtC,IAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAC1B,IAAM,SAAS,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC;oBAC1C,IAAM,SAAS,GAAG,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;oBAElD,IAAI,SAAS,EAAE;wBACX,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBACxB,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;wBAClC,IAAI,GAAG,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;wBAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;qBACvB;yBACI;wBACD,IAAI,GAAG,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;wBACjC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;qBACzB;iBACJ;gBACD,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,OAAO,CAAC;aAChC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC;SACrB;QAGD,oCAAmB,GAAnB,UAAoB,gBAAkC;YAElD,IAAI,CAAC,aAAa,GAAG,gBAAgB,IAAI,uBAAuB,CAAC;SACpE;QAED,+BAAc,GAAd,UAAe,WAAkB;YAC7B,AAA2C;gBACvC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;aACzD;SACJ;QAOS,4BAAW,GAArB,UAAsB,WAA2B,EAAE,WAA2B;YAC1E,IAAI,CAAC,WAAW,EAAE;gBACd,OAAO,WAAW,CAAC;aACtB;YAGD,IAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC;YACpC,IAAM,UAAU,GAAG,WAAW,CAAC,IAAI,KAAK,UAAU,IAAI,EAAE,CAAC,CAAC;YAE1D,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YAEjC,IAAI,UAAU,IAAI,UAAU,EAAE;gBAE1B,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBACxC,WAAW,CAAC,IAAI,GAAG,UAAU,CAAC;aACjC;iBACI,IAAI,UAAU,EAAE;gBAEjB,WAAW,CAAC,IAAI,GAAG,UAAU,CAAC;aACjC;YAED,OAAO,WAAW,CAAC;SACtB;QAEO,2BAAU,GAAlB,UAAmB,UAAkC,EAAE,UAAkC;YACrF,IAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACvC,IAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC9B,UAAU,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAClD,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;aACtD;SACJ;QAED,uCAAsB,GAAtB;YACI,OAAO,4BAA4B,CAAC;SACvC;QAMO,kCAAiB,GAAzB,UAA0B,IAAqC;YAC3D,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC9C,IAAI,CAAC,KAAK,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,EAAE;gBACpC,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;aACtB;YACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,KAAK,CAAC;YAC5C,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAEvB,KAAK,CAAC,MAAM,GAAG,IAAW,CAAC;YAC3B,OAAO,KAAK,CAAC;SAChB;QAEO,kCAAiB,GAAzB;YACI,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,IAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,IAAI,YAAY,CAAC;YAC5C,IAAM,WAAW,GAAG,KAAK,CAAC,OAAmB,CAAC;YAE9C,IAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACjC,IAAM,YAAY,GAAG,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACjD,IAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAM,YAAY,GAAG,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;YAE/C,IAAM,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC;YAC7C,IAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;YAC3C,IAAM,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC;YAE/C,IAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;YACrC,IAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;YAE3C,IAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;YAExC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC;YAE9C,IAAM,KAAK,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAM,KAAK,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAM,SAAS,GAAG,KAAK,CAAC,KAAK,IAAI,YAAY,CAAC,KAAK,IAAI,MAAM,CAAC;YAC9D,IAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,YAAY,CAAC,aAAa,IAAI,KAAK,CAAC;YAEjF,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,IAAI,KAAK,GAAGzD,aAAW,CAAC,KAAK,EAAE,YAAY,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;YAE1E,IAAI,UAAU,IAAI,WAAW,EAAE;gBAE3B,IAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;gBACvD,IAAM,IAAI,GAAGA,aAAW,CAAC,KAAK,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;gBAC5D,UAAU,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;aAC3F;YAGD,KAAK,IAAI,UAAU,GAAG,CAAC,CAAC;YAExB,IAAI,WAAW,EAAE;gBACb,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;gBAC1D,IAAI,aAAa,KAAK,KAAK,EAAE;oBACzB,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;iBAC3B;qBACI,IAAI,aAAa,KAAK,QAAQ,EAAE;oBACjC,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;iBAC3B;aACJ;YAED,IAAI,gBAAgB,GAAG,CAAC,CAAC;YACzB,IAAI,cAAc,GAAG,KAAK,CAAC;YAC3B,IAAM,QAAQ,GAAG,OAAO,CACpB,MAAM,IAAI,KAAK;kBACT,KAAK,CAAC,IAAI;mBACT,cAAc,GAAG,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CACnD,CAAC;YACF,IAAM,UAAU,GAAG,SAAS,CACxB,QAAQ,IAAI,KAAK;kBACX,KAAK,CAAC,MAAM;kBACZ,CAAC,CAAC,YAAY;wBAUR,CAAC,YAAY,CAAC,UAAU,IAAI,cAAc,CAAC;uBAEhD,gBAAgB,GAAG,yBAAyB,EAAE,YAAY,CAAC,MAAM;sBAClE,IAAI,CACb,CAAC;YAEF,IAAM,SAAS,GAAG,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;YAE3C,IAAM,iBAAiB,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI;oBACrC,KAAK,CAAC,QAAQ,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;YACtG,IAAM,oBAAoB,GAAG,YAAY,CAAC,oBAAoB,CAAC;YAE/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACvC,IAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAEzC,IAAM,UAAU,GAAoB,EAAE,CAAC,WAAW,EAAE,CAAC;gBACrD,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACxB,UAAU,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC/B,UAAU,CAAC,CAAC,GAAG,KAAK,CAAC;gBACrB,UAAU,CAAC,CAAC,GAAG,KAAK,CAAC;gBAIrB,IAAI,SAAS,EAAE;oBACX,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;iBACpC;gBAGD,UAAU,CAAC,YAAY,GAAG,QAAQ,CAAC;gBACnC,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;gBAEnC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC;gBAE9B,IAAI,SAAS,EAAE;oBACX,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC;oBAClD,UAAU,CAAC,WAAW,GAAG,KAAK,CAAC,eAAe,IAAI,aAAa,CAAC;oBAChE,UAAU,CAAC,aAAa,GAAG,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC;oBACxD,UAAU,CAAC,aAAa,GAAG,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC;iBAC3D;gBAGD,UAAU,CAAC,MAAM,GAAG,UAAoB,CAAC;gBACzC,UAAU,CAAC,IAAI,GAAG,QAAkB,CAAC;gBAErC,IAAI,UAAU,EAAE;oBACZ,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,gBAAgB,CAAC;oBAC3D,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;oBACrC,UAAU,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC;iBACzD;gBAED,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC;gBAC3B,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;gBAEnC,KAAK,IAAI,UAAU,CAAC;gBAEpB,IAAI,iBAAiB,EAAE;oBACnB,EAAE,CAAC,eAAe,CAAC,IAAI,YAAY,CAC/B,WAAW,CAAC,UAAU,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,SAAsB,CAAC,EAC1EA,aAAW,CAAC,UAAU,CAAC,CAAC,EAAE,oBAAoB,EAAE,UAAU,CAAC,YAAiC,CAAC,EAM7F,YAAY,EACZ,oBAAoB,CACvB,CAAC,CAAC;iBACN;aACJ;SACJ;QAGO,iCAAgB,GAAxB;YACI,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAGzB,IAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACjC,IAAM,YAAY,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAEhD,IAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC;YACxC,IAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;YAC3C,IAAM,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC;YAC7C,IAAM,WAAW,GAAG,KAAK,CAAC,OAAmB,CAAC;YAE9C,IAAM,KAAK,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAM,KAAK,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;YACxC,IAAM,SAAS,GAAG,KAAK,CAAC,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC;YACpD,IAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,YAAY,CAAC,aAAa,CAAC;YAExE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC;YAE9C,IAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;YACvD,IAAM,IAAI,GAAGA,aAAW,CAAC,KAAK,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;YAC5D,IAAI,KAAK,GAAG,IAAI,CAAC;YACjB,IAAI,OAAO,GAAG,IAAI,CAAC;YAEnB,IAAI,WAAW,EAAE;gBACb,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;gBACxB,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;aAC7B;YAED,IAAI,MAAM,GAAG,KAAK,GAAG,YAAY,CAAC;YAElC,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE;gBAC3B,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;aAC7E;YACD,IAAM,YAAY,GAAG,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;YAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAChD,IAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC3B,IAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;gBACjC,IAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;gBAEnC,IAAI,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC/B,IAAI,SAAS,GAAG,CAAC,CAAC;gBAClB,IAAI,SAAS,GAAG,KAAK,CAAC;gBACtB,IAAI,UAAU,GAAG,MAAM,CAAC;gBACxB,IAAI,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC;gBAChC,IAAI,KAAK,SAAA,CAAC;gBAEV,OACI,SAAS,GAAG,UAAU;wBAClB,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,EACxE;oBACE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;oBACrF,aAAa,IAAI,KAAK,CAAC,KAAK,CAAC;oBAC7B,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC;oBACzB,SAAS,EAAE,CAAC;iBACf;gBAED,OACI,UAAU,IAAI,CAAC;wBACX,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,EAC1D;oBACE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;oBACvF,aAAa,IAAI,KAAK,CAAC,KAAK,CAAC;oBAC7B,UAAU,IAAI,KAAK,CAAC,KAAK,CAAC;oBAC1B,UAAU,EAAE,CAAC;iBAChB;gBAGD,SAAS,IAAI,CAAC,YAAY,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,MAAM,GAAG,UAAU,CAAC,GAAG,aAAa,IAAI,CAAC,CAAC;gBAC9F,OAAO,SAAS,IAAI,UAAU,EAAE;oBAC5B,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;oBAE1B,IAAI,CAAC,WAAW,CACZ,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EACjC,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAE,YAAY,CACtD,CAAC;oBACF,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC;oBACzB,SAAS,EAAE,CAAC;iBACf;gBAED,OAAO,IAAI,UAAU,CAAC;aACzB;SACJ;QAEO,4BAAW,GAAnB,UACI,KAAgB,EAChB,KAAqB,EACrB,UAAkB,EAClB,OAAe,EACf,CAAS,EACT,SAAiB,EACjB,kBAA2B;YAE3B,IAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACrD,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YAI7B,IAAM,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;YAC1C,IAAI,CAAC,GAAG,OAAO,GAAG,UAAU,GAAG,CAAC,CAAC;YACjC,IAAI,aAAa,KAAK,KAAK,EAAE;gBACzB,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;aAClC;iBACI,IAAI,aAAa,KAAK,QAAQ,EAAE;gBACjC,CAAC,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;aAC/C;YAED,IAAM,UAAU,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,kBAAkB,CAAC,UAAU,CAAC,CAAC;YACzE,UAAU,IAAI,IAAI,CAAC,iBAAiB,CAChC,UAAU,EACV,KAAK,EACL,SAAS,KAAK,OAAO;kBACf,CAAC,GAAG,KAAK,CAAC,KAAK;kBACf,SAAS,KAAK,QAAQ;sBACtB,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC;sBACnB,CAAC,EACP,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EACpB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,MAAM,CACf,CAAC;YACF,IAAM,YAAY,GAAG,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC;YAElD,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;YACtC,IAAI,WAAW,EAAE;gBACb,CAAC,GAAG,kBAAkB,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;gBAClD,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;aAClE;YAED,IAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACzC,IAAM,UAAU,GAAoB,EAAE,CAAC,WAAW,EAAE,CAAC;YAErD,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAExB,IAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;YACxC,IAAI,cAAc,GAAG,KAAK,CAAC;YAC3B,IAAI,gBAAgB,GAAG,CAAC,CAAC;YACzB,IAAM,QAAQ,GAAG,OAAO,CACpB,MAAM,IAAI,UAAU,GAAG,UAAU,CAAC,IAAI;kBAChC,MAAM,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI;uBAC3B,cAAc,GAAG,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CACnD,CAAC;YACF,IAAM,UAAU,GAAG,SAAS,CACxB,QAAQ,IAAI,UAAU,GAAG,UAAU,CAAC,MAAM;kBACpC,QAAQ,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM;sBAChC,CACE,CAAC,YAAY;2BACV,CAAC,kBAAkB;4BAElB,CAAC,YAAY,CAAC,UAAU,IAAI,cAAc,CAAC,KAC9C,gBAAgB,GAAG,yBAAyB,EAAE,YAAY,CAAC,MAAM;0BACpE,IAAI,CACb,CAAC;YAEF,IAAM,SAAS,GAAG,UAAU,CAAC,cAAc,GAAG,CAAC;mBACxC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;YAEhC,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YAC7B,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;YACjB,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;YACjB,IAAI,SAAS,EAAE;gBACX,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,cAAc,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC;gBAC/E,UAAU,CAAC,WAAW,GAAG,UAAU,CAAC,eAAe,IAAI,KAAK,CAAC,eAAe,IAAI,aAAa,CAAC;gBAC9F,UAAU,CAAC,aAAa,GAAG,UAAU,CAAC,iBAAiB,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC;gBACxF,UAAU,CAAC,aAAa,GAAG,UAAU,CAAC,iBAAiB,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC;aAC3F;YAED,UAAU,CAAC,SAAS,GAAG,SAA4B,CAAC;YAGpD,UAAU,CAAC,YAAY,GAAG,QAAQ,CAAC;YACnC,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,YAAY,CAAC;YAC7C,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAIrE,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAExC,IAAI,UAAU,EAAE;gBACZ,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;gBAC1F,UAAU,CAAC,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACrE,UAAU,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC;gBACtD,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC;aAClC;YACD,IAAI,QAAQ,EAAE;gBACV,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC;aAC9B;YAED,IAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC;YACrC,IAAM,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC;YAEvC,EAAE,CAAC,eAAe,CAAC,IAAI,YAAY,CAC/B,WAAW,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,SAAsB,CAAC,EACvEA,aAAW,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,YAAiC,CAAC,EACnF,SAAS,EACT,UAAU,CACb,CAAC,CAAC;SACN;QAEO,kCAAiB,GAAzB,UACI,KAAyB,EACzB,QAA4B,EAC5B,CAAS,EACT,CAAS,EACT,KAAa,EACb,MAAc;YAEd,IAAM,mBAAmB,GAAG,KAAK,CAAC,eAAe,CAAC;YAClD,IAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC;YAC1C,IAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC;YAC1C,IAAM,SAAS,GAAG,mBAAmB,IAAK,mBAA0C,CAAC,KAAK,CAAC;YAC3F,IAAM,mBAAmB,GAAG,mBAAmB,IAAI,CAAC,SAAS,CAAC;YAC9D,IAAM,gBAAgB,GAAG,KAAK,CAAC,YAAY,CAAC;YAC5C,IAAM,IAAI,GAAG,IAAI,CAAC;YAElB,IAAI,MAAY,CAAC;YACjB,IAAI,KAAc,CAAC;YACnB,IAAI,mBAAmB,IAAI,KAAK,CAAC,UAAU,KAAK,eAAe,IAAI,eAAe,CAAC,EAAE;gBAEjF,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBACtC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;gBACtC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;gBACzB,IAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;gBAC/B,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;gBAChB,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;gBAChB,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;gBACxB,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC;gBAC1B,SAAS,CAAC,CAAC,GAAG,gBAAgB,CAAC;gBAC/B,MAAM,CAAC,UAAU,EAAE,CAAC;aACvB;YAED,IAAI,mBAAmB,EAAE;gBACrB,IAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;gBAC/B,SAAS,CAAC,IAAI,GAAG,mBAA6B,IAAI,IAAI,CAAC;gBACvD,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;aAC3D;iBACI,IAAI,SAAS,EAAE;gBAChB,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBACxC,KAAK,CAAC,MAAM,GAAG;oBAEX,IAAI,CAAC,UAAU,EAAE,CAAC;iBACrB,CAAC;gBACF,IAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC7B,QAAQ,CAAC,KAAK,GAAI,mBAA0C,CAAC,KAAK,CAAC;gBACnE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;gBACf,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;gBACf,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;gBACvB,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;aAC5B;YAED,IAAI,eAAe,IAAI,eAAe,EAAE;gBACpC,IAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;gBAC/B,SAAS,CAAC,SAAS,GAAG,eAAe,CAAC;gBACtC,SAAS,CAAC,MAAM,GAAG,eAAe,CAAC;gBACnC,SAAS,CAAC,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;gBAC5D,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC;gBACtC,SAAS,CAAC,cAAc,GAAG,KAAK,CAAC,gBAAgB,IAAI,CAAC,CAAC;gBACvD,MAAM,CAAC,sBAAsB,GAAG,CAAC,CAAC;gBAGlC,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,MAAM,CAAC,SAAS,EAAE,EAAE;oBACxC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;oBAC7B,SAAS,CAAC,SAAS,IAAI,CAAC,CAAC;iBAC5B;aACJ;YAED,IAAM,WAAW,GAAG,CAAC,MAAM,IAAI,KAAK,EAAE,KAAK,CAAC;YAC5C,WAAW,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;YAC/C,WAAW,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,aAAa,CAAC;YAC7D,WAAW,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;YACrD,WAAW,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;YACrD,WAAW,CAAC,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;SACvE;QAEM,eAAQ,GAAf,UAAgB,KAAyB;YAGrC,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE;gBACxB,IAAI,GAAG;oBACH,KAAK,CAAC,SAAS;oBACf,KAAK,CAAC,UAAU;oBAChB,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC;oBAE7B,KAAK,CAAC,UAAU,IAAI,YAAY;iBACnC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACf;YACD,OAAO,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC;SAC7D;QACL,aAAC;IAAD,CArpBA,CAAqB,WAAW,GAqpB/B;IAGD,IAAM,gBAAgB,GAAG,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC;IAC3D,IAAM,yBAAyB,GAAG,EAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC;IAEjE,IAAM,UAAU,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,CAAU,CAAC;AAElF,aAAgB,aAAa,CAAC,QAAyB;QACnD,IACI,OAAO,QAAQ,KAAK,QAAQ;gBAExB,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;mBAC1B,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;mBAC9B,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CACnC,EACH;YACE,OAAO,QAAQ,CAAC;SACnB;aACI,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE;YACxB,OAAO,QAAQ,GAAG,IAAI,CAAC;SAC1B;aACI;YACD,OAAO,iBAAiB,GAAG,IAAI,CAAC;SACnC;IACL,CAAC;IAED,SAAS,eAAe,CACpB,WAA4B,EAC5B,WAA+B;QAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,IAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,GAAG,IAAI,IAAI,EAAE;gBACZ,WAAmB,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;aACxC;SACJ;IACL,CAAC;AAED,aAAgB,eAAe,CAAC,KAAyE;QACrG,OAAO,KAAK,CAAC,QAAQ,IAAI,IAAI,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC;IAC1E,CAAC;AAED,aAAgB,kBAAkB,CAAC,KAAqB;QACpD,cAAc,CAAC,KAAK,CAAC,CAAC;QAEtB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,SAAS,cAAc,CAAC,KAAyB;QAC7C,IAAI,KAAK,EAAE;YACP,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;YAE3B,SAAoB,KAAK,QAAQ,KAAK,SAAS,GAAG,QAAQ,CAAC,CAAC;YAC7D,KAAK,CAAC,KAAK,GAAG,CACV,SAAS,IAAI,IAAI,IAAI,gBAAgB,CAAC,SAAS,CAAC,IAChD,SAAS,GAAG,MAAM,CAAC;YAGvB,IAAI,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;YACvC,aAAwB,KAAK,QAAQ,KAAK,aAAa,GAAG,QAAQ,CAAC,CAAC;YACrE,KAAK,CAAC,aAAa,GAAG,CAClB,aAAa,IAAI,IAAI,IAAI,yBAAyB,CAAC,aAAa,CAAC,IACjE,aAAa,GAAG,KAAK,CAAC;YAG1B,IAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC;YAClC,IAAI,WAAW,EAAE;gBACb,KAAK,CAAC,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;aACpD;SACJ;IACL,CAAC;IAMD,SAAS,SAAS,CACd,MAAqC,EACrC,SAAkB;QAElB,OAAO,CAAC,MAAM,IAAI,IAAI,IAAI,SAAS,IAAI,CAAC,IAAI,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,MAAM;cACnF,IAAI;cACJ,CAAE,MAAc,CAAC,KAAK,IAAK,MAAc,CAAC,UAAU;kBACpD,MAAM;kBACN,MAAM,CAAC;IACjB,CAAC;IAED,SAAS,OAAO,CACZ,IAAiC;QAEjC,OAAO,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,MAAM;cACjC,IAAI;cAEJ,CAAE,IAAY,CAAC,KAAK,IAAK,IAAY,CAAC,UAAU;kBAChD,MAAM;kBACN,IAAI,CAAC;IACf,CAAC;IAED,SAAS,kBAAkB,CAAC,CAAS,EAAE,SAAiB,EAAE,WAAqB;QAC3E,OAAO,SAAS,KAAK,OAAO;eACrB,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;cACnB,SAAS,KAAK,QAAQ;mBACrB,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;mBAC3C,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,SAAS,YAAY,CAAC,KAAyB;QAG3C,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACtB,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IAChB,CAAC;IAMD,SAAS,kBAAkB,CAAC,KAAyB;QACjD,OAAO,CAAC,EACJ,KAAK,CAAC,eAAe;eAClB,KAAK,CAAC,UAAU;gBACf,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,CAC9C,CAAC;IACN,CAAC;;;QChhCD;YACI,OAAE,GAAG,CAAC,CAAC;YACP,OAAE,GAAG,CAAC,CAAC;YACP,MAAC,GAAG,CAAC,CAAC;YACN,eAAU,GAAG,CAAC,CAAC;YACf,aAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA;YACtB,cAAS,GAAI,IAAI,CAAA;SACpB;QAAD,eAAC;IAAD,CAAC,IAAA;IAMD;QAAkB,uBAAc;QAI5B,aAAY,IAAe;mBACvB,kBAAM,IAAI,CAAC;SACd;QAED,6BAAe,GAAf;YACI,OAAO;gBACH,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,IAAc;aACvB,CAAC;SACL;QAED,6BAAe,GAAf;YACI,OAAO,IAAI,QAAQ,EAAE,CAAC;SACzB;QAED,uBAAS,GAAT,UAAU,GAA6B,EAAE,KAAe;YAEpD,IAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YACnB,IAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YACnB,IAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/B,IAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;YACpC,IAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;YAChC,IAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;YAElC,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACnC,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAEnC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACzC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC;SACtD;QACL,UAAC;IAAD,CAlCA,CAAkB,IAAI,GAkCrB;IAED,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,KAAK,CAAC;;ICxC3B,IAAM,GAAG,GAAa,EAAE,CAAC;AAEzB;QAAA;YACI,OAAE,GAAG,CAAC,CAAA;YACN,OAAE,GAAG,CAAC,CAAA;YACN,OAAE,GAAG,CAAC,CAAA;YACN,OAAE,GAAG,CAAC,CAAA;YACN,SAAI,GAAG,CAAC,CAAA;YACR,SAAI,GAAG,CAAC,CAAA;YAIR,YAAO,GAAG,CAAC,CAAA;SACd;QAAD,uBAAC;IAAD,CAAC,IAAA;IAED,SAAS,YAAY,CAAC,KAAuB,EAAE,CAAS,EAAE,SAAkB;QACxE,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;YAC9B,OAAO;gBACH,CAAC,SAAS,GAAG,iBAAiB,GAAG,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxF,CAAC,SAAS,GAAG,iBAAiB,GAAG,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;aAC3F,CAAC;SACL;aACI;YACD,OAAO;gBACH,CAAC,SAAS,GAAG,qBAAqB,GAAG,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBACpF,CAAC,SAAS,GAAG,qBAAqB,GAAG,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;aACvF,CAAC;SACL;IACL,CAAC;IAKD;QAA0B,+BAAsB;QAI5C,qBAAY,IAAuB;mBAC/B,kBAAM,IAAI,CAAC;SACd;QAED,qCAAe,GAAf;YACI,OAAO;gBACH,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,IAAc;aACvB,CAAC;SACL;QAED,qCAAe,GAAf;YACI,OAAO,IAAI,gBAAgB,EAAE,CAAC;SACjC;QAED,+BAAS,GAAT,UAAU,GAA6B,EAAE,KAAuB;YAC5D,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;YAClB,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;YAClB,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;YAClB,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;YAClB,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YACtB,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YACtB,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YACtB,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YACtB,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC5B,IAAI,OAAO,KAAK,CAAC,EAAE;gBACf,OAAO;aACV;YAED,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAEnB,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;gBAC9B,IAAI,OAAO,GAAG,CAAC,EAAE;oBACb,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;oBAC/C,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBACd,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBACZ,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;oBAC/C,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBACd,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;iBACf;gBAED,GAAG,CAAC,gBAAgB,CAChB,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,EAAE,CACT,CAAC;aACL;iBACI;gBACD,IAAI,OAAO,GAAG,CAAC,EAAE;oBACb,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;oBACjD,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBACd,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBACd,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBACZ,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;oBACjD,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBACd,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBACd,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;iBACf;gBACD,GAAG,CAAC,aAAa,CACb,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,EAAE,CACT,CAAC;aACL;SACJ;QAKD,6BAAO,GAAP,UAAQ,CAAS;YACb,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;SAC7C;QAKD,+BAAS,GAAT,UAAU,CAAS;YACf,IAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAC5C,OAAO0D,SAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC/B;QACL,kBAAC;IAAD,CAnFA,CAA0B,IAAI,GAmF7B;AAAA,IAED,WAAW,CAAC,SAAS,CAAC,IAAI,GAAG,cAAc,CAAC;;;QCjI5C;YACI,OAAE,GAAG,CAAC,CAAA;YACN,OAAE,GAAG,CAAC,CAAA;YACN,UAAK,GAAG,CAAC,CAAA;YACT,WAAM,GAAG,CAAC,CAAA;SACb;QAAD,mBAAC;IAAD,CAAC,IAAA;IAKD;QAAsB,2BAAkB;QAIpC,iBAAY,IAAmB;mBAC3B,kBAAM,IAAI,CAAC;SACd;QAED,iCAAe,GAAf;YACI,OAAO,IAAI,YAAY,EAAE,CAAC;SAC7B;QAED,2BAAS,GAAT,UAAU,GAA6B,EAAE,KAAmB;YACxD,IAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YACnB,IAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YACnB,IAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;YACtB,IAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;YAEvB,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACrB,GAAG,CAAC,aAAa,CACb,CAAC,GAAG,CAAC,EACL,CAAC,GAAG,CAAC,EACL,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EACb,CAAC,GAAG,CAAC,GAAG,CAAC,EACT,CAAC,EACD,CAAC,GAAG,CAAC,CACR,CAAC;YACF,GAAG,CAAC,aAAa,CACb,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EACb,CAAC,GAAG,CAAC,GAAG,CAAC,EACT,CAAC,GAAG,CAAC,EACL,CAAC,GAAG,CAAC,EACL,CAAC,EACD,CAAC,GAAG,CAAC,CACR,CAAC;YACF,GAAG,CAAC,SAAS,EAAE,CAAC;SACnB;QACL,cAAC;IAAD,CArCA,CAAsB,IAAI,GAqCzB;IAED,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC;;;QCjDnC;YACI,OAAE,GAAG,CAAC,CAAA;YACN,OAAE,GAAG,CAAC,CAAA;YACN,UAAK,GAAG,CAAC,CAAA;YACT,WAAM,GAAG,CAAC,CAAA;SACb;QAAD,iBAAC;IAAD,CAAC,IAAA;IAKD;QAAoB,yBAAgB;QAIhC,eAAY,IAAiB;mBACzB,kBAAM,IAAI,CAAC;SACd;QAED,+BAAe,GAAf;YACI,OAAO,IAAI,UAAU,EAAE,CAAC;SAC3B;QAED,yBAAS,GAAT,UAAU,GAA6B,EAAE,KAAiB;YACtD,IAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YACnB,IAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YACnB,IAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;YACtB,IAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;YACvB,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACjB,GAAG,CAAC,aAAa,CACb,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EACxB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EACpB,CAAC,EAAE,CAAC,GAAG,CAAC,CACX,CAAC;YACF,GAAG,CAAC,aAAa,CACb,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EACpB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EACxB,CAAC,EAAE,CAAC,CACP,CAAC;SACL;QACL,YAAC;IAAD,CA7BA,CAAoB,IAAI,GA6BvB;IAGD,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC;;IC1C/B,IAAMlB,IAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IACnB,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACrB,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AAErB;QAAA;YACI,MAAC,GAAG,CAAC,CAAA;YACL,MAAC,GAAG,CAAC,CAAA;YACL,MAAC,GAAG,CAAC,CAAA;YACL,MAAC,GAAG,CAAC,CAAA;SACR;QAAD,kBAAC;IAAD,CAAC,IAAA;IAKD;QAAqB,0BAAiB;QAIlC,gBAAY,IAAkB;mBAC1B,kBAAM,IAAI,CAAC;SACd;QAED,gCAAe,GAAf;YACI,OAAO,IAAI,WAAW,EAAE,CAAC;SAC5B;QAED,0BAAS,GAAT,UAAU,GAA6B,EAAE,KAAkB;YACvD,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBACb,OAAO;aACV;YAED,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAClB,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAClB,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAElB,IAAM,KAAK,GAAG,CAAC,GAAGA,IAAE,GAAG,CAAC,CAAC;YACzB,IAAI,GAAG,GAAG,CAACA,IAAE,GAAG,CAAC,CAAC;YAElB,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBACvC,GAAG,IAAI,KAAK,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;aAClD;YAED,GAAG,CAAC,SAAS,EAAE,CAAC;YAEhB,OAAO;SACV;QACL,aAAC;IAAD,CAnCA,CAAqB,IAAI,GAmCxB;IAED,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC;;;QCnDjC;YACI,OAAE,GAAG,CAAC,CAAA;YACN,OAAE,GAAG,CAAC,CAAA;YACN,MAAC,GAAG,CAAC,CAAA;YACL,OAAE,GAAG,CAAC,CAAA;SACT;QAAD,gBAAC;IAAD,CAAC,IAAA;IAKD;QAAmB,wBAAe;QAI9B,cAAY,IAAgB;mBACxB,kBAAM,IAAI,CAAC;SACd;QAED,8BAAe,GAAf;YACI,OAAO,IAAI,SAAS,EAAE,CAAC;SAC1B;QAED,wBAAS,GAAT,UAAU,GAA6B,EAAE,KAAgB;YACrD,IAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YACnB,IAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YACnB,IAAM,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YACxB,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3B,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YACtC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC5B,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;SACzC;QACL,WAAC;IAAD,CArBA,CAAmB,IAAI,GAqBtB;IAED,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC;;IChC7B,IAAMmB,KAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACrB,IAAMC,KAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACrB,IAAM,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;AAE7B;QAAA;YACI,OAAE,GAAG,CAAC,CAAA;YACN,OAAE,GAAG,CAAC,CAAA;YACN,MAAC,GAAa,EAAE,CAAA;YAChB,MAAC,GAAG,CAAC,CAAA;YACL,MAAC,GAAG,CAAC,CAAA;SACR;QAAD,gBAAC;IAAD,CAAC,IAAA;IAKD;QAAmB,wBAAe;QAI9B,cAAY,IAAgB;mBACxB,kBAAM,IAAI,CAAC;SACd;QAED,8BAAe,GAAf;YACI,OAAO;gBACH,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,IAAc;aACvB,CAAC;SACL;QAED,8BAAe,GAAf;YACI,OAAO,IAAI,SAAS,EAAE,CAAC;SAC1B;QAGD,wBAAS,GAAT,UAAU,GAA6B,EAAE,KAAgB;YACrD,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAClB,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAClB,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAClB,IAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,IAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,CAAC;YACN,IAAI,CAAC,CAAC;YACN,IAAI,CAAC,CAAC;YAGN,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC1C,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAET,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC/B,CAAC,GAAG,CAAC;0BACKD,KAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC;0BAC7BC,KAAG,CAAC,CAAC,GAAG,MAAM,CAAC;0BACf,EAAE,CAAC;oBACb,CAAC,GAAG,CAAC;0BACKD,KAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC;0BAC7BA,KAAG,CAAC,CAAC,GAAG,MAAM,CAAC;0BACf,EAAE,CAAC;oBACb,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;iBACpB;aACJ;SACJ;QACL,WAAC;IAAD,CAjDA,CAAmB,IAAI,GAiDtB;IAED,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC;;IClE7B,IAAMnB,IAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IACnB,IAAMoB,KAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACrB,IAAMD,KAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AAErB;QAAA;YACI,OAAE,GAAG,CAAC,CAAA;YACN,OAAE,GAAG,CAAC,CAAA;YACN,MAAC,GAAG,CAAC,CAAA;YAEL,MAAC,GAAG,CAAC,CAAA;SACR;QAAD,gBAAC;IAAD,CAAC,IAAA;IAKD;QAAmB,wBAAe;QAI9B,cAAY,IAAgB;mBACxB,kBAAM,IAAI,CAAC;SACd;QAED,8BAAe,GAAf;YACI,OAAO,IAAI,SAAS,EAAE,CAAC;SAC1B;QAED,wBAAS,GAAT,UAAU,GAA6B,EAAE,KAAgB;YAErD,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBACb,OAAO;aACV;YAED,IAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YACnB,IAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YACnB,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAClB,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;YAGlB,IAAI,EAAE,IAAI,IAAI,EAAE;gBACZ,EAAE,GAAG,CAAC,GAAG,CAAC;sBAGJ,CAAC,GAAGC,KAAG,CAAC,CAAC,GAAGpB,IAAE,GAAG,CAAC,CAAC,GAAGoB,KAAG,CAACpB,IAAE,GAAG,CAAC,CAAC;sBAEjC,CAAC,GAAG,CAAC,CAAC;aACf;YAED,IAAM,KAAK,GAAGA,IAAE,GAAG,CAAC,CAAC;YACrB,IAAI,GAAG,GAAG,CAACA,IAAE,GAAG,CAAC,CAAC;YAClB,IAAM,MAAM,GAAG,CAAC,GAAG,CAAC,GAAGoB,KAAG,CAAC,GAAG,CAAC,CAAC;YAChC,IAAM,MAAM,GAAG,CAAC,GAAG,CAAC,GAAGD,KAAG,CAAC,GAAG,CAAC,CAAC;YAChC,GAAG,IAAI,KAAK,CAAC;YAGb,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,SAAA,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC/C,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC1B,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAGC,KAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAGD,KAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjD,GAAG,IAAI,KAAK,CAAC;aAChB;YAED,GAAG,CAAC,SAAS,EAAE,CAAC;SACnB;QACL,WAAC;IAAD,CAlDA,CAAmB,IAAI,GAkDtB;IAED,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC;;ICnE7B,IAAMC,KAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACrB,IAAMD,KAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AAErB;QAAA;YACI,OAAE,GAAG,CAAC,CAAA;YACN,OAAE,GAAG,CAAC,CAAA;YACN,MAAC,GAAG,CAAC,CAAA;YACL,OAAE,GAAG,CAAC,CAAA;YACN,MAAC,GAAG,CAAC,CAAA;YACL,aAAQ,GAAG,KAAK,CAAA;SACnB;QAAD,oBAAC;IAAD,CAAC,IAAA;IAKD;QAAuB,4BAAmB;QAItC,kBAAY,IAAoB;mBAC5B,kBAAM,IAAI,CAAC;SACd;QAED,kCAAe,GAAf;YACI,OAAO;gBACH,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,IAAc;aACvB,CAAC;SACL;QAED,kCAAe,GAAf;YACI,OAAO,IAAI,aAAa,EAAE,CAAC;SAC9B;QAED,4BAAS,GAAT,UAAU,GAA6B,EAAE,KAAoB;YACzD,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAClB,IAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YACnB,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAClB,IAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;YACzB,IAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;YACzB,IAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAChD,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC;YAEP,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC1B,OAAO;aACV;YAED,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,IAAI,KAAK,CAAC;YAEV,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAIC,KAAG,CAAC,CAAC,CAAC;kBACvB,KAAK,GAAG,CAAC,GAAGA,KAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;YACnC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAID,KAAG,CAAC,CAAC,CAAC;kBACvB,CAAC,GAAGA,KAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;YAE3B,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAGnB,GAAG;gBACC,GAAG,EAAE,CAAC;aACT,QACM,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;YAE1C,GAAG;gBACC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;gBAC1B,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAIC,KAAG,CAAC,KAAK,CAAC;sBACvB,KAAK,GAAG,CAAC,GAAGA,KAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,KAAK,CAAC;sBACxC,OAAO,CAAC;gBAClB,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAID,KAAG,CAAC,KAAK,CAAC;sBACvB,CAAC,GAAGA,KAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,KAAK,CAAC;sBAChC,OAAO,CAAC;gBAClB,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACnB,CAAC,EAAE,CAAC;aACP,QACM,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE;SAElD;QACL,eAAC;IAAD,CAlEA,CAAuB,IAAI,GAkE1B;IAED,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,UAAU,CAAC;;IC1CrC;QAoBI,iBAAY,KAAyB,EAAE,MAA0B;YAG7D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YAErB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YAClB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAChB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SACnB;QACL,cAAC;IAAD,CAAC,IAAA;;ICzDD,IAAM,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtB,IAAM,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEvB,IAAME,OAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAC1B,IAAMC,OAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAE1B;QASI,8BAAY,IAAmB,EAAE,SAAuB;YANhD,aAAQ,GAAY,EAAE,CAAC;YAEvB,UAAK,GAAY,EAAE,CAAC;YAEpB,YAAO,GAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAG/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBACxB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC;aAClC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBACxB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC;aAC/B;YAED,IAAI,IAAI,EAAE;gBACN,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;aAC1C;SACJ;QAED,+CAAgB,GAAhB,UAAiB,IAAkB,EAAE,SAAuB;YACxD,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC9B,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,IAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACjB,IAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACjB,IAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YAC1B,IAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACtB,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACvB,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAEtB,IAAI,SAAS,EAAE;gBACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACxB,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;iBACnC;aACJ;YAGD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YAGpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBACxB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;aAC7C;SACJ;QASD,wCAAS,GAAT,UAAU,KAA2B,EAAE,GAAe;YAGlD,IAAI,UAAU,GAAG,IAAI,CAAC;YACtB,IAAM,KAAK,GAAG,CAAC,GAAG,CAAC;YACnBD,OAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC9BC,OAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAEhB,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAED,OAAK,EAAEC,OAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE;gBACnE,UAAU,GAAG,KAAK,CAAC;gBACnB,IAAI,KAAK,EAAE;oBAEP,OAAO,UAAU,CAAC;iBACrB;aACJ;YACD,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,IAAI,EAAED,OAAK,EAAEC,OAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;gBACpE,UAAU,GAAG,KAAK,CAAC;gBACnB,IAAI,KAAK,EAAE;oBACP,OAAO,UAAU,CAAC;iBACrB;aACJ;YAED,IAAI,CAAC,KAAK,EAAE;gBACR,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,GAAGD,OAAK,GAAGC,OAAK,CAAC,CAAC;aAC/C;YAED,OAAO,UAAU,CAAC;SACrB;QAGO,qDAAsB,GAA9B,UACI,IAA0B,EAC1B,KAA2B,EAC3B,KAAY,EACZ,KAAY,EACZ,KAAc,EACd,OAAe;YAEf,IAAI,UAAU,GAAG,IAAI,CAAC;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBACxB,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACpD,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAGtD,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE;oBAClD,UAAU,GAAG,KAAK,CAAC;oBACnB,IAAI,KAAK,EAAE;wBACP,OAAO,UAAU,CAAC;qBACrB;oBACD,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/C,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;oBAG/C,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE;wBACtC,IAAI,KAAK,GAAG,KAAK,EAAE;4BACf,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC;yBAC9C;6BACI;4BACD,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,CAAC;yBAC7C;qBACJ;iBACJ;qBACI,IAAI,KAAK,EAAE;oBACZ,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/C,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;oBAE/C,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE;wBACtC,IAAI,KAAK,GAAG,KAAK,EAAE;4BACf,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,CAAC;yBAC7C;6BACI;4BACD,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC;yBAC9C;qBACJ;iBACJ;aACJ;YACD,OAAO,UAAU,CAAC;SACrB;QAEO,mDAAoB,GAA5B,UAA6B,GAAW,EAAE,OAAgB,EAAE,GAAa;YACrE,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;YAC5B,IAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAChD,IAAI,GAAG,GAAG,IAAI,CAAC;YACf,IAAI,GAAG,GAAG,IAAI,CAAC;YAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrC,IAAM,MAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChD,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAI,EAAE,GAAG,CAAC,CAAC;gBAC1B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAI,EAAE,GAAG,CAAC,CAAC;aAC7B;YAED,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YACb,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;SAChB;QACL,2BAAC;IAAD,CAAC,IAAA;;ICnLD;QAMI,mBAAY,KAAoB;YAC5B,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACrD,GAAG,CAAC,SAAS,GAAG,qBAAqB,CAAC;YAEtC,KAAK,GAAG,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC1B,MAAM,CAAC,KAAK,EAAE;gBACV,eAAe,EAAE,sBAAsB;gBACvC,MAAM,EAAE,gBAAgB;aAC3B,CAAC,CAAC;YACH,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,+FAK3B,CAAC;YAEM,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE;gBACnB,IAAI,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBAC1B,GAAG,CAAC,KAAa,CAAC,GAAG,CAAC,GAAI,KAAa,CAAC,GAAG,CAAC,CAAC;iBACjD;aACJ;SACJ;QAED,0BAAM,GAAN,UAAO,IAAkB;YACrB,IAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAChC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YACnC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACrC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;YAC9B,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;SAChC;QAED,wBAAI,GAAJ;YACI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;SAChC;QACD,wBAAI,GAAJ,UAAK,aAAsB;YAA3B,iBASC;YARG,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAEhC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;YAG7B,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;gBAC3B,KAAI,CAAC,IAAI,EAAE,CAAC;aACf,EAAE,aAAa,IAAI,IAAI,CAAsB,CAAC;SAClD;QAEL,gBAAC;IAAD,CAAC,IAAA;AAWD,aAAwB,kBAAkB,CAAC,EAAe,EAAE,IAAW;QACnE,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAClB,IAAM,OAAO,GAAG,EAAE,CAAC,OAAwB,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;SAC9E;QACD,IAAI,OAAO,CAAC,cAAc,EAAE,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;SAC5F;QACD,IAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACpD,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,oFAOjC,CAAC;QACE,aAAa,CAAC,SAAS,GAAG,+BAA+B,CAAC;QAE1D,IAAM,UAAU,GAAgB,EAAE,CAAC;QACnC,IAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;QACnB,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAC/B,IAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,aAAa,CAAC,QAAQ,KAAK,QAAQ,EAAE;YACrC,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;SACnC;QAED,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE;YACd,IAAI,OAAO,CAAC,SAAS,EAAE;gBACnB,IAAI,KAAG,GAAG,CAAC,CAAC;gBACZ,OAAO,CAAC,gBAAgB,CAAC,UAAC,KAAK;oBAC3B,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE;wBAC3B,OAAO;qBACV;oBACD,IAAM,UAAU,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAC;oBAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACxC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;4BAC/C,SAAS;yBACZ;wBAED,IAAI,CAAC,UAAU,CAAC,KAAG,CAAC,EAAE;4BAClB,UAAU,CAAC,KAAG,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BAC5C,aAAa,CAAC,WAAW,CAAC,UAAU,CAAC,KAAG,CAAC,CAAC,GAAG,CAAC,CAAC;yBAClD;wBACD,UAAU,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;wBACzC,UAAU,CAAC,KAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;wBACtC,KAAG,EAAE,CAAC;qBACT;iBACJ,CAAC,CAAC;gBACH,KAAK,IAAI,CAAC,GAAG,KAAG,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC1C,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBACxB;aACJ;SACJ,CAAC,CAAC;IACP,CAAC;;ICpHD,SAAS,SAAS,CAAC,GAAW;QAE1B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;AAED,aAAgB,oBAAoB,CAEhC,GAA6B,EAC7B,GAAyB,EACzB,IAAc;QAEd,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAClC,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAClC,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;QAErC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;YACb,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;YAC5B,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;YAC9B,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;YAC7B,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;SAClC;QAGD,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAE5B,IAAM,cAAc,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAE9D,OAAO,cAAc,CAAC;IAC1B,CAAC;AAED,aAAgB,oBAAoB,CAEhC,GAA6B,EAC7B,GAAyB,EACzB,IAAc;QAEd,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAEpC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;QAEpC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;YACb,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;YACvB,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;YACxB,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;SACf;QAED,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAC3B,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAC3B,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAErC,IAAM,cAAc,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAElE,OAAO,cAAc,CAAC;IAC1B,CAAC;AAED,aAAgB,iBAAiB,CAAa,GAA6B,EAAE,GAAmB,EAAE,IAAc;QAE5G,IAAM,cAAc,GAAG,GAAG,CAAC,IAAI,KAAK,QAAQ;cACtC,oBAAoB,CAAC,GAAG,EAAE,GAA2B,EAAE,IAAI,CAAC;cAC5D,oBAAoB,CAAC,GAAG,EAAE,GAA2B,EAAE,IAAI,CAAC,CAAC;QAEnE,IAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,cAAc,CAAC,YAAY,CACvB,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAC5C,CAAC;SACL;QACD,OAAO,cAAc,CAAC;IAC1B,CAAC;AAED,aAAgB,iBAAiB,CAAC,SAAiB,EAAE,aAAqB;QAEtE,IAAI,SAAS,KAAK,aAAa,KAAK,CAAC,SAAS,IAAI,CAAC,aAAa,CAAC,EAAE;YAC/D,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,CAAC,SAAS,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,CAAC,EAAE;YAC7E,OAAO,IAAI,CAAC;SACf;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE;gBACnC,OAAO,IAAI,CAAC;aACf;SACJ;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,SAAS,UAAU,CAAC,GAAW;QAC3B,OAAO,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC7B,CAAC;AACD,aAAgB,OAAO,CACnB,IAAiB,EACjB,KAAa,EACb,IAA0D;QAG1D,IAAM,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAuB,CAAC;QAC5D,IAAM,GAAG,GAAG,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,KAAK,CAAmC,CAAC;QACrF,IAAM,GAAG,GAAG,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,KAAK,CAAiC,CAAC;QACjF,IAAM,GAAG,GAAG,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,KAAK,CAAqC,CAAC;QAEzF,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,MAAM,EAAE;YACzC,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE,CAAW,CAAC,CAAC;SACzC;QAGD,IAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAExD,OAAO,CACH,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;eAC5D,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;eAC1B,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAC7B,CAAC,CAAC;IACV,CAAC;;aC1He,iBAAiB,CAAC,QAAa,EAAE,SAAkB;QAC/D,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,OAAO,IAAI,EAAE,SAAS,GAAG,CAAC,CAAC,EAAE;YACvD,OAAO,IAAI,CAAC;SACf;QACD,OAAO,QAAQ,KAAK,QAAQ;cACtB,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC;cAC9B,QAAQ,KAAK,QAAQ;kBACjB,CAAC,SAAS,CAAC;kBACX,QAAQ,CAAC,QAAQ,CAAC;sBACd,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC;IACnE,CAAC;AACD,aAAgB,WAAW,CAAC,EAAgB;QACxC,IAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;QAEvB,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC3G,IAAI,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;QAE1C,IAAI,QAAQ,EAAE;YACV,IAAM,WAAS,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;YACnF,IAAI,WAAS,IAAI,WAAS,KAAK,CAAC,EAAE;gBAC9B,QAAQ,GAAG,GAAG,CAAC,QAAQ,EAAE,UAAU,MAAM;oBACrC,OAAO,MAAM,GAAG,WAAS,CAAC;iBAC7B,CAAC,CAAC;gBACH,cAAc,IAAI,WAAS,CAAC;aAC/B;SACJ;QACD,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACtC,CAAC;;ICZD,IAAM,gBAAgB,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;IAG7C,SAAS,cAAc,CAAC,KAAqB;QACzC,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,OAAO,EAAE,MAAM,IAAI,IAAI,IAAI,MAAM,KAAK,MAAM,IAAI,EAAE,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IAID,SAAS,sBAAsB,CAC3B,YAA+D;QAE/D,OAAO,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,MAAM,CAAC;IACvE,CAAC;IAED,SAAS,YAAY,CAAC,KAAqB;QACvC,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,MAAM,CAAC;IAC3C,CAAC;IACD,SAAS,UAAU,CAAC,GAA6B,EAAE,KAAqB;QACpE,IAAI,KAAK,CAAC,WAAW,IAAI,IAAI,IAAI,KAAK,CAAC,WAAW,KAAK,CAAC,EAAE;YACtD,IAAM,mBAAmB,GAAG,GAAG,CAAC,WAAW,CAAC;YAC5C,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC;YACpD,GAAG,CAAC,IAAI,EAAE,CAAC;YAEX,GAAG,CAAC,WAAW,GAAG,mBAAmB,CAAC;SACzC;aACI;YACD,GAAG,CAAC,IAAI,EAAE,CAAC;SACd;IACL,CAAC;IAED,SAAS,YAAY,CAAC,GAA6B,EAAE,KAAqB;QACtE,IAAI,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC,EAAE;YAC1D,IAAM,mBAAmB,GAAG,GAAG,CAAC,WAAW,CAAC;YAC5C,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC;YACtD,GAAG,CAAC,MAAM,EAAE,CAAC;YAEb,GAAG,CAAC,WAAW,GAAG,mBAAmB,CAAC;SACzC;aACI;YACD,GAAG,CAAC,MAAM,EAAE,CAAC;SAChB;IACL,CAAC;AAED,aAAgB,mBAAmB,CAE/B,GAA6B,EAC7B,OAA2B,EAC3B,EAAuB;QAEvB,IAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,KAAK,EAAG,OAAmC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACnG,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;YACrB,IAAM,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC;YAC3E,IACI,OAAO,SAAS,KAAK,UAAU;mBAC5B,aAAa;mBACb,aAAa,CAAC,YAAY,EAC/B;gBACE,IAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;gBAC/B,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzD,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,IAAI,gBAAgB,CAAC,CAAC;gBACpE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAC/D,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;aACtC;YACD,OAAO,aAAa,CAAC;SACxB;IACL,CAAC;IAGD,SAAS,SAAS,CAAC,GAA6B,EAAE,EAAQ,EAAE,KAAqB,EAAE,OAAgB;;QAC/F,IAAI,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAElC,IAAM,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;QAC1C,IAAM,UAAU,GAAG,aAAa,GAAG,CAAC,CAAC;QAGrC,IAAM,SAAS,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;QAI3B,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,UAAU,KAAK,SAAS,EAAE;YACzC,EAAE,CAAC,eAAe,EAAE,CAAC;SACxB;QAED,IAAM,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,gBAAgB,CAAC;QACzC,IAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC;QAE7B,IAAI,CAAC,OAAO,EAAE;YACV,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YACxB,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAE5B,IAAM,eAAe,GAAG,OAAO,IAAI,CAAC,CAAE,IAAuB,CAAC,UAAU,CAAC;YACzE,IAAM,iBAAiB,GAAG,SAAS,IAAI,CAAC,CAAE,MAAyB,CAAC,UAAU,CAAC;YAC/E,IAAM,cAAc,GAAG,OAAO,IAAI,CAAC,CAAE,IAA2B,CAAC,KAAK,CAAC;YACvE,IAAM,gBAAgB,GAAG,SAAS,IAAI,CAAC,CAAE,MAA6B,CAAC,KAAK,CAAC;YAE7E,IAAI,YAAY,SAAA,CAAC;YACjB,IAAI,cAAc,SAAA,CAAC;YACnB,IAAI,WAAW,SAAA,CAAC;YAChB,IAAI,aAAa,SAAA,CAAC;YAClB,IAAI,IAAI,SAAA,CAAC;YACT,IAAI,eAAe,IAAI,iBAAiB,EAAE;gBACtC,IAAI,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC;aAC/B;YAGD,IAAI,eAAe,EAAE;gBACjB,YAAY,GAAG,SAAS;sBAClB,iBAAiB,CAAC,GAAG,EAAE,IAAqD,EAAE,IAAI,CAAC;sBACnF,EAAE,CAAC,oBAAoB,CAAC;gBAG9B,EAAE,CAAC,oBAAoB,GAAG,YAAY,CAAC;aAC1C;YACD,IAAI,iBAAiB,EAAE;gBACnB,cAAc,GAAG,SAAS;sBACpB,iBAAiB,CAAC,GAAG,EAAE,MAAuD,EAAE,IAAI,CAAC;sBACrF,EAAE,CAAC,sBAAsB,CAAC;gBAChC,EAAE,CAAC,sBAAsB,GAAG,cAAc,CAAC;aAC9C;YACD,IAAI,cAAc,EAAE;gBAEhB,WAAW,GAAG,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC,mBAAmB;sBAC7C,mBAAmB,CAAC,GAAG,EAAE,IAA0B,EAAE,EAAE,CAAC;sBACxD,EAAE,CAAC,mBAAmB,CAAC;gBAC7B,EAAE,CAAC,mBAAmB,GAAG,WAAW,CAAC;aACxC;YACD,IAAI,gBAAgB,EAAE;gBAElB,aAAa,GAAG,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC,qBAAqB;sBACjD,mBAAmB,CAAC,GAAG,EAAE,MAA4B,EAAE,EAAE,CAAC;sBAC1D,EAAE,CAAC,qBAAqB,CAAC;gBAC/B,EAAE,CAAC,qBAAqB,GAAG,WAAW,CAAC;aAC1C;YAED,IAAI,eAAe,EAAE;gBAEjB,GAAG,CAAC,SAAS,GAAG,YAAY,CAAC;aAChC;iBACI,IAAI,cAAc,EAAE;gBACrB,IAAI,WAAW,EAAE;oBACb,GAAG,CAAC,SAAS,GAAG,WAAW,CAAC;iBAC/B;qBACI;oBAED,OAAO,GAAG,KAAK,CAAC;iBACnB;aACJ;YACD,IAAI,iBAAiB,EAAE;gBACnB,GAAG,CAAC,WAAW,GAAG,cAAc,CAAC;aACpC;iBACI,IAAI,gBAAgB,EAAE;gBACvB,IAAI,aAAa,EAAE;oBACf,GAAG,CAAC,WAAW,GAAG,aAAa,CAAC;iBACnC;qBACI;oBAED,SAAS,GAAG,KAAK,CAAC;iBACrB;aACJ;SACJ;QAGD,IAAM,KAAK,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAC;QAE7D,IAAI,QAAQ,CAAC;QACb,IAAI,cAAc,CAAC;QACnB,IAAI,GAAG,CAAC,WAAW,IAAI,KAAK,CAAC,QAAQ,EAAE;YACnC,KAA6B,WAAW,CAAC,EAAE,CAAC,EAA3C,QAAQ,QAAA,EAAE,cAAc,QAAA,CAAoB;SAChD;QAED,IAAI,YAAY,GAAG,IAAI,CAAC;QAExB,IAAI,SAAS,KAAK,SAAS,GAAG,iBAAiB,CAAC,EAAE;YAC9C,IAAI,CAAC,MAAM,CAAE,GAAW,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,UAAU,EAAE;gBAEZ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aACzB;iBACI;gBACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBACrB,YAAY,GAAG,KAAK,CAAC;aACxB;YACD,IAAI,CAAC,KAAK,EAAE,CAAC;YAEb,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAGhB,EAAE,CAAC,WAAW,EAAE,CAAC;SACpB;QAGD,IAAI,YAAY,EAAE;YACd,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC;SACzD;QAED,IAAI,QAAQ,EAAE;YACV,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC1B,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC;SACvC;QAED,IAAI,CAAC,OAAO,EAAE;YACV,IAAI,KAAK,CAAC,WAAW,EAAE;gBACnB,IAAI,SAAS,EAAE;oBACX,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;iBAC5B;gBACD,IAAI,OAAO,EAAE;oBACT,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;iBAC1B;aACJ;iBACI;gBACD,IAAI,OAAO,EAAE;oBACT,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;iBAC1B;gBACD,IAAI,SAAS,EAAE;oBACX,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;iBAC5B;aACJ;SACJ;QAED,IAAI,QAAQ,EAAE;YAGV,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;SACvB;IACL,CAAC;IAGD,SAAS,UAAU,CAAC,GAA6B,EAAE,EAAW,EAAE,KAAsB;QAClF,IAAM,KAAK,GAAG,EAAE,CAAC,OAAO,GAAG,mBAAmB,CAC1C,KAAK,CAAC,KAAK,EACX,EAAE,CAAC,OAAO,EACV,EAAE,EACF,EAAE,CAAC,MAAM,CACZ,CAAC;QAEF,IAAI,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;YAChC,OAAO;SACV;QAED,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QACvB,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC1B,IAAI,MAAM,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;QAC5B,IAAM,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;QAC1C,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE;YAEjC,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;SAC3B;aACI,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE;YACtC,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;SAC3B;aACI,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE;YACtC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YACpB,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;SACzB;QAED,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE;YAC/B,IAAM,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;YACzB,IAAM,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;YACzB,GAAG,CAAC,SAAS,CACT,KAAK,EACL,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EACnC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CACtB,CAAC;SACL;aACI,IAAI,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,EAAE;YAC3B,IAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,IAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,IAAM,MAAM,GAAG,KAAK,GAAG,EAAE,CAAC;YAC1B,IAAM,OAAO,GAAG,MAAM,GAAG,EAAE,CAAC;YAC5B,GAAG,CAAC,SAAS,CACT,KAAK,EACL,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EACvB,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CACtB,CAAC;SACL;aACI;YACD,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;SAC7C;IACL,CAAC;IAGD,SAAS,SAAS,CAAC,GAA6B,EAAE,EAAS,EAAE,KAAsB;;QAE/E,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAEtB,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;QAE7B,IAAI,IAAI,EAAE;YACN,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,YAAY,CAAC;YACtC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;YAChC,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;YAEtC,IAAI,QAAQ,SAAA,CAAC;YACb,IAAI,cAAc,SAAA,CAAC;YACnB,IAAI,GAAG,CAAC,WAAW,IAAI,KAAK,CAAC,QAAQ,EAAE;gBACnC,KAA6B,WAAW,CAAC,EAAE,CAAC,EAA3C,QAAQ,QAAA,EAAE,cAAc,QAAA,CAAoB;aAChD;YAED,IAAI,QAAQ,EAAE;gBACV,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAC1B,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC;aACvC;YAED,IAAI,KAAK,CAAC,WAAW,EAAE;gBACnB,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE;oBACvB,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC1C;gBACD,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;oBACrB,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;iBACxC;aACJ;iBACI;gBACD,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;oBACrB,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;iBACxC;gBACD,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE;oBACvB,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC1C;aACJ;YAED,IAAI,QAAQ,EAAE;gBAEV,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;aACvB;SACJ;IAEL,CAAC;IAED,IAAM,mBAAmB,GAAG,CAAC,YAAY,EAAE,eAAe,EAAE,eAAe,CAAU,CAAC;IACtF,IAAM,YAAY,GAAG;QACjB,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC;KACxD,CAAC;IAOX,SAAS,eAAe,CACpB,GAA6B,EAC7B,KAAqB,EACrB,SAAyB,EACzB,WAAoB,EACpB,KAAiB;QAEjB,IAAI,YAAY,GAAG,KAAK,CAAC;QAEzB,IAAI,CAAC,WAAW,EAAE;YACd,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;YAG5B,IAAI,KAAK,KAAK,SAAS,EAAE;gBACrB,OAAO,KAAK,CAAC;aAChB;SACJ;QACD,IAAI,WAAW,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,OAAO,EAAE;YACpD,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC3B,YAAY,GAAG,IAAI,CAAC;YAEpB,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxD,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,oBAAoB,CAAC,OAAO,GAAG,OAAO,CAAC;SAC7E;QAED,IAAI,WAAW,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,EAAE;YAChD,IAAI,CAAC,YAAY,EAAE;gBACf,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC3B,YAAY,GAAG,IAAI,CAAC;aACvB;YACD,GAAG,CAAC,wBAAwB,GAAG,KAAK,CAAC,KAAK,IAAI,oBAAoB,CAAC,KAAK,CAAC;SAC5E;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACjD,IAAM,QAAQ,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;YACxC,IAAI,WAAW,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,QAAQ,CAAC,EAAE;gBACxD,IAAI,CAAC,YAAY,EAAE;oBACf,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBAC3B,YAAY,GAAG,IAAI,CAAC;iBACvB;gBAED,GAAG,CAAC,QAAQ,CAAC,GAAI,GAAgC,CAAC,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;aAClF;SACJ;QACD,IAAI,WAAW,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW,EAAE;YAC5D,IAAI,CAAC,YAAY,EAAE;gBACf,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC3B,YAAY,GAAG,IAAI,CAAC;aACvB;YACD,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,oBAAoB,CAAC,WAAW,CAAC;SAC3E;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,SAAS,0BAA0B,CAC/B,GAA6B,EAC7B,EAAgB,EAChB,MAAoB,EACpB,WAAoB,EACpB,KAAiB;QAEjB,IAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAM,SAAS,GAAG,WAAW;cACvB,IAAI;eACH,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAExD,IAAI,KAAK,KAAK,SAAS,EAAE;YACrB,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,YAAY,GAAG,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QAE9E,IAAI,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE;YAC9C,IAAI,CAAC,YAAY,EAAE;gBAEf,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC3B,YAAY,GAAG,IAAI,CAAC;aACvB;YACD,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;SACtE;QACD,IAAI,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE;YAClD,IAAI,CAAC,YAAY,EAAE;gBACf,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC3B,YAAY,GAAG,IAAI,CAAC;aACvB;YACD,sBAAsB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;SAC5E;QACD,IAAI,WAAW,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,OAAO,EAAE;YACpD,IAAI,CAAC,YAAY,EAAE;gBACf,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC3B,YAAY,GAAG,IAAI,CAAC;aACvB;YACD,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;SAC/D;QACD,IAAI,EAAE,CAAC,SAAS,EAAE,EAAE;YAChB,IAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;YAClC,IAAM,YAAY,GAAG,SAAS,IAC1B,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,YAAY,EAAE,GAAG,CAAC,CACnE,CAAC;YACF,IAAI,GAAG,CAAC,SAAS,KAAK,YAAY,EAAE;gBAChC,IAAI,CAAC,YAAY,EAAE;oBACf,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBAC3B,YAAY,GAAG,IAAI,CAAC;iBACvB;gBACD,GAAG,CAAC,SAAS,GAAG,YAAY,CAAC;aAChC;SACJ;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,WAAW,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,QAAQ,CAAC,EAAE;gBACxD,IAAI,CAAC,YAAY,EAAE;oBACf,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBAC3B,YAAY,GAAG,IAAI,CAAC;iBACvB;gBAEA,GAAW,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;aACvD;SACJ;QAED,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,SAAS,cAAc,CACnB,GAA6B,EAC7B,EAAW,EACX,MAAe,EAEf,WAAoB,EACpB,KAAiB;QAEjB,OAAO,eAAe,CAClB,GAAG,EACH,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,EAC3B,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,EACzC,WAAW,EACX,KAAK,CACR,CAAC;IACN,CAAC;IAED,SAAS,mBAAmB,CAAC,GAA6B,EAAE,EAAe;QACvE,IAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;QACvB,IAAM,GAAG,GAAI,GAAgC,CAAC,GAAG,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,EAAE;YACH,GAAG,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC5F;aACI;YACD,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SAC1C;IACL,CAAC;IAED,SAAS,gBAAgB,CAAC,SAAiB,EAAE,GAA6B,EAAE,KAAiB;QACzF,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,IAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAE9B,UAAU,GAAG,UAAU,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YAEjD,mBAAmB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YACnC,GAAG,CAAC,SAAS,EAAE,CAAC;YAChB,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YACxC,GAAG,CAAC,IAAI,EAAE,CAAC;SACd;QACD,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;IAClC,CAAC;IAED,SAAS,kBAAkB,CAAC,EAAe,EAAE,EAAe;QACxD,IAAI,EAAE,IAAI,EAAE,EAAE;YACV,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;mBACf,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;mBACf,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;mBACf,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;mBACf,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;mBACf,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;SAC1B;aACI,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE;YACjB,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAM,cAAc,GAAG,CAAC,CAAC;IACzB,IAAM,eAAe,GAAG,CAAC,CAAC;IAC1B,IAAM,cAAc,GAAG,CAAC,CAAC;IACzB,IAAM,qBAAqB,GAAG,CAAC,CAAC;IAsBhC,SAAS,YAAY,CAAC,KAAqB;QAEvC,IAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACpC,IAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAExC,OAAO,EAEH,KAAK,CAAC,QAAQ;eAEX,EAAE,CAAC,OAAO,GAAG,CAAC,SAAS,CAAC;gBAEvB,OAAO,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;gBAC1C,SAAS,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC;eAE/C,KAAK,CAAC,aAAa,GAAG,CAAC;eAEvB,KAAK,CAAC,aAAa,GAAG,CAAC;eACvB,KAAK,CAAC,WAAW,GAAG,CAAC,CAC3B,CAAC;IACN,CAAC;IAED,SAAS,cAAc,CAAC,GAA6B,EAAE,KAAiB;QAEpE,KAAK,CAAC,SAAS,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,KAAK,CAAC,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAClC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;QACrB,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,SAAS,QAAQ,CAAC,EAAe,EAAE,OAAiB;QAChD,OAAO,OAAO,IAAI,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC;IAC9D,CAAC;AAED,aAAgB,WAAW,CAAC,GAA6B,EAAE,EAAe;QACtE,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1E,CAAC;AAGD,aAAgB,KAAK,CACjB,GAA6B,EAC7B,EAAe,EACf,KAAiB,EACjB,MAAe;QAEf,IAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;QAEvB,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE;YAKtE,EAAE,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC;YAC1B,EAAE,CAAC,YAAY,GAAG,KAAK,CAAC;YACxB,OAAO;SACV;QAGD,IAAM,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC;QACjC,IAAM,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;QAE9C,IAAI,iBAAiB,GAAG,KAAK,CAAC;QAC9B,IAAI,aAAa,GAAG,KAAK,CAAC;QAE1B,IAAI,CAAC,eAAe,IAAI,iBAAiB,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE;YAEnE,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,EAAE;gBAE3C,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAE3B,GAAG,CAAC,OAAO,EAAE,CAAC;gBAEd,aAAa,GAAG,iBAAiB,GAAG,IAAI,CAAC;gBAEzC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC7B,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;gBAEzB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;aACvB;YAED,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE;gBAE/B,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAE3B,GAAG,CAAC,IAAI,EAAE,CAAC;gBACX,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;gBAExC,iBAAiB,GAAG,IAAI,CAAC;aAC5B;YACD,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC;SACrC;QAiBD,IAAI,KAAK,CAAC,UAAU,EAAE;YAClB,EAAE,CAAC,YAAY,GAAG,KAAK,CAAC;YACxB,OAAO;SACV;QAGD,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACnC,EAAE,CAAC,gBAAgB,EAAE,CAAC;QAEtB,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAE5B,IAAI,CAAC,MAAM,EAAE;YACT,aAAa,GAAG,iBAAiB,GAAG,IAAI,CAAC;SAC5C;QAED,IAAI,YAAY,GAAG,EAAE,YAAY,IAAI;eAC9B,EAAE,CAAC,SAAS;eACZ,YAAY,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAE9B,IAAI,iBAAiB,IAAI,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE;YAE9D,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC3B,mBAAmB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;SAChC;aACI,IAAI,CAAC,YAAY,EAAE;YAEpB,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAC9B;QAED,IAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,EAAE,YAAY,IAAI,EAAE;YAEpB,IAAI,KAAK,CAAC,YAAY,KAAK,cAAc,EAAE;gBACvC,aAAa,GAAG,IAAI,CAAC;gBACrB,KAAK,CAAC,YAAY,GAAG,cAAc,CAAC;aACvC;YAED,0BAA0B,CAAC,GAAG,EAAE,EAAU,EAAE,MAAc,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;YAElF,IAAI,CAAC,YAAY,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;gBAC3D,GAAG,CAAC,SAAS,EAAE,CAAC;aACnB;YACD,SAAS,CAAC,GAAG,EAAE,EAAU,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;YAEhD,IAAI,YAAY,EAAE;gBACd,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,IAAc,IAAI,EAAE,CAAC;gBAC7C,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,MAAgB,IAAI,EAAE,CAAC;aACpD;SACJ;aACI;YACD,IAAI,EAAE,YAAY,KAAK,EAAE;gBACrB,IAAI,KAAK,CAAC,YAAY,KAAK,cAAc,EAAE;oBACvC,aAAa,GAAG,IAAI,CAAC;oBACrB,KAAK,CAAC,YAAY,GAAG,cAAc,CAAC;iBACvC;gBAED,0BAA0B,CAAC,GAAG,EAAE,EAAW,EAAE,MAAe,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;gBACpF,SAAS,CAAC,GAAG,EAAE,EAAW,EAAE,KAAK,CAAC,CAAC;aACtC;iBACI,IAAI,EAAE,YAAY,OAAO,EAAE;gBAC5B,IAAI,KAAK,CAAC,YAAY,KAAK,eAAe,EAAE;oBACxC,aAAa,GAAG,IAAI,CAAC;oBACrB,KAAK,CAAC,YAAY,GAAG,eAAe,CAAC;iBACxC;gBAED,cAAc,CAAC,GAAG,EAAE,EAAa,EAAE,MAAiB,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;gBAC5E,UAAU,CAAC,GAAG,EAAE,EAAa,EAAE,KAAK,CAAC,CAAC;aACzC;iBAEI,IAAK,EAA6B,CAAC,uBAAuB,EAAE;gBAC7D,IAAI,KAAK,CAAC,YAAY,KAAK,qBAAqB,EAAE;oBAC9C,aAAa,GAAG,IAAI,CAAC;oBACrB,KAAK,CAAC,YAAY,GAAG,qBAAqB,CAAC;iBAC9C;gBAED,gBAAgB,CAAC,GAAG,EAAE,EAA4B,EAAE,KAAK,CAAC,CAAC;aAC9D;SAEJ;QAED,IAAI,YAAY,IAAI,MAAM,EAAE;YACxB,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAC9B;QAED,EAAE,CAAC,eAAe,EAAE,CAAC;QACrB,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;QAEjC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;QAGlB,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC;QACf,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,SAAS,gBAAgB,CACrB,GAA6B,EAC7B,EAA0B,EAC1B,KAAiB;QAEjB,IAAI,YAAY,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC;QACxC,IAAI,oBAAoB,GAAG,EAAE,CAAC,uBAAuB,EAAE,CAAC;QAGxD,GAAG,CAAC,IAAI,EAAE,CAAC;QACX,IAAI,UAAU,GAAe;YACzB,eAAe,EAAE,IAAI;YACrB,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;SACzB,CAAC;QACF,IAAI,CAAC,CAAC;QACN,IAAI,GAAG,CAAC;QAER,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC9D,IAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YACpC,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;YACrD,WAAW,CAAC,gBAAgB,EAAE,CAAC;YAC/B,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;YACnD,WAAW,CAAC,eAAe,EAAE,CAAC;YAC9B,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;YACnD,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC;SACnC;QAED,KAAK,IAAI,GAAC,GAAG,CAAC,EAAE,KAAG,GAAG,oBAAoB,CAAC,MAAM,EAAE,GAAC,GAAG,KAAG,EAAE,GAAC,EAAE,EAAE;YAC7D,IAAM,WAAW,GAAG,oBAAoB,CAAC,GAAC,CAAC,CAAC;YAC5C,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;YACrD,WAAW,CAAC,gBAAgB,EAAE,CAAC;YAC/B,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,GAAC,KAAK,KAAG,GAAG,CAAC,CAAC,CAAC;YACnD,WAAW,CAAC,eAAe,EAAE,CAAC;YAC9B,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;YACnD,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC;SACnC;QACD,EAAE,CAAC,yBAAyB,EAAE,CAAC;QAC/B,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC;QAEnB,GAAG,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;;IChyBD,SAAS,SAAS,CAAC,EAAU,EAAE,OAAsB,EAAE,GAAW;QAC9D,IAAM,MAAM,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC;QAC1C,IAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QACjC,IAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QAEnC,IAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;QACjC,IAAI,WAAW,EAAE;YACb,WAAW,CAAC,QAAQ,GAAG,UAAU,CAAC;YAClC,WAAW,CAAC,IAAI,GAAG,GAAG,CAAC;YACvB,WAAW,CAAC,GAAG,GAAG,GAAG,CAAC;YACtB,WAAW,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;YACjC,WAAW,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;YAEnC,MAAM,CAAC,YAAY,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;SAC7C;QAED,MAAM,CAAC,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC;QAC3B,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;QAE7B,OAAO,MAAM,CAAC;IAClB,CAAC;AASA,IAED;QAAmC,yBAAQ;QA4DvC,eAAY,EAA8B,EAAE,OAAsB,EAAE,GAAY;YAAhF,YACI,iBAAO,SA2BV;YApED,gBAAU,GAAG,KAAK,CAAA;YAIlB,oBAAc,GAAG,GAAG,CAAA;YAIpB,SAAG,GAAG,CAAC,CAAA;YAKP,aAAO,GAAG,KAAK,CAAA;YAEf,YAAM,GAAG,EAAE,CAAA;YAEX,iBAAW,GAAG,KAAK,CAAA;YAEnB,YAAM,GAAG,CAAC,CAAA;YAEV,yBAAmB,GAAG,CAAC,CAAA;YAIvB,aAAO,GAAG,IAAI,CAAA;YACd,sBAAgB,GAAG,IAAI,CAAA;YAEvB,YAAM,GAAG,KAAK,CAAA;YAEd,iBAAW,GAAG,CAAC,CAAA;YACf,kBAAY,GAAG,CAAC,CAAA;YAChB,gBAAU,GAAG,CAAC,CAAA;YAGd,sBAAgB,GAAW,IAAI,CAAA;YAC/B,oBAAc,GAAW,IAAI,CAAA;YAOzB,IAAI,GAAG,CAAC;YACR,GAAG,GAAG,GAAG,IAAI,gBAAgB,CAAC;YAC9B,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;gBACxB,GAAG,GAAG,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;aACrC;iBAEI,IAAIC,QAAa,CAAC,EAAE,CAAC,EAAE;gBACxB,GAAG,GAAG,EAAE,CAAC;gBACT,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;aACf;YACD,KAAI,CAAC,EAAE,GAAG,EAAY,CAAC;YACvB,KAAI,CAAC,GAAG,GAAG,GAAG,CAAC;YAEf,IAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC;YAC3B,IAAI,QAAQ,EAAE;gBACVC,iBAAsB,CAAC,GAAG,CAAC,CAAC;gBAC5B,GAAG,CAAC,aAAa,GAAG,cAAM,OAAA,KAAK,GAAA,CAAC;gBAChC,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAC;gBACvB,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC;gBACtB,QAAQ,CAAC,WAAW,GAAG,GAAG,CAAC;aAC9B;YAED,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YAEvB,KAAI,CAAC,GAAG,GAAG,GAAG,CAAC;;SAClB;QAED,+BAAe,GAAf;YACI,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;SAC9C;QAED,0BAAU,GAAV;YACI,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC;YAC1C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC;SACzC;QAED,2BAAW,GAAX;YACI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,GAAgC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;SACzD;QAED,4BAAY,GAAZ;YACI,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;SAChC;QAED,gCAAgB,GAAhB;YACI,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YAErB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC/D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAE7C,IAAI,GAAG,KAAK,CAAC,EAAE;gBACX,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;aAChC;SACJ;QASD,kCAAkB,GAAlB,UACI,WAA0B,EAC1B,QAAuB,EACvB,SAAiB,EACjB,UAAkB;YAElB,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;gBAC9B,OAAO,IAAI,CAAC;aACf;YAED,IAAM,kBAAkB,GAAmB,EAAE,CAAC;YAC9C,IAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC;YACrD,IAAI,IAAI,GAAG,KAAK,CAAC;YACjB,IAAM,WAAW,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAEjD,SAAS,kBAAkB,CAAC,IAAkB;gBAC1C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBACnC,OAAO;iBACV;gBAED,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE;oBAEjC,IAAM,YAAY,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAClD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACxB,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;iBACzC;qBACI;oBACD,IAAI,QAAQ,GAAG,KAAK,CAAC;oBACrB,IAAI,YAAY,GAAG,QAAQ,CAAC;oBAC5B,IAAI,kBAAkB,GAAG,CAAC,CAAC;oBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;wBAChD,IAAM,UAAU,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;wBAGzC,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;4BAC5B,IAAM,aAAW,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;4BACjD,aAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;4BAC7B,aAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;4BACxB,kBAAkB,CAAC,CAAC,CAAC,GAAG,aAAW,CAAC;4BACpC,QAAQ,GAAG,IAAI,CAAC;4BAChB,MAAM;yBACT;6BACI,IAAI,IAAI,EAAE;4BAEX,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BACvB,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;4BAC9B,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;4BACvC,IAAM,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC;4BACnD,IAAM,WAAW,GAAG,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC;4BAC3D,IAAM,SAAS,GAAG,WAAW,GAAG,KAAK,GAAG,KAAK,CAAC;4BAC9C,IAAI,SAAS,GAAG,YAAY,EAAE;gCAC1B,YAAY,GAAG,SAAS,CAAC;gCACzB,kBAAkB,GAAG,CAAC,CAAC;6BAC1B;yBACJ;qBACJ;oBAED,IAAI,IAAI,EAAE;wBACN,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBACnD,QAAQ,GAAG,IAAI,CAAC;qBACnB;oBAED,IAAI,CAAC,QAAQ,EAAE;wBAEX,IAAM,YAAY,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBAClD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACxB,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;qBACzC;oBACD,IAAI,CAAC,IAAI,EAAE;wBACP,IAAI,GAAG,kBAAkB,CAAC,MAAM,IAAI,mBAAmB,CAAC;qBAC3D;iBACJ;aACJ;YAMD,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE;gBACtD,IAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,EAAE,EAAE;oBAgBJ,IAAM,WAAW,GAAG,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBAC1E,IAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC,OAAO,GAAG,UAAU,KAAK,CAAC,WAAW,CAAC;0BACzE,EAAE,CAAC,gBAAgB,EAAE;0BACrB,IAAI,CAAC;oBACX,IAAI,QAAQ,EAAE;wBACV,kBAAkB,CAAC,QAAQ,CAAC,CAAC;qBAChC;oBAOD,IAAM,OAAO,GAAG,WAAW,KAAK,CAAC,EAAE,CAAC,OAAO,GAAG,UAAU,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC;0BACxE,EAAE,CAAC,YAAY,EAAE;0BACjB,IAAI,CAAC;oBACX,IAAI,OAAO,EAAE;wBACT,kBAAkB,CAAC,OAAO,CAAC,CAAC;qBAC/B;iBACJ;aACJ;YAOD,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE;gBAC9D,IAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAcvB,IAAM,WAAW,GAAG,EAAE,IAAI,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAChF,IAAI,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,YAAY,EAAE;oBAErD,IAAM,QAAQ,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC;oBACvC,IAAI,QAAQ,EAAE;wBACV,kBAAkB,CAAC,QAAQ,CAAC,CAAC;qBAChC;iBACJ;aACJ;YAGD,IAAI,gBAAgB,CAAC;YACrB,GAAG;gBACC,gBAAgB,GAAG,KAAK,CAAC;gBACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,GAAG;oBAC5C,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE;wBAChC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBAChC,SAAS;qBACZ;oBACD,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,GAAG;wBAChD,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE;4BACxD,gBAAgB,GAAG,IAAI,CAAC;4BACxB,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;4BACnD,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;yBACnC;6BACI;4BACD,CAAC,EAAE,CAAC;yBACP;qBACJ;oBACD,CAAC,EAAE,CAAC;iBACP;aACJ,QAAQ,gBAAgB,EAAE;YAE3B,IAAI,CAAC,WAAW,GAAG,kBAAkB,CAAC;YAEtC,OAAO,kBAAkB,CAAC;SAC7B;QAKD,kCAAkB,GAAlB;YACI,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC;SAC3C;QAED,sBAAM,GAAN,UAAO,KAAa,EAAE,MAAc;YAChC,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YAErB,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YACrB,IAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC;YAC3B,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAE7B,IAAI,QAAQ,EAAE;gBACV,QAAQ,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;gBAC9B,QAAQ,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;aACnC;YAED,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC;YACxB,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;YAE1B,IAAI,OAAO,EAAE;gBACT,OAAO,CAAC,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC;gBAC5B,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;gBAE9B,IAAI,GAAG,KAAK,CAAC,EAAE;oBACX,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;iBAChC;aACJ;SACJ;QAKD,qBAAK,GAAL,UACI,QAAkB,EAClB,UAAyD,EACzD,YAA6B;YAE7B,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YACrB,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YACrB,IAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;YACxB,IAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;YAE1B,UAAU,GAAG,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;YAC3C,IAAM,cAAc,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC;YACpD,IAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;YAE3C,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YACrB,IAAM,IAAI,GAAG,IAAI,CAAC;YAElB,IAAI,cAAc,EAAE;gBAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;oBACf,IAAI,CAAC,gBAAgB,EAAE,CAAC;iBAC3B;gBAED,IAAI,CAAC,OAAO,CAAC,wBAAwB,GAAG,MAAM,CAAC;gBAC/C,IAAI,CAAC,OAAO,CAAC,SAAS,CAClB,GAAG,EAAE,CAAC,EAAE,CAAC,EACT,KAAK,GAAG,GAAG,EACX,MAAM,GAAG,GAAG,CACf,CAAC;aACL;YAED,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAE7B,SAAS,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc;gBAChE,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBACnC,IAAI,UAAU,IAAI,UAAU,KAAK,aAAa,EAAE;oBAC5C,IAAI,2BAA2B,SAAA,CAAC;oBAEhC,IAAIC,gBAAqB,CAAC,UAAU,CAAC,EAAE;wBAEnC,IAAM,WAAW,GAAG,UAAU,CAAC,MAAM,KAChC,UAAkC,CAAC,OAAO,KAAK,KAAK;+BACjD,UAAkC,CAAC,QAAQ,KAAK,MAAM,CAC7D,CAAC;wBAEF,2BAA2B,GAAG,WAAW;+BACjC,UAAkC,CAAC,gBAAgB;+BACpD,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE;gCAClC,CAAC,EAAE,CAAC;gCACJ,CAAC,EAAE,CAAC;gCACJ,KAAK,EAAE,KAAK;gCACZ,MAAM,EAAE,MAAM;6BACjB,CAAC,CAAC;wBAEN,UAAkC,CAAC,gBAAgB,GAAG,2BAA2B,CAAC;wBAClF,UAAkC,CAAC,OAAO,GAAG,KAAK,CAAC;wBACnD,UAAkC,CAAC,QAAQ,GAAG,MAAM,CAAC;qBACzD;yBAEI,IAAIC,oBAAyB,CAAC,UAAU,CAAC,EAAE;wBAE5C,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,GAAG,CAAC;wBAC7C,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,GAAG,CAAC;wBAC7C,2BAA2B,GAAG,mBAAmB,CAC7C,GAAG,EAAE,UAAU,EAAE;4BACb,KAAK;gCACD,IAAI,CAAC,YAAY,EAAE,CAAC;gCACpB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;6BAC1B;yBACJ,CACJ,CAAC;qBACL;oBACD,GAAG,CAAC,IAAI,EAAE,CAAC;oBACX,GAAG,CAAC,SAAS,GAAG,2BAA2B,IAAK,UAAqB,CAAC;oBACtE,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;oBAClC,GAAG,CAAC,OAAO,EAAE,CAAC;iBACjB;gBAED,IAAI,cAAc,EAAE;oBAChB,GAAG,CAAC,IAAI,EAAE,CAAC;oBACX,GAAG,CAAC,WAAW,GAAG,cAAc,CAAC;oBACjC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;oBAC5C,GAAG,CAAC,OAAO,EAAE,CAAC;iBACjB;aACJ;YAED,IAAI,CAAC,YAAY,IAAI,cAAc,EAAE;gBAEjC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;aAChC;iBACI,IAAI,YAAY,CAAC,MAAM,EAAE;gBAE1BvF,IAAS,CAAC,YAAY,EAAE,UAAA,IAAI;oBACxB,OAAO,CACH,IAAI,CAAC,CAAC,GAAG,GAAG,EACZ,IAAI,CAAC,CAAC,GAAG,GAAG,EACZ,IAAI,CAAC,KAAK,GAAG,GAAG,EAChB,IAAI,CAAC,MAAM,GAAG,GAAG,CACpB,CAAC;iBACL,CAAC,CAAC;aACN;SACJ;QA0BL,YAAC;IAAD,CAhdA,CAAmC,QAAQ,GAgd1C;;IC7eD,IAAM,kBAAkB,GAAG,GAAG,CAAC;IAC/B,IAAM,aAAa,GAAG,MAAM,CAAC;IAE7B,IAAM,wBAAwB,GAAG,IAAI,CAAC;IACtC,IAAM,eAAe,GAAG,KAAK,CAAC;IAG9B,SAAS,YAAY,CAAC,KAAY;QAC9B,IAAI,CAAC,KAAK,EAAE;YACR,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,KAAK,CAAC,WAAW,EAAE;YACnB,OAAO,IAAI,CAAC;SACf;QAED,IAAI,QAAQ,KAAK,CAAC,MAAM,CAAC,KAAK,UAAU;eACjC,QAAQ,KAAK,CAAC,OAAO,CAAC,KAAK,UAAU,EAC1C;YACE,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,SAAS,UAAU,CAAC,KAAa,EAAE,MAAc;QAC7C,IAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAG9C,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG;YACpB,mBAAmB;YAQnB,QAAQ,GAAG,KAAK,GAAG,IAAI;YACvB,SAAS,GAAG,MAAM,GAAG,IAAI;YACzB,WAAW;YACX,UAAU;YACV,gBAAgB;SACnB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAElB,OAAO,OAAO,CAAC;IACnB,CAAC;IASD;QAuCI,uBAAY,IAAiB,EAAE,OAAgB,EAAE,IAAyB,EAAE,EAAU;YArCtF,SAAI,GAAG,QAAQ,CAAA;YAYP,gBAAW,GAAa,EAAE,CAAA;YAE1B,qBAAgB,GAAkB,EAAE,CAAA;YAEpC,YAAO,GAA2B,EAAE,CAAA;YAEpC,iBAAY,GAAiC,EAAE,CAAA;YAK/C,8BAAyB,GAAG,KAAK,CAAA;YAgBrC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;YAGrB,IAAM,YAAY,GAAG,CAAC,IAAI,CAAC,QAAQ;mBAC5B,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC;YAEhD,IAAI,CAAC,KAAK,GAAG,IAAI,GAAGwF,MAAW,CAAC,EAAE,EAAE,IAAI,IAAI,EAAE,CAAwB,CAAC;YAKvE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,CAAC;YAKrD,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;YAKlC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YAEjB,IAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;YAE7B,IAAI,SAAS,EAAE;gBAEXH,iBAAsB,CAAC,IAAI,CAAC,CAAC;gBAC7B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;aACvB;YAKD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YAEvB,IAAM,UAAU,GAAa,IAAI,CAAC,WAAW,CAAC;YAE9C,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;YAE3B,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;YAE5B,IAAI,CAAC,YAAY,EAAE;gBACf,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;gBACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;gBAEtC,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,UAAU,CACtC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAC5B,CAAC;gBACF,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;aAC7B;iBACI;gBACD,IAAM,UAAU,GAAG,IAAyB,CAAC;gBAC7C,IAAI,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;gBAC7B,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;gBAE/B,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;oBAEpB,KAAK,GAAG,IAAI,CAAC,KAAe,CAAC;iBAChC;gBACD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;oBAErB,MAAM,GAAG,IAAI,CAAC,MAAgB,CAAC;iBAClC;gBACD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC;gBAGtC,UAAU,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;gBACpC,UAAU,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;gBAEtC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;gBACpB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;gBAItB,IAAM,SAAS,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxD,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;gBAC7B,SAAS,CAAC,WAAW,EAAE,CAAC;gBAGxB,MAAM,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;gBAClC,SAAS,CAAC,MAAM,GAAG,aAAa,CAAC;gBAEjC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAE/B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;aACxB;SACJ;QAGD,+BAAO,GAAP;YACI,OAAO,QAAQ,CAAC;SACnB;QAKD,sCAAc,GAAd;YACI,OAAO,IAAI,CAAC,aAAa,CAAC;SAC7B;QAED,uCAAe,GAAf;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;SACxB;QAED,6CAAqB,GAArB;YACI,IAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YAC5C,IAAI,YAAY,EAAE;gBACd,OAAO;oBACH,UAAU,EAAE,YAAY,CAAC,UAAU,IAAI,CAAC;oBACxC,SAAS,EAAE,YAAY,CAAC,SAAS,IAAI,CAAC;iBACzC,CAAC;aACL;SACJ;QAMD,+BAAO,GAAP,UAAQ,QAAkB;YACtB,IAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAEvC,IAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YAEpC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAE/B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAG1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,IAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,OAAO,EAAE;oBACrC,IAAM,UAAU,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;oBAC1D,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;iBAC7B;aACJ;YAED,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;gBACzB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;aACxC;YAED,OAAO,IAAI,CAAC;SACf;QAGD,oCAAY,GAAZ;YACI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;SAC5D;QAEO,uCAAe,GAAvB,UAAwB,IAAmB;YACvC,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;YACtB,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YAClC,UAAU,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YAEjC,IAAI,CAAC,GAAG,EAAE;gBACN,OAAO;aACV;YAED,IAAM,KAAK,GAAe;gBACtB,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,IAAI,CAAC,MAAM;gBACtB,UAAU,EAAE,IAAI,CAAC,OAAO;aAC3B,CAAC;YAEF,IAAI,GAAG,CAAC;YACR,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC1B,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAI,EAAE,CAAC,SAAS,EAAE;oBAGd,IAAI,CAAC,UAAU,EAAE;wBACb,UAAU,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;qBACrE;oBAED,IAAI,CAAC,GAAG,EAAE;wBACN,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;wBACrB,GAAG,CAAC,IAAI,EAAE,CAAC;qBACd;oBAED,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;iBACxC;aACJ;YACD,IAAI,GAAG,EAAE;gBACL,GAAG,CAAC,OAAO,EAAE,CAAC;aACjB;SACJ;QAED,qCAAa,GAAb;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;SAC5C;QAED,gCAAQ,GAAR,UAAS,GAA6B,EAAE,EAAe;YACnD,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;SACxB;QAEO,kCAAU,GAAlB,UAAmB,IAAmB,EAAE,QAAuB,EAAE,QAAiB,EAAE,QAAiB;YACjG,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;gBAC7B,OAAO;aACV;YAED,QAAQ,GAAG,QAAQ,IAAI,KAAK,CAAC;YAE7B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAExB,IAAA,KAAgC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAA1E,QAAQ,cAAA,EAAE,iBAAiB,uBAA+C,CAAC;YAElF,IAAI,IAAI,CAAC,yBAAyB,EAAE;gBAChC,IAAI,CAAC,kBAAkB,EAAE,CAAC;aAC7B;YAED,IAAI,iBAAiB,EAAE;gBACnB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;aAC9B;YAED,IAAI,CAAC,QAAQ,EAAE;gBACX,IAAM,MAAI,GAAG,IAAI,CAAC;gBAClB3E,uBAAqB,CAAC;oBAClB,MAAI,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;iBACvD,CAAC,CAAC;aACN;iBACI;gBACD,IAAI,CAAC,SAAS,CAAC,UAAA,KAAK;oBAChB,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;iBAC1C,CAAC,CAAC;aACN;SACJ;QAEO,0CAAkB,GAA1B;YACI,IAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC;YAC7C,IAAM,KAAK,GAAI,IAAI,CAAC,QAA8B,CAAC,KAAK,CAAC;YACzD,IAAM,MAAM,GAAI,IAAI,CAAC,QAA8B,CAAC,MAAM,CAAC;YAC3D,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAEnC,IAAI,CAAC,gBAAgB,CAAC,UAAU,KAAK;gBACjC,IAAI,KAAK,CAAC,OAAO,EAAE;oBACf,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;iBACjD;aACJ,CAAC,CAAC;SACN;QAEO,oCAAY,GAApB,UACI,IAAmB,EACnB,QAAuB,EACvB,QAAkB;YAHtB,iBAiJC;YAzIG,IAAM,SAAS,GAAG,EAAE,CAAC;YACrB,IAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;YAC7C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;gBACjD,IAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBACpC,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACnC,IAAI,KAAK,CAAC,WAAW;uBACd,KAAK,KAAK,IAAI,CAAC,WAAW;wBACzB,KAAK,CAAC,OAAO,IAAI,QAAQ,CAAC,EAGhC;oBACE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACzB;aACJ;YAED,IAAI,QAAQ,GAAG,IAAI,CAAC;YACpB,IAAI,iBAAiB,GAAG,KAAK,CAAC;oCAErB,CAAC;gBACN,IAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;gBAEtB,IAAM,YAAY,GAAG,YAAY;uBAC1B,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAK,MAAM,EAAE,OAAK,OAAO,CAAC,CAAC;gBAE3E,IAAI,KAAK,GAAG,QAAQ,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC;gBAE9D,IAAM,QAAQ,GAAG,CAAC,QAAQ,IAAI,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,CAAC;gBAC5D,IAAM,SAAS,GAAG,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBAEzC,IAAM,UAAU,GAAG,KAAK,CAAC,MAAM,KAAK,OAAK,WAAW,CAAC,CAAC,CAAC;sBACjD,OAAK,gBAAgB,GAAG,IAAI,CAAC;gBAGnC,IAAI,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,UAAU,EAAE;oBACzC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;iBAChD;qBACI,IAAI,KAAK,KAAK,KAAK,CAAC,YAAY,EAAE;oBACnC,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC5B,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAE,OAAkC,CAAC,QAAQ,IAAI,QAAQ,EAAE;wBACnF,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;qBAChD;iBACJ;gBACD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;oBACd,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;oBAC1D,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC;iBAC9B;gBACD,IAAI,CAAS,CAAC;gBAEd,IAAM,OAAO,GAAG,UAAC,WAA0B;oBACvC,IAAM,KAAK,GAAe;wBACtB,OAAO,EAAE,KAAK;wBACd,UAAU,EAAE,KAAK;wBACjB,MAAM,EAAE,IAAI;wBACZ,SAAS,EAAE,KAAI,CAAC,MAAM;wBACtB,UAAU,EAAE,KAAI,CAAC,OAAO;qBAC3B,CAAC;oBAEF,KAAK,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;wBACvC,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;wBAEnB,IAAI,EAAE,CAAC,SAAS,EAAE;4BACd,iBAAiB,GAAG,IAAI,CAAC;yBAC5B;wBAED,KAAI,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;wBAEzF,IAAI,QAAQ,EAAE;4BAEV,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;4BAGrC,IAAI,KAAK,GAAG,EAAE,EAAE;gCACZ,MAAM;6BACT;yBACJ;qBACJ;oBAED,IAAI,KAAK,CAAC,eAAe,EAAE;wBAEvB,GAAG,CAAC,OAAO,EAAE,CAAC;qBACjB;iBACJ,CAAC;gBAEF,IAAI,YAAY,EAAE;oBACd,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;wBAE3B,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;qBACxB;yBACI;wBACD,IAAM,GAAG,GAAG,OAAK,GAAG,CAAC;wBAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;4BAC1C,IAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;4BAE7B,GAAG,CAAC,IAAI,EAAE,CAAC;4BACX,GAAG,CAAC,SAAS,EAAE,CAAC;4BAChB,GAAG,CAAC,IAAI,CACJ,IAAI,CAAC,CAAC,GAAG,GAAG,EACZ,IAAI,CAAC,CAAC,GAAG,GAAG,EACZ,IAAI,CAAC,KAAK,GAAG,GAAG,EAChB,IAAI,CAAC,MAAM,GAAG,GAAG,CACpB,CAAC;4BACF,GAAG,CAAC,IAAI,EAAE,CAAC;4BAEX,OAAO,CAAC,IAAI,CAAC,CAAC;4BACd,GAAG,CAAC,OAAO,EAAE,CAAC;yBACjB;qBACJ;iBACJ;qBACI;oBAED,GAAG,CAAC,IAAI,EAAE,CAAC;oBACX,OAAO,EAAE,CAAC;oBACV,GAAG,CAAC,OAAO,EAAE,CAAC;iBACjB;gBAED,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;gBAEtB,IAAI,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,EAAE;oBACtC,QAAQ,GAAG,KAAK,CAAC;iBACpB;;;YAvGL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE;wBAAhC,CAAC;aAwGT;YAED,IAAI,GAAG,CAAC,GAAG,EAAE;gBAETV,IAAS,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,KAAK;oBACnC,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,IAAK,KAAK,CAAC,GAAgC,CAAC,IAAI,EAAE;wBACnE,KAAK,CAAC,GAAgC,CAAC,IAAI,EAAE,CAAC;qBAClD;iBACJ,CAAC,CAAC;aACN;YAED,OAAO;gBACH,QAAQ,UAAA;gBACR,iBAAiB,mBAAA;aACpB,CAAC;SACL;QAEO,kCAAU,GAAlB,UACI,EAAe,EACf,YAAmB,EACnB,YAAqB,EACrB,WAAyB,EACzB,KAAiB,EACjB,MAAe;YAEf,IAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC;YAC7B,IAAI,YAAY,EAAE;gBACd,IAAM,SAAS,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC;gBACpC,IAAI,CAAC,WAAW,IAAI,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE;oBAC/D,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;oBAC9B,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;iBAClC;aACJ;iBACI;gBACD,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;aACjC;SACJ;QAOD,gCAAQ,GAAR,UAAS,MAAc,EAAE,OAAiB;YACtC,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE;gBACvD,MAAM,GAAG,aAAa,CAAC;aAC1B;YACD,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,EAAE;gBAER,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClD,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;gBACtB,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;gBAEzB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;oBAC3ByF,KAAU,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;iBACtD;qBAEI,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,wBAAwB,CAAC,EAAE;oBAC3DA,KAAU,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,wBAAwB,CAAC,EAAE,IAAI,CAAC,CAAC;iBACjF;gBAED,IAAI,OAAO,EAAE;oBACT,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;iBAC3B;gBAED,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAIhC,KAAK,CAAC,WAAW,EAAE,CAAC;aACvB;YAED,OAAO,KAAK,CAAC;SAChB;QAED,mCAAW,GAAX,UAAY,MAAc,EAAE,KAAY;YAEpC,IAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;YAC/B,IAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YACpC,IAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC;YAC9B,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC9B,IAAI,SAAS,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAEX,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE;gBACnB,AAA2C;oBACvCC,QAAa,CAAC,SAAS,GAAG,MAAM,GAAG,wBAAwB,CAAC,CAAC;iBAChE;gBACD,OAAO;aACV;YAED,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;gBACtB,AAA2C;oBACvCA,QAAa,CAAC,kBAAkB,GAAG,MAAM,GAAG,eAAe,CAAC,CAAC;iBAChE;gBACD,OAAO;aACV;YAED,IAAI,GAAG,GAAG,CAAC,IAAI,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE;gBACnC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC1B,IACI,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM;2BACnB,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,EAC/B;wBACE,MAAM;qBACT;iBACJ;gBACD,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;aACxC;YACD,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;YAEpC,SAAS,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;YAK1B,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;gBAChB,IAAI,SAAS,EAAE;oBACX,IAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC;oBAC9B,IAAI,OAAO,CAAC,WAAW,EAAE;wBACrB,OAAO,CAAC,YAAY,CAChB,KAAK,CAAC,GAAG,EACT,OAAO,CAAC,WAAW,CACtB,CAAC;qBACL;yBACI;wBACD,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;qBAClC;iBACJ;qBACI;oBACD,IAAI,OAAO,CAAC,UAAU,EAAE;wBACpB,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;qBACvD;yBACI;wBACD,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;qBAClC;iBACJ;aACJ;YAED,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;SAC3C;QAGD,iCAAS,GAAT,UAAa,EAA8C,EAAE,OAAW;YACpE,IAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,IAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBACxB,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aACxC;SACJ;QAGD,wCAAgB,GAAhB,UAAoB,EAA8C,EAAE,OAAW;YAC3E,IAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,IAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,KAAK,CAAC,WAAW,EAAE;oBACnB,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;iBAC9B;aACJ;SACJ;QAGD,sCAAc,GAAd,UAAkB,EAA8C,EAAE,OAAW;YACzE,IAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,IAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;oBACpB,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;iBAC9B;aACJ;SACJ;QAMD,iCAAS,GAAT;YACI,OAAO,IAAI,CAAC,OAAO,CAAC;SACvB;QAED,0CAAkB,GAAlB,UAAmB,IAAmB;YAElC,IAAI,CAAC,gBAAgB,CAAC,UAAU,KAAK,EAAE,CAAC;gBACpC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;aACxC,CAAC,CAAC;YAEH,SAAS,eAAe,CAAC,GAAW;gBAChC,IAAI,SAAS,EAAE;oBACX,IAAI,SAAS,CAAC,UAAU,KAAK,GAAG,EAAE;wBAC9B,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;qBAC5B;oBACD,SAAS,CAAC,UAAU,GAAG,GAAG,CAAC;iBAC9B;aACJ;YAED,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpB,KAAK,IAAI,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAC,EAAE,EAAE;oBAClC,IAAM,EAAE,GAAG,IAAI,CAAC,GAAC,CAAC,CAAC;oBACnB,IAAI,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,GAAC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,WAAW,EAAE;wBACpD,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;wBACtC,MAAM;qBACT;iBACJ;aACJ;YAED,IAAI,SAAS,GAAU,IAAI,CAAC;YAC5B,IAAI,qBAAqB,GAAG,CAAC,CAAC;YAC9B,IAAI,UAAU,CAAC;YACf,IAAI,CAAC,CAAC;YAEN,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC9B,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;gBACzB,IAAI,KAAK,SAAA,CAAC;gBAEV,IAAI,UAAU,KAAK,MAAM,EAAE;oBACvB,UAAU,GAAG,MAAM,CAAC;oBACpB,qBAAqB,GAAG,CAAC,CAAC;iBAC7B;gBAWD,IAAI,EAAE,CAAC,WAAW,EAAE;oBAChB,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,eAAe,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;oBAChF,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;oBACzB,qBAAqB,GAAG,CAAC,CAAC;iBAC7B;qBACI;oBACD,KAAK,GAAG,IAAI,CAAC,QAAQ,CACjB,MAAM,IAAI,qBAAqB,GAAG,CAAC,GAAG,wBAAwB,GAAG,CAAC,CAAC,EACnE,IAAI,CAAC,yBAAyB,CACjC,CAAC;iBACL;gBAED,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;oBACpBA,QAAa,CAAC,SAAS,GAAG,MAAM,GAAG,iCAAiC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;iBACpF;gBAED,IAAI,KAAK,KAAK,SAAS,EAAE;oBACrB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;oBACpB,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC,EAAE;wBAC1B,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;qBACxB;oBACD,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;oBACvB,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;wBACpB,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;qBACzB;yBACI;wBAED,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;qBAC1B;oBACD,eAAe,CAAC,CAAC,CAAC,CAAC;oBACnB,SAAS,GAAG,KAAK,CAAC;iBACrB;gBACD,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,UAAU,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE;oBAC5C,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;oBACrB,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,GAAG,CAAC,EAAE;wBAE5C,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;qBACzB;iBACJ;aACJ;YAED,eAAe,CAAC,CAAC,CAAC,CAAC;YAEnB,IAAI,CAAC,gBAAgB,CAAC,UAAU,KAAK,EAAE,CAAC;gBAEpC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE;oBAC9C,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;oBACrB,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;iBACjE;gBAED,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,WAAW,GAAG,CAAC,EAAE;oBACxC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC;iBAC1C;aACJ,CAAC,CAAC;SACN;QAKD,6BAAK,GAAL;YACI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxC,OAAO,IAAI,CAAC;SACf;QAED,mCAAW,GAAX,UAAY,KAAY;YACpB,KAAK,CAAC,KAAK,EAAE,CAAC;SACjB;QAED,0CAAkB,GAAlB,UAAmB,eAA6D;YAC5E,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;YAExC1F,IAAS,CAAC,IAAI,CAAC,OAAO,EAAE,UAAA,KAAK;gBACzB,KAAK,CAAC,YAAY,EAAE,CAAC;aACxB,CAAC,CAAC;SACN;QAKD,mCAAW,GAAX,UAAY,MAAc,EAAE,MAAmB;YAC3C,IAAI,MAAM,EAAE;gBACR,IAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;gBACtC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;oBACtB,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;iBAChC;qBACI;oBACDyF,KAAU,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;iBACjD;gBAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC9C,IAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;oBAEpC,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,MAAM,GAAG,wBAAwB,EAAE;wBACrE,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;wBACpCA,KAAU,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;qBAChD;iBACJ;aACJ;SACJ;QAMD,gCAAQ,GAAR,UAAS,MAAc;YACnB,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;YAC5B,IAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YACpC,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK,EAAE;gBACR,OAAO;aACV;YACD,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;YAEtB,UAAU,CAAC,MAAM,CAACtF,OAAY,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;SAC1D;QAKD,8BAAM,GAAN,UACI,KAAuB,EACvB,MAAwB;YAExB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;gBACtB,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE;oBACjC,OAAO;iBACV;gBAED,IAAI,CAAC,MAAM,GAAG,KAAe,CAAC;gBAC9B,IAAI,CAAC,OAAO,GAAG,MAAgB,CAAC;gBAEhC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,KAAe,EAAE,MAAgB,CAAC,CAAC;aAC1E;iBACI;gBACD,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAE9B,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;gBAG/B,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;gBACxB,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACvB,KAAK,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;gBACtC,MAAM,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;gBAEzC,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC/B,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;gBAEhC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;gBAG3B,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE;oBAClD,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;oBACnC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;oBAErC,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;wBACzB,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;4BACjC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;yBAC1C;qBACJ;oBAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBACtB;gBAED,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;gBACpB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;aAEzB;YACD,OAAO,IAAI,CAAC;SACf;QAMD,kCAAU,GAAV,UAAW,MAAc;YACrB,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,KAAK,EAAE;gBACP,KAAK,CAAC,KAAK,EAAE,CAAC;aACjB;SACJ;QAKD,+BAAO,GAAP;YACI,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;YAEzB,IAAI,CAAC,IAAI;gBACT,IAAI,CAAC,OAAO;oBAEZ,IAAI,CAAC,QAAQ;wBACb,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACvB;QAKD,yCAAiB,GAAjB,UAAkB,IAGjB;YACG,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAClB,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;gBAChD,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC;aAC1C;YAED,IAAM,UAAU,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;YACzE,UAAU,CAAC,WAAW,EAAE,CAAC;YACzB,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAEvE,IAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;YAE3B,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE;gBAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;gBAEf,IAAM,OAAK,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;gBACnC,IAAM,QAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;gBACrC,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK;oBAC1B,IAAI,KAAK,CAAC,WAAW,EAAE;wBACnB,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,OAAK,EAAE,QAAM,CAAC,CAAC;qBACjD;yBACI,IAAI,KAAK,CAAC,cAAc,EAAE;wBAC3B,GAAG,CAAC,IAAI,EAAE,CAAC;wBACX,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;wBAC1B,GAAG,CAAC,OAAO,EAAE,CAAC;qBACjB;iBACJ,CAAC,CAAC;aACN;iBACI;gBAED,IAAM,KAAK,GAAG;oBACV,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,IAAI,CAAC,MAAM;oBACtB,UAAU,EAAE,IAAI,CAAC,OAAO;iBAC3B,CAAC;gBACF,IAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oBACpD,IAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;oBAC1B,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;iBACxC;aACJ;YAED,OAAO,UAAU,CAAC,GAAG,CAAC;SACzB;QAID,gCAAQ,GAAR;YACI,OAAO,IAAI,CAAC,MAAM,CAAC;SACtB;QAKD,iCAAS,GAAT;YACI,OAAO,IAAI,CAAC,OAAO,CAAC;SACvB;QACL,oBAAC;IAAD,CAAC,IAAA;;IC78BD,IAAM0C,SAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAMD,SAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAMiB,IAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IACnB,IAAMf,KAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACxB,IAAM,MAAM,GAAG,GAAG,GAAGe,IAAE,CAAC;IAGxB;QAAA;SA4IC;QAnIG,gCAAK,GAAL,UAAM,SAAkB;YACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;YAEf,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,IAAI,CAAC,CAAC,CAAC;SAC1C;QACD,iCAAM,GAAN,UAAO,CAAS,EAAE,CAAS;YACvB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SACxB;QACD,iCAAM,GAAN,UAAO,CAAS,EAAE,CAAS;YACvB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SACxB;QACD,wCAAa,GAAb,UAAc,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;YAC9E,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;SACxC;QACD,2CAAgB,GAAhB,UAAiB,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU;YACzD,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;SAChC;QACD,8BAAG,GAAH,UAAI,EAAU,EAAE,EAAU,EAAE,CAAS,EAAE,UAAkB,EAAE,QAAgB,EAAE,aAAsB;YAC/F,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;SACtE;QACD,kCAAO,GAAP,UACI,EAAU,EAAE,EAAU,EACtB,EAAU,EAAE,EAAU,EACtB,GAAW,EACX,UAAkB,EAClB,QAAgB,EAChB,aAAsB;YAEtB,IAAI,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;YACnC,IAAM,SAAS,GAAG,CAAC,aAAa,CAAC;YAEjC,IAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACxC,IAAM,QAAQ,GAAGrD,cAAY,CAAC,cAAc,GAAGsC,KAAG,CAAC;oBAC3C,SAAS,GAAG,MAAM,IAAIA,KAAG,GAAG,CAAC,MAAM,IAAIA,KAAG,CAAC,CAAC;YAGpD,IAAM,YAAY,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAGA,KAAG,IAAI,MAAM,GAAGA,KAAG,GAAGA,KAAG,CAAC,CAAC;YAEtE,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,IAAI,QAAQ,EAAE;gBACV,KAAK,GAAG,IAAI,CAAC;aAChB;iBACI,IAAItC,cAAY,CAAC,cAAc,CAAC,EAAE;gBACnC,KAAK,GAAG,KAAK,CAAC;aACjB;iBACI;gBACD,KAAK,GAAG,CAAC,YAAY,IAAIqD,IAAE,MAAM,CAAC,CAAC,SAAS,CAAC;aAChD;YAED,IAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAGjB,SAAO,CAAC,UAAU,CAAC,CAAC;YACzC,IAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAGC,SAAO,CAAC,UAAU,CAAC,CAAC;YAEzC,IAAI,IAAI,CAAC,MAAM,EAAE;gBAMb,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;aAC1B;YAED,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC;YAGtC,IAAI,QAAQ,EAAE;gBACV,IAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;gBACtB,IAAM,QAAM,GAAG,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,KAAKC,KAAG,GAAG,CAAC,CAAC,CAAC;gBAChD,IAAI,CAAC,IAAI,CACL,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,SAAS,EAChC,EAAE,GAAG,EAAE,GAAGF,SAAO,CAAC,UAAU,GAAG,QAAM,CAAC,EACtC,EAAE,GAAG,EAAE,GAAGC,SAAO,CAAC,UAAU,GAAG,QAAM,CAAC,CACzC,CAAC;gBAOF,IAAI,CAAC,GAAG,IAAI,EAAE;oBACV,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;iBACvD;aACJ;iBACI;gBACD,IAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAGD,SAAO,CAAC,QAAQ,CAAC,CAAC;gBACtC,IAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAGC,SAAO,CAAC,QAAQ,CAAC,CAAC;gBAGtC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;aAC1D;SAEJ;QACD,+BAAI,GAAJ,UAAK,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;YAC3C,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAErB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAEtB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAClB;QACD,oCAAS,GAAT;YAEI,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;gBACpB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAClB;SACJ;QAED,+BAAI,GAAJ,UAAK,GAAW,EAAE,CAAU,EAAE,CAAU,EAAE,CAAU,EAAE,CAAU,EAAE,CAAU,EAAE,CAAU,EAAE,CAAU,EAAE,CAAU;YAC5G,IAAM,IAAI,GAAG,EAAE,CAAC;YAChB,IAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;YAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACvC,IAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;oBACZ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;oBACrB,OAAO;iBACV;gBACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;aACtC;YACD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC;SAC7B;QAED,sCAAW,GAAX;YACI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;SAChB;QACD,iCAAM,GAAN;YACI,OAAO,IAAI,CAAC,IAAI,CAAC;SACpB;QACL,uBAAC;IAAD,CAAC,IAAA;;IC5ID,IAAM,IAAI,GAAG,MAAM,CAAC;IACpB,IAAM8C,WAAS,GAAG,IAAI,CAAC,KAAK,CAAC;IAE7B,SAAS,WAAW,CAAC,KAAqB;QACtC,IAAM,IAAI,GAAI,KAAwB,CAAC,IAAI,CAAC;QAC5C,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC;IACzC,CAAC;IAED,SAAS,aAAa,CAAC,KAAqB;QACxC,IAAM,MAAM,GAAI,KAAwB,CAAC,MAAM,CAAC;QAChD,OAAO,MAAM,IAAI,IAAI,IAAI,MAAM,KAAK,IAAI,CAAC;IAC7C,CAAC;IAED,IAAM,WAAW,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,CAAU,CAAC;IACnE,IAAM,cAAc,GAAG,GAAG,CAAC,WAAW,EAAE,UAAA,IAAI,IAAI,OAAA,YAAU,IAAI,CAAC,WAAW,EAAI,GAAA,CAAC,CAAC;AAEhF,aAAwB,eAAe,CACnC,UAAuD,EACvD,KAAqB,EACrB,EAA0B,EAK1B,WAAoB;QAEpB,IAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;QAG1D,IAAI,EAAE,YAAY,OAAO,EAAE;YACvB,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC/B,OAAO;SACV;QAED,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;YACpB,IAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,IAAc,CAAC,CAAC;YAClD,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,IAAI;kBACvC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,GAAG,OAAO;kBAC1C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YAC7B,IAAI,WAAW,IAAI,WAAW,GAAG,CAAC,EAAE;gBAChC,UAAU,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;aAC3C;SACJ;aACI;YACD,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;SAC5B;QAED,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;YACtB,IAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,MAAgB,CAAC,CAAC;YACtD,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,IAAM,WAAW,GAAG,KAAK,CAAC,aAAa;kBAChC,EAAW,CAAC,YAAY,EAAE;kBAC3B,CAAC,CAAC;YACR,IAAM,WAAW,IAAI,WAAW,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;YAC7E,IAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,IAAI;kBAC3C,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,GAAG,OAAO;kBAC9C,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;YAC/B,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;YAEtC,IAAI,WAAW,IAAI,WAAW,KAAK,CAAC,EAAE;gBAClC,UAAU,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;aAC3C;YAED,IAAI,WAAW,IAAI,WAAW,EAAE;gBAC5B,UAAU,CAAC,aAAa,EAAE,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC;aAC9D;YACD,IAAI,WAAW,IAAI,aAAa,GAAG,CAAC,EAAE;gBAClC,UAAU,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;aAC/C;YAED,IAAI,KAAK,CAAC,QAAQ,EAAE;gBACZ,IAAA,KAA6B,WAAW,CAAC,EAAE,CAAC,EAA3C,QAAQ,QAAA,EAAE,cAAc,QAAmB,CAAC;gBACjD,IAAI,QAAQ,EAAE;oBACV,cAAc,GAAGA,WAAS,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;oBAChD,UAAU,CAAC,kBAAkB,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnD,IAAI,cAAc,IAAI,WAAW,EAAE;wBAC/B,UAAU,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;qBACnD;iBACJ;aACJ;iBACI,IAAI,WAAW,EAAE;gBAElB,UAAU,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;aACxC;YAGD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,IAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAI,WAAW,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,kBAAkB,CAAC,QAAQ,CAAC,EAAE;oBACjE,IAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAC;oBAE5D,GAAG,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;iBAC7C;aACJ;SACJ;aACI,IAAI,WAAW,EAAE;YAClB,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;SAC9B;IACL,CAAC;;ICvGM,IAAM,KAAK,GAAG,4BAA4B,CAAC;AAClD,IAAO,IAAM,OAAO,GAAG,8BAA8B,CAAC;AACtD,IAAO,IAAM,KAAK,GAAG,+BAA+B,CAAC;AACrD,IAAO,IAAM,aAAa,GAAG,sCAAsC,CAAC;AACpE,IAAO,IAAM,gBAAgB,GAAG,SAAS,CAAC;AAE1C,aAAgB,aAAa,CAAC,IAAY;QACtC,OAAO,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;AAYA,aACe,WAAW,CACvB,GAAW,EACX,GAAW,EACX,KAAqB,EACrB,QAAqB,EACrB,IAAa;QAEb,OAAO;YACH,GAAG,KAAA;YACH,KAAK,EAAE,KAAK,IAAI,EAAE;YAClB,QAAQ,UAAA;YACR,IAAI,MAAA;YACJ,GAAG,KAAA;SACN,CAAC;IACN,CAAC;IAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,KAAqB;QAC1D,IAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,KAAK,EAAE;YAEP,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE;gBACnB,IAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACvB,IAAI,IAAI,GAAG,GAAG,CAAC;gBAEf,IAAI,GAAG,KAAK,KAAK,EAAE;oBACf,SAAS;iBACZ;qBACI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE;oBAClC,IAAI,IAAI,QAAK,GAAG,OAAG,CAAC;iBACvB;gBACD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACvB;SACJ;QACD,OAAO,MAAI,IAAI,SAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAG,CAAC;IAC7C,CAAC;IAED,SAAS,kBAAkB,CAAC,IAAY;QACpC,OAAO,OAAK,IAAI,MAAG,CAAC;IACxB,CAAC;AAED,aAAgB,aAAa,CAAC,EAAY,EAAE,IAE3C;QACG,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAClB,IAAM,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QACnC,SAAS,iBAAiB,CAAC,EAAY;YAC5B,IAAA,QAAQ,GAAsB,EAAE,SAAxB,EAAE,GAAG,GAAiB,EAAE,IAAnB,EAAE,KAAK,GAAU,EAAE,MAAZ,EAAE,IAAI,GAAI,EAAE,KAAN,CAAO;YACxC,OAAO,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC;mBAC7B,GAAG,KAAK,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;mBAChD,QAAQ,GAAG,KAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,UAAA,KAAK,IAAI,OAAA,iBAAiB,CAAC,KAAK,CAAC,GAAA,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAG,GAAG,EAAE,CAAC;kBACvF,kBAAkB,CAAC,GAAG,CAAC,CAAC;SACjC;QACD,OAAO,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;AAED,aAAgB,YAAY,CACxB,aAA+C,EAC/C,cAAiD,EACjD,IAEC;QAED,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAClB,IAAM,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QACnC,IAAM,YAAY,GAAG,OAAK,CAAG,CAAC;QAC9B,IAAM,UAAU,GAAM,CAAC,MAAG,CAAC;QAC3B,IAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,UAAA,SAAS;YAChD,OAAO,SAAS,GAAG,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,UAAA,QAAQ;gBAC1E,OAAU,QAAQ,SAAI,aAAa,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAG,CAAC;aAC/D,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;SAC3B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACX,IAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,UAAC,aAAa;YACvD,OAAO,gBAAc,aAAa,GAAG,YAAc,GAAG,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,UAAA,OAAO;gBAClG,OAAO,OAAO,GAAG,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,UAAA,QAAQ;oBACtF,IAAI,GAAG,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC;oBAE3D,IAAI,QAAQ,KAAK,GAAG,EAAE;wBAClB,GAAG,GAAG,YAAS,GAAG,QAAI,CAAC;qBAC1B;oBACD,OAAU,QAAQ,SAAI,GAAG,MAAG,CAAC;iBAChC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;aAC3B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;SAC3B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEX,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,EAAE;YAC3B,OAAO,EAAE,CAAC;SACb;QAED,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;AAiDD,aAAgB,gBAAgB,CAAC,IAAY;QACzC,OAAO;YACH,IAAI,MAAA;YACJ,WAAW,EAAE,EAAE;YACf,YAAY,EAAE,EAAE;YAChB,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,IAAI,EAAE,EAAE;YAER,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,EAAE;YACZ,aAAa,EAAE,EAAE;YAEjB,UAAU,EAAE,CAAC;YAEb,SAAS,EAAE,CAAC;YACZ,WAAW,EAAE,CAAC;YACd,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,CAAC;SACjB,CAAC;IACN,CAAC;AAED,aAAgB,cAAc,CAC1B,KAAsB,EACtB,MAAuB,EACvB,QAAqB,EACrB,UAAoB;QAEpB,OAAO,WAAW,CACd,KAAK,EACL,MAAM,EACN;YACI,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,OAAO;YACtB,SAAS,EAAE,KAAK;YAChB,aAAa,EAAE,MAAM;YACrB,SAAS,EAAE,UAAU,GAAG,SAAO,KAAK,SAAI,MAAQ,GAAG,KAAK;SAC3D,EACD,QAAQ,CACX,CAAC;IACN,CAAC;;IC/MD,IAAI,WAAW,GAAG,CAAC,CAAC;AAEpB,aAAgB,UAAU;QACtB,OAAO,WAAW,EAAE,CAAC;IACzB,CAAC;;ICUM,IAAM,UAAU,GAA2B;QAE9C,OAAO,EAAE,eAAe;QACxB,QAAQ,EAAE,eAAe;QACzB,UAAU,EAAE,eAAe;QAC3B,WAAW,EAAE,cAAc;QAC3B,YAAY,EAAE,cAAc;QAC5B,cAAc,EAAE,eAAe;QAC/B,SAAS,EAAE,cAAc;QACzB,UAAU,EAAE,cAAc;QAC1B,YAAY,EAAE,eAAe;QAC7B,SAAS,EAAE,eAAe;QAC1B,UAAU,EAAE,eAAe;QAC3B,YAAY,EAAE,eAAe;QAC7B,YAAY,EAAE,eAAe;QAC7B,aAAa,EAAE,eAAe;QAC9B,eAAe,EAAE,eAAe;QAChC,aAAa,EAAE,cAAc;QAC7B,cAAc,EAAE,cAAc;QAC9B,gBAAgB,EAAE,eAAe;QACjC,UAAU,EAAE,eAAe;QAC3B,WAAW,EAAE,eAAe;QAC5B,aAAa,EAAE,eAAe;KAEjC,CAAC;IAEF,IAAM,kBAAkB,GAAG,kBAAkB,CAAC;IAE9C,SAAS,eAAe,CAAC,EAAQ,EAAE,OAAsB,EAAE,IAAe;QACtE,IAAM,KAAK,GAAG,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEvB,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1B,IAAM,cAAc,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAC9C,cAAc,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QACpC,cAAc,CAAC,WAAW,EAAE,CAAC;QAE7B,OAAO,cAAc,CAAC,MAAM,EAAE,CAAC;IACnC,CAAC;IAED,SAAS,kBAAkB,CAAC,MAA8B,EAAE,SAAwB;QACzE,IAAA,OAAO,GAAa,SAAS,QAAtB,EAAE,OAAO,GAAI,SAAS,QAAb,CAAc;QACrC,IAAI,OAAO,IAAI,OAAO,EAAE;YACpB,MAAM,CAAC,kBAAkB,CAAC,GAAM,OAAO,WAAM,OAAO,OAAI,CAAC;SAC5D;IACL,CAAC;AAED,IAAO,IAAM,iBAAiB,GAA2B;QACrD,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,cAAc;QACzB,cAAc,EAAE,mBAAmB;KAEtC,CAAC;IAIF,SAAS,YAAY,CAAC,OAA8B,EAAE,KAAiB;QACnE,IAAM,aAAa,GAAG,KAAK,CAAC,IAAI,GAAG,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;QAChE,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC;QACxC,OAAO,aAAa,CAAC;IACzB,CAAC;IAED,SAAS,8BAA8B,CACnC,EAAgB,EAChB,KAAoB,EACpB,KAAiB;QAEjB,IAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;QAC7B,IAAM,YAAY,GAA0B,EAAE,CAAC;QAC/C,IAAI,eAAuB,CAAC;QAC5B,IAAI,gBAAwB,CAAC;QAC7B,IAAI,CAAC,KAAK,EAAE,UAAA,IAAI;YACZ,IAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9C,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;YAC1B,kBAAkB,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC7C,IAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;YACnC,IAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;YACnC,IAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjC,IAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC;YAC7B,IAAI,CAAC,GAAG,EAAE;gBACN,OAAO;aACV;YACD,gBAAgB,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAEtC,IAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YAE5C,KAAK,IAAI,OAAO,IAAI,QAAQ,EAAE;gBAC1B,IAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC7B,YAAY,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;gBAC3D,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;aACzC;YAED,KAAK,IAAI,SAAS,IAAI,QAAQ,EAAE;gBAC5B,IAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC;gBAC1C,IAAI,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;oBAEpC,eAAe,GAAG,GAAG,CAAC;iBACzB;aACJ;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,EAAE;YAClB,OAAO;SACV;QAID,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC;QAChB,IAAM,aAAa,GAAG,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,eAAe,CAAC,OAAO,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;IACpE,CAAC;IAED,SAAS,aAAa,CAAC,MAAuB;QAC1C,OAAO,QAAQ,CAAC,MAAM,CAAC;cACjB,UAAU,CAAC,MAAM,CAAC;kBACd,kBAAgB,UAAU,CAAC,MAAM,CAAC,MAAG;kBACrC,qBAAqB,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,EAAE;cAC/C,EAAE,CAAC;IACb,CAAC;AAED,aAAgB,kBAAkB,CAC9B,EAAe,EACf,KAAoB,EACpB,KAAiB,EACjB,SAAmB;QAEnB,IAAM,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;QAC/B,IAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC;QAE7B,IAAM,aAAa,GAAa,EAAE,CAAC;QAEnC,IAAI,EAAE,YAAY,YAAY,EAAE;YAC5B,IAAM,YAAY,GAAG,8BAA8B,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YACtE,IAAI,YAAY,EAAE;gBACd,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aACpC;iBACI,IAAI,CAAC,GAAG,EAAE;gBACX,OAAO;aACV;SACJ;aACI,IAAI,CAAC,GAAG,EAAE;YACX,OAAO;SACV;QAED,IAAM,cAAc,GAA8C,EAAE,CAAC;QACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAM,MAAM,GAAwB,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;YACzE,IAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;YACxD,IAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAElC,IAAI,MAAM,EAAE;gBACR,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACvB;iBACI;gBACD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACzB;YACD,IAAI,KAAK,EAAE;gBACP,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;aACnC;YACD,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE;gBACpB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aAC3B;YACD,IAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAG7B,cAAc,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAqB,CAAC,CAAC;YAC1E,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACzC;QAED,SAAS,wBAAwB,CAAC,aAAwC;YACtE,IAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YACnC,IAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC;YAC7B,IAAM,YAAY,GAA0B,EAAE,CAAC;YAC/C,IAAM,QAAQ,GAA0B,EAAE,CAAC;YAE3C,IAAM,QAAQ,GAA0B,EAAE,CAAC;YAE3C,IAAM,+BAA+B,GAAG,2BAA2B,CAAC;YAEpE,SAAS,yBAAyB,CAC9B,QAAuB,EACvB,MAA6B,EAC7B,aAA4C;gBAE5C,IAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACpC,IAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBACxB,IAAI,KAAK,CAAC,YAAY,EAAE,EAAE;wBACtB,IAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC;wBAC5B,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;wBAC9B,aAAa,KAAK,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;wBACtD,IAAI,QAAQ,EAAE;4BACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gCACjC,IAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gCAClB,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,GAAG,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;gCAC1D,IAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;gCAC1C,IAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;gCAG7B,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;oCAC1C,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oCACxC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC;oCAExC,IAAI,QAAQ,EAAE;wCAEV,MAAM,CAAC,OAAO,CAAC,CAAC,+BAA+B,CAAC,GAAG,QAAQ,CAAC;qCAC/D;iCACJ;6BACJ;yBACJ;qBACJ;iBACJ;aACJ;YAID,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC1B,IAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;gBACvC,IAAI,CAAC,UAAU,EAAE;oBACb,CAAC,SAAS,IAAI,yBAAyB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;iBACnE;qBACI,IAAI,UAAU,KAAK,OAAO,EAAE;oBAC7B,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;iBACjD;aACJ;YAGD,KAAK,IAAI,OAAO,IAAI,YAAY,EAAE;gBAC9B,IAAM,SAAS,GAAG,EAAmB,CAAC;gBACtC,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBAC7B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;gBACzC,IAAM,GAAG,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;gBAC7C,IAAM,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,+BAA+B,CAAC,CAAC;gBAC9E,QAAQ,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG;oBACtB,SAAS,EAAE,GAAG;iBACjB,GAAG,EAAE,CAAC;gBAEP,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;gBAGjD,IAAI,cAAc,EAAE;oBAChB,QAAQ,CAAC,OAAO,CAAC,CAAC,+BAA+B,CAAC,GAAG,cAAc,CAAC;iBACvE;aACJ;YAGD,IAAI,IAAe,CAAC;YACpB,IAAI,eAAe,GAAG,IAAI,CAAC;YAE3B,KAAK,IAAI,OAAO,IAAI,QAAQ,EAAE;gBAC1B,QAAQ,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAE5C,IAAM,OAAO,GAAG,CAAC,IAAI,CAAC;gBACtB,IAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,+BAA+B,CAAC,CAAC;gBAE1E,IAAI,OAAO,EAAE;oBACT,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;iBAC1B;gBACD,IAAI,KAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACrB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,EAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC3E,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAExB,IAAI,CAAC,OAAO,IAAI,KAAG,KAAK,MAAM,EAAE;oBAC5B,eAAe,GAAG,KAAK,CAAC;oBACxB,MAAM;iBACT;gBAGD,IAAI,cAAc,EAAE;oBAChB,QAAQ,CAAC,OAAO,CAAC,CAAC,+BAA+B,CAAC,GAAG,cAAc,CAAC;iBACvE;aACJ;YACD,IAAI,CAAC,eAAe,EAAE;gBAElB,KAAK,IAAI,OAAO,IAAI,QAAQ,EAAE;oBAC1B,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;iBAC9B;aACJ;YAED,IAAI,CAAC,SAAS,EAAE;gBACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oBAC1B,IAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;oBACvC,IAAI,UAAU,KAAK,OAAO,EAAE;wBACxB,yBAAyB,CACrB,QAAQ,EAAE,QAAQ,EAAE,UAAC,QAAQ,IAAK,OAAA,iBAAiB,CAAC,QAAQ,CAAC,GAAA,CAChE,CAAC;qBACL;iBACJ;aACJ;YAED,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YAGhC,IAAI,sBAAsB,GAAG,IAAI,CAAC;YAClC,IAAI,eAAe,CAAC;YACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3B,IAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,EAAE;oBACvE,sBAAsB,GAAG,KAAK,CAAC;oBAC/B,MAAM;iBACT;gBACD,eAAe,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC;aACtD;YACD,IAAI,sBAAsB,IAAI,eAAe,EAAE;gBAC3C,KAAK,IAAM,OAAO,IAAI,QAAQ,EAAE;oBAC5B,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,kBAAkB,CAAC,EAAE;wBACvC,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC;qBAChD;iBACJ;gBACD,KAAK,CAAC,kBAAkB,CAAC,GAAG,eAAe,CAAC;aAC/C;YAED,IAAI,MAAM,CACN,QAAQ,EAAE,UAAC,OAAO,IAAK,OAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,GAAA,CAC5D,CAAC,MAAM,EAAE;gBACN,IAAM,aAAa,GAAG,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAQpD,OAAU,aAAa,SAAI,aAAa,CAAC,CAAC,CAAC,UAAO,CAAC;aACtD;SACJ;QAGD,KAAK,IAAI,GAAG,IAAI,cAAc,EAAE;YAC5B,IAAM,YAAY,GAAG,wBAAwB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;YACnE,IAAI,YAAY,EAAE;gBACd,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aACpC;SACJ;QAED,IAAI,aAAa,CAAC,MAAM,EAAE;YACtB,IAAM,SAAS,GAAG,KAAK,CAAC,IAAI,GAAG,OAAO,GAAG,UAAU,EAAE,CAAC;YACtD,KAAK,CAAC,QAAQ,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG;gBAC9B,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;aACrC,CAAC;YAEF,KAAK,CAAC,OAAK,CAAA,GAAG,SAAS,CAAC;SAC3B;IACL,CAAC;;aCxWe,iBAAiB,CAC7B,EAAe,EACf,KAAoB,EACpB,KAAiB;QAEjB,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;YACZ,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE;gBAGf,IAAM,KAAK,GAAG;oBACV,gBAAgB,EAAE,MAAM;iBAC3B,CAAC;gBACF,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;aAChD;iBACI;gBACD,IAAM,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK;sBAC9D,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK;sBACxB,EAAE,CAAC;gBACT,IAAI,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;gBAC9B,IAAI,CAAC,IAAI,EAAE;oBAEP,IAAM,UAAU,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;oBAC7C,IAAM,UAAU,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM;2BAC5B,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK;2BACtB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;oBACnC,IAAM,QAAQ,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;2BACjD,UAAU,IAAI,UAAU;0BACzB,UAAU,CAAC;oBACjB,IAAI,QAAQ,EAAE;wBACV,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;qBAC9B;iBACJ;gBACD,IAAI,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;gBACxC,IAAI,SAAS,EAAE;oBAGX,IAAM,MAAM,GAAG,CAAC,CAAC,aAAa,CAAC,aAAa,IAAI,EAAE,CAAC,SAAS;0BACtD,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;0BACf,CAAC,CAAC;oBACR,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;iBAClC;gBACD,IAAM,KAAK,GAAG;oBACV,MAAM,EAAE,SAAS;iBACb,CAAC;gBACT,IAAI,IAAI,EAAE;oBACN,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;iBACrB;gBACD,IAAI,aAAa,CAAC,MAAM,EAAE;oBACtB,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;iBACvC;gBACD,IAAI,SAAS,EAAE;oBACX,KAAK,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;iBACrC;gBACD,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;aAChD;SACJ;IACL,CAAC;IAED,SAAS,iBAAiB,CAAC,KAAa,EAAE,KAAoB,EAAE,KAAiB,EAAE,SAAkB;QACjG,IAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,EAAE;YACZ,SAAS,GAAG,KAAK,CAAC,IAAI,GAAG,OAAO,GAAG,UAAU,EAAE,CAAC;YAChD,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;YAC1C,KAAK,CAAC,QAAQ,CAAC,GAAG,GAAG,SAAS,IAAI,SAAS,GAAG,QAAQ,GAAG,EAAE,CAAC,CAAC,GAAG,KAAY,CAAC;SAChF;QACD,KAAK,CAAC,OAAK,CAAA,GAAG,KAAK,CAAC,OAAK,CAAA,IAAI,KAAK,CAAC,OAAK,CAAA,GAAG,GAAG,GAAG,SAAS,IAAI,SAAS,CAAC;IAC5E,CAAC;;IC5BD,IAAMC,OAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAEzB,SAASC,aAAW,CAAC,GAAQ;QACzB,OAAO,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IACD,SAAS,YAAY,CAAC,GAAQ;QAC1B,OAAO,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAKD,SAAS,aAAa,CAAC,KAAoB,EAAE,KAAqB,EAAE,EAA0B,EAAE,KAAiB;QAC7G,eAAe,CAAC,UAAC,GAAG,EAAE,GAAG;YACrB,IAAM,YAAY,GAAG,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,QAAQ,CAAC;YACxD,IAAI,YAAY,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE;gBACjC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;aACzC;iBACI,IAAI,YAAY,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE;gBACrC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;aACrC;iBACI;gBACD,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;aACpB;YACD,IAAI,YAAY,IAAI,KAAK,CAAC,GAAG,IAAI,GAAG,KAAK,MAAM,EAAE;gBAI7C,KAAK,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC;aACvC;SACJ,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAErB,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,SAAS,WAAW,CAAC,KAAoB,EAAE,EAA0B;QACjE,IAAM,QAAQ,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,QAAQ,EAAE;YACV,QAAQ,CAAC,IAAI,CAAC,UAAC,GAAG,EAAE,GAAG;gBACnB,GAAG,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC,gBAAgB,GAAG,GAAG,EAAE,WAAW,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;aAC7E,CAAC,CAAC;YACH,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACf,KAAK,CAAC,gBAAgB,GAAG,QAAQ,CAAC,GAAG,MAAM,CAAC;aAC/C;SACJ;IACL,CAAC;IAED,SAAS,aAAa,CAAC,CAAc;QACjC,OAAOrF,cAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;eACtBA,cAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;eAClBA,cAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;eAClBA,cAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,SAAS,WAAW,CAAC,CAAc;QAC/B,OAAOA,cAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAIA,cAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,SAAS,YAAY,CAAC,KAAoB,EAAE,CAAc,EAAE,QAAkB;QAC1E,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;YAC5C,IAAM,GAAG,GAAG,QAAQ,GAAG,EAAE,GAAG,GAAG,CAAC;YAEhC,KAAK,CAAC,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC;kBAC5B,eAAaoF,OAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,SAAIA,OAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,MAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;SAC9F;IACL,CAAC;IAMD,SAAS,gBAAgB,CAAC,KAAuB,EAAE,KAAoB,EAAE,GAAW;QAChF,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,IAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,MAAM,CAAC,IAAI,CAACA,OAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;YAC7C,MAAM,CAAC,IAAI,CAACA,OAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;SAChD;QACD,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,SAAS,iBAAiB,CAAC,KAAwB;QAC/C,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;IACzB,CAAC;IAED,SAAS,kBAAkB,CAAC,IAAkB;QAC1C,IAAM,cAAc,GAAuB,GAAG,CAAC,IAAI,EAAE,UAAC,IAAI;YACtD,QAAC,OAAO,IAAI,KAAK,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI;SAAC,CACnD,CAAC;QAEF,OAAO,UAAU,KAAK,EAAE,KAAK,EAAE,GAAG;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,IAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAI,GAAG,IAAI,IAAI,EAAE;oBACb,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAGA,OAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;iBAC3C;aACJ;SACJ,CAAC;IACN,CAAC;IAED,IAAM,gBAAgB,GAA0D;QAC5E,MAAM,EAAE,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/C,QAAQ,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;QAC/C,OAAO,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;KAEjD,CAAC;IAQF,SAAS,iBAAiB,CAAC,EAAe;QACtC,IAAM,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,OAAO,EAAE;gBACrC,OAAO,IAAI,CAAC;aACf;SACJ;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;AAED,aAAgB,YAAY,CAAC,EAAQ,EAAE,KAAiB;QACpD,IAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;QACvB,IAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;QACvB,IAAM,aAAa,GAAG,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAChD,IAAM,KAAK,GAAkB,EAAE,CAAC;QAChC,IAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC;QACrC,IAAI,SAAS,GAAG,MAAM,CAAC;QACvB,IAAM,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC;QAC7C,IAAM,SAAS,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,gBAAgB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAEhE,IAAI,aAAa;eAGV,CAAC,KAAK,CAAC,UAAU;eACjB,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;eAE/C,EAAE,YAAY,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;eACxC,EAAE,aAAa,GAAG,CAAC,CAAC,EACzB;YACE,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC;YACpB,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YACpC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;SACvC;aACI;YACD,IAAM,aAAa,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC;YACpD,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;gBACV,EAAE,CAAC,eAAe,EAAE,CAAC;aACxB;YACD,IAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;YAErB,IAAI,aAAa,EAAE;gBACf,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC7B,EAAE,CAAC,WAAW,EAAE,CAAC;aACpB;YACD,IAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACtC,IAAM,KAAK,GAAG,EAA0B,CAAC;YAEzC,IAAI,cAAc,GAAG,KAAK,CAAC,gBAAgB,CAAC;YAC5C,IAAI,KAAK,CAAC,gBAAgB,KAAK,WAAW;mBACnC,CAAC,cAAc;mBACf,aAAa,KAAK,KAAK,CAAC,sBAAsB,EACnD;gBACE,IAAI,CAAC,cAAc,EAAE;oBACjB,cAAc,GAAG,KAAK,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;iBACpE;gBACD,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAChC,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;gBAChD,cAAc,CAAC,WAAW,EAAE,CAAC;gBAC7B,KAAK,CAAC,gBAAgB,GAAG,WAAW,CAAC;gBACrC,KAAK,CAAC,sBAAsB,GAAG,aAAa,CAAC;aAChD;YAED,KAAK,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;SACrC;QAED,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QAClC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QACvC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAEvB,KAAK,CAAC,SAAS,IAAI,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACxD,KAAK,CAAC,QAAQ,IAAI,iBAAiB,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAEtD,OAAO,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;AAED,aAAgB,aAAa,CAAC,EAAW,EAAE,KAAiB;QACxD,IAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;QACvB,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAExB,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YAC3B,IAAIC,aAAW,CAAC,KAAK,CAAC,EAAE;gBACpB,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;aACrB;iBAEI,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;gBAC1B,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;aAC7B;SACJ;QAED,IAAI,CAAC,KAAK,EAAE;YACR,OAAO;SACV;QAED,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QACvB,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QAEvB,IAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC;QACvB,IAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;QAExB,IAAM,KAAK,GAAkB;YACzB,IAAI,EAAE,KAAe;YACrB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;SACb,CAAC;QACF,IAAI,CAAC,EAAE;YACH,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;SACf;QACD,IAAI,CAAC,EAAE;YACH,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;SACf;QAED,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QAClC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QACvC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAEvB,KAAK,CAAC,SAAS,IAAI,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAExD,OAAO,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;AAAA,aAEe,aAAa,CAAC,EAAS,EAAE,KAAiB;QACtD,IAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;QAEvB,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAEtB,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YAC3C,OAAO;SACV;QAGD,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,YAAY,CAAC;QAIxC,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QACvB,IAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QAC7E,IAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,SAA8C,CAAC;eACrF,KAAK,CAAC,SAAS,CAAC;QAEvB,IAAM,KAAK,GAAkB;YACzB,mBAAmB,EAAE,SAAS;YAC9B,aAAa,EAAE,SAAS;SAC3B,CAAC;QAEF,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE;YAExB,IAAI,gBAAgB,GAAG,EAAE,CAAC;YAC1B,IAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;YAClC,IAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gBACvB,OAAO;aACV;YAED,IAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,mBAAmB,CAAC;YAC3D,IAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;YACpC,gBAAgB,IAAI,eAAa,QAAQ,qBAAgB,UAAU,MAAG,CAAC;YAGvE,IAAI,SAAS,IAAI,SAAS,KAAK,QAAQ,EAAE;gBACrC,gBAAgB,IAAI,gBAAc,SAAS,MAAG,CAAC;aAClD;YACD,IAAI,UAAU,IAAI,UAAU,KAAK,QAAQ,EAAE;gBACvC,gBAAgB,IAAI,iBAAe,UAAU,MAAG,CAAC;aACpD;YACD,KAAK,CAAC,KAAK,GAAG,gBAAgB,CAAC;SAClC;aACI;YAED,KAAK,CAAC,KAAK,GAAG,WAAS,IAAM,CAAC;SACjC;QAGD,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAElB,KAAK,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC;SACnC;QACD,IAAI,CAAC,EAAE;YACH,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;SACf;QACD,IAAI,CAAC,EAAE;YACH,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;SACf;QACD,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QAClC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QACvC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAEvB,KAAK,CAAC,SAAS,IAAI,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAExD,OAAO,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACnE,CAAC;AAED,aAAgBC,OAAK,CAAC,EAAe,EAAE,KAAiB;QACpD,IAAI,EAAE,YAAY,IAAI,EAAE;YACpB,OAAO,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;SAClC;aACI,IAAI,EAAE,YAAY,OAAO,EAAE;YAC5B,OAAO,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;SACnC;aACI,IAAI,EAAE,YAAY,KAAK,EAAE;YAC1B,OAAO,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;SACnC;IACL,CAAC;IAED,SAAS,SAAS,CACd,EAAe,EACf,KAAoB,EACpB,KAAiB;QAEjB,IAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;QACvB,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;YAClB,IAAM,SAAS,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;YACnC,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;YACtC,IAAI,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;YACtC,IAAI,CAAC,QAAQ,EAAE;gBACX,IAAM,WAAW,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC;gBACxC,IAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE;oBACpB,OAAO;iBACV;gBAED,IAAM,OAAO,GAAG,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;gBACzC,IAAM,OAAO,GAAG,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;gBACzC,IAAM,MAAI,GAAG,KAAK,CAAC,UAAU,CAAC;gBACxB,IAAA,KAAmB,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,EAAnD,OAAO,aAAA,EAAE,KAAK,WAAqC,CAAC;gBAC3D,IAAM,KAAK,GAAG,MAAI,GAAG,CAAC,GAAG,MAAM,CAAC;gBAChC,IAAM,KAAK,GAAG,MAAI,GAAG,CAAC,GAAG,MAAM,CAAC;gBAChC,IAAM,YAAY,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC;gBAEzC,QAAQ,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;gBACjD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,WAAW,CAC9B,QAAQ,EAAE,QAAQ,EAClB;oBACI,IAAI,EAAE,QAAQ;oBACd,GAAG,EAAE,OAAO;oBACZ,GAAG,EAAE,OAAO;oBACZ,OAAO,EAAE,MAAM;oBACf,QAAQ,EAAE,MAAM;iBACnB,EACD;oBACI,WAAW,CAAC,cAAc,EAAE,EAAE,EAAE;wBAC5B,IAAI,EAAE,OAAO,GAAG,MAAM;wBACtB,IAAI,EAAE,OAAO,GAAG,MAAM;wBACtB,cAAc,EAAE,YAAY;wBAC5B,aAAa,EAAE,KAAK;wBACpB,eAAe,EAAE,OAAO;qBAC3B,CAAC;iBACL,CACJ,CAAC;gBACF,WAAW,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;aACrC;YACD,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;SACrC;IACL,CAAC;AAED,aAAgB,WAAW,CACvB,KAAqB,EACrB,KAAoB,EACpB,MAAyB,EACzB,KAAiB;QAEjB,IAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAmB,CAAC;QAC5C,IAAI,WAAW,CAAC;QAChB,IAAI,aAAa,GAAkB;YAC/B,eAAe,EAAE,GAAG,CAAC,MAAM;kBACrB,gBAAgB;kBAChB,mBAAmB;SAC5B,CAAC;QACF,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE;YACvB,WAAW,GAAG,gBAAgB,CAAC;YAC/B,aAAa,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;YACzB,aAAa,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;YACzB,aAAa,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;YAC1B,aAAa,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;SAC7B;aACI,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE;YAC5B,WAAW,GAAG,gBAAgB,CAAC;YAC/B,aAAa,CAAC,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACzC,aAAa,CAAC,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACzC,aAAa,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3C;aACI;YACD,AAA2C;gBACvC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;aACtC;YACD,OAAO;SACV;QAED,IAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC;QAE9B,IAAM,UAAU,GAAG,EAAE,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;YAC/C,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;YAEpD,IAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAE5B,IAAA,KAAmB,cAAc,CAAC,SAAS,CAAC,EAA3C,KAAK,WAAA,EAAE,OAAO,aAA6B,CAAC;YAEnD,IAAM,UAAU,GAAkB;gBAC9B,QAAQ,EAAE,MAAM;aACnB,CAAC;YAOF,UAAU,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC;YACjC,IAAI,OAAO,GAAG,CAAC,EAAE;gBACb,UAAU,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC;aACxC;YACD,UAAU,CAAC,IAAI,CACX,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAC1C,CAAC;SACL;QAGD,IAAM,aAAa,GAAG,WAAW,CAAC,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;QAC9E,IAAM,WAAW,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;QACjD,IAAM,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;QAC1C,IAAI,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,EAAE;YACb,UAAU,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YACrD,aAAa,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC;YAExC,aAAa,CAAC,EAAE,GAAG,UAAU,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,WAAW,CAChC,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,CACrD,CAAC;SACL;QAED,KAAK,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;AAED,aAAgB,UAAU,CACtB,EAAe,EACf,KAAoB,EACpB,MAAyB,EACzB,KAAiB;QAEjB,IAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAA0C,CAAC;QACtE,IAAM,YAAY,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC;QAC1C,IAAM,YAAY,GAAkB,EAAE,CAAC;QACvC,IAAM,MAAM,GAAI,GAA0B,CAAC,MAAM,CAAC;QAClD,IAAM,QAAQ,GAAG,MAAM,KAAK,WAAW,CAAC;QACxC,IAAM,OAAO,GAAG,MAAM,KAAK,UAAU,CAAC;QACtC,IAAM,OAAO,GAAG,MAAM,KAAK,UAAU,CAAC;QACtC,IAAI,KAAe,CAAC;QACpB,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE;YACrB,IAAI,YAAU,GAAG,GAAG,CAAC,UAAU,CAAC;YAChC,IAAI,aAAW,GAAG,GAAG,CAAC,WAAW,CAAC;YAClC,IAAI,QAAQ,SAAA,CAAC;YACb,IAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC;YAC/B,IAAI,QAAQ,CAAC,YAAY,CAAC,EAAE;gBACxB,QAAQ,GAAG,YAAY,CAAC;aAC3B;iBACI,IAAID,aAAW,CAAC,YAAY,CAAC,EAAE;gBAChC,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC;aAC/B;iBACI,IAAI,YAAY,CAAC,YAAY,CAAC,EAAE;gBACjC,QAAQ,GAAG,YAAY,CAAC,SAAS,EAAE,CAAC;aACvC;YAED,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;gBAC9B,IAAM,MAAM,GAAG,mEAAmE,CAAC;gBACnF,MAAM,CAAC,YAAU,EAAE,MAAM,CAAC,CAAC;gBAC3B,MAAM,CAAC,aAAW,EAAE,MAAM,CAAC,CAAC;aAC/B;iBACI,IAAI,YAAU,IAAI,IAAI,IAAI,aAAW,IAAI,IAAI,EAAE;gBAEhD,IAAM,gBAAc,GAAG,UAAC,KAAe,EAAE,GAAc;oBACnD,IAAI,KAAK,EAAE;wBACP,IAAM,KAAK,GAAG,KAAK,CAAC,GAAiB,CAAC;wBACtC,IAAI,KAAK,GAAG,YAAU,IAAI,GAAG,CAAC,KAAK,CAAC;wBACpC,IAAI,MAAM,GAAG,aAAW,IAAI,GAAG,CAAC,MAAM,CAAC;wBACvC,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;4BACzB,IAAI,OAAO,EAAE;gCACT,MAAM,GAAG,CAAC,CAAC;gCACX,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC;6BAC/B;iCACI,IAAI,OAAO,EAAE;gCACd,KAAK,GAAG,CAAC,CAAC;gCACV,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC;6BACjC;yBACJ;wBACD,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;wBAC1B,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;wBAC5B,IAAI,KAAK,EAAE;4BACP,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,KAAY,CAAC,CAAC;4BAC1C,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAa,CAAC,CAAC;yBAC/C;qBACJ;iBACJ,CAAC;gBACF,IAAM,YAAY,GAAG,mBAAmB,CACpC,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,UAAC,GAAG;oBACpB,QAAQ,IAAI,gBAAc,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;oBAC9C,gBAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;iBAC9B,CACJ,CAAC;gBACF,IAAI,YAAY,IAAI,YAAY,CAAC,KAAK,IAAI,YAAY,CAAC,MAAM,EAAE;oBAE3D,YAAU,GAAG,YAAU,IAAI,YAAY,CAAC,KAAK,CAAC;oBAC9C,aAAW,GAAG,aAAW,IAAI,YAAY,CAAC,MAAM,CAAC;iBACpD;aACJ;YAED,KAAK,GAAG,WAAW,CACf,OAAO,EACP,KAAK,EACL;gBACI,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,YAAU;gBACjB,MAAM,EAAE,aAAW;aACtB,CACJ,CAAC;YACF,YAAY,CAAC,KAAK,GAAG,YAAU,CAAC;YAChC,YAAY,CAAC,MAAM,GAAG,aAAW,CAAC;SACrC;aACI,IAAI,GAAG,CAAC,UAAU,EAAE;YAErB,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC9B,YAAY,CAAC,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC;YAClC,YAAY,CAAC,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC;SACvC;QACD,IAAI,CAAC,KAAK,EAAE;YACR,OAAO;SACV;QAED,IAAI,YAAY,CAAC;QACjB,IAAI,aAAa,CAAC;QAClB,IAAI,QAAQ,EAAE;YACV,YAAY,GAAG,aAAa,GAAG,CAAC,CAAC;SACpC;aACI,IAAI,OAAO,EAAE;YACd,aAAa,GAAG,CAAC,CAAC;YAClB,YAAY,GAAI,YAAY,CAAC,KAAgB,GAAG,YAAY,CAAC,KAAK,CAAC;SACtE;aACI,IAAI,OAAO,EAAE;YACd,YAAY,GAAG,CAAC,CAAC;YACjB,aAAa,GAAI,YAAY,CAAC,MAAiB,GAAG,YAAY,CAAC,MAAM,CAAC;SACzE;aACI;YACD,YAAY,CAAC,YAAY,GAAG,gBAAgB,CAAC;SAChD;QAED,IAAI,YAAY,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;YAC9C,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC;SACrC;QACD,IAAI,aAAa,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;YAChD,YAAY,CAAC,MAAM,GAAG,aAAa,CAAC;SACvC;QAED,IAAM,gBAAgB,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACpD,gBAAgB,KAAK,YAAY,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,CAAC;QAGvE,IAAI,YAAY,GAAG,WAAW,CAC1B,SAAS,EACT,EAAE,EACF,YAAY,EACZ,CAAC,KAAK,CAAC,CACV,CAAC;QACF,IAAM,UAAU,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;QAC/C,IAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QACxC,IAAI,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,EAAE;YACZ,SAAS,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;YACnD,YAAY,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;YACrC,YAAY,CAAC,EAAE,GAAG,SAAS,CAAC;YAC5B,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAC9C,SAAS,EACT,SAAS,EACT,YAAY,EACZ,CAAC,KAAK,CAAC,CACV,CAAC;SACL;QAED,KAAK,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;AAED,aAAgB,WAAW,CACvB,QAAc,EACd,KAAoB,EACpB,KAAiB;QAEV,IAAA,aAAa,GAAU,KAAK,cAAf,EAAE,IAAI,GAAI,KAAK,KAAT,CAAU;QACpC,IAAI,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,EAAE;YACb,UAAU,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YACrD,IAAM,aAAa,GAAkB;gBACjC,EAAE,EAAE,UAAU;aACjB,CAAC;YAEF,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;YACxC,IAAI,CAAC,UAAU,CAAC,GAAG,WAAW,CAC1B,UAAU,EAAE,UAAU,EAAE,aAAa,EACrC,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAClC,CAAC;SACL;QACD,KAAK,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;;aCppBe,cAAc,CAAC,IAAY;QACvC,OAAO,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;AAED,aAIgB,YAAY,CACxB,UAAgB,EAChB,OAAa,EACb,aAA0B;QAE1B,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACpD,CAAC;AAED,aAAgB,WAAW,CAAC,IAAU,EAAE,KAAW;QAC/C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AAED,aAAgB,WAAW,CAAC,IAAU,EAAE,KAAW;QAC/C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AAED,aAAgB,UAAU,CAAC,IAAU;QACjC,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;AAED,aAAgB,WAAW,CAAC,IAAU;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;AAED,aAIgB,cAAc,CAAC,IAAU,EAAE,IAAmB;QAC1D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC5B,CAAC;;ICxBD,IAAM,SAAS,GAAG,EAAE,CAAC;IACrB,IAAM,KAAK,GAAG,GAAG,CAAC;IAClB,IAAM,SAAS,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAItC,SAAS,OAAO,CAAC,CAAM;QACnB,OAAO,CAAC,KAAK,SAAS,CAAC;IAC3B,CAAC;IAED,SAAS,KAAK,CAAI,CAAI;QAClB,OAAO,CAAC,KAAK,SAAS,CAAC;IAC3B,CAAC;IAED,SAAS,iBAAiB,CACtB,QAAoB,EACpB,QAAgB,EAChB,MAAc;QAEd,IAAM,GAAG,GAAkB,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC,EAAE;YACrC,IAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC5B,IAAI,GAAG,KAAK,SAAS,EAAE;gBACnB,AAA2C;oBACvC,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;wBAClB,OAAO,CAAC,KAAK,CAAC,mBAAiB,GAAK,CAAC,CAAC;qBACzC;iBACJ;gBACD,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAChB;SACJ;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,SAAS,SAAS,CAAC,MAAgB,EAAE,MAAgB;QACjD,IAAM,SAAS,GAAG,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC;QAC5C,IAAM,SAAS,GAAG,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC;QAE5C,OAAO,SAAS,IAAI,SAAS,CAAC;IAClC,CAAC;IAID,SAAS,SAAS,CAAC,KAAe;QAC9B,IAAI,CAAM,CAAC;QACX,IAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAChC,IAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;QAQtB,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;YACZ,IAAM,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;YAE7C,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAE9B,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;gBACnB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;oBAClC,IAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACvB,IAAI,EAAE,IAAI,IAAI,EAAE;wBACZE,WAAe,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;qBACvC;iBACJ;aACJ;iBACI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;gBACjDA,WAAe,CAAC,GAAG,EAAEC,cAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;aACxD;SACJ;aACI;YACD,KAAK,CAAC,GAAG,GAAGA,cAAkB,CAAC,KAAK,CAAC,IAAK,CAAC,CAAC;SAC/C;QACD,OAAO,KAAK,CAAC,GAAG,CAAC;IACrB,CAAC;IAED,SAAS,SAAS,CACd,SAAe,EACf,MAAmB,EACnB,MAAkB,EAClB,QAAgB,EAChB,MAAc;QAEd,OAAO,QAAQ,IAAI,MAAM,EAAE,EAAE,QAAQ,EAAE;YACnC,IAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5B,IAAI,EAAE,IAAI,IAAI,EAAE;gBACZC,YAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;aACtD;SACJ;IACL,CAAC;IAED,SAAS,YAAY,CAAC,SAAe,EAAE,MAAkB,EAAE,QAAgB,EAAE,MAAc;QACvF,OAAO,QAAQ,IAAI,MAAM,EAAE,EAAE,QAAQ,EAAE;YACnC,IAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5B,IAAI,EAAE,IAAI,IAAI,EAAE;gBACZ,IAAI,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;oBACf,IAAM,QAAM,GAAGC,UAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACtCC,WAAe,CAAC,QAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;iBACnC;qBACI;oBAEDA,WAAe,CAAC,SAAS,EAAE,EAAE,CAAC,GAAI,CAAC,CAAC;iBACvC;aACJ;SACJ;IACL,CAAC;AAED,aAAgB,WAAW,CAAC,QAAkB,EAAE,KAAe;QAC3D,IAAI,GAAW,CAAC;QAChB,IAAM,GAAG,GAAG,KAAK,CAAC,GAAiB,CAAC;QACpC,IAAM,QAAQ,GAAG,QAAQ,IAAI,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;QAClD,IAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;QAEhC,IAAI,QAAQ,KAAK,KAAK,EAAE;YACpB,OAAO;SACV;QAID,KAAK,GAAG,IAAI,KAAK,EAAE;YACf,IAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACvB,IAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,GAAG,KAAK,GAAG,EAAE;gBACb,IAAI,GAAG,KAAK,IAAI,EAAE;oBACd,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;iBAC7B;qBACI,IAAI,GAAG,KAAK,KAAK,EAAE;oBACpB,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;iBAC5B;qBACI;oBACD,IAAI,GAAG,KAAK,OAAO,EAAE;wBACjB,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,GAAa,CAAC;qBACrC;yBACI,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;wBAClC,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,GAAU,CAAC,CAAC;qBACrC;yBAEI,IAAI,GAAG,KAAK,aAAa,IAAI,GAAG,KAAK,OAAO,EAAE;wBAC/C,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,GAAU,CAAC,CAAC;qBAC9C;yBACI,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;wBAEtC,GAAG,CAAC,cAAc,CAAC,aAAa,EAAE,GAAG,EAAE,GAAU,CAAC,CAAC;qBACtD;yBACI,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;wBAEtC,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,GAAU,CAAC,CAAC;qBAChD;yBACI;wBACD,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,GAAU,CAAC,CAAC;qBACrC;iBACJ;aACJ;SACJ;QAKD,KAAK,GAAG,IAAI,QAAQ,EAAE;YAClB,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,EAAE;gBACjB,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;aAC5B;SACJ;IACL,CAAC;IAGD,SAAS,cAAc,CAAC,SAAe,EAAE,KAAiB,EAAE,KAAiB;QACzE,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACjC,IAAI,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACjC,IAAI,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,WAAsC,CAAC;QAC3C,IAAI,QAAgB,CAAC;QACrB,IAAI,SAAmB,CAAC;QACxB,IAAI,MAAW,CAAC;QAEhB,OAAO,WAAW,IAAI,SAAS,IAAI,WAAW,IAAI,SAAS,EAAE;YACzD,IAAI,aAAa,IAAI,IAAI,EAAE;gBACvB,aAAa,GAAG,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;aACxC;iBACI,IAAI,WAAW,IAAI,IAAI,EAAE;gBAC1B,WAAW,GAAG,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;aACpC;iBACI,IAAI,aAAa,IAAI,IAAI,EAAE;gBAC5B,aAAa,GAAG,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;aACxC;iBACI,IAAI,WAAW,IAAI,IAAI,EAAE;gBAC1B,WAAW,GAAG,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;aACpC;iBACI,IAAI,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE;gBAC9C,UAAU,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;gBACzC,aAAa,GAAG,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;gBACrC,aAAa,GAAG,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;aACxC;iBACI,IAAI,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE;gBAC1C,UAAU,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;gBACrC,WAAW,GAAG,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;gBACjC,WAAW,GAAG,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;aACpC;iBACI,IAAI,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,EAAE;gBAE5C,UAAU,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;gBACvCF,YAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,GAAI,EAAEG,WAAe,CAAC,WAAW,CAAC,GAAI,CAAC,CAAC,CAAC;gBACnF,aAAa,GAAG,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;gBACrC,WAAW,GAAG,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;aACpC;iBACI,IAAI,SAAS,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE;gBAE5C,UAAU,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;gBACvCH,YAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,GAAI,EAAE,aAAa,CAAC,GAAI,CAAC,CAAC;gBAClE,WAAW,GAAG,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;gBACjC,aAAa,GAAG,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;aACxC;iBACI;gBACD,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE;oBACtB,WAAW,GAAG,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;iBAClE;gBACD,QAAQ,GAAG,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;gBAC1C,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;oBAEnBA,YAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,GAAI,CAAC,CAAC;iBAC7E;qBACI;oBACD,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAC5B,IAAI,SAAS,CAAC,GAAG,KAAK,aAAa,CAAC,GAAG,EAAE;wBACrCA,YAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,GAAI,CAAC,CAAC;qBAC7E;yBACI;wBACD,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;wBACrC,KAAK,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;wBAC5BA,YAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,GAAI,EAAE,aAAa,CAAC,GAAI,CAAC,CAAC;qBACnE;iBACJ;gBACD,aAAa,GAAG,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;aACxC;SACJ;QACD,IAAI,WAAW,IAAI,SAAS,IAAI,WAAW,IAAI,SAAS,EAAE;YACtD,IAAI,WAAW,GAAG,SAAS,EAAE;gBACzB,MAAM,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBACxE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;aAC/D;iBACI;gBACD,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;aAC1D;SACJ;IACL,CAAC;IAED,SAAS,UAAU,CAAC,QAAkB,EAAE,KAAe;QACnD,IAAM,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAE,CAAC;QACxC,IAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAChC,IAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC1B,IAAI,QAAQ,KAAK,KAAK,EAAE;YACpB,OAAO;SACV;QAED,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE7B,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YACrB,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE;gBAC3B,IAAI,KAAK,KAAK,EAAE,EAAE;oBACd,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;iBAClC;aACJ;iBACI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE;gBAChB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;oBACtBI,cAAkB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;iBAC/B;gBACD,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;aAC9C;iBACI,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;gBACnB,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;aACjD;iBACI,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBAC3BA,cAAkB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;aAC/B;SACJ;aACI,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;YACnC,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;gBACd,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;aACjD;YACDA,cAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,IAAK,CAAC,CAAC;SACxC;IACL,CAAC;AAED,aAAwB,KAAK,CAAC,QAAkB,EAAE,KAAe;QAC7D,IAAI,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAC5B,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;SAC/B;aACI;YACD,IAAM,GAAG,GAAG,QAAQ,CAAC,GAAI,CAAC;YAC1B,IAAM,QAAM,GAAGH,UAAc,CAAC,GAAG,CAAC,CAAC;YAEnC,SAAS,CAAC,KAAK,CAAC,CAAC;YAEjB,IAAI,QAAM,KAAK,IAAI,EAAE;gBACjBD,YAAgB,CAAC,QAAM,EAAE,KAAK,CAAC,GAAI,EAAEG,WAAe,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3D,YAAY,CAAC,QAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;aAC1C;SACJ;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;;IChSD,IAAI,KAAK,GAAG,CAAC,CAAC;IAUd;QAwBI,oBAAY,IAAiB,EAAE,OAAgB,EAAE,IAAsB;YAtBvE,SAAI,GAAG,KAAK,CAAA;YAwTZ,iBAAY,GAAG,sBAAsB,CAAC,cAAc,CAAgC,CAAC;YACrF,gBAAW,GAAG,sBAAsB,CAAC,aAAa,CAA+B,CAAC;YAlS9E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAErC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YAEjB,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC;YAE1B,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAEzD,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;gBACnB,IAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAChE,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,mCAAmC,CAAC;gBAC7D,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;gBACxE,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBAClC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBAC7B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;aAC9B;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;SACxC;QAED,4BAAO,GAAP;YACI,OAAO,IAAI,CAAC,IAAI,CAAC;SACpB;QAED,oCAAe,GAAf;YACI,OAAO,IAAI,CAAC,SAAS,CAAC;SACzB;QACD,0CAAqB,GAArB;YACI,IAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YAC5C,IAAI,YAAY,EAAE;gBACd,OAAO;oBACH,UAAU,EAAE,YAAY,CAAC,UAAU,IAAI,CAAC;oBACxC,SAAS,EAAE,YAAY,CAAC,SAAS,IAAI,CAAC;iBACzC,CAAC;aACL;SACJ;QAED,8BAAS,GAAT;YACI,OAAO,IAAI,CAAC,OAAO,CAAC;SACvB;QAED,4BAAO,GAAP;YACI,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,IAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC;oBAC7B,UAAU,EAAE,IAAI;iBACnB,CAAC,CAAC;gBAEH,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,iDAAiD,CAAC;gBACtE,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC7B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;aAC1B;SACJ;QAED,qCAAgB,GAAhB,UAAiB,EAAe;YAC5B,OAAON,OAAK,CAAC,EAAE,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;SAChD;QAED,kCAAa,GAAb,UAAc,IAMb;YAEG,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAElB,IAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;YAC1B,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;YAE5B,IAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACnC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/B,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/B,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAE3B,IAAM,QAAQ,GAAe,EAAE,CAAC;YAEhC,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;YACnG,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAGlC,IAAM,SAAS,GAAG,CAAC,IAAI,CAAC,QAAQ;mBACzB,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC;YAClE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;YACxE,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEtC,IAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,UAAC,EAAE,IAAK,OAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAA,CAAC,CAAC;YAC3D,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;aACxD;YAED,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAM,eAAe,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxF,IAAI,eAAe,EAAE;oBACjB,IAAM,SAAS,GAAG,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC;oBACvE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBAC5B;aACJ;YAED,OAAO,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;SACnE;QAED,mCAAc,GAAd,UAAe,IAgBd;YACG,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAClB,OAAO,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;gBACpC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC;gBAC7C,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;gBAC3C,UAAU,EAAE,KAAK;gBACjB,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;aAC/C,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;SAC1B;QAED,uCAAkB,GAAlB,UAAmB,eAA0C;YACzD,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;SAC3C;QAED,+BAAU,GAAV;YACI,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,GAAiB,CAAC;SAC/D;QAED,+BAAU,GAAV,UAAW,IAAmB,EAAE,KAAiB,EAAE,GAAgB;YAC/D,IAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;YAE5B,IAAM,oBAAoB,GAAe,EAAE,CAAC;YAC5C,IAAI,yBAAyB,GAAG,CAAC,CAAC;YAClC,IAAI,oBAAoB,CAAC;YACzB,IAAI,aAAqB,CAAC;YAC1B,IAAI,gBAAgB,GAAG,CAAC,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;gBAC9B,IAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;oBACxB,IAAM,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC;oBAC1C,IAAM,GAAG,GAAG,SAAS,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC;oBAC/C,IAAM,OAAO,GAAG,aAAa,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC;oBAC3D,IAAI,GAAG,SAAA,CAAC;oBAER,KAAK,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE;wBACxD,IAAI,SAAS,IAAI,aAAa;+BACvB,SAAS,CAAC,GAAG,CAAC,KAAK,aAAa,CAAC,GAAG,CAAC,EAC1C;4BACE,MAAM;yBACT;qBACJ;oBAED,KAAK,IAAI,GAAC,GAAG,OAAO,GAAG,CAAC,EAAE,GAAC,GAAG,GAAG,EAAE,GAAC,EAAE,EAAE;wBACpC,yBAAyB,EAAE,CAAC;wBAE5B,oBAAoB,GAAG,oBAAoB,CAAC,yBAAyB,GAAG,CAAC,CAAC,CAAC;qBAC9E;oBAED,KAAK,IAAI,GAAC,GAAG,GAAG,GAAG,CAAC,EAAE,GAAC,GAAG,GAAG,EAAE,GAAC,EAAE,EAAE;wBAChC,IAAM,UAAU,GAAkB,EAAE,CAAC;wBACrC,WAAW,CACP,SAAS,CAAC,GAAC,CAAC,EACZ,UAAU,EACV,KAAK,CACR,CAAC;wBACF,IAAM,CAAC,GAAG,WAAW,CACjB,GAAG,EACH,SAAS,GAAG,gBAAgB,EAAE,EAC9B,UAAU,EACV,EAAE,CACL,CAAC;wBACF,CAAC,oBAAoB,GAAG,oBAAoB,CAAC,QAAQ,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;wBACrE,oBAAoB,CAAC,yBAAyB,EAAE,CAAC,GAAG,CAAC,CAAC;wBACtD,oBAAoB,GAAG,CAAC,CAAC;qBAC5B;oBACD,aAAa,GAAG,SAAS,CAAC;oBAE1B,IAAM,GAAG,GAAGA,OAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;oBACtC,IAAI,GAAG,EAAE;wBACL,CAAC,oBAAoB,GAAG,oBAAoB,CAAC,QAAQ,GAAG,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;qBAC1E;iBACJ;aACJ;SACJ;QAED,2BAAM,GAAN,UAAO,KAAa,EAAE,MAAc;YAEhC,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,IAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;YAChC,KAAK,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;YACtC,MAAM,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;YAEzC,IAAI,IAAI,IAAI,QAAQ,EAAE;gBAElB,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;gBAEhC,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC/B,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;gBAEhC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;aAC/B;YAED,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE;gBAClD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;gBACpB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;gBAEtB,IAAI,QAAQ,EAAE;oBACV,IAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC;oBACrC,aAAa,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;oBACnC,aAAa,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;iBACxC;gBAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;oBACnC,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;oBAC5B,IAAI,MAAM,EAAE;wBAER,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,KAAY,CAAC,CAAC;wBAC3C,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAa,CAAC,CAAC;qBAChD;oBAED,IAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAiB,CAAC;oBAC9D,IAAI,IAAI,EAAE;wBACN,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,KAAY,CAAC,CAAC;wBACzC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAa,CAAC,CAAC;qBAC9C;iBACJ;qBACI;oBAED,IAAI,CAAC,OAAO,EAAE,CAAC;iBAClB;aACJ;SACJ;QAKD,6BAAQ,GAAR;YACI,OAAO,IAAI,CAAC,MAAM,CAAC;SACtB;QAKD,8BAAS,GAAT;YACI,OAAO,IAAI,CAAC,OAAO,CAAC;SACvB;QAED,4BAAO,GAAP;YACI,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;aAC5B;YAED,IAAI,CAAC,OAAO;gBACZ,IAAI,CAAC,SAAS;oBACd,IAAI,CAAC,OAAO;wBACZ,IAAI,CAAC,SAAS;4BACd,IAAI,CAAC,QAAQ;gCACb,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;SAC1B;QACD,0BAAK,GAAL;YACI,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;aACjC;YACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;SACzB;QACD,8BAAS,GAAT,UAAU,MAAgB;YACtB,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAChC,IAAM,MAAM,GAAG,qBAAqB,CAAC;YACrC,IAAI,MAAM,EAAE;gBACR,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;gBACxB,OAAO,GAAG,IAAI,MAAM,GAAG,SAAS,GAAG,GAAG,CAAC;aAC1C;YACD,OAAO,MAAM,GAAG,gBAAgB,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;SAC9D;QAIL,iBAAC;IAAD,CAAC,IAAA;IAID,SAAS,sBAAsB,CAAC,MAAc;QAC1C,OAAO;YACH,AAA2C;gBACvC,QAAQ,CAAC,0CAA0C,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC;aACvE;SACJ,CAAC;IACN,CAAC;IAED,SAAS,qBAAqB,CAC1B,KAAa,EACb,MAAc,EACd,eAA0C,EAC1C,KAAiB;QAEjB,IAAI,OAAO,CAAC;QACZ,IAAI,eAAe,IAAI,eAAe,KAAK,MAAM,EAAE;YAC/C,OAAO,GAAG,WAAW,CACjB,MAAM,EACN,IAAI,EACJ;gBACI,KAAK,OAAA;gBACL,MAAM,QAAA;gBACN,CAAC,EAAE,GAAG;gBACN,CAAC,EAAE,GAAG;aACT,CACJ,CAAC;YACF,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE;gBAC7B,WAAW,CAAC,EAAE,IAAI,EAAE,eAAsB,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;aAC/E;iBACI,IAAI,SAAS,CAAC,eAAe,CAAC,EAAE;gBACjC,UAAU,CAAC;oBACP,KAAK,EAAE;wBACH,IAAI,EAAE,eAAe;qBACxB;oBACD,KAAK,EAAE,IAAI;oBACX,eAAe,EAAE,cAAM,QAAC,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,IAAC;iBACtC,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;aAC3C;iBACI;gBACK,IAAA,KAAqB,cAAc,CAAC,eAAe,CAAC,EAAlD,KAAK,WAAA,EAAE,OAAO,aAAoC,CAAC;gBAC3D,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;gBAC3B,OAAO,GAAG,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,CAAC;aAC5D;SACJ;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;;ICjZD,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACzC,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy