{"version":3,"file":"guide.mjs","sources":["../../src/guide/guide.tsx"],"sourcesContent":["import { defineComponent, computed, nextTick, onMounted, ref, toRefs, watch, h, Teleport } from 'vue';\nimport isFunction from 'lodash/isFunction';\nimport props from './props';\nimport { GuideCrossProps } from './interface';\nimport { TdGuideProps, GuideStep } from './type';\nimport { scrollToParentVisibleArea, getRelativePosition, getTargetElm, scrollToElm } from './utils';\nimport setStyle from '../_common/js/utils/set-style';\nimport { addClass, removeClass, isFixed, getWindowScroll } from '../utils/dom';\nimport useVModel from '../hooks/useVModel';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport { usePrefixClass, useConfig } from '../hooks/useConfig';\nimport Button from '../button';\nimport Popup, { PopupProps } from '../popup';\n\nexport default defineComponent({\n  name: 'XGuide',\n  props,\n  setup(props: TdGuideProps, context) {\n    const renderTNodeJSX = useTNodeJSX();\n    const COMPONENT_NAME = usePrefixClass('guide');\n    const LOCK_CLASS = usePrefixClass('guide--lock');\n    const { globalConfig } = useConfig('guide');\n\n    const { current, modelValue, hideCounter, hidePrev, hideSkip, steps, zIndex } = toRefs(props);\n    const [innerCurrent, setInnerCurrent] = useVModel(\n      current,\n      modelValue,\n      props.defaultCurrent,\n      props.onChange,\n      'current',\n    );\n\n    // 覆盖层，用于覆盖所有元素\n    const overlayLayerRef = ref<HTMLElement>();\n    // 高亮层，用于高亮元素\n    const highlightLayerRef = ref<HTMLElement>();\n    // 提示层，用于高亮元素\n    const referenceLayerRef = ref<HTMLElement>();\n    // 当前高亮的元素\n    const currentHighlightLayerElm = ref<HTMLElement>();\n    // dialog wrapper ref\n    const dialogWrapperRef = ref<HTMLElement>();\n    // dialog ref\n    const dialogTooltipRef = ref<HTMLElement>();\n    // ! popup ref 不确定这里的类型是否完全正确\n    const popupTooltipRef = ref<InstanceType<typeof Popup>>();\n    // 是否开始展示\n    const actived = ref<boolean>(false);\n    // 步骤总数\n    const stepsTotal = computed(() => steps.value.length);\n    // 当前步骤的信息\n    const currentStepInfo = computed<GuideStep>(() => steps.value[innerCurrent.value]);\n    // 当前是否为 popup\n    const isPopup = computed(() => getCurrentCrossProps('mode') === 'popup');\n    // 当前元素位置状态\n    const currentElmIsFixed = computed(() => isFixed(currentHighlightLayerElm.value || document.body));\n    // 获取当前步骤的属性值 用户当前步骤设置 > 用户组件设置的\n    const getCurrentCrossProps = <Key extends keyof GuideCrossProps>(propsName: Key) =>\n      currentStepInfo.value[propsName] ?? props[propsName];\n    // 获取当前步骤的用户设定的高亮内容\n    const currentCustomHighlightContent = computed(() => {\n      const { highlightContent } = currentStepInfo.value;\n\n      let node: any = highlightContent;\n      if (isFunction(highlightContent)) {\n        // 支持函数\n        node = highlightContent(hWithParams());\n      } else if (context.slots.highlightContent) {\n        // 支持插槽\n        node = context.slots.highlightContent(hWithParams());\n      } else if (context.slots['highlight-content']) {\n        // 支持插槽\n        node = context.slots['highlight-content'](hWithParams());\n      } else if (!!highlightContent) {\n        // 支持组件\n        node = <node />;\n      }\n\n      // 给自定义元素添加类名\n      if (node) {\n        if (!node.props) node.props = {};\n        node.props.class = node.props.class || '';\n      }\n      return node;\n    });\n\n    // 是否展示高亮区域\n    const showCustomHighlightContent = computed(() => Boolean(currentCustomHighlightContent.value && isPopup.value));\n    //\n    const popupVisible = ref(false);\n    const hWithParams = (params: Record<string, any> = { currentStepInfo: currentStepInfo.value }) => {\n      const newH = new Function('return ' + h.toString())();\n      return Object.assign({}, newH, params);\n    };\n\n    // 设置高亮层的位置\n    const setHighlightLayerPosition = (highlightLayer: HTMLElement, isReference = false) => {\n      // 这里预留了一个相对元素的功能，暂未使用，也是这里导致了 fix #2111\n      let { top, left } = getRelativePosition(currentHighlightLayerElm.value);\n      let { width, height } = currentHighlightLayerElm.value.getBoundingClientRect();\n      const highlightPadding = getCurrentCrossProps('highlightPadding');\n\n      if (isPopup.value) {\n        width += highlightPadding * 2;\n        height += highlightPadding * 2;\n        top -= highlightPadding;\n        left -= highlightPadding;\n      } else {\n        const { scrollTop, scrollLeft } = getWindowScroll();\n        top += scrollTop;\n        left += scrollLeft;\n      }\n\n      const style = {\n        top: `${top}px`,\n        left: `${left}px`,\n      };\n\n      // 展示自定义高亮\n      if (showCustomHighlightContent.value) {\n        // 高亮框本身不设定宽高，引用用框的宽高设定为用户自定义的宽高\n        if (isReference) {\n          const { width, height } = highlightLayerRef.value.getBoundingClientRect();\n          Object.assign(style, {\n            width: `${width}px`,\n            height: `${height}px`,\n          });\n        } else {\n          Object.assign(style, {\n            width: 'auto',\n            height: 'auto',\n          });\n        }\n      } else {\n        Object.assign(style, {\n          width: `${width}px`,\n          height: `${height}px`,\n        });\n      }\n      setStyle(highlightLayer, style);\n    };\n\n    const showPopupGuide = () => {\n      nextTick(() => {\n        currentHighlightLayerElm.value = getTargetElm(currentStepInfo.value.element);\n        if (!currentHighlightLayerElm.value) return;\n        scrollToParentVisibleArea(currentHighlightLayerElm.value);\n        setHighlightLayerPosition(highlightLayerRef.value);\n        setHighlightLayerPosition(referenceLayerRef.value, true);\n        scrollToElm(currentHighlightLayerElm.value);\n        // fix: https://github.com/Tencent/tdesign-vue-next/issues/2536\n        // 这里其实是一个临时解决方案，最合理的是 popup 内部处理\n        popupTooltipRef.value?.update();\n      });\n    };\n\n    const destroyTooltipElm = () => {\n      referenceLayerRef.value?.parentNode.removeChild(referenceLayerRef.value);\n    };\n\n    const showDialogGuide = () => {\n      nextTick(() => {\n        currentHighlightLayerElm.value = dialogTooltipRef.value;\n        scrollToParentVisibleArea(currentHighlightLayerElm.value);\n        setHighlightLayerPosition(highlightLayerRef.value);\n        scrollToElm(currentHighlightLayerElm.value);\n      });\n    };\n\n    const destroyDialogTooltipElm = () => {\n      dialogTooltipRef.value?.parentNode.removeChild(dialogTooltipRef.value);\n      dialogWrapperRef.value?.parentNode.removeChild(dialogWrapperRef.value);\n    };\n\n    const showGuide = () => {\n      if (isPopup.value) {\n        destroyDialogTooltipElm();\n        showPopupGuide();\n      } else {\n        destroyTooltipElm();\n        showDialogGuide();\n      }\n      popupVisible.value = true;\n    };\n\n    const destroyGuide = () => {\n      destroyTooltipElm();\n      destroyDialogTooltipElm();\n      highlightLayerRef.value?.parentNode.removeChild(highlightLayerRef.value);\n      overlayLayerRef.value?.parentNode.removeChild(overlayLayerRef.value);\n      removeClass(document.body, LOCK_CLASS.value);\n    };\n\n    const handleSkip = (e: MouseEvent) => {\n      const total = stepsTotal.value;\n      actived.value = false;\n      setInnerCurrent(-1, { e, total });\n      props.onSkip?.({ e, current: innerCurrent.value, total });\n    };\n\n    const handlePrev = (e: MouseEvent) => {\n      const total = stepsTotal.value;\n      setInnerCurrent(innerCurrent.value - 1, { e, total });\n      props.onPrevStepClick?.({\n        e,\n        prev: innerCurrent.value - 1,\n        current: innerCurrent.value,\n        total,\n      });\n    };\n\n    const handleNext = (e: MouseEvent) => {\n      const total = stepsTotal.value;\n      setInnerCurrent(innerCurrent.value + 1, { e, total });\n      props.onNextStepClick?.({\n        e,\n        next: innerCurrent.value + 1,\n        current: innerCurrent.value,\n        total,\n      });\n    };\n\n    const handleFinish = (e: MouseEvent) => {\n      const total = stepsTotal.value;\n      actived.value = false;\n      setInnerCurrent(-1, { e, total });\n      props.onFinish?.({ e, current: innerCurrent.value, total });\n    };\n\n    const initGuide = () => {\n      if (innerCurrent.value >= 0 && innerCurrent.value < steps.value.length) {\n        if (!actived.value) {\n          actived.value = true;\n          addClass(document.body, LOCK_CLASS.value);\n        }\n        showGuide();\n      }\n    };\n\n    watch(innerCurrent, (val) => {\n      if (val >= 0 && val < steps.value.length) {\n        popupVisible.value = false;\n        initGuide();\n      } else {\n        actived.value = false;\n        destroyGuide();\n      }\n    });\n\n    onMounted(() => {\n      initGuide();\n    });\n\n    return () => {\n      const renderOverlayLayer = () => (\n        <div ref={overlayLayerRef} class={`${COMPONENT_NAME.value}__overlay`} style={{ zIndex: zIndex.value - 2 }} />\n      );\n\n      const renderHighlightLayer = () => {\n        const style = { zIndex: zIndex.value - 1 };\n        const highlightClass = [\n          `${COMPONENT_NAME.value}__highlight`,\n          `${COMPONENT_NAME.value}__highlight--${isPopup.value ? 'popup' : 'dialog'}`,\n          `${COMPONENT_NAME.value}--${currentElmIsFixed.value && isPopup.value ? 'fixed' : 'absolute'}`,\n        ];\n        const showOverlay = getCurrentCrossProps('showOverlay');\n        const maskClass = [`${COMPONENT_NAME.value}__highlight--${showOverlay ? 'mask' : 'nomask'}`];\n\n        return (\n          <div ref={highlightLayerRef} class={[...highlightClass, ...maskClass]} style={style}>\n            {showCustomHighlightContent.value && currentCustomHighlightContent.value}\n          </div>\n        );\n      };\n\n      const renderCounter = () => {\n        const popupSlotCounter = renderTNodeJSX('counter', {\n          params: { total: stepsTotal.value, current: innerCurrent.value },\n        });\n\n        const popupDefaultCounter = (\n          <div class={`${COMPONENT_NAME.value}__counter`}>\n            {popupSlotCounter || `${innerCurrent.value + 1}/${stepsTotal.value}`}\n          </div>\n        );\n        return <>{!hideCounter.value && popupDefaultCounter}</>;\n      };\n\n      const renderAction = (mode: TdGuideProps['mode']) => {\n        const isLast = innerCurrent.value === stepsTotal.value - 1;\n        const isFirst = innerCurrent.value === 0;\n        const buttonSize = mode === 'popup' ? 'small' : 'medium';\n\n        return (\n          <div class={`${COMPONENT_NAME.value}__action`}>\n            {!hideSkip.value && !isLast && (\n              <Button\n                key=\"skip\"\n                class={`${COMPONENT_NAME.value}__skip`}\n                theme=\"default\"\n                size={buttonSize}\n                variant=\"base\"\n                onClick={handleSkip}\n                {...(getCurrentCrossProps('skipButtonProps') ?? globalConfig.value.skipButtonProps)}\n              />\n            )}\n            {!hidePrev.value && !isFirst && (\n              <Button\n                key=\"prev\"\n                class={`${COMPONENT_NAME.value}__prev`}\n                theme=\"default\"\n                size={buttonSize}\n                variant=\"base\"\n                onClick={handlePrev}\n                {...(getCurrentCrossProps('prevButtonProps') ?? globalConfig.value.prevButtonProps)}\n              />\n            )}\n            {!isLast && (\n              <Button\n                key=\"next\"\n                class={`${COMPONENT_NAME.value}__next`}\n                theme=\"primary\"\n                size={buttonSize}\n                variant=\"base\"\n                onClick={handleNext}\n                {...(getCurrentCrossProps('nextButtonProps') ?? globalConfig.value.nextButtonProps)}\n              />\n            )}\n            {isLast && (\n              <Button\n                key=\"finish\"\n                class={`${COMPONENT_NAME.value}__finish`}\n                theme=\"primary\"\n                size={buttonSize}\n                variant=\"base\"\n                onClick={handleFinish}\n                {...(props.finishButtonProps ?? globalConfig.value.finishButtonProps)}\n              />\n            )}\n          </div>\n        );\n      };\n\n      const renderTitle = () => {\n        const functionTitle = isFunction(currentStepInfo.value.title) ? currentStepInfo.value.title() : undefined;\n        const slotTitle = context.slots.title ? context.slots.title(hWithParams()) : undefined;\n        return functionTitle || slotTitle || currentStepInfo.value.title;\n      };\n\n      const renderTooltipBody = () => {\n        const title = <div class={`${COMPONENT_NAME.value}__title`}>{renderTitle()}</div>;\n        const bodyRender = currentStepInfo.value.body;\n\n        let descBody: any;\n        if (isFunction(bodyRender)) {\n          descBody = bodyRender(hWithParams());\n        } else if (context.slots.body) {\n          descBody = context.slots.body({ currentStepInfo: currentStepInfo.value });\n        } else if (typeof bodyRender === 'string') {\n          descBody = bodyRender;\n        } else {\n          descBody = <bodyRender />;\n        }\n        const desc = <div class={`${COMPONENT_NAME.value}__desc`}>{descBody}</div>;\n\n        return (\n          <>\n            {title}\n            {desc}\n          </>\n        );\n      };\n\n      const renderPopupContent = () => {\n        const footerClasses = [`${COMPONENT_NAME.value}__footer`, `${COMPONENT_NAME.value}__footer--popup`];\n        const action = (\n          <div class={footerClasses}>\n            {renderCounter()}\n            {renderAction('popup')}\n          </div>\n        );\n\n        return (\n          <div class={`${COMPONENT_NAME.value}__tooltip`}>\n            {renderTooltipBody()}\n            {action}\n          </div>\n        );\n      };\n\n      const renderPopupGuide = () => {\n        const { content } = currentStepInfo.value;\n        const contentProps = {\n          handlePrev,\n          handleNext,\n          handleSkip,\n          handleFinish,\n          current: innerCurrent.value,\n          total: stepsTotal.value,\n        };\n        let renderBody;\n        if (isFunction(content)) {\n          renderBody = () => content(hWithParams(contentProps));\n        } else if (context.slots.content) {\n          renderBody = () => context.slots.content(hWithParams(contentProps));\n        } else if (content) {\n          renderBody = () => <content {...contentProps} />;\n        } else {\n          renderBody = renderPopupContent;\n        }\n        const classes = [\n          `${COMPONENT_NAME.value}__reference`,\n          `${COMPONENT_NAME.value}--${currentElmIsFixed.value ? 'fixed' : 'absolute'}`,\n        ];\n\n        const innerClassName: PopupProps['overlayInnerClassName'] = [\n          {\n            [`${COMPONENT_NAME.value}__popup--content`]: !!content,\n          },\n        ];\n\n        return (\n          <Popup\n            ref={popupTooltipRef}\n            visible={popupVisible.value}\n            show-arrow={!content}\n            zIndex={zIndex.value}\n            placement={currentStepInfo.value.placement as any}\n            {...currentStepInfo.value.popupProps}\n            content={renderBody}\n            overlayClassName={[`${COMPONENT_NAME.value}__popup`, currentStepInfo.value.stepOverlayClass]}\n            overlayInnerClassName={innerClassName.concat(currentStepInfo.value.popupProps?.overlayInnerClassName)}\n          >\n            <div ref={referenceLayerRef} class={classes} />\n          </Popup>\n        );\n      };\n\n      const renderDialogGuide = () => {\n        const style = { zIndex: zIndex.value };\n        const wrapperClasses = [\n          `${COMPONENT_NAME.value}__wrapper`,\n          { [`${COMPONENT_NAME.value}__wrapper--center`]: currentStepInfo.value.placement === 'center' },\n        ];\n        const dialogClasses = [\n          `${COMPONENT_NAME.value}__reference`,\n          `${COMPONENT_NAME.value}--absolute`,\n          `${COMPONENT_NAME.value}__dialog`,\n          {\n            [`${COMPONENT_NAME.value}__dialog--nomask`]: !getCurrentCrossProps('showOverlay'),\n            [currentStepInfo.value.stepOverlayClass]: !!currentStepInfo.value.stepOverlayClass,\n          },\n        ];\n        const footerClasses = [`${COMPONENT_NAME.value}__footer`, `${COMPONENT_NAME.value}__footer--popup`];\n        return (\n          <>\n            <div ref={dialogWrapperRef} class={wrapperClasses} style={style}>\n              <div ref={dialogTooltipRef} class={dialogClasses}>\n                {renderTooltipBody()}\n                <div class={footerClasses}>\n                  {renderCounter()}\n                  {renderAction('dialog')}\n                </div>\n              </div>\n            </div>\n          </>\n        );\n      };\n\n      const renderGuide = () => {\n        return (\n          <>\n            <Teleport to=\"body\">\n              {renderOverlayLayer()}\n              {renderHighlightLayer()}\n              {isPopup.value ? renderPopupGuide() : renderDialogGuide()}\n            </Teleport>\n          </>\n        );\n      };\n\n      return <>{actived.value && renderGuide()}</>;\n    };\n  },\n});\n"],"names":["name","props","setup","innerCurrent","setInnerCurrent","isFunction","node","top","left","Object","width","height","setStyle","nextTick","scrollToParentVisibleArea","setHighlightLayerPosition","scrollToElm","currentHighlightLayerElm","destroyDialogTooltipElm","showPopupGuide","destroyTooltipElm","showDialogGuide","e","total","prev","next","showGuide","watch","initGuide","destroyGuide","onMounted","zIndex","_createVNode","params","_mergeProps","descBody","_Fragment","handlePrev","handleNext","handleSkip","handleFinish","renderBody"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,aAAA,eAAA,CAAA;AACEA,EAAAA,IAAAA,EAAAA,QAAAA;AACAC,EAAAA,KAAAA,EAAAA,KAAAA;AACAC,EAAAA,KAAAA,EAAAA,SAAAA,KAAAA,CAAAA,MAAAA,EAAAA,OAAAA,EAAAA;AACE,IAAA,IAAA,cAAA,GAAA,WAAA,EAAA,CAAA;AACM,IAAA,IAAA,cAAA,GAAA,cAAA,CAAA,OAAA,CAAA,CAAA;AACA,IAAA,IAAA,UAAA,GAAA,cAAA,CAAA,aAAA,CAAA,CAAA;AACN,IAAA,IAAA,UAAA,GAAA,SAAA,CAAA,OAAA,CAAA;;AAEM,IAAA,IAAA,OAAA,GAAA,MAAA,CAAA,MAAA,CAAA;;;;;;;;AACA,IAAA,IAAA,UAAA,GAAA,SAAA,CAAA,OAAA,EAAA,UAAA,EAAA,MAAA,CAAA,cAAA,EAAA,MAAA,CAAA,QAAA,EAAA,SAAA,CAAA;;AAACC,MAAAA,YAAAA,GAAAA,WAAAA,CAAAA,CAAAA,CAAAA;AAAcC,MAAAA,eAAAA,GAAAA,WAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AASrB,IAAA,IAAA,eAAA,GAAA,GAAA,EAAA,CAAA;AAEA,IAAA,IAAA,iBAAA,GAAA,GAAA,EAAA,CAAA;AAEA,IAAA,IAAA,iBAAA,GAAA,GAAA,EAAA,CAAA;AAEA,IAAA,IAAA,wBAAA,GAAA,GAAA,EAAA,CAAA;AAEA,IAAA,IAAA,gBAAA,GAAA,GAAA,EAAA,CAAA;AAEA,IAAA,IAAA,gBAAA,GAAA,GAAA,EAAA,CAAA;AAEA,IAAA,IAAA,eAAA,GAAA,GAAA,EAAA,CAAA;AAEM,IAAA,IAAA,OAAA,GAAA,GAAA,CAAA,KAAA,CAAA,CAAA;;AAEsB,MAAA,OAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA;;;AAEgB,MAAA,OAAA,KAAA,CAAA,KAAA,CAAA,YAAA,CAAA,KAAA,CAAA,CAAA;;;AAEnB,MAAA,OAAA,oBAAA,CAAA,MAAA,CAAA,KAAA,OAAA,CAAA;;;;;AAIzB,IAAA,IAAA,oBAAA,GAAA,SAAA,oBAAA,CAAA,SAAA,EAAA;AAAiE,MAAA,IAAA,qBAAA,CAAA;AAAA,MAAA,OAAA,CAAA,qBAAA,GAAA,eAAA,CAAA,KAAA,CAAA,SAAA,CAAA,MAAA,IAAA,IAAA,qBAAA,KAAA,KAAA,CAAA,GAAA,qBAAA,GAAA,MAAA,CAAA,SAAA,CAAA,CAAA;AACrB,KAAA,CAAA;AAEtC,IAAA,IAAA,6BAAA,GAAA,QAAA,CAAA,YAAA;AACE,MAAA,IAAA,gBAAA,GAAA,eAAA,CAAA,KAAA,CAAA,gBAAA,CAAA;;AAGF,MAAA,IAAAC,YAAA,CAAA,gBAAA,CAAA,EAAA;AAEKC,QAAAA,IAAAA,GAAAA,gBAAAA,CAAAA,WAAAA,EAAAA,CAAAA,CAAAA;AACT,OAAA,MAAA,IAAA,OAAA,CAAA,KAAA,CAAA,gBAAA,EAAA;;;;AAMA,OAAA,MAAA,IAAA,CAAA,CAAA,gBAAA,EAAA;AAEEA,QAAAA,IAAAA,GAAAA,WAAAA,CAAAA,IAAAA,EAAAA,IAAAA,EAAAA,IAAAA,CAAAA,CAAAA;AACF,OAAA;AAGA,MAAA,IAAA,IAAA,EAAA;;;AAGA,OAAA;AACO,MAAA,OAAA,IAAA,CAAA;AACT,KAAA,CAAA,CAAA;;;;AAKM,IAAA,IAAA,YAAA,GAAA,GAAA,CAAA,KAAA,CAAA,CAAA;AACN,IAAA,IAAA,WAAA,GAAA,SAAA,WAAA,GAAA;;;;AACE,MAAA,IAAA,IAAA,GAAA,IAAA,QAAA,CAAA,SAAA,GAAA,CAAA,CAAA,QAAA,EAAA,CAAA,EAAA,CAAA;;;AAKF,IAAA,IAAA,yBAAA,GAAA,SAAA,yBAAA,CAAA,cAAA,EAAA;AAAwF,MAAA,IAAA,WAAA,GAAA,SAAA,CAAA,MAAA,GAAA,CAAA,IAAA,SAAA,CAAA,CAAA,CAAA,KAAA,SAAA,GAAA,SAAA,CAAA,CAAA,CAAA,GAAA,KAAA,CAAA;AAEtF,MAAA,IAAA,oBAAA,GAAA,mBAAA,CAAA,wBAAA,CAAA,KAAA,CAAA;;;;;;AAEM,MAAA,IAAA,gBAAA,GAAA,oBAAA,CAAA,kBAAA,CAAA,CAAA;;;;AAKGC,QAAAA,GAAAA,IAAAA,gBAAAA,CAAAA;AACCC,QAAAA,IAAAA,IAAAA,gBAAAA,CAAAA;AACV,OAAA,MAAA;AACE,QAAA,IAAA,gBAAA,GAAA,eAAA,EAAA;;;AACOD,QAAAA,GAAAA,IAAAA,SAAAA,CAAAA;AACCC,QAAAA,IAAAA,IAAAA,UAAAA,CAAAA;AACV,OAAA;AAEA,MAAA,IAAA,KAAA,GAAA;AACED,QAAAA,GAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAAA,GAAAA,EAAAA,IAAAA,CAAAA;;;;AAOA,QAAA,IAAA,WAAA,EAAA;;;;AAEEE,UAAAA,MAAAA,CAAAA,MAAAA,CAAAA,KAAAA,EAAAA;AACEC,YAAAA,KAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAAA,MAAAA,EAAAA,IAAAA,CAAAA;;AAEF,WAAA,CAAA,CAAA;AACF,SAAA,MAAA;AACED,UAAAA,MAAAA,CAAAA,MAAAA,CAAAA,KAAAA,EAAAA;AACEC,YAAAA,KAAAA,EAAAA,MAAAA;AACAC,YAAAA,MAAAA,EAAAA,MAAAA;AACF,WAAA,CAAA,CAAA;AACF,SAAA;AACF,OAAA,MAAA;AACEF,QAAAA,MAAAA,CAAAA,MAAAA,CAAAA,KAAAA,EAAAA;AACEC,UAAAA,KAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAAA,KAAAA,EAAAA,IAAAA,CAAAA;;AAEF,SAAA,CAAA,CAAA;AACF,OAAA;AACAE,MAAAA,QAAAA,CAAAA,cAAAA,EAAAA,KAAAA,CAAAA,CAAAA;;AAGF,IAAA,IAAA,cAAA,GAAA,SAAA,cAAA,GAAA;AACEC,MAAAA,QAAAA,CAAAA,YAAAA;AAAe,QAAA,IAAA,qBAAA,CAAA;;AAEb,QAAA,IAAA,CAAA,wBAAA,CAAA,KAAA,EAAA,OAAA;AACAC,QAAAA,yBAAAA,CAAAA,wBAAAA,CAAAA,KAAAA,CAAAA,CAAAA;AACAC,QAAAA,yBAAAA,CAAAA,iBAAAA,CAAAA,KAAAA,CAAAA,CAAAA;AAC0BA,QAAAA,yBAAAA,CAAAA,iBAAAA,CAAAA,KAAAA,EAAAA,IAAAA,CAAAA,CAAAA;AAC1BC,QAAAA,WAAAA,CAAAA,wBAAAA,CAAAA,KAAAA,CAAAA,CAAAA;AAGA,QAAA,CAAA,qBAAA,GAAA,eAAA,CAAA,KAAA,MAAA,IAAA,IAAA,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAA,MAAA,EAAA,CAAA;AACF,OAAA,CAAA,CAAA;;AAGF,IAAA,IAAA,iBAAA,GAAA,SAAA,iBAAA,GAAA;AAAgC,MAAA,IAAA,qBAAA,CAAA;AAC9B,MAAA,CAAA,qBAAA,GAAA,iBAAA,CAAA,KAAA,MAAA,IAAA,IAAA,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAA,UAAA,CAAA,WAAA,CAAA,iBAAA,CAAA,KAAA,CAAA,CAAA;;AAGF,IAAA,IAAA,eAAA,GAAA,SAAA,eAAA,GAAA;AACEH,MAAAA,QAAAA,CAAAA,YAAAA;AACEI,QAAAA,wBAAAA,CAAAA,KAAAA,GAAAA,gBAAAA,CAAAA,KAAAA,CAAAA;AACAH,QAAAA,yBAAAA,CAAAA,wBAAAA,CAAAA,KAAAA,CAAAA,CAAAA;AACAC,QAAAA,yBAAAA,CAAAA,iBAAAA,CAAAA,KAAAA,CAAAA,CAAAA;AACAC,QAAAA,WAAAA,CAAAA,wBAAAA,CAAAA,KAAAA,CAAAA,CAAAA;AACF,OAAA,CAAA,CAAA;;AAGF,IAAA,IAAA,uBAAA,GAAA,SAAA,uBAAA,GAAA;;AACE,MAAA,CAAA,qBAAA,GAAA,gBAAA,CAAA,KAAA,MAAA,IAAA,IAAA,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAA,UAAA,CAAA,WAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,CAAA;AACA,MAAA,CAAA,qBAAA,GAAA,gBAAA,CAAA,KAAA,MAAA,IAAA,IAAA,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAA,UAAA,CAAA,WAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,CAAA;;AAGF,IAAA,IAAA,SAAA,GAAA,SAAA,SAAA,GAAA;;AAE4BE,QAAAA,uBAAAA,EAAAA,CAAAA;AACTC,QAAAA,cAAAA,EAAAA,CAAAA;AACjB,OAAA,MAAA;AACoBC,QAAAA,iBAAAA,EAAAA,CAAAA;AACFC,QAAAA,eAAAA,EAAAA,CAAAA;AAClB,OAAA;;;AAIF,IAAA,IAAA,YAAA,GAAA,SAAA,YAAA,GAAA;;AACoBD,MAAAA,iBAAAA,EAAAA,CAAAA;AACMF,MAAAA,uBAAAA,EAAAA,CAAAA;AACxB,MAAA,CAAA,sBAAA,GAAA,iBAAA,CAAA,KAAA,MAAA,IAAA,IAAA,sBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,sBAAA,CAAA,UAAA,CAAA,WAAA,CAAA,iBAAA,CAAA,KAAA,CAAA,CAAA;AACA,MAAA,CAAA,qBAAA,GAAA,eAAA,CAAA,KAAA,MAAA,IAAA,IAAA,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAA,UAAA,CAAA,WAAA,CAAA,eAAA,CAAA,KAAA,CAAA,CAAA;;;AAII,IAAA,IAAA,UAAA,GAAA,SAAA,UAAA,CAAA,CAAA,EAAA;AAAgC,MAAA,IAAA,cAAA,CAAA;AACpC,MAAA,IAAA,KAAA,GAAA,UAAA,CAAA,KAAA,CAAA;;;AAEsBI,QAAAA,CAAAA,EAAAA,CAAAA;AAAGC,QAAAA,KAAAA,EAAAA,KAAAA;AAAM,OAAA,CAAA,CAAA;AAC/BtB,MAAAA,CAAAA,cAAAA,GAAAA,MAAAA,CAAAA,MAAAA,MAAAA,IAAAA,IAAAA,cAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,cAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA;AAAiBqB,QAAAA,CAAAA,EAAAA,CAAAA;;AAAgCC,QAAAA,KAAAA,EAAAA,KAAAA;AAAM,OAAA,CAAA,CAAA;;AAGnD,IAAA,IAAA,UAAA,GAAA,SAAA,UAAA,CAAA,CAAA,EAAA;AAAgC,MAAA,IAAA,qBAAA,CAAA;AACpC,MAAA,IAAA,KAAA,GAAA,UAAA,CAAA,KAAA,CAAA;AACAnB,MAAAA,eAAAA,CAAAA,YAAAA,CAAAA,KAAAA,GAAAA,CAAAA,EAAAA;AAA0CkB,QAAAA,CAAAA,EAAAA,CAAAA;AAAGC,QAAAA,KAAAA,EAAAA,KAAAA;AAAM,OAAA,CAAA,CAAA;AACnDtB,MAAAA,CAAAA,qBAAAA,GAAAA,MAAAA,CAAAA,eAAAA,MAAAA,IAAAA,IAAAA,qBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,qBAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA;AACEqB,QAAAA,CAAAA,EAAAA,CAAAA;AACAE,QAAAA,IAAAA,EAAAA,YAAAA,CAAAA,KAAAA,GAAAA,CAAAA;;AAEAD,QAAAA,KAAAA,EAAAA,KAAAA;AACF,OAAA,CAAA,CAAA;;AAGI,IAAA,IAAA,UAAA,GAAA,SAAA,UAAA,CAAA,CAAA,EAAA;AAAgC,MAAA,IAAA,qBAAA,CAAA;AACpC,MAAA,IAAA,KAAA,GAAA,UAAA,CAAA,KAAA,CAAA;AACAnB,MAAAA,eAAAA,CAAAA,YAAAA,CAAAA,KAAAA,GAAAA,CAAAA,EAAAA;AAA0CkB,QAAAA,CAAAA,EAAAA,CAAAA;AAAGC,QAAAA,KAAAA,EAAAA,KAAAA;AAAM,OAAA,CAAA,CAAA;AACnDtB,MAAAA,CAAAA,qBAAAA,GAAAA,MAAAA,CAAAA,eAAAA,MAAAA,IAAAA,IAAAA,qBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,qBAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA;AACEqB,QAAAA,CAAAA,EAAAA,CAAAA;AACAG,QAAAA,IAAAA,EAAAA,YAAAA,CAAAA,KAAAA,GAAAA,CAAAA;;AAEAF,QAAAA,KAAAA,EAAAA,KAAAA;AACF,OAAA,CAAA,CAAA;;AAGI,IAAA,IAAA,YAAA,GAAA,SAAA,YAAA,CAAA,CAAA,EAAA;AAAkC,MAAA,IAAA,gBAAA,CAAA;AACtC,MAAA,IAAA,KAAA,GAAA,UAAA,CAAA,KAAA,CAAA;;;AAEsBD,QAAAA,CAAAA,EAAAA,CAAAA;AAAGC,QAAAA,KAAAA,EAAAA,KAAAA;AAAM,OAAA,CAAA,CAAA;AAC/BtB,MAAAA,CAAAA,gBAAAA,GAAAA,MAAAA,CAAAA,QAAAA,MAAAA,IAAAA,IAAAA,gBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,gBAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA;AAAmBqB,QAAAA,CAAAA,EAAAA,CAAAA;;AAAgCC,QAAAA,KAAAA,EAAAA,KAAAA;AAAM,OAAA,CAAA,CAAA;;AAG3D,IAAA,IAAA,SAAA,GAAA,SAAA,SAAA,GAAA;AACE,MAAA,IAAA,YAAA,CAAA,KAAA,IAAA,CAAA,IAAA,YAAA,CAAA,KAAA,GAAA,KAAA,CAAA,KAAA,CAAA,MAAA,EAAA;AACM,QAAA,IAAA,CAAA,OAAA,CAAA,KAAA,EAAA;;;AAGJ,SAAA;AACUG,QAAAA,SAAAA,EAAAA,CAAAA;AACZ,OAAA;;AAGIC,IAAAA,KAAAA,CAAAA,YAAAA,EAAAA,UAAAA,GAAAA,EAAAA;;;AAGQC,QAAAA,SAAAA,EAAAA,CAAAA;AACZ,OAAA,MAAA;;AAEeC,QAAAA,YAAAA,EAAAA,CAAAA;AACf,OAAA;AACF,KAAA,CAAA,CAAA;AAEAC,IAAAA,SAAAA,CAAAA,YAAAA;AACYF,MAAAA,SAAAA,EAAAA,CAAAA;AACZ,KAAA,CAAA,CAAA;AAEA,IAAA,OAAA,YAAA;AACE,MAAA,IAAA,kBAAA,GAAA,SAAA,kBAAA,GAAA;;;;;AACiFG,YAAAA,MAAAA,EAAAA,MAAAA,CAAAA,KAAAA,GAAAA,CAAAA;AAAyB,WAAA;AAAG,SAAA,EAAA,IAAA,CAAA,CAAA;;AAG7G,MAAA,IAAA,oBAAA,GAAA,SAAA,oBAAA,GAAA;AACE,QAAA,IAAA,KAAA,GAAA;AAAgBA,UAAAA,MAAAA,EAAAA,MAAAA,CAAAA,KAAAA,GAAAA,CAAAA;;;AAMV,QAAA,IAAA,WAAA,GAAA,oBAAA,CAAA,aAAA,CAAA,CAAA;AACN,QAAA,IAAA,SAAA,GAAA,CAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,eAAA,CAAA,CAAA,MAAA,CAAA,WAAA,GAAA,MAAA,GAAA,QAAA,CAAA,CAAA,CAAA;AAEA,QAAA,OAAAC,WAAA,CAAA,KAAA,EAAA;AAAA,UAAA,KAAA,EAAA,iBAAA;AAC+B,UAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,EAAA,SAAA,CAAA;;AAAiD,SAAA,EAAA,CAAA,0BAAA,CAAA,KAAA,IAAA,6BAAA,CAAA,KAAA,CAAA,CAAA,CAAA;;AAMlF,MAAA,IAAA,aAAA,GAAA,SAAA,aAAA,GAAA;AACQ,QAAA,IAAA,gBAAA,GAAA,cAAA,CAAA,SAAA,EAAA;AACJC,UAAAA,MAAAA,EAAAA;;;AAA+D,WAAA;AACjE,SAAA,CAAA,CAAA;;AAGE,UAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,WAAA,CAAA;AAA8B,SAAA,EAAA,CAAA,gBAAA,IAAA,EAAA,CAAA,MAAA,CAAA,YAAA,CAAA,KAAA,GAAA,CAAA,EAAA,GAAA,CAAA,CAAA,MAAA,CAAA,UAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA;;;AAO5B,MAAA,IAAA,YAAA,GAAA,SAAA,YAAA,CAAA,IAAA,EAAA;AAA+C,QAAA,IAAA,qBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,qBAAA,CAAA;;AAE7C,QAAA,IAAA,OAAA,GAAA,YAAA,CAAA,KAAA,KAAA,CAAA,CAAA;;AAGN,QAAA,OAAAD,WAAA,CAAA,KAAA,EAAA;AAAA,UAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,UAAA,CAAA;AACgC,SAAA,EAAA,CAAA,CAAA,QAAA,CAAA,KAAA,IAAA,CAAA,MAAA,IAAAA,WAAA,CAAA,MAAA,EAAAE,UAAA,CAAA;AACP,UAAA,KAAA,EAAA,MAAA;AAEb,UAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AACqB,UAAA,OAAA,EAAA,SAAA;AAEzB,UAAA,MAAA,EAAA,UAAA;AACA,UAAA,SAAA,EAAA,MAAA;;AAEK,SAAA,EAAA,CAAA,qBAAA,GAAA,oBAAA,CAAA,iBAAA,CAAA,MAAA,IAAA,IAAA,qBAAA,KAAA,KAAA,CAAA,GAAA,qBAAA,GAAA,YAAA,CAAA,KAAA,CAAA,eAAA,CAAA,EAAA,IAAA,CAAA,EAAA,CAAA,QAAA,CAAA,KAAA,IAAA,CAAA,OAAA,IAAAF,WAAA,CAAA,MAAA,EAAAE,UAAA,CAAA;AAGY,UAAA,KAAA,EAAA,MAAA;AAEb,UAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AACqB,UAAA,OAAA,EAAA,SAAA;AAEzB,UAAA,MAAA,EAAA,UAAA;AACA,UAAA,SAAA,EAAA,MAAA;;;;AAQA,UAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AACA,UAAA,OAAA,EAAA,SAAA;;AACM,UAAA,SAAA,EAAA,MAAA;;;AAMT,UAAA,KAAA,EAAA,QAAA;;AAIG,UAAA,OAAA,EAAA,SAAA;;AACM,UAAA,SAAA,EAAA,MAAA;;;;AAUhB,MAAA,IAAA,WAAA,GAAA,SAAA,WAAA,GAAA;;;;;AAMA,MAAA,IAAA,iBAAA,GAAA,SAAA,iBAAA,GAAA;;AACQ,UAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,SAAA,CAAA;;AACA,QAAA,IAAA,UAAA,GAAA,eAAA,CAAA,KAAA,CAAA,IAAA,CAAA;AAEF,QAAA,IAAA,QAAA,CAAA;AACA,QAAA,IAAA7B,YAAA,CAAA,UAAA,CAAA,EAAA;AACS8B,UAAAA,QAAAA,GAAAA,UAAAA,CAAAA,WAAAA,EAAAA,CAAAA,CAAAA;AACb,SAAA,MAAA,IAAA,OAAA,CAAA,KAAA,CAAA,IAAA,EAAA;AACEA,UAAAA,QAAAA,GAAAA,OAAAA,CAAAA,KAAAA,CAAAA,IAAAA,CAAAA;;AAAuE,WAAA,CAAA,CAAA;AACzE,SAAA,MAAA,IAAA,OAAA,UAAA,KAAA,QAAA,EAAA;AACaA,UAAAA,QAAAA,GAAAA,UAAAA,CAAAA;AACb,SAAA,MAAA;AACEA,UAAAA,QAAAA,GAAAA,WAAAA,CAAAA,UAAAA,EAAAA,IAAAA,EAAAA,IAAAA,CAAAA,CAAAA;AACF,SAAA;;AACM,UAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AAAqC,SAAA,EAAA,CAAA,QAAA,CAAA,CAAA,CAAA;AAGzC,QAAA,OAAAH,WAAA,CAAAI,QAAA,EAAA,IAAA,EAAA,CAAA,KAAA,EAAA,IAAA,CAAA,CAAA,CAAA;;AAOJ,MAAA,IAAA,kBAAA,GAAA,SAAA,kBAAA,GAAA;AACE,QAAA,IAAA,aAAA,GAAA,CAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,UAAA,CAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,iBAAA,CAAA,CAAA,CAAA;;;;AAQA,QAAA,OAAAJ,WAAA,CAAA,KAAA,EAAA;AAAA,UAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,WAAA,CAAA;AACgC,SAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,MAAA,CAAA,CAAA,CAAA;;AAOlC,MAAA,IAAA,gBAAA,GAAA,SAAA,gBAAA,GAAA;AAA+B,QAAA,IAAA,sBAAA,CAAA;AACvB,QAAA,IAAA,OAAA,GAAA,eAAA,CAAA,KAAA,CAAA,OAAA,CAAA;AACN,QAAA,IAAA,YAAA,GAAA;AACEK,UAAAA,UAAAA,EAAAA,UAAAA;AACAC,UAAAA,UAAAA,EAAAA,UAAAA;AACAC,UAAAA,UAAAA,EAAAA,UAAAA;AACAC,UAAAA,YAAAA,EAAAA,YAAAA;;;;AAIE,QAAA,IAAA,UAAA,CAAA;AACA,QAAA,IAAAnC,YAAA,CAAA,OAAA,CAAA,EAAA;;AACW,YAAA,OAAA,OAAA,CAAA,WAAA,CAAA,YAAA,CAAA,CAAA,CAAA;AAAuC,WAAA,CAAA;AACtD,SAAA,MAAA,IAAA,OAAA,CAAA,KAAA,CAAA,OAAA,EAAA;;;AACoE,WAAA,CAAA;;;AAErD,YAAA,OAAA2B,WAAA,CAAA,OAAA,EAAA,YAAA,EAAA,IAAA,CAAA,CAAA;;AACf,SAAA,MAAA;AACeS,UAAAA,UAAAA,GAAAA,kBAAAA,CAAAA;AACf,SAAA;;AAMA,QAAA,IAAA,cAAA,GAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA;AAOE,QAAA,OAAAT,WAAA,CAAA,KAAA,EAAAE,UAAA,CAAA;AAAA,UAAA,KAAA,EAAA,eAAA;;AAEwB,UAAA,YAAA,EAAA,CAAA,OAAA;;;;AAKtB,UAAA,SAAA,EAAA,UAAA;AACA,UAAA,kBAAA,EAAA,CAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,SAAA,CAAA,EAAA,eAAA,CAAA,KAAA,CAAA,gBAAA,CAAA;AACA,UAAA,uBAAA,EAAA,cAAA,CAAA,MAAA,CAAA,CAAA,sBAAA,GAAA,eAAA,CAAA,KAAA,CAAA,UAAA,MAAA,IAAA,IAAA,sBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,sBAAA,CAAA,qBAAA,CAAA;;;;;;AAE6C,aAAA,EAAA,IAAA,CAAA,CAAA,CAAA;AAAA,WAAA;AAAA,SAAA,CAAA,CAAA;;AAKnD,MAAA,IAAA,iBAAA,GAAA,SAAA,iBAAA,GAAA;AAAgC,QAAA,IAAA,KAAA,CAAA;AAC9B,QAAA,IAAA,KAAA,GAAA;;;;;AAcA,QAAA,IAAA,aAAA,GAAA,CAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,UAAA,CAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,iBAAA,CAAA,CAAA,CAAA;AACA,QAAA,OAAAF,WAAA,CAAAI,QAAA,EAAA,IAAA,EAAA,CAAAJ,WAAA,CAAA,KAAA,EAAA;AAAA,UAAA,KAAA,EAAA,gBAAA;AAEgC,UAAA,OAAA,EAAA,cAAA;;AAC1B,SAAA,EAAA,CAAAA,WAAA,CAAA,KAAA,EAAA;AAAA,UAAA,KAAA,EAAA,gBAAA;;AAAmC,SAAA,EAAA,CAAA,iBAAA,EAAA,EAAAA,WAAA,CAAA,KAAA,EAAA;;AAErB,SAAA,EAAA,CAAA,aAAA,EAAA,EAAA,YAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAUtB,MAAA,IAAA,WAAA,GAAA,SAAA,WAAA,GAAA;AAEI,QAAA,OAAAA,WAAA,CAAAI,QAAA,EAAA,IAAA,EAAA,CAAAJ,WAAA,CAAA,QAAA,EAAA;;AACe,SAAA,EAAA;AAAA,UAAA,SAAA,EAAA,SAAA,QAAA,GAAA;AAAA,YAAA,OAAA,CAAA,kBAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,OAAA,CAAA,KAAA,GAAA,gBAAA,EAAA,GAAA,iBAAA,EAAA,CAAA,CAAA;AAG6C,WAAA;AAAA,SAAA,CAAA,CAAA,CAAA,CAAA;;;;AAQpE,GAAA;AACF,CAAA,CAAA;;;;"}