@revolist/revogrid 4.15.8 → 4.17.0
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/dist/cjs/app-globals-D67EXhgK.js +16 -0
- package/dist/cjs/app-globals-D67EXhgK.js.map +1 -0
- package/dist/cjs/{cell-renderer-gKKPQydp.js → cell-renderer-TmNnqu7r.js} +5 -5
- package/dist/cjs/{cell-renderer-gKKPQydp.js.map → cell-renderer-TmNnqu7r.js.map} +1 -1
- package/dist/cjs/{column.drag.plugin-BLEVnKq2.js → column.drag.plugin-pCfjUQwZ.js} +13 -13
- package/dist/cjs/column.drag.plugin-pCfjUQwZ.js.map +1 -0
- package/dist/cjs/{column.service-4sCp7eeo.js → column.service-euEyR799.js} +4 -4
- package/dist/cjs/{column.service-4sCp7eeo.js.map → column.service-euEyR799.js.map} +1 -1
- package/dist/cjs/{dimension.helpers-BkBZe8LC.js → dimension.helpers-C5PvAWJW.js} +24 -8
- package/dist/cjs/dimension.helpers-C5PvAWJW.js.map +1 -0
- package/dist/cjs/{edit.utils-Cm1q98yQ.js → edit.utils-T20rr-g4.js} +3 -3
- package/dist/cjs/{edit.utils-Cm1q98yQ.js.map → edit.utils-T20rr-g4.js.map} +1 -1
- package/dist/cjs/{filter.button-BzIcr9jo.js → filter.button-DSsWNs23.js} +3 -3
- package/dist/cjs/{filter.button-BzIcr9jo.js.map → filter.button-DSsWNs23.js.map} +1 -1
- package/dist/cjs/{header-cell-renderer-DxeLS5ru.js → header-cell-renderer-BwHvC5YY.js} +6 -6
- package/dist/cjs/header-cell-renderer-BwHvC5YY.js.map +1 -0
- package/dist/cjs/{index-BhCC1iOP.js → index-BF1c1pO3.js} +235 -142
- package/dist/cjs/index-BF1c1pO3.js.map +1 -0
- package/dist/cjs/index.cjs.js +10 -10
- package/dist/cjs/loader.cjs.js +3 -3
- package/dist/cjs/revo-grid.cjs.entry.js +131 -10
- package/dist/cjs/revo-grid.cjs.entry.js.map +1 -1
- package/dist/cjs/revo-grid.cjs.js +4 -4
- package/dist/cjs/revo-grid.cjs.js.map +1 -1
- package/dist/cjs/revo-grid.entry.cjs.js.map +1 -1
- package/dist/cjs/revogr-attribution.revogr-extra.revogr-focus.revogr-overlay-selection.revogr-row-headers.revogr-scroll-virtual.revogr-temp-range.entry.cjs.js.map +1 -1
- package/dist/cjs/revogr-attribution_7.cjs.entry.js +10 -10
- package/dist/cjs/revogr-attribution_7.cjs.entry.js.map +1 -1
- package/dist/cjs/revogr-clipboard.revogr-edit.revogr-order-editor.entry.cjs.js.map +1 -1
- package/dist/cjs/revogr-clipboard_3.cjs.entry.js +5 -5
- package/dist/cjs/revogr-clipboard_3.cjs.entry.js.map +1 -1
- package/dist/cjs/revogr-data.revogr-header.revogr-viewport-scroll.vnode-html.entry.cjs.js.map +1 -1
- package/dist/cjs/revogr-data_4.cjs.entry.js +10 -10
- package/dist/cjs/revogr-data_4.cjs.entry.js.map +1 -1
- package/dist/cjs/revogr-filter-panel.cjs.entry.js +3 -3
- package/dist/cjs/revogr-filter-panel.cjs.entry.js.map +1 -1
- package/dist/cjs/revogr-filter-panel.entry.cjs.js.map +1 -1
- package/dist/cjs/{text-editor-B5IE6-OF.js → text-editor-C6fUGszl.js} +4 -4
- package/dist/cjs/{text-editor-B5IE6-OF.js.map → text-editor-C6fUGszl.js.map} +1 -1
- package/dist/cjs/{throttle-Di3NgUGJ.js → throttle-BBq2OiCM.js} +3 -3
- package/dist/cjs/{throttle-Di3NgUGJ.js.map → throttle-BBq2OiCM.js.map} +1 -1
- package/dist/cjs/{viewport.store-ByEARtJ-.js → viewport.store-BQqAGkuJ.js} +3 -3
- package/dist/cjs/{viewport.store-ByEARtJ-.js.map → viewport.store-BQqAGkuJ.js.map} +1 -1
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/data/revogr-data-style.css +0 -72
- package/dist/collection/components/editors/revogr-edit-style.css +0 -72
- package/dist/collection/components/header/resizable.element.js +2 -2
- package/dist/collection/components/header/resizable.element.js.map +1 -1
- package/dist/collection/components/header/revogr-header-style.css +0 -72
- package/dist/collection/components/overlay/revogr-overlay-style.css +0 -72
- package/dist/collection/components/revoGrid/revo-grid-style.css +120 -72
- package/dist/collection/components/revoGrid/revo-grid.js +43 -1
- package/dist/collection/components/revoGrid/revo-grid.js.map +1 -1
- package/dist/collection/components/scroll/revogr-viewport-scroll-style.css +0 -72
- package/dist/collection/components/scrollable/revogr-scroll-style.css +0 -72
- package/dist/collection/components/selectionFocus/revogr-focus-style.css +0 -72
- package/dist/collection/components/selectionTempRange/revogr-temp-range-style.css +0 -72
- package/dist/collection/global/global.js +13 -11
- package/dist/collection/global/global.js.map +1 -1
- package/dist/collection/plugins/filter/filter.style.css +0 -72
- package/dist/collection/plugins/rtl/rtl.plugin.js +110 -0
- package/dist/collection/plugins/rtl/rtl.plugin.js.map +1 -0
- package/dist/collection/plugins/sorting/sorting.func.js +2 -2
- package/dist/collection/plugins/sorting/sorting.func.js.map +1 -1
- package/dist/collection/plugins/sorting/sorting.plugin.js +3 -3
- package/dist/collection/plugins/sorting/sorting.plugin.js.map +1 -1
- package/dist/collection/plugins/wcag/index.js +0 -1
- package/dist/collection/plugins/wcag/index.js.map +1 -1
- package/dist/collection/serve/controller.js +6 -0
- package/dist/esm/app-globals-C3ZHKjnB.js +14 -0
- package/dist/esm/app-globals-C3ZHKjnB.js.map +1 -0
- package/dist/{revo-grid/cell-renderer-Au9c5t1A.js → esm/cell-renderer-AeQIe3qD.js} +5 -5
- package/dist/{revo-grid/cell-renderer-Au9c5t1A.js.map → esm/cell-renderer-AeQIe3qD.js.map} +1 -1
- package/dist/esm/{column.drag.plugin-DaX9csvk.js → column.drag.plugin-Dc7h1kmS.js} +13 -13
- package/dist/esm/column.drag.plugin-Dc7h1kmS.js.map +1 -0
- package/dist/esm/{column.service-DbHXbcUh.js → column.service-DyqJ8oYq.js} +4 -4
- package/dist/{revo-grid/column.service-DbHXbcUh.js.map → esm/column.service-DyqJ8oYq.js.map} +1 -1
- package/dist/{revo-grid/dimension.helpers-CIkQtDh8.js → esm/dimension.helpers-D5lwLPzd.js} +24 -8
- package/dist/{revo-grid/dimension.helpers-CIkQtDh8.js.map → esm/dimension.helpers-D5lwLPzd.js.map} +1 -1
- package/dist/esm/{edit.utils-Jiu7iP-o.js → edit.utils-B6bLKSQh.js} +3 -3
- package/dist/esm/{edit.utils-Jiu7iP-o.js.map → edit.utils-B6bLKSQh.js.map} +1 -1
- package/dist/{revo-grid/filter.button-C1OKk3HF.js → esm/filter.button-DmOE7VCJ.js} +3 -3
- package/dist/esm/{filter.button-C1OKk3HF.js.map → filter.button-DmOE7VCJ.js.map} +1 -1
- package/dist/{revo-grid/header-cell-renderer-DDWCNPBU.js → esm/header-cell-renderer-XxSVxgM5.js} +6 -6
- package/dist/esm/header-cell-renderer-XxSVxgM5.js.map +1 -0
- package/dist/esm/{index-InvwFkCn.js → index-Dyptvvxf.js} +216 -141
- package/dist/esm/index-Dyptvvxf.js.map +1 -0
- package/dist/esm/index.js +11 -11
- package/dist/esm/loader.js +4 -4
- package/dist/esm/revo-grid.entry.js +131 -10
- package/dist/esm/revo-grid.entry.js.map +1 -1
- package/dist/esm/revo-grid.js +5 -5
- package/dist/esm/revo-grid.js.map +1 -1
- package/dist/esm/revogr-attribution.revogr-extra.revogr-focus.revogr-overlay-selection.revogr-row-headers.revogr-scroll-virtual.revogr-temp-range.entry.js.map +1 -1
- package/dist/esm/revogr-attribution_7.entry.js +10 -10
- package/dist/esm/revogr-attribution_7.entry.js.map +1 -1
- package/dist/esm/revogr-clipboard.revogr-edit.revogr-order-editor.entry.js.map +1 -1
- package/dist/esm/revogr-clipboard_3.entry.js +5 -5
- package/dist/esm/revogr-clipboard_3.entry.js.map +1 -1
- package/dist/esm/revogr-data.revogr-header.revogr-viewport-scroll.vnode-html.entry.js.map +1 -1
- package/dist/esm/revogr-data_4.entry.js +10 -10
- package/dist/esm/revogr-data_4.entry.js.map +1 -1
- package/dist/esm/revogr-filter-panel.entry.js +3 -3
- package/dist/esm/revogr-filter-panel.entry.js.map +1 -1
- package/dist/esm/{text-editor-TzgTBSOe.js → text-editor-DlCRmV75.js} +4 -4
- package/dist/esm/{text-editor-TzgTBSOe.js.map → text-editor-DlCRmV75.js.map} +1 -1
- package/dist/esm/{throttle-BIDp67oD.js → throttle-DcjZyclk.js} +3 -3
- package/dist/{revo-grid/throttle-BIDp67oD.js.map → esm/throttle-DcjZyclk.js.map} +1 -1
- package/dist/{revo-grid/viewport.store-BLEwT0jy.js → esm/viewport.store-2mQugd8S.js} +3 -3
- package/dist/{revo-grid/viewport.store-BLEwT0jy.js.map → esm/viewport.store-2mQugd8S.js.map} +1 -1
- package/dist/revo-grid/app-globals-C3ZHKjnB.js +14 -0
- package/dist/revo-grid/app-globals-C3ZHKjnB.js.map +1 -0
- package/dist/{esm/cell-renderer-Au9c5t1A.js → revo-grid/cell-renderer-AeQIe3qD.js} +5 -5
- package/dist/{esm/cell-renderer-Au9c5t1A.js.map → revo-grid/cell-renderer-AeQIe3qD.js.map} +1 -1
- package/dist/revo-grid/{column.drag.plugin-DaX9csvk.js → column.drag.plugin-Dc7h1kmS.js} +13 -13
- package/dist/revo-grid/column.drag.plugin-Dc7h1kmS.js.map +1 -0
- package/dist/revo-grid/{column.service-DbHXbcUh.js → column.service-DyqJ8oYq.js} +4 -4
- package/dist/{esm/column.service-DbHXbcUh.js.map → revo-grid/column.service-DyqJ8oYq.js.map} +1 -1
- package/dist/{esm/dimension.helpers-CIkQtDh8.js → revo-grid/dimension.helpers-D5lwLPzd.js} +24 -8
- package/dist/{esm/dimension.helpers-CIkQtDh8.js.map → revo-grid/dimension.helpers-D5lwLPzd.js.map} +1 -1
- package/dist/revo-grid/{edit.utils-Jiu7iP-o.js → edit.utils-B6bLKSQh.js} +3 -3
- package/dist/revo-grid/{edit.utils-Jiu7iP-o.js.map → edit.utils-B6bLKSQh.js.map} +1 -1
- package/dist/{esm/filter.button-C1OKk3HF.js → revo-grid/filter.button-DmOE7VCJ.js} +3 -3
- package/dist/revo-grid/{filter.button-C1OKk3HF.js.map → filter.button-DmOE7VCJ.js.map} +1 -1
- package/dist/{esm/header-cell-renderer-DDWCNPBU.js → revo-grid/header-cell-renderer-XxSVxgM5.js} +6 -6
- package/dist/revo-grid/header-cell-renderer-XxSVxgM5.js.map +1 -0
- package/dist/revo-grid/{index-InvwFkCn.js → index-Dyptvvxf.js} +216 -141
- package/dist/revo-grid/index-Dyptvvxf.js.map +1 -0
- package/dist/revo-grid/index.esm.js +11 -11
- package/dist/revo-grid/revo-grid.entry.esm.js.map +1 -1
- package/dist/revo-grid/revo-grid.entry.js +131 -10
- package/dist/revo-grid/revo-grid.entry.js.map +1 -1
- package/dist/revo-grid/revo-grid.esm.js +5 -5
- package/dist/revo-grid/revo-grid.esm.js.map +1 -1
- package/dist/revo-grid/revogr-attribution.revogr-extra.revogr-focus.revogr-overlay-selection.revogr-row-headers.revogr-scroll-virtual.revogr-temp-range.entry.esm.js.map +1 -1
- package/dist/revo-grid/revogr-attribution_7.entry.js +10 -10
- package/dist/revo-grid/revogr-attribution_7.entry.js.map +1 -1
- package/dist/revo-grid/revogr-clipboard.revogr-edit.revogr-order-editor.entry.esm.js.map +1 -1
- package/dist/revo-grid/revogr-clipboard_3.entry.js +5 -5
- package/dist/revo-grid/revogr-clipboard_3.entry.js.map +1 -1
- package/dist/revo-grid/revogr-data.revogr-header.revogr-viewport-scroll.vnode-html.entry.esm.js.map +1 -1
- package/dist/revo-grid/revogr-data_4.entry.js +10 -10
- package/dist/revo-grid/revogr-data_4.entry.js.map +1 -1
- package/dist/revo-grid/revogr-filter-panel.entry.esm.js.map +1 -1
- package/dist/revo-grid/revogr-filter-panel.entry.js +3 -3
- package/dist/revo-grid/revogr-filter-panel.entry.js.map +1 -1
- package/dist/revo-grid/{text-editor-TzgTBSOe.js → text-editor-DlCRmV75.js} +4 -4
- package/dist/revo-grid/{text-editor-TzgTBSOe.js.map → text-editor-DlCRmV75.js.map} +1 -1
- package/dist/revo-grid/{throttle-BIDp67oD.js → throttle-DcjZyclk.js} +3 -3
- package/dist/{esm/throttle-BIDp67oD.js.map → revo-grid/throttle-DcjZyclk.js.map} +1 -1
- package/dist/{esm/viewport.store-BLEwT0jy.js → revo-grid/viewport.store-2mQugd8S.js} +3 -3
- package/dist/{esm/viewport.store-BLEwT0jy.js.map → revo-grid/viewport.store-2mQugd8S.js.map} +1 -1
- package/dist/types/components/revoGrid/revo-grid.d.ts +9 -0
- package/dist/types/components.d.ts +118 -0
- package/dist/types/global/global.d.ts +1 -1
- package/dist/types/plugins/rtl/rtl.plugin.d.ts +37 -0
- package/dist/types/stencil-public-runtime.d.ts +32 -6
- package/hydrate/index.d.ts +26 -24
- package/hydrate/index.js +490 -185
- package/hydrate/index.mjs +490 -185
- package/package.json +4 -4
- package/readme.md +2 -0
- package/standalone/data.store.js +21 -5
- package/standalone/data.store.js.map +1 -1
- package/standalone/index.js +18 -12
- package/standalone/index.js.map +1 -1
- package/standalone/revo-grid.js +132 -9
- package/standalone/revo-grid.js.map +1 -1
- package/standalone/revogr-attribution2.js +1 -1
- package/standalone/revogr-data2.js +2 -2
- package/standalone/revogr-data2.js.map +1 -1
- package/standalone/revogr-edit2.js +2 -2
- package/standalone/revogr-edit2.js.map +1 -1
- package/standalone/revogr-extra2.js +1 -1
- package/standalone/revogr-filter-panel.js +2 -2
- package/standalone/revogr-filter-panel.js.map +1 -1
- package/standalone/revogr-focus2.js +2 -2
- package/standalone/revogr-focus2.js.map +1 -1
- package/standalone/revogr-header2.js +4 -4
- package/standalone/revogr-header2.js.map +1 -1
- package/standalone/revogr-overlay-selection2.js +2 -2
- package/standalone/revogr-overlay-selection2.js.map +1 -1
- package/standalone/revogr-row-headers2.js +1 -1
- package/standalone/revogr-scroll-virtual2.js +2 -2
- package/standalone/revogr-scroll-virtual2.js.map +1 -1
- package/standalone/revogr-temp-range2.js +2 -2
- package/standalone/revogr-temp-range2.js.map +1 -1
- package/standalone/revogr-viewport-scroll2.js +2 -2
- package/standalone/revogr-viewport-scroll2.js.map +1 -1
- package/standalone/vnode-converter.js +1 -1
- package/dist/cjs/app-globals-C25fRAbf.js +0 -15
- package/dist/cjs/app-globals-C25fRAbf.js.map +0 -1
- package/dist/cjs/column.drag.plugin-BLEVnKq2.js.map +0 -1
- package/dist/cjs/dimension.helpers-BkBZe8LC.js.map +0 -1
- package/dist/cjs/header-cell-renderer-DxeLS5ru.js.map +0 -1
- package/dist/cjs/index-BhCC1iOP.js.map +0 -1
- package/dist/esm/app-globals-CKsR1AEW.js +0 -13
- package/dist/esm/app-globals-CKsR1AEW.js.map +0 -1
- package/dist/esm/column.drag.plugin-DaX9csvk.js.map +0 -1
- package/dist/esm/header-cell-renderer-DDWCNPBU.js.map +0 -1
- package/dist/esm/index-InvwFkCn.js.map +0 -1
- package/dist/revo-grid/app-globals-CKsR1AEW.js +0 -13
- package/dist/revo-grid/app-globals-CKsR1AEW.js.map +0 -1
- package/dist/revo-grid/column.drag.plugin-DaX9csvk.js.map +0 -1
- package/dist/revo-grid/header-cell-renderer-DDWCNPBU.js.map +0 -1
- package/dist/revo-grid/index-InvwFkCn.js.map +0 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Built by Revolist OU ❤️
|
|
3
|
+
*/
|
|
4
|
+
'use strict';
|
|
5
|
+
|
|
6
|
+
require('./index-BF1c1pO3.js');
|
|
7
|
+
|
|
8
|
+
function appGlobalScript () {
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const globalScripts = appGlobalScript;
|
|
12
|
+
|
|
13
|
+
exports.globalScripts = globalScripts;
|
|
14
|
+
//# sourceMappingURL=app-globals-D67EXhgK.js.map
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=app-globals-D67EXhgK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-globals-D67EXhgK.js","sources":["src/global/global.ts","@stencil/core/internal/app-globals"],"sourcesContent":["import { setMode } from '@stencil/core';\nimport { getTheme } from '../themeManager/theme.service';\n\nexport default function() {\n setMode(elm => {\n let theme = (elm as HTMLRevoGridElement).theme || elm.getAttribute('theme');\n if (typeof theme === 'string') {\n theme = theme.trim();\n }\n\n const parsedTheme = getTheme(theme);\n if (parsedTheme !== theme) {\n elm.setAttribute('theme', parsedTheme);\n }\n return parsedTheme;\n });\n}\n","import appGlobalScript from '/home/runner/work/revogrid/revogrid/src/global/global.ts';\nexport const globalScripts = appGlobalScript;\nexport const globalStyles = \"\";\n"],"names":[],"mappings":";;;;;;;AAGc,wBAAA,IAAA;AAad;;ACfY,MAAC,aAAa,GAAG;;;;"}
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
*/
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
|
-
var index = require('./index-
|
|
7
|
-
var dimension_helpers = require('./dimension.helpers-
|
|
8
|
-
var column_service = require('./column.service-
|
|
6
|
+
var index = require('./index-BF1c1pO3.js');
|
|
7
|
+
var dimension_helpers = require('./dimension.helpers-C5PvAWJW.js');
|
|
8
|
+
var column_service = require('./column.service-euEyR799.js');
|
|
9
9
|
|
|
10
10
|
const SortingSign = ({ column }) => {
|
|
11
11
|
var _a;
|
|
@@ -101,6 +101,6 @@ exports.RowRenderer = RowRenderer;
|
|
|
101
101
|
exports.SortingSign = SortingSign;
|
|
102
102
|
exports.expandEvent = expandEvent;
|
|
103
103
|
exports.expandSvgIconVNode = expandSvgIconVNode;
|
|
104
|
-
//# sourceMappingURL=cell-renderer-
|
|
104
|
+
//# sourceMappingURL=cell-renderer-TmNnqu7r.js.map
|
|
105
105
|
|
|
106
|
-
//# sourceMappingURL=cell-renderer-
|
|
106
|
+
//# sourceMappingURL=cell-renderer-TmNnqu7r.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cell-renderer-
|
|
1
|
+
{"version":3,"file":"cell-renderer-TmNnqu7r.js","sources":["src/plugins/sorting/sorting.sign.tsx","src/components/data/row-renderer.tsx","src/plugins/groupingRow/grouping.row.renderer.tsx","src/components/data/cell-renderer.tsx"],"sourcesContent":["import { h } from '@stencil/core';\nimport { ColumnRegular } from '@type';\n\ntype Props = {\n column: ColumnRegular;\n};\nexport const SortingSign = ({ column }: Props) => {\n return <i class={column?.order ?? 'sort-off'} />;\n};\n","import { h, type VNode } from '@stencil/core';\nimport { JSXBase } from '@stencil/core/internal';\nimport { DATA_ROW } from '../../utils/consts';\n\nexport interface RowProps extends JSXBase.HTMLAttributes {\n size: number;\n start: number;\n index: number;\n rowClass?: string;\n depth?: number;\n}\n\nexport const PADDING_DEPTH = 10;\n\nconst RowRenderer = ({ rowClass, index, size, start, depth }: RowProps, cells: VNode[]) => {\n const props = {\n ...{ [DATA_ROW]: index },\n };\n return (\n <div\n {...props}\n class={`rgRow ${rowClass || ''}`}\n style={{\n height: `${size}px`,\n transform: `translateY(${start}px)`,\n paddingLeft: depth ? `${PADDING_DEPTH * depth}px` : undefined,\n }}\n >\n {cells}\n </div>\n );\n};\n\nexport default RowRenderer;\n","import { h } from '@stencil/core';\nimport RowRenderer from '../../components/data/row-renderer';\nimport {\n GROUP_DEPTH,\n GROUP_EXPANDED,\n GROUP_EXPAND_BTN,\n PSEUDO_GROUP_ITEM,\n GROUP_EXPAND_EVENT,\n} from './grouping.const';\nimport type { RowGroupingProps } from './grouping.row.types';\nimport type { DataType } from '@type';\n\nexport function expandEvent(\n e: MouseEvent,\n model: DataType,\n virtualIndex: number,\n) {\n const event = new CustomEvent(GROUP_EXPAND_EVENT, {\n detail: {\n model,\n virtualIndex,\n },\n cancelable: true,\n bubbles: true,\n }) as CustomEvent<HTMLRevoGridElementEventMap['groupexpandclick']>;\n e.target?.dispatchEvent(event);\n}\n\nexport const GroupingRowRenderer = (props: RowGroupingProps) => {\n const { model, itemIndex, hasExpand, groupingCustomRenderer } = props;\n const name = model[PSEUDO_GROUP_ITEM];\n const expanded = model[GROUP_EXPANDED];\n const depth = parseInt(model[GROUP_DEPTH], 10) || 0;\n\n if (groupingCustomRenderer) {\n return (\n <RowRenderer {...props} rowClass=\"groupingRow\" depth={depth}>\n <div onClick={e => expandEvent(e, model, itemIndex)}>\n {groupingCustomRenderer(h, {\n ...props,\n colType: props.providers.colType,\n name,\n expanded,\n depth,\n })}\n </div>\n </RowRenderer>\n );\n }\n\n return (\n <RowRenderer {...props} rowClass=\"groupingRow\" depth={depth}>\n {hasExpand && [\n <button\n class={{ [GROUP_EXPAND_BTN]: true }}\n onClick={e => expandEvent(e, model, itemIndex)}\n >\n {expandSvgIconVNode(expanded)}\n </button>,\n name,\n ]}\n </RowRenderer>\n );\n};\n\nexport const expandSvgIconVNode = (expanded = false) => {\n return (\n <svg\n aria-hidden=\"true\"\n style={{ transform: `rotate(${!expanded ? -90 : 0}deg)` }}\n focusable=\"false\"\n viewBox=\"0 0 448 512\"\n >\n <path\n fill=\"currentColor\"\n d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"\n ></path>\n </svg>\n );\n};\n\nexport default GroupingRowRenderer;\n","import { h, type VNode, Build, EventEmitter } from '@stencil/core';\nimport {\n DragStartEvent,\n CellTemplateProp,\n} from '@type';\n\nimport {\n DRAGGABLE_CLASS,\n DRAG_ICON_CLASS,\n getCellDataParsed,\n} from '../../utils';\n\nimport { isRowDragService } from './column.service';\n\ninterface RenderProps {\n schemaModel: CellTemplateProp;\n additionalData?: any;\n dragStartCell?: EventEmitter<DragStartEvent>;\n}\n\n\nfunction renderCell(v: RenderProps) {\n const els: (VNode | string)[] = [];\n\n // #region Custom cell\n const template = v.schemaModel.column?.cellTemplate;\n if (template) {\n els.push(template(h, v.schemaModel, v.additionalData));\n }\n // #endregion\n\n // #region Regular cell\n else {\n if (!v.schemaModel.column) {\n // something is wrong with data\n if (Build?.isDev) {\n console.error('Investigate column problem.', v.schemaModel);\n }\n return '';\n }\n\n // Row drag\n if (\n v.schemaModel.column.rowDrag &&\n isRowDragService(v.schemaModel.column.rowDrag, v.schemaModel)\n ) {\n els.push(\n <span\n class={DRAGGABLE_CLASS}\n onMouseDown={originalEvent =>\n v.dragStartCell?.emit({\n originalEvent,\n model: v.schemaModel,\n })\n }\n >\n <span class={DRAG_ICON_CLASS} />\n </span>,\n );\n }\n \n els.push(`${\n getCellDataParsed(v.schemaModel.model, v.schemaModel.column)\n }`);\n }\n return els;\n}\n\nexport const CellRenderer = ({\n renderProps,\n cellProps,\n}: {\n renderProps: RenderProps;\n cellProps: any;\n}): VNode => {\n const render = renderCell.bind(null, renderProps);\n return (\n <div {...cellProps} redraw={render}>\n {render()}\n </div>\n );\n};\n"],"names":["h","index","DATA_ROW","GROUP_EXPAND_EVENT","PSEUDO_GROUP_ITEM","GROUP_EXPANDED","GROUP_DEPTH","GROUP_EXPAND_BTN","Build","isRowDragService","DRAGGABLE_CLASS","DRAG_ICON_CLASS","getCellDataParsed"],"mappings":"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"}
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
*/
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
|
-
var column_service = require('./column.service-
|
|
7
|
-
var dimension_helpers = require('./dimension.helpers-
|
|
8
|
-
var viewport_store = require('./viewport.store-
|
|
6
|
+
var column_service = require('./column.service-euEyR799.js');
|
|
7
|
+
var dimension_helpers = require('./dimension.helpers-C5PvAWJW.js');
|
|
8
|
+
var viewport_store = require('./viewport.store-BQqAGkuJ.js');
|
|
9
|
+
var index = require('./index-BF1c1pO3.js');
|
|
10
|
+
var filter_button = require('./filter.button-DSsWNs23.js');
|
|
9
11
|
var debounce = require('./debounce-CcpHiH2p.js');
|
|
10
|
-
var
|
|
11
|
-
var filter_button = require('./filter.button-BzIcr9jo.js');
|
|
12
|
-
var headerCellRenderer = require('./header-cell-renderer-DxeLS5ru.js');
|
|
12
|
+
var headerCellRenderer = require('./header-cell-renderer-BwHvC5YY.js');
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Plugin which recalculates realSize on changes of sizes, originItemSize and count
|
|
@@ -1695,8 +1695,8 @@ function sortIndexByItems(indexes, source, sortingFunc = {}) {
|
|
|
1695
1695
|
function defaultCellCompare(prop, a, b) {
|
|
1696
1696
|
const aRaw = this.column ? column_service.getCellRaw(a, this.column) : a === null || a === void 0 ? void 0 : a[prop];
|
|
1697
1697
|
const bRaw = this.column ? column_service.getCellRaw(b, this.column) : b === null || b === void 0 ? void 0 : b[prop];
|
|
1698
|
-
const av = aRaw === null || aRaw === void 0 ? void 0 : aRaw.toString().toLowerCase();
|
|
1699
|
-
const bv = bRaw === null || bRaw === void 0 ? void 0 : bRaw.toString().toLowerCase();
|
|
1698
|
+
const av = typeof aRaw === 'number' ? aRaw : aRaw === null || aRaw === void 0 ? void 0 : aRaw.toString().toLowerCase();
|
|
1699
|
+
const bv = typeof bRaw === 'number' ? bRaw : bRaw === null || bRaw === void 0 ? void 0 : bRaw.toString().toLowerCase();
|
|
1700
1700
|
if (av === bv) {
|
|
1701
1701
|
return 0;
|
|
1702
1702
|
}
|
|
@@ -1860,9 +1860,6 @@ class SortingPlugin extends BasePlugin {
|
|
|
1860
1860
|
if (beforeApplyEvent.detail.additive && this.sorting) {
|
|
1861
1861
|
const sorting = {};
|
|
1862
1862
|
const sortingFunc = {};
|
|
1863
|
-
this.sorting = Object.assign(Object.assign({}, this.sorting), sorting);
|
|
1864
|
-
// extend sorting function with new sorting for multiple columns sorting
|
|
1865
|
-
this.sortingFunc = Object.assign(Object.assign({}, this.sortingFunc), sortingFunc);
|
|
1866
1863
|
if (columnProp in sorting && size(sorting) > 1 && order === undefined) {
|
|
1867
1864
|
delete sorting[columnProp];
|
|
1868
1865
|
delete sortingFunc[columnProp];
|
|
@@ -1871,6 +1868,9 @@ class SortingPlugin extends BasePlugin {
|
|
|
1871
1868
|
sorting[columnProp] = order;
|
|
1872
1869
|
sortingFunc[columnProp] = cmp;
|
|
1873
1870
|
}
|
|
1871
|
+
this.sorting = Object.assign(Object.assign({}, this.sorting), sorting);
|
|
1872
|
+
// extend sorting function with new sorting for multiple columns sorting
|
|
1873
|
+
this.sortingFunc = Object.assign(Object.assign({}, this.sortingFunc), sortingFunc);
|
|
1874
1874
|
}
|
|
1875
1875
|
else {
|
|
1876
1876
|
if (order) {
|
|
@@ -2545,6 +2545,6 @@ exports.getLeftRelative = getLeftRelative;
|
|
|
2545
2545
|
exports.getNextOrder = getNextOrder;
|
|
2546
2546
|
exports.isStretchPlugin = isStretchPlugin;
|
|
2547
2547
|
exports.sortIndexByItems = sortIndexByItems;
|
|
2548
|
-
//# sourceMappingURL=column.drag.plugin-
|
|
2548
|
+
//# sourceMappingURL=column.drag.plugin-pCfjUQwZ.js.map
|
|
2549
2549
|
|
|
2550
|
-
//# sourceMappingURL=column.drag.plugin-
|
|
2550
|
+
//# sourceMappingURL=column.drag.plugin-pCfjUQwZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column.drag.plugin-pCfjUQwZ.js","sources":["src/store/dimension/dimension.recalculate.plugin.ts","src/store/dimension/dimension.trim.plugin.ts","src/store/dimension/dimension.store.ts","src/plugins/base.plugin.ts","node_modules/lodash/_arrayEach.js","node_modules/lodash/_castFunction.js","node_modules/lodash/forEach.js","src/plugins/column.auto-size.plugin.ts","src/plugins/column.stretch.plugin.ts","node_modules/lodash/_baseClamp.js","node_modules/lodash/toLength.js","node_modules/lodash/_baseFill.js","node_modules/lodash/fill.js","src/plugins/export/csv.ts","src/plugins/export/export.plugin.ts","src/plugins/filter/conditions/equal.ts","src/plugins/filter/conditions/number/greaterThan.ts","src/plugins/filter/conditions/number/greaterThanOrEqual.ts","src/plugins/filter/conditions/number/lessThan.ts","src/plugins/filter/conditions/number/lessThanOrEqual.ts","src/plugins/filter/conditions/set.ts","src/plugins/filter/conditions/string/beginswith.ts","src/plugins/filter/conditions/string/contains.ts","src/plugins/filter/filter.indexed.ts","src/plugins/filter/filter.plugin.tsx","node_modules/lodash/isString.js","node_modules/lodash/_asciiSize.js","node_modules/lodash/_hasUnicode.js","node_modules/lodash/_unicodeSize.js","node_modules/lodash/_stringSize.js","node_modules/lodash/size.js","src/plugins/sorting/sorting.func.ts","src/plugins/sorting/sorting.plugin.ts","src/plugins/groupingRow/grouping.row.expand.service.ts","src/plugins/groupingRow/grouping.trimmed.service.ts","src/plugins/groupingRow/grouping.row.plugin.ts","src/plugins/moveColumn/order-column.handler.tsx","src/plugins/moveColumn/column.drag.plugin.ts"],"sourcesContent":["import { DimensionSettingsState } from '@type';\nimport type { Observable, PluginSubscribe } from '../../utils';\n\n/**\n * Plugin which recalculates realSize on changes of sizes, originItemSize and count\n */\nexport const recalculateRealSizePlugin = (storeService: {\n store: Observable<DimensionSettingsState>;\n setStore: (k: Partial<DimensionSettingsState>) => void;\n}): PluginSubscribe<DimensionSettingsState> => {\n /**\n * Recalculates realSize if size, origin size or count changes\n */\n return {\n /**\n * Reacts on changes of count, sizes and originItemSize\n */\n set(k) {\n switch (k) {\n case 'count':\n case 'sizes':\n case 'originItemSize': {\n // recalculate realSize\n let realSize = 0;\n const count = storeService.store.get('count');\n for (let i = 0; i < count; i++) {\n realSize +=\n storeService.store.get('sizes')[i] ||\n storeService.store.get('originItemSize');\n }\n storeService.setStore({ realSize });\n break;\n }\n }\n },\n };\n};\n","import { DimensionSettingsState } from '@type';\nimport type { Observable, PluginSubscribe } from '../../utils';\n/**\n * Plugin for trimming\n *\n * 1.a. Retrieves the previous sizes value. Saves the resulting trimmed data as a new sizes value.\n * 1.b. Stores a reference to the trimmed data to prevent further changes.\n * 2. Removes multiple and shifts the data based on the trimmed value.\n */\nexport const trimmedPlugin = (storeService: {\n store: Observable<DimensionSettingsState>;\n setSizes: (k: DimensionSettingsState['sizes']) => void;\n}): PluginSubscribe<DimensionSettingsState> => {\n let trimmingObject: DimensionSettingsState['sizes'] | null = null;\n let trimmedPreviousSizes: DimensionSettingsState['sizes'] | null = null;\n\n return {\n set(key, val) {\n switch (key) {\n case 'sizes': {\n // prevent changes after trimming\n if (trimmingObject && trimmingObject === val) {\n trimmingObject = null;\n return;\n }\n trimmedPreviousSizes = null;\n break;\n }\n case 'trimmed': {\n const trim = val as DimensionSettingsState['trimmed'];\n if (!trimmedPreviousSizes) {\n trimmedPreviousSizes = storeService.store.get('sizes');\n }\n\n trimmingObject = removeMultipleAndShift(\n trimmedPreviousSizes,\n trim || {},\n );\n // save a reference to the trimmed object to prevent changes after trimming\n storeService.setSizes(trimmingObject);\n break;\n }\n }\n },\n };\n};\n\nfunction removeMultipleAndShift<T1, T2>(\n items: { [virtialIndex: number]: T1 },\n toRemove: { [virtialIndex: number]: T2 },\n): { [virtialIndex: number]: T1 } {\n const newItems: { [virtialIndex: number]: T1 } = {};\n const sortedIndexes = Object.keys(items || {})\n .map(Number)\n .sort((a, b) => a - b);\n const lastIndex = sortedIndexes[sortedIndexes.length - 1];\n let shift = 0;\n for (let i = 0; i <= lastIndex; i++) {\n if (toRemove[i] !== undefined) {\n shift++;\n\n // skip already removed\n if (items[i] !== undefined) {\n continue;\n }\n }\n if (items[i] !== undefined) {\n newItems[i - shift] = items[i];\n }\n }\n return newItems;\n}\n","/**\n * Storing pre-calculated\n * Dimension information and sizes\n */\nimport reduce from 'lodash/reduce';\nimport { createStore } from '@stencil/store';\n\nimport { setStore, Observable } from '../../utils';\nimport { calculateDimensionData } from './dimension.helpers';\nimport {\n DimensionCalc,\n DimensionSettingsState,\n ViewSettingSizeProp,\n MultiDimensionType,\n} from '@type';\nimport { recalculateRealSizePlugin } from './dimension.recalculate.plugin';\nimport { trimmedPlugin } from './dimension.trim.plugin';\n\nexport type DimensionStoreCollection = {\n [T in MultiDimensionType]: DimensionStore;\n};\n\ntype Item = keyof DimensionSettingsState;\n\nfunction initialBase(): DimensionCalc {\n return {\n indexes: [],\n count: 0,\n\n // hidden items\n trimmed: null,\n\n // virtual item index to size\n sizes: {},\n // order in indexes[] to coordinate\n positionIndexToItem: {},\n // initial element to coordinate ^\n indexToItem: {},\n positionIndexes: [],\n };\n}\n\nfunction initialState(): DimensionSettingsState {\n return {\n ...initialBase(),\n // size which all items can take\n realSize: 0,\n\n // initial item size if it wasn't changed\n originItemSize: 0,\n };\n}\n\nexport class DimensionStore {\n readonly store: Observable<DimensionSettingsState>;\n constructor(public readonly type: MultiDimensionType) {\n this.store = createStore(initialState());\n this.store.use(trimmedPlugin({\n store: this.store,\n setSizes: this.setDimensionSize.bind(this),\n }));\n this.store.use(recalculateRealSizePlugin({\n store: this.store,\n setStore: this.setStore.bind(this),\n }));\n }\n\n getCurrentState(): DimensionSettingsState {\n const state = initialState();\n const keys = Object.keys(state);\n return reduce(\n keys,\n (r: DimensionSettingsState, k: Item) => {\n const data = this.store.get(k);\n r[k] = data as never;\n return r;\n },\n state,\n );\n }\n\n dispose() {\n setStore(this.store, initialState());\n }\n\n setStore<T extends Record<string, any>>(data: Partial<T>) {\n setStore(this.store, data);\n }\n\n drop() {\n setStore(this.store, initialBase());\n }\n\n /**\n * Set custom dimension sizes and overwrite old\n * Generates new indexes based on sizes\n * @param sizes - sizes to set\n */\n setDimensionSize(sizes: ViewSettingSizeProp = {}) {\n const dimensionData = calculateDimensionData(\n this.store.get('originItemSize'),\n sizes,\n );\n setStore(this.store, {\n ...dimensionData,\n sizes,\n });\n }\n\n updateSizesPositionByIndexes(newItemsOrder: number[], prevItemsOrder: number[] = []) {\n // Move custom sizes to new order\n const customSizes = {...this.store.get('sizes')};\n if (!Object.keys(customSizes).length) {\n return;\n }\n // Step 1: Create a map of original indices, but allow duplicates by storing arrays of indices\n const originalIndices: Record<number, number[]> = {};\n prevItemsOrder.forEach((physIndex, virtIndex) => {\n if (!originalIndices[physIndex]) {\n originalIndices[physIndex] = [];\n }\n originalIndices[physIndex].push(virtIndex); // Store all indices for each value\n });\n\n // Step 2: Create new sizes based on new item order\n const newSizes: Record<number, number> = {};\n\n newItemsOrder.forEach((physIndex, virtIndex) => {\n const indices = originalIndices[physIndex]; // Get all original indices for this value\n \n if (indices && indices.length > 0) {\n const originalIndex = indices.shift(); // Get the first available original index\n\n if (originalIndex !== undefined && originalIndex !== virtIndex && customSizes[originalIndex]) {\n newSizes[virtIndex] = customSizes[originalIndex];\n delete customSizes[originalIndex];\n }\n }\n });\n\n // Step 3: Set new sizes if there are changes\n if (Object.keys(newSizes).length) {\n this.setDimensionSize({\n ...customSizes,\n ...newSizes,\n });\n }\n }\n}\n","import { h } from '@stencil/core';\nimport type { PluginProviders, PluginBaseComponent } from '../types';\n\n\nexport type WatchConfig = { immediate: boolean };\n\n/**\n * Base layer for plugins\n * Provide minimal starting core for plugins to work\n * Extend this class to create plugin\n */\nexport class BasePlugin implements PluginBaseComponent {\n readonly h = h;\n readonly subscriptions: Record<string, (...args: any[]) => void> = {};\n constructor(public revogrid: HTMLRevoGridElement, public providers: PluginProviders) {}\n /**\n *\n * @param eventName - event name to subscribe to in revo-grid component (e.g. 'beforeheaderclick')\n * @param callback - callback function for event\n */\n addEventListener<K extends keyof HTMLRevoGridElementEventMap>(\n eventName: K,\n callback: (this: BasePlugin, e: CustomEvent<HTMLRevoGridElementEventMap[K]>) => void,\n ) {\n this.revogrid.addEventListener(eventName as string, callback);\n this.subscriptions[eventName as string] = callback;\n }\n\n /**\n * Subscribe to property change in revo-grid component\n * You can return false in callback to prevent default value set\n *\n * @param prop - property name\n * @param callback - callback function\n * @param immediate - trigger callback immediately with current value\n */\n watch<T extends any>(\n prop: string,\n callback: (arg: T) => boolean | void,\n { immediate }: Partial<WatchConfig> = { immediate: false },\n ) {\n const nativeValueDesc =\n Object.getOwnPropertyDescriptor(this.revogrid, prop) ||\n Object.getOwnPropertyDescriptor(this.revogrid.constructor.prototype, prop);\n\n // Overwrite property descriptor for this instance\n Object.defineProperty(this.revogrid, prop, {\n set(val: T) {\n const keepDefault = callback(val);\n if (keepDefault === false) {\n return;\n }\n // Continue with native behavior\n return nativeValueDesc?.set?.call(this, val);\n },\n get() {\n // Continue with native behavior\n return nativeValueDesc?.get?.call(this);\n },\n });\n if (immediate) {\n callback(nativeValueDesc?.value);\n }\n }\n\n /**\n * Remove event listener\n * @param eventName\n */\n removeEventListener(eventName: string) {\n this.revogrid.removeEventListener(eventName, this.subscriptions[eventName]);\n delete this.subscriptions[eventName];\n }\n\n /**\n * Emit event from revo-grid component\n * Event can be cancelled by calling event.preventDefault() in callback\n */\n emit<T = any>(eventName: string, detail?: T) {\n const event = new CustomEvent<T>(eventName, { detail, cancelable: true });\n this.revogrid.dispatchEvent(event);\n return event;\n }\n\n /**\n * Clear all subscriptions\n */\n clearSubscriptions() {\n for (let type in this.subscriptions) {\n this.removeEventListener(type);\n }\n }\n\n /**\n * Destroy plugin and clear all subscriptions\n */\n destroy() {\n this.clearSubscriptions();\n }\n}\n\nexport type GridPlugin = (typeof BasePlugin);\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n","import identity from './identity.js';\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nexport default castFunction;\n","import arrayEach from './_arrayEach.js';\nimport baseEach from './_baseEach.js';\nimport castFunction from './_castFunction.js';\nimport isArray from './isArray.js';\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nexport default forEach;\n","/**\n * Plugin module for revo-grid grid system\n * Add support for automatic column resize\n */\nimport each from 'lodash/each';\nimport reduce from 'lodash/reduce';\n\nimport { BasePlugin } from './base.plugin';\nimport { getSourceItem, columnTypes } from '@store';\nimport type {\n DimensionCols,\n DimensionRows,\n ColumnRegular,\n DataType,\n InitialHeaderClick,\n ViewSettingSizeProp,\n BeforeSaveDataDetails,\n BeforeRangeSaveDataDetails,\n PluginProviders,\n} from '@type';\nimport { ColumnCollection, getColumnType } from '../utils/column.utils';\n\ninterface Column extends ColumnRegular {\n index: number;\n}\n\ntype AutoSizeColumns = Record<DimensionCols, ColumnRecords>;\ntype ColumnRecords = Record<any, Column>;\ntype SourceSetEvent = { type: DimensionRows; source: DataType[] };\ntype EditEvent = BeforeSaveDataDetails | BeforeRangeSaveDataDetails;\ntype Resolve = (cols: Partial<AutoSizeColumns>) => void;\ntype Reject = () => void;\n\nexport type AutoSizeColumnConfig = {\n // ui behavior mode\n mode?: ColumnAutoSizeMode;\n /**\n * autoSize for all columns\n * if allColumnes true all columns treated as autoSize, worse for performance\n * false by default\n */\n allColumns?: boolean;\n /**\n * assumption per characted size\n * by default defined as 8, can be changed in this config\n */\n letterBlockSize?: number;\n /** make size calculation exact\n * by default it based on assumption each character takes some space defined in letterBlockSize */\n preciseSize?: boolean;\n};\n\nconst LETTER_BLOCK_SIZE = 7;\n\nexport const enum ColumnAutoSizeMode {\n // increases column width on header click according the largest text value\n headerClickAutosize = 'headerClickAutoSize',\n // increases column width on data set and text edit, decreases performance\n autoSizeOnTextOverlap = 'autoSizeOnTextOverlap',\n // increases and decreases column width based on all items sizes, worst for performance\n autoSizeAll = 'autoSizeAll',\n}\n\nexport class AutoSizeColumnPlugin extends BasePlugin {\n autoSizeColumns: Partial<AutoSizeColumns> | null = null;\n readonly letterBlockSize: number;\n\n /** for config option when preciseSize enabled */\n readonly precsizeCalculationArea: HTMLElement;\n\n /** for edge case when no columns defined before data */\n dataResolve: Resolve | null = null;\n dataReject: Reject | null = null;\n\n constructor(\n revogrid: HTMLRevoGridElement,\n public providers: PluginProviders,\n public config?: AutoSizeColumnConfig,\n ) {\n super(revogrid, providers);\n this.letterBlockSize = config?.letterBlockSize || LETTER_BLOCK_SIZE;\n\n // create test container to check text width\n if (config?.preciseSize) {\n this.precsizeCalculationArea = this.initiatePresizeElement();\n revogrid.appendChild(this.precsizeCalculationArea);\n }\n\n const aftersourceset = ({\n detail: { source },\n }: CustomEvent<SourceSetEvent>) => {\n this.setSource(source);\n };\n const beforecolumnsset = ({\n detail: { columns },\n }: CustomEvent<ColumnCollection>) => {\n this.columnSet(columns);\n };\n this.addEventListener('beforecolumnsset', beforecolumnsset);\n switch (config?.mode) {\n case ColumnAutoSizeMode.autoSizeOnTextOverlap:\n this.addEventListener('aftersourceset', aftersourceset);\n this.addEventListener('afteredit', ({ detail }: CustomEvent<EditEvent>) => {\n this.afteredit(detail);\n });\n break;\n case ColumnAutoSizeMode.autoSizeAll:\n this.addEventListener('aftersourceset', aftersourceset);\n this.addEventListener('afteredit', ({ detail }) => {\n this.afterEditAll(detail);\n });\n break;\n default:\n this.addEventListener('headerdblclick', ({ detail }: CustomEvent<InitialHeaderClick>) => {\n const type = getColumnType(detail.column);\n const size = this.getColumnSize(detail.index, type);\n if (size) {\n this.providers.dimension.setCustomSizes(\n type,\n {\n [detail.index]: size,\n },\n true,\n );\n }\n });\n break;\n }\n }\n\n async setSource(source: DataType[]): Promise<void> {\n let autoSize = this.autoSizeColumns;\n if (this.dataReject) {\n this.dataReject();\n this.clearPromise();\n }\n\n /** If data set first and no column provided await until get one */\n if (!autoSize) {\n const request = new Promise((resolve: Resolve, reject: Reject) => {\n this.dataResolve = resolve;\n this.dataReject = reject;\n });\n try {\n autoSize = await request;\n } catch (e) {\n return;\n }\n }\n\n // calculate sizes\n each(autoSize, (_v, type: DimensionCols) => {\n const sizes: ViewSettingSizeProp = {};\n each(autoSize[type], rgCol => {\n // calculate size\n rgCol.size = sizes[rgCol.index] = source.reduce(\n (prev, rgRow) => Math.max(prev, this.getLength(rgRow[rgCol.prop])),\n this.getLength(rgCol.name || ''),\n );\n });\n this.providers.dimension.setCustomSizes(type, sizes, true);\n });\n }\n\n getLength(len?: any): number {\n const padding = 15;\n if (!len) {\n return 0;\n }\n try {\n const str = len.toString();\n\n /**if exact calculation required proxy with html element, slow operation */\n if (this.config?.preciseSize) {\n this.precsizeCalculationArea.innerText = str;\n return this.precsizeCalculationArea.scrollWidth + padding * 2;\n }\n return str.length * this.letterBlockSize + padding * 2;\n } catch (e) {\n return 0;\n }\n }\n\n afteredit(e: EditEvent) {\n let data: Record<string, DataType>;\n if (this.isRangeEdit(e)) {\n data = e.data;\n } else {\n data = { 0: { [e.prop]: e.val } };\n }\n each(this.autoSizeColumns, (columns, type: DimensionCols) => {\n const sizes: ViewSettingSizeProp = {};\n\n each(columns, rgCol => {\n // calculate size\n const size = reduce(\n data,\n (prev: number | undefined, rgRow) => {\n if (typeof rgRow[rgCol.prop] === 'undefined') {\n return prev;\n }\n return Math.max(prev || 0, this.getLength(rgRow[rgCol.prop]));\n },\n undefined,\n );\n\n if (size && (rgCol.size ?? 0) < size) {\n rgCol.size = sizes[rgCol.index] = size;\n }\n });\n\n this.providers.dimension.setCustomSizes(type, sizes, true);\n });\n }\n\n afterEditAll(e: EditEvent) {\n const props: Record<any, true> = {};\n if (this.isRangeEdit(e)) {\n each(e.data, r => each(r, (_v, p) => (props[p] = true)));\n } else {\n props[e.prop] = true;\n }\n each(this.autoSizeColumns, (columns, type: DimensionCols) => {\n const sizes: ViewSettingSizeProp = {};\n\n each(columns, rgCol => {\n if (props[rgCol.prop]) {\n const size = this.getColumnSize(rgCol.index, type);\n if (size) {\n sizes[rgCol.index] = size;\n }\n }\n });\n this.providers.dimension.setCustomSizes(type, sizes, true);\n });\n }\n\n getColumnSize(index: number, type: DimensionCols): number {\n const rgCol = this.autoSizeColumns?.[type]?.[index];\n if (!rgCol) {\n return 0;\n }\n return reduce(\n this.providers.data.stores,\n (r, s) => {\n const perStore = reduce(\n s.store.get('items'),\n (prev, _row, i) => {\n const item = getSourceItem(s.store, i);\n return Math.max(prev || 0, this.getLength(item?.[rgCol.prop]));\n },\n 0,\n );\n return Math.max(r, perStore);\n },\n rgCol.size || 0,\n );\n }\n\n columnSet(columns: Record<DimensionCols, ColumnRegular[]>) {\n for (let t of columnTypes) {\n const type = t as DimensionCols;\n const cols = columns[type];\n\n for (let i in cols) {\n if (cols[i].autoSize || this.config?.allColumns) {\n if (!this.autoSizeColumns) {\n this.autoSizeColumns = {};\n }\n if (!this.autoSizeColumns[type]) {\n this.autoSizeColumns[type] = {};\n }\n this.autoSizeColumns[type][i] = {\n ...cols[i],\n index: parseInt(i, 10),\n };\n }\n }\n }\n\n if (this.dataResolve) {\n this.dataResolve(this.autoSizeColumns || {});\n this.clearPromise();\n }\n }\n\n clearPromise() {\n this.dataResolve = null;\n this.dataReject = null;\n }\n\n isRangeEdit(e: EditEvent): e is BeforeRangeSaveDataDetails {\n return !!(e as BeforeRangeSaveDataDetails).data;\n }\n\n initiatePresizeElement(): HTMLElement {\n const styleForFontTest: Partial<CSSStyleDeclaration> = {\n position: 'absolute',\n fontSize: '14px',\n height: '0',\n width: '0',\n whiteSpace: 'nowrap',\n top: '0',\n overflowX: 'scroll',\n display: 'block',\n };\n\n const el = document.createElement('div');\n for (let s in styleForFontTest) {\n el.style[s] = styleForFontTest[s] ?? '';\n }\n el.classList.add('revo-test-container');\n return el;\n }\n\n destroy() {\n super.destroy();\n this.precsizeCalculationArea?.remove();\n }\n}\n","import each from 'lodash/each';\nimport { calculateRowHeaderSize } from '../utils/row-header-utils';\nimport { getScrollbarSize } from '../utils';\nimport { BasePlugin } from './base.plugin';\nimport { DimensionCols, DimensionType, PluginBaseComponent, PluginProviders, ColumnRegular } from '@type';\nimport { ColumnCollection } from '../utils/column.utils';\n\n/**\n * This plugin serves to recalculate columns initially\n * Base on empty space if there is any\n * Currently plugin supports only increasing last column\n */\ntype ScrollChange = {\n type: DimensionType;\n hasScroll: boolean;\n};\ntype StretchedData = {\n initialSize: number;\n size: number;\n index: number;\n};\n\nexport class StretchColumn extends BasePlugin {\n private stretchedColumn: StretchedData | null = null;\n private readonly scrollSize;\n constructor(\n revogrid: HTMLRevoGridElement,\n public providers: PluginProviders,\n ) {\n super(revogrid, providers);\n\n // calculate scroll bar size for current user session\n this.scrollSize = getScrollbarSize(document);\n\n // subscribe to column changes\n const beforecolumnapplied = ({\n detail: { columns },\n }: CustomEvent<ColumnCollection>) => this.applyStretch(columns);\n this.addEventListener('beforecolumnapplied', beforecolumnapplied);\n }\n\n private setScroll({ type, hasScroll }: ScrollChange) {\n if (\n type === 'rgRow' &&\n this.stretchedColumn &&\n this.stretchedColumn?.initialSize === this.stretchedColumn.size\n ) {\n if (hasScroll) {\n this.stretchedColumn.size -= this.scrollSize;\n this.apply();\n this.dropChanges();\n }\n }\n }\n\n private activateChanges() {\n const setScroll = ({ detail }: CustomEvent<ScrollChange>) =>\n this.setScroll(detail);\n this.addEventListener('scrollchange', setScroll);\n }\n\n private dropChanges() {\n this.stretchedColumn = null;\n this.removeEventListener('scrollchange');\n }\n\n private apply() {\n if (!this.stretchedColumn) {\n return;\n }\n const type: DimensionCols = 'rgCol';\n const sizes = this.providers.dimension.stores[type].store.get('sizes');\n this.providers.dimension.setCustomSizes(\n type,\n {\n ...sizes,\n [this.stretchedColumn.index]: this.stretchedColumn.size,\n },\n true,\n );\n }\n\n /**\n * Apply stretch changes\n */\n applyStretch(columns: Record<DimensionCols, ColumnRegular[]>) {\n // unsubscribe from all events\n this.dropChanges();\n // calculate grid size\n let sizeDifference = this.revogrid.clientWidth - 1;\n each(columns, (_, type: DimensionCols) => {\n const realSize =\n this.providers.dimension.stores[type].store.get('realSize');\n sizeDifference -= realSize;\n });\n if (this.revogrid.rowHeaders) {\n const itemsLength =\n this.providers.data.stores.rgRow.store.get('source').length;\n const header = this.revogrid.rowHeaders;\n const rowHeaderSize = calculateRowHeaderSize(\n itemsLength,\n typeof header === 'object' ? header : undefined,\n );\n if (rowHeaderSize) {\n sizeDifference -= rowHeaderSize;\n }\n }\n if (sizeDifference > 0) {\n // currently plugin accepts last column only\n const index = columns.rgCol.length - 1;\n const last = columns.rgCol[index];\n /**\n * has column\n * no auto size applied\n * size for column shouldn't be defined\n */\n const colSize = last?.size || this.revogrid.colSize || 0;\n const size = sizeDifference + colSize - 1;\n\n if (last && !last.autoSize && colSize < size) {\n this.stretchedColumn = {\n initialSize: size,\n index,\n size,\n };\n this.apply();\n this.activateChanges();\n }\n }\n }\n}\n\n/**\n * Check plugin type is Stretch\n */\nexport function isStretchPlugin(\n plugin: PluginBaseComponent | StretchColumn,\n): plugin is StretchColumn {\n return !!(plugin as StretchColumn).applyStretch;\n}\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n}\n\nexport default baseClamp;\n","import baseClamp from './_baseClamp.js';\nimport toInteger from './toInteger.js';\n\n/** Used as references for the maximum length and index of an array. */\nvar MAX_ARRAY_LENGTH = 4294967295;\n\n/**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\nfunction toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n}\n\nexport default toLength;\n","import toInteger from './toInteger.js';\nimport toLength from './toLength.js';\n\n/**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\nfunction baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n}\n\nexport default baseFill;\n","import baseFill from './_baseFill.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\nfunction fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n}\n\nexport default fill;\n","import { getGroupingName, isGrouping } from '../groupingRow/grouping.service';\nimport { CSVFormat, DataInput, Formatter } from './types';\n\nconst INITIAL: CSVFormat = {\n mime: 'text/csv',\n fileKind: 'csv',\n // BOM signature\n bom: true,\n columnDelimiter: ',',\n rowDelimiter: '\\r\\n',\n encoding: '',\n};\n\nexport type CSVFormatter = (options: Partial<CSVFormat>, data: DataInput) => string;\n\n// The ASCII character code 13 is called a Carriage Return or CR.\nconst CARRIAGE_RETURN = String.fromCharCode(13);\n// Chr(13) followed by a Chr(10) that compose a proper CRLF.\nconst LINE_FEED = String.fromCharCode(10);\nconst DOUBLE_QT = String.fromCharCode(34);\nconst NO_BREAK_SPACE = String.fromCharCode(0xfeff);\nconst escapeRegex = new RegExp('\"', 'g');\n\nexport class ExportCsv implements Formatter {\n readonly options: Readonly<CSVFormat>;\n constructor(options: Partial<CSVFormat> = {}) {\n this.options = { ...INITIAL, ...options };\n }\n\n doExport({ data, headers, props }: DataInput) {\n let result = this.options.bom ? NO_BREAK_SPACE : '';\n\n // any header\n if (headers?.length > 0) {\n headers.forEach(header => {\n // ignore empty\n if (!header.length) {\n return;\n }\n result += this.prepareHeader(header, this.options.columnDelimiter);\n result += this.options.rowDelimiter;\n });\n }\n\n data.forEach((rgRow, index) => {\n if (index > 0) {\n result += this.options.rowDelimiter;\n }\n // support grouping\n if (isGrouping(rgRow)) {\n result += this.parseCell(getGroupingName(rgRow), this.options.columnDelimiter);\n return;\n }\n result += props.map(p => this.parseCell(rgRow[p], this.options.columnDelimiter)).join(this.options.columnDelimiter);\n });\n\n return result;\n }\n\n private prepareHeader(columnHeaders: string[], columnDelimiter: string) {\n let result = '';\n const newColumnHeaders = columnHeaders.map(v => this.parseCell(v, columnDelimiter, true));\n result += newColumnHeaders.join(columnDelimiter);\n return result;\n }\n\n private parseCell(value: any, columnDelimiter: string, force = false) {\n let escape = value;\n if (typeof value !== 'string') {\n escape = JSON.stringify(value);\n }\n const toEscape = [CARRIAGE_RETURN, DOUBLE_QT, LINE_FEED, columnDelimiter];\n if (typeof escape === 'undefined') {\n return '';\n }\n if (escape !== '' && (force || toEscape.some(i => escape.indexOf(i) >= 0))) {\n return `\"${escape.replace(escapeRegex, '\"\"')}\"`;\n }\n\n return escape;\n }\n}\n","import fill from 'lodash/fill';\nimport { columnTypes, rowTypes, Group, Groups } from '@store';\n\nimport { timeout } from '../../utils';\nimport { BasePlugin } from '../base.plugin';\nimport { ExportCsv } from './csv';\nimport type { ColSource, CSVFormat, DataInput, Formatter } from './types';\nimport type { DimensionCols, ColumnProp, DataType } from '@type';\n\nexport * from './csv';\nexport * from './types';\n\nenum ExportTypes {\n csv = 'csv',\n}\n\nexport type ExportFormat = Partial<CSVFormat>;\n\nexport class ExportFilePlugin extends BasePlugin {\n /** Exports string */\n async exportString(options: ExportFormat = {}, t: ExportTypes = ExportTypes.csv) {\n const data = await this.beforeexport();\n if (!data) {\n return null;\n }\n return this.formatter(t, options).doExport(data);\n }\n\n /** Exports Blob */\n async exportBlob(options: ExportFormat = {}, t: ExportTypes = ExportTypes.csv) {\n return await this.getBlob(this.formatter(t, options));\n }\n\n /** Export file */\n async exportFile(options: ExportFormat = {}, t: ExportTypes = ExportTypes.csv) {\n const formatter = this.formatter(t, options);\n\n // url\n const URL = window.URL || window.webkitURL;\n\n const a = document.createElement('a');\n const { filename, fileKind } = formatter.options;\n const name = `${filename}.${fileKind}`;\n\n const blob = await this.getBlob(formatter);\n const url = blob ? URL.createObjectURL(blob) : '';\n\n a.style.display = 'none';\n a.setAttribute('href', url);\n a.setAttribute('download', name);\n this.revogrid.appendChild(a);\n a.dispatchEvent(new MouseEvent('click'));\n this.revogrid.removeChild(a);\n\n // delay for revoke, correct for some browsers\n await timeout(120);\n URL.revokeObjectURL(url);\n }\n\n /** Blob object */\n async getBlob(formatter: Formatter) {\n const type = `${formatter.options.mime};charset=${formatter.options.encoding}`;\n if (typeof Blob !== 'undefined') {\n const data = await this.beforeexport();\n if (!data) {\n return null;\n }\n return new Blob([formatter.doExport(data)], { type });\n }\n return null;\n }\n\n // before event\n private async beforeexport() {\n let data = await this.getData();\n const event: CustomEvent<{ data: DataInput }> = this.emit('beforeexport', { data });\n if (event.defaultPrevented) {\n return null;\n }\n return event.detail.data;\n }\n\n private async getData(): Promise<DataInput> {\n const data = await this.getSource();\n const colSource: ColSource[] = [];\n const colPromises: Promise<ColSource>[] = [];\n columnTypes.forEach((t, i) => {\n colPromises.push(this.getColPerSource(t).then(s => (colSource[i] = s)));\n });\n await Promise.all(colPromises);\n const columns: ColSource = {\n headers: [],\n props: [],\n };\n for (let source of colSource) {\n source.headers.forEach((h, i) => {\n if (!columns.headers[i]) {\n columns.headers[i] = [];\n }\n columns.headers[i].push(...h);\n });\n columns.props.push(...source.props);\n }\n return {\n data,\n ...columns,\n };\n }\n\n private async getColPerSource(t: DimensionCols) {\n const store = await this.revogrid.getColumnStore(t);\n const source = store.get('source');\n const virtualIndexes = store.get('items');\n const depth = store.get('groupingDepth');\n const groups = store.get('groups');\n const colNames: string[] = [];\n const colProps: ColumnProp[] = [];\n virtualIndexes.forEach((v: number) => {\n const prop = source[v].prop;\n colNames.push(source[v].name || '');\n colProps.push(prop);\n });\n const rows: string[][] = this.getGroupHeaders(depth, groups, virtualIndexes);\n rows.push(colNames);\n return {\n headers: rows,\n props: colProps,\n };\n }\n\n private getGroupHeaders(depth: number, groups: Groups, items: number[]) {\n const rows: string[][] = [];\n const template = fill(new Array(items.length), '');\n for (let d = 0; d < depth; d++) {\n const rgRow = [...template];\n rows.push(rgRow);\n if (!groups[d]) {\n continue;\n }\n const levelGroups = groups[d];\n\n // add names of groups\n levelGroups.forEach((group: Group) => {\n const minIndex = group.indexes[0];\n if (typeof minIndex === 'number') {\n rgRow[minIndex] = group.name;\n }\n });\n }\n return rows;\n }\n\n private async getSource() {\n const data: DataType[][] = [];\n const promisesData: Promise<number>[] = [];\n rowTypes.forEach(t => {\n const dataPart: DataType[] = [];\n data.push(dataPart);\n const promise = this.revogrid.getVisibleSource(t).then((d: DataType[]) => dataPart.push(...d));\n promisesData.push(promise);\n });\n await Promise.all(promisesData);\n return data.reduce((r, v) => {\n r.push(...v);\n return r;\n }, []);\n }\n\n // get correct class for future multiple types support\n private formatter(type: ExportTypes, options: ExportFormat = {}) {\n switch (type) {\n case ExportTypes.csv:\n return new ExportCsv(options);\n default:\n throw new Error('Unknown format');\n }\n }\n}\n","import { LogicFunction, LogicFunctionExtraParam, LogicFunctionParam, ExtraField } from '../filter.types';\n\nconst eq: LogicFunction = (value: LogicFunctionParam, extra?: LogicFunctionExtraParam) => {\n if (typeof value === 'undefined' || (value === null && !extra)) {\n return true;\n }\n if (typeof value !== 'string') {\n value = JSON.stringify(value);\n }\n\n const filterVal = extra?.toString().toLocaleLowerCase();\n if (filterVal?.length === 0) {\n return true;\n }\n \n return value.toLocaleLowerCase() === filterVal;\n};\n\nexport const notEq: LogicFunction = (value: LogicFunctionParam, extra?: LogicFunctionExtraParam) => !eq(value, extra);\nnotEq.extra = 'input' as ExtraField;\neq.extra = 'input' as ExtraField;\nexport default eq;\n","import { LogicFunction, LogicFunctionExtraParam, LogicFunctionParam } from '../../filter.types';\n\nconst gtThan: LogicFunction = function (value: LogicFunctionParam, extra?: LogicFunctionExtraParam) {\n let conditionValue: number;\n\n if (typeof value === 'number' && typeof extra !== 'undefined' && extra !== null) {\n conditionValue = parseFloat(extra?.toString());\n return value > conditionValue;\n }\n return false;\n};\n\ngtThan.extra = 'input';\nexport default gtThan;\n","import { LogicFunction, LogicFunctionExtraParam, LogicFunctionParam } from '../../filter.types';\nimport eq from '../equal';\nimport gt from './greaterThan';\n\nconst gtThanEq: LogicFunction = function (value: LogicFunctionParam, extra?: LogicFunctionExtraParam) {\n return eq(value, extra) || gt(value, extra);\n};\n\ngtThanEq.extra = 'input';\nexport default gtThanEq;\n","import { LogicFunction, LogicFunctionExtraParam, LogicFunctionParam } from '../../filter.types';\n\nconst lt: LogicFunction = function (value: LogicFunctionParam, extra?: LogicFunctionExtraParam) {\n let conditionValue: number;\n if (typeof value === 'number' && typeof extra !== 'undefined' && extra !== null) {\n conditionValue = parseFloat(extra.toString());\n return value < conditionValue;\n } else {\n return false;\n }\n};\n\nlt.extra = 'input';\nexport default lt;\n","import { LogicFunction, LogicFunctionExtraParam, LogicFunctionParam } from '../../filter.types';\nimport eq from '../equal';\nimport lt from './lessThan';\n\nconst lsEq: LogicFunction = function (value: LogicFunctionParam, extra?: LogicFunctionExtraParam) {\n return eq(value, extra) || lt(value, extra);\n};\n\nlsEq.extra = 'input';\nexport default lsEq;\n","import { LogicFunction, LogicFunctionParam } from '../filter.types';\n\nconst set: LogicFunction = (value: LogicFunctionParam) => !(value === '' || value === null || value === void 0);\nexport const notSet: LogicFunction = (value: LogicFunctionParam) => !set(value);\nexport default set;\n","import { LogicFunction, LogicFunctionExtraParam, LogicFunctionParam } from '../../filter.types';\n\nconst beginsWith: LogicFunction = (value: LogicFunctionParam, extra?: LogicFunctionExtraParam) => {\n if (!value) {\n return false;\n }\n if (!extra) {\n return true;\n }\n if (typeof value !== 'string') {\n value = JSON.stringify(value);\n }\n if (typeof extra !== 'string') {\n extra = JSON.stringify(extra);\n }\n return value.toLocaleLowerCase().indexOf(extra.toLocaleLowerCase()) === 0;\n};\n\nbeginsWith.extra = 'input';\nexport default beginsWith;\n","import { LogicFunction, LogicFunctionExtraParam, LogicFunctionParam } from '../../filter.types';\n\nconst contains: LogicFunction = (value: LogicFunctionParam, extra?: LogicFunctionExtraParam) => {\n if (!extra) {\n return true;\n }\n if (!value) {\n return false;\n }\n if (extra) {\n if (typeof value !== 'string') {\n value = JSON.stringify(value);\n }\n return value.toLocaleLowerCase().indexOf(extra.toString().toLowerCase()) > -1;\n }\n return true;\n};\n\nexport const notContains: LogicFunction = (value: LogicFunctionParam, extra?: LogicFunctionExtraParam) => {\n return !contains(value, extra);\n};\nnotContains.extra = 'input';\ncontains.extra = 'input';\nexport default contains;\n","// filter.indexed.ts\n\nimport eq, { notEq } from './conditions/equal';\nimport gtThan from './conditions/number/greaterThan';\nimport gtThanEq from './conditions/number/greaterThanOrEqual';\nimport lt from './conditions/number/lessThan';\nimport lsEq from './conditions/number/lessThanOrEqual';\nimport set, { notSet } from './conditions/set';\nimport beginsWith from './conditions/string/beginswith';\nimport contains, { notContains } from './conditions/string/contains';\nimport { LogicFunction } from './filter.types';\n\n\nexport const filterCoreFunctionsIndexedByType: Record<FilterType, LogicFunction> = {\n none: () => true,\n empty: notSet,\n notEmpty: set,\n eq: eq,\n notEq: notEq,\n begins: beginsWith,\n contains: contains,\n notContains: notContains,\n\n eqN: eq,\n neqN: notEq,\n gt: gtThan,\n gte: gtThanEq,\n lt: lt,\n lte: lsEq,\n};\n\nexport const filterTypes: Record<string, FilterType[]> = {\n string: ['notEmpty', 'empty', 'eq', 'notEq', 'begins', 'contains', 'notContains'],\n number: ['notEmpty', 'empty', 'eqN', 'neqN', 'gt', 'gte', 'lt', 'lte'],\n};\n\nexport const filterNames = {\n none: 'None',\n empty: 'Not set',\n notEmpty: 'Set',\n\n eq: 'Equal',\n notEq: 'Not equal',\n begins: 'Begins with',\n contains: 'Contains',\n notContains: 'Does not contain',\n\n eqN: '=',\n neqN: '!=',\n gt: '>',\n gte: '>=',\n lt: '<',\n lte: '<=',\n};\n\nexport type FilterType = keyof typeof filterNames;\n","// filter.plugin.tsx\nimport { h, type VNode } from '@stencil/core';\n\nimport type {\n ColumnProp,\n ColumnRegular,\n DataType,\n PluginProviders,\n} from '@type';\nimport { BasePlugin } from '../base.plugin';\nimport { FILTER_PROP, isFilterBtn } from './filter.button';\nimport {\n filterCoreFunctionsIndexedByType,\n filterNames,\n filterTypes,\n} from './filter.indexed';\n\nimport type {\n ColumnFilterConfig,\n FilterCollectionItem,\n FilterData,\n LogicFunction,\n MultiFilterItem,\n ShowData,\n} from './filter.types';\n\nimport { getCellDataParsed } from '../../utils';\nimport { TrimmedEntity } from '@store';\n\nexport * from './filter.types';\nexport * from './filter.indexed';\nexport * from './filter.button';\n\nexport const FILTER_TRIMMED_TYPE = 'filter';\nexport const FILTER_CONFIG_CHANGED_EVENT = 'filterconfigchanged';\nexport const FILTE_PANEL = 'revogr-filter-panel';\n\n/**\n * @typedef ColumnFilterConfig\n * @type {object}\n *\n * @property {MultiFilterItem|undefined} multiFilterItems - data for multi filtering with relation\n *\n * @property {Record<ColumnProp, FilterCollectionItem>|undefined} collection - preserved filter data, relation for filters will be applied as 'and'\n *\n * @property {string[]|undefined} include - filters to be included, if defined everything else out of scope will be ignored\n *\n * @property {Record<string, CustomFilter>|undefined} customFilters - hash map of {FilterType:CustomFilter}.\n *\n * @property {FilterLocalization|undefined} localization - translation for filter popup captions.\n *\n * @property {boolean|undefined} disableDynamicFiltering - disables dynamic filtering. A way to apply filters on Save only.\n */\n/**\n * @internal\n */\n\nexport class FilterPlugin extends BasePlugin {\n pop?: HTMLRevogrFilterPanelElement;\n filterCollection: Record<ColumnProp, FilterCollectionItem> = {};\n multiFilterItems: MultiFilterItem = {};\n\n /**\n * Filter types\n * @example\n * {\n * string: ['contains', 'beginswith'],\n * number: ['eqN', 'neqN', 'gt']\n * }\n */\n filterByType: Record<string, string[]> = { ...filterTypes };\n filterNameIndexByType: Record<string, string> = {\n ...filterNames,\n };\n filterFunctionsIndexedByType: Record<string, LogicFunction> = {\n ...filterCoreFunctionsIndexedByType,\n };\n\n filterProp = FILTER_PROP;\n\n extraHyperContent?: (data: ShowData) => VNode | VNode[];\n\n constructor(\n public revogrid: HTMLRevoGridElement,\n providers: PluginProviders,\n public config?: ColumnFilterConfig,\n ) {\n super(revogrid, providers);\n if (config) {\n this.initConfig(config);\n }\n\n const existingNodes = this.revogrid.registerVNode.filter(\n n => typeof n === 'object' && n.$tag$ !== FILTE_PANEL,\n );\n this.revogrid.registerVNode = [\n ...existingNodes,\n <revogr-filter-panel\n filterNames={this.filterNameIndexByType}\n filterEntities={this.filterFunctionsIndexedByType}\n filterCaptions={config?.localization?.captions}\n onFilterChange={e => this.onFilterChange(e.detail)}\n onResetChange={e => this.onFilterReset(e.detail)}\n disableDynamicFiltering={config?.disableDynamicFiltering}\n closeOnOutsideClick={config?.closeFilterPanelOnOutsideClick}\n ref={e => (this.pop = e)}\n >\n {' '}\n {this.extraContent()}\n </revogr-filter-panel>,\n ];\n\n const aftersourceset = async () => {\n const filterCollectionProps = Object.keys(this.filterCollection);\n if (filterCollectionProps.length > 0) {\n // handle old way of filtering by reworking FilterCollection to new MultiFilterItem\n filterCollectionProps.forEach((prop, index) => {\n if (!this.multiFilterItems[prop]) {\n this.multiFilterItems[prop] = [\n {\n id: index,\n type: this.filterCollection[prop].type,\n value: this.filterCollection[prop].value,\n relation: 'and',\n },\n ];\n }\n });\n }\n if (Object.keys(this.multiFilterItems).length === 0) {\n return;\n }\n await this.runFiltering(this.multiFilterItems);\n };\n this.addEventListener('headerclick', e => this.headerclick(e));\n this.addEventListener(\n FILTER_CONFIG_CHANGED_EVENT,\n ({ detail }: CustomEvent<ColumnFilterConfig | boolean>) => {\n if (\n !detail ||\n (typeof detail === 'object' &&\n (!detail.multiFilterItems ||\n !Object.keys(detail.multiFilterItems).length))\n ) {\n this.clearFiltering();\n return;\n }\n if (typeof detail === 'object') {\n this.initConfig(detail);\n }\n aftersourceset();\n },\n );\n this.addEventListener('aftersourceset', aftersourceset);\n this.addEventListener('filter', ({ detail }: CustomEvent) =>\n this.onFilterChange(detail),\n );\n }\n\n beforeshow(_: ShowData) {\n // used as hook for filter panel\n }\n\n extraContent(): any {\n return null;\n }\n\n initConfig(config: ColumnFilterConfig) {\n if (config.multiFilterItems) {\n this.multiFilterItems = { ...config.multiFilterItems };\n } else {\n this.multiFilterItems = {};\n }\n // Add custom filters\n if (config.customFilters) {\n for (let customFilterType in config.customFilters) {\n const cFilter = config.customFilters[customFilterType];\n if (!this.filterByType[cFilter.columnFilterType]) {\n this.filterByType[cFilter.columnFilterType] = [];\n }\n // add custom filter type\n this.filterByType[cFilter.columnFilterType].push(customFilterType);\n // add custom filter function\n this.filterFunctionsIndexedByType[customFilterType] = cFilter.func;\n // add custom filter name\n this.filterNameIndexByType[customFilterType] = cFilter.name;\n }\n }\n\n // Add filterProp if provided in config\n if (config.filterProp) {\n this.filterProp = config.filterProp;\n }\n\n /**\n * which filters has to be included/excluded\n * convenient way to exclude system filters\n */\n const cfgInlcude = config.include;\n if (cfgInlcude) {\n const filters: Record<string, string[]> = {};\n\n for (let t in this.filterByType) {\n // validate filters, if appropriate function present\n const newTypes = this.filterByType[t].filter(\n f => cfgInlcude.indexOf(f) > -1,\n );\n if (newTypes.length) {\n filters[t] = newTypes;\n }\n }\n // if any valid filters provided show them\n if (Object.keys(filters).length > 0) {\n this.filterByType = filters;\n }\n }\n\n if (config.collection) {\n const filtersWithFilterFunctionPresent = Object.entries(\n config.collection,\n ).filter(([, item]) => this.filterFunctionsIndexedByType[item.type]);\n this.filterCollection = Object.fromEntries(\n filtersWithFilterFunctionPresent,\n );\n } else {\n this.filterCollection = {};\n }\n\n if (config.localization) {\n if (config.localization.filterNames) {\n Object.entries(config.localization.filterNames).forEach(([k, v]) => {\n if (this.filterNameIndexByType[k] != void 0) {\n this.filterNameIndexByType[k] = v;\n }\n });\n }\n }\n }\n\n async headerclick(e: CustomEvent<ColumnRegular>) {\n const el = e.detail.originalEvent?.target as HTMLElement;\n if (!isFilterBtn(el)) {\n return;\n }\n e.preventDefault();\n if (!this.pop) {\n return;\n }\n\n // filter button clicked, open filter dialog\n const gridPos = this.revogrid.getBoundingClientRect();\n const buttonPos = el.getBoundingClientRect();\n const prop = e.detail.prop;\n\n const data: ShowData = {\n ...e.detail,\n ...this.filterCollection[prop],\n x: buttonPos.x - gridPos.x,\n y: buttonPos.y - gridPos.y + buttonPos.height,\n autoCorrect: true,\n filterTypes: this.getColumnFilter(e.detail.filter),\n filterItems: this.multiFilterItems,\n extraContent: this.extraHyperContent,\n };\n this.beforeshow?.(data);\n this.pop.show(data);\n }\n\n getColumnFilter(\n type?: boolean | string | string[],\n ): Record<string, string[]> {\n let filterType = 'string';\n if (!type) {\n return { [filterType]: this.filterByType[filterType] };\n }\n\n // if custom column filter\n if (this.isValidType(type)) {\n filterType = type;\n\n // if multiple filters applied\n } else if (typeof type === 'object' && type.length) {\n return type.reduce((r: Record<string, string[]>, multiType) => {\n if (this.isValidType(multiType)) {\n r[multiType] = this.filterByType[multiType];\n }\n return r;\n }, {});\n }\n return { [filterType]: this.filterByType[filterType] };\n }\n\n isValidType(type: any): type is string {\n return !!(typeof type === 'string' && this.filterByType[type]);\n }\n\n /**\n * Called on internal component change\n */\n async onFilterChange(filterItems: MultiFilterItem) {\n // store the filter items\n this.multiFilterItems = filterItems;\n\n // run the filtering when the items change\n this.runFiltering(this.multiFilterItems);\n }\n\n onFilterReset(prop?: ColumnProp) {\n delete this.multiFilterItems[prop ?? ''];\n this.onFilterChange(this.multiFilterItems);\n }\n\n /**\n * Triggers grid filtering\n */\n async doFiltering(\n collection: Record<ColumnProp, FilterCollectionItem>,\n source: DataType[],\n columns: ColumnRegular[],\n filterItems: MultiFilterItem,\n ) {\n const columnsToUpdate: ColumnRegular[] = [];\n\n /**\n * Loop through the columns and update the columns that need to be updated with the `hasFilter` property.\n */\n const columnByProp: Record<string, ColumnRegular> = {};\n columns.forEach(rgCol => {\n const column = { ...rgCol };\n const hasFilter = filterItems[column.prop];\n columnByProp[column.prop] = column;\n\n /**\n * If the column has a filter and it's not already marked as filtered, update the column.\n */\n if (column[this.filterProp] && !hasFilter) {\n delete column[this.filterProp];\n columnsToUpdate.push(column);\n }\n\n /**\n * If the column does not have a filter and it's marked as filtered, update the column.\n */\n\n if (!column[this.filterProp] && hasFilter) {\n columnsToUpdate.push(column);\n column[this.filterProp] = true;\n }\n });\n const itemsToTrim = this.getRowFilter(source, filterItems, columnByProp);\n // check is filter event prevented\n const { defaultPrevented, detail } = this.emit('beforefiltertrimmed', {\n collection,\n itemsToFilter: itemsToTrim,\n source,\n filterItems,\n });\n if (defaultPrevented) {\n return;\n }\n\n this.providers.data.setTrimmed({ [FILTER_TRIMMED_TYPE]: detail.itemsToFilter });\n\n // applies the hasFilter to the columns to show filter icon\n this.providers.column.updateColumns(columnsToUpdate);\n this.emit('afterfilterapply', {\n multiFilterItems: filterItems,\n source,\n collection,\n });\n }\n\n async clearFiltering() {\n this.multiFilterItems = {};\n await this.runFiltering(this.multiFilterItems);\n }\n\n async runFiltering(multiFilterItems: MultiFilterItem) {\n const collection: Record<ColumnProp, FilterCollectionItem> = {};\n\n // handle old filterCollection to return the first filter only (if any) from multiFilterItems\n const filterProps = Object.keys(multiFilterItems);\n\n for (const prop of filterProps) {\n // check if we have any filter for a column\n if (multiFilterItems[prop].length > 0) {\n const firstFilterItem = multiFilterItems[prop][0];\n collection[prop] = {\n type: firstFilterItem.type,\n value: firstFilterItem.value,\n };\n }\n }\n\n this.filterCollection = collection;\n const columns = this.providers.column.getColumns();\n // run the filtering on the main source only\n const source = this.providers.data.stores['rgRow'].store.get('source');\n\n const { defaultPrevented, detail } = this.emit('beforefilterapply', {\n collection: this.filterCollection,\n source,\n columns,\n filterItems: this.multiFilterItems,\n });\n if (defaultPrevented) {\n return;\n }\n this.doFiltering(\n detail.collection,\n detail.source,\n detail.columns,\n detail.filterItems,\n );\n }\n\n /**\n * Get trimmed rows based on filter\n */\n getRowFilter(\n rows: DataType[],\n filterItems: MultiFilterItem,\n columnByProp: Record<string, ColumnRegular>,\n ): TrimmedEntity {\n const propKeys = Object.keys(filterItems);\n\n const trimmed: TrimmedEntity = {};\n\n // each rows\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n // check filter by column properties\n for (const prop of propKeys) {\n // add to the list of removed/trimmed rows of filter condition is satisfied\n if (\n this.shouldTrimRow(\n filterItems[prop],\n prop,\n columnByProp[prop],\n rows[rowIndex],\n )\n ) {\n trimmed[rowIndex] = true;\n }\n } // end of for-of propKeys\n }\n return trimmed;\n }\n\n private shouldTrimRow(\n propFilters: FilterData[],\n prop: ColumnProp,\n column?: ColumnRegular,\n model: DataType = {},\n ) {\n // reset the count of satisfied filters\n let propFilterSatisfiedCount = 0;\n // reset the array of last filter results\n let lastFilterResults: boolean[] = [];\n\n // testing each filter for a prop\n for (const [filterIndex, filterData] of propFilters.entries()) {\n // the filter LogicFunction based on the type\n const filterFunc = this.filterFunctionsIndexedByType[filterData.type];\n\n // THE MAGIC OF FILTERING IS HERE\n // If there is no column but user wants to filter by a property\n const value = column ? getCellDataParsed(model, column) : model[prop];\n // OR relation\n if (filterData.relation === 'or') {\n // reset the array of last filter results\n lastFilterResults = [];\n // if the filter is satisfied, continue to the next filter\n if (filterFunc(value, filterData.value)) {\n continue;\n }\n // if the filter is not satisfied, count it\n propFilterSatisfiedCount++;\n\n // AND relation\n } else {\n // 'and' relation will need to know the next filter\n // so we save this current filter to include it in the next filter\n lastFilterResults.push(!filterFunc(value, filterData.value));\n\n if (isFinalAndFilter(filterIndex, propFilters)) {\n // let's just continue since for sure propFilterSatisfiedCount cannot be satisfied\n if (allAndConditionsSatisfied(lastFilterResults)) {\n // reset the array of last filter results\n lastFilterResults = [];\n continue;\n }\n\n // we need to add all of the lastFilterResults since we need to satisfy all\n propFilterSatisfiedCount += lastFilterResults.length;\n // reset the array of last filter results\n lastFilterResults = [];\n }\n }\n } // end of propFilters forEach\n return propFilterSatisfiedCount === propFilters.length;\n }\n}\n/**\n * Checks if the current filter is the final one in an AND sequence.\n * @param index - Current filter index in the list.\n * @param filters - Array of filters for the property.\n * @returns True if this is the last AND condition; false otherwise.\n */\nfunction isFinalAndFilter(index: number, filters: MultiFilterItem[string]): boolean {\n const nextFilter = filters[index + 1]; // Get the next filter in the list.\n // Return true if there's no next filter or if the next filter defined and is not part of the AND sequence.\n return !nextFilter || (!!nextFilter.relation && nextFilter.relation !== 'and');\n}\n\n/**\n * Determines if all conditions in an AND sequence are satisfied.\n * @param pendingResults - An array of results from the AND conditions.\n * @returns True if all conditions are satisfied; false otherwise.\n */\nfunction allAndConditionsSatisfied(pendingResults: boolean[]): boolean {\n // Check if there are any failed conditions in the pending results.\n return !pendingResults.includes(true);\n}\n","import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n","import baseProperty from './_baseProperty.js';\n\n/**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nvar asciiSize = baseProperty('length');\n\nexport default asciiSize;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nexport default hasUnicode;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nfunction unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n}\n\nexport default unicodeSize;\n","import asciiSize from './_asciiSize.js';\nimport hasUnicode from './_hasUnicode.js';\nimport unicodeSize from './_unicodeSize.js';\n\n/**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\nfunction stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n}\n\nexport default stringSize;\n","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArrayLike from './isArrayLike.js';\nimport isString from './isString.js';\nimport stringSize from './_stringSize.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\nfunction size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n}\n\nexport default size;\n","import type { CellCompareFunc, ColumnProp, ColumnRegular, DataType, Order } from '@type';\nimport type { SortingOrderFunction } from './sorting.types';\nimport { isGrouping } from '../groupingRow/grouping.service';\nimport { getCellRaw } from '../../utils/column.utils';\n\nexport function sortIndexByItems(\n indexes: number[],\n source: DataType[],\n sortingFunc: SortingOrderFunction = {},\n): number[] {\n // if no sorting - return unsorted indexes\n if (Object.entries(sortingFunc).length === 0) {\n // Unsorted indexes\n return [...Array(indexes.length).keys()];\n }\n //\n /**\n * go through all indexes and align in new order\n * performs a multi-level sorting by applying multiple comparison functions to determine the order of the items based on different properties.\n */\n return indexes.sort((a, b) => {\n const itemA = source[a];\n const itemB = source[b];\n for (const [prop, cmp] of Object.entries(sortingFunc)) {\n if (isGrouping(itemA)) {\n if (itemA['__rvgr-prop'] !== prop) {\n return 0;\n }\n }\n if (isGrouping(itemB)) {\n if (itemB['__rvgr-prop'] !== prop) {\n return 0;\n }\n }\n /**\n * If the comparison function returns a non-zero value (sorted), it means that the items should be sorted based on the given property. In such a case, the function immediately returns the sorted value, indicating the order in which the items should be arranged.\n * If none of the comparison functions result in a non-zero value, indicating that the items are equal or should remain in the same order, the function eventually returns 0.\n */\n const sorted = cmp?.(prop, itemA, itemB);\n if (sorted) {\n return sorted;\n }\n }\n return 0;\n });\n}\n\nexport function defaultCellCompare(this: { column?: ColumnRegular }, prop: ColumnProp, a: DataType, b: DataType) {\n const aRaw = this.column ? getCellRaw(a, this.column) : a?.[prop];\n const bRaw = this.column ? getCellRaw(b, this.column) : b?.[prop];\n const av = typeof aRaw === 'number' ? aRaw : aRaw?.toString().toLowerCase();\n const bv = typeof bRaw === 'number' ? bRaw : bRaw?.toString().toLowerCase();\n\n if (av === bv) {\n return 0;\n }\n if (av > bv) {\n return 1;\n }\n return -1;\n}\n\nexport function descCellCompare(cmp: CellCompareFunc) {\n return (prop: ColumnProp, a: DataType, b: DataType): number => {\n return -1 * cmp(prop, a, b);\n };\n}\n\nexport function getNextOrder(currentOrder: Order): Order {\n switch (currentOrder) {\n case undefined:\n return 'asc';\n case 'asc':\n return 'desc';\n case 'desc':\n return undefined;\n }\n}\n\n\nexport function getComparer(column: Partial<ColumnRegular> | undefined, order: Order): CellCompareFunc | undefined {\n const cellCmp: CellCompareFunc =\n column?.cellCompare?.bind({ order }) || defaultCellCompare?.bind({ column, order });\n if (order == 'asc') {\n return cellCmp;\n }\n if (order == 'desc') {\n return descCellCompare(cellCmp);\n }\n return undefined;\n}\n","import size from 'lodash/size';\nimport debounce from 'lodash/debounce';\n\nimport { BasePlugin } from '../base.plugin';\nimport type {\n Order,\n ColumnRegular,\n DimensionRows,\n PluginProviders,\n} from '@type';\nimport type { SortingConfig, SortingOrder, SortingOrderFunction } from './sorting.types';\nimport { getColumnByProp } from '../../utils/column.utils';\nimport { columnTypes, rowTypes } from '@store';\nimport { getComparer, getNextOrder, sortIndexByItems } from './sorting.func';\n\nexport * from './sorting.types';\nexport * from './sorting.func';\nexport * from './sorting.sign';\n\n/**\n * Lifecycle\n * 1. @event `beforesorting` - Triggered when sorting just starts. Nothing has happened yet. This can be triggered from a column or from the source. If the type is from rows, the column will be undefined.\n * 2. @event `beforesourcesortingapply` - Triggered before the sorting data is applied to the data source. You can prevent this event, and the data will not be sorted.\n * 3. @event `beforesortingapply` - Triggered before the sorting data is applied to the data source. You can prevent this event, and the data will not be sorted. This event is only called from a column sorting click.\n * 4. @event `aftersortingapply` - Triggered after sorting has been applied and completed. This event occurs for both row and column sorting.\n *\n * Note: If you prevent an event, it will not proceed to the subsequent steps.\n */\n\nexport class SortingPlugin extends BasePlugin {\n // Current sorting order per column prop\n sorting?: SortingOrder;\n\n // Each column sorting function, multiple columns sorting supported\n sortingFunc?: SortingOrderFunction;\n /**\n * Delayed sorting promise\n */\n sortingPromise: (() => void) | null = null;\n\n /**\n * We need to sort only so often\n */\n postponeSort = debounce(\n (order?: SortingOrder, comparison?: SortingOrderFunction, ignoreViewportUpdate?: boolean) =>\n this.runSorting(order, comparison, ignoreViewportUpdate),\n 50,\n );\n\n constructor(\n public revogrid: HTMLRevoGridElement,\n providers: PluginProviders,\n config?: SortingConfig,\n ) {\n super(revogrid, providers);\n\n const setConfig = (cfg?: SortingConfig) => {\n if (cfg) {\n const sortingFunc: SortingOrderFunction = {};\n const order: SortingOrder = {};\n cfg.columns?.forEach(col => {\n sortingFunc[col.prop] = getComparer(col, col.order);\n order[col.prop] = col.order;\n });\n\n if (cfg.additive) {\n this.sorting = {\n ...this.sorting,\n ...order,\n };\n this.sortingFunc = {\n ...this.sortingFunc,\n ...sortingFunc,\n };\n } else {\n // // set sorting\n this.sorting = order;\n this.sortingFunc = sortingFunc;\n }\n }\n }\n\n setConfig(config);\n\n this.addEventListener('sortingconfigchanged', ({ detail }) => {\n config = detail;\n setConfig(detail);\n this.startSorting(this.sorting, this.sortingFunc);\n });\n\n this.addEventListener('beforeheaderrender', ({\n detail,\n }) => {\n const { data: column } = detail;\n if (column.sortable) {\n detail.data = {\n ...column,\n order: this.sorting?.[column.prop],\n };\n }\n });\n\n this.addEventListener('beforeanysource', ({\n detail: { type },\n }) => {\n // if sorting was provided - sort data\n if (!!this.sorting && this.sortingFunc) {\n const event = this.emit('beforesourcesortingapply', { type, sorting: this.sorting });\n if (event.defaultPrevented) {\n return;\n }\n this.startSorting(this.sorting, this.sortingFunc);\n }\n });\n this.addEventListener('aftercolumnsset', ({\n detail: { order },\n }) => {\n // if config provided - do nothing, read from config\n if (config) {\n return;\n }\n\n const columns = this.providers.column.getColumns();\n const sortingFunc: SortingOrderFunction = {};\n\n for (let prop in order) {\n const cmp = getComparer(\n getColumnByProp(columns, prop),\n order[prop],\n );\n sortingFunc[prop] = cmp;\n }\n\n // set sorting\n this.sorting = order;\n this.sortingFunc = order && sortingFunc;\n });\n this.addEventListener('beforeheaderclick', (e) => {\n if (e.defaultPrevented) {\n return;\n }\n\n if (!e.detail?.column?.sortable) {\n return;\n }\n\n this.headerclick(\n e.detail.column,\n e.detail?.originalEvent?.shiftKey,\n );\n });\n }\n\n /**\n * Entry point for sorting, waits for all delayes, registers jobs\n */\n startSorting(order?: SortingOrder, sortingFunc?: SortingOrderFunction, ignoreViewportUpdate?: boolean) {\n if (!this.sortingPromise) {\n // add job before render\n this.revogrid.jobsBeforeRender.push(\n new Promise<void>(resolve => {\n this.sortingPromise = resolve;\n }),\n );\n }\n this.postponeSort(order, sortingFunc, ignoreViewportUpdate);\n }\n\n\n /**\n * Apply sorting to data on header click\n * If additive - add to existing sorting, multiple columns can be sorted\n */\n headerclick(column: ColumnRegular, additive: boolean) {\n const columnProp = column.prop;\n let order: Order = getNextOrder(this.sorting?.[columnProp]);\n const beforeEvent = this.emit('beforesorting', { column, order, additive });\n if (beforeEvent.defaultPrevented) {\n return;\n }\n order = beforeEvent.detail.order;\n\n // apply sort data\n const beforeApplyEvent = this.emit('beforesortingapply', {\n column: beforeEvent.detail.column,\n order,\n additive,\n });\n if (beforeApplyEvent.defaultPrevented) {\n return;\n }\n const cmp = getComparer(beforeApplyEvent.detail.column, beforeApplyEvent.detail.order);\n\n if (beforeApplyEvent.detail.additive && this.sorting) {\n const sorting: SortingOrder = {};\n const sortingFunc: SortingOrderFunction = {};\n\n if (columnProp in sorting && size(sorting) > 1 && order === undefined) {\n delete sorting[columnProp];\n delete sortingFunc[columnProp];\n } else {\n sorting[columnProp] = order;\n sortingFunc[columnProp] = cmp;\n } \n\n this.sorting = {\n ...this.sorting,\n ...sorting,\n };\n \n // extend sorting function with new sorting for multiple columns sorting\n this.sortingFunc = {\n ...this.sortingFunc,\n ...sortingFunc,\n };\n } else {\n if (order) {\n // reset sorting\n this.sorting = { [columnProp]: order };\n this.sortingFunc = { [columnProp]: cmp };\n } else {\n delete this.sorting?.[columnProp];\n delete this.sortingFunc?.[columnProp];\n }\n }\n\n this.startSorting(this.sorting, this.sortingFunc);\n }\n\n runSorting(\n order?: SortingOrder,\n comparison?: SortingOrderFunction,\n ignoreViewportUpdate?: boolean\n ) {\n this.sort(order, comparison, undefined, ignoreViewportUpdate);\n this.sortingPromise?.();\n this.sortingPromise = null;\n }\n\n /**\n * Sort items by sorting function\n * @requires proxyItems applied to row store\n * @requires source applied to row store\n *\n * @param sorting - per column sorting\n * @param data - this.stores['rgRow'].store.get('source')\n */\n sort(\n sorting?: SortingOrder,\n sortingFunc?: SortingOrderFunction,\n types: DimensionRows[] = rowTypes,\n ignoreViewportUpdate = false\n ) {\n // if no sorting - reset\n if (!Object.keys(sorting || {}).length) {\n for (let type of types) {\n const storeService = this.providers.data.stores[type];\n // row data\n const source = storeService.store.get('source');\n // row indexes\n const proxyItems = storeService.store.get('proxyItems');\n // row indexes\n const newItemsOrder = Array.from({ length: source.length }, (_, i) => i); // recover indexes range(0, source.length)\n this.providers.dimension.updateSizesPositionByNewDataIndexes(type, newItemsOrder, proxyItems);\n storeService.setData({ proxyItems: newItemsOrder, source: [...source], });\n }\n } else {\n for (let type of types) {\n const storeService = this.providers.data.stores[type];\n // row data\n const source = storeService.store.get('source');\n // row indexes\n const proxyItems = storeService.store.get('proxyItems');\n\n const newItemsOrder = sortIndexByItems(\n [...proxyItems],\n source,\n sortingFunc,\n );\n \n // take row indexes before trim applied and proxy items\n const prevItems = storeService.store.get('items');\n storeService.setData({\n proxyItems: newItemsOrder,\n source: [...source],\n });\n // take currently visible row indexes\n const newItems = storeService.store.get('items');\n if (!ignoreViewportUpdate) {\n this.providers.dimension\n .updateSizesPositionByNewDataIndexes(type, newItems, prevItems);\n }\n }\n }\n // refresh columns to redraw column headers and show correct icon\n columnTypes.forEach((type) => {\n this.providers.column.dataSources[type].refresh();\n });\n this.emit('aftersortingapply');\n }\n}\n\n\n","import { DataType } from '@type';\nimport { PSEUDO_GROUP_ITEM_ID, PSEUDO_GROUP_ITEM_VALUE, GROUP_EXPANDED, GROUP_DEPTH } from './grouping.const';\nimport { isGrouping, getParsedGroup, isSameGroup } from './grouping.service';\n\n// provide collapse data\nexport function doCollapse(pIndex: number, source: DataType[]) {\n const model = source[pIndex];\n const collapseValue = model[PSEUDO_GROUP_ITEM_VALUE];\n const trimmed: Record<number, boolean> = {};\n let i = pIndex + 1;\n const total = source.length;\n while (i < total) {\n const currentModel = source[i];\n if (isGrouping(currentModel)) {\n const currentValue = currentModel[PSEUDO_GROUP_ITEM_VALUE];\n if (!currentValue.length || !currentValue.startsWith(collapseValue + ',')) {\n break;\n }\n currentModel[GROUP_EXPANDED] = false;\n }\n trimmed[i++] = true;\n }\n model[GROUP_EXPANDED] = false;\n return { trimmed };\n}\n\n/**\n *\n * @param pIndex - physical index\n * @param vIndex - virtual index, need to update item collection\n * @param source - data source\n * @param rowItemsIndexes - rgRow indexes\n */\nexport function doExpand(vIndex: number, source: DataType[], rowItemsIndexes: number[]) {\n const physicalIndex = rowItemsIndexes[vIndex];\n const model = source[physicalIndex];\n const currentGroup = getParsedGroup(model[PSEUDO_GROUP_ITEM_ID]);\n const trimmed: Record<number, boolean> = {};\n\n // no group found\n if (!currentGroup) {\n return { trimmed };\n }\n\n const groupItems: number[] = [];\n model[GROUP_EXPANDED] = true;\n let i = physicalIndex + 1;\n const total = source.length;\n let groupLevelOnly = 0;\n\n // go through all rows\n while (i < total) {\n const currentModel = source[i];\n const isGroup = isGrouping(currentModel);\n // group found\n if (isGroup) {\n if (!isSameGroup(currentGroup, model, currentModel)) {\n break;\n } else if (!groupLevelOnly) {\n // if get group first it's group only level\n groupLevelOnly = currentModel[GROUP_DEPTH];\n }\n }\n // level 0 or same depth\n if (!groupLevelOnly || (isGroup && groupLevelOnly === currentModel[GROUP_DEPTH])) {\n trimmed[i] = false;\n groupItems.push(i);\n }\n i++;\n }\n const result: {\n trimmed: Record<number, boolean>;\n items?: number[];\n } = {\n trimmed,\n };\n if (groupItems.length) {\n const items = [...rowItemsIndexes];\n items.splice(vIndex + 1, 0, ...groupItems);\n result.items = items;\n }\n return result;\n}\n","import { gatherTrimmedItems, Trimmed, TrimmedEntity } from '@store';\n\nexport const TRIMMED_GROUPING = 'grouping';\n\n/**\n * Prepare trimming updated indexes for grouping\n * @param initiallyTrimed\n * @param firstLevelMap\n * @param secondLevelMap\n */\nexport function processDoubleConversionTrimmed(initiallyTrimed: Trimmed, firstLevelMap: Record<number, number>, secondLevelMap?: Record<number, number>) {\n const trimemedOptionsToUpgrade: Trimmed = {};\n /**\n * go through all groups except grouping\n */\n for (let type in initiallyTrimed) {\n if (type === TRIMMED_GROUPING) {\n continue;\n }\n const items = initiallyTrimed[type];\n const newItems: TrimmedEntity = {};\n\n for (let initialIndex in items) {\n /**\n * if item exists we find it in collection\n * we support 2 level of conversions\n */\n let newConversionIndex = firstLevelMap[initialIndex];\n if (secondLevelMap) {\n newConversionIndex = secondLevelMap[newConversionIndex];\n }\n\n /**\n * if item was trimmed previously\n * trimming makes sense to apply\n */\n if (items[initialIndex]) {\n newItems[newConversionIndex] = true;\n /**\n * If changes present apply changes to new source\n */\n if (newConversionIndex !== parseInt(initialIndex, 10)) {\n trimemedOptionsToUpgrade[type] = newItems;\n }\n }\n }\n }\n return trimemedOptionsToUpgrade;\n}\n\nexport function filterOutEmptyGroups(allTrimmedGroups: Trimmed, childrenByGroup: Record<number, number[]> = {}) {\n const trimmedGroup: TrimmedEntity = {};\n const allTrimmed = gatherTrimmedItems(allTrimmedGroups);\n // find is groups are filled\n for (let groupIndex in childrenByGroup) {\n const hasChidlren = childrenByGroup[groupIndex].filter(childIndex => !allTrimmed[childIndex]).length > 0;\n if (!hasChidlren) {\n trimmedGroup[groupIndex] = true;\n }\n }\n return trimmedGroup;\n}\n","import {\n getPhysical,\n setItems,\n columnTypes,\n type TrimmedEntity,\n type DSourceState,\n} from '@store';\nimport type {\n BeforeSaveDataDetails,\n ColumnRegular,\n DataType,\n DimensionRows,\n PluginProviders,\n} from '@type';\n\nimport { BasePlugin } from '../base.plugin';\nimport { FILTER_TRIMMED_TYPE } from '../filter/filter.plugin';\n\nimport type { Observable, ColumnCollection } from '../../utils';\nimport { SortingPlugin } from '../sorting/sorting.plugin';\n\nimport {\n GROUP_EXPAND_EVENT,\n GROUPING_ROW_TYPE,\n PSEUDO_GROUP_COLUMN,\n} from './grouping.const';\nimport { doExpand, doCollapse } from './grouping.row.expand.service';\nimport type {\n BeforeSourceSetEvent,\n ExpandedOptions,\n GroupingOptions,\n OnExpandEvent,\n} from './grouping.row.types';\nimport {\n gatherGrouping,\n getExpanded,\n getSource,\n isGrouping,\n isGroupingColumn,\n} from './grouping.service';\nimport {\n processDoubleConversionTrimmed,\n TRIMMED_GROUPING,\n} from './grouping.trimmed.service';\n\nexport * from './grouping.const';\nexport * from './grouping.row.expand.service';\nexport * from './grouping.row.types';\nexport * from './grouping.service';\nexport * from './grouping.row.renderer';\n\nexport class GroupingRowPlugin extends BasePlugin {\n private options: GroupingOptions | undefined;\n\n getStore(\n type: DimensionRows = GROUPING_ROW_TYPE,\n ): Observable<DSourceState<DataType, DimensionRows>> {\n return this.providers.data.stores[type].store;\n }\n\n constructor(\n revogrid: HTMLRevoGridElement,\n providers: PluginProviders,\n ) {\n super(revogrid, providers);\n }\n\n // befoce cell focus\n private onFocus(e: CustomEvent<BeforeSaveDataDetails>) {\n if (isGrouping(e.detail.model)) {\n e.preventDefault();\n }\n }\n\n // expand event triggered\n private onExpand({ virtualIndex }: OnExpandEvent) {\n const { source } = getSource(\n this.getStore().get('source'),\n this.getStore().get('proxyItems'),\n );\n let newTrimmed = this.getStore().get('trimmed')[TRIMMED_GROUPING];\n\n let i = getPhysical(this.getStore(), virtualIndex);\n const isExpanded = getExpanded(source[i]);\n if (!isExpanded) {\n const { trimmed, items } = doExpand(\n virtualIndex,\n source,\n this.getStore().get('items'),\n );\n newTrimmed = { ...newTrimmed, ...trimmed };\n if (items) {\n setItems(this.getStore(), items);\n }\n } else {\n const { trimmed } = doCollapse(i, source);\n newTrimmed = { ...newTrimmed, ...trimmed };\n this.revogrid.clearFocus();\n }\n\n this.getStore().set('source', source);\n this.revogrid.addTrimmed(newTrimmed, TRIMMED_GROUPING);\n }\n\n private setColumnGrouping(cols?: ColumnRegular[]) {\n // if 0 column as holder\n if (cols?.length) {\n cols[0][PSEUDO_GROUP_COLUMN] = true;\n return true;\n }\n return false;\n }\n\n private setColumns({ columns }: ColumnCollection) {\n for (let type of columnTypes) {\n if (this.setColumnGrouping(columns[type])) {\n break;\n }\n }\n }\n\n // evaluate drag between groups\n private onDrag(e: CustomEvent<{ from: number; to: number }>) {\n const { from, to } = e.detail;\n const isDown = to - from >= 0;\n const { source } = getSource(\n this.getStore().get('source'),\n this.getStore().get('proxyItems'),\n );\n const items = this.getStore().get('items');\n let i = isDown ? from : to;\n const end = isDown ? to : from;\n for (; i < end; i++) {\n const model = source[items[i]];\n const isGroup = isGrouping(model);\n if (isGroup) {\n e.preventDefault();\n return;\n }\n }\n }\n\n private beforeTrimmedApply(trimmed: Record<number, boolean>, type: string) {\n /** Before filter apply remove grouping filtering */\n if (type === FILTER_TRIMMED_TYPE) {\n const source = this.getStore().get('source');\n for (let index in trimmed) {\n if (trimmed[index] && isGrouping(source[index])) {\n trimmed[index] = false;\n }\n }\n }\n }\n\n private isSortingRunning() {\n const sortingPlugin = this.providers.plugins.getByClass(SortingPlugin);\n return !!sortingPlugin?.sortingPromise;\n }\n\n /**\n * Starts global source update with group clearing and applying new one\n * Initiated when need to reapply grouping\n */\n private doSourceUpdate(options?: ExpandedOptions) {\n /**\n * Get source without grouping\n * @param newOldIndexMap - provides us mapping with new indexes vs old indexes, we would use it for trimmed mapping\n */\n const store = this.getStore();\n const { source, prevExpanded, oldNewIndexes } = getSource(\n store.get('source'),\n store.get('proxyItems'),\n true,\n );\n const expanded: ExpandedOptions = {\n prevExpanded,\n ...options,\n };\n /**\n * Group again\n * @param oldNewIndexMap - provides us mapping with new indexes vs old indexes\n */\n const {\n sourceWithGroups,\n depth,\n trimmed,\n oldNewIndexMap,\n } = gatherGrouping(source, this.options?.props || [], expanded);\n\n const customRenderer = options?.groupLabelTemplate;\n\n // setup source\n this.providers.data.setData(\n sourceWithGroups,\n GROUPING_ROW_TYPE,\n this.revogrid.disableVirtualY,\n { depth, customRenderer },\n true,\n );\n this.updateTrimmed(\n trimmed,\n oldNewIndexes ?? {},\n oldNewIndexMap,\n );\n }\n\n /**\n * Apply grouping on data set\n * Clear grouping from source\n * If source came from other plugin\n */\n private onDataSet(data: BeforeSourceSetEvent) {\n let preservedExpanded: ExpandedOptions['prevExpanded'] = {};\n if (this.options?.preserveGroupingOnUpdate !== false) {\n let { prevExpanded } = getSource(\n this.getStore().get('source'),\n this.getStore().get('proxyItems'),\n true,\n );\n preservedExpanded = prevExpanded;\n }\n const source = data.source.filter(s => !isGrouping(s));\n const options: ExpandedOptions = {\n ...(this.revogrid.grouping || {}),\n prevExpanded: preservedExpanded,\n };\n const {\n sourceWithGroups,\n depth,\n trimmed,\n oldNewIndexMap,\n } = gatherGrouping(source, this.options?.props || [], options);\n data.source = sourceWithGroups;\n this.providers.data.setGrouping({ depth });\n this.updateTrimmed(trimmed, oldNewIndexMap);\n }\n\n /**\n * External call to apply grouping. Called by revogrid when prop changed.\n */\n setGrouping(options: GroupingOptions) {\n // unsubscribe from all events when group applied\n this.clearSubscriptions();\n this.options = options;\n // clear props, no grouping exists\n if (!this.options?.props?.length) {\n this.clearGrouping();\n return;\n }\n // props exist and source initd\n const store = this.getStore();\n const { source } = getSource(\n store.get('source'),\n store.get('proxyItems'),\n );\n if (source.length) {\n this.doSourceUpdate({ ...options });\n }\n // props exist and columns initd\n for (let t of columnTypes) {\n if (this.setColumnGrouping(this.providers.column.getColumns(t))) {\n this.providers.column.refreshByType(t);\n break;\n }\n }\n\n // if has any grouping subscribe to events again\n /** if grouping present and new data source arrived */\n this.addEventListener('beforesourceset', ({ detail }) => {\n if (!(this.options?.props?.length && detail?.source?.length)) {\n return;\n }\n // if sorting is running don't apply grouping, wait for sorting, then it'll apply in @aftersortingapply\n if (this.isSortingRunning()) {\n return;\n }\n this.onDataSet(detail);\n });\n this.addEventListener('beforecolumnsset', ({ detail }) => {\n this.setColumns(detail);\n });\n\n /**\n * filter applied need to clear grouping and apply again\n * based on new results can be new grouping\n */\n this.addEventListener(\n 'beforetrimmed',\n ({ detail: { trimmed, trimmedType } }) =>\n this.beforeTrimmedApply(trimmed, trimmedType),\n );\n /**\n * sorting applied need to clear grouping and apply again\n * based on new results whole grouping order will changed\n */\n this.addEventListener('aftersortingapply', () => {\n if (!this.options?.props?.length) {\n return;\n }\n this.doSourceUpdate({ ...this.options });\n });\n\n /**\n * Apply logic for focus inside of grouping\n * We can't focus on grouping rows, navigation only inside of groups for now\n */\n this.addEventListener('beforecellfocus', e => this.onFocus(e));\n /**\n * Prevent rgRow drag outside the group\n */\n this.addEventListener('roworderchanged', e => this.onDrag(e));\n\n /**\n * When grouping expand icon was clicked\n */\n this.addEventListener(GROUP_EXPAND_EVENT, e => this.onExpand(e.detail));\n }\n\n // clear grouping\n clearGrouping() {\n // clear columns\n columnTypes.forEach(t => {\n const cols = this.providers.column.getColumns(t);\n let deleted = false;\n cols.forEach(c => {\n if (isGroupingColumn(c)) {\n delete c[PSEUDO_GROUP_COLUMN];\n deleted = true;\n }\n });\n // if column store had grouping clear and refresh\n if (deleted) {\n this.providers.column.refreshByType(t);\n }\n });\n // clear rows\n const { source, oldNewIndexes } = getSource(\n this.getStore().get('source'),\n this.getStore().get('proxyItems'),\n true,\n );\n this.providers.data.setData(\n source,\n GROUPING_ROW_TYPE,\n this.revogrid.disableVirtualY,\n undefined,\n true,\n );\n this.updateTrimmed(undefined, undefined, oldNewIndexes);\n }\n\n private updateTrimmed(\n trimmedGroup: TrimmedEntity = {},\n firstLevelMap: Record<number, number> = {},\n secondLevelMap?: Record<number, number>,\n ) {\n // map previously trimmed data\n const trimemedOptionsToUpgrade = processDoubleConversionTrimmed(\n this.getStore().get('trimmed'),\n firstLevelMap,\n secondLevelMap,\n );\n for (let type in trimemedOptionsToUpgrade) {\n this.revogrid.addTrimmed(trimemedOptionsToUpgrade[type], type);\n }\n\n // const emptyGroups = this.filterOutEmptyGroups(trimemedOptionsToUpgrade, childrenByGroup);\n\n // setup trimmed data for grouping\n this.revogrid.addTrimmed({ ...trimmedGroup }, TRIMMED_GROUPING);\n }\n}\n","const COLUMN_DRAG_CLASS = 'column-drag-start';\n\nexport class ColumnOrderHandler {\n private element?: HTMLDivElement;\n private autoscrollEl?: HTMLElement;\n private offset = 0;\n\n renderAutoscroll(_: MouseEvent, parent: HTMLElement | null) {\n if (!parent) {\n return;\n }\n this.autoscrollEl = document.createElement('div');\n this.autoscrollEl.classList.add('drag-auto-scroll-y');\n parent.appendChild(this.autoscrollEl);\n }\n\n autoscroll(pos: number, dataContainerSize: number, direction = 'translateX') {\n if (!this.autoscrollEl) {\n return;\n }\n const helperOffset = 10;\n // calculate current y position inside of the grid active holder\n // 3 - size of element + border\n const maxScroll = Math.min(pos + helperOffset, dataContainerSize - 3);\n\n this.autoscrollEl.style.transform = `${direction}(${maxScroll}px)`;\n this.autoscrollEl.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n\n start(e: MouseEvent, { dataEl, gridRect, scrollEl, gridEl }: {\n dataEl: HTMLElement;\n gridRect: DOMRect;\n scrollEl: Element;\n gridEl: Element;\n }, dir: 'top' | 'left' = 'left') {\n gridEl.classList.add(COLUMN_DRAG_CLASS);\n const scrollContainerRect = scrollEl.getBoundingClientRect();\n if (scrollContainerRect) {\n this.offset = scrollContainerRect[dir] - gridRect[dir];\n }\n this.renderAutoscroll(e, dataEl);\n }\n\n stop(gridEl: Element) {\n gridEl.classList.remove(COLUMN_DRAG_CLASS);\n if (this.element) {\n this.element.hidden = true;\n }\n this.offset = 0;\n this.autoscrollEl?.remove();\n this.autoscrollEl = undefined;\n }\n\n showHandler(pos: number, size: number, direction = 'translateX') {\n if (!this.element) {\n return;\n }\n // do not allow overcross top of the scrollable area, header excluded\n if (this.offset) {\n pos = Math.max(pos, this.offset);\n }\n // can not be bigger then grid end\n pos = Math.min(pos, size);\n this.element.style.transform = `${direction}(${pos}px)`;\n this.element.hidden = false;\n }\n\n render() {\n const el = this.element = document.createElement('div');\n el.classList.add('drag-position-y');\n el.hidden = true;\n return el;\n }\n}\n","/**\n * Plugin for column manual move\n */\nimport debounce from 'lodash/debounce';\nimport each from 'lodash/each';\nimport { getItemByPosition } from '@store';\nimport { BasePlugin } from '../base.plugin';\nimport { ColumnOrderHandler } from './order-column.handler';\nimport { dispatch } from '../dispatcher';\nimport type { ColumnPropProp, ColumnTemplateProp, DimensionSettingsState, PositionItem, DimensionCols, MultiDimensionType, PluginProviders } from '@type';\nimport { ON_COLUMN_CLICK } from '../../components/header/header-cell-renderer';\nimport { isColGrouping } from '../../utils/column.utils';\n\nconst COLUMN_CLICK = ON_COLUMN_CLICK;\nconst MOVE = 'columndragmousemove';\nconst DRAG_END = 'columndragend';\nconst BEFORE_DRAG_END = 'beforecolumndragend';\n\n// use this event subscription to drop D&D for particular columns\nconst DRAG_START = 'columndragstart';\n\nexport type DragStartEventDetails = {\n event: MouseEvent;\n data: ColumnPropProp;\n};\n\ntype StaticData = {\n startPos: number;\n startItem: PositionItem;\n data: ColumnTemplateProp;\n dataEl: HTMLElement;\n scrollEl: Element;\n gridEl: HTMLElement;\n cols: DimensionSettingsState;\n};\n\ntype LocalSubscriptions = Record<string, LocalSubscription>;\ntype LocalSubscription = {\n target: Element | Document;\n callback(...params: any[]): void;\n};\nexport type ColumnDragEventData = {\n elRect: DOMRect;\n gridRect: DOMRect;\n scrollOffset: number;\n type: DimensionCols;\n};\nexport class ColumnMovePlugin extends BasePlugin {\n private moveFunc = debounce((e: MouseEvent) => this.doMove(e), 5);\n private staticDragData: StaticData | null = null;\n private dragData: ColumnDragEventData | null = null;\n private readonly orderUi: ColumnOrderHandler;\n protected readonly localSubscriptions: LocalSubscriptions = {};\n constructor(public revogrid: HTMLRevoGridElement, public providers: PluginProviders) {\n super(revogrid, providers);\n this.orderUi = new ColumnOrderHandler();\n revogrid.appendChild(this.orderUi.render());\n revogrid.classList.add('column-draggable');\n\n // Register events\n this.localSubscriptions['mouseleave'] = {\n target: document,\n callback: (e: MouseEvent) => this.onMouseOut(e),\n };\n this.localSubscriptions['mouseup'] = {\n target: document,\n callback: (e: MouseEvent) => this.onMouseUp(e),\n };\n\n this.localSubscriptions['mousemove'] = {\n target: document,\n callback: (e: MouseEvent) => this.move(e),\n };\n\n this.addEventListener(COLUMN_CLICK, ({ detail }) => this.dragStart(detail));\n }\n\n dragStart({ event, data }: DragStartEventDetails) {\n if (event.defaultPrevented) {\n return;\n }\n const { defaultPrevented } = dispatch(this.revogrid, DRAG_START, data);\n // check if allowed to drag particulat column\n if (defaultPrevented) {\n return;\n }\n this.clearOrder();\n const { mouseleave, mouseup, mousemove } = this.localSubscriptions;\n mouseleave.target.addEventListener('mouseleave', mouseleave.callback);\n mouseup.target.addEventListener('mouseup', mouseup.callback);\n\n const dataEl = (event.target as HTMLElement).closest('revogr-header');\n const scrollEl = (event.target as HTMLElement).closest('revogr-viewport-scroll');\n if (!dataEl || !scrollEl) {\n return;\n }\n\n // no grouping drag and no row header column drag\n if (isColGrouping(data) || data.providers.type === 'rowHeaders') {\n return;\n }\n\n const cols = this.getDimension(data.pin || 'rgCol');\n const gridRect = this.revogrid.getBoundingClientRect();\n const elRect = dataEl.getBoundingClientRect();\n const startItem = getItemByPosition(\n cols,\n getLeftRelative(event.x, gridRect.left, elRect.left - gridRect.left));\n \n this.staticDragData = {\n startPos: event.x,\n startItem,\n data,\n dataEl,\n scrollEl,\n gridEl: this.revogrid,\n cols,\n };\n this.dragData = this.getData(this.staticDragData);\n mousemove.target.addEventListener('mousemove', mousemove.callback);\n this.orderUi.start(event, {\n ...this.dragData,\n ...this.staticDragData,\n });\n }\n\n doMove(e: MouseEvent) {\n if (!this.staticDragData) {\n return;\n }\n\n const dragData = (this.dragData = this.getData(this.staticDragData));\n if (!dragData) {\n return;\n }\n const start = this.staticDragData.startPos;\n if (Math.abs(start - e.x) > 10) {\n const x = getLeftRelative(e.x, this.dragData.gridRect.left, this.dragData.scrollOffset);\n const rgCol = getItemByPosition(this.staticDragData.cols, x);\n this.orderUi.autoscroll(x, dragData.elRect.width);\n\n // prevent position change if out of bounds\n if (rgCol.itemIndex >= this.staticDragData.cols.count) {\n return;\n }\n this.orderUi.showHandler(\n rgCol.end + dragData.scrollOffset,\n dragData.gridRect.width\n );\n }\n }\n\n move(e: MouseEvent) {\n dispatch(this.revogrid, MOVE, e);\n // then do move\n this.moveFunc(e);\n }\n onMouseOut(_: MouseEvent) {\n this.clearOrder();\n }\n onMouseUp(e: MouseEvent) {\n // apply new positions\n if (this.dragData && this.staticDragData) {\n let relativePos = getLeftRelative(e.x, this.dragData.gridRect.left, this.dragData.scrollOffset);\n if (relativePos < 0) {\n relativePos = 0;\n }\n const newPosition = getItemByPosition(this.staticDragData.cols, relativePos);\n\n const store = this.providers.column.stores[this.dragData.type].store;\n const newItems = [...store.get('items')];\n\n // prevent position change if needed\n const { defaultPrevented: stopDrag } = dispatch(this.revogrid, BEFORE_DRAG_END, {\n ...this.staticDragData,\n startPosition: this.staticDragData.startItem,\n newPosition,\n newItem: store.get('source')[newItems[this.staticDragData.startItem.itemIndex]]\n });\n if (!stopDrag) {\n const prevItems = [...newItems];\n // todo: if move item out of group remove item from group\n const toMove = newItems.splice(this.staticDragData.startItem.itemIndex, 1);\n newItems.splice(newPosition.itemIndex, 0, ...toMove);\n store.set('items', newItems);\n this.providers.dimension.updateSizesPositionByNewDataIndexes(this.dragData.type, newItems, prevItems);\n }\n dispatch(this.revogrid, DRAG_END, this.dragData);\n }\n this.clearOrder();\n }\n\n private clearLocalSubscriptions() {\n each(this.localSubscriptions, ({ target, callback }, key) => target.removeEventListener(key, callback));\n }\n\n clearOrder() {\n this.staticDragData = null;\n this.dragData = null;\n this.clearLocalSubscriptions();\n this.orderUi.stop(this.revogrid);\n }\n /**\n * Clearing subscription\n */\n clearSubscriptions() {\n super.clearSubscriptions();\n this.clearLocalSubscriptions();\n }\n\n private getData({\n gridEl,\n dataEl,\n data,\n }: StaticData): ColumnDragEventData {\n const gridRect = gridEl.getBoundingClientRect();\n const elRect = dataEl.getBoundingClientRect();\n const scrollOffset = elRect.left - gridRect.left;\n return {\n elRect,\n gridRect,\n type: data.pin || 'rgCol',\n scrollOffset,\n };\n }\n private getDimension(type: MultiDimensionType) {\n return this.providers.dimension.stores[type].getCurrentState();\n }\n}\n\nexport function getLeftRelative(\n absoluteX: number,\n gridPos: number,\n offset: number\n): number {\n return absoluteX - gridPos - offset;\n}\n"],"names":["createStore","reduce","setStore","calculateDimensionData","h","identity","isArray","baseEach","getColumnType","each","getSourceItem","columnTypes","getScrollbarSize","calculateRowHeaderSize","toInteger","isGrouping","getGroupingName","timeout","rowTypes","gt","FILTER_PROP","isFilterBtn","getCellDataParsed","isObjectLike","baseGetTag","baseProperty","rsAstralRange","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsVarRange","rsZWJ","isArrayLike","getTag","baseKeys","getCellRaw","debounce","getColumnByProp","PSEUDO_GROUP_ITEM_VALUE","GROUP_EXPANDED","getParsedGroup","PSEUDO_GROUP_ITEM_ID","isSameGroup","GROUP_DEPTH","GROUPING_ROW_TYPE","getSource","getPhysical","getExpanded","setItems","PSEUDO_GROUP_COLUMN","gatherGrouping","GROUP_EXPAND_EVENT","isGroupingColumn","ON_COLUMN_CLICK","dispatch","isColGrouping","getItemByPosition"],"mappings":";;;;;;;;;;;;;AAGA;;AAEG;AACI,MAAM,yBAAyB,GAAG,CAAC,YAGzC,KAA6C;AAC5C;;AAEG;IACH,OAAO;AACL;;AAEG;AACH,QAAA,GAAG,CAAC,CAAC,EAAA;YACH,QAAQ,CAAC;AACP,gBAAA,KAAK,OAAO;AACZ,gBAAA,KAAK,OAAO;gBACZ,KAAK,gBAAgB,EAAE;;oBAErB,IAAI,QAAQ,GAAG,CAAC;oBAChB,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;AAC7C,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;wBAC9B,QAAQ;4BACN,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClC,gCAAA,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC;;AAE5C,oBAAA,YAAY,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;oBACnC;;;SAGL;KACF;AACH,CAAC;;AClCD;;;;;;AAMG;AACI,MAAM,aAAa,GAAG,CAAC,YAG7B,KAA6C;IAC5C,IAAI,cAAc,GAA2C,IAAI;IACjE,IAAI,oBAAoB,GAA2C,IAAI;IAEvE,OAAO;QACL,GAAG,CAAC,GAAG,EAAE,GAAG,EAAA;YACV,QAAQ,GAAG;gBACT,KAAK,OAAO,EAAE;;AAEZ,oBAAA,IAAI,cAAc,IAAI,cAAc,KAAK,GAAG,EAAE;wBAC5C,cAAc,GAAG,IAAI;wBACrB;;oBAEF,oBAAoB,GAAG,IAAI;oBAC3B;;gBAEF,KAAK,SAAS,EAAE;oBACd,MAAM,IAAI,GAAG,GAAwC;oBACrD,IAAI,CAAC,oBAAoB,EAAE;wBACzB,oBAAoB,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;;oBAGxD,cAAc,GAAG,sBAAsB,CACrC,oBAAoB,EACpB,IAAI,IAAI,EAAE,CACX;;AAED,oBAAA,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC;oBACrC;;;SAGL;KACF;AACH,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAAqC,EACrC,QAAwC,EAAA;IAExC,MAAM,QAAQ,GAAmC,EAAE;IACnD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;SAC1C,GAAG,CAAC,MAAM;AACV,SAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxB,MAAM,SAAS,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IACzD,IAAI,KAAK,GAAG,CAAC;AACb,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE;AACnC,QAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;AAC7B,YAAA,KAAK,EAAE;;AAGP,YAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;gBAC1B;;;AAGJ,QAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;YAC1B,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;;;AAGlC,IAAA,OAAO,QAAQ;AACjB;;ACvEA;;;AAGG;AAqBH,SAAS,WAAW,GAAA;IAClB,OAAO;AACL,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,KAAK,EAAE,CAAC;;AAGR,QAAA,OAAO,EAAE,IAAI;;AAGb,QAAA,KAAK,EAAE,EAAE;;AAET,QAAA,mBAAmB,EAAE,EAAE;;AAEvB,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,eAAe,EAAE,EAAE;KACpB;AACH;AAEA,SAAS,YAAY,GAAA;AACnB,IAAA,OAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,WAAW,EAAE,CAAA,EAAA;;AAEhB,QAAA,QAAQ,EAAE,CAAC;;QAGX,cAAc,EAAE,CAAC,EACjB,CAAA;AACJ;MAEa,cAAc,CAAA;AAEzB,IAAA,WAAA,CAA4B,IAAwB,EAAA;QAAxB,IAAI,CAAA,IAAA,GAAJ,IAAI;QAC9B,IAAI,CAAC,KAAK,GAAGA,6BAAW,CAAC,YAAY,EAAE,CAAC;AACxC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3C,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC;YACvC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,SAAA,CAAC,CAAC;;IAGL,eAAe,GAAA;AACb,QAAA,MAAM,KAAK,GAAG,YAAY,EAAE;QAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/B,OAAOC,qBAAM,CACX,IAAI,EACJ,CAAC,CAAyB,EAAE,CAAO,KAAI;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,YAAA,CAAC,CAAC,CAAC,CAAC,GAAG,IAAa;AACpB,YAAA,OAAO,CAAC;SACT,EACD,KAAK,CACN;;IAGH,OAAO,GAAA;QACLC,0BAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC;;AAGtC,IAAA,QAAQ,CAAgC,IAAgB,EAAA;AACtD,QAAAA,0BAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;;IAG5B,IAAI,GAAA;QACFA,0BAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC;;AAGrC;;;;AAIG;IACH,gBAAgB,CAAC,QAA6B,EAAE,EAAA;AAC9C,QAAA,MAAM,aAAa,GAAGC,wCAAsB,CAC1C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAChC,KAAK,CACN;QACDD,0BAAQ,CAAC,IAAI,CAAC,KAAK,kCACd,aAAa,CAAA,EAAA,EAChB,KAAK,EAAA,CAAA,CACL;;AAGJ,IAAA,4BAA4B,CAAC,aAAuB,EAAE,cAAA,GAA2B,EAAE,EAAA;;QAEjF,MAAM,WAAW,GAAO,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE;YACpC;;;QAGF,MAAM,eAAe,GAA6B,EAAE;QACpD,cAAc,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,SAAS,KAAI;AAC9C,YAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE;AAC/B,gBAAA,eAAe,CAAC,SAAS,CAAC,GAAG,EAAE;;YAEjC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC7C,SAAC,CAAC;;QAGF,MAAM,QAAQ,GAA2B,EAAE;QAE3C,aAAa,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,SAAS,KAAI;YAC7C,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;YAE3C,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBACjC,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;AAEtC,gBAAA,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS,IAAI,WAAW,CAAC,aAAa,CAAC,EAAE;oBAC5F,QAAQ,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC;AAChD,oBAAA,OAAO,WAAW,CAAC,aAAa,CAAC;;;AAGvC,SAAC,CAAC;;QAGF,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;AAChC,YAAA,IAAI,CAAC,gBAAgB,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAChB,WAAW,CACX,EAAA,QAAQ,EACX;;;AAGP;;AC9ID;;;;AAIG;MACU,UAAU,CAAA;IAGrB,WAAmB,CAAA,QAA6B,EAAS,SAA0B,EAAA;QAAhE,IAAQ,CAAA,QAAA,GAAR,QAAQ;QAA8B,IAAS,CAAA,SAAA,GAAT,SAAS;QAFzD,IAAC,CAAA,CAAA,GAAGE,OAAC;QACL,IAAa,CAAA,aAAA,GAA6C,EAAE;;AAErE;;;;AAIG;IACH,gBAAgB,CACd,SAAY,EACZ,QAAoF,EAAA;QAEpF,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAmB,EAAE,QAAQ,CAAC;AAC7D,QAAA,IAAI,CAAC,aAAa,CAAC,SAAmB,CAAC,GAAG,QAAQ;;AAGpD;;;;;;;AAOG;AACH,IAAA,KAAK,CACH,IAAY,EACZ,QAAoC,EACpC,EAAE,SAAS,EAAA,GAA2B,EAAE,SAAS,EAAE,KAAK,EAAE,EAAA;QAE1D,MAAM,eAAe,GACnB,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;AACpD,YAAA,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC;;QAG5E,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE;AACzC,YAAA,GAAG,CAAC,GAAM,EAAA;;AACR,gBAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC;AACjC,gBAAA,IAAI,WAAW,KAAK,KAAK,EAAE;oBACzB;;;AAGF,gBAAA,OAAO,CAAA,EAAA,GAAA,eAAe,KAAf,IAAA,IAAA,eAAe,uBAAf,eAAe,CAAE,GAAG,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;aAC7C;YACD,GAAG,GAAA;;;AAED,gBAAA,OAAO,CAAA,EAAA,GAAA,eAAe,KAAf,IAAA,IAAA,eAAe,KAAf,MAAA,GAAA,MAAA,GAAA,eAAe,CAAE,GAAG,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAI,CAAC,IAAI,CAAC;aACxC;AACF,SAAA,CAAC;QACF,IAAI,SAAS,EAAE;YACb,QAAQ,CAAC,eAAe,KAAf,IAAA,IAAA,eAAe,uBAAf,eAAe,CAAE,KAAK,CAAC;;;AAIpC;;;AAGG;AACH,IAAA,mBAAmB,CAAC,SAAiB,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;AAC3E,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;;AAGtC;;;AAGG;IACH,IAAI,CAAU,SAAiB,EAAE,MAAU,EAAA;AACzC,QAAA,MAAM,KAAK,GAAG,IAAI,WAAW,CAAI,SAAS,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACzE,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAClC,QAAA,OAAO,KAAK;;AAGd;;AAEG;IACH,kBAAkB,GAAA;AAChB,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE;AACnC,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;;;AAIlC;;AAEG;IACH,OAAO,GAAA;QACL,IAAI,CAAC,kBAAkB,EAAE;;AAE5B;;ACnGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE;AACpC,EAAE,IAAI,KAAK,GAAG,EAAE;AAChB,MAAM,MAAM,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM;;AAE/C,EAAE,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE;AAC3B,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,EAAE;AACxD,MAAM;AACN;AACA;AACA,EAAE,OAAO,KAAK;AACd;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,KAAK,EAAE;AAC7B,EAAE,OAAO,OAAO,KAAK,IAAI,UAAU,GAAG,KAAK,GAAGC,0BAAQ;AACtD;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE;AACvC,EAAE,IAAI,IAAI,GAAGC,yBAAO,CAAC,UAAU,CAAC,GAAG,SAAS,GAAGC,uBAAQ;AACvD,EAAE,OAAO,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;AACjD;;ACtCA;;;AAGG;AAiDH,MAAM,iBAAiB,GAAG,CAAC;AAWrB,MAAO,oBAAqB,SAAQ,UAAU,CAAA;AAWlD,IAAA,WAAA,CACE,QAA6B,EACtB,SAA0B,EAC1B,MAA6B,EAAA;AAEpC,QAAA,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC;QAHnB,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAM,CAAA,MAAA,GAAN,MAAM;QAbf,IAAe,CAAA,eAAA,GAAoC,IAAI;;QAOvD,IAAW,CAAA,WAAA,GAAmB,IAAI;QAClC,IAAU,CAAA,UAAA,GAAkB,IAAI;AAQ9B,QAAA,IAAI,CAAC,eAAe,GAAG,CAAA,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,eAAe,KAAI,iBAAiB;;QAGnE,IAAI,MAAM,aAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,WAAW,EAAE;AACvB,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,sBAAsB,EAAE;AAC5D,YAAA,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,uBAAuB,CAAC;;QAGpD,MAAM,cAAc,GAAG,CAAC,EACtB,MAAM,EAAE,EAAE,MAAM,EAAE,GACU,KAAI;AAChC,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AACxB,SAAC;QACD,MAAM,gBAAgB,GAAG,CAAC,EACxB,MAAM,EAAE,EAAE,OAAO,EAAE,GACW,KAAI;AAClC,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACzB,SAAC;AACD,QAAA,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;QAC3D,QAAQ,MAAM,aAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,IAAI;AAClB,YAAA,KAAA,uBAAA;AACE,gBAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,cAAc,CAAC;gBACvD,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAG,CAAC,EAAE,MAAM,EAA0B,KAAI;AACzE,oBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AACxB,iBAAC,CAAC;gBACF;AACF,YAAA,KAAA,aAAA;AACE,gBAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,cAAc,CAAC;gBACvD,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,KAAI;AAChD,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AAC3B,iBAAC,CAAC;gBACF;AACF,YAAA;gBACE,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,EAAE,MAAM,EAAmC,KAAI;oBACtF,MAAM,IAAI,GAAGC,4BAAa,CAAC,MAAM,CAAC,MAAM,CAAC;AACzC,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;oBACnD,IAAI,IAAI,EAAE;wBACR,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,CACrC,IAAI,EACJ;AACE,4BAAA,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI;yBACrB,EACD,IAAI,CACL;;AAEL,iBAAC,CAAC;gBACF;;;IAIN,MAAM,SAAS,CAAC,MAAkB,EAAA;AAChC,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,eAAe;AACnC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,YAAY,EAAE;;;QAIrB,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAgB,EAAE,MAAc,KAAI;AAC/D,gBAAA,IAAI,CAAC,WAAW,GAAG,OAAO;AAC1B,gBAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AAC1B,aAAC,CAAC;AACF,YAAA,IAAI;gBACF,QAAQ,GAAG,MAAM,OAAO;;YACxB,OAAO,CAAC,EAAE;gBACV;;;;QAKJC,OAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,IAAmB,KAAI;YACzC,MAAM,KAAK,GAAwB,EAAE;YACrCA,OAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,IAAG;;gBAE3B,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAC7C,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAClE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CACjC;AACH,aAAC,CAAC;AACF,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;AAC5D,SAAC,CAAC;;AAGJ,IAAA,SAAS,CAAC,GAAS,EAAA;;QACjB,MAAM,OAAO,GAAG,EAAE;QAClB,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,CAAC;;AAEV,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE;;AAG1B,YAAA,IAAI,MAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,WAAW,EAAE;AAC5B,gBAAA,IAAI,CAAC,uBAAuB,CAAC,SAAS,GAAG,GAAG;gBAC5C,OAAO,IAAI,CAAC,uBAAuB,CAAC,WAAW,GAAG,OAAO,GAAG,CAAC;;YAE/D,OAAO,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,GAAG,OAAO,GAAG,CAAC;;QACtD,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC;;;AAIZ,IAAA,SAAS,CAAC,CAAY,EAAA;AACpB,QAAA,IAAI,IAA8B;AAClC,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;AACvB,YAAA,IAAI,GAAG,CAAC,CAAC,IAAI;;aACR;AACL,YAAA,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;;QAEnCA,OAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,IAAmB,KAAI;YAC1D,MAAM,KAAK,GAAwB,EAAE;AAErC,YAAAA,OAAI,CAAC,OAAO,EAAE,KAAK,IAAG;;;gBAEpB,MAAM,IAAI,GAAGR,qBAAM,CACjB,IAAI,EACJ,CAAC,IAAwB,EAAE,KAAK,KAAI;oBAClC,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,WAAW,EAAE;AAC5C,wBAAA,OAAO,IAAI;;oBAEb,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;iBAC9D,EACD,SAAS,CACV;AAED,gBAAA,IAAI,IAAI,IAAI,CAAC,CAAA,EAAA,GAAA,KAAK,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,IAAI,IAAI,EAAE;oBACpC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI;;AAE1C,aAAC,CAAC;AAEF,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;AAC5D,SAAC,CAAC;;AAGJ,IAAA,YAAY,CAAC,CAAY,EAAA;QACvB,MAAM,KAAK,GAAsB,EAAE;AACnC,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;AACvB,YAAAQ,OAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAIA,OAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;;aACnD;AACL,YAAA,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;;QAEtBA,OAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,IAAmB,KAAI;YAC1D,MAAM,KAAK,GAAwB,EAAE;AAErC,YAAAA,OAAI,CAAC,OAAO,EAAE,KAAK,IAAG;AACpB,gBAAA,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACrB,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;oBAClD,IAAI,IAAI,EAAE;AACR,wBAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI;;;AAG/B,aAAC,CAAC;AACF,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;AAC5D,SAAC,CAAC;;IAGJ,aAAa,CAAC,KAAa,EAAE,IAAmB,EAAA;;AAC9C,QAAA,MAAM,KAAK,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,IAAI,CAAC,MAAG,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,KAAK,CAAC;QACnD,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,CAAC;;AAEV,QAAA,OAAOR,qBAAM,CACX,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAC1B,CAAC,CAAC,EAAE,CAAC,KAAI;YACP,MAAM,QAAQ,GAAGA,qBAAM,CACrB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EACpB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,KAAI;gBAChB,MAAM,IAAI,GAAGS,+BAAa,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;gBACtC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,MAAA,GAAA,MAAA,GAAA,IAAI,CAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;aAC/D,EACD,CAAC,CACF;YACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC;AAC9B,SAAC,EACD,KAAK,CAAC,IAAI,IAAI,CAAC,CAChB;;AAGH,IAAA,SAAS,CAAC,OAA+C,EAAA;;AACvD,QAAA,KAAK,IAAI,CAAC,IAAIC,0BAAW,EAAE;YACzB,MAAM,IAAI,GAAG,CAAkB;AAC/B,YAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AAE1B,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,EAAE;AAClB,gBAAA,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAI,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,UAAU,CAAA,EAAE;AAC/C,oBAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACzB,wBAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;oBAE3B,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;AAC/B,wBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE;;oBAEjC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACxB,IAAI,CAAC,CAAC,CAAC,CAAA,EAAA,EACV,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAA,CACvB;;;;AAKP,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,YAAY,EAAE;;;IAIvB,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;;AAGxB,IAAA,WAAW,CAAC,CAAY,EAAA;AACtB,QAAA,OAAO,CAAC,CAAE,CAAgC,CAAC,IAAI;;IAGjD,sBAAsB,GAAA;;AACpB,QAAA,MAAM,gBAAgB,GAAiC;AACrD,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,OAAO,EAAE,OAAO;SACjB;QAED,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACxC,QAAA,KAAK,IAAI,CAAC,IAAI,gBAAgB,EAAE;AAC9B,YAAA,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA,EAAA,GAAA,gBAAgB,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE;;AAEzC,QAAA,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC;AACvC,QAAA,OAAO,EAAE;;IAGX,OAAO,GAAA;;QACL,KAAK,CAAC,OAAO,EAAE;AACf,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,uBAAuB,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,MAAM,EAAE;;AAEzC;;ACzSK,MAAO,aAAc,SAAQ,UAAU,CAAA;IAG3C,WACE,CAAA,QAA6B,EACtB,SAA0B,EAAA;AAEjC,QAAA,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC;QAFnB,IAAS,CAAA,SAAA,GAAT,SAAS;QAJV,IAAe,CAAA,eAAA,GAAyB,IAAI;;AASlD,QAAA,IAAI,CAAC,UAAU,GAAGC,kCAAgB,CAAC,QAAQ,CAAC;;AAG5C,QAAA,MAAM,mBAAmB,GAAG,CAAC,EAC3B,MAAM,EAAE,EAAE,OAAO,EAAE,GACW,KAAK,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AAC/D,QAAA,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,mBAAmB,CAAC;;AAG3D,IAAA,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAgB,EAAA;;QACjD,IACE,IAAI,KAAK,OAAO;AAChB,YAAA,IAAI,CAAC,eAAe;AACpB,YAAA,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,WAAW,MAAK,IAAI,CAAC,eAAe,CAAC,IAAI,EAC/D;YACA,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU;gBAC5C,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,WAAW,EAAE;;;;IAKhB,eAAe,GAAA;AACrB,QAAA,MAAM,SAAS,GAAG,CAAC,EAAE,MAAM,EAA6B,KACtD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AACxB,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,SAAS,CAAC;;IAG1C,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC;;IAGlC,KAAK,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB;;QAEF,MAAM,IAAI,GAAkB,OAAO;AACnC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;QACtE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,CACrC,IAAI,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAEC,KAAK,CAAA,EAAA,EACR,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAA,CAAA,EAEzD,IAAI,CACL;;AAGH;;AAEG;AACH,IAAA,YAAY,CAAC,OAA+C,EAAA;;QAE1D,IAAI,CAAC,WAAW,EAAE;;QAElB,IAAI,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC;QAClDH,OAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,IAAmB,KAAI;AACvC,YAAA,MAAM,QAAQ,GACZ,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;YAC7D,cAAc,IAAI,QAAQ;AAC5B,SAAC,CAAC;AACF,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC5B,MAAM,WAAW,GACf,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM;AAC7D,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU;AACvC,YAAA,MAAM,aAAa,GAAGI,qCAAsB,CAC1C,WAAW,EACX,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,SAAS,CAChD;YACD,IAAI,aAAa,EAAE;gBACjB,cAAc,IAAI,aAAa;;;AAGnC,QAAA,IAAI,cAAc,GAAG,CAAC,EAAE;;YAEtB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YACtC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC;;;;AAIG;AACH,YAAA,MAAM,OAAO,GAAG,CAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,uBAAJ,IAAI,CAAE,IAAI,KAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC;AACxD,YAAA,MAAM,IAAI,GAAG,cAAc,GAAG,OAAO,GAAG,CAAC;YAEzC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,GAAG,IAAI,EAAE;gBAC5C,IAAI,CAAC,eAAe,GAAG;AACrB,oBAAA,WAAW,EAAE,IAAI;oBACjB,KAAK;oBACL,IAAI;iBACL;gBACD,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,eAAe,EAAE;;;;AAI7B;AAED;;AAEG;AACG,SAAU,eAAe,CAC7B,MAA2C,EAAA;AAE3C,IAAA,OAAO,CAAC,CAAE,MAAwB,CAAC,YAAY;AACjD;;AC3IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;AACzC,EAAE,IAAI,MAAM,KAAK,MAAM,EAAE;AACzB,IAA6B;AAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK;AAC/C;AACA,IAA6B;AAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK;AAC/C;AACA;AACA,EAAE,OAAO,MAAM;AACf;;AChBA;AACA,IAAI,gBAAgB,GAAG,UAAU;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;AACzB,EAAE,OAAO,KAAK,GAAG,SAAS,CAACC,wBAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC;AACrE;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;AAC5C,EAAE,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;;AAE3B,EAAE,KAAK,GAAGA,wBAAS,CAAC,KAAK,CAAC;AAC1B,EAAE,IAAI,KAAK,GAAG,CAAC,EAAE;AACjB,IAAI,KAAK,GAAG,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,KAAK,CAAC;AAClD;AACA,EAAE,GAAG,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,GAAG,MAAM,IAAI,MAAM,GAAGA,wBAAS,CAAC,GAAG,CAAC;AACrE,EAAE,IAAI,GAAG,GAAG,CAAC,EAAE;AACf,IAAI,GAAG,IAAI,MAAM;AACjB;AACA,EAAE,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC;AACvC,EAAE,OAAO,KAAK,GAAG,GAAG,EAAE;AACtB,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK;AAC1B;AACA,EAAE,OAAO,KAAK;AACd;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;AACxC,EAAE,IAAI,MAAM,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM;AAC/C,EAAE,IAAI,CAAC,MAAM,EAAE;AACf,IAAI,OAAO,EAAE;AACb;AAKA,EAAE,OAAO,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AAC3C;;ACvCA,MAAM,OAAO,GAAc;AACzB,IAAA,IAAI,EAAE,UAAU;AAChB,IAAA,QAAQ,EAAE,KAAK;;AAEf,IAAA,GAAG,EAAE,IAAI;AACT,IAAA,eAAe,EAAE,GAAG;AACpB,IAAA,YAAY,EAAE,MAAM;AACpB,IAAA,QAAQ,EAAE,EAAE;CACb;AAID;AACA,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;AAC/C;AACA,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;AACzC,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;AACzC,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;AAClD,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;MAE3B,SAAS,CAAA;AAEpB,IAAA,WAAA,CAAY,UAA8B,EAAE,EAAA;AAC1C,QAAA,IAAI,CAAC,OAAO,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,OAAO,CAAK,EAAA,OAAO,CAAE;;AAG3C,IAAA,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAa,EAAA;AAC1C,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,cAAc,GAAG,EAAE;;QAGnD,IAAI,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,MAAM,IAAG,CAAC,EAAE;AACvB,YAAA,OAAO,CAAC,OAAO,CAAC,MAAM,IAAG;;AAEvB,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;oBAClB;;AAEF,gBAAA,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;AAClE,gBAAA,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY;AACrC,aAAC,CAAC;;QAGJ,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AAC5B,YAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,gBAAA,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY;;;AAGrC,YAAA,IAAIC,yBAAU,CAAC,KAAK,CAAC,EAAE;AACrB,gBAAA,MAAM,IAAI,IAAI,CAAC,SAAS,CAACC,8BAAe,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;gBAC9E;;AAEF,YAAA,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;AACrH,SAAC,CAAC;AAEF,QAAA,OAAO,MAAM;;IAGP,aAAa,CAAC,aAAuB,EAAE,eAAuB,EAAA;QACpE,IAAI,MAAM,GAAG,EAAE;QACf,MAAM,gBAAgB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;AACzF,QAAA,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC;AAChD,QAAA,OAAO,MAAM;;AAGP,IAAA,SAAS,CAAC,KAAU,EAAE,eAAuB,EAAE,KAAK,GAAG,KAAK,EAAA;QAClE,IAAI,MAAM,GAAG,KAAK;AAClB,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;QAEhC,MAAM,QAAQ,GAAG,CAAC,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC;AACzE,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,YAAA,OAAO,EAAE;;QAEX,IAAI,MAAM,KAAK,EAAE,KAAK,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;YAC1E,OAAO,CAAA,CAAA,EAAI,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA,CAAA,CAAG;;AAGjD,QAAA,OAAO,MAAM;;AAEhB;;ACrED,IAAK,WAEJ;AAFD,CAAA,UAAK,WAAW,EAAA;AACd,IAAA,WAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACb,CAAC,EAFI,WAAW,KAAX,WAAW,GAEf,EAAA,CAAA,CAAA;AAIK,MAAO,gBAAiB,SAAQ,UAAU,CAAA;;IAE9C,MAAM,YAAY,CAAC,OAAA,GAAwB,EAAE,EAAE,CAAA,GAAiB,WAAW,CAAC,GAAG,EAAA;AAC7E,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE;QACtC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,IAAI;;AAEb,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;;;IAIlD,MAAM,UAAU,CAAC,OAAA,GAAwB,EAAE,EAAE,CAAA,GAAiB,WAAW,CAAC,GAAG,EAAA;AAC3E,QAAA,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;;;IAIvD,MAAM,UAAU,CAAC,OAAA,GAAwB,EAAE,EAAE,CAAA,GAAiB,WAAW,CAAC,GAAG,EAAA;QAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC;;QAG5C,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,SAAS;QAE1C,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;QACrC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,OAAO;AAChD,QAAA,MAAM,IAAI,GAAG,CAAA,EAAG,QAAQ,CAAI,CAAA,EAAA,QAAQ,EAAE;QAEtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;AAC1C,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE;AAEjD,QAAA,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AACxB,QAAA,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC;AAC3B,QAAA,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;;AAG5B,QAAA,MAAMC,yBAAO,CAAC,GAAG,CAAC;AAClB,QAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;;;IAI1B,MAAM,OAAO,CAAC,SAAoB,EAAA;AAChC,QAAA,MAAM,IAAI,GAAG,CAAG,EAAA,SAAS,CAAC,OAAO,CAAC,IAAI,CAAA,SAAA,EAAY,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE;AAC9E,QAAA,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;AAC/B,YAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE;YACtC,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,OAAO,IAAI;;AAEb,YAAA,OAAO,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;;AAEvD,QAAA,OAAO,IAAI;;;AAIL,IAAA,MAAM,YAAY,GAAA;AACxB,QAAA,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;AAC/B,QAAA,MAAM,KAAK,GAAqC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC;AACnF,QAAA,IAAI,KAAK,CAAC,gBAAgB,EAAE;AAC1B,YAAA,OAAO,IAAI;;AAEb,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI;;AAGlB,IAAA,MAAM,OAAO,GAAA;AACnB,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;QACnC,MAAM,SAAS,GAAgB,EAAE;QACjC,MAAM,WAAW,GAAyB,EAAE;QAC5CN,0BAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAC3B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzE,SAAC,CAAC;AACF,QAAA,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AAC9B,QAAA,MAAM,OAAO,GAAc;AACzB,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,KAAK,EAAE,EAAE;SACV;AACD,QAAA,KAAK,IAAI,MAAM,IAAI,SAAS,EAAE;YAC5B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;gBAC9B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACvB,oBAAA,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE;;gBAEzB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/B,aAAC,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;;QAErC,OACE,MAAA,CAAA,MAAA,CAAA,EAAA,IAAI,EACD,EAAA,OAAO,CACV;;IAGI,MAAM,eAAe,CAAC,CAAgB,EAAA;QAC5C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClC,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;QACzC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC;QACxC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClC,MAAM,QAAQ,GAAa,EAAE;QAC7B,MAAM,QAAQ,GAAiB,EAAE;AACjC,QAAA,cAAc,CAAC,OAAO,CAAC,CAAC,CAAS,KAAI;YACnC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;AAC3B,YAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;AACnC,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACrB,SAAC,CAAC;AACF,QAAA,MAAM,IAAI,GAAe,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC;AAC5E,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QACnB,OAAO;AACL,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,KAAK,EAAE,QAAQ;SAChB;;AAGK,IAAA,eAAe,CAAC,KAAa,EAAE,MAAc,EAAE,KAAe,EAAA;QACpE,MAAM,IAAI,GAAe,EAAE;AAC3B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;AAClD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AAC9B,YAAA,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAChB,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBACd;;AAEF,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC;;AAG7B,YAAA,WAAW,CAAC,OAAO,CAAC,CAAC,KAAY,KAAI;gBACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACjC,gBAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAChC,oBAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,IAAI;;AAEhC,aAAC,CAAC;;AAEJ,QAAA,OAAO,IAAI;;AAGL,IAAA,MAAM,SAAS,GAAA;QACrB,MAAM,IAAI,GAAiB,EAAE;QAC7B,MAAM,YAAY,GAAsB,EAAE;AAC1C,QAAAO,uBAAQ,CAAC,OAAO,CAAC,CAAC,IAAG;YACnB,MAAM,QAAQ,GAAe,EAAE;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACnB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAa,KAAK,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9F,YAAA,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;AAC5B,SAAC,CAAC;AACF,QAAA,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC1B,YAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACZ,YAAA,OAAO,CAAC;SACT,EAAE,EAAE,CAAC;;;AAIA,IAAA,SAAS,CAAC,IAAiB,EAAE,OAAA,GAAwB,EAAE,EAAA;QAC7D,QAAQ,IAAI;YACV,KAAK,WAAW,CAAC,GAAG;AAClB,gBAAA,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC;AAC/B,YAAA;AACE,gBAAA,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC;;;AAGxC;;AC/KD,MAAM,EAAE,GAAkB,CAAC,KAAyB,EAAE,KAA+B,KAAI;AACvF,IAAA,IAAI,OAAO,KAAK,KAAK,WAAW,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE;AAC9D,QAAA,OAAO,IAAI;;AAEb,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;AAG/B,IAAA,MAAM,SAAS,GAAG,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAA,MAAA,GAAL,KAAK,CAAE,QAAQ,EAAA,CAAG,iBAAiB,EAAE;IACvD,IAAI,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,MAAM,MAAK,CAAC,EAAE;AAC3B,QAAA,OAAO,IAAI;;AAGb,IAAA,OAAO,KAAK,CAAC,iBAAiB,EAAE,KAAK,SAAS;AAChD,CAAC;AAEM,MAAM,KAAK,GAAkB,CAAC,KAAyB,EAAE,KAA+B,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;AACrH,KAAK,CAAC,KAAK,GAAG,OAAqB;AACnC,EAAE,CAAC,KAAK,GAAG,OAAqB;;AClBhC,MAAM,MAAM,GAAkB,UAAU,KAAyB,EAAE,KAA+B,EAAA;AAChG,IAAA,IAAI,cAAsB;AAE1B,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI,EAAE;AAC/E,QAAA,cAAc,GAAG,UAAU,CAAC,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,MAAA,GAAA,MAAA,GAAA,KAAK,CAAE,QAAQ,EAAE,CAAC;QAC9C,OAAO,KAAK,GAAG,cAAc;;AAE/B,IAAA,OAAO,KAAK;AACd,CAAC;AAED,MAAM,CAAC,KAAK,GAAG,OAAO;;ACRtB,MAAM,QAAQ,GAAkB,UAAU,KAAyB,EAAE,KAA+B,EAAA;AAClG,IAAA,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,IAAIC,MAAE,CAAC,KAAK,EAAE,KAAK,CAAC;AAC7C,CAAC;AAED,QAAQ,CAAC,KAAK,GAAG,OAAO;;ACNxB,MAAM,EAAE,GAAkB,UAAU,KAAyB,EAAE,KAA+B,EAAA;AAC5F,IAAA,IAAI,cAAsB;AAC1B,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI,EAAE;QAC/E,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7C,OAAO,KAAK,GAAG,cAAc;;SACxB;AACL,QAAA,OAAO,KAAK;;AAEhB,CAAC;AAED,EAAE,CAAC,KAAK,GAAG,OAAO;;ACRlB,MAAM,IAAI,GAAkB,UAAU,KAAyB,EAAE,KAA+B,EAAA;AAC9F,IAAA,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;AAC7C,CAAC;AAED,IAAI,CAAC,KAAK,GAAG,OAAO;;ACNpB,MAAM,GAAG,GAAkB,CAAC,KAAyB,KAAK,EAAE,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC;AACxG,MAAM,MAAM,GAAkB,CAAC,KAAyB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;;ACD/E,MAAM,UAAU,GAAkB,CAAC,KAAyB,EAAE,KAA+B,KAAI;IAC/F,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,KAAK;;IAEd,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,IAAI;;AAEb,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;AAE/B,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;AAE/B,IAAA,OAAO,KAAK,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC;AAC3E,CAAC;AAED,UAAU,CAAC,KAAK,GAAG,OAAO;;AChB1B,MAAM,QAAQ,GAAkB,CAAC,KAAyB,EAAE,KAA+B,KAAI;IAC7F,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,IAAI;;IAEb,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,KAAK;;IAEd,IAAI,KAAK,EAAE;AACT,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;AAE/B,QAAA,OAAO,KAAK,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE;;AAE/E,IAAA,OAAO,IAAI;AACb,CAAC;AAEM,MAAM,WAAW,GAAkB,CAAC,KAAyB,EAAE,KAA+B,KAAI;AACvG,IAAA,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;AAChC,CAAC;AACD,WAAW,CAAC,KAAK,GAAG,OAAO;AAC3B,QAAQ,CAAC,KAAK,GAAG,OAAO;;ACtBxB;AAaa,MAAA,gCAAgC,GAAsC;AACjF,IAAA,IAAI,EAAE,MAAM,IAAI;AAChB,IAAA,KAAK,EAAE,MAAM;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,EAAE,EAAE,EAAE;AACN,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,MAAM,EAAE,UAAU;AAClB,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,WAAW,EAAE,WAAW;AAExB,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,IAAI,EAAE,KAAK;AACX,IAAA,EAAE,EAAE,MAAM;AACV,IAAA,GAAG,EAAE,QAAQ;AACb,IAAA,EAAE,EAAE,EAAE;AACN,IAAA,GAAG,EAAE,IAAI;;AAGE,MAAA,WAAW,GAAiC;AACvD,IAAA,MAAM,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,CAAC;AACjF,IAAA,MAAM,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;;AAG3D,MAAA,WAAW,GAAG;AACzB,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,QAAQ,EAAE,KAAK;AAEf,IAAA,EAAE,EAAE,OAAO;AACX,IAAA,KAAK,EAAE,WAAW;AAClB,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,WAAW,EAAE,kBAAkB;AAE/B,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,EAAE,EAAE,GAAG;AACP,IAAA,GAAG,EAAE,IAAI;AACT,IAAA,EAAE,EAAE,GAAG;AACP,IAAA,GAAG,EAAE,IAAI;;;ACpDX;AAiCO,MAAM,mBAAmB,GAAG;AAC5B,MAAM,2BAA2B,GAAG;AACpC,MAAM,WAAW,GAAG;AAE3B;;;;;;;;;;;;;;;AAeG;AACH;;AAEG;AAEG,MAAO,YAAa,SAAQ,UAAU,CAAA;AAyB1C,IAAA,WAAA,CACS,QAA6B,EACpC,SAA0B,EACnB,MAA2B,EAAA;;AAElC,QAAA,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC;QAJnB,IAAQ,CAAA,QAAA,GAAR,QAAQ;QAER,IAAM,CAAA,MAAA,GAAN,MAAM;QA1Bf,IAAgB,CAAA,gBAAA,GAA6C,EAAE;QAC/D,IAAgB,CAAA,gBAAA,GAAoB,EAAE;AAEtC;;;;;;;AAOG;QACH,IAAY,CAAA,YAAA,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAkC,WAAW,CAAG;QAC5D,IAAqB,CAAA,qBAAA,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAChB,WAAW,CACd;QACF,IAA4B,CAAA,4BAAA,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACvB,gCAAgC,CACnC;QAEF,IAAU,CAAA,UAAA,GAAGC,yBAAW;QAUtB,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;;QAGzB,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CACtD,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW,CACtD;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG;AAC5B,YAAA,GAAG,aAAa;AAChB,YAAAhB,OAAA,CAAA,qBAAA,EAAA,EACE,WAAW,EAAE,IAAI,CAAC,qBAAqB,EACvC,cAAc,EAAE,IAAI,CAAC,4BAA4B,EACjD,cAAc,EAAE,MAAA,MAAM,KAAA,IAAA,IAAN,MAAM,KAAN,MAAA,GAAA,MAAA,GAAA,MAAM,CAAE,YAAY,0CAAE,QAAQ,EAC9C,cAAc,EAAE,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,EAClD,aAAa,EAAE,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,EAChD,uBAAuB,EAAE,MAAM,KAAN,IAAA,IAAA,MAAM,uBAAN,MAAM,CAAE,uBAAuB,EACxD,mBAAmB,EAAE,MAAM,aAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,8BAA8B,EAC3D,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAA;gBAEvB,GAAG;gBACH,IAAI,CAAC,YAAY,EAAE,CACA;SACvB;AAED,QAAA,MAAM,cAAc,GAAG,YAAW;YAChC,MAAM,qBAAqB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAChE,YAAA,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE;;gBAEpC,qBAAqB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;oBAC5C,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;AAChC,wBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG;AAC5B,4BAAA;AACE,gCAAA,EAAE,EAAE,KAAK;gCACT,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI;gCACtC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK;AACxC,gCAAA,QAAQ,EAAE,KAAK;AAChB,6BAAA;yBACF;;AAEL,iBAAC,CAAC;;AAEJ,YAAA,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;gBACnD;;YAEF,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAChD,SAAC;AACD,QAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,gBAAgB,CACnB,2BAA2B,EAC3B,CAAC,EAAE,MAAM,EAA6C,KAAI;AACxD,YAAA,IACE,CAAC,MAAM;iBACN,OAAO,MAAM,KAAK,QAAQ;qBACxB,CAAC,MAAM,CAAC,gBAAgB;AACvB,wBAAA,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,EAClD;gBACA,IAAI,CAAC,cAAc,EAAE;gBACrB;;AAEF,YAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;;AAEzB,YAAA,cAAc,EAAE;AAClB,SAAC,CACF;AACD,QAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,cAAc,CAAC;AACvD,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAe,KACtD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAC5B;;AAGH,IAAA,UAAU,CAAC,CAAW,EAAA;;;IAItB,YAAY,GAAA;AACV,QAAA,OAAO,IAAI;;AAGb,IAAA,UAAU,CAAC,MAA0B,EAAA;AACnC,QAAA,IAAI,MAAM,CAAC,gBAAgB,EAAE;AAC3B,YAAA,IAAI,CAAC,gBAAgB,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,MAAM,CAAC,gBAAgB,CAAE;;aACjD;AACL,YAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;;;AAG5B,QAAA,IAAI,MAAM,CAAC,aAAa,EAAE;AACxB,YAAA,KAAK,IAAI,gBAAgB,IAAI,MAAM,CAAC,aAAa,EAAE;gBACjD,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC;gBACtD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;oBAChD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,EAAE;;;AAGlD,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;;gBAElE,IAAI,CAAC,4BAA4B,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI;;gBAElE,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI;;;;AAK/D,QAAA,IAAI,MAAM,CAAC,UAAU,EAAE;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU;;AAGrC;;;AAGG;AACH,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO;QACjC,IAAI,UAAU,EAAE;YACd,MAAM,OAAO,GAA6B,EAAE;AAE5C,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE;;gBAE/B,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAC1C,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAChC;AACD,gBAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;AACnB,oBAAA,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ;;;;YAIzB,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,gBAAA,IAAI,CAAC,YAAY,GAAG,OAAO;;;AAI/B,QAAA,IAAI,MAAM,CAAC,UAAU,EAAE;AACrB,YAAA,MAAM,gCAAgC,GAAG,MAAM,CAAC,OAAO,CACrD,MAAM,CAAC,UAAU,CAClB,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpE,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,WAAW,CACxC,gCAAgC,CACjC;;aACI;AACL,YAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;;AAG5B,QAAA,IAAI,MAAM,CAAC,YAAY,EAAE;AACvB,YAAA,IAAI,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE;AACnC,gBAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAI;oBACjE,IAAI,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE;AAC3C,wBAAA,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC;;AAErC,iBAAC,CAAC;;;;IAKR,MAAM,WAAW,CAAC,CAA6B,EAAA;;QAC7C,MAAM,EAAE,GAAG,CAAA,EAAA,GAAA,CAAC,CAAC,MAAM,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,MAAqB;AACxD,QAAA,IAAI,CAACiB,yBAAW,CAAC,EAAE,CAAC,EAAE;YACpB;;QAEF,CAAC,CAAC,cAAc,EAAE;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb;;;QAIF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE;AACrD,QAAA,MAAM,SAAS,GAAG,EAAE,CAAC,qBAAqB,EAAE;AAC5C,QAAA,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI;AAE1B,QAAA,MAAM,IAAI,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACL,CAAC,CAAC,MAAM,CAAA,EACR,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAC9B,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAC1B,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,EAC7C,WAAW,EAAE,IAAI,EACjB,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAClD,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAClC,YAAY,EAAE,IAAI,CAAC,iBAAiB,GACrC;AACD,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAG,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,EAAA,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGrB,IAAA,eAAe,CACb,IAAkC,EAAA;QAElC,IAAI,UAAU,GAAG,QAAQ;QACzB,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;;;AAIxD,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YAC1B,UAAU,GAAG,IAAI;;;aAGZ,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;YAClD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAA2B,EAAE,SAAS,KAAI;AAC5D,gBAAA,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE;oBAC/B,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;;AAE7C,gBAAA,OAAO,CAAC;aACT,EAAE,EAAE,CAAC;;AAER,QAAA,OAAO,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;;AAGxD,IAAA,WAAW,CAAC,IAAS,EAAA;AACnB,QAAA,OAAO,CAAC,EAAE,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;;AAGhE;;AAEG;IACH,MAAM,cAAc,CAAC,WAA4B,EAAA;;AAE/C,QAAA,IAAI,CAAC,gBAAgB,GAAG,WAAW;;AAGnC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC;;AAG1C,IAAA,aAAa,CAAC,IAAiB,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,MAAA,GAAJ,IAAI,GAAI,EAAE,CAAC;AACxC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC;;AAG5C;;AAEG;IACH,MAAM,WAAW,CACf,UAAoD,EACpD,MAAkB,EAClB,OAAwB,EACxB,WAA4B,EAAA;QAE5B,MAAM,eAAe,GAAoB,EAAE;AAE3C;;AAEG;QACH,MAAM,YAAY,GAAkC,EAAE;AACtD,QAAA,OAAO,CAAC,OAAO,CAAC,KAAK,IAAG;AACtB,YAAA,MAAM,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,KAAK,CAAE;YAC3B,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;AAC1C,YAAA,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM;AAElC;;AAEG;YACH,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE;AACzC,gBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9B,gBAAA,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;;AAG9B;;AAEG;YAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,SAAS,EAAE;AACzC,gBAAA,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;AAC5B,gBAAA,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI;;AAElC,SAAC,CAAC;AACF,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC;;QAExE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;YACpE,UAAU;AACV,YAAA,aAAa,EAAE,WAAW;YAC1B,MAAM;YACN,WAAW;AACZ,SAAA,CAAC;QACF,IAAI,gBAAgB,EAAE;YACpB;;AAGF,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,mBAAmB,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;;QAG/E,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC;AACpD,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAC5B,YAAA,gBAAgB,EAAE,WAAW;YAC7B,MAAM;YACN,UAAU;AACX,SAAA,CAAC;;AAGJ,IAAA,MAAM,cAAc,GAAA;AAClB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;QAC1B,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC;;IAGhD,MAAM,YAAY,CAAC,gBAAiC,EAAA;QAClD,MAAM,UAAU,GAA6C,EAAE;;QAG/D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAEjD,QAAA,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;;YAE9B,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrC,MAAM,eAAe,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACjD,UAAU,CAAC,IAAI,CAAC,GAAG;oBACjB,IAAI,EAAE,eAAe,CAAC,IAAI;oBAC1B,KAAK,EAAE,eAAe,CAAC,KAAK;iBAC7B;;;AAIL,QAAA,IAAI,CAAC,gBAAgB,GAAG,UAAU;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE;;AAElD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;QAEtE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAClE,UAAU,EAAE,IAAI,CAAC,gBAAgB;YACjC,MAAM;YACN,OAAO;YACP,WAAW,EAAE,IAAI,CAAC,gBAAgB;AACnC,SAAA,CAAC;QACF,IAAI,gBAAgB,EAAE;YACpB;;AAEF,QAAA,IAAI,CAAC,WAAW,CACd,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,WAAW,CACnB;;AAGH;;AAEG;AACH,IAAA,YAAY,CACV,IAAgB,EAChB,WAA4B,EAC5B,YAA2C,EAAA;QAE3C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;QAEzC,MAAM,OAAO,GAAkB,EAAE;;AAGjC,QAAA,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;;AAEzD,YAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;;gBAE3B,IACE,IAAI,CAAC,aAAa,CAChB,WAAW,CAAC,IAAI,CAAC,EACjB,IAAI,EACJ,YAAY,CAAC,IAAI,CAAC,EAClB,IAAI,CAAC,QAAQ,CAAC,CACf,EACD;AACA,oBAAA,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;;AAE5B,aAAC;;AAEH,QAAA,OAAO,OAAO;;IAGR,aAAa,CACnB,WAAyB,EACzB,IAAgB,EAChB,MAAsB,EACtB,QAAkB,EAAE,EAAA;;QAGpB,IAAI,wBAAwB,GAAG,CAAC;;QAEhC,IAAI,iBAAiB,GAAc,EAAE;;AAGrC,QAAA,KAAK,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE;;YAE7D,MAAM,UAAU,GAAG,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC,IAAI,CAAC;;;AAIrE,YAAA,MAAM,KAAK,GAAG,MAAM,GAAGC,gCAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;;AAErE,YAAA,IAAI,UAAU,CAAC,QAAQ,KAAK,IAAI,EAAE;;gBAEhC,iBAAiB,GAAG,EAAE;;gBAEtB,IAAI,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE;oBACvC;;;AAGF,gBAAA,wBAAwB,EAAE;;;iBAGrB;;;AAGL,gBAAA,iBAAiB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;AAE5D,gBAAA,IAAI,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE;;AAE9C,oBAAA,IAAI,yBAAyB,CAAC,iBAAiB,CAAC,EAAE;;wBAEhD,iBAAiB,GAAG,EAAE;wBACtB;;;AAIF,oBAAA,wBAAwB,IAAI,iBAAiB,CAAC,MAAM;;oBAEpD,iBAAiB,GAAG,EAAE;;;AAG5B,SAAC;AACD,QAAA,OAAO,wBAAwB,KAAK,WAAW,CAAC,MAAM;;AAEzD;AACD;;;;;AAKG;AACH,SAAS,gBAAgB,CAAC,KAAa,EAAE,OAAgC,EAAA;IACvE,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;;AAEtC,IAAA,OAAO,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,KAAK,KAAK,CAAC;AAChF;AAEA;;;;AAIG;AACH,SAAS,yBAAyB,CAAC,cAAyB,EAAA;;AAE1D,IAAA,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC;AACvC;;ACtgBA;AACA,IAAI,SAAS,GAAG,iBAAiB;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;AACzB,EAAE,OAAO,OAAO,KAAK,IAAI,QAAQ;AACjC,KAAK,CAAChB,yBAAO,CAAC,KAAK,CAAC,IAAIiB,qBAAY,CAAC,KAAK,CAAC,IAAIC,mBAAU,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC;AAC9E;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,GAAGC,8BAAY,CAAC,QAAQ,CAAC;;ACTtC;AACA,IAAIC,eAAa,GAAG,iBAAiB;AACrC,IAAIC,mBAAiB,GAAG,iBAAiB;AACzC,IAAIC,uBAAqB,GAAG,iBAAiB;AAC7C,IAAIC,qBAAmB,GAAG,iBAAiB;AAC3C,IAAIC,cAAY,GAAGH,mBAAiB,GAAGC,uBAAqB,GAAGC,qBAAmB;AAClF,IAAIE,YAAU,GAAG,gBAAgB;;AAEjC;AACA,IAAIC,OAAK,GAAG,SAAS;;AAErB;AACA,IAAI,YAAY,GAAG,MAAM,CAAC,GAAG,GAAGA,OAAK,GAAGN,eAAa,IAAII,cAAY,GAAGC,YAAU,GAAG,GAAG,CAAC;;AAEzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,MAAM,EAAE;AAC5B,EAAE,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;AAClC;;ACvBA;AACA,IAAI,aAAa,GAAG,iBAAiB;AACrC,IAAI,iBAAiB,GAAG,iBAAiB;AACzC,IAAI,qBAAqB,GAAG,iBAAiB;AAC7C,IAAI,mBAAmB,GAAG,iBAAiB;AAC3C,IAAI,YAAY,GAAG,iBAAiB,GAAG,qBAAqB,GAAG,mBAAmB;AAClF,IAAI,UAAU,GAAG,gBAAgB;;AAEjC;AACA,IAAI,QAAQ,GAAG,GAAG,GAAG,aAAa,GAAG,GAAG;AACxC,IAAI,OAAO,GAAG,GAAG,GAAG,YAAY,GAAG,GAAG;AACtC,IAAI,MAAM,GAAG,0BAA0B;AACvC,IAAI,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG;AACrD,IAAI,WAAW,GAAG,IAAI,GAAG,aAAa,GAAG,GAAG;AAC5C,IAAI,UAAU,GAAG,iCAAiC;AAClD,IAAI,UAAU,GAAG,oCAAoC;AACrD,IAAI,KAAK,GAAG,SAAS;;AAErB;AACA,IAAI,QAAQ,GAAG,UAAU,GAAG,GAAG;AAC/B,IAAI,QAAQ,GAAG,GAAG,GAAG,UAAU,GAAG,IAAI;AACtC,IAAI,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI;AAC1H,IAAI,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS;AAC3C,IAAI,QAAQ,GAAG,KAAK,GAAG,CAAC,WAAW,GAAG,OAAO,GAAG,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG;;AAE/G;AACA,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,KAAK,EAAE,GAAG,CAAC;;AAE9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,MAAM,EAAE;AAC7B,EAAE,IAAI,MAAM,GAAG,SAAS,CAAC,SAAS,GAAG,CAAC;AACtC,EAAE,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACjC,IAAI,EAAE,MAAM;AACZ;AACA,EAAE,OAAO,MAAM;AACf;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,MAAM,EAAE;AAC5B,EAAE,OAAO,UAAU,CAAC,MAAM;AAC1B,MAAM,WAAW,CAAC,MAAM;AACxB,MAAM,SAAS,CAAC,MAAM,CAAC;AACvB;;ACTA;AACA,IAAI,MAAM,GAAG,cAAc;AAC3B,IAAI,MAAM,GAAG,cAAc;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,CAAC,UAAU,EAAE;AAC1B,EAAE,IAAI,UAAU,IAAI,IAAI,EAAE;AAC1B,IAAI,OAAO,CAAC;AACZ;AACA,EAAE,IAAIE,6BAAW,CAAC,UAAU,CAAC,EAAE;AAC/B,IAAI,OAAO,QAAQ,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,MAAM;AAC5E;AACA,EAAE,IAAI,GAAG,GAAGC,wBAAM,CAAC,UAAU,CAAC;AAC9B,EAAE,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE;AACtC,IAAI,OAAO,UAAU,CAAC,IAAI;AAC1B;AACA,EAAE,OAAOC,0BAAQ,CAAC,UAAU,CAAC,CAAC,MAAM;AACpC;;ACtCM,SAAU,gBAAgB,CAC9B,OAAiB,EACjB,MAAkB,EAClB,cAAoC,EAAE,EAAA;;IAGtC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;;AAE5C,QAAA,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;;;AAG1C;;;AAGG;IACH,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC3B,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;AACvB,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;AACvB,QAAA,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AACrD,YAAA,IAAIpB,yBAAU,CAAC,KAAK,CAAC,EAAE;AACrB,gBAAA,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE;AACjC,oBAAA,OAAO,CAAC;;;AAGZ,YAAA,IAAIA,yBAAU,CAAC,KAAK,CAAC,EAAE;AACrB,gBAAA,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE;AACjC,oBAAA,OAAO,CAAC;;;AAGZ;;;AAGG;AACH,YAAA,MAAM,MAAM,GAAG,GAAG,KAAA,IAAA,IAAH,GAAG,KAAH,MAAA,GAAA,MAAA,GAAA,GAAG,CAAG,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC;YACxC,IAAI,MAAM,EAAE;AACV,gBAAA,OAAO,MAAM;;;AAGjB,QAAA,OAAO,CAAC;AACV,KAAC,CAAC;AACJ;SAEgB,kBAAkB,CAAmC,IAAgB,EAAE,CAAW,EAAE,CAAW,EAAA;IAC7G,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAGqB,yBAAU,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAA,IAAA,IAAD,CAAC,KAAA,MAAA,GAAA,MAAA,GAAD,CAAC,CAAG,IAAI,CAAC;IACjE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAGA,yBAAU,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAA,IAAA,IAAD,CAAC,KAAA,MAAA,GAAA,MAAA,GAAD,CAAC,CAAG,IAAI,CAAC;IACjE,MAAM,EAAE,GAAG,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAG,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,MAAA,GAAA,MAAA,GAAA,IAAI,CAAE,QAAQ,EAAA,CAAG,WAAW,EAAE;IAC3E,MAAM,EAAE,GAAG,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAG,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,MAAA,GAAA,MAAA,GAAA,IAAI,CAAE,QAAQ,EAAA,CAAG,WAAW,EAAE;AAE3E,IAAA,IAAI,EAAE,KAAK,EAAE,EAAE;AACb,QAAA,OAAO,CAAC;;AAEV,IAAA,IAAI,EAAE,GAAG,EAAE,EAAE;AACX,QAAA,OAAO,CAAC;;IAEV,OAAO,EAAE;AACX;AAEM,SAAU,eAAe,CAAC,GAAoB,EAAA;AAClD,IAAA,OAAO,CAAC,IAAgB,EAAE,CAAW,EAAE,CAAW,KAAY;QAC5D,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7B,KAAC;AACH;AAEM,SAAU,YAAY,CAAC,YAAmB,EAAA;IAC9C,QAAQ,YAAY;AAClB,QAAA,KAAK,SAAS;AACZ,YAAA,OAAO,KAAK;AACd,QAAA,KAAK,KAAK;AACR,YAAA,OAAO,MAAM;AACf,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,SAAS;;AAEtB;AAGgB,SAAA,WAAW,CAAC,MAA0C,EAAE,KAAY,EAAA;;AAClF,IAAA,MAAM,OAAO,GACX,CAAA,CAAA,EAAA,GAAA,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,MAAA,GAAA,MAAA,GAAA,MAAM,CAAE,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,MAAI,kBAAkB,KAAA,IAAA,IAAlB,kBAAkB,KAAA,MAAA,GAAA,MAAA,GAAlB,kBAAkB,CAAE,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;AACrF,IAAA,IAAI,KAAK,IAAI,KAAK,EAAE;AAClB,QAAA,OAAO,OAAO;;AAEhB,IAAA,IAAI,KAAK,IAAI,MAAM,EAAE;AACnB,QAAA,OAAO,eAAe,CAAC,OAAO,CAAC;;AAEjC,IAAA,OAAO,SAAS;AAClB;;ACvEA;;;;;;;;AAQG;AAEG,MAAO,aAAc,SAAQ,UAAU,CAAA;AAoB3C,IAAA,WAAA,CACS,QAA6B,EACpC,SAA0B,EAC1B,MAAsB,EAAA;AAEtB,QAAA,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC;QAJnB,IAAQ,CAAA,QAAA,GAAR,QAAQ;AAfjB;;AAEG;QACH,IAAc,CAAA,cAAA,GAAwB,IAAI;AAE1C;;AAEG;QACH,IAAY,CAAA,YAAA,GAAGC,iBAAQ,CACrB,CAAC,KAAoB,EAAE,UAAiC,EAAE,oBAA8B,KACtF,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,oBAAoB,CAAC,EAC1D,EAAE,CACH;AASC,QAAA,MAAM,SAAS,GAAG,CAAC,GAAmB,KAAI;;YACxC,IAAI,GAAG,EAAE;gBACP,MAAM,WAAW,GAAyB,EAAE;gBAC5C,MAAM,KAAK,GAAiB,EAAE;gBAC9B,CAAA,EAAA,GAAA,GAAG,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,OAAO,CAAC,GAAG,IAAG;AACzB,oBAAA,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;oBACnD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK;AAC7B,iBAAC,CAAC;AAEF,gBAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;oBAChB,IAAI,CAAC,OAAO,GACP,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,OAAO,CAAA,EACZ,KAAK,CACT;oBACD,IAAI,CAAC,WAAW,GACX,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,WAAW,CAAA,EAChB,WAAW,CACf;;qBACI;;AAEL,oBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,oBAAA,IAAI,CAAC,WAAW,GAAG,WAAW;;;AAGpC,SAAC;QAED,SAAS,CAAC,MAAM,CAAC;QAEjB,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,CAAC,EAAE,MAAM,EAAE,KAAI;YAC3D,MAAM,GAAG,MAAM;YACf,SAAS,CAAC,MAAM,CAAC;YACjB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC;AACnD,SAAC,CAAC;QAEF,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC,EAC3C,MAAM,GACP,KAAI;;AACH,YAAA,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM;AAC/B,YAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;AACnB,gBAAA,MAAM,CAAC,IAAI,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACN,MAAM,CAAA,EAAA,EACT,KAAK,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAG,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,MAAM,CAAC,IAAI,CAAC,GACnC;;AAEL,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,EACxC,MAAM,EAAE,EAAE,IAAI,EAAE,GACjB,KAAI;;YAEH,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE;AACtC,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AACpF,gBAAA,IAAI,KAAK,CAAC,gBAAgB,EAAE;oBAC1B;;gBAEF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC;;AAErD,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,EACxC,MAAM,EAAE,EAAE,KAAK,EAAE,GAClB,KAAI;;YAEH,IAAI,MAAM,EAAE;gBACV;;YAGF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE;YAClD,MAAM,WAAW,GAAyB,EAAE;AAE5C,YAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;AACtB,gBAAA,MAAM,GAAG,GAAG,WAAW,CACrBC,8BAAe,CAAC,OAAO,EAAE,IAAI,CAAC,EAC9B,KAAK,CAAC,IAAI,CAAC,CACZ;AACD,gBAAA,WAAW,CAAC,IAAI,CAAC,GAAG,GAAG;;;AAIzB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,IAAI,WAAW;AACzC,SAAC,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,CAAC,KAAI;;AAC/C,YAAA,IAAI,CAAC,CAAC,gBAAgB,EAAE;gBACtB;;AAGF,YAAA,IAAI,EAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAC,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,CAAA,EAAE;gBAC/B;;AAGF,YAAA,IAAI,CAAC,WAAW,CACd,CAAC,CAAC,MAAM,CAAC,MAAM,EACf,MAAA,CAAA,EAAA,GAAA,CAAC,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,QAAQ,CAClC;AACH,SAAC,CAAC;;AAGJ;;AAEG;AACH,IAAA,YAAY,CAAC,KAAoB,EAAE,WAAkC,EAAE,oBAA8B,EAAA;AACnG,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;;AAExB,YAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CACjC,IAAI,OAAO,CAAO,OAAO,IAAG;AAC1B,gBAAA,IAAI,CAAC,cAAc,GAAG,OAAO;aAC9B,CAAC,CACH;;QAEH,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,oBAAoB,CAAC;;AAI7D;;;AAGG;IACH,WAAW,CAAC,MAAqB,EAAE,QAAiB,EAAA;;AAClD,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI;AAC9B,QAAA,IAAI,KAAK,GAAU,YAAY,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAG,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,UAAU,CAAC,CAAC;AAC3D,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC3E,QAAA,IAAI,WAAW,CAAC,gBAAgB,EAAE;YAChC;;AAEF,QAAA,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK;;AAGhC,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;AACvD,YAAA,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM;YACjC,KAAK;YACL,QAAQ;AACT,SAAA,CAAC;AACF,QAAA,IAAI,gBAAgB,CAAC,gBAAgB,EAAE;YACrC;;AAEF,QAAA,MAAM,GAAG,GAAG,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;QAEtF,IAAI,gBAAgB,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;YACpD,MAAM,OAAO,GAAiB,EAAE;YAChC,MAAM,WAAW,GAAyB,EAAE;AAE5C,YAAA,IAAI,UAAU,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,SAAS,EAAE;AACrE,gBAAA,OAAO,OAAO,CAAC,UAAU,CAAC;AAC1B,gBAAA,OAAO,WAAW,CAAC,UAAU,CAAC;;iBACzB;AACL,gBAAA,OAAO,CAAC,UAAU,CAAC,GAAG,KAAK;AAC3B,gBAAA,WAAW,CAAC,UAAU,CAAC,GAAG,GAAG;;YAG/B,IAAI,CAAC,OAAO,GACP,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,OAAO,CAAA,EACZ,OAAO,CACX;;YAGD,IAAI,CAAC,WAAW,GACX,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,WAAW,CAAA,EAChB,WAAW,CACf;;aACI;YACL,IAAI,KAAK,EAAE;;gBAET,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,UAAU,GAAG,KAAK,EAAE;gBACtC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,UAAU,GAAG,GAAG,EAAE;;iBACnC;AACE,gBAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAG,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,IAAA,GAAA,OAAA,EAAA,CAAA,UAAU,CAAC;AAC1B,gBAAA,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,MAAG,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,IAAA,GAAA,OAAA,EAAA,CAAA,UAAU,CAAC;;;QAIzC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC;;AAGnD,IAAA,UAAU,CACR,KAAoB,EACpB,UAAiC,EACjC,oBAA8B,EAAA;;QAE9B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,oBAAoB,CAAC;AAC7D,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAI;AACvB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;;AAG5B;;;;;;;AAOG;IACH,IAAI,CACF,OAAsB,EACtB,WAAkC,EAClC,QAAyBpB,uBAAQ,EACjC,oBAAoB,GAAG,KAAK,EAAA;;AAG5B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;AACtC,YAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;AACtB,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;;gBAErD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;;gBAE/C,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;;gBAEvD,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACzE,gBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,mCAAmC,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,CAAC;AAC7F,gBAAA,YAAY,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;;;aAEtE;AACL,YAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;AACtB,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;;gBAErD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;;gBAE/C,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;AAEvD,gBAAA,MAAM,aAAa,GAAG,gBAAgB,CACpC,CAAC,GAAG,UAAU,CAAC,EACf,MAAM,EACN,WAAW,CACZ;;gBAGD,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;gBACjD,YAAY,CAAC,OAAO,CAAC;AACnB,oBAAA,UAAU,EAAE,aAAa;AACzB,oBAAA,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;AACpB,iBAAA,CAAC;;gBAEF,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;gBAChD,IAAI,CAAC,oBAAoB,EAAE;oBACzB,IAAI,CAAC,SAAS,CAAC;AACZ,yBAAA,mCAAmC,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC;;;;;AAKvE,QAAAP,0BAAW,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC3B,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;AACnD,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;;AAEjC;;ACxSD;AACgB,SAAA,UAAU,CAAC,MAAc,EAAE,MAAkB,EAAA;AAC3D,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;AAC5B,IAAA,MAAM,aAAa,GAAG,KAAK,CAAC4B,sCAAuB,CAAC;IACpD,MAAM,OAAO,GAA4B,EAAE;AAC3C,IAAA,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC;AAClB,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM;AAC3B,IAAA,OAAO,CAAC,GAAG,KAAK,EAAE;AAChB,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC;AAC9B,QAAA,IAAIxB,yBAAU,CAAC,YAAY,CAAC,EAAE;AAC5B,YAAA,MAAM,YAAY,GAAG,YAAY,CAACwB,sCAAuB,CAAC;AAC1D,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,aAAa,GAAG,GAAG,CAAC,EAAE;gBACzE;;AAEF,YAAA,YAAY,CAACC,6BAAc,CAAC,GAAG,KAAK;;AAEtC,QAAA,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI;;AAErB,IAAA,KAAK,CAACA,6BAAc,CAAC,GAAG,KAAK;IAC7B,OAAO,EAAE,OAAO,EAAE;AACpB;AAEA;;;;;;AAMG;SACa,QAAQ,CAAC,MAAc,EAAE,MAAkB,EAAE,eAAyB,EAAA;AACpF,IAAA,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC;AAC7C,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC;IACnC,MAAM,YAAY,GAAGC,6BAAc,CAAC,KAAK,CAACC,mCAAoB,CAAC,CAAC;IAChE,MAAM,OAAO,GAA4B,EAAE;;IAG3C,IAAI,CAAC,YAAY,EAAE;QACjB,OAAO,EAAE,OAAO,EAAE;;IAGpB,MAAM,UAAU,GAAa,EAAE;AAC/B,IAAA,KAAK,CAACF,6BAAc,CAAC,GAAG,IAAI;AAC5B,IAAA,IAAI,CAAC,GAAG,aAAa,GAAG,CAAC;AACzB,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM;IAC3B,IAAI,cAAc,GAAG,CAAC;;AAGtB,IAAA,OAAO,CAAC,GAAG,KAAK,EAAE;AAChB,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC;AAC9B,QAAA,MAAM,OAAO,GAAGzB,yBAAU,CAAC,YAAY,CAAC;;QAExC,IAAI,OAAO,EAAE;YACX,IAAI,CAAC4B,0BAAW,CAAC,YAAY,EAAE,KAAK,EAAE,YAAY,CAAC,EAAE;gBACnD;;iBACK,IAAI,CAAC,cAAc,EAAE;;AAE1B,gBAAA,cAAc,GAAG,YAAY,CAACC,0BAAW,CAAC;;;;AAI9C,QAAA,IAAI,CAAC,cAAc,KAAK,OAAO,IAAI,cAAc,KAAK,YAAY,CAACA,0BAAW,CAAC,CAAC,EAAE;AAChF,YAAA,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK;AAClB,YAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;;AAEpB,QAAA,CAAC,EAAE;;AAEL,IAAA,MAAM,MAAM,GAGR;QACF,OAAO;KACR;AACD,IAAA,IAAI,UAAU,CAAC,MAAM,EAAE;AACrB,QAAA,MAAM,KAAK,GAAG,CAAC,GAAG,eAAe,CAAC;AAClC,QAAA,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC;AAC1C,QAAA,MAAM,CAAC,KAAK,GAAG,KAAK;;AAEtB,IAAA,OAAO,MAAM;AACf;;AChFO,MAAM,gBAAgB,GAAG,UAAU;AAE1C;;;;;AAKG;SACa,8BAA8B,CAAC,eAAwB,EAAE,aAAqC,EAAE,cAAuC,EAAA;IACrJ,MAAM,wBAAwB,GAAY,EAAE;AAC5C;;AAEG;AACH,IAAA,KAAK,IAAI,IAAI,IAAI,eAAe,EAAE;AAChC,QAAA,IAAI,IAAI,KAAK,gBAAgB,EAAE;YAC7B;;AAEF,QAAA,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC;QACnC,MAAM,QAAQ,GAAkB,EAAE;AAElC,QAAA,KAAK,IAAI,YAAY,IAAI,KAAK,EAAE;AAC9B;;;AAGG;AACH,YAAA,IAAI,kBAAkB,GAAG,aAAa,CAAC,YAAY,CAAC;YACpD,IAAI,cAAc,EAAE;AAClB,gBAAA,kBAAkB,GAAG,cAAc,CAAC,kBAAkB,CAAC;;AAGzD;;;AAGG;AACH,YAAA,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE;AACvB,gBAAA,QAAQ,CAAC,kBAAkB,CAAC,GAAG,IAAI;AACnC;;AAEG;gBACH,IAAI,kBAAkB,KAAK,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE;AACrD,oBAAA,wBAAwB,CAAC,IAAI,CAAC,GAAG,QAAQ;;;;;AAKjD,IAAA,OAAO,wBAAwB;AACjC;;ACGM,MAAO,iBAAkB,SAAQ,UAAU,CAAA;IAG/C,QAAQ,CACN,OAAsBC,gCAAiB,EAAA;AAEvC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK;;IAG/C,WACE,CAAA,QAA6B,EAC7B,SAA0B,EAAA;AAE1B,QAAA,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC;;;AAIpB,IAAA,OAAO,CAAC,CAAqC,EAAA;QACnD,IAAI9B,yBAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC9B,CAAC,CAAC,cAAc,EAAE;;;;IAKd,QAAQ,CAAC,EAAE,YAAY,EAAiB,EAAA;QAC9C,MAAM,EAAE,MAAM,EAAE,GAAG+B,wBAAS,CAC1B,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,EAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAClC;AACD,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC;QAEjE,IAAI,CAAC,GAAGC,6BAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC;QAClD,MAAM,UAAU,GAAGC,0BAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,QAAQ,CACjC,YAAY,EACZ,MAAM,EACN,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAC7B;AACD,YAAA,UAAU,GAAQ,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,UAAU,CAAK,EAAA,OAAO,CAAE;YAC1C,IAAI,KAAK,EAAE;gBACTC,0BAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC;;;aAE7B;YACL,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC;AACzC,YAAA,UAAU,GAAQ,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,UAAU,CAAK,EAAA,OAAO,CAAE;AAC1C,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;;QAG5B,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,gBAAgB,CAAC;;AAGhD,IAAA,iBAAiB,CAAC,IAAsB,EAAA;;QAE9C,IAAI,IAAI,aAAJ,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJ,IAAI,CAAE,MAAM,EAAE;YAChB,IAAI,CAAC,CAAC,CAAC,CAACC,kCAAmB,CAAC,GAAG,IAAI;AACnC,YAAA,OAAO,IAAI;;AAEb,QAAA,OAAO,KAAK;;IAGN,UAAU,CAAC,EAAE,OAAO,EAAoB,EAAA;AAC9C,QAAA,KAAK,IAAI,IAAI,IAAIvC,0BAAW,EAAE;YAC5B,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE;gBACzC;;;;;AAME,IAAA,MAAM,CAAC,CAA4C,EAAA;QACzD,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM;AAC7B,QAAA,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC;QAC7B,MAAM,EAAE,MAAM,EAAE,GAAGmC,wBAAS,CAC1B,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,EAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAClC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;QAC1C,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,EAAE;QAC1B,MAAM,GAAG,GAAG,MAAM,GAAG,EAAE,GAAG,IAAI;AAC9B,QAAA,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YACnB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,YAAA,MAAM,OAAO,GAAG/B,yBAAU,CAAC,KAAK,CAAC;YACjC,IAAI,OAAO,EAAE;gBACX,CAAC,CAAC,cAAc,EAAE;gBAClB;;;;IAKE,kBAAkB,CAAC,OAAgC,EAAE,IAAY,EAAA;;AAEvE,QAAA,IAAI,IAAI,KAAK,mBAAmB,EAAE;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC5C,YAAA,KAAK,IAAI,KAAK,IAAI,OAAO,EAAE;AACzB,gBAAA,IAAI,OAAO,CAAC,KAAK,CAAC,IAAIA,yBAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AAC/C,oBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK;;;;;IAMtB,gBAAgB,GAAA;AACtB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC;QACtE,OAAO,CAAC,EAAC,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAE,cAAc,CAAA;;AAGxC;;;AAGG;AACK,IAAA,cAAc,CAAC,OAAyB,EAAA;;AAC9C;;;AAGG;AACH,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC7B,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG+B,wBAAS,CACvD,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EACnB,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EACvB,IAAI,CACL;AACD,QAAA,MAAM,QAAQ,GACZ,MAAA,CAAA,MAAA,CAAA,EAAA,YAAY,EACT,EAAA,OAAO,CACX;AACD;;;AAGG;QACH,MAAM,EACJ,gBAAgB,EAChB,KAAK,EACL,OAAO,EACP,cAAc,GACf,GAAGK,6BAAc,CAAC,MAAM,EAAE,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,KAAI,EAAE,EAAE,QAAQ,CAAC;QAE/D,MAAM,cAAc,GAAG,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,MAAA,GAAA,MAAA,GAAA,OAAO,CAAE,kBAAkB;;QAGlD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CACzB,gBAAgB,EAChBN,gCAAiB,EACjB,IAAI,CAAC,QAAQ,CAAC,eAAe,EAC7B,EAAE,KAAK,EAAE,cAAc,EAAE,EACzB,IAAI,CACL;AACD,QAAA,IAAI,CAAC,aAAa,CAChB,OAAO,EACP,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAb,aAAa,GAAI,EAAE,EACnB,cAAc,CACf;;AAGH;;;;AAIG;AACK,IAAA,SAAS,CAAC,IAA0B,EAAA;;QAC1C,IAAI,iBAAiB,GAAoC,EAAE;QAC3D,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,0CAAE,wBAAwB,MAAK,KAAK,EAAE;AACpD,YAAA,IAAI,EAAE,YAAY,EAAE,GAAGC,wBAAS,CAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,EAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,EACjC,IAAI,CACL;YACD,iBAAiB,GAAG,YAAY;;AAElC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC/B,yBAAU,CAAC,CAAC,CAAC,CAAC;AACtD,QAAA,MAAM,OAAO,GACR,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,GAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,EAChC,EAAA,EAAA,YAAY,EAAE,iBAAiB,GAChC;QACD,MAAM,EACJ,gBAAgB,EAChB,KAAK,EACL,OAAO,EACP,cAAc,GACf,GAAGoC,6BAAc,CAAC,MAAM,EAAE,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,KAAI,EAAE,EAAE,OAAO,CAAC;AAC9D,QAAA,IAAI,CAAC,MAAM,GAAG,gBAAgB;QAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC;AAC1C,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,cAAc,CAAC;;AAG7C;;AAEG;AACH,IAAA,WAAW,CAAC,OAAwB,EAAA;;;QAElC,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;;AAEtB,QAAA,IAAI,EAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,CAAA,EAAE;YAChC,IAAI,CAAC,aAAa,EAAE;YACpB;;;AAGF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC7B,MAAM,EAAE,MAAM,EAAE,GAAGL,wBAAS,CAC1B,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EACnB,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CACxB;AACD,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,YAAA,IAAI,CAAC,cAAc,CAAM,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,OAAO,EAAG;;;AAGrC,QAAA,KAAK,IAAI,CAAC,IAAInC,0BAAW,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC/D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;gBACtC;;;;;QAMJ,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,EAAE,MAAM,EAAE,KAAI;;YACtD,IAAI,EAAE,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,MAAI,MAAA,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,CAAA,CAAC,EAAE;gBAC5D;;;AAGF,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;gBAC3B;;AAEF,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AACxB,SAAC,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,EAAE,MAAM,EAAE,KAAI;AACvD,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AACzB,SAAC,CAAC;AAEF;;;AAGG;QACH,IAAI,CAAC,gBAAgB,CACnB,eAAe,EACf,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,KACnC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,CAChD;AACD;;;AAGG;AACH,QAAA,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,MAAK;;AAC9C,YAAA,IAAI,EAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,CAAA,EAAE;gBAChC;;AAEF,YAAA,IAAI,CAAC,cAAc,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,IAAI,CAAC,OAAO,EAAG;AAC1C,SAAC,CAAC;AAEF;;;AAGG;AACH,QAAA,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9D;;AAEG;AACH,QAAA,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAE7D;;AAEG;AACH,QAAA,IAAI,CAAC,gBAAgB,CAACyC,iCAAkB,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;;;IAIzE,aAAa,GAAA;;AAEX,QAAAzC,0BAAW,CAAC,OAAO,CAAC,CAAC,IAAG;AACtB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YAChD,IAAI,OAAO,GAAG,KAAK;AACnB,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,IAAG;AACf,gBAAA,IAAI0C,+BAAgB,CAAC,CAAC,CAAC,EAAE;AACvB,oBAAA,OAAO,CAAC,CAACH,kCAAmB,CAAC;oBAC7B,OAAO,GAAG,IAAI;;AAElB,aAAC,CAAC;;YAEF,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;;AAE1C,SAAC,CAAC;;AAEF,QAAA,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAGJ,wBAAS,CACzC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,EAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,EACjC,IAAI,CACL;QACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CACzB,MAAM,EACND,gCAAiB,EACjB,IAAI,CAAC,QAAQ,CAAC,eAAe,EAC7B,SAAS,EACT,IAAI,CACL;QACD,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC;;AAGjD,IAAA,aAAa,CACnB,YAA8B,GAAA,EAAE,EAChC,aAAwC,GAAA,EAAE,EAC1C,cAAuC,EAAA;;AAGvC,QAAA,MAAM,wBAAwB,GAAG,8BAA8B,CAC7D,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,EAC9B,aAAa,EACb,cAAc,CACf;AACD,QAAA,KAAK,IAAI,IAAI,IAAI,wBAAwB,EAAE;AACzC,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;;;;QAMhE,IAAI,CAAC,QAAQ,CAAC,UAAU,mBAAM,YAAY,CAAA,EAAI,gBAAgB,CAAC;;AAElE;;ACnXD,MAAM,iBAAiB,GAAG,mBAAmB;MAEhC,kBAAkB,CAAA;AAA/B,IAAA,WAAA,GAAA;QAGU,IAAM,CAAA,MAAA,GAAG,CAAC;;IAElB,gBAAgB,CAAC,CAAa,EAAE,MAA0B,EAAA;QACxD,IAAI,CAAC,MAAM,EAAE;YACX;;QAEF,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;QACjD,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC;AACrD,QAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;;AAGvC,IAAA,UAAU,CAAC,GAAW,EAAE,iBAAyB,EAAE,SAAS,GAAG,YAAY,EAAA;AACzE,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB;;QAEF,MAAM,YAAY,GAAG,EAAE;;;AAGvB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,YAAY,EAAE,iBAAiB,GAAG,CAAC,CAAC;AAErE,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,SAAS,CAAA,GAAA,CAAK;AAClE,QAAA,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;AAC/B,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,MAAM,EAAE,SAAS;AAClB,SAAA,CAAC;;AAGJ,IAAA,KAAK,CAAC,CAAa,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAKxD,EAAE,MAAuB,MAAM,EAAA;AAC9B,QAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC;AACvC,QAAA,MAAM,mBAAmB,GAAG,QAAQ,CAAC,qBAAqB,EAAE;QAC5D,IAAI,mBAAmB,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC;;AAExD,QAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC;;AAGlC,IAAA,IAAI,CAAC,MAAe,EAAA;;AAClB,QAAA,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI;;AAE5B,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,MAAM,EAAE;AAC3B,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS;;AAG/B,IAAA,WAAW,CAAC,GAAW,EAAE,IAAY,EAAE,SAAS,GAAG,YAAY,EAAA;AAC7D,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB;;;AAGF,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;;;QAGlC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,GAAG,CAAA,GAAA,CAAK;AACvD,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK;;IAG7B,MAAM,GAAA;AACJ,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACvD,QAAA,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC;AACnC,QAAA,EAAE,CAAC,MAAM,GAAG,IAAI;AAChB,QAAA,OAAO,EAAE;;AAEZ;;AC5ED;;AAEG;AAWH,MAAM,YAAY,GAAGS,kCAAe;AACpC,MAAM,IAAI,GAAG,qBAAqB;AAClC,MAAM,QAAQ,GAAG,eAAe;AAChC,MAAM,eAAe,GAAG,qBAAqB;AAE7C;AACA,MAAM,UAAU,GAAG,iBAAiB;AA4B9B,MAAO,gBAAiB,SAAQ,UAAU,CAAA;IAM9C,WAAmB,CAAA,QAA6B,EAAS,SAA0B,EAAA;AACjF,QAAA,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC;QADT,IAAQ,CAAA,QAAA,GAAR,QAAQ;QAA8B,IAAS,CAAA,SAAA,GAAT,SAAS;AAL1D,QAAA,IAAA,CAAA,QAAQ,GAAGjB,iBAAQ,CAAC,CAAC,CAAa,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzD,IAAc,CAAA,cAAA,GAAsB,IAAI;QACxC,IAAQ,CAAA,QAAA,GAA+B,IAAI;QAEhC,IAAkB,CAAA,kBAAA,GAAuB,EAAE;AAG5D,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,kBAAkB,EAAE;QACvC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AAC3C,QAAA,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC;;AAG1C,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG;AACtC,YAAA,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,CAAC,CAAa,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;SAChD;AACD,QAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG;AACnC,YAAA,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,CAAC,CAAa,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;SAC/C;AAED,QAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,GAAG;AACrC,YAAA,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,CAAC,CAAa,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SAC1C;AAED,QAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;;AAG7E,IAAA,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAyB,EAAA;AAC9C,QAAA,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC1B;;AAEF,QAAA,MAAM,EAAE,gBAAgB,EAAE,GAAGkB,2BAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC;;QAEtE,IAAI,gBAAgB,EAAE;YACpB;;QAEF,IAAI,CAAC,UAAU,EAAE;QACjB,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,kBAAkB;QAClE,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,UAAU,CAAC,QAAQ,CAAC;QACrE,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC;QAE5D,MAAM,MAAM,GAAI,KAAK,CAAC,MAAsB,CAAC,OAAO,CAAC,eAAe,CAAC;QACrE,MAAM,QAAQ,GAAI,KAAK,CAAC,MAAsB,CAAC,OAAO,CAAC,wBAAwB,CAAC;AAChF,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE;YACxB;;;AAIF,QAAA,IAAIC,4BAAa,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,YAAY,EAAE;YAC/D;;AAGF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE;AACtD,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,qBAAqB,EAAE;QAC7C,MAAM,SAAS,GAAGC,mCAAiB,CACjC,IAAI,EACJ,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEvE,IAAI,CAAC,cAAc,GAAG;YACpB,QAAQ,EAAE,KAAK,CAAC,CAAC;YACjB,SAAS;YACT,IAAI;YACJ,MAAM;YACN,QAAQ;YACR,MAAM,EAAE,IAAI,CAAC,QAAQ;YACrB,IAAI;SACL;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC;QACjD,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC,QAAQ,CAAC;AAClE,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACnB,IAAI,CAAC,QAAQ,CACb,EAAA,IAAI,CAAC,cAAc,EACtB;;AAGJ,IAAA,MAAM,CAAC,CAAa,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB;;AAGF,QAAA,MAAM,QAAQ,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACpE,IAAI,CAAC,QAAQ,EAAE;YACb;;AAEF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ;AAC1C,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9B,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;AACvF,YAAA,MAAM,KAAK,GAAGA,mCAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5D,YAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;;AAGjD,YAAA,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE;gBACrD;;AAEF,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CACtB,KAAK,CAAC,GAAG,GAAG,QAAQ,CAAC,YAAY,EACjC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CACxB;;;AAIL,IAAA,IAAI,CAAC,CAAa,EAAA;QAChBF,2BAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;;AAEhC,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;;AAElB,IAAA,UAAU,CAAC,CAAa,EAAA;QACtB,IAAI,CAAC,UAAU,EAAE;;AAEnB,IAAA,SAAS,CAAC,CAAa,EAAA;;QAErB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE;YACxC,IAAI,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;AAC/F,YAAA,IAAI,WAAW,GAAG,CAAC,EAAE;gBACnB,WAAW,GAAG,CAAC;;AAEjB,YAAA,MAAM,WAAW,GAAGE,mCAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC;AAE5E,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK;YACpE,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;;YAGxC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAGF,2BAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACzE,IAAI,CAAC,cAAc,KACtB,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,EAC5C,WAAW,EACX,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAA,CAAA,CAC/E;YACF,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,MAAM,SAAS,GAAG,CAAC,GAAG,QAAQ,CAAC;;AAE/B,gBAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;AAC1E,gBAAA,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC;AACpD,gBAAA,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC;AAC5B,gBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,mCAAmC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC;;YAEvGA,2BAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;;QAElD,IAAI,CAAC,UAAU,EAAE;;IAGX,uBAAuB,GAAA;QAC7B9C,OAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAG,KAAK,MAAM,CAAC,mBAAmB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;;IAGzG,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,IAAI,CAAC,uBAAuB,EAAE;QAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAElC;;AAEG;IACH,kBAAkB,GAAA;QAChB,KAAK,CAAC,kBAAkB,EAAE;QAC1B,IAAI,CAAC,uBAAuB,EAAE;;AAGxB,IAAA,OAAO,CAAC,EACd,MAAM,EACN,MAAM,EACN,IAAI,GACO,EAAA;AACX,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,qBAAqB,EAAE;AAC/C,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,qBAAqB,EAAE;QAC7C,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI;QAChD,OAAO;YACL,MAAM;YACN,QAAQ;AACR,YAAA,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO;YACzB,YAAY;SACb;;AAEK,IAAA,YAAY,CAAC,IAAwB,EAAA;AAC3C,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE;;AAEjE;SAEe,eAAe,CAC7B,SAAiB,EACjB,OAAe,EACf,MAAc,EAAA;AAEd,IAAA,OAAO,SAAS,GAAG,OAAO,GAAG,MAAM;AACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;","x_google_ignoreList":[4,5,6,9,10,11,12,25,26,27,28,29,30]}
|