@daracl/form 0.0.16 → 0.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/DaraForm.d.ts +51 -2
- package/dist/FieldInfoMap.d.ts +8 -1
- package/dist/FormTemplate.d.ts +2 -2
- package/dist/constants.d.ts +5 -1
- package/dist/daracl.form.css +688 -0
- package/dist/daracl.form.min.css +10 -0
- package/dist/daracl.form.min.umd.js +171 -0
- package/dist/daracl.form.min.umd.js.map +1 -0
- package/dist/daracl.form.umd.js +4477 -0
- package/dist/daracl.form.umd.js.map +1 -0
- package/dist/defaultOption.d.ts +8 -0
- package/dist/event/renderEvents.d.ts +1 -1
- package/dist/global.d.ts +6 -0
- package/dist/index.cjs +1806 -519
- package/dist/index.cjs.map +1 -7
- package/dist/index.d.ts +7 -2
- package/dist/index.html +193 -348
- package/dist/index.js +4090 -3101
- package/dist/index.js.map +1 -7
- package/dist/index.min.cjs +171 -0
- package/dist/index.min.cjs.map +1 -0
- package/dist/index.min.js +2910 -0
- package/dist/index.min.js.map +1 -0
- package/dist/index.umd.d.ts +7 -0
- package/dist/renderer/ButtonRender.d.ts +2 -2
- package/dist/renderer/CheckboxRender.d.ts +2 -2
- package/dist/renderer/CustomRender.d.ts +2 -2
- package/dist/renderer/DateRender.d.ts +2 -2
- package/dist/renderer/DropdownRender.d.ts +2 -2
- package/dist/renderer/FileRender.d.ts +2 -2
- package/dist/renderer/GridRender.d.ts +2 -2
- package/dist/renderer/GroupRender.d.ts +2 -2
- package/dist/renderer/HiddenRender.d.ts +2 -2
- package/dist/renderer/NumberRender.d.ts +2 -2
- package/dist/renderer/PasswordRender.d.ts +2 -2
- package/dist/renderer/RadioRender.d.ts +2 -2
- package/dist/renderer/RangeRender.d.ts +2 -2
- package/dist/renderer/Render.d.ts +2 -2
- package/dist/renderer/TabRender.d.ts +2 -2
- package/dist/renderer/TextAreaRender.d.ts +2 -2
- package/dist/renderer/TextRender.d.ts +2 -2
- package/dist/types/FormField.d.ts +18 -13
- package/dist/types/FormOptions.d.ts +1 -1
- package/dist/types/style.d.ts +3 -0
- package/dist/util/renderFactory.d.ts +1 -1
- package/dist/util/styleUtils.d.ts +10 -12
- package/dist/util/utils.d.ts +1 -1
- package/package.json +129 -140
- package/style/abstracts/_index.scss +2 -0
- package/style/abstracts/_mixins.scss +22 -0
- package/style/abstracts/_variables.scss +1 -0
- package/style/base/_base.scss +59 -0
- package/style/base/_index.scss +1 -0
- package/style/components/_button.scss +16 -0
- package/style/components/_field-container.scss +41 -0
- package/style/components/_field-group.scss +16 -0
- package/style/components/_file-list.scss +33 -0
- package/style/components/_form-field.scss +47 -0
- package/style/components/_form-group.scss +90 -0
- package/style/components/_grid-field.scss +121 -0
- package/style/components/_icon.scss +16 -0
- package/style/components/_index.scss +11 -0
- package/style/components/_label.scss +59 -0
- package/style/components/_row.scss +88 -0
- package/style/components/_tab.scss +70 -0
- package/{dist/index.css → style/daracl.form.css} +19 -66
- package/style/daracl.form.css.map +1 -0
- package/style/daracl.form.min.css +2 -0
- package/style/daracl.form.min.css.map +1 -0
- package/style/daracl.form.scss +44 -691
- package/style/themes/_common.scss +13 -0
- package/style/themes/_dark.scss +20 -0
- package/style/themes/_index.scss +14 -0
- package/style/themes/_light.scss +20 -0
- package/style/themes/_mixin.scss +6 -0
- package/dist/commonVender.d.ts +0 -1
- package/dist/daracl.form.js +0 -5720
- package/dist/daracl.form.js.map +0 -1
- package/dist/daracl.form.min.js +0 -7
- package/dist/daracl.form.min.js.LICENSE.txt +0 -5
- package/dist/daracl.form.min.js.map +0 -1
- package/dist/daracl.vender.min.css +0 -5
- package/dist/daracl.vender.min.js +0 -2
- package/dist/daracl.vender.min.js.LICENSE.txt +0 -3
- package/dist/index.css.map +0 -7
- package/dist/indexVender.d.ts +0 -6
- package/dist/main.css +0 -6
- package/dist/main.css.map +0 -1
- package/dist/types/DateTimePicker.d.ts +0 -5
- package/src/index.ts +0 -5
- /package/dist/util/{Lanauage.d.ts → Language.d.ts} +0 -0
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/util/utils.ts", "../src/renderer/Render.ts", "../src/rule/regexpValidator.ts", "../src/rule/validator.ts", "../src/rule/numberValidator.ts", "../src/util/validUtils.ts", "../src/event/renderEvents.ts", "../src/renderer/NumberRender.ts", "../src/rule/stringValidator.ts", "../src/renderer/TextAreaRender.ts", "../src/renderer/DropdownRender.ts", "../src/renderer/TextRender.ts", "../src/renderer/CheckboxRender.ts", "../src/renderer/RadioRender.ts", "../src/renderer/PasswordRender.ts", "../src/rule/fileValidator.ts", "../src/renderer/FileRender.ts", "../src/renderer/CustomRender.ts", "../src/renderer/GroupRender.ts", "../src/renderer/HiddenRender.ts", "../src/renderer/ButtonRender.ts", "../src/renderer/RangeRender.ts", "../src/renderer/DateRender.ts", "../src/util/styleUtils.ts", "../src/renderer/TabRender.ts", "../src/renderer/GridRender.ts", "../src/constants.ts", "../src/util/Lanauage.ts", "../src/util/renderFactory.ts", "../src/FieldInfoMap.ts", "../src/FormTemplate.ts", "../src/DaraForm.ts", "../style/daracl.form.scss", "../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["import { FormField } from \"@t/FormField\";\r\n\r\nconst xssFilter = {\r\n \"&\": \"&\",\r\n \"<\": \"<\",\r\n \">\": \">\",\r\n '\"': \""\",\r\n \"'\": \"'\",\r\n} as any;\r\n\r\nexport const replaceXss = (inputText: string): string => {\r\n let returnText = inputText;\r\n if (returnText) {\r\n Object.keys(xssFilter).forEach((key) => {\r\n returnText = returnText.replaceAll(key, xssFilter[key]);\r\n });\r\n }\r\n return returnText;\r\n};\r\n\r\nexport const hasOwnProp = (obj: any, key: string): boolean => {\r\n return obj.hasOwnProperty(key);\r\n};\r\n\r\nexport const unReplace = (inputText: string): string => {\r\n let returnText = inputText;\r\n\r\n if (returnText) {\r\n Object.keys(xssFilter).forEach((key) => {\r\n returnText = returnText.replaceAll(xssFilter[key], key);\r\n });\r\n }\r\n return returnText;\r\n};\r\n\r\nexport const unFieldName = (fieldName: string): string => {\r\n if (fieldName) {\r\n return unReplace(fieldName).replaceAll('\"', '\\\\\"');\r\n }\r\n return \"\";\r\n};\r\nexport const isBlank = (value: any): boolean => {\r\n if (value === null) return true;\r\n if (value === \"\") return true;\r\n if (typeof value === \"undefined\") return true;\r\n if (typeof value === \"string\" && (value === \"\" || value.replace(/\\s/g, \"\") === \"\")) return true;\r\n\r\n return false;\r\n};\r\n\r\nexport const isUndefined = (value: any): value is undefined => {\r\n return typeof value === \"undefined\";\r\n};\r\n\r\nexport const isFunction = (value: any): boolean => {\r\n return typeof value === \"function\";\r\n};\r\n\r\nexport const isString = (value: any): value is string => {\r\n return typeof value === \"string\";\r\n};\r\nexport const isNumber = (value: any): value is number => {\r\n if (isBlank(value)) {\r\n return false;\r\n }\r\n value = +value;\r\n return !isNaN(value);\r\n};\r\n\r\nexport const isArray = (value: any): value is Array<any> => {\r\n return Array.isArray(value);\r\n};\r\n\r\n/**\r\n * \uAC12\uC788\uB294\uC9C0 \uC5EC\uBD80 \uCCB4\uD06C.\r\n *\r\n * @param {*} value\r\n * @returns {boolean}\r\n */\r\nexport const isEmpty = (value: any): boolean => isUndefined(value) || value == null; //_isEmpty(value);\r\n\r\n/**\r\n * tab render type check\r\n *\r\n * @param {FormField} field\r\n * @returns {boolean} tab type \uC778\uC9C0 \uC5EC\uBD80\r\n */\r\nexport const isTabType = (field: FormField): boolean => {\r\n return field && field.renderType === \"tab\";\r\n};\r\n/**\r\n * grid render type check\r\n *\r\n * @param {FormField} field\r\n * @returns {boolean} grid type \uC778\uC9C0 \uC5EC\uBD80\r\n */\r\nexport const isGridType = (field: FormField): boolean => {\r\n return field && field.renderType === \"grid\";\r\n};\r\nexport const replaceXssField = (field: FormField): FormField => {\r\n field.$xssName = getXssFieldName(field);\r\n\r\n field.label = replaceXss(field.label);\r\n return field;\r\n};\r\n\r\n/**\r\n * \uAC12\uC744 \uBB34\uC2DC\uD558\uB294 \uD544\uB4DC\r\n *\r\n * @param field formField\r\n * @returns\r\n */\r\nexport const ignoreValueField = (field: FormField): boolean => {\r\n return isGridType(field.$parent) || isTabType(field.$parent);\r\n};\r\n\r\n/**\r\n * grid field name xss repalce\r\n *\r\n * @param {FormField} field\r\n * @returns {string} replace \uB41C field name\r\n */\r\nexport const getXssFieldName = (field: FormField): string => {\r\n if (isUndefined(field.$xssName)) {\r\n let returnText = field.name;\r\n if (returnText) {\r\n Object.keys(xssFilter).forEach((key) => {\r\n returnText = returnText.replaceAll(key, \"_\");\r\n });\r\n }\r\n\r\n return \"df_\" + returnText;\r\n }\r\n\r\n return field.$xssName;\r\n};\r\n\r\nexport const getHashCode = (str: string) => {\r\n let hash = 0;\r\n if (str.length == 0) return hash;\r\n for (let i = 0; i < str.length; i++) {\r\n let tmpChar = str.charCodeAt(i);\r\n hash = (hash << 5) - hash + tmpChar;\r\n hash = hash & hash;\r\n }\r\n return String(hash).replaceAll(/-/g, \"_\");\r\n};\r\n\r\nexport const isHiddenField = (field: FormField): boolean => {\r\n if (field.renderType === \"hidden\") {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nexport const templateToElement = (htmlTemplate: string): Element | null => {\r\n const template = document.createElement(\"template\");\r\n template.innerHTML = htmlTemplate;\r\n return template.content.firstElementChild;\r\n};\r\n\r\nexport function isPlainObject(obj: any) {\r\n // \uAC1D\uCCB4\uAC00 \uC544\uB2CC \uACBD\uC6B0 \uB610\uB294 null\uC778 \uACBD\uC6B0 false \uBC18\uD658\r\n if (typeof obj !== \"object\" || obj === null) {\r\n return false;\r\n }\r\n\r\n // \uD504\uB85C\uD1A0\uD0C0\uC785 \uCCB4\uC778\uC744 \uB530\uB77C Object \uC0DD\uC131\uC790\uB97C \uCC3E\uC74C\r\n let proto = obj;\r\n while (Object.getPrototypeOf(proto) !== null) {\r\n proto = Object.getPrototypeOf(proto);\r\n }\r\n\r\n // Object \uC0DD\uC131\uC790\uC758 prototype\uACFC \uAC19\uC73C\uBA74 Plain Object\uB85C \uD310\uB2E8\r\n return Object.getPrototypeOf(obj) === proto;\r\n}\r\n\r\nfunction isObject(value: any) {\r\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\r\n}\r\n\r\nfunction isDate(value: any) {\r\n return value instanceof Date && !isNaN(value.valueOf());\r\n}\r\n\r\n/**\r\n * object merge\r\n * \r\n * @example\r\n ```\r\n merge({},{aaa:'bbb',ccc:'ddd'},{bbb:'bbb','aaa':'aaa'})) -> {\"aaa\": \"aaa\", \"bbb\": \"bbb\", \"ccc\": \"ddd\"}\r\n ```\r\n * @param {...any[]} value\r\n * @returns {object}\r\n */\r\nexport const merge = (...value: any[]): any => {\r\n let reval = value[0];\r\n\r\n if (!isPlainObject(reval) || isEmpty(reval)) {\r\n return reval;\r\n }\r\n\r\n let i = 1;\r\n if (Object.keys(reval).length > 0) {\r\n i = 0;\r\n reval = isArray(reval) ? [] : {};\r\n }\r\n const argLen = value.length;\r\n for (; i < argLen; i += 1) {\r\n cloneDeep(reval, value[i]);\r\n }\r\n\r\n return reval;\r\n};\r\n\r\nfunction trim(s: string): string {\r\n return s.replace(/^\\s+|\\s+$/g, \"\");\r\n}\r\n\r\nfunction cloneDeep(dst: any, src: any): any {\r\n if (isObject(src)) {\r\n return cloneObjectDeep(dst, src);\r\n }\r\n\r\n if (isArray(src)) {\r\n return cloneArrayDeep(dst, src);\r\n }\r\n\r\n if (isDate(src)) {\r\n return new src.constructor(src);\r\n }\r\n return src;\r\n}\r\n\r\n/*eslint no-param-reassign: \"error\"*/\r\nfunction cloneObjectDeep(dst: any, src: any): object {\r\n if (isFunction(src)) {\r\n return src;\r\n }\r\n\r\n for (const key of Object.keys(src)) {\r\n const val = (src as any)[key];\r\n\r\n if (isUndefined(val)) {\r\n continue;\r\n }\r\n\r\n if (val === null) {\r\n dst[key] = val;\r\n } else if (isFunction(val)) {\r\n dst[key] = val;\r\n } else if (isEmpty(dst[key])) {\r\n dst[key] = cloneDeep(isArray(val) ? [] : {}, val);\r\n } else if (!isObject(val)) {\r\n dst[key] = val;\r\n } else {\r\n cloneDeep(dst[key], val);\r\n }\r\n }\r\n return dst;\r\n}\r\n\r\nfunction cloneArrayDeep(dst: any, src: any[]) {\r\n const isObj = isPlainObject(dst);\r\n\r\n for (let i = 0; i < src.length; i += 1) {\r\n const val = src[i];\r\n let newVal;\r\n\r\n if (val == null) {\r\n newVal = val;\r\n } else {\r\n newVal = cloneDeep(isArray(val) ? [] : {}, val);\r\n }\r\n\r\n if (isObj) {\r\n (dst as any)[i] = newVal;\r\n } else {\r\n dst.push(newVal);\r\n }\r\n }\r\n return dst;\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport * as utils from \"src/util/utils\";\r\n\r\nexport default abstract class Render {\r\n protected daraForm;\r\n protected rowElement;\r\n protected field;\r\n\r\n private enableView: boolean = true;\r\n\r\n constructor(form: DaraForm, field: FormField, rowElement: HTMLElement) {\r\n this.daraForm = form;\r\n this.field = field;\r\n this.rowElement = rowElement;\r\n this.createField();\r\n\r\n if (field.tooltip) rowElement.querySelector(\".df-tooltip\")?.setAttribute(\"tooltip\", field.tooltip);\r\n }\r\n\r\n public setDefaultInfo() {\r\n if (utils.isUndefined(this.field.defaultValue)) {\r\n this.setValue(\"\", false);\r\n } else {\r\n this.setValue(this.field.defaultValue, false);\r\n }\r\n\r\n if (!utils.isUndefined(this.field.placeholder)) {\r\n const ele = this.getElement();\r\n if (ele instanceof Element) {\r\n ele.setAttribute(\"placeholder\", this.field.placeholder);\r\n }\r\n }\r\n }\r\n\r\n public setDefaultOption() {\r\n this.setDisabled(this.field.disabled ?? false);\r\n }\r\n\r\n public addChildField(element: Element) {\r\n this.rowElement.querySelector(\".df-field-container\")?.append(element);\r\n }\r\n\r\n static isDataRender(): boolean {\r\n return true;\r\n }\r\n\r\n static isChildrenCreate(): boolean {\r\n return true;\r\n }\r\n\r\n public getForm(): DaraForm {\r\n return this.daraForm;\r\n }\r\n\r\n public abstract mounted(): void;\r\n public abstract getValue(): any;\r\n public abstract setValue(value: any, changeCheckFlag?: boolean): void;\r\n public abstract reset(): void;\r\n public abstract getElement(): any;\r\n public abstract valid(): ValidResult | boolean;\r\n public abstract createField(): void;\r\n\r\n public setValueItems(value: any): void {}\r\n\r\n public static getDescriptionTemplate(field: FormField): string {\r\n return field.description ? `<div class=\"df-description\">${field.description}</div>` : \"\";\r\n }\r\n\r\n public changeEventCall(field: FormField, e: Event | null, rederInfo: Render, fieldValue: any): boolean | undefined {\r\n if (field.onChange) {\r\n let changeInfo: any = {\r\n field: field,\r\n evt: e,\r\n oldValue: field.$value,\r\n value: fieldValue,\r\n };\r\n\r\n if (field.listItem?.list) {\r\n let valuesItem = [];\r\n const valueKey = Render.valuesValueKey(field);\r\n\r\n for (let val of field.listItem.list) {\r\n let changeVal = val[valueKey];\r\n if (utils.isString(fieldValue)) {\r\n if (changeVal == fieldValue) {\r\n valuesItem.push(val);\r\n break;\r\n }\r\n } else if (utils.isArray(fieldValue)) {\r\n if (fieldValue.includes(changeVal)) {\r\n valuesItem.push(val);\r\n }\r\n }\r\n }\r\n\r\n changeInfo.valueItems = valuesItem;\r\n }\r\n\r\n if (changeInfo.oldValue != changeInfo.value && field.onChange.call(null, changeInfo) === false) {\r\n rederInfo.setValue(field.$value, false);\r\n return false;\r\n }\r\n\r\n field.$value = changeInfo.value;\r\n }\r\n\r\n this.daraForm.conditionCheck();\r\n }\r\n\r\n public focus() {\r\n this.getElement().focus();\r\n }\r\n\r\n public isEnableView() {\r\n return this.enableView;\r\n }\r\n\r\n public show() {\r\n this.enableView = true;\r\n this.rowElement.classList.remove(\"df-hidden\");\r\n }\r\n\r\n public hide() {\r\n this.enableView = false;\r\n if (!this.rowElement.classList.contains(\"df-hidden\")) {\r\n this.rowElement.classList.add(\"df-hidden\");\r\n }\r\n }\r\n\r\n /**\r\n * \uC124\uBA85 \uCD94\uAC00\r\n *\r\n * @public\r\n * @param {string} desc\r\n */\r\n public setDescription(desc: string) {\r\n const descEle = this.rowElement.querySelector(\".df-description\");\r\n if (descEle) {\r\n descEle.innerHTML = desc;\r\n } else {\r\n const fieldEle = this.rowElement.querySelector(\".df-field\");\r\n if (fieldEle) {\r\n const parser = new DOMParser();\r\n this.field.description = desc;\r\n const descEle = parser.parseFromString(Render.getDescriptionTemplate(this.field), \"text/html\").querySelector(\".df-description\");\r\n\r\n if (descEle) fieldEle.parentNode?.insertBefore(descEle, fieldEle.nextSibling);\r\n }\r\n }\r\n }\r\n\r\n public setActive(id: string): void {\r\n //console.log(\"parent\");\r\n }\r\n\r\n public setDisabled(flag: boolean) {\r\n const ele = this.getElement();\r\n if (ele instanceof HTMLElement) {\r\n if (flag === false) {\r\n this.getElement().removeAttribute(\"disabled\");\r\n } else {\r\n this.getElement().setAttribute(\"disabled\", true);\r\n }\r\n }\r\n }\r\n\r\n public commonValidator() {\r\n //this.field.diff\r\n }\r\n\r\n public static valuesValueKey(field: FormField): string {\r\n return field.listItem?.valueField ? field.listItem.valueField : \"value\";\r\n }\r\n\r\n public static valuesLabelKey(field: FormField): string {\r\n return field.listItem?.labelField ? field.listItem.labelField : \"label\";\r\n }\r\n\r\n public static valuesLabelValue(label: string, val: any) {\r\n let replaceFlag = false;\r\n const resultValue = label.replace(/\\{\\{([A-Za-z0-9_.]*)\\}\\}/g, (match, key) => {\r\n replaceFlag = true;\r\n return val[key] || \"\";\r\n });\r\n\r\n if (replaceFlag) {\r\n return resultValue;\r\n }\r\n\r\n return val[label] || \"\";\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\n\r\nconst regexp = {\r\n mobile: /^\\d{3}-\\d{3,4}-\\d{4}$/,\r\n email: /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/,\r\n url: /^(?:(?:https?|HTTPS?|ftp|FTP):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-zA-Z\\u00a1-\\uffff0-9]-*)*[a-zA-Z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-zA-Z\\u00a1-\\uffff0-9]-*)*[a-zA-Z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-zA-Z\\u00a1-\\uffff]{2,}))\\.?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/,\r\n number: /\\d$/,\r\n alpha: /^[a-zA-Z]+$/,\r\n \"alpha-num\": /^[a-zA-Z0-9]+$/,\r\n variable: /^[a-zA-Z0-9_$][a-zA-Z0-9_$]*$/,\r\n \"number-char\": /^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]/,\r\n \"upper-char\": /^(?=.*?[A-Z])(?=.*?[a-z])/,\r\n \"upper-char-special\": /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[#?!@$%^&*-])/,\r\n \"upper-char-special-number\": /^(?=.*[A-Za-z])(?=.*\\d)(?=.*[@$!%*#?&])[A-Za-z\\d@$!%*#?&]/,\r\n};\r\n\r\n/**\r\n * \uC815\uADDC\uC2DD \uC720\uD6A8\uC131 \uCCB4\uD06C.\r\n *\r\n * @param {string} value\r\n * @param {FormField} field\r\n * @param {(ValidResult | undefined)} result\r\n * @returns {ValidResult}\r\n */\r\nexport const regexpValidator = (value: string, field: FormField, result: ValidResult): ValidResult => {\r\n if (!field.$instance.isEnableView()) {\r\n return { name: field.name, constraint: [] };\r\n }\r\n\r\n if (typeof result === \"undefined\") {\r\n result = { name: field.name, constraint: [] };\r\n }\r\n\r\n const regexpType = field.regexpType;\r\n\r\n if (regexpType) {\r\n if (!regexp[regexpType].test(value)) {\r\n result.regexp = regexpType;\r\n return result;\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n", "import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { regexpValidator } from \"./regexpValidator\";\r\nimport * as utils from \"src/util/utils\";\r\n\r\n/**\r\n * validator , regexp \uCCB4\uD06C .\r\n *\r\n * @param {string} value field value\r\n * @param {FormField} field field \uC815\uBCF4\r\n * @param {ValidResult} result\r\n * @returns {(ValidResult | boolean)}\r\n */\r\nexport const validator = (value: string, field: FormField, result: ValidResult): ValidResult | boolean => {\r\n if (field.validator) {\r\n result.validator = field.validator(field, value);\r\n if (typeof result.validator === \"object\") {\r\n return result;\r\n }\r\n }\r\n\r\n result = regexpValidator(value, field, result);\r\n\r\n if (result.regexp) {\r\n return result;\r\n }\r\n\r\n if (field.different) {\r\n const diffFieldName = field.different.field;\r\n const diffField = field.$instance.getForm().getField(diffFieldName);\r\n\r\n if (!utils.isEmpty(diffField) && field.$instance.getValue() == diffField.$instance.getValue()) {\r\n result.message = field.different.message;\r\n return result;\r\n }\r\n }\r\n\r\n if (field.identical) {\r\n const diffFieldName = field.identical.field;\r\n const diffField = field.$instance.getForm().getField(diffFieldName);\r\n\r\n if (!utils.isEmpty(diffField) && field.$instance.getValue() != diffField.$instance.getValue()) {\r\n result.message = field.identical.message;\r\n return result;\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n", "import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"src/constants\";\r\nimport { validator } from \"./validator\";\r\nimport * as utils from \"src/util/utils\";\r\n\r\n/**\r\n * \uC22B\uC790 \uC720\uD6A8\uC131 \uCCB4\uD06C\r\n *\r\n * @param {string} value\r\n * @param {FormField} field\r\n * @returns {(ValidResult | boolean)}\r\n */\r\nexport const numberValidator = (value: string, field: FormField): ValidResult | boolean => {\r\n if (!field.$instance.isEnableView()) {\r\n return true;\r\n }\r\n\r\n const result: ValidResult = { name: field.name, constraint: [] };\r\n const numValue = Number(value);\r\n\r\n if (field.required && utils.isBlank(value)) {\r\n result.constraint.push(RULES.REQUIRED);\r\n return result;\r\n }\r\n\r\n if (!utils.isNumber(value)) {\r\n result.constraint.push(RULES.NAN);\r\n return result;\r\n }\r\n\r\n if (validator(value, field, result) !== true) {\r\n return result;\r\n }\r\n\r\n const rule = field.rule;\r\n if (rule) {\r\n const isMinimum = utils.isNumber(rule.minimum),\r\n isMaximum = utils.isNumber(rule.maximum);\r\n\r\n let minRule = false,\r\n minExclusive = false,\r\n maxRule = false,\r\n maxExclusive = false;\r\n\r\n if (isMinimum) {\r\n if (rule.exclusiveMinimum && numValue <= rule.minimum) {\r\n minExclusive = true;\r\n } else if (numValue < rule.minimum) {\r\n minRule = true;\r\n }\r\n }\r\n\r\n if (isMaximum) {\r\n if (rule.exclusiveMaximum && numValue >= rule.maximum) {\r\n maxExclusive = true;\r\n } else if (numValue > rule.maximum) {\r\n maxRule = true;\r\n }\r\n }\r\n\r\n if (isMinimum && isMaximum && (minRule || minExclusive || maxRule || maxExclusive)) {\r\n if (rule.exclusiveMinimum && rule.exclusiveMaximum && (minExclusive || maxExclusive)) {\r\n result.constraint.push(RULES.BETWEEN_EXCLUSIVE_MINMAX);\r\n } else if (minExclusive) {\r\n result.constraint.push(RULES.BETWEEN_EXCLUSIVE_MIN);\r\n } else if (maxExclusive) {\r\n result.constraint.push(RULES.BETWEEN_EXCLUSIVE_MAX);\r\n } else {\r\n result.constraint.push(RULES.BETWEEN);\r\n }\r\n } else {\r\n if (minExclusive) {\r\n result.constraint.push(RULES.EXCLUSIVE_MIN);\r\n }\r\n\r\n if (maxExclusive) {\r\n result.constraint.push(RULES.EXCLUSIVE_MAX);\r\n }\r\n\r\n if (minRule) {\r\n result.constraint.push(RULES.MIN);\r\n }\r\n\r\n if (maxRule) {\r\n result.constraint.push(RULES.MAX);\r\n }\r\n }\r\n }\r\n\r\n if (result.constraint.length > 0) {\r\n return result;\r\n }\r\n\r\n return true;\r\n};\r\n", "import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport Lanauage from \"./Lanauage\";\r\n\r\nexport const invalidMessage = (field: FormField, rowElement: Element, validResult: ValidResult | boolean) => {\r\n if (validResult === true) {\r\n rowElement.classList.remove(\"invalid\");\r\n\r\n if (!rowElement.classList.contains(\"valid\")) {\r\n rowElement.classList.add(\"valid\");\r\n }\r\n\r\n const helpMessageElement = rowElement.querySelector(\".help-message\");\r\n if (helpMessageElement) {\r\n helpMessageElement.innerHTML = \"\";\r\n }\r\n\r\n return;\r\n }\r\n\r\n rowElement.classList.remove(\"valid\");\r\n\r\n if (!rowElement.classList.contains(\"invalid\")) {\r\n rowElement.classList.add(\"invalid\");\r\n }\r\n\r\n if (validResult !== false) {\r\n const message: string[] = Lanauage.validMessage(field, validResult);\r\n\r\n if (validResult.message) {\r\n message.push(validResult.message);\r\n }\r\n\r\n const helpMessageElement = rowElement.querySelector(\".help-message\");\r\n if (helpMessageElement && message.length > 0) {\r\n const msgHtml: string[] = [];\r\n message.forEach((item) => {\r\n msgHtml.push(`<div>${item}</div>`);\r\n });\r\n helpMessageElement.innerHTML = msgHtml.join(\"\");\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * remove row element style class\r\n *\r\n * @param {Element} rowElement\r\n */\r\nexport const resetRowElementStyleClass = (rowElement: Element) => {\r\n rowElement.classList.remove(\"invalid\");\r\n rowElement.classList.remove(\"valid\");\r\n};\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"src/renderer/Render\";\r\nimport * as utils from \"src/util/utils\";\r\n\r\nexport const inputEvent = (field: FormField, element: Element, renderInfo: Render) => {\r\n element.addEventListener(\"input\", (e: Event) => {\r\n customChangeEventCall(field, e, renderInfo, renderInfo.getValue());\r\n renderInfo.valid();\r\n });\r\n};\r\n\r\nexport const numberInputEvent = (field: FormField, element: HTMLInputElement, renderInfo: Render) => {\r\n element.addEventListener(\"keyup\", (e: any) => {\r\n const val = e.target.value;\r\n\r\n if (!utils.isNumber(val)) {\r\n element.value = val.replace(/[^0-9\\.\\-\\+]/g, \"\");\r\n e.preventDefault();\r\n }\r\n customChangeEventCall(field, e, renderInfo, renderInfo.getValue());\r\n renderInfo.valid();\r\n });\r\n\r\n /*\r\n element.addEventListener('input', (e: any) => {\r\n customChangeEventCall(field, e, renderInfo);\r\n renderInfo.valid();\r\n })\r\n */\r\n};\r\n\r\nexport const dropdownChangeEvent = (field: FormField, element: Element, renderInfo: Render) => {\r\n element.addEventListener(\"change\", (e: any) => {\r\n customChangeEventCall(field, e, renderInfo, renderInfo.getValue());\r\n renderInfo.valid();\r\n });\r\n};\r\n\r\nexport const customChangeEventCall = (field: FormField, e: Event, renderInfo: Render, value: any) => {\r\n renderInfo.changeEventCall(field, e, renderInfo, value);\r\n};\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { numberValidator } from \"src/rule/numberValidator\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { numberInputEvent } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class NumberRender extends Render {\r\n private element: HTMLInputElement;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n }\r\n\r\n mounted() {\r\n numberInputEvent(this.field, this.element, this);\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field\">\r\n <input type=\"text\" name=\"${field.$xssName}\" class=\"form-field number help-icon\" />\r\n </div> \r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `;\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\r\n }\r\n\r\n getValue() {\r\n return this.element.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n this.element.value = this.field.$value;\r\n return;\r\n }\r\n this.field.$value = value;\r\n this.element.value = value;\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const validResult = numberValidator(this.getValue(), this.field);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"src/constants\";\r\nimport * as utils from \"src/util/utils\";\r\nimport { validator } from \"./validator\";\r\n\r\n/**\r\n * string validator\r\n *\r\n * @param {string} value\r\n * @param {FormField} field\r\n * @returns {(ValidResult | boolean)}\r\n */\r\nexport const stringValidator = (value: string, field: FormField): ValidResult | boolean => {\r\n if (!field.$instance.isEnableView()) {\r\n return true;\r\n }\r\n\r\n let result: ValidResult = { name: field.name, constraint: [] };\r\n\r\n if (field.required && utils.isBlank(value)) {\r\n result.constraint.push(RULES.REQUIRED);\r\n return result;\r\n }\r\n const validResult = validator(value, field, result);\r\n if (validResult !== true) {\r\n return validResult;\r\n }\r\n\r\n const rule = field.rule;\r\n\r\n if (rule) {\r\n const valueLength = value.length;\r\n\r\n const isMinNumber = utils.isNumber(rule.minLength),\r\n isMaxNumber = utils.isNumber(rule.maxLength);\r\n\r\n let minRule = false,\r\n maxRule = false;\r\n if (isMinNumber && valueLength < rule.minLength) {\r\n minRule = true;\r\n }\r\n if (isMaxNumber && valueLength > rule.maxLength) {\r\n maxRule = true;\r\n }\r\n\r\n if (isMinNumber && isMaxNumber && (minRule || maxRule)) {\r\n result.constraint.push(RULES.BETWEEN);\r\n } else {\r\n if (minRule) {\r\n result.constraint.push(RULES.MIN_LENGTH);\r\n }\r\n\r\n if (maxRule) {\r\n result.constraint.push(RULES.MAX_LENGTH);\r\n }\r\n }\r\n if (result.constraint.length > 0) {\r\n return result;\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { stringValidator } from \"src/rule/stringValidator\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { inputEvent } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class TextAreaRender extends Render {\r\n private element: HTMLTextAreaElement;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n }\r\n\r\n mounted() {\r\n inputEvent(this.field, this.element, this);\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n let rows = field.customOptions?.rows;\r\n rows = +rows > 0 ? rows : 3;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field\">\r\n <textarea name=\"${field.$xssName}\" rows=\"${rows}\" class=\"form-field textarea help-icon\"></textarea>\r\n </div> \r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `;\r\n\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLTextAreaElement;\r\n }\r\n\r\n getValue() {\r\n return this.element.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n this.element.value = this.field.$value;\r\n return;\r\n }\r\n this.field.$value = value;\r\n this.element.value = value;\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const validResult = stringValidator(this.getValue(), this.field);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FormField, ValuesInfo } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"src/constants\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { dropdownChangeEvent } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport * as utils from \"src/util/utils\";\r\nimport Lanauage from \"src/util/Lanauage\";\r\n\r\nexport default class DropdownRender extends Render {\r\n private element: HTMLSelectElement;\r\n private defaultSelected;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n let initDefaultValue = \"\";\r\n\r\n if (!utils.isUndefined(field.defaultValue)) {\r\n initDefaultValue = field.defaultValue;\r\n }\r\n\r\n const valueKey = DropdownRender.valuesValueKey(field);\r\n let initDefaultValueFlag = false;\r\n this.field.listItem?.list?.forEach((item) => {\r\n let itemValue = item[valueKey];\r\n if (item.selected) {\r\n this.defaultSelected = itemValue;\r\n }\r\n if (itemValue == initDefaultValue) {\r\n initDefaultValueFlag = true;\r\n }\r\n });\r\n\r\n if (initDefaultValueFlag) {\r\n this.defaultSelected = initDefaultValue;\r\n } else if (!this.defaultSelected) {\r\n if (field.customOptions?.disableDefaultOption === true) {\r\n this.defaultSelected = this.field.listItem?.list?.length > 0 ? this.field.listItem.list[0][valueKey] || \"\" : \"\";\r\n }\r\n }\r\n\r\n if (utils.isUndefined(this.defaultSelected)) {\r\n this.defaultSelected = \"\";\r\n }\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setValue(this.defaultSelected, false);\r\n }\r\n\r\n mounted() {\r\n dropdownChangeEvent(this.field, this.element, this);\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n let template = ` <div class=\"df-field\"><select name=\"${field.$xssName}\" class=\"form-field dropdown\">\r\n ${this.dropdownValuesTemplate(field)}\r\n </select> <i class=\"help-icon\"></i></div>\r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `;\r\n fieldContainerElement.innerHTML = template;\r\n\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLSelectElement;\r\n }\r\n\r\n public setValueItems(items: any): void {\r\n if (this.field.listItem) {\r\n this.field.listItem.list = items;\r\n } else {\r\n this.field.listItem = {\r\n list: items,\r\n } as ValuesInfo;\r\n }\r\n this.element.innerHTML = this.dropdownValuesTemplate(this.field);\r\n\r\n if (!utils.isBlank(this.field.$value)) {\r\n const currentValue = this.field.$value;\r\n this.field.$value = \"\";\r\n this.setValue(currentValue);\r\n }\r\n }\r\n\r\n getValue() {\r\n return this.element.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n this.element.value = this.field.$value;\r\n return;\r\n }\r\n this.field.$value = value;\r\n this.element.value = value;\r\n }\r\n\r\n reset() {\r\n this.setValue(this.defaultSelected, false);\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const value = this.getValue();\r\n\r\n let validResult: ValidResult | boolean = true;\r\n\r\n if (this.field.required) {\r\n if (value.length < 1) {\r\n validResult = { name: this.field.name, constraint: [] };\r\n validResult.constraint.push(RULES.REQUIRED);\r\n }\r\n }\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n\r\n public dropdownValuesTemplate(field: FormField) {\r\n const labelKey = Render.valuesLabelKey(field);\r\n const valueKey = Render.valuesValueKey(field);\r\n let template = \"\";\r\n\r\n if (field.customOptions?.disableDefaultOption !== true) {\r\n template += `<option value=\"\">${Lanauage.getMessage(\"selection\")}</option>`;\r\n }\r\n field.listItem?.list?.forEach((val) => {\r\n const attr = `${val.selected ? \"selected\" : \"\"} ${val.disabled ? \"disabled\" : \"\"}`;\r\n if (utils.isUndefined(val[valueKey]) && val.label) {\r\n template += `<option value=\"${val.value || \"\"}\" ${attr}>${val.label}</option>`;\r\n } else {\r\n template += `<option value=\"${val[valueKey]}\" ${attr}>${Render.valuesLabelValue(labelKey, val)}</option>`;\r\n }\r\n });\r\n\r\n return template;\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { stringValidator } from \"src/rule/stringValidator\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { inputEvent } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class TextRender extends Render {\r\n private element: HTMLInputElement;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n }\r\n\r\n mounted() {\r\n inputEvent(this.field, this.element, this);\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field\">\r\n <input type=\"text\" name=\"${field.$xssName}\" class=\"form-field text help-icon\" />\r\n </div>\r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `;\r\n\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\r\n }\r\n\r\n getValue() {\r\n return this.element.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n this.element.value = this.field.$value;\r\n return;\r\n }\r\n this.field.$value = value;\r\n this.element.value = value;\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLInputElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const validResult = stringValidator(this.getValue(), this.field);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FormField, ValuesInfo } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport * as utils from \"src/util/utils\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"src/constants\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { customChangeEventCall } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class CheckboxRender extends Render {\r\n private defaultCheckValue: any[] = [];\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.defaultCheckValue = [];\r\n let initDefaultValue = [] as any;\r\n if (!utils.isUndefined(field.defaultValue)) {\r\n if (utils.isArray(field.defaultValue)) {\r\n initDefaultValue = field.defaultValue;\r\n } else {\r\n initDefaultValue = [field.defaultValue];\r\n }\r\n }\r\n\r\n const valueKey = CheckboxRender.valuesValueKey(field);\r\n\r\n if (utils.isUndefined(this.field.listItem)) {\r\n this.setValueItems([{ label: \"\", value: \"Y\" }]);\r\n }\r\n\r\n let initDefaultValueFlag = false;\r\n this.field.listItem?.list?.forEach((item) => {\r\n let itemValue = item[valueKey];\r\n if (item.selected) {\r\n this.defaultCheckValue.push(itemValue ? itemValue : true);\r\n }\r\n if (initDefaultValue.includes(itemValue)) {\r\n initDefaultValueFlag = true;\r\n }\r\n });\r\n\r\n this.defaultCheckValue = initDefaultValueFlag ? initDefaultValue : this.defaultCheckValue;\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setValue(this.defaultCheckValue, false);\r\n }\r\n\r\n public mounted() {\r\n this.initEvent();\r\n }\r\n\r\n public initEvent() {\r\n const checkboxes = this.rowElement.querySelectorAll(this.getSelector());\r\n\r\n checkboxes.forEach((ele) => {\r\n ele.addEventListener(\"change\", (e: Event) => {\r\n customChangeEventCall(this.field, e, this, this.getValue());\r\n this.valid();\r\n });\r\n });\r\n }\r\n\r\n public getSelector() {\r\n return `input[type=\"checkbox\"][name=\"${this.field.$xssName}\"]`;\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n const templates: string[] = [];\r\n const fieldName = field.$xssName;\r\n\r\n const labelKey = Render.valuesLabelKey(field);\r\n const valueKey = Render.valuesValueKey(field);\r\n\r\n templates.push(` <div class=\"df-field\"><div class=\"field-group\">`);\r\n field.listItem?.list?.forEach((val) => {\r\n const checkVal = val[valueKey];\r\n templates.push(`\r\n <span class=\"field ${field.listItem.orientation == \"vertical\" ? \"vertical\" : \"horizontal\"}\">\r\n <label>\r\n <input type=\"checkbox\" name=\"${fieldName}\" value=\"${checkVal ? utils.replaceXss(checkVal) : \"\"}\" class=\"form-field checkbox\" ${val.selected ? \"checked\" : \"\"} ${val.disabled ? \"disabled\" : \"\"} />\r\n ${Render.valuesLabelValue(labelKey, val)}\r\n </label>\r\n </span>\r\n `);\r\n });\r\n templates.push(`<i class=\"daracl-icon help-icon\"></i></div></div> ${Render.getDescriptionTemplate(field)}<div class=\"help-message\"></div>`);\r\n\r\n fieldContainerElement.innerHTML = templates.join(\"\");\r\n }\r\n\r\n public setValueItems(items: any): void {\r\n const containerEle = this.rowElement.querySelector(\".df-field-container\");\r\n if (containerEle) {\r\n if (this.field.listItem) {\r\n this.field.listItem.list = items;\r\n } else {\r\n this.field.listItem = {\r\n list: items,\r\n } as ValuesInfo;\r\n }\r\n\r\n this.createField();\r\n\r\n if (!utils.isBlank(this.field.$value)) {\r\n const currentValue = this.field.$value;\r\n this.field.$value = \"\";\r\n this.setValue(currentValue);\r\n }\r\n }\r\n }\r\n\r\n getValue() {\r\n const checkboxes = this.rowElement.querySelectorAll(this.getSelector());\r\n\r\n if (checkboxes.length > 1) {\r\n const checkValue: any[] = [];\r\n checkboxes.forEach((ele) => {\r\n const checkEle = ele as HTMLInputElement;\r\n if (checkEle.checked) {\r\n checkValue.push(checkEle.value);\r\n }\r\n });\r\n return checkValue;\r\n } else {\r\n const checkElement = this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]`) as HTMLInputElement;\r\n\r\n if (checkElement?.checked) {\r\n return checkElement.value ? checkElement.value : true;\r\n }\r\n\r\n return checkElement.value ? \"\" : false;\r\n }\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n value = this.field.$value;\r\n }\r\n\r\n this.field.$value = value;\r\n if (value === true) {\r\n (this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]`) as HTMLInputElement).checked = true;\r\n return;\r\n }\r\n\r\n if (value === false) {\r\n (this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]`) as HTMLInputElement).checked = false;\r\n return;\r\n }\r\n\r\n let valueArr: any[] = [];\r\n if (Array.isArray(value)) {\r\n valueArr = value;\r\n } else {\r\n valueArr.push(value);\r\n }\r\n\r\n const checkboxes = this.rowElement.querySelectorAll(this.getSelector());\r\n\r\n checkboxes.forEach((ele) => {\r\n (ele as HTMLInputElement).checked = false;\r\n });\r\n\r\n valueArr.forEach((val) => {\r\n const ele = this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"][value=\"${val}\"]`) as HTMLInputElement;\r\n if (ele) ele.checked = true;\r\n });\r\n }\r\n\r\n reset() {\r\n if (this.field.listItem?.list?.length == 1 && this.defaultCheckValue.length == 1) {\r\n this.setValue(true, false);\r\n } else {\r\n this.setValue(this.defaultCheckValue, false);\r\n }\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): any {\r\n return this.rowElement.querySelectorAll(`[name=\"${this.field.$xssName}\"]`);\r\n }\r\n\r\n public focus() {\r\n const elements = this.getElement();\r\n\r\n if (elements && elements.length > 0) {\r\n this.getElement()[0].focus();\r\n }\r\n }\r\n\r\n valid(): any {\r\n const value = this.getValue();\r\n\r\n let validResult: ValidResult | boolean = true;\r\n\r\n if (this.field.required && utils.isArray(value)) {\r\n if ((value as any[]).length < 1) {\r\n validResult = { name: this.field.name, constraint: [] };\r\n validResult.constraint.push(RULES.REQUIRED);\r\n }\r\n }\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FormField, ValuesInfo } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"src/constants\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { customChangeEventCall } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport * as utils from \"src/util/utils\";\r\n\r\nexport default class RadioRender extends Render {\r\n private defaultCheckValue;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.defaultCheckValue = \"\";\r\n let initDefaultValue = [] as any;\r\n if (!utils.isUndefined(field.defaultValue)) {\r\n initDefaultValue = field.defaultValue;\r\n }\r\n\r\n const valueKey = RadioRender.valuesValueKey(field);\r\n let initDefaultValueFlag = false;\r\n this.field.listItem?.list?.forEach((item) => {\r\n let itemValue = item[valueKey];\r\n if (item.selected) {\r\n this.defaultCheckValue = itemValue;\r\n }\r\n\r\n if (initDefaultValue == itemValue) {\r\n initDefaultValueFlag = true;\r\n }\r\n });\r\n\r\n // \uCC98\uB9AC \uD560\uAC83.\r\n\r\n if (initDefaultValueFlag) {\r\n this.defaultCheckValue = initDefaultValue;\r\n } else if (!this.defaultCheckValue) {\r\n this.defaultCheckValue = this.field.listItem?.list?.length > 0 ? this.field.listItem?.list[0][valueKey] : \"\";\r\n }\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setValue(this.defaultCheckValue, false);\r\n }\r\n\r\n public mounted() {\r\n this.initEvent();\r\n }\r\n\r\n public initEvent() {\r\n const checkboxes = this.rowElement.querySelectorAll(this.getSelector());\r\n\r\n checkboxes.forEach((ele) => {\r\n ele.addEventListener(\"change\", (e: Event) => {\r\n customChangeEventCall(this.field, e, this, this.getValue());\r\n\r\n this.valid();\r\n });\r\n });\r\n }\r\n\r\n public getSelector() {\r\n return `input[type=\"radio\"][name=\"${this.field.$xssName}\"]`;\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n const templates: string[] = [];\r\n const fieldName = field.$xssName;\r\n\r\n const labelKey = Render.valuesLabelKey(field);\r\n const valueKey = Render.valuesValueKey(field);\r\n\r\n templates.push(`<div class=\"df-field\"><div class=\"field-group\">`);\r\n\r\n field.listItem?.list?.forEach((val) => {\r\n const radioVal = val[valueKey];\r\n\r\n templates.push(\r\n `<span class=\"field ${field.orientation == \"vertical\" ? \"vertical\" : \"horizontal\"}\">\r\n <label>\r\n <input type=\"radio\" name=\"${fieldName}\" value=\"${radioVal}\" class=\"form-field radio\" ${val.selected ? \"checked\" : \"\"} ${val.disabled ? \"disabled\" : \"\"}/>\r\n ${Render.valuesLabelValue(labelKey, val)}\r\n </label>\r\n </span>\r\n `\r\n );\r\n });\r\n templates.push(`<i class=\"daracl-icon help-icon\"></i></div></div>\r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `);\r\n\r\n fieldContainerElement.innerHTML = templates.join(\"\");\r\n\r\n this.initEvent();\r\n }\r\n\r\n public setValueItems(items: any): void {\r\n const containerEle = this.rowElement.querySelector(\".df-field-container\");\r\n if (containerEle) {\r\n if (this.field.listItem) {\r\n this.field.listItem.list = items;\r\n } else {\r\n this.field.listItem = {\r\n list: items,\r\n } as ValuesInfo;\r\n }\r\n\r\n this.createField();\r\n\r\n if (!utils.isBlank(this.field.$value)) {\r\n const currentValue = this.field.$value;\r\n this.field.$value = \"\";\r\n this.setValue(currentValue);\r\n }\r\n }\r\n }\r\n\r\n getValue() {\r\n return (this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]:checked`) as HTMLInputElement)?.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n value = this.field.$value;\r\n }\r\n\r\n this.field.$value = value;\r\n if (value === true) {\r\n (this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]`) as HTMLInputElement).checked = true;\r\n return;\r\n }\r\n\r\n if (value === false) {\r\n (this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]`) as HTMLInputElement).checked = false;\r\n return;\r\n }\r\n\r\n const elements = this.rowElement.querySelectorAll(this.getSelector());\r\n\r\n elements.forEach((ele) => {\r\n let radioEle = ele as HTMLInputElement;\r\n if (radioEle.value == value) {\r\n radioEle.checked = true;\r\n } else {\r\n radioEle.checked = false;\r\n }\r\n });\r\n }\r\n\r\n reset() {\r\n this.setValue(this.defaultCheckValue, false);\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): any {\r\n return this.rowElement.querySelectorAll(this.getSelector());\r\n }\r\n\r\n public focus() {\r\n const elements = this.getElement();\r\n\r\n if (elements && elements.length > 0) {\r\n this.getElement()[0].focus();\r\n }\r\n }\r\n\r\n valid(): any {\r\n const value = this.getValue();\r\n\r\n let validResult: ValidResult | boolean = true;\r\n\r\n if (this.field.required) {\r\n if (utils.isBlank(value)) {\r\n validResult = { name: this.field.name, constraint: [] };\r\n validResult.constraint.push(RULES.REQUIRED);\r\n }\r\n }\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { stringValidator } from \"src/rule/stringValidator\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { inputEvent } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class PasswordRender extends Render {\r\n private element: HTMLInputElement;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n }\r\n\r\n mounted() {\r\n inputEvent(this.field, this.element, this);\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field\">\r\n <input type=\"password\" name=\"${field.$xssName}\" class=\"form-field password help-icon\" autocomplete=\"off\" />\r\n </div>\r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `;\r\n\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\r\n }\r\n\r\n getValue() {\r\n return this.element.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n this.element.value = this.field.$value;\r\n return;\r\n }\r\n this.field.$value = value;\r\n this.element.value = value;\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const validResult = stringValidator(this.getValue(), this.field);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FileInfo, FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"src/constants\";\r\n\r\n/**\r\n * file validator\r\n *\r\n * @param {HTMLInputElement} element\r\n * @param {FormField} field\r\n * @param {FileInfo[]} fileList\r\n * @returns {(ValidResult | boolean)}\r\n */\r\nexport const fileValidator = (element: HTMLInputElement, field: FormField, fileList: FileInfo[]): ValidResult | boolean => {\r\n const result: ValidResult = { name: field.name, constraint: [] };\r\n\r\n if (field.required && fileList.length < 1) {\r\n result.constraint.push(RULES.REQUIRED);\r\n return result;\r\n }\r\n\r\n if (result.constraint.length > 0) {\r\n return result;\r\n }\r\n\r\n return true;\r\n};\r\n", "import { FileInfo, FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { fileValidator } from \"src/rule/fileValidator\";\r\nimport Lanauage from \"src/util/Lanauage\";\r\nimport { customChangeEventCall } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport * as utils from \"src/util/utils\";\r\n\r\nexport default class FileRender extends Render {\r\n private element: HTMLInputElement;\r\n private removeIds: any[] = [];\r\n private uploadFiles: any = {};\r\n private fileList: any[] = [];\r\n private fileSeq = 0;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.element = rowElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\r\n this.fileList = field.listItem?.list || [];\r\n this.mounted();\r\n this.setDefaultOption();\r\n }\r\n\r\n mounted() {\r\n this.element.addEventListener(\"change\", (e: Event) => {\r\n const files = (e.target as HTMLInputElement)?.files;\r\n\r\n if (files) {\r\n let fileList = [];\r\n for (let item of files) {\r\n fileList.push(item);\r\n }\r\n this.addFiles(fileList);\r\n }\r\n customChangeEventCall(this.field, e, this, this.fileList);\r\n this.valid();\r\n });\r\n\r\n this.fileList.forEach((file) => {\r\n file.$seq = this.fileSeq += 1;\r\n });\r\n\r\n this.setFileList(this.fileList);\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field\">\r\n <span class=\"file-wrapper\">\r\n <label class=\"file-label\">\r\n <input type=\"file\" name=\"${field.$xssName}\" class=\"form-field file\" multiple />\r\n ${Lanauage.getMessage(\"fileButton\")}\r\n </label>\r\n <i class=\"daracl-icon help-icon\"></i>\r\n </span>\r\n </div>\r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"daracl-file-list\"></div>\r\n <div class=\"help-message\"></div>\r\n `;\r\n\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\r\n }\r\n\r\n addFiles(files: any[]) {\r\n let addFlag = false;\r\n\r\n const newFiles: FileInfo[] = [];\r\n\r\n for (let item of files) {\r\n const fileCheckList = this.fileList.filter((fileItem) => fileItem.fileName == item.name && fileItem.fileSize == item.size && fileItem.lastModified == item.lastModified);\r\n\r\n if (fileCheckList.length > 0) continue;\r\n this.fileSeq += 1;\r\n this.uploadFiles[this.fileSeq] = item;\r\n\r\n let newFileInfo = {\r\n fileName: item.name,\r\n $seq: this.fileSeq,\r\n fileSize: item.size,\r\n lastModified: item.lastModified,\r\n } as FileInfo;\r\n\r\n newFiles.push(newFileInfo);\r\n addFlag = true;\r\n }\r\n if (addFlag) {\r\n this.setFileList(newFiles);\r\n this.fileList.push(...newFiles);\r\n }\r\n }\r\n\r\n private setFileList(fileList: FileInfo[], initFlag?: boolean | undefined) {\r\n const fileListElement = this.rowElement.querySelector(\".daracl-file-list\");\r\n\r\n if (fileListElement) {\r\n if (initFlag === true) {\r\n fileListElement.innerHTML = \"\";\r\n }\r\n\r\n const fileTemplateHtml: string[] = [];\r\n\r\n fileList.forEach((file) => {\r\n fileTemplateHtml.push(`\r\n <div class=\"file-item\" data-seq=\"${file.$seq}\">\r\n ${file.fileId ? '<span class=\"file-icon download\"></span>' : '<span class=\"file-icon\"></span>'} <span class=\"file-icon remove\"></span>\r\n <span class=\"file-name\">${file.fileName}</span > \r\n </div>`);\r\n });\r\n\r\n fileListElement.insertAdjacentHTML(\"beforeend\", fileTemplateHtml.join(\"\"));\r\n\r\n fileList.forEach((item) => {\r\n this.removeFileEvent(item, fileListElement);\r\n this.downloadFileEvent(item, fileListElement);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * \uD30C\uC77C \uB2E4\uC6B4\uB85C\uB4DC \uC774\uBCA4\uD2B8 \uCC98\uB9AC.\r\n *\r\n * @param item\r\n * @param fileListElement\r\n */\r\n private downloadFileEvent(item: FileInfo, fileListElement: Element) {\r\n const ele = fileListElement.querySelector(`[data-seq=\"${item.$seq}\"] .download`);\r\n if (ele) {\r\n ele.addEventListener(\"click\", (evt: Event) => {\r\n const fileItemElement = (evt.target as Element).closest(\".file-item\");\r\n\r\n if (fileItemElement) {\r\n const attrSeq = fileItemElement.getAttribute(\"data-seq\");\r\n if (attrSeq) {\r\n const seq = parseInt(attrSeq, 10);\r\n const idx = this.fileList.findIndex((v) => v.$seq === seq);\r\n\r\n const item = this.fileList[idx];\r\n\r\n if (item[\"url\"]) {\r\n location.href = item[\"url\"];\r\n return;\r\n }\r\n\r\n if (this.field.fileDownload) {\r\n this.field.fileDownload.call(null, { file: item, field: this.field });\r\n return;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * \uD30C\uC77C \uC0AD\uC81C \uCC98\uB9AC.\r\n *\r\n * @param item\r\n * @param fileListElement\r\n */\r\n private removeFileEvent(item: FileInfo, fileListElement: Element) {\r\n const ele = fileListElement.querySelector(`[data-seq=\"${item.$seq}\"] .remove`);\r\n if (ele) {\r\n ele.addEventListener(\"click\", (evt: Event) => {\r\n const fileItemElement = (evt.target as Element).closest(\".file-item\");\r\n\r\n if (fileItemElement) {\r\n const attrSeq = fileItemElement.getAttribute(\"data-seq\");\r\n if (attrSeq) {\r\n const seq = parseInt(attrSeq, 10);\r\n const removeIdx = this.fileList.findIndex((v) => v.$seq === seq);\r\n\r\n const removeItem = this.fileList[removeIdx];\r\n\r\n this.fileList.splice(removeIdx, 1);\r\n delete this.uploadFiles[seq];\r\n fileItemElement.remove();\r\n\r\n if (removeItem.fileId) {\r\n this.removeIds.push(removeItem.fileId);\r\n }\r\n }\r\n }\r\n this.valid();\r\n });\r\n }\r\n }\r\n\r\n getValue() {\r\n return {\r\n uploadFile: Object.values(this.uploadFiles),\r\n removeIds: this.removeIds,\r\n };\r\n }\r\n\r\n public setValueItems(value: any): void {\r\n this.fileList = [];\r\n this.uploadFiles = [];\r\n this.removeIds = [];\r\n for (let file of value) {\r\n file.$seq = this.fileSeq += 1;\r\n\r\n this.fileList.push(file);\r\n }\r\n\r\n this.setFileList(this.fileList, true);\r\n }\r\n\r\n setValue(value: any): void {\r\n if (utils.isArray(value)) {\r\n this.setValueItems(value);\r\n }\r\n this.element.value = \"\";\r\n }\r\n\r\n reset() {\r\n this.setValue(\"\");\r\n this.setValueItems([]);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLInputElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const validResult = fileValidator(this.element, this.field, this.fileList);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { invalidMessage, resetRowElementStyleClass } from \"src/util/validUtils\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport * as utils from \"src/util/utils\";\r\nimport { stringValidator } from \"src/rule/stringValidator\";\r\n\r\nexport default class CustomRender extends Render {\r\n private customFunction;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n if (field.renderer) {\r\n this.customFunction = field.renderer;\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n } else {\r\n this.customFunction = {} as any;\r\n }\r\n }\r\n\r\n mounted() {\r\n if (this.customFunction.mounted) {\r\n (this.customFunction.mounted as any).call(this, this.field, this.rowElement);\r\n }\r\n }\r\n\r\n static isDataRender(): boolean {\r\n return false;\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldTemplate = utils.isEmpty(field.template) ? \"\" : utils.isString(field.template) ? field.template : field.template();\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = ` <div class=\"df-field\">\r\n ${fieldTemplate}\r\n </div>\r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>`;\r\n }\r\n\r\n getValue() {\r\n if (this.customFunction.getValue) {\r\n return (this.customFunction.getValue as any).call(this, this.field, this.rowElement);\r\n }\r\n return \"\";\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (this.customFunction.setValue) {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n value = this.field.$value;\r\n }\r\n (this.customFunction.setValue as any).call(this, value, this.field, this.rowElement);\r\n }\r\n\r\n this.field.$value = value;\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement() {\r\n if (this.customFunction.getElement) {\r\n return (this.customFunction.getElement as any).call(this, this.field, this.rowElement);\r\n }\r\n return null;\r\n }\r\n\r\n valid(): any {\r\n if (this.customFunction.valid) {\r\n const validResult = (this.customFunction.valid as any).call(this, this.field, this.rowElement);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return;\r\n }\r\n const validResult = stringValidator(this.getValue(), this.field);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n\r\n /**\r\n * focus\r\n */\r\n focus(): void {\r\n if (this.customFunction.focus) {\r\n (this.customFunction.focus as any).call(this, this.field, this.rowElement);\r\n }\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class GroupRender extends Render {\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n }\r\n\r\n public mounted() {}\r\n\r\n static isDataRender(): boolean {\r\n return false;\r\n }\r\n\r\n createField() {\r\n return \"\";\r\n }\r\n\r\n getValue() {\r\n return null;\r\n }\r\n\r\n setValue(value: any): void {}\r\n\r\n reset() {}\r\n\r\n getElement(): HTMLElement {\r\n return this.rowElement;\r\n }\r\n\r\n valid(): any {\r\n return true;\r\n }\r\n\r\n public addChildField(element: Element) {\r\n let addContainer = this.rowElement.querySelector(\".df-field-container\");\r\n\r\n if (addContainer) {\r\n addContainer.append(element);\r\n } else {\r\n this.rowElement.append(element);\r\n }\r\n }\r\n\r\n focus(): void {}\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class HiddenRender extends Render {\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n this.field.$value = field.defaultValue;\r\n }\r\n\r\n mounted() {}\r\n\r\n createField() {\r\n return ``;\r\n }\r\n\r\n getValue() {\r\n return this.field.$value;\r\n }\r\n\r\n setValue(value: any): void {\r\n this.field.$value = value;\r\n }\r\n\r\n reset() {\r\n this.setValue(this.field.defaultValue);\r\n }\r\n\r\n getElement() {\r\n return;\r\n }\r\n\r\n valid(): any {\r\n return true;\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class ButtonRender extends Render {\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n this.mounted();\r\n this.setDefaultOption();\r\n }\r\n\r\n mounted() {\r\n this.rowElement.querySelector(`#${this.field.$key}`)?.addEventListener(\"click\", (evt) => {\r\n if (this.field.onClick) {\r\n this.field.onClick.call(null, this.field);\r\n }\r\n });\r\n }\r\n\r\n static isDataRender(): boolean {\r\n return false;\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <button type=\"button\" id=\"${field.$key}\" class=\"df-btn\">${field.label}</button> ${Render.getDescriptionTemplate(field)}\r\n `;\r\n }\r\n\r\n getValue() {\r\n return \"\";\r\n }\r\n\r\n setValue(value: any): void {}\r\n\r\n reset() {\r\n this.setDisabled(false);\r\n }\r\n\r\n getElement() {\r\n return null;\r\n }\r\n\r\n valid(): any {\r\n return true;\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { numberValidator } from \"src/rule/numberValidator\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport { customChangeEventCall, numberInputEvent } from \"src/event/renderEvents\";\r\nimport DaraForm from \"src/DaraForm\";\r\n\r\nexport default class RangeRender extends Render {\r\n private element: HTMLInputElement;\r\n private rangeNumElement: Element;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.rangeNumElement = rowElement.querySelector(\".range-num\") as Element;\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n }\r\n\r\n mounted() {\r\n this.element.addEventListener(\"input\", (e: any) => {\r\n this.rangeNumElement.innerHTML = e.target.value;\r\n\r\n this.element.setAttribute(\"title\", e.target.value);\r\n customChangeEventCall(this.field, e, this, this.getValue());\r\n this.valid();\r\n });\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field\">\r\n <span class=\"range-num\">${field.defaultValue ? field.defaultValue : 0}</span>\r\n <input type=\"range\" name=\"${field.$xssName}\" class=\"form-field range help-icon\" min=\"${field.rule.minimum}\" max=\"${field.rule.maximum}\"/>\r\n </div> \r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `;\r\n\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\r\n }\r\n\r\n getValue() {\r\n return this.element.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n this.element.value = this.field.$value;\r\n return;\r\n }\r\n this.field.$value = value;\r\n this.element.value = value;\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const validResult = numberValidator(this.getValue(), this.field);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { stringValidator } from \"src/rule/stringValidator\";\r\nimport { resetRowElementStyleClass, invalidMessage } from \"src/util/validUtils\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport DateTimePicker from \"@daracl/datetimepicker\";\r\n\r\nimport * as utils from \"src/util/utils\";\r\n\r\nexport default class DateRender extends Render {\r\n private element: HTMLInputElement;\r\n private dateObj: any;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n }\r\n\r\n mounted() {\r\n let dateOnSelectEvent: any;\r\n this.field.customOptions = Object.assign({}, this.field.customOptions);\r\n if (typeof this.field.customOptions.onSelect !== \"undefined\") {\r\n dateOnSelectEvent = typeof this.field.customOptions.onSelect;\r\n }\r\n\r\n if (utils.isUndefined(this.field.customOptions.mode)) {\r\n if (this.field.renderType == \"datemonth\" || this.field.renderType == \"datehour\") {\r\n this.field.customOptions.mode = this.field.renderType.replace(\"date\", \"\");\r\n } else {\r\n this.field.customOptions.mode = this.field.renderType;\r\n }\r\n }\r\n\r\n this.field.customOptions.onSelect = (dt: any, e: Event) => {\r\n if (dateOnSelectEvent) {\r\n dateOnSelectEvent(dt, e);\r\n }\r\n\r\n this.setValue(dt);\r\n\r\n this.valid();\r\n };\r\n\r\n this.dateObj = new DateTimePicker(this.element, this.field.customOptions, {} as any);\r\n\r\n //this.loadDate();\r\n }\r\n\r\n // async loadDate() {\r\n // const DateTimePicker = await import(\"@daracl/datetimepicker\");\r\n // this.dateObj = new DateTimePicker.default(this.element, this.field.customOptions, {} as any);\r\n // }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field\">\r\n <input type=\"text\" name=\"${field.$xssName}\" class=\"form-field text help-icon\" autocomplete=\"off\" readonly/>\r\n </div>\r\n ${Render.getDescriptionTemplate(field)}\r\n <div class=\"help-message\"></div>\r\n `;\r\n\r\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\r\n }\r\n\r\n getValue() {\r\n return this.element.value;\r\n }\r\n\r\n setValue(value: any, changeCheckFlag?: boolean): void {\r\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\r\n this.element.value = this.field.$value;\r\n return;\r\n }\r\n\r\n this.field.$value = value;\r\n this.element.value = value;\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n this.setDisabled(false);\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement(): HTMLInputElement {\r\n return this.element;\r\n }\r\n\r\n valid(): any {\r\n const validResult = stringValidator(this.getValue(), this.field);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return validResult;\r\n }\r\n}\r\n", "import { FieldStyle, FormField } from \"@t/FormField\";\r\nimport * as utils from \"./utils\";\r\nimport { FIELD_POSITION_STYLE, ALIGN } from \"src/constants\";\r\nimport { FormOptions } from \"@t/FormOptions\";\r\n\r\nexport default {\r\n /**\r\n * field style \uCC98\uB9AC\r\n *\r\n * @param formOptions FormOptions\r\n * @param field FormField\r\n * @param beforeField FormField\r\n * @returns FieldStyle\r\n */\r\n fieldStyle(formOptions: FormOptions, field: FormField, beforeField?: FormField | null, isLabelHide?: boolean): FieldStyle {\r\n const fieldStyle = {\r\n rowStyleClass: field.orientation === \"horizontal\" ? \"horizontal\" : \"vertical\",\r\n fieldClass: \"\",\r\n fieldStyle: \"\",\r\n labelClass: \"\",\r\n labelStyle: \"\",\r\n labelAlignClass: \"\",\r\n valueClass: \"\",\r\n valueStyle: \"\",\r\n tabAlignClass: \"\",\r\n };\r\n\r\n const defaultLabelWidth = beforeField?.style?.labelWidth ?? formOptions.style.labelWidth ?? \"3\";\r\n let defaultValueWidth = beforeField?.style?.valueWidth ?? formOptions.style.valueWidth ?? \"9\";\r\n const position = beforeField?.style?.position ?? formOptions.style.position;\r\n\r\n const width = field.style?.width;\r\n const positionArr = FIELD_POSITION_STYLE[field.style?.position] ?? FIELD_POSITION_STYLE[position] ?? FIELD_POSITION_STYLE.top;\r\n\r\n fieldStyle.fieldClass = `${positionArr[0]} ${field.style?.customClass || \"\"}`;\r\n if (width) {\r\n if (utils.isNumber(width)) {\r\n fieldStyle.fieldClass += utils.isNumber(width) ? ` col-xs-${width}` : \"\";\r\n } else {\r\n fieldStyle.fieldStyle = utils.isNumber(width) ? \"\" : `width:${width};`;\r\n }\r\n }\r\n\r\n fieldStyle.tabAlignClass = \"tab-al-\" + ([\"right\", \"center\"].includes(field.style?.tabAlign) ? field.style.tabAlign : \"left\");\r\n\r\n const labelWidth = field.style?.labelWidth || defaultLabelWidth;\r\n fieldStyle.labelAlignClass = positionArr[1];\r\n\r\n if (!isLabelHide && labelWidth && ![\"top\", \"bottom\"].includes(positionArr[0])) {\r\n if (utils.isNumber(labelWidth)) {\r\n const labelWidthValue = +labelWidth;\r\n defaultValueWidth = 12 - labelWidthValue;\r\n fieldStyle.labelClass = `col-xs-${labelWidthValue}`;\r\n fieldStyle.valueClass = fieldStyle.labelStyle ? \"col-full\" : `col-xs-${defaultValueWidth}`;\r\n } else {\r\n fieldStyle.labelStyle = `width:${labelWidth};`;\r\n }\r\n }\r\n\r\n const valueWidth = field.style?.valueWidth || defaultValueWidth;\r\n if (isLabelHide && ![\"left\", \"right\"].includes(positionArr[0])) {\r\n fieldStyle.valueClass = \"col-full\";\r\n } else {\r\n if (valueWidth && ![\"top\", \"bottom\"].includes(positionArr[0])) {\r\n if (utils.isNumber(valueWidth)) {\r\n fieldStyle.valueClass = fieldStyle.labelStyle ? \"col-full\" : `col-xs-${valueWidth}`;\r\n } else {\r\n fieldStyle.valueStyle = `width:${valueWidth};`;\r\n }\r\n } else {\r\n fieldStyle.valueClass = fieldStyle.labelStyle ? \"col-full\" : \"\";\r\n }\r\n }\r\n\r\n fieldStyle.fieldClass = spaceReplace(fieldStyle.fieldClass);\r\n fieldStyle.labelClass = spaceReplace(fieldStyle.labelClass);\r\n fieldStyle.valueClass = spaceReplace(fieldStyle.valueClass);\r\n\r\n return fieldStyle;\r\n },\r\n};\r\n\r\nfunction spaceReplace(str: string): string {\r\n return str.replace(/\\s+/g, \" \").trim();\r\n}\r\n", "import { FieldStyle, FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { invalidMessage } from \"src/util/validUtils\";\r\nimport { stringValidator } from \"src/rule/stringValidator\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport FormTemplate from \"src/FormTemplate\";\r\nimport styleUtils from \"src/util/styleUtils\";\r\nimport { FormOptions } from \"@t/FormOptions\";\r\nimport * as utils from \"src/util/utils\";\r\n\r\nexport default class TabRender extends Render {\r\n private customFunction;\r\n private tabContainerElement: HTMLElement;\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n if (field.renderer) {\r\n this.customFunction = field.renderer;\r\n } else {\r\n this.customFunction = {} as any;\r\n }\r\n\r\n this.mounted();\r\n }\r\n\r\n mounted() {\r\n if (this.customFunction.mounted) {\r\n (this.customFunction.mounted as any).call(this, this.field, this.rowElement);\r\n }\r\n\r\n this.tabContainerElement.querySelectorAll(\".tab-item\").forEach((tabItem) => {\r\n tabItem.addEventListener(\"click\", (e: any) => {\r\n this.clickEventHandler(tabItem, e);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * tab item click\r\n *\r\n * @param {Element} tabItem\r\n * @param {*} evt\r\n */\r\n private clickEventHandler(tabItem: Element, evt: any) {\r\n this.setActive(tabItem.getAttribute(\"data-tab-id\") ?? \"\");\r\n }\r\n\r\n public setActive(tabId: string): void {\r\n const tabItem = this.tabContainerElement.querySelector(`[data-tab-id=\"${tabId}\"]`);\r\n\r\n if (!tabItem) return;\r\n\r\n if (!tabItem.classList.contains(\"active\")) {\r\n for (let item of tabItem?.parentElement?.children ?? []) {\r\n item.classList.remove(\"active\");\r\n }\r\n tabItem.classList.add(\"active\");\r\n }\r\n\r\n const tabPanel = this.rowElement.querySelector(`[tab-panel-id=\"${tabId}\"]`);\r\n\r\n if (!tabPanel?.classList.contains(\"active\")) {\r\n for (let item of tabPanel?.parentElement?.children ?? []) {\r\n item.classList.remove(\"active\");\r\n }\r\n\r\n tabPanel?.classList.add(\"active\");\r\n }\r\n }\r\n\r\n static isDataRender(): boolean {\r\n return false;\r\n }\r\n\r\n static isChildrenCreate(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * tab template\r\n *\r\n * @param {FormField} field\r\n * @param {FormTemplate} formTemplate\r\n * @param {FormOptions} options\r\n * @returns {string} template string\r\n */\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const formTemplate = this.daraForm.formTemplate;\r\n const options = this.daraForm.getOptions();\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n //tab \uC774\uBCA4\uD2B8 \uCC98\uB9AC \uD560\uAC83.\r\n let fieldStyle = styleUtils.fieldStyle(options, field);\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-field \">\r\n <div class=\"tab-header ${fieldStyle.tabAlignClass}\"></div>\r\n </div>\r\n <div class=\"df-tab-body\"></div>\r\n `;\r\n\r\n if (field.children) {\r\n let firstFlag = true;\r\n\r\n const formOptions = this.getForm().getOptions();\r\n\r\n let fieldStyle: FieldStyle = styleUtils.fieldStyle(formOptions, field, null, formTemplate.isLabelHide(field));\r\n\r\n for (const childField of field.children) {\r\n childField.$parent = field;\r\n formTemplate.addRowFieldInfo(childField);\r\n let id = childField.$key;\r\n\r\n let tabTemplate = `<span class=\"tab-item ${firstFlag ? \"active\" : \"\"}\" data-tab-id=\"${id}\"><a href=\"javascript:;\">${childField.label}</a></span>`;\r\n\r\n let tabBodyTemplate = `<div class=\"tab-panel ${firstFlag ? \"active\" : \"\"}\" tab-panel-id=\"${id}\">${Render.getDescriptionTemplate(childField)}\r\n <div class=\"tab-group\"></div>\r\n </div>`;\r\n\r\n const tabElement = utils.templateToElement(tabTemplate);\r\n const tabBodyElement = utils.templateToElement(tabBodyTemplate);\r\n\r\n firstFlag = false;\r\n if (tabElement) {\r\n fieldContainerElement.querySelector(\".tab-header\")?.appendChild(tabElement);\r\n }\r\n\r\n if (tabBodyElement) {\r\n fieldContainerElement.querySelector(\".df-tab-body\")?.appendChild(tabBodyElement);\r\n\r\n if (childField.children) {\r\n let tabFormOptions = {\r\n style: {\r\n width: formOptions.style.width ?? \"100%\",\r\n labelWidth: formOptions.style.labelWidth ?? 3,\r\n valueWidth: formOptions.style.valueWidth ?? 9,\r\n position: formOptions.style.position ?? \"left-right\",\r\n },\r\n useTypeValue: formOptions.useTypeValue,\r\n autoCreate: false,\r\n notValidMessage: \"This form is not valid.\",\r\n fields: [],\r\n } as FormOptions;\r\n\r\n childField.$tabForm = new DaraForm(document.createElement(\"div\"), tabFormOptions);\r\n\r\n childField.$instance = new (childField.$renderType as any)(childField, tabBodyElement?.querySelector(\".tab-group\"), childField.$tabForm);\r\n\r\n childField.$tabForm.formTemplate.childTemplate(childField, fieldStyle);\r\n }\r\n }\r\n }\r\n\r\n this.tabContainerElement = fieldContainerElement;\r\n }\r\n }\r\n\r\n getValue(): any {\r\n if (this.customFunction.getValue) {\r\n return (this.customFunction.getValue as any).call(this, this.field, this.rowElement);\r\n }\r\n\r\n let allTabValue = {} as any;\r\n\r\n let useTypeValue = this.getForm().getOptions().useTypeValue;\r\n\r\n for (const childField of this.field.children) {\r\n const childFieldValue = childField.$tabForm?.getValue(false);\r\n if (useTypeValue) {\r\n allTabValue[childField.$validName] = childFieldValue;\r\n } else {\r\n for (let [key, value] of Object.entries(childFieldValue)) {\r\n allTabValue[key] = value;\r\n }\r\n }\r\n }\r\n return allTabValue;\r\n }\r\n\r\n setValue(value: any): void {\r\n for (const childField of this.field.children) {\r\n let tabChildValue = value[childField.$validName];\r\n\r\n if (tabChildValue) {\r\n childField.$tabForm?.setValue(tabChildValue);\r\n }\r\n }\r\n }\r\n\r\n reset() {}\r\n\r\n getElement(): Element {\r\n return this.rowElement;\r\n }\r\n\r\n valid(): any {\r\n if (this.customFunction.valid) {\r\n const validResult = (this.customFunction.valid as any).call(this, this.field, this.rowElement);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return;\r\n }\r\n\r\n const field = this.field;\r\n\r\n for (const childField of field.children) {\r\n const validResult = childField.$tabForm?.validForm();\r\n\r\n if (validResult && validResult.length > 0) {\r\n const firstItem = validResult[0];\r\n\r\n if (firstItem.message) {\r\n firstItem.message = \"[\" + this.field.label + \"] \" + firstItem.message;\r\n\r\n return firstItem;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n focus(): void {}\r\n}\r\n", "import { FieldStyle, FormField } from \"@t/FormField\";\r\nimport Render from \"./Render\";\r\nimport { invalidMessage, resetRowElementStyleClass } from \"src/util/validUtils\";\r\nimport DaraForm from \"src/DaraForm\";\r\nimport * as utils from \"src/util/utils\";\r\nimport { stringValidator } from \"src/rule/stringValidator\";\r\nimport styleUtils from \"src/util/styleUtils\";\r\nimport FormTemplate from \"src/FormTemplate\";\r\nimport { FormOptions } from \"@t/FormOptions\";\r\nimport { NumberKeyMap } from \"@t/DataMap\";\r\n\r\nlet $$idx = 0;\r\n\r\nexport default class GridRender extends Render {\r\n private customFunction;\r\n private gridForm;\r\n private allAddRowInfo = {} as NumberKeyMap;\r\n\r\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\r\n super(daraForm, field, rowElement);\r\n\r\n if (field.renderer) {\r\n this.customFunction = field.renderer;\r\n } else {\r\n this.customFunction = {} as any;\r\n }\r\n\r\n const gridFormOptions = {\r\n style: {\r\n width: \"100%\",\r\n labelWidth: 3,\r\n valueWidth: 9,\r\n position: \"left-right\",\r\n },\r\n autoCreate: false,\r\n notValidMessage: \"This form is not valid.\",\r\n fields: [],\r\n } as FormOptions;\r\n\r\n this.gridForm = new DaraForm(document.createElement(\"div\"), gridFormOptions);\r\n\r\n this.mounted();\r\n this.setDefaultOption();\r\n this.setDefaultInfo();\r\n }\r\n\r\n mounted() {\r\n this.addRow();\r\n\r\n if (this.customFunction.mounted) {\r\n (this.customFunction.mounted as any).call(this, this.field, this.rowElement);\r\n }\r\n\r\n this.rowElement.querySelector(\".df-grid-add-row-btn\")?.addEventListener(\"click\", (evt) => {\r\n this.addRow();\r\n });\r\n }\r\n\r\n static isDataRender(): boolean {\r\n return false;\r\n }\r\n\r\n static isChildrenCreate(): boolean {\r\n return false;\r\n }\r\n\r\n createField() {\r\n const field = this.field;\r\n\r\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\r\n\r\n let theadTemplate = [];\r\n let colgroupTemplate = [];\r\n let addBtnTemplate = [];\r\n addBtnTemplate.push(\"\");\r\n\r\n if (field.children) {\r\n colgroupTemplate.push(\"<colgroup>\");\r\n\r\n theadTemplate.push(\"<tr>\");\r\n\r\n colgroupTemplate.push(`<col style=\"width:38px\">`);\r\n theadTemplate.push(\"<th>\");\r\n if (field.gridOptions?.disableAddButton !== true) {\r\n theadTemplate.push(`<button type=\"button\" class=\"df-btn df-grid-add-row-btn\" title=\"Add\"><i class=\"df-icon df-add-icon\"></i></button>`);\r\n }\r\n theadTemplate.push(\"</th>\");\r\n\r\n for (const childField of field.children) {\r\n colgroupTemplate.push(`<col style=\"width:${childField.style?.width ?? \"*\"}\">`);\r\n theadTemplate.push(`<th class=\"df-grid-header\">${childField.label}</th>`);\r\n }\r\n colgroupTemplate.push(\"</colgroup>\");\r\n theadTemplate.push(\"</tr>\");\r\n }\r\n\r\n fieldContainerElement.innerHTML = `\r\n <div class=\"df-grid-field\">\r\n ${addBtnTemplate.join(\"\")}\r\n <div class=\"df-grid-container ${field.style?.position ?? \"\"}\" style=\"height:${field.gridOptions?.height ?? \"auto\"};\">\r\n <table class=\"df-grid\">${colgroupTemplate.join(\"\")}<thead>${theadTemplate.join(\"\")}</thead><tbody></tbody></table>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n\r\n /**\r\n * add row\r\n */\r\n addRow(valueItem?: any): void {\r\n let rowTemplate = [];\r\n\r\n const options = this.daraForm.getOptions();\r\n const formTemplate = this.gridForm.formTemplate;\r\n const parentName = this.field.$xssName;\r\n\r\n ++$$idx;\r\n let addColumns = [];\r\n rowTemplate.push(`<tr class=\"grid-row\">`);\r\n\r\n rowTemplate.push(\"<td>\");\r\n if (this.field.gridOptions?.disableRemoveButton !== true) {\r\n rowTemplate.push(`<button type=\"button\" data-row-idx=\"${$$idx}\" class=\"df-btn df-grid-row-remove\"><i class=\"df-icon df-remove-icon\"></i></button>`);\r\n }\r\n rowTemplate.push(\"</td>\");\r\n\r\n for (const childField of this.field.children) {\r\n let fieldStyle: FieldStyle = styleUtils.fieldStyle(options, childField, null, true);\r\n\r\n let columnField = utils.merge({}, childField) as FormField;\r\n\r\n addColumns.push(columnField);\r\n columnField.$orgin = childField;\r\n columnField.name = columnField.name + \"_\" + $$idx;\r\n columnField.$xssName = parentName + \"_\" + utils.getXssFieldName(columnField);\r\n\r\n formTemplate.addRowFieldInfo(columnField);\r\n\r\n rowTemplate.push(`<td id=\"${columnField.$xssName}\"><div class=\"df-field-container ${columnField.required ? \"required\" : \"\"} \" style=\"${fieldStyle.valueStyle}\"></div></td>`);\r\n }\r\n rowTemplate.push(\"</tr>\");\r\n\r\n this.allAddRowInfo[$$idx] = addColumns;\r\n\r\n const addRowElement = utils.templateToElement(rowTemplate.join(\"\"));\r\n\r\n if (addRowElement) {\r\n this.rowElement.querySelector(\"tbody\")?.append(addRowElement);\r\n\r\n addRowElement.querySelector(\".df-grid-row-remove\")?.addEventListener(\"click\", (evt) => {\r\n this.removeRow(evt);\r\n });\r\n }\r\n\r\n valueItem = valueItem ?? {};\r\n for (let columnField of addColumns) {\r\n columnField.$instance = new (columnField.$renderType as any)(columnField, addRowElement?.querySelector(`#${columnField.$xssName}`), this.gridForm);\r\n\r\n if (valueItem[columnField.$orgin.name]) {\r\n columnField.$instance.setValue(valueItem[columnField.$orgin.name]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * remove row\r\n *\r\n * @param evt event\r\n */\r\n removeRow(evt: Event): void {\r\n const target = evt.target as Element;\r\n\r\n const rowElement = target.closest(\"tr\");\r\n\r\n if (rowElement) {\r\n if (rowElement.parentElement?.childElementCount == 1) return;\r\n\r\n let rowIdx = (evt.currentTarget as Element)?.getAttribute(\"data-row-idx\") || \"-1\";\r\n\r\n this.removeFieldInfo(rowIdx);\r\n rowElement.remove();\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param rowIdx row index\r\n */\r\n removeFieldInfo(rowIdx?: string) {\r\n let removeFieldArrs = [] as any;\r\n if (utils.isEmpty(rowIdx)) {\r\n for (let key in this.allAddRowInfo) {\r\n removeFieldArrs = removeFieldArrs.concat(this.allAddRowInfo[key]);\r\n }\r\n this.allAddRowInfo = {} as NumberKeyMap;\r\n } else if (rowIdx) {\r\n const rowIdxNum = parseInt(rowIdx, 10);\r\n removeFieldArrs = removeFieldArrs.concat(this.allAddRowInfo[rowIdxNum]);\r\n delete this.allAddRowInfo[rowIdxNum];\r\n }\r\n\r\n for (let columnField of removeFieldArrs) {\r\n this.gridForm.getFieldInfoMap().removeFieldInfo(columnField.name);\r\n }\r\n }\r\n\r\n allRemoveRow(): void {\r\n this.rowElement.querySelector(\"tbody\")?.replaceChildren();\r\n this.removeFieldInfo();\r\n }\r\n\r\n getValue() {\r\n if (this.customFunction.getValue) {\r\n return (this.customFunction.getValue as any).call(this, this.field, this.rowElement);\r\n }\r\n let result = [];\r\n const children = this.field.children;\r\n const childrenLength = children.length;\r\n for (let idx in this.allAddRowInfo) {\r\n const rowColumns = this.allAddRowInfo[idx];\r\n\r\n let rowInfo = {} as any;\r\n for (let childIdx = 0; childIdx < childrenLength; childIdx++) {\r\n let childField = children[childIdx];\r\n rowInfo[childField.name] = this.gridForm.getFieldValue(rowColumns[childIdx].name); // rowColumns[childIdx].$instance.getValue();\r\n }\r\n\r\n result.push(rowInfo);\r\n }\r\n return result;\r\n }\r\n\r\n setValue(value: any): void {\r\n this.field.$value = value;\r\n\r\n let valueArr: any[] = [];\r\n if (Array.isArray(value)) {\r\n valueArr = value;\r\n } else {\r\n if (utils.isPlainObject(value)) {\r\n valueArr.push(value);\r\n }\r\n }\r\n\r\n this.allRemoveRow();\r\n\r\n for (let valueItem of valueArr) {\r\n this.addRow(valueItem);\r\n }\r\n }\r\n\r\n reset() {\r\n this.setDefaultInfo();\r\n resetRowElementStyleClass(this.rowElement);\r\n }\r\n\r\n getElement() {\r\n if (this.customFunction.getElement) {\r\n return (this.customFunction.getElement as any).call(this, this.field, this.rowElement);\r\n }\r\n return null;\r\n }\r\n\r\n valid(): any {\r\n if (this.customFunction.valid) {\r\n const validResult = (this.customFunction.valid as any).call(this, this.field, this.rowElement);\r\n\r\n invalidMessage(this.field, this.rowElement, validResult);\r\n\r\n return;\r\n }\r\n\r\n const validResult = this.gridForm.validForm();\r\n\r\n if (validResult.length > 0) {\r\n const firstItem = validResult[0];\r\n\r\n if (firstItem.message) {\r\n firstItem.message = \"[\" + this.field.label + \"] \" + firstItem.message;\r\n\r\n return firstItem;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n focus(): void {}\r\n}\r\n", "import NumberRender from \"src/renderer/NumberRender\";\r\nimport TextAreaRender from \"src/renderer/TextAreaRender\";\r\nimport DropdownRender from \"src/renderer/DropdownRender\";\r\nimport TextRender from \"src/renderer/TextRender\";\r\nimport CheckboxRender from \"src/renderer/CheckboxRender\";\r\nimport RadioRender from \"src/renderer/RadioRender\";\r\nimport PasswordRender from \"src/renderer/PasswordRender\";\r\nimport FileRender from \"src/renderer/FileRender\";\r\nimport CustomRender from \"./renderer/CustomRender\";\r\nimport GroupRender from \"./renderer/GroupRender\";\r\nimport HiddenRender from \"./renderer/HiddenRender\";\r\nimport ButtonRender from \"./renderer/ButtonRender\";\r\nimport RangeRender from \"./renderer/RangeRender\";\r\nimport DateRender from \"./renderer/DateRender\";\r\nimport TabRender from \"./renderer/TabRender\";\r\nimport GridRender from \"./renderer/GridRender\";\r\n\r\nexport type FORM_MODE = \"new\" | \"modify\" | \"view\";\r\n\r\nexport const RULES = {\r\n NAN: \"nan\",\r\n MIN: \"minimum\",\r\n EXCLUSIVE_MIN: \"exclusiveMinimum\",\r\n MAX: \"maximum\",\r\n EXCLUSIVE_MAX: \"exclusiveMaximum\",\r\n MIN_LENGTH: \"minLength\",\r\n MAX_LENGTH: \"maxLength\",\r\n BETWEEN: \"between\",\r\n BETWEEN_EXCLUSIVE_MIN: \"betweenExclusiveMin\",\r\n BETWEEN_EXCLUSIVE_MAX: \"betweenExclusiveMax\",\r\n BETWEEN_EXCLUSIVE_MINMAX: \"betweenExclusiveMinMax\",\r\n REGEXP: \"regexp\",\r\n REQUIRED: \"required\",\r\n VALIDATOR: \"validator\",\r\n} as const;\r\n\r\nexport const FIELD_PREFIX = \"dff\"; // daracl form field\r\n\r\nexport const RENDER_TEMPLATE: any = {\r\n number: NumberRender,\r\n textarea: TextAreaRender,\r\n dropdown: DropdownRender,\r\n checkbox: CheckboxRender,\r\n radio: RadioRender,\r\n text: TextRender,\r\n password: PasswordRender,\r\n file: FileRender,\r\n custom: CustomRender,\r\n group: GroupRender,\r\n hidden: HiddenRender,\r\n button: ButtonRender,\r\n range: RangeRender,\r\n datehour: DateRender,\r\n datemonth: DateRender,\r\n date: DateRender,\r\n datetime: DateRender,\r\n tab: TabRender,\r\n grid: GridRender,\r\n};\r\n\r\nexport const ALIGN = {\r\n left: \"left\",\r\n center: \"center\",\r\n right: \"right\",\r\n} as const;\r\n\r\nexport type TEXT_ALIGN_TYPE = (typeof ALIGN)[keyof typeof ALIGN];\r\n\r\nexport type RENDER_TYPE = \"number\" | \"text\" | \"file\" | \"textarea\" | \"dropdown\" | \"radio\" | \"checkbox\" | \"date\" | \"datetime\" | \"dateyear\" | \"datemonth\" | \"datehour\" | \"group\" | \"custom\";\r\n\r\nexport type REGEXP_TYPE = \"email\" | \"url\" | \"alpha\" | \"alpha-num\";\r\n\r\nexport type PASSWORD_TYPE = \"number\" | \"upper\" | \"upper-special\" | \"upper-special-number\"; // \uC22B\uC790 | \uB300\uBB38\uC790 \uD3EC\uD568, \uB300\uBB38\uC790 \uD2B9\uC218\uBB38\uC790 \uD3EC\uD568, \uB300\uBB38\uC790 \uD2B9\uC218\uBB38\uC790 \uC22B\uC790\r\n\r\nexport type FIELD_POSITION = \"top\" | \"left\" | \"left-left\" | \"left-right\" | \"right\" | \"right-left\" | \"right-right\" | \"bottom\";\r\n\r\nexport type ORIENTATION_TYPE = \"horizontal\" | \"vertical\";\r\n\r\ninterface StringArrayMap {\r\n [key: string]: string[];\r\n}\r\n\r\nexport const FIELD_POSITION_STYLE: StringArrayMap = {\r\n \"top-left\": [\"top\", \"txt-left\"],\r\n \"top-center\": [\"top\", \"txt-center\"],\r\n \"top-right\": [\"top\", \"txt-right\"],\r\n \"left-left\": [\"\", \"txt-left\"],\r\n \"left-center\": [\"\", \"txt-center\"],\r\n \"left-right\": [\"\", \"txt-right\"],\r\n \"right-right\": [\"right\", \"txt-right\"],\r\n \"right-center\": [\"right\", \"txt-center\"],\r\n \"right-left\": [\"right\", \"txt-left\"],\r\n \"bottom-left\": [\"bottom\", \"txt-left\"],\r\n \"bottom-center\": [\"bottom\", \"txt-center\"],\r\n \"bottom-right\": [\"bottom\", \"txt-right\"],\r\n};\r\nFIELD_POSITION_STYLE[\"top\"] = FIELD_POSITION_STYLE[\"top-left\"];\r\nFIELD_POSITION_STYLE[\"right\"] = FIELD_POSITION_STYLE[\"right-right\"];\r\nFIELD_POSITION_STYLE[\"left\"] = FIELD_POSITION_STYLE[\"left-left\"];\r\nFIELD_POSITION_STYLE[\"bottom\"] = FIELD_POSITION_STYLE[\"bottom-left\"];\r\n", "import { Message } from \"@t/Message\";\r\nimport { FormField } from \"../types/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"src/constants\";\r\n\r\nlet localeMessage: Message = {\r\n required: \"{label} \uD544\uC218 \uC785\uB825\uC0AC\uD56D\uC785\uB2C8\uB2E4.\",\r\n fileButton: \"\uD30C\uC77C\uCC3E\uAE30\",\r\n selection: \"\uC120\uD0DD\",\r\n string: {\r\n minLength: \"{minLength} \uAE00\uC790 \uC774\uC0C1\uC73C\uB85C \uC785\uB825\uD558\uC138\uC694.\",\r\n maxLength: \"{maxLength} \uAE00\uC790 \uC774\uD558\uB85C \uC785\uB825\uD558\uC138\uC694.\",\r\n between: \"{minLength} ~ {maxLength} \uC0AC\uC774\uC758 \uAE00\uC790\uB97C \uC785\uB825\uD558\uC138\uC694.\",\r\n },\r\n number: {\r\n nan: \"\uC22B\uC790\uB9CC \uC785\uB825 \uAC00\uB2A5 \uD569\uB2C8\uB2E4.\",\r\n minimum: \"{minimum} \uAC12\uACFC \uAC19\uAC70\uB098 \uCEE4\uC57C \uD569\uB2C8\uB2E4\",\r\n exclusiveMinimum: \"{minimum} \uBCF4\uB2E4 \uCEE4\uC57C \uD569\uB2C8\uB2E4\",\r\n maximum: \"{maximum} \uAC12\uACFC \uAC19\uAC70\uB098 \uC791\uC544\uC57C \uD569\uB2C8\uB2E4\",\r\n exclusiveMaximum: \"{maximum} \uBCF4\uB2E4 \uC791\uC544\uC57C \uD569\uB2C8\uB2E4.\",\r\n between: \"{minimum}~{maximum} \uC0AC\uC774\uC758 \uAC12\uC744 \uC785\uB825\uD558\uC138\uC694.\",\r\n betweenExclusiveMin: \"{minimum} \uBCF4\uB2E4 \uD06C\uACE0 {maximum} \uBCF4\uB2E4 \uAC19\uAC70\uB098 \uC791\uC544\uC57C \uD569\uB2C8\uB2E4\",\r\n betweenExclusiveMax: \"{minimum} \uBCF4\uB2E4 \uAC19\uAC70\uB098 \uD06C\uACE0 {maximum} \uBCF4\uB2E4 \uC791\uC544\uC57C \uD569\uB2C8\uB2E4\",\r\n betweenExclusiveMinMax: \"{minimum} \uBCF4\uB2E4 \uD06C\uACE0 {maximum} \uBCF4\uB2E4 \uC791\uC544\uC57C \uD569\uB2C8\uB2E4\",\r\n },\r\n regexp: {\r\n mobile: \"\uD578\uB4DC\uD3F0 \uBC88\uD638\uAC00 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\",\r\n email: \"\uC774\uBA54\uC77C\uC774 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\",\r\n url: \"URL\uC774 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\",\r\n alpha: \"\uC601\uBB38\uB9CC \uC785\uB825 \uAC00\uB2A5 \uD569\uB2C8\uB2E4.\",\r\n \"alpha-num\": \"\uC601\uBB38\uACFC \uC22B\uC790\uB9CC \uC785\uB825 \uAC00\uB2A5 \uD569\uB2C8\uB2E4.\",\r\n number: \"\uC22B\uC790\uB9CC \uC785\uB825 \uAC00\uB2A5 \uD569\uB2C8\uB2E4.\",\r\n variable: \"\uAC12\uC774 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\",\r\n \"number-char\": \"\uC22B\uC790, \uBB38\uC790 \uAC01\uAC01 \uD558\uB098 \uC774\uC0C1 \uD3EC\uD568 \uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.\",\r\n \"upper-char\": \"\uB300\uBB38\uC790\uAC00 \uD558\uB098 \uC774\uC0C1 \uD3EC\uD568 \uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.\",\r\n \"upper-char-special\": \"\uB300\uBB38\uC790,\uC18C\uBB38\uC790,\uD2B9\uC218\uBB38\uC790 \uAC01\uAC01 \uD558\uB098 \uC774\uC0C1 \uD3EC\uD568 \uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.\",\r\n \"upper-char-special-number\": \"\uB300\uBB38\uC790,\uC18C\uBB38\uC790,\uD2B9\uC218\uBB38\uC790,\uC22B\uC790 \uAC01\uAC01 \uD558\uB098 \uC774\uC0C1 \uD3EC\uD568 \uB418\uC5B4\uC57C\uD569\uB2C8\uB2E4.\",\r\n },\r\n};\r\n\r\n/**\r\n * validation \uBA54\uC2DC\uC9C0 \uCC98\uB9AC.\r\n *\r\n * @class Language\r\n * @typedef {Language}\r\n */\r\nclass Language {\r\n private lang: Message = localeMessage;\r\n\r\n /**\r\n * \uB2E4\uAD6D\uC5B4 \uBA54\uC2DC\uC9C0 \uB4F1\uB85D\r\n *\r\n * @public\r\n * @param {?Message} [lang] \uB465\uB85D\uD560 \uBA54\uC2DC\uC9C0\r\n */\r\n public set(lang?: Message) {\r\n this.lang = Object.assign({}, localeMessage, lang);\r\n }\r\n\r\n /**\r\n * \uBA54\uC2DC\uC9C0 \uC5BB\uAE30\r\n *\r\n * @public\r\n * @param {string} messageKey \uBA54\uC2DC\uC9C0 \uD0A4\r\n * @returns {*}\r\n */\r\n public getMessage(messageKey: string): any {\r\n return (this.lang as any)[messageKey];\r\n }\r\n\r\n /**\r\n * ValidResult \uAC12\uC744 \uBA54\uC2DC\uC9C0\uB85C \uBCC0\uACBD.\r\n *\r\n * @public\r\n * @param {FormField} field\r\n * @param {ValidResult} validResult\r\n * @returns {string[]}\r\n */\r\n public validMessage(field: FormField, validResult: ValidResult): string[] {\r\n let messageFormat = \"\";\r\n\r\n let messageFormats: string[] = [];\r\n\r\n if (validResult.regexp) {\r\n messageFormat = (this.lang.regexp as any)[validResult.regexp];\r\n messageFormats.push(messageFormat);\r\n }\r\n\r\n (validResult.constraint ?? []).forEach((constraint) => {\r\n if (constraint === RULES.REQUIRED) {\r\n messageFormat = message(this.lang.required, field);\r\n messageFormats.push(messageFormat);\r\n }\r\n\r\n if (field.renderType == \"number\" || field.renderType == \"range\") {\r\n messageFormat = (this.lang.number as any)[constraint];\r\n messageFormats.push(messageFormat);\r\n } else {\r\n messageFormat = (this.lang.string as any)[constraint];\r\n messageFormats.push(messageFormat);\r\n }\r\n });\r\n\r\n const reMessage: string[] = [];\r\n\r\n const msgParam = Object.assign({}, { name: field.name, label: field.label }, field.rule);\r\n messageFormats.forEach((msgFormat) => {\r\n if (msgFormat) {\r\n reMessage.push(message(msgFormat, msgParam));\r\n }\r\n });\r\n\r\n if (validResult.validator) {\r\n reMessage.push(validResult.validator.message);\r\n }\r\n\r\n return reMessage;\r\n }\r\n}\r\n\r\nfunction message(msgFormat: string, msgParam: any): string {\r\n return msgFormat.replace(/\\{{1,1}([A-Za-z0-9_.]*)\\}{1,1}/g, (match, key) => {\r\n return typeof msgParam[key] !== \"undefined\" ? msgParam[key] : match;\r\n });\r\n}\r\n\r\nexport default new Language();\r\n", "import { FormField } from \"@t/FormField\";\r\n\r\nimport Render from \"../renderer/Render\";\r\nimport { RENDER_TEMPLATE } from \"../constants\";\r\nimport * as utils from \"./utils\";\r\n\r\nexport const getRenderer = (field: FormField): Render => {\r\n let render;\r\n if (field.renderType) {\r\n render = RENDER_TEMPLATE[field.renderType];\r\n }\r\n\r\n if (render && (render.isDataRender() === false || !utils.isUndefined(field.name))) {\r\n return render;\r\n }\r\n\r\n if (utils.isUndefined(field.name)) {\r\n if (field.children) {\r\n return RENDER_TEMPLATE[\"group\"];\r\n } else {\r\n return RENDER_TEMPLATE[\"hidden\"];\r\n }\r\n }\r\n\r\n return RENDER_TEMPLATE[\"text\"];\r\n};\r\n", "import { FIELD_PREFIX } from \"src/constants\";\r\nimport { FormField } from \"./types/FormField\";\r\nimport { ValidResult } from \"./types/ValidResult\";\r\nimport { getRenderer } from \"./util/renderFactory\";\r\nimport Lanauage from \"./util/Lanauage\";\r\nimport * as utils from \"./util/utils\";\r\nimport DaraForm from \"./DaraForm\";\r\n\r\ninterface NumberFieldMap {\r\n [key: string]: FormField;\r\n}\r\n\r\ninterface StringNumberMap {\r\n [key: string]: string;\r\n}\r\n\r\nexport default class FieldInfoMap {\r\n private fieldIdx = 0;\r\n\r\n private allFieldInfo: NumberFieldMap = {};\r\n\r\n private keyNameMap: StringNumberMap = {};\r\n\r\n private conditionFields: string[] = [];\r\n\r\n private fieldPrefix;\r\n\r\n private form;\r\n\r\n constructor(selector: string, form: DaraForm) {\r\n this.fieldPrefix = `${FIELD_PREFIX}_${utils.getHashCode(selector)}`;\r\n this.form = form;\r\n }\r\n\r\n /**\r\n * add Field \uC815\uBCF4\r\n *\r\n * @public\r\n * @param {FormField} field \uD3FC\uD544\uB4DC \uC815\uBCF4\r\n */\r\n public addField(field: FormField) {\r\n utils.replaceXssField(field);\r\n this.fieldIdx += 1;\r\n field.$key = `${this.fieldPrefix}_${this.fieldIdx}`;\r\n field.$validName = field.name ?? field.label;\r\n this.keyNameMap[field.$validName] = field.$key;\r\n this.allFieldInfo[field.$key] = field;\r\n field.$renderType = getRenderer(field);\r\n\r\n if (field.conditional) {\r\n this.conditionFields.push(field.$key);\r\n }\r\n }\r\n\r\n /**\r\n * \uD544\uB4DC\uBA85\uC73C\uB85C \uD544\uB4DC \uC815\uBD80 \uAD6C\uD558\uAE30\r\n *\r\n * @public\r\n * @param {string} fieldName \uD544\uB4DC\uBA85\r\n * @returns {FormField}\r\n */\r\n public getFieldName(fieldName: string): FormField {\r\n return this.allFieldInfo[this.keyNameMap[fieldName]];\r\n }\r\n\r\n /**\r\n * \uD544\uB4DC \uD0A4\uB85C \uC815\uBCF4 \uAD6C\uD558\uAE30\r\n *\r\n * @public\r\n * @param {string} fieldKey\r\n * @returns {FormField}\r\n */\r\n public get(fieldKey: string): FormField {\r\n return this.allFieldInfo[fieldKey];\r\n }\r\n\r\n /**\r\n * \uD544\uB4DC\uBA85 \uC788\uB294\uC9C0 \uC5EC\uBD80 \uCCB4\uD06C.\r\n *\r\n * @public\r\n * @param {string} fieldName \uD544\uB4DC\uBA85\r\n * @returns {boolean}\r\n */\r\n public hasFieldName(fieldName: string): boolean {\r\n if (this.keyNameMap[fieldName] && this.allFieldInfo[this.keyNameMap[fieldName]]) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * \uBAA8\uB4E0 \uD544\uB4DC \uC815\uBCF4\r\n *\r\n * @public\r\n * @returns {NumberFieldMap}\r\n */\r\n public getAllFieldInfo(): NumberFieldMap {\r\n return this.allFieldInfo;\r\n }\r\n\r\n /**\r\n * \uD544\uB4DC \uC815\uBCF4 \uB9F5\uC5D0\uC11C \uC9C0\uC6B0\uAE30\r\n *\r\n * @public\r\n * @param {string} fieldName\r\n */\r\n public removeFieldInfo(fieldName: string) {\r\n delete this.allFieldInfo[this.keyNameMap[fieldName]];\r\n }\r\n\r\n /**\r\n * \uBAA8\uB4E0 \uD544\uB4DC\uAC12 \uAD6C\uD558\uAE30\r\n *\r\n * @public\r\n * @param {boolean} validationCheck\r\n * @returns {*}\r\n */\r\n public getAllFieldValue(formValue: any, validationCheck: boolean) {\r\n const useTypeValue = this.form.getOptions().useTypeValue;\r\n\r\n if (validationCheck !== true) {\r\n for (let [key, fieldInfo] of Object.entries(this.allFieldInfo)) {\r\n formValue = addFormValue(formValue, fieldInfo, useTypeValue);\r\n }\r\n return formValue;\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n for (let [key, fieldInfo] of Object.entries(this.allFieldInfo)) {\r\n if (!fieldInfo.$instance.isEnableView()) {\r\n continue;\r\n }\r\n\r\n let fieldValid = this.getFieldValidation(fieldInfo, true);\r\n\r\n if (fieldValid !== true) {\r\n reject(new Error(fieldValid.message, { cause: fieldValid }));\r\n return;\r\n }\r\n\r\n formValue = addFormValue(formValue, fieldInfo, useTypeValue);\r\n }\r\n\r\n resolve(formValue);\r\n });\r\n }\r\n\r\n public getFormDataValue(formValue: any, validationCheck: boolean) {\r\n if (validationCheck !== true) {\r\n let reval = new FormData();\r\n\r\n for (let [key, value] of Object.entries(formValue)) {\r\n reval.set(key, value as any);\r\n }\r\n\r\n for (let [key, fieldInfo] of Object.entries(this.allFieldInfo)) {\r\n addFieldFormData(reval, fieldInfo, fieldInfo.$instance.getValue());\r\n }\r\n\r\n return reval;\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n let reval = new FormData();\r\n\r\n for (let [key, value] of Object.entries(formValue)) {\r\n reval.set(key, value as any);\r\n }\r\n\r\n for (let [key, fieldInfo] of Object.entries(this.allFieldInfo)) {\r\n if (!fieldInfo.$instance.isEnableView()) {\r\n continue;\r\n }\r\n\r\n let fieldValid = this.getFieldValidation(fieldInfo, true);\r\n\r\n if (fieldValid !== true) {\r\n reject(new Error(fieldValid.message, { cause: fieldValid }));\r\n return;\r\n }\r\n\r\n addFieldFormData(reval, fieldInfo, fieldInfo.$instance.getValue());\r\n }\r\n\r\n resolve(reval);\r\n });\r\n }\r\n\r\n /**\r\n *\r\n *\r\n * @param field\r\n * @returns\r\n */\r\n public isConditionFieldCheck(field: FormField) {\r\n let parent = field;\r\n\r\n while (typeof parent !== \"undefined\") {\r\n if (!this.isConditionField(parent)) {\r\n return false;\r\n }\r\n\r\n parent = parent.$parent;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * field \uD65C\uC131 \uBE44\uD65C\uC131\uD654 \uC5EC\uBD80.\r\n *\r\n * @param field form field\r\n * @returns\r\n */\r\n public isConditionField(field: FormField) {\r\n if (!this.conditionFields.includes(field.$key)) {\r\n return true;\r\n }\r\n\r\n let condFlag = false;\r\n\r\n if (field.conditional.custom) {\r\n condFlag = field.conditional.custom.call(null, field);\r\n } else {\r\n if (field.conditional.field) {\r\n const condField = this.getFieldName(field.conditional.field);\r\n\r\n if (condField) {\r\n if (field.conditional.eq == condField.$instance.getValue()) {\r\n condFlag = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return condFlag;\r\n }\r\n\r\n /**\r\n * \uCEEC\uB7FC \uB85C\uC6B0 \uBCF4\uC774\uACE0 \uC548\uBCF4\uC774\uAE30 \uCCB4\uD06C.\r\n *\r\n * @public\r\n */\r\n public conditionCheck() {\r\n this.conditionFields.forEach((fieldKey) => {\r\n const fieldInfo = this.allFieldInfo[fieldKey];\r\n\r\n let condFlag = this.isConditionField(fieldInfo);\r\n\r\n if (condFlag) {\r\n fieldInfo.$instance.show();\r\n } else {\r\n fieldInfo.$instance.hide();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * field validation check\r\n *\r\n * @param fieldInfo FormField\r\n * @returns boolean true or ValidResult\r\n */\r\n public getFieldValidation(fieldInfo: FormField, focusFlag: boolean | undefined) {\r\n if (!this.isConditionFieldCheck(fieldInfo)) {\r\n return true;\r\n }\r\n\r\n const renderInfo = fieldInfo.$instance;\r\n let fieldValid = renderInfo.valid();\r\n\r\n if (fieldValid === true) return true;\r\n\r\n if (focusFlag) {\r\n renderInfo.focus();\r\n }\r\n fieldValid = fieldValid as ValidResult;\r\n if (utils.isUndefined(fieldValid.message)) {\r\n fieldValid.message = Lanauage.validMessage(fieldInfo, fieldValid)[0];\r\n }\r\n\r\n return fieldValid;\r\n }\r\n}\r\n\r\n/**\r\n * add form value\r\n * @param formData {Object} return Object value\r\n * @param fieldInfo {FormField} field info\r\n * @param fieldValue {any} form value\r\n */\r\nfunction addFormValue(formData: any, fieldInfo: FormField, useTypeValue?: boolean) {\r\n if (utils.ignoreValueField(fieldInfo)) {\r\n return formData;\r\n }\r\n\r\n const fieldValue = fieldInfo.$instance.getValue();\r\n\r\n if (fieldInfo.renderType === \"file\") {\r\n const uploadFiles = fieldValue[\"uploadFile\"];\r\n\r\n formData[fieldInfo.$validName] = uploadFiles;\r\n formData[fieldInfo.$validName + \"RemoveIds\"] = fieldValue[\"removeIds\"];\r\n } else {\r\n if (useTypeValue !== true) {\r\n if (utils.isTabType(fieldInfo)) {\r\n for (let [key, value] of Object.entries(fieldValue)) {\r\n formData[key] = value;\r\n }\r\n } else {\r\n if (!utils.isEmpty(fieldInfo.name)) {\r\n formData[fieldInfo.name] = fieldValue;\r\n }\r\n }\r\n } else {\r\n formData[fieldInfo.$validName] = fieldValue;\r\n }\r\n }\r\n\r\n return formData;\r\n}\r\n\r\nfunction addFieldFormData(formData: FormData, fieldInfo: FormField, useTypeValue?: boolean) {\r\n if (utils.ignoreValueField(fieldInfo)) {\r\n return formData;\r\n }\r\n\r\n const fieldValue = fieldInfo.$instance.getValue();\r\n\r\n if (fieldInfo.renderType === \"file\") {\r\n const uploadFiles = fieldValue[\"uploadFile\"];\r\n formData.delete(fieldInfo.$validName);\r\n for (let uploadFile of uploadFiles) {\r\n formData.append(fieldInfo.$validName, uploadFile);\r\n }\r\n\r\n formData.set(fieldInfo.$validName + \"RemoveIds\", fieldValue[\"removeIds\"]);\r\n } else {\r\n if (useTypeValue !== true) {\r\n if (utils.isTabType(fieldInfo)) {\r\n for (let [key, value] of Object.entries(fieldValue)) {\r\n formData.set(key, value as any);\r\n }\r\n } else {\r\n if (!utils.isEmpty(fieldInfo.name)) {\r\n formData.set(fieldInfo.$validName, fieldValue);\r\n }\r\n }\r\n } else {\r\n formData.set(fieldInfo.$validName, fieldValue);\r\n }\r\n }\r\n\r\n return formData;\r\n}\r\n", "import { FormOptions } from \"@t/FormOptions\";\r\nimport { FieldStyle, FormField } from \"@t/FormField\";\r\nimport * as utils from \"./util/utils\";\r\nimport FieldInfoMap from \"src/FieldInfoMap\";\r\n\r\nimport styleUtils from \"./util/styleUtils\";\r\nimport DaraForm from \"./DaraForm\";\r\nimport TabRender from \"./renderer/TabRender\";\r\nimport GridRender from \"./renderer/GridRender\";\r\n\r\n/**\r\n * form template\r\n *\r\n * @class FormTemplate\r\n * @typedef {FormTemplate}\r\n */\r\nexport default class FormTemplate {\r\n private readonly options: FormOptions;\r\n private readonly formElement;\r\n\r\n private fieldInfoMap;\r\n\r\n private daraform: DaraForm;\r\n\r\n private addRowFields: string[] = [];\r\n\r\n constructor(daraform: DaraForm, formElement: Element, fieldInfoMap: FieldInfoMap) {\r\n this.daraform = daraform;\r\n this.options = daraform.getOptions();\r\n this.formElement = formElement;\r\n\r\n this.fieldInfoMap = fieldInfoMap;\r\n }\r\n\r\n /**\r\n * field row \uCD94\uAC00.\r\n *\r\n * @param field\r\n */\r\n public addRow(field: FormField) {\r\n if (this.checkHiddenField(field)) {\r\n return;\r\n }\r\n\r\n this.addRowFields = [];\r\n\r\n this.addRowTemplate(field);\r\n }\r\n\r\n /**\r\n * \uADF8\uB8F9 \uD15C\uD50C\uB9BF\r\n *\r\n * @param {FormField} field\r\n * @returns {string} row template\r\n */\r\n public addRowTemplate(field: FormField): void {\r\n let labelHideFlag = this.isLabelHide(field);\r\n\r\n let fieldStyle: FieldStyle = styleUtils.fieldStyle(this.options, field, null, labelHideFlag);\r\n\r\n this.addRowFieldInfo(field);\r\n\r\n const rowElement = utils.templateToElement(`\r\n <div class=\"df-row form-group ${fieldStyle.fieldClass}\" id=\"${field.$key}\">\r\n ${labelHideFlag ? \"\" : `<div class=\"df-label ${fieldStyle.labelClass} ${fieldStyle.labelAlignClass}\" title=\"${field.label ?? \"\"}\" style=\"${fieldStyle.labelStyle}\">${this.getLabelTemplate(field)}</div>`}\r\n\r\n <div class=\"df-field-container ${fieldStyle.valueClass} ${field.required ? \"required\" : \"\"}\" style=\"${fieldStyle.valueStyle}\"></div>\r\n </div>\r\n `);\r\n\r\n if (rowElement) {\r\n this.createField(field, rowElement);\r\n this.formElement.append(rowElement);\r\n\r\n if (field.children) {\r\n this.childTemplate(field, fieldStyle);\r\n }\r\n }\r\n }\r\n\r\n public createField(field: FormField, element: Element): void {\r\n field.$instance = new (field.$renderType as any)(field, element, this.daraform);\r\n }\r\n\r\n /**\r\n * child template\r\n *\r\n * @param {FormField} field\r\n * @param {FieldStyle} parentFieldStyle\r\n * @returns {*}\r\n */\r\n public childTemplate(field: FormField, parentFieldStyle: FieldStyle): void {\r\n let beforeField: FormField = null as any;\r\n let firstFlag = true;\r\n let isEmptyLabel = false;\r\n\r\n if (!(field.$renderType as any).isChildrenCreate()) {\r\n return;\r\n }\r\n\r\n const rowElement = document.createElement(\"div\");\r\n rowElement.classList.add(\"df-row\", parentFieldStyle.rowStyleClass ?? \"\");\r\n\r\n let idx = 0;\r\n\r\n for (const childField of field.children) {\r\n if (utils.isEmpty(childField)) {\r\n throw new Error(`parent field :[${field.$validName}], children index ${idx}, empty [${childField}]`);\r\n }\r\n\r\n childField.$parent = field;\r\n ++idx;\r\n\r\n if (this.checkHiddenField(childField)) {\r\n continue;\r\n }\r\n\r\n this.addRowFieldInfo(childField);\r\n\r\n if (firstFlag) {\r\n beforeField = childField;\r\n }\r\n\r\n let labelHideFlag = this.isLabelHide(childField);\r\n\r\n let childFieldStyle;\r\n\r\n let labelTemplate = \"\";\r\n if (labelHideFlag) {\r\n childFieldStyle = styleUtils.fieldStyle(this.options, childField, beforeField, !isEmptyLabel);\r\n labelTemplate = isEmptyLabel ? `<span class=\"df-label empty ${childFieldStyle.labelClass}\" style=\"${childFieldStyle.labelStyle}\"></span>` : \"\";\r\n } else {\r\n childFieldStyle = styleUtils.fieldStyle(this.options, childField, beforeField, false);\r\n labelTemplate = `<span class=\"df-label ${childFieldStyle.labelClass} ${childFieldStyle.labelAlignClass}\" title=\"${childField.label ?? \"\"}\" style=\"${childFieldStyle.labelStyle}\">${this.getLabelTemplate(childField)}</span>`;\r\n }\r\n\r\n const groupElement = utils.templateToElement(`<div class=\"form-group ${childFieldStyle.fieldClass}\" style=\"${childFieldStyle.fieldStyle}\" id=\"${childField.$key}\">\r\n ${labelTemplate}\r\n <span class=\"df-field-container ${childFieldStyle.valueClass} ${childField.required ? \"required\" : \"\"}\" style=\"${childFieldStyle.valueStyle}\"></span>\r\n </div>`);\r\n\r\n if (groupElement) {\r\n this.createField(childField, groupElement);\r\n rowElement.append(groupElement);\r\n\r\n if (childField.children) {\r\n this.childTemplate(childField, childField.children ? childFieldStyle : parentFieldStyle);\r\n }\r\n }\r\n if (!labelHideFlag) {\r\n isEmptyLabel = true;\r\n }\r\n\r\n firstFlag = false;\r\n }\r\n\r\n field.$instance.addChildField(rowElement);\r\n }\r\n\r\n /**\r\n * label template\r\n *\r\n * @param {FormField} field form field\r\n * @returns {string} template string\r\n */\r\n public getLabelTemplate(field: FormField) {\r\n const requiredTemplate = field.required ? `<span class=\"required\"></span>` : \"\";\r\n const tooltipTemplate = utils.isBlank(field.tooltip) ? \"\" : `<span class=\"df-tooltip\">?<span class=\"tooltip\">${field.tooltip}</span></span>`;\r\n\r\n return `${field.label ?? \"\"} ${tooltipTemplate} ${requiredTemplate}`;\r\n }\r\n\r\n /**\r\n * label \uC228\uAE40 \uC5EC\uBD80\r\n *\r\n * @param field formfield\r\n * @returns\r\n */\r\n public isLabelHide(field: FormField): boolean {\r\n return field.style?.labelHide || utils.isUndefined(field.label);\r\n }\r\n\r\n public checkHiddenField(field: FormField) {\r\n if (utils.isHiddenField(field)) {\r\n this.fieldInfoMap.addField(field);\r\n field.$instance = new (field.$renderType as any)(field, null, this.daraform);\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * add row file map\r\n *\r\n * @param {FormField} field\r\n */\r\n public addRowFieldInfo(field: FormField) {\r\n if (!utils.isBlank(field.name) && this.fieldInfoMap.hasFieldName(field.name)) {\r\n throw new Error(`Duplicate field name \"${field.name}\"`);\r\n }\r\n\r\n this.fieldInfoMap.addField(field);\r\n this.addRowFields.push(field.$key);\r\n }\r\n}\r\n", "import { FormOptions } from \"@t/FormOptions\";\r\nimport { FormField } from \"@t/FormField\";\r\nimport * as utils from \"./util/utils\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { Message } from \"@t/Message\";\r\nimport Lanauage from \"./util/Lanauage\";\r\nimport { stringValidator } from \"./rule/stringValidator\";\r\nimport { numberValidator } from \"./rule/numberValidator\";\r\nimport { regexpValidator } from \"./rule/regexpValidator\";\r\nimport FieldInfoMap from \"src/FieldInfoMap\";\r\nimport FormTemplate from \"./FormTemplate\";\r\nimport { FORM_MODE } from \"./constants\";\r\n\r\ndeclare const APP_VERSION: string;\r\n\r\nconst defaultOptions = {\r\n style: {\r\n width: \"100%\",\r\n labelWidth: 3,\r\n valueWidth: 9,\r\n position: \"left-right\",\r\n },\r\n mode: \"new\",\r\n useTypeValue: true,\r\n autoCreate: true,\r\n notValidMessage: \"This form is not valid.\",\r\n fields: [],\r\n} as FormOptions;\r\n\r\ninterface FieldMap {\r\n [key: string]: FormField;\r\n}\r\n\r\ninterface DaraFormMap {\r\n [key: string]: DaraForm;\r\n}\r\n\r\n// all instance\r\nconst allInstance: DaraFormMap = {};\r\n\r\nconst SEQ_ATTR_KEY = \"data-form-uid\";\r\n\r\nlet DARA_FORM_SEQ = 0;\r\n/**\r\n * DaraForm class\r\n *\r\n * @class DaraForm\r\n * @typedef {DaraForm}\r\n */\r\nexport default class DaraForm {\r\n public static VERSION = `${APP_VERSION}`;\r\n\r\n private readonly options;\r\n\r\n private orginFormStyleClass;\r\n\r\n private selector: string;\r\n private formElement: Element;\r\n\r\n private fieldInfoMap: FieldInfoMap;\r\n\r\n private formValue: any = {};\r\n\r\n public formTemplate: FormTemplate;\r\n\r\n constructor(formElement: Element, options: FormOptions, message?: Message) {\r\n this.options = utils.merge({}, defaultOptions, options) as FormOptions;\r\n\r\n Lanauage.set(message);\r\n\r\n if (formElement) {\r\n this.orginFormStyleClass = formElement.className;\r\n formElement.classList.add(\"daracl-form\");\r\n\r\n this.selector = `df_${++DARA_FORM_SEQ}`;\r\n formElement.setAttribute(\"name\", this.selector);\r\n formElement.setAttribute(SEQ_ATTR_KEY, this.selector);\r\n\r\n if (this.options.style.width) {\r\n formElement.setAttribute(\"style\", `width:${this.options.style.width};`);\r\n }\r\n\r\n this.formElement = formElement;\r\n this.changeMode(this.options.mode ?? \"new\");\r\n this.createForm(this.options.fields);\r\n\r\n if (this.options.autoCreate !== false) {\r\n allInstance[this.selector] = this;\r\n }\r\n } else {\r\n throw new Error(`${formElement} form selector not found`);\r\n }\r\n }\r\n\r\n public static create(formElement: Element, options: FormOptions, message?: Message): DaraForm {\r\n return new DaraForm(formElement, options, message);\r\n }\r\n\r\n public static setMessage(message: Message): void {\r\n Lanauage.set(message);\r\n }\r\n\r\n private createForm(fields: FormField[]) {\r\n this.fieldInfoMap = new FieldInfoMap(this.selector, this);\r\n //this.formElement.innerHTML = \"\";\r\n this.formTemplate = new FormTemplate(this, this.formElement, this.fieldInfoMap);\r\n\r\n if (this.options.autoCreate === false) {\r\n return;\r\n }\r\n\r\n fields.forEach((field) => {\r\n this.formTemplate.addRow(field);\r\n });\r\n this.conditionCheck();\r\n\r\n if (this.options.onMounted) {\r\n this.options.onMounted.call(this);\r\n }\r\n }\r\n\r\n /**\r\n * change mode\r\n *\r\n * @param mode form_mode default new\r\n */\r\n public changeMode = (mode: FORM_MODE): void => {\r\n this.options.mode = mode;\r\n this.formElement.setAttribute(\"data-df-mode\", mode);\r\n };\r\n\r\n /**\r\n * \uD3FC \uB370\uC774\uD130 reset\r\n */\r\n public resetForm = () => {\r\n const fieldMap = this.fieldInfoMap.getAllFieldInfo();\r\n for (const seq in fieldMap) {\r\n const fieldInfo = fieldMap[seq];\r\n const renderInfo = fieldInfo.$instance;\r\n\r\n if (renderInfo && typeof renderInfo.reset === \"function\") {\r\n renderInfo.reset();\r\n }\r\n }\r\n this.formValue = {};\r\n this.conditionCheck();\r\n };\r\n\r\n /**\r\n * field \uAC12 reset\r\n * @param fieldName \uD544\uB4DC\uBA85\r\n */\r\n public resetField = (fieldName: string) => {\r\n this.fieldInfoMap.getFieldName(fieldName).$instance.reset();\r\n this.formValue[fieldName] = \"\";\r\n this.conditionCheck();\r\n };\r\n\r\n /**\r\n * \uD544\uB4DC element \uC5BB\uAE30\r\n *\r\n * @param {string} fieldName\r\n * @returns {*}\r\n */\r\n public getFieldElement(fieldName: string) {\r\n const field = this.fieldInfoMap.getFieldName(fieldName);\r\n\r\n if (field?.$instance) {\r\n return field.$instance.getElement();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getField(fieldName: string): FormField {\r\n return this.fieldInfoMap.getFieldName(fieldName);\r\n }\r\n\r\n /**\r\n * field \uAC12 \uC5BB\uAE30\r\n *\r\n * @param fieldName \uD544\uB4DC\uBA85\r\n * @returns\r\n */\r\n public getFieldValue = (fieldName: string) => {\r\n const field = this.fieldInfoMap.getFieldName(fieldName);\r\n\r\n if (field) {\r\n return field.$instance.getValue();\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * \uD3FC \uD544\uB4DC \uAC12 \uC5BB\uAE30\r\n * @param isValid \uD3FC \uC720\uD6A8\uC131 \uAC80\uC0AC \uC5EC\uBD80 default:false|undefined true\uC77C\uACBD\uC6B0 \uAC80\uC0AC.\r\n * @returns\r\n */\r\n public getValue = (isValid: boolean): any => {\r\n return this.fieldInfoMap.getAllFieldValue(this.formValue, isValid);\r\n };\r\n\r\n public getFormDataValue = (isValid: boolean): any => {\r\n return this.fieldInfoMap.getFormDataValue(this.formValue, isValid);\r\n };\r\n\r\n /**\r\n * \uD3FC \uD544\uB4DC value \uC14B\uD305\r\n * @param values\r\n */\r\n public setValue = (values: any, dataClear?: boolean | undefined) => {\r\n if (dataClear !== false) {\r\n this.resetForm();\r\n }\r\n\r\n Object.keys(values).forEach((fieldName) => {\r\n this._setFieldValue(fieldName, values[fieldName]);\r\n });\r\n this.conditionCheck();\r\n };\r\n\r\n public setFieldValue = (fieldName: string, value: any) => {\r\n this._setFieldValue(fieldName, value);\r\n this.conditionCheck();\r\n };\r\n\r\n private _setFieldValue(fieldName: string, value: any) {\r\n this.formValue[fieldName] = value;\r\n const fieldInfo = this.fieldInfoMap.getFieldName(fieldName);\r\n\r\n if (fieldInfo) {\r\n fieldInfo.$instance.setValue(value);\r\n }\r\n }\r\n\r\n public setFieldItems = (fieldName: string, values: any) => {\r\n const field = this.fieldInfoMap.getFieldName(fieldName);\r\n\r\n if (field) {\r\n return field.$instance.setValueItems(values);\r\n }\r\n };\r\n\r\n /**\r\n * field \uCD94\uAC00\r\n *\r\n * @param {FormField} field\r\n */\r\n public addField = (field: FormField) => {\r\n this.options.fields.push(field);\r\n this.formTemplate.addRow(field);\r\n this.conditionCheck();\r\n };\r\n\r\n /**\r\n * field \uC81C\uAC70\r\n *\r\n * @param {string} fieldName\r\n */\r\n public removeField = (fieldName: string) => {\r\n const element = this.getFieldElement(fieldName);\r\n\r\n if (element != null) {\r\n element.closest(\".df-row\")?.remove();\r\n }\r\n\r\n this.fieldInfoMap.removeFieldInfo(fieldName);\r\n };\r\n\r\n /**\r\n * \uD3FC \uC720\uD6A8\uC131 \uAC80\uC99D \uC5EC\uBD80\r\n *\r\n * @returns {boolean}\r\n */\r\n public isValidForm = (): boolean => {\r\n const result = this.validForm();\r\n\r\n return result.length < 1;\r\n };\r\n\r\n /**\r\n * \uC720\uD6A8\uC131 \uAC80\uC99D \uD3FC \uAC80\uC99D\uC5EC\uBD80 \uB9AC\uD134\r\n *\r\n * @returns {any[]}\r\n */\r\n public validForm = (): any[] => {\r\n let validResult = [] as any;\r\n let autoFocusFlag = this.options.autoFocus !== false;\r\n let firstFlag = true;\r\n\r\n const fieldMap = this.fieldInfoMap.getAllFieldInfo();\r\n for (const fieldKey in fieldMap) {\r\n const fieldInfo = fieldMap[fieldKey];\r\n\r\n let fieldValid = this.fieldInfoMap.getFieldValidation(fieldInfo, autoFocusFlag);\r\n\r\n if (fieldValid !== true) {\r\n autoFocusFlag = false;\r\n\r\n if (utils.isGridType(fieldInfo)) {\r\n validResult = validResult.concat(fieldValid);\r\n } else {\r\n if (firstFlag) {\r\n this.validTabCheck(fieldInfo);\r\n firstFlag = false;\r\n }\r\n validResult.push(fieldValid);\r\n }\r\n }\r\n }\r\n\r\n return validResult;\r\n };\r\n\r\n private validTabCheck(fieldInfo: FormField) {\r\n if (fieldInfo.$parent) {\r\n if (fieldInfo.$parent.renderType == \"tab\") {\r\n fieldInfo.$parent.$instance.setActive(fieldInfo.$key);\r\n }\r\n this.validTabCheck(fieldInfo.$parent);\r\n }\r\n }\r\n\r\n public isValidField = (fieldName: string): boolean => {\r\n const fieldInfo = this.fieldInfoMap.getFieldName(fieldName);\r\n\r\n if (utils.isUndefined(fieldInfo)) {\r\n throw new Error(`Field name [${fieldName}] not found`);\r\n }\r\n\r\n const renderInfo = fieldInfo.$instance;\r\n if (renderInfo) {\r\n return renderInfo.valid() === true;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n /**\r\n * \uC124\uC815 \uC635\uC158 \uC5BB\uAE30\r\n */\r\n public getOptions = () => {\r\n return this.options;\r\n };\r\n\r\n public conditionCheck() {\r\n this.fieldInfoMap.conditionCheck();\r\n }\r\n\r\n public setFieldDisabled(fieldName: string, flag: boolean) {\r\n const fieldInfo = this.fieldInfoMap.getFieldName(fieldName);\r\n fieldInfo.$instance.setDisabled(flag);\r\n }\r\n\r\n /**\r\n * \uC124\uBA85 \uCD94\uAC00\r\n *\r\n * @public\r\n * @param {string} fieldName\r\n * @param {string} desc\r\n */\r\n public setFieldDescription(fieldName: string, desc: string) {\r\n const fieldInfo = this.fieldInfoMap.getFieldName(fieldName);\r\n fieldInfo.$instance.setDescription(desc);\r\n }\r\n\r\n public destroy = () => {\r\n this.formElement.className = this.orginFormStyleClass;\r\n this.formElement.replaceChildren();\r\n\r\n for (const key in this) {\r\n if (utils.hasOwnProp(this, key)) {\r\n delete this[key];\r\n delete allInstance[this.selector];\r\n }\r\n }\r\n };\r\n\r\n public static validator = {\r\n string: (value: string, field: FormField) => {\r\n return stringValidator(value, field);\r\n },\r\n number: (value: string, field: FormField) => {\r\n return numberValidator(value, field);\r\n },\r\n regexp: (value: string, field: FormField) => {\r\n let result: ValidResult = { name: field.name, constraint: [] };\r\n return regexpValidator(value, field, result);\r\n },\r\n };\r\n\r\n public static instance(ele: Element | String) {\r\n let element;\r\n if (utils.isString(ele)) {\r\n element = document.querySelector(ele);\r\n } else {\r\n element = ele;\r\n }\r\n element = element as Element;\r\n let selector = element.getAttribute(SEQ_ATTR_KEY);\r\n\r\n if (utils.isUndefined(selector) || utils.isBlank(selector)) {\r\n const keys = Object.keys(allInstance);\r\n if (keys.length > 1) {\r\n throw new Error(`selector empty : [${selector}]`);\r\n }\r\n selector = keys[0];\r\n\r\n return allInstance[selector];\r\n }\r\n }\r\n /**\r\n * \uBAA8\uB4E0 field \uC5BB\uAE30\r\n */\r\n public getFields = (): any[] => {\r\n return this.options.fields;\r\n };\r\n\r\n /**\r\n * field setting\r\n * @param fields\r\n */\r\n public setFields = (fields: any[]) => {\r\n this.options.fields = fields;\r\n this.createForm(fields);\r\n };\r\n\r\n public getFieldInfoMap() {\r\n return this.fieldInfoMap;\r\n }\r\n}\r\n", "@charset \"UTF-8\";\n.daracl-form {\n --border-color: #dfe1e5;\n --color-danger: #d9534f;\n --background-danger: #d9534f;\n --font-color: #686868;\n --font-hover-color: #3a3d41;\n --invalid-font-color: #ff4136;\n --invalid-border-color: #ffb6b4;\n --invalid-background-color: #fdd;\n --button-bg: #f6f6f6;\n --button-bg-hover: #ebebeb;\n --tab-bg: #f6f6f6;\n --tab-bg-hover: #ebebeb;\n --tooltip-background: #3e3e3e;\n --tooltip-color: #fff;\n --field-margin-top: 10px;\n --input-bg: #fff;\n --input-color: #212529;\n --input-disabled-bg: #ebebeb;\n --bg-grid-header: #f1f1f1;\n}\n\nbody.dark .daracl-form,\n.daracl-form.dark {\n --border-color: #41444c;\n --color-danger: #d9534f;\n --background-danger: #d9534f;\n --font-color: #b9bdc1;\n --font-hover-color: #f5f3f3;\n --invalid-font-color: #ff4136;\n --invalid-border-color: #ffb6b4;\n --invalid-background-color: #fdd;\n --button-bg: #435ebe;\n --button-bg-hover: #3950a2;\n --tab-bg: #23418f;\n --tab-bg-hover: #516db1;\n --tooltip-background: #3e3e3e;\n --tooltip-color: #fff;\n --field-margin-top: 10px;\n --input-bg: transparent;\n --input-color: #c6cddb;\n --input-disabled-bg: #878787;\n --bg-grid-header: #878787;\n}\n\n.daracl-form {\n padding: 0px;\n margin-top: 10px;\n color: var(--font-color);\n}\n.daracl-form *,\n.daracl-form ::after,\n.daracl-form ::before {\n box-sizing: border-box;\n}\n.daracl-form .txt-left {\n text-align: left;\n}\n.daracl-form .txt-center {\n text-align: center;\n}\n.daracl-form .txt-right {\n text-align: right;\n}\n.daracl-form[data-df-mode=view] .form-field {\n border-width: 0px;\n border-color: transparent;\n border-color: transparent;\n outline: initial;\n}\n.daracl-form[data-df-mode=view] .form-field:focus-visible, .daracl-form[data-df-mode=view] .form-field:focus {\n border-width: 0px;\n}\n.daracl-form .df-hidden {\n max-height: 0vh !important;\n width: 0px;\n visibility: collapse;\n display: none !important;\n padding: 0px !important;\n margin: 0px !important;\n}\n.daracl-form input,\n.daracl-form select,\n.daracl-form textarea {\n background-color: transparent;\n color: var(--font-color);\n}\n.daracl-form input[disabled],\n.daracl-form select[disabled],\n.daracl-form textarea[disabled] {\n background-color: var(--input-disabled-bg);\n opacity: 0.8;\n}\n.daracl-form .df-label {\n position: relative;\n font-weight: 700;\n vertical-align: top;\n padding: 5px 15px 0px 0px;\n overflow: initial;\n white-space: nowrap;\n text-overflow: ellipsis;\n word-break: break-all;\n}\n.daracl-form .df-label .required {\n color: var(--color-danger);\n}\n.daracl-form .df-label .required::after {\n content: \"*\";\n vertical-align: middle;\n}\n.daracl-form .df-label .df-tooltip {\n visibility: visible;\n color: var(--tooltip-color);\n background: var(--tooltip-background);\n width: 16px;\n height: 16px;\n border-radius: 8px;\n text-align: center;\n line-height: 16px;\n margin: 0 5px;\n font-size: 12px;\n cursor: help;\n position: relative;\n display: inline-block;\n}\n.daracl-form .df-label .df-tooltip .tooltip {\n display: none;\n text-align: initial;\n background: var(--tooltip-background);\n border-radius: 5px;\n color: var(--tooltip-color);\n padding: 10px 5px;\n position: absolute;\n z-index: 2;\n left: -10px;\n min-width: max-content;\n text-shadow: none;\n cursor: default;\n}\n.daracl-form .df-label .df-tooltip:hover .tooltip {\n display: block;\n}\n.daracl-form .form-field {\n border: 1px solid var(--border-color);\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-weight: 400;\n line-height: 1.5;\n border-radius: 4px;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n background-color: var(--input-bg);\n background-clip: padding-box;\n color: var(--input-color);\n}\n.daracl-form .form-field[type=radio], .daracl-form .form-field[type=checkbox] {\n width: 14px;\n display: inline;\n min-height: 0px;\n padding: 0px;\n margin: 0px;\n vertical-align: middle;\n}\n.daracl-form .form-field.dropdown {\n appearance: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n}\n.daracl-form .form-field.textarea {\n padding-right: 0px;\n}\n.daracl-form .form-field[type=number] {\n padding-right: 3px;\n}\n.daracl-form .form-field.file {\n display: none;\n}\n.daracl-form .form-field.range {\n padding: 0px;\n}\n.daracl-form .df-row {\n display: -ms-flexbox;\n display: -webkit-box;\n display: flex;\n -ms-flex: 0 1 auto;\n -webkit-box-flex: 0;\n flex: 0 1 auto;\n -ms-flex-direction: row;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n flex-direction: row;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n}\n.daracl-form .df-row.vertical {\n display: block;\n}\n.daracl-form .df-row.horizontal {\n -webkit-box-flex: 0;\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n}\n.daracl-form .df-row.horizontal > .form-group > .empty {\n display: none !important;\n}\n.daracl-form .df-row.top {\n flex-direction: column;\n}\n.daracl-form .df-row.top > div {\n max-width: 100% !important;\n}\n.daracl-form .df-row.right {\n -ms-flex-direction: row-reverse !important;\n -webkit-box-orient: horizontal !important;\n -webkit-box-direction: reverse !important;\n flex-direction: row-reverse !important;\n}\n.daracl-form .df-row.bottom {\n flex-direction: column-reverse !important;\n}\n.daracl-form .df-row.bottom > div {\n max-width: 100% !important;\n}\n.daracl-form .col-xs-1 {\n flex-basis: 8.33333333%;\n -webkit-box-flex: 0;\n -ms-flex: 0 0 8.33333333%;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n}\n.daracl-form .col-xs-2 {\n flex-basis: 16.66666667%;\n -webkit-box-flex: 0;\n -ms-flex: 0 0 16.66666667%;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n}\n.daracl-form .col-xs-3 {\n flex-basis: 25%;\n -webkit-box-flex: 0;\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n}\n.daracl-form .col-xs-4 {\n flex-basis: 33.33333333%;\n -webkit-box-flex: 0;\n -ms-flex: 0 0 33.33333333%;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n}\n.daracl-form .col-xs-5 {\n flex-basis: 41.66666667%;\n -webkit-box-flex: 0;\n -ms-flex: 0 0 41.66666667%;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n}\n.daracl-form .col-xs-6 {\n flex-basis: 50%;\n -webkit-box-flex: 0;\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n}\n.daracl-form .col-xs-7 {\n flex-basis: 58.33333333%;\n -webkit-box-flex: 0;\n -ms-flex: 0 0 58.33333333%;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n}\n.daracl-form .col-xs-8 {\n flex-basis: 66.66666667%;\n -webkit-box-flex: 0;\n -ms-flex: 0 0 66.66666667%;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n}\n.daracl-form .col-xs-9 {\n flex-basis: 75%;\n -webkit-box-flex: 0;\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n}\n.daracl-form .col-xs-10 {\n flex-basis: 83.33333333%;\n -webkit-box-flex: 0;\n -ms-flex: 0 0 83.33333333%;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n}\n.daracl-form .col-xs-11 {\n flex-basis: 91.66666667%;\n -webkit-box-flex: 0;\n -ms-flex: 0 0 91.66666667%;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n}\n.daracl-form .col-xs-12 {\n flex-basis: 100%;\n -webkit-box-flex: 0;\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n}\n.daracl-form .align-items-center {\n -webkit-box-align: center !important;\n -ms-flex-align: center !important;\n align-items: center !important;\n}\n.daracl-form .col-xs {\n -webkit-flex-grow: 1;\n -ms-flex-positive: 1;\n -webkit-box-flex: 1;\n flex-grow: 1;\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n max-width: 100%;\n}\n.daracl-form .col-auto {\n -webkit-box-flex: 0;\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n}\n.daracl-form .col-fix {\n flex: none;\n}\n.daracl-form .col-full {\n flex: 1;\n overflow: auto;\n}\n.daracl-form .df-field-container {\n overflow: initial;\n position: relative;\n}\n.daracl-form .df-field-container > .df-row {\n margin-top: -10px;\n}\n.daracl-form .df-field-container > div + .df-row {\n margin-top: 0px;\n}\n.daracl-form .df-field-container .df-field {\n position: relative;\n margin-right: 10px;\n}\n.daracl-form .df-field-container .df-field .range-num {\n clear: both;\n display: block;\n width: 100%;\n text-align: left;\n}\n.daracl-form .df-field-container .df-field .file-wrapper {\n border: 1px solid var(--border-color);\n text-align: center;\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-weight: 400;\n line-height: 1.5;\n background-clip: padding-box;\n border-radius: 4px;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n.daracl-form .daracl-file-list .file-icon {\n width: 20px;\n height: 20px;\n display: inline-block;\n vertical-align: middle;\n cursor: pointer;\n}\n.daracl-form .daracl-file-list .file-icon:hover {\n background-color: var(--button-bg-hover);\n}\n.daracl-form .daracl-file-list .file-icon.download {\n background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjIwcHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjIwcHgiIGZpbGw9IiMwMDAwMDAiPjxnPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjwvZz48Zz48cGF0aCBkPSJNMTgsMTV2M0g2di0zSDR2M2MwLDEuMSwwLjksMiwyLDJoMTJjMS4xLDAsMi0wLjksMi0ydi0zSDE4eiBNMTcsMTFsLTEuNDEtMS40MUwxMywxMi4xN1Y0aC0ydjguMTdMOC40MSw5LjU5TDcsMTFsNSw1IEwxNywxMXoiLz48L2c+PC9zdmc+\");\n}\n.daracl-form .daracl-file-list .file-icon.remove {\n background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjBweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE2IDl2MTBIOFY5aDhtLTEuNS02aC01bC0xIDFINXYyaDE0VjRoLTMuNWwtMS0xek0xOCA3SDZ2MTJjMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjd6Ii8+PC9zdmc+\");\n}\n.daracl-form .daracl-file-list .file-name {\n text-overflow: ellipsis;\n white-space: nowrap;\n word-wrap: normal;\n overflow: hidden;\n display: inline-block;\n vertical-align: middle;\n width: calc(100% - 55px);\n}\n.daracl-form .field-group .field.vertical > * {\n display: block;\n}\n.daracl-form .tab-header {\n list-style: none;\n margin: 0px;\n padding: 0px;\n display: flex;\n line-height: 1.3;\n width: 100%;\n border-bottom: 1px solid var(--border-color);\n}\n.daracl-form .tab-header.tab-al-left {\n justify-content: left;\n}\n.daracl-form .tab-header.tab-al-right {\n justify-content: right;\n}\n.daracl-form .tab-header.tab-al-center {\n justify-content: center;\n}\n.daracl-form .tab-header > .tab-item {\n list-style: none;\n float: left;\n position: relative;\n top: 0;\n margin: 1px 0.4em 0 0;\n padding: 0;\n white-space: nowrap;\n}\n.daracl-form .tab-header > .tab-item.active a {\n color: var(--font-hover-color);\n background-color: var(--tab-bg);\n}\n.daracl-form .tab-header > .tab-item a {\n border-top-left-radius: calc(0.45rem - 1px);\n border-top-right-radius: calc(0.45rem - 1px);\n border: 1px solid transparent;\n border-bottom-width: 0;\n float: left;\n padding: 0.5em 1em;\n text-decoration: none;\n color: var(--font-color);\n height: 30px;\n line-height: 15px;\n}\n.daracl-form .tab-header > .tab-item a:hover {\n background-color: var(--tab-bg-hover);\n border: 1px solid var(--border-color);\n border-bottom-width: 0;\n}\n.daracl-form .df-tab-body .tab-panel {\n display: none;\n}\n.daracl-form .df-tab-body .tab-panel.active {\n display: block;\n}\n.daracl-form .df-btn {\n padding: 5px 10px;\n border-radius: calc(0.45rem - 1px);\n border: 1px solid var(--border-color);\n background-color: var(--button-bg);\n cursor: pointer;\n transition: background-color 0.3s;\n}\n.daracl-form .df-btn:hover {\n color: var(--font-hover-color);\n background-color: var(--button-bg-hover);\n}\n.daracl-form .df-icon {\n display: inline-block;\n width: 21px; /* \uC544\uC774\uCF58\uC758 \uB108\uBE44 \uC124\uC815 */\n height: 21px; /* \uC544\uC774\uCF58\uC758 \uB192\uC774 \uC124\uC815 */\n vertical-align: middle;\n}\n.daracl-form .df-add-icon {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='20px' viewBox='0 -960 960 960' width='20px' fill='%235f6368'%3E%3Cpath d='M431-431H220.78v-98H431v-210.22h98V-529h210.22v98H529v210.22h-98V-431Z'/%3E%3C/svg%3E\");\n}\n.daracl-form .df-remove-icon {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='20px' viewBox='0 -960 960 960' width='20px' fill='%235f6368'%3E%3Cpath d='M291-221.91 221.91-291l189-189-189-189L291-738.09l189 189 189-189L738.09-669l-189 189 189 189L669-221.91l-189-189-189 189Z'/%3E%3C/svg%3E\");\n}\n.daracl-form .form-group {\n display: -ms-flexbox;\n display: -webkit-box;\n display: flex;\n -ms-flex-direction: row;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n flex-direction: row;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n margin-top: var(--field-margin-top);\n margin-bottom: 0px;\n margin-right: 0px !important;\n margin-left: 0px !important;\n}\n.daracl-form .form-group:last-child {\n margin-bottom: 0px;\n}\n.daracl-form .form-group.top {\n flex-direction: column;\n}\n.daracl-form .form-group.top > div {\n max-width: 100% !important;\n}\n.daracl-form .form-group.right {\n -ms-flex-direction: row-reverse !important;\n -webkit-box-orient: horizontal !important;\n -webkit-box-direction: reverse !important;\n flex-direction: row-reverse !important;\n}\n.daracl-form .form-group.bottom {\n flex-direction: column-reverse !important;\n}\n.daracl-form .form-group.bottom > div {\n max-width: 100% !important;\n}\n.daracl-form .form-group .help-message {\n display: none;\n}\n.daracl-form .form-group .help-icon {\n background-repeat: no-repeat;\n background-position-y: center;\n}\n.daracl-form .form-group .help-icon.form-field {\n background-position-x: calc(100% - 15px);\n}\n.daracl-form .form-group .help-icon.daracl-icon {\n display: none;\n position: absolute;\n z-index: 1;\n top: 0px;\n right: 0px;\n height: 100%;\n width: 20px;\n margin-right: 15px;\n}\n.daracl-form .form-group.invalid .form-field {\n border-color: var(--invalid-border-color);\n outline-color: var(--invalid-border-color);\n}\n.daracl-form .form-group.invalid > .df-field-container.required > .df-field .help-icon {\n display: block;\n background-image: url(\"data:image/svg+xml; base64, PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjAiPjxwYXRoIGQ9Im0yNDktMjA3LTQyLTQyIDIzMS0yMzEtMjMxLTIzMSA0Mi00MiAyMzEgMjMxIDIzMS0yMzEgNDIgNDItMjMxIDIzMSAyMzEgMjMxLTQyIDQyLTIzMS0yMzEtMjMxIDIzMVoiIHN0eWxlPSImIzEwOyAgICBmaWxsOiAjZmY3MzczOyYjMTA7Ii8+PC9zdmc+\");\n}\n.daracl-form .form-group.invalid .help-message {\n display: block;\n color: var(--invalid-font-color);\n}\n.daracl-form .form-group.valid > .df-field-container.required > .df-field .help-icon {\n display: block;\n background-image: url(\"data:image/svg+xml; base64, PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHN0eWxlPSImIzEwOyAgICBmaWxsOiAjMTlhOTc0OyYjMTA7Ij48cGF0aCBkPSJNMzc4LTI0NiAxNTQtNDcwbDQzLTQzIDE4MSAxODEgMzg0LTM4NCA0MyA0My00MjcgNDI3WiIvPjwvc3ZnPg==\");\n}\n.daracl-form .form-group .file-label {\n border: 1px solid var(--border-color);\n display: inline;\n width: 100%;\n padding: 3px 15px;\n line-height: 1;\n background-clip: padding-box;\n border-radius: 4px;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n.daracl-form .form-group .file-label:hover {\n background-color: var(--button-bg-hover);\n}\n.daracl-form .df-grid-field {\n margin-right: 10px;\n}\n.daracl-form .df-grid-field .df-grid-btn-area {\n border: 1px solid var(--border-color);\n padding: 3px;\n}\n.daracl-form .df-grid-field .df-grid-container {\n width: 100%;\n height: auto;\n overflow-y: auto;\n border: 1px solid var(--border-color);\n}\n.daracl-form .df-grid-field .df-grid-container .df-btn {\n padding: 3px 5px;\n}\n.daracl-form .df-grid-field .df-grid-container .df-grid {\n width: 100%;\n border-top-width: 0px;\n border-collapse: collapse;\n}\n.daracl-form .df-grid-field .df-grid-container .df-grid > thead th {\n position: sticky;\n top: 0px;\n z-index: 10;\n border-bottom: 1px solid var(--border-color);\n background-color: var(--bg-grid-header);\n text-align: center;\n}\n.daracl-form .df-grid-field .df-grid-container .df-grid .help-message {\n display: none;\n}\n.daracl-form .df-grid-field .df-grid-container .df-grid td,\n.daracl-form .df-grid-field .df-grid-container .df-grid th {\n padding: 3px 5px;\n}\n.daracl-form .df-grid-field .df-grid-container .df-grid .help-icon {\n background-repeat: no-repeat;\n background-position-y: center;\n}\n.daracl-form .df-grid-field .df-grid-container .df-grid .help-icon.form-field {\n background-position-x: calc(100% - 15px);\n}\n.daracl-form .df-grid-field .df-grid-container .df-grid .help-icon.daracl-icon {\n display: none;\n position: absolute;\n z-index: 1;\n top: 0px;\n right: 0px;\n height: 100%;\n width: 20px;\n margin-right: 15px;\n}\n.daracl-form .df-grid-field .df-grid-container .df-grid .grid-column {\n position: relative;\n}\n.daracl-form .df-grid-field .df-grid-container .df-grid .invalid .form-field {\n border-color: var(--invalid-border-color);\n outline-color: var(--invalid-border-color);\n}\n.daracl-form .df-grid-field .df-grid-container .df-grid .invalid > .grid-column.required .df-field .help-icon {\n display: block;\n background-image: url(\"data:image/svg+xml; base64, PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjAiPjxwYXRoIGQ9Im0yNDktMjA3LTQyLTQyIDIzMS0yMzEtMjMxLTIzMSA0Mi00MiAyMzEgMjMxIDIzMS0yMzEgNDIgNDItMjMxIDIzMSAyMzEgMjMxLTQyIDQyLTIzMS0yMzEtMjMxIDIzMVoiIHN0eWxlPSImIzEwOyAgICBmaWxsOiAjZmY3MzczOyYjMTA7Ii8+PC9zdmc+\");\n}\n.daracl-form .df-grid-field .df-grid-container .df-grid .invalid .help-message {\n display: block;\n position: absolute;\n border: 1px solid var(--invalid-border-color);\n border-color: var(--invalid-border-color) transparent transparent transparent;\n top: calc(100% + 6px);\n left: 50%;\n transform: translateX(-50%);\n min-width: 270px;\n padding: 5px 5px;\n border-radius: 0.4rem;\n z-index: 2;\n background-color: var(--invalid-background-color);\n color: var(--invalid-font-color);\n}\n.daracl-form .df-grid-field .df-grid-container .df-grid .invalid .help-message::after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 50%;\n width: 0;\n height: 0;\n border: 7px solid transparent;\n border-bottom-color: var(--invalid-border-color);\n border-top: 0;\n border-left: 0;\n margin-left: -3.5px;\n margin-top: -7px;\n}\n.daracl-form .df-grid-field .df-grid-container .df-grid .valid > .grid-column.required .df-field .help-icon {\n display: block;\n background-image: url(\"data:image/svg+xml; base64, PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHN0eWxlPSImIzEwOyAgICBmaWxsOiAjMTlhOTc0OyYjMTA7Ij48cGF0aCBkPSJNMzc4LTI0NiAxNTQtNDcwbDQzLTQzIDE4MSAxODEgMzg0LTM4NCA0MyA0My00MjcgNDI3WiIvPjwvc3ZnPg==\");\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiRDpcXDAzLm9wZW5zb3VyY2VzXFxkYXJhLWZvcm1cXHN0eWxlIiwic291cmNlcyI6WyJkYXJhY2wuZm9ybS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUEwQkE7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7QUFBQTtFQUVFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7QUFFQTtBQUFBO0FBQUE7RUFHRTs7QUFJQTtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFLRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBRUU7O0FBS047RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7QUFBQTtBQUFBO0VBR0U7RUFDQTs7QUFDQTtBQUFBO0FBQUE7RUFDRTtFQUNBOztBQUlKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTs7QUFFQTtFQU1FOztBQUxBO0VBQ0U7RUFDQTs7QUFNSjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7O0FBS047RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBRUU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7RUFDQTtFQUNBOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBSUo7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTs7QUE5UE47RUFDRTs7QUFDQTtFQUNFOztBQUlKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTs7QUFDQTtFQUNFOztBQXVQRjtFQUNFLFlBNVFFO0VBNlFGO0VBQ0E7RUFDQTtFQUNBLFdBaFJFOztBQTJRSjtFQUNFLFlBNVFFO0VBNlFGO0VBQ0E7RUFDQTtFQUNBLFdBaFJFOztBQTJRSjtFQUNFLFlBNVFFO0VBNlFGO0VBQ0E7RUFDQTtFQUNBLFdBaFJFOztBQTJRSjtFQUNFLFlBNVFFO0VBNlFGO0VBQ0E7RUFDQTtFQUNBLFdBaFJFOztBQTJRSjtFQUNFLFlBNVFFO0VBNlFGO0VBQ0E7RUFDQTtFQUNBLFdBaFJFOztBQTJRSjtFQUNFLFlBNVFFO0VBNlFGO0VBQ0E7RUFDQTtFQUNBLFdBaFJFOztBQTJRSjtFQUNFLFlBNVFFO0VBNlFGO0VBQ0E7RUFDQTtFQUNBLFdBaFJFOztBQTJRSjtFQUNFLFlBNVFFO0VBNlFGO0VBQ0E7RUFDQTtFQUNBLFdBaFJFOztBQTJRSjtFQUNFLFlBNVFFO0VBNlFGO0VBQ0E7RUFDQTtFQUNBLFdBaFJFOztBQTJRSjtFQUNFLFlBNVFFO0VBNlFGO0VBQ0E7RUFDQTtFQUNBLFdBaFJFOztBQTJRSjtFQUNFLFlBNVFFO0VBNlFGO0VBQ0E7RUFDQTtFQUNBLFdBaFJFOztBQTJRSjtFQUNFLFlBNVFFO0VBNlFGO0VBQ0E7RUFDQTtFQUNBLFdBaFJFOztBQW9STjtFQUNFO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7O0FBQ0E7RUFDRTs7QUFHRjtFQUNFOztBQUVGO0VBQ0U7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBTUo7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQUlKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBTUE7RUFDRTs7QUFLTjtFQUNFO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBOztBQUdFO0VBQ0U7O0FBRUY7RUFDRTs7QUFFRjtFQUNFOztBQUlKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0U7RUFDRTtFQUNBOztBQUlKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7O0FBT047RUFDRTs7QUFFQTtFQUNFOztBQUtOO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFFQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTs7QUFJSjtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7O0FBamZKO0VBQ0U7O0FBQ0E7RUFDRTs7QUFJSjtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7O0FBQ0E7RUFDRTs7QUFxZUY7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7O0FBRUE7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBS0Y7RUFDRTtFQUNBOztBQUdGO0VBQ0U7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7O0FBTUE7RUFDRTtFQUNBOztBQUtOO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQUlOO0VBQ0U7O0FBQ0E7RUFDRTtFQUNBOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7QUFHRTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFJSjtFQUNFOztBQUdGO0FBQUE7RUFFRTs7QUFHRjtFQUNFO0VBQ0E7O0FBRUE7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBSUo7RUFDRTs7QUFJQTtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBT0Y7RUFDRTtFQUNBIiwic291cmNlc0NvbnRlbnQiOlsiQHVzZSBcInNhc3M6bGlzdFwiO1xuJHNpemVzOiA4LjMzMzMzMzMzJSwgMTYuNjY2NjY2NjclLCAyNSUsIDMzLjMzMzMzMzMzJSwgNDEuNjY2NjY2NjclLCA1MCUsIDU4LjMzMzMzMzMzJSwgNjYuNjY2NjY2NjclLCA3NSUsIDgzLjMzMzMzMzMzJSwgOTEuNjY2NjY2NjclLCAxMDAlO1xyXG5cclxuQG1peGluIHJvd0ZsZXgoKSB7XHJcbiAgJi50b3Age1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgID4gZGl2IHtcclxuICAgICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmLnJpZ2h0IHtcclxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2UgIWltcG9ydGFudDtcclxuICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbCAhaW1wb3J0YW50O1xyXG4gICAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiByZXZlcnNlICFpbXBvcnRhbnQ7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2UgIWltcG9ydGFudDtcclxuICB9XHJcblxyXG4gICYuYm90dG9tIHtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50O1xyXG4gICAgPiBkaXYge1xyXG4gICAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi5kYXJhY2wtZm9ybSB7XHJcbiAgLS1ib3JkZXItY29sb3I6ICNkZmUxZTU7XHJcbiAgLS1jb2xvci1kYW5nZXI6ICNkOTUzNGY7XHJcbiAgLS1iYWNrZ3JvdW5kLWRhbmdlcjogI2Q5NTM0ZjtcclxuICAtLWZvbnQtY29sb3I6ICM2ODY4Njg7XHJcbiAgLS1mb250LWhvdmVyLWNvbG9yOiAjM2EzZDQxO1xyXG4gIC0taW52YWxpZC1mb250LWNvbG9yOiAjZmY0MTM2O1xyXG4gIC0taW52YWxpZC1ib3JkZXItY29sb3I6ICNmZmI2YjQ7XHJcbiAgLS1pbnZhbGlkLWJhY2tncm91bmQtY29sb3I6ICNmZGQ7XHJcbiAgLS1idXR0b24tYmc6ICNmNmY2ZjY7XHJcbiAgLS1idXR0b24tYmctaG92ZXI6ICNlYmViZWI7XHJcbiAgLS10YWItYmc6ICNmNmY2ZjY7XHJcbiAgLS10YWItYmctaG92ZXI6ICNlYmViZWI7XHJcbiAgLS10b29sdGlwLWJhY2tncm91bmQ6ICMzZTNlM2U7XHJcbiAgLS10b29sdGlwLWNvbG9yOiAjZmZmO1xyXG4gIC0tZmllbGQtbWFyZ2luLXRvcDogMTBweDtcclxuICAtLWlucHV0LWJnOiAjZmZmO1xyXG4gIC0taW5wdXQtY29sb3I6ICMyMTI1Mjk7XHJcbiAgLS1pbnB1dC1kaXNhYmxlZC1iZzogI2ViZWJlYjtcclxuICAtLWJnLWdyaWQtaGVhZGVyOiAjZjFmMWYxO1xyXG59XHJcblxyXG5ib2R5LmRhcmsgLmRhcmFjbC1mb3JtLFxyXG4uZGFyYWNsLWZvcm0uZGFyayB7XHJcbiAgLS1ib3JkZXItY29sb3I6ICM0MTQ0NGM7XHJcbiAgLS1jb2xvci1kYW5nZXI6ICNkOTUzNGY7XHJcbiAgLS1iYWNrZ3JvdW5kLWRhbmdlcjogI2Q5NTM0ZjtcclxuICAtLWZvbnQtY29sb3I6ICNiOWJkYzE7XHJcbiAgLS1mb250LWhvdmVyLWNvbG9yOiAjZjVmM2YzO1xyXG4gIC0taW52YWxpZC1mb250LWNvbG9yOiAjZmY0MTM2O1xyXG4gIC0taW52YWxpZC1ib3JkZXItY29sb3I6ICNmZmI2YjQ7XHJcbiAgLS1pbnZhbGlkLWJhY2tncm91bmQtY29sb3I6ICNmZGQ7XHJcbiAgLS1idXR0b24tYmc6ICM0MzVlYmU7XHJcbiAgLS1idXR0b24tYmctaG92ZXI6ICMzOTUwYTI7XHJcbiAgLS10YWItYmc6ICMyMzQxOGY7XHJcbiAgLS10YWItYmctaG92ZXI6ICM1MTZkYjE7XHJcbiAgLS10b29sdGlwLWJhY2tncm91bmQ6ICMzZTNlM2U7XHJcbiAgLS10b29sdGlwLWNvbG9yOiAjZmZmO1xyXG4gIC0tZmllbGQtbWFyZ2luLXRvcDogMTBweDtcclxuICAtLWlucHV0LWJnOiB0cmFuc3BhcmVudDtcclxuICAtLWlucHV0LWNvbG9yOiAjYzZjZGRiO1xyXG4gIC0taW5wdXQtZGlzYWJsZWQtYmc6ICM4Nzg3ODc7XHJcbiAgLS1iZy1ncmlkLWhlYWRlcjogIzg3ODc4NztcclxufVxyXG5cclxuLmRhcmFjbC1mb3JtIHtcclxuICBwYWRkaW5nOiAwcHg7XHJcbiAgbWFyZ2luLXRvcDogMTBweDtcclxuICBjb2xvcjogdmFyKC0tZm9udC1jb2xvcik7XHJcblxyXG4gICosXHJcbiAgOjphZnRlcixcclxuICA6OmJlZm9yZSB7XHJcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gIH1cclxuXHJcbiAgLnR4dCB7XHJcbiAgICAmLWxlZnQge1xyXG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xyXG4gICAgfVxyXG5cclxuICAgICYtY2VudGVyIHtcclxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgfVxyXG5cclxuICAgICYtcmlnaHQge1xyXG4gICAgICB0ZXh0LWFsaWduOiByaWdodDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICZbZGF0YS1kZi1tb2RlPVwidmlld1wiXSB7XHJcbiAgICAuZm9ybS1maWVsZCB7XHJcbiAgICAgIGJvcmRlci13aWR0aDogMHB4O1xyXG4gICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgICBvdXRsaW5lOiBpbml0aWFsO1xyXG5cclxuICAgICAgJjpmb2N1cy12aXNpYmxlLFxyXG4gICAgICAmOmZvY3VzIHtcclxuICAgICAgICBib3JkZXItd2lkdGg6IDBweDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmRmLWhpZGRlbiB7XHJcbiAgICBtYXgtaGVpZ2h0OiAwdmggIWltcG9ydGFudDtcclxuICAgIHdpZHRoOiAwcHg7XHJcbiAgICB2aXNpYmlsaXR5OiBjb2xsYXBzZTtcclxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxuICAgIHBhZGRpbmc6IDBweCAhaW1wb3J0YW50O1xyXG4gICAgbWFyZ2luOiAwcHggIWltcG9ydGFudDtcclxuICB9XHJcblxyXG4gIGlucHV0LFxyXG4gIHNlbGVjdCxcclxuICB0ZXh0YXJlYSB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICAgIGNvbG9yOiB2YXIoLS1mb250LWNvbG9yKTtcclxuICAgICZbZGlzYWJsZWRdIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taW5wdXQtZGlzYWJsZWQtYmcpO1xyXG4gICAgICBvcGFjaXR5OiAwLjg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuZGYtbGFiZWwge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcclxuICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XHJcbiAgICBwYWRkaW5nOiA1cHggMTVweCAwcHggMHB4O1xyXG4gICAgb3ZlcmZsb3c6IGluaXRpYWw7XHJcbiAgICAvLyDtmZXsnbjtlaDqsoMuXHJcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XHJcbiAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XHJcblxyXG4gICAgLnJlcXVpcmVkIHtcclxuICAgICAgJjo6YWZ0ZXIge1xyXG4gICAgICAgIGNvbnRlbnQ6IFwiKlwiO1xyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1kYW5nZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC5kZi10b29sdGlwIHtcclxuICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcclxuICAgICAgY29sb3I6IHZhcigtLXRvb2x0aXAtY29sb3IpO1xyXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10b29sdGlwLWJhY2tncm91bmQpO1xyXG4gICAgICB3aWR0aDogMTZweDtcclxuICAgICAgaGVpZ2h0OiAxNnB4O1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XHJcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgbGluZS1oZWlnaHQ6IDE2cHg7XHJcbiAgICAgIG1hcmdpbjogMCA1cHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcclxuICAgICAgY3Vyc29yOiBoZWxwO1xyXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHJcbiAgICAgIC50b29sdGlwIHtcclxuICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICAgIHRleHQtYWxpZ246IGluaXRpYWw7XHJcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdG9vbHRpcC1iYWNrZ3JvdW5kKTtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7XHJcbiAgICAgICAgY29sb3I6IHZhcigtLXRvb2x0aXAtY29sb3IpO1xyXG4gICAgICAgIHBhZGRpbmc6IDEwcHggNXB4O1xyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICB6LWluZGV4OiAyO1xyXG4gICAgICAgIGxlZnQ6IC0xMHB4O1xyXG4gICAgICAgIG1pbi13aWR0aDogbWF4LWNvbnRlbnQ7XHJcbiAgICAgICAgdGV4dC1zaGFkb3c6IG5vbmU7XHJcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmOmhvdmVyIC50b29sdGlwIHtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmZvcm0tZmllbGQge1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBwYWRkaW5nOiAwLjM3NXJlbSAwLjc1cmVtO1xyXG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XHJcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQ7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pbnB1dC1iZyk7XHJcbiAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xyXG4gICAgY29sb3I6IHZhcigtLWlucHV0LWNvbG9yKTtcclxuXHJcbiAgICAmW3R5cGU9XCJyYWRpb1wiXSxcclxuICAgICZbdHlwZT1cImNoZWNrYm94XCJdIHtcclxuICAgICAgd2lkdGg6IDE0cHg7XHJcbiAgICAgIGRpc3BsYXk6IGlubGluZTtcclxuICAgICAgbWluLWhlaWdodDogMHB4O1xyXG4gICAgICBwYWRkaW5nOiAwcHg7XHJcbiAgICAgIG1hcmdpbjogMHB4O1xyXG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgfVxyXG5cclxuICAgICYuZHJvcGRvd24ge1xyXG4gICAgICBhcHBlYXJhbmNlOiBub25lO1xyXG4gICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XHJcbiAgICAgIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcclxuICAgIH1cclxuXHJcbiAgICAmLnRleHRhcmVhIHtcclxuICAgICAgcGFkZGluZy1yaWdodDogMHB4O1xyXG4gICAgfVxyXG5cclxuICAgICZbdHlwZT1cIm51bWJlclwiXSB7XHJcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDNweDtcclxuICAgIH1cclxuXHJcbiAgICAmLmZpbGUge1xyXG4gICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgfVxyXG5cclxuICAgICYucmFuZ2Uge1xyXG4gICAgICBwYWRkaW5nOiAwcHg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuZGYtcm93IHtcclxuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xyXG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgLW1zLWZsZXg6IDAgMSBhdXRvO1xyXG4gICAgLXdlYmtpdC1ib3gtZmxleDogMDtcclxuICAgIGZsZXg6IDAgMSBhdXRvO1xyXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XHJcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICAtbXMtZmxleC13cmFwOiB3cmFwO1xyXG4gICAgZmxleC13cmFwOiB3cmFwO1xyXG5cclxuICAgICYudmVydGljYWwge1xyXG4gICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIH1cclxuXHJcbiAgICAmLmhvcml6b250YWwge1xyXG4gICAgICAtd2Via2l0LWJveC1mbGV4OiAwO1xyXG4gICAgICAtbXMtZmxleDogMCAwIGF1dG87XHJcbiAgICAgIGZsZXg6IDAgMCBhdXRvO1xyXG4gICAgICB3aWR0aDogYXV0bztcclxuICAgICAgbWF4LXdpZHRoOiBub25lO1xyXG5cclxuICAgICAgPiAuZm9ybS1ncm91cCA+IC5lbXB0eSB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQGluY2x1ZGUgcm93RmxleCgpO1xyXG4gIH1cclxuXHJcbiAgQGVhY2ggJHNpemUgaW4gJHNpemVzIHtcclxuICAgICRpOiBsaXN0LmluZGV4KCRzaXplcywgJHNpemUpO1xyXG4gICAgJGNsYXNzTmFtZTogXCIuY29sLXhzLSN7JGl9XCI7XHJcbiAgICAjeyRjbGFzc05hbWV9IHtcclxuICAgICAgZmxleC1iYXNpczogJHNpemU7XHJcbiAgICAgIC13ZWJraXQtYm94LWZsZXg6IDA7XHJcbiAgICAgIC1tcy1mbGV4OiAwIDAgJHNpemU7XHJcbiAgICAgIGZsZXg6IDAgMCAkc2l6ZTtcclxuICAgICAgbWF4LXdpZHRoOiAkc2l6ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5hbGlnbi1pdGVtcy1jZW50ZXIge1xyXG4gICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50O1xyXG4gICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50O1xyXG4gIH1cclxuXHJcbiAgLmNvbC14cyB7XHJcbiAgICAtd2Via2l0LWZsZXgtZ3JvdzogMTtcclxuICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAxO1xyXG4gICAgLXdlYmtpdC1ib3gtZmxleDogMTtcclxuICAgIGZsZXgtZ3JvdzogMTtcclxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAwO1xyXG4gICAgZmxleC1iYXNpczogMDtcclxuICAgIG1heC13aWR0aDogMTAwJTtcclxuICB9XHJcblxyXG4gIC5jb2wtYXV0byB7XHJcbiAgICAtd2Via2l0LWJveC1mbGV4OiAwO1xyXG4gICAgLW1zLWZsZXg6IDAgMCBhdXRvO1xyXG4gICAgZmxleDogMCAwIGF1dG87XHJcbiAgICB3aWR0aDogYXV0bztcclxuICAgIG1heC13aWR0aDogbm9uZTtcclxuICB9XHJcblxyXG4gIC5jb2wtZml4IHtcclxuICAgIGZsZXg6IG5vbmU7XHJcbiAgfVxyXG5cclxuICAuY29sLWZ1bGwge1xyXG4gICAgZmxleDogMTtcclxuICAgIG92ZXJmbG93OiBhdXRvO1xyXG4gIH1cclxuXHJcbiAgLmRmLWZpZWxkLWNvbnRhaW5lciB7XHJcbiAgICBvdmVyZmxvdzogaW5pdGlhbDtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgID4gLmRmLXJvdyB7XHJcbiAgICAgIG1hcmdpbi10b3A6IC0xMHB4O1xyXG4gICAgfVxyXG5cclxuICAgID4gZGl2ICsgLmRmLXJvdyB7XHJcbiAgICAgIG1hcmdpbi10b3A6IDBweDtcclxuICAgIH1cclxuICAgIC5kZi1maWVsZCB7XHJcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xyXG5cclxuICAgICAgLnJhbmdlLW51bSB7XHJcbiAgICAgICAgY2xlYXI6IGJvdGg7XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLmZpbGUtd3JhcHBlciB7XHJcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTtcclxuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgcGFkZGluZzogMC4zNzVyZW0gMC43NXJlbTtcclxuICAgICAgICBmb250LXdlaWdodDogNDAwO1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IDAuMTVzIGVhc2UtaW4tb3V0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuZGFyYWNsLWZpbGUtbGlzdCB7XHJcbiAgICAuZmlsZS1pY29uIHtcclxuICAgICAgd2lkdGg6IDIwcHg7XHJcbiAgICAgIGhlaWdodDogMjBweDtcclxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcblxyXG4gICAgICAmOmhvdmVyIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1idXR0b24tYmctaG92ZXIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmLmRvd25sb2FkIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lJR1Z1WVdKc1pTMWlZV05yWjNKdmRXNWtQU0p1WlhjZ01DQXdJREkwSURJMElpQm9aV2xuYUhROUlqSXdjSGdpSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJZ2QybGtkR2c5SWpJd2NIZ2lJR1pwYkd3OUlpTXdNREF3TURBaVBqeG5Qanh5WldOMElHWnBiR3c5SW01dmJtVWlJR2hsYVdkb2REMGlNalFpSUhkcFpIUm9QU0l5TkNJdlBqd3ZaejQ4Wno0OGNHRjBhQ0JrUFNKTk1UZ3NNVFYyTTBnMmRpMHpTRFIyTTJNd0xERXVNU3d3TGprc01pd3lMREpvTVRKak1TNHhMREFzTWkwd0xqa3NNaTB5ZGkwelNERTRlaUJOTVRjc01URnNMVEV1TkRFdE1TNDBNVXd4TXl3eE1pNHhOMVkwYUMweWRqZ3VNVGRNT0M0ME1TdzVMalU1VERjc01URnNOU3cxSUV3eE55d3hNWG9pTHo0OEwyYytQQzl6ZG1jK1wiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgJi5yZW1vdmUge1xyXG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlHaGxhV2RvZEQwaU1qQndlQ0lnZG1sbGQwSnZlRDBpTUNBd0lESTBJREkwSWlCM2FXUjBhRDBpTWpCd2VDSWdabWxzYkQwaUl6QXdNREF3TUNJK1BIQmhkR2dnWkQwaVRUQWdNR2d5TkhZeU5FZ3dWakI2SWlCbWFXeHNQU0p1YjI1bElpOCtQSEJoZEdnZ1pEMGlUVEUySURsMk1UQklPRlk1YURodExURXVOUzAyYUMwMWJDMHhJREZJTlhZeWFERTBWalJvTFRNdU5Xd3RNUzB4ZWsweE9DQTNTRFoyTVRKak1DQXhMakV1T1NBeUlESWdNbWc0WXpFdU1TQXdJREl0TGprZ01pMHlWamQ2SWk4K1BDOXpkbWMrXCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLmZpbGUtbmFtZSB7XHJcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICB3b3JkLXdyYXA6IG5vcm1hbDtcclxuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgICB3aWR0aDogY2FsYygxMDAlIC0gNTVweCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuZmllbGQtZ3JvdXAge1xyXG4gICAgLmZpZWxkLnZlcnRpY2FsIHtcclxuICAgICAgPiAqIHtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLnRhYi1oZWFkZXIge1xyXG4gICAgbGlzdC1zdHlsZTogbm9uZTtcclxuICAgIG1hcmdpbjogMHB4O1xyXG4gICAgcGFkZGluZzogMHB4O1xyXG5cclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBsaW5lLWhlaWdodDogMS4zO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTtcclxuXHJcbiAgICAmLnRhYi1hbCB7XHJcbiAgICAgICYtbGVmdCB7XHJcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBsZWZ0O1xyXG4gICAgICB9XHJcbiAgICAgICYtcmlnaHQge1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogcmlnaHQ7XHJcbiAgICAgIH1cclxuICAgICAgJi1jZW50ZXIge1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgPiAudGFiLWl0ZW0ge1xyXG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xyXG4gICAgICBmbG9hdDogbGVmdDtcclxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICB0b3A6IDA7XHJcbiAgICAgIG1hcmdpbjogMXB4IDAuNGVtIDAgMDtcclxuICAgICAgcGFkZGluZzogMDtcclxuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuXHJcbiAgICAgICYuYWN0aXZlIHtcclxuICAgICAgICBhIHtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS1mb250LWhvdmVyLWNvbG9yKTtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRhYi1iZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBhIHtcclxuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBjYWxjKDAuNDVyZW0gLSAxcHgpO1xyXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiBjYWxjKDAuNDVyZW0gLSAxcHgpO1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xyXG4gICAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XHJcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICAgICAgcGFkZGluZzogMC41ZW0gMWVtO1xyXG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgICAgICBjb2xvcjogdmFyKC0tZm9udC1jb2xvcik7XHJcbiAgICAgICAgaGVpZ2h0OiAzMHB4O1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxNXB4O1xyXG5cclxuICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRhYi1iZy1ob3Zlcik7XHJcbiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpO1xyXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5kZi10YWItYm9keSB7XHJcbiAgICAudGFiLXBhbmVsIHtcclxuICAgICAgZGlzcGxheTogbm9uZTtcclxuXHJcbiAgICAgICYuYWN0aXZlIHtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmRmLWJ0biB7XHJcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IGNhbGMoMC40NXJlbSAtIDFweCk7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYnV0dG9uLWJnKTtcclxuXHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XHJcblxyXG4gICAgJjpob3ZlciB7XHJcbiAgICAgIGNvbG9yOiB2YXIoLS1mb250LWhvdmVyLWNvbG9yKTtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYnV0dG9uLWJnLWhvdmVyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5kZi1pY29uIHtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIHdpZHRoOiAyMXB4OyAvKiDslYTsnbTsvZjsnZgg64SI67mEIOyEpOyglSAqL1xyXG4gICAgaGVpZ2h0OiAyMXB4OyAvKiDslYTsnbTsvZjsnZgg64aS7J20IOyEpOyglSAqL1xyXG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuICB9XHJcblxyXG4gIC5kZi1hZGQtaWNvbiB7XHJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgaGVpZ2h0PScyMHB4JyB2aWV3Qm94PScwIC05NjAgOTYwIDk2MCcgd2lkdGg9JzIwcHgnIGZpbGw9JyUyMzVmNjM2OCclM0UlM0NwYXRoIGQ9J000MzEtNDMxSDIyMC43OHYtOThINDMxdi0yMTAuMjJoOThWLTUyOWgyMTAuMjJ2OThINTI5djIxMC4yMmgtOThWLTQzMVonLyUzRSUzQy9zdmclM0VcIik7XHJcbiAgfVxyXG5cclxuICAuZGYtcmVtb3ZlLWljb24ge1xyXG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGhlaWdodD0nMjBweCcgdmlld0JveD0nMCAtOTYwIDk2MCA5NjAnIHdpZHRoPScyMHB4JyBmaWxsPSclMjM1ZjYzNjgnJTNFJTNDcGF0aCBkPSdNMjkxLTIyMS45MSAyMjEuOTEtMjkxbDE4OS0xODktMTg5LTE4OUwyOTEtNzM4LjA5bDE4OSAxODkgMTg5LTE4OUw3MzguMDktNjY5bC0xODkgMTg5IDE4OSAxODlMNjY5LTIyMS45MWwtMTg5LTE4OS0xODkgMTg5WicvJTNFJTNDL3N2ZyUzRVwiKTtcclxuICB9XHJcblxyXG4gIC5mb3JtLWdyb3VwIHtcclxuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xyXG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XHJcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICAtbXMtZmxleC13cmFwOiB3cmFwO1xyXG4gICAgZmxleC13cmFwOiB3cmFwO1xyXG4gICAgbWFyZ2luLXRvcDogdmFyKC0tZmllbGQtbWFyZ2luLXRvcCk7XHJcbiAgICBtYXJnaW4tYm90dG9tOiAwcHg7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IDBweCAhaW1wb3J0YW50O1xyXG4gICAgbWFyZ2luLWxlZnQ6IDBweCAhaW1wb3J0YW50O1xyXG5cclxuICAgICY6bGFzdC1jaGlsZCB7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDBweDtcclxuICAgIH1cclxuXHJcbiAgICBAaW5jbHVkZSByb3dGbGV4KCk7XHJcblxyXG4gICAgLmhlbHAtbWVzc2FnZSB7XHJcbiAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICB9XHJcblxyXG4gICAgLmhlbHAtaWNvbiB7XHJcbiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XHJcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogY2VudGVyO1xyXG5cclxuICAgICAgJi5mb3JtLWZpZWxkIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IGNhbGMoMTAwJSAtIDE1cHgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmLmRhcmFjbC1pY29uIHtcclxuICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICB6LWluZGV4OiAxO1xyXG4gICAgICAgIHRvcDogMHB4O1xyXG4gICAgICAgIHJpZ2h0OiAwcHg7XHJcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgIHdpZHRoOiAyMHB4O1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMTVweDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICYuaW52YWxpZCB7XHJcbiAgICAgIC5mb3JtLWZpZWxkIHtcclxuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWludmFsaWQtYm9yZGVyLWNvbG9yKTtcclxuICAgICAgICBvdXRsaW5lLWNvbG9yOiB2YXIoLS1pbnZhbGlkLWJvcmRlci1jb2xvcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgID4gLmRmLWZpZWxkLWNvbnRhaW5lci5yZXF1aXJlZCA+IC5kZi1maWVsZCAuaGVscC1pY29uIHtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7IGJhc2U2NCwgUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlHaGxhV2RvZEQwaU1qQWlJSFpwWlhkQ2IzZzlJakFnTFRrMk1DQTVOakFnT1RZd0lpQjNhV1IwYUQwaU1qQWlQanh3WVhSb0lHUTlJbTB5TkRrdE1qQTNMVFF5TFRReUlESXpNUzB5TXpFdE1qTXhMVEl6TVNBME1pMDBNaUF5TXpFZ01qTXhJREl6TVMweU16RWdORElnTkRJdE1qTXhJREl6TVNBeU16RWdNak14TFRReUlEUXlMVEl6TVMweU16RXRNak14SURJek1Wb2lJSE4wZVd4bFBTSW1JekV3T3lBZ0lDQm1hV3hzT2lBalptWTNNemN6T3lZak1UQTdJaTgrUEM5emRtYytcIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5oZWxwLW1lc3NhZ2Uge1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgIGNvbG9yOiB2YXIoLS1pbnZhbGlkLWZvbnQtY29sb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJi52YWxpZCB7XHJcbiAgICAgID4gLmRmLWZpZWxkLWNvbnRhaW5lci5yZXF1aXJlZCB7XHJcbiAgICAgICAgPiAuZGYtZmllbGQgLmhlbHAtaWNvbiB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDsgYmFzZTY0LCBQSE4yWnlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpSUhacFpYZENiM2c5SWpBZ0xUazJNQ0E1TmpBZ09UWXdJaUIzYVdSMGFEMGlNakFpSUdobGFXZG9kRDBpTWpBaUlITjBlV3hsUFNJbUl6RXdPeUFnSUNCbWFXeHNPaUFqTVRsaE9UYzBPeVlqTVRBN0lqNDhjR0YwYUNCa1BTSk5NemM0TFRJME5pQXhOVFF0TkRjd2JEUXpMVFF6SURFNE1TQXhPREVnTXpnMExUTTROQ0EwTXlBME15MDBNamNnTkRJM1dpSXZQand2YzNablBnPT1cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLmZpbGUtbGFiZWwge1xyXG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpO1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmU7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBwYWRkaW5nOiAzcHggMTVweDtcclxuICAgICAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IDAuMTVzIGVhc2UtaW4tb3V0O1xyXG5cclxuICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYnV0dG9uLWJnLWhvdmVyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAuZGYtZ3JpZC1maWVsZCB7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XHJcbiAgICAuZGYtZ3JpZC1idG4tYXJlYSB7XHJcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7XHJcbiAgICAgIHBhZGRpbmc6IDNweDtcclxuICAgIH1cclxuXHJcbiAgICAuZGYtZ3JpZC1jb250YWluZXIge1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgaGVpZ2h0OiBhdXRvO1xyXG4gICAgICBvdmVyZmxvdy15OiBhdXRvO1xyXG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpO1xyXG5cclxuICAgICAgLmRmLWJ0biB7XHJcbiAgICAgICAgcGFkZGluZzogM3B4IDVweDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLmRmLWdyaWQge1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIGJvcmRlci10b3Atd2lkdGg6IDBweDtcclxuICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xyXG5cclxuICAgICAgICA+IHRoZWFkIHtcclxuICAgICAgICAgIHRoIHtcclxuICAgICAgICAgICAgcG9zaXRpb246IHN0aWNreTtcclxuICAgICAgICAgICAgdG9wOiAwcHg7XHJcbiAgICAgICAgICAgIHotaW5kZXg6IDEwO1xyXG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmctZ3JpZC1oZWFkZXIpO1xyXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuaGVscC1tZXNzYWdlIHtcclxuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0ZCxcclxuICAgICAgICB0aCB7XHJcbiAgICAgICAgICBwYWRkaW5nOiAzcHggNXB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmhlbHAtaWNvbiB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiBjZW50ZXI7XHJcblxyXG4gICAgICAgICAgJi5mb3JtLWZpZWxkIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbi14OiBjYWxjKDEwMCUgLSAxNXB4KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAmLmRhcmFjbC1pY29uIHtcclxuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICB6LWluZGV4OiAxO1xyXG4gICAgICAgICAgICB0b3A6IDBweDtcclxuICAgICAgICAgICAgcmlnaHQ6IDBweDtcclxuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgICAgICB3aWR0aDogMjBweDtcclxuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmdyaWQtY29sdW1uIHtcclxuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5pbnZhbGlkIHtcclxuICAgICAgICAgIC5mb3JtLWZpZWxkIHtcclxuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pbnZhbGlkLWJvcmRlci1jb2xvcik7XHJcbiAgICAgICAgICAgIG91dGxpbmUtY29sb3I6IHZhcigtLWludmFsaWQtYm9yZGVyLWNvbG9yKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICA+IC5ncmlkLWNvbHVtbi5yZXF1aXJlZCAuZGYtZmllbGQgLmhlbHAtaWNvbiB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7IGJhc2U2NCwgUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlHaGxhV2RvZEQwaU1qQWlJSFpwWlhkQ2IzZzlJakFnTFRrMk1DQTVOakFnT1RZd0lpQjNhV1IwYUQwaU1qQWlQanh3WVhSb0lHUTlJbTB5TkRrdE1qQTNMVFF5TFRReUlESXpNUzB5TXpFdE1qTXhMVEl6TVNBME1pMDBNaUF5TXpFZ01qTXhJREl6TVMweU16RWdORElnTkRJdE1qTXhJREl6TVNBeU16RWdNak14TFRReUlEUXlMVEl6TVMweU16RXRNak14SURJek1Wb2lJSE4wZVd4bFBTSW1JekV3T3lBZ0lDQm1hV3hzT2lBalptWTNNemN6T3lZak1UQTdJaTgrUEM5emRtYytcIik7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLmhlbHAtbWVzc2FnZSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWludmFsaWQtYm9yZGVyLWNvbG9yKTtcclxuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pbnZhbGlkLWJvcmRlci1jb2xvcikgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgICAgIHRvcDogY2FsYygxMDAlICsgNnB4KTtcclxuICAgICAgICAgICAgbGVmdDogNTAlO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XHJcbiAgICAgICAgICAgIG1pbi13aWR0aDogMjcwcHg7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDVweCA1cHg7XHJcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNHJlbTtcclxuICAgICAgICAgICAgei1pbmRleDogMjtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taW52YWxpZC1iYWNrZ3JvdW5kLWNvbG9yKTtcclxuICAgICAgICAgICAgY29sb3I6IHZhcigtLWludmFsaWQtZm9udC1jb2xvcik7XHJcbiAgICAgICAgICAgICY6OmFmdGVyIHtcclxuICAgICAgICAgICAgICBjb250ZW50OiBcIlwiO1xyXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICB0b3A6IDA7XHJcbiAgICAgICAgICAgICAgbGVmdDogNTAlO1xyXG4gICAgICAgICAgICAgIHdpZHRoOiAwO1xyXG4gICAgICAgICAgICAgIGhlaWdodDogMDtcclxuICAgICAgICAgICAgICBib3JkZXI6IDdweCBzb2xpZCB0cmFuc3BhcmVudDtcclxuICAgICAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiB2YXIoLS1pbnZhbGlkLWJvcmRlci1jb2xvcik7XHJcbiAgICAgICAgICAgICAgYm9yZGVyLXRvcDogMDtcclxuICAgICAgICAgICAgICBib3JkZXItbGVmdDogMDtcclxuICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogLTMuNXB4O1xyXG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6IC03cHg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC52YWxpZCB7XHJcbiAgICAgICAgICA+IC5ncmlkLWNvbHVtbi5yZXF1aXJlZCB7XHJcbiAgICAgICAgICAgIC5kZi1maWVsZCAuaGVscC1pY29uIHtcclxuICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7IGJhc2U2NCwgUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIWnBaWGRDYjNnOUlqQWdMVGsyTUNBNU5qQWdPVFl3SWlCM2FXUjBhRDBpTWpBaUlHaGxhV2RvZEQwaU1qQWlJSE4wZVd4bFBTSW1JekV3T3lBZ0lDQm1hV3hzT2lBak1UbGhPVGMwT3lZak1UQTdJajQ4Y0dGMGFDQmtQU0pOTXpjNExUSTBOaUF4TlRRdE5EY3diRFF6TFRReklERTRNU0F4T0RFZ016ZzBMVE00TkNBME15QTBNeTAwTWpjZ05ESTNXaUl2UGp3dmMzWm5QZz09XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ== */", "import DaraForm from \"./DaraForm\";\r\n\r\nimport \"../style/daracl.form.scss\";\r\n\r\nexport = DaraForm;\r\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;AAiKO,SAAS,cAAc,KAAU;AAEtC,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,WAAO;AAAA,EACT;AAGA,MAAI,QAAQ;AACZ,SAAO,OAAO,eAAe,KAAK,MAAM,MAAM;AAC5C,YAAQ,OAAO,eAAe,KAAK;AAAA,EACrC;AAGA,SAAO,OAAO,eAAe,GAAG,MAAM;AACxC;AAEA,SAAS,SAAS,OAAY;AAC5B,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,OAAO,OAAY;AAC1B,SAAO,iBAAiB,QAAQ,CAAC,MAAM,MAAM,QAAQ,CAAC;AACxD;AAoCA,SAAS,UAAU,KAAU,KAAe;AAC1C,MAAI,SAAS,GAAG,GAAG;AACjB,WAAO,gBAAgB,KAAK,GAAG;AAAA,EACjC;AAEA,MAAI,QAAQ,GAAG,GAAG;AAChB,WAAO,eAAe,KAAK,GAAG;AAAA,EAChC;AAEA,MAAI,OAAO,GAAG,GAAG;AACf,WAAO,IAAI,IAAI,YAAY,GAAG;AAAA,EAChC;AACA,SAAO;AACT;AAGA,SAAS,gBAAgB,KAAU,KAAkB;AACnD,MAAI,WAAW,GAAG,GAAG;AACnB,WAAO;AAAA,EACT;AAEA,aAAW,OAAO,OAAO,KAAK,GAAG,GAAG;AAClC,UAAM,MAAO,IAAY,GAAG;AAE5B,QAAI,YAAY,GAAG,GAAG;AACpB;AAAA,IACF;AAEA,QAAI,QAAQ,MAAM;AAChB,UAAI,GAAG,IAAI;AAAA,IACb,WAAW,WAAW,GAAG,GAAG;AAC1B,UAAI,GAAG,IAAI;AAAA,IACb,WAAW,QAAQ,IAAI,GAAG,CAAC,GAAG;AAC5B,UAAI,GAAG,IAAI,UAAU,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG;AAAA,IAClD,WAAW,CAAC,SAAS,GAAG,GAAG;AACzB,UAAI,GAAG,IAAI;AAAA,IACb,OAAO;AACL,gBAAU,IAAI,GAAG,GAAG,GAAG;AAAA,IACzB;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,eAAe,KAAU,KAAY;AAC5C,QAAM,QAAQ,cAAc,GAAG;AAE/B,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,GAAG;AACtC,UAAM,MAAM,IAAI,CAAC;AACjB,QAAI;AAEJ,QAAI,OAAO,MAAM;AACf,eAAS;AAAA,IACX,OAAO;AACL,eAAS,UAAU,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG;AAAA,IAChD;AAEA,QAAI,OAAO;AACT,MAAC,IAAY,CAAC,IAAI;AAAA,IACpB,OAAO;AACL,UAAI,KAAK,MAAM;AAAA,IACjB;AAAA,EACF;AACA,SAAO;AACT;AA1RA,IAEM,WAQO,YAUA,YAqBA,SASA,aAIA,YAIA,UAGA,UAQA,SAUA,SAQA,WASA,YAGA,iBAaA,kBAUA,iBAeA,aAWA,eAOA,mBAwCA;AAnMb;AAAA;AAAA;AAEA,IAAM,YAAY;AAAA,MAChB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AAEO,IAAM,aAAa,CAAC,cAA8B;AACvD,UAAI,aAAa;AACjB,UAAI,YAAY;AACd,eAAO,KAAK,SAAS,EAAE,QAAQ,CAAC,QAAQ;AACtC,uBAAa,WAAW,WAAW,KAAK,UAAU,GAAG,CAAC;AAAA,QACxD,CAAC;AAAA,MACH;AACA,aAAO;AAAA,IACT;AAEO,IAAM,aAAa,CAAC,KAAU,QAAyB;AAC5D,aAAO,IAAI,eAAe,GAAG;AAAA,IAC/B;AAmBO,IAAM,UAAU,CAAC,UAAwB;AAC9C,UAAI,UAAU;AAAM,eAAO;AAC3B,UAAI,UAAU;AAAI,eAAO;AACzB,UAAI,OAAO,UAAU;AAAa,eAAO;AACzC,UAAI,OAAO,UAAU,aAAa,UAAU,MAAM,MAAM,QAAQ,OAAO,EAAE,MAAM;AAAK,eAAO;AAE3F,aAAO;AAAA,IACT;AAEO,IAAM,cAAc,CAAC,UAAmC;AAC7D,aAAO,OAAO,UAAU;AAAA,IAC1B;AAEO,IAAM,aAAa,CAAC,UAAwB;AACjD,aAAO,OAAO,UAAU;AAAA,IAC1B;AAEO,IAAM,WAAW,CAAC,UAAgC;AACvD,aAAO,OAAO,UAAU;AAAA,IAC1B;AACO,IAAM,WAAW,CAAC,UAAgC;AACvD,UAAI,QAAQ,KAAK,GAAG;AAClB,eAAO;AAAA,MACT;AACA,cAAQ,CAAC;AACT,aAAO,CAAC,MAAM,KAAK;AAAA,IACrB;AAEO,IAAM,UAAU,CAAC,UAAoC;AAC1D,aAAO,MAAM,QAAQ,KAAK;AAAA,IAC5B;AAQO,IAAM,UAAU,CAAC,UAAwB,YAAY,KAAK,KAAK,SAAS;AAQxE,IAAM,YAAY,CAAC,UAA8B;AACtD,aAAO,SAAS,MAAM,eAAe;AAAA,IACvC;AAOO,IAAM,aAAa,CAAC,UAA8B;AACvD,aAAO,SAAS,MAAM,eAAe;AAAA,IACvC;AACO,IAAM,kBAAkB,CAAC,UAAgC;AAC9D,YAAM,WAAW,gBAAgB,KAAK;AAEtC,YAAM,QAAQ,WAAW,MAAM,KAAK;AACpC,aAAO;AAAA,IACT;AAQO,IAAM,mBAAmB,CAAC,UAA8B;AAC7D,aAAO,WAAW,MAAM,OAAO,KAAK,UAAU,MAAM,OAAO;AAAA,IAC7D;AAQO,IAAM,kBAAkB,CAAC,UAA6B;AAC3D,UAAI,YAAY,MAAM,QAAQ,GAAG;AAC/B,YAAI,aAAa,MAAM;AACvB,YAAI,YAAY;AACd,iBAAO,KAAK,SAAS,EAAE,QAAQ,CAAC,QAAQ;AACtC,yBAAa,WAAW,WAAW,KAAK,GAAG;AAAA,UAC7C,CAAC;AAAA,QACH;AAEA,eAAO,QAAQ;AAAA,MACjB;AAEA,aAAO,MAAM;AAAA,IACf;AAEO,IAAM,cAAc,CAAC,QAAgB;AAC1C,UAAI,OAAO;AACX,UAAI,IAAI,UAAU;AAAG,eAAO;AAC5B,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,YAAI,UAAU,IAAI,WAAW,CAAC;AAC9B,gBAAQ,QAAQ,KAAK,OAAO;AAC5B,eAAO,OAAO;AAAA,MAChB;AACA,aAAO,OAAO,IAAI,EAAE,WAAW,MAAM,GAAG;AAAA,IAC1C;AAEO,IAAM,gBAAgB,CAAC,UAA8B;AAC1D,UAAI,MAAM,eAAe,UAAU;AACjC,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAEO,IAAM,oBAAoB,CAAC,iBAAyC;AACzE,YAAM,WAAW,SAAS,cAAc,UAAU;AAClD,eAAS,YAAY;AACrB,aAAO,SAAS,QAAQ;AAAA,IAC1B;AAoCO,IAAM,QAAQ,IAAI,UAAsB;AAC7C,UAAI,QAAQ,MAAM,CAAC;AAEnB,UAAI,CAAC,cAAc,KAAK,KAAK,QAAQ,KAAK,GAAG;AAC3C,eAAO;AAAA,MACT;AAEA,UAAI,IAAI;AACR,UAAI,OAAO,KAAK,KAAK,EAAE,SAAS,GAAG;AACjC,YAAI;AACJ,gBAAQ,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC;AAAA,MACjC;AACA,YAAM,SAAS,MAAM;AACrB,aAAO,IAAI,QAAQ,KAAK,GAAG;AACzB,kBAAU,OAAO,MAAM,CAAC,CAAC;AAAA,MAC3B;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;;;ACrNA,IAK8B;AAL9B;AAAA;AAAA;AAGA;AAEA,IAA8B,SAA9B,MAA8B,QAAO;AAAA,MAOnC,YAAY,MAAgB,OAAkB,YAAyB;AAFvE,aAAQ,aAAsB;AAG5B,aAAK,WAAW;AAChB,aAAK,QAAQ;AACb,aAAK,aAAa;AAClB,aAAK,YAAY;AAEjB,YAAI,MAAM;AAAS,qBAAW,cAAc,aAAa,GAAG,aAAa,WAAW,MAAM,OAAO;AAAA,MACnG;AAAA,MAEO,iBAAiB;AACtB,YAAU,YAAY,KAAK,MAAM,YAAY,GAAG;AAC9C,eAAK,SAAS,IAAI,KAAK;AAAA,QACzB,OAAO;AACL,eAAK,SAAS,KAAK,MAAM,cAAc,KAAK;AAAA,QAC9C;AAEA,YAAI,CAAO,YAAY,KAAK,MAAM,WAAW,GAAG;AAC9C,gBAAM,MAAM,KAAK,WAAW;AAC5B,cAAI,eAAe,SAAS;AAC1B,gBAAI,aAAa,eAAe,KAAK,MAAM,WAAW;AAAA,UACxD;AAAA,QACF;AAAA,MACF;AAAA,MAEO,mBAAmB;AACxB,aAAK,YAAY,KAAK,MAAM,YAAY,KAAK;AAAA,MAC/C;AAAA,MAEO,cAAc,SAAkB;AACrC,aAAK,WAAW,cAAc,qBAAqB,GAAG,OAAO,OAAO;AAAA,MACtE;AAAA,MAEA,OAAO,eAAwB;AAC7B,eAAO;AAAA,MACT;AAAA,MAEA,OAAO,mBAA4B;AACjC,eAAO;AAAA,MACT;AAAA,MAEO,UAAoB;AACzB,eAAO,KAAK;AAAA,MACd;AAAA,MAUO,cAAc,OAAkB;AAAA,MAAC;AAAA,MAExC,OAAc,uBAAuB,OAA0B;AAC7D,eAAO,MAAM,cAAc,+BAA+B,MAAM,WAAW,WAAW;AAAA,MACxF;AAAA,MAEO,gBAAgB,OAAkB,GAAiB,WAAmB,YAAsC;AACjH,YAAI,MAAM,UAAU;AAClB,cAAI,aAAkB;AAAA,YACpB;AAAA,YACA,KAAK;AAAA,YACL,UAAU,MAAM;AAAA,YAChB,OAAO;AAAA,UACT;AAEA,cAAI,MAAM,UAAU,MAAM;AACxB,gBAAI,aAAa,CAAC;AAClB,kBAAM,WAAW,QAAO,eAAe,KAAK;AAE5C,qBAAS,OAAO,MAAM,SAAS,MAAM;AACnC,kBAAI,YAAY,IAAI,QAAQ;AAC5B,kBAAU,SAAS,UAAU,GAAG;AAC9B,oBAAI,aAAa,YAAY;AAC3B,6BAAW,KAAK,GAAG;AACnB;AAAA,gBACF;AAAA,cACF,WAAiB,QAAQ,UAAU,GAAG;AACpC,oBAAI,WAAW,SAAS,SAAS,GAAG;AAClC,6BAAW,KAAK,GAAG;AAAA,gBACrB;AAAA,cACF;AAAA,YACF;AAEA,uBAAW,aAAa;AAAA,UAC1B;AAEA,cAAI,WAAW,YAAY,WAAW,SAAS,MAAM,SAAS,KAAK,MAAM,UAAU,MAAM,OAAO;AAC9F,sBAAU,SAAS,MAAM,QAAQ,KAAK;AACtC,mBAAO;AAAA,UACT;AAEA,gBAAM,SAAS,WAAW;AAAA,QAC5B;AAEA,aAAK,SAAS,eAAe;AAAA,MAC/B;AAAA,MAEO,QAAQ;AACb,aAAK,WAAW,EAAE,MAAM;AAAA,MAC1B;AAAA,MAEO,eAAe;AACpB,eAAO,KAAK;AAAA,MACd;AAAA,MAEO,OAAO;AACZ,aAAK,aAAa;AAClB,aAAK,WAAW,UAAU,OAAO,WAAW;AAAA,MAC9C;AAAA,MAEO,OAAO;AACZ,aAAK,aAAa;AAClB,YAAI,CAAC,KAAK,WAAW,UAAU,SAAS,WAAW,GAAG;AACpD,eAAK,WAAW,UAAU,IAAI,WAAW;AAAA,QAC3C;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQO,eAAe,MAAc;AAClC,cAAM,UAAU,KAAK,WAAW,cAAc,iBAAiB;AAC/D,YAAI,SAAS;AACX,kBAAQ,YAAY;AAAA,QACtB,OAAO;AACL,gBAAM,WAAW,KAAK,WAAW,cAAc,WAAW;AAC1D,cAAI,UAAU;AACZ,kBAAM,SAAS,IAAI,UAAU;AAC7B,iBAAK,MAAM,cAAc;AACzB,kBAAMA,WAAU,OAAO,gBAAgB,QAAO,uBAAuB,KAAK,KAAK,GAAG,WAAW,EAAE,cAAc,iBAAiB;AAE9H,gBAAIA;AAAS,uBAAS,YAAY,aAAaA,UAAS,SAAS,WAAW;AAAA,UAC9E;AAAA,QACF;AAAA,MACF;AAAA,MAEO,UAAU,IAAkB;AAAA,MAEnC;AAAA,MAEO,YAAY,MAAe;AAChC,cAAM,MAAM,KAAK,WAAW;AAC5B,YAAI,eAAe,aAAa;AAC9B,cAAI,SAAS,OAAO;AAClB,iBAAK,WAAW,EAAE,gBAAgB,UAAU;AAAA,UAC9C,OAAO;AACL,iBAAK,WAAW,EAAE,aAAa,YAAY,IAAI;AAAA,UACjD;AAAA,QACF;AAAA,MACF;AAAA,MAEO,kBAAkB;AAAA,MAEzB;AAAA,MAEA,OAAc,eAAe,OAA0B;AACrD,eAAO,MAAM,UAAU,aAAa,MAAM,SAAS,aAAa;AAAA,MAClE;AAAA,MAEA,OAAc,eAAe,OAA0B;AACrD,eAAO,MAAM,UAAU,aAAa,MAAM,SAAS,aAAa;AAAA,MAClE;AAAA,MAEA,OAAc,iBAAiB,OAAe,KAAU;AACtD,YAAI,cAAc;AAClB,cAAM,cAAc,MAAM,QAAQ,6BAA6B,CAAC,OAAO,QAAQ;AAC7E,wBAAc;AACd,iBAAO,IAAI,GAAG,KAAK;AAAA,QACrB,CAAC;AAED,YAAI,aAAa;AACf,iBAAO;AAAA,QACT;AAEA,eAAO,IAAI,KAAK,KAAK;AAAA,MACvB;AAAA,IACF;AAAA;AAAA;;;ACjMA,IAGM,QAsBO;AAzBb;AAAA;AAAA;AAGA,IAAM,SAAS;AAAA,MACb,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,aAAa;AAAA,MACb,UAAU;AAAA,MACV,eAAe;AAAA,MACf,cAAc;AAAA,MACd,sBAAsB;AAAA,MACtB,6BAA6B;AAAA,IAC/B;AAUO,IAAM,kBAAkB,CAAC,OAAe,OAAkB,WAAqC;AACpG,UAAI,CAAC,MAAM,UAAU,aAAa,GAAG;AACnC,eAAO,EAAE,MAAM,MAAM,MAAM,YAAY,CAAC,EAAE;AAAA,MAC5C;AAEA,UAAI,OAAO,WAAW,aAAa;AACjC,iBAAS,EAAE,MAAM,MAAM,MAAM,YAAY,CAAC,EAAE;AAAA,MAC9C;AAEA,YAAM,aAAa,MAAM;AAEzB,UAAI,YAAY;AACd,YAAI,CAAC,OAAO,UAAU,EAAE,KAAK,KAAK,GAAG;AACnC,iBAAO,SAAS;AAChB,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;;;AC5CA,IAaa;AAbb;AAAA;AAAA;AAEA;AACA;AAUO,IAAM,YAAY,CAAC,OAAe,OAAkB,WAA+C;AACxG,UAAI,MAAM,WAAW;AACnB,eAAO,YAAY,MAAM,UAAU,OAAO,KAAK;AAC/C,YAAI,OAAO,OAAO,cAAc,UAAU;AACxC,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,eAAS,gBAAgB,OAAO,OAAO,MAAM;AAE7C,UAAI,OAAO,QAAQ;AACjB,eAAO;AAAA,MACT;AAEA,UAAI,MAAM,WAAW;AACnB,cAAM,gBAAgB,MAAM,UAAU;AACtC,cAAM,YAAY,MAAM,UAAU,QAAQ,EAAE,SAAS,aAAa;AAElE,YAAI,CAAO,QAAQ,SAAS,KAAK,MAAM,UAAU,SAAS,KAAK,UAAU,UAAU,SAAS,GAAG;AAC7F,iBAAO,UAAU,MAAM,UAAU;AACjC,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,UAAI,MAAM,WAAW;AACnB,cAAM,gBAAgB,MAAM,UAAU;AACtC,cAAM,YAAY,MAAM,UAAU,QAAQ,EAAE,SAAS,aAAa;AAElE,YAAI,CAAO,QAAQ,SAAS,KAAK,MAAM,UAAU,SAAS,KAAK,UAAU,UAAU,SAAS,GAAG;AAC7F,iBAAO,UAAU,MAAM,UAAU;AACjC,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;;;AChDA,IAaa;AAbb;AAAA;AAAA;AAEA;AACA;AACA;AASO,IAAM,kBAAkB,CAAC,OAAe,UAA4C;AACzF,UAAI,CAAC,MAAM,UAAU,aAAa,GAAG;AACnC,eAAO;AAAA,MACT;AAEA,YAAM,SAAsB,EAAE,MAAM,MAAM,MAAM,YAAY,CAAC,EAAE;AAC/D,YAAM,WAAW,OAAO,KAAK;AAE7B,UAAI,MAAM,YAAkB,QAAQ,KAAK,GAAG;AAC1C,eAAO,WAAW,KAAK,MAAM,QAAQ;AACrC,eAAO;AAAA,MACT;AAEA,UAAI,CAAO,SAAS,KAAK,GAAG;AAC1B,eAAO,WAAW,KAAK,MAAM,GAAG;AAChC,eAAO;AAAA,MACT;AAEA,UAAI,UAAU,OAAO,OAAO,MAAM,MAAM,MAAM;AAC5C,eAAO;AAAA,MACT;AAEA,YAAM,OAAO,MAAM;AACnB,UAAI,MAAM;AACR,cAAM,YAAkB,SAAS,KAAK,OAAO,GAC3C,YAAkB,SAAS,KAAK,OAAO;AAEzC,YAAI,UAAU,OACZ,eAAe,OACf,UAAU,OACV,eAAe;AAEjB,YAAI,WAAW;AACb,cAAI,KAAK,oBAAoB,YAAY,KAAK,SAAS;AACrD,2BAAe;AAAA,UACjB,WAAW,WAAW,KAAK,SAAS;AAClC,sBAAU;AAAA,UACZ;AAAA,QACF;AAEA,YAAI,WAAW;AACb,cAAI,KAAK,oBAAoB,YAAY,KAAK,SAAS;AACrD,2BAAe;AAAA,UACjB,WAAW,WAAW,KAAK,SAAS;AAClC,sBAAU;AAAA,UACZ;AAAA,QACF;AAEA,YAAI,aAAa,cAAc,WAAW,gBAAgB,WAAW,eAAe;AAClF,cAAI,KAAK,oBAAoB,KAAK,qBAAqB,gBAAgB,eAAe;AACpF,mBAAO,WAAW,KAAK,MAAM,wBAAwB;AAAA,UACvD,WAAW,cAAc;AACvB,mBAAO,WAAW,KAAK,MAAM,qBAAqB;AAAA,UACpD,WAAW,cAAc;AACvB,mBAAO,WAAW,KAAK,MAAM,qBAAqB;AAAA,UACpD,OAAO;AACL,mBAAO,WAAW,KAAK,MAAM,OAAO;AAAA,UACtC;AAAA,QACF,OAAO;AACL,cAAI,cAAc;AAChB,mBAAO,WAAW,KAAK,MAAM,aAAa;AAAA,UAC5C;AAEA,cAAI,cAAc;AAChB,mBAAO,WAAW,KAAK,MAAM,aAAa;AAAA,UAC5C;AAEA,cAAI,SAAS;AACX,mBAAO,WAAW,KAAK,MAAM,GAAG;AAAA,UAClC;AAEA,cAAI,SAAS;AACX,mBAAO,WAAW,KAAK,MAAM,GAAG;AAAA,UAClC;AAAA,QACF;AAAA,MACF;AAEA,UAAI,OAAO,WAAW,SAAS,GAAG;AAChC,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;;;AC/FA,IAIa,gBA6CA;AAjDb;AAAA;AAAA;AAEA;AAEO,IAAM,iBAAiB,CAAC,OAAkB,YAAqB,gBAAuC;AAC3G,UAAI,gBAAgB,MAAM;AACxB,mBAAW,UAAU,OAAO,SAAS;AAErC,YAAI,CAAC,WAAW,UAAU,SAAS,OAAO,GAAG;AAC3C,qBAAW,UAAU,IAAI,OAAO;AAAA,QAClC;AAEA,cAAM,qBAAqB,WAAW,cAAc,eAAe;AACnE,YAAI,oBAAoB;AACtB,6BAAmB,YAAY;AAAA,QACjC;AAEA;AAAA,MACF;AAEA,iBAAW,UAAU,OAAO,OAAO;AAEnC,UAAI,CAAC,WAAW,UAAU,SAAS,SAAS,GAAG;AAC7C,mBAAW,UAAU,IAAI,SAAS;AAAA,MACpC;AAEA,UAAI,gBAAgB,OAAO;AACzB,cAAMC,WAAoB,iBAAS,aAAa,OAAO,WAAW;AAElE,YAAI,YAAY,SAAS;AACvB,UAAAA,SAAQ,KAAK,YAAY,OAAO;AAAA,QAClC;AAEA,cAAM,qBAAqB,WAAW,cAAc,eAAe;AACnE,YAAI,sBAAsBA,SAAQ,SAAS,GAAG;AAC5C,gBAAM,UAAoB,CAAC;AAC3B,UAAAA,SAAQ,QAAQ,CAAC,SAAS;AACxB,oBAAQ,KAAK,QAAQ,IAAI,QAAQ;AAAA,UACnC,CAAC;AACD,6BAAmB,YAAY,QAAQ,KAAK,EAAE;AAAA,QAChD;AAAA,MACF;AAAA,IACF;AAOO,IAAM,4BAA4B,CAAC,eAAwB;AAChE,iBAAW,UAAU,OAAO,SAAS;AACrC,iBAAW,UAAU,OAAO,OAAO;AAAA,IACrC;AAAA;AAAA;;;ACpDA,IAIa,YAOA,kBAoBA,qBAOA;AAtCb;AAAA;AAAA;AAEA;AAEO,IAAM,aAAa,CAAC,OAAkB,SAAkB,eAAuB;AACpF,cAAQ,iBAAiB,SAAS,CAAC,MAAa;AAC9C,8BAAsB,OAAO,GAAG,YAAY,WAAW,SAAS,CAAC;AACjE,mBAAW,MAAM;AAAA,MACnB,CAAC;AAAA,IACH;AAEO,IAAM,mBAAmB,CAAC,OAAkB,SAA2B,eAAuB;AACnG,cAAQ,iBAAiB,SAAS,CAAC,MAAW;AAC5C,cAAM,MAAM,EAAE,OAAO;AAErB,YAAI,CAAO,SAAS,GAAG,GAAG;AACxB,kBAAQ,QAAQ,IAAI,QAAQ,iBAAiB,EAAE;AAC/C,YAAE,eAAe;AAAA,QACnB;AACA,8BAAsB,OAAO,GAAG,YAAY,WAAW,SAAS,CAAC;AACjE,mBAAW,MAAM;AAAA,MACnB,CAAC;AAAA,IAQH;AAEO,IAAM,sBAAsB,CAAC,OAAkB,SAAkB,eAAuB;AAC7F,cAAQ,iBAAiB,UAAU,CAAC,MAAW;AAC7C,8BAAsB,OAAO,GAAG,YAAY,WAAW,SAAS,CAAC;AACjE,mBAAW,MAAM;AAAA,MACnB,CAAC;AAAA,IACH;AAEO,IAAM,wBAAwB,CAAC,OAAkB,GAAU,YAAoB,UAAe;AACnG,iBAAW,gBAAgB,OAAO,GAAG,YAAY,KAAK;AAAA,IACxD;AAAA;AAAA;;;ACxCA,IAOqB;AAPrB;AAAA;AAAA;AACA;AACA;AACA;AACA;AAGA,IAAqB,eAArB,cAA0C,OAAO;AAAA,MAG/C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,cAAM,UAAU,OAAO,UAAU;AAEjC,aAAK,QAAQ;AACb,aAAK,iBAAiB;AACtB,aAAK,eAAe;AAAA,MACtB;AAAA,MAEA,UAAU;AACR,yBAAiB,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,MACjD;AAAA,MAEA,cAAc;AACZ,cAAM,QAAQ,KAAK;AAEnB,cAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,8BAAsB,YAAY;AAAA;AAAA,uCAEC,MAAM,QAAQ;AAAA;AAAA,UAE3C,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA;AAG1C,aAAK,UAAU,sBAAsB,cAAc,UAAU,MAAM,QAAQ,IAAI;AAAA,MACjF;AAAA,MAEA,WAAW;AACT,eAAO,KAAK,QAAQ;AAAA,MACtB;AAAA,MAEA,SAAS,OAAY,iBAAiC;AACpD,YAAI,oBAAoB,SAAS,KAAK,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;AAC9F,eAAK,QAAQ,QAAQ,KAAK,MAAM;AAChC;AAAA,QACF;AACA,aAAK,MAAM,SAAS;AACpB,aAAK,QAAQ,QAAQ;AAAA,MACvB;AAAA,MAEA,QAAQ;AACN,aAAK,eAAe;AACpB,aAAK,YAAY,KAAK;AACtB,kCAA0B,KAAK,UAAU;AAAA,MAC3C;AAAA,MAEA,aAA0B;AACxB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,QAAa;AACX,cAAM,cAAc,gBAAgB,KAAK,SAAS,GAAG,KAAK,KAAK;AAE/D,uBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;ACnEA,IAaa;AAbb;AAAA;AAAA;AAEA;AACA;AACA;AASO,IAAM,kBAAkB,CAAC,OAAe,UAA4C;AACzF,UAAI,CAAC,MAAM,UAAU,aAAa,GAAG;AACnC,eAAO;AAAA,MACT;AAEA,UAAI,SAAsB,EAAE,MAAM,MAAM,MAAM,YAAY,CAAC,EAAE;AAE7D,UAAI,MAAM,YAAkB,QAAQ,KAAK,GAAG;AAC1C,eAAO,WAAW,KAAK,MAAM,QAAQ;AACrC,eAAO;AAAA,MACT;AACA,YAAM,cAAc,UAAU,OAAO,OAAO,MAAM;AAClD,UAAI,gBAAgB,MAAM;AACxB,eAAO;AAAA,MACT;AAEA,YAAM,OAAO,MAAM;AAEnB,UAAI,MAAM;AACR,cAAM,cAAc,MAAM;AAE1B,cAAM,cAAoB,SAAS,KAAK,SAAS,GAC/C,cAAoB,SAAS,KAAK,SAAS;AAE7C,YAAI,UAAU,OACZ,UAAU;AACZ,YAAI,eAAe,cAAc,KAAK,WAAW;AAC/C,oBAAU;AAAA,QACZ;AACA,YAAI,eAAe,cAAc,KAAK,WAAW;AAC/C,oBAAU;AAAA,QACZ;AAEA,YAAI,eAAe,gBAAgB,WAAW,UAAU;AACtD,iBAAO,WAAW,KAAK,MAAM,OAAO;AAAA,QACtC,OAAO;AACL,cAAI,SAAS;AACX,mBAAO,WAAW,KAAK,MAAM,UAAU;AAAA,UACzC;AAEA,cAAI,SAAS;AACX,mBAAO,WAAW,KAAK,MAAM,UAAU;AAAA,UACzC;AAAA,QACF;AACA,YAAI,OAAO,WAAW,SAAS,GAAG;AAChC,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;;;AC/DA,IAOqB;AAPrB;AAAA;AAAA;AACA;AACA;AACA;AACA;AAGA,IAAqB,iBAArB,cAA4C,OAAO;AAAA,MAGjD,YAAY,OAAkB,YAAyB,UAAoB;AACzE,cAAM,UAAU,OAAO,UAAU;AAEjC,aAAK,QAAQ;AACb,aAAK,iBAAiB;AACtB,aAAK,eAAe;AAAA,MACtB;AAAA,MAEA,UAAU;AACR,mBAAW,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,MAC3C;AAAA,MAEA,cAAc;AACZ,cAAM,QAAQ,KAAK;AAEnB,cAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,YAAI,OAAO,MAAM,eAAe;AAChC,eAAO,CAAC,OAAO,IAAI,OAAO;AAE1B,8BAAsB,YAAY;AAAA;AAAA,8BAER,MAAM,QAAQ,WAAW,IAAI;AAAA;AAAA,UAEjD,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA;AAI1C,aAAK,UAAU,sBAAsB,cAAc,UAAU,MAAM,QAAQ,IAAI;AAAA,MACjF;AAAA,MAEA,WAAW;AACT,eAAO,KAAK,QAAQ;AAAA,MACtB;AAAA,MAEA,SAAS,OAAY,iBAAiC;AACpD,YAAI,oBAAoB,SAAS,KAAK,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;AAC9F,eAAK,QAAQ,QAAQ,KAAK,MAAM;AAChC;AAAA,QACF;AACA,aAAK,MAAM,SAAS;AACpB,aAAK,QAAQ,QAAQ;AAAA,MACvB;AAAA,MAEA,QAAQ;AACN,aAAK,eAAe;AACpB,aAAK,YAAY,KAAK;AACtB,kCAA0B,KAAK,UAAU;AAAA,MAC3C;AAAA,MAEA,aAA0B;AACxB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,QAAa;AACX,cAAM,cAAc,gBAAgB,KAAK,SAAS,GAAG,KAAK,KAAK;AAE/D,uBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;ACvEA,IAUqB;AAVrB;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA,IAAqB,iBAArB,MAAqB,wBAAuB,OAAO;AAAA,MAIjD,YAAY,OAAkB,YAAyB,UAAoB;AACzE,cAAM,UAAU,OAAO,UAAU;AAEjC,YAAI,mBAAmB;AAEvB,YAAI,CAAO,YAAY,MAAM,YAAY,GAAG;AAC1C,6BAAmB,MAAM;AAAA,QAC3B;AAEA,cAAM,WAAW,gBAAe,eAAe,KAAK;AACpD,YAAI,uBAAuB;AAC3B,aAAK,MAAM,UAAU,MAAM,QAAQ,CAAC,SAAS;AAC3C,cAAI,YAAY,KAAK,QAAQ;AAC7B,cAAI,KAAK,UAAU;AACjB,iBAAK,kBAAkB;AAAA,UACzB;AACA,cAAI,aAAa,kBAAkB;AACjC,mCAAuB;AAAA,UACzB;AAAA,QACF,CAAC;AAED,YAAI,sBAAsB;AACxB,eAAK,kBAAkB;AAAA,QACzB,WAAW,CAAC,KAAK,iBAAiB;AAChC,cAAI,MAAM,eAAe,yBAAyB,MAAM;AACtD,iBAAK,kBAAkB,KAAK,MAAM,UAAU,MAAM,SAAS,IAAI,KAAK,MAAM,SAAS,KAAK,CAAC,EAAE,QAAQ,KAAK,KAAK;AAAA,UAC/G;AAAA,QACF;AAEA,YAAU,YAAY,KAAK,eAAe,GAAG;AAC3C,eAAK,kBAAkB;AAAA,QACzB;AAEA,aAAK,QAAQ;AACb,aAAK,iBAAiB;AACtB,aAAK,SAAS,KAAK,iBAAiB,KAAK;AAAA,MAC3C;AAAA,MAEA,UAAU;AACR,4BAAoB,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,MACpD;AAAA,MAEA,cAAc;AACZ,cAAM,QAAQ,KAAK;AAEnB,cAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,YAAI,WAAW,wCAAwC,MAAM,QAAQ;AAAA,YAC7D,KAAK,uBAAuB,KAAK,CAAC;AAAA;AAAA,kBAE5B,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA;AAGlD,8BAAsB,YAAY;AAElC,aAAK,UAAU,sBAAsB,cAAc,UAAU,MAAM,QAAQ,IAAI;AAAA,MACjF;AAAA,MAEO,cAAc,OAAkB;AACrC,YAAI,KAAK,MAAM,UAAU;AACvB,eAAK,MAAM,SAAS,OAAO;AAAA,QAC7B,OAAO;AACL,eAAK,MAAM,WAAW;AAAA,YACpB,MAAM;AAAA,UACR;AAAA,QACF;AACA,aAAK,QAAQ,YAAY,KAAK,uBAAuB,KAAK,KAAK;AAE/D,YAAI,CAAO,QAAQ,KAAK,MAAM,MAAM,GAAG;AACrC,gBAAM,eAAe,KAAK,MAAM;AAChC,eAAK,MAAM,SAAS;AACpB,eAAK,SAAS,YAAY;AAAA,QAC5B;AAAA,MACF;AAAA,MAEA,WAAW;AACT,eAAO,KAAK,QAAQ;AAAA,MACtB;AAAA,MAEA,SAAS,OAAY,iBAAiC;AACpD,YAAI,oBAAoB,SAAS,KAAK,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;AAC9F,eAAK,QAAQ,QAAQ,KAAK,MAAM;AAChC;AAAA,QACF;AACA,aAAK,MAAM,SAAS;AACpB,aAAK,QAAQ,QAAQ;AAAA,MACvB;AAAA,MAEA,QAAQ;AACN,aAAK,SAAS,KAAK,iBAAiB,KAAK;AACzC,aAAK,YAAY,KAAK;AACtB,kCAA0B,KAAK,UAAU;AAAA,MAC3C;AAAA,MAEA,aAA0B;AACxB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,QAAa;AACX,cAAM,QAAQ,KAAK,SAAS;AAE5B,YAAI,cAAqC;AAEzC,YAAI,KAAK,MAAM,UAAU;AACvB,cAAI,MAAM,SAAS,GAAG;AACpB,0BAAc,EAAE,MAAM,KAAK,MAAM,MAAM,YAAY,CAAC,EAAE;AACtD,wBAAY,WAAW,KAAK,MAAM,QAAQ;AAAA,UAC5C;AAAA,QACF;AAEA,uBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,eAAO;AAAA,MACT;AAAA,MAEO,uBAAuB,OAAkB;AAC9C,cAAM,WAAW,OAAO,eAAe,KAAK;AAC5C,cAAM,WAAW,OAAO,eAAe,KAAK;AAC5C,YAAI,WAAW;AAEf,YAAI,MAAM,eAAe,yBAAyB,MAAM;AACtD,sBAAY,oBAAoB,iBAAS,WAAW,WAAW,CAAC;AAAA,QAClE;AACA,cAAM,UAAU,MAAM,QAAQ,CAAC,QAAQ;AACrC,gBAAM,OAAO,GAAG,IAAI,WAAW,aAAa,EAAE,IAAI,IAAI,WAAW,aAAa,EAAE;AAChF,cAAU,YAAY,IAAI,QAAQ,CAAC,KAAK,IAAI,OAAO;AACjD,wBAAY,kBAAkB,IAAI,SAAS,EAAE,KAAK,IAAI,IAAI,IAAI,KAAK;AAAA,UACrE,OAAO;AACL,wBAAY,kBAAkB,IAAI,QAAQ,CAAC,KAAK,IAAI,IAAI,OAAO,iBAAiB,UAAU,GAAG,CAAC;AAAA,UAChG;AAAA,QACF,CAAC;AAED,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;ACpJA,IAOqB;AAPrB;AAAA;AAAA;AACA;AACA;AACA;AACA;AAGA,IAAqB,aAArB,cAAwC,OAAO;AAAA,MAG7C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,cAAM,UAAU,OAAO,UAAU;AACjC,aAAK,QAAQ;AACb,aAAK,iBAAiB;AACtB,aAAK,eAAe;AAAA,MACtB;AAAA,MAEA,UAAU;AACR,mBAAW,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,MAC3C;AAAA,MAEA,cAAc;AACZ,cAAM,QAAQ,KAAK;AAEnB,cAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,8BAAsB,YAAY;AAAA;AAAA,kCAEJ,MAAM,QAAQ;AAAA;AAAA,QAExC,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA;AAIxC,aAAK,UAAU,sBAAsB,cAAc,UAAU,MAAM,QAAQ,IAAI;AAAA,MACjF;AAAA,MAEA,WAAW;AACT,eAAO,KAAK,QAAQ;AAAA,MACtB;AAAA,MAEA,SAAS,OAAY,iBAAiC;AACpD,YAAI,oBAAoB,SAAS,KAAK,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;AAC9F,eAAK,QAAQ,QAAQ,KAAK,MAAM;AAChC;AAAA,QACF;AACA,aAAK,MAAM,SAAS;AACpB,aAAK,QAAQ,QAAQ;AAAA,MACvB;AAAA,MAEA,QAAQ;AACN,aAAK,eAAe;AACpB,aAAK,YAAY,KAAK;AACtB,kCAA0B,KAAK,UAAU;AAAA,MAC3C;AAAA,MAEA,aAA+B;AAC7B,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,QAAa;AACX,cAAM,cAAc,gBAAgB,KAAK,SAAS,GAAG,KAAK,KAAK;AAE/D,uBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;ACnEA,IASqB;AATrB;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAGA,IAAqB,iBAArB,MAAqB,wBAAuB,OAAO;AAAA,MAGjD,YAAY,OAAkB,YAAyB,UAAoB;AACzE,cAAM,UAAU,OAAO,UAAU;AAHnC,aAAQ,oBAA2B,CAAC;AAKlC,aAAK,oBAAoB,CAAC;AAC1B,YAAI,mBAAmB,CAAC;AACxB,YAAI,CAAO,YAAY,MAAM,YAAY,GAAG;AAC1C,cAAU,QAAQ,MAAM,YAAY,GAAG;AACrC,+BAAmB,MAAM;AAAA,UAC3B,OAAO;AACL,+BAAmB,CAAC,MAAM,YAAY;AAAA,UACxC;AAAA,QACF;AAEA,cAAM,WAAW,gBAAe,eAAe,KAAK;AAEpD,YAAU,YAAY,KAAK,MAAM,QAAQ,GAAG;AAC1C,eAAK,cAAc,CAAC,EAAE,OAAO,IAAI,OAAO,IAAI,CAAC,CAAC;AAAA,QAChD;AAEA,YAAI,uBAAuB;AAC3B,aAAK,MAAM,UAAU,MAAM,QAAQ,CAAC,SAAS;AAC3C,cAAI,YAAY,KAAK,QAAQ;AAC7B,cAAI,KAAK,UAAU;AACjB,iBAAK,kBAAkB,KAAK,YAAY,YAAY,IAAI;AAAA,UAC1D;AACA,cAAI,iBAAiB,SAAS,SAAS,GAAG;AACxC,mCAAuB;AAAA,UACzB;AAAA,QACF,CAAC;AAED,aAAK,oBAAoB,uBAAuB,mBAAmB,KAAK;AAExE,aAAK,QAAQ;AACb,aAAK,iBAAiB;AACtB,aAAK,SAAS,KAAK,mBAAmB,KAAK;AAAA,MAC7C;AAAA,MAEO,UAAU;AACf,aAAK,UAAU;AAAA,MACjB;AAAA,MAEO,YAAY;AACjB,cAAM,aAAa,KAAK,WAAW,iBAAiB,KAAK,YAAY,CAAC;AAEtE,mBAAW,QAAQ,CAAC,QAAQ;AAC1B,cAAI,iBAAiB,UAAU,CAAC,MAAa;AAC3C,kCAAsB,KAAK,OAAO,GAAG,MAAM,KAAK,SAAS,CAAC;AAC1D,iBAAK,MAAM;AAAA,UACb,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,MAEO,cAAc;AACnB,eAAO,gCAAgC,KAAK,MAAM,QAAQ;AAAA,MAC5D;AAAA,MAEA,cAAc;AACZ,cAAM,QAAQ,KAAK;AAEnB,cAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,cAAM,YAAsB,CAAC;AAC7B,cAAM,YAAY,MAAM;AAExB,cAAM,WAAW,OAAO,eAAe,KAAK;AAC5C,cAAM,WAAW,OAAO,eAAe,KAAK;AAE5C,kBAAU,KAAK,kDAAkD;AACjE,cAAM,UAAU,MAAM,QAAQ,CAAC,QAAQ;AACrC,gBAAM,WAAW,IAAI,QAAQ;AAC7B,oBAAU,KAAK;AAAA,+BACU,MAAM,SAAS,eAAe,aAAa,aAAa,YAAY;AAAA;AAAA,iDAElD,SAAS,YAAY,WAAiB,WAAW,QAAQ,IAAI,EAAE,iCAAiC,IAAI,WAAW,YAAY,EAAE,IAAI,IAAI,WAAW,aAAa,EAAE;AAAA,oBAC5L,OAAO,iBAAiB,UAAU,GAAG,CAAC;AAAA;AAAA;AAAA,OAGnD;AAAA,QACH,CAAC;AACD,kBAAU,KAAK,qDAAqD,OAAO,uBAAuB,KAAK,CAAC,kCAAkC;AAE1I,8BAAsB,YAAY,UAAU,KAAK,EAAE;AAAA,MACrD;AAAA,MAEO,cAAc,OAAkB;AACrC,cAAM,eAAe,KAAK,WAAW,cAAc,qBAAqB;AACxE,YAAI,cAAc;AAChB,cAAI,KAAK,MAAM,UAAU;AACvB,iBAAK,MAAM,SAAS,OAAO;AAAA,UAC7B,OAAO;AACL,iBAAK,MAAM,WAAW;AAAA,cACpB,MAAM;AAAA,YACR;AAAA,UACF;AAEA,eAAK,YAAY;AAEjB,cAAI,CAAO,QAAQ,KAAK,MAAM,MAAM,GAAG;AACrC,kBAAM,eAAe,KAAK,MAAM;AAChC,iBAAK,MAAM,SAAS;AACpB,iBAAK,SAAS,YAAY;AAAA,UAC5B;AAAA,QACF;AAAA,MACF;AAAA,MAEA,WAAW;AACT,cAAM,aAAa,KAAK,WAAW,iBAAiB,KAAK,YAAY,CAAC;AAEtE,YAAI,WAAW,SAAS,GAAG;AACzB,gBAAM,aAAoB,CAAC;AAC3B,qBAAW,QAAQ,CAAC,QAAQ;AAC1B,kBAAM,WAAW;AACjB,gBAAI,SAAS,SAAS;AACpB,yBAAW,KAAK,SAAS,KAAK;AAAA,YAChC;AAAA,UACF,CAAC;AACD,iBAAO;AAAA,QACT,OAAO;AACL,gBAAM,eAAe,KAAK,WAAW,cAAc,UAAU,KAAK,MAAM,QAAQ,IAAI;AAEpF,cAAI,cAAc,SAAS;AACzB,mBAAO,aAAa,QAAQ,aAAa,QAAQ;AAAA,UACnD;AAEA,iBAAO,aAAa,QAAQ,KAAK;AAAA,QACnC;AAAA,MACF;AAAA,MAEA,SAAS,OAAY,iBAAiC;AACpD,YAAI,oBAAoB,SAAS,KAAK,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;AAC9F,kBAAQ,KAAK,MAAM;AAAA,QACrB;AAEA,aAAK,MAAM,SAAS;AACpB,YAAI,UAAU,MAAM;AAClB,UAAC,KAAK,WAAW,cAAc,UAAU,KAAK,MAAM,QAAQ,IAAI,EAAuB,UAAU;AACjG;AAAA,QACF;AAEA,YAAI,UAAU,OAAO;AACnB,UAAC,KAAK,WAAW,cAAc,UAAU,KAAK,MAAM,QAAQ,IAAI,EAAuB,UAAU;AACjG;AAAA,QACF;AAEA,YAAI,WAAkB,CAAC;AACvB,YAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,qBAAW;AAAA,QACb,OAAO;AACL,mBAAS,KAAK,KAAK;AAAA,QACrB;AAEA,cAAM,aAAa,KAAK,WAAW,iBAAiB,KAAK,YAAY,CAAC;AAEtE,mBAAW,QAAQ,CAAC,QAAQ;AAC1B,UAAC,IAAyB,UAAU;AAAA,QACtC,CAAC;AAED,iBAAS,QAAQ,CAAC,QAAQ;AACxB,gBAAM,MAAM,KAAK,WAAW,cAAc,UAAU,KAAK,MAAM,QAAQ,aAAa,GAAG,IAAI;AAC3F,cAAI;AAAK,gBAAI,UAAU;AAAA,QACzB,CAAC;AAAA,MACH;AAAA,MAEA,QAAQ;AACN,YAAI,KAAK,MAAM,UAAU,MAAM,UAAU,KAAK,KAAK,kBAAkB,UAAU,GAAG;AAChF,eAAK,SAAS,MAAM,KAAK;AAAA,QAC3B,OAAO;AACL,eAAK,SAAS,KAAK,mBAAmB,KAAK;AAAA,QAC7C;AACA,aAAK,YAAY,KAAK;AACtB,kCAA0B,KAAK,UAAU;AAAA,MAC3C;AAAA,MAEA,aAAkB;AAChB,eAAO,KAAK,WAAW,iBAAiB,UAAU,KAAK,MAAM,QAAQ,IAAI;AAAA,MAC3E;AAAA,MAEO,QAAQ;AACb,cAAM,WAAW,KAAK,WAAW;AAEjC,YAAI,YAAY,SAAS,SAAS,GAAG;AACnC,eAAK,WAAW,EAAE,CAAC,EAAE,MAAM;AAAA,QAC7B;AAAA,MACF;AAAA,MAEA,QAAa;AACX,cAAM,QAAQ,KAAK,SAAS;AAE5B,YAAI,cAAqC;AAEzC,YAAI,KAAK,MAAM,YAAkB,QAAQ,KAAK,GAAG;AAC/C,cAAK,MAAgB,SAAS,GAAG;AAC/B,0BAAc,EAAE,MAAM,KAAK,MAAM,MAAM,YAAY,CAAC,EAAE;AACtD,wBAAY,WAAW,KAAK,MAAM,QAAQ;AAAA,UAC5C;AAAA,QACF;AAEA,uBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;ACrNA,IASqB;AATrB;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AAEA,IAAqB,cAArB,MAAqB,qBAAoB,OAAO;AAAA,MAG9C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,cAAM,UAAU,OAAO,UAAU;AAEjC,aAAK,oBAAoB;AACzB,YAAI,mBAAmB,CAAC;AACxB,YAAI,CAAO,YAAY,MAAM,YAAY,GAAG;AAC1C,6BAAmB,MAAM;AAAA,QAC3B;AAEA,cAAM,WAAW,aAAY,eAAe,KAAK;AACjD,YAAI,uBAAuB;AAC3B,aAAK,MAAM,UAAU,MAAM,QAAQ,CAAC,SAAS;AAC3C,cAAI,YAAY,KAAK,QAAQ;AAC7B,cAAI,KAAK,UAAU;AACjB,iBAAK,oBAAoB;AAAA,UAC3B;AAEA,cAAI,oBAAoB,WAAW;AACjC,mCAAuB;AAAA,UACzB;AAAA,QACF,CAAC;AAID,YAAI,sBAAsB;AACxB,eAAK,oBAAoB;AAAA,QAC3B,WAAW,CAAC,KAAK,mBAAmB;AAClC,eAAK,oBAAoB,KAAK,MAAM,UAAU,MAAM,SAAS,IAAI,KAAK,MAAM,UAAU,KAAK,CAAC,EAAE,QAAQ,IAAI;AAAA,QAC5G;AAEA,aAAK,QAAQ;AACb,aAAK,iBAAiB;AACtB,aAAK,SAAS,KAAK,mBAAmB,KAAK;AAAA,MAC7C;AAAA,MAEO,UAAU;AACf,aAAK,UAAU;AAAA,MACjB;AAAA,MAEO,YAAY;AACjB,cAAM,aAAa,KAAK,WAAW,iBAAiB,KAAK,YAAY,CAAC;AAEtE,mBAAW,QAAQ,CAAC,QAAQ;AAC1B,cAAI,iBAAiB,UAAU,CAAC,MAAa;AAC3C,kCAAsB,KAAK,OAAO,GAAG,MAAM,KAAK,SAAS,CAAC;AAE1D,iBAAK,MAAM;AAAA,UACb,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,MAEO,cAAc;AACnB,eAAO,6BAA6B,KAAK,MAAM,QAAQ;AAAA,MACzD;AAAA,MAEA,cAAc;AACZ,cAAM,QAAQ,KAAK;AAEnB,cAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,cAAM,YAAsB,CAAC;AAC7B,cAAM,YAAY,MAAM;AAExB,cAAM,WAAW,OAAO,eAAe,KAAK;AAC5C,cAAM,WAAW,OAAO,eAAe,KAAK;AAE5C,kBAAU,KAAK,iDAAiD;AAEhE,cAAM,UAAU,MAAM,QAAQ,CAAC,QAAQ;AACrC,gBAAM,WAAW,IAAI,QAAQ;AAE7B,oBAAU;AAAA,YACR,sBAAsB,MAAM,eAAe,aAAa,aAAa,YAAY;AAAA;AAAA,wCAEjD,SAAS,YAAY,QAAQ,8BAA8B,IAAI,WAAW,YAAY,EAAE,IAAI,IAAI,WAAW,aAAa,EAAE;AAAA,cACpJ,OAAO,iBAAiB,UAAU,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA,UAI9C;AAAA,QACF,CAAC;AACD,kBAAU,KAAK;AAAA,UACT,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA,KAEzC;AAED,8BAAsB,YAAY,UAAU,KAAK,EAAE;AAEnD,aAAK,UAAU;AAAA,MACjB;AAAA,MAEO,cAAc,OAAkB;AACrC,cAAM,eAAe,KAAK,WAAW,cAAc,qBAAqB;AACxE,YAAI,cAAc;AAChB,cAAI,KAAK,MAAM,UAAU;AACvB,iBAAK,MAAM,SAAS,OAAO;AAAA,UAC7B,OAAO;AACL,iBAAK,MAAM,WAAW;AAAA,cACpB,MAAM;AAAA,YACR;AAAA,UACF;AAEA,eAAK,YAAY;AAEjB,cAAI,CAAO,QAAQ,KAAK,MAAM,MAAM,GAAG;AACrC,kBAAM,eAAe,KAAK,MAAM;AAChC,iBAAK,MAAM,SAAS;AACpB,iBAAK,SAAS,YAAY;AAAA,UAC5B;AAAA,QACF;AAAA,MACF;AAAA,MAEA,WAAW;AACT,eAAQ,KAAK,WAAW,cAAc,UAAU,KAAK,MAAM,QAAQ,YAAY,GAAwB;AAAA,MACzG;AAAA,MAEA,SAAS,OAAY,iBAAiC;AACpD,YAAI,oBAAoB,SAAS,KAAK,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;AAC9F,kBAAQ,KAAK,MAAM;AAAA,QACrB;AAEA,aAAK,MAAM,SAAS;AACpB,YAAI,UAAU,MAAM;AAClB,UAAC,KAAK,WAAW,cAAc,UAAU,KAAK,MAAM,QAAQ,IAAI,EAAuB,UAAU;AACjG;AAAA,QACF;AAEA,YAAI,UAAU,OAAO;AACnB,UAAC,KAAK,WAAW,cAAc,UAAU,KAAK,MAAM,QAAQ,IAAI,EAAuB,UAAU;AACjG;AAAA,QACF;AAEA,cAAM,WAAW,KAAK,WAAW,iBAAiB,KAAK,YAAY,CAAC;AAEpE,iBAAS,QAAQ,CAAC,QAAQ;AACxB,cAAI,WAAW;AACf,cAAI,SAAS,SAAS,OAAO;AAC3B,qBAAS,UAAU;AAAA,UACrB,OAAO;AACL,qBAAS,UAAU;AAAA,UACrB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MAEA,QAAQ;AACN,aAAK,SAAS,KAAK,mBAAmB,KAAK;AAC3C,aAAK,YAAY,KAAK;AACtB,kCAA0B,KAAK,UAAU;AAAA,MAC3C;AAAA,MAEA,aAAkB;AAChB,eAAO,KAAK,WAAW,iBAAiB,KAAK,YAAY,CAAC;AAAA,MAC5D;AAAA,MAEO,QAAQ;AACb,cAAM,WAAW,KAAK,WAAW;AAEjC,YAAI,YAAY,SAAS,SAAS,GAAG;AACnC,eAAK,WAAW,EAAE,CAAC,EAAE,MAAM;AAAA,QAC7B;AAAA,MACF;AAAA,MAEA,QAAa;AACX,cAAM,QAAQ,KAAK,SAAS;AAE5B,YAAI,cAAqC;AAEzC,YAAI,KAAK,MAAM,UAAU;AACvB,cAAU,QAAQ,KAAK,GAAG;AACxB,0BAAc,EAAE,MAAM,KAAK,MAAM,MAAM,YAAY,CAAC,EAAE;AACtD,wBAAY,WAAW,KAAK,MAAM,QAAQ;AAAA,UAC5C;AAAA,QACF;AAEA,uBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;AC9LA,IAOqB;AAPrB;AAAA;AAAA;AACA;AACA;AACA;AACA;AAGA,IAAqB,iBAArB,cAA4C,OAAO;AAAA,MAGjD,YAAY,OAAkB,YAAyB,UAAoB;AACzE,cAAM,UAAU,OAAO,UAAU;AAEjC,aAAK,QAAQ;AACb,aAAK,iBAAiB;AACtB,aAAK,eAAe;AAAA,MACtB;AAAA,MAEA,UAAU;AACR,mBAAW,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,MAC3C;AAAA,MAEA,cAAc;AACZ,cAAM,QAAQ,KAAK;AAEnB,cAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,8BAAsB,YAAY;AAAA;AAAA,2CAEK,MAAM,QAAQ;AAAA;AAAA,UAE/C,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA;AAI1C,aAAK,UAAU,sBAAsB,cAAc,UAAU,MAAM,QAAQ,IAAI;AAAA,MACjF;AAAA,MAEA,WAAW;AACT,eAAO,KAAK,QAAQ;AAAA,MACtB;AAAA,MAEA,SAAS,OAAY,iBAAiC;AACpD,YAAI,oBAAoB,SAAS,KAAK,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;AAC9F,eAAK,QAAQ,QAAQ,KAAK,MAAM;AAChC;AAAA,QACF;AACA,aAAK,MAAM,SAAS;AACpB,aAAK,QAAQ,QAAQ;AAAA,MACvB;AAAA,MAEA,QAAQ;AACN,aAAK,eAAe;AACpB,aAAK,YAAY,KAAK;AACtB,kCAA0B,KAAK,UAAU;AAAA,MAC3C;AAAA,MAEA,aAA0B;AACxB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,QAAa;AACX,cAAM,cAAc,gBAAgB,KAAK,SAAS,GAAG,KAAK,KAAK;AAE/D,uBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;ACpEA,IAYa;AAZb;AAAA;AAAA;AAEA;AAUO,IAAM,gBAAgB,CAAC,SAA2B,OAAkB,aAAgD;AACzH,YAAM,SAAsB,EAAE,MAAM,MAAM,MAAM,YAAY,CAAC,EAAE;AAE/D,UAAI,MAAM,YAAY,SAAS,SAAS,GAAG;AACzC,eAAO,WAAW,KAAK,MAAM,QAAQ;AACrC,eAAO;AAAA,MACT;AAEA,UAAI,OAAO,WAAW,SAAS,GAAG;AAChC,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;;;ACzBA,IASqB;AATrB;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA,IAAqB,aAArB,cAAwC,OAAO;AAAA,MAO7C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,cAAM,UAAU,OAAO,UAAU;AANnC,aAAQ,YAAmB,CAAC;AAC5B,aAAQ,cAAmB,CAAC;AAC5B,aAAQ,WAAkB,CAAC;AAC3B,aAAQ,UAAU;AAKhB,aAAK,UAAU,WAAW,cAAc,UAAU,MAAM,QAAQ,IAAI;AACpE,aAAK,WAAW,MAAM,UAAU,QAAQ,CAAC;AACzC,aAAK,QAAQ;AACb,aAAK,iBAAiB;AAAA,MACxB;AAAA,MAEA,UAAU;AACR,aAAK,QAAQ,iBAAiB,UAAU,CAAC,MAAa;AACpD,gBAAM,QAAS,EAAE,QAA6B;AAE9C,cAAI,OAAO;AACT,gBAAI,WAAW,CAAC;AAChB,qBAAS,QAAQ,OAAO;AACtB,uBAAS,KAAK,IAAI;AAAA,YACpB;AACA,iBAAK,SAAS,QAAQ;AAAA,UACxB;AACA,gCAAsB,KAAK,OAAO,GAAG,MAAM,KAAK,QAAQ;AACxD,eAAK,MAAM;AAAA,QACb,CAAC;AAED,aAAK,SAAS,QAAQ,CAAC,SAAS;AAC9B,eAAK,OAAO,KAAK,WAAW;AAAA,QAC9B,CAAC;AAED,aAAK,YAAY,KAAK,QAAQ;AAAA,MAChC;AAAA,MAEA,cAAc;AACZ,cAAM,QAAQ,KAAK;AAEnB,cAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,8BAAsB,YAAY;AAAA;AAAA;AAAA;AAAA,qCAID,MAAM,QAAQ;AAAA,YACvC,iBAAS,WAAW,YAAY,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,MAKvC,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA;AAAA;AAKtC,aAAK,UAAU,sBAAsB,cAAc,UAAU,MAAM,QAAQ,IAAI;AAAA,MACjF;AAAA,MAEA,SAAS,OAAc;AACrB,YAAI,UAAU;AAEd,cAAM,WAAuB,CAAC;AAE9B,iBAAS,QAAQ,OAAO;AACtB,gBAAM,gBAAgB,KAAK,SAAS,OAAO,CAAC,aAAa,SAAS,YAAY,KAAK,QAAQ,SAAS,YAAY,KAAK,QAAQ,SAAS,gBAAgB,KAAK,YAAY;AAEvK,cAAI,cAAc,SAAS;AAAG;AAC9B,eAAK,WAAW;AAChB,eAAK,YAAY,KAAK,OAAO,IAAI;AAEjC,cAAI,cAAc;AAAA,YAChB,UAAU,KAAK;AAAA,YACf,MAAM,KAAK;AAAA,YACX,UAAU,KAAK;AAAA,YACf,cAAc,KAAK;AAAA,UACrB;AAEA,mBAAS,KAAK,WAAW;AACzB,oBAAU;AAAA,QACZ;AACA,YAAI,SAAS;AACX,eAAK,YAAY,QAAQ;AACzB,eAAK,SAAS,KAAK,GAAG,QAAQ;AAAA,QAChC;AAAA,MACF;AAAA,MAEQ,YAAY,UAAsB,UAAgC;AACxE,cAAM,kBAAkB,KAAK,WAAW,cAAc,mBAAmB;AAEzE,YAAI,iBAAiB;AACnB,cAAI,aAAa,MAAM;AACrB,4BAAgB,YAAY;AAAA,UAC9B;AAEA,gBAAM,mBAA6B,CAAC;AAEpC,mBAAS,QAAQ,CAAC,SAAS;AACzB,6BAAiB,KAAK;AAAA,2CACa,KAAK,IAAI;AAAA,YACxC,KAAK,SAAS,6CAA6C,iCAAiC;AAAA,oCACpE,KAAK,QAAQ;AAAA,eAClC;AAAA,UACT,CAAC;AAED,0BAAgB,mBAAmB,aAAa,iBAAiB,KAAK,EAAE,CAAC;AAEzE,mBAAS,QAAQ,CAAC,SAAS;AACzB,iBAAK,gBAAgB,MAAM,eAAe;AAC1C,iBAAK,kBAAkB,MAAM,eAAe;AAAA,UAC9C,CAAC;AAAA,QACH;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQQ,kBAAkB,MAAgB,iBAA0B;AAClE,cAAM,MAAM,gBAAgB,cAAc,cAAc,KAAK,IAAI,cAAc;AAC/E,YAAI,KAAK;AACP,cAAI,iBAAiB,SAAS,CAAC,QAAe;AAC5C,kBAAM,kBAAmB,IAAI,OAAmB,QAAQ,YAAY;AAEpE,gBAAI,iBAAiB;AACnB,oBAAM,UAAU,gBAAgB,aAAa,UAAU;AACvD,kBAAI,SAAS;AACX,sBAAM,MAAM,SAAS,SAAS,EAAE;AAChC,sBAAM,MAAM,KAAK,SAAS,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG;AAEzD,sBAAMC,QAAO,KAAK,SAAS,GAAG;AAE9B,oBAAIA,MAAK,KAAK,GAAG;AACf,2BAAS,OAAOA,MAAK,KAAK;AAC1B;AAAA,gBACF;AAEA,oBAAI,KAAK,MAAM,cAAc;AAC3B,uBAAK,MAAM,aAAa,KAAK,MAAM,EAAE,MAAMA,OAAM,OAAO,KAAK,MAAM,CAAC;AACpE;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQQ,gBAAgB,MAAgB,iBAA0B;AAChE,cAAM,MAAM,gBAAgB,cAAc,cAAc,KAAK,IAAI,YAAY;AAC7E,YAAI,KAAK;AACP,cAAI,iBAAiB,SAAS,CAAC,QAAe;AAC5C,kBAAM,kBAAmB,IAAI,OAAmB,QAAQ,YAAY;AAEpE,gBAAI,iBAAiB;AACnB,oBAAM,UAAU,gBAAgB,aAAa,UAAU;AACvD,kBAAI,SAAS;AACX,sBAAM,MAAM,SAAS,SAAS,EAAE;AAChC,sBAAM,YAAY,KAAK,SAAS,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG;AAE/D,sBAAM,aAAa,KAAK,SAAS,SAAS;AAE1C,qBAAK,SAAS,OAAO,WAAW,CAAC;AACjC,uBAAO,KAAK,YAAY,GAAG;AAC3B,gCAAgB,OAAO;AAEvB,oBAAI,WAAW,QAAQ;AACrB,uBAAK,UAAU,KAAK,WAAW,MAAM;AAAA,gBACvC;AAAA,cACF;AAAA,YACF;AACA,iBAAK,MAAM;AAAA,UACb,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MAEA,WAAW;AACT,eAAO;AAAA,UACL,YAAY,OAAO,OAAO,KAAK,WAAW;AAAA,UAC1C,WAAW,KAAK;AAAA,QAClB;AAAA,MACF;AAAA,MAEO,cAAc,OAAkB;AACrC,aAAK,WAAW,CAAC;AACjB,aAAK,cAAc,CAAC;AACpB,aAAK,YAAY,CAAC;AAClB,iBAAS,QAAQ,OAAO;AACtB,eAAK,OAAO,KAAK,WAAW;AAE5B,eAAK,SAAS,KAAK,IAAI;AAAA,QACzB;AAEA,aAAK,YAAY,KAAK,UAAU,IAAI;AAAA,MACtC;AAAA,MAEA,SAAS,OAAkB;AACzB,YAAU,QAAQ,KAAK,GAAG;AACxB,eAAK,cAAc,KAAK;AAAA,QAC1B;AACA,aAAK,QAAQ,QAAQ;AAAA,MACvB;AAAA,MAEA,QAAQ;AACN,aAAK,SAAS,EAAE;AAChB,aAAK,cAAc,CAAC,CAAC;AACrB,kCAA0B,KAAK,UAAU;AAAA,MAC3C;AAAA,MAEA,aAA+B;AAC7B,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,QAAa;AACX,cAAM,cAAc,cAAc,KAAK,SAAS,KAAK,OAAO,KAAK,QAAQ;AAEzE,uBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;AC9OA,IAOqB;AAPrB;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAEA,IAAqB,eAArB,cAA0C,OAAO;AAAA,MAG/C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,cAAM,UAAU,OAAO,UAAU;AACjC,YAAI,MAAM,UAAU;AAClB,eAAK,iBAAiB,MAAM;AAC5B,eAAK,QAAQ;AACb,eAAK,iBAAiB;AACtB,eAAK,eAAe;AAAA,QACtB,OAAO;AACL,eAAK,iBAAiB,CAAC;AAAA,QACzB;AAAA,MACF;AAAA,MAEA,UAAU;AACR,YAAI,KAAK,eAAe,SAAS;AAC/B,UAAC,KAAK,eAAe,QAAgB,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAAA,QAC7E;AAAA,MACF;AAAA,MAEA,OAAO,eAAwB;AAC7B,eAAO;AAAA,MACT;AAAA,MAEA,cAAc;AACZ,cAAM,QAAQ,KAAK;AAEnB,cAAM,gBAAsB,QAAQ,MAAM,QAAQ,IAAI,KAAW,SAAS,MAAM,QAAQ,IAAI,MAAM,WAAW,MAAM,SAAS;AAE5H,cAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,8BAAsB,YAAY;AAAA,UAC5B,aAAa;AAAA;AAAA,YAEX,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA,MAE9C;AAAA,MAEA,WAAW;AACT,YAAI,KAAK,eAAe,UAAU;AAChC,iBAAQ,KAAK,eAAe,SAAiB,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAAA,QACrF;AACA,eAAO;AAAA,MACT;AAAA,MAEA,SAAS,OAAY,iBAAiC;AACpD,YAAI,KAAK,eAAe,UAAU;AAChC,cAAI,oBAAoB,SAAS,KAAK,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;AAC9F,oBAAQ,KAAK,MAAM;AAAA,UACrB;AACA,UAAC,KAAK,eAAe,SAAiB,KAAK,MAAM,OAAO,KAAK,OAAO,KAAK,UAAU;AAAA,QACrF;AAEA,aAAK,MAAM,SAAS;AAAA,MACtB;AAAA,MAEA,QAAQ;AACN,aAAK,eAAe;AACpB,kCAA0B,KAAK,UAAU;AAAA,MAC3C;AAAA,MAEA,aAAa;AACX,YAAI,KAAK,eAAe,YAAY;AAClC,iBAAQ,KAAK,eAAe,WAAmB,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAAA,QACvF;AACA,eAAO;AAAA,MACT;AAAA,MAEA,QAAa;AACX,YAAI,KAAK,eAAe,OAAO;AAC7B,gBAAMC,eAAe,KAAK,eAAe,MAAc,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAE7F,yBAAe,KAAK,OAAO,KAAK,YAAYA,YAAW;AAEvD;AAAA,QACF;AACA,cAAM,cAAc,gBAAgB,KAAK,SAAS,GAAG,KAAK,KAAK;AAE/D,uBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAKA,QAAc;AACZ,YAAI,KAAK,eAAe,OAAO;AAC7B,UAAC,KAAK,eAAe,MAAc,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAAA,QAC3E;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACnGA,IAIqB;AAJrB;AAAA;AAAA;AACA;AAGA,IAAqB,cAArB,cAAyC,OAAO;AAAA,MAC9C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,cAAM,UAAU,OAAO,UAAU;AAAA,MACnC;AAAA,MAEO,UAAU;AAAA,MAAC;AAAA,MAElB,OAAO,eAAwB;AAC7B,eAAO;AAAA,MACT;AAAA,MAEA,cAAc;AACZ,eAAO;AAAA,MACT;AAAA,MAEA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,MAEA,SAAS,OAAkB;AAAA,MAAC;AAAA,MAE5B,QAAQ;AAAA,MAAC;AAAA,MAET,aAA0B;AACxB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,QAAa;AACX,eAAO;AAAA,MACT;AAAA,MAEO,cAAc,SAAkB;AACrC,YAAI,eAAe,KAAK,WAAW,cAAc,qBAAqB;AAEtE,YAAI,cAAc;AAChB,uBAAa,OAAO,OAAO;AAAA,QAC7B,OAAO;AACL,eAAK,WAAW,OAAO,OAAO;AAAA,QAChC;AAAA,MACF;AAAA,MAEA,QAAc;AAAA,MAAC;AAAA,IACjB;AAAA;AAAA;;;AC9CA,IAIqB;AAJrB;AAAA;AAAA;AACA;AAGA,IAAqB,eAArB,cAA0C,OAAO;AAAA,MAC/C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,cAAM,UAAU,OAAO,UAAU;AACjC,aAAK,MAAM,SAAS,MAAM;AAAA,MAC5B;AAAA,MAEA,UAAU;AAAA,MAAC;AAAA,MAEX,cAAc;AACZ,eAAO;AAAA,MACT;AAAA,MAEA,WAAW;AACT,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA,MAEA,SAAS,OAAkB;AACzB,aAAK,MAAM,SAAS;AAAA,MACtB;AAAA,MAEA,QAAQ;AACN,aAAK,SAAS,KAAK,MAAM,YAAY;AAAA,MACvC;AAAA,MAEA,aAAa;AACX;AAAA,MACF;AAAA,MAEA,QAAa;AACX,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;ACnCA,IAIqB;AAJrB;AAAA;AAAA;AACA;AAGA,IAAqB,eAArB,cAA0C,OAAO;AAAA,MAC/C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,cAAM,UAAU,OAAO,UAAU;AACjC,aAAK,QAAQ;AACb,aAAK,iBAAiB;AAAA,MACxB;AAAA,MAEA,UAAU;AACR,aAAK,WAAW,cAAc,IAAI,KAAK,MAAM,IAAI,EAAE,GAAG,iBAAiB,SAAS,CAAC,QAAQ;AACvF,cAAI,KAAK,MAAM,SAAS;AACtB,iBAAK,MAAM,QAAQ,KAAK,MAAM,KAAK,KAAK;AAAA,UAC1C;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MAEA,OAAO,eAAwB;AAC7B,eAAO;AAAA,MACT;AAAA,MAEA,cAAc;AACZ,cAAM,QAAQ,KAAK;AAEnB,cAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,8BAAsB,YAAY;AAAA,kCACJ,MAAM,IAAI,oBAAoB,MAAM,KAAK,aAAa,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA,MAE1H;AAAA,MAEA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,MAEA,SAAS,OAAkB;AAAA,MAAC;AAAA,MAE5B,QAAQ;AACN,aAAK,YAAY,KAAK;AAAA,MACxB;AAAA,MAEA,aAAa;AACX,eAAO;AAAA,MACT;AAAA,MAEA,QAAa;AACX,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;AClDA,IAOqB;AAPrB;AAAA;AAAA;AACA;AACA;AACA;AACA;AAGA,IAAqB,cAArB,cAAyC,OAAO;AAAA,MAI9C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,cAAM,UAAU,OAAO,UAAU;AAEjC,aAAK,kBAAkB,WAAW,cAAc,YAAY;AAE5D,aAAK,QAAQ;AACb,aAAK,iBAAiB;AACtB,aAAK,eAAe;AAAA,MACtB;AAAA,MAEA,UAAU;AACR,aAAK,QAAQ,iBAAiB,SAAS,CAAC,MAAW;AACjD,eAAK,gBAAgB,YAAY,EAAE,OAAO;AAE1C,eAAK,QAAQ,aAAa,SAAS,EAAE,OAAO,KAAK;AACjD,gCAAsB,KAAK,OAAO,GAAG,MAAM,KAAK,SAAS,CAAC;AAC1D,eAAK,MAAM;AAAA,QACb,CAAC;AAAA,MACH;AAAA,MAEA,cAAc;AACZ,cAAM,QAAQ,KAAK;AAEnB,cAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,8BAAsB,YAAY;AAAA;AAAA,sCAEA,MAAM,eAAe,MAAM,eAAe,CAAC;AAAA,wCACzC,MAAM,QAAQ,6CAA6C,MAAM,KAAK,OAAO,UAAU,MAAM,KAAK,OAAO;AAAA;AAAA,UAEvI,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA;AAI1C,aAAK,UAAU,sBAAsB,cAAc,UAAU,MAAM,QAAQ,IAAI;AAAA,MACjF;AAAA,MAEA,WAAW;AACT,eAAO,KAAK,QAAQ;AAAA,MACtB;AAAA,MAEA,SAAS,OAAY,iBAAiC;AACpD,YAAI,oBAAoB,SAAS,KAAK,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;AAC9F,eAAK,QAAQ,QAAQ,KAAK,MAAM;AAChC;AAAA,QACF;AACA,aAAK,MAAM,SAAS;AACpB,aAAK,QAAQ,QAAQ;AAAA,MACvB;AAAA,MAEA,QAAQ;AACN,aAAK,eAAe;AACpB,aAAK,YAAY,KAAK;AACtB,kCAA0B,KAAK,UAAU;AAAA,MAC3C;AAAA,MAEA,aAA0B;AACxB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,QAAa;AACX,cAAM,cAAc,gBAAgB,KAAK,SAAS,GAAG,KAAK,KAAK;AAE/D,uBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;ACzEA,OAAO,oBAAoB;AAL3B,IASqB;AATrB;AAAA;AAAA;AACA;AACA;AACA;AAIA;AAEA,IAAqB,aAArB,cAAwC,OAAO;AAAA,MAI7C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,cAAM,UAAU,OAAO,UAAU;AAEjC,aAAK,QAAQ;AACb,aAAK,iBAAiB;AACtB,aAAK,eAAe;AAAA,MACtB;AAAA,MAEA,UAAU;AACR,YAAI;AACJ,aAAK,MAAM,gBAAgB,OAAO,OAAO,CAAC,GAAG,KAAK,MAAM,aAAa;AACrE,YAAI,OAAO,KAAK,MAAM,cAAc,aAAa,aAAa;AAC5D,8BAAoB,OAAO,KAAK,MAAM,cAAc;AAAA,QACtD;AAEA,YAAU,YAAY,KAAK,MAAM,cAAc,IAAI,GAAG;AACpD,cAAI,KAAK,MAAM,cAAc,eAAe,KAAK,MAAM,cAAc,YAAY;AAC/E,iBAAK,MAAM,cAAc,OAAO,KAAK,MAAM,WAAW,QAAQ,QAAQ,EAAE;AAAA,UAC1E,OAAO;AACL,iBAAK,MAAM,cAAc,OAAO,KAAK,MAAM;AAAA,UAC7C;AAAA,QACF;AAEA,aAAK,MAAM,cAAc,WAAW,CAAC,IAAS,MAAa;AACzD,cAAI,mBAAmB;AACrB,8BAAkB,IAAI,CAAC;AAAA,UACzB;AAEA,eAAK,SAAS,EAAE;AAEhB,eAAK,MAAM;AAAA,QACb;AAEA,aAAK,UAAU,IAAI,eAAe,KAAK,SAAS,KAAK,MAAM,eAAe,CAAC,CAAQ;AAAA,MAGrF;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,cAAc;AACZ,cAAM,QAAQ,KAAK;AAEnB,cAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,8BAAsB,YAAY;AAAA;AAAA,iCAEL,MAAM,QAAQ;AAAA;AAAA,OAExC,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA;AAIvC,aAAK,UAAU,sBAAsB,cAAc,UAAU,MAAM,QAAQ,IAAI;AAAA,MACjF;AAAA,MAEA,WAAW;AACT,eAAO,KAAK,QAAQ;AAAA,MACtB;AAAA,MAEA,SAAS,OAAY,iBAAiC;AACpD,YAAI,oBAAoB,SAAS,KAAK,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;AAC9F,eAAK,QAAQ,QAAQ,KAAK,MAAM;AAChC;AAAA,QACF;AAEA,aAAK,MAAM,SAAS;AACpB,aAAK,QAAQ,QAAQ;AAAA,MACvB;AAAA,MAEA,QAAQ;AACN,aAAK,eAAe;AACpB,aAAK,YAAY,KAAK;AACtB,kCAA0B,KAAK,UAAU;AAAA,MAC3C;AAAA,MAEA,aAA+B;AAC7B,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,QAAa;AACX,cAAM,cAAc,gBAAgB,KAAK,SAAS,GAAG,KAAK,KAAK;AAE/D,uBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;ACrBA,SAAS,aAAa,KAAqB;AACzC,SAAO,IAAI,QAAQ,QAAQ,GAAG,EAAE,KAAK;AACvC;AApFA,IAKO;AALP;AAAA;AAAA;AACA;AACA;AAGA,IAAO,qBAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASb,WAAW,aAA0B,OAAkB,aAAgC,aAAmC;AACxH,cAAM,aAAa;AAAA,UACjB,eAAe,MAAM,gBAAgB,eAAe,eAAe;AAAA,UACnE,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,iBAAiB;AAAA,UACjB,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,eAAe;AAAA,QACjB;AAEA,cAAM,oBAAoB,aAAa,OAAO,cAAc,YAAY,MAAM,cAAc;AAC5F,YAAI,oBAAoB,aAAa,OAAO,cAAc,YAAY,MAAM,cAAc;AAC1F,cAAM,WAAW,aAAa,OAAO,YAAY,YAAY,MAAM;AAEnE,cAAM,QAAQ,MAAM,OAAO;AAC3B,cAAM,cAAc,qBAAqB,MAAM,OAAO,QAAQ,KAAK,qBAAqB,QAAQ,KAAK,qBAAqB;AAE1H,mBAAW,aAAa,GAAG,YAAY,CAAC,CAAC,IAAI,MAAM,OAAO,eAAe,EAAE;AAC3E,YAAI,OAAO;AACT,cAAU,SAAS,KAAK,GAAG;AACzB,uBAAW,cAAoB,SAAS,KAAK,IAAI,WAAW,KAAK,KAAK;AAAA,UACxE,OAAO;AACL,uBAAW,aAAmB,SAAS,KAAK,IAAI,KAAK,SAAS,KAAK;AAAA,UACrE;AAAA,QACF;AAEA,mBAAW,gBAAgB,aAAa,CAAC,SAAS,QAAQ,EAAE,SAAS,MAAM,OAAO,QAAQ,IAAI,MAAM,MAAM,WAAW;AAErH,cAAM,aAAa,MAAM,OAAO,cAAc;AAC9C,mBAAW,kBAAkB,YAAY,CAAC;AAE1C,YAAI,CAAC,eAAe,cAAc,CAAC,CAAC,OAAO,QAAQ,EAAE,SAAS,YAAY,CAAC,CAAC,GAAG;AAC7E,cAAU,SAAS,UAAU,GAAG;AAC9B,kBAAM,kBAAkB,CAAC;AACzB,gCAAoB,KAAK;AACzB,uBAAW,aAAa,UAAU,eAAe;AACjD,uBAAW,aAAa,WAAW,aAAa,aAAa,UAAU,iBAAiB;AAAA,UAC1F,OAAO;AACL,uBAAW,aAAa,SAAS,UAAU;AAAA,UAC7C;AAAA,QACF;AAEA,cAAM,aAAa,MAAM,OAAO,cAAc;AAC9C,YAAI,eAAe,CAAC,CAAC,QAAQ,OAAO,EAAE,SAAS,YAAY,CAAC,CAAC,GAAG;AAC9D,qBAAW,aAAa;AAAA,QAC1B,OAAO;AACL,cAAI,cAAc,CAAC,CAAC,OAAO,QAAQ,EAAE,SAAS,YAAY,CAAC,CAAC,GAAG;AAC7D,gBAAU,SAAS,UAAU,GAAG;AAC9B,yBAAW,aAAa,WAAW,aAAa,aAAa,UAAU,UAAU;AAAA,YACnF,OAAO;AACL,yBAAW,aAAa,SAAS,UAAU;AAAA,YAC7C;AAAA,UACF,OAAO;AACL,uBAAW,aAAa,WAAW,aAAa,aAAa;AAAA,UAC/D;AAAA,QACF;AAEA,mBAAW,aAAa,aAAa,WAAW,UAAU;AAC1D,mBAAW,aAAa,aAAa,WAAW,UAAU;AAC1D,mBAAW,aAAa,aAAa,WAAW,UAAU;AAE1D,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;AChFA,IAUqB;AAVrB;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAEA;AAEA,IAAqB,YAArB,cAAuC,OAAO;AAAA,MAG5C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,cAAM,UAAU,OAAO,UAAU;AAEjC,YAAI,MAAM,UAAU;AAClB,eAAK,iBAAiB,MAAM;AAAA,QAC9B,OAAO;AACL,eAAK,iBAAiB,CAAC;AAAA,QACzB;AAEA,aAAK,QAAQ;AAAA,MACf;AAAA,MAEA,UAAU;AACR,YAAI,KAAK,eAAe,SAAS;AAC/B,UAAC,KAAK,eAAe,QAAgB,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAAA,QAC7E;AAEA,aAAK,oBAAoB,iBAAiB,WAAW,EAAE,QAAQ,CAAC,YAAY;AAC1E,kBAAQ,iBAAiB,SAAS,CAAC,MAAW;AAC5C,iBAAK,kBAAkB,SAAS,CAAC;AAAA,UACnC,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQQ,kBAAkB,SAAkB,KAAU;AACpD,aAAK,UAAU,QAAQ,aAAa,aAAa,KAAK,EAAE;AAAA,MAC1D;AAAA,MAEO,UAAU,OAAqB;AACpC,cAAM,UAAU,KAAK,oBAAoB,cAAc,iBAAiB,KAAK,IAAI;AAEjF,YAAI,CAAC;AAAS;AAEd,YAAI,CAAC,QAAQ,UAAU,SAAS,QAAQ,GAAG;AACzC,mBAAS,QAAQ,SAAS,eAAe,YAAY,CAAC,GAAG;AACvD,iBAAK,UAAU,OAAO,QAAQ;AAAA,UAChC;AACA,kBAAQ,UAAU,IAAI,QAAQ;AAAA,QAChC;AAEA,cAAM,WAAW,KAAK,WAAW,cAAc,kBAAkB,KAAK,IAAI;AAE1E,YAAI,CAAC,UAAU,UAAU,SAAS,QAAQ,GAAG;AAC3C,mBAAS,QAAQ,UAAU,eAAe,YAAY,CAAC,GAAG;AACxD,iBAAK,UAAU,OAAO,QAAQ;AAAA,UAChC;AAEA,oBAAU,UAAU,IAAI,QAAQ;AAAA,QAClC;AAAA,MACF;AAAA,MAEA,OAAO,eAAwB;AAC7B,eAAO;AAAA,MACT;AAAA,MAEA,OAAO,mBAA4B;AACjC,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,cAAc;AACZ,cAAM,QAAQ,KAAK;AAEnB,cAAM,eAAe,KAAK,SAAS;AACnC,cAAM,UAAU,KAAK,SAAS,WAAW;AAEzC,cAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAGjF,YAAI,aAAa,mBAAW,WAAW,SAAS,KAAK;AAErD,8BAAsB,YAAY;AAAA;AAAA,mCAEH,WAAW,aAAa;AAAA;AAAA;AAAA;AAKvD,YAAI,MAAM,UAAU;AAClB,cAAI,YAAY;AAEhB,gBAAM,cAAc,KAAK,QAAQ,EAAE,WAAW;AAE9C,cAAIC,cAAyB,mBAAW,WAAW,aAAa,OAAO,MAAM,aAAa,YAAY,KAAK,CAAC;AAE5G,qBAAW,cAAc,MAAM,UAAU;AACvC,uBAAW,UAAU;AACrB,yBAAa,gBAAgB,UAAU;AACvC,gBAAI,KAAK,WAAW;AAEpB,gBAAI,cAAc,yBAAyB,YAAY,WAAW,EAAE,kBAAkB,EAAE,4BAA4B,WAAW,KAAK;AAEpI,gBAAI,kBAAkB,yBAAyB,YAAY,WAAW,EAAE,mBAAmB,EAAE,KAAK,OAAO,uBAAuB,UAAU,CAAC;AAAA;AAAA;AAI3I,kBAAM,aAAmB,kBAAkB,WAAW;AACtD,kBAAM,iBAAuB,kBAAkB,eAAe;AAE9D,wBAAY;AACZ,gBAAI,YAAY;AACd,oCAAsB,cAAc,aAAa,GAAG,YAAY,UAAU;AAAA,YAC5E;AAEA,gBAAI,gBAAgB;AAClB,oCAAsB,cAAc,cAAc,GAAG,YAAY,cAAc;AAE/E,kBAAI,WAAW,UAAU;AACvB,oBAAI,iBAAiB;AAAA,kBACnB,OAAO;AAAA,oBACL,OAAO,YAAY,MAAM,SAAS;AAAA,oBAClC,YAAY,YAAY,MAAM,cAAc;AAAA,oBAC5C,YAAY,YAAY,MAAM,cAAc;AAAA,oBAC5C,UAAU,YAAY,MAAM,YAAY;AAAA,kBAC1C;AAAA,kBACA,cAAc,YAAY;AAAA,kBAC1B,YAAY;AAAA,kBACZ,iBAAiB;AAAA,kBACjB,QAAQ,CAAC;AAAA,gBACX;AAEA,2BAAW,WAAW,IAAI,SAAS,SAAS,cAAc,KAAK,GAAG,cAAc;AAEhF,2BAAW,YAAY,IAAK,WAAW,YAAoB,YAAY,gBAAgB,cAAc,YAAY,GAAG,WAAW,QAAQ;AAEvI,2BAAW,SAAS,aAAa,cAAc,YAAYA,WAAU;AAAA,cACvE;AAAA,YACF;AAAA,UACF;AAEA,eAAK,sBAAsB;AAAA,QAC7B;AAAA,MACF;AAAA,MAEA,WAAgB;AACd,YAAI,KAAK,eAAe,UAAU;AAChC,iBAAQ,KAAK,eAAe,SAAiB,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAAA,QACrF;AAEA,YAAI,cAAc,CAAC;AAEnB,YAAI,eAAe,KAAK,QAAQ,EAAE,WAAW,EAAE;AAE/C,mBAAW,cAAc,KAAK,MAAM,UAAU;AAC5C,gBAAM,kBAAkB,WAAW,UAAU,SAAS,KAAK;AAC3D,cAAI,cAAc;AAChB,wBAAY,WAAW,UAAU,IAAI;AAAA,UACvC,OAAO;AACL,qBAAS,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,eAAe,GAAG;AACxD,0BAAY,GAAG,IAAI;AAAA,YACrB;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,MAEA,SAAS,OAAkB;AACzB,mBAAW,cAAc,KAAK,MAAM,UAAU;AAC5C,cAAI,gBAAgB,MAAM,WAAW,UAAU;AAE/C,cAAI,eAAe;AACjB,uBAAW,UAAU,SAAS,aAAa;AAAA,UAC7C;AAAA,QACF;AAAA,MACF;AAAA,MAEA,QAAQ;AAAA,MAAC;AAAA,MAET,aAAsB;AACpB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,QAAa;AACX,YAAI,KAAK,eAAe,OAAO;AAC7B,gBAAM,cAAe,KAAK,eAAe,MAAc,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAE7F,yBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD;AAAA,QACF;AAEA,cAAM,QAAQ,KAAK;AAEnB,mBAAW,cAAc,MAAM,UAAU;AACvC,gBAAM,cAAc,WAAW,UAAU,UAAU;AAEnD,cAAI,eAAe,YAAY,SAAS,GAAG;AACzC,kBAAM,YAAY,YAAY,CAAC;AAE/B,gBAAI,UAAU,SAAS;AACrB,wBAAU,UAAU,MAAM,KAAK,MAAM,QAAQ,OAAO,UAAU;AAE9D,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,QAAc;AAAA,MAAC;AAAA,IACjB;AAAA;AAAA;;;ACpOA,IAWI,OAEiB;AAbrB;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAKA,IAAI,QAAQ;AAEZ,IAAqB,aAArB,cAAwC,OAAO;AAAA,MAK7C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,cAAM,UAAU,OAAO,UAAU;AAHnC,aAAQ,gBAAgB,CAAC;AAKvB,YAAI,MAAM,UAAU;AAClB,eAAK,iBAAiB,MAAM;AAAA,QAC9B,OAAO;AACL,eAAK,iBAAiB,CAAC;AAAA,QACzB;AAEA,cAAM,kBAAkB;AAAA,UACtB,OAAO;AAAA,YACL,OAAO;AAAA,YACP,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,UAAU;AAAA,UACZ;AAAA,UACA,YAAY;AAAA,UACZ,iBAAiB;AAAA,UACjB,QAAQ,CAAC;AAAA,QACX;AAEA,aAAK,WAAW,IAAI,SAAS,SAAS,cAAc,KAAK,GAAG,eAAe;AAE3E,aAAK,QAAQ;AACb,aAAK,iBAAiB;AACtB,aAAK,eAAe;AAAA,MACtB;AAAA,MAEA,UAAU;AACR,aAAK,OAAO;AAEZ,YAAI,KAAK,eAAe,SAAS;AAC/B,UAAC,KAAK,eAAe,QAAgB,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAAA,QAC7E;AAEA,aAAK,WAAW,cAAc,sBAAsB,GAAG,iBAAiB,SAAS,CAAC,QAAQ;AACxF,eAAK,OAAO;AAAA,QACd,CAAC;AAAA,MACH;AAAA,MAEA,OAAO,eAAwB;AAC7B,eAAO;AAAA,MACT;AAAA,MAEA,OAAO,mBAA4B;AACjC,eAAO;AAAA,MACT;AAAA,MAEA,cAAc;AACZ,cAAM,QAAQ,KAAK;AAEnB,cAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,YAAI,gBAAgB,CAAC;AACrB,YAAI,mBAAmB,CAAC;AACxB,YAAI,iBAAiB,CAAC;AACtB,uBAAe,KAAK,EAAE;AAEtB,YAAI,MAAM,UAAU;AAClB,2BAAiB,KAAK,YAAY;AAElC,wBAAc,KAAK,MAAM;AAEzB,2BAAiB,KAAK,0BAA0B;AAChD,wBAAc,KAAK,MAAM;AACzB,cAAI,MAAM,aAAa,qBAAqB,MAAM;AAChD,0BAAc,KAAK,mHAAmH;AAAA,UACxI;AACA,wBAAc,KAAK,OAAO;AAE1B,qBAAW,cAAc,MAAM,UAAU;AACvC,6BAAiB,KAAK,qBAAqB,WAAW,OAAO,SAAS,GAAG,IAAI;AAC7E,0BAAc,KAAK,8BAA8B,WAAW,KAAK,OAAO;AAAA,UAC1E;AACA,2BAAiB,KAAK,aAAa;AACnC,wBAAc,KAAK,OAAO;AAAA,QAC5B;AAEA,8BAAsB,YAAY;AAAA;AAAA,QAE9B,eAAe,KAAK,EAAE,CAAC;AAAA,qCACM,MAAM,OAAO,YAAY,EAAE,mBAAmB,MAAM,aAAa,UAAU,MAAM;AAAA,iCACrF,iBAAiB,KAAK,EAAE,CAAC,UAAU,cAAc,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA,MAIxF;AAAA;AAAA;AAAA;AAAA,MAKA,OAAO,WAAuB;AAC5B,YAAI,cAAc,CAAC;AAEnB,cAAM,UAAU,KAAK,SAAS,WAAW;AACzC,cAAM,eAAe,KAAK,SAAS;AACnC,cAAM,aAAa,KAAK,MAAM;AAE9B,UAAE;AACF,YAAI,aAAa,CAAC;AAClB,oBAAY,KAAK,uBAAuB;AAExC,oBAAY,KAAK,MAAM;AACvB,YAAI,KAAK,MAAM,aAAa,wBAAwB,MAAM;AACxD,sBAAY,KAAK,uCAAuC,KAAK,qFAAqF;AAAA,QACpJ;AACA,oBAAY,KAAK,OAAO;AAExB,mBAAW,cAAc,KAAK,MAAM,UAAU;AAC5C,cAAI,aAAyB,mBAAW,WAAW,SAAS,YAAY,MAAM,IAAI;AAElF,cAAI,cAAoB,MAAM,CAAC,GAAG,UAAU;AAE5C,qBAAW,KAAK,WAAW;AAC3B,sBAAY,SAAS;AACrB,sBAAY,OAAO,YAAY,OAAO,MAAM;AAC5C,sBAAY,WAAW,aAAa,MAAY,gBAAgB,WAAW;AAE3E,uBAAa,gBAAgB,WAAW;AAExC,sBAAY,KAAK,WAAW,YAAY,QAAQ,oCAAoC,YAAY,WAAW,aAAa,EAAE,aAAa,WAAW,UAAU,eAAe;AAAA,QAC7K;AACA,oBAAY,KAAK,OAAO;AAExB,aAAK,cAAc,KAAK,IAAI;AAE5B,cAAM,gBAAsB,kBAAkB,YAAY,KAAK,EAAE,CAAC;AAElE,YAAI,eAAe;AACjB,eAAK,WAAW,cAAc,OAAO,GAAG,OAAO,aAAa;AAE5D,wBAAc,cAAc,qBAAqB,GAAG,iBAAiB,SAAS,CAAC,QAAQ;AACrF,iBAAK,UAAU,GAAG;AAAA,UACpB,CAAC;AAAA,QACH;AAEA,oBAAY,aAAa,CAAC;AAC1B,iBAAS,eAAe,YAAY;AAClC,sBAAY,YAAY,IAAK,YAAY,YAAoB,aAAa,eAAe,cAAc,IAAI,YAAY,QAAQ,EAAE,GAAG,KAAK,QAAQ;AAEjJ,cAAI,UAAU,YAAY,OAAO,IAAI,GAAG;AACtC,wBAAY,UAAU,SAAS,UAAU,YAAY,OAAO,IAAI,CAAC;AAAA,UACnE;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,UAAU,KAAkB;AAC1B,cAAM,SAAS,IAAI;AAEnB,cAAM,aAAa,OAAO,QAAQ,IAAI;AAEtC,YAAI,YAAY;AACd,cAAI,WAAW,eAAe,qBAAqB;AAAG;AAEtD,cAAI,SAAU,IAAI,eAA2B,aAAa,cAAc,KAAK;AAE7E,eAAK,gBAAgB,MAAM;AAC3B,qBAAW,OAAO;AAAA,QACpB;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,gBAAgB,QAAiB;AAC/B,YAAI,kBAAkB,CAAC;AACvB,YAAU,QAAQ,MAAM,GAAG;AACzB,mBAAS,OAAO,KAAK,eAAe;AAClC,8BAAkB,gBAAgB,OAAO,KAAK,cAAc,GAAG,CAAC;AAAA,UAClE;AACA,eAAK,gBAAgB,CAAC;AAAA,QACxB,WAAW,QAAQ;AACjB,gBAAM,YAAY,SAAS,QAAQ,EAAE;AACrC,4BAAkB,gBAAgB,OAAO,KAAK,cAAc,SAAS,CAAC;AACtE,iBAAO,KAAK,cAAc,SAAS;AAAA,QACrC;AAEA,iBAAS,eAAe,iBAAiB;AACvC,eAAK,SAAS,gBAAgB,EAAE,gBAAgB,YAAY,IAAI;AAAA,QAClE;AAAA,MACF;AAAA,MAEA,eAAqB;AACnB,aAAK,WAAW,cAAc,OAAO,GAAG,gBAAgB;AACxD,aAAK,gBAAgB;AAAA,MACvB;AAAA,MAEA,WAAW;AACT,YAAI,KAAK,eAAe,UAAU;AAChC,iBAAQ,KAAK,eAAe,SAAiB,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAAA,QACrF;AACA,YAAI,SAAS,CAAC;AACd,cAAM,WAAW,KAAK,MAAM;AAC5B,cAAM,iBAAiB,SAAS;AAChC,iBAAS,OAAO,KAAK,eAAe;AAClC,gBAAM,aAAa,KAAK,cAAc,GAAG;AAEzC,cAAI,UAAU,CAAC;AACf,mBAAS,WAAW,GAAG,WAAW,gBAAgB,YAAY;AAC5D,gBAAI,aAAa,SAAS,QAAQ;AAClC,oBAAQ,WAAW,IAAI,IAAI,KAAK,SAAS,cAAc,WAAW,QAAQ,EAAE,IAAI;AAAA,UAClF;AAEA,iBAAO,KAAK,OAAO;AAAA,QACrB;AACA,eAAO;AAAA,MACT;AAAA,MAEA,SAAS,OAAkB;AACzB,aAAK,MAAM,SAAS;AAEpB,YAAI,WAAkB,CAAC;AACvB,YAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,qBAAW;AAAA,QACb,OAAO;AACL,cAAU,cAAc,KAAK,GAAG;AAC9B,qBAAS,KAAK,KAAK;AAAA,UACrB;AAAA,QACF;AAEA,aAAK,aAAa;AAElB,iBAAS,aAAa,UAAU;AAC9B,eAAK,OAAO,SAAS;AAAA,QACvB;AAAA,MACF;AAAA,MAEA,QAAQ;AACN,aAAK,eAAe;AACpB,kCAA0B,KAAK,UAAU;AAAA,MAC3C;AAAA,MAEA,aAAa;AACX,YAAI,KAAK,eAAe,YAAY;AAClC,iBAAQ,KAAK,eAAe,WAAmB,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAAA,QACvF;AACA,eAAO;AAAA,MACT;AAAA,MAEA,QAAa;AACX,YAAI,KAAK,eAAe,OAAO;AAC7B,gBAAMC,eAAe,KAAK,eAAe,MAAc,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAE7F,yBAAe,KAAK,OAAO,KAAK,YAAYA,YAAW;AAEvD;AAAA,QACF;AAEA,cAAM,cAAc,KAAK,SAAS,UAAU;AAE5C,YAAI,YAAY,SAAS,GAAG;AAC1B,gBAAM,YAAY,YAAY,CAAC;AAE/B,cAAI,UAAU,SAAS;AACrB,sBAAU,UAAU,MAAM,KAAK,MAAM,QAAQ,OAAO,UAAU;AAE9D,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,QAAc;AAAA,MAAC;AAAA,IACjB;AAAA;AAAA;;;AChSA,IAmBa,OAiBA,cAEA,iBA4CA;AAlFb;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIO,IAAM,QAAQ;AAAA,MACnB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,eAAe;AAAA,MACf,KAAK;AAAA,MACL,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,uBAAuB;AAAA,MACvB,uBAAuB;AAAA,MACvB,0BAA0B;AAAA,MAC1B,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,WAAW;AAAA,IACb;AAEO,IAAM,eAAe;AAErB,IAAM,kBAAuB;AAAA,MAClC,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,UAAU;AAAA,MACV,WAAW;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAwBO,IAAM,uBAAuC;AAAA,MAClD,YAAY,CAAC,OAAO,UAAU;AAAA,MAC9B,cAAc,CAAC,OAAO,YAAY;AAAA,MAClC,aAAa,CAAC,OAAO,WAAW;AAAA,MAChC,aAAa,CAAC,IAAI,UAAU;AAAA,MAC5B,eAAe,CAAC,IAAI,YAAY;AAAA,MAChC,cAAc,CAAC,IAAI,WAAW;AAAA,MAC9B,eAAe,CAAC,SAAS,WAAW;AAAA,MACpC,gBAAgB,CAAC,SAAS,YAAY;AAAA,MACtC,cAAc,CAAC,SAAS,UAAU;AAAA,MAClC,eAAe,CAAC,UAAU,UAAU;AAAA,MACpC,iBAAiB,CAAC,UAAU,YAAY;AAAA,MACxC,gBAAgB,CAAC,UAAU,WAAW;AAAA,IACxC;AACA,yBAAqB,KAAK,IAAI,qBAAqB,UAAU;AAC7D,yBAAqB,OAAO,IAAI,qBAAqB,aAAa;AAClE,yBAAqB,MAAM,IAAI,qBAAqB,WAAW;AAC/D,yBAAqB,QAAQ,IAAI,qBAAqB,aAAa;AAAA;AAAA;;;ACqBnE,SAAS,QAAQ,WAAmB,UAAuB;AACzD,SAAO,UAAU,QAAQ,mCAAmC,CAAC,OAAO,QAAQ;AAC1E,WAAO,OAAO,SAAS,GAAG,MAAM,cAAc,SAAS,GAAG,IAAI;AAAA,EAChE,CAAC;AACH;AA5HA,IAKI,eAyCE,UAgFC;AA9HP;AAAA;AAAA;AAGA;AAEA,IAAI,gBAAyB;AAAA,MAC3B,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,QAAQ;AAAA,QACN,WAAW;AAAA,QACX,WAAW;AAAA,QACX,SAAS;AAAA,MACX;AAAA,MACA,QAAQ;AAAA,QACN,KAAK;AAAA,QACL,SAAS;AAAA,QACT,kBAAkB;AAAA,QAClB,SAAS;AAAA,QACT,kBAAkB;AAAA,QAClB,SAAS;AAAA,QACT,qBAAqB;AAAA,QACrB,qBAAqB;AAAA,QACrB,wBAAwB;AAAA,MAC1B;AAAA,MACA,QAAQ;AAAA,QACN,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,KAAK;AAAA,QACL,OAAO;AAAA,QACP,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,eAAe;AAAA,QACf,cAAc;AAAA,QACd,sBAAsB;AAAA,QACtB,6BAA6B;AAAA,MAC/B;AAAA,IACF;AAQA,IAAM,WAAN,MAAe;AAAA,MAAf;AACE,aAAQ,OAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQjB,IAAI,MAAgB;AACzB,aAAK,OAAO,OAAO,OAAO,CAAC,GAAG,eAAe,IAAI;AAAA,MACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASO,WAAW,YAAyB;AACzC,eAAQ,KAAK,KAAa,UAAU;AAAA,MACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUO,aAAa,OAAkB,aAAoC;AACxE,YAAI,gBAAgB;AAEpB,YAAI,iBAA2B,CAAC;AAEhC,YAAI,YAAY,QAAQ;AACtB,0BAAiB,KAAK,KAAK,OAAe,YAAY,MAAM;AAC5D,yBAAe,KAAK,aAAa;AAAA,QACnC;AAEA,SAAC,YAAY,cAAc,CAAC,GAAG,QAAQ,CAAC,eAAe;AACrD,cAAI,eAAe,MAAM,UAAU;AACjC,4BAAgB,QAAQ,KAAK,KAAK,UAAU,KAAK;AACjD,2BAAe,KAAK,aAAa;AAAA,UACnC;AAEA,cAAI,MAAM,cAAc,YAAY,MAAM,cAAc,SAAS;AAC/D,4BAAiB,KAAK,KAAK,OAAe,UAAU;AACpD,2BAAe,KAAK,aAAa;AAAA,UACnC,OAAO;AACL,4BAAiB,KAAK,KAAK,OAAe,UAAU;AACpD,2BAAe,KAAK,aAAa;AAAA,UACnC;AAAA,QACF,CAAC;AAED,cAAM,YAAsB,CAAC;AAE7B,cAAM,WAAW,OAAO,OAAO,CAAC,GAAG,EAAE,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,GAAG,MAAM,IAAI;AACvF,uBAAe,QAAQ,CAAC,cAAc;AACpC,cAAI,WAAW;AACb,sBAAU,KAAK,QAAQ,WAAW,QAAQ,CAAC;AAAA,UAC7C;AAAA,QACF,CAAC;AAED,YAAI,YAAY,WAAW;AACzB,oBAAU,KAAK,YAAY,UAAU,OAAO;AAAA,QAC9C;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAQA,IAAO,mBAAQ,IAAI,SAAS;AAAA;AAAA;;;AC9H5B,IAMa;AANb;AAAA;AAAA;AAGA;AACA;AAEO,IAAM,cAAc,CAAC,UAA6B;AACvD,UAAI;AACJ,UAAI,MAAM,YAAY;AACpB,iBAAS,gBAAgB,MAAM,UAAU;AAAA,MAC3C;AAEA,UAAI,WAAW,OAAO,aAAa,MAAM,SAAS,CAAO,YAAY,MAAM,IAAI,IAAI;AACjF,eAAO;AAAA,MACT;AAEA,UAAU,YAAY,MAAM,IAAI,GAAG;AACjC,YAAI,MAAM,UAAU;AAClB,iBAAO,gBAAgB,OAAO;AAAA,QAChC,OAAO;AACL,iBAAO,gBAAgB,QAAQ;AAAA,QACjC;AAAA,MACF;AAEA,aAAO,gBAAgB,MAAM;AAAA,IAC/B;AAAA;AAAA;;;AC2QA,SAAS,aAAa,UAAe,WAAsB,cAAwB;AACjF,MAAU,iBAAiB,SAAS,GAAG;AACrC,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,UAAU,UAAU,SAAS;AAEhD,MAAI,UAAU,eAAe,QAAQ;AACnC,UAAM,cAAc,WAAW,YAAY;AAE3C,aAAS,UAAU,UAAU,IAAI;AACjC,aAAS,UAAU,aAAa,WAAW,IAAI,WAAW,WAAW;AAAA,EACvE,OAAO;AACL,QAAI,iBAAiB,MAAM;AACzB,UAAU,UAAU,SAAS,GAAG;AAC9B,iBAAS,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AACnD,mBAAS,GAAG,IAAI;AAAA,QAClB;AAAA,MACF,OAAO;AACL,YAAI,CAAO,QAAQ,UAAU,IAAI,GAAG;AAClC,mBAAS,UAAU,IAAI,IAAI;AAAA,QAC7B;AAAA,MACF;AAAA,IACF,OAAO;AACL,eAAS,UAAU,UAAU,IAAI;AAAA,IACnC;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,iBAAiB,UAAoB,WAAsB,cAAwB;AAC1F,MAAU,iBAAiB,SAAS,GAAG;AACrC,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,UAAU,UAAU,SAAS;AAEhD,MAAI,UAAU,eAAe,QAAQ;AACnC,UAAM,cAAc,WAAW,YAAY;AAC3C,aAAS,OAAO,UAAU,UAAU;AACpC,aAAS,cAAc,aAAa;AAClC,eAAS,OAAO,UAAU,YAAY,UAAU;AAAA,IAClD;AAEA,aAAS,IAAI,UAAU,aAAa,aAAa,WAAW,WAAW,CAAC;AAAA,EAC1E,OAAO;AACL,QAAI,iBAAiB,MAAM;AACzB,UAAU,UAAU,SAAS,GAAG;AAC9B,iBAAS,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AACnD,mBAAS,IAAI,KAAK,KAAY;AAAA,QAChC;AAAA,MACF,OAAO;AACL,YAAI,CAAO,QAAQ,UAAU,IAAI,GAAG;AAClC,mBAAS,IAAI,UAAU,YAAY,UAAU;AAAA,QAC/C;AAAA,MACF;AAAA,IACF,OAAO;AACL,eAAS,IAAI,UAAU,YAAY,UAAU;AAAA,IAC/C;AAAA,EACF;AAEA,SAAO;AACT;AAnWA,IAgBqB;AAhBrB;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAWA,IAAqB,eAArB,MAAkC;AAAA,MAahC,YAAY,UAAkB,MAAgB;AAZ9C,aAAQ,WAAW;AAEnB,aAAQ,eAA+B,CAAC;AAExC,aAAQ,aAA8B,CAAC;AAEvC,aAAQ,kBAA4B,CAAC;AAOnC,aAAK,cAAc,GAAG,YAAY,IAAU,YAAY,QAAQ,CAAC;AACjE,aAAK,OAAO;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQO,SAAS,OAAkB;AAChC,QAAM,gBAAgB,KAAK;AAC3B,aAAK,YAAY;AACjB,cAAM,OAAO,GAAG,KAAK,WAAW,IAAI,KAAK,QAAQ;AACjD,cAAM,aAAa,MAAM,QAAQ,MAAM;AACvC,aAAK,WAAW,MAAM,UAAU,IAAI,MAAM;AAC1C,aAAK,aAAa,MAAM,IAAI,IAAI;AAChC,cAAM,cAAc,YAAY,KAAK;AAErC,YAAI,MAAM,aAAa;AACrB,eAAK,gBAAgB,KAAK,MAAM,IAAI;AAAA,QACtC;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASO,aAAa,WAA8B;AAChD,eAAO,KAAK,aAAa,KAAK,WAAW,SAAS,CAAC;AAAA,MACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASO,IAAI,UAA6B;AACtC,eAAO,KAAK,aAAa,QAAQ;AAAA,MACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASO,aAAa,WAA4B;AAC9C,YAAI,KAAK,WAAW,SAAS,KAAK,KAAK,aAAa,KAAK,WAAW,SAAS,CAAC,GAAG;AAC/E,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQO,kBAAkC;AACvC,eAAO,KAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQO,gBAAgB,WAAmB;AACxC,eAAO,KAAK,aAAa,KAAK,WAAW,SAAS,CAAC;AAAA,MACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASO,iBAAiB,WAAgB,iBAA0B;AAChE,cAAM,eAAe,KAAK,KAAK,WAAW,EAAE;AAE5C,YAAI,oBAAoB,MAAM;AAC5B,mBAAS,CAAC,KAAK,SAAS,KAAK,OAAO,QAAQ,KAAK,YAAY,GAAG;AAC9D,wBAAY,aAAa,WAAW,WAAW,YAAY;AAAA,UAC7D;AACA,iBAAO;AAAA,QACT;AAEA,eAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,mBAAS,CAAC,KAAK,SAAS,KAAK,OAAO,QAAQ,KAAK,YAAY,GAAG;AAC9D,gBAAI,CAAC,UAAU,UAAU,aAAa,GAAG;AACvC;AAAA,YACF;AAEA,gBAAI,aAAa,KAAK,mBAAmB,WAAW,IAAI;AAExD,gBAAI,eAAe,MAAM;AACvB,qBAAO,IAAI,MAAM,WAAW,SAAS,EAAE,OAAO,WAAW,CAAC,CAAC;AAC3D;AAAA,YACF;AAEA,wBAAY,aAAa,WAAW,WAAW,YAAY;AAAA,UAC7D;AAEA,kBAAQ,SAAS;AAAA,QACnB,CAAC;AAAA,MACH;AAAA,MAEO,iBAAiB,WAAgB,iBAA0B;AAChE,YAAI,oBAAoB,MAAM;AAC5B,cAAI,QAAQ,IAAI,SAAS;AAEzB,mBAAS,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,SAAS,GAAG;AAClD,kBAAM,IAAI,KAAK,KAAY;AAAA,UAC7B;AAEA,mBAAS,CAAC,KAAK,SAAS,KAAK,OAAO,QAAQ,KAAK,YAAY,GAAG;AAC9D,6BAAiB,OAAO,WAAW,UAAU,UAAU,SAAS,CAAC;AAAA,UACnE;AAEA,iBAAO;AAAA,QACT;AAEA,eAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,cAAI,QAAQ,IAAI,SAAS;AAEzB,mBAAS,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,SAAS,GAAG;AAClD,kBAAM,IAAI,KAAK,KAAY;AAAA,UAC7B;AAEA,mBAAS,CAAC,KAAK,SAAS,KAAK,OAAO,QAAQ,KAAK,YAAY,GAAG;AAC9D,gBAAI,CAAC,UAAU,UAAU,aAAa,GAAG;AACvC;AAAA,YACF;AAEA,gBAAI,aAAa,KAAK,mBAAmB,WAAW,IAAI;AAExD,gBAAI,eAAe,MAAM;AACvB,qBAAO,IAAI,MAAM,WAAW,SAAS,EAAE,OAAO,WAAW,CAAC,CAAC;AAC3D;AAAA,YACF;AAEA,6BAAiB,OAAO,WAAW,UAAU,UAAU,SAAS,CAAC;AAAA,UACnE;AAEA,kBAAQ,KAAK;AAAA,QACf,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQO,sBAAsB,OAAkB;AAC7C,YAAI,SAAS;AAEb,eAAO,OAAO,WAAW,aAAa;AACpC,cAAI,CAAC,KAAK,iBAAiB,MAAM,GAAG;AAClC,mBAAO;AAAA,UACT;AAEA,mBAAS,OAAO;AAAA,QAClB;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQO,iBAAiB,OAAkB;AACxC,YAAI,CAAC,KAAK,gBAAgB,SAAS,MAAM,IAAI,GAAG;AAC9C,iBAAO;AAAA,QACT;AAEA,YAAI,WAAW;AAEf,YAAI,MAAM,YAAY,QAAQ;AAC5B,qBAAW,MAAM,YAAY,OAAO,KAAK,MAAM,KAAK;AAAA,QACtD,OAAO;AACL,cAAI,MAAM,YAAY,OAAO;AAC3B,kBAAM,YAAY,KAAK,aAAa,MAAM,YAAY,KAAK;AAE3D,gBAAI,WAAW;AACb,kBAAI,MAAM,YAAY,MAAM,UAAU,UAAU,SAAS,GAAG;AAC1D,2BAAW;AAAA,cACb;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,iBAAiB;AACtB,aAAK,gBAAgB,QAAQ,CAAC,aAAa;AACzC,gBAAM,YAAY,KAAK,aAAa,QAAQ;AAE5C,cAAI,WAAW,KAAK,iBAAiB,SAAS;AAE9C,cAAI,UAAU;AACZ,sBAAU,UAAU,KAAK;AAAA,UAC3B,OAAO;AACL,sBAAU,UAAU,KAAK;AAAA,UAC3B;AAAA,QACF,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQO,mBAAmB,WAAsB,WAAgC;AAC9E,YAAI,CAAC,KAAK,sBAAsB,SAAS,GAAG;AAC1C,iBAAO;AAAA,QACT;AAEA,cAAM,aAAa,UAAU;AAC7B,YAAI,aAAa,WAAW,MAAM;AAElC,YAAI,eAAe;AAAM,iBAAO;AAEhC,YAAI,WAAW;AACb,qBAAW,MAAM;AAAA,QACnB;AACA,qBAAa;AACb,YAAU,YAAY,WAAW,OAAO,GAAG;AACzC,qBAAW,UAAU,iBAAS,aAAa,WAAW,UAAU,EAAE,CAAC;AAAA,QACrE;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;AC5RA,IAgBqB;AAhBrB;AAAA;AAAA;AAEA;AAGA;AAWA,IAAqB,eAArB,MAAkC;AAAA,MAUhC,YAAY,UAAoB,aAAsB,cAA4B;AAFlF,aAAQ,eAAyB,CAAC;AAGhC,aAAK,WAAW;AAChB,aAAK,UAAU,SAAS,WAAW;AACnC,aAAK,cAAc;AAEnB,aAAK,eAAe;AAAA,MACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,OAAO,OAAkB;AAC9B,YAAI,KAAK,iBAAiB,KAAK,GAAG;AAChC;AAAA,QACF;AAEA,aAAK,eAAe,CAAC;AAErB,aAAK,eAAe,KAAK;AAAA,MAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQO,eAAe,OAAwB;AAC5C,YAAI,gBAAgB,KAAK,YAAY,KAAK;AAE1C,YAAI,aAAyB,mBAAW,WAAW,KAAK,SAAS,OAAO,MAAM,aAAa;AAE3F,aAAK,gBAAgB,KAAK;AAE1B,cAAM,aAAmB,kBAAkB;AAAA,wCACP,WAAW,UAAU,SAAS,MAAM,IAAI;AAAA,YACpE,gBAAgB,KAAK,wBAAwB,WAAW,UAAU,IAAI,WAAW,eAAe,YAAY,MAAM,SAAS,EAAE,YAAY,WAAW,UAAU,KAAK,KAAK,iBAAiB,KAAK,CAAC,QAAQ;AAAA;AAAA,2CAExK,WAAW,UAAU,IAAI,MAAM,WAAW,aAAa,EAAE,YAAY,WAAW,UAAU;AAAA;AAAA,KAEhI;AAED,YAAI,YAAY;AACd,eAAK,YAAY,OAAO,UAAU;AAClC,eAAK,YAAY,OAAO,UAAU;AAElC,cAAI,MAAM,UAAU;AAClB,iBAAK,cAAc,OAAO,UAAU;AAAA,UACtC;AAAA,QACF;AAAA,MACF;AAAA,MAEO,YAAY,OAAkB,SAAwB;AAC3D,cAAM,YAAY,IAAK,MAAM,YAAoB,OAAO,SAAS,KAAK,QAAQ;AAAA,MAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASO,cAAc,OAAkB,kBAAoC;AACzE,YAAI,cAAyB;AAC7B,YAAI,YAAY;AAChB,YAAI,eAAe;AAEnB,YAAI,CAAE,MAAM,YAAoB,iBAAiB,GAAG;AAClD;AAAA,QACF;AAEA,cAAM,aAAa,SAAS,cAAc,KAAK;AAC/C,mBAAW,UAAU,IAAI,UAAU,iBAAiB,iBAAiB,EAAE;AAEvE,YAAI,MAAM;AAEV,mBAAW,cAAc,MAAM,UAAU;AACvC,cAAU,QAAQ,UAAU,GAAG;AAC7B,kBAAM,IAAI,MAAM,kBAAkB,MAAM,UAAU,qBAAqB,GAAG,aAAa,UAAU,GAAG;AAAA,UACtG;AAEA,qBAAW,UAAU;AACrB,YAAE;AAEF,cAAI,KAAK,iBAAiB,UAAU,GAAG;AACrC;AAAA,UACF;AAEA,eAAK,gBAAgB,UAAU;AAE/B,cAAI,WAAW;AACb,0BAAc;AAAA,UAChB;AAEA,cAAI,gBAAgB,KAAK,YAAY,UAAU;AAE/C,cAAI;AAEJ,cAAI,gBAAgB;AACpB,cAAI,eAAe;AACjB,8BAAkB,mBAAW,WAAW,KAAK,SAAS,YAAY,aAAa,CAAC,YAAY;AAC5F,4BAAgB,eAAe,+BAA+B,gBAAgB,UAAU,YAAY,gBAAgB,UAAU,cAAc;AAAA,UAC9I,OAAO;AACL,8BAAkB,mBAAW,WAAW,KAAK,SAAS,YAAY,aAAa,KAAK;AACpF,4BAAgB,yBAAyB,gBAAgB,UAAU,IAAI,gBAAgB,eAAe,YAAY,WAAW,SAAS,EAAE,YAAY,gBAAgB,UAAU,KAAK,KAAK,iBAAiB,UAAU,CAAC;AAAA,UACtN;AAEA,gBAAM,eAAqB,kBAAkB,0BAA0B,gBAAgB,UAAU,YAAY,gBAAgB,UAAU,SAAS,WAAW,IAAI;AAAA,UAC3J,aAAa;AAAA,0CACmB,gBAAgB,UAAU,IAAI,WAAW,WAAW,aAAa,EAAE,YAAY,gBAAgB,UAAU;AAAA,aACtI;AAEP,cAAI,cAAc;AAChB,iBAAK,YAAY,YAAY,YAAY;AACzC,uBAAW,OAAO,YAAY;AAE9B,gBAAI,WAAW,UAAU;AACvB,mBAAK,cAAc,YAAY,WAAW,WAAW,kBAAkB,gBAAgB;AAAA,YACzF;AAAA,UACF;AACA,cAAI,CAAC,eAAe;AAClB,2BAAe;AAAA,UACjB;AAEA,sBAAY;AAAA,QACd;AAEA,cAAM,UAAU,cAAc,UAAU;AAAA,MAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQO,iBAAiB,OAAkB;AACxC,cAAM,mBAAmB,MAAM,WAAW,mCAAmC;AAC7E,cAAM,kBAAwB,QAAQ,MAAM,OAAO,IAAI,KAAK,mDAAmD,MAAM,OAAO;AAE5H,eAAO,GAAG,MAAM,SAAS,EAAE,IAAI,eAAe,IAAI,gBAAgB;AAAA,MACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQO,YAAY,OAA2B;AAC5C,eAAO,MAAM,OAAO,aAAmB,YAAY,MAAM,KAAK;AAAA,MAChE;AAAA,MAEO,iBAAiB,OAAkB;AACxC,YAAU,cAAc,KAAK,GAAG;AAC9B,eAAK,aAAa,SAAS,KAAK;AAChC,gBAAM,YAAY,IAAK,MAAM,YAAoB,OAAO,MAAM,KAAK,QAAQ;AAE3E,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,gBAAgB,OAAkB;AACvC,YAAI,CAAO,QAAQ,MAAM,IAAI,KAAK,KAAK,aAAa,aAAa,MAAM,IAAI,GAAG;AAC5E,gBAAM,IAAI,MAAM,yBAAyB,MAAM,IAAI,GAAG;AAAA,QACxD;AAEA,aAAK,aAAa,SAAS,KAAK;AAChC,aAAK,aAAa,KAAK,MAAM,IAAI;AAAA,MACnC;AAAA,IACF;AAAA;AAAA;;;AC9MA,IAeM,gBAuBA,aAEA,cAEF,eAOiB;AAjDrB;AAAA;AAAA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAKA,IAAM,iBAAiB;AAAA,MACrB,OAAO;AAAA,QACL,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,UAAU;AAAA,MACZ;AAAA,MACA,MAAM;AAAA,MACN,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,QAAQ,CAAC;AAAA,IACX;AAWA,IAAM,cAA2B,CAAC;AAElC,IAAM,eAAe;AAErB,IAAI,gBAAgB;AAOpB,IAAqB,WAArB,MAAqB,UAAS;AAAA,MAgB5B,YAAY,aAAsB,SAAsBC,UAAmB;AAJ3E,aAAQ,YAAiB,CAAC;AAiE1B;AAAA;AAAA;AAAA;AAAA;AAAA,aAAO,aAAa,CAAC,SAA0B;AAC7C,eAAK,QAAQ,OAAO;AACpB,eAAK,YAAY,aAAa,gBAAgB,IAAI;AAAA,QACpD;AAKA;AAAA;AAAA;AAAA,aAAO,YAAY,MAAM;AACvB,gBAAM,WAAW,KAAK,aAAa,gBAAgB;AACnD,qBAAW,OAAO,UAAU;AAC1B,kBAAM,YAAY,SAAS,GAAG;AAC9B,kBAAM,aAAa,UAAU;AAE7B,gBAAI,cAAc,OAAO,WAAW,UAAU,YAAY;AACxD,yBAAW,MAAM;AAAA,YACnB;AAAA,UACF;AACA,eAAK,YAAY,CAAC;AAClB,eAAK,eAAe;AAAA,QACtB;AAMA;AAAA;AAAA;AAAA;AAAA,aAAO,aAAa,CAAC,cAAsB;AACzC,eAAK,aAAa,aAAa,SAAS,EAAE,UAAU,MAAM;AAC1D,eAAK,UAAU,SAAS,IAAI;AAC5B,eAAK,eAAe;AAAA,QACtB;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAAO,gBAAgB,CAAC,cAAsB;AAC5C,gBAAM,QAAQ,KAAK,aAAa,aAAa,SAAS;AAEtD,cAAI,OAAO;AACT,mBAAO,MAAM,UAAU,SAAS;AAAA,UAClC;AACA,iBAAO;AAAA,QACT;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA,aAAO,WAAW,CAAC,YAA0B;AAC3C,iBAAO,KAAK,aAAa,iBAAiB,KAAK,WAAW,OAAO;AAAA,QACnE;AAEA,aAAO,mBAAmB,CAAC,YAA0B;AACnD,iBAAO,KAAK,aAAa,iBAAiB,KAAK,WAAW,OAAO;AAAA,QACnE;AAMA;AAAA;AAAA;AAAA;AAAA,aAAO,WAAW,CAAC,QAAa,cAAoC;AAClE,cAAI,cAAc,OAAO;AACvB,iBAAK,UAAU;AAAA,UACjB;AAEA,iBAAO,KAAK,MAAM,EAAE,QAAQ,CAAC,cAAc;AACzC,iBAAK,eAAe,WAAW,OAAO,SAAS,CAAC;AAAA,UAClD,CAAC;AACD,eAAK,eAAe;AAAA,QACtB;AAEA,aAAO,gBAAgB,CAAC,WAAmB,UAAe;AACxD,eAAK,eAAe,WAAW,KAAK;AACpC,eAAK,eAAe;AAAA,QACtB;AAWA,aAAO,gBAAgB,CAAC,WAAmB,WAAgB;AACzD,gBAAM,QAAQ,KAAK,aAAa,aAAa,SAAS;AAEtD,cAAI,OAAO;AACT,mBAAO,MAAM,UAAU,cAAc,MAAM;AAAA,UAC7C;AAAA,QACF;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA,aAAO,WAAW,CAAC,UAAqB;AACtC,eAAK,QAAQ,OAAO,KAAK,KAAK;AAC9B,eAAK,aAAa,OAAO,KAAK;AAC9B,eAAK,eAAe;AAAA,QACtB;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA,aAAO,cAAc,CAAC,cAAsB;AAC1C,gBAAM,UAAU,KAAK,gBAAgB,SAAS;AAE9C,cAAI,WAAW,MAAM;AACnB,oBAAQ,QAAQ,SAAS,GAAG,OAAO;AAAA,UACrC;AAEA,eAAK,aAAa,gBAAgB,SAAS;AAAA,QAC7C;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA,aAAO,cAAc,MAAe;AAClC,gBAAM,SAAS,KAAK,UAAU;AAE9B,iBAAO,OAAO,SAAS;AAAA,QACzB;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA,aAAO,YAAY,MAAa;AAC9B,cAAI,cAAc,CAAC;AACnB,cAAI,gBAAgB,KAAK,QAAQ,cAAc;AAC/C,cAAI,YAAY;AAEhB,gBAAM,WAAW,KAAK,aAAa,gBAAgB;AACnD,qBAAW,YAAY,UAAU;AAC/B,kBAAM,YAAY,SAAS,QAAQ;AAEnC,gBAAI,aAAa,KAAK,aAAa,mBAAmB,WAAW,aAAa;AAE9E,gBAAI,eAAe,MAAM;AACvB,8BAAgB;AAEhB,kBAAU,WAAW,SAAS,GAAG;AAC/B,8BAAc,YAAY,OAAO,UAAU;AAAA,cAC7C,OAAO;AACL,oBAAI,WAAW;AACb,uBAAK,cAAc,SAAS;AAC5B,8BAAY;AAAA,gBACd;AACA,4BAAY,KAAK,UAAU;AAAA,cAC7B;AAAA,YACF;AAAA,UACF;AAEA,iBAAO;AAAA,QACT;AAWA,aAAO,eAAe,CAAC,cAA+B;AACpD,gBAAM,YAAY,KAAK,aAAa,aAAa,SAAS;AAE1D,cAAU,YAAY,SAAS,GAAG;AAChC,kBAAM,IAAI,MAAM,eAAe,SAAS,aAAa;AAAA,UACvD;AAEA,gBAAM,aAAa,UAAU;AAC7B,cAAI,YAAY;AACd,mBAAO,WAAW,MAAM,MAAM;AAAA,UAChC;AAEA,iBAAO;AAAA,QACT;AAKA;AAAA;AAAA;AAAA,aAAO,aAAa,MAAM;AACxB,iBAAO,KAAK;AAAA,QACd;AAuBA,aAAO,UAAU,MAAM;AACrB,eAAK,YAAY,YAAY,KAAK;AAClC,eAAK,YAAY,gBAAgB;AAEjC,qBAAW,OAAO,MAAM;AACtB,gBAAU,WAAW,MAAM,GAAG,GAAG;AAC/B,qBAAO,KAAK,GAAG;AACf,qBAAO,YAAY,KAAK,QAAQ;AAAA,YAClC;AAAA,UACF;AAAA,QACF;AAsCA;AAAA;AAAA;AAAA,aAAO,YAAY,MAAa;AAC9B,iBAAO,KAAK,QAAQ;AAAA,QACtB;AAMA;AAAA;AAAA;AAAA;AAAA,aAAO,YAAY,CAAC,WAAkB;AACpC,eAAK,QAAQ,SAAS;AACtB,eAAK,WAAW,MAAM;AAAA,QACxB;AAvWE,aAAK,UAAgB,MAAM,CAAC,GAAG,gBAAgB,OAAO;AAEtD,yBAAS,IAAIA,QAAO;AAEpB,YAAI,aAAa;AACf,eAAK,sBAAsB,YAAY;AACvC,sBAAY,UAAU,IAAI,aAAa;AAEvC,eAAK,WAAW,MAAM,EAAE,aAAa;AACrC,sBAAY,aAAa,QAAQ,KAAK,QAAQ;AAC9C,sBAAY,aAAa,cAAc,KAAK,QAAQ;AAEpD,cAAI,KAAK,QAAQ,MAAM,OAAO;AAC5B,wBAAY,aAAa,SAAS,SAAS,KAAK,QAAQ,MAAM,KAAK,GAAG;AAAA,UACxE;AAEA,eAAK,cAAc;AACnB,eAAK,WAAW,KAAK,QAAQ,QAAQ,KAAK;AAC1C,eAAK,WAAW,KAAK,QAAQ,MAAM;AAEnC,cAAI,KAAK,QAAQ,eAAe,OAAO;AACrC,wBAAY,KAAK,QAAQ,IAAI;AAAA,UAC/B;AAAA,QACF,OAAO;AACL,gBAAM,IAAI,MAAM,GAAG,WAAW,0BAA0B;AAAA,QAC1D;AAAA,MACF;AAAA,MA1CA;AAAA,aAAc,UAAU,GAAG,WAAW;AAAA;AAAA,MA4CtC,OAAc,OAAO,aAAsB,SAAsBA,UAA6B;AAC5F,eAAO,IAAI,UAAS,aAAa,SAASA,QAAO;AAAA,MACnD;AAAA,MAEA,OAAc,WAAWA,UAAwB;AAC/C,yBAAS,IAAIA,QAAO;AAAA,MACtB;AAAA,MAEQ,WAAW,QAAqB;AACtC,aAAK,eAAe,IAAI,aAAa,KAAK,UAAU,IAAI;AAExD,aAAK,eAAe,IAAI,aAAa,MAAM,KAAK,aAAa,KAAK,YAAY;AAE9E,YAAI,KAAK,QAAQ,eAAe,OAAO;AACrC;AAAA,QACF;AAEA,eAAO,QAAQ,CAAC,UAAU;AACxB,eAAK,aAAa,OAAO,KAAK;AAAA,QAChC,CAAC;AACD,aAAK,eAAe;AAEpB,YAAI,KAAK,QAAQ,WAAW;AAC1B,eAAK,QAAQ,UAAU,KAAK,IAAI;AAAA,QAClC;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA6CO,gBAAgB,WAAmB;AACxC,cAAM,QAAQ,KAAK,aAAa,aAAa,SAAS;AAEtD,YAAI,OAAO,WAAW;AACpB,iBAAO,MAAM,UAAU,WAAW;AAAA,QACpC;AAEA,eAAO;AAAA,MACT;AAAA,MAEO,SAAS,WAA8B;AAC5C,eAAO,KAAK,aAAa,aAAa,SAAS;AAAA,MACjD;AAAA,MAkDQ,eAAe,WAAmB,OAAY;AACpD,aAAK,UAAU,SAAS,IAAI;AAC5B,cAAM,YAAY,KAAK,aAAa,aAAa,SAAS;AAE1D,YAAI,WAAW;AACb,oBAAU,UAAU,SAAS,KAAK;AAAA,QACpC;AAAA,MACF;AAAA,MAiFQ,cAAc,WAAsB;AAC1C,YAAI,UAAU,SAAS;AACrB,cAAI,UAAU,QAAQ,cAAc,OAAO;AACzC,sBAAU,QAAQ,UAAU,UAAU,UAAU,IAAI;AAAA,UACtD;AACA,eAAK,cAAc,UAAU,OAAO;AAAA,QACtC;AAAA,MACF;AAAA,MAwBO,iBAAiB;AACtB,aAAK,aAAa,eAAe;AAAA,MACnC;AAAA,MAEO,iBAAiB,WAAmB,MAAe;AACxD,cAAM,YAAY,KAAK,aAAa,aAAa,SAAS;AAC1D,kBAAU,UAAU,YAAY,IAAI;AAAA,MACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASO,oBAAoB,WAAmB,MAAc;AAC1D,cAAM,YAAY,KAAK,aAAa,aAAa,SAAS;AAC1D,kBAAU,UAAU,eAAe,IAAI;AAAA,MACzC;AAAA,MAcA;AAAA,aAAc,YAAY;AAAA,UACxB,QAAQ,CAAC,OAAe,UAAqB;AAC3C,mBAAO,gBAAgB,OAAO,KAAK;AAAA,UACrC;AAAA,UACA,QAAQ,CAAC,OAAe,UAAqB;AAC3C,mBAAO,gBAAgB,OAAO,KAAK;AAAA,UACrC;AAAA,UACA,QAAQ,CAAC,OAAe,UAAqB;AAC3C,gBAAI,SAAsB,EAAE,MAAM,MAAM,MAAM,YAAY,CAAC,EAAE;AAC7D,mBAAO,gBAAgB,OAAO,OAAO,MAAM;AAAA,UAC7C;AAAA,QACF;AAAA;AAAA,MAEA,OAAc,SAAS,KAAuB;AAC5C,YAAI;AACJ,YAAU,SAAS,GAAG,GAAG;AACvB,oBAAU,SAAS,cAAc,GAAG;AAAA,QACtC,OAAO;AACL,oBAAU;AAAA,QACZ;AACA,kBAAU;AACV,YAAI,WAAW,QAAQ,aAAa,YAAY;AAEhD,YAAU,YAAY,QAAQ,KAAW,QAAQ,QAAQ,GAAG;AAC1D,gBAAM,OAAO,OAAO,KAAK,WAAW;AACpC,cAAI,KAAK,SAAS,GAAG;AACnB,kBAAM,IAAI,MAAM,qBAAqB,QAAQ,GAAG;AAAA,UAClD;AACA,qBAAW,KAAK,CAAC;AAEjB,iBAAO,YAAY,QAAQ;AAAA,QAC7B;AAAA,MACF;AAAA,MAiBO,kBAAkB;AACvB,eAAO,KAAK;AAAA,MACd;AAAA,IACF;AAAA;AAAA;;;AC9aA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAEA;AAEA,qBAAS;AAAA;AAAA;",
|
|
6
|
-
"names": ["descEle", "message", "item", "validResult", "fieldStyle", "validResult", "message"]
|
|
7
|
-
}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/util/utils.ts","../../src/renderer/Render.ts","../../src/rule/regexpValidator.ts","../../src/rule/validator.ts","../../src/rule/numberValidator.ts","../../src/util/validUtils.ts","../../src/event/renderEvents.ts","../../src/renderer/NumberRender.ts","../../src/rule/stringValidator.ts","../../src/renderer/TextAreaRender.ts","../../src/renderer/DropdownRender.ts","../../src/renderer/TextRender.ts","../../src/util/styleUtils.ts","../../src/renderer/CheckboxRender.ts","../../src/renderer/RadioRender.ts","../../src/renderer/PasswordRender.ts","../../src/rule/fileValidator.ts","../../src/renderer/FileRender.ts","../../src/renderer/CustomRender.ts","../../src/renderer/GroupRender.ts","../../src/renderer/HiddenRender.ts","../../src/renderer/ButtonRender.ts","../../src/renderer/RangeRender.ts","../../node_modules/@daracl/datetimepicker/dist/index.js","../../src/renderer/DateRender.ts","../../src/renderer/TabRender.ts","../../src/renderer/GridRender.ts","../../src/constants.ts","../../src/util/Language.ts","../../src/util/renderFactory.ts","../../src/FieldInfoMap.ts","../../src/FormTemplate.ts","../../src/defaultOption.ts","../../src/DaraForm.ts"],"sourcesContent":["import { FormField } from \"@t/FormField\";\r\nimport { isArray as coreIsArray} from \"@daracl/core\";\r\n\r\nconst xssFilter = {\r\n \"&\": \"&\",\r\n \"<\": \"<\",\r\n \">\": \">\",\r\n '\"': \""\",\r\n \"'\": \"'\",\r\n} as any;\r\n\r\nexport const replaceXss = (inputText: string): string => {\r\n let returnText = inputText;\r\n if (returnText) {\r\n Object.keys(xssFilter).forEach((key) => {\r\n returnText = returnText.replaceAll(key, xssFilter[key]);\r\n });\r\n }\r\n return returnText;\r\n};\r\n\r\nexport const hasOwnProp = (obj: any, key: string): boolean => {\r\n return obj.hasOwnProperty(key);\r\n};\r\n\r\nexport const unReplace = (inputText: string): string => {\r\n let returnText = inputText;\r\n\r\n if (returnText) {\r\n Object.keys(xssFilter).forEach((key) => {\r\n returnText = returnText.replaceAll(xssFilter[key], key);\r\n });\r\n }\r\n return returnText;\r\n};\r\n\r\nexport const unFieldName = (fieldName: string): string => {\r\n if (fieldName) {\r\n return unReplace(fieldName).replaceAll('\"', '\\\\\"');\r\n }\r\n return \"\";\r\n};\r\nexport const isBlank = (value: any): boolean => {\r\n if (value === null) return true;\r\n if (value === \"\") return true;\r\n if (typeof value === \"undefined\") return true;\r\n if (typeof value === \"string\" && (value === \"\" || value.replace(/\\s/g, \"\") === \"\")) return true;\r\n\r\n return false;\r\n};\r\n\r\nexport const isUndefined = (value: any): value is undefined => {\r\n return typeof value === \"undefined\";\r\n};\r\n\r\nexport const isFunction = (value: any): boolean => {\r\n return typeof value === \"function\";\r\n};\r\n\r\nexport const isString = (value: any): value is string => {\r\n return typeof value === \"string\";\r\n};\r\nexport const isNumber = (value: any): value is number => {\r\n if (isBlank(value)) {\r\n return false;\r\n }\r\n value = +value;\r\n return !isNaN(value);\r\n};\r\n\r\nexport const isArray = (value: any): value is Array<any> => {\r\n return coreIsArray(value);\r\n};\r\n\r\n/**\r\n * 값있는지 여부 체크.\r\n *\r\n * @param {*} value\r\n * @returns {boolean}\r\n */\r\nexport const isEmpty = (value: any): boolean => isUndefined(value) || value == null; //_isEmpty(value);\r\n\r\n/**\r\n * tab render type check\r\n *\r\n * @param {FormField} field\r\n * @returns {boolean} tab type 인지 여부\r\n */\r\nexport const isTabType = (field: FormField): boolean => {\r\n return field && field.renderType === \"tab\";\r\n};\r\n/**\r\n * grid render type check\r\n *\r\n * @param {FormField} field\r\n * @returns {boolean} grid type 인지 여부\r\n */\r\nexport const isGridType = (field: FormField): boolean => {\r\n return field && field.renderType === \"grid\";\r\n};\r\nexport const replaceXssField = (field: FormField): FormField => {\r\n field.$xssName = getXssFieldName(field);\r\n\r\n field.label = replaceXss(field.label);\r\n return field;\r\n};\r\n\r\n/**\r\n * 값을 무시하는 필드\r\n *\r\n * @param field formField\r\n * @returns\r\n */\r\nexport const ignoreValueField = (field: FormField): boolean => {\r\n return isGridType(field.$parent) || isTabType(field.$parent);\r\n};\r\n\r\n/**\r\n * grid field name xss repalce\r\n *\r\n * @param {FormField} field\r\n * @returns {string} replace 된 field name\r\n */\r\nexport const getXssFieldName = (field: FormField): string => {\r\n if (isUndefined(field.$xssName)) {\r\n let returnText = field.name;\r\n if (returnText) {\r\n Object.keys(xssFilter).forEach((key) => {\r\n returnText = returnText.replaceAll(key, \"_\");\r\n });\r\n }\r\n\r\n return \"df_\" + returnText;\r\n }\r\n\r\n return field.$xssName;\r\n};\r\n\r\nexport const getHashCode = (str: string) => {\r\n let hash = 0;\r\n if (str.length == 0) return hash;\r\n for (let i = 0; i < str.length; i++) {\r\n let tmpChar = str.charCodeAt(i);\r\n hash = (hash << 5) - hash + tmpChar;\r\n hash = hash & hash;\r\n }\r\n return String(hash).replaceAll(/-/g, \"_\");\r\n};\r\n\r\nexport const isHiddenField = (field: FormField): boolean => {\r\n if (field.renderType === \"hidden\") {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nexport const templateToElement = (htmlTemplate: string): Element | null => {\r\n const template = document.createElement(\"template\");\r\n template.innerHTML = htmlTemplate;\r\n return template.content.firstElementChild;\r\n};\r\n\r\nexport function isPlainObject(obj: any) {\r\n // 객체가 아닌 경우 또는 null인 경우 false 반환\r\n if (typeof obj !== \"object\" || obj === null) {\r\n return false;\r\n }\r\n\r\n // 프로토타입 체인을 따라 Object 생성자를 찾음\r\n let proto = obj;\r\n while (Object.getPrototypeOf(proto) !== null) {\r\n proto = Object.getPrototypeOf(proto);\r\n }\r\n\r\n // Object 생성자의 prototype과 같으면 Plain Object로 판단\r\n return Object.getPrototypeOf(obj) === proto;\r\n}\r\n\r\nfunction isObject(value: any) {\r\n return typeof value === \"object\" && value !== null && !isArray(value);\r\n}\r\n\r\nfunction isDate(value: any) {\r\n return value instanceof Date && !isNaN(value.valueOf());\r\n}\r\n\r\n/**\r\n * object merge\r\n * \r\n * @example\r\n ```\r\n merge({},{aaa:'bbb',ccc:'ddd'},{bbb:'bbb','aaa':'aaa'})) -> {\"aaa\": \"aaa\", \"bbb\": \"bbb\", \"ccc\": \"ddd\"}\r\n ```\r\n * @param {...any[]} value\r\n * @returns {object}\r\n */\r\nexport const merge = (...value: any[]): any => {\r\n let reval = value[0];\r\n\r\n if (!isPlainObject(reval) || isEmpty(reval)) {\r\n return reval;\r\n }\r\n\r\n let i = 1;\r\n if (Object.keys(reval).length > 0) {\r\n i = 0;\r\n reval = isArray(reval) ? [] : {};\r\n }\r\n const argLen = value.length;\r\n for (; i < argLen; i += 1) {\r\n cloneDeep(reval, value[i]);\r\n }\r\n\r\n return reval;\r\n};\r\n\r\nfunction trim(s: string): string {\r\n return s.replace(/^\\s+|\\s+$/g, \"\");\r\n}\r\n\r\nfunction cloneDeep(dst: any, src: any): any {\r\n if (isObject(src)) {\r\n return cloneObjectDeep(dst, src);\r\n }\r\n\r\n if (isArray(src)) {\r\n return cloneArrayDeep(dst, src);\r\n }\r\n\r\n if (isDate(src)) {\r\n return new src.constructor(src);\r\n }\r\n return src;\r\n}\r\n\r\n/*eslint no-param-reassign: \"error\"*/\r\nfunction cloneObjectDeep(dst: any, src: any): object {\r\n if (isFunction(src)) {\r\n return src;\r\n }\r\n\r\n for (const key of Object.keys(src)) {\r\n const val = (src as any)[key];\r\n\r\n if (isUndefined(val)) {\r\n continue;\r\n }\r\n\r\n if (val === null) {\r\n dst[key] = val;\r\n } else if (isFunction(val)) {\r\n dst[key] = val;\r\n } else if (isEmpty(dst[key])) {\r\n dst[key] = cloneDeep(isArray(val) ? [] : {}, val);\r\n } else if (!isObject(val)) {\r\n dst[key] = val;\r\n } else {\r\n cloneDeep(dst[key], val);\r\n }\r\n }\r\n return dst;\r\n}\r\n\r\nfunction cloneArrayDeep(dst: any, src: any[]) {\r\n const isObj = isPlainObject(dst);\r\n\r\n for (let i = 0; i < src.length; i += 1) {\r\n const val = src[i];\r\n let newVal;\r\n\r\n if (val == null) {\r\n newVal = val;\r\n } else {\r\n newVal = cloneDeep(isArray(val) ? [] : {}, val);\r\n }\r\n\r\n if (isObj) {\r\n (dst as any)[i] = newVal;\r\n } else {\r\n dst.push(newVal);\r\n }\r\n }\r\n return dst;\r\n}\r\n","import { FormField } from \"@t/FormField\";\nimport { ValidResult } from \"@t/ValidResult\";\nimport { DaraForm } from \"@/DaraForm\";\nimport * as utils from \"@/util/utils\";\n\nexport abstract class Render {\n protected daraForm;\n protected rowElement;\n protected field;\n\n private enableView: boolean = true;\n\n constructor(form: DaraForm, field: FormField, rowElement: HTMLElement) {\n this.daraForm = form;\n this.field = field;\n this.rowElement = rowElement;\n this.createField();\n\n if (field.tooltip) rowElement.querySelector(\".df-tooltip\")?.setAttribute(\"tooltip\", field.tooltip);\n }\n\n public setDefaultInfo() {\n if (utils.isUndefined(this.field.defaultValue)) {\n this.setValue(\"\", false);\n } else {\n this.setValue(this.field.defaultValue, false);\n }\n\n if (!utils.isUndefined(this.field.placeholder)) {\n const ele = this.getElement();\n if (ele instanceof Element) {\n ele.setAttribute(\"placeholder\", this.field.placeholder);\n }\n }\n }\n\n public setDefaultOption() {\n this.setDisabled(this.field.disabled ?? false);\n }\n\n public addChildField(element: Element) {\n this.rowElement.querySelector(\".df-field-container\")?.append(element);\n }\n\n static isDataRender(): boolean {\n return true;\n }\n\n static isChildrenCreate(): boolean {\n return true;\n }\n\n public getForm(): DaraForm {\n return this.daraForm;\n }\n\n public abstract mounted(): void;\n public abstract getValue(): any;\n public abstract setValue(value: any, changeCheckFlag?: boolean): void;\n public abstract reset(): void;\n public abstract getElement(): any;\n public abstract valid(): ValidResult | boolean;\n public abstract createField(): void;\n\n public setValueItems(value: any): void {}\n\n public static getDescriptionTemplate(field: FormField): string {\n const classNames = field.descriptionClass ? utils.replaceXss(field.descriptionClass) : \"\";\n const style = field.descriptionStyle ? 'style=\"' + utils.replaceXss(field.descriptionStyle) + '\"' : \"\";\n\n return field.description ? `<div class=\"df-description ${classNames}\" ${style}>${field.description}</div>` : \"\";\n }\n\n public changeEventCall(field: FormField, e: Event | null, rederInfo: Render, fieldValue: any): boolean | undefined {\n if (field.onChange) {\n let changeInfo: any = {\n field: field,\n evt: e,\n oldValue: field.$value,\n value: fieldValue,\n };\n\n if (field.listItem?.list) {\n let valuesItem = [];\n const valueKey = Render.valuesValueKey(field);\n\n for (let val of field.listItem.list) {\n let changeVal = val[valueKey];\n if (utils.isString(fieldValue)) {\n if (changeVal == fieldValue) {\n valuesItem.push(val);\n break;\n }\n } else if (utils.isArray(fieldValue)) {\n if (fieldValue.includes(changeVal)) {\n valuesItem.push(val);\n }\n }\n }\n\n changeInfo.valueItems = valuesItem;\n }\n\n if (changeInfo.oldValue != changeInfo.value && field.onChange.call(null, changeInfo) === false) {\n rederInfo.setValue(field.$value, false);\n return false;\n }\n\n field.$value = changeInfo.value;\n }\n\n this.daraForm.conditionCheck();\n }\n\n public focus() {\n this.getElement().focus();\n }\n\n public isEnableView() {\n return this.enableView;\n }\n\n public show() {\n this.enableView = true;\n this.rowElement.classList.remove(\"df-hidden\");\n }\n\n public hide() {\n this.enableView = false;\n if (!this.rowElement.classList.contains(\"df-hidden\")) {\n this.rowElement.classList.add(\"df-hidden\");\n }\n }\n\n /**\n * 설명 추가\n *\n * @public\n * @param {string} desc\n */\n public setDescription(desc: string) {\n const descEle = this.rowElement.querySelector(\".df-description\");\n if (descEle) {\n descEle.textContent = desc;\n } else {\n const fieldEle = this.rowElement.querySelector(\".df-field\");\n if (fieldEle) {\n const parser = new DOMParser();\n this.field.description = desc;\n const descEle = parser.parseFromString(Render.getDescriptionTemplate(this.field), \"text/html\").querySelector(\".df-description\");\n\n if (descEle) fieldEle.parentNode?.insertBefore(descEle, fieldEle.nextSibling);\n }\n }\n }\n\n public setActive(id: string): void {\n //console.log(\"parent\");\n }\n\n public setDisabled(flag: boolean) {\n const ele = this.getElement();\n if (ele instanceof HTMLElement) {\n if (flag === false) {\n this.getElement().removeAttribute(\"disabled\");\n } else {\n this.getElement().setAttribute(\"disabled\", true);\n }\n }\n }\n\n public commonValidator() {\n //this.field.diff\n }\n\n public static valuesValueKey(field: FormField): string {\n return field.listItem?.valueField ? field.listItem.valueField : \"value\";\n }\n\n public static valuesLabelKey(field: FormField): string {\n return field.listItem?.labelField ? field.listItem.labelField : \"label\";\n }\n\n public static valuesLabelValue(label: string, val: any) {\n let replaceFlag = false;\n const resultValue = label.replace(/\\{\\{([A-Za-z0-9_.]*)\\}\\}/g, (match, key) => {\n replaceFlag = true;\n return val[key] || \"\";\n });\n\n if (replaceFlag) {\n return resultValue;\n }\n\n return val[label] || \"\";\n }\n}\n","import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\n\r\nconst regexp = {\r\n mobile: /^\\d{3}-\\d{3,4}-\\d{4}$/,\r\n email: /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/,\r\n url: /^(?:(?:https?|HTTPS?|ftp|FTP):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-zA-Z\\u00a1-\\uffff0-9]-*)*[a-zA-Z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-zA-Z\\u00a1-\\uffff0-9]-*)*[a-zA-Z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-zA-Z\\u00a1-\\uffff]{2,}))\\.?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/,\r\n number: /\\d$/,\r\n alpha: /^[a-zA-Z]+$/,\r\n \"alpha-num\": /^[a-zA-Z0-9]+$/,\r\n variable: /^[a-zA-Z0-9_$][a-zA-Z0-9_$]*$/,\r\n \"number-char\": /^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]/,\r\n \"upper-char\": /^(?=.*?[A-Z])(?=.*?[a-z])/,\r\n \"upper-char-special\": /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[#?!@$%^&*-])/,\r\n \"upper-char-special-number\": /^(?=.*[A-Za-z])(?=.*\\d)(?=.*[@$!%*#?&])[A-Za-z\\d@$!%*#?&]/,\r\n};\r\n\r\n/**\r\n * 정규식 유효성 체크.\r\n *\r\n * @param {string} value\r\n * @param {FormField} field\r\n * @param {(ValidResult | undefined)} result\r\n * @returns {ValidResult}\r\n */\r\nexport const regexpValidator = (value: string, field: FormField, result: ValidResult): ValidResult => {\r\n if (!field.$instance.isEnableView()) {\r\n return { name: field.name, constraint: [] };\r\n }\r\n\r\n if (typeof result === \"undefined\") {\r\n result = { name: field.name, constraint: [] };\r\n }\r\n\r\n const regexpType = field.regexpType;\r\n\r\n if (regexpType) {\r\n if (!regexp[regexpType].test(value)) {\r\n result.regexp = regexpType;\r\n return result;\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n","import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { regexpValidator } from \"./regexpValidator\";\r\nimport * as utils from \"@/util/utils\";\r\n\r\n/**\r\n * validator , regexp 체크 .\r\n *\r\n * @param {string} value field value\r\n * @param {FormField} field field 정보\r\n * @param {ValidResult} result\r\n * @returns {(ValidResult | boolean)}\r\n */\r\nexport const validator = (value: string, field: FormField, result: ValidResult): ValidResult | boolean => {\r\n if (field.validator) {\r\n result.validator = field.validator(field, value);\r\n if (typeof result.validator === \"object\") {\r\n return result;\r\n }\r\n }\r\n\r\n result = regexpValidator(value, field, result);\r\n\r\n if (result.regexp) {\r\n return result;\r\n }\r\n\r\n if (field.different) {\r\n const diffFieldName = field.different.field;\r\n const diffField = field.$instance.getForm().getField(diffFieldName);\r\n\r\n if (!utils.isEmpty(diffField) && field.$instance.getValue() == diffField.$instance.getValue()) {\r\n result.message = field.different.message;\r\n return result;\r\n }\r\n }\r\n\r\n if (field.identical) {\r\n const diffFieldName = field.identical.field;\r\n const diffField = field.$instance.getForm().getField(diffFieldName);\r\n\r\n if (!utils.isEmpty(diffField) && field.$instance.getValue() != diffField.$instance.getValue()) {\r\n result.message = field.identical.message;\r\n return result;\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n","import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"@/constants\";\r\nimport { validator } from \"./validator\";\r\nimport * as utils from \"@/util/utils\";\r\n\r\n/**\r\n * 숫자 유효성 체크\r\n *\r\n * @param {string} value\r\n * @param {FormField} field\r\n * @returns {(ValidResult | boolean)}\r\n */\r\nexport const numberValidator = (value: string, field: FormField): ValidResult | boolean => {\r\n if (!field.$instance.isEnableView()) {\r\n return true;\r\n }\r\n\r\n const result: ValidResult = { name: field.name, constraint: [] };\r\n const numValue = Number(value);\r\n\r\n if (field.required && utils.isBlank(value)) {\r\n result.constraint.push(RULES.REQUIRED);\r\n return result;\r\n }\r\n\r\n if (!utils.isNumber(value)) {\r\n result.constraint.push(RULES.NAN);\r\n return result;\r\n }\r\n\r\n if (validator(value, field, result) !== true) {\r\n return result;\r\n }\r\n\r\n const rule = field.rule;\r\n if (rule) {\r\n const isMinimum = utils.isNumber(rule.minimum),\r\n isMaximum = utils.isNumber(rule.maximum);\r\n\r\n let minRule = false,\r\n minExclusive = false,\r\n maxRule = false,\r\n maxExclusive = false;\r\n\r\n if (isMinimum) {\r\n if (rule.exclusiveMinimum && numValue <= rule.minimum) {\r\n minExclusive = true;\r\n } else if (numValue < rule.minimum) {\r\n minRule = true;\r\n }\r\n }\r\n\r\n if (isMaximum) {\r\n if (rule.exclusiveMaximum && numValue >= rule.maximum) {\r\n maxExclusive = true;\r\n } else if (numValue > rule.maximum) {\r\n maxRule = true;\r\n }\r\n }\r\n\r\n if (isMinimum && isMaximum && (minRule || minExclusive || maxRule || maxExclusive)) {\r\n if (rule.exclusiveMinimum && rule.exclusiveMaximum && (minExclusive || maxExclusive)) {\r\n result.constraint.push(RULES.BETWEEN_EXCLUSIVE_MINMAX);\r\n } else if (minExclusive) {\r\n result.constraint.push(RULES.BETWEEN_EXCLUSIVE_MIN);\r\n } else if (maxExclusive) {\r\n result.constraint.push(RULES.BETWEEN_EXCLUSIVE_MAX);\r\n } else {\r\n result.constraint.push(RULES.BETWEEN);\r\n }\r\n } else {\r\n if (minExclusive) {\r\n result.constraint.push(RULES.EXCLUSIVE_MIN);\r\n }\r\n\r\n if (maxExclusive) {\r\n result.constraint.push(RULES.EXCLUSIVE_MAX);\r\n }\r\n\r\n if (minRule) {\r\n result.constraint.push(RULES.MIN);\r\n }\r\n\r\n if (maxRule) {\r\n result.constraint.push(RULES.MAX);\r\n }\r\n }\r\n }\r\n\r\n if (result.constraint.length > 0) {\r\n return result;\r\n }\r\n\r\n return true;\r\n};\r\n","import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport Language from \"./Language\";\r\n\r\nexport const invalidMessage = (field: FormField, rowElement: Element, validResult: ValidResult | boolean) => {\r\n if (validResult === true) {\r\n rowElement.classList.remove(\"invalid\");\r\n\r\n if (!rowElement.classList.contains(\"valid\")) {\r\n rowElement.classList.add(\"valid\");\r\n }\r\n\r\n const helpMessageElement = rowElement.querySelector(\".df-help-message\");\r\n if (helpMessageElement) {\r\n helpMessageElement.innerHTML = \"\";\r\n }\r\n\r\n return;\r\n }\r\n\r\n rowElement.classList.remove(\"valid\");\r\n\r\n if (!rowElement.classList.contains(\"invalid\")) {\r\n rowElement.classList.add(\"invalid\");\r\n }\r\n\r\n if (validResult !== false) {\r\n const message: string[] = Language.validMessage(field, validResult);\r\n\r\n if (validResult.message) {\r\n message.push(validResult.message);\r\n }\r\n\r\n const helpMessageElement = rowElement.querySelector(\".df-help-message\");\r\n if (helpMessageElement && message.length > 0) {\r\n const msgHtml: string[] = [];\r\n message.forEach((item) => {\r\n msgHtml.push(`<div>${item}</div>`);\r\n });\r\n helpMessageElement.innerHTML = msgHtml.join(\"\");\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * remove row element style class\r\n *\r\n * @param {Element} rowElement\r\n */\r\nexport const resetRowElementStyleClass = (rowElement: Element) => {\r\n rowElement.classList.remove(\"invalid\");\r\n rowElement.classList.remove(\"valid\");\r\n};\r\n","import { FormField } from \"@t/FormField\";\r\nimport { Render } from \"@/renderer/Render\";\r\nimport * as utils from \"@/util/utils\";\r\n\r\nexport const inputEvent = (field: FormField, element: Element, renderInfo: Render) => {\r\n element.addEventListener(\"input\", (e: Event) => {\r\n customChangeEventCall(field, e, renderInfo, renderInfo.getValue());\r\n renderInfo.valid();\r\n });\r\n};\r\n\r\nexport const numberInputEvent = (field: FormField, element: HTMLInputElement, renderInfo: Render) => {\r\n element.addEventListener(\"keyup\", (e: any) => {\r\n const val = e.target.value;\r\n\r\n if (!utils.isNumber(val)) {\r\n element.value = val.replace(/[^0-9\\.\\-\\+]/g, \"\");\r\n e.preventDefault();\r\n }\r\n customChangeEventCall(field, e, renderInfo, renderInfo.getValue());\r\n renderInfo.valid();\r\n });\r\n\r\n /*\r\n element.addEventListener('input', (e: any) => {\r\n customChangeEventCall(field, e, renderInfo);\r\n renderInfo.valid();\r\n })\r\n */\r\n};\r\n\r\nexport const dropdownChangeEvent = (field: FormField, element: Element, renderInfo: Render) => {\r\n element.addEventListener(\"change\", (e: any) => {\r\n customChangeEventCall(field, e, renderInfo, renderInfo.getValue());\r\n renderInfo.valid();\r\n });\r\n};\r\n\r\nexport const customChangeEventCall = (field: FormField, e: Event, renderInfo: Render, value: any) => {\r\n renderInfo.changeEventCall(field, e, renderInfo, value);\r\n};\r\n","import { FormField } from \"@t/FormField\";\nimport { Render } from \"./Render\";\nimport { numberValidator } from \"@/rule/numberValidator\";\nimport { resetRowElementStyleClass, invalidMessage } from \"@/util/validUtils\";\nimport { numberInputEvent } from \"@/event/renderEvents\";\nimport { DaraForm } from \"@/DaraForm\";\n\nexport default class NumberRender extends Render {\n private element: HTMLInputElement;\n\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\n super(daraForm, field, rowElement);\n\n this.mounted();\n this.setDefaultOption();\n this.setDefaultInfo();\n }\n\n mounted() {\n numberInputEvent(this.field, this.element, this);\n }\n\n createField() {\n const field = this.field;\n\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\n\n fieldContainerElement.innerHTML = `\n <div class=\"df-field\">\n <input type=\"text\" name=\"${field.$xssName}\" class=\"df-form-field df-number df-help-icon\" />\n </div> \n ${Render.getDescriptionTemplate(field)}\n <div class=\"df-help-message\"></div>\n `;\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\n }\n\n getValue() {\n return this.element.value;\n }\n\n setValue(value: any, changeCheckFlag?: boolean): void {\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\n this.element.value = this.field.$value;\n return;\n }\n this.field.$value = value;\n this.element.value = value;\n }\n\n reset() {\n this.setDefaultInfo();\n this.setDisabled(false);\n resetRowElementStyleClass(this.rowElement);\n }\n\n getElement(): HTMLElement {\n return this.element;\n }\n\n valid(): any {\n const validResult = numberValidator(this.getValue(), this.field);\n\n invalidMessage(this.field, this.rowElement, validResult);\n\n return validResult;\n }\n}\n","import { FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"@/constants\";\r\nimport * as utils from \"@/util/utils\";\r\nimport { validator } from \"./validator\";\r\n\r\n/**\r\n * string validator\r\n *\r\n * @param {string} value\r\n * @param {FormField} field\r\n * @returns {(ValidResult | boolean)}\r\n */\r\nexport const stringValidator = (value: string, field: FormField): ValidResult | boolean => {\r\n if (!field.$instance.isEnableView()) {\r\n return true;\r\n }\r\n\r\n let result: ValidResult = { name: field.name, constraint: [] };\r\n\r\n if (field.required && utils.isBlank(value)) {\r\n result.constraint.push(RULES.REQUIRED);\r\n return result;\r\n }\r\n const validResult = validator(value, field, result);\r\n if (validResult !== true) {\r\n return validResult;\r\n }\r\n\r\n const rule = field.rule;\r\n\r\n if (rule) {\r\n const valueLength = value.length;\r\n\r\n const isMinNumber = utils.isNumber(rule.minLength),\r\n isMaxNumber = utils.isNumber(rule.maxLength);\r\n\r\n let minRule = false,\r\n maxRule = false;\r\n if (isMinNumber && valueLength < rule.minLength) {\r\n minRule = true;\r\n }\r\n if (isMaxNumber && valueLength > rule.maxLength) {\r\n maxRule = true;\r\n }\r\n\r\n if (isMinNumber && isMaxNumber && (minRule || maxRule)) {\r\n result.constraint.push(RULES.BETWEEN);\r\n } else {\r\n if (minRule) {\r\n result.constraint.push(RULES.MIN_LENGTH);\r\n }\r\n\r\n if (maxRule) {\r\n result.constraint.push(RULES.MAX_LENGTH);\r\n }\r\n }\r\n if (result.constraint.length > 0) {\r\n return result;\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n","import { FormField } from \"@t/FormField\";\nimport { Render } from \"./Render\";\nimport { stringValidator } from \"@/rule/stringValidator\";\nimport { resetRowElementStyleClass, invalidMessage } from \"@/util/validUtils\";\nimport { inputEvent } from \"@/event/renderEvents\";\nimport { DaraForm } from \"@/DaraForm\";\n\nexport default class TextAreaRender extends Render {\n private element: HTMLTextAreaElement;\n\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\n super(daraForm, field, rowElement);\n\n this.mounted();\n this.setDefaultOption();\n this.setDefaultInfo();\n }\n\n mounted() {\n inputEvent(this.field, this.element, this);\n }\n\n createField() {\n const field = this.field;\n\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\n\n let rows = field.rendererOptions?.rows;\n rows = +rows > 0 ? rows : 3;\n\n fieldContainerElement.innerHTML = `\n <div class=\"df-field\">\n <textarea name=\"${field.$xssName}\" rows=\"${rows}\" class=\"df-form-field df-textarea df-help-icon\"></textarea>\n </div> \n ${Render.getDescriptionTemplate(field)}\n <div class=\"df-help-message\"></div>\n `;\n\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLTextAreaElement;\n }\n\n getValue() {\n return this.element.value;\n }\n\n setValue(value: any, changeCheckFlag?: boolean): void {\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\n this.element.value = this.field.$value;\n return;\n }\n this.field.$value = value;\n this.element.value = value;\n }\n\n reset() {\n this.setDefaultInfo();\n this.setDisabled(false);\n resetRowElementStyleClass(this.rowElement);\n }\n\n getElement(): HTMLElement {\n return this.element;\n }\n\n valid(): any {\n const validResult = stringValidator(this.getValue(), this.field);\n\n invalidMessage(this.field, this.rowElement, validResult);\n\n return validResult;\n }\n}\n","import { FormField, ValuesInfo } from \"@t/FormField\";\nimport { Render } from \"./Render\";\nimport { ValidResult } from \"@t/ValidResult\";\nimport { RULES } from \"@/constants\";\nimport { resetRowElementStyleClass, invalidMessage } from \"@/util/validUtils\";\nimport { dropdownChangeEvent } from \"@/event/renderEvents\";\nimport { DaraForm } from \"@/DaraForm\";\nimport * as utils from \"@/util/utils\";\nimport Language from \"@/util/Language\";\n\nexport default class DropdownRender extends Render {\n private element: HTMLSelectElement;\n private defaultSelected;\n\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\n super(daraForm, field, rowElement);\n\n let initDefaultValue = \"\";\n\n if (!utils.isUndefined(field.defaultValue)) {\n initDefaultValue = field.defaultValue;\n }\n\n const valueKey = DropdownRender.valuesValueKey(field);\n let initDefaultValueFlag = false;\n this.field.listItem?.list?.forEach((item) => {\n let itemValue = item[valueKey];\n if (item.selected) {\n this.defaultSelected = itemValue;\n }\n if (itemValue == initDefaultValue) {\n initDefaultValueFlag = true;\n }\n });\n\n if (initDefaultValueFlag) {\n this.defaultSelected = initDefaultValue;\n } else if (!this.defaultSelected) {\n if (field.rendererOptions?.disableDefaultOption === true) {\n this.defaultSelected = this.field.listItem?.list?.length > 0 ? this.field.listItem.list[0][valueKey] || \"\" : \"\";\n }\n }\n\n if (utils.isUndefined(this.defaultSelected)) {\n this.defaultSelected = \"\";\n }\n\n this.mounted();\n this.setDefaultOption();\n this.setValue(this.defaultSelected, false);\n }\n\n mounted() {\n dropdownChangeEvent(this.field, this.element, this);\n }\n\n createField() {\n const field = this.field;\n\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\n\n let template = ` <div class=\"df-field\"><select name=\"${field.$xssName}\" class=\"df-form-field df-dropdown\">\n ${this.dropdownValuesTemplate(field)}\n </select> <i class=\"df-help-icon\"></i></div>\n ${Render.getDescriptionTemplate(field)}\n <div class=\"df-help-message\"></div>\n `;\n fieldContainerElement.innerHTML = template;\n\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLSelectElement;\n }\n\n public setValueItems(items: any): void {\n if (this.field.listItem) {\n this.field.listItem.list = items;\n } else {\n this.field.listItem = {\n list: items,\n } as ValuesInfo;\n }\n this.element.innerHTML = this.dropdownValuesTemplate(this.field);\n\n if (!utils.isBlank(this.field.$value)) {\n const currentValue = this.field.$value;\n this.field.$value = \"\";\n this.setValue(currentValue);\n }\n }\n\n getValue() {\n return this.element.value;\n }\n\n setValue(value: any, changeCheckFlag?: boolean): void {\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\n this.element.value = this.field.$value;\n return;\n }\n this.field.$value = value;\n this.element.value = value;\n }\n\n reset() {\n this.setValue(this.defaultSelected, false);\n this.setDisabled(false);\n resetRowElementStyleClass(this.rowElement);\n }\n\n getElement(): HTMLElement {\n return this.element;\n }\n\n valid(): any {\n const value = this.getValue();\n\n let validResult: ValidResult | boolean = true;\n\n if (this.field.required) {\n if (value.length < 1) {\n validResult = { name: this.field.name, constraint: [] };\n validResult.constraint.push(RULES.REQUIRED);\n }\n }\n\n invalidMessage(this.field, this.rowElement, validResult);\n\n return validResult;\n }\n\n public dropdownValuesTemplate(field: FormField) {\n const labelKey = Render.valuesLabelKey(field);\n const valueKey = Render.valuesValueKey(field);\n let template = \"\";\n\n if (field.rendererOptions?.disableDefaultOption !== true) {\n template += `<option value=\"\">${Language.getMessage(\"selection\")}</option>`;\n }\n field.listItem?.list?.forEach((val) => {\n const attr = `${val.selected ? \"selected\" : \"\"} ${val.disabled ? \"disabled\" : \"\"}`;\n if (utils.isUndefined(val[valueKey]) && val.label) {\n template += `<option value=\"${val.value || \"\"}\" ${attr}>${val.label}</option>`;\n } else {\n template += `<option value=\"${val[valueKey]}\" ${attr}>${Render.valuesLabelValue(labelKey, val)}</option>`;\n }\n });\n\n return template;\n }\n}\n","import { FormField } from \"@t/FormField\";\nimport { Render } from \"./Render\";\nimport { stringValidator } from \"@/rule/stringValidator\";\nimport { resetRowElementStyleClass, invalidMessage } from \"@/util/validUtils\";\nimport { inputEvent } from \"@/event/renderEvents\";\nimport { DaraForm } from \"@/DaraForm\";\n\nexport default class TextRender extends Render {\n private element: HTMLInputElement;\n\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\n super(daraForm, field, rowElement);\n this.mounted();\n this.setDefaultOption();\n this.setDefaultInfo();\n }\n\n mounted() {\n inputEvent(this.field, this.element, this);\n }\n\n createField() {\n const field = this.field;\n\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\n\n fieldContainerElement.innerHTML = `\n <div class=\"df-field\">\n <input type=\"text\" name=\"${field.$xssName}\" class=\"df-form-field df-text df-help-icon\" />\n </div>\n ${Render.getDescriptionTemplate(field)}\n <div class=\"df-help-message\"></div>\n `;\n\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\n }\n\n getValue() {\n return this.element.value;\n }\n\n setValue(value: any, changeCheckFlag?: boolean): void {\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\n this.element.value = this.field.$value;\n return;\n }\n this.field.$value = value;\n this.element.value = value;\n }\n\n reset() {\n this.setDefaultInfo();\n this.setDisabled(false);\n resetRowElementStyleClass(this.rowElement);\n }\n\n getElement(): HTMLInputElement {\n return this.element;\n }\n\n valid(): any {\n const validResult = stringValidator(this.getValue(), this.field);\n\n invalidMessage(this.field, this.rowElement, validResult);\n\n return validResult;\n }\n}\n","import { FieldStyle, FormField } from \"@t/FormField\";\nimport * as utils from \"./utils\";\nimport { FIELD_POSITION_STYLE, ALIGN } from \"@/constants\";\nimport { FormOptions } from \"@t/FormOptions\";\n\n/**\n * field style 처리\n *\n * @param formOptions FormOptions\n * @param field FormField\n * @param beforeField FormField\n * @returns FieldStyle\n */\n\nexport function resolveFieldStyle(formOptions: FormOptions, field: FormField, beforeField?: FormField | null, isLabelHide?: boolean): FieldStyle {\n const fieldStyle = {\n rowStyleClass: orientationClassName(field.orientation),\n fieldClass: \"\",\n fieldStyle: \"\",\n labelClass: \"\",\n labelStyle: \"\",\n labelAlignClass: \"\",\n valueClass: \"\",\n valueStyle: \"\",\n tabAlignClass: \"\",\n };\n\n const defaultLabelWidth = beforeField?.style?.labelWidth ?? formOptions.style.labelWidth ?? \"3\";\n let defaultValueWidth = beforeField?.style?.valueWidth ?? formOptions.style.valueWidth ?? \"9\";\n const position = beforeField?.style?.position ?? formOptions.style.position;\n\n const width = field.style?.width;\n const positionArr = FIELD_POSITION_STYLE[field.style?.position] ?? FIELD_POSITION_STYLE[position] ?? FIELD_POSITION_STYLE.top;\n\n fieldStyle.fieldClass = `${positionArr[0] ? \"df-\" + positionArr[0] : \"\"} ${field.style?.customClass || \"\"}`;\n if (width) {\n if (utils.isNumber(width)) {\n fieldStyle.fieldClass += utils.isNumber(width) ? ` df-col-xs-${width}` : \"\";\n } else {\n fieldStyle.fieldStyle = utils.isNumber(width) ? \"\" : `width:${width};`;\n }\n }\n\n fieldStyle.tabAlignClass = \"df-tab-al-\" + ([\"right\", \"center\"].includes(field.style?.tabAlign) ? field.style.tabAlign : \"left\");\n\n const labelWidth = field.style?.labelWidth || defaultLabelWidth;\n fieldStyle.labelAlignClass = positionArr[1];\n\n if (!isLabelHide && labelWidth && ![\"top\", \"bottom\"].includes(positionArr[0])) {\n if (utils.isNumber(labelWidth)) {\n const labelWidthValue = +labelWidth;\n defaultValueWidth = 12 - labelWidthValue;\n fieldStyle.labelClass = `df-col-xs-${labelWidthValue}`;\n fieldStyle.valueClass = fieldStyle.labelStyle ? \"df-col-full\" : `df-col-xs-${defaultValueWidth}`;\n } else {\n fieldStyle.labelStyle = `width:${labelWidth};`;\n }\n }\n\n const valueWidth = field.style?.valueWidth || defaultValueWidth;\n if (isLabelHide && ![\"left\", \"right\"].includes(positionArr[0])) {\n fieldStyle.valueClass = \"df-col-full\";\n } else {\n if (valueWidth && ![\"top\", \"bottom\"].includes(positionArr[0])) {\n if (utils.isNumber(valueWidth)) {\n fieldStyle.valueClass = fieldStyle.labelStyle ? \"df-col-full\" : `df-col-xs-${valueWidth}`;\n } else {\n fieldStyle.valueStyle = `width:${valueWidth};`;\n }\n } else {\n fieldStyle.valueClass = fieldStyle.labelStyle ? \"df-col-full\" : \"\";\n }\n }\n\n fieldStyle.fieldClass = spaceReplace(fieldStyle.fieldClass);\n fieldStyle.labelClass = spaceReplace(fieldStyle.labelClass);\n fieldStyle.valueClass = spaceReplace(fieldStyle.valueClass);\n\n return fieldStyle;\n}\n\nexport function orientationClassName(orientation: string): string {\n return orientation === \"horizontal\" ? \"df-horizontal\" : \"df-vertical\";\n}\n\nfunction spaceReplace(str: string): string {\n return str.replace(/\\s+/g, \" \").trim();\n}\n","import { FormField, ValuesInfo } from \"@t/FormField\";\nimport { Render } from \"./Render\";\nimport * as utils from \"@/util/utils\";\nimport { ValidResult } from \"@t/ValidResult\";\nimport { OrientationMap, RULES } from \"@/constants\";\nimport { resetRowElementStyleClass, invalidMessage } from \"@/util/validUtils\";\nimport { customChangeEventCall } from \"@/event/renderEvents\";\nimport { DaraForm } from \"@/DaraForm\";\nimport { orientationClassName } from \"@/util/styleUtils\";\n\nexport default class CheckboxRender extends Render {\n private defaultCheckValue: any[] = [];\n\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\n super(daraForm, field, rowElement);\n\n this.defaultCheckValue = [];\n let initDefaultValue = [] as any;\n if (!utils.isUndefined(field.defaultValue)) {\n if (utils.isArray(field.defaultValue)) {\n initDefaultValue = field.defaultValue;\n } else {\n initDefaultValue = [field.defaultValue];\n }\n }\n\n const valueKey = CheckboxRender.valuesValueKey(field);\n\n if (utils.isUndefined(this.field.listItem)) {\n this.setValueItems([{ label: \"\", value: \"Y\" }]);\n }\n\n let initDefaultValueFlag = false;\n this.field.listItem?.list?.forEach((item) => {\n let itemValue = item[valueKey];\n if (item.selected) {\n this.defaultCheckValue.push(itemValue ? itemValue : true);\n }\n if (initDefaultValue.includes(itemValue)) {\n initDefaultValueFlag = true;\n }\n });\n\n this.defaultCheckValue = initDefaultValueFlag ? initDefaultValue : this.defaultCheckValue;\n\n this.mounted();\n this.setDefaultOption();\n this.setValue(this.defaultCheckValue, false);\n }\n\n public mounted() {\n this.initEvent();\n }\n\n public initEvent() {\n const checkboxes = this.rowElement.querySelectorAll(this.getSelector());\n\n checkboxes.forEach((ele) => {\n ele.addEventListener(\"change\", (e: Event) => {\n customChangeEventCall(this.field, e, this, this.getValue());\n this.valid();\n });\n });\n }\n\n public getSelector() {\n return `input[type=\"checkbox\"][name=\"${this.field.$xssName}\"]`;\n }\n\n createField() {\n const field = this.field;\n\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\n\n const templates: string[] = [];\n const fieldName = field.$xssName;\n\n const labelKey = Render.valuesLabelKey(field);\n const valueKey = Render.valuesValueKey(field);\n\n templates.push(` <div class=\"df-field\"><div class=\"df-field-group\">`);\n field.listItem?.list?.forEach((val) => {\n const checkVal = val[valueKey];\n templates.push(`\n <span class=\"df-field-item ${orientationClassName(field.listItem.orientation ?? OrientationMap.horizontal)}\">\n <label>\n <input type=\"checkbox\" name=\"${fieldName}\" value=\"${checkVal ? utils.replaceXss(checkVal) : \"\"}\" class=\"df-form-field df-checkbox\" ${val.selected ? \"checked\" : \"\"} ${val.disabled ? \"disabled\" : \"\"} />\n ${Render.valuesLabelValue(labelKey, val)}\n </label>\n </span>\n `);\n });\n templates.push(`<i class=\"df-form-icon df-help-icon\"></i></div></div> ${Render.getDescriptionTemplate(field)}<div class=\"df-help-message\"></div>`);\n\n fieldContainerElement.innerHTML = templates.join(\"\");\n }\n\n public setValueItems(items: any): void {\n const containerEle = this.rowElement.querySelector(\".df-field-container\");\n if (containerEle) {\n if (this.field.listItem) {\n this.field.listItem.list = items;\n } else {\n this.field.listItem = {\n list: items,\n } as ValuesInfo;\n }\n\n this.createField();\n\n if (!utils.isBlank(this.field.$value)) {\n const currentValue = this.field.$value;\n this.field.$value = \"\";\n this.setValue(currentValue);\n }\n }\n }\n\n getValue() {\n const checkboxes = this.rowElement.querySelectorAll(this.getSelector());\n\n if (checkboxes.length > 1) {\n const checkValue: any[] = [];\n checkboxes.forEach((ele) => {\n const checkEle = ele as HTMLInputElement;\n if (checkEle.checked) {\n checkValue.push(checkEle.value);\n }\n });\n return checkValue;\n } else {\n const checkElement = this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]`) as HTMLInputElement;\n\n if (checkElement?.checked) {\n return checkElement.value ? checkElement.value : true;\n }\n\n return checkElement.value ? \"\" : false;\n }\n }\n\n setValue(value: any, changeCheckFlag?: boolean): void {\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\n value = this.field.$value;\n }\n\n this.field.$value = value;\n if (value === true) {\n (this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]`) as HTMLInputElement).checked = true;\n return;\n }\n\n if (value === false) {\n (this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]`) as HTMLInputElement).checked = false;\n return;\n }\n\n let valueArr: any[] = [];\n if (utils.isArray(value)) {\n valueArr = value;\n } else {\n valueArr.push(value);\n }\n\n const checkboxes = this.rowElement.querySelectorAll(this.getSelector());\n\n checkboxes.forEach((ele) => {\n (ele as HTMLInputElement).checked = false;\n });\n\n valueArr.forEach((val) => {\n const ele = this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"][value=\"${val}\"]`) as HTMLInputElement;\n if (ele) ele.checked = true;\n });\n }\n\n reset() {\n if (this.field.listItem?.list?.length == 1 && this.defaultCheckValue.length == 1) {\n this.setValue(true, false);\n } else {\n this.setValue(this.defaultCheckValue, false);\n }\n this.setDisabled(false);\n resetRowElementStyleClass(this.rowElement);\n }\n\n getElement(): any {\n return this.rowElement.querySelectorAll(`[name=\"${this.field.$xssName}\"]`);\n }\n\n public focus() {\n const elements = this.getElement();\n\n if (elements && elements.length > 0) {\n this.getElement()[0].focus();\n }\n }\n\n valid(): any {\n const value = this.getValue();\n\n let validResult: ValidResult | boolean = true;\n\n if (this.field.required && utils.isArray(value)) {\n if ((value as any[]).length < 1) {\n validResult = { name: this.field.name, constraint: [] };\n validResult.constraint.push(RULES.REQUIRED);\n }\n }\n\n invalidMessage(this.field, this.rowElement, validResult);\n\n return validResult;\n }\n}\n","import { FormField, ValuesInfo } from \"@t/FormField\";\nimport { Render } from \"./Render\";\nimport { ValidResult } from \"@t/ValidResult\";\nimport { OrientationMap, RULES } from \"@/constants\";\nimport { resetRowElementStyleClass, invalidMessage } from \"@/util/validUtils\";\nimport { customChangeEventCall } from \"@/event/renderEvents\";\nimport { DaraForm } from \"@/DaraForm\";\nimport * as utils from \"@/util/utils\";\nimport { orientationClassName } from \"@/util/styleUtils\";\n\nexport default class RadioRender extends Render {\n private defaultCheckValue;\n\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\n super(daraForm, field, rowElement);\n\n this.defaultCheckValue = \"\";\n let initDefaultValue = [] as any;\n if (!utils.isUndefined(field.defaultValue)) {\n initDefaultValue = field.defaultValue;\n }\n\n const valueKey = RadioRender.valuesValueKey(field);\n let initDefaultValueFlag = false;\n this.field.listItem?.list?.forEach((item) => {\n let itemValue = item[valueKey];\n if (item.selected) {\n this.defaultCheckValue = itemValue;\n }\n\n if (initDefaultValue == itemValue) {\n initDefaultValueFlag = true;\n }\n });\n\n // 처리 할것.\n\n if (initDefaultValueFlag) {\n this.defaultCheckValue = initDefaultValue;\n } else if (!this.defaultCheckValue) {\n this.defaultCheckValue = this.field.listItem?.list?.length > 0 ? this.field.listItem?.list[0][valueKey] : \"\";\n }\n\n this.mounted();\n this.setDefaultOption();\n this.setValue(this.defaultCheckValue, false);\n }\n\n public mounted() {\n this.initEvent();\n }\n\n public initEvent() {\n const checkboxes = this.rowElement.querySelectorAll(this.getSelector());\n\n checkboxes.forEach((ele) => {\n ele.addEventListener(\"change\", (e: Event) => {\n customChangeEventCall(this.field, e, this, this.getValue());\n\n this.valid();\n });\n });\n }\n\n public getSelector() {\n return `input[type=\"radio\"][name=\"${this.field.$xssName}\"]`;\n }\n\n createField() {\n const field = this.field;\n\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\n\n const templates: string[] = [];\n const fieldName = field.$xssName;\n\n const labelKey = Render.valuesLabelKey(field);\n const valueKey = Render.valuesValueKey(field);\n\n templates.push(`<div class=\"df-field\"><div class=\"df-field-group\">`);\n\n field.listItem?.list?.forEach((val) => {\n const radioVal = val[valueKey];\n\n templates.push(\n `<span class=\"df-field-item ${orientationClassName(field.orientation ?? OrientationMap.horizontal)}\">\n <label>\n <input type=\"radio\" name=\"${fieldName}\" value=\"${radioVal}\" class=\"df-form-field df-radio\" ${val.selected ? \"checked\" : \"\"} ${val.disabled ? \"disabled\" : \"\"}/>\n ${Render.valuesLabelValue(labelKey, val)}\n </label>\n </span>\n `\n );\n });\n templates.push(`<i class=\"df-form-icon df-help-icon\"></i></div></div>\n ${Render.getDescriptionTemplate(field)}\n <div class=\"df-help-message\"></div>\n `);\n\n fieldContainerElement.innerHTML = templates.join(\"\");\n\n this.initEvent();\n }\n\n public setValueItems(items: any): void {\n const containerEle = this.rowElement.querySelector(\".df-field-container\");\n if (containerEle) {\n if (this.field.listItem) {\n this.field.listItem.list = items;\n } else {\n this.field.listItem = {\n list: items,\n } as ValuesInfo;\n }\n\n this.createField();\n\n if (!utils.isBlank(this.field.$value)) {\n const currentValue = this.field.$value;\n this.field.$value = \"\";\n this.setValue(currentValue);\n }\n }\n }\n\n getValue() {\n return (this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]:checked`) as HTMLInputElement)?.value;\n }\n\n setValue(value: any, changeCheckFlag?: boolean): void {\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\n value = this.field.$value;\n }\n\n this.field.$value = value;\n if (value === true) {\n (this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]`) as HTMLInputElement).checked = true;\n return;\n }\n\n if (value === false) {\n (this.rowElement.querySelector(`[name=\"${this.field.$xssName}\"]`) as HTMLInputElement).checked = false;\n return;\n }\n\n const elements = this.rowElement.querySelectorAll(this.getSelector());\n\n elements.forEach((ele) => {\n let radioEle = ele as HTMLInputElement;\n if (radioEle.value == value) {\n radioEle.checked = true;\n } else {\n radioEle.checked = false;\n }\n });\n }\n\n reset() {\n this.setValue(this.defaultCheckValue, false);\n this.setDisabled(false);\n resetRowElementStyleClass(this.rowElement);\n }\n\n getElement(): any {\n return this.rowElement.querySelectorAll(this.getSelector());\n }\n\n public focus() {\n const elements = this.getElement();\n\n if (elements && elements.length > 0) {\n this.getElement()[0].focus();\n }\n }\n\n valid(): any {\n const value = this.getValue();\n\n let validResult: ValidResult | boolean = true;\n\n if (this.field.required) {\n if (utils.isBlank(value)) {\n validResult = { name: this.field.name, constraint: [] };\n validResult.constraint.push(RULES.REQUIRED);\n }\n }\n\n invalidMessage(this.field, this.rowElement, validResult);\n\n return validResult;\n }\n}\n","import { FormField } from \"@t/FormField\";\nimport { Render } from \"./Render\";\nimport { stringValidator } from \"@/rule/stringValidator\";\nimport { resetRowElementStyleClass, invalidMessage } from \"@/util/validUtils\";\nimport { inputEvent } from \"@/event/renderEvents\";\nimport { DaraForm } from \"@/DaraForm\";\n\nexport default class PasswordRender extends Render {\n private element: HTMLInputElement;\n\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\n super(daraForm, field, rowElement);\n\n this.mounted();\n this.setDefaultOption();\n this.setDefaultInfo();\n }\n\n mounted() {\n inputEvent(this.field, this.element, this);\n }\n\n createField() {\n const field = this.field;\n\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\n\n fieldContainerElement.innerHTML = `\n <div class=\"df-field\">\n <input type=\"password\" name=\"${field.$xssName}\" class=\"df-form-field df-password df-help-icon\" autocomplete=\"off\" />\n </div>\n ${Render.getDescriptionTemplate(field)}\n <div class=\"df-help-message\"></div>\n `;\n\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\n }\n\n getValue() {\n return this.element.value;\n }\n\n setValue(value: any, changeCheckFlag?: boolean): void {\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\n this.element.value = this.field.$value;\n return;\n }\n this.field.$value = value;\n this.element.value = value;\n }\n\n reset() {\n this.setDefaultInfo();\n this.setDisabled(false);\n resetRowElementStyleClass(this.rowElement);\n }\n\n getElement(): HTMLElement {\n return this.element;\n }\n\n valid(): any {\n const validResult = stringValidator(this.getValue(), this.field);\n\n invalidMessage(this.field, this.rowElement, validResult);\n\n return validResult;\n }\n}\n","import { FileInfo, FormField } from \"@t/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"@/constants\";\r\n\r\n/**\r\n * file validator\r\n *\r\n * @param {HTMLInputElement} element\r\n * @param {FormField} field\r\n * @param {FileInfo[]} fileList\r\n * @returns {(ValidResult | boolean)}\r\n */\r\nexport const fileValidator = (element: HTMLInputElement, field: FormField, fileList: FileInfo[]): ValidResult | boolean => {\r\n const result: ValidResult = { name: field.name, constraint: [] };\r\n\r\n if (field.required && fileList.length < 1) {\r\n result.constraint.push(RULES.REQUIRED);\r\n return result;\r\n }\r\n\r\n if (result.constraint.length > 0) {\r\n return result;\r\n }\r\n\r\n return true;\r\n};\r\n","import { FileInfo, FormField } from \"@t/FormField\";\nimport { Render } from \"./Render\";\nimport { resetRowElementStyleClass, invalidMessage } from \"@/util/validUtils\";\nimport { fileValidator } from \"@/rule/fileValidator\";\nimport Language from \"@/util/Language\";\nimport { customChangeEventCall } from \"@/event/renderEvents\";\nimport { DaraForm } from \"@/DaraForm\";\nimport { isArray } from \"@daracl/core\";\n\nexport default class FileRender extends Render {\n private element: HTMLInputElement;\n private removeIds: any[] = [];\n private uploadFiles: any = {};\n private fileList: any[] = [];\n private fileSeq = 0;\n\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\n super(daraForm, field, rowElement);\n\n this.element = rowElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\n this.fileList = field.listItem?.list || [];\n this.mounted();\n this.setDefaultOption();\n }\n\n mounted() {\n this.element.addEventListener(\"change\", (e: Event) => {\n const files = (e.target as HTMLInputElement)?.files;\n\n if (files) {\n let fileList = [];\n for (let item of files) {\n fileList.push(item);\n }\n this.addFiles(fileList);\n }\n customChangeEventCall(this.field, e, this, this.fileList);\n this.valid();\n });\n\n this.fileList.forEach((file) => {\n file.$seq = this.fileSeq += 1;\n });\n\n this.setFileList(this.fileList);\n }\n\n createField() {\n const field = this.field;\n\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\n\n fieldContainerElement.innerHTML = `\n <div class=\"df-field\">\n <span class=\"df-file-wrapper\">\n <label class=\"df-file-label\">\n <input type=\"file\" name=\"${field.$xssName}\" class=\"df-form-field df-file\" multiple />\n ${Language.getMessage(\"fileButton\")}\n </label>\n <i class=\"df-form-icon df-help-icon\"></i>\n </span>\n </div>\n ${Render.getDescriptionTemplate(field)}\n <div class=\"df-file-list\"></div>\n <div class=\"df-help-message\"></div>\n `;\n\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\n }\n\n addFiles(files: any[]) {\n let addFlag = false;\n\n const newFiles: FileInfo[] = [];\n\n for (let item of files) {\n const fileCheckList = this.fileList.filter((fileItem) => fileItem.fileName == item.name && fileItem.fileSize == item.size && fileItem.lastModified == item.lastModified);\n\n if (fileCheckList.length > 0) continue;\n this.fileSeq += 1;\n this.uploadFiles[this.fileSeq] = item;\n\n let newFileInfo = {\n fileName: item.name,\n $seq: this.fileSeq,\n fileSize: item.size,\n lastModified: item.lastModified,\n } as FileInfo;\n\n newFiles.push(newFileInfo);\n addFlag = true;\n }\n if (addFlag) {\n this.setFileList(newFiles);\n this.fileList.push(...newFiles);\n }\n }\n\n private setFileList(fileList: FileInfo[], initFlag?: boolean | undefined) {\n const fileListElement = this.rowElement.querySelector(\".df-file-list\");\n\n if (fileListElement) {\n if (initFlag === true) {\n fileListElement.innerHTML = \"\";\n }\n\n const fileTemplateHtml: string[] = [];\n\n fileList.forEach((file) => {\n fileTemplateHtml.push(`\n <div class=\"df-file-item\" data-seq=\"${file.$seq}\">\n ${file.fileId ? '<span class=\"df-file-icon df-file-download\"></span>' : '<span class=\"df-file-icon\"></span>'} <span class=\"df-file-icon df-file-remove\"></span>\n <span class=\"df-file-name\">${file.fileName}</span > \n </div>`);\n });\n\n fileListElement.insertAdjacentHTML(\"beforeend\", fileTemplateHtml.join(\"\"));\n\n fileList.forEach((item) => {\n this.removeFileEvent(item, fileListElement);\n this.downloadFileEvent(item, fileListElement);\n });\n }\n }\n\n /**\n * 파일 다운로드 이벤트 처리.\n *\n * @param item\n * @param fileListElement\n */\n private downloadFileEvent(item: FileInfo, fileListElement: Element) {\n const ele = fileListElement.querySelector(`[data-seq=\"${item.$seq}\"] .df-file-download`);\n if (ele) {\n ele.addEventListener(\"click\", (evt: Event) => {\n const fileItemElement = (evt.target as Element).closest(\".df-file-item\");\n\n if (fileItemElement) {\n const attrSeq = fileItemElement.getAttribute(\"data-seq\");\n if (attrSeq) {\n const seq = parseInt(attrSeq, 10);\n const idx = this.fileList.findIndex((v) => v.$seq === seq);\n\n const item = this.fileList[idx];\n\n if (item[\"url\"]) {\n location.href = item[\"url\"];\n return;\n }\n\n if (this.field.fileDownload) {\n this.field.fileDownload.call(null, { file: item, field: this.field });\n return;\n }\n }\n }\n });\n }\n }\n\n /**\n * 파일 삭제 처리.\n *\n * @param item\n * @param fileListElement\n */\n private removeFileEvent(item: FileInfo, fileListElement: Element) {\n const ele = fileListElement.querySelector(`[data-seq=\"${item.$seq}\"] .df-file-remove`);\n if (ele) {\n ele.addEventListener(\"click\", (evt: Event) => {\n const fileItemElement = (evt.target as Element).closest(\".df-file-item\");\n\n if (fileItemElement) {\n const attrSeq = fileItemElement.getAttribute(\"data-seq\");\n if (attrSeq) {\n const seq = parseInt(attrSeq, 10);\n const removeIdx = this.fileList.findIndex((v) => v.$seq === seq);\n\n const removeItem = this.fileList[removeIdx];\n\n this.fileList.splice(removeIdx, 1);\n delete this.uploadFiles[seq];\n fileItemElement.remove();\n\n if (removeItem.fileId) {\n this.removeIds.push(removeItem.fileId);\n }\n }\n }\n this.valid();\n });\n }\n }\n\n getValue() {\n return {\n uploadFile: Object.values(this.uploadFiles),\n removeIds: this.removeIds,\n };\n }\n\n public setValueItems(value: any): void {\n this.fileList = [];\n this.uploadFiles = [];\n this.removeIds = [];\n for (let file of value) {\n file.$seq = this.fileSeq += 1;\n\n this.fileList.push(file);\n }\n\n this.setFileList(this.fileList, true);\n }\n\n setValue(value: any): void {\n if (isArray(value)) {\n this.setValueItems(value);\n }\n this.element.value = \"\";\n }\n\n reset() {\n this.setValue(\"\");\n this.setValueItems([]);\n resetRowElementStyleClass(this.rowElement);\n }\n\n getElement(): HTMLInputElement {\n return this.element;\n }\n\n valid(): any {\n const validResult = fileValidator(this.element, this.field, this.fileList);\n\n invalidMessage(this.field, this.rowElement, validResult);\n\n return validResult;\n }\n}\n","import { FormField } from \"@t/FormField\";\nimport { Render } from \"./Render\";\nimport { invalidMessage, resetRowElementStyleClass } from \"@/util/validUtils\";\nimport { DaraForm } from \"@/DaraForm\";\nimport * as utils from \"@/util/utils\";\nimport { stringValidator } from \"@/rule/stringValidator\";\n\nexport default class CustomRender extends Render {\n private customFunction;\n\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\n super(daraForm, field, rowElement);\n if (field.renderer) {\n this.customFunction = field.renderer;\n this.mounted();\n this.setDefaultOption();\n this.setDefaultInfo();\n } else {\n this.customFunction = {} as any;\n }\n }\n\n mounted() {\n if (this.customFunction.mounted) {\n (this.customFunction.mounted as any).call(this, this.field, this.rowElement);\n }\n }\n\n static isDataRender(): boolean {\n return false;\n }\n\n createField() {\n const field = this.field;\n\n const fieldTemplate = utils.isEmpty(field.template) ? \"\" : utils.isString(field.template) ? field.template : field.template();\n\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\n\n fieldContainerElement.innerHTML = ` <div class=\"df-field\">\n ${fieldTemplate}\n </div>\n ${Render.getDescriptionTemplate(field)}\n <div class=\"df-help-message\"></div>`;\n }\n\n getValue() {\n if (this.customFunction.getValue) {\n return (this.customFunction.getValue as any).call(this, this.field, this.rowElement);\n }\n return \"\";\n }\n\n setValue(value: any, changeCheckFlag?: boolean): void {\n if (this.customFunction.setValue) {\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\n value = this.field.$value;\n }\n (this.customFunction.setValue as any).call(this, value, this.field, this.rowElement);\n }\n\n this.field.$value = value;\n }\n\n reset() {\n this.setDefaultInfo();\n resetRowElementStyleClass(this.rowElement);\n }\n\n getElement() {\n if (this.customFunction.getElement) {\n return (this.customFunction.getElement as any).call(this, this.field, this.rowElement);\n }\n return null;\n }\n\n valid(): any {\n if (this.customFunction.valid) {\n const validResult = (this.customFunction.valid as any).call(this, this.field, this.rowElement);\n\n invalidMessage(this.field, this.rowElement, validResult);\n\n return;\n }\n const validResult = stringValidator(this.getValue(), this.field);\n\n invalidMessage(this.field, this.rowElement, validResult);\n\n return validResult;\n }\n\n /**\n * focus\n */\n focus(): void {\n if (this.customFunction.focus) {\n (this.customFunction.focus as any).call(this, this.field, this.rowElement);\n }\n }\n}\n","import { FormField } from \"@t/FormField\";\nimport { Render } from \"./Render\";\nimport { DaraForm } from \"@/DaraForm\";\n\nexport default class GroupRender extends Render {\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\n super(daraForm, field, rowElement);\n }\n\n public mounted() {}\n\n static isDataRender(): boolean {\n return false;\n }\n\n createField() {\n return \"\";\n }\n\n getValue() {\n return null;\n }\n\n setValue(value: any): void {}\n\n reset() {}\n\n getElement(): HTMLElement {\n return this.rowElement;\n }\n\n valid(): any {\n return true;\n }\n\n public addChildField(element: Element) {\n let addContainer = this.rowElement.querySelector(\".df-field-container\");\n\n if (addContainer) {\n addContainer.append(element);\n } else {\n this.rowElement.append(element);\n }\n }\n\n focus(): void {}\n}\n","import { FormField } from \"@t/FormField\";\nimport { Render } from \"./Render\";\nimport { DaraForm } from \"@/DaraForm\";\n\nexport default class HiddenRender extends Render {\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\n super(daraForm, field, rowElement);\n this.field.$value = field.defaultValue;\n }\n\n mounted() {}\n\n createField() {\n return ``;\n }\n\n getValue() {\n return this.field.$value;\n }\n\n setValue(value: any): void {\n this.field.$value = value;\n }\n\n reset() {\n this.setValue(this.field.defaultValue);\n }\n\n getElement() {\n return;\n }\n\n valid(): any {\n return true;\n }\n}\n","import { FormField } from \"@t/FormField\";\nimport { Render } from \"./Render\";\nimport { DaraForm } from \"@/DaraForm\";\n\nexport default class ButtonRender extends Render {\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\n super(daraForm, field, rowElement);\n this.mounted();\n this.setDefaultOption();\n }\n\n mounted() {\n this.rowElement.querySelector(`#${this.field.$key}`)?.addEventListener(\"click\", (evt) => {\n if (this.field.onClick) {\n this.field.onClick.call(null, this.field);\n }\n });\n }\n\n static isDataRender(): boolean {\n return false;\n }\n\n createField() {\n const field = this.field;\n\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\n\n fieldContainerElement.innerHTML = `\n <button type=\"button\" id=\"${field.$key}\" class=\"df-btn\">${field.label}</button> ${Render.getDescriptionTemplate(field)}\n `;\n }\n\n getValue() {\n return \"\";\n }\n\n setValue(value: any): void {}\n\n reset() {\n this.setDisabled(false);\n }\n\n getElement() {\n return null;\n }\n\n valid(): any {\n return true;\n }\n}\n","import { FormField } from \"@t/FormField\";\nimport { Render } from \"./Render\";\nimport { numberValidator } from \"@/rule/numberValidator\";\nimport { resetRowElementStyleClass, invalidMessage } from \"@/util/validUtils\";\nimport { customChangeEventCall, numberInputEvent } from \"@/event/renderEvents\";\nimport { DaraForm } from \"@/DaraForm\";\n\nexport default class RangeRender extends Render {\n private element: HTMLInputElement;\n private rangeNumElement: Element;\n\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\n super(daraForm, field, rowElement);\n\n this.rangeNumElement = rowElement.querySelector(\".df-range-num\") as Element;\n\n this.mounted();\n this.setDefaultOption();\n this.setDefaultInfo();\n }\n\n mounted() {\n this.element.addEventListener(\"input\", (e: any) => {\n this.rangeNumElement.innerHTML = e.target.value;\n\n this.element.setAttribute(\"title\", e.target.value);\n customChangeEventCall(this.field, e, this, this.getValue());\n this.valid();\n });\n }\n\n createField() {\n const field = this.field;\n\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\n\n fieldContainerElement.innerHTML = `\n <div class=\"df-field\">\n <span class=\"df-range-num\">${field.defaultValue ? field.defaultValue : 0}</span>\n <input type=\"range\" name=\"${field.$xssName}\" class=\"df-form-field df-range df-help-icon\" min=\"${field.rule.minimum}\" max=\"${field.rule.maximum}\"/>\n </div> \n ${Render.getDescriptionTemplate(field)}\n <div class=\"df-help-message\"></div>\n `;\n\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\n }\n\n getValue() {\n return this.element.value;\n }\n\n setValue(value: any, changeCheckFlag?: boolean): void {\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\n this.element.value = this.field.$value;\n return;\n }\n this.field.$value = value;\n this.element.value = value;\n }\n\n reset() {\n this.setDefaultInfo();\n this.setDisabled(false);\n resetRowElementStyleClass(this.rowElement);\n }\n\n getElement(): HTMLElement {\n return this.element;\n }\n\n valid(): any {\n const validResult = numberValidator(this.getValue(), this.field);\n\n invalidMessage(this.field, this.rowElement, validResult);\n\n return validResult;\n }\n}\n","import { leftPad, isNumeric, leftPadClamp, isFunction } from \"@daracl/core\";\nlet localeMessage = {\n year: \"Year\",\n month: \"Month\",\n day: \"Day\",\n am: \"AM\",\n pm: \"PM\",\n today: \"Today\",\n ok: \"Ok\",\n months: {\n full: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n abbr: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n },\n weeks: {\n full: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n abbr: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]\n }\n};\nclass Language {\n constructor() {\n this.lang = localeMessage;\n }\n setDefaultMessage(lang) {\n localeMessage = Object.assign(localeMessage, lang);\n }\n /**\n * 다국어 메시지 등록\n *\n * @public\n * @param {?Message} [lang] 둥록할 메시지\n */\n set(lang) {\n this.lang = Object.assign({}, localeMessage, lang);\n }\n /**\n * 메시지 얻기\n *\n * @public\n * @param {string} messageKey 메시지 키\n * @returns {*}\n */\n getMessage(messageKey) {\n return this.lang[messageKey];\n }\n getMonthsMessage(idx, mode = \"abbr\") {\n return this.lang.months[mode][idx] || \"\";\n }\n getWeeksMessage(idx, mode = \"abbr\") {\n return this.lang.weeks[mode][idx] || \"\";\n }\n getMonthsIdx(val, mode = \"abbr\") {\n return mode == \"full\" ? this.lang.months.full.indexOf(val) : this.lang.months.abbr.indexOf(val);\n }\n getWeeksIdx(val, mode = \"abbr\") {\n return mode == \"full\" ? this.lang.weeks.full.indexOf(val) : this.lang.weeks.abbr.indexOf(val);\n }\n}\nconst Lanauage = new Language();\nconst EXPRESSIONS_FORMAT = [\"YY\", \"YYYY\", \"MMMM\", \"MMM\", \"MM\", \"M\", \"dddd\", \"ddd\", \"dd\", \"d\", \"DD\", \"D\", \"S\", \"HH\", \"H\", \"hh\", \"h\", \"mm\", \"m\", \"ss\", \"s\", \"SSS\", \"zzzz\", \"zzz\", \"zz\", \"z\", \"a\", \"A\"];\nlet MAX_CHAR_LENGTH = 0;\nlet DEFAULT_FORMAT = {\n year: \"YYYY\",\n month: \"YYYY-MM\",\n date: \"YYYY-MM-DD\",\n time: \"HH:mm\",\n datetime: \"YYYY-MM-DD HH:mm\"\n};\nconst DAY_STYLE_CLASS = [\"ddtp-sun\", \"ddtp-mon\", \"ddtp-tue\", \"ddtp-wed\", \"ddtp-thu\", \"ddtp-fri\", \"ddtp-sat\"];\nvar DateViewMode = /* @__PURE__ */ ((DateViewMode2) => {\n DateViewMode2[\"year\"] = \"year\";\n DateViewMode2[\"month\"] = \"month\";\n DateViewMode2[\"date\"] = \"date\";\n DateViewMode2[\"datetime\"] = \"datetime\";\n DateViewMode2[\"time\"] = \"time\";\n return DateViewMode2;\n})(DateViewMode || {});\nEXPRESSIONS_FORMAT.forEach((item) => {\n MAX_CHAR_LENGTH = Math.max(item.length, MAX_CHAR_LENGTH);\n});\nconst format = (date, format2) => {\n format2 = format2 || \"YYYY-MM-DD\";\n const len = format2.length;\n let result = [];\n for (let i = 0; i < len; ) {\n let minLen = Math.min(MAX_CHAR_LENGTH, len - i);\n let j = minLen;\n for (; j > 0; j--) {\n const v = format2.substring(i, i + j);\n if (EXPRESSIONS_FORMAT.includes(v)) {\n try {\n result.push(expressionsFunction$1[v](date));\n } catch (e) {\n console.log(EXPRESSIONS_FORMAT.includes(v), v, e);\n }\n break;\n }\n }\n if (j < 1) {\n result.push(format2.substring(i, i + 1));\n i += 1;\n } else {\n i += j;\n }\n }\n return result.join(\"\");\n};\nconst expressionsFunction$1 = {\n YY: (date) => {\n return String(date.getFullYear()).slice(-2);\n },\n YYYY: (date) => {\n return String(date.getFullYear());\n },\n M: (date) => {\n return String(date.getMonth() + 1);\n },\n MM: (date) => {\n return leftPad(date.getMonth() + 1, 2);\n },\n MMM: (date) => {\n return Lanauage.getMonthsMessage(date.getMonth());\n },\n MMMM: (date) => {\n return Lanauage.getMonthsMessage(date.getMonth(), \"full\");\n },\n D: (date) => {\n return String(date.getDate());\n },\n DD: (date) => {\n return leftPad(date.getDate(), 2);\n },\n d: (date) => {\n return String(date.getDate());\n },\n dd: (date) => {\n return leftPad(date.getDate(), 2);\n },\n ddd: (date) => {\n return Lanauage.getWeeksMessage(date.getDay());\n },\n dddd: (date) => {\n return Lanauage.getWeeksMessage(date.getDay(), \"full\");\n },\n H: (date) => {\n return String(date.getHours());\n },\n HH: (date) => {\n return leftPad(date.getHours(), 2);\n },\n h: (date) => {\n return getH(date);\n },\n hh: (date) => {\n return leftPad(getH(date), 2);\n },\n a: (date) => {\n return String(date.getFullYear()).slice(-2);\n },\n A: (date) => {\n return getMeridiem(date);\n },\n m: (date) => {\n return String(date.getMinutes());\n },\n mm: (date) => {\n return leftPad(date.getMinutes(), 2);\n },\n s: (date) => {\n return String(date.getSeconds());\n },\n ss: (date) => {\n return leftPad(date.getSeconds(), 2);\n },\n SSS: (date) => {\n return leftPad(date.getMilliseconds(), 3);\n }\n};\nfunction getH(date) {\n let hour = date.getHours();\n if (hour > 12) {\n hour -= 12;\n } else if (hour < 1) {\n hour = 12;\n }\n return hour;\n}\nfunction getMeridiem(date, isUpper, isShort) {\n const hour = date.getHours();\n let m = hour < 12 ? \"am\" : \"pm\";\n m = Lanauage.getMessage(m);\n m = m.toUpperCase();\n return m;\n}\nconst parser = (dateStr, format2) => {\n if (dateStr.length > 1e3) {\n return null;\n }\n format2 = format2 || DEFAULT_FORMAT.date;\n const dateInfo = {\n year: (/* @__PURE__ */ new Date()).getFullYear(),\n month: 0,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n isPm: false,\n isH: false,\n charIdx: 0\n };\n const len = format2.length;\n let startIdx = 0;\n for (let i = 0; i < len; ) {\n let minLen = Math.min(MAX_CHAR_LENGTH, len - i);\n let j = minLen;\n for (; j > 0; j--) {\n const v = format2.substring(i, i + j);\n if (EXPRESSIONS_FORMAT.includes(v)) {\n const expInfo = expressionsFunction[v];\n const val = matchFind(dateStr.substring(startIdx), expInfo[0]);\n expInfo[1](dateInfo, val);\n startIdx += val.length;\n break;\n }\n }\n if (j < 1) {\n i += 1;\n startIdx += 1;\n } else {\n i += j;\n }\n }\n if (dateInfo.hour != null && !dateInfo.isH) {\n if (dateInfo.isPm && +dateInfo.hour !== 12) {\n dateInfo.hour = +dateInfo.hour + 12;\n } else if (!dateInfo.isPm && +dateInfo.hour === 12) {\n dateInfo.hour = 0;\n }\n }\n let date;\n date = new Date(dateInfo.year, dateInfo.month, dateInfo.day, dateInfo.hour, dateInfo.minute, dateInfo.second, dateInfo.millisecond);\n return date;\n};\nconst matchFind = (val, regexp) => {\n const match = regexp.exec(val);\n return match == null ? \"\" : match[0];\n};\nconst digitsCheck = {\n twoOptional: /\\d\\d?/,\n two: /\\d\\d/,\n three: /\\d{3}/,\n four: /\\d{4}/\n};\nconst word = /[^\\s]+/;\nconst expressionsFunction = {\n YY: [\n digitsCheck[\"two\"],\n (dateInfo, val) => {\n dateInfo.year = +((\"\" + (/* @__PURE__ */ new Date()).getFullYear()).substring(0, 2) + val);\n return dateInfo;\n }\n ],\n YYYY: [\n digitsCheck[\"four\"],\n (dateInfo, val) => {\n dateInfo.year = +val;\n return dateInfo;\n }\n ],\n M: [\n digitsCheck[\"twoOptional\"],\n (dateInfo, val) => {\n dateInfo.month = +val - 1;\n return dateInfo;\n }\n ],\n MM: [\n digitsCheck[\"two\"],\n (dateInfo, val) => {\n dateInfo.month = +val - 1;\n return dateInfo;\n }\n ],\n MMM: [\n word,\n (dateInfo, val) => {\n dateInfo.month = Lanauage.getMonthsIdx(val, \"abbr\");\n return dateInfo;\n }\n ],\n MMMM: [\n word,\n (dateInfo, val) => {\n dateInfo.month = Lanauage.getMonthsIdx(val, \"full\");\n return dateInfo;\n }\n ],\n D: [\n digitsCheck[\"twoOptional\"],\n (dateInfo, val) => {\n dateInfo.day = +val;\n return dateInfo;\n }\n ],\n DD: [\n digitsCheck[\"two\"],\n (dateInfo, val) => {\n dateInfo.day = +val;\n return dateInfo;\n }\n ],\n d: [\n digitsCheck[\"twoOptional\"],\n (dateInfo, val) => {\n dateInfo.day = +val;\n return dateInfo;\n }\n ],\n dd: [\n digitsCheck[\"two\"],\n (dateInfo, val) => {\n dateInfo.day = +val;\n return dateInfo;\n }\n ],\n ddd: [\n word,\n (dateInfo, val) => {\n return dateInfo;\n }\n ],\n dddd: [\n word,\n (dateInfo, val) => {\n return dateInfo;\n }\n ],\n H: [\n digitsCheck[\"twoOptional\"],\n (dateInfo, val) => {\n dateInfo.hour = +val;\n dateInfo.isH = true;\n return dateInfo;\n }\n ],\n HH: [\n digitsCheck[\"two\"],\n (dateInfo, val) => {\n dateInfo.hour = +val;\n dateInfo.isH = true;\n return dateInfo;\n }\n ],\n h: [\n digitsCheck[\"twoOptional\"],\n (dateInfo, val) => {\n dateInfo.hour = +val;\n return dateInfo;\n }\n ],\n hh: [\n digitsCheck[\"two\"],\n (dateInfo, val) => {\n dateInfo.hour = +val;\n return dateInfo;\n }\n ],\n a: [\n word,\n (dateInfo, val) => {\n if (Lanauage.getMessage(\"am\") != val.toLowerCase()) {\n dateInfo.isPm = true;\n }\n return dateInfo;\n }\n ],\n A: [\n word,\n (dateInfo, val) => {\n if (Lanauage.getMessage(\"am\") != val.toLowerCase()) {\n dateInfo.isPm = true;\n }\n return dateInfo;\n }\n ],\n m: [\n digitsCheck[\"twoOptional\"],\n (dateInfo, val) => {\n dateInfo.minute = +val;\n return dateInfo;\n }\n ],\n mm: [\n digitsCheck[\"two\"],\n (dateInfo, val) => {\n dateInfo.minute = +val;\n return dateInfo;\n }\n ],\n s: [\n digitsCheck[\"twoOptional\"],\n (dateInfo, val) => {\n dateInfo.second = +val;\n return dateInfo;\n }\n ],\n ss: [\n digitsCheck[\"two\"],\n (dateInfo, val) => {\n dateInfo.second = +val;\n return dateInfo;\n }\n ],\n SSS: [\n digitsCheck[\"three\"],\n (dateInfo, val) => {\n dateInfo.millisecond = +val;\n return dateInfo;\n }\n ]\n};\nfunction closestElement(el, checkElement) {\n let currentEl = el;\n while (currentEl) {\n if (currentEl == checkElement) {\n return true;\n }\n currentEl = currentEl.parentElement;\n }\n return false;\n}\nclass DaraDate {\n constructor(dt) {\n this.date = dt;\n }\n setYear(num) {\n this.date.setFullYear(num);\n return this;\n }\n addYear(num) {\n this.date.setFullYear(this.date.getFullYear() + num);\n return this;\n }\n addMonth(num) {\n this.date.setMonth(this.date.getMonth() + num);\n return this;\n }\n setMonth(num) {\n this.date.setMonth(num);\n return this;\n }\n setDate(num) {\n this.date.setDate(num);\n return this;\n }\n addDate(num) {\n this.date.setDate(this.date.getDate() + num);\n return this;\n }\n addWeek(num) {\n this.date.setDate(this.date.getDate() + num * 7);\n return this;\n }\n addHours(num) {\n this.date.setHours(this.date.getHours() + num);\n return this;\n }\n setHour(num) {\n this.date.setHours(num);\n return this;\n }\n addMinutes(num) {\n this.date.setMinutes(this.date.getMinutes() + num);\n return this;\n }\n setMinutes(num) {\n this.date.setMinutes(num);\n return this;\n }\n addSeconds(num) {\n this.date.setSeconds(this.date.getSeconds() + num);\n return this;\n }\n addMilliseconds(num) {\n this.date.setMilliseconds(this.date.getMilliseconds() + num);\n return this;\n }\n compare(date) {\n if (this.date.valueOf() < date.valueOf()) {\n return -1;\n } else if (this.date.valueOf() > date.valueOf()) {\n return 1;\n }\n return 0;\n }\n getYear() {\n return this.date.getFullYear();\n }\n getMonth() {\n return this.date.getMonth() + 1;\n }\n getDate() {\n return this.date.getDate();\n }\n getDay() {\n return this.date.getDay();\n }\n getTime() {\n return this.date.getTime();\n }\n format(format$1) {\n return format(this.date, format$1);\n }\n clone() {\n return new DaraDate(new Date(this.date.valueOf()));\n }\n}\nlet DEFAULT_OPTIONS = {\n inline: false,\n // layer or innerhtml\n weekStartDay: 0,\n initialDate: \"\",\n autoClose: true,\n isRTL: false,\n mode: DateViewMode.date,\n enableTodayBtn: false,\n showMonthAfterYear: false,\n isPositionFixed: false,\n format: \"\",\n zIndex: 1e3,\n minDate: \"\",\n maxDate: \"\",\n beforeDrawDate: (dt) => {\n return {\n check: false,\n style: \"\",\n tooltip: \"\"\n };\n }\n};\nfunction hiddenElement() {\n var _a;\n if (document.getElementById(\"hiddenDaraDatetimeElement\") == null) {\n (_a = document.querySelector(\"body\")) == null ? void 0 : _a.insertAdjacentHTML(\"beforeend\", `<div id=\"hiddenDaraDatetimeElement\" class=\"daracl-datetime-hidden\"></div>`);\n }\n return document.getElementById(\"hiddenDaraDatetimeElement\");\n}\nlet daraDatetimeIdx = 0;\nconst _DateTimePicker = class _DateTimePicker {\n constructor(selector, options, message) {\n var _a;\n this.isInput = false;\n this.isVisible = false;\n this.minYear = -1;\n this.maxYear = -1;\n this.minMonth = -1;\n this.maxMonth = -1;\n this.dayOrder = [0, 1, 2, 3, 4, 5, 6];\n this._documentClickEvent = (e) => {\n if (this.isVisible && e.target != this.targetElement && !closestElement(e.target, this.datetimeElement)) {\n this.hide();\n }\n };\n this.options = Object.assign({}, DEFAULT_OPTIONS, options);\n daraDatetimeIdx += 1;\n let selectorElement;\n if (typeof selector === \"string\") {\n selectorElement = document.querySelector(selector);\n } else {\n selectorElement = selector;\n }\n if (!selectorElement) {\n throw new Error(`${selector} datetimepicker element not found`);\n }\n this._viewMode = Object.keys(DateViewMode).includes(this.options.mode) ? this.options.mode : DateViewMode.date;\n this.initMode = this._viewMode;\n Lanauage.set(message);\n if (this.initMode == DateViewMode.year) {\n this.dateFormat = this.options.format || DEFAULT_FORMAT.year;\n } else if (this.initMode == DateViewMode.month) {\n this.dateFormat = this.options.format || DEFAULT_FORMAT.month;\n } else if (this.initMode == DateViewMode.time) {\n this.dateFormat = this.options.format || DEFAULT_FORMAT.time;\n } else if (this.initMode == DateViewMode.datetime) {\n this.dateFormat = this.options.format || DEFAULT_FORMAT.datetime;\n } else {\n this.dateFormat = this.options.format || DEFAULT_FORMAT.date;\n }\n let viewDate;\n if (this.options.initialDate) {\n if (typeof this.options.initialDate === \"string\") {\n viewDate = new DaraDate(parser(this.options.initialDate, this.dateFormat) || /* @__PURE__ */ new Date());\n } else {\n viewDate = new DaraDate(this.options.initialDate);\n }\n } else {\n viewDate = new DaraDate(/* @__PURE__ */ new Date());\n this.options.initialDate = viewDate.format(this.dateFormat);\n }\n this.setWeekDays();\n this.todayDate = viewDate.format(DEFAULT_FORMAT.date);\n this.currentDate = viewDate;\n this.targetElement = selectorElement;\n this.minDate = this._minDate();\n this.maxDate = this._maxDate();\n if (this.options.inline) {\n this.datetimeElement = selectorElement;\n this.datetimeElement.className = `daracl-datetime-wrapper ddtp-${daraDatetimeIdx} embed`;\n } else {\n this.isInput = true;\n this.targetElement.setAttribute(\"value\", viewDate.format(this.dateFormat));\n const datetimeElement = document.createElement(\"div\");\n datetimeElement.className = `daracl-datetime-wrapper ddtp-${daraDatetimeIdx} layer`;\n datetimeElement.setAttribute(\"style\", `z-index:${this.options.zIndex};`);\n (_a = hiddenElement()) == null ? void 0 : _a.appendChild(datetimeElement);\n this.datetimeElement = datetimeElement;\n this.initTargetEvent();\n }\n this.createDatetimeTemplate();\n if (this.isTimeMode()) {\n this.hourInputEle = this.datetimeElement.querySelector(\".ddtp-hour\");\n this.minuteInputEle = this.datetimeElement.querySelector(\".ddtp-minute\");\n } else {\n this.hourInputEle = {};\n this.minuteInputEle = {};\n }\n this.changeViewMode(this._viewMode);\n this.initHeaderEvent();\n this.initDateEvent();\n this.initTimeEvent();\n }\n setWeekDays() {\n let weekStartDay = this.options.weekStartDay;\n if (weekStartDay == 0) return;\n if (weekStartDay < 0 || weekStartDay > 6) {\n weekStartDay = 0;\n }\n for (let i = 0; i < 7; i++) {\n let day = weekStartDay + i;\n this.dayOrder[i] = day < 7 ? day : day - 7;\n }\n }\n static create(selector, options, message) {\n return new _DateTimePicker(selector, options, message);\n }\n /**\n * default date format setting\n * @example\n ```\n setDefaultFormat({\n year: \"YYYY\",\n month: \"YYYY-MM\",\n date: \"YYYY-MM-DD\",\n time: \"HH:mm\",\n datetime: \"YYYY-MM-DD HH:mm\",\n });\n ```\n * @public\n * @static\n * @param {*} dateFormat\n */\n static setDefaultFormat(dateFormat) {\n Object.assign(DEFAULT_FORMAT, dateFormat);\n }\n _minDate() {\n let minDate = this.options.minDate;\n if (minDate != \"\") {\n if (typeof minDate === \"string\") {\n const dt = parser(minDate, this.dateFormat);\n if (!dt) {\n return -1;\n }\n minDate = dt;\n }\n this.minYear = minDate.getFullYear();\n this.minMonth = +(this.minYear + leftPad(minDate.getMonth(), 2));\n return new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate(), 0, 0).getTime();\n }\n return -1;\n }\n _maxDate() {\n let maxDate = this.options.maxDate;\n if (maxDate != \"\") {\n if (typeof maxDate === \"string\") {\n const dt = parser(maxDate, this.dateFormat);\n if (!dt) {\n return -1;\n }\n maxDate = dt;\n }\n this.maxYear = maxDate.getFullYear();\n this.maxMonth = +(this.maxYear + leftPad(maxDate.getMonth(), 2));\n return new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59).getTime();\n }\n return -1;\n }\n set viewMode(mode) {\n if (this._viewMode === mode) {\n return;\n }\n this._viewMode = mode;\n this.changeViewMode(mode);\n }\n get viewMode() {\n return this._viewMode;\n }\n /**\n * 모드 change\n * @param mode\n */\n changeViewMode(mode) {\n var _a;\n (_a = this.datetimeElement.querySelector(\".ddtp-datetime\")) == null ? void 0 : _a.setAttribute(\"view-mode\", mode);\n if (mode === \"year\") {\n this.yearDraw();\n } else if (mode === \"month\") {\n this.monthDraw();\n } else {\n this.dayDraw();\n }\n }\n /**\n * init header event\n *\n * @public\n */\n initHeaderEvent() {\n var _a, _b, _c, _d;\n const isRTL = this.options.isRTL;\n (_a = this.datetimeElement.querySelector(\".ddtp-move-btn.prev\")) == null ? void 0 : _a.addEventListener(\"click\", (e) => {\n this.moveDate(isRTL ? \"next\" : \"prev\", e);\n });\n (_b = this.datetimeElement.querySelector(\".ddtp-move-btn.next\")) == null ? void 0 : _b.addEventListener(\"click\", (e) => {\n this.moveDate(isRTL ? \"prev\" : \"next\", e);\n });\n (_c = this.datetimeElement.querySelector(\".ddtp-header-year\")) == null ? void 0 : _c.addEventListener(\"click\", (e) => {\n this.viewMode = DateViewMode.year;\n });\n (_d = this.datetimeElement.querySelector(\".ddtp-header-month\")) == null ? void 0 : _d.addEventListener(\"click\", (e) => {\n this.viewMode = DateViewMode.month;\n });\n }\n /**\n * 날짜 달력 이벤트처리.\n */\n initDateEvent() {\n var _a, _b;\n (_a = this.datetimeElement.querySelector(\".ddtp-day-body\")) == null ? void 0 : _a.addEventListener(\"click\", (e) => {\n var _a2;\n const targetEle = e.target;\n if (targetEle.classList.contains(\"ddtp-day\") || targetEle.closest(\".ddtp-day\")) {\n const selectDate = targetEle.getAttribute(\"data-day\") || \"1\";\n const mmDD = selectDate.split(\",\");\n this.currentDate.setMonth(+mmDD[0] - 1);\n this.currentDate.setDate(+mmDD[1]);\n if (this.isDayDisabled(this.currentDate)) {\n return;\n }\n (_a2 = this.datetimeElement.querySelector(\".select\")) == null ? void 0 : _a2.classList.remove(\"select\");\n targetEle.classList.add(\"select\");\n if (this.isTimeMode()) {\n this.currentDate.setHour(+this.hourInputEle.value);\n this.currentDate.setMinutes(+this.minuteInputEle.value);\n }\n this.dateChangeEvent(e);\n }\n });\n (_b = this.datetimeElement.querySelector(\".ddtp-today\")) == null ? void 0 : _b.addEventListener(\"click\", (e) => {\n const initDate = new DaraDate(parser(this.todayDate, DEFAULT_FORMAT.date) || /* @__PURE__ */ new Date());\n this.currentDate.setYear(initDate.getYear());\n this.currentDate.setMonth(initDate.getMonth() - 1);\n this.currentDate.setDate(initDate.getDate());\n this.changeViewMode(this.initMode);\n });\n }\n isTimeMode() {\n return this._viewMode === DateViewMode.time || this._viewMode === DateViewMode.datetime;\n }\n getTimeNumberValue(val) {\n if (!isNumeric(val)) {\n return 0;\n }\n return parseInt(val, 10);\n }\n /**\n * 시간 분 설정 이벤트 처리.\n *\n * @public\n */\n initTimeEvent() {\n var _a;\n if (!this.isTimeMode()) return;\n let hh = this.currentDate.format(\"HH\");\n const datetimeElement = this.datetimeElement;\n const hourInputEle = datetimeElement.querySelector(\".ddtp-hour\");\n const hourRangeEle = datetimeElement.querySelector(\".ddtp-hour-range\");\n hourInputEle.value = hh;\n hourRangeEle.value = hh;\n hourInputEle.addEventListener(\"input\", (e) => {\n const targetElement = e.target;\n let val = this.getTimeNumberValue(targetElement.value);\n let addVal = leftPadClamp(val, 2, \"0\");\n if (parseInt(addVal, 10) > 23) {\n addVal = \"23\";\n }\n hourInputEle.value = addVal;\n hourRangeEle.value = addVal;\n });\n hourRangeEle.addEventListener(\"input\", (e) => {\n const targetElement = e.target;\n hourInputEle.value = leftPadClamp(targetElement.value, 2, \"0\");\n });\n let mm = this.currentDate.format(\"mm\");\n const minuteInputEle = datetimeElement.querySelector(\".ddtp-minute\");\n const minuteRangeEle = datetimeElement.querySelector(\".ddtp-minute-range\");\n minuteInputEle.value = mm;\n minuteRangeEle.value = mm;\n minuteInputEle.addEventListener(\"input\", (e) => {\n const targetElement = e.target;\n let val = this.getTimeNumberValue(targetElement.value);\n let addVal = leftPadClamp(val, 2, \"0\");\n if (parseInt(addVal, 10) > 59) {\n addVal = \"59\";\n }\n minuteInputEle.value = addVal;\n minuteRangeEle.value = addVal;\n });\n minuteRangeEle.addEventListener(\"input\", (e) => {\n const targetElement = e.target;\n minuteInputEle.value = leftPadClamp(targetElement.value, 2, \"0\");\n });\n (_a = datetimeElement.querySelector(\".time-select\")) == null ? void 0 : _a.addEventListener(\"click\", (e) => {\n this.currentDate.setHour(+hourInputEle.value);\n this.currentDate.setMinutes(+minuteInputEle.value);\n this.dateChangeEvent(e);\n });\n }\n /**\n * 날짜 이동\n * @param moveMode // 앞뒤 이동 prev, next\n * @returns\n */\n moveDate(moveMode, e) {\n if (this._viewMode === DateViewMode.date || this._viewMode === DateViewMode.datetime) {\n this.currentDate.setDate(1);\n this.currentDate.addMonth(\"prev\" === moveMode ? -1 : 1);\n this.dayDraw();\n return;\n }\n if (this._viewMode === DateViewMode.month) {\n this.currentDate.setDate(1);\n this.currentDate.addYear(\"prev\" === moveMode ? -1 : 1);\n this.monthDraw();\n return;\n }\n if (this._viewMode === DateViewMode.year) {\n this.currentDate.setDate(1);\n this.currentDate.addYear(\"prev\" === moveMode ? -16 : 16);\n this.yearDraw();\n }\n }\n /**\n * get date value\n *\n * @returns\n */\n getDateValue() {\n return this.currentDate.format(this.dateFormat);\n }\n /**\n * 옵션 셋팅\n * @static\n * @param {DateTimePickerOptions} options\n */\n static setOptions(options) {\n DEFAULT_OPTIONS = Object.assign({}, DEFAULT_OPTIONS, options);\n }\n /**\n * 달력 보이기 처리.\n *\n * @returns\n */\n show() {\n if (this.isVisible) {\n return;\n }\n this.isVisible = true;\n const docSize = getDocSize();\n this.datetimeElement.classList.remove(\"hide\");\n this.datetimeElement.classList.add(\"show\");\n const rect = this.targetElement.getBoundingClientRect();\n const scrollTop = window.scrollY || document.documentElement.scrollTop;\n const scrollLeft = window.scrollX || document.documentElement.scrollLeft;\n const elementHeight = this.datetimeElement.offsetHeight;\n const targetElementHeight = this.targetElement.offsetHeight + 2;\n let left = rect.left + scrollLeft;\n let top = 0;\n if (this.options.isPositionFixed) {\n top = rect.top + targetElementHeight;\n left = rect.left;\n } else {\n if (rect.top + targetElementHeight + elementHeight > docSize.clientHeight && rect.top >= elementHeight) {\n top = scrollTop + rect.top - elementHeight - 2;\n } else {\n top = scrollTop + rect.top + targetElementHeight;\n }\n }\n this.datetimeElement.setAttribute(\"style\", `${this.options.isPositionFixed ? \"position:fixed;\" : \"\"}top:${top}px;left:${left}px;z-index:${this.options.zIndex}`);\n document.addEventListener(\"click\", this._documentClickEvent);\n }\n /**\n * 달력 숨기기\n */\n hide() {\n this.isVisible = false;\n if (this.options.onClose) {\n if (this.options.onClose() === false) {\n return;\n }\n }\n this.datetimeElement.classList.remove(\"show\");\n this.datetimeElement.classList.add(\"hide\");\n document.removeEventListener(\"click\", this._documentClickEvent);\n }\n /**\n * 타켓 이벤트 처리.\n */\n initTargetEvent() {\n if (this.targetElement) {\n this.targetElement.addEventListener(\"click\", (e) => {\n this.show();\n });\n }\n }\n /**\n * 날짜 변경후 이벤트\n */\n afterChangeDatepicker() {\n const formatValue = this.currentDate.format(this.dateFormat);\n if (this.options.afterChangeDatepicker && isFunction(this.options.afterChangeDatepicker)) {\n this.options.afterChangeDatepicker(formatValue, this.viewMode);\n }\n }\n /**\n * 날짜 변경 전 이벤트.\n * @returns void\n */\n beforeChangeDatepicker() {\n const formatValue = this.currentDate.format(this.dateFormat);\n if (this.options.beforeChangeDatepicker && isFunction(this.options.beforeChangeDatepicker)) {\n const reval = this.options.beforeChangeDatepicker(formatValue, (result) => {\n if (result === false) {\n return;\n }\n this.refresh(false);\n });\n if (reval === false) {\n return;\n }\n this.refresh(false);\n return;\n }\n this.refresh(false);\n }\n dateChangeEvent(e) {\n const formatValue = this.currentDate.format(this.dateFormat);\n if (this.options.onSelect) {\n if (this.options.onSelect(formatValue, this.viewMode, e) === false) {\n return;\n }\n }\n if (this.isInput) {\n this.targetElement.setAttribute(\"value\", formatValue);\n }\n if (!this.options.inline && this.options.autoClose) {\n this.hide();\n }\n }\n /**\n * datepicker template 그리기\n */\n createDatetimeTemplate() {\n const showMonthAfterYear = this.options.showMonthAfterYear;\n let datetimeTemplate = `<div class=\"ddtp-datetime ${this.options.isRTL ? \"rtl\" : \"\"}\" view-mode=\"${this._viewMode}\">\n\t\t\t<div class=\"ddtp-header\">\n <span class=\"${showMonthAfterYear ? \"ddtp-header-year\" : \"ddtp-header-month\"}\"></span>\n <span class=\"${showMonthAfterYear ? \"ddtp-header-month\" : \"ddtp-header-year\"}\"></span>\n\n <span class=\"ddtp-date-move\"> \n <a href=\"javascript:;\" class=\"ddtp-move-btn prev\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/></svg>\n </a>\n <a href=\"javascript:;\" class=\"ddtp-move-btn next\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/></svg>\n </a> \n </span>\n\t\t\t</div>\n <div class=\"ddtp-body\">\n <table class=\"ddtp-days\">\n <thead class=\"ddtp-day-header\">\n <tr>\t\t\n <td class=\"ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[0]]}\">${Lanauage.getWeeksMessage(this.dayOrder[0])}</td>\t\t\n <td class=\"ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[1]]}\">${Lanauage.getWeeksMessage(this.dayOrder[1])}</td>\t\t\n <td class=\"ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[2]]}\">${Lanauage.getWeeksMessage(this.dayOrder[2])}</td>\t\t\n <td class=\"ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[3]]}\">${Lanauage.getWeeksMessage(this.dayOrder[3])}</td>\t\t\n <td class=\"ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[4]]}\">${Lanauage.getWeeksMessage(this.dayOrder[4])}</td>\t\t\n <td class=\"ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[5]]}\">${Lanauage.getWeeksMessage(this.dayOrder[5])}</td>\t\t\n <td class=\"ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[6]]}\">${Lanauage.getWeeksMessage(this.dayOrder[6])}</td>\t\t\n </tr>\n </thead>\n <tbody class=\"ddtp-day-body\">\n </tbody>\n \n <tfoot class=\"ddtp-day-footer\">\n <td colspan=\"7\">\n <div style=\"width:99%;text-align:center;margin-top: 5px;${this.options.enableTodayBtn ? \"\" : \"display:none;\"}\"><button type=\"button\" class=\"ddtp-today\">${Lanauage.getMessage(\"today\")}</button></div>\n <div class=\"footer-tooltip\"></div>\n </td>\n </tfoot>\n </table>\n\n <div class=\"ddtp-times\">\n <div class=\"time-container\">\n <div class=\"ddtp-time\">\n <span>H: </span><input type=\"number\" class=\"ddtp-hour\" min=\"0\" max=\"23\" maxlength=\"2\">\n <input type=\"range\" min=\"0\" max=\"23\" class=\"ddtp-hour-range\">\n </div>\n <div class=\"ddtp-time\">\n <span>M: </span><input type=\"number\" class=\"ddtp-minute\" min=\"0\" max=\"59\" size=\"2\" maxlength=\"2\">\n <input type=\"range\" min=\"0\" max=\"59\" class=\"ddtp-minute-range\">\n </div>\n </div>\n <div class=\"ddtp-btn\">\n <button type=\"button\" class=\"time-select\">${Lanauage.getMessage(\"ok\")}</button>\n </div>\n </div>\n\n <div class=\"ddtp-months\">\n </div>\n\n <div class=\"ddtp-years\">\n </div>\n </div>\n </div>`;\n this.datetimeElement.innerHTML = datetimeTemplate;\n }\n refresh(beforeChangeDatepickerCheck) {\n if (this._viewMode === DateViewMode.date || this._viewMode === DateViewMode.datetime) {\n this.dayDraw(beforeChangeDatepickerCheck);\n return;\n }\n if (this._viewMode === DateViewMode.month) {\n this.monthDraw(beforeChangeDatepickerCheck);\n return;\n }\n if (this._viewMode === DateViewMode.year) {\n this.yearDraw(beforeChangeDatepickerCheck);\n }\n }\n /**\n * 년 달력 그리기\n */\n yearDraw(beforeChangeDatepickerCheck) {\n var _a;\n const currentYear = this.currentDate.format(\"YYYY\");\n if (beforeChangeDatepickerCheck !== false && this.initMode == DateViewMode.year) {\n this.beforeChangeDatepicker();\n return;\n }\n const startYear = +currentYear - 8;\n this.datetimeElement.querySelector(\".ddtp-header-year\").textContent = `${startYear} ~ ${startYear + 15}`;\n const beforeDrawDateFlag = isFunction(this.options.beforeDrawDate);\n const beforeDrawDateFn = beforeDrawDateFlag ? this.options.beforeDrawDate : false;\n const calHTML = [];\n for (let i = 0; i < 16; i++) {\n const year = startYear + i;\n const disabled = this.isYearDisabled(year);\n let addStylceClass = disabled ? \" disabled\" : \"\";\n let tooltip = \"\";\n if (beforeDrawDateFlag && beforeDrawDateFn) {\n const reval = beforeDrawDateFn({ mode: this._viewMode, date: year });\n addStylceClass += reval.style ? \" \" + reval.style : \"\";\n tooltip = reval.tooltip;\n tooltip = tooltip ? `title=\"${tooltip}\"` : \"\";\n }\n calHTML.push(`<div class=\"ddtp-year ${addStylceClass}\" data-year=\"${year}\" ${tooltip}>${year}</div>`);\n }\n this.datetimeElement.querySelector(\".ddtp-years\").innerHTML = calHTML.join(\"\");\n if (this.initMode == DateViewMode.year) {\n this.afterChangeDatepicker();\n }\n (_a = this.datetimeElement.querySelectorAll(\".ddtp-year\")) == null ? void 0 : _a.forEach((yearEle) => {\n yearEle.addEventListener(\"click\", (e) => {\n const targetEle = e.target;\n if (targetEle) {\n const year = targetEle.getAttribute(\"data-year\");\n if (year) {\n const numYear = +year;\n if (this.isYearDisabled(numYear)) {\n return;\n }\n if (this.initMode == DateViewMode.year) {\n if (this.isYearDisabled(numYear)) {\n return;\n }\n this.currentDate.setYear(numYear);\n this.dateChangeEvent(e);\n return;\n }\n this.currentDate.setYear(numYear);\n this.viewMode = this.initMode;\n }\n }\n });\n });\n }\n /**\n * 월 달력 그리기\n */\n monthDraw(beforeChangeDatepickerCheck) {\n var _a;\n if (beforeChangeDatepickerCheck !== false && this.initMode == DateViewMode.month) {\n this.beforeChangeDatepicker();\n return;\n }\n const year = this.currentDate.format(\"YYYY\");\n this.datetimeElement.querySelector(\".ddtp-header-year\").textContent = `${year}`;\n const monthElements = this.datetimeElement.querySelectorAll(\".ddtp-months > .ddtp-month\");\n if (monthElements.length > 0) {\n if (this.isYearDisabled(+year)) {\n monthElements.forEach((monthEle) => {\n if (!monthEle.classList.contains(\"disabled\")) {\n monthEle.classList.add(\"disabled\");\n }\n });\n return;\n }\n monthElements.forEach((monthEle, idx) => {\n if (this.isMonthDisabled(+year, idx)) {\n if (!monthEle.classList.contains(\"disabled\")) {\n monthEle.classList.add(\"disabled\");\n }\n } else {\n monthEle.classList.remove(\"disabled\");\n }\n });\n if (this.initMode == DateViewMode.month) {\n this.afterChangeDatepicker();\n }\n return;\n }\n this.datetimeElement.querySelector(\".ddtp-header-month\").textContent = this.currentDate.format(\"MMMM\");\n const beforeDrawDateFlag = isFunction(this.options.beforeDrawDate);\n const beforeDrawDateFn = beforeDrawDateFlag ? this.options.beforeDrawDate : false;\n const calHTML = [];\n for (let i = 0; i < 12; i++) {\n const disabled = this.isMonthDisabled(+year, i);\n let addStylceClass = disabled ? \" disabled\" : \"\";\n let tooltip = \"\";\n if (beforeDrawDateFlag && beforeDrawDateFn) {\n const reval = beforeDrawDateFn({ mode: this._viewMode, date: year + \"/\" + (i + 1) });\n addStylceClass += reval.style ? \" \" + reval.style : \"\";\n tooltip = reval.tooltip;\n tooltip = tooltip ? `title=\"${tooltip}\"` : \"\";\n }\n calHTML.push(`<div class=\"ddtp-month ${addStylceClass}\" data-month=\"${i}\" ${tooltip}>${Lanauage.getMonthsMessage(i, \"abbr\")}</div>`);\n }\n this.datetimeElement.querySelector(\".ddtp-months\").innerHTML = calHTML.join(\"\");\n if (this.initMode == DateViewMode.month) {\n this.afterChangeDatepicker();\n }\n (_a = this.datetimeElement.querySelectorAll(\".ddtp-month\")) == null ? void 0 : _a.forEach((monthEle) => {\n monthEle.addEventListener(\"click\", (e) => {\n const targetEle = e.target;\n if (targetEle) {\n const month = targetEle.getAttribute(\"data-month\");\n if (month) {\n if (this.isMonthDisabled(this.currentDate.getYear(), +month)) {\n return false;\n }\n if (this.initMode == DateViewMode.month) {\n this.currentDate.setMonth(+month);\n this.dateChangeEvent(e);\n return;\n }\n this.currentDate.setMonth(+month);\n this.viewMode = this.initMode;\n this.dayDraw();\n }\n }\n });\n });\n }\n /**\n * 날짜 그리기\n */\n dayDraw(beforeChangeDatepickerCheck) {\n if (beforeChangeDatepickerCheck !== false && (this.initMode == DateViewMode.date || this.initMode == DateViewMode.datetime)) {\n this.beforeChangeDatepicker();\n return;\n }\n let monthFirstDate = this.currentDate.clone();\n const currentMonth = monthFirstDate.getMonth();\n monthFirstDate.setDate(1);\n this.datetimeElement.querySelector(\".ddtp-header-year\").textContent = monthFirstDate.format(\"YYYY\");\n this.datetimeElement.querySelector(\".ddtp-header-month\").textContent = monthFirstDate.format(\"MMMM\");\n let day = monthFirstDate.getDay();\n day = day - this.dayOrder[0];\n if (day >= 0) {\n monthFirstDate.addDate(-day);\n } else {\n monthFirstDate.addDate(-(7 + day));\n }\n const beforeDrawDateFlag = isFunction(this.options.beforeDrawDate);\n const beforeDrawDateFn = beforeDrawDateFlag ? this.options.beforeDrawDate : false;\n const calHTML = [];\n for (let i = 0; i < 42; i++) {\n let dateItem;\n if (i == 0) {\n dateItem = monthFirstDate;\n } else {\n dateItem = monthFirstDate.clone().addDate(i);\n }\n const dateItemFormat = dateItem.format(DEFAULT_FORMAT.date);\n if (i % 7 == 0) {\n calHTML.push((i == 0 ? \"\" : \"</tr>\") + \"<tr>\");\n }\n let disabled = this.isDayDisabled(dateItem);\n let addStylceClass = DAY_STYLE_CLASS[this.dayOrder[i % 7]];\n const dateItemMonth = dateItem.getMonth();\n if (dateItemMonth != currentMonth) {\n if (dateItemMonth < currentMonth) {\n addStylceClass += dateItemMonth == 1 ? \" new\" : \" old\";\n } else {\n addStylceClass += currentMonth == 1 && dateItemMonth == 12 ? \" old\" : \" new\";\n }\n }\n addStylceClass += this.todayDate == dateItemFormat ? \" ddtp-today\" : \"\";\n addStylceClass += disabled ? \" disabled\" : \"\";\n let tooltip = \"\";\n if (beforeDrawDateFlag && beforeDrawDateFn) {\n const reval = beforeDrawDateFn({ mode: this._viewMode, item: dateItem, date: dateItem.format(this.dateFormat) });\n addStylceClass += reval.style ? \" \" + reval.style : \"\";\n addStylceClass += reval.check ? \" ddtp-event\" : \"\";\n tooltip = reval.tooltip;\n tooltip = tooltip ? `title=\"${tooltip}\"` : \"\";\n }\n calHTML.push(`<td class=\"ddtp-day ${addStylceClass}\" data-day=\"${dateItem.format(\"M,D\")}\" ${tooltip}>`);\n calHTML.push(`<span>${dateItem.format(\"d\")}</span>`);\n calHTML.push(\"</td>\");\n }\n calHTML.push(\"</tr>\");\n this.datetimeElement.querySelector(\".ddtp-day-body\").innerHTML = calHTML.join(\"\");\n if (this.initMode == DateViewMode.date || this.initMode == DateViewMode.datetime) {\n this.afterChangeDatepicker();\n }\n }\n isDayDisabled(dateItem) {\n if (this.minDate != -1 && this.minDate > dateItem.getTime() || this.maxDate != -1 && this.maxDate < dateItem.getTime()) {\n return true;\n }\n return false;\n }\n isYearDisabled(year) {\n if (this.minYear != -1 && this.minYear > year || this.maxYear != -1 && this.maxYear < year) {\n return true;\n }\n return false;\n }\n isMonthDisabled(year, month) {\n if (this.isYearDisabled(year)) {\n return true;\n }\n let yearMonth = +(year + leftPad(month, 2));\n if (this.minMonth != -1 && this.minMonth > yearMonth || this.maxMonth != -1 && this.maxMonth < yearMonth) {\n return true;\n }\n return false;\n }\n static setMessage(message) {\n Lanauage.setDefaultMessage(message);\n }\n};\n_DateTimePicker.VERSION = `${\"0.0.13\"}`;\n_DateTimePicker.format = format;\n_DateTimePicker.parser = parser;\nlet DateTimePicker = _DateTimePicker;\nfunction getDocSize() {\n return {\n clientHeight: Math.max(document.documentElement.clientHeight, window.innerHeight || 0),\n clientWidth: Math.max(document.documentElement.clientWidth, window.innerWidth || 0)\n };\n}\nexport {\n DateTimePicker\n};\n//# sourceMappingURL=index.js.map\n","import { FormField } from \"@t/FormField\";\nimport { Render } from \"./Render\";\nimport { stringValidator } from \"@/rule/stringValidator\";\nimport { resetRowElementStyleClass, invalidMessage } from \"@/util/validUtils\";\nimport { DaraForm } from \"@/DaraForm\";\n\nimport { DateTimePicker } from \"@daracl/datetimepicker\";\n\nimport * as utils from \"@/util/utils\";\n\nexport default class DateRender extends Render {\n private element: HTMLInputElement;\n private dateObj: any;\n\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\n super(daraForm, field, rowElement);\n\n this.mounted();\n this.setDefaultOption();\n this.setDefaultInfo();\n }\n\n mounted() {\n let dateOnSelectEvent: any;\n this.field.rendererOptions = Object.assign({}, this.field.rendererOptions);\n if (typeof this.field.rendererOptions.onSelect !== \"undefined\") {\n dateOnSelectEvent = typeof this.field.rendererOptions.onSelect;\n }\n\n if (utils.isUndefined(this.field.rendererOptions.mode)) {\n if (this.field.renderType == \"datemonth\" || this.field.renderType == \"datehour\") {\n this.field.rendererOptions.mode = this.field.renderType.replace(\"date\", \"\");\n } else {\n this.field.rendererOptions.mode = this.field.renderType;\n }\n }\n\n this.field.rendererOptions.onSelect = (dt: any, e: Event) => {\n if (dateOnSelectEvent) {\n dateOnSelectEvent(dt, e);\n }\n\n this.setValue(dt);\n\n this.valid();\n };\n\n this.dateObj = new DateTimePicker(this.element, this.field.rendererOptions, {} as any);\n }\n\n createField() {\n const field = this.field;\n\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\n\n fieldContainerElement.innerHTML = `\n <div class=\"df-field\">\n <input type=\"text\" name=\"${field.$xssName}\" class=\"df-form-field df-text df-help-icon\" autocomplete=\"off\" readonly/>\n </div>\n ${Render.getDescriptionTemplate(field)}\n <div class=\"df-help-message\"></div>\n `;\n\n this.element = fieldContainerElement.querySelector(`[name=\"${field.$xssName}\"]`) as HTMLInputElement;\n }\n\n getValue() {\n return this.element.value;\n }\n\n setValue(value: any, changeCheckFlag?: boolean): void {\n if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {\n this.element.value = this.field.$value;\n return;\n }\n\n this.field.$value = value;\n this.element.value = value;\n }\n\n reset() {\n this.setDefaultInfo();\n this.setDisabled(false);\n resetRowElementStyleClass(this.rowElement);\n }\n\n getElement(): HTMLInputElement {\n return this.element;\n }\n\n valid(): any {\n const validResult = stringValidator(this.getValue(), this.field);\n\n invalidMessage(this.field, this.rowElement, validResult);\n\n return validResult;\n }\n}\n","import { FieldStyle, FormField } from \"@t/FormField\";\nimport { Render } from \"./Render\";\nimport { invalidMessage } from \"@/util/validUtils\";\nimport { stringValidator } from \"@/rule/stringValidator\";\nimport { DaraForm } from \"@/DaraForm\";\nimport FormTemplate from \"@/FormTemplate\";\nimport { resolveFieldStyle } from \"@/util/styleUtils\";\nimport { FormOptions } from \"@t/FormOptions\";\nimport * as utils from \"@/util/utils\";\n\nexport default class TabRender extends Render {\n private customFunction;\n private tabContainerElement: HTMLElement;\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\n super(daraForm, field, rowElement);\n\n if (field.renderer) {\n this.customFunction = field.renderer;\n } else {\n this.customFunction = {} as any;\n }\n\n this.mounted();\n }\n\n mounted() {\n if (this.customFunction.mounted) {\n (this.customFunction.mounted as any).call(this, this.field, this.rowElement);\n }\n\n this.tabContainerElement.querySelectorAll(\".df-tab-item\").forEach((tabItem) => {\n tabItem.addEventListener(\"click\", (e: any) => {\n this.clickEventHandler(tabItem, e);\n });\n });\n }\n\n /**\n * tab item click\n *\n * @param {Element} tabItem\n * @param {*} evt\n */\n private clickEventHandler(tabItem: Element, evt: any) {\n this.setActive(tabItem.getAttribute(\"data-tab-id\") ?? \"\");\n }\n\n public setActive(tabId: string): void {\n const tabItem = this.tabContainerElement.querySelector(`[data-tab-id=\"${tabId}\"]`);\n\n if (!tabItem) return;\n\n if (!tabItem.classList.contains(\"active\")) {\n for (let item of tabItem?.parentElement?.children ?? []) {\n item.classList.remove(\"active\");\n }\n tabItem.classList.add(\"active\");\n }\n\n const tabPanel = this.rowElement.querySelector(`[tab-panel-id=\"${tabId}\"]`);\n\n if (!tabPanel?.classList.contains(\"active\")) {\n for (let item of tabPanel?.parentElement?.children ?? []) {\n item.classList.remove(\"active\");\n }\n\n tabPanel?.classList.add(\"active\");\n }\n }\n\n static isDataRender(): boolean {\n return false;\n }\n\n static isChildrenCreate(): boolean {\n return false;\n }\n\n /**\n * tab template\n *\n * @param {FormField} field\n * @param {FormTemplate} formTemplate\n * @param {FormOptions} options\n * @returns {string} template string\n */\n\n createField() {\n const field = this.field;\n\n const formTemplate = this.daraForm.formTemplate;\n const options = this.daraForm.getOptions();\n\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\n\n //tab 이벤트 처리 할것.\n let fieldStyle = resolveFieldStyle(options, field);\n\n fieldContainerElement.innerHTML = `\n <div class=\"df-field \">\n <div class=\"df-tab-header ${fieldStyle.tabAlignClass}\"></div>\n </div>\n <div class=\"df-tab-body\"></div>\n `;\n\n if (field.children) {\n let firstFlag = true;\n\n const formOptions = this.getForm().getOptions();\n\n let fieldStyle: FieldStyle = resolveFieldStyle(formOptions, field, null, formTemplate.isLabelHide(field));\n\n for (const childField of field.children) {\n childField.$parent = field;\n formTemplate.addRowFieldInfo(childField);\n let id = childField.$key;\n\n let tabTemplate = `<span class=\"df-tab-item ${firstFlag ? \"active\" : \"\"}\" data-tab-id=\"${id}\"><a href=\"javascript:;\">${childField.label}</a></span>`;\n\n let tabBodyTemplate = `<div class=\"df-tab-panel ${firstFlag ? \"active\" : \"\"}\" tab-panel-id=\"${id}\">${Render.getDescriptionTemplate(childField)}\n <div class=\"df-tab-group\"></div>\n </div>`;\n\n const tabElement = utils.templateToElement(tabTemplate);\n const tabBodyElement = utils.templateToElement(tabBodyTemplate);\n\n firstFlag = false;\n if (tabElement) {\n fieldContainerElement.querySelector(\".df-tab-header\")?.appendChild(tabElement);\n }\n\n if (tabBodyElement) {\n fieldContainerElement.querySelector(\".df-tab-body\")?.appendChild(tabBodyElement);\n\n if (childField.children) {\n let tabFormOptions = {\n style: {\n width: formOptions.style.width ?? \"100%\",\n labelWidth: formOptions.style.labelWidth ?? 3,\n valueWidth: formOptions.style.valueWidth ?? 9,\n position: formOptions.style.position ?? \"left-right\",\n },\n useTypeValue: formOptions.useTypeValue,\n autoCreate: false,\n notValidMessage: \"This form is not valid.\",\n fields: [],\n } as FormOptions;\n\n childField.$tabForm = new DaraForm(document.createElement(\"div\"), tabFormOptions);\n\n childField.$instance = new (childField.$renderType as any)(childField, tabBodyElement?.querySelector(\".df-tab-group\"), childField.$tabForm);\n\n childField.$tabForm.formTemplate.childTemplate(childField, fieldStyle);\n }\n }\n }\n\n this.tabContainerElement = fieldContainerElement;\n }\n }\n\n getValue(): any {\n if (this.customFunction.getValue) {\n return (this.customFunction.getValue as any).call(this, this.field, this.rowElement);\n }\n\n let allTabValue = {} as any;\n\n let useTypeValue = this.getForm().getOptions().useTypeValue;\n\n for (const childField of this.field.children) {\n const childFieldValue = childField.$tabForm?.getValue(false);\n if (useTypeValue) {\n allTabValue[childField.$validName] = childFieldValue;\n } else {\n for (let [key, value] of Object.entries(childFieldValue)) {\n allTabValue[key] = value;\n }\n }\n }\n return allTabValue;\n }\n\n setValue(value: any): void {\n for (const childField of this.field.children) {\n let tabChildValue = value[childField.$validName];\n\n if (tabChildValue) {\n childField.$tabForm?.setValue(tabChildValue);\n }\n }\n }\n\n reset() {}\n\n getElement(): Element {\n return this.rowElement;\n }\n\n valid(): any {\n if (this.customFunction.valid) {\n const validResult = (this.customFunction.valid as any).call(this, this.field, this.rowElement);\n\n invalidMessage(this.field, this.rowElement, validResult);\n\n return;\n }\n\n const field = this.field;\n\n for (const childField of field.children) {\n const validResult = childField.$tabForm?.validForm();\n\n if (validResult && validResult.length > 0) {\n const firstItem = validResult[0];\n\n if (firstItem.message) {\n firstItem.message = \"[\" + this.field.label + \"] \" + firstItem.message;\n\n return firstItem;\n }\n }\n }\n\n return true;\n }\n\n focus(): void {}\n}\n","import { FieldStyle, FormField } from \"@t/FormField\";\nimport { Render } from \"./Render\";\nimport { invalidMessage, resetRowElementStyleClass } from \"@/util/validUtils\";\nimport { DaraForm } from \"@/DaraForm\";\nimport * as utils from \"@/util/utils\";\nimport { stringValidator } from \"@/rule/stringValidator\";\nimport { resolveFieldStyle } from \"@/util/styleUtils\";\nimport FormTemplate from \"@/FormTemplate\";\nimport { FormOptions } from \"@t/FormOptions\";\nimport { NumberKeyMap } from \"@t/DataMap\";\n\nlet $$idx = 0;\n\nexport default class GridRender extends Render {\n private customFunction;\n private gridForm;\n private allAddRowInfo = {} as NumberKeyMap;\n\n constructor(field: FormField, rowElement: HTMLElement, daraForm: DaraForm) {\n super(daraForm, field, rowElement);\n\n if (field.renderer) {\n this.customFunction = field.renderer;\n } else {\n this.customFunction = {} as any;\n }\n\n const gridFormOptions = {\n style: {\n width: \"100%\",\n labelWidth: 3,\n valueWidth: 9,\n position: \"left-right\",\n },\n autoCreate: false,\n notValidMessage: \"This form is not valid.\",\n fields: [],\n } as FormOptions;\n\n this.gridForm = new DaraForm(document.createElement(\"div\"), gridFormOptions);\n\n this.mounted();\n this.setDefaultOption();\n this.setDefaultInfo();\n }\n\n mounted() {\n this.addRow();\n\n if (this.customFunction.mounted) {\n (this.customFunction.mounted as any).call(this, this.field, this.rowElement);\n }\n\n this.rowElement.querySelector(\".df-grid-add-row-btn\")?.addEventListener(\"click\", (evt) => {\n this.addRow();\n });\n }\n\n static isDataRender(): boolean {\n return false;\n }\n\n static isChildrenCreate(): boolean {\n return false;\n }\n\n createField() {\n const field = this.field;\n\n const fieldContainerElement = this.rowElement.querySelector(\".df-field-container\") as HTMLElement;\n\n let theadTemplate = [];\n let colgroupTemplate = [];\n let addBtnTemplate = [];\n addBtnTemplate.push(\"\");\n\n if (field.children) {\n colgroupTemplate.push(\"<colgroup>\");\n\n theadTemplate.push(\"<tr>\");\n\n colgroupTemplate.push(`<col style=\"width:38px\">`);\n theadTemplate.push(\"<th>\");\n if (field.rendererOptions?.disableAddButton !== true) {\n theadTemplate.push(`<button type=\"button\" class=\"df-btn df-grid-add-row-btn\" title=\"Add\"><i class=\"df-icon df-add-icon\"></i></button>`);\n }\n theadTemplate.push(\"</th>\");\n\n for (const childField of field.children) {\n colgroupTemplate.push(`<col style=\"width:${childField.style?.width ?? \"*\"}\">`);\n theadTemplate.push(`<th class=\"df-grid-header\">${childField.label}</th>`);\n }\n colgroupTemplate.push(\"</colgroup>\");\n theadTemplate.push(\"</tr>\");\n }\n\n fieldContainerElement.innerHTML = `\n <div class=\"df-grid-field\">\n ${addBtnTemplate.join(\"\")}\n <div class=\"df-grid-container ${field.style?.position ?? \"\"}\" style=\"height:${field.rendererOptions?.height ?? \"auto\"};\">\n <table class=\"df-grid\">${colgroupTemplate.join(\"\")}<thead>${theadTemplate.join(\"\")}</thead><tbody></tbody></table>\n </div>\n </div>\n `;\n }\n\n /**\n * add row\n */\n addRow(valueItem?: any): void {\n let rowTemplate = [];\n\n const options = this.daraForm.getOptions();\n const formTemplate = this.gridForm.formTemplate;\n const parentName = this.field.$xssName;\n\n ++$$idx;\n let addColumns = [];\n rowTemplate.push(`<tr class=\"df-grid-row\">`);\n\n rowTemplate.push(\"<td>\");\n if (this.field.rendererOptions?.disableRemoveButton !== true) {\n rowTemplate.push(`<button type=\"button\" data-row-idx=\"${$$idx}\" class=\"df-btn df-grid-row-remove\"><i class=\"df-icon df-remove-icon\"></i></button>`);\n }\n rowTemplate.push(\"</td>\");\n\n for (const childField of this.field.children) {\n let fieldStyle: FieldStyle = resolveFieldStyle(options, childField, null, true);\n\n let columnField = utils.merge({}, childField) as FormField;\n\n addColumns.push(columnField);\n columnField.$orgin = childField;\n columnField.name = columnField.name + \"_\" + $$idx;\n columnField.$xssName = parentName + \"_\" + utils.getXssFieldName(columnField);\n\n formTemplate.addRowFieldInfo(columnField);\n\n rowTemplate.push(`<td id=\"${columnField.$xssName}\"><div class=\"df-field-container ${columnField.required ? \"required\" : \"\"} \" style=\"${fieldStyle.valueStyle}\"></div></td>`);\n }\n rowTemplate.push(\"</tr>\");\n\n this.allAddRowInfo[$$idx] = addColumns;\n\n const addRowElement = utils.templateToElement(rowTemplate.join(\"\"));\n\n if (addRowElement) {\n this.rowElement.querySelector(\"tbody\")?.append(addRowElement);\n\n addRowElement.querySelector(\".df-grid-row-remove\")?.addEventListener(\"click\", (evt) => {\n this.removeRow(evt);\n });\n }\n\n valueItem = valueItem ?? {};\n for (let columnField of addColumns) {\n columnField.$instance = new (columnField.$renderType as any)(columnField, addRowElement?.querySelector(`#${columnField.$xssName}`), this.gridForm);\n\n if (valueItem[columnField.$orgin.name]) {\n columnField.$instance.setValue(valueItem[columnField.$orgin.name]);\n }\n }\n }\n\n /**\n * remove row\n *\n * @param evt event\n */\n removeRow(evt: Event): void {\n const target = evt.target as Element;\n\n const rowElement = target.closest(\"tr\");\n\n if (rowElement) {\n if (rowElement.parentElement?.childElementCount == 1) return;\n\n let rowIdx = (evt.currentTarget as Element)?.getAttribute(\"data-row-idx\") || \"-1\";\n\n this.removeFieldInfo(rowIdx);\n rowElement.remove();\n }\n }\n\n /**\n *\n * @param rowIdx row index\n */\n removeFieldInfo(rowIdx?: string) {\n let removeFieldArrs = [] as any;\n if (utils.isEmpty(rowIdx)) {\n for (let key in this.allAddRowInfo) {\n removeFieldArrs = removeFieldArrs.concat(this.allAddRowInfo[key]);\n }\n this.allAddRowInfo = {} as NumberKeyMap;\n } else if (rowIdx) {\n const rowIdxNum = parseInt(rowIdx, 10);\n removeFieldArrs = removeFieldArrs.concat(this.allAddRowInfo[rowIdxNum]);\n delete this.allAddRowInfo[rowIdxNum];\n }\n\n for (let columnField of removeFieldArrs) {\n this.gridForm.getFieldInfoMap().removeFieldInfo(columnField.name);\n }\n }\n\n allRemoveRow(): void {\n this.rowElement.querySelector(\"tbody\")?.replaceChildren();\n this.removeFieldInfo();\n }\n\n getValue() {\n if (this.customFunction.getValue) {\n return (this.customFunction.getValue as any).call(this, this.field, this.rowElement);\n }\n let result = [];\n const children = this.field.children;\n const childrenLength = children.length;\n for (let idx in this.allAddRowInfo) {\n const rowColumns = this.allAddRowInfo[idx];\n\n let rowInfo = {} as any;\n for (let childIdx = 0; childIdx < childrenLength; childIdx++) {\n let childField = children[childIdx];\n rowInfo[childField.name] = this.gridForm.getFieldValue(rowColumns[childIdx].name); // rowColumns[childIdx].$instance.getValue();\n }\n\n result.push(rowInfo);\n }\n return result;\n }\n\n setValue(value: any): void {\n this.field.$value = value;\n\n let valueArr: any[] = [];\n if (utils.isArray(value)) {\n valueArr = value;\n } else {\n if (utils.isPlainObject(value)) {\n valueArr.push(value);\n }\n }\n\n this.allRemoveRow();\n\n for (let valueItem of valueArr) {\n this.addRow(valueItem);\n }\n }\n\n reset() {\n this.setDefaultInfo();\n resetRowElementStyleClass(this.rowElement);\n }\n\n getElement() {\n if (this.customFunction.getElement) {\n return (this.customFunction.getElement as any).call(this, this.field, this.rowElement);\n }\n return null;\n }\n\n valid(): any {\n if (this.customFunction.valid) {\n const validResult = (this.customFunction.valid as any).call(this, this.field, this.rowElement);\n\n invalidMessage(this.field, this.rowElement, validResult);\n\n return;\n }\n\n const validResult = this.gridForm.validForm();\n\n if (validResult.length > 0) {\n const firstItem = validResult[0];\n\n if (firstItem.message) {\n firstItem.message = \"[\" + this.field.label + \"] \" + firstItem.message;\n\n return firstItem;\n }\n }\n\n return true;\n }\n\n focus(): void {}\n}\n","import NumberRender from \"@/renderer/NumberRender\";\r\nimport TextAreaRender from \"@/renderer/TextAreaRender\";\r\nimport DropdownRender from \"@/renderer/DropdownRender\";\r\nimport TextRender from \"@/renderer/TextRender\";\r\nimport CheckboxRender from \"@/renderer/CheckboxRender\";\r\nimport RadioRender from \"@/renderer/RadioRender\";\r\nimport PasswordRender from \"@/renderer/PasswordRender\";\r\nimport FileRender from \"@/renderer/FileRender\";\r\nimport CustomRender from \"./renderer/CustomRender\";\r\nimport GroupRender from \"./renderer/GroupRender\";\r\nimport HiddenRender from \"./renderer/HiddenRender\";\r\nimport ButtonRender from \"./renderer/ButtonRender\";\r\nimport RangeRender from \"./renderer/RangeRender\";\r\nimport DateRender from \"./renderer/DateRender\";\r\nimport TabRender from \"./renderer/TabRender\";\r\nimport GridRender from \"./renderer/GridRender\";\r\n\r\nexport type FORM_MODE = \"new\" | \"modify\" | \"view\";\r\n\r\nexport const RULES = {\r\n NAN: \"nan\",\r\n MIN: \"minimum\",\r\n EXCLUSIVE_MIN: \"exclusiveMinimum\",\r\n MAX: \"maximum\",\r\n EXCLUSIVE_MAX: \"exclusiveMaximum\",\r\n MIN_LENGTH: \"minLength\",\r\n MAX_LENGTH: \"maxLength\",\r\n BETWEEN: \"between\",\r\n BETWEEN_EXCLUSIVE_MIN: \"betweenExclusiveMin\",\r\n BETWEEN_EXCLUSIVE_MAX: \"betweenExclusiveMax\",\r\n BETWEEN_EXCLUSIVE_MINMAX: \"betweenExclusiveMinMax\",\r\n REGEXP: \"regexp\",\r\n REQUIRED: \"required\",\r\n VALIDATOR: \"validator\",\r\n} as const;\r\n\r\nexport const FIELD_PREFIX = \"dff\"; // daracl form field\r\n\r\nexport const RENDER_TEMPLATE: any = {\r\n number: NumberRender,\r\n textarea: TextAreaRender,\r\n dropdown: DropdownRender,\r\n checkbox: CheckboxRender,\r\n radio: RadioRender,\r\n text: TextRender,\r\n password: PasswordRender,\r\n file: FileRender,\r\n custom: CustomRender,\r\n group: GroupRender,\r\n hidden: HiddenRender,\r\n button: ButtonRender,\r\n range: RangeRender,\r\n datehour: DateRender,\r\n datemonth: DateRender,\r\n date: DateRender,\r\n datetime: DateRender,\r\n tab: TabRender,\r\n grid: GridRender,\r\n};\r\n\r\nexport const ALIGN = {\r\n left: \"left\",\r\n center: \"center\",\r\n right: \"right\",\r\n} as const;\r\n\r\nexport type TEXT_ALIGN_TYPE = (typeof ALIGN)[keyof typeof ALIGN];\r\n\r\nexport type RENDER_TYPE = \"number\" | \"text\" | \"file\" | \"textarea\" | \"dropdown\" | \"radio\" | \"checkbox\" | \"date\" | \"datetime\" | \"dateyear\" | \"datemonth\" | \"datehour\" | \"group\" | \"custom\";\r\n\r\nexport type REGEXP_TYPE = \"email\" | \"url\" | \"alpha\" | \"alpha-num\";\r\n\r\nexport type PASSWORD_TYPE = \"number\" | \"upper\" | \"upper-special\" | \"upper-special-number\"; // 숫자 | 대문자 포함, 대문자 특수문자 포함, 대문자 특수문자 숫자\r\n\r\nexport type FIELD_POSITION = \"top\" | \"left\" | \"left-left\" | \"left-right\" | \"right\" | \"right-left\" | \"right-right\" | \"bottom\";\r\n\r\nexport const OrientationMap = {\r\n horizontal: \"horizontal\",\r\n vertical: \"vertical\",\r\n} as const;\r\n\r\nexport type OrientationType = (typeof OrientationMap)[keyof typeof OrientationMap];\r\n\r\ninterface StringArrayMap {\r\n [key: string]: string[];\r\n}\r\n\r\nexport const FIELD_POSITION_STYLE: StringArrayMap = {\r\n \"top-left\": [\"top\", \"df-txt-left\"],\r\n \"top-center\": [\"top\", \"df-txt-center\"],\r\n \"top-right\": [\"top\", \"df-txt-right\"],\r\n \"left-left\": [\"\", \"df-txt-left\"],\r\n \"left-center\": [\"\", \"df-txt-center\"],\r\n \"left-right\": [\"\", \"df-txt-right\"],\r\n \"right-right\": [\"right\", \"df-txt-right\"],\r\n \"right-center\": [\"right\", \"df-txt-center\"],\r\n \"right-left\": [\"right\", \"df-txt-left\"],\r\n \"bottom-left\": [\"bottom\", \"df-txt-left\"],\r\n \"bottom-center\": [\"bottom\", \"df-txt-center\"],\r\n \"bottom-right\": [\"bottom\", \"df-txt-right\"],\r\n};\r\nFIELD_POSITION_STYLE[\"top\"] = FIELD_POSITION_STYLE[\"top-left\"];\r\nFIELD_POSITION_STYLE[\"right\"] = FIELD_POSITION_STYLE[\"right-right\"];\r\nFIELD_POSITION_STYLE[\"left\"] = FIELD_POSITION_STYLE[\"left-left\"];\r\nFIELD_POSITION_STYLE[\"bottom\"] = FIELD_POSITION_STYLE[\"bottom-left\"];\r\n","import { Message } from \"@t/Message\";\r\nimport { FormField } from \"../types/FormField\";\r\nimport { ValidResult } from \"@t/ValidResult\";\r\nimport { RULES } from \"@/constants\";\r\n\r\nlet localeMessage: Message = {\r\n required: \"{label} 필수 입력사항입니다.\",\r\n fileButton: \"파일찾기\",\r\n selection: \"선택\",\r\n string: {\r\n minLength: \"{minLength} 글자 이상으로 입력하세요.\",\r\n maxLength: \"{maxLength} 글자 이하로 입력하세요.\",\r\n between: \"{minLength} ~ {maxLength} 사이의 글자를 입력하세요.\",\r\n },\r\n number: {\r\n nan: \"숫자만 입력 가능 합니다.\",\r\n minimum: \"{minimum} 값과 같거나 커야 합니다\",\r\n exclusiveMinimum: \"{minimum} 보다 커야 합니다\",\r\n maximum: \"{maximum} 값과 같거나 작아야 합니다\",\r\n exclusiveMaximum: \"{maximum} 보다 작아야 합니다.\",\r\n between: \"{minimum}~{maximum} 사이의 값을 입력하세요.\",\r\n betweenExclusiveMin: \"{minimum} 보다 크고 {maximum} 보다 같거나 작아야 합니다\",\r\n betweenExclusiveMax: \"{minimum} 보다 같거나 크고 {maximum} 보다 작아야 합니다\",\r\n betweenExclusiveMinMax: \"{minimum} 보다 크고 {maximum} 보다 작아야 합니다\",\r\n },\r\n regexp: {\r\n mobile: \"핸드폰 번호가 유효하지 않습니다.\",\r\n email: \"이메일이 유효하지 않습니다.\",\r\n url: \"URL이 유효하지 않습니다.\",\r\n alpha: \"영문만 입력 가능 합니다.\",\r\n \"alpha-num\": \"영문과 숫자만 입력 가능 합니다.\",\r\n number: \"숫자만 입력 가능 합니다.\",\r\n variable: \"값이 유효하지 않습니다.\",\r\n \"number-char\": \"숫자, 문자 각각 하나 이상 포함 되어야 합니다.\",\r\n \"upper-char\": \"대문자가 하나 이상 포함 되어야 합니다.\",\r\n \"upper-char-special\": \"대문자,소문자,특수문자 각각 하나 이상 포함 되어야 합니다.\",\r\n \"upper-char-special-number\": \"대문자,소문자,특수문자,숫자 각각 하나 이상 포함 되어야합니다.\",\r\n },\r\n};\r\n\r\n/**\r\n * validation 메시지 처리.\r\n *\r\n * @class Language\r\n * @typedef {Language}\r\n */\r\nclass Language {\r\n private lang: Message = localeMessage;\r\n\r\n /**\r\n * 다국어 메시지 등록\r\n *\r\n * @public\r\n * @param {?Message} [lang] 둥록할 메시지\r\n */\r\n public set(lang?: Message) {\r\n this.lang = Object.assign({}, localeMessage, lang);\r\n }\r\n\r\n /**\r\n * 메시지 얻기\r\n *\r\n * @public\r\n * @param {string} messageKey 메시지 키\r\n * @returns {*}\r\n */\r\n public getMessage(messageKey: string): any {\r\n return (this.lang as any)[messageKey];\r\n }\r\n\r\n /**\r\n * ValidResult 값을 메시지로 변경.\r\n *\r\n * @public\r\n * @param {FormField} field\r\n * @param {ValidResult} validResult\r\n * @returns {string[]}\r\n */\r\n public validMessage(field: FormField, validResult: ValidResult): string[] {\r\n let messageFormat = \"\";\r\n\r\n let messageFormats: string[] = [];\r\n\r\n if (validResult.regexp) {\r\n messageFormat = (this.lang.regexp as any)[validResult.regexp];\r\n messageFormats.push(messageFormat);\r\n }\r\n\r\n (validResult.constraint ?? []).forEach((constraint) => {\r\n if (constraint === RULES.REQUIRED) {\r\n messageFormat = message(this.lang.required, field);\r\n messageFormats.push(messageFormat);\r\n }\r\n\r\n if (field.renderType == \"number\" || field.renderType == \"range\") {\r\n messageFormat = (this.lang.number as any)[constraint];\r\n messageFormats.push(messageFormat);\r\n } else {\r\n messageFormat = (this.lang.string as any)[constraint];\r\n messageFormats.push(messageFormat);\r\n }\r\n });\r\n\r\n const reMessage: string[] = [];\r\n\r\n const msgParam = Object.assign({}, { name: field.name, label: field.label }, field.rule);\r\n messageFormats.forEach((msgFormat) => {\r\n if (msgFormat) {\r\n reMessage.push(message(msgFormat, msgParam));\r\n }\r\n });\r\n\r\n if (validResult.validator) {\r\n reMessage.push(validResult.validator.message);\r\n }\r\n\r\n return reMessage;\r\n }\r\n}\r\n\r\nfunction message(msgFormat: string, msgParam: any): string {\r\n return msgFormat.replace(/\\{{1,1}([A-Za-z0-9_.]*)\\}{1,1}/g, (match, key) => {\r\n return typeof msgParam[key] !== \"undefined\" ? msgParam[key] : match;\r\n });\r\n}\r\n\r\nexport default new Language();\r\n","import { FormField } from \"@t/FormField\";\r\n\r\nimport { Render } from \"../renderer/Render\";\r\nimport { RENDER_TEMPLATE } from \"../constants\";\r\nimport * as utils from \"./utils\";\r\n\r\nexport const getRenderer = (field: FormField): Render => {\r\n let render;\r\n if (field.renderType) {\r\n render = RENDER_TEMPLATE[field.renderType];\r\n }\r\n\r\n if (render && (render.isDataRender() === false || !utils.isUndefined(field.name))) {\r\n return render;\r\n }\r\n\r\n if (utils.isUndefined(field.name)) {\r\n if (field.children) {\r\n return RENDER_TEMPLATE[\"group\"];\r\n } else {\r\n return RENDER_TEMPLATE[\"hidden\"];\r\n }\r\n }\r\n\r\n return RENDER_TEMPLATE[\"text\"];\r\n};\r\n","import { FIELD_PREFIX } from \"@/constants\";\r\nimport { FormField } from \"./types/FormField\";\r\nimport { ValidResult } from \"./types/ValidResult\";\r\nimport { getRenderer } from \"./util/renderFactory\";\r\nimport Language from \"./util/Language\";\r\nimport * as utils from \"./util/utils\";\r\nimport { DaraForm } from \"./DaraForm\";\r\n\r\ninterface NumberFieldMap {\r\n [key: string]: FormField;\r\n}\r\n\r\ninterface StringNumberMap {\r\n [key: string]: string;\r\n}\r\n\r\nexport default class FieldInfoMap {\r\n private fieldIdx = 0;\r\n\r\n private allFieldInfo: NumberFieldMap = {};\r\n\r\n private keyNameMap: StringNumberMap = {};\r\n\r\n private conditionFields: string[] = [];\r\n\r\n private fieldPrefix;\r\n\r\n private form;\r\n\r\n constructor(selector: string, form: DaraForm) {\r\n this.fieldPrefix = `${FIELD_PREFIX}_${utils.getHashCode(selector)}`;\r\n this.form = form;\r\n }\r\n\r\n /**\r\n * add Field 정보\r\n *\r\n * @public\r\n * @param {FormField} field 폼필드 정보\r\n */\r\n public addField(field: FormField) {\r\n utils.replaceXssField(field);\r\n this.fieldIdx += 1;\r\n field.$key = `${this.fieldPrefix}_${this.fieldIdx}`;\r\n field.$validName = field.name ?? field.label;\r\n this.keyNameMap[field.$validName] = field.$key;\r\n this.allFieldInfo[field.$key] = field;\r\n field.$renderType = getRenderer(field);\r\n\r\n if (field.conditional) {\r\n this.conditionFields.push(field.$key);\r\n }\r\n }\r\n\r\n /**\r\n * 필드명으로 필드 정부 구하기\r\n *\r\n * @public\r\n * @param {string} fieldName 필드명\r\n * @returns {FormField}\r\n */\r\n public getFieldName(fieldName: string): FormField {\r\n return this.allFieldInfo[this.keyNameMap[fieldName]];\r\n }\r\n\r\n /**\r\n * 필드 키로 정보 구하기\r\n *\r\n * @public\r\n * @param {string} fieldKey\r\n * @returns {FormField}\r\n */\r\n public get(fieldKey: string): FormField {\r\n return this.allFieldInfo[fieldKey];\r\n }\r\n\r\n /**\r\n * 필드명 있는지 여부 체크.\r\n *\r\n * @public\r\n * @param {string} fieldName 필드명\r\n * @returns {boolean}\r\n */\r\n public hasFieldName(fieldName: string): boolean {\r\n if (this.keyNameMap[fieldName] && this.allFieldInfo[this.keyNameMap[fieldName]]) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * 모든 필드 정보\r\n *\r\n * @public\r\n * @returns {NumberFieldMap}\r\n */\r\n public getAllFieldInfo(): NumberFieldMap {\r\n return this.allFieldInfo;\r\n }\r\n\r\n /**\r\n * 필드 정보 맵에서 지우기\r\n *\r\n * @public\r\n * @param {string} fieldName\r\n */\r\n public removeFieldInfo(fieldName: string) {\r\n const fieldKey = this.keyNameMap[fieldName];\r\n\r\n if (utils.isUndefined(fieldKey)) return;\r\n\r\n this.removeFieldInfoByKey(fieldKey);\r\n delete this.keyNameMap[fieldName];\r\n }\r\n\r\n /**\r\n * 필드 키로 필드 정보 맵에서 지우기\r\n *\r\n * @public\r\n * @param {string} fieldKey\r\n */\r\n public removeFieldInfoByKey(fieldKey: string) {\r\n const fieldInfo = this.allFieldInfo[fieldKey];\r\n\r\n if (fieldInfo && this.keyNameMap[fieldInfo.$validName] === fieldKey) {\r\n delete this.keyNameMap[fieldInfo.$validName];\r\n }\r\n\r\n delete this.allFieldInfo[fieldKey];\r\n\r\n this.conditionFields = this.conditionFields.filter((key) => key !== fieldKey);\r\n }\r\n\r\n /**\r\n * 모든 필드값 구하기\r\n *\r\n * @public\r\n * @param {boolean} validationCheck\r\n * @returns {*}\r\n */\r\n public getAllFieldValue(formValue: any, validationCheck: boolean) {\r\n const useTypeValue = this.form.getOptions().useTypeValue;\r\n\r\n if (validationCheck !== true) {\r\n for (let [key, fieldInfo] of Object.entries(this.allFieldInfo)) {\r\n formValue = addFormValue(formValue, fieldInfo, useTypeValue);\r\n }\r\n return formValue;\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n for (let [key, fieldInfo] of Object.entries(this.allFieldInfo)) {\r\n if (!fieldInfo.$instance.isEnableView()) {\r\n continue;\r\n }\r\n\r\n let fieldValid = this.getFieldValidation(fieldInfo, true);\r\n\r\n if (fieldValid !== true) {\r\n reject(new Error(fieldValid.message, { cause: fieldValid }));\r\n return;\r\n }\r\n\r\n formValue = addFormValue(formValue, fieldInfo, useTypeValue);\r\n }\r\n\r\n resolve(formValue);\r\n });\r\n }\r\n\r\n public getFormDataValue(formValue: any, validationCheck: boolean) {\r\n if (validationCheck !== true) {\r\n let reval = new FormData();\r\n\r\n for (let [key, value] of Object.entries(formValue)) {\r\n reval.set(key, value as any);\r\n }\r\n\r\n for (let [key, fieldInfo] of Object.entries(this.allFieldInfo)) {\r\n addFieldFormData(reval, fieldInfo, fieldInfo.$instance.getValue());\r\n }\r\n\r\n return reval;\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n let reval = new FormData();\r\n\r\n for (let [key, value] of Object.entries(formValue)) {\r\n reval.set(key, value as any);\r\n }\r\n\r\n for (let [key, fieldInfo] of Object.entries(this.allFieldInfo)) {\r\n if (!fieldInfo.$instance.isEnableView()) {\r\n continue;\r\n }\r\n\r\n let fieldValid = this.getFieldValidation(fieldInfo, true);\r\n\r\n if (fieldValid !== true) {\r\n reject(new Error(fieldValid.message, { cause: fieldValid }));\r\n return;\r\n }\r\n\r\n addFieldFormData(reval, fieldInfo, fieldInfo.$instance.getValue());\r\n }\r\n\r\n resolve(reval);\r\n });\r\n }\r\n\r\n /**\r\n *\r\n *\r\n * @param field\r\n * @returns\r\n */\r\n public isConditionFieldCheck(field: FormField) {\r\n let parent = field;\r\n\r\n while (typeof parent !== \"undefined\") {\r\n if (!this.isConditionField(parent)) {\r\n return false;\r\n }\r\n\r\n parent = parent.$parent;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * field 활성 비활성화 여부.\r\n *\r\n * @param field form field\r\n * @returns\r\n */\r\n public isConditionField(field: FormField) {\r\n if (!this.conditionFields.includes(field.$key)) {\r\n return true;\r\n }\r\n\r\n let condFlag = false;\r\n\r\n if (field.conditional.custom) {\r\n condFlag = field.conditional.custom.call(null, field);\r\n } else {\r\n if (field.conditional.field) {\r\n const condField = this.getFieldName(field.conditional.field);\r\n\r\n if (condField) {\r\n if (field.conditional.eq == condField.$instance.getValue()) {\r\n condFlag = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return condFlag;\r\n }\r\n\r\n /**\r\n * 컬럼 로우 보이고 안보이기 체크.\r\n *\r\n * @public\r\n */\r\n public conditionCheck() {\r\n this.conditionFields.forEach((fieldKey) => {\r\n const fieldInfo = this.allFieldInfo[fieldKey];\r\n\r\n let condFlag = this.isConditionField(fieldInfo);\r\n\r\n if (condFlag) {\r\n fieldInfo.$instance.show();\r\n } else {\r\n fieldInfo.$instance.hide();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * field validation check\r\n *\r\n * @param fieldInfo FormField\r\n * @returns boolean true or ValidResult\r\n */\r\n public getFieldValidation(fieldInfo: FormField, focusFlag: boolean | undefined) {\r\n if (!this.isConditionFieldCheck(fieldInfo)) {\r\n return true;\r\n }\r\n\r\n const renderInfo = fieldInfo.$instance;\r\n let fieldValid = renderInfo.valid();\r\n\r\n if (fieldValid === true) return true;\r\n\r\n if (focusFlag) {\r\n renderInfo.focus();\r\n }\r\n fieldValid = fieldValid as ValidResult;\r\n if (utils.isUndefined(fieldValid.message)) {\r\n fieldValid.message = Language.validMessage(fieldInfo, fieldValid)[0];\r\n }\r\n\r\n return fieldValid;\r\n }\r\n}\r\n\r\n/**\r\n * add form value\r\n * @param formData {Object} return Object value\r\n * @param fieldInfo {FormField} field info\r\n * @param fieldValue {any} form value\r\n */\r\nfunction addFormValue(formData: any, fieldInfo: FormField, useTypeValue?: boolean) {\r\n if (utils.ignoreValueField(fieldInfo)) {\r\n return formData;\r\n }\r\n\r\n const fieldValue = fieldInfo.$instance.getValue();\r\n\r\n if (fieldInfo.renderType === \"file\") {\r\n const uploadFiles = fieldValue[\"uploadFile\"];\r\n\r\n formData[fieldInfo.$validName] = uploadFiles;\r\n formData[fieldInfo.$validName + \"RemoveIds\"] = fieldValue[\"removeIds\"];\r\n } else {\r\n if (useTypeValue !== true) {\r\n if (utils.isTabType(fieldInfo)) {\r\n for (let [key, value] of Object.entries(fieldValue)) {\r\n formData[key] = value;\r\n }\r\n } else {\r\n if (!utils.isEmpty(fieldInfo.name)) {\r\n formData[fieldInfo.name] = fieldValue;\r\n }\r\n }\r\n } else {\r\n formData[fieldInfo.$validName] = fieldValue;\r\n }\r\n }\r\n\r\n return formData;\r\n}\r\n\r\nfunction addFieldFormData(formData: FormData, fieldInfo: FormField, useTypeValue?: boolean) {\r\n if (utils.ignoreValueField(fieldInfo)) {\r\n return formData;\r\n }\r\n\r\n const fieldValue = fieldInfo.$instance.getValue();\r\n\r\n if (fieldInfo.renderType === \"file\") {\r\n const uploadFiles = fieldValue[\"uploadFile\"];\r\n formData.delete(fieldInfo.$validName);\r\n for (let uploadFile of uploadFiles) {\r\n formData.append(fieldInfo.$validName, uploadFile);\r\n }\r\n\r\n formData.set(fieldInfo.$validName + \"RemoveIds\", fieldValue[\"removeIds\"]);\r\n } else {\r\n if (useTypeValue !== true) {\r\n if (utils.isTabType(fieldInfo)) {\r\n for (let [key, value] of Object.entries(fieldValue)) {\r\n formData.set(key, value as any);\r\n }\r\n } else {\r\n if (!utils.isEmpty(fieldInfo.name)) {\r\n formData.set(fieldInfo.$validName, fieldValue);\r\n }\r\n }\r\n } else {\r\n formData.set(fieldInfo.$validName, fieldValue);\r\n }\r\n }\r\n\r\n return formData;\r\n}\r\n","import { FormOptions } from \"@t/FormOptions\";\nimport { FieldStyle, FormField } from \"@t/FormField\";\nimport * as utils from \"./util/utils\";\nimport FieldInfoMap from \"@/FieldInfoMap\";\n\nimport { resolveFieldStyle } from \"./util/styleUtils\";\nimport { DaraForm } from \"./DaraForm\";\nimport TabRender from \"./renderer/TabRender\";\nimport GridRender from \"./renderer/GridRender\";\n\n/**\n * form template\n *\n * @class FormTemplate\n * @typedef {FormTemplate}\n */\nexport default class FormTemplate {\n private readonly options: FormOptions;\n private readonly formElement;\n\n private fieldInfoMap;\n\n private daraform: DaraForm;\n\n private addRowFields: string[] = [];\n\n constructor(daraform: DaraForm, formElement: Element, fieldInfoMap: FieldInfoMap) {\n this.daraform = daraform;\n this.options = daraform.getOptions();\n this.formElement = formElement;\n\n this.fieldInfoMap = fieldInfoMap;\n }\n\n /**\n * field row 추가.\n *\n * @param field\n */\n public addRow(field: FormField) {\n if (this.checkHiddenField(field)) {\n return;\n }\n\n this.addRowFields = [];\n\n this.addRowTemplate(field);\n }\n\n /**\n * 그룹 템플릿\n *\n * @param {FormField} field\n * @returns {string} row template\n */\n public addRowTemplate(field: FormField): void {\n let labelHideFlag = this.isLabelHide(field);\n\n let fieldStyle: FieldStyle = resolveFieldStyle(this.options, field, null, labelHideFlag);\n\n this.addRowFieldInfo(field);\n\n const rowElement = utils.templateToElement(`\n <div class=\"df-row df-form-group ${fieldStyle.fieldClass}\" id=\"${field.$key}\">\n ${labelHideFlag ? \"\" : `<div class=\"df-label ${fieldStyle.labelClass} ${fieldStyle.labelAlignClass}\" title=\"${field.label ?? \"\"}\" style=\"${fieldStyle.labelStyle}\">${this.getLabelTemplate(field)}</div>`}\n\n <div class=\"df-field-container ${fieldStyle.valueClass} ${field.required ? \"required\" : \"\"}\" style=\"${fieldStyle.valueStyle}\"></div>\n </div>\n `);\n\n if (rowElement) {\n this.createField(field, rowElement);\n this.formElement.append(rowElement);\n\n if (field.children) {\n this.childTemplate(field, fieldStyle);\n }\n }\n }\n\n public createField(field: FormField, element: Element): void {\n field.$instance = new (field.$renderType as any)(field, element, this.daraform);\n }\n\n /**\n * child template\n *\n * @param {FormField} field\n * @param {FieldStyle} parentFieldStyle\n * @returns {*}\n */\n public childTemplate(field: FormField, parentFieldStyle: FieldStyle): void {\n let beforeField: FormField = null as any;\n let firstFlag = true;\n let isEmptyLabel = false;\n\n if (!(field.$renderType as any).isChildrenCreate()) {\n return;\n }\n\n const rowElement = document.createElement(\"div\");\n rowElement.classList.add(\"df-row\", parentFieldStyle.rowStyleClass ?? \"\");\n\n let idx = 0;\n\n for (const childField of field.children) {\n if (utils.isEmpty(childField)) {\n throw new Error(`parent field :[${field.$validName}], children index ${idx}, empty [${childField}]`);\n }\n\n childField.$parent = field;\n ++idx;\n\n if (this.checkHiddenField(childField)) {\n continue;\n }\n\n this.addRowFieldInfo(childField);\n\n if (firstFlag) {\n beforeField = childField;\n }\n\n let labelHideFlag = this.isLabelHide(childField);\n\n let childFieldStyle;\n\n let labelTemplate = \"\";\n if (labelHideFlag) {\n childFieldStyle = resolveFieldStyle(this.options, childField, beforeField, !isEmptyLabel);\n labelTemplate = isEmptyLabel ? `<span class=\"df-label df-empty ${childFieldStyle.labelClass}\" style=\"${childFieldStyle.labelStyle}\"></span>` : \"\";\n } else {\n childFieldStyle = resolveFieldStyle(this.options, childField, beforeField, false);\n labelTemplate = `<span class=\"df-label ${childFieldStyle.labelClass} ${childFieldStyle.labelAlignClass}\" title=\"${childField.label ?? \"\"}\" style=\"${childFieldStyle.labelStyle}\">${this.getLabelTemplate(childField)}</span>`;\n }\n\n const groupElement = utils.templateToElement(`<div class=\"df-form-group ${childFieldStyle.fieldClass}\" style=\"${childFieldStyle.fieldStyle}\" id=\"${childField.$key}\">\n ${labelTemplate}\n <span class=\"df-field-container ${childFieldStyle.valueClass} ${childField.required ? \"required\" : \"\"}\" style=\"${childFieldStyle.valueStyle}\"></span>\n </div>`);\n\n if (groupElement) {\n this.createField(childField, groupElement);\n rowElement.append(groupElement);\n\n if (childField.children) {\n this.childTemplate(childField, childField.children ? childFieldStyle : parentFieldStyle);\n }\n }\n if (!labelHideFlag) {\n isEmptyLabel = true;\n }\n\n firstFlag = false;\n }\n\n field.$instance.addChildField(rowElement);\n }\n\n /**\n * label template\n *\n * @param {FormField} field form field\n * @returns {string} template string\n */\n public getLabelTemplate(field: FormField) {\n const requiredTemplate = field.required ? `<span class=\"required\"></span>` : \"\";\n const tooltipTemplate = utils.isBlank(field.tooltip) ? \"\" : `<span class=\"df-tooltip\">?<span class=\"df-tooltip-text\">${field.tooltip}</span></span>`;\n\n return `${field.label ?? \"\"} ${tooltipTemplate} ${requiredTemplate}`;\n }\n\n /**\n * label 숨김 여부\n *\n * @param field formfield\n * @returns\n */\n public isLabelHide(field: FormField): boolean {\n return field.style?.labelHide || utils.isUndefined(field.label);\n }\n\n public checkHiddenField(field: FormField) {\n if (utils.isHiddenField(field)) {\n this.fieldInfoMap.addField(field);\n field.$instance = new (field.$renderType as any)(field, null, this.daraform);\n\n return true;\n }\n\n return false;\n }\n\n /**\n * add row file map\n *\n * @param {FormField} field\n */\n public addRowFieldInfo(field: FormField) {\n if (!utils.isBlank(field.name) && this.fieldInfoMap.hasFieldName(field.name)) {\n throw new Error(`Duplicate field name \"${field.name}\"`);\n }\n\n this.fieldInfoMap.addField(field);\n this.addRowFields.push(field.$key);\n }\n}\n","import { FormOptions } from \"./types/FormOptions\";\r\nimport { merge } from \"./util/utils\";\r\n\r\nexport function initFormOptions(options: FormOptions): FormOptions {\r\n const opts = merge({}, DEFAULT_OPTIONS, options) as FormOptions;\r\n\r\n return opts;\r\n}\r\n\r\n/**\r\n * 전역으로 옵션 설정.\r\n *\r\n * @param options 옵션\r\n */\r\nexport function setDefaultOptions(options: Partial<FormOptions>): void {\r\n DEFAULT_OPTIONS = merge({}, DEFAULT_OPTIONS, options);\r\n}\r\n\r\nlet DEFAULT_OPTIONS = {\r\n style: {\r\n width: \"100%\",\r\n labelWidth: 3,\r\n valueWidth: 9,\r\n position: \"left-right\",\r\n },\r\n mode: \"new\",\r\n useTypeValue: true,\r\n autoCreate: true,\r\n notValidMessage: \"This form is not valid.\",\r\n fields: [],\r\n} as FormOptions;\r\n","import { FormOptions } from \"@t/FormOptions\";\nimport { FormField } from \"@t/FormField\";\nimport * as utils from \"./util/utils\";\nimport { ValidResult } from \"@t/ValidResult\";\nimport { Message } from \"@t/Message\";\nimport Language from \"./util/Language\";\nimport { stringValidator } from \"./rule/stringValidator\";\nimport { numberValidator } from \"./rule/numberValidator\";\nimport { regexpValidator } from \"./rule/regexpValidator\";\nimport FieldInfoMap from \"@/FieldInfoMap\";\nimport FormTemplate from \"./FormTemplate\";\nimport { FORM_MODE } from \"./constants\";\nimport { initFormOptions, setDefaultOptions } from \"./defaultOption\";\n\ndeclare const APP_VERSION: string;\n\ninterface FieldMap {\n [key: string]: FormField;\n}\n\ninterface DaraFormMap {\n [key: string]: DaraForm;\n}\n\nexport interface FormChangeEvent {\n form: DaraForm;\n}\n\nexport interface FormChangeListener {\n (event: FormChangeEvent): void;\n}\n\nexport interface Unsubscribe {\n (): void;\n}\n\n// all instance\nconst allInstance: DaraFormMap = {};\n\nconst SEQ_ATTR_KEY = \"data-form-uid\";\n\nlet DARA_FORM_SEQ = 0;\n/**\n * DaraForm class\n *\n * @class DaraForm\n * @typedef {DaraForm}\n */\nexport class DaraForm {\n public static VERSION = `${APP_VERSION}`;\n\n private readonly options;\n\n private orginFormStyleClass;\n\n private selector: string;\n private formElement: Element;\n\n private fieldInfoMap: FieldInfoMap;\n\n private formValue: any = {};\n\n public formTemplate: FormTemplate;\n\n private changeListeners: FormChangeListener[] = [];\n\n constructor(formElement: Element, options: FormOptions, message?: Message) {\n this.options = initFormOptions(options);\n\n Language.set(message);\n\n if (formElement) {\n this.orginFormStyleClass = formElement.className;\n formElement.classList.add(\"daracl-form\");\n\n this.selector = `df_${++DARA_FORM_SEQ}`;\n formElement.setAttribute(\"name\", this.selector);\n formElement.setAttribute(SEQ_ATTR_KEY, this.selector);\n\n if (this.options.style.width) {\n formElement.setAttribute(\"style\", `width:${this.options.style.width};`);\n }\n\n this.formElement = formElement;\n this.changeMode(this.options.mode ?? \"new\");\n this.createForm(this.options.fields);\n\n if (this.options.autoCreate !== false) {\n allInstance[this.selector] = this;\n }\n } else {\n throw new Error(`${formElement} form selector not found`);\n }\n }\n\n public static create(formElement: Element, options: FormOptions, message?: Message): DaraForm {\n return new DaraForm(formElement, options, message);\n }\n\n public static setMessage(message: Message): void {\n Language.set(message);\n }\n\n public static setDefaultOptions(options: FormOptions, message?: Message): void {\n setDefaultOptions(options);\n\n if (message) {\n Language.set(message);\n }\n }\n\n private createForm(fields: FormField[]) {\n this.fieldInfoMap = new FieldInfoMap(this.selector, this);\n //this.formElement.innerHTML = \"\";\n this.formTemplate = new FormTemplate(this, this.formElement, this.fieldInfoMap);\n\n if (this.options.autoCreate === false) {\n return;\n }\n\n fields.forEach((field) => {\n this.formTemplate.addRow(field);\n });\n this.conditionCheck();\n\n if (this.options.onMounted) {\n this.options.onMounted.call(this);\n }\n }\n\n /**\n * change mode\n *\n * @param mode form_mode default new\n */\n public changeMode = (mode: FORM_MODE): void => {\n this.options.mode = mode;\n this.formElement.setAttribute(\"data-df-mode\", mode);\n };\n\n /**\n * 폼 데이터 reset\n */\n public resetForm = () => {\n const fieldMap = this.fieldInfoMap.getAllFieldInfo();\n for (const seq in fieldMap) {\n const fieldInfo = fieldMap[seq];\n const renderInfo = fieldInfo.$instance;\n\n if (renderInfo && typeof renderInfo.reset === \"function\") {\n renderInfo.reset();\n }\n }\n this.formValue = {};\n this.conditionCheck();\n };\n\n /**\n * field 값 reset\n * @param fieldName 필드명\n */\n public resetField = (fieldName: string) => {\n this.fieldInfoMap.getFieldName(fieldName).$instance.reset();\n this.formValue[fieldName] = \"\";\n this.conditionCheck();\n };\n\n /**\n * 필드 element 얻기\n *\n * @param {string} fieldName\n * @returns {*}\n */\n public getFieldElement(fieldName: string) {\n const field = this.fieldInfoMap.getFieldName(fieldName);\n\n if (field?.$instance) {\n return field.$instance.getElement();\n }\n\n return null;\n }\n\n public getField(fieldName: string): FormField {\n return this.fieldInfoMap.getFieldName(fieldName);\n }\n\n /**\n * field 값 얻기\n *\n * @param fieldName 필드명\n * @returns\n */\n public getFieldValue = (fieldName: string) => {\n const field = this.fieldInfoMap.getFieldName(fieldName);\n\n if (field) {\n return field.$instance.getValue();\n }\n return null;\n };\n\n /**\n * 폼 필드 값 얻기\n * @param isValid 폼 유효성 검사 여부 default:false|undefined true일경우 검사.\n * @returns\n */\n public getValue = (isValid: boolean): any => {\n return this.fieldInfoMap.getAllFieldValue(this.formValue, isValid);\n };\n\n public getFormDataValue = (isValid: boolean): any => {\n return this.fieldInfoMap.getFormDataValue(this.formValue, isValid);\n };\n\n /**\n * 폼 필드 value 셋팅\n * @param values\n */\n public setValue = (values: any, dataClear?: boolean | undefined) => {\n if (dataClear !== false) {\n this.resetForm();\n }\n\n Object.keys(values).forEach((fieldName) => {\n this._setFieldValue(fieldName, values[fieldName]);\n });\n this.conditionCheck();\n };\n\n public setFieldValue = (fieldName: string, value: any) => {\n this._setFieldValue(fieldName, value);\n this.conditionCheck();\n };\n\n private _setFieldValue(fieldName: string, value: any) {\n this.formValue[fieldName] = value;\n const fieldInfo = this.fieldInfoMap.getFieldName(fieldName);\n\n if (fieldInfo) {\n fieldInfo.$instance.setValue(value);\n }\n }\n\n public setFieldItems = (fieldName: string, values: any) => {\n const field = this.fieldInfoMap.getFieldName(fieldName);\n\n if (field) {\n return field.$instance.setValueItems(values);\n }\n };\n\n /**\n * field 추가\n *\n * @param {FormField} field\n */\n public addField = (field: FormField) => {\n this.options.fields.push(field);\n this.formTemplate.addRow(field);\n this.conditionCheck();\n };\n\n /**\n * field 제거\n *\n * @param {string} fieldName\n */\n public removeField = (fieldName: string) => {\n const fieldInfo = this.fieldInfoMap.getFieldName(fieldName);\n\n if (!fieldInfo) return;\n\n const removeFields = this.getRemoveFields(fieldInfo);\n\n removeFields.forEach((removeField) => {\n this.removeFormValue(removeField);\n });\n\n this.removeFieldElement(fieldInfo);\n this.removeParentChildField(fieldInfo);\n\n removeFields.forEach((removeField) => {\n this.fieldInfoMap.removeFieldInfoByKey(removeField.$key);\n });\n\n this.conditionCheck();\n };\n\n /**\n * 제거할 필드와 같은 fieldInfoMap에 등록된 하위 필드(group 하위 필드, tab 패널) 목록\n * grid 컬럼, tab 패널 내부 필드는 별도 form에 등록되므로 제외됨.\n *\n * @param {FormField} fieldInfo\n * @param {FormField[]} result\n * @returns {FormField[]}\n */\n private getRemoveFields(fieldInfo: FormField, result: FormField[] = []): FormField[] {\n result.push(fieldInfo);\n\n fieldInfo.children?.forEach((childField) => {\n if (childField && this.fieldInfoMap.get(childField.$key) === childField) {\n this.getRemoveFields(childField, result);\n }\n });\n\n return result;\n }\n\n /**\n * field element 제거\n *\n * @param {FormField} fieldInfo\n */\n private removeFieldElement(fieldInfo: FormField) {\n const parentField = fieldInfo.$parent;\n\n // tab 패널은 tab header item, tab panel 로 구성됨.\n if (parentField && utils.isTabType(parentField)) {\n const tabElement = parentField.$instance.getElement() as Element;\n const tabItem = tabElement.querySelector(`[data-tab-id=\"${fieldInfo.$key}\"]`);\n const activeFlag = tabItem?.classList.contains(\"active\");\n\n tabItem?.remove();\n tabElement.querySelector(`[tab-panel-id=\"${fieldInfo.$key}\"]`)?.remove();\n\n const firstTabItem = tabElement.querySelector(\".df-tab-header .df-tab-item\");\n if (activeFlag && firstTabItem) {\n parentField.$instance.setActive(firstTabItem.getAttribute(\"data-tab-id\") ?? \"\");\n }\n return;\n }\n\n // 최상위 필드는 .df-row, group 하위 필드는 .df-form-group 에 id=$key 가 지정됨.\n const rowSelector = `[id=\"${fieldInfo.$key}\"]`;\n let element = fieldInfo.$instance?.getElement();\n\n // checkbox, radio 는 getElement()가 NodeList를 반환함.\n if (element instanceof NodeList || element instanceof HTMLCollection) {\n element = element[0] ?? null;\n }\n\n const rowElement = (element instanceof Element ? element.closest(rowSelector) : null) ?? this.formElement.querySelector(rowSelector);\n const containerElement = rowElement?.parentElement;\n\n rowElement?.remove();\n\n // group 하위 필드를 모두 제거한 경우 빈 row 제거\n if (parentField && containerElement?.classList.contains(\"df-row\") && containerElement.childElementCount < 1) {\n containerElement.remove();\n }\n }\n\n /**\n * 부모 children(최상위는 options.fields)에서 필드 제거\n * tab 은 children 기준으로 값/유효성 체크를 하므로 제거해야 함.\n *\n * @param {FormField} fieldInfo\n */\n private removeParentChildField(fieldInfo: FormField) {\n const fields: FormField[] | undefined = fieldInfo.$parent ? fieldInfo.$parent.children : this.options.fields;\n const idx = fields ? fields.indexOf(fieldInfo) : -1;\n\n if (idx > -1) {\n fields?.splice(idx, 1);\n }\n }\n\n /**\n * getValue() 시 formValue에 누적된 field 값 제거\n *\n * @param {FormField} fieldInfo\n */\n private removeFormValue(fieldInfo: FormField) {\n const keys = [fieldInfo.name, fieldInfo.$validName];\n\n if (fieldInfo.renderType === \"file\") {\n keys.push(fieldInfo.$validName + \"RemoveIds\");\n } else if (utils.isTabType(fieldInfo)) {\n keys.push(...Object.keys(fieldInfo.$instance.getValue() ?? {}));\n }\n\n // tab 패널 (useTypeValue false 일 경우 패널 내부 필드 값이 펼쳐져 저장됨)\n if (fieldInfo.$tabForm) {\n keys.push(...Object.keys(fieldInfo.$tabForm.getValue(false) ?? {}));\n }\n\n keys.forEach((key) => {\n if (!utils.isBlank(key)) delete this.formValue[key];\n });\n }\n\n /**\n * 폼 유효성 검증 여부\n *\n * @returns {boolean}\n */\n public isValidForm = (): boolean => {\n const result = this.validForm();\n\n return result.length < 1;\n };\n\n /**\n * 유효성 검증 폼 검증여부 리턴\n *\n * @returns {any[]}\n */\n public validForm = (): any[] => {\n let validResult = [] as any;\n let autoFocusFlag = this.options.autoFocus !== false;\n let firstFlag = true;\n\n const fieldMap = this.fieldInfoMap.getAllFieldInfo();\n for (const fieldKey in fieldMap) {\n const fieldInfo = fieldMap[fieldKey];\n\n let fieldValid = this.fieldInfoMap.getFieldValidation(fieldInfo, autoFocusFlag);\n\n if (fieldValid !== true) {\n autoFocusFlag = false;\n\n if (utils.isGridType(fieldInfo)) {\n validResult = validResult.concat(fieldValid);\n } else {\n if (firstFlag) {\n this.validTabCheck(fieldInfo);\n firstFlag = false;\n }\n validResult.push(fieldValid);\n }\n }\n }\n\n return validResult;\n };\n\n private validTabCheck(fieldInfo: FormField) {\n if (fieldInfo.$parent) {\n if (fieldInfo.$parent.renderType == \"tab\") {\n fieldInfo.$parent.$instance.setActive(fieldInfo.$key);\n }\n this.validTabCheck(fieldInfo.$parent);\n }\n }\n\n public isValidField = (fieldName: string): boolean => {\n const fieldInfo = this.fieldInfoMap.getFieldName(fieldName);\n\n if (utils.isUndefined(fieldInfo)) {\n throw new Error(`Field name [${fieldName}] not found`);\n }\n\n const renderInfo = fieldInfo.$instance;\n if (renderInfo) {\n return renderInfo.valid() === true;\n }\n\n return true;\n };\n\n /**\n * 설정 옵션 얻기\n */\n public getOptions = () => {\n return this.options;\n };\n\n public conditionCheck() {\n this.fieldInfoMap.conditionCheck();\n this.notifyChange();\n }\n\n /**\n * 폼 상태(값/보이기 여부 등) 변경을 감지하는 리스너 등록.\n *\n * value/setValue/resetForm/conditional 변경 체크\n *\n * @param listener 상태 변경시 호출되는 콜백\n * @returns 등록 해제 함수\n */\n public subscribe = (listener: FormChangeListener): Unsubscribe => {\n this.changeListeners.push(listener);\n\n return () => {\n this.changeListeners = this.changeListeners.filter((l) => l !== listener);\n };\n };\n\n private notifyChange() {\n if (this.changeListeners.length < 1) return;\n\n const event: FormChangeEvent = { form: this };\n this.changeListeners.forEach((listener) => listener(event));\n }\n\n public setFieldDisabled(fieldName: string, flag: boolean) {\n const fieldInfo = this.fieldInfoMap.getFieldName(fieldName);\n fieldInfo.$instance.setDisabled(flag);\n }\n\n /**\n * 설명 추가\n *\n * @public\n * @param {string} fieldName\n * @param {string} desc\n */\n public setFieldDescription(fieldName: string, desc: string) {\n const fieldInfo = this.fieldInfoMap.getFieldName(fieldName);\n fieldInfo.$instance.setDescription(desc);\n }\n\n public destroy = () => {\n this.formElement.className = this.orginFormStyleClass;\n this.formElement.replaceChildren();\n\n for (const key in this) {\n if (utils.hasOwnProp(this, key)) {\n delete this[key];\n delete allInstance[this.selector];\n }\n }\n };\n\n public static validator = {\n string: (value: string, field: FormField) => {\n return stringValidator(value, field);\n },\n number: (value: string, field: FormField) => {\n return numberValidator(value, field);\n },\n regexp: (value: string, field: FormField) => {\n let result: ValidResult = { name: field.name, constraint: [] };\n return regexpValidator(value, field, result);\n },\n };\n\n public static instance(ele: Element | String) {\n let element;\n if (utils.isString(ele)) {\n element = document.querySelector(ele);\n } else {\n element = ele;\n }\n element = element as Element;\n let selector = element.getAttribute(SEQ_ATTR_KEY);\n\n if (utils.isUndefined(selector) || utils.isBlank(selector)) {\n const keys = Object.keys(allInstance);\n if (keys.length > 1) {\n throw new Error(`selector empty : [${selector}]`);\n }\n selector = keys[0];\n\n return allInstance[selector];\n }\n }\n /**\n * 모든 field 얻기\n */\n public getFields = (): any[] => {\n return this.options.fields;\n };\n\n /**\n * field setting\n * @param fields\n */\n public setFields = (fields: any[]) => {\n this.options.fields = fields;\n this.createForm(fields);\n };\n\n public getFieldInfoMap() {\n return this.fieldInfoMap;\n }\n}\n"],"names":["coreIsArray","utils.isUndefined","utils.replaceXss","utils.isString","utils.isArray","parser","descEle","utils.isEmpty","utils.isBlank","utils.isNumber","message","Language","item","isArray","validResult","localeMessage","regexp","DEFAULT_OPTIONS","_DateTimePicker","isFunction","fieldStyle","utils.templateToElement","utils.merge","utils.getXssFieldName","utils.isPlainObject","utils.getHashCode","utils.replaceXssField","utils.ignoreValueField","utils.isTabType","utils.isHiddenField","utils.isGridType","utils.hasOwnProp"],"mappings":";AAGA,MAAM,YAAY;AAAA,EAChB,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP;AAEO,MAAM,aAAa,CAAC,cAA8B;AACvD,MAAI,aAAa;AACjB,MAAI,YAAY;AACd,WAAO,KAAK,SAAS,EAAE,QAAQ,CAAC,QAAQ;AACtC,mBAAa,WAAW,WAAW,KAAK,UAAU,GAAG,CAAC;AAAA,IACxD,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEO,MAAM,aAAa,CAAC,KAAU,QAAyB;AAC5D,SAAO,IAAI,eAAe,GAAG;AAC/B;AAmBO,MAAM,UAAU,CAAC,UAAwB;AAC9C,MAAI,UAAU,KAAM,QAAO;AAC3B,MAAI,UAAU,GAAI,QAAO;AACzB,MAAI,OAAO,UAAU,YAAa,QAAO;AACzC,MAAI,OAAO,UAAU,aAAa,UAAU,MAAM,MAAM,QAAQ,OAAO,EAAE,MAAM,IAAK,QAAO;AAE3F,SAAO;AACT;AAEO,MAAM,cAAc,CAAC,UAAmC;AAC7D,SAAO,OAAO,UAAU;AAC1B;AAEO,MAAM,aAAa,CAAC,UAAwB;AACjD,SAAO,OAAO,UAAU;AAC1B;AAEO,MAAM,WAAW,CAAC,UAAgC;AACvD,SAAO,OAAO,UAAU;AAC1B;AACO,MAAM,WAAW,CAAC,UAAgC;AACvD,MAAI,QAAQ,KAAK,GAAG;AAClB,WAAO;AAAA,EACT;AACA,UAAQ,CAAC;AACT,SAAO,CAAC,MAAM,KAAK;AACrB;AAEO,MAAM,UAAU,CAAC,UAAoC;AAC1D,SAAOA,UAAY,KAAK;AAC1B;AAQO,MAAM,UAAU,CAAC,UAAwB,YAAY,KAAK,KAAK,SAAS;AAQxE,MAAM,YAAY,CAAC,UAA8B;AACtD,SAAO,SAAS,MAAM,eAAe;AACvC;AAOO,MAAM,aAAa,CAAC,UAA8B;AACvD,SAAO,SAAS,MAAM,eAAe;AACvC;AACO,MAAM,kBAAkB,CAAC,UAAgC;AAC9D,QAAM,WAAW,gBAAgB,KAAK;AAEtC,QAAM,QAAQ,WAAW,MAAM,KAAK;AACpC,SAAO;AACT;AAQO,MAAM,mBAAmB,CAAC,UAA8B;AAC7D,SAAO,WAAW,MAAM,OAAO,KAAK,UAAU,MAAM,OAAO;AAC7D;AAQO,MAAM,kBAAkB,CAAC,UAA6B;AAC3D,MAAI,YAAY,MAAM,QAAQ,GAAG;AAC/B,QAAI,aAAa,MAAM;AACvB,QAAI,YAAY;AACd,aAAO,KAAK,SAAS,EAAE,QAAQ,CAAC,QAAQ;AACtC,qBAAa,WAAW,WAAW,KAAK,GAAG;AAAA,MAC7C,CAAC;AAAA,IACH;AAEA,WAAO,QAAQ;AAAA,EACjB;AAEA,SAAO,MAAM;AACf;AAEO,MAAM,cAAc,CAAC,QAAgB;AAC1C,MAAI,OAAO;AACX,MAAI,IAAI,UAAU,EAAG,QAAO;AAC5B,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,QAAI,UAAU,IAAI,WAAW,CAAC;AAC9B,YAAQ,QAAQ,KAAK,OAAO;AAC5B,WAAO,OAAO;AAAA,EAChB;AACA,SAAO,OAAO,IAAI,EAAE,WAAW,MAAM,GAAG;AAC1C;AAEO,MAAM,gBAAgB,CAAC,UAA8B;AAC1D,MAAI,MAAM,eAAe,UAAU;AACjC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,MAAM,oBAAoB,CAAC,iBAAyC;AACzE,QAAM,WAAW,SAAS,cAAc,UAAU;AAClD,WAAS,YAAY;AACrB,SAAO,SAAS,QAAQ;AAC1B;AAEO,SAAS,cAAc,KAAU;AAEtC,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,WAAO;AAAA,EACT;AAGA,MAAI,QAAQ;AACZ,SAAO,OAAO,eAAe,KAAK,MAAM,MAAM;AAC5C,YAAQ,OAAO,eAAe,KAAK;AAAA,EACrC;AAGA,SAAO,OAAO,eAAe,GAAG,MAAM;AACxC;AAEA,SAAS,SAAS,OAAY;AAC5B,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,QAAQ,KAAK;AACtE;AAEA,SAAS,OAAO,OAAY;AAC1B,SAAO,iBAAiB,QAAQ,CAAC,MAAM,MAAM,SAAS;AACxD;AAYO,MAAM,QAAQ,IAAI,UAAsB;AAC7C,MAAI,QAAQ,MAAM,CAAC;AAEnB,MAAI,CAAC,cAAc,KAAK,KAAK,QAAQ,KAAK,GAAG;AAC3C,WAAO;AAAA,EACT;AAEA,MAAI,IAAI;AACR,MAAI,OAAO,KAAK,KAAK,EAAE,SAAS,GAAG;AACjC,QAAI;AACJ,YAAQ,QAAQ,KAAK,IAAI,CAAA,IAAK,CAAA;AAAA,EAChC;AACA,QAAM,SAAS,MAAM;AACrB,SAAO,IAAI,QAAQ,KAAK,GAAG;AACzB,cAAU,OAAO,MAAM,CAAC,CAAC;AAAA,EAC3B;AAEA,SAAO;AACT;AAMA,SAAS,UAAU,KAAU,KAAe;AAC1C,MAAI,SAAS,GAAG,GAAG;AACjB,WAAO,gBAAgB,KAAK,GAAG;AAAA,EACjC;AAEA,MAAI,QAAQ,GAAG,GAAG;AAChB,WAAO,eAAe,KAAK,GAAG;AAAA,EAChC;AAEA,MAAI,OAAO,GAAG,GAAG;AACf,WAAO,IAAI,IAAI,YAAY,GAAG;AAAA,EAChC;AACA,SAAO;AACT;AAGA,SAAS,gBAAgB,KAAU,KAAkB;AACnD,MAAI,WAAW,GAAG,GAAG;AACnB,WAAO;AAAA,EACT;AAEA,aAAW,OAAO,OAAO,KAAK,GAAG,GAAG;AAClC,UAAM,MAAO,IAAY,GAAG;AAE5B,QAAI,YAAY,GAAG,GAAG;AACpB;AAAA,IACF;AAEA,QAAI,QAAQ,MAAM;AAChB,UAAI,GAAG,IAAI;AAAA,IACb,WAAW,WAAW,GAAG,GAAG;AAC1B,UAAI,GAAG,IAAI;AAAA,IACb,WAAW,QAAQ,IAAI,GAAG,CAAC,GAAG;AAC5B,UAAI,GAAG,IAAI,UAAU,QAAQ,GAAG,IAAI,CAAA,IAAK,CAAA,GAAI,GAAG;AAAA,IAClD,WAAW,CAAC,SAAS,GAAG,GAAG;AACzB,UAAI,GAAG,IAAI;AAAA,IACb,OAAO;AACL,gBAAU,IAAI,GAAG,GAAG,GAAG;AAAA,IACzB;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,eAAe,KAAU,KAAY;AAC5C,QAAM,QAAQ,cAAc,GAAG;AAE/B,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,GAAG;AACtC,UAAM,MAAM,IAAI,CAAC;AACjB,QAAI;AAEJ,QAAI,OAAO,MAAM;AACf,eAAS;AAAA,IACX,OAAO;AACL,eAAS,UAAU,QAAQ,GAAG,IAAI,CAAA,IAAK,CAAA,GAAI,GAAG;AAAA,IAChD;AAEA,QAAI,OAAO;AACR,UAAY,CAAC,IAAI;AAAA,IACpB,OAAO;AACL,UAAI,KAAK,MAAM;AAAA,IACjB;AAAA,EACF;AACA,SAAO;AACT;ACtRO,MAAe,OAAO;AAAA,EAO3B,YAAY,MAAgB,OAAkB,YAAyB;;AAFvE,SAAQ,aAAsB;AAG5B,SAAK,WAAW;AAChB,SAAK,QAAQ;AACb,SAAK,aAAa;AAClB,SAAK,YAAA;AAEL,QAAI,MAAM,QAAS,kBAAW,cAAc,aAAa,MAAtC,mBAAyC,aAAa,WAAW,MAAM;AAAA,EAC5F;AAAA,EAEO,iBAAiB;AACtB,QAAIC,YAAkB,KAAK,MAAM,YAAY,GAAG;AAC9C,WAAK,SAAS,IAAI,KAAK;AAAA,IACzB,OAAO;AACL,WAAK,SAAS,KAAK,MAAM,cAAc,KAAK;AAAA,IAC9C;AAEA,QAAI,CAACA,YAAkB,KAAK,MAAM,WAAW,GAAG;AAC9C,YAAM,MAAM,KAAK,WAAA;AACjB,UAAI,eAAe,SAAS;AAC1B,YAAI,aAAa,eAAe,KAAK,MAAM,WAAW;AAAA,MACxD;AAAA,IACF;AAAA,EACF;AAAA,EAEO,mBAAmB;AACxB,SAAK,YAAY,KAAK,MAAM,YAAY,KAAK;AAAA,EAC/C;AAAA,EAEO,cAAc,SAAkB;;AACrC,eAAK,WAAW,cAAc,qBAAqB,MAAnD,mBAAsD,OAAO;AAAA,EAC/D;AAAA,EAEA,OAAO,eAAwB;AAC7B,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,mBAA4B;AACjC,WAAO;AAAA,EACT;AAAA,EAEO,UAAoB;AACzB,WAAO,KAAK;AAAA,EACd;AAAA,EAUO,cAAc,OAAkB;AAAA,EAAC;AAAA,EAExC,OAAc,uBAAuB,OAA0B;AAC7D,UAAM,aAAa,MAAM,mBAAmBC,WAAiB,MAAM,gBAAgB,IAAI;AACvF,UAAM,QAAQ,MAAM,mBAAmB,YAAYA,WAAiB,MAAM,gBAAgB,IAAI,MAAM;AAEpG,WAAO,MAAM,cAAc,8BAA8B,UAAU,KAAK,KAAK,IAAI,MAAM,WAAW,WAAW;AAAA,EAC/G;AAAA,EAEO,gBAAgB,OAAkB,GAAiB,WAAmB,YAAsC;;AACjH,QAAI,MAAM,UAAU;AAClB,UAAI,aAAkB;AAAA,QACpB;AAAA,QACA,KAAK;AAAA,QACL,UAAU,MAAM;AAAA,QAChB,OAAO;AAAA,MAAA;AAGT,WAAI,WAAM,aAAN,mBAAgB,MAAM;AACxB,YAAI,aAAa,CAAA;AACjB,cAAM,WAAW,OAAO,eAAe,KAAK;AAE5C,iBAAS,OAAO,MAAM,SAAS,MAAM;AACnC,cAAI,YAAY,IAAI,QAAQ;AAC5B,cAAIC,SAAe,UAAU,GAAG;AAC9B,gBAAI,aAAa,YAAY;AAC3B,yBAAW,KAAK,GAAG;AACnB;AAAA,YACF;AAAA,UACF,WAAWC,QAAc,UAAU,GAAG;AACpC,gBAAI,WAAW,SAAS,SAAS,GAAG;AAClC,yBAAW,KAAK,GAAG;AAAA,YACrB;AAAA,UACF;AAAA,QACF;AAEA,mBAAW,aAAa;AAAA,MAC1B;AAEA,UAAI,WAAW,YAAY,WAAW,SAAS,MAAM,SAAS,KAAK,MAAM,UAAU,MAAM,OAAO;AAC9F,kBAAU,SAAS,MAAM,QAAQ,KAAK;AACtC,eAAO;AAAA,MACT;AAEA,YAAM,SAAS,WAAW;AAAA,IAC5B;AAEA,SAAK,SAAS,eAAA;AAAA,EAChB;AAAA,EAEO,QAAQ;AACb,SAAK,WAAA,EAAa,MAAA;AAAA,EACpB;AAAA,EAEO,eAAe;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,OAAO;AACZ,SAAK,aAAa;AAClB,SAAK,WAAW,UAAU,OAAO,WAAW;AAAA,EAC9C;AAAA,EAEO,OAAO;AACZ,SAAK,aAAa;AAClB,QAAI,CAAC,KAAK,WAAW,UAAU,SAAS,WAAW,GAAG;AACpD,WAAK,WAAW,UAAU,IAAI,WAAW;AAAA,IAC3C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,eAAe,MAAc;;AAClC,UAAM,UAAU,KAAK,WAAW,cAAc,iBAAiB;AAC/D,QAAI,SAAS;AACX,cAAQ,cAAc;AAAA,IACxB,OAAO;AACL,YAAM,WAAW,KAAK,WAAW,cAAc,WAAW;AAC1D,UAAI,UAAU;AACZ,cAAMC,UAAS,IAAI,UAAA;AACnB,aAAK,MAAM,cAAc;AACzB,cAAMC,WAAUD,QAAO,gBAAgB,OAAO,uBAAuB,KAAK,KAAK,GAAG,WAAW,EAAE,cAAc,iBAAiB;AAE9H,YAAIC,SAAS,gBAAS,eAAT,mBAAqB,aAAaA,UAAS,SAAS;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAAA,EAEO,UAAU,IAAkB;AAAA,EAEnC;AAAA,EAEO,YAAY,MAAe;AAChC,UAAM,MAAM,KAAK,WAAA;AACjB,QAAI,eAAe,aAAa;AAC9B,UAAI,SAAS,OAAO;AAClB,aAAK,WAAA,EAAa,gBAAgB,UAAU;AAAA,MAC9C,OAAO;AACL,aAAK,WAAA,EAAa,aAAa,YAAY,IAAI;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AAAA,EAEO,kBAAkB;AAAA,EAEzB;AAAA,EAEA,OAAc,eAAe,OAA0B;;AACrD,aAAO,WAAM,aAAN,mBAAgB,cAAa,MAAM,SAAS,aAAa;AAAA,EAClE;AAAA,EAEA,OAAc,eAAe,OAA0B;;AACrD,aAAO,WAAM,aAAN,mBAAgB,cAAa,MAAM,SAAS,aAAa;AAAA,EAClE;AAAA,EAEA,OAAc,iBAAiB,OAAe,KAAU;AACtD,QAAI,cAAc;AAClB,UAAM,cAAc,MAAM,QAAQ,6BAA6B,CAAC,OAAO,QAAQ;AAC7E,oBAAc;AACd,aAAO,IAAI,GAAG,KAAK;AAAA,IACrB,CAAC;AAED,QAAI,aAAa;AACf,aAAO;AAAA,IACT;AAEA,WAAO,IAAI,KAAK,KAAK;AAAA,EACvB;AACF;ACjMA,MAAM,SAAS;AAAA,EACb,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,aAAa;AAAA,EACb,UAAU;AAAA,EACV,eAAe;AAAA,EACf,cAAc;AAAA,EACd,sBAAsB;AAAA,EACtB,6BAA6B;AAC/B;AAUO,MAAM,kBAAkB,CAAC,OAAe,OAAkB,WAAqC;AACpG,MAAI,CAAC,MAAM,UAAU,gBAAgB;AACnC,WAAO,EAAE,MAAM,MAAM,MAAM,YAAY,CAAA,EAAC;AAAA,EAC1C;AAEA,MAAI,OAAO,WAAW,aAAa;AACjC,aAAS,EAAE,MAAM,MAAM,MAAM,YAAY,CAAA,EAAC;AAAA,EAC5C;AAEA,QAAM,aAAa,MAAM;AAEzB,MAAI,YAAY;AACd,QAAI,CAAC,OAAO,UAAU,EAAE,KAAK,KAAK,GAAG;AACnC,aAAO,SAAS;AAChB,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AC/BO,MAAM,YAAY,CAAC,OAAe,OAAkB,WAA+C;AACxG,MAAI,MAAM,WAAW;AACnB,WAAO,YAAY,MAAM,UAAU,OAAO,KAAK;AAC/C,QAAI,OAAO,OAAO,cAAc,UAAU;AACxC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,WAAS,gBAAgB,OAAO,OAAO,MAAM;AAE7C,MAAI,OAAO,QAAQ;AACjB,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,WAAW;AACnB,UAAM,gBAAgB,MAAM,UAAU;AACtC,UAAM,YAAY,MAAM,UAAU,QAAA,EAAU,SAAS,aAAa;AAElE,QAAI,CAACC,QAAc,SAAS,KAAK,MAAM,UAAU,SAAA,KAAc,UAAU,UAAU,YAAY;AAC7F,aAAO,UAAU,MAAM,UAAU;AACjC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,MAAM,WAAW;AACnB,UAAM,gBAAgB,MAAM,UAAU;AACtC,UAAM,YAAY,MAAM,UAAU,QAAA,EAAU,SAAS,aAAa;AAElE,QAAI,CAACA,QAAc,SAAS,KAAK,MAAM,UAAU,SAAA,KAAc,UAAU,UAAU,YAAY;AAC7F,aAAO,UAAU,MAAM,UAAU;AACjC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;ACnCO,MAAM,kBAAkB,CAAC,OAAe,UAA4C;AACzF,MAAI,CAAC,MAAM,UAAU,gBAAgB;AACnC,WAAO;AAAA,EACT;AAEA,QAAM,SAAsB,EAAE,MAAM,MAAM,MAAM,YAAY,GAAC;AAC7D,QAAM,WAAW,OAAO,KAAK;AAE7B,MAAI,MAAM,YAAYC,QAAc,KAAK,GAAG;AAC1C,WAAO,WAAW,KAAK,MAAM,QAAQ;AACrC,WAAO;AAAA,EACT;AAEA,MAAI,CAACC,SAAe,KAAK,GAAG;AAC1B,WAAO,WAAW,KAAK,MAAM,GAAG;AAChC,WAAO;AAAA,EACT;AAEA,MAAI,UAAU,OAAO,OAAO,MAAM,MAAM,MAAM;AAC5C,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,MAAM;AACnB,MAAI,MAAM;AACR,UAAM,YAAYA,SAAe,KAAK,OAAO,GAC3C,YAAYA,SAAe,KAAK,OAAO;AAEzC,QAAI,UAAU,OACZ,eAAe,OACf,UAAU,OACV,eAAe;AAEjB,QAAI,WAAW;AACb,UAAI,KAAK,oBAAoB,YAAY,KAAK,SAAS;AACrD,uBAAe;AAAA,MACjB,WAAW,WAAW,KAAK,SAAS;AAClC,kBAAU;AAAA,MACZ;AAAA,IACF;AAEA,QAAI,WAAW;AACb,UAAI,KAAK,oBAAoB,YAAY,KAAK,SAAS;AACrD,uBAAe;AAAA,MACjB,WAAW,WAAW,KAAK,SAAS;AAClC,kBAAU;AAAA,MACZ;AAAA,IACF;AAEA,QAAI,aAAa,cAAc,WAAW,gBAAgB,WAAW,eAAe;AAClF,UAAI,KAAK,oBAAoB,KAAK,qBAAqB,gBAAgB,eAAe;AACpF,eAAO,WAAW,KAAK,MAAM,wBAAwB;AAAA,MACvD,WAAW,cAAc;AACvB,eAAO,WAAW,KAAK,MAAM,qBAAqB;AAAA,MACpD,WAAW,cAAc;AACvB,eAAO,WAAW,KAAK,MAAM,qBAAqB;AAAA,MACpD,OAAO;AACL,eAAO,WAAW,KAAK,MAAM,OAAO;AAAA,MACtC;AAAA,IACF,OAAO;AACL,UAAI,cAAc;AAChB,eAAO,WAAW,KAAK,MAAM,aAAa;AAAA,MAC5C;AAEA,UAAI,cAAc;AAChB,eAAO,WAAW,KAAK,MAAM,aAAa;AAAA,MAC5C;AAEA,UAAI,SAAS;AACX,eAAO,WAAW,KAAK,MAAM,GAAG;AAAA,MAClC;AAEA,UAAI,SAAS;AACX,eAAO,WAAW,KAAK,MAAM,GAAG;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AAEA,MAAI,OAAO,WAAW,SAAS,GAAG;AAChC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AC3FO,MAAM,iBAAiB,CAAC,OAAkB,YAAqB,gBAAuC;AAC3G,MAAI,gBAAgB,MAAM;AACxB,eAAW,UAAU,OAAO,SAAS;AAErC,QAAI,CAAC,WAAW,UAAU,SAAS,OAAO,GAAG;AAC3C,iBAAW,UAAU,IAAI,OAAO;AAAA,IAClC;AAEA,UAAM,qBAAqB,WAAW,cAAc,kBAAkB;AACtE,QAAI,oBAAoB;AACtB,yBAAmB,YAAY;AAAA,IACjC;AAEA;AAAA,EACF;AAEA,aAAW,UAAU,OAAO,OAAO;AAEnC,MAAI,CAAC,WAAW,UAAU,SAAS,SAAS,GAAG;AAC7C,eAAW,UAAU,IAAI,SAAS;AAAA,EACpC;AAEA,MAAI,gBAAgB,OAAO;AACzB,UAAMC,WAAoBC,WAAS,aAAa,OAAO,WAAW;AAElE,QAAI,YAAY,SAAS;AACvB,MAAAD,SAAQ,KAAK,YAAY,OAAO;AAAA,IAClC;AAEA,UAAM,qBAAqB,WAAW,cAAc,kBAAkB;AACtE,QAAI,sBAAsBA,SAAQ,SAAS,GAAG;AAC5C,YAAM,UAAoB,CAAA;AAC1B,MAAAA,SAAQ,QAAQ,CAAC,SAAS;AACxB,gBAAQ,KAAK,QAAQ,IAAI,QAAQ;AAAA,MACnC,CAAC;AACD,yBAAmB,YAAY,QAAQ,KAAK,EAAE;AAAA,IAChD;AAAA,EACF;AACF;AAOO,MAAM,4BAA4B,CAAC,eAAwB;AAChE,aAAW,UAAU,OAAO,SAAS;AACrC,aAAW,UAAU,OAAO,OAAO;AACrC;AChDO,MAAM,aAAa,CAAC,OAAkB,SAAkB,eAAuB;AACpF,UAAQ,iBAAiB,SAAS,CAAC,MAAa;AAC9C,0BAAsB,OAAO,GAAG,YAAY,WAAW,UAAU;AACjE,eAAW,MAAA;AAAA,EACb,CAAC;AACH;AAEO,MAAM,mBAAmB,CAAC,OAAkB,SAA2B,eAAuB;AACnG,UAAQ,iBAAiB,SAAS,CAAC,MAAW;AAC5C,UAAM,MAAM,EAAE,OAAO;AAErB,QAAI,CAACD,SAAe,GAAG,GAAG;AACxB,cAAQ,QAAQ,IAAI,QAAQ,iBAAiB,EAAE;AAC/C,QAAE,eAAA;AAAA,IACJ;AACA,0BAAsB,OAAO,GAAG,YAAY,WAAW,UAAU;AACjE,eAAW,MAAA;AAAA,EACb,CAAC;AAQH;AAEO,MAAM,sBAAsB,CAAC,OAAkB,SAAkB,eAAuB;AAC7F,UAAQ,iBAAiB,UAAU,CAAC,MAAW;AAC7C,0BAAsB,OAAO,GAAG,YAAY,WAAW,UAAU;AACjE,eAAW,MAAA;AAAA,EACb,CAAC;AACH;AAEO,MAAM,wBAAwB,CAAC,OAAkB,GAAU,YAAoB,UAAe;AACnG,aAAW,gBAAgB,OAAO,GAAG,YAAY,KAAK;AACxD;ACjCA,MAAqB,qBAAqB,OAAO;AAAA,EAG/C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,UAAM,UAAU,OAAO,UAAU;AAEjC,SAAK,QAAA;AACL,SAAK,iBAAA;AACL,SAAK,eAAA;AAAA,EACP;AAAA,EAEA,UAAU;AACR,qBAAiB,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,EACjD;AAAA,EAEA,cAAc;AACZ,UAAM,QAAQ,KAAK;AAEnB,UAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,0BAAsB,YAAY;AAAA;AAAA,uCAEC,MAAM,QAAQ;AAAA;AAAA,UAE3C,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA;AAG1C,SAAK,UAAU,sBAAsB,cAAc,UAAU,MAAM,QAAQ,IAAI;AAAA,EACjF;AAAA,EAEA,WAAW;AACT,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,SAAS,OAAY,iBAAiC;AACpD,QAAI,oBAAoB,SAAS,KAAK,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;AAC9F,WAAK,QAAQ,QAAQ,KAAK,MAAM;AAChC;AAAA,IACF;AACA,SAAK,MAAM,SAAS;AACpB,SAAK,QAAQ,QAAQ;AAAA,EACvB;AAAA,EAEA,QAAQ;AACN,SAAK,eAAA;AACL,SAAK,YAAY,KAAK;AACtB,8BAA0B,KAAK,UAAU;AAAA,EAC3C;AAAA,EAEA,aAA0B;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAa;AACX,UAAM,cAAc,gBAAgB,KAAK,SAAA,GAAY,KAAK,KAAK;AAE/D,mBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,WAAO;AAAA,EACT;AACF;ACtDO,MAAM,kBAAkB,CAAC,OAAe,UAA4C;AACzF,MAAI,CAAC,MAAM,UAAU,gBAAgB;AACnC,WAAO;AAAA,EACT;AAEA,MAAI,SAAsB,EAAE,MAAM,MAAM,MAAM,YAAY,GAAC;AAE3D,MAAI,MAAM,YAAYD,QAAc,KAAK,GAAG;AAC1C,WAAO,WAAW,KAAK,MAAM,QAAQ;AACrC,WAAO;AAAA,EACT;AACA,QAAM,cAAc,UAAU,OAAO,OAAO,MAAM;AAClD,MAAI,gBAAgB,MAAM;AACxB,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,MAAM;AAEnB,MAAI,MAAM;AACR,UAAM,cAAc,MAAM;AAE1B,UAAM,cAAcC,SAAe,KAAK,SAAS,GAC/C,cAAcA,SAAe,KAAK,SAAS;AAE7C,QAAI,UAAU,OACZ,UAAU;AACZ,QAAI,eAAe,cAAc,KAAK,WAAW;AAC/C,gBAAU;AAAA,IACZ;AACA,QAAI,eAAe,cAAc,KAAK,WAAW;AAC/C,gBAAU;AAAA,IACZ;AAEA,QAAI,eAAe,gBAAgB,WAAW,UAAU;AACtD,aAAO,WAAW,KAAK,MAAM,OAAO;AAAA,IACtC,OAAO;AACL,UAAI,SAAS;AACX,eAAO,WAAW,KAAK,MAAM,UAAU;AAAA,MACzC;AAEA,UAAI,SAAS;AACX,eAAO,WAAW,KAAK,MAAM,UAAU;AAAA,MACzC;AAAA,IACF;AACA,QAAI,OAAO,WAAW,SAAS,GAAG;AAChC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;ACxDA,MAAqB,uBAAuB,OAAO;AAAA,EAGjD,YAAY,OAAkB,YAAyB,UAAoB;AACzE,UAAM,UAAU,OAAO,UAAU;AAEjC,SAAK,QAAA;AACL,SAAK,iBAAA;AACL,SAAK,eAAA;AAAA,EACP;AAAA,EAEA,UAAU;AACR,eAAW,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,EAC3C;AAAA,EAEA,cAAc;;AACZ,UAAM,QAAQ,KAAK;AAEnB,UAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,QAAI,QAAO,WAAM,oBAAN,mBAAuB;AAClC,WAAO,CAAC,OAAO,IAAI,OAAO;AAE1B,0BAAsB,YAAY;AAAA;AAAA,8BAER,MAAM,QAAQ,WAAW,IAAI;AAAA;AAAA,UAEjD,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA;AAI1C,SAAK,UAAU,sBAAsB,cAAc,UAAU,MAAM,QAAQ,IAAI;AAAA,EACjF;AAAA,EAEA,WAAW;AACT,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,SAAS,OAAY,iBAAiC;AACpD,QAAI,oBAAoB,SAAS,KAAK,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;AAC9F,WAAK,QAAQ,QAAQ,KAAK,MAAM;AAChC;AAAA,IACF;AACA,SAAK,MAAM,SAAS;AACpB,SAAK,QAAQ,QAAQ;AAAA,EACvB;AAAA,EAEA,QAAQ;AACN,SAAK,eAAA;AACL,SAAK,YAAY,KAAK;AACtB,8BAA0B,KAAK,UAAU;AAAA,EAC3C;AAAA,EAEA,aAA0B;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAa;AACX,UAAM,cAAc,gBAAgB,KAAK,SAAA,GAAY,KAAK,KAAK;AAE/D,mBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,WAAO;AAAA,EACT;AACF;AC7DA,MAAqB,uBAAuB,OAAO;AAAA,EAIjD,YAAY,OAAkB,YAAyB,UAAoB;;AACzE,UAAM,UAAU,OAAO,UAAU;AAEjC,QAAI,mBAAmB;AAEvB,QAAI,CAACR,YAAkB,MAAM,YAAY,GAAG;AAC1C,yBAAmB,MAAM;AAAA,IAC3B;AAEA,UAAM,WAAW,eAAe,eAAe,KAAK;AACpD,QAAI,uBAAuB;AAC3B,qBAAK,MAAM,aAAX,mBAAqB,SAArB,mBAA2B,QAAQ,CAAC,SAAS;AAC3C,UAAI,YAAY,KAAK,QAAQ;AAC7B,UAAI,KAAK,UAAU;AACjB,aAAK,kBAAkB;AAAA,MACzB;AACA,UAAI,aAAa,kBAAkB;AACjC,+BAAuB;AAAA,MACzB;AAAA,IACF;AAEA,QAAI,sBAAsB;AACxB,WAAK,kBAAkB;AAAA,IACzB,WAAW,CAAC,KAAK,iBAAiB;AAChC,YAAI,WAAM,oBAAN,mBAAuB,0BAAyB,MAAM;AACxD,aAAK,oBAAkB,gBAAK,MAAM,aAAX,mBAAqB,SAArB,mBAA2B,UAAS,IAAI,KAAK,MAAM,SAAS,KAAK,CAAC,EAAE,QAAQ,KAAK,KAAK;AAAA,MAC/G;AAAA,IACF;AAEA,QAAIA,YAAkB,KAAK,eAAe,GAAG;AAC3C,WAAK,kBAAkB;AAAA,IACzB;AAEA,SAAK,QAAA;AACL,SAAK,iBAAA;AACL,SAAK,SAAS,KAAK,iBAAiB,KAAK;AAAA,EAC3C;AAAA,EAEA,UAAU;AACR,wBAAoB,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,EACpD;AAAA,EAEA,cAAc;AACZ,UAAM,QAAQ,KAAK;AAEnB,UAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,QAAI,WAAW,wCAAwC,MAAM,QAAQ;AAAA,YAC7D,KAAK,uBAAuB,KAAK,CAAC;AAAA;AAAA,kBAE5B,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA;AAGlD,0BAAsB,YAAY;AAElC,SAAK,UAAU,sBAAsB,cAAc,UAAU,MAAM,QAAQ,IAAI;AAAA,EACjF;AAAA,EAEO,cAAc,OAAkB;AACrC,QAAI,KAAK,MAAM,UAAU;AACvB,WAAK,MAAM,SAAS,OAAO;AAAA,IAC7B,OAAO;AACL,WAAK,MAAM,WAAW;AAAA,QACpB,MAAM;AAAA,MAAA;AAAA,IAEV;AACA,SAAK,QAAQ,YAAY,KAAK,uBAAuB,KAAK,KAAK;AAE/D,QAAI,CAACO,QAAc,KAAK,MAAM,MAAM,GAAG;AACrC,YAAM,eAAe,KAAK,MAAM;AAChC,WAAK,MAAM,SAAS;AACpB,WAAK,SAAS,YAAY;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,WAAW;AACT,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,SAAS,OAAY,iBAAiC;AACpD,QAAI,oBAAoB,SAAS,KAAK,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;AAC9F,WAAK,QAAQ,QAAQ,KAAK,MAAM;AAChC;AAAA,IACF;AACA,SAAK,MAAM,SAAS;AACpB,SAAK,QAAQ,QAAQ;AAAA,EACvB;AAAA,EAEA,QAAQ;AACN,SAAK,SAAS,KAAK,iBAAiB,KAAK;AACzC,SAAK,YAAY,KAAK;AACtB,8BAA0B,KAAK,UAAU;AAAA,EAC3C;AAAA,EAEA,aAA0B;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAa;AACX,UAAM,QAAQ,KAAK,SAAA;AAEnB,QAAI,cAAqC;AAEzC,QAAI,KAAK,MAAM,UAAU;AACvB,UAAI,MAAM,SAAS,GAAG;AACpB,sBAAc,EAAE,MAAM,KAAK,MAAM,MAAM,YAAY,GAAC;AACpD,oBAAY,WAAW,KAAK,MAAM,QAAQ;AAAA,MAC5C;AAAA,IACF;AAEA,mBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,WAAO;AAAA,EACT;AAAA,EAEO,uBAAuB,OAAkB;;AAC9C,UAAM,WAAW,OAAO,eAAe,KAAK;AAC5C,UAAM,WAAW,OAAO,eAAe,KAAK;AAC5C,QAAI,WAAW;AAEf,UAAI,WAAM,oBAAN,mBAAuB,0BAAyB,MAAM;AACxD,kBAAY,oBAAoBG,WAAS,WAAW,WAAW,CAAC;AAAA,IAClE;AACA,sBAAM,aAAN,mBAAgB,SAAhB,mBAAsB,QAAQ,CAAC,QAAQ;AACrC,YAAM,OAAO,GAAG,IAAI,WAAW,aAAa,EAAE,IAAI,IAAI,WAAW,aAAa,EAAE;AAChF,UAAIV,YAAkB,IAAI,QAAQ,CAAC,KAAK,IAAI,OAAO;AACjD,oBAAY,kBAAkB,IAAI,SAAS,EAAE,KAAK,IAAI,IAAI,IAAI,KAAK;AAAA,MACrE,OAAO;AACL,oBAAY,kBAAkB,IAAI,QAAQ,CAAC,KAAK,IAAI,IAAI,OAAO,iBAAiB,UAAU,GAAG,CAAC;AAAA,MAChG;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;AC7IA,MAAqB,mBAAmB,OAAO;AAAA,EAG7C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,UAAM,UAAU,OAAO,UAAU;AACjC,SAAK,QAAA;AACL,SAAK,iBAAA;AACL,SAAK,eAAA;AAAA,EACP;AAAA,EAEA,UAAU;AACR,eAAW,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,EAC3C;AAAA,EAEA,cAAc;AACZ,UAAM,QAAQ,KAAK;AAEnB,UAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,0BAAsB,YAAY;AAAA;AAAA,kCAEJ,MAAM,QAAQ;AAAA;AAAA,QAExC,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA;AAIxC,SAAK,UAAU,sBAAsB,cAAc,UAAU,MAAM,QAAQ,IAAI;AAAA,EACjF;AAAA,EAEA,WAAW;AACT,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,SAAS,OAAY,iBAAiC;AACpD,QAAI,oBAAoB,SAAS,KAAK,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;AAC9F,WAAK,QAAQ,QAAQ,KAAK,MAAM;AAChC;AAAA,IACF;AACA,SAAK,MAAM,SAAS;AACpB,SAAK,QAAQ,QAAQ;AAAA,EACvB;AAAA,EAEA,QAAQ;AACN,SAAK,eAAA;AACL,SAAK,YAAY,KAAK;AACtB,8BAA0B,KAAK,UAAU;AAAA,EAC3C;AAAA,EAEA,aAA+B;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAa;AACX,UAAM,cAAc,gBAAgB,KAAK,SAAA,GAAY,KAAK,KAAK;AAE/D,mBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,WAAO;AAAA,EACT;AACF;ACrDO,SAAS,kBAAkB,aAA0B,OAAkB,aAAgC,aAAmC;;AAC/I,QAAM,aAAa;AAAA,IACjB,eAAe,qBAAqB,MAAM,WAAW;AAAA,IACrD,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,eAAe;AAAA,EAAA;AAGjB,QAAM,sBAAoB,gDAAa,UAAb,mBAAoB,eAAc,YAAY,MAAM,cAAc;AAC5F,MAAI,sBAAoB,gDAAa,UAAb,mBAAoB,eAAc,YAAY,MAAM,cAAc;AAC1F,QAAM,aAAW,gDAAa,UAAb,mBAAoB,aAAY,YAAY,MAAM;AAEnE,QAAM,SAAQ,WAAM,UAAN,mBAAa;AAC3B,QAAM,cAAc,sBAAqB,WAAM,UAAN,mBAAa,QAAQ,KAAK,qBAAqB,QAAQ,KAAK,qBAAqB;AAE1H,aAAW,aAAa,GAAG,YAAY,CAAC,IAAI,QAAQ,YAAY,CAAC,IAAI,EAAE,MAAI,WAAM,UAAN,mBAAa,gBAAe,EAAE;AACzG,MAAI,OAAO;AACT,QAAIQ,SAAe,KAAK,GAAG;AACzB,iBAAW,cAAcA,SAAe,KAAK,IAAI,cAAc,KAAK,KAAK;AAAA,IAC3E,OAAO;AACL,iBAAW,aAAaA,SAAe,KAAK,IAAI,KAAK,SAAS,KAAK;AAAA,IACrE;AAAA,EACF;AAEA,aAAW,gBAAgB,gBAAgB,CAAC,SAAS,QAAQ,EAAE,UAAS,WAAM,UAAN,mBAAa,QAAQ,IAAI,MAAM,MAAM,WAAW;AAExH,QAAM,eAAa,WAAM,UAAN,mBAAa,eAAc;AAC9C,aAAW,kBAAkB,YAAY,CAAC;AAE1C,MAAI,CAAC,eAAe,cAAc,CAAC,CAAC,OAAO,QAAQ,EAAE,SAAS,YAAY,CAAC,CAAC,GAAG;AAC7E,QAAIA,SAAe,UAAU,GAAG;AAC9B,YAAM,kBAAkB,CAAC;AACzB,0BAAoB,KAAK;AACzB,iBAAW,aAAa,aAAa,eAAe;AACpD,iBAAW,aAAa,WAAW,aAAa,gBAAgB,aAAa,iBAAiB;AAAA,IAChG,OAAO;AACL,iBAAW,aAAa,SAAS,UAAU;AAAA,IAC7C;AAAA,EACF;AAEA,QAAM,eAAa,WAAM,UAAN,mBAAa,eAAc;AAC9C,MAAI,eAAe,CAAC,CAAC,QAAQ,OAAO,EAAE,SAAS,YAAY,CAAC,CAAC,GAAG;AAC9D,eAAW,aAAa;AAAA,EAC1B,OAAO;AACL,QAAI,cAAc,CAAC,CAAC,OAAO,QAAQ,EAAE,SAAS,YAAY,CAAC,CAAC,GAAG;AAC7D,UAAIA,SAAe,UAAU,GAAG;AAC9B,mBAAW,aAAa,WAAW,aAAa,gBAAgB,aAAa,UAAU;AAAA,MACzF,OAAO;AACL,mBAAW,aAAa,SAAS,UAAU;AAAA,MAC7C;AAAA,IACF,OAAO;AACL,iBAAW,aAAa,WAAW,aAAa,gBAAgB;AAAA,IAClE;AAAA,EACF;AAEA,aAAW,aAAa,aAAa,WAAW,UAAU;AAC1D,aAAW,aAAa,aAAa,WAAW,UAAU;AAC1D,aAAW,aAAa,aAAa,WAAW,UAAU;AAE1D,SAAO;AACT;AAEO,SAAS,qBAAqB,aAA6B;AAChE,SAAO,gBAAgB,eAAe,kBAAkB;AAC1D;AAEA,SAAS,aAAa,KAAqB;AACzC,SAAO,IAAI,QAAQ,QAAQ,GAAG,EAAE,KAAA;AAClC;AC7EA,MAAqB,uBAAuB,OAAO;AAAA,EAGjD,YAAY,OAAkB,YAAyB,UAAoB;;AACzE,UAAM,UAAU,OAAO,UAAU;AAHnC,SAAQ,oBAA2B,CAAA;AAKjC,SAAK,oBAAoB,CAAA;AACzB,QAAI,mBAAmB,CAAA;AACvB,QAAI,CAACR,YAAkB,MAAM,YAAY,GAAG;AAC1C,UAAIG,QAAc,MAAM,YAAY,GAAG;AACrC,2BAAmB,MAAM;AAAA,MAC3B,OAAO;AACL,2BAAmB,CAAC,MAAM,YAAY;AAAA,MACxC;AAAA,IACF;AAEA,UAAM,WAAW,eAAe,eAAe,KAAK;AAEpD,QAAIH,YAAkB,KAAK,MAAM,QAAQ,GAAG;AAC1C,WAAK,cAAc,CAAC,EAAE,OAAO,IAAI,OAAO,IAAA,CAAK,CAAC;AAAA,IAChD;AAEA,QAAI,uBAAuB;AAC3B,qBAAK,MAAM,aAAX,mBAAqB,SAArB,mBAA2B,QAAQ,CAAC,SAAS;AAC3C,UAAI,YAAY,KAAK,QAAQ;AAC7B,UAAI,KAAK,UAAU;AACjB,aAAK,kBAAkB,KAAK,YAAY,YAAY,IAAI;AAAA,MAC1D;AACA,UAAI,iBAAiB,SAAS,SAAS,GAAG;AACxC,+BAAuB;AAAA,MACzB;AAAA,IACF;AAEA,SAAK,oBAAoB,uBAAuB,mBAAmB,KAAK;AAExE,SAAK,QAAA;AACL,SAAK,iBAAA;AACL,SAAK,SAAS,KAAK,mBAAmB,KAAK;AAAA,EAC7C;AAAA,EAEO,UAAU;AACf,SAAK,UAAA;AAAA,EACP;AAAA,EAEO,YAAY;AACjB,UAAM,aAAa,KAAK,WAAW,iBAAiB,KAAK,aAAa;AAEtE,eAAW,QAAQ,CAAC,QAAQ;AAC1B,UAAI,iBAAiB,UAAU,CAAC,MAAa;AAC3C,8BAAsB,KAAK,OAAO,GAAG,MAAM,KAAK,UAAU;AAC1D,aAAK,MAAA;AAAA,MACP,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEO,cAAc;AACnB,WAAO,gCAAgC,KAAK,MAAM,QAAQ;AAAA,EAC5D;AAAA,EAEA,cAAc;;AACZ,UAAM,QAAQ,KAAK;AAEnB,UAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,UAAM,YAAsB,CAAA;AAC5B,UAAM,YAAY,MAAM;AAExB,UAAM,WAAW,OAAO,eAAe,KAAK;AAC5C,UAAM,WAAW,OAAO,eAAe,KAAK;AAE5C,cAAU,KAAK,qDAAqD;AACpE,sBAAM,aAAN,mBAAgB,SAAhB,mBAAsB,QAAQ,CAAC,QAAQ;AACrC,YAAM,WAAW,IAAI,QAAQ;AAC7B,gBAAU,KAAK;AAAA,uCACkB,qBAAqB,MAAM,SAAS,eAAe,eAAe,UAAU,CAAC;AAAA;AAAA,iDAEnE,SAAS,YAAY,WAAWC,WAAiB,QAAQ,IAAI,EAAE,uCAAuC,IAAI,WAAW,YAAY,EAAE,IAAI,IAAI,WAAW,aAAa,EAAE;AAAA,oBAClM,OAAO,iBAAiB,UAAU,GAAG,CAAC;AAAA;AAAA;AAAA,OAGnD;AAAA,IACH;AACA,cAAU,KAAK,yDAAyD,OAAO,uBAAuB,KAAK,CAAC,qCAAqC;AAEjJ,0BAAsB,YAAY,UAAU,KAAK,EAAE;AAAA,EACrD;AAAA,EAEO,cAAc,OAAkB;AACrC,UAAM,eAAe,KAAK,WAAW,cAAc,qBAAqB;AACxE,QAAI,cAAc;AAChB,UAAI,KAAK,MAAM,UAAU;AACvB,aAAK,MAAM,SAAS,OAAO;AAAA,MAC7B,OAAO;AACL,aAAK,MAAM,WAAW;AAAA,UACpB,MAAM;AAAA,QAAA;AAAA,MAEV;AAEA,WAAK,YAAA;AAEL,UAAI,CAACM,QAAc,KAAK,MAAM,MAAM,GAAG;AACrC,cAAM,eAAe,KAAK,MAAM;AAChC,aAAK,MAAM,SAAS;AACpB,aAAK,SAAS,YAAY;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AACT,UAAM,aAAa,KAAK,WAAW,iBAAiB,KAAK,aAAa;AAEtE,QAAI,WAAW,SAAS,GAAG;AACzB,YAAM,aAAoB,CAAA;AAC1B,iBAAW,QAAQ,CAAC,QAAQ;AAC1B,cAAM,WAAW;AACjB,YAAI,SAAS,SAAS;AACpB,qBAAW,KAAK,SAAS,KAAK;AAAA,QAChC;AAAA,MACF,CAAC;AACD,aAAO;AAAA,IACT,OAAO;AACL,YAAM,eAAe,KAAK,WAAW,cAAc,UAAU,KAAK,MAAM,QAAQ,IAAI;AAEpF,UAAI,6CAAc,SAAS;AACzB,eAAO,aAAa,QAAQ,aAAa,QAAQ;AAAA,MACnD;AAEA,aAAO,aAAa,QAAQ,KAAK;AAAA,IACnC;AAAA,EACF;AAAA,EAEA,SAAS,OAAY,iBAAiC;AACpD,QAAI,oBAAoB,SAAS,KAAK,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;AAC9F,cAAQ,KAAK,MAAM;AAAA,IACrB;AAEA,SAAK,MAAM,SAAS;AACpB,QAAI,UAAU,MAAM;AACjB,WAAK,WAAW,cAAc,UAAU,KAAK,MAAM,QAAQ,IAAI,EAAuB,UAAU;AACjG;AAAA,IACF;AAEA,QAAI,UAAU,OAAO;AAClB,WAAK,WAAW,cAAc,UAAU,KAAK,MAAM,QAAQ,IAAI,EAAuB,UAAU;AACjG;AAAA,IACF;AAEA,QAAI,WAAkB,CAAA;AACtB,QAAIJ,QAAc,KAAK,GAAG;AACxB,iBAAW;AAAA,IACb,OAAO;AACL,eAAS,KAAK,KAAK;AAAA,IACrB;AAEA,UAAM,aAAa,KAAK,WAAW,iBAAiB,KAAK,aAAa;AAEtE,eAAW,QAAQ,CAAC,QAAQ;AACzB,UAAyB,UAAU;AAAA,IACtC,CAAC;AAED,aAAS,QAAQ,CAAC,QAAQ;AACxB,YAAM,MAAM,KAAK,WAAW,cAAc,UAAU,KAAK,MAAM,QAAQ,aAAa,GAAG,IAAI;AAC3F,UAAI,SAAS,UAAU;AAAA,IACzB,CAAC;AAAA,EACH;AAAA,EAEA,QAAQ;;AACN,UAAI,gBAAK,MAAM,aAAX,mBAAqB,SAArB,mBAA2B,WAAU,KAAK,KAAK,kBAAkB,UAAU,GAAG;AAChF,WAAK,SAAS,MAAM,KAAK;AAAA,IAC3B,OAAO;AACL,WAAK,SAAS,KAAK,mBAAmB,KAAK;AAAA,IAC7C;AACA,SAAK,YAAY,KAAK;AACtB,8BAA0B,KAAK,UAAU;AAAA,EAC3C;AAAA,EAEA,aAAkB;AAChB,WAAO,KAAK,WAAW,iBAAiB,UAAU,KAAK,MAAM,QAAQ,IAAI;AAAA,EAC3E;AAAA,EAEO,QAAQ;AACb,UAAM,WAAW,KAAK,WAAA;AAEtB,QAAI,YAAY,SAAS,SAAS,GAAG;AACnC,WAAK,WAAA,EAAa,CAAC,EAAE,MAAA;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,QAAa;AACX,UAAM,QAAQ,KAAK,SAAA;AAEnB,QAAI,cAAqC;AAEzC,QAAI,KAAK,MAAM,YAAYA,QAAc,KAAK,GAAG;AAC/C,UAAK,MAAgB,SAAS,GAAG;AAC/B,sBAAc,EAAE,MAAM,KAAK,MAAM,MAAM,YAAY,GAAC;AACpD,oBAAY,WAAW,KAAK,MAAM,QAAQ;AAAA,MAC5C;AAAA,IACF;AAEA,mBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,WAAO;AAAA,EACT;AACF;AC5MA,MAAqB,oBAAoB,OAAO;AAAA,EAG9C,YAAY,OAAkB,YAAyB,UAAoB;;AACzE,UAAM,UAAU,OAAO,UAAU;AAEjC,SAAK,oBAAoB;AACzB,QAAI,mBAAmB,CAAA;AACvB,QAAI,CAACH,YAAkB,MAAM,YAAY,GAAG;AAC1C,yBAAmB,MAAM;AAAA,IAC3B;AAEA,UAAM,WAAW,YAAY,eAAe,KAAK;AACjD,QAAI,uBAAuB;AAC3B,qBAAK,MAAM,aAAX,mBAAqB,SAArB,mBAA2B,QAAQ,CAAC,SAAS;AAC3C,UAAI,YAAY,KAAK,QAAQ;AAC7B,UAAI,KAAK,UAAU;AACjB,aAAK,oBAAoB;AAAA,MAC3B;AAEA,UAAI,oBAAoB,WAAW;AACjC,+BAAuB;AAAA,MACzB;AAAA,IACF;AAIA,QAAI,sBAAsB;AACxB,WAAK,oBAAoB;AAAA,IAC3B,WAAW,CAAC,KAAK,mBAAmB;AAClC,WAAK,sBAAoB,gBAAK,MAAM,aAAX,mBAAqB,SAArB,mBAA2B,UAAS,KAAI,UAAK,MAAM,aAAX,mBAAqB,KAAK,GAAG,YAAY;AAAA,IAC5G;AAEA,SAAK,QAAA;AACL,SAAK,iBAAA;AACL,SAAK,SAAS,KAAK,mBAAmB,KAAK;AAAA,EAC7C;AAAA,EAEO,UAAU;AACf,SAAK,UAAA;AAAA,EACP;AAAA,EAEO,YAAY;AACjB,UAAM,aAAa,KAAK,WAAW,iBAAiB,KAAK,aAAa;AAEtE,eAAW,QAAQ,CAAC,QAAQ;AAC1B,UAAI,iBAAiB,UAAU,CAAC,MAAa;AAC3C,8BAAsB,KAAK,OAAO,GAAG,MAAM,KAAK,UAAU;AAE1D,aAAK,MAAA;AAAA,MACP,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEO,cAAc;AACnB,WAAO,6BAA6B,KAAK,MAAM,QAAQ;AAAA,EACzD;AAAA,EAEA,cAAc;;AACZ,UAAM,QAAQ,KAAK;AAEnB,UAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,UAAM,YAAsB,CAAA;AAC5B,UAAM,YAAY,MAAM;AAExB,UAAM,WAAW,OAAO,eAAe,KAAK;AAC5C,UAAM,WAAW,OAAO,eAAe,KAAK;AAE5C,cAAU,KAAK,oDAAoD;AAEnE,sBAAM,aAAN,mBAAgB,SAAhB,mBAAsB,QAAQ,CAAC,QAAQ;AACrC,YAAM,WAAW,IAAI,QAAQ;AAE7B,gBAAU;AAAA,QACR,8BAA8B,qBAAqB,MAAM,eAAe,eAAe,UAAU,CAAC;AAAA;AAAA,wCAElE,SAAS,YAAY,QAAQ,oCAAoC,IAAI,WAAW,YAAY,EAAE,IAAI,IAAI,WAAW,aAAa,EAAE;AAAA,cAC1J,OAAO,iBAAiB,UAAU,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA,MAAA;AAAA,IAKhD;AACA,cAAU,KAAK;AAAA,UACT,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA,KAEzC;AAED,0BAAsB,YAAY,UAAU,KAAK,EAAE;AAEnD,SAAK,UAAA;AAAA,EACP;AAAA,EAEO,cAAc,OAAkB;AACrC,UAAM,eAAe,KAAK,WAAW,cAAc,qBAAqB;AACxE,QAAI,cAAc;AAChB,UAAI,KAAK,MAAM,UAAU;AACvB,aAAK,MAAM,SAAS,OAAO;AAAA,MAC7B,OAAO;AACL,aAAK,MAAM,WAAW;AAAA,UACpB,MAAM;AAAA,QAAA;AAAA,MAEV;AAEA,WAAK,YAAA;AAEL,UAAI,CAACO,QAAc,KAAK,MAAM,MAAM,GAAG;AACrC,cAAM,eAAe,KAAK,MAAM;AAChC,aAAK,MAAM,SAAS;AACpB,aAAK,SAAS,YAAY;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;;AACT,YAAQ,UAAK,WAAW,cAAc,UAAU,KAAK,MAAM,QAAQ,YAAY,MAAvE,mBAA+F;AAAA,EACzG;AAAA,EAEA,SAAS,OAAY,iBAAiC;AACpD,QAAI,oBAAoB,SAAS,KAAK,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;AAC9F,cAAQ,KAAK,MAAM;AAAA,IACrB;AAEA,SAAK,MAAM,SAAS;AACpB,QAAI,UAAU,MAAM;AACjB,WAAK,WAAW,cAAc,UAAU,KAAK,MAAM,QAAQ,IAAI,EAAuB,UAAU;AACjG;AAAA,IACF;AAEA,QAAI,UAAU,OAAO;AAClB,WAAK,WAAW,cAAc,UAAU,KAAK,MAAM,QAAQ,IAAI,EAAuB,UAAU;AACjG;AAAA,IACF;AAEA,UAAM,WAAW,KAAK,WAAW,iBAAiB,KAAK,aAAa;AAEpE,aAAS,QAAQ,CAAC,QAAQ;AACxB,UAAI,WAAW;AACf,UAAI,SAAS,SAAS,OAAO;AAC3B,iBAAS,UAAU;AAAA,MACrB,OAAO;AACL,iBAAS,UAAU;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,QAAQ;AACN,SAAK,SAAS,KAAK,mBAAmB,KAAK;AAC3C,SAAK,YAAY,KAAK;AACtB,8BAA0B,KAAK,UAAU;AAAA,EAC3C;AAAA,EAEA,aAAkB;AAChB,WAAO,KAAK,WAAW,iBAAiB,KAAK,aAAa;AAAA,EAC5D;AAAA,EAEO,QAAQ;AACb,UAAM,WAAW,KAAK,WAAA;AAEtB,QAAI,YAAY,SAAS,SAAS,GAAG;AACnC,WAAK,WAAA,EAAa,CAAC,EAAE,MAAA;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,QAAa;AACX,UAAM,QAAQ,KAAK,SAAA;AAEnB,QAAI,cAAqC;AAEzC,QAAI,KAAK,MAAM,UAAU;AACvB,UAAIA,QAAc,KAAK,GAAG;AACxB,sBAAc,EAAE,MAAM,KAAK,MAAM,MAAM,YAAY,GAAC;AACpD,oBAAY,WAAW,KAAK,MAAM,QAAQ;AAAA,MAC5C;AAAA,IACF;AAEA,mBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,WAAO;AAAA,EACT;AACF;ACxLA,MAAqB,uBAAuB,OAAO;AAAA,EAGjD,YAAY,OAAkB,YAAyB,UAAoB;AACzE,UAAM,UAAU,OAAO,UAAU;AAEjC,SAAK,QAAA;AACL,SAAK,iBAAA;AACL,SAAK,eAAA;AAAA,EACP;AAAA,EAEA,UAAU;AACR,eAAW,KAAK,OAAO,KAAK,SAAS,IAAI;AAAA,EAC3C;AAAA,EAEA,cAAc;AACZ,UAAM,QAAQ,KAAK;AAEnB,UAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,0BAAsB,YAAY;AAAA;AAAA,2CAEK,MAAM,QAAQ;AAAA;AAAA,UAE/C,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA;AAI1C,SAAK,UAAU,sBAAsB,cAAc,UAAU,MAAM,QAAQ,IAAI;AAAA,EACjF;AAAA,EAEA,WAAW;AACT,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,SAAS,OAAY,iBAAiC;AACpD,QAAI,oBAAoB,SAAS,KAAK,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;AAC9F,WAAK,QAAQ,QAAQ,KAAK,MAAM;AAChC;AAAA,IACF;AACA,SAAK,MAAM,SAAS;AACpB,SAAK,QAAQ,QAAQ;AAAA,EACvB;AAAA,EAEA,QAAQ;AACN,SAAK,eAAA;AACL,SAAK,YAAY,KAAK;AACtB,8BAA0B,KAAK,UAAU;AAAA,EAC3C;AAAA,EAEA,aAA0B;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAa;AACX,UAAM,cAAc,gBAAgB,KAAK,SAAA,GAAY,KAAK,KAAK;AAE/D,mBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,WAAO;AAAA,EACT;AACF;ACxDO,MAAM,gBAAgB,CAAC,SAA2B,OAAkB,aAAgD;AACzH,QAAM,SAAsB,EAAE,MAAM,MAAM,MAAM,YAAY,GAAC;AAE7D,MAAI,MAAM,YAAY,SAAS,SAAS,GAAG;AACzC,WAAO,WAAW,KAAK,MAAM,QAAQ;AACrC,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,WAAW,SAAS,GAAG;AAChC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AChBA,MAAqB,mBAAmB,OAAO;AAAA,EAO7C,YAAY,OAAkB,YAAyB,UAAoB;;AACzE,UAAM,UAAU,OAAO,UAAU;AANnC,SAAQ,YAAmB,CAAA;AAC3B,SAAQ,cAAmB,CAAA;AAC3B,SAAQ,WAAkB,CAAA;AAC1B,SAAQ,UAAU;AAKhB,SAAK,UAAU,WAAW,cAAc,UAAU,MAAM,QAAQ,IAAI;AACpE,SAAK,aAAW,WAAM,aAAN,mBAAgB,SAAQ,CAAA;AACxC,SAAK,QAAA;AACL,SAAK,iBAAA;AAAA,EACP;AAAA,EAEA,UAAU;AACR,SAAK,QAAQ,iBAAiB,UAAU,CAAC,MAAa;;AACpD,YAAM,SAAS,OAAE,WAAF,mBAA+B;AAE9C,UAAI,OAAO;AACT,YAAI,WAAW,CAAA;AACf,iBAAS,QAAQ,OAAO;AACtB,mBAAS,KAAK,IAAI;AAAA,QACpB;AACA,aAAK,SAAS,QAAQ;AAAA,MACxB;AACA,4BAAsB,KAAK,OAAO,GAAG,MAAM,KAAK,QAAQ;AACxD,WAAK,MAAA;AAAA,IACP,CAAC;AAED,SAAK,SAAS,QAAQ,CAAC,SAAS;AAC9B,WAAK,OAAO,KAAK,WAAW;AAAA,IAC9B,CAAC;AAED,SAAK,YAAY,KAAK,QAAQ;AAAA,EAChC;AAAA,EAEA,cAAc;AACZ,UAAM,QAAQ,KAAK;AAEnB,UAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,0BAAsB,YAAY;AAAA;AAAA;AAAA;AAAA,qCAID,MAAM,QAAQ;AAAA,YACvCG,WAAS,WAAW,YAAY,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,MAKvC,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA;AAAA;AAKtC,SAAK,UAAU,sBAAsB,cAAc,UAAU,MAAM,QAAQ,IAAI;AAAA,EACjF;AAAA,EAEA,SAAS,OAAc;AACrB,QAAI,UAAU;AAEd,UAAM,WAAuB,CAAA;AAE7B,aAAS,QAAQ,OAAO;AACtB,YAAM,gBAAgB,KAAK,SAAS,OAAO,CAAC,aAAa,SAAS,YAAY,KAAK,QAAQ,SAAS,YAAY,KAAK,QAAQ,SAAS,gBAAgB,KAAK,YAAY;AAEvK,UAAI,cAAc,SAAS,EAAG;AAC9B,WAAK,WAAW;AAChB,WAAK,YAAY,KAAK,OAAO,IAAI;AAEjC,UAAI,cAAc;AAAA,QAChB,UAAU,KAAK;AAAA,QACf,MAAM,KAAK;AAAA,QACX,UAAU,KAAK;AAAA,QACf,cAAc,KAAK;AAAA,MAAA;AAGrB,eAAS,KAAK,WAAW;AACzB,gBAAU;AAAA,IACZ;AACA,QAAI,SAAS;AACX,WAAK,YAAY,QAAQ;AACzB,WAAK,SAAS,KAAK,GAAG,QAAQ;AAAA,IAChC;AAAA,EACF;AAAA,EAEQ,YAAY,UAAsB,UAAgC;AACxE,UAAM,kBAAkB,KAAK,WAAW,cAAc,eAAe;AAErE,QAAI,iBAAiB;AACnB,UAAI,aAAa,MAAM;AACrB,wBAAgB,YAAY;AAAA,MAC9B;AAEA,YAAM,mBAA6B,CAAA;AAEnC,eAAS,QAAQ,CAAC,SAAS;AACzB,yBAAiB,KAAK;AAAA,8CACgB,KAAK,IAAI;AAAA,YAC3C,KAAK,SAAS,wDAAwD,oCAAoC;AAAA,uCAC/E,KAAK,QAAQ;AAAA,eACrC;AAAA,MACT,CAAC;AAED,sBAAgB,mBAAmB,aAAa,iBAAiB,KAAK,EAAE,CAAC;AAEzE,eAAS,QAAQ,CAAC,SAAS;AACzB,aAAK,gBAAgB,MAAM,eAAe;AAC1C,aAAK,kBAAkB,MAAM,eAAe;AAAA,MAC9C,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,kBAAkB,MAAgB,iBAA0B;AAClE,UAAM,MAAM,gBAAgB,cAAc,cAAc,KAAK,IAAI,sBAAsB;AACvF,QAAI,KAAK;AACP,UAAI,iBAAiB,SAAS,CAAC,QAAe;AAC5C,cAAM,kBAAmB,IAAI,OAAmB,QAAQ,eAAe;AAEvE,YAAI,iBAAiB;AACnB,gBAAM,UAAU,gBAAgB,aAAa,UAAU;AACvD,cAAI,SAAS;AACX,kBAAM,MAAM,SAAS,SAAS,EAAE;AAChC,kBAAM,MAAM,KAAK,SAAS,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG;AAEzD,kBAAMC,QAAO,KAAK,SAAS,GAAG;AAE9B,gBAAIA,MAAK,KAAK,GAAG;AACf,uBAAS,OAAOA,MAAK,KAAK;AAC1B;AAAA,YACF;AAEA,gBAAI,KAAK,MAAM,cAAc;AAC3B,mBAAK,MAAM,aAAa,KAAK,MAAM,EAAE,MAAMA,OAAM,OAAO,KAAK,MAAA,CAAO;AACpE;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,gBAAgB,MAAgB,iBAA0B;AAChE,UAAM,MAAM,gBAAgB,cAAc,cAAc,KAAK,IAAI,oBAAoB;AACrF,QAAI,KAAK;AACP,UAAI,iBAAiB,SAAS,CAAC,QAAe;AAC5C,cAAM,kBAAmB,IAAI,OAAmB,QAAQ,eAAe;AAEvE,YAAI,iBAAiB;AACnB,gBAAM,UAAU,gBAAgB,aAAa,UAAU;AACvD,cAAI,SAAS;AACX,kBAAM,MAAM,SAAS,SAAS,EAAE;AAChC,kBAAM,YAAY,KAAK,SAAS,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG;AAE/D,kBAAM,aAAa,KAAK,SAAS,SAAS;AAE1C,iBAAK,SAAS,OAAO,WAAW,CAAC;AACjC,mBAAO,KAAK,YAAY,GAAG;AAC3B,4BAAgB,OAAA;AAEhB,gBAAI,WAAW,QAAQ;AACrB,mBAAK,UAAU,KAAK,WAAW,MAAM;AAAA,YACvC;AAAA,UACF;AAAA,QACF;AACA,aAAK,MAAA;AAAA,MACP,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,WAAW;AACT,WAAO;AAAA,MACL,YAAY,OAAO,OAAO,KAAK,WAAW;AAAA,MAC1C,WAAW,KAAK;AAAA,IAAA;AAAA,EAEpB;AAAA,EAEO,cAAc,OAAkB;AACrC,SAAK,WAAW,CAAA;AAChB,SAAK,cAAc,CAAA;AACnB,SAAK,YAAY,CAAA;AACjB,aAAS,QAAQ,OAAO;AACtB,WAAK,OAAO,KAAK,WAAW;AAE5B,WAAK,SAAS,KAAK,IAAI;AAAA,IACzB;AAEA,SAAK,YAAY,KAAK,UAAU,IAAI;AAAA,EACtC;AAAA,EAEA,SAAS,OAAkB;AACzB,QAAIC,UAAQ,KAAK,GAAG;AAClB,WAAK,cAAc,KAAK;AAAA,IAC1B;AACA,SAAK,QAAQ,QAAQ;AAAA,EACvB;AAAA,EAEA,QAAQ;AACN,SAAK,SAAS,EAAE;AAChB,SAAK,cAAc,EAAE;AACrB,8BAA0B,KAAK,UAAU;AAAA,EAC3C;AAAA,EAEA,aAA+B;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAa;AACX,UAAM,cAAc,cAAc,KAAK,SAAS,KAAK,OAAO,KAAK,QAAQ;AAEzE,mBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,WAAO;AAAA,EACT;AACF;ACvOA,MAAqB,qBAAqB,OAAO;AAAA,EAG/C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,UAAM,UAAU,OAAO,UAAU;AACjC,QAAI,MAAM,UAAU;AAClB,WAAK,iBAAiB,MAAM;AAC5B,WAAK,QAAA;AACL,WAAK,iBAAA;AACL,WAAK,eAAA;AAAA,IACP,OAAO;AACL,WAAK,iBAAiB,CAAA;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,UAAU;AACR,QAAI,KAAK,eAAe,SAAS;AAC9B,WAAK,eAAe,QAAgB,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAAA,IAC7E;AAAA,EACF;AAAA,EAEA,OAAO,eAAwB;AAC7B,WAAO;AAAA,EACT;AAAA,EAEA,cAAc;AACZ,UAAM,QAAQ,KAAK;AAEnB,UAAM,gBAAgBN,QAAc,MAAM,QAAQ,IAAI,KAAKJ,SAAe,MAAM,QAAQ,IAAI,MAAM,WAAW,MAAM,SAAA;AAEnH,UAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,0BAAsB,YAAY;AAAA,UAC5B,aAAa;AAAA;AAAA,YAEX,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA,EAE9C;AAAA,EAEA,WAAW;AACT,QAAI,KAAK,eAAe,UAAU;AAChC,aAAQ,KAAK,eAAe,SAAiB,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAAA,IACrF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,OAAY,iBAAiC;AACpD,QAAI,KAAK,eAAe,UAAU;AAChC,UAAI,oBAAoB,SAAS,KAAK,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;AAC9F,gBAAQ,KAAK,MAAM;AAAA,MACrB;AACC,WAAK,eAAe,SAAiB,KAAK,MAAM,OAAO,KAAK,OAAO,KAAK,UAAU;AAAA,IACrF;AAEA,SAAK,MAAM,SAAS;AAAA,EACtB;AAAA,EAEA,QAAQ;AACN,SAAK,eAAA;AACL,8BAA0B,KAAK,UAAU;AAAA,EAC3C;AAAA,EAEA,aAAa;AACX,QAAI,KAAK,eAAe,YAAY;AAClC,aAAQ,KAAK,eAAe,WAAmB,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAAA,IACvF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,QAAa;AACX,QAAI,KAAK,eAAe,OAAO;AAC7B,YAAMW,eAAe,KAAK,eAAe,MAAc,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAE7F,qBAAe,KAAK,OAAO,KAAK,YAAYA,YAAW;AAEvD;AAAA,IACF;AACA,UAAM,cAAc,gBAAgB,KAAK,SAAA,GAAY,KAAK,KAAK;AAE/D,mBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACZ,QAAI,KAAK,eAAe,OAAO;AAC5B,WAAK,eAAe,MAAc,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAAA,IAC3E;AAAA,EACF;AACF;AC/FA,MAAqB,oBAAoB,OAAO;AAAA,EAC9C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,UAAM,UAAU,OAAO,UAAU;AAAA,EACnC;AAAA,EAEO,UAAU;AAAA,EAAC;AAAA,EAElB,OAAO,eAAwB;AAC7B,WAAO;AAAA,EACT;AAAA,EAEA,cAAc;AACZ,WAAO;AAAA,EACT;AAAA,EAEA,WAAW;AACT,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,OAAkB;AAAA,EAAC;AAAA,EAE5B,QAAQ;AAAA,EAAC;AAAA,EAET,aAA0B;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAa;AACX,WAAO;AAAA,EACT;AAAA,EAEO,cAAc,SAAkB;AACrC,QAAI,eAAe,KAAK,WAAW,cAAc,qBAAqB;AAEtE,QAAI,cAAc;AAChB,mBAAa,OAAO,OAAO;AAAA,IAC7B,OAAO;AACL,WAAK,WAAW,OAAO,OAAO;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,QAAc;AAAA,EAAC;AACjB;AC1CA,MAAqB,qBAAqB,OAAO;AAAA,EAC/C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,UAAM,UAAU,OAAO,UAAU;AACjC,SAAK,MAAM,SAAS,MAAM;AAAA,EAC5B;AAAA,EAEA,UAAU;AAAA,EAAC;AAAA,EAEX,cAAc;AACZ,WAAO;AAAA,EACT;AAAA,EAEA,WAAW;AACT,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,SAAS,OAAkB;AACzB,SAAK,MAAM,SAAS;AAAA,EACtB;AAAA,EAEA,QAAQ;AACN,SAAK,SAAS,KAAK,MAAM,YAAY;AAAA,EACvC;AAAA,EAEA,aAAa;AACX;AAAA,EACF;AAAA,EAEA,QAAa;AACX,WAAO;AAAA,EACT;AACF;AC/BA,MAAqB,qBAAqB,OAAO;AAAA,EAC/C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,UAAM,UAAU,OAAO,UAAU;AACjC,SAAK,QAAA;AACL,SAAK,iBAAA;AAAA,EACP;AAAA,EAEA,UAAU;;AACR,eAAK,WAAW,cAAc,IAAI,KAAK,MAAM,IAAI,EAAE,MAAnD,mBAAsD,iBAAiB,SAAS,CAAC,QAAQ;AACvF,UAAI,KAAK,MAAM,SAAS;AACtB,aAAK,MAAM,QAAQ,KAAK,MAAM,KAAK,KAAK;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,eAAwB;AAC7B,WAAO;AAAA,EACT;AAAA,EAEA,cAAc;AACZ,UAAM,QAAQ,KAAK;AAEnB,UAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,0BAAsB,YAAY;AAAA,kCACJ,MAAM,IAAI,oBAAoB,MAAM,KAAK,aAAa,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA,EAE1H;AAAA,EAEA,WAAW;AACT,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,OAAkB;AAAA,EAAC;AAAA,EAE5B,QAAQ;AACN,SAAK,YAAY,KAAK;AAAA,EACxB;AAAA,EAEA,aAAa;AACX,WAAO;AAAA,EACT;AAAA,EAEA,QAAa;AACX,WAAO;AAAA,EACT;AACF;AC3CA,MAAqB,oBAAoB,OAAO;AAAA,EAI9C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,UAAM,UAAU,OAAO,UAAU;AAEjC,SAAK,kBAAkB,WAAW,cAAc,eAAe;AAE/D,SAAK,QAAA;AACL,SAAK,iBAAA;AACL,SAAK,eAAA;AAAA,EACP;AAAA,EAEA,UAAU;AACR,SAAK,QAAQ,iBAAiB,SAAS,CAAC,MAAW;AACjD,WAAK,gBAAgB,YAAY,EAAE,OAAO;AAE1C,WAAK,QAAQ,aAAa,SAAS,EAAE,OAAO,KAAK;AACjD,4BAAsB,KAAK,OAAO,GAAG,MAAM,KAAK,UAAU;AAC1D,WAAK,MAAA;AAAA,IACP,CAAC;AAAA,EACH;AAAA,EAEA,cAAc;AACZ,UAAM,QAAQ,KAAK;AAEnB,UAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,0BAAsB,YAAY;AAAA;AAAA,yCAEG,MAAM,eAAe,MAAM,eAAe,CAAC;AAAA,wCAC5C,MAAM,QAAQ,sDAAsD,MAAM,KAAK,OAAO,UAAU,MAAM,KAAK,OAAO;AAAA;AAAA,UAEhJ,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA;AAI1C,SAAK,UAAU,sBAAsB,cAAc,UAAU,MAAM,QAAQ,IAAI;AAAA,EACjF;AAAA,EAEA,WAAW;AACT,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,SAAS,OAAY,iBAAiC;AACpD,QAAI,oBAAoB,SAAS,KAAK,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;AAC9F,WAAK,QAAQ,QAAQ,KAAK,MAAM;AAChC;AAAA,IACF;AACA,SAAK,MAAM,SAAS;AACpB,SAAK,QAAQ,QAAQ;AAAA,EACvB;AAAA,EAEA,QAAQ;AACN,SAAK,eAAA;AACL,SAAK,YAAY,KAAK;AACtB,8BAA0B,KAAK,UAAU;AAAA,EAC3C;AAAA,EAEA,aAA0B;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAa;AACX,UAAM,cAAc,gBAAgB,KAAK,SAAA,GAAY,KAAK,KAAK;AAE/D,mBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,WAAO;AAAA,EACT;AACF;AC7EA,IAAIC,kBAAgB;AAAA,EAClB,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,QAAQ;AAAA,IACN,MAAM,CAAC,WAAW,YAAY,SAAS,SAAS,OAAO,QAAQ,QAAQ,UAAU,aAAa,WAAW,YAAY,UAAU;AAAA,IAC/H,MAAM,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,EAC7F;AAAA,EACE,OAAO;AAAA,IACL,MAAM,CAAC,UAAU,UAAU,WAAW,aAAa,YAAY,UAAU,UAAU;AAAA,IACnF,MAAM,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,EAC1D;AACA;AACA,IAAA,aAAA,MAAM,SAAS;AAAA,EACb,cAAc;AACZ,SAAK,OAAOA;AAAAA,EACd;AAAA,EACA,kBAAkB,MAAM;AACtBA,sBAAgB,OAAO,OAAOA,iBAAe,IAAI;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,MAAM;AACR,SAAK,OAAO,OAAO,OAAO,CAAA,GAAIA,iBAAe,IAAI;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW,YAAY;AACrB,WAAO,KAAK,KAAK,UAAU;AAAA,EAC7B;AAAA,EACA,iBAAiB,KAAK,OAAO,QAAQ;AACnC,WAAO,KAAK,KAAK,OAAO,IAAI,EAAE,GAAG,KAAK;AAAA,EACxC;AAAA,EACA,gBAAgB,KAAK,OAAO,QAAQ;AAClC,WAAO,KAAK,KAAK,MAAM,IAAI,EAAE,GAAG,KAAK;AAAA,EACvC;AAAA,EACA,aAAa,KAAK,OAAO,QAAQ;AAC/B,WAAO,QAAQ,SAAS,KAAK,KAAK,OAAO,KAAK,QAAQ,GAAG,IAAI,KAAK,KAAK,OAAO,KAAK,QAAQ,GAAG;AAAA,EAChG;AAAA,EACA,YAAY,KAAK,OAAO,QAAQ;AAC9B,WAAO,QAAQ,SAAS,KAAK,KAAK,MAAM,KAAK,QAAQ,GAAG,IAAI,KAAK,KAAK,MAAM,KAAK,QAAQ,GAAG;AAAA,EAC9F;AACF;AACA,MAAM,WAAW,IAAIJ,WAAQ;AAC7B,MAAM,qBAAqB,CAAC,MAAM,QAAQ,QAAQ,OAAO,MAAM,KAAK,QAAQ,OAAO,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,OAAO,QAAQ,OAAO,MAAM,KAAK,KAAK,GAAG;AACnM,IAAI,kBAAkB;AACtB,IAAI,iBAAiB;AAAA,EACnB,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AACZ;AACA,MAAM,kBAAkB,CAAC,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAU;AAC3G,IAAI,eAAgC,kBAAC,kBAAkB;AACrD,gBAAc,MAAM,IAAI;AACxB,gBAAc,OAAO,IAAI;AACzB,gBAAc,MAAM,IAAI;AACxB,gBAAc,UAAU,IAAI;AAC5B,gBAAc,MAAM,IAAI;AACxB,SAAO;AACT,GAAG,gBAAgB,CAAA,CAAE;AACrB,mBAAmB,QAAQ,CAAC,SAAS;AACnC,oBAAkB,KAAK,IAAI,KAAK,QAAQ,eAAe;AACzD,CAAC;AACD,MAAM,SAAS,CAAC,MAAM,YAAY;AAChC,YAAU,WAAW;AACrB,QAAM,MAAM,QAAQ;AACpB,MAAI,SAAS,CAAA;AACb,WAAS,IAAI,GAAG,IAAI,OAAO;AACzB,QAAI,SAAS,KAAK,IAAI,iBAAiB,MAAM,CAAC;AAC9C,QAAI,IAAI;AACR,WAAO,IAAI,GAAG,KAAK;AACjB,YAAM,IAAI,QAAQ,UAAU,GAAG,IAAI,CAAC;AACpC,UAAI,mBAAmB,SAAS,CAAC,GAAG;AAClC,YAAI;AACF,iBAAO,KAAK,sBAAsB,CAAC,EAAE,IAAI,CAAC;AAAA,QAC5C,SAAS,GAAG;AACV,kBAAQ,IAAI,mBAAmB,SAAS,CAAC,GAAG,GAAG,CAAC;AAAA,QAClD;AACA;AAAA,MACF;AAAA,IACF;AACA,QAAI,IAAI,GAAG;AACT,aAAO,KAAK,QAAQ,UAAU,GAAG,IAAI,CAAC,CAAC;AACvC,WAAK;AAAA,IACP,OAAO;AACL,WAAK;AAAA,IACP;AAAA,EACF;AACA,SAAO,OAAO,KAAK,EAAE;AACvB;AACA,MAAM,wBAAwB;AAAA,EAC5B,IAAI,CAAC,SAAS;AACZ,WAAO,OAAO,KAAK,YAAW,CAAE,EAAE,MAAM,EAAE;AAAA,EAC5C;AAAA,EACA,MAAM,CAAC,SAAS;AACd,WAAO,OAAO,KAAK,aAAa;AAAA,EAClC;AAAA,EACA,GAAG,CAAC,SAAS;AACX,WAAO,OAAO,KAAK,SAAQ,IAAK,CAAC;AAAA,EACnC;AAAA,EACA,IAAI,CAAC,SAAS;AACZ,WAAO,QAAQ,KAAK,SAAQ,IAAK,GAAG,CAAC;AAAA,EACvC;AAAA,EACA,KAAK,CAAC,SAAS;AACb,WAAO,SAAS,iBAAiB,KAAK,SAAQ,CAAE;AAAA,EAClD;AAAA,EACA,MAAM,CAAC,SAAS;AACd,WAAO,SAAS,iBAAiB,KAAK,SAAQ,GAAI,MAAM;AAAA,EAC1D;AAAA,EACA,GAAG,CAAC,SAAS;AACX,WAAO,OAAO,KAAK,SAAS;AAAA,EAC9B;AAAA,EACA,IAAI,CAAC,SAAS;AACZ,WAAO,QAAQ,KAAK,QAAO,GAAI,CAAC;AAAA,EAClC;AAAA,EACA,GAAG,CAAC,SAAS;AACX,WAAO,OAAO,KAAK,SAAS;AAAA,EAC9B;AAAA,EACA,IAAI,CAAC,SAAS;AACZ,WAAO,QAAQ,KAAK,QAAO,GAAI,CAAC;AAAA,EAClC;AAAA,EACA,KAAK,CAAC,SAAS;AACb,WAAO,SAAS,gBAAgB,KAAK,OAAM,CAAE;AAAA,EAC/C;AAAA,EACA,MAAM,CAAC,SAAS;AACd,WAAO,SAAS,gBAAgB,KAAK,OAAM,GAAI,MAAM;AAAA,EACvD;AAAA,EACA,GAAG,CAAC,SAAS;AACX,WAAO,OAAO,KAAK,UAAU;AAAA,EAC/B;AAAA,EACA,IAAI,CAAC,SAAS;AACZ,WAAO,QAAQ,KAAK,SAAQ,GAAI,CAAC;AAAA,EACnC;AAAA,EACA,GAAG,CAAC,SAAS;AACX,WAAO,KAAK,IAAI;AAAA,EAClB;AAAA,EACA,IAAI,CAAC,SAAS;AACZ,WAAO,QAAQ,KAAK,IAAI,GAAG,CAAC;AAAA,EAC9B;AAAA,EACA,GAAG,CAAC,SAAS;AACX,WAAO,OAAO,KAAK,YAAW,CAAE,EAAE,MAAM,EAAE;AAAA,EAC5C;AAAA,EACA,GAAG,CAAC,SAAS;AACX,WAAO,YAAY,IAAI;AAAA,EACzB;AAAA,EACA,GAAG,CAAC,SAAS;AACX,WAAO,OAAO,KAAK,YAAY;AAAA,EACjC;AAAA,EACA,IAAI,CAAC,SAAS;AACZ,WAAO,QAAQ,KAAK,WAAU,GAAI,CAAC;AAAA,EACrC;AAAA,EACA,GAAG,CAAC,SAAS;AACX,WAAO,OAAO,KAAK,YAAY;AAAA,EACjC;AAAA,EACA,IAAI,CAAC,SAAS;AACZ,WAAO,QAAQ,KAAK,WAAU,GAAI,CAAC;AAAA,EACrC;AAAA,EACA,KAAK,CAAC,SAAS;AACb,WAAO,QAAQ,KAAK,gBAAe,GAAI,CAAC;AAAA,EAC1C;AACF;AACA,SAAS,KAAK,MAAM;AAClB,MAAI,OAAO,KAAK,SAAQ;AACxB,MAAI,OAAO,IAAI;AACb,YAAQ;AAAA,EACV,WAAW,OAAO,GAAG;AACnB,WAAO;AAAA,EACT;AACA,SAAO;AACT;AACA,SAAS,YAAY,MAAM,SAAS,SAAS;AAC3C,QAAM,OAAO,KAAK,SAAQ;AAC1B,MAAI,IAAI,OAAO,KAAK,OAAO;AAC3B,MAAI,SAAS,WAAW,CAAC;AACzB,MAAI,EAAE,YAAW;AACjB,SAAO;AACT;AACA,MAAM,SAAS,CAAC,SAAS,YAAY;AACnC,MAAI,QAAQ,SAAS,KAAK;AACxB,WAAO;AAAA,EACT;AACA,YAAU,WAAW,eAAe;AACpC,QAAM,WAAW;AAAA,IACf,OAAuB,oBAAI,KAAI,GAAI,YAAW;AAAA,IAC9C,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,SAAS;AAAA,EACb;AACE,QAAM,MAAM,QAAQ;AACpB,MAAI,WAAW;AACf,WAAS,IAAI,GAAG,IAAI,OAAO;AACzB,QAAI,SAAS,KAAK,IAAI,iBAAiB,MAAM,CAAC;AAC9C,QAAI,IAAI;AACR,WAAO,IAAI,GAAG,KAAK;AACjB,YAAM,IAAI,QAAQ,UAAU,GAAG,IAAI,CAAC;AACpC,UAAI,mBAAmB,SAAS,CAAC,GAAG;AAClC,cAAM,UAAU,oBAAoB,CAAC;AACrC,cAAM,MAAM,UAAU,QAAQ,UAAU,QAAQ,GAAG,QAAQ,CAAC,CAAC;AAC7D,gBAAQ,CAAC,EAAE,UAAU,GAAG;AACxB,oBAAY,IAAI;AAChB;AAAA,MACF;AAAA,IACF;AACA,QAAI,IAAI,GAAG;AACT,WAAK;AACL,kBAAY;AAAA,IACd,OAAO;AACL,WAAK;AAAA,IACP;AAAA,EACF;AACA,MAAI,SAAS,QAAQ,QAAQ,CAAC,SAAS,KAAK;AAC1C,QAAI,SAAS,QAAQ,CAAC,SAAS,SAAS,IAAI;AAC1C,eAAS,OAAO,CAAC,SAAS,OAAO;AAAA,IACnC,WAAW,CAAC,SAAS,QAAQ,CAAC,SAAS,SAAS,IAAI;AAClD,eAAS,OAAO;AAAA,IAClB;AAAA,EACF;AACA,MAAI;AACJ,SAAO,IAAI,KAAK,SAAS,MAAM,SAAS,OAAO,SAAS,KAAK,SAAS,MAAM,SAAS,QAAQ,SAAS,QAAQ,SAAS,WAAW;AAClI,SAAO;AACT;AACA,MAAM,YAAY,CAAC,KAAKK,YAAW;AACjC,QAAM,QAAQA,QAAO,KAAK,GAAG;AAC7B,SAAO,SAAS,OAAO,KAAK,MAAM,CAAC;AACrC;AACA,MAAM,cAAc;AAAA,EAClB,aAAa;AAAA,EACb,KAAK;AAAA,EACL,OAAO;AAAA,EACP,MAAM;AACR;AACA,MAAM,OAAO;AACb,MAAM,sBAAsB;AAAA,EAC1B,IAAI;AAAA,IACF,YAAY,KAAK;AAAA,IACjB,CAAC,UAAU,QAAQ;AACjB,eAAS,OAAO,GAAG,MAAsB,oBAAI,KAAI,GAAI,YAAW,GAAI,UAAU,GAAG,CAAC,IAAI;AACtF,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,MAAM;AAAA,IACJ,YAAY,MAAM;AAAA,IAClB,CAAC,UAAU,QAAQ;AACjB,eAAS,OAAO,CAAC;AACjB,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,GAAG;AAAA,IACD,YAAY,aAAa;AAAA,IACzB,CAAC,UAAU,QAAQ;AACjB,eAAS,QAAQ,CAAC,MAAM;AACxB,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,IAAI;AAAA,IACF,YAAY,KAAK;AAAA,IACjB,CAAC,UAAU,QAAQ;AACjB,eAAS,QAAQ,CAAC,MAAM;AACxB,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,KAAK;AAAA,IACH;AAAA,IACA,CAAC,UAAU,QAAQ;AACjB,eAAS,QAAQ,SAAS,aAAa,KAAK,MAAM;AAClD,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,MAAM;AAAA,IACJ;AAAA,IACA,CAAC,UAAU,QAAQ;AACjB,eAAS,QAAQ,SAAS,aAAa,KAAK,MAAM;AAClD,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,GAAG;AAAA,IACD,YAAY,aAAa;AAAA,IACzB,CAAC,UAAU,QAAQ;AACjB,eAAS,MAAM,CAAC;AAChB,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,IAAI;AAAA,IACF,YAAY,KAAK;AAAA,IACjB,CAAC,UAAU,QAAQ;AACjB,eAAS,MAAM,CAAC;AAChB,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,GAAG;AAAA,IACD,YAAY,aAAa;AAAA,IACzB,CAAC,UAAU,QAAQ;AACjB,eAAS,MAAM,CAAC;AAChB,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,IAAI;AAAA,IACF,YAAY,KAAK;AAAA,IACjB,CAAC,UAAU,QAAQ;AACjB,eAAS,MAAM,CAAC;AAChB,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,KAAK;AAAA,IACH;AAAA,IACA,CAAC,UAAU,QAAQ;AACjB,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,MAAM;AAAA,IACJ;AAAA,IACA,CAAC,UAAU,QAAQ;AACjB,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,GAAG;AAAA,IACD,YAAY,aAAa;AAAA,IACzB,CAAC,UAAU,QAAQ;AACjB,eAAS,OAAO,CAAC;AACjB,eAAS,MAAM;AACf,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,IAAI;AAAA,IACF,YAAY,KAAK;AAAA,IACjB,CAAC,UAAU,QAAQ;AACjB,eAAS,OAAO,CAAC;AACjB,eAAS,MAAM;AACf,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,GAAG;AAAA,IACD,YAAY,aAAa;AAAA,IACzB,CAAC,UAAU,QAAQ;AACjB,eAAS,OAAO,CAAC;AACjB,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,IAAI;AAAA,IACF,YAAY,KAAK;AAAA,IACjB,CAAC,UAAU,QAAQ;AACjB,eAAS,OAAO,CAAC;AACjB,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,GAAG;AAAA,IACD;AAAA,IACA,CAAC,UAAU,QAAQ;AACjB,UAAI,SAAS,WAAW,IAAI,KAAK,IAAI,YAAW,GAAI;AAClD,iBAAS,OAAO;AAAA,MAClB;AACA,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,GAAG;AAAA,IACD;AAAA,IACA,CAAC,UAAU,QAAQ;AACjB,UAAI,SAAS,WAAW,IAAI,KAAK,IAAI,YAAW,GAAI;AAClD,iBAAS,OAAO;AAAA,MAClB;AACA,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,GAAG;AAAA,IACD,YAAY,aAAa;AAAA,IACzB,CAAC,UAAU,QAAQ;AACjB,eAAS,SAAS,CAAC;AACnB,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,IAAI;AAAA,IACF,YAAY,KAAK;AAAA,IACjB,CAAC,UAAU,QAAQ;AACjB,eAAS,SAAS,CAAC;AACnB,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,GAAG;AAAA,IACD,YAAY,aAAa;AAAA,IACzB,CAAC,UAAU,QAAQ;AACjB,eAAS,SAAS,CAAC;AACnB,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,IAAI;AAAA,IACF,YAAY,KAAK;AAAA,IACjB,CAAC,UAAU,QAAQ;AACjB,eAAS,SAAS,CAAC;AACnB,aAAO;AAAA,IACT;AAAA,EACJ;AAAA,EACE,KAAK;AAAA,IACH,YAAY,OAAO;AAAA,IACnB,CAAC,UAAU,QAAQ;AACjB,eAAS,cAAc,CAAC;AACxB,aAAO;AAAA,IACT;AAAA,EACJ;AACA;AACA,SAAS,eAAe,IAAI,cAAc;AACxC,MAAI,YAAY;AAChB,SAAO,WAAW;AAChB,QAAI,aAAa,cAAc;AAC7B,aAAO;AAAA,IACT;AACA,gBAAY,UAAU;AAAA,EACxB;AACA,SAAO;AACT;AACA,MAAM,SAAS;AAAA,EACb,YAAY,IAAI;AACd,SAAK,OAAO;AAAA,EACd;AAAA,EACA,QAAQ,KAAK;AACX,SAAK,KAAK,YAAY,GAAG;AACzB,WAAO;AAAA,EACT;AAAA,EACA,QAAQ,KAAK;AACX,SAAK,KAAK,YAAY,KAAK,KAAK,YAAW,IAAK,GAAG;AACnD,WAAO;AAAA,EACT;AAAA,EACA,SAAS,KAAK;AACZ,SAAK,KAAK,SAAS,KAAK,KAAK,SAAQ,IAAK,GAAG;AAC7C,WAAO;AAAA,EACT;AAAA,EACA,SAAS,KAAK;AACZ,SAAK,KAAK,SAAS,GAAG;AACtB,WAAO;AAAA,EACT;AAAA,EACA,QAAQ,KAAK;AACX,SAAK,KAAK,QAAQ,GAAG;AACrB,WAAO;AAAA,EACT;AAAA,EACA,QAAQ,KAAK;AACX,SAAK,KAAK,QAAQ,KAAK,KAAK,QAAO,IAAK,GAAG;AAC3C,WAAO;AAAA,EACT;AAAA,EACA,QAAQ,KAAK;AACX,SAAK,KAAK,QAAQ,KAAK,KAAK,QAAO,IAAK,MAAM,CAAC;AAC/C,WAAO;AAAA,EACT;AAAA,EACA,SAAS,KAAK;AACZ,SAAK,KAAK,SAAS,KAAK,KAAK,SAAQ,IAAK,GAAG;AAC7C,WAAO;AAAA,EACT;AAAA,EACA,QAAQ,KAAK;AACX,SAAK,KAAK,SAAS,GAAG;AACtB,WAAO;AAAA,EACT;AAAA,EACA,WAAW,KAAK;AACd,SAAK,KAAK,WAAW,KAAK,KAAK,WAAU,IAAK,GAAG;AACjD,WAAO;AAAA,EACT;AAAA,EACA,WAAW,KAAK;AACd,SAAK,KAAK,WAAW,GAAG;AACxB,WAAO;AAAA,EACT;AAAA,EACA,WAAW,KAAK;AACd,SAAK,KAAK,WAAW,KAAK,KAAK,WAAU,IAAK,GAAG;AACjD,WAAO;AAAA,EACT;AAAA,EACA,gBAAgB,KAAK;AACnB,SAAK,KAAK,gBAAgB,KAAK,KAAK,gBAAe,IAAK,GAAG;AAC3D,WAAO;AAAA,EACT;AAAA,EACA,QAAQ,MAAM;AACZ,QAAI,KAAK,KAAK,QAAO,IAAK,KAAK,QAAO,GAAI;AACxC,aAAO;AAAA,IACT,WAAW,KAAK,KAAK,QAAO,IAAK,KAAK,WAAW;AAC/C,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EACA,UAAU;AACR,WAAO,KAAK,KAAK,YAAW;AAAA,EAC9B;AAAA,EACA,WAAW;AACT,WAAO,KAAK,KAAK,SAAQ,IAAK;AAAA,EAChC;AAAA,EACA,UAAU;AACR,WAAO,KAAK,KAAK,QAAO;AAAA,EAC1B;AAAA,EACA,SAAS;AACP,WAAO,KAAK,KAAK,OAAM;AAAA,EACzB;AAAA,EACA,UAAU;AACR,WAAO,KAAK,KAAK,QAAO;AAAA,EAC1B;AAAA,EACA,OAAO,UAAU;AACf,WAAO,OAAO,KAAK,MAAM,QAAQ;AAAA,EACnC;AAAA,EACA,QAAQ;AACN,WAAO,IAAI,SAAS,IAAI,KAAK,KAAK,KAAK,QAAO,CAAE,CAAC;AAAA,EACnD;AACF;AACA,IAAIC,oBAAkB;AAAA,EACpB,QAAQ;AAAA;AAAA,EAER,cAAc;AAAA,EACd,aAAa;AAAA,EACb,WAAW;AAAA,EACX,OAAO;AAAA,EACP,MAAM,aAAa;AAAA,EACnB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,iBAAiB;AAAA,EACjB,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,gBAAgB,CAAC,OAAO;AACtB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,IACf;AAAA,EACE;AACF;AACA,SAAS,gBAAgB;AACvB,MAAI;AACJ,MAAI,SAAS,eAAe,2BAA2B,KAAK,MAAM;AAChE,KAAC,KAAK,SAAS,cAAc,MAAM,MAAM,OAAO,SAAS,GAAG,mBAAmB,aAAa,2EAA2E;AAAA,EACzK;AACA,SAAO,SAAS,eAAe,2BAA2B;AAC5D;AACA,IAAI,kBAAkB;AACtB,MAAM,kBAAkB,MAAMC,iBAAgB;AAAA,EAC5C,YAAY,UAAU,SAASR,UAAS;AACtC,QAAI;AACJ,SAAK,UAAU;AACf,SAAK,YAAY;AACjB,SAAK,UAAU;AACf,SAAK,UAAU;AACf,SAAK,WAAW;AAChB,SAAK,WAAW;AAChB,SAAK,WAAW,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACpC,SAAK,sBAAsB,CAAC,MAAM;AAChC,UAAI,KAAK,aAAa,EAAE,UAAU,KAAK,iBAAiB,CAAC,eAAe,EAAE,QAAQ,KAAK,eAAe,GAAG;AACvG,aAAK,KAAI;AAAA,MACX;AAAA,IACF;AACA,SAAK,UAAU,OAAO,OAAO,CAAA,GAAIO,mBAAiB,OAAO;AACzD,uBAAmB;AACnB,QAAI;AACJ,QAAI,OAAO,aAAa,UAAU;AAChC,wBAAkB,SAAS,cAAc,QAAQ;AAAA,IACnD,OAAO;AACL,wBAAkB;AAAA,IACpB;AACA,QAAI,CAAC,iBAAiB;AACpB,YAAM,IAAI,MAAM,GAAG,QAAQ,mCAAmC;AAAA,IAChE;AACA,SAAK,YAAY,OAAO,KAAK,YAAY,EAAE,SAAS,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,OAAO,aAAa;AAC1G,SAAK,WAAW,KAAK;AACrB,aAAS,IAAIP,QAAO;AACpB,QAAI,KAAK,YAAY,aAAa,MAAM;AACtC,WAAK,aAAa,KAAK,QAAQ,UAAU,eAAe;AAAA,IAC1D,WAAW,KAAK,YAAY,aAAa,OAAO;AAC9C,WAAK,aAAa,KAAK,QAAQ,UAAU,eAAe;AAAA,IAC1D,WAAW,KAAK,YAAY,aAAa,MAAM;AAC7C,WAAK,aAAa,KAAK,QAAQ,UAAU,eAAe;AAAA,IAC1D,WAAW,KAAK,YAAY,aAAa,UAAU;AACjD,WAAK,aAAa,KAAK,QAAQ,UAAU,eAAe;AAAA,IAC1D,OAAO;AACL,WAAK,aAAa,KAAK,QAAQ,UAAU,eAAe;AAAA,IAC1D;AACA,QAAI;AACJ,QAAI,KAAK,QAAQ,aAAa;AAC5B,UAAI,OAAO,KAAK,QAAQ,gBAAgB,UAAU;AAChD,mBAAW,IAAI,SAAS,OAAO,KAAK,QAAQ,aAAa,KAAK,UAAU,KAAqB,oBAAI,KAAI,CAAE;AAAA,MACzG,OAAO;AACL,mBAAW,IAAI,SAAS,KAAK,QAAQ,WAAW;AAAA,MAClD;AAAA,IACF,OAAO;AACL,iBAAW,IAAI,SAAyB,oBAAI,MAAM;AAClD,WAAK,QAAQ,cAAc,SAAS,OAAO,KAAK,UAAU;AAAA,IAC5D;AACA,SAAK,YAAW;AAChB,SAAK,YAAY,SAAS,OAAO,eAAe,IAAI;AACpD,SAAK,cAAc;AACnB,SAAK,gBAAgB;AACrB,SAAK,UAAU,KAAK,SAAQ;AAC5B,SAAK,UAAU,KAAK,SAAQ;AAC5B,QAAI,KAAK,QAAQ,QAAQ;AACvB,WAAK,kBAAkB;AACvB,WAAK,gBAAgB,YAAY,gCAAgC,eAAe;AAAA,IAClF,OAAO;AACL,WAAK,UAAU;AACf,WAAK,cAAc,aAAa,SAAS,SAAS,OAAO,KAAK,UAAU,CAAC;AACzE,YAAM,kBAAkB,SAAS,cAAc,KAAK;AACpD,sBAAgB,YAAY,gCAAgC,eAAe;AAC3E,sBAAgB,aAAa,SAAS,WAAW,KAAK,QAAQ,MAAM,GAAG;AACvE,OAAC,KAAK,oBAAoB,OAAO,SAAS,GAAG,YAAY,eAAe;AACxE,WAAK,kBAAkB;AACvB,WAAK,gBAAe;AAAA,IACtB;AACA,SAAK,uBAAsB;AAC3B,QAAI,KAAK,cAAc;AACrB,WAAK,eAAe,KAAK,gBAAgB,cAAc,YAAY;AACnE,WAAK,iBAAiB,KAAK,gBAAgB,cAAc,cAAc;AAAA,IACzE,OAAO;AACL,WAAK,eAAe,CAAA;AACpB,WAAK,iBAAiB,CAAA;AAAA,IACxB;AACA,SAAK,eAAe,KAAK,SAAS;AAClC,SAAK,gBAAe;AACpB,SAAK,cAAa;AAClB,SAAK,cAAa;AAAA,EACpB;AAAA,EACA,cAAc;AACZ,QAAI,eAAe,KAAK,QAAQ;AAChC,QAAI,gBAAgB,EAAG;AACvB,QAAI,eAAe,KAAK,eAAe,GAAG;AACxC,qBAAe;AAAA,IACjB;AACA,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,UAAI,MAAM,eAAe;AACzB,WAAK,SAAS,CAAC,IAAI,MAAM,IAAI,MAAM,MAAM;AAAA,IAC3C;AAAA,EACF;AAAA,EACA,OAAO,OAAO,UAAU,SAASA,UAAS;AACxC,WAAO,IAAIQ,iBAAgB,UAAU,SAASR,QAAO;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,OAAO,iBAAiB,YAAY;AAClC,WAAO,OAAO,gBAAgB,UAAU;AAAA,EAC1C;AAAA,EACA,WAAW;AACT,QAAI,UAAU,KAAK,QAAQ;AAC3B,QAAI,WAAW,IAAI;AACjB,UAAI,OAAO,YAAY,UAAU;AAC/B,cAAM,KAAK,OAAO,SAAS,KAAK,UAAU;AAC1C,YAAI,CAAC,IAAI;AACP,iBAAO;AAAA,QACT;AACA,kBAAU;AAAA,MACZ;AACA,WAAK,UAAU,QAAQ,YAAW;AAClC,WAAK,WAAW,EAAE,KAAK,UAAU,QAAQ,QAAQ,YAAY,CAAC;AAC9D,aAAO,IAAI,KAAK,QAAQ,YAAW,GAAI,QAAQ,YAAY,QAAQ,QAAO,GAAI,GAAG,CAAC,EAAE,QAAO;AAAA,IAC7F;AACA,WAAO;AAAA,EACT;AAAA,EACA,WAAW;AACT,QAAI,UAAU,KAAK,QAAQ;AAC3B,QAAI,WAAW,IAAI;AACjB,UAAI,OAAO,YAAY,UAAU;AAC/B,cAAM,KAAK,OAAO,SAAS,KAAK,UAAU;AAC1C,YAAI,CAAC,IAAI;AACP,iBAAO;AAAA,QACT;AACA,kBAAU;AAAA,MACZ;AACA,WAAK,UAAU,QAAQ,YAAW;AAClC,WAAK,WAAW,EAAE,KAAK,UAAU,QAAQ,QAAQ,YAAY,CAAC;AAC9D,aAAO,IAAI,KAAK,QAAQ,YAAW,GAAI,QAAQ,YAAY,QAAQ,QAAO,GAAI,IAAI,EAAE,EAAE,QAAO;AAAA,IAC/F;AACA,WAAO;AAAA,EACT;AAAA,EACA,IAAI,SAAS,MAAM;AACjB,QAAI,KAAK,cAAc,MAAM;AAC3B;AAAA,IACF;AACA,SAAK,YAAY;AACjB,SAAK,eAAe,IAAI;AAAA,EAC1B;AAAA,EACA,IAAI,WAAW;AACb,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,MAAM;AACnB,QAAI;AACJ,KAAC,KAAK,KAAK,gBAAgB,cAAc,gBAAgB,MAAM,OAAO,SAAS,GAAG,aAAa,aAAa,IAAI;AAChH,QAAI,SAAS,QAAQ;AACnB,WAAK,SAAQ;AAAA,IACf,WAAW,SAAS,SAAS;AAC3B,WAAK,UAAS;AAAA,IAChB,OAAO;AACL,WAAK,QAAO;AAAA,IACd;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAkB;AAChB,QAAI,IAAI,IAAI,IAAI;AAChB,UAAM,QAAQ,KAAK,QAAQ;AAC3B,KAAC,KAAK,KAAK,gBAAgB,cAAc,qBAAqB,MAAM,OAAO,SAAS,GAAG,iBAAiB,SAAS,CAAC,MAAM;AACtH,WAAK,SAAS,QAAQ,SAAS,QAAQ,CAAC;AAAA,IAC1C,CAAC;AACD,KAAC,KAAK,KAAK,gBAAgB,cAAc,qBAAqB,MAAM,OAAO,SAAS,GAAG,iBAAiB,SAAS,CAAC,MAAM;AACtH,WAAK,SAAS,QAAQ,SAAS,QAAQ,CAAC;AAAA,IAC1C,CAAC;AACD,KAAC,KAAK,KAAK,gBAAgB,cAAc,mBAAmB,MAAM,OAAO,SAAS,GAAG,iBAAiB,SAAS,CAAC,MAAM;AACpH,WAAK,WAAW,aAAa;AAAA,IAC/B,CAAC;AACD,KAAC,KAAK,KAAK,gBAAgB,cAAc,oBAAoB,MAAM,OAAO,SAAS,GAAG,iBAAiB,SAAS,CAAC,MAAM;AACrH,WAAK,WAAW,aAAa;AAAA,IAC/B,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAIA,gBAAgB;AACd,QAAI,IAAI;AACR,KAAC,KAAK,KAAK,gBAAgB,cAAc,gBAAgB,MAAM,OAAO,SAAS,GAAG,iBAAiB,SAAS,CAAC,MAAM;AACjH,UAAI;AACJ,YAAM,YAAY,EAAE;AACpB,UAAI,UAAU,UAAU,SAAS,UAAU,KAAK,UAAU,QAAQ,WAAW,GAAG;AAC9E,cAAM,aAAa,UAAU,aAAa,UAAU,KAAK;AACzD,cAAM,OAAO,WAAW,MAAM,GAAG;AACjC,aAAK,YAAY,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;AACtC,aAAK,YAAY,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjC,YAAI,KAAK,cAAc,KAAK,WAAW,GAAG;AACxC;AAAA,QACF;AACA,SAAC,MAAM,KAAK,gBAAgB,cAAc,SAAS,MAAM,OAAO,SAAS,IAAI,UAAU,OAAO,QAAQ;AACtG,kBAAU,UAAU,IAAI,QAAQ;AAChC,YAAI,KAAK,cAAc;AACrB,eAAK,YAAY,QAAQ,CAAC,KAAK,aAAa,KAAK;AACjD,eAAK,YAAY,WAAW,CAAC,KAAK,eAAe,KAAK;AAAA,QACxD;AACA,aAAK,gBAAgB,CAAC;AAAA,MACxB;AAAA,IACF,CAAC;AACD,KAAC,KAAK,KAAK,gBAAgB,cAAc,aAAa,MAAM,OAAO,SAAS,GAAG,iBAAiB,SAAS,CAAC,MAAM;AAC9G,YAAM,WAAW,IAAI,SAAS,OAAO,KAAK,WAAW,eAAe,IAAI,KAAqB,oBAAI,MAAM;AACvG,WAAK,YAAY,QAAQ,SAAS,QAAO,CAAE;AAC3C,WAAK,YAAY,SAAS,SAAS,SAAQ,IAAK,CAAC;AACjD,WAAK,YAAY,QAAQ,SAAS,QAAO,CAAE;AAC3C,WAAK,eAAe,KAAK,QAAQ;AAAA,IACnC,CAAC;AAAA,EACH;AAAA,EACA,aAAa;AACX,WAAO,KAAK,cAAc,aAAa,QAAQ,KAAK,cAAc,aAAa;AAAA,EACjF;AAAA,EACA,mBAAmB,KAAK;AACtB,QAAI,CAAC,UAAU,GAAG,GAAG;AACnB,aAAO;AAAA,IACT;AACA,WAAO,SAAS,KAAK,EAAE;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAgB;AACd,QAAI;AACJ,QAAI,CAAC,KAAK,aAAc;AACxB,QAAI,KAAK,KAAK,YAAY,OAAO,IAAI;AACrC,UAAM,kBAAkB,KAAK;AAC7B,UAAM,eAAe,gBAAgB,cAAc,YAAY;AAC/D,UAAM,eAAe,gBAAgB,cAAc,kBAAkB;AACrE,iBAAa,QAAQ;AACrB,iBAAa,QAAQ;AACrB,iBAAa,iBAAiB,SAAS,CAAC,MAAM;AAC5C,YAAM,gBAAgB,EAAE;AACxB,UAAI,MAAM,KAAK,mBAAmB,cAAc,KAAK;AACrD,UAAI,SAAS,aAAa,KAAK,GAAG,GAAG;AACrC,UAAI,SAAS,QAAQ,EAAE,IAAI,IAAI;AAC7B,iBAAS;AAAA,MACX;AACA,mBAAa,QAAQ;AACrB,mBAAa,QAAQ;AAAA,IACvB,CAAC;AACD,iBAAa,iBAAiB,SAAS,CAAC,MAAM;AAC5C,YAAM,gBAAgB,EAAE;AACxB,mBAAa,QAAQ,aAAa,cAAc,OAAO,GAAG,GAAG;AAAA,IAC/D,CAAC;AACD,QAAI,KAAK,KAAK,YAAY,OAAO,IAAI;AACrC,UAAM,iBAAiB,gBAAgB,cAAc,cAAc;AACnE,UAAM,iBAAiB,gBAAgB,cAAc,oBAAoB;AACzE,mBAAe,QAAQ;AACvB,mBAAe,QAAQ;AACvB,mBAAe,iBAAiB,SAAS,CAAC,MAAM;AAC9C,YAAM,gBAAgB,EAAE;AACxB,UAAI,MAAM,KAAK,mBAAmB,cAAc,KAAK;AACrD,UAAI,SAAS,aAAa,KAAK,GAAG,GAAG;AACrC,UAAI,SAAS,QAAQ,EAAE,IAAI,IAAI;AAC7B,iBAAS;AAAA,MACX;AACA,qBAAe,QAAQ;AACvB,qBAAe,QAAQ;AAAA,IACzB,CAAC;AACD,mBAAe,iBAAiB,SAAS,CAAC,MAAM;AAC9C,YAAM,gBAAgB,EAAE;AACxB,qBAAe,QAAQ,aAAa,cAAc,OAAO,GAAG,GAAG;AAAA,IACjE,CAAC;AACD,KAAC,KAAK,gBAAgB,cAAc,cAAc,MAAM,OAAO,SAAS,GAAG,iBAAiB,SAAS,CAAC,MAAM;AAC1G,WAAK,YAAY,QAAQ,CAAC,aAAa,KAAK;AAC5C,WAAK,YAAY,WAAW,CAAC,eAAe,KAAK;AACjD,WAAK,gBAAgB,CAAC;AAAA,IACxB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS,UAAU,GAAG;AACpB,QAAI,KAAK,cAAc,aAAa,QAAQ,KAAK,cAAc,aAAa,UAAU;AACpF,WAAK,YAAY,QAAQ,CAAC;AAC1B,WAAK,YAAY,SAAS,WAAW,WAAW,KAAK,CAAC;AACtD,WAAK,QAAO;AACZ;AAAA,IACF;AACA,QAAI,KAAK,cAAc,aAAa,OAAO;AACzC,WAAK,YAAY,QAAQ,CAAC;AAC1B,WAAK,YAAY,QAAQ,WAAW,WAAW,KAAK,CAAC;AACrD,WAAK,UAAS;AACd;AAAA,IACF;AACA,QAAI,KAAK,cAAc,aAAa,MAAM;AACxC,WAAK,YAAY,QAAQ,CAAC;AAC1B,WAAK,YAAY,QAAQ,WAAW,WAAW,MAAM,EAAE;AACvD,WAAK,SAAQ;AAAA,IACf;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAe;AACb,WAAO,KAAK,YAAY,OAAO,KAAK,UAAU;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,WAAW,SAAS;AACzBO,wBAAkB,OAAO,OAAO,CAAA,GAAIA,mBAAiB,OAAO;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO;AACL,QAAI,KAAK,WAAW;AAClB;AAAA,IACF;AACA,SAAK,YAAY;AACjB,UAAM,UAAU,WAAU;AAC1B,SAAK,gBAAgB,UAAU,OAAO,MAAM;AAC5C,SAAK,gBAAgB,UAAU,IAAI,MAAM;AACzC,UAAM,OAAO,KAAK,cAAc,sBAAqB;AACrD,UAAM,YAAY,OAAO,WAAW,SAAS,gBAAgB;AAC7D,UAAM,aAAa,OAAO,WAAW,SAAS,gBAAgB;AAC9D,UAAM,gBAAgB,KAAK,gBAAgB;AAC3C,UAAM,sBAAsB,KAAK,cAAc,eAAe;AAC9D,QAAI,OAAO,KAAK,OAAO;AACvB,QAAI,MAAM;AACV,QAAI,KAAK,QAAQ,iBAAiB;AAChC,YAAM,KAAK,MAAM;AACjB,aAAO,KAAK;AAAA,IACd,OAAO;AACL,UAAI,KAAK,MAAM,sBAAsB,gBAAgB,QAAQ,gBAAgB,KAAK,OAAO,eAAe;AACtG,cAAM,YAAY,KAAK,MAAM,gBAAgB;AAAA,MAC/C,OAAO;AACL,cAAM,YAAY,KAAK,MAAM;AAAA,MAC/B;AAAA,IACF;AACA,SAAK,gBAAgB,aAAa,SAAS,GAAG,KAAK,QAAQ,kBAAkB,oBAAoB,EAAE,OAAO,GAAG,WAAW,IAAI,cAAc,KAAK,QAAQ,MAAM,EAAE;AAC/J,aAAS,iBAAiB,SAAS,KAAK,mBAAmB;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO;AACL,SAAK,YAAY;AACjB,QAAI,KAAK,QAAQ,SAAS;AACxB,UAAI,KAAK,QAAQ,QAAO,MAAO,OAAO;AACpC;AAAA,MACF;AAAA,IACF;AACA,SAAK,gBAAgB,UAAU,OAAO,MAAM;AAC5C,SAAK,gBAAgB,UAAU,IAAI,MAAM;AACzC,aAAS,oBAAoB,SAAS,KAAK,mBAAmB;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA,EAIA,kBAAkB;AAChB,QAAI,KAAK,eAAe;AACtB,WAAK,cAAc,iBAAiB,SAAS,CAAC,MAAM;AAClD,aAAK,KAAI;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAIA,wBAAwB;AACtB,UAAM,cAAc,KAAK,YAAY,OAAO,KAAK,UAAU;AAC3D,QAAI,KAAK,QAAQ,yBAAyBE,aAAW,KAAK,QAAQ,qBAAqB,GAAG;AACxF,WAAK,QAAQ,sBAAsB,aAAa,KAAK,QAAQ;AAAA,IAC/D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,yBAAyB;AACvB,UAAM,cAAc,KAAK,YAAY,OAAO,KAAK,UAAU;AAC3D,QAAI,KAAK,QAAQ,0BAA0BA,aAAW,KAAK,QAAQ,sBAAsB,GAAG;AAC1F,YAAM,QAAQ,KAAK,QAAQ,uBAAuB,aAAa,CAAC,WAAW;AACzE,YAAI,WAAW,OAAO;AACpB;AAAA,QACF;AACA,aAAK,QAAQ,KAAK;AAAA,MACpB,CAAC;AACD,UAAI,UAAU,OAAO;AACnB;AAAA,MACF;AACA,WAAK,QAAQ,KAAK;AAClB;AAAA,IACF;AACA,SAAK,QAAQ,KAAK;AAAA,EACpB;AAAA,EACA,gBAAgB,GAAG;AACjB,UAAM,cAAc,KAAK,YAAY,OAAO,KAAK,UAAU;AAC3D,QAAI,KAAK,QAAQ,UAAU;AACzB,UAAI,KAAK,QAAQ,SAAS,aAAa,KAAK,UAAU,CAAC,MAAM,OAAO;AAClE;AAAA,MACF;AAAA,IACF;AACA,QAAI,KAAK,SAAS;AAChB,WAAK,cAAc,aAAa,SAAS,WAAW;AAAA,IACtD;AACA,QAAI,CAAC,KAAK,QAAQ,UAAU,KAAK,QAAQ,WAAW;AAClD,WAAK,KAAI;AAAA,IACX;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAIA,yBAAyB;AACvB,UAAM,qBAAqB,KAAK,QAAQ;AACxC,QAAI,mBAAmB,6BAA6B,KAAK,QAAQ,QAAQ,QAAQ,EAAE,gBAAgB,KAAK,SAAS;AAAA;AAAA,+BAEtF,qBAAqB,qBAAqB,mBAAmB;AAAA,+BAC7D,qBAAqB,sBAAsB,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wDAepC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC;AAAA,wDAChF,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC;AAAA,wDAChF,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC;AAAA,wDAChF,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC;AAAA,wDAChF,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC;AAAA,wDAChF,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC;AAAA,wDAChF,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sFAQlD,KAAK,QAAQ,iBAAiB,KAAK,eAAe,8CAA8C,SAAS,WAAW,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wEAkB1I,SAAS,WAAW,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAW7F,SAAK,gBAAgB,YAAY;AAAA,EACnC;AAAA,EACA,QAAQ,6BAA6B;AACnC,QAAI,KAAK,cAAc,aAAa,QAAQ,KAAK,cAAc,aAAa,UAAU;AACpF,WAAK,QAAQ,2BAA2B;AACxC;AAAA,IACF;AACA,QAAI,KAAK,cAAc,aAAa,OAAO;AACzC,WAAK,UAAU,2BAA2B;AAC1C;AAAA,IACF;AACA,QAAI,KAAK,cAAc,aAAa,MAAM;AACxC,WAAK,SAAS,2BAA2B;AAAA,IAC3C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS,6BAA6B;AACpC,QAAI;AACJ,UAAM,cAAc,KAAK,YAAY,OAAO,MAAM;AAClD,QAAI,gCAAgC,SAAS,KAAK,YAAY,aAAa,MAAM;AAC/E,WAAK,uBAAsB;AAC3B;AAAA,IACF;AACA,UAAM,YAAY,CAAC,cAAc;AACjC,SAAK,gBAAgB,cAAc,mBAAmB,EAAE,cAAc,GAAG,SAAS,MAAM,YAAY,EAAE;AACtG,UAAM,qBAAqBA,aAAW,KAAK,QAAQ,cAAc;AACjE,UAAM,mBAAmB,qBAAqB,KAAK,QAAQ,iBAAiB;AAC5E,UAAM,UAAU,CAAA;AAChB,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,YAAM,OAAO,YAAY;AACzB,YAAM,WAAW,KAAK,eAAe,IAAI;AACzC,UAAI,iBAAiB,WAAW,cAAc;AAC9C,UAAI,UAAU;AACd,UAAI,sBAAsB,kBAAkB;AAC1C,cAAM,QAAQ,iBAAiB,EAAE,MAAM,KAAK,WAAW,MAAM,MAAM;AACnE,0BAAkB,MAAM,QAAQ,MAAM,MAAM,QAAQ;AACpD,kBAAU,MAAM;AAChB,kBAAU,UAAU,UAAU,OAAO,MAAM;AAAA,MAC7C;AACA,cAAQ,KAAK,yBAAyB,cAAc,gBAAgB,IAAI,KAAK,OAAO,IAAI,IAAI,QAAQ;AAAA,IACtG;AACA,SAAK,gBAAgB,cAAc,aAAa,EAAE,YAAY,QAAQ,KAAK,EAAE;AAC7E,QAAI,KAAK,YAAY,aAAa,MAAM;AACtC,WAAK,sBAAqB;AAAA,IAC5B;AACA,KAAC,KAAK,KAAK,gBAAgB,iBAAiB,YAAY,MAAM,OAAO,SAAS,GAAG,QAAQ,CAAC,YAAY;AACpG,cAAQ,iBAAiB,SAAS,CAAC,MAAM;AACvC,cAAM,YAAY,EAAE;AACpB,YAAI,WAAW;AACb,gBAAM,OAAO,UAAU,aAAa,WAAW;AAC/C,cAAI,MAAM;AACR,kBAAM,UAAU,CAAC;AACjB,gBAAI,KAAK,eAAe,OAAO,GAAG;AAChC;AAAA,YACF;AACA,gBAAI,KAAK,YAAY,aAAa,MAAM;AACtC,kBAAI,KAAK,eAAe,OAAO,GAAG;AAChC;AAAA,cACF;AACA,mBAAK,YAAY,QAAQ,OAAO;AAChC,mBAAK,gBAAgB,CAAC;AACtB;AAAA,YACF;AACA,iBAAK,YAAY,QAAQ,OAAO;AAChC,iBAAK,WAAW,KAAK;AAAA,UACvB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAIA,UAAU,6BAA6B;AACrC,QAAI;AACJ,QAAI,gCAAgC,SAAS,KAAK,YAAY,aAAa,OAAO;AAChF,WAAK,uBAAsB;AAC3B;AAAA,IACF;AACA,UAAM,OAAO,KAAK,YAAY,OAAO,MAAM;AAC3C,SAAK,gBAAgB,cAAc,mBAAmB,EAAE,cAAc,GAAG,IAAI;AAC7E,UAAM,gBAAgB,KAAK,gBAAgB,iBAAiB,4BAA4B;AACxF,QAAI,cAAc,SAAS,GAAG;AAC5B,UAAI,KAAK,eAAe,CAAC,IAAI,GAAG;AAC9B,sBAAc,QAAQ,CAAC,aAAa;AAClC,cAAI,CAAC,SAAS,UAAU,SAAS,UAAU,GAAG;AAC5C,qBAAS,UAAU,IAAI,UAAU;AAAA,UACnC;AAAA,QACF,CAAC;AACD;AAAA,MACF;AACA,oBAAc,QAAQ,CAAC,UAAU,QAAQ;AACvC,YAAI,KAAK,gBAAgB,CAAC,MAAM,GAAG,GAAG;AACpC,cAAI,CAAC,SAAS,UAAU,SAAS,UAAU,GAAG;AAC5C,qBAAS,UAAU,IAAI,UAAU;AAAA,UACnC;AAAA,QACF,OAAO;AACL,mBAAS,UAAU,OAAO,UAAU;AAAA,QACtC;AAAA,MACF,CAAC;AACD,UAAI,KAAK,YAAY,aAAa,OAAO;AACvC,aAAK,sBAAqB;AAAA,MAC5B;AACA;AAAA,IACF;AACA,SAAK,gBAAgB,cAAc,oBAAoB,EAAE,cAAc,KAAK,YAAY,OAAO,MAAM;AACrG,UAAM,qBAAqBA,aAAW,KAAK,QAAQ,cAAc;AACjE,UAAM,mBAAmB,qBAAqB,KAAK,QAAQ,iBAAiB;AAC5E,UAAM,UAAU,CAAA;AAChB,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,YAAM,WAAW,KAAK,gBAAgB,CAAC,MAAM,CAAC;AAC9C,UAAI,iBAAiB,WAAW,cAAc;AAC9C,UAAI,UAAU;AACd,UAAI,sBAAsB,kBAAkB;AAC1C,cAAM,QAAQ,iBAAiB,EAAE,MAAM,KAAK,WAAW,MAAM,OAAO,OAAO,IAAI,GAAE,CAAE;AACnF,0BAAkB,MAAM,QAAQ,MAAM,MAAM,QAAQ;AACpD,kBAAU,MAAM;AAChB,kBAAU,UAAU,UAAU,OAAO,MAAM;AAAA,MAC7C;AACA,cAAQ,KAAK,0BAA0B,cAAc,iBAAiB,CAAC,KAAK,OAAO,IAAI,SAAS,iBAAiB,GAAG,MAAM,CAAC,QAAQ;AAAA,IACrI;AACA,SAAK,gBAAgB,cAAc,cAAc,EAAE,YAAY,QAAQ,KAAK,EAAE;AAC9E,QAAI,KAAK,YAAY,aAAa,OAAO;AACvC,WAAK,sBAAqB;AAAA,IAC5B;AACA,KAAC,KAAK,KAAK,gBAAgB,iBAAiB,aAAa,MAAM,OAAO,SAAS,GAAG,QAAQ,CAAC,aAAa;AACtG,eAAS,iBAAiB,SAAS,CAAC,MAAM;AACxC,cAAM,YAAY,EAAE;AACpB,YAAI,WAAW;AACb,gBAAM,QAAQ,UAAU,aAAa,YAAY;AACjD,cAAI,OAAO;AACT,gBAAI,KAAK,gBAAgB,KAAK,YAAY,QAAO,GAAI,CAAC,KAAK,GAAG;AAC5D,qBAAO;AAAA,YACT;AACA,gBAAI,KAAK,YAAY,aAAa,OAAO;AACvC,mBAAK,YAAY,SAAS,CAAC,KAAK;AAChC,mBAAK,gBAAgB,CAAC;AACtB;AAAA,YACF;AACA,iBAAK,YAAY,SAAS,CAAC,KAAK;AAChC,iBAAK,WAAW,KAAK;AACrB,iBAAK,QAAO;AAAA,UACd;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQ,6BAA6B;AACnC,QAAI,gCAAgC,UAAU,KAAK,YAAY,aAAa,QAAQ,KAAK,YAAY,aAAa,WAAW;AAC3H,WAAK,uBAAsB;AAC3B;AAAA,IACF;AACA,QAAI,iBAAiB,KAAK,YAAY,MAAK;AAC3C,UAAM,eAAe,eAAe,SAAQ;AAC5C,mBAAe,QAAQ,CAAC;AACxB,SAAK,gBAAgB,cAAc,mBAAmB,EAAE,cAAc,eAAe,OAAO,MAAM;AAClG,SAAK,gBAAgB,cAAc,oBAAoB,EAAE,cAAc,eAAe,OAAO,MAAM;AACnG,QAAI,MAAM,eAAe,OAAM;AAC/B,UAAM,MAAM,KAAK,SAAS,CAAC;AAC3B,QAAI,OAAO,GAAG;AACZ,qBAAe,QAAQ,CAAC,GAAG;AAAA,IAC7B,OAAO;AACL,qBAAe,QAAQ,EAAE,IAAI,IAAI;AAAA,IACnC;AACA,UAAM,qBAAqBA,aAAW,KAAK,QAAQ,cAAc;AACjE,UAAM,mBAAmB,qBAAqB,KAAK,QAAQ,iBAAiB;AAC5E,UAAM,UAAU,CAAA;AAChB,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,UAAI;AACJ,UAAI,KAAK,GAAG;AACV,mBAAW;AAAA,MACb,OAAO;AACL,mBAAW,eAAe,QAAQ,QAAQ,CAAC;AAAA,MAC7C;AACA,YAAM,iBAAiB,SAAS,OAAO,eAAe,IAAI;AAC1D,UAAI,IAAI,KAAK,GAAG;AACd,gBAAQ,MAAM,KAAK,IAAI,KAAK,WAAW,MAAM;AAAA,MAC/C;AACA,UAAI,WAAW,KAAK,cAAc,QAAQ;AAC1C,UAAI,iBAAiB,gBAAgB,KAAK,SAAS,IAAI,CAAC,CAAC;AACzD,YAAM,gBAAgB,SAAS,SAAQ;AACvC,UAAI,iBAAiB,cAAc;AACjC,YAAI,gBAAgB,cAAc;AAChC,4BAAkB,iBAAiB,IAAI,SAAS;AAAA,QAClD,OAAO;AACL,4BAAkB,gBAAgB,KAAK,iBAAiB,KAAK,SAAS;AAAA,QACxE;AAAA,MACF;AACA,wBAAkB,KAAK,aAAa,iBAAiB,gBAAgB;AACrE,wBAAkB,WAAW,cAAc;AAC3C,UAAI,UAAU;AACd,UAAI,sBAAsB,kBAAkB;AAC1C,cAAM,QAAQ,iBAAiB,EAAE,MAAM,KAAK,WAAW,MAAM,UAAU,MAAM,SAAS,OAAO,KAAK,UAAU,EAAC,CAAE;AAC/G,0BAAkB,MAAM,QAAQ,MAAM,MAAM,QAAQ;AACpD,0BAAkB,MAAM,QAAQ,gBAAgB;AAChD,kBAAU,MAAM;AAChB,kBAAU,UAAU,UAAU,OAAO,MAAM;AAAA,MAC7C;AACA,cAAQ,KAAK,uBAAuB,cAAc,eAAe,SAAS,OAAO,KAAK,CAAC,KAAK,OAAO,GAAG;AACtG,cAAQ,KAAK,SAAS,SAAS,OAAO,GAAG,CAAC,SAAS;AACnD,cAAQ,KAAK,OAAO;AAAA,IACtB;AACA,YAAQ,KAAK,OAAO;AACpB,SAAK,gBAAgB,cAAc,gBAAgB,EAAE,YAAY,QAAQ,KAAK,EAAE;AAChF,QAAI,KAAK,YAAY,aAAa,QAAQ,KAAK,YAAY,aAAa,UAAU;AAChF,WAAK,sBAAqB;AAAA,IAC5B;AAAA,EACF;AAAA,EACA,cAAc,UAAU;AACtB,QAAI,KAAK,WAAW,MAAM,KAAK,UAAU,SAAS,QAAO,KAAM,KAAK,WAAW,MAAM,KAAK,UAAU,SAAS,WAAW;AACtH,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EACA,eAAe,MAAM;AACnB,QAAI,KAAK,WAAW,MAAM,KAAK,UAAU,QAAQ,KAAK,WAAW,MAAM,KAAK,UAAU,MAAM;AAC1F,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EACA,gBAAgB,MAAM,OAAO;AAC3B,QAAI,KAAK,eAAe,IAAI,GAAG;AAC7B,aAAO;AAAA,IACT;AACA,QAAI,YAAY,EAAE,OAAO,QAAQ,OAAO,CAAC;AACzC,QAAI,KAAK,YAAY,MAAM,KAAK,WAAW,aAAa,KAAK,YAAY,MAAM,KAAK,WAAW,WAAW;AACxG,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EACA,OAAO,WAAWT,UAAS;AACzB,aAAS,kBAAkBA,QAAO;AAAA,EACpC;AACF;AACA,gBAAgB,UAAU,GAAG,QAAQ;AACrC,gBAAgB,SAAS;AACzB,gBAAgB,SAAS;AACzB,IAAI,iBAAiB;AACrB,SAAS,aAAa;AACpB,SAAO;AAAA,IACL,cAAc,KAAK,IAAI,SAAS,gBAAgB,cAAc,OAAO,eAAe,CAAC;AAAA,IACrF,aAAa,KAAK,IAAI,SAAS,gBAAgB,aAAa,OAAO,cAAc,CAAC;AAAA,EACtF;AACA;AClwCA,MAAqB,mBAAmB,OAAO;AAAA,EAI7C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,UAAM,UAAU,OAAO,UAAU;AAEjC,SAAK,QAAA;AACL,SAAK,iBAAA;AACL,SAAK,eAAA;AAAA,EACP;AAAA,EAEA,UAAU;AACR,QAAI;AACJ,SAAK,MAAM,kBAAkB,OAAO,OAAO,IAAI,KAAK,MAAM,eAAe;AACzE,QAAI,OAAO,KAAK,MAAM,gBAAgB,aAAa,aAAa;AAC9D,0BAAoB,OAAO,KAAK,MAAM,gBAAgB;AAAA,IACxD;AAEA,QAAIT,YAAkB,KAAK,MAAM,gBAAgB,IAAI,GAAG;AACtD,UAAI,KAAK,MAAM,cAAc,eAAe,KAAK,MAAM,cAAc,YAAY;AAC/E,aAAK,MAAM,gBAAgB,OAAO,KAAK,MAAM,WAAW,QAAQ,QAAQ,EAAE;AAAA,MAC5E,OAAO;AACL,aAAK,MAAM,gBAAgB,OAAO,KAAK,MAAM;AAAA,MAC/C;AAAA,IACF;AAEA,SAAK,MAAM,gBAAgB,WAAW,CAAC,IAAS,MAAa;AAC3D,UAAI,mBAAmB;AACrB,0BAAkB,IAAI,CAAC;AAAA,MACzB;AAEA,WAAK,SAAS,EAAE;AAEhB,WAAK,MAAA;AAAA,IACP;AAEA,SAAK,UAAU,IAAI,eAAe,KAAK,SAAS,KAAK,MAAM,iBAAiB,EAAS;AAAA,EACvF;AAAA,EAEA,cAAc;AACZ,UAAM,QAAQ,KAAK;AAEnB,UAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,0BAAsB,YAAY;AAAA;AAAA,iCAEL,MAAM,QAAQ;AAAA;AAAA,OAExC,OAAO,uBAAuB,KAAK,CAAC;AAAA;AAAA;AAIvC,SAAK,UAAU,sBAAsB,cAAc,UAAU,MAAM,QAAQ,IAAI;AAAA,EACjF;AAAA,EAEA,WAAW;AACT,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,SAAS,OAAY,iBAAiC;AACpD,QAAI,oBAAoB,SAAS,KAAK,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;AAC9F,WAAK,QAAQ,QAAQ,KAAK,MAAM;AAChC;AAAA,IACF;AAEA,SAAK,MAAM,SAAS;AACpB,SAAK,QAAQ,QAAQ;AAAA,EACvB;AAAA,EAEA,QAAQ;AACN,SAAK,eAAA;AACL,SAAK,YAAY,KAAK;AACtB,8BAA0B,KAAK,UAAU;AAAA,EAC3C;AAAA,EAEA,aAA+B;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAa;AACX,UAAM,cAAc,gBAAgB,KAAK,SAAA,GAAY,KAAK,KAAK;AAE/D,mBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD,WAAO;AAAA,EACT;AACF;ACvFA,MAAqB,kBAAkB,OAAO;AAAA,EAG5C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,UAAM,UAAU,OAAO,UAAU;AAEjC,QAAI,MAAM,UAAU;AAClB,WAAK,iBAAiB,MAAM;AAAA,IAC9B,OAAO;AACL,WAAK,iBAAiB,CAAA;AAAA,IACxB;AAEA,SAAK,QAAA;AAAA,EACP;AAAA,EAEA,UAAU;AACR,QAAI,KAAK,eAAe,SAAS;AAC9B,WAAK,eAAe,QAAgB,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAAA,IAC7E;AAEA,SAAK,oBAAoB,iBAAiB,cAAc,EAAE,QAAQ,CAAC,YAAY;AAC7E,cAAQ,iBAAiB,SAAS,CAAC,MAAW;AAC5C,aAAK,kBAAkB,SAAS,CAAC;AAAA,MACnC,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,kBAAkB,SAAkB,KAAU;AACpD,SAAK,UAAU,QAAQ,aAAa,aAAa,KAAK,EAAE;AAAA,EAC1D;AAAA,EAEO,UAAU,OAAqB;;AACpC,UAAM,UAAU,KAAK,oBAAoB,cAAc,iBAAiB,KAAK,IAAI;AAEjF,QAAI,CAAC,QAAS;AAEd,QAAI,CAAC,QAAQ,UAAU,SAAS,QAAQ,GAAG;AACzC,eAAS,UAAQ,wCAAS,kBAAT,mBAAwB,aAAY,CAAA,GAAI;AACvD,aAAK,UAAU,OAAO,QAAQ;AAAA,MAChC;AACA,cAAQ,UAAU,IAAI,QAAQ;AAAA,IAChC;AAEA,UAAM,WAAW,KAAK,WAAW,cAAc,kBAAkB,KAAK,IAAI;AAE1E,QAAI,EAAC,qCAAU,UAAU,SAAS,YAAW;AAC3C,eAAS,UAAQ,0CAAU,kBAAV,mBAAyB,aAAY,CAAA,GAAI;AACxD,aAAK,UAAU,OAAO,QAAQ;AAAA,MAChC;AAEA,2CAAU,UAAU,IAAI;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,OAAO,eAAwB;AAC7B,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,mBAA4B;AACjC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,cAAc;;AACZ,UAAM,QAAQ,KAAK;AAEnB,UAAM,eAAe,KAAK,SAAS;AACnC,UAAM,UAAU,KAAK,SAAS,WAAA;AAE9B,UAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAGjF,QAAI,aAAa,kBAAkB,SAAS,KAAK;AAEjD,0BAAsB,YAAY;AAAA;AAAA,sCAEA,WAAW,aAAa;AAAA;AAAA;AAAA;AAK1D,QAAI,MAAM,UAAU;AAClB,UAAI,YAAY;AAEhB,YAAM,cAAc,KAAK,QAAA,EAAU,WAAA;AAEnC,UAAImB,cAAyB,kBAAkB,aAAa,OAAO,MAAM,aAAa,YAAY,KAAK,CAAC;AAExG,iBAAW,cAAc,MAAM,UAAU;AACvC,mBAAW,UAAU;AACrB,qBAAa,gBAAgB,UAAU;AACvC,YAAI,KAAK,WAAW;AAEpB,YAAI,cAAc,4BAA4B,YAAY,WAAW,EAAE,kBAAkB,EAAE,4BAA4B,WAAW,KAAK;AAEvI,YAAI,kBAAkB,4BAA4B,YAAY,WAAW,EAAE,mBAAmB,EAAE,KAAK,OAAO,uBAAuB,UAAU,CAAC;AAAA;AAAA;AAI9I,cAAM,aAAaC,kBAAwB,WAAW;AACtD,cAAM,iBAAiBA,kBAAwB,eAAe;AAE9D,oBAAY;AACZ,YAAI,YAAY;AACd,sCAAsB,cAAc,gBAAgB,MAApD,mBAAuD,YAAY;AAAA,QACrE;AAEA,YAAI,gBAAgB;AAClB,sCAAsB,cAAc,cAAc,MAAlD,mBAAqD,YAAY;AAEjE,cAAI,WAAW,UAAU;AACvB,gBAAI,iBAAiB;AAAA,cACnB,OAAO;AAAA,gBACL,OAAO,YAAY,MAAM,SAAS;AAAA,gBAClC,YAAY,YAAY,MAAM,cAAc;AAAA,gBAC5C,YAAY,YAAY,MAAM,cAAc;AAAA,gBAC5C,UAAU,YAAY,MAAM,YAAY;AAAA,cAAA;AAAA,cAE1C,cAAc,YAAY;AAAA,cAC1B,YAAY;AAAA,cACZ,iBAAiB;AAAA,cACjB,QAAQ,CAAA;AAAA,YAAC;AAGX,uBAAW,WAAW,IAAI,SAAS,SAAS,cAAc,KAAK,GAAG,cAAc;AAEhF,uBAAW,YAAY,IAAK,WAAW,YAAoB,YAAY,iDAAgB,cAAc,kBAAkB,WAAW,QAAQ;AAE1I,uBAAW,SAAS,aAAa,cAAc,YAAYD,WAAU;AAAA,UACvE;AAAA,QACF;AAAA,MACF;AAEA,WAAK,sBAAsB;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,WAAgB;;AACd,QAAI,KAAK,eAAe,UAAU;AAChC,aAAQ,KAAK,eAAe,SAAiB,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAAA,IACrF;AAEA,QAAI,cAAc,CAAA;AAElB,QAAI,eAAe,KAAK,QAAA,EAAU,aAAa;AAE/C,eAAW,cAAc,KAAK,MAAM,UAAU;AAC5C,YAAM,mBAAkB,gBAAW,aAAX,mBAAqB,SAAS;AACtD,UAAI,cAAc;AAChB,oBAAY,WAAW,UAAU,IAAI;AAAA,MACvC,OAAO;AACL,iBAAS,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,eAAe,GAAG;AACxD,sBAAY,GAAG,IAAI;AAAA,QACrB;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,OAAkB;;AACzB,eAAW,cAAc,KAAK,MAAM,UAAU;AAC5C,UAAI,gBAAgB,MAAM,WAAW,UAAU;AAE/C,UAAI,eAAe;AACjB,yBAAW,aAAX,mBAAqB,SAAS;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,QAAQ;AAAA,EAAC;AAAA,EAET,aAAsB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAa;;AACX,QAAI,KAAK,eAAe,OAAO;AAC7B,YAAM,cAAe,KAAK,eAAe,MAAc,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAE7F,qBAAe,KAAK,OAAO,KAAK,YAAY,WAAW;AAEvD;AAAA,IACF;AAEA,UAAM,QAAQ,KAAK;AAEnB,eAAW,cAAc,MAAM,UAAU;AACvC,YAAM,eAAc,gBAAW,aAAX,mBAAqB;AAEzC,UAAI,eAAe,YAAY,SAAS,GAAG;AACzC,cAAM,YAAY,YAAY,CAAC;AAE/B,YAAI,UAAU,SAAS;AACrB,oBAAU,UAAU,MAAM,KAAK,MAAM,QAAQ,OAAO,UAAU;AAE9D,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,QAAc;AAAA,EAAC;AACjB;ACzNA,IAAI,QAAQ;AAEZ,MAAqB,mBAAmB,OAAO;AAAA,EAK7C,YAAY,OAAkB,YAAyB,UAAoB;AACzE,UAAM,UAAU,OAAO,UAAU;AAHnC,SAAQ,gBAAgB,CAAA;AAKtB,QAAI,MAAM,UAAU;AAClB,WAAK,iBAAiB,MAAM;AAAA,IAC9B,OAAO;AACL,WAAK,iBAAiB,CAAA;AAAA,IACxB;AAEA,UAAM,kBAAkB;AAAA,MACtB,OAAO;AAAA,QACL,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,UAAU;AAAA,MAAA;AAAA,MAEZ,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,QAAQ,CAAA;AAAA,IAAC;AAGX,SAAK,WAAW,IAAI,SAAS,SAAS,cAAc,KAAK,GAAG,eAAe;AAE3E,SAAK,QAAA;AACL,SAAK,iBAAA;AACL,SAAK,eAAA;AAAA,EACP;AAAA,EAEA,UAAU;;AACR,SAAK,OAAA;AAEL,QAAI,KAAK,eAAe,SAAS;AAC9B,WAAK,eAAe,QAAgB,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAAA,IAC7E;AAEA,eAAK,WAAW,cAAc,sBAAsB,MAApD,mBAAuD,iBAAiB,SAAS,CAAC,QAAQ;AACxF,WAAK,OAAA;AAAA,IACP;AAAA,EACF;AAAA,EAEA,OAAO,eAAwB;AAC7B,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,mBAA4B;AACjC,WAAO;AAAA,EACT;AAAA,EAEA,cAAc;;AACZ,UAAM,QAAQ,KAAK;AAEnB,UAAM,wBAAwB,KAAK,WAAW,cAAc,qBAAqB;AAEjF,QAAI,gBAAgB,CAAA;AACpB,QAAI,mBAAmB,CAAA;AACvB,QAAI,iBAAiB,CAAA;AACrB,mBAAe,KAAK,EAAE;AAEtB,QAAI,MAAM,UAAU;AAClB,uBAAiB,KAAK,YAAY;AAElC,oBAAc,KAAK,MAAM;AAEzB,uBAAiB,KAAK,0BAA0B;AAChD,oBAAc,KAAK,MAAM;AACzB,YAAI,WAAM,oBAAN,mBAAuB,sBAAqB,MAAM;AACpD,sBAAc,KAAK,mHAAmH;AAAA,MACxI;AACA,oBAAc,KAAK,OAAO;AAE1B,iBAAW,cAAc,MAAM,UAAU;AACvC,yBAAiB,KAAK,uBAAqB,gBAAW,UAAX,mBAAkB,UAAS,GAAG,IAAI;AAC7E,sBAAc,KAAK,8BAA8B,WAAW,KAAK,OAAO;AAAA,MAC1E;AACA,uBAAiB,KAAK,aAAa;AACnC,oBAAc,KAAK,OAAO;AAAA,IAC5B;AAEA,0BAAsB,YAAY;AAAA;AAAA,QAE9B,eAAe,KAAK,EAAE,CAAC;AAAA,uCACM,WAAM,UAAN,mBAAa,aAAY,EAAE,qBAAmB,WAAM,oBAAN,mBAAuB,WAAU,MAAM;AAAA,iCACzF,iBAAiB,KAAK,EAAE,CAAC,UAAU,cAAc,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA,EAIxF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAuB;;AAC5B,QAAI,cAAc,CAAA;AAElB,UAAM,UAAU,KAAK,SAAS,WAAA;AAC9B,UAAM,eAAe,KAAK,SAAS;AACnC,UAAM,aAAa,KAAK,MAAM;AAE9B,MAAE;AACF,QAAI,aAAa,CAAA;AACjB,gBAAY,KAAK,0BAA0B;AAE3C,gBAAY,KAAK,MAAM;AACvB,UAAI,UAAK,MAAM,oBAAX,mBAA4B,yBAAwB,MAAM;AAC5D,kBAAY,KAAK,uCAAuC,KAAK,qFAAqF;AAAA,IACpJ;AACA,gBAAY,KAAK,OAAO;AAExB,eAAW,cAAc,KAAK,MAAM,UAAU;AAC5C,UAAI,aAAyB,kBAAkB,SAAS,YAAY,MAAM,IAAI;AAE9E,UAAI,cAAcE,MAAY,CAAA,GAAI,UAAU;AAE5C,iBAAW,KAAK,WAAW;AAC3B,kBAAY,SAAS;AACrB,kBAAY,OAAO,YAAY,OAAO,MAAM;AAC5C,kBAAY,WAAW,aAAa,MAAMC,gBAAsB,WAAW;AAE3E,mBAAa,gBAAgB,WAAW;AAExC,kBAAY,KAAK,WAAW,YAAY,QAAQ,oCAAoC,YAAY,WAAW,aAAa,EAAE,aAAa,WAAW,UAAU,eAAe;AAAA,IAC7K;AACA,gBAAY,KAAK,OAAO;AAExB,SAAK,cAAc,KAAK,IAAI;AAE5B,UAAM,gBAAgBF,kBAAwB,YAAY,KAAK,EAAE,CAAC;AAElE,QAAI,eAAe;AACjB,iBAAK,WAAW,cAAc,OAAO,MAArC,mBAAwC,OAAO;AAE/C,0BAAc,cAAc,qBAAqB,MAAjD,mBAAoD,iBAAiB,SAAS,CAAC,QAAQ;AACrF,aAAK,UAAU,GAAG;AAAA,MACpB;AAAA,IACF;AAEA,gBAAY,aAAa,CAAA;AACzB,aAAS,eAAe,YAAY;AAClC,kBAAY,YAAY,IAAK,YAAY,YAAoB,aAAa,+CAAe,cAAc,IAAI,YAAY,QAAQ,KAAK,KAAK,QAAQ;AAEjJ,UAAI,UAAU,YAAY,OAAO,IAAI,GAAG;AACtC,oBAAY,UAAU,SAAS,UAAU,YAAY,OAAO,IAAI,CAAC;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,KAAkB;;AAC1B,UAAM,SAAS,IAAI;AAEnB,UAAM,aAAa,OAAO,QAAQ,IAAI;AAEtC,QAAI,YAAY;AACd,YAAI,gBAAW,kBAAX,mBAA0B,sBAAqB,EAAG;AAEtD,UAAI,WAAU,SAAI,kBAAJ,mBAA+B,aAAa,oBAAmB;AAE7E,WAAK,gBAAgB,MAAM;AAC3B,iBAAW,OAAA;AAAA,IACb;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAgB,QAAiB;AAC/B,QAAI,kBAAkB,CAAA;AACtB,QAAId,QAAc,MAAM,GAAG;AACzB,eAAS,OAAO,KAAK,eAAe;AAClC,0BAAkB,gBAAgB,OAAO,KAAK,cAAc,GAAG,CAAC;AAAA,MAClE;AACA,WAAK,gBAAgB,CAAA;AAAA,IACvB,WAAW,QAAQ;AACjB,YAAM,YAAY,SAAS,QAAQ,EAAE;AACrC,wBAAkB,gBAAgB,OAAO,KAAK,cAAc,SAAS,CAAC;AACtE,aAAO,KAAK,cAAc,SAAS;AAAA,IACrC;AAEA,aAAS,eAAe,iBAAiB;AACvC,WAAK,SAAS,gBAAA,EAAkB,gBAAgB,YAAY,IAAI;AAAA,IAClE;AAAA,EACF;AAAA,EAEA,eAAqB;;AACnB,eAAK,WAAW,cAAc,OAAO,MAArC,mBAAwC;AACxC,SAAK,gBAAA;AAAA,EACP;AAAA,EAEA,WAAW;AACT,QAAI,KAAK,eAAe,UAAU;AAChC,aAAQ,KAAK,eAAe,SAAiB,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAAA,IACrF;AACA,QAAI,SAAS,CAAA;AACb,UAAM,WAAW,KAAK,MAAM;AAC5B,UAAM,iBAAiB,SAAS;AAChC,aAAS,OAAO,KAAK,eAAe;AAClC,YAAM,aAAa,KAAK,cAAc,GAAG;AAEzC,UAAI,UAAU,CAAA;AACd,eAAS,WAAW,GAAG,WAAW,gBAAgB,YAAY;AAC5D,YAAI,aAAa,SAAS,QAAQ;AAClC,gBAAQ,WAAW,IAAI,IAAI,KAAK,SAAS,cAAc,WAAW,QAAQ,EAAE,IAAI;AAAA,MAClF;AAEA,aAAO,KAAK,OAAO;AAAA,IACrB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,OAAkB;AACzB,SAAK,MAAM,SAAS;AAEpB,QAAI,WAAkB,CAAA;AACtB,QAAIH,QAAc,KAAK,GAAG;AACxB,iBAAW;AAAA,IACb,OAAO;AACL,UAAIoB,cAAoB,KAAK,GAAG;AAC9B,iBAAS,KAAK,KAAK;AAAA,MACrB;AAAA,IACF;AAEA,SAAK,aAAA;AAEL,aAAS,aAAa,UAAU;AAC9B,WAAK,OAAO,SAAS;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,QAAQ;AACN,SAAK,eAAA;AACL,8BAA0B,KAAK,UAAU;AAAA,EAC3C;AAAA,EAEA,aAAa;AACX,QAAI,KAAK,eAAe,YAAY;AAClC,aAAQ,KAAK,eAAe,WAAmB,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAAA,IACvF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,QAAa;AACX,QAAI,KAAK,eAAe,OAAO;AAC7B,YAAMV,eAAe,KAAK,eAAe,MAAc,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU;AAE7F,qBAAe,KAAK,OAAO,KAAK,YAAYA,YAAW;AAEvD;AAAA,IACF;AAEA,UAAM,cAAc,KAAK,SAAS,UAAA;AAElC,QAAI,YAAY,SAAS,GAAG;AAC1B,YAAM,YAAY,YAAY,CAAC;AAE/B,UAAI,UAAU,SAAS;AACrB,kBAAU,UAAU,MAAM,KAAK,MAAM,QAAQ,OAAO,UAAU;AAE9D,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,QAAc;AAAA,EAAC;AACjB;AC7QO,MAAM,QAAQ;AAAA,EACnB,KAAK;AAAA,EACL,KAAK;AAAA,EACL,eAAe;AAAA,EACf,KAAK;AAAA,EACL,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,0BAA0B;AAAA,EAE1B,UAAU;AAEZ;AAEO,MAAM,eAAe;AAErB,MAAM,kBAAuB;AAAA,EAClC,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,UAAU;AAAA,EACV,WAAW;AAAA,EACX,MAAM;AAAA,EACN,UAAU;AAAA,EACV,KAAK;AAAA,EACL,MAAM;AACR;AAkBO,MAAM,iBAAiB;AAAA,EAC5B,YAAY;AAEd;AAQO,MAAM,uBAAuC;AAAA,EAClD,YAAY,CAAC,OAAO,aAAa;AAAA,EACjC,cAAc,CAAC,OAAO,eAAe;AAAA,EACrC,aAAa,CAAC,OAAO,cAAc;AAAA,EACnC,aAAa,CAAC,IAAI,aAAa;AAAA,EAC/B,eAAe,CAAC,IAAI,eAAe;AAAA,EACnC,cAAc,CAAC,IAAI,cAAc;AAAA,EACjC,eAAe,CAAC,SAAS,cAAc;AAAA,EACvC,gBAAgB,CAAC,SAAS,eAAe;AAAA,EACzC,cAAc,CAAC,SAAS,aAAa;AAAA,EACrC,eAAe,CAAC,UAAU,aAAa;AAAA,EACvC,iBAAiB,CAAC,UAAU,eAAe;AAAA,EAC3C,gBAAgB,CAAC,UAAU,cAAc;AAC3C;AACA,qBAAqB,KAAK,IAAI,qBAAqB,UAAU;AAC7D,qBAAqB,OAAO,IAAI,qBAAqB,aAAa;AAClE,qBAAqB,MAAM,IAAI,qBAAqB,WAAW;AAC/D,qBAAqB,QAAQ,IAAI,qBAAqB,aAAa;ACnGnE,IAAI,gBAAyB;AAAA,EAC3B,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,QAAQ;AAAA,IACN,WAAW;AAAA,IACX,WAAW;AAAA,IACX,SAAS;AAAA,EAAA;AAAA,EAEX,QAAQ;AAAA,IACN,KAAK;AAAA,IACL,SAAS;AAAA,IACT,kBAAkB;AAAA,IAClB,SAAS;AAAA,IACT,kBAAkB;AAAA,IAClB,SAAS;AAAA,IACT,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,wBAAwB;AAAA,EAAA;AAAA,EAE1B,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,eAAe;AAAA,IACf,cAAc;AAAA,IACd,sBAAsB;AAAA,IACtB,6BAA6B;AAAA,EAAA;AAEjC;AAQA,MAAMH,UAAS;AAAA,EAAf,cAAA;AACE,SAAQ,OAAgB;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQjB,IAAI,MAAgB;AACzB,SAAK,OAAO,OAAO,OAAO,CAAA,GAAI,eAAe,IAAI;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,WAAW,YAAyB;AACzC,WAAQ,KAAK,KAAa,UAAU;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUO,aAAa,OAAkB,aAAoC;AACxE,QAAI,gBAAgB;AAEpB,QAAI,iBAA2B,CAAA;AAE/B,QAAI,YAAY,QAAQ;AACtB,sBAAiB,KAAK,KAAK,OAAe,YAAY,MAAM;AAC5D,qBAAe,KAAK,aAAa;AAAA,IACnC;AAEA,KAAC,YAAY,cAAc,CAAA,GAAI,QAAQ,CAAC,eAAe;AACrD,UAAI,eAAe,MAAM,UAAU;AACjC,wBAAgB,QAAQ,KAAK,KAAK,UAAU,KAAK;AACjD,uBAAe,KAAK,aAAa;AAAA,MACnC;AAEA,UAAI,MAAM,cAAc,YAAY,MAAM,cAAc,SAAS;AAC/D,wBAAiB,KAAK,KAAK,OAAe,UAAU;AACpD,uBAAe,KAAK,aAAa;AAAA,MACnC,OAAO;AACL,wBAAiB,KAAK,KAAK,OAAe,UAAU;AACpD,uBAAe,KAAK,aAAa;AAAA,MACnC;AAAA,IACF,CAAC;AAED,UAAM,YAAsB,CAAA;AAE5B,UAAM,WAAW,OAAO,OAAO,CAAA,GAAI,EAAE,MAAM,MAAM,MAAM,OAAO,MAAM,MAAA,GAAS,MAAM,IAAI;AACvF,mBAAe,QAAQ,CAAC,cAAc;AACpC,UAAI,WAAW;AACb,kBAAU,KAAK,QAAQ,WAAW,QAAQ,CAAC;AAAA,MAC7C;AAAA,IACF,CAAC;AAED,QAAI,YAAY,WAAW;AACzB,gBAAU,KAAK,YAAY,UAAU,OAAO;AAAA,IAC9C;AAEA,WAAO;AAAA,EACT;AACF;AAEA,SAAS,QAAQ,WAAmB,UAAuB;AACzD,SAAO,UAAU,QAAQ,mCAAmC,CAAC,OAAO,QAAQ;AAC1E,WAAO,OAAO,SAAS,GAAG,MAAM,cAAc,SAAS,GAAG,IAAI;AAAA,EAChE,CAAC;AACH;AAEA,MAAA,aAAe,IAAIA,UAAA;ACxHZ,MAAM,cAAc,CAAC,UAA6B;AACvD,MAAI;AACJ,MAAI,MAAM,YAAY;AACpB,aAAS,gBAAgB,MAAM,UAAU;AAAA,EAC3C;AAEA,MAAI,WAAW,OAAO,mBAAmB,SAAS,CAACV,YAAkB,MAAM,IAAI,IAAI;AACjF,WAAO;AAAA,EACT;AAEA,MAAIA,YAAkB,MAAM,IAAI,GAAG;AACjC,QAAI,MAAM,UAAU;AAClB,aAAO,gBAAgB,OAAO;AAAA,IAChC,OAAO;AACL,aAAO,gBAAgB,QAAQ;AAAA,IACjC;AAAA,EACF;AAEA,SAAO,gBAAgB,MAAM;AAC/B;ACTA,MAAqB,aAAa;AAAA,EAahC,YAAY,UAAkB,MAAgB;AAZ9C,SAAQ,WAAW;AAEnB,SAAQ,eAA+B,CAAA;AAEvC,SAAQ,aAA8B,CAAA;AAEtC,SAAQ,kBAA4B,CAAA;AAOlC,SAAK,cAAc,GAAG,YAAY,IAAIwB,YAAkB,QAAQ,CAAC;AACjE,SAAK,OAAO;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,SAAS,OAAkB;AAChCC,oBAAsB,KAAK;AAC3B,SAAK,YAAY;AACjB,UAAM,OAAO,GAAG,KAAK,WAAW,IAAI,KAAK,QAAQ;AACjD,UAAM,aAAa,MAAM,QAAQ,MAAM;AACvC,SAAK,WAAW,MAAM,UAAU,IAAI,MAAM;AAC1C,SAAK,aAAa,MAAM,IAAI,IAAI;AAChC,UAAM,cAAc,YAAY,KAAK;AAErC,QAAI,MAAM,aAAa;AACrB,WAAK,gBAAgB,KAAK,MAAM,IAAI;AAAA,IACtC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,aAAa,WAA8B;AAChD,WAAO,KAAK,aAAa,KAAK,WAAW,SAAS,CAAC;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,IAAI,UAA6B;AACtC,WAAO,KAAK,aAAa,QAAQ;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,aAAa,WAA4B;AAC9C,QAAI,KAAK,WAAW,SAAS,KAAK,KAAK,aAAa,KAAK,WAAW,SAAS,CAAC,GAAG;AAC/E,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,kBAAkC;AACvC,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,gBAAgB,WAAmB;AACxC,UAAM,WAAW,KAAK,WAAW,SAAS;AAE1C,QAAIzB,YAAkB,QAAQ,EAAG;AAEjC,SAAK,qBAAqB,QAAQ;AAClC,WAAO,KAAK,WAAW,SAAS;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,qBAAqB,UAAkB;AAC5C,UAAM,YAAY,KAAK,aAAa,QAAQ;AAE5C,QAAI,aAAa,KAAK,WAAW,UAAU,UAAU,MAAM,UAAU;AACnE,aAAO,KAAK,WAAW,UAAU,UAAU;AAAA,IAC7C;AAEA,WAAO,KAAK,aAAa,QAAQ;AAEjC,SAAK,kBAAkB,KAAK,gBAAgB,OAAO,CAAC,QAAQ,QAAQ,QAAQ;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,iBAAiB,WAAgB,iBAA0B;AAChE,UAAM,eAAe,KAAK,KAAK,WAAA,EAAa;AAE5C,QAAI,oBAAoB,MAAM;AAC5B,eAAS,CAAC,KAAK,SAAS,KAAK,OAAO,QAAQ,KAAK,YAAY,GAAG;AAC9D,oBAAY,aAAa,WAAW,WAAW,YAAY;AAAA,MAC7D;AACA,aAAO;AAAA,IACT;AAEA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,eAAS,CAAC,KAAK,SAAS,KAAK,OAAO,QAAQ,KAAK,YAAY,GAAG;AAC9D,YAAI,CAAC,UAAU,UAAU,gBAAgB;AACvC;AAAA,QACF;AAEA,YAAI,aAAa,KAAK,mBAAmB,WAAW,IAAI;AAExD,YAAI,eAAe,MAAM;AACvB,iBAAO,IAAI,MAAM,WAAW,SAAS,EAAE,OAAO,WAAA,CAAY,CAAC;AAC3D;AAAA,QACF;AAEA,oBAAY,aAAa,WAAW,WAAW,YAAY;AAAA,MAC7D;AAEA,cAAQ,SAAS;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EAEO,iBAAiB,WAAgB,iBAA0B;AAChE,QAAI,oBAAoB,MAAM;AAC5B,UAAI,QAAQ,IAAI,SAAA;AAEhB,eAAS,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,SAAS,GAAG;AAClD,cAAM,IAAI,KAAK,KAAY;AAAA,MAC7B;AAEA,eAAS,CAAC,KAAK,SAAS,KAAK,OAAO,QAAQ,KAAK,YAAY,GAAG;AAC9D,yBAAiB,OAAO,WAAW,UAAU,UAAU,UAAU;AAAA,MACnE;AAEA,aAAO;AAAA,IACT;AAEA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAI,QAAQ,IAAI,SAAA;AAEhB,eAAS,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,SAAS,GAAG;AAClD,cAAM,IAAI,KAAK,KAAY;AAAA,MAC7B;AAEA,eAAS,CAAC,KAAK,SAAS,KAAK,OAAO,QAAQ,KAAK,YAAY,GAAG;AAC9D,YAAI,CAAC,UAAU,UAAU,gBAAgB;AACvC;AAAA,QACF;AAEA,YAAI,aAAa,KAAK,mBAAmB,WAAW,IAAI;AAExD,YAAI,eAAe,MAAM;AACvB,iBAAO,IAAI,MAAM,WAAW,SAAS,EAAE,OAAO,WAAA,CAAY,CAAC;AAC3D;AAAA,QACF;AAEA,yBAAiB,OAAO,WAAW,UAAU,UAAU,UAAU;AAAA,MACnE;AAEA,cAAQ,KAAK;AAAA,IACf,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,sBAAsB,OAAkB;AAC7C,QAAI,SAAS;AAEb,WAAO,OAAO,WAAW,aAAa;AACpC,UAAI,CAAC,KAAK,iBAAiB,MAAM,GAAG;AAClC,eAAO;AAAA,MACT;AAEA,eAAS,OAAO;AAAA,IAClB;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,iBAAiB,OAAkB;AACxC,QAAI,CAAC,KAAK,gBAAgB,SAAS,MAAM,IAAI,GAAG;AAC9C,aAAO;AAAA,IACT;AAEA,QAAI,WAAW;AAEf,QAAI,MAAM,YAAY,QAAQ;AAC5B,iBAAW,MAAM,YAAY,OAAO,KAAK,MAAM,KAAK;AAAA,IACtD,OAAO;AACL,UAAI,MAAM,YAAY,OAAO;AAC3B,cAAM,YAAY,KAAK,aAAa,MAAM,YAAY,KAAK;AAE3D,YAAI,WAAW;AACb,cAAI,MAAM,YAAY,MAAM,UAAU,UAAU,YAAY;AAC1D,uBAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,iBAAiB;AACtB,SAAK,gBAAgB,QAAQ,CAAC,aAAa;AACzC,YAAM,YAAY,KAAK,aAAa,QAAQ;AAE5C,UAAI,WAAW,KAAK,iBAAiB,SAAS;AAE9C,UAAI,UAAU;AACZ,kBAAU,UAAU,KAAA;AAAA,MACtB,OAAO;AACL,kBAAU,UAAU,KAAA;AAAA,MACtB;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,mBAAmB,WAAsB,WAAgC;AAC9E,QAAI,CAAC,KAAK,sBAAsB,SAAS,GAAG;AAC1C,aAAO;AAAA,IACT;AAEA,UAAM,aAAa,UAAU;AAC7B,QAAI,aAAa,WAAW,MAAA;AAE5B,QAAI,eAAe,KAAM,QAAO;AAEhC,QAAI,WAAW;AACb,iBAAW,MAAA;AAAA,IACb;AACA,iBAAa;AACb,QAAIA,YAAkB,WAAW,OAAO,GAAG;AACzC,iBAAW,UAAUU,WAAS,aAAa,WAAW,UAAU,EAAE,CAAC;AAAA,IACrE;AAEA,WAAO;AAAA,EACT;AACF;AAQA,SAAS,aAAa,UAAe,WAAsB,cAAwB;AACjF,MAAIgB,iBAAuB,SAAS,GAAG;AACrC,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,UAAU,UAAU,SAAA;AAEvC,MAAI,UAAU,eAAe,QAAQ;AACnC,UAAM,cAAc,WAAW,YAAY;AAE3C,aAAS,UAAU,UAAU,IAAI;AACjC,aAAS,UAAU,aAAa,WAAW,IAAI,WAAW,WAAW;AAAA,EACvE,OAAO;AACL,QAAI,iBAAiB,MAAM;AACzB,UAAIC,UAAgB,SAAS,GAAG;AAC9B,iBAAS,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AACnD,mBAAS,GAAG,IAAI;AAAA,QAClB;AAAA,MACF,OAAO;AACL,YAAI,CAACrB,QAAc,UAAU,IAAI,GAAG;AAClC,mBAAS,UAAU,IAAI,IAAI;AAAA,QAC7B;AAAA,MACF;AAAA,IACF,OAAO;AACL,eAAS,UAAU,UAAU,IAAI;AAAA,IACnC;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,iBAAiB,UAAoB,WAAsB,cAAwB;AAC1F,MAAIoB,iBAAuB,SAAS,GAAG;AACrC,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,UAAU,UAAU,SAAA;AAEvC,MAAI,UAAU,eAAe,QAAQ;AACnC,UAAM,cAAc,WAAW,YAAY;AAC3C,aAAS,OAAO,UAAU,UAAU;AACpC,aAAS,cAAc,aAAa;AAClC,eAAS,OAAO,UAAU,YAAY,UAAU;AAAA,IAClD;AAEA,aAAS,IAAI,UAAU,aAAa,aAAa,WAAW,WAAW,CAAC;AAAA,EAC1E,OAAO;AACL,QAAI,iBAAiB,MAAM;AACzB,UAAIC,UAAgB,SAAS,GAAG;AAC9B,iBAAS,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AACnD,mBAAS,IAAI,KAAK,KAAY;AAAA,QAChC;AAAA,MACF,OAAO;AACL,YAAI,CAACrB,QAAc,UAAU,IAAI,GAAG;AAClC,mBAAS,IAAI,UAAU,YAAY,UAAU;AAAA,QAC/C;AAAA,MACF;AAAA,IACF,OAAO;AACL,eAAS,IAAI,UAAU,YAAY,UAAU;AAAA,IAC/C;AAAA,EACF;AAEA,SAAO;AACT;AC1WA,MAAqB,aAAa;AAAA,EAUhC,YAAY,UAAoB,aAAsB,cAA4B;AAFlF,SAAQ,eAAyB,CAAA;AAG/B,SAAK,WAAW;AAChB,SAAK,UAAU,SAAS,WAAA;AACxB,SAAK,cAAc;AAEnB,SAAK,eAAe;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,OAAO,OAAkB;AAC9B,QAAI,KAAK,iBAAiB,KAAK,GAAG;AAChC;AAAA,IACF;AAEA,SAAK,eAAe,CAAA;AAEpB,SAAK,eAAe,KAAK;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,eAAe,OAAwB;AAC5C,QAAI,gBAAgB,KAAK,YAAY,KAAK;AAE1C,QAAI,aAAyB,kBAAkB,KAAK,SAAS,OAAO,MAAM,aAAa;AAEvF,SAAK,gBAAgB,KAAK;AAE1B,UAAM,aAAac,kBAAwB;AAAA,2CACJ,WAAW,UAAU,SAAS,MAAM,IAAI;AAAA,YACvE,gBAAgB,KAAK,wBAAwB,WAAW,UAAU,IAAI,WAAW,eAAe,YAAY,MAAM,SAAS,EAAE,YAAY,WAAW,UAAU,KAAK,KAAK,iBAAiB,KAAK,CAAC,QAAQ;AAAA;AAAA,2CAExK,WAAW,UAAU,IAAI,MAAM,WAAW,aAAa,EAAE,YAAY,WAAW,UAAU;AAAA;AAAA,KAEhI;AAED,QAAI,YAAY;AACd,WAAK,YAAY,OAAO,UAAU;AAClC,WAAK,YAAY,OAAO,UAAU;AAElC,UAAI,MAAM,UAAU;AAClB,aAAK,cAAc,OAAO,UAAU;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AAAA,EAEO,YAAY,OAAkB,SAAwB;AAC3D,UAAM,YAAY,IAAK,MAAM,YAAoB,OAAO,SAAS,KAAK,QAAQ;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,cAAc,OAAkB,kBAAoC;AACzE,QAAI,cAAyB;AAC7B,QAAI,YAAY;AAChB,QAAI,eAAe;AAEnB,QAAI,CAAE,MAAM,YAAoB,oBAAoB;AAClD;AAAA,IACF;AAEA,UAAM,aAAa,SAAS,cAAc,KAAK;AAC/C,eAAW,UAAU,IAAI,UAAU,iBAAiB,iBAAiB,EAAE;AAEvE,QAAI,MAAM;AAEV,eAAW,cAAc,MAAM,UAAU;AACvC,UAAId,QAAc,UAAU,GAAG;AAC7B,cAAM,IAAI,MAAM,kBAAkB,MAAM,UAAU,qBAAqB,GAAG,aAAa,UAAU,GAAG;AAAA,MACtG;AAEA,iBAAW,UAAU;AACrB,QAAE;AAEF,UAAI,KAAK,iBAAiB,UAAU,GAAG;AACrC;AAAA,MACF;AAEA,WAAK,gBAAgB,UAAU;AAE/B,UAAI,WAAW;AACb,sBAAc;AAAA,MAChB;AAEA,UAAI,gBAAgB,KAAK,YAAY,UAAU;AAE/C,UAAI;AAEJ,UAAI,gBAAgB;AACpB,UAAI,eAAe;AACjB,0BAAkB,kBAAkB,KAAK,SAAS,YAAY,aAAa,CAAC,YAAY;AACxF,wBAAgB,eAAe,kCAAkC,gBAAgB,UAAU,YAAY,gBAAgB,UAAU,cAAc;AAAA,MACjJ,OAAO;AACL,0BAAkB,kBAAkB,KAAK,SAAS,YAAY,aAAa,KAAK;AAChF,wBAAgB,yBAAyB,gBAAgB,UAAU,IAAI,gBAAgB,eAAe,YAAY,WAAW,SAAS,EAAE,YAAY,gBAAgB,UAAU,KAAK,KAAK,iBAAiB,UAAU,CAAC;AAAA,MACtN;AAEA,YAAM,eAAec,kBAAwB,6BAA6B,gBAAgB,UAAU,YAAY,gBAAgB,UAAU,SAAS,WAAW,IAAI;AAAA,UAC9J,aAAa;AAAA,0CACmB,gBAAgB,UAAU,IAAI,WAAW,WAAW,aAAa,EAAE,YAAY,gBAAgB,UAAU;AAAA,aACtI;AAEP,UAAI,cAAc;AAChB,aAAK,YAAY,YAAY,YAAY;AACzC,mBAAW,OAAO,YAAY;AAE9B,YAAI,WAAW,UAAU;AACvB,eAAK,cAAc,YAAY,WAAW,WAAW,kBAAkB,gBAAgB;AAAA,QACzF;AAAA,MACF;AACA,UAAI,CAAC,eAAe;AAClB,uBAAe;AAAA,MACjB;AAEA,kBAAY;AAAA,IACd;AAEA,UAAM,UAAU,cAAc,UAAU;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,iBAAiB,OAAkB;AACxC,UAAM,mBAAmB,MAAM,WAAW,mCAAmC;AAC7E,UAAM,kBAAkBb,QAAc,MAAM,OAAO,IAAI,KAAK,2DAA2D,MAAM,OAAO;AAEpI,WAAO,GAAG,MAAM,SAAS,EAAE,IAAI,eAAe,IAAI,gBAAgB;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,YAAY,OAA2B;;AAC5C,aAAO,WAAM,UAAN,mBAAa,cAAaP,YAAkB,MAAM,KAAK;AAAA,EAChE;AAAA,EAEO,iBAAiB,OAAkB;AACxC,QAAI4B,cAAoB,KAAK,GAAG;AAC9B,WAAK,aAAa,SAAS,KAAK;AAChC,YAAM,YAAY,IAAK,MAAM,YAAoB,OAAO,MAAM,KAAK,QAAQ;AAE3E,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,gBAAgB,OAAkB;AACvC,QAAI,CAACrB,QAAc,MAAM,IAAI,KAAK,KAAK,aAAa,aAAa,MAAM,IAAI,GAAG;AAC5E,YAAM,IAAI,MAAM,yBAAyB,MAAM,IAAI,GAAG;AAAA,IACxD;AAEA,SAAK,aAAa,SAAS,KAAK;AAChC,SAAK,aAAa,KAAK,MAAM,IAAI;AAAA,EACnC;AACF;AC3MO,SAAS,gBAAgB,SAAmC;AACjE,QAAM,OAAO,MAAM,IAAI,iBAAiB,OAAO;AAE/C,SAAO;AACT;AAOO,SAAS,kBAAkB,SAAqC;AACrE,oBAAkB,MAAM,IAAI,iBAAiB,OAAO;AACtD;AAEA,IAAI,kBAAkB;AAAA,EACpB,OAAO;AAAA,IACL,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,UAAU;AAAA,EAAA;AAAA,EAEZ,MAAM;AAAA,EACN,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,QAAQ,CAAA;AACV;ACOA,MAAM,cAA2B,CAAA;AAEjC,MAAM,eAAe;AAErB,IAAI,gBAAgB;AAOb,MAAM,YAAN,MAAM,UAAS;AAAA,EAkBpB,YAAY,aAAsB,SAAsBE,UAAmB;AAN3E,SAAQ,YAAiB,CAAA;AAIzB,SAAQ,kBAAwC,CAAA;AAuEhD,SAAO,aAAa,CAAC,SAA0B;AAC7C,WAAK,QAAQ,OAAO;AACpB,WAAK,YAAY,aAAa,gBAAgB,IAAI;AAAA,IACpD;AAKA,SAAO,YAAY,MAAM;AACvB,YAAM,WAAW,KAAK,aAAa,gBAAA;AACnC,iBAAW,OAAO,UAAU;AAC1B,cAAM,YAAY,SAAS,GAAG;AAC9B,cAAM,aAAa,UAAU;AAE7B,YAAI,cAAc,OAAO,WAAW,UAAU,YAAY;AACxD,qBAAW,MAAA;AAAA,QACb;AAAA,MACF;AACA,WAAK,YAAY,CAAA;AACjB,WAAK,eAAA;AAAA,IACP;AAMA,SAAO,aAAa,CAAC,cAAsB;AACzC,WAAK,aAAa,aAAa,SAAS,EAAE,UAAU,MAAA;AACpD,WAAK,UAAU,SAAS,IAAI;AAC5B,WAAK,eAAA;AAAA,IACP;AA4BA,SAAO,gBAAgB,CAAC,cAAsB;AAC5C,YAAM,QAAQ,KAAK,aAAa,aAAa,SAAS;AAEtD,UAAI,OAAO;AACT,eAAO,MAAM,UAAU,SAAA;AAAA,MACzB;AACA,aAAO;AAAA,IACT;AAOA,SAAO,WAAW,CAAC,YAA0B;AAC3C,aAAO,KAAK,aAAa,iBAAiB,KAAK,WAAW,OAAO;AAAA,IACnE;AAEA,SAAO,mBAAmB,CAAC,YAA0B;AACnD,aAAO,KAAK,aAAa,iBAAiB,KAAK,WAAW,OAAO;AAAA,IACnE;AAMA,SAAO,WAAW,CAAC,QAAa,cAAoC;AAClE,UAAI,cAAc,OAAO;AACvB,aAAK,UAAA;AAAA,MACP;AAEA,aAAO,KAAK,MAAM,EAAE,QAAQ,CAAC,cAAc;AACzC,aAAK,eAAe,WAAW,OAAO,SAAS,CAAC;AAAA,MAClD,CAAC;AACD,WAAK,eAAA;AAAA,IACP;AAEA,SAAO,gBAAgB,CAAC,WAAmB,UAAe;AACxD,WAAK,eAAe,WAAW,KAAK;AACpC,WAAK,eAAA;AAAA,IACP;AAWA,SAAO,gBAAgB,CAAC,WAAmB,WAAgB;AACzD,YAAM,QAAQ,KAAK,aAAa,aAAa,SAAS;AAEtD,UAAI,OAAO;AACT,eAAO,MAAM,UAAU,cAAc,MAAM;AAAA,MAC7C;AAAA,IACF;AAOA,SAAO,WAAW,CAAC,UAAqB;AACtC,WAAK,QAAQ,OAAO,KAAK,KAAK;AAC9B,WAAK,aAAa,OAAO,KAAK;AAC9B,WAAK,eAAA;AAAA,IACP;AAOA,SAAO,cAAc,CAAC,cAAsB;AAC1C,YAAM,YAAY,KAAK,aAAa,aAAa,SAAS;AAE1D,UAAI,CAAC,UAAW;AAEhB,YAAM,eAAe,KAAK,gBAAgB,SAAS;AAEnD,mBAAa,QAAQ,CAAC,gBAAgB;AACpC,aAAK,gBAAgB,WAAW;AAAA,MAClC,CAAC;AAED,WAAK,mBAAmB,SAAS;AACjC,WAAK,uBAAuB,SAAS;AAErC,mBAAa,QAAQ,CAAC,gBAAgB;AACpC,aAAK,aAAa,qBAAqB,YAAY,IAAI;AAAA,MACzD,CAAC;AAED,WAAK,eAAA;AAAA,IACP;AA8GA,SAAO,cAAc,MAAe;AAClC,YAAM,SAAS,KAAK,UAAA;AAEpB,aAAO,OAAO,SAAS;AAAA,IACzB;AAOA,SAAO,YAAY,MAAa;AAC9B,UAAI,cAAc,CAAA;AAClB,UAAI,gBAAgB,KAAK,QAAQ,cAAc;AAC/C,UAAI,YAAY;AAEhB,YAAM,WAAW,KAAK,aAAa,gBAAA;AACnC,iBAAW,YAAY,UAAU;AAC/B,cAAM,YAAY,SAAS,QAAQ;AAEnC,YAAI,aAAa,KAAK,aAAa,mBAAmB,WAAW,aAAa;AAE9E,YAAI,eAAe,MAAM;AACvB,0BAAgB;AAEhB,cAAIoB,WAAiB,SAAS,GAAG;AAC/B,0BAAc,YAAY,OAAO,UAAU;AAAA,UAC7C,OAAO;AACL,gBAAI,WAAW;AACb,mBAAK,cAAc,SAAS;AAC5B,0BAAY;AAAA,YACd;AACA,wBAAY,KAAK,UAAU;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAWA,SAAO,eAAe,CAAC,cAA+B;AACpD,YAAM,YAAY,KAAK,aAAa,aAAa,SAAS;AAE1D,UAAI7B,YAAkB,SAAS,GAAG;AAChC,cAAM,IAAI,MAAM,eAAe,SAAS,aAAa;AAAA,MACvD;AAEA,YAAM,aAAa,UAAU;AAC7B,UAAI,YAAY;AACd,eAAO,WAAW,YAAY;AAAA,MAChC;AAEA,aAAO;AAAA,IACT;AAKA,SAAO,aAAa,MAAM;AACxB,aAAO,KAAK;AAAA,IACd;AAeA,SAAO,YAAY,CAAC,aAA8C;AAChE,WAAK,gBAAgB,KAAK,QAAQ;AAElC,aAAO,MAAM;AACX,aAAK,kBAAkB,KAAK,gBAAgB,OAAO,CAAC,MAAM,MAAM,QAAQ;AAAA,MAC1E;AAAA,IACF;AA0BA,SAAO,UAAU,MAAM;AACrB,WAAK,YAAY,YAAY,KAAK;AAClC,WAAK,YAAY,gBAAA;AAEjB,iBAAW,OAAO,MAAM;AACtB,YAAI8B,WAAiB,MAAM,GAAG,GAAG;AAC/B,iBAAO,KAAK,GAAG;AACf,iBAAO,YAAY,KAAK,QAAQ;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAsCA,SAAO,YAAY,MAAa;AAC9B,aAAO,KAAK,QAAQ;AAAA,IACtB;AAMA,SAAO,YAAY,CAAC,WAAkB;AACpC,WAAK,QAAQ,SAAS;AACtB,WAAK,WAAW,MAAM;AAAA,IACxB;AAzfE,SAAK,UAAU,gBAAgB,OAAO;AAEtCpB,eAAS,IAAID,QAAO;AAEpB,QAAI,aAAa;AACf,WAAK,sBAAsB,YAAY;AACvC,kBAAY,UAAU,IAAI,aAAa;AAEvC,WAAK,WAAW,MAAM,EAAE,aAAa;AACrC,kBAAY,aAAa,QAAQ,KAAK,QAAQ;AAC9C,kBAAY,aAAa,cAAc,KAAK,QAAQ;AAEpD,UAAI,KAAK,QAAQ,MAAM,OAAO;AAC5B,oBAAY,aAAa,SAAS,SAAS,KAAK,QAAQ,MAAM,KAAK,GAAG;AAAA,MACxE;AAEA,WAAK,cAAc;AACnB,WAAK,WAAW,KAAK,QAAQ,QAAQ,KAAK;AAC1C,WAAK,WAAW,KAAK,QAAQ,MAAM;AAEnC,UAAI,KAAK,QAAQ,eAAe,OAAO;AACrC,oBAAY,KAAK,QAAQ,IAAI;AAAA,MAC/B;AAAA,IACF,OAAO;AACL,YAAM,IAAI,MAAM,GAAG,WAAW,0BAA0B;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,OAAc,OAAO,aAAsB,SAAsBA,UAA6B;AAC5F,WAAO,IAAI,UAAS,aAAa,SAASA,QAAO;AAAA,EACnD;AAAA,EAEA,OAAc,WAAWA,UAAwB;AAC/CC,eAAS,IAAID,QAAO;AAAA,EACtB;AAAA,EAEA,OAAc,kBAAkB,SAAsBA,UAAyB;AAC7E,sBAAkB,OAAO;AAEzB,QAAIA,UAAS;AACXC,iBAAS,IAAID,QAAO;AAAA,IACtB;AAAA,EACF;AAAA,EAEQ,WAAW,QAAqB;AACtC,SAAK,eAAe,IAAI,aAAa,KAAK,UAAU,IAAI;AAExD,SAAK,eAAe,IAAI,aAAa,MAAM,KAAK,aAAa,KAAK,YAAY;AAE9E,QAAI,KAAK,QAAQ,eAAe,OAAO;AACrC;AAAA,IACF;AAEA,WAAO,QAAQ,CAAC,UAAU;AACxB,WAAK,aAAa,OAAO,KAAK;AAAA,IAChC,CAAC;AACD,SAAK,eAAA;AAEL,QAAI,KAAK,QAAQ,WAAW;AAC1B,WAAK,QAAQ,UAAU,KAAK,IAAI;AAAA,IAClC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6CO,gBAAgB,WAAmB;AACxC,UAAM,QAAQ,KAAK,aAAa,aAAa,SAAS;AAEtD,QAAI,+BAAO,WAAW;AACpB,aAAO,MAAM,UAAU,WAAA;AAAA,IACzB;AAEA,WAAO;AAAA,EACT;AAAA,EAEO,SAAS,WAA8B;AAC5C,WAAO,KAAK,aAAa,aAAa,SAAS;AAAA,EACjD;AAAA,EAkDQ,eAAe,WAAmB,OAAY;AACpD,SAAK,UAAU,SAAS,IAAI;AAC5B,UAAM,YAAY,KAAK,aAAa,aAAa,SAAS;AAE1D,QAAI,WAAW;AACb,gBAAU,UAAU,SAAS,KAAK;AAAA,IACpC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuDQ,gBAAgB,WAAsB,SAAsB,IAAiB;;AACnF,WAAO,KAAK,SAAS;AAErB,oBAAU,aAAV,mBAAoB,QAAQ,CAAC,eAAe;AAC1C,UAAI,cAAc,KAAK,aAAa,IAAI,WAAW,IAAI,MAAM,YAAY;AACvE,aAAK,gBAAgB,YAAY,MAAM;AAAA,MACzC;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,mBAAmB,WAAsB;;AAC/C,UAAM,cAAc,UAAU;AAG9B,QAAI,eAAekB,UAAgB,WAAW,GAAG;AAC/C,YAAM,aAAa,YAAY,UAAU,WAAA;AACzC,YAAM,UAAU,WAAW,cAAc,iBAAiB,UAAU,IAAI,IAAI;AAC5E,YAAM,aAAa,mCAAS,UAAU,SAAS;AAE/C,yCAAS;AACT,uBAAW,cAAc,kBAAkB,UAAU,IAAI,IAAI,MAA7D,mBAAgE;AAEhE,YAAM,eAAe,WAAW,cAAc,6BAA6B;AAC3E,UAAI,cAAc,cAAc;AAC9B,oBAAY,UAAU,UAAU,aAAa,aAAa,aAAa,KAAK,EAAE;AAAA,MAChF;AACA;AAAA,IACF;AAGA,UAAM,cAAc,QAAQ,UAAU,IAAI;AAC1C,QAAI,WAAU,eAAU,cAAV,mBAAqB;AAGnC,QAAI,mBAAmB,YAAY,mBAAmB,gBAAgB;AACpE,gBAAU,QAAQ,CAAC,KAAK;AAAA,IAC1B;AAEA,UAAM,cAAc,mBAAmB,UAAU,QAAQ,QAAQ,WAAW,IAAI,SAAS,KAAK,YAAY,cAAc,WAAW;AACnI,UAAM,mBAAmB,yCAAY;AAErC,6CAAY;AAGZ,QAAI,gBAAe,qDAAkB,UAAU,SAAS,cAAa,iBAAiB,oBAAoB,GAAG;AAC3G,uBAAiB,OAAA;AAAA,IACnB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,uBAAuB,WAAsB;AACnD,UAAM,SAAkC,UAAU,UAAU,UAAU,QAAQ,WAAW,KAAK,QAAQ;AACtG,UAAM,MAAM,SAAS,OAAO,QAAQ,SAAS,IAAI;AAEjD,QAAI,MAAM,IAAI;AACZ,uCAAQ,OAAO,KAAK;AAAA,IACtB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,gBAAgB,WAAsB;AAC5C,UAAM,OAAO,CAAC,UAAU,MAAM,UAAU,UAAU;AAElD,QAAI,UAAU,eAAe,QAAQ;AACnC,WAAK,KAAK,UAAU,aAAa,WAAW;AAAA,IAC9C,WAAWA,UAAgB,SAAS,GAAG;AACrC,WAAK,KAAK,GAAG,OAAO,KAAK,UAAU,UAAU,cAAc,CAAA,CAAE,CAAC;AAAA,IAChE;AAGA,QAAI,UAAU,UAAU;AACtB,WAAK,KAAK,GAAG,OAAO,KAAK,UAAU,SAAS,SAAS,KAAK,KAAK,CAAA,CAAE,CAAC;AAAA,IACpE;AAEA,SAAK,QAAQ,CAAC,QAAQ;AACpB,UAAI,CAACpB,QAAc,GAAG,EAAG,QAAO,KAAK,UAAU,GAAG;AAAA,IACpD,CAAC;AAAA,EACH;AAAA,EA+CQ,cAAc,WAAsB;AAC1C,QAAI,UAAU,SAAS;AACrB,UAAI,UAAU,QAAQ,cAAc,OAAO;AACzC,kBAAU,QAAQ,UAAU,UAAU,UAAU,IAAI;AAAA,MACtD;AACA,WAAK,cAAc,UAAU,OAAO;AAAA,IACtC;AAAA,EACF;AAAA,EAwBO,iBAAiB;AACtB,SAAK,aAAa,eAAA;AAClB,SAAK,aAAA;AAAA,EACP;AAAA,EAkBQ,eAAe;AACrB,QAAI,KAAK,gBAAgB,SAAS,EAAG;AAErC,UAAM,QAAyB,EAAE,MAAM,KAAA;AACvC,SAAK,gBAAgB,QAAQ,CAAC,aAAa,SAAS,KAAK,CAAC;AAAA,EAC5D;AAAA,EAEO,iBAAiB,WAAmB,MAAe;AACxD,UAAM,YAAY,KAAK,aAAa,aAAa,SAAS;AAC1D,cAAU,UAAU,YAAY,IAAI;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,oBAAoB,WAAmB,MAAc;AAC1D,UAAM,YAAY,KAAK,aAAa,aAAa,SAAS;AAC1D,cAAU,UAAU,eAAe,IAAI;AAAA,EACzC;AAAA,EA2BA,OAAc,SAAS,KAAuB;AAC5C,QAAI;AACJ,QAAIL,SAAe,GAAG,GAAG;AACvB,gBAAU,SAAS,cAAc,GAAG;AAAA,IACtC,OAAO;AACL,gBAAU;AAAA,IACZ;AACA,cAAU;AACV,QAAI,WAAW,QAAQ,aAAa,YAAY;AAEhD,QAAIF,YAAkB,QAAQ,KAAKO,QAAc,QAAQ,GAAG;AAC1D,YAAM,OAAO,OAAO,KAAK,WAAW;AACpC,UAAI,KAAK,SAAS,GAAG;AACnB,cAAM,IAAI,MAAM,qBAAqB,QAAQ,GAAG;AAAA,MAClD;AACA,iBAAW,KAAK,CAAC;AAEjB,aAAO,YAAY,QAAQ;AAAA,IAC7B;AAAA,EACF;AAAA,EAiBO,kBAAkB;AACvB,WAAO,KAAK;AAAA,EACd;AACF;AAhhBE,UAAc,UAAU,GAAG,QAAW;AA4dtC,UAAc,YAAY;AAAA,EACxB,QAAQ,CAAC,OAAe,UAAqB;AAC3C,WAAO,gBAAgB,OAAO,KAAK;AAAA,EACrC;AAAA,EACA,QAAQ,CAAC,OAAe,UAAqB;AAC3C,WAAO,gBAAgB,OAAO,KAAK;AAAA,EACrC;AAAA,EACA,QAAQ,CAAC,OAAe,UAAqB;AAC3C,QAAI,SAAsB,EAAE,MAAM,MAAM,MAAM,YAAY,GAAC;AAC3D,WAAO,gBAAgB,OAAO,OAAO,MAAM;AAAA,EAC7C;AAAA;AAveG,IAAM,WAAN;","x_google_ignoreList":[23]}
|