{"version":3,"file":"DoubleSlider.mjs","sources":["../src/DoubleSlider.ts"],"sourcesContent":["import { Container, FederatedPointerEvent, Optional, Size, Texture } from 'pixi.js';\nimport { Signal } from 'typed-signals';\nimport { DoubleSliderOptions, SliderBase } from './SliderBase';\n\nimport type { DragObject } from './utils/HelpTypes';\n\n/**\n * Creates a slider with range selection option.\n * @example\n * const doubleSlider = new DoubleSlider({\n *      bg: 'slider_bg.png',\n *      fill: 'slider_progress.png',\n *      slider1: 'slider.png',\n *      slider2: 'slider.png',\n *  });\n *\n * doubleSlider.onChange.connect((value1, value2) =>\n *     console.log(`New slider range ${value1} - ${value2}`)S\n * );\n */\n\nexport class DoubleSlider extends SliderBase\n{\n    protected sliderOptions: DoubleSliderOptions;\n\n    protected activeValue: 'value1' | 'value2' | undefined;\n\n    /** Signal that fires when value have changed. */\n    onChange: Signal<(value1: number, value2: number) => void> = new Signal();\n\n    /** Signal that fires when value is changing. */\n    onUpdate: Signal<(value1: number, value2: number) => void> = new Signal();\n\n    constructor(options: DoubleSliderOptions)\n    {\n        super(options);\n\n        this.sliderOptions = options;\n        this.setInitialState();\n    }\n\n    protected setInitialState()\n    {\n        this.validateValues();\n\n        const { value1, value2 } = this.sliderOptions;\n\n        this.updateProgress(value1, value2);\n\n        this.value2 = value2 ?? 0;\n        this.value1 = value1 ?? 0;\n    }\n\n    protected updateProgress(value1 = this.value1, value2 = this.value2)\n    {\n        this.progressStart = ((value1 - this.min) / (this.max - this.min)) * 100;\n        this.progress = ((value2 - this.min) / (this.max - this.min)) * 100;\n    }\n\n    protected validateValues()\n    {\n        const min = this.sliderOptions.min ?? this.min;\n        const max = this.sliderOptions.max ?? this.max;\n\n        // Initialize missing values with safe defaults\n        if (!this.sliderOptions.value1)\n        {\n            this.sliderOptions.value1 = min;\n        }\n\n        if (!this.sliderOptions.value2)\n        {\n            this.sliderOptions.value2 = max;\n        }\n\n        let value1 = this.sliderOptions.value1 ?? min;\n        let value2 = this.sliderOptions.value2 ?? max;\n\n        // Ensure value2 is not less than value1\n        if (value2 < value1)\n        {\n            value2 = value1;\n        }\n\n        // Clamp values to min/max bounds\n        if (value1 < min)\n        {\n            value1 = min;\n        }\n\n        if (value1 > max)\n        {\n            value1 = max;\n        }\n\n        if (value2 > max)\n        {\n            value2 = max;\n        }\n\n        this.sliderOptions.value1 = value1;\n        this.sliderOptions.value2 = value2;\n    }\n\n    /** Returns left value. */\n    get value1(): number\n    {\n        return this._value1;\n    }\n\n    /** Sets left value. */\n    set value1(value1: number)\n    {\n        if (value1 === this._value1) return;\n\n        if (value1 < this.min) value1 = this.min;\n        if (value1 > this._value2) value1 = this._value2;\n\n        this._value1 = value1;\n\n        this.updateSlider1();\n\n        this.onUpdate?.emit(this.value1, this.value2);\n    }\n\n    /** Returns right value. */\n    get value2(): number\n    {\n        return this._value2;\n    }\n\n    /** Sets right value. */\n    set value2(value2: number)\n    {\n        if (value2 === this._value2) return;\n\n        if (value2 < this._value1) value2 = this._value1;\n        if (value2 > this.max) value2 = this.max;\n\n        this._value2 = value2;\n\n        this.updateSlider2();\n\n        this.onUpdate?.emit(this.value1, this.value2);\n    }\n\n    protected override update(event: FederatedPointerEvent)\n    {\n        super.update(event);\n\n        if (!this.dragging) return;\n\n        const obj = event.currentTarget as DragObject;\n        const { x } = obj.parent.worldTransform.applyInverse(event.global);\n\n        const slider1Dist = this._slider1 ? Math.abs(x - this._slider1.x - this._slider1.width) : Infinity;\n        const slider2Dist = this._slider2 ? Math.abs(x - this._slider2.x) : Infinity;\n\n        if (!this.activeValue)\n        {\n            if (this.slider1 && x < this.slider1.x)\n            {\n                this.activeValue = 'value1';\n            }\n            else if (this.slider2 && x > this.slider2.x)\n            {\n                this.activeValue = 'value2';\n            }\n            else\n            {\n                this.activeValue = slider1Dist < slider2Dist ? 'value1' : 'value2';\n            }\n        }\n\n        const progress = this.validate((x / this.bg?.width) * 100);\n\n        if (this.activeValue === 'value1')\n        {\n            this.progressStart = progress;\n            this.value1 = this.min + (((this.max - this.min) / 100) * progress);\n            this.updateProgress(this.value1, this.value2);\n        }\n        else\n        {\n            this.progress = progress;\n            this.value2 = this.min + (((this.max - this.min) / 100) * progress);\n            this.updateProgress(this.value1, this.value2);\n        }\n    }\n\n    protected override endUpdate()\n    {\n        super.endUpdate();\n\n        this.activeValue = undefined;\n    }\n\n    protected override change()\n    {\n        this.onChange?.emit(this.value1, this.value2);\n    }\n\n    /**\n     * Set Slider1 instance.\n     * @param value - Container or string with texture name.\n     */\n    override set slider1(value: Container | Texture | string)\n    {\n        super.slider1 = value;\n        this.updateSlider1();\n    }\n\n    /** Get Slider1 instance. */\n    override get slider1(): Container | undefined\n    {\n        return this._slider1;\n    }\n\n    /**\n     * Sets Slider instance.\n     * @param value - Container or string with texture name.\n     */\n    override set slider2(value: Container | string)\n    {\n        super.slider2 = value;\n        this.updateSlider2();\n    }\n\n    /** Get Slider2 instance. */\n    override get slider2(): Container | undefined\n    {\n        return this._slider2;\n    }\n\n    protected updateSlider1()\n    {\n        if (!this._slider1) return;\n\n        this.updateProgress(this.value1, this.value2);\n\n        this._slider1.x = ((this.bg?.width ?? 0) / 100 * this.progressStart) - (this._slider1.width / 2);\n        this._slider1.y = (this.bg?.height ?? 0) / 2;\n\n        if (this._slider2 && this._slider1.x > this._slider2.x)\n        {\n            this._slider1.x = this._slider2.x;\n        }\n\n        if (this.sliderOptions?.showValue && this.value1Text && this._slider1)\n        {\n            this.value1Text.text = `${Math.round(this.value1)}`;\n\n            const sliderPosX = this._slider1.x + (this._slider1.width / 2);\n            const sliderPosY = this._slider1.y;\n\n            this.value1Text.x = sliderPosX + (this.sliderOptions.valueTextOffset?.x ?? 0);\n            this.value1Text.y = sliderPosY + (this.sliderOptions.valueTextOffset?.y ?? 0);\n        }\n    }\n\n    protected updateSlider2()\n    {\n        if (!this._slider2) return;\n\n        this.updateProgress(this.value1, this.value2);\n\n        this._slider2.x = ((this.bg?.width ?? 0) / 100 * this.progress) - (this._slider2.width / 2);\n        this._slider2.y = (this.bg?.height ?? 0) / 2;\n\n        if (this._slider1 && this._slider2.x < this._slider1.x)\n        {\n            this._slider2.x = this._slider1.x;\n        }\n\n        if (this.sliderOptions?.showValue && this.value2Text && this._slider2)\n        {\n            this.value2Text.text = `${Math.round(this.value2)}`;\n\n            const sliderPosX = this._slider2.x + (this._slider2.width / 2);\n            const sliderPosY = this._slider2.y;\n\n            this.value2Text.x = sliderPosX + (this.sliderOptions.valueTextOffset?.x ?? 0);\n            this.value2Text.y = sliderPosY + (this.sliderOptions.valueTextOffset?.y ?? 0);\n        }\n    }\n\n    /**\n     * Sets width of a Sliders background and fill.\n     * If nineSliceSprite is set, then width will be set to nineSliceSprite.\n     * If nineSliceSprite is not set, then width will control components width as Container.\n     * @param value - Width value.\n     */\n    override set width(value: number)\n    {\n        super.width = value;\n\n        this.updateSlider1();\n        this.updateSlider2();\n    }\n\n    /** Gets width of a Slider. */\n    override get width(): number\n    {\n        return super.width;\n    }\n\n    /**\n     * Sets height of a Sliders background and fill.\n     * If nineSliceSprite is set, then height will be set to nineSliceSprite.\n     * If nineSliceSprite is not set, then height will control components height as Container.\n     * @param value - Height value.\n     */\n    override set height(value: number)\n    {\n        super.height = value;\n\n        this.updateSlider1();\n        this.updateSlider2();\n    }\n\n    /** Gets height of a Slider. */\n    override get height(): number\n    {\n        return super.height;\n    }\n\n    override setSize(value: number | Optional<Size, 'height'>, height?: number): void\n    {\n        super.setSize(value, height);\n\n        this.updateSlider1();\n        this.updateSlider2();\n    }\n}\n"],"names":[],"mappings":";;;;;;AAqBO,MAAM,qBAAqB,UAClC,CAAA;AAAA,EAWI,YAAY,OACZ,EAAA;AACI,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAZjB,IAAU,aAAA,CAAA,IAAA,EAAA,eAAA,CAAA,CAAA;AAEV,IAAU,aAAA,CAAA,IAAA,EAAA,aAAA,CAAA,CAAA;AAGV;AAAA,IAAA,aAAA,CAAA,IAAA,EAAA,UAAA,EAA6D,IAAI,MAAO,EAAA,CAAA,CAAA;AAGxE;AAAA,IAAA,aAAA,CAAA,IAAA,EAAA,UAAA,EAA6D,IAAI,MAAO,EAAA,CAAA,CAAA;AAMpE,IAAA,IAAA,CAAK,aAAgB,GAAA,OAAA,CAAA;AACrB,IAAA,IAAA,CAAK,eAAgB,EAAA,CAAA;AAAA,GACzB;AAAA,EAEU,eACV,GAAA;AACI,IAAA,IAAA,CAAK,cAAe,EAAA,CAAA;AAEpB,IAAA,MAAM,EAAE,MAAA,EAAQ,MAAO,EAAA,GAAI,IAAK,CAAA,aAAA,CAAA;AAEhC,IAAK,IAAA,CAAA,cAAA,CAAe,QAAQ,MAAM,CAAA,CAAA;AAElC,IAAA,IAAA,CAAK,SAAS,MAAU,IAAA,CAAA,CAAA;AACxB,IAAA,IAAA,CAAK,SAAS,MAAU,IAAA,CAAA,CAAA;AAAA,GAC5B;AAAA,EAEU,eAAe,MAAS,GAAA,IAAA,CAAK,MAAQ,EAAA,MAAA,GAAS,KAAK,MAC7D,EAAA;AACI,IAAA,IAAA,CAAK,iBAAkB,MAAS,GAAA,IAAA,CAAK,QAAQ,IAAK,CAAA,GAAA,GAAM,KAAK,GAAQ,CAAA,GAAA,GAAA,CAAA;AACrE,IAAA,IAAA,CAAK,YAAa,MAAS,GAAA,IAAA,CAAK,QAAQ,IAAK,CAAA,GAAA,GAAM,KAAK,GAAQ,CAAA,GAAA,GAAA,CAAA;AAAA,GACpE;AAAA,EAEU,cACV,GAAA;AACI,IAAA,MAAM,GAAM,GAAA,IAAA,CAAK,aAAc,CAAA,GAAA,IAAO,IAAK,CAAA,GAAA,CAAA;AAC3C,IAAA,MAAM,GAAM,GAAA,IAAA,CAAK,aAAc,CAAA,GAAA,IAAO,IAAK,CAAA,GAAA,CAAA;AAG3C,IAAI,IAAA,CAAC,IAAK,CAAA,aAAA,CAAc,MACxB,EAAA;AACI,MAAA,IAAA,CAAK,cAAc,MAAS,GAAA,GAAA,CAAA;AAAA,KAChC;AAEA,IAAI,IAAA,CAAC,IAAK,CAAA,aAAA,CAAc,MACxB,EAAA;AACI,MAAA,IAAA,CAAK,cAAc,MAAS,GAAA,GAAA,CAAA;AAAA,KAChC;AAEA,IAAI,IAAA,MAAA,GAAS,IAAK,CAAA,aAAA,CAAc,MAAU,IAAA,GAAA,CAAA;AAC1C,IAAI,IAAA,MAAA,GAAS,IAAK,CAAA,aAAA,CAAc,MAAU,IAAA,GAAA,CAAA;AAG1C,IAAA,IAAI,SAAS,MACb,EAAA;AACI,MAAS,MAAA,GAAA,MAAA,CAAA;AAAA,KACb;AAGA,IAAA,IAAI,SAAS,GACb,EAAA;AACI,MAAS,MAAA,GAAA,GAAA,CAAA;AAAA,KACb;AAEA,IAAA,IAAI,SAAS,GACb,EAAA;AACI,MAAS,MAAA,GAAA,GAAA,CAAA;AAAA,KACb;AAEA,IAAA,IAAI,SAAS,GACb,EAAA;AACI,MAAS,MAAA,GAAA,GAAA,CAAA;AAAA,KACb;AAEA,IAAA,IAAA,CAAK,cAAc,MAAS,GAAA,MAAA,CAAA;AAC5B,IAAA,IAAA,CAAK,cAAc,MAAS,GAAA,MAAA,CAAA;AAAA,GAChC;AAAA;AAAA,EAGA,IAAI,MACJ,GAAA;AACI,IAAA,OAAO,IAAK,CAAA,OAAA,CAAA;AAAA,GAChB;AAAA;AAAA,EAGA,IAAI,OAAO,MACX,EAAA;AACI,IAAI,IAAA,MAAA,KAAW,KAAK,OAAS,EAAA,OAAA;AAE7B,IAAA,IAAI,MAAS,GAAA,IAAA,CAAK,GAAK,EAAA,MAAA,GAAS,IAAK,CAAA,GAAA,CAAA;AACrC,IAAA,IAAI,MAAS,GAAA,IAAA,CAAK,OAAS,EAAA,MAAA,GAAS,IAAK,CAAA,OAAA,CAAA;AAEzC,IAAA,IAAA,CAAK,OAAU,GAAA,MAAA,CAAA;AAEf,IAAA,IAAA,CAAK,aAAc,EAAA,CAAA;AAEnB,IAAA,IAAA,CAAK,QAAU,EAAA,IAAA,CAAK,IAAK,CAAA,MAAA,EAAQ,KAAK,MAAM,CAAA,CAAA;AAAA,GAChD;AAAA;AAAA,EAGA,IAAI,MACJ,GAAA;AACI,IAAA,OAAO,IAAK,CAAA,OAAA,CAAA;AAAA,GAChB;AAAA;AAAA,EAGA,IAAI,OAAO,MACX,EAAA;AACI,IAAI,IAAA,MAAA,KAAW,KAAK,OAAS,EAAA,OAAA;AAE7B,IAAA,IAAI,MAAS,GAAA,IAAA,CAAK,OAAS,EAAA,MAAA,GAAS,IAAK,CAAA,OAAA,CAAA;AACzC,IAAA,IAAI,MAAS,GAAA,IAAA,CAAK,GAAK,EAAA,MAAA,GAAS,IAAK,CAAA,GAAA,CAAA;AAErC,IAAA,IAAA,CAAK,OAAU,GAAA,MAAA,CAAA;AAEf,IAAA,IAAA,CAAK,aAAc,EAAA,CAAA;AAEnB,IAAA,IAAA,CAAK,QAAU,EAAA,IAAA,CAAK,IAAK,CAAA,MAAA,EAAQ,KAAK,MAAM,CAAA,CAAA;AAAA,GAChD;AAAA,EAEmB,OAAO,KAC1B,EAAA;AACI,IAAA,KAAA,CAAM,OAAO,KAAK,CAAA,CAAA;AAElB,IAAI,IAAA,CAAC,KAAK,QAAU,EAAA,OAAA;AAEpB,IAAA,MAAM,MAAM,KAAM,CAAA,aAAA,CAAA;AAClB,IAAM,MAAA,EAAE,GAAM,GAAA,GAAA,CAAI,OAAO,cAAe,CAAA,YAAA,CAAa,MAAM,MAAM,CAAA,CAAA;AAEjE,IAAA,MAAM,WAAc,GAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAK,GAAI,CAAA,CAAA,GAAI,IAAK,CAAA,QAAA,CAAS,CAAI,GAAA,IAAA,CAAK,QAAS,CAAA,KAAK,CAAI,GAAA,QAAA,CAAA;AAC1F,IAAM,MAAA,WAAA,GAAc,KAAK,QAAW,GAAA,IAAA,CAAK,IAAI,CAAI,GAAA,IAAA,CAAK,QAAS,CAAA,CAAC,CAAI,GAAA,QAAA,CAAA;AAEpE,IAAI,IAAA,CAAC,KAAK,WACV,EAAA;AACI,MAAA,IAAI,IAAK,CAAA,OAAA,IAAW,CAAI,GAAA,IAAA,CAAK,QAAQ,CACrC,EAAA;AACI,QAAA,IAAA,CAAK,WAAc,GAAA,QAAA,CAAA;AAAA,iBAEd,IAAK,CAAA,OAAA,IAAW,CAAI,GAAA,IAAA,CAAK,QAAQ,CAC1C,EAAA;AACI,QAAA,IAAA,CAAK,WAAc,GAAA,QAAA,CAAA;AAAA,OAGvB,MAAA;AACI,QAAK,IAAA,CAAA,WAAA,GAAc,WAAc,GAAA,WAAA,GAAc,QAAW,GAAA,QAAA,CAAA;AAAA,OAC9D;AAAA,KACJ;AAEA,IAAA,MAAM,WAAW,IAAK,CAAA,QAAA,CAAU,IAAI,IAAK,CAAA,EAAA,EAAI,QAAS,GAAG,CAAA,CAAA;AAEzD,IAAI,IAAA,IAAA,CAAK,gBAAgB,QACzB,EAAA;AACI,MAAA,IAAA,CAAK,aAAgB,GAAA,QAAA,CAAA;AACrB,MAAA,IAAA,CAAK,SAAS,IAAK,CAAA,GAAA,GAAA,CAAS,KAAK,GAAM,GAAA,IAAA,CAAK,OAAO,GAAO,GAAA,QAAA,CAAA;AAC1D,MAAA,IAAA,CAAK,cAAe,CAAA,IAAA,CAAK,MAAQ,EAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,KAGhD,MAAA;AACI,MAAA,IAAA,CAAK,QAAW,GAAA,QAAA,CAAA;AAChB,MAAA,IAAA,CAAK,SAAS,IAAK,CAAA,GAAA,GAAA,CAAS,KAAK,GAAM,GAAA,IAAA,CAAK,OAAO,GAAO,GAAA,QAAA,CAAA;AAC1D,MAAA,IAAA,CAAK,cAAe,CAAA,IAAA,CAAK,MAAQ,EAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,KAChD;AAAA,GACJ;AAAA,EAEmB,SACnB,GAAA;AACI,IAAA,KAAA,CAAM,SAAU,EAAA,CAAA;AAEhB,IAAA,IAAA,CAAK,WAAc,GAAA,KAAA,CAAA,CAAA;AAAA,GACvB;AAAA,EAEmB,MACnB,GAAA;AACI,IAAA,IAAA,CAAK,QAAU,EAAA,IAAA,CAAK,IAAK,CAAA,MAAA,EAAQ,KAAK,MAAM,CAAA,CAAA;AAAA,GAChD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAa,QAAQ,KACrB,EAAA;AACI,IAAA,KAAA,CAAM,OAAU,GAAA,KAAA,CAAA;AAChB,IAAA,IAAA,CAAK,aAAc,EAAA,CAAA;AAAA,GACvB;AAAA;AAAA,EAGA,IAAa,OACb,GAAA;AACI,IAAA,OAAO,IAAK,CAAA,QAAA,CAAA;AAAA,GAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAa,QAAQ,KACrB,EAAA;AACI,IAAA,KAAA,CAAM,OAAU,GAAA,KAAA,CAAA;AAChB,IAAA,IAAA,CAAK,aAAc,EAAA,CAAA;AAAA,GACvB;AAAA;AAAA,EAGA,IAAa,OACb,GAAA;AACI,IAAA,OAAO,IAAK,CAAA,QAAA,CAAA;AAAA,GAChB;AAAA,EAEU,aACV,GAAA;AACI,IAAI,IAAA,CAAC,KAAK,QAAU,EAAA,OAAA;AAEpB,IAAA,IAAA,CAAK,cAAe,CAAA,IAAA,CAAK,MAAQ,EAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAE5C,IAAK,IAAA,CAAA,QAAA,CAAS,CAAM,GAAA,CAAA,IAAA,CAAK,EAAI,EAAA,KAAA,IAAS,CAAK,IAAA,GAAA,GAAM,IAAK,CAAA,aAAA,GAAkB,IAAK,CAAA,QAAA,CAAS,KAAQ,GAAA,CAAA,CAAA;AAC9F,IAAA,IAAA,CAAK,QAAS,CAAA,CAAA,GAAA,CAAK,IAAK,CAAA,EAAA,EAAI,UAAU,CAAK,IAAA,CAAA,CAAA;AAE3C,IAAA,IAAI,KAAK,QAAY,IAAA,IAAA,CAAK,SAAS,CAAI,GAAA,IAAA,CAAK,SAAS,CACrD,EAAA;AACI,MAAK,IAAA,CAAA,QAAA,CAAS,CAAI,GAAA,IAAA,CAAK,QAAS,CAAA,CAAA,CAAA;AAAA,KACpC;AAEA,IAAA,IAAI,KAAK,aAAe,EAAA,SAAA,IAAa,IAAK,CAAA,UAAA,IAAc,KAAK,QAC7D,EAAA;AACI,MAAA,IAAA,CAAK,WAAW,IAAO,GAAA,CAAA,EAAG,KAAK,KAAM,CAAA,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA,CAAA;AAEjD,MAAA,MAAM,aAAa,IAAK,CAAA,QAAA,CAAS,CAAK,GAAA,IAAA,CAAK,SAAS,KAAQ,GAAA,CAAA,CAAA;AAC5D,MAAM,MAAA,UAAA,GAAa,KAAK,QAAS,CAAA,CAAA,CAAA;AAEjC,MAAA,IAAA,CAAK,WAAW,CAAI,GAAA,UAAA,IAAc,IAAK,CAAA,aAAA,CAAc,iBAAiB,CAAK,IAAA,CAAA,CAAA,CAAA;AAC3E,MAAA,IAAA,CAAK,WAAW,CAAI,GAAA,UAAA,IAAc,IAAK,CAAA,aAAA,CAAc,iBAAiB,CAAK,IAAA,CAAA,CAAA,CAAA;AAAA,KAC/E;AAAA,GACJ;AAAA,EAEU,aACV,GAAA;AACI,IAAI,IAAA,CAAC,KAAK,QAAU,EAAA,OAAA;AAEpB,IAAA,IAAA,CAAK,cAAe,CAAA,IAAA,CAAK,MAAQ,EAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAE5C,IAAK,IAAA,CAAA,QAAA,CAAS,CAAM,GAAA,CAAA,IAAA,CAAK,EAAI,EAAA,KAAA,IAAS,CAAK,IAAA,GAAA,GAAM,IAAK,CAAA,QAAA,GAAa,IAAK,CAAA,QAAA,CAAS,KAAQ,GAAA,CAAA,CAAA;AACzF,IAAA,IAAA,CAAK,QAAS,CAAA,CAAA,GAAA,CAAK,IAAK,CAAA,EAAA,EAAI,UAAU,CAAK,IAAA,CAAA,CAAA;AAE3C,IAAA,IAAI,KAAK,QAAY,IAAA,IAAA,CAAK,SAAS,CAAI,GAAA,IAAA,CAAK,SAAS,CACrD,EAAA;AACI,MAAK,IAAA,CAAA,QAAA,CAAS,CAAI,GAAA,IAAA,CAAK,QAAS,CAAA,CAAA,CAAA;AAAA,KACpC;AAEA,IAAA,IAAI,KAAK,aAAe,EAAA,SAAA,IAAa,IAAK,CAAA,UAAA,IAAc,KAAK,QAC7D,EAAA;AACI,MAAA,IAAA,CAAK,WAAW,IAAO,GAAA,CAAA,EAAG,KAAK,KAAM,CAAA,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA,CAAA;AAEjD,MAAA,MAAM,aAAa,IAAK,CAAA,QAAA,CAAS,CAAK,GAAA,IAAA,CAAK,SAAS,KAAQ,GAAA,CAAA,CAAA;AAC5D,MAAM,MAAA,UAAA,GAAa,KAAK,QAAS,CAAA,CAAA,CAAA;AAEjC,MAAA,IAAA,CAAK,WAAW,CAAI,GAAA,UAAA,IAAc,IAAK,CAAA,aAAA,CAAc,iBAAiB,CAAK,IAAA,CAAA,CAAA,CAAA;AAC3E,MAAA,IAAA,CAAK,WAAW,CAAI,GAAA,UAAA,IAAc,IAAK,CAAA,aAAA,CAAc,iBAAiB,CAAK,IAAA,CAAA,CAAA,CAAA;AAAA,KAC/E;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAa,MAAM,KACnB,EAAA;AACI,IAAA,KAAA,CAAM,KAAQ,GAAA,KAAA,CAAA;AAEd,IAAA,IAAA,CAAK,aAAc,EAAA,CAAA;AACnB,IAAA,IAAA,CAAK,aAAc,EAAA,CAAA;AAAA,GACvB;AAAA;AAAA,EAGA,IAAa,KACb,GAAA;AACI,IAAA,OAAO,KAAM,CAAA,KAAA,CAAA;AAAA,GACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAa,OAAO,KACpB,EAAA;AACI,IAAA,KAAA,CAAM,MAAS,GAAA,KAAA,CAAA;AAEf,IAAA,IAAA,CAAK,aAAc,EAAA,CAAA;AACnB,IAAA,IAAA,CAAK,aAAc,EAAA,CAAA;AAAA,GACvB;AAAA;AAAA,EAGA,IAAa,MACb,GAAA;AACI,IAAA,OAAO,KAAM,CAAA,MAAA,CAAA;AAAA,GACjB;AAAA,EAES,OAAA,CAAQ,OAA0C,MAC3D,EAAA;AACI,IAAM,KAAA,CAAA,OAAA,CAAQ,OAAO,MAAM,CAAA,CAAA;AAE3B,IAAA,IAAA,CAAK,aAAc,EAAA,CAAA;AACnB,IAAA,IAAA,CAAK,aAAc,EAAA,CAAA;AAAA,GACvB;AACJ;;;;"}