@scion/components 22.1.0 → 22.3.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/_index.scss +75 -5
- package/common/package.json +4 -0
- package/design/_theming.scss +25 -10
- package/design/components/_scion-component-dark-tokens.scss +153 -0
- package/design/components/_scion-component-light-tokens.scss +153 -0
- package/design/icons/_scion-icon-font.scss +50 -0
- package/design/themes/_scion-dark-theme.scss +2 -7
- package/design/themes/_scion-light-theme.scss +3 -8
- package/fesm2022/scion-components-common.mjs +251 -0
- package/fesm2022/scion-components-common.mjs.map +1 -0
- package/fesm2022/scion-components-dimension.mjs +7 -6
- package/fesm2022/scion-components-dimension.mjs.map +1 -1
- package/fesm2022/scion-components-icon.mjs +380 -0
- package/fesm2022/scion-components-icon.mjs.map +1 -0
- package/fesm2022/scion-components-menu.mjs +3271 -0
- package/fesm2022/scion-components-menu.mjs.map +1 -0
- package/fesm2022/scion-components-sashbox.mjs +21 -21
- package/fesm2022/scion-components-sashbox.mjs.map +1 -1
- package/fesm2022/scion-components-splitter.mjs +16 -13
- package/fesm2022/scion-components-splitter.mjs.map +1 -1
- package/fesm2022/scion-components-table.mjs +2265 -0
- package/fesm2022/scion-components-table.mjs.map +1 -0
- package/fesm2022/scion-components-text.mjs +322 -0
- package/fesm2022/scion-components-text.mjs.map +1 -0
- package/fesm2022/scion-components-throbber.mjs +15 -15
- package/fesm2022/scion-components-throbber.mjs.map +1 -1
- package/fesm2022/scion-components-viewport.mjs +142 -125
- package/fesm2022/scion-components-viewport.mjs.map +1 -1
- package/icon/package.json +4 -0
- package/menu/package.json +4 -0
- package/package.json +22 -2
- package/table/package.json +4 -0
- package/text/package.json +4 -0
- package/types/scion-components-common.d.ts +185 -0
- package/types/scion-components-icon.d.ts +146 -0
- package/types/scion-components-menu.d.ts +1922 -0
- package/types/scion-components-sashbox.d.ts +4 -2
- package/types/scion-components-splitter.d.ts +4 -3
- package/types/scion-components-table.d.ts +577 -0
- package/types/scion-components-text.d.ts +131 -0
- package/types/scion-components-viewport.d.ts +32 -39
- package/viewport/scrollbar/_scrollbar.scss +4 -4
- package/design/components/_scion-component-tokens.scss +0 -48
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scion-components-table.mjs","sources":["../../../../projects/scion/components/table/src/ɵtable-column.factory.ts","../../../../projects/scion/components/table/src/common.ts","../../../../projects/scion/components/table/src/table-storage.ts","../../../../projects/scion/components/table/src/ɵtable-array-datasource.ts","../../../../projects/scion/components/table/src/table.cache.ts","../../../../projects/scion/components/table/src/table-row-binding.ts","../../../../projects/scion/components/table/src/ɵtable.model.ts","../../../../projects/scion/components/table/src/table-datasource.ts","../../../../projects/scion/components/table/src/table.factory.ts","../../../../projects/scion/components/table/src/table-selection.service.ts","../../../../projects/scion/components/table/src/table-cell/table-cell.component.ts","../../../../projects/scion/components/table/src/table-cell/table-cell.component.html","../../../../projects/scion/components/table/src/table-row/table-row.component.ts","../../../../projects/scion/components/table/src/table-row/table-row.component.html","../../../../projects/scion/components/table/src/table-keyboard-navigator.directive.ts","../../../../projects/scion/components/table/src/table-column/table-column.service.ts","../../../../projects/scion/components/table/src/table-column/table-column.component.ts","../../../../projects/scion/components/table/src/table-columns/table-columns.component.ts","../../../../projects/scion/components/table/src/table-columns/table-columns.component.html","../../../../projects/scion/components/table/src/table-viewport.component.ts","../../../../projects/scion/components/table/src/table-grid.component.ts","../../../../projects/scion/components/table/src/table-body.component.ts","../../../../projects/scion/components/table/src/column-header/column-header.component.ts","../../../../projects/scion/components/table/src/column-header/column-header.component.html","../../../../projects/scion/components/table/src/column-filter/column-filter-boolean-label.pipe.ts","../../../../projects/scion/components/table/src/column-filter/column-filter.component.ts","../../../../projects/scion/components/table/src/column-filter/column-filter.component.html","../../../../projects/scion/components/table/src/table-header/table-header.component.ts","../../../../projects/scion/components/table/src/table-header/table-header.component.html","../../../../projects/scion/components/table/src/table.component.ts","../../../../projects/scion/components/table/src/table.component.html","../../../../projects/scion/components/table/src/public_api.ts","../../../../projects/scion/components/table/src/scion-components-table.ts"],"sourcesContent":["/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {SciBooleanColumnDescriptor, SciTableColumnDescriptorLike, SciComponentColumnDescriptor, SciNumberColumnDescriptor, SciStringColumnDescriptor, SciTableColumnFactory, SciTemplateColumnDescriptor} from './table-column.factory';\nimport {SciTableColumnType, SciTableDescriptor} from './table.model';\nimport {isSignal} from '@angular/core';\n\nexport class ɵSciTableColumnFactory<T> implements SciTableColumnFactory<T> {\n\n public readonly columns = new Array<SciTableColumnDescriptorLike<T> & {type: SciTableColumnType}>();\n\n constructor(private readonly _descriptor: SciTableDescriptor<T>) {\n }\n\n public addBooleanColumn(value: (item: T) => boolean): this;\n public addBooleanColumn(header: string, value: (item: T) => boolean): this;\n public addBooleanColumn(descriptor: SciBooleanColumnDescriptor<T>): this;\n public addBooleanColumn(valueHeaderDescriptor: ((item: T) => boolean) | string | SciBooleanColumnDescriptor<T>, value?: (item: T) => boolean): this {\n return this.addColumn('boolean', valueHeaderDescriptor, value);\n }\n\n public addStringColumn(value: (item: T) => string): this;\n public addStringColumn(header: string, value: (item: T) => string): this;\n public addStringColumn(descriptor: SciStringColumnDescriptor<T>): this;\n public addStringColumn(valueHeaderDescriptor: ((item: T) => string) | string | SciStringColumnDescriptor<T>, value?: (item: T) => string): this {\n return this.addColumn('string', valueHeaderDescriptor, value);\n }\n\n public addNumberColumn(value: (item: T) => number): this;\n public addNumberColumn(header: string, value: (item: T) => number): this;\n public addNumberColumn(descriptor: SciNumberColumnDescriptor<T>): this;\n public addNumberColumn(valueHeaderDescriptor: ((item: T) => number) | string | SciNumberColumnDescriptor<T>, value?: (item: T) => number): this {\n return this.addColumn('number', valueHeaderDescriptor, value);\n }\n\n public addComponentColumn(config: SciComponentColumnDescriptor<T>): this {\n // TODO [dwi] Normalize filterable and sortable and add default matcher/comparator to all columns\n if (isSignal(this._descriptor.ɵdatasource) && (config.filterable === true || config.sortable === true)) {\n throw Error('[ColumnDefinitionError] Component columns cannot have a auto filter or auto sort.');\n }\n return this.addColumn('component', config);\n }\n\n public addTemplateColumn(config: SciTemplateColumnDescriptor<T>): this {\n if (isSignal(this._descriptor.ɵdatasource) && (config.filterable === true || config.sortable === true)) {\n throw Error('[ColumnDefinitionError] Template columns cannot have a auto filter or auto sort.');\n }\n return this.addColumn('template', config);\n }\n\n private addColumn(type: SciTableColumnType, valueHeaderDescriptor: ((item: T) => unknown) | string | SciTableColumnDescriptorLike<T>, value?: (item: T) => unknown): this {\n const config = (() => {\n switch (typeof valueHeaderDescriptor) {\n case 'string':\n return {header: valueHeaderDescriptor, value: value!} as SciTableColumnDescriptorLike<T>;\n case 'function':\n return {value: valueHeaderDescriptor} as SciTableColumnDescriptorLike<T>;\n default:\n return valueHeaderDescriptor;\n }\n })();\n\n if (!isSignal(this._descriptor.ɵdatasource) && (typeof config.sortable === 'object' || typeof config.filterable === 'object')) {\n throw Error('[ColumnDefinitionError] Data sources with a loader function cannot define a custom sort or filter function. Sorting and filtering have to be done within the loader function.');\n }\n\n // Fallback to the column index as the column name.\n const name = config.name ?? `column:${this.columns.length}`;\n if (this.columns.find(column => column.name === name)) {\n throw Error(`[ColumnDefinitionError] Column names have to be unique. \"${name}\" is defined more than once.`);\n }\n\n this.columns.push({...config, name, type});\n return this;\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Observable} from 'rxjs';\n\nexport type MaybeAsync<T> = T | Promise<T> | Observable<T>;\n\n/**\n * Creates a range of integers starting at `start` and ending at `end` (including `end`).\n */\nexport function rangeInclusive(start: number, end: number): number[] {\n const range: number[] = [];\n for (let i = start; i <= end; i++) {\n range.push(i);\n }\n return range;\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {EnvironmentProviders, InjectionToken, makeEnvironmentProviders, Type} from '@angular/core';\n\n/**\n * Provides persistent storage for the sci-table.\n */\nexport interface SciTableStorage {\n\n /**\n * Method invoked to load a value from persisted storage.\n */\n load(name: `scion.components.table:${string}`): Promise<string | null> | string | null;\n\n /**\n * Method invoked to write a value to persisted storage.\n */\n store(name: `scion.components.table:${string}`, value: string): Promise<void> | void;\n}\n\nexport const SCI_TABLE_STORAGE = new InjectionToken<SciTableStorage>('SCI_TABLE_STORAGE', {factory: () => ({\n load: (name: `scion.components.table:${string}`) => localStorage.getItem(name),\n store: (name: `scion.components.table:${string}`, value: string) => localStorage.setItem(name, value),\n})});\n\n/**\n * Defaults to localStorage persistence.\n * @param storage\n */\nexport function provideTableStorage(storage: Type<SciTableStorage>): EnvironmentProviders {\n return makeEnvironmentProviders([\n {provide: SCI_TABLE_STORAGE, useClass: storage},\n ]);\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {SciTableColumnFilter, SciTableDataLoaderFn, SciTableSortCriterion, SciTablePageRequest, SciTablePageResponse} from './table-datasource';\nimport {SciTableColumnLike} from './table.model';\nimport {computed, linkedSignal, Signal} from '@angular/core';\nimport {coerceSignal} from '@scion/components/common';\nimport {toObservable} from '@angular/core/rxjs-interop';\nimport {map, Observable, shareReplay} from 'rxjs';\n\nexport function arrayDatasource<T>(data: Signal<T[]>, columns: Signal<SciTableColumnLike<T>[]>): SciTableDataLoaderFn<T> {\n const cache = linkedSignal({\n source: () => ({data: data(), columns: columns()}),\n computation: () => new Map<string, Observable<MappedRow<T>[]>>(),\n });\n\n const items$ = toObservable(computed(() => {\n const resolvedColumns = columns();\n const items: MappedRow<T>[] = data().map(item => ({\n item,\n cells: resolvedColumns.reduce((acc, column) => acc.set(column.name, {\n column,\n value: column.type !== 'component' && column.type !== 'template' ? coerceSignal(column.value(item))() : undefined,\n }), new Map<`column:${string}`, MappedCell<T>>()),\n }));\n\n return {\n items,\n columns: resolvedColumns,\n };\n }));\n\n return (request: SciTablePageRequest): Observable<SciTablePageResponse<T>> => {\n const sortHash = request.sortCriteria.map(sc => `${sc.columnName}_${sc.direction}`).join('-');\n const filterHash = request.columnFilters.map(fc => `${fc.columnName}_${fc.text}`).join('-');\n const hash = `${sortHash}-${filterHash}-${request.tableFilter ?? ''}`;\n\n if (!cache().has(hash)) {\n const sortedAndFiltered$ = items$.pipe(\n map(({items, columns}) => {\n const sortCols = mapCriteria(request.sortCriteria, columns);\n const filterCols = mapCriteria(request.columnFilters, columns);\n\n return items\n .filter(item => columnFilter(item, filterCols) && globalFilter(item, request.tableFilter))\n .sort((a, b) => sort(a, b, sortCols));\n }),\n shareReplay({bufferSize: 1, refCount: true}), // as soon as there are no subscribers left unsubscribe from the source.\n );\n\n // Only store one item in the cache.\n // The cache is used for scrolling and multipage selection.\n // It caches the data based on the current filter and sort.\n cache.set(new Map<string, Observable<MappedRow<T>[]>>().set(hash, sortedAndFiltered$));\n }\n\n return cache().get(hash)!.pipe(\n map(items => ({\n totalCount: items.length,\n items: items.slice(request.start, request.end).map(i => i.item),\n })),\n );\n };\n}\n\ntype Criterion = SciTableSortCriterion | SciTableColumnFilter;\ntype MappedCriterion<T, CRIT extends Criterion = Criterion> = CRIT & {\n column: SciTableColumnLike<T>;\n};\n\ninterface MappedCell<T> {\n column: SciTableColumnLike<T>;\n value: string | number | boolean | undefined;\n}\n\ninterface MappedRow<T> {\n item: T;\n cells: Map<`column:${string}`, MappedCell<T>>;\n}\n\nfunction mapCriteria<T, CRIT extends Criterion>(criteria: CRIT[], columns: SciTableColumnLike<T>[]): MappedCriterion<T, CRIT>[] {\n return criteria.map(sc => {\n const column = columns.find(c => sc.columnName === c.name);\n\n return ({\n ...sc,\n column,\n });\n }).filter((sc): sc is MappedCriterion<T, CRIT> => sc.column !== undefined);\n}\n\nfunction globalFilter<T>(row: MappedRow<T>, filter?: string): boolean {\n if (!filter?.trim()) {\n return true;\n }\n\n for (const column of row.cells.values()) {\n const result = columnFilter(row, [{text: filter, columnName: column.column.name, column: column.column}]);\n\n // If any value includes the filter, it matches the filter.\n if (result) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction columnFilter<T>(row: MappedRow<T>, filterCriteria: MappedCriterion<T, SciTableColumnFilter>[]): boolean {\n if (filterCriteria.length === 0) {\n return true;\n }\n\n for (const criterion of filterCriteria) {\n const value = row.cells.get(criterion.columnName)?.value;\n\n const filter = (() => {\n switch (criterion.column.type) {\n case 'string':\n return criterion.column.filter(criterion.text as string, {item: row.item, value: value as string});\n case 'number':\n return criterion.column.filter(criterion.text as number, {item: row.item, value: value as number});\n case 'boolean':\n return criterion.column.filter(criterion.text as boolean, {item: row.item, value: value as boolean});\n case 'component':\n case 'template':\n return criterion.column.filter(criterion.text as string, {item: row.item, value: undefined});\n default:\n return true;\n }\n })();\n\n // all filters must match (for now)\n if (!filter) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction sort<T>(a: MappedRow<T>, b: MappedRow<T>, sortCriteria: MappedCriterion<T, SciTableSortCriterion>[]): number {\n if (sortCriteria.length === 0) {\n return 0;\n }\n\n for (const criterion of sortCriteria) {\n const aValue = a.cells.get(criterion.columnName)?.value;\n const bValue = b.cells.get(criterion.columnName)?.value;\n\n const sort = (() => {\n switch (criterion.column.type) {\n case 'string':\n return criterion.column.sort({item: a.item, value: aValue as string}, {item: b.item, value: bValue as string});\n case 'number':\n return criterion.column.sort({item: a.item, value: aValue as number}, {item: b.item, value: bValue as number});\n case 'boolean':\n return criterion.column.sort({item: a.item, value: aValue as boolean}, {item: b.item, value: bValue as boolean});\n case 'component':\n case 'template':\n return criterion.column.sort({item: a.item, value: undefined}, {item: b.item, value: undefined});\n default:\n return 0;\n }\n })();\n\n if (sort !== 0) {\n const dir = criterion.direction === 'asc' ? 1 : -1;\n return sort * dir;\n }\n }\n\n return 0;\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {computed, ResourceRef, signal, Signal} from '@angular/core';\nimport {SciTableRow} from './table.model';\nimport {Objects} from '@scion/toolkit/util';\n\nexport class SciTableCache<T> {\n\n private readonly _cache = signal(new Map<SciTableCacheKey, SciTableCacheEntry<T>>());\n\n public readonly loading: Signal<boolean> = computed(() => this.values().some(entry => entry.rows.isLoading()));\n public readonly error: Signal<Error | undefined> = computed(() => this.values().find(entry => entry.rows.error())?.rows.error());\n public readonly values: Signal<SciTableCacheEntry<T>[]> = computed(() => [...this._cache().values()]);\n\n public readonly rowsByIndex: Signal<Map<number, SciTableRow<T>>> = computed(() => this.values()\n .flatMap(page => page.rows.value())\n .reduce((acc, row) => acc.set(row.index, row), new Map<number, SciTableRow<T>>()), {equal: Objects.isEqual});\n\n public readonly rowsById: Signal<Map<unknown, SciTableRow<T>>> = computed(() => this.values()\n .flatMap(page => page.rows.value())\n .reduce((acc, row) => row.id !== undefined ? acc.set(row.id, row) : acc, new Map<unknown, SciTableRow<T>>()), {equal: Objects.isEqual});\n\n public has(key: SciTableCacheKey): boolean {\n return this._cache().has(key);\n }\n\n public get(key: SciTableCacheKey): SciTableCacheEntry<T> | undefined {\n return this._cache().get(key);\n }\n\n public set(key: SciTableCacheKey, entry: SciTableCacheEntry<T>): void {\n this._cache.update(cache => {\n const cacheCopy = new Map(cache);\n const existing = cacheCopy.get(key);\n if (existing) {\n cacheCopy.delete(key);\n existing.dispose();\n }\n\n cacheCopy.set(key, entry);\n return cacheCopy;\n });\n }\n\n /**\n * Deletes the specified page from the cache, but only if still loading.\n */\n public deleteIfLoading(key: SciTableCacheKey): void {\n const cacheEntry = this._cache().get(key);\n if (!cacheEntry?.rows.isLoading()) {\n return;\n }\n\n this._cache.update(cache => {\n const cacheCopy = new Map(cache);\n cacheCopy.delete(key);\n cacheEntry.dispose();\n return cacheCopy;\n });\n }\n\n public clear(): void {\n this._cache.update(cache => {\n for (const entry of cache.values()) {\n entry.dispose();\n }\n return new Map();\n });\n }\n}\n\nexport interface SciTableCacheEntry<T> {\n rows: ResourceRef<SciTableRow<T>[]>;\n start: number;\n end: number;\n dispose: () => void;\n}\n\ntype SciTableCacheKey = `${number}-${number}`;\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {computed, InjectionToken, Provider, Signal} from '@angular/core';\nimport {Objects} from '@scion/toolkit/util';\n\nexport function provideTableRowBinding<T = unknown>(bindings: SciTableRowBindingFactoryFn<T>): Provider {\n return {\n provide: SCI_TABLE_ROW_BINDING,\n useValue: bindings,\n multi: true,\n };\n}\n\nexport type SciTableRowBindingFactoryFn<T> = (bindings: SciTableRowBindingFactory, item: T, index: number) => void;\n\nexport interface SciTableRowBindingFactory {\n addAttributeBinding(name: string, value: unknown | undefined): this;\n\n addClassBinding(name: string | undefined): this;\n\n /**\n * Adds the specified values as part attributes to the row, enabling for custom styling of the row, e.g., based on a condition.\n *\n * Example usage:\n * ```ts\n * table({\n * datasource: data,\n * rowBindings: (bindings, item, index) => bindings\n * .addPartBinding(index % 2 === 0 ? 'row:even' : 'row:odd')\n * .addPartBinding(item.active ? 'row:active' : undefined),\n * columns: table => ...,\n * });\n * ```\n *\n * ```scss\n * sci-table::part(row\\:even) {\n * background-color: lightgray;\n * }\n *\n * sci-table::part(row\\:active) {\n * background-color: green;\n * }\n * ```\n */\n addPartBinding(name: `row:${string}` | undefined): this;\n}\n\nclass ɵSciTableRowBindingFactory implements SciTableRowBindingFactory {\n\n public readonly attributeBindings = new Array<[string, unknown]>();\n public readonly classBindings = new Array<string>();\n public readonly partBindings = new Array<`row:${string}`>();\n\n public addAttributeBinding(name: string, value: unknown | undefined): this {\n if (value !== undefined) {\n this.attributeBindings.push([name, value]);\n }\n return this;\n }\n\n public addClassBinding(name: string | undefined): this {\n if (name) {\n this.classBindings.push(name);\n }\n return this;\n }\n\n public addPartBinding(name: `row:${string}` | undefined): this {\n if (name) {\n this.partBindings.push(name);\n }\n return this;\n }\n}\n\nexport function coerceTableRowBindings<T>(bindingsFn: SciTableRowBindingFactoryFn<T>[], item: T, index: number): SciTableRowBindings {\n const factory = computed(() => {\n const factory = new ɵSciTableRowBindingFactory();\n bindingsFn.forEach(fn => fn(factory, item, index));\n return factory;\n });\n\n return {\n attributes: computed(() => Object.fromEntries(factory().attributeBindings), {equal: Objects.isEqual}),\n cssClass: computed(() => factory().classBindings, {equal: Objects.isEqual}),\n part: computed(() => factory().partBindings, {equal: Objects.isEqual}),\n };\n}\n\nexport interface SciTableRowBindings {\n cssClass: Signal<string[]>;\n attributes: Signal<{[name: string]: unknown}>;\n part: Signal<`row:${string}`[]>;\n}\n\nexport const SCI_TABLE_ROW_BINDING = new InjectionToken<SciTableRowBindingFactory[]>('SCI_TABLE_ROW_BINDING');\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {computed, DestroyableInjector, effect, inject, InjectionToken, Injector, isSignal, linkedSignal, NgZone, resource, runInInjectionContext, signal, Signal, untracked, WritableSignal} from '@angular/core';\nimport {SciTableColumnFilter, SciTableDataLoaderFn, SciTableSortCriterion} from './table-datasource';\nimport {SciTable, SciTableCellContext, SciTableCellLike, SciTableColumnLike, SciTableColumnType, SciTableDescriptor, SciTableRow, SciTableRowActionFactoryFn} from './table.model';\nimport {ɵSciTableColumnFactory} from './ɵtable-column.factory';\nimport {rangeInclusive} from './common';\nimport {SCI_TABLE_STORAGE} from './table-storage';\nimport {SciTableColumnDescriptorLike} from './table-column.factory';\nimport {coerceSignal, createDestroyableInjector, toLazyObservable} from '@scion/components/common';\nimport {arrayDatasource} from './ɵtable-array-datasource';\nimport {SciTableCache, SciTableCacheEntry} from './table.cache';\nimport {rxResource, takeUntilDestroyed, toObservable} from '@angular/core/rxjs-interop';\nimport {concat, defaultIfEmpty, firstValueFrom, fromEvent, of, skip, switchMap, throwError, timer} from 'rxjs';\nimport {coerceTableRowBindings, SCI_TABLE_ROW_BINDING, SciTableRowBindingFactoryFn} from './table-row-binding';\nimport {clamp, Objects, Observables, runSafe} from '@scion/toolkit/util';\nimport {first, map, startWith} from 'rxjs/operators';\nimport {subscribeIn} from '@scion/toolkit/operators';\n\nexport class ɵSciTable<T = unknown> implements SciTable<T> {\n\n private readonly _tableStorage = inject(SCI_TABLE_STORAGE);\n private readonly _injector = inject(Injector);\n\n public readonly name = signal<`table:${string}` | undefined>(undefined);\n public readonly columns: Signal<SciTableColumnLike<T>[]>;\n public readonly rowActions?: SciTableRowActionFactoryFn<T>;\n\n private readonly _rowBindings: SciTableRowBindingFactoryFn<T>[];\n private readonly _dataLoaderFn: SciTableDataLoaderFn<T>;\n private readonly _trackBy?: (item: T) => unknown;\n\n public readonly tableViewRef = signal<SciTableViewRef | undefined>(undefined);\n public readonly userSettings: WritableSignal<SciTableUserSettings>;\n public readonly bufferSize: number;\n public readonly pageSize: number;\n public readonly filterable: WritableSignal<boolean>;\n public readonly showHeader: WritableSignal<boolean>;\n public readonly wrapHeader: WritableSignal<boolean>;\n public readonly sortable: WritableSignal<boolean>;\n public readonly resizable: WritableSignal<boolean>;\n public readonly selectable: WritableSignal<'single' | 'multi' | false>;\n\n public readonly scrollRange: Signal<SciScrollRange | undefined>;\n public readonly scrollTop: Signal<number>;\n public readonly virtualScrollOffset: Signal<{top: number; bottom: number}>;\n public readonly viewportPageSize: Signal<number>;\n\n public readonly scrolling: Signal<boolean>;\n public readonly resizing = computed(() => this.columns().some(column => column.resizing()));\n public readonly sortCriteria = signal<SciTableSortCriterion[]>([]);\n public readonly filterCriteria = signal<SciTableColumnFilter[]>([]);\n\n private readonly _cache = new SciTableCache<T>();\n private readonly _tableFilter = signal<string | null>(null);\n private readonly _selectedItems = signal(new Map<unknown, T>());\n\n // Reset total count on criteria change to show skeletons instead of stale data while loading.\n public readonly totalCount = linkedSignal({\n source: () => this.criteria(),\n computation: () => undefined as number | undefined,\n });\n\n public readonly activeItem = linkedSignal({\n source: () => this.criteria(),\n computation: () => undefined as T | undefined,\n });\n\n public readonly hoveredIndex = linkedSignal({\n source: () => {\n this.criteria(); // reset on criteria change\n this.scrolling(); // reset when start scrolling\n },\n computation: () => -1,\n });\n\n public readonly criteria = computed(() => ({sort: this.sortCriteria(), filter: this.filterCriteria(), tableFilter: this._tableFilter()}));\n public readonly loading = this._cache.loading;\n public readonly error = this._cache.error;\n public readonly activeRow: Signal<SciTableRow<T> | undefined>;\n public readonly hoveredRow = computed(() => this.rowsByIndex().get(this.hoveredIndex()));\n public readonly selectedItems = computed(() => [...this._selectedItems().values()]);\n public readonly selectedIds = computed(() => new Set([...this._selectedItems().keys()]));\n public readonly rowsByIndex = this._cache.rowsByIndex;\n public readonly rows = this.computeRows();\n\n constructor(descriptor: SciTableDescriptor<T>) {\n // TODO [table] Remove after datasource is final. See ɵillegaldatasource.\n descriptor = {...descriptor, ɵdatasource: descriptor.ɵdatasource ?? descriptor.datasource};\n\n this.bufferSize = descriptor.bufferSize ?? 10;\n this.pageSize = descriptor.pageSize ?? 50;\n this.sortable = signal(descriptor.sortable ?? true);\n this.filterable = signal(descriptor.filterable ?? false);\n this.showHeader = signal(descriptor.showHeader ?? true);\n this.wrapHeader = signal(descriptor.wrapHeader ?? false);\n this.resizable = signal(descriptor.resizable ?? true);\n this.selectable = signal(descriptor.selectable ?? 'multi');\n this.userSettings = this.computeUserSettings();\n this.scrollRange = this.computeScrollRange();\n this.scrollTop = this.computeScrollTop();\n this.scrolling = this.computeScrolling();\n this.virtualScrollOffset = this.computeVirtualScrollOffset();\n this.viewportPageSize = this.computeViewportPageSize();\n this.activeRow = this.computeActiveRow();\n this.columns = this.computeColumns(descriptor);\n\n this.rowActions = descriptor.rowActions;\n this._rowBindings = [\n ...descriptor.rowBindings ? [descriptor.rowBindings] : [],\n ...inject<SciTableRowBindingFactoryFn<T>[]>(SCI_TABLE_ROW_BINDING, {optional: true}) ?? [],\n ];\n this._trackBy = descriptor.trackBy;\n this._dataLoaderFn = isSignal(descriptor.ɵdatasource) ? arrayDatasource(descriptor.ɵdatasource, this.columns) : descriptor.ɵdatasource!;\n\n this.installCriteriaWatcher();\n this.installPageLoader();\n }\n\n /**\n * Connects {@link SciTableComponent} to the model.\n */\n public connect(name: `table:${string}`, viewRef: SciTableViewRef): void {\n this.name.set(name);\n this.tableViewRef.set(viewRef);\n }\n\n public disconnect(): void {\n this.name.set(undefined);\n this.tableViewRef.set(undefined);\n }\n\n private computeColumns(descriptor: SciTableDescriptor<T>): Signal<SciTableColumnLike<T>[]> {\n // Create separate injection context per factory invocation to clean up allocated resources, like RxJS subscriptions.\n let injector: DestroyableInjector | undefined;\n\n return computed(() => {\n injector?.destroy();\n injector = createDestroyableInjector({parent: this._injector});\n\n return runInInjectionContext(injector, () => {\n const tableColumnFactory = new ɵSciTableColumnFactory<T>(descriptor);\n descriptor.columns(tableColumnFactory);\n return untracked(() => tableColumnFactory.columns.map(column => this.initColumn(column.type, column)));\n });\n });\n }\n\n /**\n * Computes the rows currently visible in the viewport (+buffer).\n */\n private computeRows(): Signal<SciTableRow<T>[]> {\n return computed(() => {\n const scrollRange = this.scrollRange();\n if (!scrollRange) {\n return [];\n }\n\n const rowsByIndex = this.rowsByIndex();\n const rowCount = scrollRange.end - scrollRange.start;\n\n // Populate rows with cached rows in the range window, fallback to row shell to show skeleton.\n return untracked(() => Array.from({length: rowCount}, (_, i) => rowsByIndex.get(scrollRange.start + i) ?? createSyntheticRow(i)));\n });\n\n function createSyntheticRow(index: number): SciTableRow<T> {\n return {\n index,\n loading: true,\n active: signal(false).asReadonly(),\n selected: signal(false).asReadonly(),\n hovered: signal(false).asReadonly(),\n };\n }\n }\n\n /**\n * Computes the visible row count based on the viewport size.\n */\n private computeScrollRange(): Signal<SciScrollRange | undefined> {\n return computed(() => {\n const tableViewRef = this.tableViewRef();\n if (!tableViewRef) {\n return undefined;\n }\n\n const viewportHeight = tableViewRef.viewportHeight();\n const itemHeight = tableViewRef.itemHeight();\n const scrollTop = this.scrollTop();\n\n const start = Math.floor(scrollTop / itemHeight);\n const viewportRowCount = Math.ceil(viewportHeight / itemHeight);\n const end = Math.min(start + viewportRowCount);\n\n const totalCount = this.totalCount() ?? viewportRowCount; // fill viewport if no data loaded yet\n\n return {\n start: clamp(start - this.bufferSize, {min: 0, max: Math.max(0, totalCount - viewportRowCount)}),\n end: clamp(end + this.bufferSize, {max: totalCount}),\n };\n }, {equal: Objects.isEqual});\n }\n\n private computeVirtualScrollOffset(): Signal<{top: number; bottom: number}> {\n return computed(() => {\n const itemHeight = this.tableViewRef()?.itemHeight() ?? 0;\n const totalCount = this.totalCount() ?? 0;\n const rangeEnd = Math.min(this.scrollRange()?.end ?? 0, this.totalCount() ?? 0);\n\n return {\n top: (this.scrollRange()?.start ?? 0) * itemHeight,\n bottom: (totalCount - rangeEnd) * itemHeight,\n };\n }, {equal: Objects.isEqual});\n }\n\n private computeViewportPageSize(): Signal<number> {\n return computed(() => {\n const itemHeight = this.tableViewRef()?.itemHeight() ?? 0;\n const viewportHeight = this.tableViewRef()?.viewportHeight() ?? 0;\n return Math.ceil(viewportHeight / itemHeight);\n });\n }\n\n /**\n * Tracks {@link HTMLElement.scrollTop} of the viewport.\n */\n private computeScrollTop(): Signal<number> {\n const zone = inject(NgZone);\n\n return rxResource({\n defaultValue: 0,\n params: () => this.tableViewRef()?.viewport,\n stream: ({params: viewport}) => fromEvent(viewport, 'scroll', {passive: true})\n .pipe(\n map(() => viewport.scrollTop),\n startWith(viewport.scrollTop),\n subscribeIn(fn => zone.runOutsideAngular(fn)),\n ),\n }).value;\n }\n\n /**\n * Tracks whether currently scrolling the viewport.\n */\n private computeScrolling(): Signal<boolean> {\n const zone = inject(NgZone);\n\n return rxResource({\n defaultValue: false,\n params: () => this.tableViewRef()?.viewport,\n stream: ({params: viewport}) => fromEvent(viewport, 'scroll', {passive: true})\n .pipe(\n switchMap(() => concat(of(true), timer(150).pipe(map(() => false)))),\n startWith(false),\n subscribeIn(fn => zone.runOutsideAngular(fn)),\n ),\n }).value;\n }\n\n /**\n * Loads a range of rows, based on the current sort and filter criteria, into the cache.\n */\n public async loadRange(start: number, end: number): Promise<void> {\n const sortCriteria = this.sortCriteria();\n const columnFilters = this.filterCriteria();\n const tableFilter = this._tableFilter() ?? undefined;\n\n // Calculate pages based on row indices and page size.\n const pages = pagesByRange(start, end, this.pageSize);\n if (!pages) {\n return;\n }\n\n // Load pages and wait until completed loading.\n await Promise.all(pages\n .map(page => this.loadPage({page, pageSize: this.pageSize, columnFilters, tableFilter, sortCriteria}))\n .map(page => firstValueFrom(toLazyObservable(page.loading, {injector: this._injector}).pipe(first(loading => !loading), defaultIfEmpty(true)))));\n }\n\n /**\n * Loads the requested page from the cache or datasource and returns its loading state with a cancelation handler.\n */\n private loadPage({page, pageSize, sortCriteria, columnFilters, tableFilter}: {page: number; pageSize: number; sortCriteria: SciTableSortCriterion[]; columnFilters: SciTableColumnFilter[]; tableFilter?: string}): {loading: Signal<boolean>; cancel: () => void} {\n const pageStart = page * pageSize;\n const pageEnd = pageStart + pageSize;\n const cacheKey = `${pageStart}-${pageEnd}` as const;\n\n if (this._cache.has(cacheKey)) {\n return {\n loading: this._cache.get(cacheKey)!.rows.isLoading,\n cancel: () => this._cache.deleteIfLoading(cacheKey),\n };\n }\n\n const cacheEntryInjector = createDestroyableInjector({parent: this._injector});\n const cacheEntry: SciTableCacheEntry<T> = {\n rows: runInInjectionContext(cacheEntryInjector, () => {\n // Fetch data.\n const tableResponse$ = runSafe(\n () => Observables.coerce(this._dataLoaderFn({\n start: pageStart,\n end: pageEnd,\n pageSize,\n page,\n sortCriteria,\n tableFilter,\n columnFilters,\n })),\n error => throwError(() => error));\n\n // Create a resource to track loading and error states.\n const tableResponse = rxResource({stream: () => tableResponse$});\n\n // Create a derived resource mapping the response to rows. Must be done in a separate resource to not fetch data anew on column change.\n const rows = resource({\n params: ({chain}) => {\n const items = chain(tableResponse)?.items;\n return items && {items, columns: this.columns()};\n },\n loader: async ({params}) => this.mapItemsToRow(params.items, params.columns, pageStart),\n defaultValue: [],\n });\n\n // Synchronize total row count based on resource state.\n effect(() => {\n switch (rows.status()) {\n case 'resolved': {\n // Update count only after rows resolve to prevent premature scroll invalidation.\n this.totalCount.set(tableResponse.value()?.totalCount);\n break;\n }\n case 'error': {\n console.error(rows.error()!.cause);\n // Reset count to scroll to the top so the user sees the error.\n this.totalCount.set(0);\n break;\n }\n }\n });\n\n return rows;\n }),\n dispose: () => cacheEntryInjector.destroy(),\n start: pageStart,\n end: pageEnd,\n };\n\n this._cache.set(cacheKey, cacheEntry);\n\n return {\n loading: cacheEntry.rows.isLoading,\n cancel: () => this._cache.deleteIfLoading(cacheKey),\n };\n }\n\n /**\n * Toggles sort on a column. ASC -> DESC -> No sort\n *\n * TODO [ego] Revisit API, do we really want a three-state and implicit toggling logic?\n */\n public sort(columnName: `column:${string}`, multi: boolean): void {\n // Scroll to the top as soon as sort changes.\n // Done here explicitly to avoid race-conditions and pages being loaded unnecessarily.\n this.tableViewRef()?.scrollToTop();\n\n this.sortCriteria.update(sortCriteria => {\n const column = this.columns().find(column => column.name === columnName);\n if (!column) {\n throw Error(`[NullColumnError] Column '${columnName}' not found in table '${this.name()}'.`);\n }\n\n const currentSortCriterion = sortCriteria.find(sortCriterion => sortCriterion.columnName === column.name);\n const otherSortCriteria = sortCriteria.filter(sortCriterion => sortCriterion !== currentSortCriterion);\n\n const direction = currentSortCriterion ? (currentSortCriterion.direction === 'asc' ? 'desc' : undefined) : 'asc';\n if (!direction) {\n return multi ? otherSortCriteria : [];\n }\n\n const newSortCriterion = {columnName: column.name, direction} satisfies SciTableSortCriterion;\n return multi ? [...otherSortCriteria, newSortCriterion] : [newSortCriterion];\n });\n }\n\n /**\n * Applies a filter, either via global filter or on a specific column.\n */\n public filter(text: string | null): void;\n public filter(text: string | number | boolean | null, options: {columnName: `column:${string}`}): void;\n public filter(text: string | number | boolean | null, options?: {columnName: `column:${string}`}): void {\n // Scroll to the top as soon as filter changes.\n // Done here explicitly to avoid race-conditions and pages being loaded unnecessarily.\n this.tableViewRef()?.scrollToTop();\n\n if (!options) {\n this._tableFilter.set(text as string);\n return;\n }\n\n const column = this.columns().find(column => column.name === options.columnName);\n if (!column) {\n throw Error(`[NullColumnError] Column '${options.columnName}' not found in table '${this.name()}'.`);\n }\n\n this.filterCriteria.update(filterCriterion => {\n const otherFilterCriteria = filterCriterion.filter(filterCriterion => filterCriterion.columnName !== options.columnName);\n if (text === null) {\n return otherFilterCriteria;\n }\n\n return otherFilterCriteria.concat({columnName: column.name, text});\n });\n }\n\n public updateSelectedItems(updateFn: (ids: Map<unknown, T>) => Map<unknown, T>): void {\n this._selectedItems.update(updateFn);\n }\n\n public reset(): void {\n this._cache.clear();\n this.totalCount.set(undefined);\n }\n\n public dispose(): void {\n this._cache.clear();\n this.disconnect();\n }\n\n /**\n * Loads a set of pages on criteria or viewport changes.\n */\n private installPageLoader(): void {\n effect(onCleanup => {\n const scrollRange = this.scrollRange();\n const sortCriteria = this.sortCriteria();\n const columnFilters = this.filterCriteria();\n const tableFilter = this._tableFilter() ?? undefined;\n\n if (!scrollRange) {\n return;\n }\n\n untracked(() => {\n // Fall back to load the initial page if range is empty. Otherwise, if the table grows with its content,\n // no data would ever load because the scroll range remains 0.\n const pages = pagesByRange(scrollRange.start, scrollRange.end, this.pageSize) ?? [0];\n\n pages.forEach(page => {\n const pageRef = this.loadPage({\n pageSize: this.pageSize,\n page,\n sortCriteria,\n tableFilter,\n columnFilters,\n });\n onCleanup(() => pageRef.cancel());\n });\n });\n });\n }\n\n /**\n * Resets cache on criteria changes.\n */\n private installCriteriaWatcher(): void {\n toObservable(this.criteria).pipe(\n skip(1), // skip first emission to avoid race condition with loader on initialization.\n takeUntilDestroyed(),\n ).subscribe(() => {\n this._cache.clear();\n });\n }\n\n // TODO [dwi] Consider moving into factory\n private initColumn(type: SciTableColumnType, config: SciTableColumnDescriptorLike<T>): SciTableColumnLike<T> {\n // Columns with a custom component or template must provide a sort function to be sortable, because the default sort function does not work.\n const sortable = type === 'component' || type === 'template' ? !!config.sortable : config.sortable !== false;\n\n // Columns with a custom component or template must provide a filter function to be filterable, because the default filter function does not work.\n const filterable = type === 'component' || type === 'template' ? !!config.filterable : config.filterable !== false;\n\n return {\n ...config,\n type,\n name: config.name,\n filter: typeof config.filterable === 'object' ? config.filterable.matcher : defaultFilter,\n sort: typeof config.sortable === 'object' ? config.sortable.comparator : defaultSort,\n sortable: computed(() => this.sortable() && sortable),\n filterable: computed(() => this.filterable() && filterable),\n resizable: computed(() => this.resizable() && (config.resizable ?? true)),\n padding: 'padding' in config ? (config.padding ?? true) : true,\n header: coerceSignal(config.header ?? ''),\n width: computed(() => {\n const userSettings = this.userSettings().columns?.find(column => column.name === config.name);\n return userSettings?.width ? `${userSettings.width}px` : config.width ?? '1fr';\n }),\n minWidth: config.minWidth ?? 100,\n resizing: signal(false),\n location: {x: 0, width: 0}, // injected in `SciColumnComponent`\n } as SciTableColumnLike<T>;\n }\n\n private mapItemsToRow(items: T[], columns: SciTableColumnLike<T>[], pageStart: number): SciTableRow<T>[] {\n return items.map((item, i) => {\n const id = this.trackBy(item);\n const index = pageStart + i;\n\n return {\n id,\n index,\n item,\n loading: false,\n active: computed(() => item === this.activeItem()),\n selected: computed(() => this.selectedIds().has(id)),\n hovered: computed(() => this.hoveredRow()?.index === index),\n bindings: coerceTableRowBindings(this._rowBindings, item, pageStart + i),\n cells: columns.map(column => ({\n value: column.type !== 'component' && column.type !== 'template' ? coerceSignal(column.value(item)) : undefined,\n component: column.type === 'component' ? column.component(item) : undefined,\n template: column.type === 'template' ? column.template(item) : undefined,\n type: column.type,\n column,\n } as SciTableCellLike)),\n };\n });\n }\n\n /**\n * Creates a signal to read and write table user settings.\n */\n private computeUserSettings(): WritableSignal<SciTableUserSettings> {\n // Load user settings from storage.\n const userSettings = resource({\n params: () => this.name(),\n loader: async ({params: tableName}) => {\n try {\n const serialized = await this._tableStorage.load(`scion.components.${tableName}`);\n return serialized ? JSON.parse(serialized) as SciTableUserSettings : {columns: []};\n }\n catch (error) {\n console.warn(`[SciTable] Failed to load user settings for '${tableName}'.`, error);\n return {columns: []};\n }\n },\n defaultValue: {columns: []},\n });\n\n // Persist settings to storage.\n effect(() => {\n if (userSettings.status() === 'local' && this.name()) {\n untracked(() => void this._tableStorage.store(`scion.components.${this.name()!}`, JSON.stringify(userSettings.value())));\n }\n });\n\n return userSettings.value;\n }\n\n /**\n * Call trackBy function or fallback to track by object reference.\n */\n public trackBy(item: T): unknown {\n return this._trackBy?.(item) ?? item;\n }\n\n private computeActiveRow(): Signal<SciTableRow<T> | undefined> {\n return computed(() => {\n const activeItem = this.activeItem();\n if (activeItem === undefined) {\n return undefined;\n }\n\n const id = this.trackBy(activeItem);\n if (id === undefined) {\n return undefined;\n }\n\n return this._cache.rowsById().get(id);\n });\n }\n}\n\nfunction defaultFilter<T>(text: string | boolean | number, {value}: SciTableCellContext<T, string | boolean | number>): boolean {\n if (typeof value !== typeof text) {\n return false;\n }\n\n switch (typeof value) {\n case 'string':\n return value.toLowerCase().includes((text as string).toLowerCase());\n default:\n return text === value;\n }\n}\n\nfunction defaultSort<T>(a: SciTableCellContext<T, string | boolean | number>, b: SciTableCellContext<T, string | boolean | number>): number {\n if (typeof a.value !== typeof b.value) {\n return 0;\n }\n\n switch (typeof a.value) {\n case 'string':\n return a.value.localeCompare(b.value as string);\n case 'number':\n return a.value - (b.value as number);\n case 'boolean':\n return a.value === b.value ? 0 : (a.value ? 1 : -1);\n default:\n return 0;\n }\n}\n\nexport interface SciScrollRange {\n /** incluse */\n start: number;\n /** exclusive */\n end: number;\n}\n\n/**\n * Gets pages by range and page size, or `null` if empty. End is exclusive.\n */\nfunction pagesByRange(start: number, end: number, pageSize: number): number[] | null {\n const startPage = Math.floor(start / pageSize);\n const endPage = Math.floor((end - 1) / pageSize); // `end` is exclusive, so use the last included index (`end - 1`) for page calculation.\n const pages = rangeInclusive(startPage, endPage);\n return pages.length ? pages : null;\n}\n\nexport interface SciTableUserSettings {\n columns?: {name: string; width?: number}[];\n}\n\nexport const ɵSCI_TABLE = new InjectionToken<Signal<ɵSciTable>>('ɵSciTable');\n\nexport interface SciTableViewRef {\n viewport: HTMLElement;\n viewportHeight: Signal<number>;\n viewportWidth: Signal<number>;\n viewportClientHeight: Signal<number>;\n viewportClientWidth: Signal<number>;\n headerHeight: Signal<number>;\n cellPadding: Signal<number>;\n itemHeight: Signal<number>;\n scrollToTop: () => void;\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {MaybeAsync} from './common';\nimport {computed, Signal} from '@angular/core';\n\nexport interface SciTableColumnFilter {\n columnName: `column:${string}`;\n text: string | boolean | number;\n}\n\nexport interface SciTableSortCriterion {\n columnName: `column:${string}`;\n direction: 'asc' | 'desc';\n}\n\nexport interface SciTablePageRequest {\n page: number; // TODO [ego] Should page be 1-based?\n pageSize: number;\n start: number; // Inclusive\n end: number; // Exclusive\n sortCriteria: SciTableSortCriterion[];\n columnFilters: SciTableColumnFilter[];\n tableFilter?: string;\n}\n\nexport interface SciTablePageResponse<T> {\n /**\n * Items of the requested page.\n */\n items: T[];\n\n /**\n * Total count of the source data, used to calculate the scroll size.\n */\n totalCount: number;\n}\n\n/**\n * @docs-private Not public API. For internal use only.\n * @experimental since 22.3.0; API and behavior may change in any version without notice.\n */\nexport type SciTableDataLoaderFn<T> = (request: SciTablePageRequest) => MaybeAsync<SciTablePageResponse<T>>;\n\n/**\n * TODO [table] Remove after datasource is final.\n *\n * @docs-private Not public API. For internal use only.\n * @experimental since 22.3.0; API and behavior may change in any version without notice.\n */\nexport function ɵillegaldatasource<T>(): Signal<T[]> {\n return computed(() => {\n throw Error('[SciTableError] Illegal state. ɵillegaldatasource should not be used.');\n });\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {assertInInjectionContext, assertNotInReactiveContext, DestroyRef, inject, Injector, isSignal, runInInjectionContext, Signal} from '@angular/core';\nimport {SciTable, SciTableDescriptor} from './table.model';\nimport {SciTableColumnFactory} from './table-column.factory';\nimport {ɵSciTable} from './ɵtable.model';\nimport {ɵillegaldatasource} from './table-datasource';\n\nexport type SciTableColumnFactoryFn<T> = (table: SciTableColumnFactory<T>) => void;\n\n// Do not change order for better IntelliSense.\n\n/** @experimental since 22.3.0; API and behavior may change in any version without notice. */\nexport function table<T>(descriptor: SciTableDescriptor<T>): SciTable<T>;\n/** @experimental since 22.3.0; API and behavior may change in any version without notice. */\nexport function table<T>(data: Signal<T[]>, columnFactoryFn: SciTableColumnFactoryFn<T>, options?: {injector?: Injector}): SciTable<T>;\nexport function table<T>(dataOrDescriptor: Signal<T[]> | SciTableDescriptor<T>, columnFactoryFn?: SciTableColumnFactoryFn<T>, options?: {injector?: Injector}): SciTable<T> {\n assertNotInReactiveContext(table, 'Call table in a non-reactive (non-tracking) context, such as within the untracked() function.');\n\n const descriptor = isSignal(dataOrDescriptor) ? ({ɵdatasource: dataOrDescriptor, datasource: ɵillegaldatasource(), columns: columnFactoryFn!, injector: options?.injector}) satisfies SciTableDescriptor<T> : dataOrDescriptor;\n if (!descriptor.injector) {\n assertInInjectionContext(table);\n }\n\n const injector = descriptor.injector ?? inject(Injector);\n const sciTable = runInInjectionContext(injector, () => new ɵSciTable(descriptor));\n injector.get(DestroyRef).onDestroy(() => sciTable.dispose());\n return sciTable;\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {inject, Injectable, Signal} from '@angular/core';\nimport {ɵSCI_TABLE, ɵSciTable} from './ɵtable.model';\nimport {rangeInclusive} from './common';\nimport {firstValueFrom, timer} from 'rxjs';\nimport {SciTableRow} from './table.model';\n\n@Injectable()\nexport class SciTableSelectionService<T> {\n\n private readonly _table = inject<Signal<ɵSciTable<T>>>(ɵSCI_TABLE);\n\n public async onRowClick(index: number, event: {ctrlKey: boolean; shiftKey: boolean; metaKey: boolean}): Promise<void> {\n const table = this._table();\n const rowsByIndex = table.rowsByIndex();\n const row = rowsByIndex.get(index);\n const item = rowsByIndex.get(index)?.item;\n const previousFocusedIndex = table.activeRow()?.index ?? -1;\n\n table.activeItem.set(item);\n\n if (item === undefined || !table.selectable()) {\n return;\n }\n\n if (table.selectable() === 'single') {\n table.updateSelectedItems(() => new Map<unknown, T>().set(row!.id, item));\n return;\n }\n\n if (event.shiftKey && previousFocusedIndex >= 0) {\n const start = Math.min(previousFocusedIndex, index);\n const end = Math.max(previousFocusedIndex, index);\n await this.selectItems(start, end, {add: true});\n }\n else if (event.ctrlKey || event.metaKey) {\n this.toggleSelectedItem(item);\n }\n else {\n // If no modifier is pressed set the selection to the clicked row.\n table.updateSelectedItems(() => new Map<unknown, T>().set(row!.id, item));\n }\n }\n\n public async onArrowUp(event: Event): Promise<void> {\n event.preventDefault();\n\n const table = this._table();\n const activeIndex = this._table().activeRow()?.index ?? -1;\n\n if (activeIndex <= 0) {\n return;\n }\n\n // Set active item.\n const startIndex = activeIndex - 1;\n await this.loadMissingItems(startIndex, startIndex);\n const startItem = table.rowsByIndex().get(startIndex)?.item;\n table.activeItem.set(startItem);\n\n if (!table.selectable()) {\n return;\n }\n\n const keyboardEvent = event as KeyboardEvent;\n const shift = keyboardEvent.shiftKey;\n const ctrlOrMeta = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n\n if (shift && ctrlOrMeta) {\n await this.ctrlShiftUp({startIndex, activeIndex});\n }\n else if (shift) {\n await this.shiftUp({startIndex, activeIndex});\n }\n else if (ctrlOrMeta) {\n // Selection remains unchanged.\n }\n else {\n await this.selectItems(startIndex, startIndex);\n }\n }\n\n public async onArrowDown(event: Event): Promise<void> {\n event.preventDefault();\n\n const table = this._table();\n const activeIndex = this._table().activeRow()?.index ?? -1;\n const endIndex = Math.min(activeIndex + 1, table.totalCount()! - 1);\n\n if (endIndex === activeIndex) {\n return;\n }\n\n // Set active item.\n await this.loadMissingItems(endIndex, endIndex);\n const endItem = table.rowsByIndex().get(endIndex)?.item;\n table.activeItem.set(endItem);\n\n if (!table.selectable()) {\n return;\n }\n\n const keyboardEvent = event as KeyboardEvent;\n const shift = keyboardEvent.shiftKey;\n const ctrlOrMeta = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n\n if (shift && ctrlOrMeta) {\n await this.ctrlShiftDown({endIndex, activeIndex});\n }\n else if (shift) {\n await this.shiftDown({endIndex, activeIndex});\n }\n else if (ctrlOrMeta) {\n // Selection remains unchanged.\n }\n else {\n await this.selectItems(endIndex, endIndex);\n }\n }\n\n public async onPageUp(event: Event): Promise<void> {\n event.preventDefault();\n\n const table = this._table();\n const activeIndex = this._table().activeRow()?.index ?? -1;\n\n if (activeIndex === 0) {\n return;\n }\n\n // Set active item.\n const startIndex = Math.max(activeIndex - table.viewportPageSize() + 1, 0);\n await this.loadMissingItems(startIndex, startIndex);\n const startItem = table.rowsByIndex().get(startIndex)?.item;\n table.activeItem.set(startItem);\n\n if (!table.selectable()) {\n return;\n }\n\n const keyboardEvent = event as KeyboardEvent;\n const shift = keyboardEvent.shiftKey;\n const ctrlOrMeta = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n\n if (shift && ctrlOrMeta) {\n await this.ctrlShiftUp({startIndex, activeIndex});\n }\n else if (shift) {\n await this.shiftUp({startIndex, activeIndex});\n }\n else if (ctrlOrMeta) {\n // Selection remains unchanged.\n }\n else {\n await this.selectItems(startIndex, startIndex);\n }\n }\n\n public async onPageDown(event: Event): Promise<void> {\n event.preventDefault();\n\n const table = this._table();\n const activeIndex = this._table().activeRow()?.index ?? -1;\n const endIndex = Math.min(activeIndex + table.viewportPageSize() - 1, table.totalCount()! - 1);\n\n if (endIndex === activeIndex) {\n return;\n }\n\n // Set active item.\n await this.loadMissingItems(endIndex, endIndex);\n const endItem = table.rowsByIndex().get(endIndex)?.item;\n table.activeItem.set(endItem);\n\n if (!table.selectable()) {\n return;\n }\n\n const keyboardEvent = event as KeyboardEvent;\n const shift = keyboardEvent.shiftKey;\n const ctrlOrMeta = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n\n if (shift && ctrlOrMeta) {\n await this.ctrlShiftDown({endIndex, activeIndex});\n }\n else if (shift) {\n await this.shiftDown({endIndex, activeIndex});\n }\n else if (ctrlOrMeta) {\n // Selection remains unchanged.\n }\n else {\n await this.selectItems(endIndex, endIndex);\n }\n }\n\n public async onHome(event: Event): Promise<void> {\n event.preventDefault();\n\n const table = this._table();\n const activeIndex = this._table().activeRow()?.index ?? -1;\n\n if (activeIndex <= 0) {\n return;\n }\n\n // Set active item.\n const startIndex = 0;\n await this.loadMissingItems(startIndex, startIndex);\n const startItem = table.rowsByIndex().get(startIndex)?.item;\n table.activeItem.set(startItem);\n\n if (!table.selectable()) {\n return;\n }\n\n const keyboardEvent = event as KeyboardEvent;\n const shift = keyboardEvent.shiftKey;\n const ctrlOrMeta = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n\n if (shift && ctrlOrMeta) {\n await this.ctrlShiftUp({startIndex, activeIndex});\n }\n else if (shift) {\n await this.shiftUp({startIndex, activeIndex});\n }\n else if (ctrlOrMeta) {\n // Selection remains unchanged.\n }\n else {\n await this.selectItems(startIndex, startIndex);\n }\n }\n\n public async onEnd(event: Event): Promise<void> {\n event.preventDefault();\n\n const table = this._table();\n const activeIndex = this._table().activeRow()?.index ?? -1;\n\n const endIndex = table.totalCount()! - 1;\n\n if (endIndex === activeIndex) {\n return;\n }\n\n // TODO [mmu] should active item be set before selection? this way, further methods cant rely on table.activeItem.\n // But otherwise, loading and setting the active item needs to be done for each case, or once at the end.\n\n // Set active item.\n await this.loadMissingItems(endIndex, endIndex);\n const endItem = table.rowsByIndex().get(endIndex)?.item;\n table.activeItem.set(endItem);\n\n if (!table.selectable()) {\n return;\n }\n\n const keyboardEvent = event as KeyboardEvent;\n const shift = keyboardEvent.shiftKey;\n const ctrlOrMeta = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n\n if (shift && ctrlOrMeta) {\n await this.ctrlShiftDown({endIndex, activeIndex});\n }\n else if (shift) {\n await this.shiftDown({endIndex, activeIndex});\n }\n else if (ctrlOrMeta) {\n // Selection remains unchanged.\n }\n else {\n await this.selectItems(endIndex, endIndex);\n }\n }\n\n public onSpace(event: Event): void {\n event.preventDefault();\n\n const table = this._table();\n if (!table.selectable()) {\n return;\n }\n\n const activeItem = table.activeItem();\n if (!activeItem) {\n return;\n }\n\n const keyboardEvent = event as KeyboardEvent;\n const ctrlOrMeta = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n const activeItemId = table.trackBy(activeItem);\n\n if (ctrlOrMeta) {\n this.toggleSelectedItem(activeItem);\n }\n else {\n table.updateSelectedItems(() => new Map<unknown, T>().set(activeItemId, activeItem));\n }\n }\n\n public async onControlA(event: Event): Promise<void> {\n event.preventDefault();\n\n const table = this._table();\n const totalCount = table.totalCount() ?? 0;\n\n if (table.selectable() === 'multi' && totalCount >= 0) {\n await this.selectItems(0, totalCount - 1);\n }\n }\n\n // TODO [mmu] Should we add overloads for all variants for better readability, but same logic?\n // shiftArrowDown\n // shiftPageDown\n // ShiftEnd\n private async shiftDown(options: {endIndex: number; activeIndex: number}): Promise<void> {\n const table = this._table();\n const selectedIds = table.selectedIds();\n const activeIndex = options.activeIndex;\n\n const startIndex = activeIndex;\n const endIndex = options.endIndex;\n\n const activeItem = table.rowsByIndex().get(activeIndex)!.item!;\n const activeItemId = table.trackBy(activeItem)!;\n\n if (table.selectable() === 'single') {\n await this.selectItems(endIndex, endIndex);\n return;\n }\n\n if (!selectedIds.has(activeItemId)) {\n await this.selectItems(startIndex, endIndex);\n return;\n }\n\n if (this.isSelectionAtBlockStart(activeIndex)) {\n await this.selectFromBlockStart(startIndex, endIndex);\n return;\n }\n\n await this.selectItems(startIndex, endIndex, {add: true});\n }\n\n private async ctrlShiftDown(options: {endIndex: number; activeIndex: number}): Promise<void> {\n const table = this._table();\n\n const startIndex = options.activeIndex;\n const endIndex = options.endIndex;\n\n if (table.selectable() === 'single') {\n await this.selectItems(endIndex, endIndex);\n }\n else {\n await this.selectItems(startIndex, endIndex, {add: true});\n }\n }\n\n private async shiftUp(options: {startIndex: number; activeIndex: number}): Promise<void> {\n const table = this._table();\n const selectedIds = table.selectedIds();\n const activeIndex = options.activeIndex;\n\n const startIndex = options.startIndex;\n const endIndex = activeIndex;\n\n const activeItem = table.rowsByIndex().get(activeIndex)!.item!;\n const activeItemId = table.trackBy(activeItem)!;\n\n if (table.selectable() === 'single') {\n await this.selectItems(startIndex, startIndex);\n return;\n }\n\n if (!selectedIds.has(activeItemId)) {\n await this.selectItems(startIndex, endIndex);\n return;\n }\n\n if (this.isSelectionAtBlockEnd(activeIndex)) {\n await this.selectFromBlockEnd(startIndex, endIndex);\n return;\n }\n\n await this.selectItems(startIndex, endIndex, {add: true});\n }\n\n private async ctrlShiftUp(options: {startIndex: number; activeIndex: number}): Promise<void> {\n const table = this._table();\n\n const startIndex = options.startIndex;\n const endIndex = options.activeIndex;\n\n if (table.selectable() === 'single') {\n await this.selectItems(startIndex, startIndex);\n }\n else {\n await this.selectItems(startIndex, endIndex, {add: true});\n }\n }\n\n private isSelectionAtBlockStart(activeIndex: number): boolean {\n const table = this._table();\n const selectedIds = table.selectedIds();\n\n const previousItem = table.rowsByIndex().get(activeIndex - 1)?.item;\n const previousItemId = previousItem ? table.trackBy(previousItem) : undefined;\n\n const nextItem = table.rowsByIndex().get(activeIndex + 1)?.item;\n const nextItemId = nextItem ? table.trackBy(nextItem) : undefined;\n\n return !selectedIds.has(previousItemId) && selectedIds.has(nextItemId);\n }\n\n private isSelectionAtBlockEnd(activeIndex: number): boolean {\n const table = this._table();\n const selectedIds = table.selectedIds();\n\n const previousItem = table.rowsByIndex().get(activeIndex - 1)?.item;\n const previousItemId = previousItem ? table.trackBy(previousItem) : undefined;\n\n const nextItem = table.rowsByIndex().get(activeIndex + 1)?.item;\n const nextItemId = nextItem ? table.trackBy(nextItem) : undefined;\n\n return selectedIds.has(previousItemId) && !selectedIds.has(nextItemId);\n }\n\n private async loadMissingItems(startIndex: number, endIndex: number): Promise<void> {\n const table = this._table();\n const indices = rangeInclusive(startIndex, endIndex + 1);\n const rows = indices.map(i => table.rowsByIndex().get(i));\n if (rows.some(row => row?.id === undefined)) {\n await Promise.race([\n table.loadRange(startIndex, endIndex + 1),\n firstValueFrom(timer(5_000)),\n ]);\n }\n }\n\n private async selectItems(startIndex: number, endIndex: number, options?: {add: boolean}): Promise<void> {\n const table = this._table();\n const indices = rangeInclusive(startIndex, endIndex);\n const add = options?.add ?? false;\n let rows = indices.map(i => table.rowsByIndex().get(i));\n\n if (rows.some(row => row?.id === undefined)) {\n // If not all id's could be found load the missing items.\n await Promise.race([\n table.loadRange(startIndex, endIndex),\n firstValueFrom(timer(5_000)),\n ]);\n rows = indices.map(i => table.rowsByIndex().get(i));\n }\n\n table.updateSelectedItems(existing => new Map<unknown, T>([\n ...(add ? existing : []),\n ...rows\n .filter((row): row is Required<SciTableRow<T>> => row?.id !== undefined && row.item !== undefined)\n .map((row): [unknown, T] => [row.id, row.item]),\n ]));\n }\n\n private async selectFromBlockStart(startIndex: number, endIndex: number): Promise<void> {\n const table = this._table();\n\n await this.loadMissingItems(startIndex, endIndex);\n const indices = rangeInclusive(startIndex, endIndex);\n\n table.updateSelectedItems(selection => {\n const newSelection = new Map(selection);\n\n for (let i = 0; i < indices.length; i++) {\n const currentIndex = indices[i]!;\n const nextIndex = indices[i + 1]!;\n\n const item = table.rowsByIndex().get(currentIndex)?.item;\n if (!item) {\n continue;\n }\n\n const itemId = table.trackBy(item);\n const nextItem = table.rowsByIndex().get(nextIndex)?.item;\n const nextItemId = nextItem ? table.trackBy(nextItem) : undefined;\n\n if (selection.has(nextItemId)) {\n newSelection.delete(itemId);\n }\n else {\n newSelection.set(itemId, item);\n }\n }\n return newSelection;\n });\n }\n\n private async selectFromBlockEnd(startIndex: number, endIndex: number): Promise<void> {\n const table = this._table();\n\n await this.loadMissingItems(startIndex, endIndex);\n const indices = rangeInclusive(startIndex, endIndex);\n\n table.updateSelectedItems(selection => {\n const newSelection = new Map(selection);\n\n for (let i = indices.length - 1; i >= 0; i--) {\n const currentIndex = indices[i]!;\n const previousIndex = indices[i - 1]!;\n\n const item = table.rowsByIndex().get(currentIndex)?.item;\n if (!item) {\n continue;\n }\n\n const itemId = table.trackBy(item);\n const previousItem = table.rowsByIndex().get(previousIndex)?.item;\n const previousItemId = previousItem ? table.trackBy(previousItem) : undefined;\n\n if (selection.has(previousItemId)) {\n newSelection.delete(itemId);\n }\n else {\n newSelection.set(itemId, item);\n }\n }\n return newSelection;\n });\n }\n\n private toggleSelectedItem(item: T): void {\n const table = this._table();\n const id = table.trackBy(item);\n\n table.updateSelectedItems(selection => {\n const next = new Map(selection);\n if (next.has(id)) {\n next.delete(id);\n }\n else {\n if (table.selectable() === 'single') {\n next.clear();\n }\n next.set(id, item);\n }\n return next;\n });\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, computed, input, Signal, TemplateRef} from '@angular/core';\nimport {SciTableCellLike, SciTableRow} from '../table.model';\nimport {NgTemplateOutlet} from '@angular/common';\nimport {coerceSignal, SciComponentOutletDirective} from '@scion/components/common';\nimport {Arrays, Objects} from '@scion/toolkit/util';\nimport {SciIconComponent} from '@scion/components/icon';\n\n@Component({\n selector: 'sci-table-cell',\n templateUrl: './table-cell.component.html',\n styleUrl: './table-cell.component.scss',\n host: {\n '[attr.data-type]': 'cell().column.type',\n '[attr.data-column]': 'cell().column.name',\n '[attr.data-padding]': '!cell().column.padding ? false : null',\n '[attr.part]': 'row().selected() ? null : partAttribute()', // prevent styling selected rows\n },\n imports: [\n NgTemplateOutlet,\n SciIconComponent,\n SciComponentOutletDirective,\n ],\n})\nexport class SciTableCellComponent<T> {\n\n public readonly cell = input.required<SciTableCellLike>();\n public readonly row = input.required<SciTableRow<T>>();\n\n protected readonly template = this.computeTemplate();\n protected readonly templateContext = this.computeTemplateContext();\n protected readonly partAttribute = this.computePartAttribute();\n\n private computeTemplate(): Signal<TemplateRef<unknown> | null> {\n return computed(() => {\n const cell = this.cell();\n\n if (cell.type !== 'template') {\n return null;\n }\n\n return coerceSignal(cell.template.template)();\n });\n }\n\n private computeTemplateContext(): Signal<{$implicit: NonNullable<T>} | null> {\n return computed(() => {\n const cell = this.cell();\n const item = this.row().item!;\n\n if (cell.type !== 'template') {\n return null;\n }\n\n return {\n $implicit: item,\n ...Objects.entries(cell.template.context ?? {}).reduce((context, [key, value]) => ({\n ...context,\n [key]: coerceSignal(value)?.(), // eslint-disable-line @typescript-eslint/no-unnecessary-condition\n }), {}),\n };\n });\n }\n\n private computePartAttribute(): Signal<string> {\n return computed(() => {\n return [\n ...Arrays.coerce(this.row().bindings?.part()),\n this.cell().column.name,\n ].join(' ');\n });\n }\n}\n","@let cell = this.cell();\n\n@switch (cell.type) {\n @case ('template') {\n <ng-template *ngTemplateOutlet=\"template(); context: templateContext()\"/>\n }\n @case ('component') {\n <ng-container *sciComponentOutlet=\"cell.component\"/>\n }\n @case ('boolean') {\n <!-- TODO [dwi] Use another ligature for icon scion.clear -->\n <sci-icon class=\"checkbox\">{{cell.value() ? 'scion.checkmark' : 'scion.clear'}}</sci-icon>\n }\n @default {\n {{cell.value()}}\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, inject, input, output, viewChild} from '@angular/core';\nimport {SciTableEvent, SciTableRow} from '../table.model';\nimport {SciTableCellComponent} from '../table-cell/table-cell.component';\nimport {ɵSCI_TABLE} from '../ɵtable.model';\nimport {SciTableSelectionService} from '../table-selection.service';\nimport {contributeMenu, SciToolbarComponent} from '@scion/components/menu';\nimport {UUID} from '@scion/toolkit/uuid';\n\n@Component({\n selector: 'sci-table-row',\n templateUrl: './table-row.component.html',\n styleUrl: './table-row.component.scss',\n imports: [\n SciTableCellComponent,\n SciToolbarComponent,\n ],\n host: {\n '[attr.data-active]': `row().active() ? '' : null`,\n '[attr.data-selected]': `row().selected() ? '' : null`,\n '[attr.data-hovered]': `row().hovered() ? '' : null`,\n '[class]': 'row().bindings?.cssClass?.()',\n '(click)': 'onRowClick($event)',\n '(dblclick)': 'onRowDblClick($event)',\n '(mouseenter)': 'onRowMouseEnter()',\n '(mouseleave)': 'onRowMouseLeave($event)',\n },\n})\nexport class SciTableRowComponent<T> {\n\n public readonly row = input.required<SciTableRow<T>>();\n public readonly primaryAction = output<SciTableEvent<T>>();\n\n protected readonly table = inject(ɵSCI_TABLE);\n protected readonly rowActionToolbar = viewChild(SciToolbarComponent);\n protected readonly rowActionsToolbarName = `toolbar:${UUID.randomUUID()}` as const;\n\n private readonly _selectionService = inject(SciTableSelectionService);\n\n constructor() {\n this.contributeRowActions();\n }\n\n protected onRowClick(event: PointerEvent): void {\n if (this.row().loading) {\n return;\n }\n void this._selectionService.onRowClick(this.row().index, event);\n }\n\n protected onRowDblClick(event: MouseEvent): void {\n if (this.row().loading) {\n return;\n }\n this.primaryAction.emit({sourceEvent: event, items: [this.row().item!]});\n }\n\n protected onRowMouseEnter(): void {\n this.table().hoveredIndex.set(this.row().index);\n }\n\n protected onRowMouseLeave(event: MouseEvent): void {\n const next = event.relatedTarget;\n // Do not unset hovered row when hovering a column resize splitter.\n if (next instanceof Element && next.closest('sci-column-splitter')) {\n return;\n }\n\n this.table().hoveredIndex.set(-1);\n }\n\n protected onActionToolbarClick(event: PointerEvent): void {\n event.stopPropagation(); // prevent selecting the row\n this.table().activeItem.set(this.row().item);\n }\n\n private contributeRowActions(): void {\n contributeMenu(this.rowActionsToolbarName, toolbar => {\n const rowActionsFactoryFn = this.table().rowActions;\n if (!this.row().loading && rowActionsFactoryFn) {\n rowActionsFactoryFn(toolbar, this.row().item, this.row().index);\n }\n });\n }\n}\n","@let row = this.row();\n@for (cell of row.cells; track cell.column.name) {\n <sci-table-cell [cell]=\"cell\" [row]=\"row\"/>\n} @empty {\n @for (column of table().columns(); track column.name) {\n <div class=\"skeleton e2e-skeleton\" [attr.data-column]=\"column.name\"></div>\n }\n}\n\n@let hasRowActions = !!table().rowActions;\n@let isRowHovered = table().hoveredRow() === row;\n@let isRowActionMenuOpen = rowActionToolbar()?.menuOpen();\n\n@if (hasRowActions && (isRowHovered || isRowActionMenuOpen)) {\n <!--eslint-disable-next-line @angular-eslint/template/click-events-have-key-events,@angular-eslint/template/interactive-supports-focus -->\n <sci-toolbar [name]=\"rowActionsToolbarName\" (click)=\"onActionToolbarClick($event)\" class=\"row-actions\"/>\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Directive, inject} from '@angular/core';\nimport {SciTableSelectionService} from './table-selection.service';\n\n@Directive({\n selector: '[sciTableKeyboardNavigator]',\n host: {\n '[attr.tabindex]': '0', // required for keyboard navigation\n\n '(keydown.arrowUp)': 'isFromInput($event) || selectionService.onArrowUp($event)',\n '(keydown.shift.arrowUp)': 'isFromInput($event) || selectionService.onArrowUp($event)',\n '(keydown.control.arrowUp)': 'isFromInput($event) || selectionService.onArrowUp($event)',\n '(keydown.meta.arrowUp)': 'isFromInput($event) || selectionService.onArrowUp($event)',\n '(keydown.shift.control.arrowUp)': 'isFromInput($event) || selectionService.onArrowUp($event)',\n '(keydown.shift.meta.arrowUp)': 'isFromInput($event) || selectionService.onArrowUp($event)',\n\n '(keydown.arrowDown)': 'isFromInput($event) || selectionService.onArrowDown($event)',\n '(keydown.shift.arrowDown)': 'isFromInput($event) || selectionService.onArrowDown($event)',\n '(keydown.control.arrowDown)': 'isFromInput($event) || selectionService.onArrowDown($event)',\n '(keydown.meta.arrowDown)': 'isFromInput($event) || selectionService.onArrowDown($event)',\n '(keydown.shift.control.arrowDown)': 'isFromInput($event) || selectionService.onArrowDown($event)',\n '(keydown.shift.meta.arrowDown)': 'isFromInput($event) || selectionService.onArrowDown($event)',\n\n '(keydown.space)': 'isFromInput($event) || isFromButton($event) || selectionService.onSpace($event)',\n '(keydown.control.space)': 'isFromInput($event) || isFromButton($event) || selectionService.onSpace($event)',\n '(keydown.meta.space)': 'isFromInput($event) || isFromButton($event) || selectionService.onSpace($event)',\n\n '(keydown.control.a)': 'isFromInput($event) || selectionService.onControlA($event)',\n '(keydown.meta.a)': 'isFromInput($event) || selectionService.onControlA($event)',\n\n '(keydown.pageUp)': 'isFromInput($event) || selectionService.onPageUp($event)',\n '(keydown.shift.pageUp)': 'isFromInput($event) || selectionService.onPageUp($event)',\n '(keydown.control.pageUp)': 'isFromInput($event) || selectionService.onPageUp($event)',\n '(keydown.shift.control.pageUp)': 'isFromInput($event) || selectionService.onPageUp($event)',\n\n '(keydown.pageDown)': 'isFromInput($event) || selectionService.onPageDown($event)',\n '(keydown.shift.pageDown)': 'isFromInput($event) || selectionService.onPageDown($event)',\n '(keydown.control.pageDown)': 'isFromInput($event) || selectionService.onPageDown($event)',\n '(keydown.shift.control.pageDown)': 'isFromInput($event) || selectionService.onPageDown($event)',\n\n '(keydown.home)': 'isFromInput($event) || selectionService.onHome($event)',\n '(keydown.shift.home)': 'isFromInput($event) || selectionService.onHome($event)',\n '(keydown.control.home)': 'isFromInput($event) || selectionService.onHome($event)',\n '(keydown.shift.control.home)': 'isFromInput($event) || selectionService.onHome($event)',\n\n '(keydown.end)': 'isFromInput($event) || selectionService.onEnd($event)',\n '(keydown.shift.end)': 'isFromInput($event) || selectionService.onEnd($event)',\n '(keydown.control.end)': 'isFromInput($event) || selectionService.onEnd($event)',\n '(keydown.shift.control.end)': 'isFromInput($event) || selectionService.onEnd($event)',\n },\n})\nexport class SciTableKeyboardNavigatorDirective {\n\n protected readonly selectionService = inject(SciTableSelectionService);\n\n /**\n * Indicates whether the given keyboard event was triggered from an input element.\n */\n protected isFromInput(event: Event): boolean {\n if (event.target instanceof Element && event.target.closest('input, textarea, select') !== null) {\n return true;\n }\n if (event.target instanceof HTMLElement && event.target.isContentEditable) {\n return true;\n }\n return false;\n }\n\n /**\n * Indicates whether the given keyboard event was triggered from a button.\n */\n protected isFromButton(event: Event): boolean {\n return event.target instanceof Element && event.target.closest('button') !== null;\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {SciTableColumnLike} from '../table.model';\nimport {afterNextRender, computed, inject, Injectable, Injector, Signal, signal, WritableSignal} from '@angular/core';\nimport {clamp} from '@scion/toolkit/util';\nimport {ɵSCI_TABLE} from '../ɵtable.model';\n\n@Injectable()\nexport class SciTableColumnService {\n\n private readonly _table = inject(ɵSCI_TABLE);\n private readonly _injector = inject(Injector);\n\n /**\n * State while resizing a column.\n */\n private readonly _resizingState = signal<ColumnResizingState | undefined>(undefined);\n\n /**\n * Provides the calculated CSS `grid-template-columns` value based on configured and resized column widths.\n */\n public readonly gridTemplateColumns = this.computeGridTemplateColumns();\n\n /**\n * Computes the CSS `grid-template-columns` value.\n *\n * Columns are layed out according to their configured widths. While resizing a column, absolute pixel widths are used.\n */\n private computeGridTemplateColumns(): Signal<string> {\n return computed(() => {\n return this._table().columns()\n .map(column => {\n const width = this._resizingState()?.columnWidths()?.get(column.name) ?? column.width();\n if (typeof width === 'number') {\n return `${width}px`;\n }\n if (width.endsWith('fr')) {\n return cssMinmax({min: column.minWidth, max: width});\n }\n return width;\n })\n .join(' ') || '100%'; // fill full width if no column\n });\n }\n\n public startResize(column: SciTableColumnLike): void {\n column.resizing.set(true);\n this._resizingState.set({column, columnWidths: signal(undefined)});\n }\n\n public resize(columnWidth: number | 'min-content'): void {\n const state = this._resizingState()!;\n const clampedWidth = typeof columnWidth === 'number' ? clamp(columnWidth, {min: state.column.minWidth}) : columnWidth;\n\n if (clampedWidth !== state.columnWidths()?.get(state.column.name)) {\n const columnWidths = this.calculateColumnWidths(state.column, clampedWidth);\n state.columnWidths.set(columnWidths);\n }\n }\n\n public endResize(): void {\n const {column} = this._resizingState()!;\n\n // Run on next render to update user settings with effective column widths read from the DOM.\n afterNextRender(() => {\n this.updateUserSettings(column);\n column.resizing.set(false);\n this._resizingState.set(undefined);\n }, {injector: this._injector});\n }\n\n /**\n * Updates user settings with current column widths.\n */\n private updateUserSettings(resizedColumn: SciTableColumnLike): void {\n const resizedColumnIndex = this._table().columns().indexOf(resizedColumn);\n this._table().userSettings.update(userSettings => ({\n ...userSettings,\n columns: this._table().columns().flatMap((column, index) => {\n const columnSettings = userSettings.columns?.find(it => it.name === column.name);\n // Store the width of the resized column and all columns to its left.\n if (index <= resizedColumnIndex) {\n return {\n ...columnSettings ?? {name: column.name},\n width: column.location.width,\n };\n }\n\n return columnSettings ?? [];\n }),\n }));\n }\n\n /**\n * Calculates absolute column widths based on the resized column's new width.\n *\n * Any remaining viewport space is distributed proportionally among flex-sized columns using their current width ratio.\n */\n private calculateColumnWidths(columnToResize: SciTableColumnLike, newColumnWidth: number | 'min-content'): Map<`column:${string}`, number | 'min-content'> {\n const columns = this._table().columns();\n const columnIndex = columns.indexOf(columnToResize);\n\n return columns.reduce((map, column, index) => {\n if (index < columnIndex) {\n return map.set(column.name, column.location.width); // columns to the left are fixed\n }\n if (index === columnIndex) {\n return map.set(column.name, newColumnWidth);\n }\n return map;\n }, new Map<`column:${string}`, number | 'min-content'>());\n }\n}\n\n/**\n * State of an active column resize operation.\n */\ninterface ColumnResizingState {\n /**\n * Column being resized.\n */\n column: SciTableColumnLike;\n /**\n * Map of column names to their pixel widths.\n */\n columnWidths: WritableSignal<Map<`column:${string}`, number | 'min-content'> | undefined>;\n}\n\n/**\n * Creates a minmax() CSS function with the given min/max for use in a CSS grid.\n */\nfunction cssMinmax(minmax: {min: number; max: number | string}): string {\n const min = `${minmax.min}px`;\n const max = typeof minmax.max === 'number' ? `${minmax.max}px` : minmax.max;\n return `minmax(${min}, ${max})`;\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, effect, ElementRef, inject, input, untracked} from '@angular/core';\nimport {SciTableColumn} from '../table.model';\n\n@Component({\n selector: 'sci-table-column',\n template: '',\n host: {\n '[attr.data-column]': 'column().name',\n '[style.min-width.px]': 'column().minWidth', // required when resizing the column to its preferred size to not drop below min-width.\n },\n})\nexport class SciTableColumnComponent {\n\n public readonly column = input.required<SciTableColumn>();\n\n constructor() {\n this.injectLocationToColumn();\n }\n\n private injectLocationToColumn(): void {\n const element = inject(ElementRef).nativeElement as HTMLElement;\n\n effect(onCleanup => {\n const column = this.column();\n\n untracked(() => {\n const location = column.location = {\n get x(): number {\n return element.getBoundingClientRect().left;\n },\n get width(): number {\n return element.offsetWidth;\n },\n };\n onCleanup(() => {\n if (column.location === location) {\n column.location = {x: 0, width: 0};\n }\n });\n });\n });\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, inject, input, signal} from '@angular/core';\nimport {SciSplitterComponent, SplitterMoveEvent} from '@scion/components/splitter';\nimport {ɵSCI_TABLE} from '../ɵtable.model';\nimport {SciTableColumnLike} from '../table.model';\nimport {SciTableRowComponent} from '../table-row/table-row.component';\nimport {SciTableColumnService} from '../table-column/table-column.service';\nimport {SciTableColumnComponent} from '../table-column/table-column.component';\n\n@Component({\n selector: 'sci-table-columns',\n templateUrl: './table-columns.component.html',\n styleUrl: './table-columns.component.scss',\n imports: [\n SciSplitterComponent,\n SciTableColumnComponent,\n ],\n})\nexport class SciTableColumnsComponent<T> {\n\n public readonly rows = input.required<readonly SciTableRowComponent<unknown>[]>();\n\n protected readonly table = inject(ɵSCI_TABLE);\n\n private readonly _hovered = signal(false);\n private readonly _columnService = inject(SciTableColumnService);\n\n protected onResizeStart(column: SciTableColumnLike): void {\n this._columnService.startResize(column);\n }\n\n protected onResize(column: SciTableColumnLike<T>, event: SplitterMoveEvent): void {\n const pointerPosition = event.position.clientPos; // TODO [dwi] Change to screen coordinates to work with microfrontends\n const columnStart = column.location.x - 1; // -1 because splitters are positioned at the end of cell content\n const newColumnWidth = pointerPosition - columnStart;\n this._columnService.resize(newColumnWidth);\n }\n\n protected onResizeEnd(): void {\n this._columnService.endResize();\n\n // Clear the hovered row when resizing ends outside the splitter (for example, above or below it).\n if (!this._hovered()) {\n this.table().hoveredIndex.set(-1);\n }\n }\n\n /**\n * Resizes the column to its preferred size.\n */\n protected onPack(column: SciTableColumnLike): void {\n this._columnService.startResize(column);\n this._columnService.resize('min-content');\n this._columnService.endResize();\n }\n\n protected onMouseEnter(): void {\n this._hovered.set(true);\n }\n\n protected onMouseLeave(): void {\n this._hovered.set(false);\n\n // Do not clear the hovered row while dragging the resize handle, or quick movements will accidentally clear it.\n // If the mouse leaves the splitter during drag (above or below), the hovered row is unset when resizing ends.\n if (!this.table().resizing()) {\n this.table().hoveredIndex.set(-1);\n }\n }\n}\n","<!-- Render a resize splitter per resizable column. -->\n@for (column of table().columns(); track column.name; let i = $index) {\n @if (column.resizable()) {\n <sci-splitter orientation=\"vertical\"\n [class.resizing]=\"column.resizing()\"\n [attr.data-column]=\"column.name\"\n [style.grid-column]=\"i + 1\"\n (start)=\"onResizeStart(column)\"\n (move)=\"onResize(column, $event)\"\n (end)=\"onResizeEnd()\"\n (reset)=\"onPack(column)\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"/>\n }\n}\n\n<!-- Render an invisible synthetic column per column to read current widths and set minimum widths. -->\n@for (column of table().columns(); track column.name; let i = $index) {\n <sci-table-column [column]=\"column\" [style.grid-column]=\"i + 1\"/>\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, computed, ElementRef, inject} from '@angular/core';\nimport {ɵSCI_TABLE} from './ɵtable.model';\n\n/**\n * Represents a semantic element for the table viewport provided as slotted content.\n */\n@Component({\n selector: 'sci-table-viewport',\n template: '<ng-content/>',\n host: {\n '[style.--ɵsci-table-viewport-width]': '`${table().tableViewRef()?.viewportWidth() ?? 0}px`',\n '[style.--ɵsci-table-viewport-height]': '`${viewportHeight() ?? 0}px`',\n '[style.--ɵsci-table-viewport-client-width]': '`${table().tableViewRef()?.viewportClientWidth() ?? 0}px`',\n '[style.--ɵsci-table-viewport-client-height]': '`${table().tableViewRef()?.viewportClientHeight() ?? 0}px`',\n '[style.--ɵsci-table-header-height]': '`${table().tableViewRef()?.headerHeight() ?? 0}px`',\n '[style.--ɵsci-table-cell-padding-inline]': '`${table().tableViewRef()?.cellPadding() ?? 0}px`',\n '[style.--ɵsci-table-row-height]': '`${table().tableViewRef()?.itemHeight() ?? 0}px`',\n },\n})\nexport class SciTableViewportComponent {\n\n public readonly host = inject(ElementRef).nativeElement as HTMLElement;\n\n protected readonly table = inject(ɵSCI_TABLE);\n protected readonly viewportHeight = computed(() => {\n const viewportHeight = this.table().tableViewRef()?.viewportHeight() ?? 0;\n const headerHeight = this.table().tableViewRef()?.headerHeight() ?? 0;\n return viewportHeight + headerHeight;\n });\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, inject} from '@angular/core';\nimport {SciTableColumnService} from './table-column/table-column.service';\nimport {ɵSCI_TABLE} from './ɵtable.model';\n\n/**\n * Represents a semantic element for the table body provided as slotted content.\n */\n@Component({\n selector: 'sci-table-grid',\n template: '<ng-content/>',\n providers: [\n SciTableColumnService,\n ],\n host: {\n '[style.--ɵsci-table-columns]': 'gridTemplateColumns()',\n '[style.--ɵsci-table-virtual-scroll-offset-top]': '`${table().virtualScrollOffset().top}px`',\n '[style.--ɵsci-table-virtual-scroll-offset-bottom]': '`${table().virtualScrollOffset().bottom}px`',\n },\n})\nexport class SciTableGridComponent {\n\n protected readonly table = inject(ɵSCI_TABLE);\n protected readonly gridTemplateColumns = inject(SciTableColumnService).gridTemplateColumns;\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component} from '@angular/core';\n\n/**\n * Represents a semantic element for the table body provided as slotted content.\n */\n@Component({\n selector: 'sci-table-body',\n template: '<ng-content/>',\n})\nexport class SciTableBodyComponent {\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, computed, inject, input} from '@angular/core';\nimport {SciTableColumnLike} from '../table.model';\nimport {ɵSCI_TABLE} from '../ɵtable.model';\nimport {SciIconComponent} from '@scion/components/icon';\nimport {text} from '@scion/components/text';\nimport {NgTemplateOutlet} from '@angular/common';\n\n@Component({\n selector: 'sci-column-header',\n imports: [\n SciIconComponent,\n NgTemplateOutlet,\n ],\n templateUrl: './column-header.component.html',\n styleUrl: './column-header.component.scss',\n host: {\n '[attr.data-column]': 'column().name',\n '[attr.title]': 'header()',\n },\n})\nexport class SciColumnHeaderComponent<T> {\n\n public readonly column = input.required<SciTableColumnLike<T>>();\n\n protected readonly table = inject(ɵSCI_TABLE);\n protected readonly header = text(computed(() => this.column().header()));\n protected readonly sortDirection = computed(() => this.table().sortCriteria().find(criteria => criteria.columnName === this.column().name)?.direction);\n\n protected onSort(event: PointerEvent): void {\n this.table().sort(this.column().name, event.ctrlKey || event.metaKey);\n }\n}\n","@if (column().sortable()) {\n <button class=\"sort e2e-sort\"\n [attr.data-sort-direction]=\"sortDirection()\"\n (click)=\"onSort($event)\">\n <!-- Header -->\n <ng-container *ngTemplateOutlet=\"header_template\"/>\n\n <!-- Sort Indicator -->\n @switch (sortDirection()) {\n @case ('asc') {\n <sci-icon>scion.sort_ascending</sci-icon>\n }\n @case ('desc') {\n <sci-icon>scion.sort_descending</sci-icon>\n }\n @default {\n <sci-icon class=\"no-sort\">scion.sort_indicator</sci-icon>\n }\n }\n </button>\n} @else {\n <ng-container *ngTemplateOutlet=\"header_template\"/>\n}\n\n<ng-template #header_template>\n <span class=\"header e2e-header\" [class.wrap]=\"table().wrapHeader()\">{{header()}}</span>\n</ng-template>\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Pipe, PipeTransform} from '@angular/core';\n\n@Pipe({name: 'sciColumnFilterBooleanLabel'})\nexport class SciColumnFilterBooleanLabelPipe implements PipeTransform {\n\n public transform(value: unknown | null): string | null {\n if (value === true) {\n return '%scion.components.yes.value';\n }\n if (value === false) {\n return '%scion.components.no.value';\n }\n return null;\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, computed, debounced, effect, ElementRef, inject, Injector, input, runInInjectionContext, signal, untracked, viewChild} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {SciTableColumnLike} from '../table.model';\nimport {ɵSCI_TABLE} from '../ɵtable.model';\nimport {SciIconComponent} from '@scion/components/icon';\nimport {firstValueFrom, skip, timer} from 'rxjs';\nimport {contributeMenu, SciMenuRef, ɵSciMenuService} from '@scion/components/menu';\nimport {toObservable} from '@angular/core/rxjs-interop';\nimport {SciTextPipe} from '@scion/components/text';\nimport {createDestroyableInjector} from '@scion/components/common';\nimport {SciColumnFilterBooleanLabelPipe} from './column-filter-boolean-label.pipe';\n\n@Component({\n selector: 'sci-column-filter',\n templateUrl: './column-filter.component.html',\n styleUrl: './column-filter.component.scss',\n imports: [\n FormsModule,\n SciIconComponent,\n SciTextPipe,\n SciColumnFilterBooleanLabelPipe,\n ],\n host: {\n '[attr.data-column]': 'column().name',\n '[attr.data-disabled]': `!column().filterable() ? '' : null`,\n '(click)': 'column().filterable() && onFilterClick()',\n },\n})\nexport class SciColumnFilterComponent<T> {\n\n public readonly column = input.required<SciTableColumnLike<T>>();\n\n protected readonly filter = signal<string | boolean | number | null>(null);\n protected readonly input = viewChild<ElementRef<HTMLElement>>('input');\n\n private readonly _table = inject(ɵSCI_TABLE);\n private readonly _menuService = inject(ɵSciMenuService);\n private readonly _injector = inject(Injector);\n private readonly _host = inject(ElementRef).nativeElement as HTMLElement;\n\n private _menu: SciMenuRef | undefined;\n\n constructor() {\n this.bindToModel();\n }\n\n protected onFilterClick(): void {\n if (this.column().type === 'boolean') {\n this.toggleBooleanMenu();\n }\n this.input()!.nativeElement.focus();\n }\n\n protected onReset(event: PointerEvent): void {\n this.filter.set(null);\n this.input()!.nativeElement.focus();\n event.stopPropagation(); // prevent opening menu\n }\n\n private bindToModel(): void {\n const filterDebounced = debounced(computed(() => trim(this.filter())), async value => {\n // Debounce only if not empty.\n if (value !== null && typeof value !== 'boolean') {\n await firstValueFrom(timer(200));\n }\n });\n\n effect(() => {\n const filter = filterDebounced.value();\n const table = this._table();\n const column = this.column();\n\n untracked(() => {\n table.filter(filter, {columnName: column.name});\n });\n });\n }\n\n private toggleBooleanMenu(): void {\n // Close menu if already opened.\n if (this._menu) {\n this._menu.close();\n return;\n }\n\n const injector = createDestroyableInjector({parent: this._injector});\n runInInjectionContext(injector, () => {\n // Contribute menu items.\n contributeMenu('menu:column-filter', menu => menu\n .addMenuItem({label: '%scion.components.yes.value', attributes: {'data-option': 'true'}, onSelect: () => this.filter.set(true)})\n .addMenuItem({label: '%scion.components.no.value', attributes: {'data-option': 'false'}, onSelect: () => this.filter.set(false)}),\n );\n\n // Open menu.\n this._menu = this._menuService.open('menu:column-filter', {\n anchor: this._host,\n minWidth: `${this._host.offsetWidth}px`,\n offset: {y: -1},\n });\n\n // Close menu when start resizing a column. By default, closes the menu only on mouse up.\n toObservable(this._table().resizing)\n .pipe(skip(1))\n .subscribe(() => this._menu?.close());\n\n this._menu.onClose(() => {\n injector.destroy();\n // Restore focus manually as it is not restored automatically since opening the popover inside Shadow DOM.\n // TODO [menu] Consider restore focus manually in Menu API due to restriction in shadow DOM.\n this.input()!.nativeElement.focus();\n this._menu = undefined;\n });\n });\n }\n}\n\nfunction trim(value: string | number | boolean | null): string | number | boolean | null {\n return typeof value === 'string' ? value.trim() || null : value;\n}\n","@if (column().filterable()) {\n @let active = filter() !== null && filter() !== '';\n\n <sci-icon class=\"filter e2e-filter\" [class.active]=\"active\">scion.filter</sci-icon>\n\n @switch (column().type) {\n @case ('number') {\n <input [(ngModel)]=\"filter\" type=\"number\" #input/>\n }\n @case ('boolean') {\n <input [ngModel]=\"(filter() | sciColumnFilterBooleanLabel | sciText)()\" type=\"button\" #input>\n <sci-icon class=\"chevron\">scion.chevron_down</sci-icon>\n }\n @default {\n <input [(ngModel)]=\"filter\" type=\"text\" #input/>\n }\n }\n\n @if (active) {\n <button class=\"clear e2e-clear\" (click)=\"onReset($event)\">\n <sci-icon>scion.clear</sci-icon>\n </button>\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, inject} from '@angular/core';\nimport {ɵSCI_TABLE} from '../ɵtable.model';\nimport {SciColumnHeaderComponent} from '../column-header/column-header.component';\nimport {SciColumnFilterComponent} from '../column-filter/column-filter.component';\n\n@Component({\n selector: 'sci-table-header',\n templateUrl: './table-header.component.html',\n styleUrl: './table-header.component.scss',\n host: {\n '(wheel)': 'onMouseWheel($event)',\n },\n imports: [\n SciColumnHeaderComponent,\n SciColumnFilterComponent,\n ],\n})\nexport class SciTableHeaderComponent {\n\n protected readonly table = inject(ɵSCI_TABLE);\n\n protected onMouseWheel(event: WheelEvent): void {\n // Prevent vertical scrolling on header, but not horizontal scrolling.\n if (!event.shiftKey) {\n event.preventDefault();\n }\n }\n}\n","@let table = this.table();\n\n@if (table.showHeader()) {\n @for (column of table.columns(); track column.name) {\n <sci-column-header [column]=\"column\"/>\n }\n}\n@if (table.filterable()) {\n @for (column of table.columns(); track column.name) {\n <sci-column-filter [column]=\"column\"/>\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, computed, effect, ElementRef, inject, input, output, Provider, untracked, viewChild, viewChildren, ViewEncapsulation} from '@angular/core';\nimport {SciTable, SciTableEvent} from './table.model';\nimport {ɵSCI_TABLE, ɵSciTable} from './ɵtable.model';\nimport {SciScrollbarComponent} from '@scion/components/viewport';\nimport {dimension} from '@scion/components/dimension';\nimport {SciTableSelectionService} from './table-selection.service';\nimport {SciTableRowComponent} from './table-row/table-row.component';\nimport {SciTableKeyboardNavigatorDirective} from './table-keyboard-navigator.directive';\nimport {SciTableColumnsComponent} from './table-columns/table-columns.component';\nimport {SciTextPipe} from '@scion/components/text';\nimport {SciThrobberComponent} from '@scion/components/throbber';\nimport {SciTableViewportComponent} from './table-viewport.component';\nimport {SciTableGridComponent} from './table-grid.component';\nimport {SciTableBodyComponent} from './table-body.component';\nimport {SciTableHeaderComponent} from './table-header/table-header.component';\nimport {SciAttributesDirective} from '@scion/components/common';\nimport {SciIconComponent} from '@scion/components/icon';\n\n/**\n * @experimental since 22.3.0; API and behavior may change in any version without notice.\n */\n@Component({\n selector: 'sci-table',\n templateUrl: './table.component.html',\n styleUrl: './table.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n host: {\n '[attr.name]': 'name()', // Public API: Enables selecting the table by name in CSS (also if the table has a dynamic name input binding)\n '[style.--ɵsci-table-scrolling]': 'table().scrolling() ? `true` : null',\n '[style.--ɵsci-table-resizing]': 'table().resizing() ? `true` : null',\n },\n imports: [\n SciTableViewportComponent,\n SciTableHeaderComponent,\n SciTableGridComponent,\n SciTableBodyComponent,\n SciTableRowComponent,\n SciTableColumnsComponent,\n SciTableKeyboardNavigatorDirective,\n SciAttributesDirective,\n SciScrollbarComponent,\n SciTextPipe,\n SciThrobberComponent,\n SciIconComponent,\n ],\n providers: [\n provideSciTable(),\n SciTableSelectionService,\n ],\n})\nexport class SciTableComponent<T = unknown> {\n\n /**\n * Specifies a unique table identifier, used as the key for storing user preferences.\n */\n public readonly name = input.required<`table:${string}`>();\n\n /**\n * Specifies the table definition and datasource.\n */\n public readonly table = input.required({transform: (table: SciTable<T>) => table as ɵSciTable<T>});\n\n /**\n * Emits when the user double-clicks a row or presses `Enter` on selected rows.\n */\n public readonly primaryAction = output<SciTableEvent<T>>();\n\n private readonly _viewport = viewChild.required(SciTableViewportComponent, {read: ElementRef});\n private readonly _viewportClient = viewChild.required(SciTableGridComponent, {read: ElementRef});\n private readonly _tableHeader = viewChild(SciTableHeaderComponent, {read: ElementRef});\n private readonly _tableBody = viewChild.required(SciTableBodyComponent, {read: ElementRef});\n private readonly _itemSizeSyntheticElement = viewChild.required<ElementRef<HTMLElement>>('item_size_synthetic_element');\n private readonly _cellPaddingSyntheticElement = viewChild.required<ElementRef<HTMLElement>>('cell_padding_synthetic_element');\n\n protected readonly rows = viewChildren(SciTableRowComponent);\n\n constructor() {\n this.connectToModel();\n this.scrollActiveRowIntoViewport();\n }\n\n protected onRowPrimaryAction(event: SciTableEvent<T>): void {\n this.primaryAction.emit(event);\n }\n\n protected onRetry(): void {\n this.table().reset();\n }\n\n private connectToModel(): void {\n const viewportDimension = dimension(this._viewport);\n const viewportClientDimension = dimension(this._viewportClient);\n const tableHeaderDimension = dimension(this._tableHeader);\n const tableBodyDimension = dimension(this._tableBody);\n const cellPadding = dimension(this._cellPaddingSyntheticElement);\n const itemSizeDimension = dimension(this._itemSizeSyntheticElement);\n\n effect(onCleanup => {\n const name = this.name();\n const table = this.table();\n const viewport = this._viewport().nativeElement as HTMLElement;\n\n untracked(() => {\n table.connect(name, {\n viewport: viewport,\n viewportHeight: computed(() => viewportDimension().clientHeight - (tableHeaderDimension()?.offsetHeight ?? 0)),\n viewportWidth: computed(() => viewportDimension().clientWidth),\n viewportClientHeight: computed(() => viewportClientDimension().offsetHeight),\n viewportClientWidth: computed(() => tableBodyDimension().offsetWidth), // Use `table-body` instead of `table-grid` because `table-grid` has `min-width: 100%`, thus never shrinking below viewport width.\n cellPadding: computed(() => cellPadding().clientWidth),\n headerHeight: computed(() => tableHeaderDimension()?.offsetHeight ?? 0),\n itemHeight: computed(() => itemSizeDimension().offsetHeight),\n scrollToTop: () => viewport.scrollTo({top: 0}),\n });\n onCleanup(() => table.disconnect());\n });\n });\n }\n\n private scrollActiveRowIntoViewport(): void {\n effect(() => {\n const activeRow = this.table().activeRow();\n if (!activeRow) {\n return;\n }\n\n untracked(() => {\n const viewport = this._viewport().nativeElement as HTMLElement;\n const viewportHeight = this.table().tableViewRef()?.viewportHeight() ?? 0;\n const itemHeight = this.table().tableViewRef()?.itemHeight() ?? 0;\n const activeRowTop = activeRow.index * itemHeight;\n const activeRowBottom = activeRowTop + itemHeight;\n const scrollTop = viewport.scrollTop;\n const scrollBottom = scrollTop + viewportHeight;\n\n if (activeRowTop < scrollTop) {\n viewport.scrollTop = activeRowTop;\n }\n else if (activeRowBottom > scrollBottom) {\n viewport.scrollTop = activeRowBottom - viewportHeight;\n }\n });\n });\n }\n}\n\nfunction provideSciTable(): Provider {\n return {\n provide: ɵSCI_TABLE,\n useFactory: () => inject(SciTableComponent).table,\n };\n}\n","@let table = this.table();\n\n<sci-table-viewport #viewport>\n <sci-table-grid>\n <!-- Table header -->\n @if (table.showHeader() || table.filterable()) {\n <sci-table-header/>\n }\n\n <!-- Table body -->\n <sci-table-body sciTableKeyboardNavigator>\n @if (!table.error()) {\n <!-- Track index to reuse the table row elements -->\n @for (row of table.rows(); track $index) {\n <sci-table-row [row]=\"row\" (primaryAction)=\"onRowPrimaryAction($event)\" [sciAttributes]=\"row.bindings?.attributes()\"/>\n } @empty {\n <span class=\"message e2e-no-data\">{{('%scion.components.no_items.message' | sciText)()}}</span>\n }\n } @else {\n <span class=\"message e2e-datasource\">\n {{('%scion.components.datasource_error.message' | sciText)()}}\n\n <button (click)=\"onRetry()\" class=\"action e2e-datasource-retry\">\n <!-- TODO [dwi] Replace with SCION icon -->\n <sci-icon>refresh</sci-icon>\n <span>{{('%scion.components.retry.label' | sciText)()}}</span>\n </button>\n </span>\n }\n\n <!-- Render active row outline separately to preserve row border-radius within block selection. -->\n @if (table.activeRow()) {\n <div class=\"active-row-outline e2e-active-row-outline\"></div>\n }\n </sci-table-body>\n\n <!-- Render column splitters. -->\n <sci-table-columns [rows]=\"rows()\"/>\n </sci-table-grid>\n</sci-table-viewport>\n\n<!-- Scrollbars -->\n<sci-scrollbar direction=\"hscroll\" [viewport]=\"viewport.host\"/>\n<sci-scrollbar direction=\"vscroll\" [viewport]=\"viewport.host\"/>\n\n@if (table.loading()) {\n <sci-throbber type=\"spinner\"/>\n}\n\n<!-- Synthetic element to compute the absolute pixel value of the `--sci-table-row-height`, relative to the table's font size if em-based. -->\n<div class=\"synthetic item-size\" #item_size_synthetic_element></div>\n\n<!-- Synthetic element to compute the absolute pixel value of the `--sci-table-cell-padding-inline`, relative to the table's font size if em-based. -->\n<div class=\"synthetic cell-padding\" #cell_padding_synthetic_element></div>\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nexport {table, type SciTableColumnFactoryFn} from './table.factory';\nexport {SciTableComponent} from './table.component';\nexport {type SciTableCellContext, type SciTable, type SciTableDescriptor, type SciTableRowActionFactoryFn, type SciTableColumnType, type SciTableEvent} from './table.model';\nexport {type SciTableRowBindingFactoryFn, type SciTableRowBindingFactory, provideTableRowBinding} from './table-row-binding';\nexport {type SciTableDataLoaderFn, type SciTablePageResponse, type SciTablePageRequest, type SciTableColumnFilter, type SciTableSortCriterion, ɵillegaldatasource} from './table-datasource';\nexport {type SciTableColumnFactory, type SciTableColumnDescriptor, type SciStringColumnDescriptor, type SciNumberColumnDescriptor, type SciBooleanColumnDescriptor, type SciComponentColumnDescriptor, type SciTemplateColumnDescriptor} from './table-column.factory';\nexport {type SciTableStorage, provideTableStorage} from './table-storage';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["map","ɵSciMenuService"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;AAQG;MAMU,sBAAsB,CAAA;AAIJ,IAAA,WAAA;AAFb,IAAA,OAAO,GAAG,IAAI,KAAK,EAAgE;AAEnG,IAAA,WAAA,CAA6B,WAAkC,EAAA;QAAlC,IAAA,CAAA,WAAW,GAAX,WAAW;IACxC;IAKO,gBAAgB,CAAC,qBAAsF,EAAE,KAA4B,EAAA;QAC1I,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,qBAAqB,EAAE,KAAK,CAAC;IAChE;IAKO,eAAe,CAAC,qBAAoF,EAAE,KAA2B,EAAA;QACtI,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,qBAAqB,EAAE,KAAK,CAAC;IAC/D;IAKO,eAAe,CAAC,qBAAoF,EAAE,KAA2B,EAAA;QACtI,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,qBAAqB,EAAE,KAAK,CAAC;IAC/D;AAEO,IAAA,kBAAkB,CAAC,MAAuC,EAAA;;QAE/D,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,MAAM,CAAC,UAAU,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE;AACtG,YAAA,MAAM,KAAK,CAAC,mFAAmF,CAAC;QAClG;QACA,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC5C;AAEO,IAAA,iBAAiB,CAAC,MAAsC,EAAA;QAC7D,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,MAAM,CAAC,UAAU,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE;AACtG,YAAA,MAAM,KAAK,CAAC,kFAAkF,CAAC;QACjG;QACA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC3C;AAEQ,IAAA,SAAS,CAAC,IAAwB,EAAE,qBAAwF,EAAE,KAA4B,EAAA;AAChK,QAAA,MAAM,MAAM,GAAG,CAAC,MAAK;YACnB,QAAQ,OAAO,qBAAqB;AAClC,gBAAA,KAAK,QAAQ;oBACX,OAAO,EAAC,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAM,EAAoC;AAC1F,gBAAA,KAAK,UAAU;AACb,oBAAA,OAAO,EAAC,KAAK,EAAE,qBAAqB,EAAoC;AAC1E,gBAAA;AACE,oBAAA,OAAO,qBAAqB;;QAElC,CAAC,GAAG;QAEJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,EAAE;AAC7H,YAAA,MAAM,KAAK,CAAC,+KAA+K,CAAC;QAC9L;;AAGA,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAA,OAAA,EAAU,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AAC3D,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;AACrD,YAAA,MAAM,KAAK,CAAC,CAAA,yDAAA,EAA4D,IAAI,CAAA,4BAAA,CAA8B,CAAC;QAC7G;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAC,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC;AAC1C,QAAA,OAAO,IAAI;IACb;AACD;;AClFD;;;;;;;;AAQG;AAMH;;AAEG;AACG,SAAU,cAAc,CAAC,KAAa,EAAE,GAAW,EAAA;IACvD,MAAM,KAAK,GAAa,EAAE;AAC1B,IAAA,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;AACjC,QAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACf;AACA,IAAA,OAAO,KAAK;AACd;;ACvBA;;;;;;;;AAQG;AAoBI,MAAM,iBAAiB,GAAG,IAAI,cAAc,CAAkB,mBAAmB,EAAE,EAAC,OAAO,EAAE,OAAO;QACzG,IAAI,EAAE,CAAC,IAAwC,KAAK,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC;AAC9E,QAAA,KAAK,EAAE,CAAC,IAAwC,EAAE,KAAa,KAAK,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;KACtG,CAAC,EAAC,CAAC;AAEJ;;;AAGG;AACG,SAAU,mBAAmB,CAAC,OAA8B,EAAA;AAChE,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA,EAAC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAC;AAChD,KAAA,CAAC;AACJ;;ACzCA;;;;;;;;AAQG;AASG,SAAU,eAAe,CAAI,IAAiB,EAAE,OAAwC,EAAA;IAC5F,MAAM,KAAK,GAAG,YAAY,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,OAAA,EAAA,8BAAA,EAAA,CAAA,EACxB,MAAM,EAAE,OAAO,EAAC,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAC,CAAC;QAClD,WAAW,EAAE,MAAM,IAAI,GAAG,EAAsC,GAChE;AAEF,IAAA,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAK;AACxC,QAAA,MAAM,eAAe,GAAG,OAAO,EAAE;QACjC,MAAM,KAAK,GAAmB,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK;YAChD,IAAI;AACJ,YAAA,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;gBAClE,MAAM;AACN,gBAAA,KAAK,EAAE,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,SAAS;AAClH,aAAA,CAAC,EAAE,IAAI,GAAG,EAAqC,CAAC;AAClD,SAAA,CAAC,CAAC;QAEH,OAAO;YACL,KAAK;AACL,YAAA,OAAO,EAAE,eAAe;SACzB;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,OAA4B,KAAyC;QAC3E,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,CAAA,EAAG,EAAE,CAAC,UAAU,CAAA,CAAA,EAAI,EAAE,CAAC,SAAS,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7F,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,CAAA,EAAG,EAAE,CAAC,UAAU,CAAA,CAAA,EAAI,EAAE,CAAC,IAAI,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC3F,QAAA,MAAM,IAAI,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,EAAI,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE;QAErE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACtB,YAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CACpC,GAAG,CAAC,CAAC,EAAC,KAAK,EAAE,OAAO,EAAC,KAAI;gBACvB,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC;gBAC3D,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC;AAE9D,gBAAA,OAAO;qBACJ,MAAM,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC;AACxF,qBAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;AACzC,YAAA,CAAC,CAAC,EACF,WAAW,CAAC,EAAC,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC,CAC7C;;;;AAKD,YAAA,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,EAAsC,CAAC,GAAG,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;QACxF;AAEA,QAAA,OAAO,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAC5B,GAAG,CAAC,KAAK,KAAK;YACZ,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;SAChE,CAAC,CAAC,CACJ;AACH,IAAA,CAAC;AACH;AAiBA,SAAS,WAAW,CAA4B,QAAgB,EAAE,OAAgC,EAAA;AAChG,IAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAG;AACvB,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,KAAK,CAAC,CAAC,IAAI,CAAC;AAE1D,QAAA,QAAQ;AACN,YAAA,GAAG,EAAE;YACL,MAAM;AACP,SAAA;AACH,IAAA,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAqC,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC;AAC5E;AAEA,SAAS,YAAY,CAAI,GAAiB,EAAE,MAAe,EAAA;AACzD,IAAA,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;AACnB,QAAA,OAAO,IAAI;IACb;IAEA,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;AACvC,QAAA,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAC,CAAC,CAAC;;QAGzG,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,IAAI;QACb;IACF;AAEA,IAAA,OAAO,KAAK;AACd;AAEA,SAAS,YAAY,CAAI,GAAiB,EAAE,cAA0D,EAAA;AACpG,IAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/B,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE;AACtC,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,KAAK;AAExD,QAAA,MAAM,MAAM,GAAG,CAAC,MAAK;AACnB,YAAA,QAAQ,SAAS,CAAC,MAAM,CAAC,IAAI;AAC3B,gBAAA,KAAK,QAAQ;oBACX,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAc,EAAE,EAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,KAAe,EAAC,CAAC;AACpG,gBAAA,KAAK,QAAQ;oBACX,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAc,EAAE,EAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,KAAe,EAAC,CAAC;AACpG,gBAAA,KAAK,SAAS;oBACZ,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAe,EAAE,EAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,KAAgB,EAAC,CAAC;AACtG,gBAAA,KAAK,WAAW;AAChB,gBAAA,KAAK,UAAU;oBACb,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAc,EAAE,EAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAC,CAAC;AAC9F,gBAAA;AACE,oBAAA,OAAO,IAAI;;QAEjB,CAAC,GAAG;;QAGJ,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,KAAK;QACd;IACF;AAEA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,IAAI,CAAI,CAAe,EAAE,CAAe,EAAE,YAAyD,EAAA;AAC1G,IAAA,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,QAAA,OAAO,CAAC;IACV;AAEA,IAAA,KAAK,MAAM,SAAS,IAAI,YAAY,EAAE;AACpC,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,KAAK;AACvD,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,KAAK;AAEvD,QAAA,MAAM,IAAI,GAAG,CAAC,MAAK;AACjB,YAAA,QAAQ,SAAS,CAAC,MAAM,CAAC,IAAI;AAC3B,gBAAA,KAAK,QAAQ;AACX,oBAAA,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,MAAgB,EAAC,EAAE,EAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,MAAgB,EAAC,CAAC;AAChH,gBAAA,KAAK,QAAQ;AACX,oBAAA,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,MAAgB,EAAC,EAAE,EAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,MAAgB,EAAC,CAAC;AAChH,gBAAA,KAAK,SAAS;AACZ,oBAAA,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,MAAiB,EAAC,EAAE,EAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,MAAiB,EAAC,CAAC;AAClH,gBAAA,KAAK,WAAW;AAChB,gBAAA,KAAK,UAAU;AACb,oBAAA,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAC,EAAE,EAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAC,CAAC;AAClG,gBAAA;AACE,oBAAA,OAAO,CAAC;;QAEd,CAAC,GAAG;AAEJ,QAAA,IAAI,IAAI,KAAK,CAAC,EAAE;AACd,YAAA,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YAClD,OAAO,IAAI,GAAG,GAAG;QACnB;IACF;AAEA,IAAA,OAAO,CAAC;AACV;;ACpLA;;;;;;;;AAQG;MAMU,aAAa,CAAA;AAEP,IAAA,MAAM,GAAG,MAAM,CAAC,IAAI,GAAG,EAA2C;+EAAC;IAEpE,OAAO,GAAoB,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gFAAC;AAC9F,IAAA,KAAK,GAA8B,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE;8EAAC;AAChH,IAAA,MAAM,GAAoC,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC;+EAAC;IAErF,WAAW,GAAwC,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM;SAC1F,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACjC,SAAA,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,EAA0B,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,aAAA,EAAA,8BAAA,EAAA,CAAA,EAAG,KAAK,EAAE,OAAO,CAAC,OAAO,GAAE;IAE9F,QAAQ,GAAyC,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM;SACxF,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACjC,SAAA,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,IAAI,GAAG,EAA2B,CAAC,gFAAG,KAAK,EAAE,OAAO,CAAC,OAAO,GAAE;AAElI,IAAA,GAAG,CAAC,GAAqB,EAAA;QAC9B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;IAC/B;AAEO,IAAA,GAAG,CAAC,GAAqB,EAAA;QAC9B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;IAC/B;IAEO,GAAG,CAAC,GAAqB,EAAE,KAA4B,EAAA;AAC5D,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAG;AACzB,YAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;YAChC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;YACnC,IAAI,QAAQ,EAAE;AACZ,gBAAA,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;gBACrB,QAAQ,CAAC,OAAO,EAAE;YACpB;AAEA,YAAA,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AACzB,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACI,IAAA,eAAe,CAAC,GAAqB,EAAA;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;QACzC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE;YACjC;QACF;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAG;AACzB,YAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;AAChC,YAAA,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;YACrB,UAAU,CAAC,OAAO,EAAE;AACpB,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC,CAAC;IACJ;IAEO,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAG;YACzB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE;gBAClC,KAAK,CAAC,OAAO,EAAE;YACjB;YACA,OAAO,IAAI,GAAG,EAAE;AAClB,QAAA,CAAC,CAAC;IACJ;AACD;;AC7ED;;;;;;;;AAQG;AAKG,SAAU,sBAAsB,CAAc,QAAwC,EAAA;IAC1F,OAAO;AACL,QAAA,OAAO,EAAE,qBAAqB;AAC9B,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,KAAK,EAAE,IAAI;KACZ;AACH;AAoCA,MAAM,0BAA0B,CAAA;AAEd,IAAA,iBAAiB,GAAG,IAAI,KAAK,EAAqB;AAClD,IAAA,aAAa,GAAG,IAAI,KAAK,EAAU;AACnC,IAAA,YAAY,GAAG,IAAI,KAAK,EAAmB;IAEpD,mBAAmB,CAAC,IAAY,EAAE,KAA0B,EAAA;AACjE,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5C;AACA,QAAA,OAAO,IAAI;IACb;AAEO,IAAA,eAAe,CAAC,IAAwB,EAAA;QAC7C,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B;AACA,QAAA,OAAO,IAAI;IACb;AAEO,IAAA,cAAc,CAAC,IAAiC,EAAA;QACrD,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B;AACA,QAAA,OAAO,IAAI;IACb;AACD;SAEe,sBAAsB,CAAI,UAA4C,EAAE,IAAO,EAAE,KAAa,EAAA;AAC5G,IAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAK;AAC5B,QAAA,MAAM,OAAO,GAAG,IAAI,0BAA0B,EAAE;AAChD,QAAA,UAAU,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAClD,QAAA,OAAO,OAAO;IAChB,CAAC;gFAAC;IAEF,OAAO;QACL,UAAU,EAAE,QAAQ,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAC,CAAC;AACrG,QAAA,QAAQ,EAAE,QAAQ,CAAC,MAAM,OAAO,EAAE,CAAC,aAAa,EAAE,EAAC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAC,CAAC;AAC3E,QAAA,IAAI,EAAE,QAAQ,CAAC,MAAM,OAAO,EAAE,CAAC,YAAY,EAAE,EAAC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAC,CAAC;KACvE;AACH;AAQO,MAAM,qBAAqB,GAAG,IAAI,cAAc,CAA8B,uBAAuB,CAAC;;ACvG7G;;;;;;;;AAQG;MAmBU,SAAS,CAAA;AAEH,IAAA,aAAa,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACzC,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;IAE7B,IAAI,GAAG,MAAM,CAAgC,SAAS;6EAAC;AACvD,IAAA,OAAO;AACP,IAAA,UAAU;AAET,IAAA,YAAY;AACZ,IAAA,aAAa;AACb,IAAA,QAAQ;IAET,YAAY,GAAG,MAAM,CAA8B,SAAS;qFAAC;AAC7D,IAAA,YAAY;AACZ,IAAA,UAAU;AACV,IAAA,QAAQ;AACR,IAAA,UAAU;AACV,IAAA,UAAU;AACV,IAAA,UAAU;AACV,IAAA,QAAQ;AACR,IAAA,SAAS;AACT,IAAA,UAAU;AAEV,IAAA,WAAW;AACX,IAAA,SAAS;AACT,IAAA,mBAAmB;AACnB,IAAA,gBAAgB;AAEhB,IAAA,SAAS;IACT,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;iFAAC;IAC3E,YAAY,GAAG,MAAM,CAA0B,EAAE;qFAAC;IAClD,cAAc,GAAG,MAAM,CAAyB,EAAE;uFAAC;AAElD,IAAA,MAAM,GAAG,IAAI,aAAa,EAAK;IAC/B,YAAY,GAAG,MAAM,CAAgB,IAAI;qFAAC;AAC1C,IAAA,cAAc,GAAG,MAAM,CAAC,IAAI,GAAG,EAAc;uFAAC;;IAG/C,UAAU,GAAG,YAAY,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,CAAA,EACvC,MAAM,EAAE,MAAM,IAAI,CAAC,QAAQ,EAAE;AAC7B,QAAA,WAAW,EAAE,MAAM,SAA+B,GAClD;IAEc,UAAU,GAAG,YAAY,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,CAAA,EACvC,MAAM,EAAE,MAAM,IAAI,CAAC,QAAQ,EAAE;AAC7B,QAAA,WAAW,EAAE,MAAM,SAA0B,GAC7C;AAEc,IAAA,YAAY,GAAG,YAAY,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,cAAA,EAAA,8BAAA,EAAA,CAAA,EACzC,MAAM,EAAE,MAAK;AACX,YAAA,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,YAAA,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;AACD,QAAA,WAAW,EAAE,MAAM,CAAC,CAAC,GACrB;AAEc,IAAA,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,EAAC,CAAC;iFAAC;AACzH,IAAA,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO;AAC7B,IAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AACzB,IAAA,SAAS;AACT,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;mFAAC;AACxE,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,CAAC;sFAAC;AACnE,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;oFAAC;AACxE,IAAA,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;AACrC,IAAA,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAEzC,IAAA,WAAA,CAAY,UAAiC,EAAA;;AAE3C,QAAA,UAAU,GAAG,EAAC,GAAG,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,UAAU,EAAC;QAE1F,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,IAAI,EAAE;QAC7C,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,IAAI,EAAE;QACzC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,IAAI,IAAI;qFAAC;QACnD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,IAAI,KAAK;uFAAC;QACxD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,IAAI,IAAI;uFAAC;QACvD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,IAAI,KAAK;uFAAC;QACxD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,IAAI,IAAI;sFAAC;QACrD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,IAAI,OAAO;uFAAC;AAC1D,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAC9C,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE;AAC5C,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,0BAA0B,EAAE;AAC5D,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,EAAE;AACtD,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACxC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;AAE9C,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU;QACvC,IAAI,CAAC,YAAY,GAAG;AAClB,YAAA,GAAG,UAAU,CAAC,WAAW,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,EAAE;YACzD,GAAG,MAAM,CAAmC,qBAAqB,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,IAAI,EAAE;SAC3F;AACD,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,OAAO;AAClC,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,eAAe,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,WAAY;QAEvI,IAAI,CAAC,sBAAsB,EAAE;QAC7B,IAAI,CAAC,iBAAiB,EAAE;IAC1B;AAEA;;AAEG;IACI,OAAO,CAAC,IAAuB,EAAE,OAAwB,EAAA;AAC9D,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;IAChC;IAEO,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;IAClC;AAEQ,IAAA,cAAc,CAAC,UAAiC,EAAA;;AAEtD,QAAA,IAAI,QAAyC;QAE7C,OAAO,QAAQ,CAAC,MAAK;YACnB,QAAQ,EAAE,OAAO,EAAE;YACnB,QAAQ,GAAG,yBAAyB,CAAC,EAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAC,CAAC;AAE9D,YAAA,OAAO,qBAAqB,CAAC,QAAQ,EAAE,MAAK;AAC1C,gBAAA,MAAM,kBAAkB,GAAG,IAAI,sBAAsB,CAAI,UAAU,CAAC;AACpE,gBAAA,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC;gBACtC,OAAO,SAAS,CAAC,MAAM,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AACxG,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACK,WAAW,GAAA;QACjB,OAAO,QAAQ,CAAC,MAAK;AACnB,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;YACtC,IAAI,CAAC,WAAW,EAAE;AAChB,gBAAA,OAAO,EAAE;YACX;AAEA,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;YACtC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,KAAK;;AAGpD,YAAA,OAAO,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AACnI,QAAA,CAAC,CAAC;QAEF,SAAS,kBAAkB,CAAC,KAAa,EAAA;YACvC,OAAO;gBACL,KAAK;AACL,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE;AAClC,gBAAA,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE;AACpC,gBAAA,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE;aACpC;QACH;IACF;AAEA;;AAEG;IACK,kBAAkB,GAAA;QACxB,OAAO,QAAQ,CAAC,MAAK;AACnB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;YACxC,IAAI,CAAC,YAAY,EAAE;AACjB,gBAAA,OAAO,SAAS;YAClB;AAEA,YAAA,MAAM,cAAc,GAAG,YAAY,CAAC,cAAc,EAAE;AACpD,YAAA,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,EAAE;AAC5C,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;YAElC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC;YAChD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;YAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,gBAAgB,CAAC;YAE9C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,gBAAgB,CAAC;YAEzD,OAAO;gBACL,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,EAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,gBAAgB,CAAC,EAAC,CAAC;AAChG,gBAAA,GAAG,EAAE,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,EAAC,GAAG,EAAE,UAAU,EAAC,CAAC;aACrD;QACH,CAAC,EAAE,EAAC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAC,CAAC;IAC9B;IAEQ,0BAA0B,GAAA;QAChC,OAAO,QAAQ,CAAC,MAAK;YACnB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC;YACzD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAE/E,OAAO;AACL,gBAAA,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,IAAI,CAAC,IAAI,UAAU;AAClD,gBAAA,MAAM,EAAE,CAAC,UAAU,GAAG,QAAQ,IAAI,UAAU;aAC7C;QACH,CAAC,EAAE,EAAC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAC,CAAC;IAC9B;IAEQ,uBAAuB,GAAA;QAC7B,OAAO,QAAQ,CAAC,MAAK;YACnB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC;YACzD,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC;YACjE,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;AAC/C,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACK,gBAAgB,GAAA;AACtB,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AAE3B,QAAA,OAAO,UAAU,CAAC;AAChB,YAAA,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ;YAC3C,MAAM,EAAE,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAC,KAAK,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC;AAC1E,iBAAA,IAAI,CACHA,KAAG,CAAC,MAAM,QAAQ,CAAC,SAAS,CAAC,EAC7B,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAC7B,WAAW,CAAC,EAAE,IAAI,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAC9C;SACJ,CAAC,CAAC,KAAK;IACV;AAEA;;AAEG;IACK,gBAAgB,GAAA;AACtB,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AAE3B,QAAA,OAAO,UAAU,CAAC;AAChB,YAAA,YAAY,EAAE,KAAK;YACnB,MAAM,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ;YAC3C,MAAM,EAAE,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAC,KAAK,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC;iBAC1E,IAAI,CACH,SAAS,CAAC,MAAM,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAACA,KAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EACpE,SAAS,CAAC,KAAK,CAAC,EAChB,WAAW,CAAC,EAAE,IAAI,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAC9C;SACJ,CAAC,CAAC,KAAK;IACV;AAEA;;AAEG;AACI,IAAA,MAAM,SAAS,CAAC,KAAa,EAAE,GAAW,EAAA;AAC/C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,EAAE;QAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,SAAS;;AAGpD,QAAA,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC;QACrD,IAAI,CAAC,KAAK,EAAE;YACV;QACF;;AAGA,QAAA,MAAM,OAAO,CAAC,GAAG,CAAC;aACf,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAC,CAAC;AACpG,aAAA,GAAG,CAAC,IAAI,IAAI,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpJ;AAEA;;AAEG;IACK,QAAQ,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAuI,EAAA;AAC/M,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,QAAQ;AACjC,QAAA,MAAM,OAAO,GAAG,SAAS,GAAG,QAAQ;AACpC,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,OAAO,EAAW;QAEnD,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC7B,OAAO;AACL,gBAAA,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,SAAS;gBAClD,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC;aACpD;QACH;AAEA,QAAA,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,EAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAC,CAAC;AAC9E,QAAA,MAAM,UAAU,GAA0B;AACxC,YAAA,IAAI,EAAE,qBAAqB,CAAC,kBAAkB,EAAE,MAAK;;AAEnD,gBAAA,MAAM,cAAc,GAAG,OAAO,CAC5B,MAAM,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;AAC1C,oBAAA,KAAK,EAAE,SAAS;AAChB,oBAAA,GAAG,EAAE,OAAO;oBACZ,QAAQ;oBACR,IAAI;oBACJ,YAAY;oBACZ,WAAW;oBACX,aAAa;AACd,iBAAA,CAAC,CAAC,EACH,KAAK,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC;;AAGnC,gBAAA,MAAM,aAAa,GAAG,UAAU,CAAC,EAAC,MAAM,EAAE,MAAM,cAAc,EAAC,CAAC;;gBAGhE,MAAM,IAAI,GAAG,QAAQ,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,MAAA,EAAA,8BAAA,EAAA,CAAA,EACnB,MAAM,EAAE,CAAC,EAAC,KAAK,EAAC,KAAI;wBAClB,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,EAAE,KAAK;AACzC,wBAAA,OAAO,KAAK,IAAI,EAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAC;oBAClD,CAAC;oBACD,MAAM,EAAE,OAAO,EAAC,MAAM,EAAC,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC;oBACvF,YAAY,EAAE,EAAE,EAAA,CAChB;;gBAGF,MAAM,CAAC,MAAK;AACV,oBAAA,QAAQ,IAAI,CAAC,MAAM,EAAE;wBACnB,KAAK,UAAU,EAAE;;AAEf,4BAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC;4BACtD;wBACF;wBACA,KAAK,OAAO,EAAE;4BACZ,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAG,CAAC,KAAK,CAAC;;AAElC,4BAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;4BACtB;wBACF;;AAEJ,gBAAA,CAAC,CAAC;AAEF,gBAAA,OAAO,IAAI;AACb,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC,OAAO,EAAE;AAC3C,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,GAAG,EAAE,OAAO;SACb;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC;QAErC,OAAO;AACL,YAAA,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS;YAClC,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC;SACpD;IACH;AAEA;;;;AAIG;IACI,IAAI,CAAC,UAA8B,EAAE,KAAc,EAAA;;;AAGxD,QAAA,IAAI,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE;AAElC,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,IAAG;AACtC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC;YACxE,IAAI,CAAC,MAAM,EAAE;gBACX,MAAM,KAAK,CAAC,CAAA,0BAAA,EAA6B,UAAU,CAAA,sBAAA,EAAyB,IAAI,CAAC,IAAI,EAAE,CAAA,EAAA,CAAI,CAAC;YAC9F;AAEA,YAAA,MAAM,oBAAoB,GAAG,YAAY,CAAC,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,UAAU,KAAK,MAAM,CAAC,IAAI,CAAC;AACzG,YAAA,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,aAAa,IAAI,aAAa,KAAK,oBAAoB,CAAC;YAEtG,MAAM,SAAS,GAAG,oBAAoB,IAAI,oBAAoB,CAAC,SAAS,KAAK,KAAK,GAAG,MAAM,GAAG,SAAS,IAAI,KAAK;YAChH,IAAI,CAAC,SAAS,EAAE;gBACd,OAAO,KAAK,GAAG,iBAAiB,GAAG,EAAE;YACvC;YAEA,MAAM,gBAAgB,GAAG,EAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,EAAiC;AAC7F,YAAA,OAAO,KAAK,GAAG,CAAC,GAAG,iBAAiB,EAAE,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAC9E,QAAA,CAAC,CAAC;IACJ;IAOO,MAAM,CAAC,IAAsC,EAAE,OAA0C,EAAA;;;AAG9F,QAAA,IAAI,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE;QAElC,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAc,CAAC;YACrC;QACF;QAEA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,UAAU,CAAC;QAChF,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,KAAK,CAAC,CAAA,0BAAA,EAA6B,OAAO,CAAC,UAAU,CAAA,sBAAA,EAAyB,IAAI,CAAC,IAAI,EAAE,CAAA,EAAA,CAAI,CAAC;QACtG;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,eAAe,IAAG;AAC3C,YAAA,MAAM,mBAAmB,GAAG,eAAe,CAAC,MAAM,CAAC,eAAe,IAAI,eAAe,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC;AACxH,YAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,gBAAA,OAAO,mBAAmB;YAC5B;AAEA,YAAA,OAAO,mBAAmB,CAAC,MAAM,CAAC,EAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAC,CAAC;AACpE,QAAA,CAAC,CAAC;IACJ;AAEO,IAAA,mBAAmB,CAAC,QAAmD,EAAA;AAC5E,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC;IACtC;IAEO,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACnB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;IAChC;IAEO,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;QACnB,IAAI,CAAC,UAAU,EAAE;IACnB;AAEA;;AAEG;IACK,iBAAiB,GAAA;QACvB,MAAM,CAAC,SAAS,IAAG;AACjB,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,EAAE;YAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,SAAS;YAEpD,IAAI,CAAC,WAAW,EAAE;gBAChB;YACF;YAEA,SAAS,CAAC,MAAK;;;gBAGb,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAEpF,gBAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;AACnB,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;wBAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,IAAI;wBACJ,YAAY;wBACZ,WAAW;wBACX,aAAa;AACd,qBAAA,CAAC;oBACF,SAAS,CAAC,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;AACnC,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACK,sBAAsB,GAAA;AAC5B,QAAA,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAC9B,IAAI,CAAC,CAAC,CAAC;AACP,QAAA,kBAAkB,EAAE,CACrB,CAAC,SAAS,CAAC,MAAK;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACrB,QAAA,CAAC,CAAC;IACJ;;IAGQ,UAAU,CAAC,IAAwB,EAAE,MAAuC,EAAA;;QAElF,MAAM,QAAQ,GAAG,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,KAAK,KAAK;;QAG5G,MAAM,UAAU,GAAG,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,KAAK,KAAK;QAElH,OAAO;AACL,YAAA,GAAG,MAAM;YACT,IAAI;YACJ,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,YAAA,MAAM,EAAE,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,GAAG,aAAa;AACzF,YAAA,IAAI,EAAE,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,GAAG,WAAW;AACpF,YAAA,QAAQ,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,QAAQ,CAAC;AACrD,YAAA,UAAU,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,IAAI,UAAU,CAAC;AAC3D,YAAA,SAAS,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,KAAK,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;AACzE,YAAA,OAAO,EAAE,SAAS,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,IAAI,IAAI;YAC9D,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;AACzC,YAAA,KAAK,EAAE,QAAQ,CAAC,MAAK;gBACnB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC;AAC7F,gBAAA,OAAO,YAAY,EAAE,KAAK,GAAG,GAAG,YAAY,CAAC,KAAK,CAAA,EAAA,CAAI,GAAG,MAAM,CAAC,KAAK,IAAI,KAAK;AAChF,YAAA,CAAC,CAAC;AACF,YAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,GAAG;AAChC,YAAA,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC;YACvB,QAAQ,EAAE,EAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAC;SACF;IAC5B;AAEQ,IAAA,aAAa,CAAC,KAAU,EAAE,OAAgC,EAAE,SAAiB,EAAA;QACnF,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;YAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAC7B,YAAA,MAAM,KAAK,GAAG,SAAS,GAAG,CAAC;YAE3B,OAAO;gBACL,EAAE;gBACF,KAAK;gBACL,IAAI;AACJ,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;AAClD,gBAAA,QAAQ,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACpD,gBAAA,OAAO,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,KAAK,KAAK,CAAC;AAC3D,gBAAA,QAAQ,EAAE,sBAAsB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,CAAC,CAAC;gBACxE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK;oBAC5B,KAAK,EAAE,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS;AAC/G,oBAAA,SAAS,EAAE,MAAM,CAAC,IAAI,KAAK,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS;AAC3E,oBAAA,QAAQ,EAAE,MAAM,CAAC,IAAI,KAAK,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS;oBACxE,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,MAAM;AACc,iBAAA,CAAA,CAAC;aACxB;AACH,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACK,mBAAmB,GAAA;;AAEzB,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,cAAA,EAAA,8BAAA,EAAA,CAAA,EAC3B,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE;YACzB,MAAM,EAAE,OAAO,EAAC,MAAM,EAAE,SAAS,EAAC,KAAI;AACpC,gBAAA,IAAI;AACF,oBAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAE,CAAC;AACjF,oBAAA,OAAO,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAyB,GAAG,EAAC,OAAO,EAAE,EAAE,EAAC;gBACpF;gBACA,OAAO,KAAK,EAAE;oBACZ,OAAO,CAAC,IAAI,CAAC,CAAA,6CAAA,EAAgD,SAAS,CAAA,EAAA,CAAI,EAAE,KAAK,CAAC;AAClF,oBAAA,OAAO,EAAC,OAAO,EAAE,EAAE,EAAC;gBACtB;YACF,CAAC;AACD,YAAA,YAAY,EAAE,EAAC,OAAO,EAAE,EAAE,EAAC,GAC3B;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,YAAY,CAAC,MAAM,EAAE,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;AACpD,gBAAA,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA,iBAAA,EAAoB,IAAI,CAAC,IAAI,EAAG,CAAA,CAAE,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC1H;AACF,QAAA,CAAC,CAAC;QAEF,OAAO,YAAY,CAAC,KAAK;IAC3B;AAEA;;AAEG;AACI,IAAA,OAAO,CAAC,IAAO,EAAA;QACpB,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI;IACtC;IAEQ,gBAAgB,GAAA;QACtB,OAAO,QAAQ,CAAC,MAAK;AACnB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,YAAA,IAAI,UAAU,KAAK,SAAS,EAAE;AAC5B,gBAAA,OAAO,SAAS;YAClB;YAEA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;AACnC,YAAA,IAAI,EAAE,KAAK,SAAS,EAAE;AACpB,gBAAA,OAAO,SAAS;YAClB;YAEA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;AACvC,QAAA,CAAC,CAAC;IACJ;AACD;AAED,SAAS,aAAa,CAAI,IAA+B,EAAE,EAAC,KAAK,EAAoD,EAAA;AACnH,IAAA,IAAI,OAAO,KAAK,KAAK,OAAO,IAAI,EAAE;AAChC,QAAA,OAAO,KAAK;IACd;IAEA,QAAQ,OAAO,KAAK;AAClB,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAE,IAAe,CAAC,WAAW,EAAE,CAAC;AACrE,QAAA;YACE,OAAO,IAAI,KAAK,KAAK;;AAE3B;AAEA,SAAS,WAAW,CAAI,CAAoD,EAAE,CAAoD,EAAA;IAChI,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,KAAK,EAAE;AACrC,QAAA,OAAO,CAAC;IACV;AAEA,IAAA,QAAQ,OAAO,CAAC,CAAC,KAAK;AACpB,QAAA,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAe,CAAC;AACjD,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,CAAC,CAAC,KAAK,GAAI,CAAC,CAAC,KAAgB;AACtC,QAAA,KAAK,SAAS;AACZ,YAAA,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACrD,QAAA;AACE,YAAA,OAAO,CAAC;;AAEd;AASA;;AAEG;AACH,SAAS,YAAY,CAAC,KAAa,EAAE,GAAW,EAAE,QAAgB,EAAA;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;AAC9C,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC;IAChD,OAAO,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI;AACpC;AAMO,MAAM,UAAU,GAAG,IAAI,cAAc,CAAoB,WAAW,CAAC;;ACjoB5E;;;;;;;;AAQG;AA2CH;;;;;AAKG;SACa,kBAAkB,GAAA;IAChC,OAAO,QAAQ,CAAC,MAAK;AACnB,QAAA,MAAM,KAAK,CAAC,uEAAuE,CAAC;AACtF,IAAA,CAAC,CAAC;AACJ;;AC7DA;;;;;;;;AAQG;SAgBa,KAAK,CAAI,gBAAqD,EAAE,eAA4C,EAAE,OAA+B,EAAA;AAC3J,IAAA,0BAA0B,CAAC,KAAK,EAAE,+FAA+F,CAAC;AAElI,IAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAC,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,kBAAkB,EAAE,EAAE,OAAO,EAAE,eAAgB,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAC,IAAoC,gBAAgB;AAC9N,IAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;QACxB,wBAAwB,CAAC,KAAK,CAAC;IACjC;IAEA,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;AACxD,IAAA,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC;AACjF,IAAA,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC5D,IAAA,OAAO,QAAQ;AACjB;;ACpCA;;;;;;;;AAQG;MASU,wBAAwB,CAAA;AAElB,IAAA,MAAM,GAAG,MAAM,CAAuB,UAAU,CAAC;AAE3D,IAAA,MAAM,UAAU,CAAC,KAAa,EAAE,KAA8D,EAAA;AACnG,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE;QACvC,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QAClC,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI;QACzC,MAAM,oBAAoB,GAAG,KAAK,CAAC,SAAS,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC;AAE3D,QAAA,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;QAE1B,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE;YAC7C;QACF;AAEA,QAAA,IAAI,KAAK,CAAC,UAAU,EAAE,KAAK,QAAQ,EAAE;AACnC,YAAA,KAAK,CAAC,mBAAmB,CAAC,MAAM,IAAI,GAAG,EAAc,CAAC,GAAG,CAAC,GAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACzE;QACF;QAEA,IAAI,KAAK,CAAC,QAAQ,IAAI,oBAAoB,IAAI,CAAC,EAAE;YAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC;YACnD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC;AACjD,YAAA,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,EAAC,GAAG,EAAE,IAAI,EAAC,CAAC;QACjD;aACK,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;AACvC,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;QAC/B;aACK;;AAEH,YAAA,KAAK,CAAC,mBAAmB,CAAC,MAAM,IAAI,GAAG,EAAc,CAAC,GAAG,CAAC,GAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3E;IACF;IAEO,MAAM,SAAS,CAAC,KAAY,EAAA;QACjC,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC;AAE1D,QAAA,IAAI,WAAW,IAAI,CAAC,EAAE;YACpB;QACF;;AAGA,QAAA,MAAM,UAAU,GAAG,WAAW,GAAG,CAAC;QAClC,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC;AACnD,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,IAAI;AAC3D,QAAA,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;AAE/B,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE;YACvB;QACF;QAEA,MAAM,aAAa,GAAG,KAAsB;AAC5C,QAAA,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ;QACpC,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO;AAEjE,QAAA,IAAI,KAAK,IAAI,UAAU,EAAE;YACvB,MAAM,IAAI,CAAC,WAAW,CAAC,EAAC,UAAU,EAAE,WAAW,EAAC,CAAC;QACnD;aACK,IAAI,KAAK,EAAE;YACd,MAAM,IAAI,CAAC,OAAO,CAAC,EAAC,UAAU,EAAE,WAAW,EAAC,CAAC;QAC/C;aACK,IAAI,UAAU,EAAE;;QAErB;aACK;YACH,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC;QAChD;IACF;IAEO,MAAM,WAAW,CAAC,KAAY,EAAA;QACnC,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC;AAC1D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,EAAE,KAAK,CAAC,UAAU,EAAG,GAAG,CAAC,CAAC;AAEnE,QAAA,IAAI,QAAQ,KAAK,WAAW,EAAE;YAC5B;QACF;;QAGA,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC/C,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI;AACvD,QAAA,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;AAE7B,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE;YACvB;QACF;QAEA,MAAM,aAAa,GAAG,KAAsB;AAC5C,QAAA,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ;QACpC,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO;AAEjE,QAAA,IAAI,KAAK,IAAI,UAAU,EAAE;YACvB,MAAM,IAAI,CAAC,aAAa,CAAC,EAAC,QAAQ,EAAE,WAAW,EAAC,CAAC;QACnD;aACK,IAAI,KAAK,EAAE;YACd,MAAM,IAAI,CAAC,SAAS,CAAC,EAAC,QAAQ,EAAE,WAAW,EAAC,CAAC;QAC/C;aACK,IAAI,UAAU,EAAE;;QAErB;aACK;YACH,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAC5C;IACF;IAEO,MAAM,QAAQ,CAAC,KAAY,EAAA;QAChC,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC;AAE1D,QAAA,IAAI,WAAW,KAAK,CAAC,EAAE;YACrB;QACF;;AAGA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1E,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC;AACnD,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,IAAI;AAC3D,QAAA,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;AAE/B,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE;YACvB;QACF;QAEA,MAAM,aAAa,GAAG,KAAsB;AAC5C,QAAA,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ;QACpC,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO;AAEjE,QAAA,IAAI,KAAK,IAAI,UAAU,EAAE;YACvB,MAAM,IAAI,CAAC,WAAW,CAAC,EAAC,UAAU,EAAE,WAAW,EAAC,CAAC;QACnD;aACK,IAAI,KAAK,EAAE;YACd,MAAM,IAAI,CAAC,OAAO,CAAC,EAAC,UAAU,EAAE,WAAW,EAAC,CAAC;QAC/C;aACK,IAAI,UAAU,EAAE;;QAErB;aACK;YACH,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC;QAChD;IACF;IAEO,MAAM,UAAU,CAAC,KAAY,EAAA;QAClC,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,UAAU,EAAG,GAAG,CAAC,CAAC;AAE9F,QAAA,IAAI,QAAQ,KAAK,WAAW,EAAE;YAC5B;QACF;;QAGA,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC/C,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI;AACvD,QAAA,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;AAE7B,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE;YACvB;QACF;QAEA,MAAM,aAAa,GAAG,KAAsB;AAC5C,QAAA,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ;QACpC,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO;AAEjE,QAAA,IAAI,KAAK,IAAI,UAAU,EAAE;YACvB,MAAM,IAAI,CAAC,aAAa,CAAC,EAAC,QAAQ,EAAE,WAAW,EAAC,CAAC;QACnD;aACK,IAAI,KAAK,EAAE;YACd,MAAM,IAAI,CAAC,SAAS,CAAC,EAAC,QAAQ,EAAE,WAAW,EAAC,CAAC;QAC/C;aACK,IAAI,UAAU,EAAE;;QAErB;aACK;YACH,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAC5C;IACF;IAEO,MAAM,MAAM,CAAC,KAAY,EAAA;QAC9B,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC;AAE1D,QAAA,IAAI,WAAW,IAAI,CAAC,EAAE;YACpB;QACF;;QAGA,MAAM,UAAU,GAAG,CAAC;QACpB,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC;AACnD,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,IAAI;AAC3D,QAAA,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;AAE/B,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE;YACvB;QACF;QAEA,MAAM,aAAa,GAAG,KAAsB;AAC5C,QAAA,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ;QACpC,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO;AAEjE,QAAA,IAAI,KAAK,IAAI,UAAU,EAAE;YACvB,MAAM,IAAI,CAAC,WAAW,CAAC,EAAC,UAAU,EAAE,WAAW,EAAC,CAAC;QACnD;aACK,IAAI,KAAK,EAAE;YACd,MAAM,IAAI,CAAC,OAAO,CAAC,EAAC,UAAU,EAAE,WAAW,EAAC,CAAC;QAC/C;aACK,IAAI,UAAU,EAAE;;QAErB;aACK;YACH,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC;QAChD;IACF;IAEO,MAAM,KAAK,CAAC,KAAY,EAAA;QAC7B,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC;QAE1D,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAG,GAAG,CAAC;AAExC,QAAA,IAAI,QAAQ,KAAK,WAAW,EAAE;YAC5B;QACF;;;;QAMA,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC/C,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI;AACvD,QAAA,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;AAE7B,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE;YACvB;QACF;QAEA,MAAM,aAAa,GAAG,KAAsB;AAC5C,QAAA,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ;QACpC,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO;AAEjE,QAAA,IAAI,KAAK,IAAI,UAAU,EAAE;YACvB,MAAM,IAAI,CAAC,aAAa,CAAC,EAAC,QAAQ,EAAE,WAAW,EAAC,CAAC;QACnD;aACK,IAAI,KAAK,EAAE;YACd,MAAM,IAAI,CAAC,SAAS,CAAC,EAAC,QAAQ,EAAE,WAAW,EAAC,CAAC;QAC/C;aACK,IAAI,UAAU,EAAE;;QAErB;aACK;YACH,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAC5C;IACF;AAEO,IAAA,OAAO,CAAC,KAAY,EAAA;QACzB,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE;YACvB;QACF;AAEA,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,EAAE;QACrC,IAAI,CAAC,UAAU,EAAE;YACf;QACF;QAEA,MAAM,aAAa,GAAG,KAAsB;QAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO;QACjE,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QAE9C,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC;QACrC;aACK;AACH,YAAA,KAAK,CAAC,mBAAmB,CAAC,MAAM,IAAI,GAAG,EAAc,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACtF;IACF;IAEO,MAAM,UAAU,CAAC,KAAY,EAAA;QAClC,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;QAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC;QAE1C,IAAI,KAAK,CAAC,UAAU,EAAE,KAAK,OAAO,IAAI,UAAU,IAAI,CAAC,EAAE;YACrD,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC;QAC3C;IACF;;;;;IAMQ,MAAM,SAAS,CAAC,OAAgD,EAAA;AACtE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE;AACvC,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW;QAEvC,MAAM,UAAU,GAAG,WAAW;AAC9B,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ;AAEjC,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC,IAAK;QAC9D,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAE;AAE/C,QAAA,IAAI,KAAK,CAAC,UAAU,EAAE,KAAK,QAAQ,EAAE;YACnC,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC;YAC1C;QACF;QAEA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YAClC,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC;YAC5C;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;YAC7C,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,QAAQ,CAAC;YACrD;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAC,GAAG,EAAE,IAAI,EAAC,CAAC;IAC3D;IAEQ,MAAM,aAAa,CAAC,OAAgD,EAAA;AAC1E,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAE3B,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW;AACtC,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ;AAEjC,QAAA,IAAI,KAAK,CAAC,UAAU,EAAE,KAAK,QAAQ,EAAE;YACnC,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAC5C;aACK;AACH,YAAA,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAC,GAAG,EAAE,IAAI,EAAC,CAAC;QAC3D;IACF;IAEQ,MAAM,OAAO,CAAC,OAAkD,EAAA;AACtE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE;AACvC,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW;AAEvC,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU;QACrC,MAAM,QAAQ,GAAG,WAAW;AAE5B,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC,IAAK;QAC9D,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAE;AAE/C,QAAA,IAAI,KAAK,CAAC,UAAU,EAAE,KAAK,QAAQ,EAAE;YACnC,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC;YAC9C;QACF;QAEA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YAClC,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC;YAC5C;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,EAAE;YAC3C,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,QAAQ,CAAC;YACnD;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAC,GAAG,EAAE,IAAI,EAAC,CAAC;IAC3D;IAEQ,MAAM,WAAW,CAAC,OAAkD,EAAA;AAC1E,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAE3B,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU;AACrC,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW;AAEpC,QAAA,IAAI,KAAK,CAAC,UAAU,EAAE,KAAK,QAAQ,EAAE;YACnC,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC;QAChD;aACK;AACH,YAAA,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAC,GAAG,EAAE,IAAI,EAAC,CAAC;QAC3D;IACF;AAEQ,IAAA,uBAAuB,CAAC,WAAmB,EAAA;AACjD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE;AAEvC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,IAAI;AACnE,QAAA,MAAM,cAAc,GAAG,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS;AAE7E,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,IAAI;AAC/D,QAAA,MAAM,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,SAAS;AAEjE,QAAA,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IACxE;AAEQ,IAAA,qBAAqB,CAAC,WAAmB,EAAA;AAC/C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE;AAEvC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,IAAI;AACnE,QAAA,MAAM,cAAc,GAAG,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS;AAE7E,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,IAAI;AAC/D,QAAA,MAAM,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,SAAS;AAEjE,QAAA,OAAO,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IACxE;AAEQ,IAAA,MAAM,gBAAgB,CAAC,UAAkB,EAAE,QAAgB,EAAA;AACjE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;QAC3B,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,EAAE,QAAQ,GAAG,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzD,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,EAAE,KAAK,SAAS,CAAC,EAAE;YAC3C,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,GAAG,CAAC,CAAC;AACzC,gBAAA,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7B,aAAA,CAAC;QACJ;IACF;AAEQ,IAAA,MAAM,WAAW,CAAC,UAAkB,EAAE,QAAgB,EAAE,OAAwB,EAAA;AACtF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;QAC3B,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC;AACpD,QAAA,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,KAAK;QACjC,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEvD,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,EAAE,KAAK,SAAS,CAAC,EAAE;;YAE3C,MAAM,OAAO,CAAC,IAAI,CAAC;AACjB,gBAAA,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC;AACrC,gBAAA,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7B,aAAA,CAAC;AACF,YAAA,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrD;QAEA,KAAK,CAAC,mBAAmB,CAAC,QAAQ,IAAI,IAAI,GAAG,CAAa;YACxD,IAAI,GAAG,GAAG,QAAQ,GAAG,EAAE,CAAC;AACxB,YAAA,GAAG;AACA,iBAAA,MAAM,CAAC,CAAC,GAAG,KAAsC,GAAG,EAAE,EAAE,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;AAChG,iBAAA,GAAG,CAAC,CAAC,GAAG,KAAmB,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AAClD,SAAA,CAAC,CAAC;IACL;AAEQ,IAAA,MAAM,oBAAoB,CAAC,UAAkB,EAAE,QAAgB,EAAA;AACrE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;QAE3B,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC;QACjD,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC;AAEpD,QAAA,KAAK,CAAC,mBAAmB,CAAC,SAAS,IAAG;AACpC,YAAA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC;AAEvC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,gBAAA,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAE;gBAChC,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAE;AAEjC,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,IAAI;gBACxD,IAAI,CAAC,IAAI,EAAE;oBACT;gBACF;gBAEA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAClC,gBAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI;AACzD,gBAAA,MAAM,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,SAAS;AAEjE,gBAAA,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AAC7B,oBAAA,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC7B;qBACK;AACH,oBAAA,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;gBAChC;YACF;AACA,YAAA,OAAO,YAAY;AACrB,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,MAAM,kBAAkB,CAAC,UAAkB,EAAE,QAAgB,EAAA;AACnE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;QAE3B,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC;QACjD,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC;AAEpD,QAAA,KAAK,CAAC,mBAAmB,CAAC,SAAS,IAAG;AACpC,YAAA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC;AAEvC,YAAA,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC5C,gBAAA,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAE;gBAChC,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAE;AAErC,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,IAAI;gBACxD,IAAI,CAAC,IAAI,EAAE;oBACT;gBACF;gBAEA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAClC,gBAAA,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI;AACjE,gBAAA,MAAM,cAAc,GAAG,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS;AAE7E,gBAAA,IAAI,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;AACjC,oBAAA,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC7B;qBACK;AACH,oBAAA,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;gBAChC;YACF;AACA,YAAA,OAAO,YAAY;AACrB,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,kBAAkB,CAAC,IAAO,EAAA;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;QAC3B,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAE9B,QAAA,KAAK,CAAC,mBAAmB,CAAC,SAAS,IAAG;AACpC,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC;AAC/B,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAChB,gBAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACjB;iBACK;AACH,gBAAA,IAAI,KAAK,CAAC,UAAU,EAAE,KAAK,QAAQ,EAAE;oBACnC,IAAI,CAAC,KAAK,EAAE;gBACd;AACA,gBAAA,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC;YACpB;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;uGA1hBW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAxB,wBAAwB,EAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;;AChBD;;;;;;;;AAQG;MAyBU,qBAAqB,CAAA;IAEhB,IAAI,GAAG,KAAK,CAAC,QAAQ;6EAAoB;IACzC,GAAG,GAAG,KAAK,CAAC,QAAQ;4EAAkB;AAEnC,IAAA,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;AACjC,IAAA,eAAe,GAAG,IAAI,CAAC,sBAAsB,EAAE;AAC/C,IAAA,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAE;IAEtD,eAAe,GAAA;QACrB,OAAO,QAAQ,CAAC,MAAK;AACnB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AAExB,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;AAC5B,gBAAA,OAAO,IAAI;YACb;YAEA,OAAO,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC/C,QAAA,CAAC,CAAC;IACJ;IAEQ,sBAAsB,GAAA;QAC5B,OAAO,QAAQ,CAAC,MAAK;AACnB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAK;AAE7B,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;AAC5B,gBAAA,OAAO,IAAI;YACb;YAEA,OAAO;AACL,gBAAA,SAAS,EAAE,IAAI;gBACf,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM;AACjF,oBAAA,GAAG,OAAO;oBACV,CAAC,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI;iBAC/B,CAAC,EAAE,EAAE,CAAC;aACR;AACH,QAAA,CAAC,CAAC;IACJ;IAEQ,oBAAoB,GAAA;QAC1B,OAAO,QAAQ,CAAC,MAAK;YACnB,OAAO;AACL,gBAAA,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC7C,gBAAA,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI;AACxB,aAAA,CAAC,IAAI,CAAC,GAAG,CAAC;AACb,QAAA,CAAC,CAAC;IACJ;uGA/CW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,+hBCjClC,0eAiBA,EAAA,MAAA,EAAA,CAAA,8aAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDWI,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,gBAAgB,qDAChB,2BAA2B,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGlB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAhBjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,IAAA,EAGpB;AACJ,wBAAA,kBAAkB,EAAE,oBAAoB;AACxC,wBAAA,oBAAoB,EAAE,oBAAoB;AAC1C,wBAAA,qBAAqB,EAAE,uCAAuC;wBAC9D,aAAa,EAAE,2CAA2C;qBAC3D,EAAA,OAAA,EACQ;wBACP,gBAAgB;wBAChB,gBAAgB;wBAChB,2BAA2B;AAC5B,qBAAA,EAAA,QAAA,EAAA,0eAAA,EAAA,MAAA,EAAA,CAAA,8aAAA,CAAA,EAAA;;;AE/BH;;;;;;;;AAQG;MA6BU,oBAAoB,CAAA;IAEf,GAAG,GAAG,KAAK,CAAC,QAAQ;4EAAkB;IACtC,aAAa,GAAG,MAAM,EAAoB;AAEvC,IAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;IAC1B,gBAAgB,GAAG,SAAS,CAAC,mBAAmB;yFAAC;AACjD,IAAA,qBAAqB,GAAG,CAAA,QAAA,EAAW,IAAI,CAAC,UAAU,EAAE,EAAW;AAEjE,IAAA,iBAAiB,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAErE,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,oBAAoB,EAAE;IAC7B;AAEU,IAAA,UAAU,CAAC,KAAmB,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;YACtB;QACF;AACA,QAAA,KAAK,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;IACjE;AAEU,IAAA,aAAa,CAAC,KAAiB,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;YACtB;QACF;QACA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAK,CAAC,EAAC,CAAC;IAC1E;IAEU,eAAe,GAAA;AACvB,QAAA,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IACjD;AAEU,IAAA,eAAe,CAAC,KAAiB,EAAA;AACzC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa;;QAEhC,IAAI,IAAI,YAAY,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE;YAClE;QACF;QAEA,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnC;AAEU,IAAA,oBAAoB,CAAC,KAAmB,EAAA;AAChD,QAAA,KAAK,CAAC,eAAe,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;IAC9C;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,cAAc,CAAC,IAAI,CAAC,qBAAqB,EAAE,OAAO,IAAG;YACnD,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU;YACnD,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,IAAI,mBAAmB,EAAE;AAC9C,gBAAA,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;YACjE;AACF,QAAA,CAAC,CAAC;IACJ;uGAvDW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,mqBAMiB,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3CrE,swBAiBA,EAAA,MAAA,EAAA,CAAA,8yFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDMI,qBAAqB,oFACrB,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,aAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,yBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAaV,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAnBhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,OAAA,EAGhB;wBACP,qBAAqB;wBACrB,mBAAmB;qBACpB,EAAA,IAAA,EACK;AACJ,wBAAA,oBAAoB,EAAE,CAAA,0BAAA,CAA4B;AAClD,wBAAA,sBAAsB,EAAE,CAAA,4BAAA,CAA8B;AACtD,wBAAA,qBAAqB,EAAE,CAAA,2BAAA,CAA6B;AACpD,wBAAA,SAAS,EAAE,8BAA8B;AACzC,wBAAA,SAAS,EAAE,oBAAoB;AAC/B,wBAAA,YAAY,EAAE,uBAAuB;AACrC,wBAAA,cAAc,EAAE,mBAAmB;AACnC,wBAAA,cAAc,EAAE,yBAAyB;AAC1C,qBAAA,EAAA,QAAA,EAAA,swBAAA,EAAA,MAAA,EAAA,CAAA,8yFAAA,CAAA,EAAA;gRAQ+C,mBAAmB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE3CrE;;;;;;;;AAQG;MAoDU,kCAAkC,CAAA;AAE1B,IAAA,gBAAgB,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAEtE;;AAEG;AACO,IAAA,WAAW,CAAC,KAAY,EAAA;AAChC,QAAA,IAAI,KAAK,CAAC,MAAM,YAAY,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,KAAK,IAAI,EAAE;AAC/F,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,KAAK,CAAC,MAAM,YAAY,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC,iBAAiB,EAAE;AACzE,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,KAAK;IACd;AAEA;;AAEG;AACO,IAAA,YAAY,CAAC,KAAY,EAAA;AACjC,QAAA,OAAO,KAAK,CAAC,MAAM,YAAY,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI;IACnF;uGAtBW,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlC,kCAAkC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,2DAAA,EAAA,uBAAA,EAAA,2DAAA,EAAA,yBAAA,EAAA,2DAAA,EAAA,sBAAA,EAAA,2DAAA,EAAA,+BAAA,EAAA,2DAAA,EAAA,4BAAA,EAAA,2DAAA,EAAA,mBAAA,EAAA,6DAAA,EAAA,yBAAA,EAAA,6DAAA,EAAA,2BAAA,EAAA,6DAAA,EAAA,wBAAA,EAAA,6DAAA,EAAA,iCAAA,EAAA,6DAAA,EAAA,8BAAA,EAAA,6DAAA,EAAA,eAAA,EAAA,iFAAA,EAAA,uBAAA,EAAA,iFAAA,EAAA,oBAAA,EAAA,iFAAA,EAAA,mBAAA,EAAA,4DAAA,EAAA,gBAAA,EAAA,4DAAA,EAAA,gBAAA,EAAA,0DAAA,EAAA,sBAAA,EAAA,0DAAA,EAAA,wBAAA,EAAA,0DAAA,EAAA,8BAAA,EAAA,0DAAA,EAAA,kBAAA,EAAA,4DAAA,EAAA,wBAAA,EAAA,4DAAA,EAAA,0BAAA,EAAA,4DAAA,EAAA,gCAAA,EAAA,4DAAA,EAAA,cAAA,EAAA,wDAAA,EAAA,oBAAA,EAAA,wDAAA,EAAA,sBAAA,EAAA,wDAAA,EAAA,4BAAA,EAAA,wDAAA,EAAA,aAAA,EAAA,uDAAA,EAAA,mBAAA,EAAA,uDAAA,EAAA,qBAAA,EAAA,uDAAA,EAAA,2BAAA,EAAA,uDAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,GAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlC,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBA/C9C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,6BAA6B;AACvC,oBAAA,IAAI,EAAE;wBACJ,iBAAiB,EAAE,GAAG;AAEtB,wBAAA,mBAAmB,EAAE,2DAA2D;AAChF,wBAAA,yBAAyB,EAAE,2DAA2D;AACtF,wBAAA,2BAA2B,EAAE,2DAA2D;AACxF,wBAAA,wBAAwB,EAAE,2DAA2D;AACrF,wBAAA,iCAAiC,EAAE,2DAA2D;AAC9F,wBAAA,8BAA8B,EAAE,2DAA2D;AAE3F,wBAAA,qBAAqB,EAAE,6DAA6D;AACpF,wBAAA,2BAA2B,EAAE,6DAA6D;AAC1F,wBAAA,6BAA6B,EAAE,6DAA6D;AAC5F,wBAAA,0BAA0B,EAAE,6DAA6D;AACzF,wBAAA,mCAAmC,EAAE,6DAA6D;AAClG,wBAAA,gCAAgC,EAAE,6DAA6D;AAE/F,wBAAA,iBAAiB,EAAE,iFAAiF;AACpG,wBAAA,yBAAyB,EAAE,iFAAiF;AAC5G,wBAAA,sBAAsB,EAAE,iFAAiF;AAEzG,wBAAA,qBAAqB,EAAE,4DAA4D;AACnF,wBAAA,kBAAkB,EAAE,4DAA4D;AAEhF,wBAAA,kBAAkB,EAAE,0DAA0D;AAC9E,wBAAA,wBAAwB,EAAE,0DAA0D;AACpF,wBAAA,0BAA0B,EAAE,0DAA0D;AACtF,wBAAA,gCAAgC,EAAE,0DAA0D;AAE5F,wBAAA,oBAAoB,EAAE,4DAA4D;AAClF,wBAAA,0BAA0B,EAAE,4DAA4D;AACxF,wBAAA,4BAA4B,EAAE,4DAA4D;AAC1F,wBAAA,kCAAkC,EAAE,4DAA4D;AAEhG,wBAAA,gBAAgB,EAAE,wDAAwD;AAC1E,wBAAA,sBAAsB,EAAE,wDAAwD;AAChF,wBAAA,wBAAwB,EAAE,wDAAwD;AAClF,wBAAA,8BAA8B,EAAE,wDAAwD;AAExF,wBAAA,eAAe,EAAE,uDAAuD;AACxE,wBAAA,qBAAqB,EAAE,uDAAuD;AAC9E,wBAAA,uBAAuB,EAAE,uDAAuD;AAChF,wBAAA,6BAA6B,EAAE,uDAAuD;AACvF,qBAAA;AACF,iBAAA;;;MC3CY,qBAAqB,CAAA;AAEf,IAAA,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;AAC3B,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAE7C;;AAEG;IACc,cAAc,GAAG,MAAM,CAAkC,SAAS;uFAAC;AAEpF;;AAEG;AACa,IAAA,mBAAmB,GAAG,IAAI,CAAC,0BAA0B,EAAE;AAEvE;;;;AAIG;IACK,0BAA0B,GAAA;QAChC,OAAO,QAAQ,CAAC,MAAK;AACnB,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO;iBACzB,GAAG,CAAC,MAAM,IAAG;gBACZ,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE;AACvF,gBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;oBAC7B,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI;gBACrB;AACA,gBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACxB,oBAAA,OAAO,SAAS,CAAC,EAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAC,CAAC;gBACtD;AACA,gBAAA,OAAO,KAAK;AACd,YAAA,CAAC;AACA,iBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC;AACzB,QAAA,CAAC,CAAC;IACJ;AAEO,IAAA,WAAW,CAAC,MAA0B,EAAA;AAC3C,QAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,EAAC,CAAC;IACpE;AAEO,IAAA,MAAM,CAAC,WAAmC,EAAA;AAC/C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAG;QACpC,MAAM,YAAY,GAAG,OAAO,WAAW,KAAK,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,EAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAC,CAAC,GAAG,WAAW;AAErH,QAAA,IAAI,YAAY,KAAK,KAAK,CAAC,YAAY,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACjE,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC;AAC3E,YAAA,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC;QACtC;IACF;IAEO,SAAS,GAAA;QACd,MAAM,EAAC,MAAM,EAAC,GAAG,IAAI,CAAC,cAAc,EAAG;;QAGvC,eAAe,CAAC,MAAK;AACnB,YAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;AAC/B,YAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;QACpC,CAAC,EAAE,EAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAC,CAAC;IAChC;AAEA;;AAEG;AACK,IAAA,kBAAkB,CAAC,aAAiC,EAAA;AAC1D,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC;AACzE,QAAA,IAAI,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,KAAK;AACjD,YAAA,GAAG,YAAY;AACf,YAAA,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;gBACzD,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC;;AAEhF,gBAAA,IAAI,KAAK,IAAI,kBAAkB,EAAE;oBAC/B,OAAO;wBACL,GAAG,cAAc,IAAI,EAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAC;AACxC,wBAAA,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;qBAC7B;gBACH;gBAEA,OAAO,cAAc,IAAI,EAAE;AAC7B,YAAA,CAAC,CAAC;AACH,SAAA,CAAC,CAAC;IACL;AAEA;;;;AAIG;IACK,qBAAqB,CAAC,cAAkC,EAAE,cAAsC,EAAA;QACtG,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;QACvC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC;QAEnD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,KAAI;AAC3C,YAAA,IAAI,KAAK,GAAG,WAAW,EAAE;AACvB,gBAAA,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACrD;AACA,YAAA,IAAI,KAAK,KAAK,WAAW,EAAE;gBACzB,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC;YAC7C;AACA,YAAA,OAAO,GAAG;AACZ,QAAA,CAAC,EAAE,IAAI,GAAG,EAA8C,CAAC;IAC3D;uGAvGW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAArB,qBAAqB,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;AAyHD;;AAEG;AACH,SAAS,SAAS,CAAC,MAA2C,EAAA;AAC5D,IAAA,MAAM,GAAG,GAAG,CAAA,EAAG,MAAM,CAAC,GAAG,IAAI;IAC7B,MAAM,GAAG,GAAG,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA,EAAA,CAAI,GAAG,MAAM,CAAC,GAAG;AAC3E,IAAA,OAAO,CAAA,OAAA,EAAU,GAAG,CAAA,EAAA,EAAK,GAAG,GAAG;AACjC;;AC/IA;;;;;;;;AAQG;MAaU,uBAAuB,CAAA;IAElB,MAAM,GAAG,KAAK,CAAC,QAAQ;+EAAkB;AAEzD,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,sBAAsB,EAAE;IAC/B;IAEQ,sBAAsB,GAAA;QAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,aAA4B;QAE/D,MAAM,CAAC,SAAS,IAAG;AACjB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YAE5B,SAAS,CAAC,MAAK;AACb,gBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,GAAG;AACjC,oBAAA,IAAI,CAAC,GAAA;AACH,wBAAA,OAAO,OAAO,CAAC,qBAAqB,EAAE,CAAC,IAAI;oBAC7C,CAAC;AACD,oBAAA,IAAI,KAAK,GAAA;wBACP,OAAO,OAAO,CAAC,WAAW;oBAC5B,CAAC;iBACF;gBACD,SAAS,CAAC,MAAK;AACb,oBAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE;AAChC,wBAAA,MAAM,CAAC,QAAQ,GAAG,EAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAC;oBACpC;AACF,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;uGA9BW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,4TANxB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAMD,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBARnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,IAAI,EAAE;AACJ,wBAAA,oBAAoB,EAAE,eAAe;wBACrC,sBAAsB,EAAE,mBAAmB;AAC5C,qBAAA;AACF,iBAAA;;;ACpBD;;;;;;;;AAQG;MAmBU,wBAAwB,CAAA;IAEnB,IAAI,GAAG,KAAK,CAAC,QAAQ;6EAA4C;AAE9D,IAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;IAE5B,QAAQ,GAAG,MAAM,CAAC,KAAK;iFAAC;AACxB,IAAA,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAErD,IAAA,aAAa,CAAC,MAA0B,EAAA;AAChD,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,CAAC;IACzC;IAEU,QAAQ,CAAC,MAA6B,EAAE,KAAwB,EAAA;QACxE,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QACjD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1C,QAAA,MAAM,cAAc,GAAG,eAAe,GAAG,WAAW;AACpD,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC;IAC5C;IAEU,WAAW,GAAA;AACnB,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE;;AAG/B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACpB,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnC;IACF;AAEA;;AAEG;AACO,IAAA,MAAM,CAAC,MAA0B,EAAA;AACzC,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,CAAC;AACvC,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC;AACzC,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE;IACjC;IAEU,YAAY,GAAA;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;IACzB;IAEU,YAAY,GAAA;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;;;QAIxB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE;YAC5B,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnC;IACF;uGAlDW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BrC,o6BAoBA,EAAA,MAAA,EAAA,CAAA,kwDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDGI,oBAAoB,8HACpB,uBAAuB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGd,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBATpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,OAAA,EAGpB;wBACP,oBAAoB;wBACpB,uBAAuB;AACxB,qBAAA,EAAA,QAAA,EAAA,o6BAAA,EAAA,MAAA,EAAA,CAAA,kwDAAA,CAAA,EAAA;;;AEzBH;;;;;;;;AAQG;AAKH;;AAEG;MAcU,yBAAyB,CAAA;AAEpB,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,aAA4B;AAEnD,IAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAC1B,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAChD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC;AACzE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC;QACrE,OAAO,cAAc,GAAG,YAAY;IACtC,CAAC;uFAAC;uGATS,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,+wBAX1B,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAWd,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAbrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,IAAI,EAAE;AACJ,wBAAA,qCAAqC,EAAE,qDAAqD;AAC5F,wBAAA,sCAAsC,EAAE,8BAA8B;AACtE,wBAAA,4CAA4C,EAAE,2DAA2D;AACzG,wBAAA,6CAA6C,EAAE,4DAA4D;AAC3G,wBAAA,oCAAoC,EAAE,oDAAoD;AAC1F,wBAAA,0CAA0C,EAAE,mDAAmD;AAC/F,wBAAA,iCAAiC,EAAE,kDAAkD;AACtF,qBAAA;AACF,iBAAA;;;AC5BD;;;;;;;;AAQG;AAMH;;AAEG;MAaU,qBAAqB,CAAA;AAEb,IAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAC1B,IAAA,mBAAmB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC,mBAAmB;uGAH/E,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iCAAA,EAAA,uBAAA,EAAA,mDAAA,EAAA,0CAAA,EAAA,sDAAA,EAAA,6CAAA,EAAA,EAAA,EAAA,SAAA,EATrB;YACT,qBAAqB;AACtB,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAHS,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAUd,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAZjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,SAAS,EAAE;wBACT,qBAAqB;AACtB,qBAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,8BAA8B,EAAE,uBAAuB;AACvD,wBAAA,gDAAgD,EAAE,0CAA0C;AAC5F,wBAAA,mDAAmD,EAAE,6CAA6C;AACnG,qBAAA;AACF,iBAAA;;;AC5BD;;;;;;;;AAQG;AAIH;;AAEG;MAKU,qBAAqB,CAAA;uGAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,0EAFtB,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAEd,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE,eAAe;AAC1B,iBAAA;;;AClBD;;;;;;;;AAQG;MAsBU,wBAAwB,CAAA;IAEnB,MAAM,GAAG,KAAK,CAAC,QAAQ;+EAAyB;AAE7C,IAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAC1B,IAAA,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;AACrD,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS;sFAAC;AAE5I,IAAA,MAAM,CAAC,KAAmB,EAAA;QAClC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;IACvE;uGAVW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9BrC,uyBA2BA,EAAA,MAAA,EAAA,CAAA,4hCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDPI,gBAAgB,qDAChB,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FASP,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAbpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,OAAA,EACpB;wBACP,gBAAgB;wBAChB,gBAAgB;qBACjB,EAAA,IAAA,EAGK;AACJ,wBAAA,oBAAoB,EAAE,eAAe;AACrC,wBAAA,cAAc,EAAE,UAAU;AAC3B,qBAAA,EAAA,QAAA,EAAA,uyBAAA,EAAA,MAAA,EAAA,CAAA,4hCAAA,CAAA,EAAA;;;AE5BH;;;;;;;;AAQG;MAKU,+BAA+B,CAAA;AAEnC,IAAA,SAAS,CAAC,KAAqB,EAAA;AACpC,QAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,YAAA,OAAO,6BAA6B;QACtC;AACA,QAAA,IAAI,KAAK,KAAK,KAAK,EAAE;AACnB,YAAA,OAAO,4BAA4B;QACrC;AACA,QAAA,OAAO,IAAI;IACb;uGAVW,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,6BAAA,EAAA,CAAA;;2FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAD3C,IAAI;mBAAC,EAAC,IAAI,EAAE,6BAA6B,EAAC;;;ACZ3C;;;;;;;;AAQG;MA8BU,wBAAwB,CAAA;IAEnB,MAAM,GAAG,KAAK,CAAC,QAAQ;+EAAyB;IAE7C,MAAM,GAAG,MAAM,CAAmC,IAAI;+EAAC;IACvD,KAAK,GAAG,SAAS,CAA0B,OAAO;8EAAC;AAErD,IAAA,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;AAC3B,IAAA,YAAY,GAAG,MAAM,CAACC,eAAe,CAAC;AACtC,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC5B,IAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,aAA4B;AAEhE,IAAA,KAAK;AAEb,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,WAAW,EAAE;IACpB;IAEU,aAAa,GAAA;QACrB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,SAAS,EAAE;YACpC,IAAI,CAAC,iBAAiB,EAAE;QAC1B;QACA,IAAI,CAAC,KAAK,EAAG,CAAC,aAAa,CAAC,KAAK,EAAE;IACrC;AAEU,IAAA,OAAO,CAAC,KAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,KAAK,EAAG,CAAC,aAAa,CAAC,KAAK,EAAE;AACnC,QAAA,KAAK,CAAC,eAAe,EAAE,CAAC;IAC1B;IAEQ,WAAW,GAAA;QACjB,MAAM,eAAe,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,OAAM,KAAK,KAAG;;YAEnF,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;AAChD,gBAAA,MAAM,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClC;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE;AACtC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YAE5B,SAAS,CAAC,MAAK;AACb,gBAAA,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAC,CAAC;AACjD,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEQ,iBAAiB,GAAA;;AAEvB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;YAClB;QACF;AAEA,QAAA,MAAM,QAAQ,GAAG,yBAAyB,CAAC,EAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAC,CAAC;AACpE,QAAA,qBAAqB,CAAC,QAAQ,EAAE,MAAK;;AAEnC,YAAA,cAAc,CAAC,oBAAoB,EAAE,IAAI,IAAI;AAC1C,iBAAA,WAAW,CAAC,EAAC,KAAK,EAAE,6BAA6B,EAAE,UAAU,EAAE,EAAC,aAAa,EAAE,MAAM,EAAC,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAC;AAC9H,iBAAA,WAAW,CAAC,EAAC,KAAK,EAAE,4BAA4B,EAAE,UAAU,EAAE,EAAC,aAAa,EAAE,OAAO,EAAC,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAC,CAAC,CAClI;;YAGD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,EAAE;gBACxD,MAAM,EAAE,IAAI,CAAC,KAAK;AAClB,gBAAA,QAAQ,EAAE,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAA,EAAA,CAAI;AACvC,gBAAA,MAAM,EAAE,EAAC,CAAC,EAAE,CAAC,CAAC,EAAC;AAChB,aAAA,CAAC;;AAGF,YAAA,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ;AAChC,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;iBACZ,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;AAEvC,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAK;gBACtB,QAAQ,CAAC,OAAO,EAAE;;;gBAGlB,IAAI,CAAC,KAAK,EAAG,CAAC,aAAa,CAAC,KAAK,EAAE;AACnC,gBAAA,IAAI,CAAC,KAAK,GAAG,SAAS;AACxB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;uGArFW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,0CAAA,EAAA,EAAA,UAAA,EAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtCrC,0uBAwBA,EAAA,MAAA,EAAA,CAAA,kpDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDGI,WAAW,w5BACX,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAChB,WAAW,EAAA,IAAA,EAAA,SAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACX,+BAA+B,EAAA,IAAA,EAAA,6BAAA,EAAA,CAAA,EAAA,CAAA;;2FAQtB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAhBpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,OAAA,EAGpB;wBACP,WAAW;wBACX,gBAAgB;wBAChB,WAAW;wBACX,+BAA+B;qBAChC,EAAA,IAAA,EACK;AACJ,wBAAA,oBAAoB,EAAE,eAAe;AACrC,wBAAA,sBAAsB,EAAE,CAAA,kCAAA,CAAoC;AAC5D,wBAAA,SAAS,EAAE,0CAA0C;AACtD,qBAAA,EAAA,QAAA,EAAA,0uBAAA,EAAA,MAAA,EAAA,CAAA,kpDAAA,CAAA,EAAA;wLAO6D,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAmFvE,SAAS,IAAI,CAAC,KAAuC,EAAA;AACnD,IAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,KAAK;AACjE;;AEhIA;;;;;;;;AAQG;MAmBU,uBAAuB,CAAA;AAEf,IAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAEnC,IAAA,YAAY,CAAC,KAAiB,EAAA;;AAEtC,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YACnB,KAAK,CAAC,cAAc,EAAE;QACxB;IACF;uGATW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BpC,sTAYA,EAAA,MAAA,EAAA,CAAA,4kBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDWI,wBAAwB,kFACxB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGf,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAZnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,IAAA,EAGtB;AACJ,wBAAA,SAAS,EAAE,sBAAsB;qBAClC,EAAA,OAAA,EACQ;wBACP,wBAAwB;wBACxB,wBAAwB;AACzB,qBAAA,EAAA,QAAA,EAAA,sTAAA,EAAA,MAAA,EAAA,CAAA,4kBAAA,CAAA,EAAA;;;AEzBH;;;;;;;;AAQG;AAoBH;;AAEG;MA8BU,iBAAiB,CAAA;AAE5B;;AAEG;IACa,IAAI,GAAG,KAAK,CAAC,QAAQ;6EAAqB;AAE1D;;AAEG;AACa,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,4EAAE,SAAS,EAAE,CAAC,KAAkB,KAAK,KAAqB,GAAE;AAElG;;AAEG;IACa,aAAa,GAAG,MAAM,EAAoB;IAEzC,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,yBAAyB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,CAAA,EAAG,IAAI,EAAE,UAAU,EAAA,CAAE;IAC7E,eAAe,GAAG,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,8BAAA,EAAA,CAAA,EAAG,IAAI,EAAE,UAAU,EAAA,CAAE;IAC/E,YAAY,GAAG,SAAS,CAAC,uBAAuB,oFAAG,IAAI,EAAE,UAAU,EAAA,CAAE;IACrE,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,CAAA,EAAG,IAAI,EAAE,UAAU,EAAA,CAAE;AAC1E,IAAA,yBAAyB,GAAG,SAAS,CAAC,QAAQ,CAA0B,6BAA6B;kGAAC;AACtG,IAAA,4BAA4B,GAAG,SAAS,CAAC,QAAQ,CAA0B,gCAAgC;qGAAC;IAE1G,IAAI,GAAG,YAAY,CAAC,oBAAoB;6EAAC;AAE5D,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,2BAA2B,EAAE;IACpC;AAEU,IAAA,kBAAkB,CAAC,KAAuB,EAAA;AAClD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;IAChC;IAEU,OAAO,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE;IACtB;IAEQ,cAAc,GAAA;QACpB,MAAM,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;QACnD,MAAM,uBAAuB,GAAG,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC;QAC/D,MAAM,oBAAoB,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;QACzD,MAAM,kBAAkB,GAAG,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;QACrD,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,4BAA4B,CAAC;QAChE,MAAM,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,yBAAyB,CAAC;QAEnE,MAAM,CAAC,SAAS,IAAG;AACjB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;YAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,aAA4B;YAE9D,SAAS,CAAC,MAAK;AACb,gBAAA,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;AAClB,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,cAAc,EAAE,QAAQ,CAAC,MAAM,iBAAiB,EAAE,CAAC,YAAY,IAAI,oBAAoB,EAAE,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC;oBAC9G,aAAa,EAAE,QAAQ,CAAC,MAAM,iBAAiB,EAAE,CAAC,WAAW,CAAC;oBAC9D,oBAAoB,EAAE,QAAQ,CAAC,MAAM,uBAAuB,EAAE,CAAC,YAAY,CAAC;AAC5E,oBAAA,mBAAmB,EAAE,QAAQ,CAAC,MAAM,kBAAkB,EAAE,CAAC,WAAW,CAAC;oBACrE,WAAW,EAAE,QAAQ,CAAC,MAAM,WAAW,EAAE,CAAC,WAAW,CAAC;AACtD,oBAAA,YAAY,EAAE,QAAQ,CAAC,MAAM,oBAAoB,EAAE,EAAE,YAAY,IAAI,CAAC,CAAC;oBACvE,UAAU,EAAE,QAAQ,CAAC,MAAM,iBAAiB,EAAE,CAAC,YAAY,CAAC;AAC5D,oBAAA,WAAW,EAAE,MAAM,QAAQ,CAAC,QAAQ,CAAC,EAAC,GAAG,EAAE,CAAC,EAAC,CAAC;AAC/C,iBAAA,CAAC;gBACF,SAAS,CAAC,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;AACrC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEQ,2BAA2B,GAAA;QACjC,MAAM,CAAC,MAAK;YACV,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE;YAC1C,IAAI,CAAC,SAAS,EAAE;gBACd;YACF;YAEA,SAAS,CAAC,MAAK;gBACb,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,aAA4B;AAC9D,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC;AACzE,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC;AACjE,gBAAA,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,GAAG,UAAU;AACjD,gBAAA,MAAM,eAAe,GAAG,YAAY,GAAG,UAAU;AACjD,gBAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS;AACpC,gBAAA,MAAM,YAAY,GAAG,SAAS,GAAG,cAAc;AAE/C,gBAAA,IAAI,YAAY,GAAG,SAAS,EAAE;AAC5B,oBAAA,QAAQ,CAAC,SAAS,GAAG,YAAY;gBACnC;AACK,qBAAA,IAAI,eAAe,GAAG,YAAY,EAAE;AACvC,oBAAA,QAAQ,CAAC,SAAS,GAAG,eAAe,GAAG,cAAc;gBACvD;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;uGA7FW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,qCAAA,EAAA,kCAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,SAAA,EALjB;AACT,YAAA,eAAe,EAAE;YACjB,wBAAwB;AACzB,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAmB+C,yBAAyB,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAS,UAAU,+EACtC,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAS,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACpD,uBAAuB,2BAAS,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACnC,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAS,UAAU,mVAIlD,oBAAoB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpF7D,gpEAsDA,EAAA,MAAA,EAAA,CAAA,w3KAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDZI,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,uBAAuB,6DACvB,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,oBAAoB,uGACpB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,kCAAkC,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClC,sBAAsB,uFACtB,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAErB,oBAAoB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,gBAAgB,gDAFhB,WAAW,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,CAAA;;2FASF,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA7B7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,aAAA,EAGN,iBAAiB,CAAC,SAAS,EAAA,IAAA,EACpC;wBACJ,aAAa,EAAE,QAAQ;AACvB,wBAAA,gCAAgC,EAAE,qCAAqC;AACvE,wBAAA,+BAA+B,EAAE,oCAAoC;qBACtE,EAAA,OAAA,EACQ;wBACP,yBAAyB;wBACzB,uBAAuB;wBACvB,qBAAqB;wBACrB,qBAAqB;wBACrB,oBAAoB;wBACpB,wBAAwB;wBACxB,kCAAkC;wBAClC,sBAAsB;wBACtB,qBAAqB;wBACrB,WAAW;wBACX,oBAAoB;wBACpB,gBAAgB;qBACjB,EAAA,SAAA,EACU;AACT,wBAAA,eAAe,EAAE;wBACjB,wBAAwB;AACzB,qBAAA,EAAA,QAAA,EAAA,gpEAAA,EAAA,MAAA,EAAA,CAAA,w3KAAA,CAAA,EAAA;AAmB+C,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,yBAAyB,CAAA,EAAA,EAAA,GAAE,EAAC,IAAI,EAAE,UAAU,EAAC,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACvC,qBAAqB,CAAA,EAAA,EAAA,GAAE,EAAC,IAAI,EAAE,UAAU,EAAC,wFACrD,uBAAuB,CAAA,EAAA,EAAA,GAAE,EAAC,IAAI,EAAE,UAAU,EAAC,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACpC,qBAAqB,QAAE,EAAC,IAAI,EAAE,UAAU,EAAC,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,yBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACD,6BAA6B,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,4BAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAC1B,gCAAgC,qFAErF,oBAAoB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAwE7D,SAAS,eAAe,GAAA;IACtB,OAAO;AACL,QAAA,OAAO,EAAE,UAAU;QACnB,UAAU,EAAE,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK;KAClD;AACH;;AEjKA;;;;;;;;AAQG;;ACRH;;AAEG;;"}
|