{"version":3,"file":"ng-hub-ui-table.mjs","sources":["../../../projects/paginable/src/lib/assets/i18n/en.ts","../../../projects/paginable/src/lib/assets/i18n/es.ts","../../../projects/paginable/src/lib/constants/defaults.ts","../../../projects/paginable/src/lib/utils.ts","../../../projects/paginable/src/lib/services/paginate-config.service.ts","../../../projects/paginable/src/lib/services/paginable.service.ts","../../../projects/paginable/src/lib/services/paginable-translation.service.ts","../../../projects/paginable/src/lib/paginable.module.ts","../../../projects/paginable/src/lib/utils/icons.ts","../../../projects/paginable/src/lib/components/icon/icon.component.ts","../../../projects/paginable/src/lib/components/icon/icon.component.html","../../../projects/paginable/src/lib/directives/paginable-list-item.directive.ts","../../../projects/paginable/src/lib/directives/paginable-table-not-found.directive.ts","../../../projects/paginable/src/lib/pipes/ucfirst.pipe.ts","../../../projects/paginable/src/lib/components/paginator/paginator.component.ts","../../../projects/paginable/src/lib/components/paginator/paginator.component.html","../../../projects/paginable/src/lib/components/list/paginable-list/paginable-list.component.ts","../../../projects/paginable/src/lib/components/list/paginable-list/paginable-list.component.html","../../../projects/paginable/src/lib/pipes/unwrap-async.pipe.ts","../../../projects/paginable/src/lib/components/paginable-table-dropdown/paginable-table-dropdown.component.ts","../../../projects/paginable/src/lib/components/paginable-table-dropdown/paginable-table-dropdown.component.html","../../../projects/paginable/src/lib/pipes/translate.pipe.ts","../../../projects/paginable/src/lib/components/paginable-table-range-input/paginable-table-range-input.component.ts","../../../projects/paginable/src/lib/components/paginable-table-range-input/paginable-table-range-input.component.html","../../../projects/paginable/src/lib/components/resizable/resizable.component.ts","../../../projects/paginable/src/lib/components/resizable/resizable.component.html","../../../projects/paginable/src/lib/constants/breakpoints.ts","../../../projects/paginable/src/lib/directives/paginable-table-cell.directive.ts","../../../projects/paginable/src/lib/directives/paginable-table-error.directive.ts","../../../projects/paginable/src/lib/directives/paginable-table-expanding-row.directive.ts","../../../projects/paginable/src/lib/directives/paginable-table-filter.directive.ts","../../../projects/paginable/src/lib/directives/paginable-table-header.directive.ts","../../../projects/paginable/src/lib/directives/paginable-table-loading.directive.ts","../../../projects/paginable/src/lib/directives/paginable-table-row.directive.ts","../../../projects/paginable/src/lib/pipes/get.pipe.ts","../../../projects/paginable/src/lib/pipes/is-observable.pipe.ts","../../../projects/paginable/src/lib/components/dropdown/dropdown.component.ts","../../../projects/paginable/src/lib/components/dropdown/dropdown.component.html","../../../projects/paginable/src/lib/interfaces/column-filter-event.ts","../../../projects/paginable/src/lib/components/menu-filter/menu-filter.component.ts","../../../projects/paginable/src/lib/components/menu-filter/menu-filter.component.html","../../../projects/paginable/src/lib/components/table/table.component.ts","../../../projects/paginable/src/lib/components/table/table.component.html","../../../projects/paginable/src/lib/directives/resizable.directive.ts","../../../projects/paginable/src/lib/directives/tooltip.directive.ts","../../../projects/paginable/src/lib/interfaces/paginable-table-header.ts","../../../projects/paginable/src/lib/services/pagination.service.ts","../../../projects/paginable/src/lib/enums/selection-types.ts","../../../projects/paginable/src/lib/index.ts","../../../projects/paginable/src/public-api.ts","../../../projects/paginable/src/ng-hub-ui-table.ts"],"sourcesContent":["export const locale = {\n\tlang: 'en',\n\tdata: {\n\t\tLOADING: 'loading',\n\t\tSEARCH: 'search',\n\t\tROWS_PER_PAGE: 'rows per page',\n\t\tSHOWING_X_OF_Y_ROWS: 'Showing {{ amount }} of {{ total }} rows',\n\t\tNO_RESULTS_FOUND: 'No results found',\n\t\tBATCH_ACTIONS: 'Batch actions',\n\t\tAPPLY: 'Apply',\n\t\tERROR_OCURRED: 'Error ocurred getting data.',\n\t\tFROM: 'from',\n\t\tTO: 'to',\n\t\tSAVE: 'save',\n\t\tNEW_VIEW: 'new view',\n\t\tADD_VIEW: 'add view',\n\t\tEDIT_VIEW: 'edit view',\n\t\tDELETE_VIEW: 'delete view',\n\t\tSAVE_FILTERS: 'save filters',\n\t\tCANCEL: 'cancel',\n\t\tNO_VIEWS_CREATED: 'No views have been created',\n\t\tSELECT_VIEW: 'Select a view',\n\t\tCLEAN_FILTERS: 'Clean filters',\n\t\tNAME: 'name',\n\t\tA_VIEW_WILL_BE_CREATED:\n\t\t\t'A view will be created with the following configuration',\n\t\tMUST_PROVIDE_A_VIEW_NAME: 'Must provide a view name.',\n\t\tMUST_PROVIDE_VIEW_CONDITIONS:\n\t\t\t'Must provide the conditions of the view.',\n\t\tTODAY: 'today',\n\t\tYESTERDAY: 'yesterday',\n\t\tCURRENT_WEEK: 'current_week',\n\t\tLAST_WEEK: 'last_week',\n\t\tCURRENT_MONTH: 'current_month',\n\t\tLAST_MONTH: 'last_month',\n\t\tCURRENT_YEAR: 'current_year',\n\t\tLAST_YEAR: 'last_year',\n\t\tNO_ELEMENTS_FOUND: 'No elements found',\n\t\tSTAR_TYPING: 'Start typing to begin your search',\n\t\tOPERATIONS: {\n\t\t\tEQUAL_TO: 'Equal to',\n\t\t\tVARIABLE: 'Variable'\n\t\t},\n\t\tCLEAR: 'clean',\n\t\tADD_RULE: 'add condition',\n\t\tREMOVE_RULE: 'remove condition',\n\t\tMATCH_ALL: 'match all',\n\t\tMATCH_ANY: 'match any',\n\t\tMATCH_MODES: {\n\t\t\tGREATERTHAN: 'Greater than',\n\t\t\tGREATERTHANOREQUAL: 'Greater than or equal to',\n\t\t\tLESSTHAN: 'Less than',\n\t\t\tLESSTHANOREQUAL: 'Less than or equal to',\n\t\t\tEQUALS: 's',\n\t\t\tNOTEQUALS: 'Not equal to',\n\t\t\tEQUAL: 'Equal to',\n\t\t\tNOTEQUAL: 'Not equal to',\n\t\t\tBEFORE: 'Before',\n\t\t\tBEFOREOREQUAL: 'Before or equal to',\n\t\t\tAFTER: 'After',\n\t\t\tAFTEROREQUAL: 'After or equal to',\n\t\t\tSTARTSWITH: 'Starts with',\n\t\t\tCONTAINS: 'Contains',\n\t\t\tNOTCONTAINS: 'Does not contain',\n\t\t\tENDSWITH: 'Ends with'\n\t\t}\n\t},\n\tTRUE: 'true',\n\tFALSE: 'false'\n};\n","export const locale = {\n\tlang: 'es',\n\tdata: {\n\t\tLOADING: 'cargando',\n\t\tSEARCH: 'buscar',\n\t\tROWS_PER_PAGE: 'Filas por página',\n\t\tSHOWING_X_OF_Y_ROWS: 'Mostrando {{ amount }} de {{ total }} resultados',\n\t\tNO_RESULTS_FOUND: 'No se han encontrado resultados',\n\t\tBATCH_ACTIONS: 'Acciones en lote',\n\t\tAPPLY: 'Aplicar',\n\t\tERROR_OCURRED: 'Ha ocurrido un error obteniendo los datos.',\n\t\tFROM: 'desde',\n\t\tTO: 'hasta',\n\t\tSAVE: 'guardar',\n\t\tNEW_VIEW: 'nueva vista',\n\t\tADD_VIEW: 'añadir vista',\n\t\tEDIT_VIEW: 'editar vista',\n\t\tDELETE_VIEW: 'eliminar vista',\n\t\tSAVE_FILTERS: 'guardar filtros',\n\t\tCANCEL: 'cancelar',\n\t\tNO_VIEWS_CREATED: 'No hay vistas creadas',\n\t\tSELECT_VIEW: 'Selecciona una vista',\n\t\tCLEAN_FILTERS: 'Limpiar filtros',\n\t\tNAME: 'Nombre',\n\t\tA_VIEW_WILL_BE_CREATED:\n\t\t\t'La vista se creará con las siguientes condiciones',\n\t\tMUST_PROVIDE_A_VIEW_NAME: 'El nombre de la vista es requerido.',\n\t\tMUST_PROVIDE_VIEW_CONDITIONS: 'Debe añadir condiciones a la vista.',\n\t\tTODAY: 'hoy',\n\t\tYESTERDAY: 'ayer',\n\t\tCURRENT_WEEK: 'semana actual',\n\t\tLAST_WEEK: 'semana pasada',\n\t\tCURRENT_MONTH: 'mes actual',\n\t\tLAST_MONTH: 'mes pasado',\n\t\tCURRENT_YEAR: 'año actual',\n\t\tLAST_YEAR: 'año pasado',\n\t\tNO_ELEMENTS_FOUND: 'No se han encontrado elementos',\n\t\tSTAR_TYPING: 'Comienza a escribir para iniciar la búsqueda',\n\t\tOPERATIONS: {\n\t\t\tEQUAL_TO: 'Igual a',\n\t\t\tVARIABLE: 'Variable'\n\t\t},\n\t\tCLEAR: 'Limpiar',\n\t\tADD_RULE: 'Añadir condición',\n\t\tREMOVE_RULE: 'eliminar condición',\n\t\tMATCH_ALL: 'Coincidir todo',\n\t\tMATCH_ANY: 'Coincidir algo',\n\t\tMATCH_MODES: {\n\t\t\tGREATERTHAN: 'Mayor que',\n\t\t\tGREATERTHANOREQUAL: 'Mayor o igual que',\n\t\t\tLESSTHAN: 'Menor que',\n\t\t\tLESSTHANOREQUAL: 'Menor o igual que',\n\t\t\tEQUALS: 'Igual a',\n\t\t\tNOTEQUALS: 'No igual a',\n\t\t\tEQUAL: 'Igual a',\n\t\t\tNOTEQUAL: 'No igual a',\n\t\t\tBEFORE: 'Antes de',\n\t\t\tBEFOREOREQUAL: 'Antes o igual a',\n\t\t\tAFTER: 'Después de',\n\t\t\tAFTEROREQUAL: 'Después o igual a',\n\t\t\tSTARTSWITH: 'Comienza con',\n\t\t\tCONTAINS: 'Contiene',\n\t\t\tNOTCONTAINS: 'No contiene',\n\t\t\tENDSWITH: 'Termina con'\n\t\t}\n\t},\n\tTRUE: 'verdadero',\n\tFALSE: 'falso'\n};\n","import { PaginableTableConfig } from '../interfaces/paginable-table-config';\n\nexport const DEFAULT_LANGUAGE = navigator.language.split('-').at(0) ?? 'en';\nexport const DEFAULT_PAGINABLE_CONFIG: PaginableTableConfig = {\n\ttheme: null,\n\tmapping: {\n\t\tcurrentPage: 'currentPage',\n\t\tlastPage: 'lastPage',\n\t\tdata: 'data',\n\t\ttotal: 'total'\n\t},\n\tviews: {\n\t\tkey: 'paginable-table_view_'\n\t},\n\tlanguage: DEFAULT_LANGUAGE\n};\n","/**\n * Determines if two objects or two values are equivalent.\n *\n * Two objects or values are considered equivalent if at least one of the following is true:\n *\n * * Both objects or values pass `===` comparison.\n * * Both objects or values are of the same type and all of their properties are equal by\n *   comparing them with `equals`.\n *\n * @param o1 Object or value to compare.\n * @param o2 Object or value to compare.\n * @returns true if arguments are equal.\n */\nexport function equals(o1: any, o2: any): boolean {\n\tif (o1 === o2) {\n\t\treturn true;\n\t}\n\tif (o1 === null || o2 === null) {\n\t\treturn false;\n\t}\n\tif (o1 !== o1 && o2 !== o2) {\n\t\treturn true;\n\t} // NaN === NaN\n\tlet t1 = typeof o1,\n\t\tt2 = typeof o2,\n\t\tlength: number,\n\t\tkey: any,\n\t\tkeySet: any;\n\tif (t1 == t2 && t1 == 'object') {\n\t\tif (Array.isArray(o1)) {\n\t\t\tif (!Array.isArray(o2)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif ((length = o1.length) == o2.length) {\n\t\t\t\tfor (key = 0; key < length; key++) {\n\t\t\t\t\tif (!equals(o1[key], o2[key])) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else {\n\t\t\tif (Array.isArray(o2)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tkeySet = Object.create(null);\n\t\t\tfor (key in o1) {\n\t\t\t\tif (!equals(o1[key], o2[key])) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tkeySet[key] = true;\n\t\t\t}\n\t\t\tfor (key in o2) {\n\t\t\t\tif (!(key in keySet) && typeof o2[key] !== 'undefined') {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * Checks if a value is defined and not null.\n *\n * @param {any} value - is of type `any`, which means it can accept any data type.\n *\n * @returns a boolean value.\n */\nexport function isDefined(value: any): boolean {\n\treturn typeof value !== 'undefined' && value !== null;\n}\n\n/**\n * Checks if the given item is an object and not an array.\n *\n * @param {any} item - is of type \"any\", which means it can be any data type.\n *\n * @returns a boolean value.\n */\nexport function isObject(item: any): boolean {\n\treturn item && typeof item === 'object' && !Array.isArray(item);\n}\n\n/**\n * Recursively merges two objects, combining their properties into a new object.\n *\n * @param {any} target - is the object that you want to merge the `source` object into.\n * @param {any} source - is an object that contains the properties and values that you want to merge into the `target` object.\n *\n * @returns the merged object, which is the result of merging the `target` and `source` objects.\n */\nexport function mergeDeep(target: any, source: any): any {\n\tlet output = Object.assign({}, target);\n\tif (isObject(target) && isObject(source)) {\n\t\tObject.keys(source).forEach((key: any) => {\n\t\t\tif (isObject(source[key])) {\n\t\t\t\tif (!(key in target)) {\n\t\t\t\t\tObject.assign(output, { [key]: source[key] });\n\t\t\t\t} else {\n\t\t\t\t\toutput[key] = mergeDeep(target[key], source[key]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tObject.assign(output, { [key]: source[key] });\n\t\t\t}\n\t\t});\n\t}\n\treturn output;\n}\n\n/**\n * Generates a unique ID of a specified length by randomly selecting characters from a predefined set of characters.\n *\n * @param {number} length - is the desired length of the generated unique ID.\n *\n * @returns a unique id string.\n */\nexport function generateUniqueId(length: number): string {\n\tconst characters =\n\t\t'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\tconst charactersLength = characters.length;\n\tlet result = '';\n\n\tfor (let i = 0; i < length; i++) {\n\t\tconst randomIndex = Math.floor(Math.random() * charactersLength);\n\t\tresult += characters.charAt(randomIndex);\n\t}\n\n\treturn result;\n}\n\n/**\n * Replaces placeholders in a string with corresponding values from a given object.\n *\n * @param {string} expr - a string that represents the expression to be interpolated. It may contain\n * placeholders that will be replaced with values from the `params` object.\n * @param {any} [params] - an optional object that contains the values to be interpolated into the `expr`\n * string. It is used to replace placeholders in the `expr` string with actual values.\n *\n * @returns returns the interpolated string. If `params` is not provided, it returns the original\n * `expr` string. If `params` is provided, it replaces placeholders in the `expr` string with corresponding values from `params`\n * and returns the interpolated string.\n */\nexport function interpolateString(\n\texpr: string = '',\n\tparams: any = {},\n\ttemplateMatcher: RegExp = /{{\\s?([^{}\\s]*)\\s?}}/g\n) {\n\tif (!params) {\n\t\treturn expr;\n\t}\n\n\treturn expr.replace(templateMatcher, (substring: string, b: string) => {\n\t\tlet r = getValue(params, b);\n\t\treturn isDefined(r) ? r : substring;\n\t});\n}\n\n/**\n * Retrieves the value of a nested property from an object using dot notation.\n *\n * @param {any} target - the object from which you want to retrieve a value.\n * @param {string} key - a string that represents the property or nested properties of the `target` object that you want to\n * retrieve the value from. The `key` can be a single property name or a dot-separated string representing a nested property path.\n *\n * @returns the value of the specified key in the target object.\n */\nexport function getValue(target: any, key: string): any {\n\tlet keys = typeof key === 'string' ? key.split('.') : [key];\n\tkey = '';\n\tdo {\n\t\tkey += keys.shift();\n\t\tif (\n\t\t\tisDefined(target) &&\n\t\t\tisDefined(target[key]) &&\n\t\t\t(typeof target[key] === 'object' || !keys.length)\n\t\t) {\n\t\t\ttarget = target[key];\n\t\t\tkey = '';\n\t\t} else if (!keys.length) {\n\t\t\ttarget = undefined;\n\t\t} else {\n\t\t\tkey += '.';\n\t\t}\n\t} while (keys.length);\n\n\treturn target;\n}\n","import { InjectionToken } from '@angular/core';\nimport { PaginableTableConfig } from '../interfaces/paginable-table-config';\n\n/**\n * This is not a real service, but it looks like it from the outside.\n * It's just an InjectionTToken used to import the config object, provided from the outside\n */\n// tslint:disable-next-line: variable-name\nexport const PaginableConfigService = new InjectionToken<PaginableTableConfig>(\n\t'PaginableConfig'\n);\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { DEFAULT_PAGINABLE_CONFIG } from '../constants/defaults';\nimport { PaginableTableConfig } from '../interfaces/paginable-table-config';\nimport { mergeDeep } from '../utils';\nimport { PaginableConfigService } from './paginate-config.service';\n\n@Injectable()\nexport class PaginableService {\n\tconfig!: Required<PaginableTableConfig>;\n\n\tget mapping(): any {\n\t\treturn this.config.mapping;\n\t}\n\n\tconstructor(\n\t\t@Optional()\n\t\t@Inject(PaginableConfigService)\n\t\tprivate _config = DEFAULT_PAGINABLE_CONFIG\n\t) {\n\t\tthis.initialize();\n\t}\n\n\tinitialize() {\n\t\tthis.config = mergeDeep(DEFAULT_PAGINABLE_CONFIG, this._config);\n\t}\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { locale as enLang } from '../assets/i18n/en';\nimport { locale as esLang } from '../assets/i18n/es';\nimport { PaginableService } from './paginable.service';\nimport { getValue } from '../utils';\n\n@Injectable()\nexport class PaginableTranslationService {\n\t#paginableSvc = inject(PaginableService);\n\n\tdefaultTranslations: Record<string, string | any> = [enLang, esLang].reduce(\n\t\t(acc, c) => {\n\t\t\tacc[c.lang] = c.data;\n\t\t\treturn acc;\n\t\t},\n\t\t{}\n\t);\n\n\ttranslations!: Record<string, string>;\n\n\tprivate translationSource = new Subject<any>();\n\n\ttranslationObserver = this.translationSource.asObservable();\n\n\tconstructor() {\n\t\tthis.initialize();\n\t}\n\n\tinitialize() {\n\t\tthis.setTranslations(\n\t\t\tthis.defaultTranslations[this.#paginableSvc.config.language] ??\n\t\t\t\tthis.defaultTranslations['en']\n\t\t);\n\t}\n\n\t/**\n\t * Retrieves a value from a translations object based on a given key.\n\t *\n\t * @param {string} key - The `key` parameter in the `getTranslation` function is a string that represents the unique identifier or\n\t * key for the translation you want to retrieve from the translations object. This key is used to look up the corresponding\n\t * translation value in the translations object.\n\t *\n\t * @returns The value associated with the provided `key` from the `translations` object.\n\t */\n\tgetTranslation(key: string): any {\n\t\treturn getValue(this.translations, key);\n\t}\n\n\t/**\n\t * Merges the default English translations with the provided translations and updates the translation source.\n\t *\n\t * @param {Record<string, string> | any} translations - The `translations` parameter in the `setTranslation` method is a parameter that accepts\n\t * either an object of type `Record<string, string>` or any other type. If no value is provided, it defaults to an empty object\n\t * `{}`.\n\t */\n\tsetTranslations(translations: Record<string, string> | any = {}) {\n\t\tthis.translations = { ...enLang, ...translations };\n\t\tthis.translationSource.next(this.translations);\n\t}\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { PaginableTableConfig } from './interfaces/paginable-table-config';\nimport { PaginableTranslationService } from './services/paginable-translation.service';\nimport { PaginableService } from './services/paginable.service';\nimport { PaginableConfigService } from './services/paginate-config.service';\n// import { PaginableTableComponent } from './components/paginable-table/paginable-table.component';\n// import { PaginableTableHeaderDirective } from './directives/paginable-table-header.directive';\n// import { PaginableTableRowDirective } from './directives/paginable-table-row.directive';\n// import { PaginableTableCellDirective } from './directives/paginable-table-cell.directive';\n// import { PaginableTableLoadingDirective } from './directives/paginable-table-loading.directive';\n// import { PaginableTableErrorDirective } from './directives/paginable-table-error.directive';\n// import { PaginableTableExpandingRowDirective } from './directives/paginable-table-expanding-row.directive';\n// import { PaginableTableFilterDirective } from './directives/paginable-table-filter.directive';\n\n@NgModule({\n\timports: [\n\t\t// PaginableTableComponent,\n\t\t// PaginableTableHeaderDirective,\n\t\t// PaginableTableRowDirective,\n\t\t// PaginableTableCellDirective,\n\t\t// PaginableTableLoadingDirective,\n\t\t// PaginableTableErrorDirective,\n\t\t// PaginableTableExpandingRowDirective,\n\t\t// PaginableTableFilterDirective\n\t],\n\texports: [\n\t\t// PaginableTableComponent,\n\t\t// PaginableTableHeaderDirective,\n\t\t// PaginableTableRowDirective,\n\t\t// PaginableTableCellDirective,\n\t\t// PaginableTableLoadingDirective,\n\t\t// PaginableTableErrorDirective,\n\t\t// PaginableTableExpandingRowDirective,\n\t\t// PaginableTableFilterDirective\n\t],\n\tproviders: []\n})\nexport class TableModule {\n\tstatic forRoot(\n\t\tconfig?: PaginableTableConfig\n\t): ModuleWithProviders<TableModule> {\n\t\treturn {\n\t\t\tngModule: TableModule,\n\t\t\tproviders: [\n\t\t\t\t{\n\t\t\t\t\tprovide: PaginableConfigService,\n\t\t\t\t\tuseValue: config\n\t\t\t\t},\n\t\t\t\tPaginableService,\n\t\t\t\tPaginableTranslationService\n\t\t\t]\n\t\t};\n\t}\n}\n","/**\n * Checks if any Font Awesome base class is present in the input string.\n *\n * @param {string} input - The `containsFontAwesomeClass` function takes a string input and checks if it contains any of the Font\n * Awesome base classes such as 'fa-solid', 'fa-regular', 'fa-light', 'fa-duotone', 'fa-thin', or 'fa-brands'.\n *\n * @returns A boolean value - `true` if any of the Font Awesome base classes are\n * present in the input string, and `false` otherwise.\n */\nexport function containsFontAwesomeClass(input: string): boolean {\n\t// Define an array of Font Awesome base classes to check for\n\tconst faClasses = [\n\t\t'fa-solid',\n\t\t'fa-regular',\n\t\t'fa-light',\n\t\t'fa-duotone',\n\t\t'fa-thin',\n\t\t'fa-brands'\n\t];\n\n\t// Use a regular expression to check if any of the Font Awesome classes are present in the input string\n\tconst faClassRegex = new RegExp(`\\\\b(${faClasses.join('|')})\\\\b`, 'i');\n\n\t// Return true if any class matches, false otherwise\n\treturn faClassRegex.test(input);\n}\n\n/**\n * Checks if a string contains the 'bi' class using a regular expression in TypeScript.\n *\n * @param {string} input - The `input` parameter in the `containsBootstrapIconsClass` function is a string that represents a CSS\n * class or a list of CSS classes. The function checks if the input string contains the Bootstrap Icons class 'bi'.\n *\n * @returns returns a boolean value - `true` if the input string contains the 'bi'\n * class, and `false` otherwise.\n */\nexport function containsBootstrapIconsClass(input: string): boolean {\n\t// Define a regular expression pattern to match 'bi' class\n\tconst biClassRegex = /\\bbi\\b/;\n\n\t// Return true if the class matches, false otherwise\n\treturn biClassRegex.test(input);\n}\n","/**\n * @file icon.component.ts\n * @description Angular component for rendering icons with support for different icon libraries.\n */\n\nimport { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { Icon } from '../../interfaces/paginable-table-header';\nimport { containsFontAwesomeClass } from '../../utils/icons';\n\n/**\n * Defines the supported icon types.\n * @typedef {'font-awesome' | 'material' | 'bootstrap'} IconType\n */\nexport type IconType = 'font-awesome' | 'material' | 'bootstrap';\n\n/**\n * @component HubIconComponent\n * @selector hub-icon\n * @description A versatile icon component that supports multiple icon libraries.\n *\n * @example\n * <hub-icon [config]=\"iconConfig\"></hub-icon>\n */\n@Component({\n\tselector: 'hub-icon, ng-hub-ui-icon',\n\tstandalone: true,\n\timports: [NgClass],\n\ttemplateUrl: './icon.component.html',\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class HubIconComponent implements Icon {\n\t/**\n\t * @input config\n\t * @description Sets the icon configuration. Can be a string or an Icon object.\n\t * @type {string | Icon}\n\t */\n\t@Input({ required: true })\n\tset config(value: string | Icon | undefined) {\n\t\tif (!value) {\n\t\t\tvalue = '';\n\t\t}\n\t\tif (typeof value === 'string') {\n\t\t\tthis.value = value;\n\t\t} else {\n\t\t\tthis.type = value.type ?? null;\n\t\t\tthis.variant = value.variant ?? '';\n\t\t\tthis.value = value.value ?? null;\n\t\t}\n\t}\n\n\t/**\n\t * @input type\n\t * @description The type of icon (font-awesome, material, or bootstrap).\n\t * @type {IconType}\n\t */\n\ttype: IconType;\n\n\t/**\n\t * @input value\n\t * @description The icon value or class name.\n\t * @type {string}\n\t */\n\tvalue: string;\n\n\t/**\n\t * @input variant\n\t * @description The variant of the icon (if applicable).\n\t * @type {string}\n\t */\n\tvariant: string;\n\n\t/**\n\t * @getter classlist\n\t * @description Computes the CSS classes for the icon based on its type and value.\n\t * @returns {string | null} The computed CSS class string or null if no value is set.\n\t */\n\tget classlist(): string | null {\n\t\tif (!this.value) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (!this.type) {\n\t\t\treturn this.value;\n\t\t}\n\n\t\tconst classlist: Array<string> = [];\n\t\tif (['font-awesome', 'bootstrap'].includes(this.type)) {\n\t\t\tif (Array.isArray(this.value)) {\n\t\t\t\tclasslist.push(...this.value);\n\t\t\t} else {\n\t\t\t\tclasslist.push(...this.value.split(' '));\n\t\t\t}\n\t\t}\n\n\t\tswitch (this.type) {\n\t\t\tcase 'font-awesome':\n\t\t\t\tif (!containsFontAwesomeClass(classlist.join(' '))) {\n\t\t\t\t\tclasslist.push('fa');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'bootstrap':\n\t\t\t\tif (!containsFontAwesomeClass(classlist.join(' '))) {\n\t\t\t\t\tclasslist.push('bs');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'material':\n\t\t\t\tclasslist.push('material-symbols-outlined');\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn classlist.join(' ');\n\t}\n\n\t/**\n\t * @getter content\n\t * @description Gets the content for material icons.\n\t * @returns {string | null} The icon content for material icons, or null for other types.\n\t */\n\tget content(): string | null {\n\t\treturn ['material'].includes(this.type) ? this.value : null;\n\t}\n}\n","@if (value) {\n  <i [ngClass]=\"classlist\">\n    {{ content }}\n  </i>\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n\tselector: '[listItemTpt]'\n})\nexport class PaginableListItemDirective {\n\tconstructor(public template: TemplateRef<any>) {}\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n\tselector: '[noDataTpt], [paginableTableNotFound]',\n\tstandalone: true\n})\nexport class PaginableTableNotFoundDirective {\n\tconstructor(public template: TemplateRef<any>) {}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n\tname: 'ucfirst',\n\tstandalone: true\n})\nexport class UcfirstPipe implements PipeTransform {\n\ttransform(value: string = ''): string {\n\t\treturn value.charAt(0).toUpperCase() + value.slice(1);\n\t}\n}\n","import { Component, input, model } from '@angular/core';\n\n@Component({\n\tselector: 'hub-paginator, paginable-table-paginator',\n\tstandalone: true,\n\ttemplateUrl: './paginator.component.html',\n\tstyleUrls: ['./paginator.component.scss']\n})\nexport class PaginatorComponent {\n\treadonly page = model<number>(1);\n\treadonly numberOfPages = input<number | null>();\n}\n","<nav class=\"pager\" aria-label=\"Page navigation\">\n\t<ul class=\"pager pagination pager__list\">\n\t\t<li\n\t\t\tclass=\"page-item pager__item\"\n\t\t\t[class.pager__item--disabled]=\"page() === 1\"\n\t\t\t[class.disabled]=\"page() === 1\"\n\t\t>\n\t\t\t<a\n\t\t\t\trole=\"button\"\n\t\t\t\tclass=\"page-link pager__link\"\n\t\t\t\thref=\"javascript:{}\"\n\t\t\t\t(click)=\"page.set(1)\"\n\t\t\t>\n\t\t\t\t<i class=\"pager__icon fa fa-angle-double-left\"></i>\n\t\t\t</a>\n\t\t</li>\n\t\t<li\n\t\t\tclass=\"page-item pager__item\"\n\t\t\t[class.pager__item--disabled]=\"page() <= 1\"\n\t\t\t[class.disabled]=\"page() <= 1\"\n\t\t>\n\t\t\t<a\n\t\t\t\trole=\"button\"\n\t\t\t\tclass=\"page-link pager__link\"\n\t\t\t\thref=\"javascript:{}\"\n\t\t\t\taria-label=\"Previous\"\n\t\t\t\t(click)=\"page.set(page() - 1)\"\n\t\t\t>\n\t\t\t\t<span class=\"pager__icon-wrapper\" aria-hidden=\"true\">\n\t\t\t\t\t<i class=\"pager__icon fa fa-angle-left\"></i>\n\t\t\t\t</span>\n\t\t\t</a>\n\t\t</li>\n\t\t@if (page() - 1 > 1) {\n\t\t\t<li class=\"page-item pager__item pager__item--disabled disabled\">\n\t\t\t\t<a\n\t\t\t\t\trole=\"button\"\n\t\t\t\t\tclass=\"page-link pager__link\"\n\t\t\t\t\thref=\"javascript:{}\"\n\t\t\t\t\t>...</a\n\t\t\t\t>\n\t\t\t</li>\n\t\t}\n\t\t<li class=\"page-item pager__item\">\n\t\t\t@if (page() - 1 >= 1) {\n\t\t\t\t<a\n\t\t\t\t\trole=\"button\"\n\t\t\t\t\tclass=\"page-link pager__link\"\n\t\t\t\t\thref=\"javascript:{}\"\n\t\t\t\t\t(click)=\"page.set(page() - 1)\"\n\t\t\t\t\t>{{ page() - 1 }}</a\n\t\t\t\t>\n\t\t\t}\n\t\t</li>\n\t\t<li class=\"page-item pager__item pager__item--active active\">\n\t\t\t<a\n\t\t\t\trole=\"button\"\n\t\t\t\tclass=\"page-link pager__link\"\n\t\t\t\thref=\"javascript:{}\"\n\t\t\t\t>{{ page() }}</a\n\t\t\t>\n\t\t</li>\n\t\t@if (numberOfPages()) {\n\t\t\t<li class=\"page-item pager__item\">\n\t\t\t\t@if (page() + 1 <= numberOfPages()!) {\n\t\t\t\t\t<a\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\tclass=\"page-link pager__link\"\n\t\t\t\t\t\thref=\"javascript:{}\"\n\t\t\t\t\t\t(click)=\"page.set(page() + 1)\"\n\t\t\t\t\t\t>{{ page() + 1 }}</a\n\t\t\t\t\t>\n\t\t\t\t}\n\t\t\t</li>\n\t\t\t@if (page() + 1 < numberOfPages()!) {\n\t\t\t\t<li\n\t\t\t\t\tclass=\"page-item pager__item pager__item--disabled disabled\"\n\t\t\t\t>\n\t\t\t\t\t<a\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\tclass=\"page-link pager__link\"\n\t\t\t\t\t\thref=\"javascript:{}\"\n\t\t\t\t\t\t>...</a\n\t\t\t\t\t>\n\t\t\t\t</li>\n\t\t\t}\n\t\t\t<li\n\t\t\t\tclass=\"page-item pager__item\"\n\t\t\t\t[class.pager__item--disabled]=\"page() >= numberOfPages()!\"\n\t\t\t\t[class.disabled]=\"page() >= numberOfPages()!\"\n\t\t\t>\n\t\t\t\t<a\n\t\t\t\t\trole=\"button\"\n\t\t\t\t\tclass=\"page-link pager__link\"\n\t\t\t\t\thref=\"javascript:{}\"\n\t\t\t\t\taria-label=\"Next\"\n\t\t\t\t\t(click)=\"page.set(page() + 1)\"\n\t\t\t\t>\n\t\t\t\t\t<span class=\"pager__icon-wrapper\" aria-hidden=\"true\">\n\t\t\t\t\t\t<i class=\"pager__icon fa fa-angle-right\"></i>\n\t\t\t\t\t</span>\n\t\t\t\t</a>\n\t\t\t</li>\n\t\t\t<li\n\t\t\t\tclass=\"page-item pager__item\"\n\t\t\t\t[class.pager__item--disabled]=\"page() === numberOfPages()\"\n\t\t\t\t[class.disabled]=\"page() === numberOfPages()\"\n\t\t\t>\n\t\t\t\t<a\n\t\t\t\t\trole=\"button\"\n\t\t\t\t\tclass=\"page-link pager__link\"\n\t\t\t\t\thref=\"javascript:{}\"\n\t\t\t\t\t(click)=\"page.set(numberOfPages() ?? 1)\"\n\t\t\t\t>\n\t\t\t\t\t<i class=\"pager__icon fa fa-angle-double-right\"></i>\n\t\t\t\t</a>\n\t\t\t</li>\n\t\t} @else {\n\t\t\t<li class=\"page-item pager__item\">\n\t\t\t\t<a\n\t\t\t\t\trole=\"button\"\n\t\t\t\t\tclass=\"page-link pager__link\"\n\t\t\t\t\thref=\"javascript:{}\"\n\t\t\t\t\taria-label=\"Next\"\n\t\t\t\t\t(click)=\"page.set(page() + 1)\"\n\t\t\t\t>\n\t\t\t\t\t<span class=\"pager__icon-wrapper\" aria-hidden=\"true\">\n\t\t\t\t\t\t<i class=\"pager__icon fa fa-angle-right\"></i>\n\t\t\t\t\t</span>\n\t\t\t\t</a>\n\t\t\t</li>\n\t\t}\n\t</ul>\n</nav>\n","import { CommonModule } from '@angular/common';\nimport {\n\tComponent,\n\tContentChild,\n\tInput,\n\tTemplateRef,\n\tinject\n} from '@angular/core';\nimport {\n\tFormArray,\n\tFormBuilder,\n\tFormControl,\n\tNG_VALUE_ACCESSOR,\n\tReactiveFormsModule\n} from '@angular/forms';\nimport { PaginableListItemDirective } from '../../../directives/paginable-list-item.directive';\nimport { PaginableTableNotFoundDirective } from '../../../directives/paginable-table-not-found.directive';\nimport { ListClickEvent } from '../../../interfaces/item-click-event';\nimport { PaginableTableDropdown } from '../../../interfaces/paginable-table-dropdown';\nimport { PaginableTableOptions } from '../../../interfaces/paginable-table-options';\nimport { RowButton } from '../../../interfaces/row-button';\nimport { UcfirstPipe } from '../../../pipes/ucfirst.pipe';\nimport { getValue } from '../../../utils';\nimport { PaginatorComponent } from '../../paginator/paginator.component';\n\n@Component({\n\tselector: 'hub-list, hub-ui-list, hub-paginable-list',\n\ttemplateUrl: './paginable-list.component.html',\n\tstyleUrls: ['./paginable-list.component.scss'],\n\thost: {\n\t\tclass: 'd-flex flex-column gap-4'\n\t},\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: PaginableListComponent,\n\t\t\tmulti: true\n\t\t}\n\t],\n\timports: [\n\t\tCommonModule,\n\t\tReactiveFormsModule,\n\t\tPaginatorComponent,\n\t\tPaginableTableNotFoundDirective,\n\t\tUcfirstPipe\n\t],\n\tstandalone: true\n})\nexport class PaginableListComponent<T = any> {\n\t#fb = inject(FormBuilder);\n\n\t@Input() bindValue?: string;\n\t@Input() bindLabel: string = 'label';\n\t@Input() bindChildren: string = 'children';\n\n\t@Input() selectable!: string | null;\n\n\tprivate _options: PaginableTableOptions = {\n\t\tcursor: 'default',\n\t\thoverableRows: false,\n\t\tstriped: null,\n\t\tvariant: null,\n\t\tsearchable: false,\n\t\tcollapsed: true\n\t};\n\tget options(): PaginableTableOptions {\n\t\treturn this._options;\n\t}\n\t@Input()\n\tset options(v: PaginableTableOptions) {\n\t\tthis._options = v;\n\t\tthis.buildForm(this.form, this._items);\n\t}\n\n\tprivate _items!: Array<T>;\n\t@Input()\n\tget items(): Array<T> {\n\t\treturn this._items;\n\t}\n\tset items(v: Array<T>) {\n\t\tthis._items = v ?? [];\n\t\tthis.form.clear();\n\t\tthis.buildForm(this.form, this._items);\n\t}\n\n\t@Input() clickFn: (event: ListClickEvent<T>) => void | Promise<void>;\n\n\tform: FormArray = this.#fb.array([]);\n\n\tvalue: Array<T & { collapsed: boolean }> = [];\n\n\t// NOTE: Templates\n\n\t@ContentChild(PaginableListItemDirective, { read: TemplateRef })\n\titemTpt?: TemplateRef<any>;\n\t@ContentChild(PaginableTableNotFoundDirective, { read: TemplateRef })\n\tnoDataTpt?: TemplateRef<any>;\n\n\t// NOTE: Otros\n\tisDisabled: boolean = false;\n\n\tonChange: any = () => {};\n\tonTouch: any = () => {};\n\n\t// NOTE: Filters\n\n\tsearchFG = this.#fb.control({});\n\n\t// NOTE: Batch actions\n\n\t/**\n\t * Collection of actions for items\n\t *\n\t * @type {PaginableTableRowAction[]}\n\t * @memberof PaginableTableComponent\n\t */\n\tprivate _batchActions: Array<PaginableTableDropdown | RowButton> = [];\n\t@Input()\n\tget batchActions(): Array<PaginableTableDropdown | RowButton> {\n\t\treturn this._batchActions;\n\t}\n\tset batchActions(v: Array<PaginableTableDropdown | RowButton>) {\n\t\tthis._batchActions = v.map((b) => {\n\t\t\tif ((b as PaginableTableDropdown).buttons) {\n\t\t\t\tb = { fill: null, position: 'start', color: 'light', ...b };\n\t\t\t}\n\t\t\treturn b;\n\t\t});\n\t}\n\n\t// NOTE: Control access value\n\n\twriteValue(value: Array<T> = []): void {\n\t\t// this.value = this.buildValue(value);\n\t}\n\n\tregisterOnChange(fn: any): void {\n\t\tthis.onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: any): void {\n\t\tthis.onTouch = fn;\n\t}\n\n\tsetDisabledState?(isDisabled: boolean): void {\n\t\tthis.isDisabled = isDisabled;\n\t}\n\n\t/**\n\t * Handles the action to be executed in a batch\n\t *\n\t * @param {Event} event\n\t * @memberof PaginableTableComponent\n\t */\n\thandleBatchAction(event: any) {\n\t\tevent.handler(this.value);\n\t}\n\n\tbuildForm(form: FormArray, items: Array<any>) {\n\t\tform.clear();\n\t\tfor (const index in items) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(items, index)) {\n\t\t\t\tconst item = items[index];\n\n\t\t\t\tconst group = this.#fb.group({\n\t\t\t\t\tselected: [true],\n\t\t\t\t\tcollapsed: [this.options.collapsed],\n\t\t\t\t\tdata: [item],\n\t\t\t\t\tchildren: this.#fb.array([])\n\t\t\t\t});\n\n\t\t\t\tgroup.patchValue(item);\n\n\t\t\t\tif (item[this.bindChildren]?.length) {\n\t\t\t\t\tthis.buildForm(\n\t\t\t\t\t\tgroup.get('children') as FormArray,\n\t\t\t\t\t\titem[this.bindChildren]\n\t\t\t\t\t);\n\t\t\t\t\t// newItem['children'] = this.buildValue(children);\n\t\t\t\t}\n\t\t\t\tform.push(group);\n\t\t\t}\n\t\t}\n\t}\n\n\tbuildValue(items: Array<T>): Array<T & { collapsed: boolean }> {\n\t\tconst value: Array<T & { collapsed: boolean }> = [];\n\t\tfor (const item of items) {\n\t\t\tconst { children, ...newItem } = item as any;\n\t\t\tif (children?.length) {\n\t\t\t\tnewItem['children'] = this.buildValue(children);\n\t\t\t}\n\t\t\tvalue.push({\n\t\t\t\t...newItem,\n\t\t\t\tcollapsed: true\n\t\t\t});\n\t\t}\n\t\treturn value;\n\t}\n\n\ttoggleCollapsed(control: FormControl) {\n\t\tcontrol.patchValue(!control.value);\n\t}\n\n\t/**\n\t * Emits a structured click event for the clicked list item, including metadata and state.\n\t *\n\t * This method is typically called when an item in the list is clicked. It extracts contextual\n\t * information such as depth, index, selection state, and expansion state, then passes it to\n\t * the user-defined `clickFn` callback.\n\t *\n\t * If a `bindLabel` is configured, the emitted `value` will be derived from that property;\n\t * otherwise, the full item will be passed as `value`.\n\t *\n\t * @param item - The list item object, including `selected` and `collapsed` state.\n\t * @param depth - The nesting depth of the item within a tree structure (0 = root level).\n\t * @param index - The position of the item in the current visible list or page.\n\t * @param event - The native `MouseEvent` that triggered the click.\n\t *\n\t * @remarks\n\t * If the `clickFn` callback is not defined, the method exits early and no event is emitted.\n\t */\n\tonItemClick(\n\t\t{ collapsed, selected, ...item },\n\t\tdepth: number,\n\t\tindex: number,\n\t\tevent: MouseEvent\n\t) {\n\t\tif (!this.clickFn) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.clickFn({\n\t\t\tdepth,\n\t\t\tindex,\n\t\t\tselected,\n\t\t\tcollapsed,\n\t\t\tvalue: this.bindLabel ? getValue(item, this.bindLabel) : item,\n\t\t\titem: item as T,\n\t\t\tmouseEvent: event\n\t\t});\n\t}\n\n\tonPageClicked(page: number) {\n\t\t// if (!this.data) {\n\t\t// \treturn;\n\t\t// }\n\t\t// this.data.currentPage = page;\n\t\t// this.triggerTheParamChanges();\n\t}\n\n\tfilter() {\n\t\t// if (!this.data) {\n\t\t// \treturn;\n\t\t// }\n\t\t// this.data.currentPage = 1;\n\t\t// this.filterChange.emit({\n\t\t// \tsearchText: this.searchFG?.value ?? null,\n\t\t// \tspecificSearch: this.specificSearchFG?.value ?? null\n\t\t// });\n\t}\n}\n","@if (batchActions.length || options.searchable) {\n\t<div class=\"d-flex justify-content-between gap-3\">\n\t\t<div class=\"ms-auto\">\n\t\t\t<div class=\"d-flex justify-content-end gap-2\">\n\t\t\t\t@if (options.searchable) {\n\t\t\t\t\t<div class=\"input-group search_input-group\">\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tclass=\"form-control border border-light search_input\"\n\t\t\t\t\t\t\t[formControl]=\"searchFG\"\n\t\t\t\t\t\t\t[placeholder]=\"'SEARCH' | ucfirst\"\n\t\t\t\t\t\t\t(keyup.enter)=\"filter()\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div class=\"input-group-append\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclass=\"btn btn-light search_button\"\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t(click)=\"filter()\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<i class=\"fa fa-search\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n}\n\n<ng-container\n\t[ngTemplateOutlet]=\"containerTpt\"\n\t[ngTemplateOutletContext]=\"{\n\t\tformArray: form,\n\t\tisRoot: true,\n\t\titems: items,\n\t\tdepth: 0\n\t}\"\n></ng-container>\n\n<ng-template\n\t#containerTpt\n\tlet-formArray=\"formArray\"\n\tlet-isRoot=\"isRoot\"\n\tlet-items=\"items\"\n\tlet-depth=\"depth\"\n>\n\t<ul class=\"list-group list-group-flush tree-list\" [class.root]=\"isRoot\">\n\t\t@for (\n\t\t\tformGroup of formArray.controls;\n\t\t\ttrack formGroup;\n\t\t\tlet index = $index\n\t\t) {\n\t\t\t<li\n\t\t\t\tclass=\"list-group-item tree-list__node\"\n\t\t\t\t[class.clickable-item]=\"clickFn\"\n\t\t\t\t[formGroup]=\"formGroup\"\n\t\t\t\t(click)=\"\n\t\t\t\t\tonItemClick(formGroup.value, depth, index, $event);\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t\t$event.stopPropagation()\n\t\t\t\t\"\n\t\t\t>\n\t\t\t\t@if (formGroup.value; as item) {\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"d-flex justify-content-between align-items-center gap-2\"\n\t\t\t\t\t>\n\t\t\t\t\t\t@if (selectable === 'multiple') {\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tclass=\"form-check-input tree-list__node-checkbox\"\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\tformControlName=\"selected\"\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<div class=\"tree-list__node-label\">\n\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"itemTpt || defaultItemtTpt\"\n\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\t\tdata: items[index],\n\t\t\t\t\t\t\t\t\tdepth,\n\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\tcollapsed:\n\t\t\t\t\t\t\t\t\t\t!!formGroup.get('collapsed').value,\n\t\t\t\t\t\t\t\t\tselected: formGroup.get('selected').value\n\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"tree-list__node-buttons d-flex align-items-center gap-2\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@if (item[bindChildren]?.length) {\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclass=\"btn\"\n\t\t\t\t\t\t\t\t\t(click)=\"\n\t\t\t\t\t\t\t\t\t\ttoggleCollapsed(\n\t\t\t\t\t\t\t\t\t\t\tformGroup.get('collapsed')\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t$event.preventDefault();\n\t\t\t\t\t\t\t\t\t\t$event.stopPropagation()\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\t\t\tclass=\"fas\"\n\t\t\t\t\t\t\t\t\t\t[ngClass]=\"\n\t\t\t\t\t\t\t\t\t\t\titem.collapsed\n\t\t\t\t\t\t\t\t\t\t\t\t? 'fa-chevron-down'\n\t\t\t\t\t\t\t\t\t\t\t\t: 'fa-chevron-up'\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t></i>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t@if (item[bindChildren]?.length && !item.collapsed) {\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"containerTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\tformArray: formGroup.get('children'),\n\t\t\t\t\t\t\t\titems: items[index][bindChildren],\n\t\t\t\t\t\t\t\tdepth: depth + 1\n\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</li>\n\t\t}\n\t</ul>\n</ng-template>\n\n<ng-template #noDataRowTpt>\n\t<li class=\"list-group-item\">\n\t\t<ng-container [ngTemplateOutlet]=\"noDataTpt || defaultNoDataTpt\">\n\t\t</ng-container>\n\t</li>\n</ng-template>\n\n<ng-template #defaultNoDataTpt>\n\t<div class=\"alert alert-info d-flex align-items-center m-4\" role=\"alert\">\n\t\t<i class=\"fa fa-info fa-2x me-4 mr-4\" aria-hidden=\"true\"></i>\n\t\t{{ 'NO_RESULTS_FOUND' | ucfirst }}\n\t</div>\n</ng-template>\n\n<ng-template #defaultItemtTpt let-data=\"data\">\n\t{{ data[bindLabel] }}\n</ng-template>\n","import {\n\tChangeDetectorRef,\n\tinject,\n\tOnDestroy,\n\tPipe,\n\tPipeTransform\n} from '@angular/core';\nimport { Observable, Subscription } from 'rxjs';\n\n/**\n * A standalone pipe that unwraps the value of an observable or returns the value directly if it's not an observable.\n *\n * @description\n * The `UnwrapAsyncPipe` is used to unwrap the value emitted by an observable or return the value directly if it's not an observable.\n * It subscribes to the observable and returns the emitted value. If the input is not an observable, it simply returns the value.\n *\n * @usageNotes\n * ```html\n * <div>{{ observableOrValue | unwrapAsync }}</div>\n * ```\n *\n * @publicApi\n */\n@Pipe({\n\tname: 'unwrapAsync',\n\tstandalone: true,\n\tpure: false\n})\nexport class UnwrapAsyncPipe<T = any> implements PipeTransform, OnDestroy {\n\t#cdr = inject(ChangeDetectorRef);\n\n\t/**\n\t * The unwrapped value of the observable or the direct value.\n\t */\n\tvalue: T | null = null;\n\n\t/**\n\t * The subscription to the observable.\n\t */\n\tsubscription: Subscription | null = null;\n\n\t/**\n\t * Performs cleanup tasks when the pipe is destroyed.\n\t */\n\tngOnDestroy(): void {\n\t\tthis.unsubscribe();\n\t}\n\n\t/**\n\t * Transforms the input value.\n\t *\n\t * @param value The input value to transform. It can be an observable or a direct value.\n\t * @returns The unwrapped value of the observable or the direct value.\n\t */\n\ttransform(value: T | Observable<T>): T | null {\n\t\tif (value instanceof Observable) {\n\t\t\tthis.unsubscribe();\n\t\t\tthis.subscription = value.subscribe((result) => {\n\t\t\t\tthis.value = result;\n\t\t\t\tthis.#cdr.markForCheck();\n\t\t\t});\n\t\t} else {\n\t\t\tthis.value = value;\n\t\t}\n\t\treturn this.value;\n\t}\n\n\t/**\n\t * Unsubscribes from the current subscription.\n\t */\n\tprivate unsubscribe(): void {\n\t\tif (this.subscription) {\n\t\t\tthis.subscription.unsubscribe();\n\t\t\tthis.subscription = null;\n\t\t}\n\t}\n}\n","import { NgClass, NgStyle } from '@angular/common';\nimport {\n\tComponent,\n\tElementRef,\n\tEmbeddedViewRef,\n\tHostListener,\n\tInput,\n\tTemplateRef,\n\tViewChild,\n\tViewContainerRef,\n\tinject,\n\tinput\n} from '@angular/core';\nimport { TableRowEvent } from '../../interfaces';\nimport { PaginableTableDropdown } from '../../interfaces/paginable-table-dropdown';\nimport { UnwrapAsyncPipe } from '../../pipes/unwrap-async.pipe';\nimport { HubIconComponent } from '../icon/icon.component';\n\n@Component({\n\tselector: 'hub-table-dropdown, paginable-table-dropdown',\n\n\tstandalone: true,\n\timports: [NgClass, NgStyle, HubIconComponent, UnwrapAsyncPipe],\n\ttemplateUrl: './paginable-table-dropdown.component.html',\n\tstyleUrls: ['./paginable-table-dropdown.component.scss']\n})\nexport class PaginableTableDropdownComponent<T = any> {\n\t#elementRef = inject(ElementRef);\n\n\t@ViewChild('dropdownTpt') dropdownTpt!: TemplateRef<any>;\n\n\tprivate vcr = inject(ViewContainerRef);\n\tprivate embeddedView: EmbeddedViewRef<any> | null = null;\n\tprivate renderedElement: HTMLElement | null = null;\n\n\treadonly row = input<TableRowEvent<T>>();\n\n\t#options: PaginableTableDropdown = { buttons: [] };\n\n\t@Input()\n\tget options(): PaginableTableDropdown {\n\t\treturn this.#options;\n\t}\n\tset options(v: PaginableTableDropdown) {\n\t\tthis.#options = {\n\t\t\tposition: 'end',\n\t\t\tfill: 'clear',\n\t\t\tcolor: 'muted',\n\t\t\t...v\n\t\t};\n\t\tif (this.#options.fill === 'clear') {\n\t\t\tthis.buttonClass = 'btn text-' + (this.#options.color ?? 'muted');\n\t\t} else {\n\t\t\tthis.buttonClass =\n\t\t\t\t'btn ' +\n\t\t\t\t['btn', this.#options.fill, this.#options.color]\n\t\t\t\t\t.filter((o) => o)\n\t\t\t\t\t.join('-');\n\t\t}\n\t}\n\n\treadonly appendTo = input<HTMLElement | 'body' | null>('body');\n\n\treadonly disabled = input<boolean>(false);\n\n\tbuttonClass: string | null = null;\n\tshown: boolean = false;\n\n\t/**\n\t * Checks if the clicked element is outside the component's native element and if the component is currently shown, and if so,\n\t * it closes the component.\n\t *\n\t * @param event - Represents the event that triggered the clickOut function. It contains information about the event, such as\n\t * the target element that was clicked.\n\t */\n\t@HostListener('document:click', ['$event'])\n\tclickOut(event) {\n\t\tif (\n\t\t\t!this.#elementRef.nativeElement.contains(event.target) &&\n\t\t\tthis.shown\n\t\t) {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\ttoggle() {\n\t\tif (this.shown) {\n\t\t\tthis.close();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.shown = true;\n\n\t\tconst appendTo = this.appendTo();\n\t\tconst target =\n\t\t\tappendTo === 'body'\n\t\t\t\t? document.body\n\t\t\t\t: appendTo instanceof HTMLElement\n\t\t\t\t\t? appendTo\n\t\t\t\t\t: this.#elementRef.nativeElement;\n\n\t\t// Crea la vista\n\t\tthis.embeddedView = this.vcr.createEmbeddedView(this.dropdownTpt);\n\t\tthis.embeddedView.detectChanges();\n\n\t\tconst [element] = this.embeddedView.rootNodes as HTMLElement[];\n\t\tthis.renderedElement = element;\n\n\t\tconst button = this.#elementRef.nativeElement.querySelector('button');\n\t\tconst rect = button.getBoundingClientRect();\n\n\t\tObject.assign(element.style, {\n\t\t\tposition: 'absolute',\n\t\t\tzIndex: '1050',\n\t\t\ttop: `${rect.bottom + window.scrollY}px`,\n\t\t\tleft: `${rect.left + window.scrollX}px`\n\t\t});\n\n\t\ttarget.appendChild(element);\n\t}\n\n\t/**\n\t * Sets the \"shown\" property to false.\n\t */\n\tclose() {\n\t\tthis.shown = false;\n\n\t\tif (this.embeddedView) {\n\t\t\tthis.embeddedView.destroy();\n\t\t\tthis.embeddedView = null;\n\t\t}\n\n\t\tif (this.renderedElement && this.renderedElement.parentElement) {\n\t\t\tthis.renderedElement.parentElement.removeChild(\n\t\t\t\tthis.renderedElement\n\t\t\t);\n\t\t\tthis.renderedElement = null;\n\t\t}\n\t}\n}\n","<div class=\"btn-group\" [class.show]=\"shown\">\n\t<button\n\t\tclass=\"px-2 dropdown-toggle\"\n\t\ttype=\"button\"\n\t\t[ngClass]=\"buttonClass\"\n\t\t[attr.title]=\"options.tooltip\"\n\t\tdata-toggle=\"dropdown\"\n\t\t[attr.aria-expanded]=\"shown\"\n\t\t(click)=\"toggle(); $event.stopPropagation()\"\n\t\t[disabled]=\"disabled()\"\n\t>\n\t\t<div class=\"d-flex flex-nowrap align-items-center gap-1\">\n\t\t\t<i [ngClass]=\"options.icon || 'fa fa-ellipsis-v'\"></i>\n\t\t\t@if (options.title) {\n\t\t\t\t{{ options.title }}\n\t\t\t}\n\t\t</div>\n\t</button>\n\t<ng-template #dropdownTpt>\n\t\t<div\n\t\t\tclass=\"dropdown-menu dropdown-menu-{{ options.position }}\"\n\t\t\t[class.show]=\"shown\"\n\t\t\t[ngStyle]=\"{\n\t\t\t\tright:\n\t\t\t\t\toptions.position == 'end' || options.position === 'right'\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: 'initial'\n\t\t\t}\"\n\t\t>\n\t\t\t@for (dropdownItem of options.buttons; track dropdownItem) {\n\t\t\t\t@if (!dropdownItem.hidden) {\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"dropdown-item\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t[attr.title]=\"dropdownItem.title | unwrapAsync\"\n\t\t\t\t\t\t[ngClass]=\"\n\t\t\t\t\t\t\tdropdownItem.color\n\t\t\t\t\t\t\t\t? 'text-' + dropdownItem.color\n\t\t\t\t\t\t\t\t: 'text-dark'\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t(click)=\"\n\t\t\t\t\t\t\trow() &&\n\t\t\t\t\t\t\t\tdropdownItem.handler &&\n\t\t\t\t\t\t\t\tdropdownItem.handler(row())\n\t\t\t\t\t\t\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div class=\"d-flex align-items-center gap-2\">\n\t\t\t\t\t\t\t<ng-hub-ui-icon\n\t\t\t\t\t\t\t\t[config]=\"dropdownItem.icon\"\n\t\t\t\t\t\t\t></ng-hub-ui-icon>\n\t\t\t\t\t\t\t@if (dropdownItem.label) {\n\t\t\t\t\t\t\t\t{{ dropdownItem.label | unwrapAsync }}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t</ng-template>\n</div>\n","import {\n\tChangeDetectorRef,\n\tOnDestroy,\n\tPipe,\n\tPipeTransform,\n\tinject\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { PaginableTranslationService } from '../services/paginable-translation.service';\nimport { equals, interpolateString, isDefined } from '../utils';\n\n@Pipe({\n\tname: 'translate',\n\tstandalone: true,\n\tpure: false\n})\nexport class TranslatePipe implements PipeTransform, OnDestroy {\n\tprivate _ref = inject(ChangeDetectorRef);\n\tprivate _paginableTranslationSvc = inject(PaginableTranslationService);\n\n\tvalue: string = '';\n\tlastKey: string | null = null;\n\tlastParams: any[] = [];\n\n\ttranslationSubscription: Subscription | undefined;\n\n\t/**\n\t * Updates the value of a key by interpolating the translation and marking for change detection.\n\t *\n\t * @param {string} key - a string representing the translation key. This key is used to retrieve the translation value from the\n\t * translation service.\n\t * @param {Object} [interpolateParams] - an optional object that contains key-value pairs used for interpolating dynamic values\n\t * into the translated string. These values can be placeholders in the translation string that are replaced with actual values at runtime.\n\t */\n\tupdateValue(key: string, interpolateParams?: Object): void {\n\t\tconst value = interpolateString(\n\t\t\tthis._paginableTranslationSvc.getTranslation(key),\n\t\t\tinterpolateParams\n\t\t);\n\t\tthis.value = value !== undefined ? value : key;\n\t\tthis.lastKey = key;\n\t\tthis._ref.markForCheck();\n\t}\n\n\t/**\n\t * Takes a query string and optional arguments, checks if the query and arguments have changed since the last call, parses the\n\t * arguments if they are in string format, updates the value based on the query and arguments, and returns the value.\n\t *\n\t * @param {string} query - a string that represents the translation key or query that needs to be transformed.\n\t * @param {any[]} args - a rest parameter, which means it can accept any number of arguments. In this case, it is used to pass\n\t * additional parameters to the `transform` function. The `...args` syntax allows you to pass multiple arguments separated by\n\t * commas, and they will be collected into\n\t *\n\t * @returns the value of the translation for the given query and arguments.\n\t */\n\ttransform(query: string, ...args: any[]): any {\n\t\tif (!query || !query.length) {\n\t\t\treturn query;\n\t\t}\n\n\t\t// if we ask another time for the same key, return the last value\n\t\tif (equals(query, this.lastKey) && equals(args, this.lastParams)) {\n\t\t\treturn this.value;\n\t\t}\n\n\t\tlet interpolateParams: Object | undefined = undefined;\n\t\tif (isDefined(args[0]) && args.length) {\n\t\t\tif (typeof args[0] === 'string' && args[0].length) {\n\t\t\t\t// we accept objects written in the template such as {n:1}, {'n':1}, {n:'v'}\n\t\t\t\t// which is why we might need to change it to real JSON objects such as {\"n\":1} or {\"n\":\"v\"}\n\t\t\t\tlet validArgs: string = args[0]\n\t\t\t\t\t.replace(/(\\')?([a-zA-Z0-9_]+)(\\')?(\\s)?:/g, '\"$2\":')\n\t\t\t\t\t.replace(/:(\\s)?(\\')(.*?)(\\')/g, ':\"$3\"');\n\t\t\t\ttry {\n\t\t\t\t\tinterpolateParams = JSON.parse(validArgs);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tthrow new SyntaxError(\n\t\t\t\t\t\t`Wrong parameter in TranslatePipe. Expected a valid Object, received: ${args[0]}`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (typeof args[0] === 'object' && !Array.isArray(args[0])) {\n\t\t\t\tinterpolateParams = args[0];\n\t\t\t}\n\t\t}\n\n\t\t// store the query, in case it changes\n\t\tthis.lastKey = query;\n\n\t\t// store the params, in case they change\n\t\tthis.lastParams = args;\n\n\t\t// set the value\n\t\tthis.updateValue(query, interpolateParams);\n\n\t\t// if there is a subscription to onLangChange, clean it\n\t\tthis._dispose();\n\n\t\tif (!this.translationSubscription) {\n\t\t\tthis.translationSubscription =\n\t\t\t\tthis._paginableTranslationSvc.translationObserver.subscribe(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tif (this.lastKey) {\n\t\t\t\t\t\t\tthis.lastKey = null;\n\t\t\t\t\t\t\tthis.updateValue(query, interpolateParams);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t}\n\t\treturn this.value;\n\t}\n\n\t/**\n\t * Clean any existing subscription to change events\n\t */\n\tprivate _dispose(): void {\n\t\tif (typeof this.translationSubscription !== 'undefined') {\n\t\t\tthis.translationSubscription.unsubscribe();\n\t\t\tthis.translationSubscription = undefined;\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._dispose();\n\t}\n}\n","import { Component, forwardRef, Input } from '@angular/core';\nimport {\n\tControlValueAccessor,\n\tFormsModule,\n\tNG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport { UcfirstPipe } from '../../pipes/ucfirst.pipe';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\n\n@Component({\n\tselector: 'hub-table-range-input, paginable-table-range-input',\n\ttemplateUrl: './paginable-table-range-input.component.html',\n\tstyleUrls: ['./paginable-table-range-input.component.scss'],\n\tstandalone: true,\n\timports: [FormsModule, TranslatePipe, UcfirstPipe],\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => PaginableTableRangeInputComponent),\n\t\t\tmulti: true\n\t\t}\n\t]\n})\nexport class PaginableTableRangeInputComponent implements ControlValueAccessor {\n\t@Input() disabled = false;\n\t@Input() type: 'number' | 'date' = 'number';\n\n\tonChange = (value: [string | number, string | number]) => {};\n\n\tonTouched = () => {};\n\n\tvalue: [string | number | null, string | number | null] = [null, null];\n\n\twriteValue(value: [string | number, string | number]): void {\n\t\tif (Array.isArray(value) && value.length === 2) {\n\t\t\tthis.value = value;\n\t\t} else {\n\t\t\tthis.value = [null, null];\n\t\t}\n\t}\n\n\tregisterOnChange(\n\t\tfn: (value: [string | number, string | number]) => void\n\t): void {\n\t\tthis.onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis.onTouched = fn;\n\t}\n\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.disabled = isDisabled;\n\t}\n}\n","<div class=\"form-control d-flex flex-column\">\n  <div class=\"d-flex align-items-center justify-content-between\">\n    @if (type == 'date') {\n      <label class=\"text-muted\"\n        >{{ 'FROM' | translate | ucfirst }}:</label\n        >\n        }<input\n        [type]=\"type\"\n        [(ngModel)]=\"value[0]\"\n        [placeholder]=\"'FROM' | translate | ucfirst\"\n        (change)=\"onChange($any(value))\"\n        />\n    </div>\n    <div class=\"d-flex align-items-center justify-content-between\">\n      @if (type == 'date') {\n        <label class=\"text-muted\"\n          >{{ 'TO' | translate | ucfirst }}:</label\n          >\n          }<input\n          [type]=\"type\"\n          [(ngModel)]=\"value[1]\"\n          [placeholder]=\"'TO' | translate | ucfirst\"\n          (change)=\"onChange($any(value))\"\n          />\n      </div>\n    </div>\n","import { Component, HostBinding } from '@angular/core';\n\n@Component({\n\tselector: 'th[resizable]',\n\ttemplateUrl: './resizable.component.html',\n\tstyleUrls: ['./resizable.component.scss']\n})\nexport class ResizableComponent {\n\t@HostBinding('style.width.px')\n\twidth: number | null = null;\n\n\tonResize(width: any) {\n\t\tthis.width = width;\n\t}\n}\n","<div class=\"wrapper\">\n\t<div class=\"content\">\n\t\t<ng-content></ng-content>\n\t</div>\n\t<div class=\"bar\" (resizable)=\"onResize($event)\"></div>\n</div>\n","/**\n * Represents the responsive breakpoints for HTML table layouts\n * @enum {string}\n */\nexport enum TableBreakpoint {\n\t/** Extra small devices (phones) - less than 576px */\n\tExtraSmall = 'xs',\n\n\t/** Small devices (tablets) - 576px and up */\n\tSmall = 'sm',\n\n\t/** Medium devices (tablets, small laptops) - 768px and up */\n\tMedium = 'md',\n\n\t/** Large devices (desktops) - 992px and up */\n\tLarge = 'lg',\n\n\t/** Extra large devices (large desktops) - 1200px and up */\n\tExtraLarge = 'xl'\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\n@Directive({\n\tselector: '[cellTpt], [paginableTableCell]',\n\tstandalone: true\n})\nexport class PaginableTableCellDirective {\n\t@Input({ required: true }) header!: string;\n\tconstructor(public template: TemplateRef<any>) {}\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n\tselector: '[errorTpt], [paginableTableError]',\n\tstandalone: true\n})\nexport class PaginableTableErrorDirective {\n\tconstructor(public template: TemplateRef<any>) {}\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n\tselector: '[expandingRowTpt], [paginableTableExpandingRow]',\n\tstandalone: true\n})\nexport class PaginableTableExpandingRowDirective {\n\tconstructor(public templateRef: TemplateRef<any>) {}\n}\n","import { Directive, TemplateRef, Input } from '@angular/core';\n\n@Directive({\n\tselector: '[filterTpt], [paginableTableFilter]',\n\tstandalone: true\n})\nexport class PaginableTableFilterDirective {\n\t@Input() header!: string;\n\n\tconstructor(public template: TemplateRef<any>) {}\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\n@Directive({\n\tselector: '[headerTpt], [paginableTableHeader]',\n\tstandalone: true\n})\nexport class PaginableTableHeaderDirective {\n\t@Input({ required: true }) header!: string;\n\tconstructor(public template: TemplateRef<any>) {}\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n\tselector: '[loadingTpt], [paginableTableLoading]',\n\tstandalone: true\n})\nexport class PaginableTableLoadingDirective {\n\tconstructor(public template: TemplateRef<any>) {}\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n\tselector: '[rowTpt], [paginableTableRow]',\n\tstandalone: true\n})\nexport class PaginableTableRowDirective {\n\tconstructor(public template: TemplateRef<any>) {}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n\tname: 'get',\n\tstandalone: true\n})\nexport class GetPipe implements PipeTransform {\n\t/**\n\t * @param value The object to retrieve the property from.\n\t * @param path The dot-separated path string to the property.\n\t * @param defaultValue The value to return if the property is not found.\n\t */\n\ttransform(value: any, path: string, defaultValue?: any): any {\n\t\tif (typeof path !== 'string') {\n\t\t\treturn value;\n\t\t}\n\t\treturn path\n\t\t\t.split('.')\n\t\t\t.reduce(\n\t\t\t\t(a, c) =>\n\t\t\t\t\ta && a[c] !== null && a[c] !== undefined\n\t\t\t\t\t\t? a[c]\n\t\t\t\t\t\t: defaultValue || null,\n\t\t\t\tvalue\n\t\t\t);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isObservable, Observable } from 'rxjs';\n\n@Pipe({\n\tname: 'isObservable',\n\tstandalone: true\n})\nexport class IsObservablePipe<T = any> implements PipeTransform {\n\ttransform(value: T | Observable<T>): boolean {\n\t\treturn isObservable(value);\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tEventEmitter,\n\tHostBinding,\n\tInput,\n\tOutput,\n\tinject\n} from '@angular/core';\nimport { generateUniqueId } from '../../utils';\n\n@Component({\n\tselector: 'hub-dropdown, hub-ui-dropdown',\n\tstandalone: true,\n\timports: [],\n\ttemplateUrl: './dropdown.component.html',\n\tstyleUrls: ['./dropdown.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\tclass: 'dropdown'\n\t}\n})\nexport class DropdownComponent {\n\tprivate _cdr = inject(ChangeDetectorRef);\n\n\t@HostBinding() @Input() id = generateUniqueId(16);\n\n\t@Output() open = new EventEmitter<{\n\t\tid: string;\n\t}>();\n\n\t@Output() close = new EventEmitter<{\n\t\tid: string;\n\t}>();\n\n\tisOpened: boolean = false;\n\n\ttoggle() {\n\t\tthis.isOpened = !this.isOpened;\n\t\tthis._cdr.markForCheck();\n\t\tif (this.isOpened) {\n\t\t\tthis.open.next({ id: this.id });\n\t\t}\n\t}\n\n\tcloseDropdown() {\n\t\tthis.isOpened = false;\n\t\tthis._cdr.markForCheck();\n\t}\n\n\topenDropdown() {\n\t\tthis.isOpened = true;\n\t\tthis._cdr.markForCheck();\n\t}\n}\n","<button\n\tclass=\"btn dropdown__toggle\"\n\t[class.show]=\"isOpened\"\n\ttype=\"button\"\n\tdata-bs-toggle=\"dropdown\"\n\taria-expanded=\"false\"\n\t(click)=\"toggle()\"\n>\n\t<ng-content select=\".button\"></ng-content>\n</button>\n<ul\n\tclass=\"dropdown-menu dropdown__menu\"\n\t[class.show]=\"isOpened\"\n\t[attr.aria-hidden]=\"!isOpened\"\n>\n\t<ng-content select=\".content\"></ng-content>\n</ul>\n","/**\n * Represents a structured filter composed of multiple filtering rules.\n * Each rule is evaluated according to the specified logical operator (AND / OR).\n */\nexport interface MenuFilterValue {\n\t/**\n\t * Logical operator used to combine the filtering rules.\n\t * - \"and\": all rules must match\n\t * - \"or\": at least one rule must match\n\t */\n\toperator: MenuFilterOperators;\n\n\t/**\n\t * Array of individual filtering rules to apply.\n\t */\n\trules: Array<MenuFilterRule>;\n}\n\n/**\n * Represents a single filtering rule consisting of a value and a matching mode.\n * This rule can be evaluated against a data field to determine a match.\n */\nexport interface MenuFilterRule {\n\t/**\n\t * Value to match against. It can be a string or null.\n\t */\n\tvalue: string | null;\n\n\t/**\n\t * Mode of matching to apply. This defines how the value is compared,\n\t * e.g., \"equals\", \"contains\", etc., as defined in the MatchModes enum.\n\t */\n\tmatchMode: MatchModes;\n}\n\n/**\n * Enum representing the logical operators used to combine multiple filter rules.\n */\nexport enum MenuFilterOperators {\n\t/**\n\t * Logical OR: at least one rule must match.\n\t */\n\tOr = 'or',\n\n\t/**\n\t * Logical AND: all rules must match.\n\t */\n\tAnd = 'and'\n}\n\nexport enum StringMatchModes {\n\tStartsWith = 'StartsWith',\n\tContains = 'Contains',\n\tNotContains = 'NotContains',\n\tEndsWith = 'EndsWith',\n\tEqual = 'Equal',\n\tNotEqual = 'NotEqual'\n}\n\nexport enum NumberMatchModes {\n\tGreaterThan = 'GreaterThan',\n\tGreaterThanOrEqual = 'GreaterThanOrEqual',\n\tLessThan = 'LessThan',\n\tLessThanOrEqual = 'LessThanOrEqual',\n\tEqual = 'Equal',\n\tNotEqual = 'NotEqual'\n}\n\nexport enum DateMatchModes {\n\tEqual = 'Equal',\n\tNotEqual = 'NotEqual',\n\tBefore = 'Before',\n\tBeforeOrEqual = 'BeforeOrEqual',\n\tAfter = 'After',\n\tAfterOrEqual = 'AfterOrEqual'\n}\n\nexport enum BooleanMatchModes {\n\tEqual = 'Equal',\n\tNotEqual = 'NotEqual'\n}\n\nexport enum NullMatchModes {\n\tIsNull = 'IsNull',\n\tIsNotNull = 'IsNotNull'\n}\n\nexport type MatchModes =\n\t| NullMatchModes\n\t| StringMatchModes\n\t| NumberMatchModes\n\t| DateMatchModes\n\t| BooleanMatchModes;\n","import { Component, Input, forwardRef, inject } from '@angular/core';\nimport {\n\tControlValueAccessor,\n\tFormArray,\n\tFormBuilder,\n\tFormGroup,\n\tNG_VALUE_ACCESSOR,\n\tReactiveFormsModule\n} from '@angular/forms';\nimport {\n\tBooleanMatchModes,\n\tDateMatchModes,\n\tMatchModes,\n\tMenuFilterOperators,\n\tMenuFilterRule,\n\tMenuFilterValue,\n\tNullMatchModes,\n\tNumberMatchModes,\n\tStringMatchModes\n} from '../../interfaces/column-filter-event';\nimport { PaginableTableHeader } from '../../interfaces/paginable-table-header';\nimport { DropdownComponent } from '../dropdown/dropdown.component';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\nimport { UcfirstPipe } from '../../pipes/ucfirst.pipe';\nimport { KeyValuePipe, UpperCasePipe } from '@angular/common';\n\n@Component({\n\tselector: 'menu-filter',\n\tstandalone: true,\n\timports: [\n\t\tReactiveFormsModule,\n\t\tKeyValuePipe,\n\t\tUpperCasePipe,\n\t\tTranslatePipe,\n\t\tUcfirstPipe\n\t],\n\ttemplateUrl: './menu-filter.component.html',\n\tstyleUrls: ['./menu-filter.component.scss'],\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => MenuFilterComponent),\n\t\t\tmulti: true\n\t\t}\n\t]\n})\nexport class MenuFilterComponent implements ControlValueAccessor {\n\t#fb = inject(FormBuilder);\n\t#parent = inject(DropdownComponent);\n\n\t#header!: PaginableTableHeader;\n\t@Input()\n\tget header(): PaginableTableHeader {\n\t\treturn this.#header;\n\t}\n\tset header(v: PaginableTableHeader) {\n\t\tthis.#header = v;\n\t\tthis.setMatchMode();\n\t\tthis.setDefaultValue();\n\t}\n\n\tform = this.#fb.group({\n\t\toperator: [MenuFilterOperators.And],\n\t\trules: this.#fb.array([])\n\t});\n\n\tget rulesFA(): FormArray {\n\t\treturn this.form.get('rules') as FormArray;\n\t}\n\n\tonChange = (value: MenuFilterValue | null) => {};\n\tonTouched = () => {};\n\n\tmatchModes: Array<MatchModes> = [];\n\tnullMatchModes = NullMatchModes;\n\n\tdefaultValue!: MenuFilterValue;\n\n\t/**\n\t * Clears existing rules, sets a default value if none is provided, adds rules based on the input value, and patches the form with the input value.\n\t * @param {MenuFilterValue} value - MenuFilterValue\n\t */\n\twriteValue(value: MenuFilterValue | null): void {\n\t\tthis.rulesFA.clear();\n\t\tif (!value) {\n\t\t\tvalue = this.defaultValue;\n\t\t}\n\t\tvalue.rules.forEach((_) => this.add());\n\t\tthis.form.patchValue(value);\n\t}\n\n\tregisterOnChange(fn: any): void {\n\t\tthis.onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: any): void {\n\t\tthis.onTouched = fn;\n\t}\n\n\t/**\n\t * Adds a new form group to a FormArray with default values or values provided as input.\n\t *\n\t * @param {MenuFilterRule} [value] - The `value` parameter in the `add` method is an optional parameter of type `MenuFilterRule`.\n\t * It is used to provide a value that will be patched into the form group created within the method. If a `value` is provided, it\n\t * will be used to patch the form group's\n\t */\n\tadd(value?: MenuFilterRule) {\n\t\tconst rulesFA = this.form.get('rules') as FormArray;\n\t\tconst ruleFG = this.#fb.group({\n\t\t\tvalue: [null],\n\t\t\tmatchMode: [this.matchModes[0]]\n\t\t});\n\t\tif (value) {\n\t\t\truleFG.patchValue(value as any);\n\t\t}\n\t\trulesFA.push(ruleFG);\n\t}\n\n\t/**\n\t * Clears all rules in a FormArray, adds a new rule, and applies the changes.\n\t */\n\tclear() {\n\t\tconst rulesFA = this.form.get('rules') as FormArray;\n\t\trulesFA.clear();\n\t\tthis.add();\n\t\tthis.apply();\n\t}\n\n\t/**\n\t * Filters rules based on certain conditions and then calls onChange with the filtered rules or null.\n\t */\n\tapply() {\n\t\tlet { operator, rules } = this.form.value as MenuFilterValue;\n\t\trules = rules?.filter(\n\t\t\t(rule) =>\n\t\t\t\t[NullMatchModes.IsNotNull, NullMatchModes.IsNull].includes(\n\t\t\t\t\trule.matchMode as any\n\t\t\t\t) ||\n\t\t\t\t(rule.value !== undefined && rule.value !== null)\n\t\t);\n\t\tthis.onChange(\n\t\t\trules.length\n\t\t\t\t? {\n\t\t\t\t\t\toperator,\n\t\t\t\t\t\trules\n\t\t\t\t  }\n\t\t\t\t: null\n\t\t);\n\t\tthis.#parent.closeDropdown();\n\t}\n\n\t/**\n\t * Determines the appropriate match modes based on the filter type and assigns them to the `matchModes` property.\n\t */\n\tsetMatchMode() {\n\t\tlet matchModes;\n\t\tswitch (this.header.filter?.type) {\n\t\t\tcase 'number':\n\t\t\t\tmatchModes = NumberMatchModes;\n\t\t\t\tbreak;\n\t\t\tcase 'date':\n\t\t\tcase 'date-range':\n\t\t\t\tmatchModes = DateMatchModes;\n\t\t\t\tbreak;\n\t\t\tcase 'boolean':\n\t\t\t\tmatchModes = BooleanMatchModes;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tmatchModes = StringMatchModes;\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.matchModes = { ...matchModes, ...NullMatchModes };\n\t}\n\n\t/**\n\t * Initializes a default value for a menu filter with an operator and a rule containing a null value and a match mode.\n\t */\n\tsetDefaultValue() {\n\t\tconst matchMode = Object.values(this.matchModes)[0];\n\t\tthis.defaultValue = {\n\t\t\toperator: MenuFilterOperators.And,\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\tvalue: null,\n\t\t\t\t\tmatchMode\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t}\n\n\t/**\n\t * Disables or enables a form control based on the selected match mode in a FormGroup.\n\t *\n\t * @param {FormGroup} group - The `group` parameter is a FormGroup object in Angular, which represents a collection of FormControl\n\t * instances. It is typically used to manage the form controls within a form.\n\t */\n\tenableOrDisableValueControl(group: FormGroup) {\n\t\tconst { matchMode } = group.value;\n\t\tif (Object.values(NullMatchModes).includes(matchMode)) {\n\t\t\tgroup.get('value')?.disable();\n\t\t} else {\n\t\t\tgroup.get('value')?.enable();\n\t\t}\n\t}\n}\n","<ng-container [formGroup]=\"form\">\n\t@if (header.filter?.type !== 'boolean') {\n\t\t<li class=\"dropdown-item filter__operator\">\n\t\t\t<select\n\t\t\t\tclass=\"form-select filter__operator__control\"\n\t\t\t\tformControlName=\"operator\"\n\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t>\n\t\t\t\t<option value=\"and\">\n\t\t\t\t\t{{ 'MATCH_ALL' | translate | ucfirst }}\n\t\t\t\t</option>\n\t\t\t\t<option value=\"or\">\n\t\t\t\t\t{{ 'MATCH_ANY' | translate | ucfirst }}\n\t\t\t\t</option>\n\t\t\t</select>\n\t\t</li>\n\t}\n\t<ng-container formArrayName=\"rules\">\n\t\t@for (\n\t\t\tgroup of rulesFA.controls;\n\t\t\ttrack group;\n\t\t\tlet index = $index;\n\t\t\tlet last = $last\n\t\t) {\n\t\t\t<ng-container [formGroupName]=\"index\">\n\t\t\t\t<li class=\"dropdown-item filter__rule\">\n\t\t\t\t\t<div class=\"d-flex flex-column gap-2 mb-2\">\n\t\t\t\t\t\t<select\n\t\t\t\t\t\t\tclass=\"form-select filter__rule__mode\"\n\t\t\t\t\t\t\tformControlName=\"matchMode\"\n\t\t\t\t\t\t\t(change)=\"enableOrDisableValueControl($any(group))\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@for (mode of matchModes | keyvalue; track mode) {\n\t\t\t\t\t\t\t\t<option [value]=\"mode.key\">\n\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t'MATCH_MODES.' + mode.key\n\t\t\t\t\t\t\t\t\t\t\t| uppercase\n\t\t\t\t\t\t\t\t\t\t\t| translate\n\t\t\t\t\t\t\t\t\t\t\t| ucfirst\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\t@if (\n\t\t\t\t\t\t\t![\n\t\t\t\t\t\t\t\tnullMatchModes.IsNull,\n\t\t\t\t\t\t\t\tnullMatchModes.IsNotNull\n\t\t\t\t\t\t\t].includes(group.get('matchMode')?.value)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t@switch (header.filter?.type) {\n\t\t\t\t\t\t\t\t\t@case ('number') {\n\t\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"form-control filter__rule__value\"\n\t\t\t\t\t\t\t\t\t\t\t\tformControlName=\"value\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t@case ('number-range') {\n\t\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"form-control filter__rule__value\"\n\t\t\t\t\t\t\t\t\t\t\t\tformControlName=\"value\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t@case ('date') {\n\t\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"date\"\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"form-control filter__rule__value\"\n\t\t\t\t\t\t\t\t\t\t\t\tformControlName=\"value\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t@case ('date-range') {\n\t\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"date\"\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"form-control filter__rule__value\"\n\t\t\t\t\t\t\t\t\t\t\t\tformControlName=\"value\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t@case ('boolean') {\n\t\t\t\t\t\t\t\t\t\t<select\n\t\t\t\t\t\t\t\t\t\t\tclass=\"form-select form-control filter__rule__value\"\n\t\t\t\t\t\t\t\t\t\t\tformControlName=\"value\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<option [ngValue]=\"null\">\n\t\t\t\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t\t\t\theader.filter\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t?.placeholder ??\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'SELECT_ONE'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t| translate\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t| ucfirst\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t\t\t\t<option [ngValue]=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t\t\t\t$any(header.filter)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.trueLabel ??\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t('TRUE'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t| translate\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t| ucfirst)\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t\t\t\t<option [ngValue]=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t\t\t\t$any(header.filter)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.falseLabel ??\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t('FALSE'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t| translate\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t| ucfirst)\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t@default {\n\t\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"form-control filter__rule__value\"\n\t\t\t\t\t\t\t\t\t\t\t\tformControlName=\"value\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t@if (rulesFA.controls.length > 1) {\n\t\t\t\t\t\t<div class=\"d-flex justify-content-end\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclass=\"btn btn-sm text-danger text-center w-100\"\n\t\t\t\t\t\t\t\t(click)=\"rulesFA.removeAt(index)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<i class=\"fa-solid fa-trash me-2 mr-2\"></i\n\t\t\t\t\t\t\t\t>{{ 'REMOVE_RULE' | translate | ucfirst }}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</li>\n\t\t\t\t@if (rulesFA.controls.length > 1) {\n\t\t\t\t\t<li class=\"filter__rule__divider\">\n\t\t\t\t\t\t<hr class=\"dropdown-divider\" />\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ng-container>\n\t\t}\n\t</ng-container>\n\t@if (header.filter?.type !== 'boolean') {\n\t\t<li class=\"dropdown-item filter__add-rule\">\n\t\t\t<button\n\t\t\t\tclass=\"btn btn-sm text-primary text-center w-100\"\n\t\t\t\t(click)=\"add(); $event.stopPropagation()\"\n\t\t\t>\n\t\t\t\t<i class=\"fa-solid fa-plus me-2 mr-2\"></i\n\t\t\t\t>{{ 'ADD_RULE' | translate | ucfirst }}\n\t\t\t</button>\n\t\t</li>\n\t}\n\t<li class=\"dropdown-item filter__actions\">\n\t\t<div class=\"d-flex justify-content-between align-items-center gap-3\">\n\t\t\t<button\n\t\t\t\tclass=\"btn btn-outline-danger filter__actions__clear\"\n\t\t\t\t(click)=\"clear()\"\n\t\t\t>\n\t\t\t\t{{ 'CLEAR' | translate | ucfirst }}\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\tclass=\"btn btn-primary filter__actions__apply\"\n\t\t\t\t(click)=\"apply()\"\n\t\t\t>\n\t\t\t\t{{ 'APPLY' | translate | ucfirst }}\n\t\t\t</button>\n\t\t</div>\n\t</li>\n</ng-container>\n","import { animate, style, transition, trigger } from '@angular/animations';\nimport { AsyncPipe, NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n\tComponent,\n\tTemplateRef,\n\tcomputed,\n\tcontentChild,\n\tcontentChildren,\n\teffect,\n\tforwardRef,\n\tinject,\n\tinput,\n\tmodel,\n\tviewChildren\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport {\n\tFormGroup,\n\tFormsModule,\n\tNG_VALUE_ACCESSOR,\n\tReactiveFormsModule,\n\tUntypedFormBuilder\n} from '@angular/forms';\n\nimport {\n\tBehaviorSubject,\n\tObservable,\n\tdebounceTime,\n\tdistinctUntilChanged,\n\tisObservable,\n\tof\n} from 'rxjs';\nimport { TableBreakpoint } from '../../constants/breakpoints';\nimport { PaginableTableCellDirective } from '../../directives/paginable-table-cell.directive';\nimport { PaginableTableErrorDirective } from '../../directives/paginable-table-error.directive';\nimport { PaginableTableExpandingRowDirective } from '../../directives/paginable-table-expanding-row.directive';\nimport { PaginableTableFilterDirective } from '../../directives/paginable-table-filter.directive';\nimport { PaginableTableHeaderDirective } from '../../directives/paginable-table-header.directive';\nimport { PaginableTableLoadingDirective } from '../../directives/paginable-table-loading.directive';\nimport { PaginableTableNotFoundDirective } from '../../directives/paginable-table-not-found.directive';\nimport { PaginableTableRowDirective } from '../../directives/paginable-table-row.directive';\nimport { ListButton, RowButton, TableRowEvent } from '../../interfaces';\nimport { PaginableTableDropdown } from '../../interfaces/paginable-table-dropdown';\nimport { PaginableTableHeader } from '../../interfaces/paginable-table-header';\nimport { PaginableTableOptions } from '../../interfaces/paginable-table-options';\nimport { PaginableTableOrdination } from '../../interfaces/paginable-table-ordination';\nimport { PaginationState } from '../../interfaces/pagination-state';\nimport { TableRow } from '../../interfaces/table-row';\nimport { GetPipe } from '../../pipes/get.pipe';\nimport { IsObservablePipe } from '../../pipes/is-observable.pipe';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\nimport { UcfirstPipe } from '../../pipes/ucfirst.pipe';\nimport { UnwrapAsyncPipe } from '../../pipes/unwrap-async.pipe';\nimport { generateUniqueId } from '../../utils';\nimport { DropdownComponent } from '../dropdown/dropdown.component';\nimport { HubIconComponent } from '../icon/icon.component';\nimport { MenuFilterComponent } from '../menu-filter/menu-filter.component';\nimport { PaginableTableDropdownComponent } from '../paginable-table-dropdown/paginable-table-dropdown.component';\nimport { PaginableTableRangeInputComponent } from '../paginable-table-range-input/paginable-table-range-input.component';\nimport { PaginatorComponent } from '../paginator/paginator.component';\n\n@Component({\n\tselector: 'hub-table, hub-ui-table',\n\tstandalone: true,\n\ttemplateUrl: './table.component.html',\n\timports: [\n\t\tNgClass,\n\t\tNgTemplateOutlet,\n\t\tAsyncPipe,\n\t\tReactiveFormsModule,\n\t\tFormsModule,\n\t\tTranslatePipe,\n\t\tUcfirstPipe,\n\t\tUnwrapAsyncPipe,\n\t\tIsObservablePipe,\n\t\tPaginableTableDropdownComponent,\n\t\tPaginatorComponent,\n\t\tDropdownComponent,\n\t\tMenuFilterComponent,\n\t\tHubIconComponent,\n\t\tPaginatorComponent,\n\t\tPaginableTableRangeInputComponent,\n\t\tAsyncPipe,\n\t\tGetPipe\n\t],\n\tanimations: [\n\t\ttrigger('fadeInOut', [\n\t\t\ttransition(':enter', [\n\t\t\t\tstyle({ opacity: 0 }),\n\t\t\t\tanimate('256ms 256ms', style({ opacity: 1, height: 'auto' }))\n\t\t\t]),\n\t\t\ttransition(':leave', [\n\t\t\t\tanimate('256ms ease-out', style({ opacity: 0, height: '0' }))\n\t\t\t])\n\t\t])\n\t],\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => TableComponent),\n\t\t\tmulti: true\n\t\t}\n\t],\n\thost: {\n\t\tclass: 'hub-table'\n\t}\n})\nexport class TableComponent<T = any> {\n\t#fb = inject(UntypedFormBuilder);\n\n\tid = input(generateUniqueId(16));\n\n\treadonly options = input<PaginableTableOptions>({\n\t\tcursor: 'default',\n\t\thoverableRows: false,\n\t\tstriped: null,\n\t\tvariant: null\n\t});\n\n\t/**\n\t * Collection of selected rows\n\t *\n\t * @type {Array<T>}\n\t * @memberof PaginableTableComponent\n\t */\n\tvalue: Array<T> = [];\n\n\t/**\n\t * Set whether all page rows are selecteds\n\t *\n\t * @type {boolean}\n\t * @memberof PaginableTableComponent\n\t */\n\tallRowsSelected: boolean = false;\n\n\t/**\n\t * Time to ouput the filter form value\n\t *\n\t * @type {number}\n\t * @memberof PaginableTableComponent\n\t */\n\treadonly debounce = input<number>(0);\n\n\treadonly headers = model<Array<PaginableTableHeader | string>>([]);\n\n\treadonly fixedHeaders = computed(() => {\n\t\tconst headers = this.headers();\n\t\tconst fixedHeaders: Array<PaginableTableHeader> = headers.map(\n\t\t\t(header) => {\n\t\t\t\tif (typeof header === 'string') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttitle: header,\n\t\t\t\t\t\tproperty: header\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn header;\n\t\t\t}\n\t\t);\n\n\t\t// Parsing headers\n\t\tfor (const header of fixedHeaders) {\n\t\t\tif (\n\t\t\t\theader.constructor.name === 'Object' &&\n\t\t\t\theader.buttons &&\n\t\t\t\t!header.property\n\t\t\t) {\n\t\t\t\tObject.assign(\n\t\t\t\t\theader,\n\t\t\t\t\t{ wrapping: 'nowrap', onlyButtons: true, align: 'end' },\n\t\t\t\t\theader\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn fixedHeaders;\n\t});\n\n\theadersCount = computed(() => {\n\t\tlet count = this.fixedHeaders().length;\n\t\tif (\n\t\t\t(this.selectable() && this.multiple()) ||\n\t\t\tthis.batchActions().length\n\t\t) {\n\t\t\tcount++;\n\t\t}\n\t\tif (\n\t\t\tthis.templateExpandingRows()?.length /* &&\n\t\t\t!this.lastColumnOnlyHasButtons */\n\t\t) {\n\t\t\tcount++;\n\t\t}\n\t\treturn count;\n\t});\n\n\theaderFilters = computed(() => {\n\t\tconst headerFilters = this.fixedHeaders().filter(\n\t\t\t(header) => header.filter\n\t\t);\n\t\tsetTimeout(() => this.initializeFilterFG());\n\t\treturn headerFilters;\n\t});\n\n\treadonly filters = model<Record<string, {}> | null>({});\n\n\t/**\n\t * Filter form\n\t *\n\t * @type {FormGroup}\n\t * @memberof PaginableTableComponent\n\t */\n\tfiltersFG: FormGroup = new FormGroup({});\n\n\tfilterLoading: boolean = false;\n\n\tfilterEffect = effect(() => {\n\t\tconst filters = this.filters();\n\n\t\t// Le damos un poco de tiempo para\n\t\tsetTimeout(() => {\n\t\t\tthis.filtersFG.patchValue(filters ?? {}, { emitEvent: false });\n\t\t}, 16);\n\t});\n\n\tfiltersChange = toSignal(\n\t\tthis.filtersFG.valueChanges.pipe(debounceTime(this.debounce()))\n\t);\n\n\tfiltersFGChangeEffect = effect(() => {\n\t\tconst filters = this.filtersChange();\n\t\tif (filters === undefined) return;\n\n\t\tif (this.setFilters) {\n\t\t\tthis.filters.set(filters);\n\t\t}\n\t\tthis.setFilters = true;\n\t});\n\n\thasColumnFilters = computed(() => {\n\t\treturn this.headerFilters().some(\n\t\t\t({ filter }) => filter?.mode !== 'menu'\n\t\t);\n\t});\n\n\treadonly rows = input<\n\t\tArray<TableRow<T>>,\n\t\tArray<T> | PaginationState | null | undefined\n\t>([], {\n\t\talias: 'data',\n\t\ttransform: (\n\t\t\tv: Array<T> | PaginationState | null | undefined\n\t\t): Array<TableRow<T>> => {\n\t\t\tif (!v) return [];\n\n\t\t\tconst items = Array.isArray(v) ? v : ((v.data as Array<T>) ?? []);\n\n\t\t\tif (!Array.isArray(v)) {\n\t\t\t\tthis.page.set(v.page);\n\t\t\t\tthis.perPage.set(v.perPage);\n\t\t\t\tthis.totalItems.set(v.totalItems);\n\t\t\t}\n\n\t\t\treturn items.map((item) => this.transformIntoRow(item));\n\t\t}\n\t});\n\n\trowsEffect = effect(() => {\n\t\tconst rows = this.rows();\n\t\tthis.markSelected();\n\t});\n\n\tsetFilters: boolean = true;\n\n\ttransformIntoRow(data: T): TableRow<T> {\n\t\treturn {\n\t\t\tselected: false,\n\t\t\tcollapsed: true,\n\t\t\tdata\n\t\t};\n\t}\n\n\treadonly perPageOptions = input<Array<number>>([20, 50, 100]);\n\treadonly page = model<number | null>(null);\n\treadonly perPage = model<number | null>(null);\n\treadonly totalItems = model<number | null>(null);\n\n\treadonly numberOfPages = computed((): number | null => {\n\t\tif (this.perPage() && this.totalItems()) {\n\t\t\treturn Math.ceil(this.totalItems()! / this.perPage()!);\n\t\t}\n\t\treturn null;\n\t});\n\n\treadonly ordination = model<PaginableTableOrdination>();\n\n\t/**\n\t * Set if the data must be paginated\n\t *\n\t * @type {boolean}\n\t * @memberof PaginableTableComponent\n\t */\n\treadonly paginate = input<boolean>(true);\n\n\t/**\n\t * If set, it will be the property returned in the selected event\n\t *\n\t * @type {string}\n\t * @memberof PaginableTableComponent\n\t */\n\treadonly bindValue = input<string>();\n\n\treadonly loading = model<boolean>(false);\n\n\treadonly paginationPosition = input<'bottom' | 'top' | 'both'>('bottom');\n\n\treadonly paginationInfo = input<boolean>(true);\n\n\treadonly stickyActions = input<boolean>(false);\n\n\treadonly batchActions = input<\n\t\tArray<PaginableTableDropdown | ListButton>,\n\t\tArray<PaginableTableDropdown | ListButton>\n\t>([], {\n\t\ttransform: (value: Array<PaginableTableDropdown | ListButton>) => {\n\t\t\treturn value.map((item) => {\n\t\t\t\tif ((item as PaginableTableDropdown).buttons) {\n\t\t\t\t\titem = {\n\t\t\t\t\t\tfill: null,\n\t\t\t\t\t\tposition: 'start',\n\t\t\t\t\t\tcolor: 'light',\n\t\t\t\t\t\t...item\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn item;\n\t\t\t});\n\t\t}\n\t});\n\n\treadonly selectable = input<boolean>(false);\n\n\t/**\n\t * Set whether the selectable can be multiple\n\t *\n\t * @type {boolean}\n\t * @memberof PaginableTableComponent\n\t */\n\treadonly multiple = input<boolean>(false);\n\n\t/**\n\t * Set whether the rows are selectable\n\t *\n\t * @type {boolean}\n\t * @memberof PaginableTableComponent\n\t */\n\treadonly searchable = input<boolean>(true);\n\n\treadonly searchTerm = model<string>('');\n\n\tsearchProxy$ = new BehaviorSubject<string>(this.searchTerm());\n\n\tsearchTermEffect = effect(() => {\n\t\tconst delay = this.debounce();\n\t\t// console.log('delay');\n\n\t\tconst sub = this.searchProxy$\n\t\t\t.pipe(debounceTime(delay), distinctUntilChanged())\n\t\t\t.subscribe((value) => {\n\t\t\t\t// console.log('subscribe');\n\t\t\t\tthis.searchTerm.set(value);\n\t\t\t});\n\n\t\t// Inicializar el proxy con el valor actual\n\t\tthis.searchProxy$.next(this.searchTerm());\n\n\t\treturn () => {\n\t\t\treturn sub.unsubscribe();\n\t\t};\n\t});\n\n\treadonly searchFn = input<(a: T, b: T) => boolean>();\n\n\t// TODO: Implementar\n\treadonly compareFn = input<(a: T, b: T) => boolean>();\n\n\t/**\n\t * On item click event emitter\n\t *\n\t * @memberof PaginableTableComponent\n\t */\n\treadonly clickFn =\n\t\tinput<(event: TableRowEvent<T>) => void | Promise<void>>();\n\n\treadonly responsive = input<TableBreakpoint | null>(null);\n\n\tresponsiveCSSClass = computed(() => {\n\t\tconst response = this.responsive();\n\t\tif (response && Object.keys(TableBreakpoint).includes(response)) {\n\t\t\treturn response === TableBreakpoint.ExtraSmall\n\t\t\t\t? null\n\t\t\t\t: 'table-responsive-' + this.responsive;\n\t\t}\n\t\treturn null;\n\t});\n\n\tdisabled: boolean = false;\n\n\treadonly templateRow = contentChild(PaginableTableRowDirective, {\n\t\tread: TemplateRef\n\t});\n\treadonly headerTpts = contentChildren(PaginableTableHeaderDirective);\n\treadonly templateCells = contentChildren(PaginableTableCellDirective);\n\treadonly noDataTpt = contentChild(PaginableTableNotFoundDirective, {\n\t\tread: TemplateRef\n\t});\n\treadonly loadingTpt = contentChild(PaginableTableLoadingDirective, {\n\t\tread: TemplateRef\n\t});\n\treadonly errorTpt = contentChild(PaginableTableErrorDirective, {\n\t\tread: TemplateRef\n\t});\n\treadonly templateExpandingRows = contentChildren(\n\t\tPaginableTableExpandingRowDirective\n\t);\n\treadonly filterTpts = contentChildren(PaginableTableFilterDirective);\n\n\treadonly dropdownComponents = viewChildren(DropdownComponent);\n\n\twriteValue(value: any): void {\n\t\tif (value) {\n\t\t\tthis.value = Array.isArray(value) ? value : [value];\n\t\t} else {\n\t\t\tthis.value = [];\n\t\t}\n\t\tthis.markSelected();\n\t}\n\n\tonChange = (_: any) => {};\n\tonTouch = () => {};\n\n\tregisterOnChange(fn: any): void {\n\t\tthis.onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: any): void {\n\t\tthis.onTouch = fn;\n\t}\n\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.disabled = isDisabled;\n\t}\n\n\t/**\n\t * Handles click events by extracting specific properties and passing them to a callback function.\n\t *\n\t * @param  - The `onItemClick` function takes in the following parameters: collapsed, selected and item.\n\t * @param {number} depth - The `depth` parameter in the `onItemClick` function represents the depth level of the item being\n\t * clicked. It is a number that indicates how deep the item is nested within a hierarchical structure.\n\t * @param {number} index - The `index` parameter in the `onItemClick` function represents the position of the item that was clicked\n\t * within a list or array. It is a number that indicates the index of the clicked item.\n\t *\n\t * @returns If the `clickFn` property is not defined in the current context, the `onItemClick` function will return without\n\t * executing any further code.\n\t */\n\tonItemClick(event: MouseEvent, item: TableRow) {\n\t\tconst clickFn = this.clickFn();\n\t\tif (!clickFn) {\n\t\t\treturn;\n\t\t}\n\t\tclickFn({ ...item, event });\n\t}\n\n\t/**\n\t * If paging is done on the server, a parameter change subscription is launched. Otherwise,\n\t * get the data sorted according to the header passed by parameter.\n\t *\n\t * @param {PaginableTableHeader} header\n\t * @returns {void}\n\t * @memberof PaginableTableComponent\n\t */\n\tsort(header: PaginableTableHeader): void {\n\t\tif (!header.sortable) {\n\t\t\treturn;\n\t\t}\n\t\tif (\n\t\t\t!this.ordination() ||\n\t\t\tthis.ordination()?.property !== header.property\n\t\t) {\n\t\t\tthis.ordination.set({\n\t\t\t\tproperty: header.property as any,\n\t\t\t\tdirection: 'ASC'\n\t\t\t});\n\t\t} else {\n\t\t\tthis.ordination.set({\n\t\t\t\tproperty: header.property,\n\t\t\t\tdirection:\n\t\t\t\t\tthis.ordination()?.direction === 'ASC' ? 'DESC' : 'ASC'\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Get the ordination class\n\t *\n\t * @param {PaginableTableHeader} header\n\t * @returns\n\t * @memberof PaginableTableComponent\n\t */\n\tgetOrdenationClass(\n\t\theader: PaginableTableHeader\n\t): 'fa-sort' | 'fa-sort-up' | 'fa-sort-down' {\n\t\tif (\n\t\t\t!this.ordination ||\n\t\t\tthis.ordination()?.property !== header.property\n\t\t) {\n\t\t\treturn 'fa-sort';\n\t\t}\n\t\treturn this.ordination()?.direction.toUpperCase() === 'ASC'\n\t\t\t? 'fa-sort-up'\n\t\t\t: 'fa-sort-down';\n\t}\n\n\t/**\n\t * If it exists, returns the header cell template for the header passed by parameter\n\t *\n\t * @param {(PaginableTableHeader)} header\n\t * @returns {TemplateRef<PaginableTableCellDirective>}\n\t * @memberof PaginableTableComponent\n\t */\n\tgetHeaderTemplate(header: PaginableTableHeader): TemplateRef<any> | null {\n\t\tconst property = header instanceof String ? header : header.property;\n\t\tif (!property) {\n\t\t\treturn null;\n\t\t}\n\t\tconst directive = this.headerTpts().find((o) => {\n\t\t\treturn o.header === property;\n\t\t});\n\t\treturn directive ? directive.template : null;\n\t}\n\n\t/**\n\t * If it exists, returns the cell template for the header passed by parameter\n\t *\n\t * @param {(PaginableTableHeader)} header\n\t * @returns {TemplateRef<PaginableTableCellDirective>}\n\t * @memberof PaginableTableComponent\n\t */\n\tgetCellTemplate(header: PaginableTableHeader): TemplateRef<any> | null {\n\t\tconst property = header instanceof String ? header : header.property;\n\t\tif (!property) {\n\t\t\treturn null;\n\t\t}\n\t\tconst directive = this.templateCells().find((o) => {\n\t\t\treturn o.header === property;\n\t\t});\n\t\treturn directive ? directive['template'] : null;\n\t}\n\n\t/**\n\t * If it exists, returns the filter template for the header passed by parameter\n\t *\n\t * @param {(PaginableTableHeader)} header\n\t * @returns {TemplateRef<PaginableTableCellDirective>}\n\t * @memberof PaginableTableComponent\n\t */\n\tgetFilterTemplate(\n\t\theader: PaginableTableHeader\n\t): TemplateRef<PaginableTableFilterDirective> | null {\n\t\tconst property = header instanceof String ? header : header.property;\n\t\tif (!property) {\n\t\t\treturn null;\n\t\t}\n\t\tconst directive = this.filterTpts().find((o) => o.header === property);\n\t\treturn directive ? directive.template : null;\n\t}\n\n\t/**\n\t * Handles the action to execute\n\t *\n\t * @param {Function} handler\n\t * @param {*} row\n\t * @memberof PaginableTableComponent\n\t */\n\thandleAction(\n\t\tevent: Event,\n\t\thandler: (row: TableRow) => void,\n\t\trow: TableRow\n\t) {\n\t\tevent.stopPropagation();\n\t\thandler(row);\n\t}\n\n\t/**\n\t * Handles the action to be executed in a batch\n\t *\n\t * @param {ListButton} button\n\t * @memberof PaginableTableComponent\n\t */\n\thandleBatchAction(button: ListButton) {\n\t\tif (button.handler) {\n\t\t\tbutton.handler(this.value);\n\t\t}\n\t}\n\n\t// TODO: Hacer para todas las columnas\n\tisHidden(button: RowButton, row: TableRow): Observable<boolean> {\n\t\tif (typeof button.hidden === 'function') {\n\t\t\tconst result = button.hidden(row);\n\t\t\treturn isObservable(result)\n\t\t\t\t? (result as Observable<boolean>)\n\t\t\t\t: of(result);\n\t\t}\n\t\treturn of(!!button.hidden);\n\t}\n\n\t/**\n\t * Expand or unexpand an expanding row\n\t *\n\t * @param {TableRow} item\n\t * @memberof PaginableTableComponent\n\t */\n\ttoggleExpandedRow(item: TableRow) {\n\t\titem.collapsed = !item.collapsed;\n\t}\n\n\t/**\n\t * Select or unselect all page items\n\t *\n\t * @memberof PaginableTableComponent\n\t */\n\ttoggleAll() {\n\t\tthis.allRowsSelected = !this.allRowsSelected;\n\t\tconst rows = this.rows();\n\t\tif (!rows) {\n\t\t\treturn;\n\t\t}\n\t\tfor (const row of rows) {\n\t\t\tconst bindValue = this.bindValue();\n\t\t\tconst needle = bindValue\n\t\t\t\t? (row.data as Record<string, any>)[bindValue]\n\t\t\t\t: row.data;\n\t\t\tconst index = this.value.indexOf(needle);\n\t\t\tif (index > -1 && !this.allRowsSelected) {\n\t\t\t\tthis.value.splice(index, 1);\n\t\t\t} else if (index === -1 && this.allRowsSelected) {\n\t\t\t\tthis.value.push(needle);\n\t\t\t}\n\t\t\trow.selected = this.allRowsSelected;\n\t\t}\n\t\tthis.emitValue();\n\t}\n\n\t/**\n\t * Select or unselect a row\n\t *\n\t * @param {*} row\n\t * @memberof PaginableTableComponent\n\t */\n\ttoggle(row: TableRow<T>) {\n\t\tconst rows = this.rows();\n\t\tif (!rows) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst bindValue = this.bindValue();\n\t\tconst needle = bindValue\n\t\t\t? (row.data as Record<string, any>)[bindValue]\n\t\t\t: row.data;\n\n\t\tconst index = this.value.indexOf(needle);\n\t\tif (index > -1) {\n\t\t\tthis.value.splice(index, 1);\n\t\t\trow.selected = false;\n\t\t} else {\n\t\t\tthis.value.push(needle);\n\t\t\trow.selected = true;\n\t\t}\n\n\t\tif (!this.multiple()) {\n\t\t\tthis.value = row.selected ? [needle] : [];\n\t\t\trows.forEach((o) => {\n\t\t\t\tconst needle = bindValue\n\t\t\t\t\t? (o.data as Record<string, any>)[bindValue]\n\t\t\t\t\t: o.data;\n\t\t\t\to.selected = this.value.indexOf(needle) > -1;\n\t\t\t});\n\t\t} else {\n\t\t\tthis.allRowsSelected = rows.every((o) => o.selected);\n\t\t}\n\n\t\tthis.emitValue();\n\t}\n\n\t/**\n\t * Select or deselect a row if it exists in the collection of selected items\n\t *\n\t * @memberof PaginableTableComponent\n\t */\n\tmarkSelected() {\n\t\tconst rows = this.rows();\n\t\tif (!rows?.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst bindValue = this.bindValue();\n\n\t\trows.forEach((row) => {\n\t\t\tconst needle = bindValue ? row.data[bindValue] : row.data;\n\t\t\trow.selected = this._contains(this.value, needle);\n\t\t});\n\t\tthis.allRowsSelected = rows.every((o) => o.selected);\n\t}\n\n\t/**\n\t * Emite el valor de los items seleccionados\n\t *\n\t */\n\temitValue() {\n\t\tthis.onChange(this.multiple() ? this.value : this.value[0]);\n\t}\n\n\t/**\n\t * Check if a needle exists in a list\n\t *\n\t * @private\n\t * @param {T[]} items\n\t * @param {*} needle\n\t * @return {*}  {boolean}\n\t * @memberof PaginableTableComponent\n\t */\n\t// TODO: Move to utils file\n\tprivate _contains(items: T[], needle: T): boolean {\n\t\tif (typeof needle === 'object' && needle !== null) {\n\t\t\treturn items.some(\n\t\t\t\t(o) => JSON.stringify(o) === JSON.stringify(needle)\n\t\t\t);\n\t\t}\n\t\treturn items.indexOf(needle) > -1;\n\t}\n\n\t/**\n\t * Initializes the filters form group by creating form controls for each header filter.\n\t * Maps header filters to form controls using either the filter key or property name as the control name.\n\t * The initial value for each control is set to null.\n\t */\n\tinitializeFilterFG() {\n\t\tObject.keys(this.filtersFG.controls).forEach((controlName) => {\n\t\t\tthis.filtersFG.removeControl(controlName);\n\t\t});\n\n\t\tfor (const { filter = null, property } of this.headerFilters()) {\n\t\t\tthis.filtersFG.addControl(\n\t\t\t\tfilter?.key || property,\n\t\t\t\tthis.#fb.control(null)\n\t\t\t);\n\t\t}\n\t\t// NOTE: Evitamos que al saltar el cambio de filtros del formulario, se restablezcan los filtros.\n\t\tthis.setFilters = false;\n\t}\n\n\t/**\n\t * Clean the advanced filter form\n\t *\n\t * @memberof PaginableTableComponent\n\t */\n\tclearFilters(): void {\n\t\tthis.filtersFG.reset();\n\t}\n\n\t/**\n\t * Closes all other dropdowns except the one with the specified id.\n\t *\n\t * @param {id} - The `onDropdownFilterOpened` function takes an object parameter `id`.\n\t */\n\tonDropdownFilterOpened({ id }: { id: string }) {\n\t\tthis.dropdownComponents()?.forEach((dropdown) => {\n\t\t\tif (dropdown.id !== id && dropdown.isOpened) {\n\t\t\t\tdropdown.closeDropdown();\n\t\t\t}\n\t\t});\n\t}\n}\n","@if (batchActions().length || searchable() || headerFilters().length) {\n\t<div class=\"hub-table__top-bar\">\n\t\t@if (batchActions().length) {\n\t\t\t<div class=\"hub-table__batch-actions\">\n\t\t\t\t@for (button of batchActions(); track $index) {\n\t\t\t\t\t@if (button['buttons']?.length) {\n\t\t\t\t\t\t<hub-table-dropdown\n\t\t\t\t\t\t\tclass=\"hub-table__batch-actions-dropdown\"\n\t\t\t\t\t\t\t[options]=\"$any(button)\"\n\t\t\t\t\t\t\t[disabled]=\"!value.length\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t</hub-table-dropdown>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclass=\"hub-table__batch-actions-btn btn {{\n\t\t\t\t\t\t\t\tbutton.color\n\t\t\t\t\t\t\t\t\t? 'btn-' + button.color\n\t\t\t\t\t\t\t\t\t: 'btn-light'\n\t\t\t\t\t\t\t}}\"\n\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\t(click)=\"handleBatchAction(button)\"\n\t\t\t\t\t\t\t[disabled]=\"!value.length\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@if (button.icon) {\n\t\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\t\tclass=\"hub-table__batch-actions-btn-icon me-2 mr-2 {{\n\t\t\t\t\t\t\t\t\t\tbutton.icon\n\t\t\t\t\t\t\t\t\t}}\"\n\t\t\t\t\t\t\t\t></i>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (button.title) {\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"hub-table__batch-actions-btn-title\"\n\t\t\t\t\t\t\t\t\t>{{ button.title | unwrapAsync }}</span\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\n\t\t@if (searchable()) {\n\t\t\t<div class=\"hub-table__search\">\n\t\t\t\t<input\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tclass=\"hub-table__search-input\"\n\t\t\t\t\t(input)=\"searchProxy$.next($any($event.target).value)\"\n\t\t\t\t\t[value]=\"searchTerm()\"\n\t\t\t\t\taria-label=\"Search\"\n\t\t\t\t/>\n\t\t\t\t<button\n\t\t\t\t\tclass=\"hub-table__search-button btn btn-outline-dark\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t>\n\t\t\t\t\t<i\n\t\t\t\t\t\tclass=\"hub-table__search-icon fa-solid fa-search\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t></i>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t}\n\n\t\t@if (headerFilters().length) {\n\t\t\t<div class=\"hub-table__delete-filters\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-table__delete-filters-btn btn btn-outline-danger\"\n\t\t\t\t\t(click)=\"clearFilters()\"\n\t\t\t\t\t[disabled]=\"filterLoading\"\n\t\t\t\t>\n\t\t\t\t\t<i\n\t\t\t\t\t\tclass=\"hub-table__delete-filters-icon fa-solid fa-eraser\"\n\t\t\t\t\t></i>\n\t\t\t\t\t{{ 'CLEAN_FILTERS' | translate | ucfirst }}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n\n<div\n\tclass=\"hub-table__table-container {{ responsiveCSSClass() }}\"\n\t[class.hub-table__table-responsive]=\"responsiveCSSClass()\"\n>\n\t@let striped = options().striped;\n\t<table\n\t\tclass=\"hub-table__table\"\n\t\t[class.hub-table__table-hover]=\"\n\t\t\t(options().hoverableRows || selectable()) && !loading()\n\t\t\"\n\t\t[class.hub-table__table-striped-odd]=\"striped === 'rows-odd'\"\n\t\t[class.hub-table__table-striped-even]=\"striped === 'rows-even'\"\n\t\t[class.hub-table__table-striped-columns-odd]=\"striped === 'columns-odd'\"\n\t\t[class.hub-table__table-striped-columns-even]=\"\n\t\t\tstriped === 'columns-even'\n\t\t\"\n\t\t[class.hub-table__table-selectable]=\"selectable()\"\n\t\t[class.hub-table__table--scrollable]=\"options().scrollable\"\n\t\t[ngClass]=\"\n\t\t\toptions().variant ? 'hub-table__table-' + options().variant : null\n\t\t\"\n\t>\n\t\t<thead class=\"hub-table__head\" [formGroup]=\"filtersFG\">\n\t\t\t<tr class=\"hub-table__head-row\">\n\t\t\t\t@if (selectable()) {\n\t\t\t\t\t<th\n\t\t\t\t\t\tclass=\"hub-table__header-cell hub-table__header-cell--actions sticky-start\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t[(ngModel)]=\"allRowsSelected\"\n\t\t\t\t\t\t\t[ngModelOptions]=\"{ standalone: true }\"\n\t\t\t\t\t\t\t(click)=\"toggleAll()\"\n\t\t\t\t\t\t\t[disabled]=\"disabled\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</th>\n\t\t\t\t}\n\t\t\t\t@for (header of fixedHeaders(); track header.property) {\n\t\t\t\t\t<th\n\t\t\t\t\t\tclass=\"hub-table__header-cell\"\n\t\t\t\t\t\tresizable\n\t\t\t\t\t\t[class.sticky-start]=\"header.sticky === 'start'\"\n\t\t\t\t\t\t[class.sticky-end]=\"header.sticky === 'end'\"\n\t\t\t\t\t\t[class.text-start]=\"header.align === 'start'\"\n\t\t\t\t\t\t[class.text-end]=\"header.align === 'end'\"\n\t\t\t\t\t\t[class.text-center]=\"header.align === 'center'\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"hub-table__header-cell-content d-flex flex-nowrap align-items-center justify-content-between gap-2\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"\n\t\t\t\t\t\t\t\t\tgetHeaderTemplate(header) ||\n\t\t\t\t\t\t\t\t\tdefaultHeaderTpt\n\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\t\t\tproperty: header | get: header.property\n\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t@if (\n\t\t\t\t\t\t\t\theader.sortable ||\n\t\t\t\t\t\t\t\theader.filter?.mode === 'menu'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"hub-table__header-cell-actions d-flex gap-2 ms-auto align-items-center\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__sort-btn btn\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"sort(header)\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t@if (header.sortable) {\n\t\t\t\t\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__sort-icon fa\"\n\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tgetOrdenationClass(header)\n\t\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t></i>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t@if (header.filter?.mode === 'menu') {\n\t\t\t\t\t\t\t\t\t\t<hub-dropdown\n\t\t\t\t\t\t\t\t\t\t\t#dropdown\n\t\t\t\t\t\t\t\t\t\t\t(open)=\"\n\t\t\t\t\t\t\t\t\t\t\t\tonDropdownFilterOpened($event)\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__filter-dropdown\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__filter-dropdown-toggle d-flex flex-nowrap gap-2 button filter-dropdown__toggle-content\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__filter-dropdown-icon fa-solid fa-filter\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[class.text-success]=\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfiltersFG.get(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theader.filter\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t?.key ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theader.property\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)?.value?.rules?.length\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[class.filter-dropdown__toggle-content--active]=\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfiltersFG.get(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theader.filter\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t?.key ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theader.property\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)?.value?.rules?.length\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\t\t></i>\n\t\t\t\t\t\t\t\t\t\t\t\t@if (\n\t\t\t\t\t\t\t\t\t\t\t\t\tfiltersFG.get(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theader.filter?.key ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theader.property\n\t\t\t\t\t\t\t\t\t\t\t\t\t)?.value?.rules;\n\t\t\t\t\t\t\t\t\t\t\t\t\tas rules\n\t\t\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t@if (rules.length) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__filter-dropdown-badge badge rounded-pill text-bg-primary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{ rules.length }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t@if (dropdown.isOpened) {\n\t\t\t\t\t\t\t\t\t\t\t\t<menu-filter\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__filter-dropdown-content content filter-dropdown__content\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[header]=\"header\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[formControlName]=\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theader.filter?.key ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theader.property\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t</menu-filter>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</hub-dropdown>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</th>\n\t\t\t\t}\n\t\t\t\t@if (templateExpandingRows().length) {\n\t\t\t\t\t<th\n\t\t\t\t\t\tclass=\"hub-table__header-cell hub-table__header-cell--expander sticky-end\"\n\t\t\t\t\t></th>\n\t\t\t\t}\n\t\t\t</tr>\n\n\t\t\t<!-- Filtering -->\n\t\t\t@if (hasColumnFilters()) {\n\t\t\t\t<tr class=\"hub-table__filter-row\">\n\t\t\t\t\t@if ((selectable() && multiple()) || batchActions.length) {\n\t\t\t\t\t\t<th class=\"hub-table__filter-cell sticky-start\"></th>\n\t\t\t\t\t}\n\t\t\t\t\t@for (\n\t\t\t\t\t\theader of fixedHeaders();\n\t\t\t\t\t\ttrack $index;\n\t\t\t\t\t\tlet last = $last\n\t\t\t\t\t) {\n\t\t\t\t\t\t@let formControlName =\n\t\t\t\t\t\t\theader.filter?.key || header.property;\n\t\t\t\t\t\t<th\n\t\t\t\t\t\t\tclass=\"hub-table__filter-cell\"\n\t\t\t\t\t\t\t[class.sticky-start]=\"header.sticky === 'start'\"\n\t\t\t\t\t\t\t[class.sticky-end]=\"header.sticky === 'end'\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@if (\n\t\t\t\t\t\t\t\theader.filter &&\n\t\t\t\t\t\t\t\theader.filter.mode !== 'menu' &&\n\t\t\t\t\t\t\t\tfiltersFG.get(formControlName)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"\n\t\t\t\t\t\t\t\t\t\tgetFilterTemplate(header) ||\n\t\t\t\t\t\t\t\t\t\tdefaultFilterTpt\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\t\t\theader: header,\n\t\t\t\t\t\t\t\t\t\tformControl:\n\t\t\t\t\t\t\t\t\t\t\tfiltersFG.get(formControlName)\n\t\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</th>\n\t\t\t\t\t}\n\t\t\t\t</tr>\n\t\t\t}\n\t\t</thead>\n\t\t<tbody class=\"hub-table__body\">\n\t\t\t@if (loading()) {\n\t\t\t\t<tr class=\"hub-table__body-row\">\n\t\t\t\t\t<td class=\"hub-table__cell\" [attr.colspan]=\"headersCount()\">\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"\n\t\t\t\t\t\t\t\tloadingTpt() || defaultLoadingTpt\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t} @else if (rows().length) {\n\t\t\t\t@for (item of rows(); track $index) {\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t[ngTemplateOutlet]=\"templateRow() || defaultRowTemplate\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item }\"\n\t\t\t\t\t>\n\t\t\t\t\t</ng-container>\n\t\t\t\t}\n\t\t\t} @else {\n\t\t\t\t<tr>\n\t\t\t\t\t<td [attr.colspan]=\"headersCount()\">\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"noDataTpt() || defaultNoDataTpt\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t}\n\t\t</tbody>\n\t</table>\n</div>\n<div class=\"hub-table__bottom-bar\">\n\t<!-- Pagination -->\n\t@if (page() !== undefined && page() !== null) {\n\t\t@if (\n\t\t\tpaginationPosition() == 'bottom' || paginationPosition() === 'both'\n\t\t) {\n\t\t\t<hub-paginator\n\t\t\t\tclass=\"hub-table__paginator pager-container__paginator\"\n\t\t\t\t[(page)]=\"$any(page)\"\n\t\t\t\t[numberOfPages]=\"numberOfPages()\"\n\t\t\t>\n\t\t\t</hub-paginator>\n\t\t}\n\t\t<div class=\"hub-table__pagination-settings\">\n\t\t\t<label class=\"hub-table__pagination-label\">\n\t\t\t\t{{ 'ROWS_PER_PAGE' | translate | ucfirst }}:\n\t\t\t</label>\n\t\t\t<select\n\t\t\t\tclass=\"hub-table__pagination-select\"\n\t\t\t\t[(ngModel)]=\"perPage\"\n\t\t\t\t[ngModelOptions]=\"{ standalone: true }\"\n\t\t\t>\n\t\t\t\t@for (option of perPageOptions(); track option) {\n\t\t\t\t\t<option\n\t\t\t\t\t\t[value]=\"option\"\n\t\t\t\t\t\tclass=\"hub-table__pagination-select-option\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ option }}\n\t\t\t\t\t</option>\n\t\t\t\t}\n\t\t\t</select>\n\t\t</div>\n\t\t@if (totalItems() !== null && totalItems() !== undefined) {\n\t\t\t<p class=\"hub-table__pagination-info\">\n\t\t\t\t{{\n\t\t\t\t\t'SHOWING_X_OF_Y_ROWS'\n\t\t\t\t\t\t| translate\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tamount: rows().length,\n\t\t\t\t\t\t\t\t\ttotal: totalItems()\n\t\t\t\t\t\t\t  }\n\t\t\t\t\t\t| ucfirst\n\t\t\t\t}}\n\t\t\t</p>\n\t\t}\n\t}\n</div>\n<ng-template #defaultRowTemplate let-item>\n\t<tr\n\t\tclass=\"hub-table__body-row\"\n\t\t(click)=\"onItemClick($event, item)\"\n\t\t[class.hub-table__body-row--selected]=\"selectable() && item.selected\"\n\t\t[class.hub-table__body-row--clickable]=\"clickFn()\"\n\t>\n\t\t@if ((selectable() && multiple()) || batchActions.length) {\n\t\t\t<td class=\"hub-table__cell hub-table__cell--select sticky-start\">\n\t\t\t\t<input\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t[(ngModel)]=\"item.selected\"\n\t\t\t\t\t[ngModelOptions]=\"{ standalone: true }\"\n\t\t\t\t\t(click)=\"$event.stopPropagation(); toggle(item)\"\n\t\t\t\t/>\n\t\t\t</td>\n\t\t}\n\t\t@for (header of fixedHeaders(); track $index) {\n\t\t\t<td\n\t\t\t\tclass=\"hub-table__cell\"\n\t\t\t\t[class.sticky-start]=\"header.sticky === 'start'\"\n\t\t\t\t[class.sticky-end]=\"header.sticky === 'end'\"\n\t\t\t\t[class.text-start]=\"header.align === 'start'\"\n\t\t\t\t[class.text-end]=\"header.align === 'end'\"\n\t\t\t\t[class.text-center]=\"header.align === 'center'\"\n\t\t\t\t[style.width]=\"header.buttons?.length ? '0' : 'auto'\"\n\t\t\t>\n\t\t\t\t<ng-container\n\t\t\t\t\t[ngTemplateOutlet]=\"\n\t\t\t\t\t\tgetCellTemplate(header) || defaultCellTpt\n\t\t\t\t\t\"\n\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\theader: header,\n\t\t\t\t\t\titem: item.data,\n\t\t\t\t\t\trow: item,\n\t\t\t\t\t\tproperty: item.data | get: header.property\n\t\t\t\t\t}\"\n\t\t\t\t>\n\t\t\t\t</ng-container>\n\t\t\t</td>\n\t\t}\n\t\t@if (templateExpandingRows().length) {\n\t\t\t<td\n\t\t\t\tclass=\"hub-table__cell hub-table__cell--expander sticky-end\"\n\t\t\t\t[class.sticky-end]=\"stickyActions()\"\n\t\t\t>\n\t\t\t\t@if (templateExpandingRows().length) {\n\t\t\t\t\t<button\n\t\t\t\t\t\t(click)=\"toggleExpandedRow(item)\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclass=\"hub-table__expander-btn btn btn-link px-2\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<i\n\t\t\t\t\t\t\tclass=\"hub-table__expander-icon fa\"\n\t\t\t\t\t\t\t[class.fa-caret-up]=\"!item.collapsed\"\n\t\t\t\t\t\t\t[class.fa-caret-down]=\"!item.collapsed\"\n\t\t\t\t\t\t></i>\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</td>\n\t\t}\n\t\t<!-- <td *ngIf=\"!lastColumnOnlyHasButtons && filterHeaders?.length\"></td> -->\n\t</tr>\n\t@if (!item.collapsed) {\n\t\t@for (template of templateExpandingRows(); track template) {\n\t\t\t<ng-container\n\t\t\t\t[ngTemplateOutlet]=\"template.templateRef\"\n\t\t\t\t[ngTemplateOutletContext]=\"{ item: item }\"\n\t\t\t>\n\t\t\t</ng-container>\n\t\t}\n\t}\n</ng-template>\n\n<ng-template #defaultNoDataTpt>\n\t<div\n\t\tclass=\"hub-table__no-data alert alert-info d-flex align-items-center m-4\"\n\t\trole=\"alert\"\n\t>\n\t\t<i\n\t\t\tclass=\"hub-table__no-data-icon fa-solid fa-info fa-2x me-4 mr-4\"\n\t\t\taria-hidden=\"true\"\n\t\t></i>\n\t\t{{ 'NO_RESULTS_FOUND' | translate | ucfirst }}\n\t</div>\n</ng-template>\n\n<ng-template #defaultLoadingTpt>\n\t<div class=\"hub-table__loading\">\n\t\t<svg\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\n\t\t\tstyle=\"margin: auto; background: #fff; display: block\"\n\t\t\twidth=\"200px\"\n\t\t\theight=\"200px\"\n\t\t\tviewBox=\"0 0 100 100\"\n\t\t\tpreserveAspectRatio=\"xMidYMid\"\n\t\t>\n\t\t\t<circle\n\t\t\t\tcx=\"50\"\n\t\t\t\tcy=\"50\"\n\t\t\t\tr=\"0\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke=\"#cccccc\"\n\t\t\t\tstroke-width=\"1\"\n\t\t\t>\n\t\t\t\t<animate\n\t\t\t\t\tattributeName=\"r\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\tdur=\"1.6666666666666667s\"\n\t\t\t\t\tvalues=\"0;40\"\n\t\t\t\t\tkeyTimes=\"0;1\"\n\t\t\t\t\tkeySplines=\"0 0.2 0.8 1\"\n\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t></animate>\n\t\t\t\t<animate\n\t\t\t\t\tattributeName=\"opacity\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\tdur=\"1.6666666666666667s\"\n\t\t\t\t\tvalues=\"1;0\"\n\t\t\t\t\tkeyTimes=\"0;1\"\n\t\t\t\t\tkeySplines=\"0.2 0 0.8 1\"\n\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t></animate>\n\t\t\t</circle>\n\t\t\t<circle\n\t\t\t\tcx=\"50\"\n\t\t\t\tcy=\"50\"\n\t\t\t\tr=\"0\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke=\"#333333\"\n\t\t\t\tstroke-width=\"1\"\n\t\t\t>\n\t\t\t\t<animate\n\t\t\t\t\tattributeName=\"r\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\tdur=\"1.6666666666666667s\"\n\t\t\t\t\tvalues=\"0;40\"\n\t\t\t\t\tkeyTimes=\"0;1\"\n\t\t\t\t\tkeySplines=\"0 0.2 0.8 1\"\n\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\tbegin=\"-0.8333333333333334s\"\n\t\t\t\t></animate>\n\t\t\t\t<animate\n\t\t\t\t\tattributeName=\"opacity\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\tdur=\"1.6666666666666667s\"\n\t\t\t\t\tvalues=\"1;0\"\n\t\t\t\t\tkeyTimes=\"0;1\"\n\t\t\t\t\tkeySplines=\"0.2 0 0.8 1\"\n\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\tbegin=\"-0.8333333333333334s\"\n\t\t\t\t></animate>\n\t\t\t</circle>\n\t\t</svg>\n\t</div>\n</ng-template>\n\n<ng-template #defaultErrorTpt>\n\t<div class=\"hub-table__error m-4 p-4 text-center text-danger\">\n\t\t<svg\n\t\t\taria-hidden=\"true\"\n\t\t\tfocusable=\"false\"\n\t\t\tdata-prefix=\"fal\"\n\t\t\tdata-icon=\"sad-tear\"\n\t\t\trole=\"img\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\tviewBox=\"0 0 496 512\"\n\t\t\tclass=\"svg-inline--fa-solid fa-sad-tear fa-w-16 fa-7x\"\n\t\t\tstyle=\"height: 64px\"\n\t\t>\n\t\t\t<path\n\t\t\t\tfill=\"#dc3545\"\n\t\t\t\td=\"M168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 464c-119.1 0-216-96.9-216-216S128.9 40 248 40s216 96.9 216 216-96.9 216-216 216zm0-152c-11.2 0-22 1.7-32.7 4.1-7.2-12.6-16.1-26.5-28.1-42.4-9-12.1-29.4-12-38.4 0-29.7 39.6-44.8 69-44.8 87.3 0 34.7 28.7 63 64 63s64-28.3 64-63c0-4.4-1-9.5-2.7-15.1 6.1-1.2 12.3-1.9 18.7-1.9 34.9 0 67.8 15.4 90.2 42.2 5.3 6.4 15.4 8 22.5 2 6.8-5.7 7.7-15.8 2-22.5C334.2 339.6 292.4 320 248 320zm-80 80c-17.7 0-32-13.9-32-31 0-7.7 10-28.8 32-59.5 22 30.7 32 51.8 32 59.5 0 17.1-14.3 31-32 31z\"\n\t\t\t\tclass=\"\"\n\t\t\t></path>\n\t\t</svg>\n\t\t<p>{{ 'ERROR_OCURRED' | translate }}</p>\n\t</div>\n</ng-template>\n\n<ng-template #defaultHeaderTpt let-header=\"header\" let-property=\"property\">\n\t@if (header.icon) {\n\t\t<i\n\t\t\tclass=\"hub-table__header-icon fa-solid fa-{{ header.icon }}\"\n\t\t\t[class.me-2]=\"header.title\"\n\t\t\taria-hidden=\"true\"\n\t\t></i>\n\t}\n\t<div\n\t\tclass=\"hub-table__header-title\"\n\t\t[class.me-auto]=\"header.align === 'start'\"\n\t\t[class.ms-auto]=\"header.align === 'end'\"\n\t\t[class.mx-auto]=\"header.align === 'center'\"\n\t>\n\t\t@if (header.title) {\n\t\t\t<span class=\"hub-table__header-title-text text-wrap\">{{\n\t\t\t\theader.title ?? header.property | unwrapAsync\n\t\t\t}}</span>\n\t\t}\n\t</div>\n</ng-template>\n\n<ng-template\n\t#defaultFilterTpt\n\tlet-header=\"header\"\n\tlet-formControl=\"formControl\"\n>\n\t@switch (header.filter.type) {\n\t\t@case ('dropdown') {\n\t\t\t<select\n\t\t\t\t[formControl]=\"formControl\"\n\t\t\t\tclass=\"form-select form-control\"\n\t\t\t>\n\t\t\t\t@if (header.filter.placeholder) {\n\t\t\t\t\t<option [ngValue]=\"null\">\n\t\t\t\t\t\t{{ header.filter.placeholder }}\n\t\t\t\t\t</option>\n\t\t\t\t}\n\t\t\t\t@if (header.filter.options | isObservable) {\n\t\t\t\t\t@let options = header.filter.options | async;\n\t\t\t\t\t@for (option of $any(options); track option) {\n\t\t\t\t\t\t<option\n\t\t\t\t\t\t\t[value]=\"option[header.filter.bindValue || 'id']\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ option[header.filter.bindLabel || 'name'] }}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t}\n\t\t\t\t} @else {\n\t\t\t\t\t@for (option of header.filter.options; track option) {\n\t\t\t\t\t\t<option\n\t\t\t\t\t\t\t[value]=\"option[header.filter.bindValue || 'id']\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ option[header.filter.bindLabel || 'name'] }}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</select>\n\t\t}\n\t\t@case ('number-range') {\n\t\t\t<hub-table-range-input type=\"number\" [formControl]=\"formControl\">\n\t\t\t</hub-table-range-input>\n\t\t}\n\t\t@case ('date-range') {\n\t\t\t<hub-table-range-input type=\"date\" [formControl]=\"formControl\">\n\t\t\t</hub-table-range-input>\n\t\t}\n\t\t@case ('boolean') {\n\t\t\t<select\n\t\t\t\t[formControl]=\"formControl\"\n\t\t\t\tclass=\"form-select form-control\"\n\t\t\t>\n\t\t\t\t<option [ngValue]=\"null\">\n\t\t\t\t\t{{\n\t\t\t\t\t\theader.filter.placeholder ?? 'SELECT_ONE'\n\t\t\t\t\t\t\t| translate\n\t\t\t\t\t\t\t| ucfirst\n\t\t\t\t\t}}\n\t\t\t\t</option>\n\t\t\t\t<option [ngValue]=\"true\">\n\t\t\t\t\t{{\n\t\t\t\t\t\theader.filter.trueLabel ??\n\t\t\t\t\t\t\t('TRUE' | translate | ucfirst)\n\t\t\t\t\t}}\n\t\t\t\t</option>\n\t\t\t\t<option [ngValue]=\"false\">\n\t\t\t\t\t{{\n\t\t\t\t\t\theader.filter.falseLabel ??\n\t\t\t\t\t\t\t('FALSE' | translate | ucfirst)\n\t\t\t\t\t}}\n\t\t\t\t</option>\n\t\t\t</select>\n\t\t}\n\t\t@default {\n\t\t\t<input\n\t\t\t\t[type]=\"header.filter.type\"\n\t\t\t\t[formControl]=\"formControl\"\n\t\t\t\tclass=\"form-control\"\n\t\t\t\t[placeholder]=\"header.filter.placeholder || ''\"\n\t\t\t/>\n\t\t}\n\t}\n</ng-template>\n\n<ng-template\n\t#defaultCellTpt\n\tlet-property=\"property\"\n\tlet-item=\"item\"\n\tlet-row=\"row\"\n\tlet-header=\"header\"\n>\n\t@if (header.buttons) {\n\t\t<div\n\t\t\tclass=\"hub-table__cell-buttons d-flex flex-nowrap gap-2 justify-content-end align-items-center\"\n\t\t>\n\t\t\t@for (button of header.buttons; track button) {\n\t\t\t\t@if (button.buttons) {\n\t\t\t\t\t<hub-table-dropdown\n\t\t\t\t\t\t[options]=\"button\"\n\t\t\t\t\t\t[row]=\"row\"\n\t\t\t\t\t\tclass=\"hub-table__cell-dropdown d-inline-block\"\n\t\t\t\t\t>\n\t\t\t\t\t</hub-table-dropdown>\n\t\t\t\t} @else {\n\t\t\t\t\t@if (!(isHidden(button, row) | async)) {\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"hub-table__cell-btn btn px-1\"\n\t\t\t\t\t\t\t[attr.title]=\"button.tooltip | unwrapAsync\"\n\t\t\t\t\t\t\t(click)=\"handleAction($event, button.handler, row)\"\n\t\t\t\t\t\t\t[ngClass]=\"button.classlist ?? []\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"hub-table__cell-btn-content d-flex flex-nowrap align-items-center gap-1\"\n\t\t\t\t\t\t\t\t[ngClass]=\"\n\t\t\t\t\t\t\t\t\tbutton.color ? 'text-' + button.color : ''\n\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ng-hub-ui-icon\n\t\t\t\t\t\t\t\t\t[config]=\"button.icon\"\n\t\t\t\t\t\t\t\t></ng-hub-ui-icon>\n\t\t\t\t\t\t\t\t@if (button.title) {\n\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__cell-btn-label button-label\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{{ button.title }}\n\t\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t} @else {\n\t\t<span class=\"hub-table__cell-value\">{{ property }}</span>\n\t}\n</ng-template>\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, Inject, Output } from '@angular/core';\nimport {\n\tdistinctUntilChanged,\n\tmap,\n\tswitchMap,\n\ttakeUntil,\n\ttap\n} from 'rxjs/operators';\nimport { fromEvent } from 'rxjs';\n\n@Directive({\n\tselector: '[resizable]'\n})\nexport class ResizableDirective {\n\t@Output()\n\treadonly resizable = fromEvent<MouseEvent>(\n\t\tthis.elementRef.nativeElement,\n\t\t'mousedown'\n\t).pipe(\n\t\ttap((e) => e.preventDefault()),\n\t\tswitchMap(() => {\n\t\t\tconst { width, right } = this.elementRef.nativeElement\n\t\t\t\t.closest('th')!\n\t\t\t\t.getBoundingClientRect();\n\t\t\treturn fromEvent<MouseEvent>(this.documentRef, 'mousemove').pipe(\n\t\t\t\tmap(({ clientX }) => width + clientX - right),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttakeUntil(fromEvent(this.documentRef, 'mouseup'))\n\t\t\t);\n\t\t})\n\t);\n\n\tconstructor(\n\t\t@Inject(DOCUMENT) private readonly documentRef: any /* Document */,\n\t\t@Inject(ElementRef) private readonly elementRef: ElementRef<HTMLElement>\n\t) {}\n}\n","import {\n\tDirective,\n\tElementRef,\n\tHostListener,\n\tInput,\n\tRenderer2\n} from '@angular/core';\n\n@Directive({\n\tselector: '[tooltip]'\n})\nexport class TooltipDirective {\n\t@Input('tooltip') tooltipTitle!: string;\n\t@Input() placement?: string;\n\t@Input() delay?: number;\n\ttooltip!: HTMLElement | null;\n\toffset = 8;\n\n\tconstructor(private el: ElementRef, private renderer: Renderer2) {}\n\n\t@HostListener('mouseenter') onMouseEnter() {\n\t\tif (!this.tooltip) {\n\t\t\tthis.show();\n\t\t}\n\t}\n\n\t@HostListener('click') onClick() {\n\t\tif (this.tooltip) {\n\t\t\tthis.hide();\n\t\t}\n\t}\n\n\t@HostListener('mouseleave') onMouseLeave() {\n\t\tif (this.tooltip) {\n\t\t\tthis.hide();\n\t\t}\n\t}\n\n\tshow() {\n\t\tthis.create();\n\t\tthis.setPosition();\n\t\tthis.renderer.addClass(this.tooltip, 'ng-tooltip-show');\n\t}\n\n\thide() {\n\t\tthis.renderer.removeClass(this.tooltip, 'ng-tooltip-show');\n\t\twindow.setTimeout(() => {\n\t\t\tthis.renderer.removeChild(document.body, this.tooltip);\n\t\t\tthis.tooltip = null;\n\t\t}, this.delay);\n\t}\n\n\tcreate() {\n\t\tthis.tooltip = this.renderer.createElement('span');\n\n\t\tthis.renderer.appendChild(\n\t\t\tthis.tooltip,\n\t\t\tthis.renderer.createText(this.tooltipTitle) // textNode\n\t\t);\n\n\t\tthis.renderer.appendChild(document.body, this.tooltip);\n\t\t// this.renderer.appendChild(this.el.nativeElement, this.tooltip);\n\n\t\tthis.renderer.addClass(this.tooltip, 'ng-tooltip');\n\t\tthis.renderer.addClass(this.tooltip, `ng-tooltip-${this.placement}`);\n\n\t\t// delay 설정\n\t\tthis.renderer.setStyle(\n\t\t\tthis.tooltip,\n\t\t\t'-webkit-transition',\n\t\t\t`opacity ${this.delay}ms`\n\t\t);\n\t\tthis.renderer.setStyle(\n\t\t\tthis.tooltip,\n\t\t\t'-moz-transition',\n\t\t\t`opacity ${this.delay}ms`\n\t\t);\n\t\tthis.renderer.setStyle(\n\t\t\tthis.tooltip,\n\t\t\t'-o-transition',\n\t\t\t`opacity ${this.delay}ms`\n\t\t);\n\t\tthis.renderer.setStyle(\n\t\t\tthis.tooltip,\n\t\t\t'transition',\n\t\t\t`opacity ${this.delay}ms`\n\t\t);\n\t}\n\n\tsetPosition() {\n\t\tif (!this.tooltip) {\n\t\t\treturn;\n\t\t}\n\t\t// 호스트 요소의 사이즈와 위치 정보\n\t\tconst hostPos = this.el.nativeElement.getBoundingClientRect();\n\n\t\t// tooltip 요소의 사이즈와 위치 정보\n\t\tconst tooltipPos = this.tooltip.getBoundingClientRect();\n\n\t\t// window의 scroll top\n\t\t// getBoundingClientRect 메소드는 viewport에서의 상대적인 위치를 반환한다.\n\t\t// 스크롤이 발생한 경우, tooltip 요소의 top에 세로 스크롤 좌표값을 반영하여야 한다.\n\t\tconst scrollPos =\n\t\t\twindow.pageYOffset ||\n\t\t\tdocument.documentElement.scrollTop ||\n\t\t\tdocument.body.scrollTop ||\n\t\t\t0;\n\n\t\tlet top, left;\n\n\t\tif (this.placement === 'top') {\n\t\t\ttop = hostPos.top - tooltipPos.height - this.offset;\n\t\t\tleft = hostPos.left + (hostPos.width - tooltipPos.width) / 2;\n\t\t}\n\n\t\tif (this.placement === 'bottom') {\n\t\t\ttop = hostPos.bottom + this.offset;\n\t\t\tleft = hostPos.left + (hostPos.width - tooltipPos.width) / 2;\n\t\t}\n\n\t\tif (this.placement === 'left') {\n\t\t\ttop = hostPos.top + (hostPos.height - tooltipPos.height) / 2;\n\t\t\tleft = hostPos.left - tooltipPos.width - this.offset;\n\t\t}\n\n\t\tif (this.placement === 'right') {\n\t\t\ttop = hostPos.top + (hostPos.height - tooltipPos.height) / 2;\n\t\t\tleft = hostPos.right + this.offset;\n\t\t}\n\n\t\t// 스크롤이 발생한 경우, tooltip 요소의 top에 세로 스크롤 좌표값을 반영하여야 한다.\n\t\tthis.renderer.setStyle(this.tooltip, 'top', `${top + scrollPos}px`);\n\t\tthis.renderer.setStyle(this.tooltip, 'left', `${left}px`);\n\t}\n}\n","import { Observable } from 'rxjs';\nimport { PaginableTableDropdown } from './paginable-table-dropdown';\nimport { RowButton } from './row-button';\n\nexport interface PaginableTableHeader {\n\ttitle?: string | Observable<string>;\n\tproperty: string;\n\ticon?: string | Icon;\n\talign?: 'start' | 'end' | 'center';\n\tsortable?: boolean;\n\twrapping?: 'wrap' | 'nowrap';\n\tsticky?: 'start' | 'end';\n\tbuttons?: Array<RowButton | PaginableTableDropdown>;\n\tfilter?: InputFilter | DropdownFilter | BooleanFilter;\n\tonlyButtons?: boolean;\n}\n\n/**\n * Represents the configuration for an input filter used in a paginable table header.\n *\n * @property mode - Optional. Specifies the display mode of the filter input, either 'row' or 'menu'.\n * @property type - The type of the filter input, defined by `MenuFilterInputType`.\n * @property key - Optional. The key associated with the filter, typically used for identifying the filter field.\n * @property placeholder - Optional. Placeholder text to display in the filter input.\n */\ninterface InputFilter {\n\tmode?: 'row' | 'menu';\n\ttype: `${MenuFilterInputType}`;\n\tkey?: string;\n\tplaceholder?: string;\n}\n\n/**\n * Enum representing the available input types for menu filters.\n * These types define how the user can input data for filtering.\n */\nexport enum MenuFilterInputType {\n\t/**\n\t * A simple text input (e.g., string, keyword).\n\t */\n\tText = 'text',\n\n\t/**\n\t * A single numeric input (e.g., quantity, price).\n\t */\n\tNumber = 'number',\n\n\t/**\n\t * A range input for numbers (e.g., min and max values).\n\t */\n\tNumberRange = 'number-range',\n\n\t/**\n\t * A single date input (e.g., created at, due date).\n\t */\n\tDate = 'date',\n\n\t/**\n\t * A range input for dates (e.g., from - to).\n\t */\n\tDateRange = 'date-range',\n\n\t/**\n\t * A boolean input for true/false filters\n\t */\n\tBoolean = 'boolean'\n}\n\ninterface DropdownFilter {\n\ttype: 'dropdown';\n\tmode?: 'row' | 'menu';\n\tkey?: string;\n\toptions: any[] | Promise<any[]> | Observable<any[]>;\n\tplaceholder?: string;\n\tbindLabel?: string;\n\tbindValue?: string;\n}\n\ninterface BooleanFilter {\n\ttype: 'boolean';\n\tmode?: 'row' | 'menu';\n\tkey?: string;\n\tplaceholder?: string;\n\ttrueLabel?: string;\n\tfalseLabel?: string;\n}\n\nexport interface Icon {\n\ttype: 'font-awesome' | 'material' | 'bootstrap';\n\tvariant?: string;\n\tvalue: string;\n}\n","import { Injectable } from '@angular/core';\nimport { PaginableTablePagination } from '../interfaces/paginable-table-pagination';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class PaginationService {\n\tgenerate(items: any[], params: any): any {\n\t\tlet filtered: Array<any> = [];\n\t\tif (items && items.length) {\n\t\t\tfiltered = items.concat();\n\t\t\tif (params.searchText && params.searchKeys) {\n\t\t\t\tconst searchText = params.searchText;\n\t\t\t\tif (searchText && searchText.trim() !== '') {\n\t\t\t\t\tfiltered = filtered.filter((item) => {\n\t\t\t\t\t\treturn params.searchKeys.some(\n\t\t\t\t\t\t\t(o) =>\n\t\t\t\t\t\t\t\tthis.get(item, o)\n\t\t\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t\t\t\t\t.indexOf(searchText) > -1\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (params.ordination) {\n\t\t\t\tfiltered = this.orderBy(\n\t\t\t\t\tfiltered,\n\t\t\t\t\tparams.ordination.property,\n\t\t\t\t\tparams.ordination.direction\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tconst page = params.page || 1;\n\n\t\t// Si la paginación viene del servidor y no está establecida, establecer a true\n\t\tif (params.paginate === undefined) {\n\t\t\tparams.paginate = true;\n\t\t}\n\t\tconst perPage = params.paginate\n\t\t\t? params.perPage || 20\n\t\t\t: filtered.length;\n\n\t\tconst pagination: PaginableTablePagination = {\n\t\t\tcurrentPage: page,\n\t\t\tlastPage: Math.ceil(filtered.length / perPage),\n\t\t\tperPage,\n\t\t\tfrom: (page - 1) * perPage,\n\t\t\tto: page * perPage,\n\t\t\ttotal: filtered.length,\n\t\t\tdata: filtered.slice((page - 1) * perPage, page * perPage)\n\t\t};\n\n\t\treturn pagination;\n\t}\n\n\t/**\n\t * Creates an array of elements, sorted in ascending or descending order by the results of running each element\n\t * in a collection thru each iteratee. This method performs a stable sort, that is, it preserves the original s\n\t * ort order of equal elements. The iteratees are invoked with one argument: (value).\n\t *\n\t * @param collection\n\t * @param iteratee\n\t * @param direction\n\t */\n\torderBy(\n\t\tcollection: any[],\n\t\titeratee: string,\n\t\tdirection: string = 'ASC'\n\t): any[] {\n\t\treturn collection.sort((b, a) => {\n\t\t\tconst aSort = this.get(a, iteratee);\n\t\t\tconst bSort = this.get(b, iteratee);\n\t\t\tif (direction === 'DESC') {\n\t\t\t\treturn aSort > bSort ? 1 : bSort > aSort ? -1 : 0;\n\t\t\t} else {\n\t\t\t\treturn aSort < bSort ? 1 : bSort < aSort ? -1 : 0;\n\t\t\t}\n\t\t});\n\t}\n\n\tget(object: any, path: string | any[]) {\n\t\tif (path.constructor.name === 'String') {\n\t\t\tpath = (path as string).split('.');\n\t\t}\n\t\treturn (path as any[]).reduce(\n\t\t\t(o, k) => (o && o[k] !== 'undefined' ? o[k] : undefined),\n\t\t\tobject\n\t\t);\n\t}\n}\n","export enum SelectionTypes {\n\tSingle = 'single',\n\tMultiple = 'multiple'\n}\n","// Modules\nexport { TableModule } from './paginable.module';\n\n// Components\nexport { HubIconComponent } from './components/icon/icon.component';\nexport { PaginableListComponent } from './components/list/paginable-list/paginable-list.component';\nexport { PaginableTableDropdownComponent } from './components/paginable-table-dropdown/paginable-table-dropdown.component';\nexport { PaginableTableRangeInputComponent } from './components/paginable-table-range-input/paginable-table-range-input.component';\nexport { PaginatorComponent } from './components/paginator/paginator.component';\nexport { ResizableComponent } from './components/resizable/resizable.component';\nexport { TableComponent } from './components/table/table.component';\n\n// Directives\nexport { PaginableListItemDirective } from './directives/paginable-list-item.directive';\nexport { PaginableTableCellDirective } from './directives/paginable-table-cell.directive';\nexport { PaginableTableErrorDirective } from './directives/paginable-table-error.directive';\nexport { PaginableTableExpandingRowDirective } from './directives/paginable-table-expanding-row.directive';\nexport { PaginableTableFilterDirective } from './directives/paginable-table-filter.directive';\nexport { PaginableTableHeaderDirective } from './directives/paginable-table-header.directive';\nexport { PaginableTableLoadingDirective } from './directives/paginable-table-loading.directive';\nexport { PaginableTableNotFoundDirective } from './directives/paginable-table-not-found.directive';\nexport { PaginableTableRowDirective } from './directives/paginable-table-row.directive';\nexport { ResizableDirective } from './directives/resizable.directive';\nexport { TooltipDirective } from './directives/tooltip.directive';\n\n// Interfaces\nexport * from './interfaces';\n\n// Services\nexport { PaginableTranslationService } from './services/paginable-translation.service';\nexport { PaginableService } from './services/paginable.service';\nexport { PaginationService } from './services/pagination.service';\n\n// Constants\nexport { TableBreakpoint } from './constants/breakpoints';\n\n// Enums\nexport { SelectionTypes } from './enums/selection-types';\n","/*\n * Public API Surface of paginable\n */\n\nexport * from './lib';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["locale","enLang","esLang","i1","distinctUntilChanged"],"mappings":";;;;;;;;;;;AAAO,MAAMA,QAAM,GAAG;AACrB,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,IAAI,EAAE;AACL,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,aAAa,EAAE,eAAe;AAC9B,QAAA,mBAAmB,EAAE,0CAA0C;AAC/D,QAAA,gBAAgB,EAAE,kBAAkB;AACpC,QAAA,aAAa,EAAE,eAAe;AAC9B,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,aAAa,EAAE,6BAA6B;AAC5C,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,EAAE,EAAE,IAAI;AACR,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,WAAW,EAAE,aAAa;AAC1B,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,gBAAgB,EAAE,4BAA4B;AAC9C,QAAA,WAAW,EAAE,eAAe;AAC5B,QAAA,aAAa,EAAE,eAAe;AAC9B,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,sBAAsB,EACrB,yDAAyD;AAC1D,QAAA,wBAAwB,EAAE,2BAA2B;AACrD,QAAA,4BAA4B,EAC3B,0CAA0C;AAC3C,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,aAAa,EAAE,eAAe;AAC9B,QAAA,UAAU,EAAE,YAAY;AACxB,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,iBAAiB,EAAE,mBAAmB;AACtC,QAAA,WAAW,EAAE,mCAAmC;AAChD,QAAA,UAAU,EAAE;AACX,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,QAAQ,EAAE;AACV,SAAA;AACD,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,QAAQ,EAAE,eAAe;AACzB,QAAA,WAAW,EAAE,kBAAkB;AAC/B,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,WAAW,EAAE;AACZ,YAAA,WAAW,EAAE,cAAc;AAC3B,YAAA,kBAAkB,EAAE,0BAA0B;AAC9C,YAAA,QAAQ,EAAE,WAAW;AACrB,YAAA,eAAe,EAAE,uBAAuB;AACxC,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,SAAS,EAAE,cAAc;AACzB,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,aAAa,EAAE,oBAAoB;AACnC,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,YAAY,EAAE,mBAAmB;AACjC,YAAA,UAAU,EAAE,aAAa;AACzB,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,WAAW,EAAE,kBAAkB;AAC/B,YAAA,QAAQ,EAAE;AACV;AACD,KAAA;AACD,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,KAAK,EAAE;CACP;;ACrEM,MAAM,MAAM,GAAG;AACrB,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,IAAI,EAAE;AACL,QAAA,OAAO,EAAE,UAAU;AACnB,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,aAAa,EAAE,kBAAkB;AACjC,QAAA,mBAAmB,EAAE,kDAAkD;AACvE,QAAA,gBAAgB,EAAE,iCAAiC;AACnD,QAAA,aAAa,EAAE,kBAAkB;AACjC,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,aAAa,EAAE,4CAA4C;AAC3D,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,EAAE,EAAE,OAAO;AACX,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,QAAQ,EAAE,aAAa;AACvB,QAAA,QAAQ,EAAE,cAAc;AACxB,QAAA,SAAS,EAAE,cAAc;AACzB,QAAA,WAAW,EAAE,gBAAgB;AAC7B,QAAA,YAAY,EAAE,iBAAiB;AAC/B,QAAA,MAAM,EAAE,UAAU;AAClB,QAAA,gBAAgB,EAAE,uBAAuB;AACzC,QAAA,WAAW,EAAE,sBAAsB;AACnC,QAAA,aAAa,EAAE,iBAAiB;AAChC,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,sBAAsB,EACrB,mDAAmD;AACpD,QAAA,wBAAwB,EAAE,qCAAqC;AAC/D,QAAA,4BAA4B,EAAE,qCAAqC;AACnE,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,SAAS,EAAE,MAAM;AACjB,QAAA,YAAY,EAAE,eAAe;AAC7B,QAAA,SAAS,EAAE,eAAe;AAC1B,QAAA,aAAa,EAAE,YAAY;AAC3B,QAAA,UAAU,EAAE,YAAY;AACxB,QAAA,YAAY,EAAE,YAAY;AAC1B,QAAA,SAAS,EAAE,YAAY;AACvB,QAAA,iBAAiB,EAAE,gCAAgC;AACnD,QAAA,WAAW,EAAE,8CAA8C;AAC3D,QAAA,UAAU,EAAE;AACX,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,QAAQ,EAAE;AACV,SAAA;AACD,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,QAAQ,EAAE,kBAAkB;AAC5B,QAAA,WAAW,EAAE,oBAAoB;AACjC,QAAA,SAAS,EAAE,gBAAgB;AAC3B,QAAA,SAAS,EAAE,gBAAgB;AAC3B,QAAA,WAAW,EAAE;AACZ,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,kBAAkB,EAAE,mBAAmB;AACvC,YAAA,QAAQ,EAAE,WAAW;AACrB,YAAA,eAAe,EAAE,mBAAmB;AACpC,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,SAAS,EAAE,YAAY;AACvB,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,QAAQ,EAAE,YAAY;AACtB,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,aAAa,EAAE,iBAAiB;AAChC,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,YAAY,EAAE,mBAAmB;AACjC,YAAA,UAAU,EAAE,cAAc;AAC1B,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,WAAW,EAAE,aAAa;AAC1B,YAAA,QAAQ,EAAE;AACV;AACD,KAAA;AACD,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,KAAK,EAAE;CACP;;AClEM,MAAM,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI;AACpE,MAAM,wBAAwB,GAAyB;AAC7D,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,OAAO,EAAE;AACR,QAAA,WAAW,EAAE,aAAa;AAC1B,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,KAAK,EAAE;AACP,KAAA;AACD,IAAA,KAAK,EAAE;AACN,QAAA,GAAG,EAAE;AACL,KAAA;AACD,IAAA,QAAQ,EAAE;CACV;;ACfD;;;;;;;;;;;;AAYG;AACa,SAAA,MAAM,CAAC,EAAO,EAAE,EAAO,EAAA;AACtC,IAAA,IAAI,EAAE,KAAK,EAAE,EAAE;AACd,QAAA,OAAO,IAAI;;IAEZ,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE;AAC/B,QAAA,OAAO,KAAK;;IAEb,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;AAC3B,QAAA,OAAO,IAAI;AACZ,KAAC;AACD,IAAA,IAAI,EAAE,GAAG,OAAO,EAAE,EACjB,EAAE,GAAG,OAAO,EAAE,EACd,MAAc,EACd,GAAQ,EACR,MAAW;IACZ,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,QAAQ,EAAE;AAC/B,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;AACvB,gBAAA,OAAO,KAAK;;AAEb,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,EAAE;gBACtC,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,EAAE;AAClC,oBAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC9B,wBAAA,OAAO,KAAK;;;AAGd,gBAAA,OAAO,IAAI;;;aAEN;AACN,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;AACtB,gBAAA,OAAO,KAAK;;AAEb,YAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AAC5B,YAAA,KAAK,GAAG,IAAI,EAAE,EAAE;AACf,gBAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC9B,oBAAA,OAAO,KAAK;;AAEb,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI;;AAEnB,YAAA,KAAK,GAAG,IAAI,EAAE,EAAE;AACf,gBAAA,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,WAAW,EAAE;AACvD,oBAAA,OAAO,KAAK;;;AAGd,YAAA,OAAO,IAAI;;;AAGb,IAAA,OAAO,KAAK;AACb;AAEA;;;;;;AAMG;AACG,SAAU,SAAS,CAAC,KAAU,EAAA;IACnC,OAAO,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI;AACtD;AAEA;;;;;;AAMG;AACG,SAAU,QAAQ,CAAC,IAAS,EAAA;AACjC,IAAA,OAAO,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAChE;AAEA;;;;;;;AAOG;AACa,SAAA,SAAS,CAAC,MAAW,EAAE,MAAW,EAAA;IACjD,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;IACtC,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;QACzC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAQ,KAAI;YACxC,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;AAC1B,gBAAA,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,EAAE;AACrB,oBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;;qBACvC;AACN,oBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;;iBAE5C;AACN,gBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;;AAE/C,SAAC,CAAC;;AAEH,IAAA,OAAO,MAAM;AACd;AAEA;;;;;;AAMG;AACG,SAAU,gBAAgB,CAAC,MAAc,EAAA;IAC9C,MAAM,UAAU,GACf,gEAAgE;AACjE,IAAA,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM;IAC1C,IAAI,MAAM,GAAG,EAAE;AAEf,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AAChC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,gBAAgB,CAAC;AAChE,QAAA,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC;;AAGzC,IAAA,OAAO,MAAM;AACd;AAEA;;;;;;;;;;;AAWG;AACG,SAAU,iBAAiB,CAChC,IAAe,GAAA,EAAE,EACjB,MAAc,GAAA,EAAE,EAChB,eAAA,GAA0B,uBAAuB,EAAA;IAEjD,IAAI,CAAC,MAAM,EAAE;AACZ,QAAA,OAAO,IAAI;;IAGZ,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,SAAiB,EAAE,CAAS,KAAI;QACrE,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AAC3B,QAAA,OAAO,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS;AACpC,KAAC,CAAC;AACH;AAEA;;;;;;;;AAQG;AACa,SAAA,QAAQ,CAAC,MAAW,EAAE,GAAW,EAAA;IAChD,IAAI,IAAI,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;IAC3D,GAAG,GAAG,EAAE;AACR,IAAA,GAAG;AACF,QAAA,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;QACnB,IACC,SAAS,CAAC,MAAM,CAAC;AACjB,YAAA,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACtB,aAAC,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAChD;AACD,YAAA,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;YACpB,GAAG,GAAG,EAAE;;AACF,aAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACxB,MAAM,GAAG,SAAS;;aACZ;YACN,GAAG,IAAI,GAAG;;AAEZ,KAAC,QAAQ,IAAI,CAAC,MAAM;AAEpB,IAAA,OAAO,MAAM;AACd;;ACzLA;;;AAGG;AACH;AACO,MAAM,sBAAsB,GAAG,IAAI,cAAc,CACvD,iBAAiB,CACjB;;MCHY,gBAAgB,CAAA;AAG5B,IAAA,IAAI,OAAO,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO;;AAG3B,IAAA,WAAA,CAGS,UAAU,wBAAwB,EAAA;QAAlC,IAAO,CAAA,OAAA,GAAP,OAAO;QAEf,IAAI,CAAC,UAAU,EAAE;;IAGlB,UAAU,GAAA;QACT,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,wBAAwB,EAAE,IAAI,CAAC,OAAO,CAAC;;AAhBpD,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,kBASnB,sBAAsB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHATnB,gBAAgB,EAAA,CAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B;;0BASE;;0BACA,MAAM;2BAAC,sBAAsB;;;MCRnB,2BAA2B,CAAA;AACvC,IAAA,aAAa;AAgBb,IAAA,WAAA,GAAA;AAhBA,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAExC,QAAA,IAAA,CAAA,mBAAmB,GAAiC,CAACC,QAAM,EAAEC,MAAM,CAAC,CAAC,MAAM,CAC1E,CAAC,GAAG,EAAE,CAAC,KAAI;YACV,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI;AACpB,YAAA,OAAO,GAAG;SACV,EACD,EAAE,CACF;AAIO,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAO;AAE9C,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;QAG1D,IAAI,CAAC,UAAU,EAAE;;IAGlB,UAAU,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,CACnB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC3D,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAC/B;;AAGF;;;;;;;;AAQG;AACH,IAAA,cAAc,CAAC,GAAW,EAAA;QACzB,OAAO,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC;;AAGxC;;;;;;AAMG;IACH,eAAe,CAAC,eAA6C,EAAE,EAAA;QAC9D,IAAI,CAAC,YAAY,GAAG,EAAE,GAAGD,QAAM,EAAE,GAAG,YAAY,EAAE;QAClD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;;8GAlDnC,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA3B,2BAA2B,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC;;;ACFD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MAyBa,WAAW,CAAA;IACvB,OAAO,OAAO,CACb,MAA6B,EAAA;QAE7B,OAAO;AACN,YAAA,QAAQ,EAAE,WAAW;AACrB,YAAA,SAAS,EAAE;AACV,gBAAA;AACC,oBAAA,OAAO,EAAE,sBAAsB;AAC/B,oBAAA,QAAQ,EAAE;AACV,iBAAA;gBACD,gBAAgB;gBAChB;AACA;SACD;;8GAdU,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAX,WAAW,EAAA,CAAA,CAAA;+GAAX,WAAW,EAAA,CAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAvBvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,OAAO,EAAE;;;;;;;;;AASR,qBAAA;AACD,oBAAA,OAAO,EAAE;;;;;;;;;AASR,qBAAA;AACD,oBAAA,SAAS,EAAE;AACX,iBAAA;;;ACpCD;;;;;;;;AAQG;AACG,SAAU,wBAAwB,CAAC,KAAa,EAAA;;AAErD,IAAA,MAAM,SAAS,GAAG;QACjB,UAAU;QACV,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,SAAS;QACT;KACA;;AAGD,IAAA,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,IAAA,CAAM,EAAE,GAAG,CAAC;;AAGtE,IAAA,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC;AAEA;;;;;;;;AAQG;AACG,SAAU,2BAA2B,CAAC,KAAa,EAAA;;IAExD,MAAM,YAAY,GAAG,QAAQ;;AAG7B,IAAA,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC;;AC1CA;;;AAGG;AAaH;;;;;;;AAOG;MAQU,gBAAgB,CAAA;AAC5B;;;;AAIG;IACH,IACI,MAAM,CAAC,KAAgC,EAAA;QAC1C,IAAI,CAAC,KAAK,EAAE;YACX,KAAK,GAAG,EAAE;;AAEX,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC9B,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;aACZ;YACN,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI;YAC9B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE;YAClC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI;;;AAyBlC;;;;AAIG;AACH,IAAA,IAAI,SAAS,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AAChB,YAAA,OAAO,IAAI;;AAGZ,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACf,OAAO,IAAI,CAAC,KAAK;;QAGlB,MAAM,SAAS,GAAkB,EAAE;AACnC,QAAA,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACtD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAC9B,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;;iBACvB;AACN,gBAAA,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;;AAI1C,QAAA,QAAQ,IAAI,CAAC,IAAI;AAChB,YAAA,KAAK,cAAc;gBAClB,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;AACnD,oBAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;gBAErB;AACD,YAAA,KAAK,WAAW;gBACf,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;AACnD,oBAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;gBAErB;AACD,YAAA,KAAK,UAAU;AACd,gBAAA,SAAS,CAAC,IAAI,CAAC,2BAA2B,CAAC;gBAC3C;;AAGF,QAAA,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;;AAG3B;;;;AAIG;AACH,IAAA,IAAI,OAAO,GAAA;QACV,OAAO,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI;;8GAzFhD,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/B7B,8EAKA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDsBW,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAIL,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;+BACC,0BAA0B,EAAA,UAAA,EACxB,IAAI,EACP,OAAA,EAAA,CAAC,OAAO,CAAC,EAAA,eAAA,EAED,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,8EAAA,EAAA;8BAS3C,MAAM,EAAA,CAAA;sBADT,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;;MEhCb,0BAA0B,CAAA;AACtC,IAAA,WAAA,CAAmB,QAA0B,EAAA;QAA1B,IAAQ,CAAA,QAAA,GAAR,QAAQ;;8GADf,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE;AACV,iBAAA;;;MCEY,+BAA+B,CAAA;AAC3C,IAAA,WAAA,CAAmB,QAA0B,EAAA;QAA1B,IAAQ,CAAA,QAAA,GAAR,QAAQ;;8GADf,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAJ3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,uCAAuC;AACjD,oBAAA,UAAU,EAAE;AACZ,iBAAA;;;MCCY,WAAW,CAAA;IACvB,SAAS,CAAC,QAAgB,EAAE,EAAA;AAC3B,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;;8GAF1C,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAJvB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACL,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,UAAU,EAAE;AACZ,iBAAA;;;MCGY,kBAAkB,CAAA;AAN/B,IAAA,WAAA,GAAA;AAOU,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,CAAC,CAAC;QACvB,IAAa,CAAA,aAAA,GAAG,KAAK,EAAiB;AAC/C;8GAHY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,sZCR/B,s3HAsIA,EAAA,MAAA,EAAA,CAAA,wCAAA,CAAA,EAAA,CAAA,CAAA;;2FD9Ha,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0CAA0C,cACxC,IAAI,EAAA,QAAA,EAAA,s3HAAA,EAAA,MAAA,EAAA,CAAA,wCAAA,CAAA,EAAA;;;ME4CJ,sBAAsB,CAAA;AAvBnC,IAAA,WAAA,GAAA;AAwBC,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC;QAGhB,IAAS,CAAA,SAAA,GAAW,OAAO;QAC3B,IAAY,CAAA,YAAA,GAAW,UAAU;AAIlC,QAAA,IAAA,CAAA,QAAQ,GAA0B;AACzC,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,SAAS,EAAE;SACX;QAuBD,IAAI,CAAA,IAAA,GAAc,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAEpC,IAAK,CAAA,KAAA,GAAsC,EAAE;;QAU7C,IAAU,CAAA,UAAA,GAAY,KAAK;AAE3B,QAAA,IAAA,CAAA,QAAQ,GAAQ,MAAK,GAAG;AACxB,QAAA,IAAA,CAAA,OAAO,GAAQ,MAAK,GAAG;;QAIvB,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;;AAI/B;;;;;AAKG;QACK,IAAa,CAAA,aAAA,GAA8C,EAAE;AAiJrE;AApNA,IAAA,GAAG;AAgBH,IAAA,IAAI,OAAO,GAAA;QACV,OAAO,IAAI,CAAC,QAAQ;;IAErB,IACI,OAAO,CAAC,CAAwB,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;QACjB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;;AAIvC,IAAA,IACI,KAAK,GAAA;QACR,OAAO,IAAI,CAAC,MAAM;;IAEnB,IAAI,KAAK,CAAC,CAAW,EAAA;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;QACjB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;;AAmCvC,IAAA,IACI,YAAY,GAAA;QACf,OAAO,IAAI,CAAC,aAAa;;IAE1B,IAAI,YAAY,CAAC,CAA4C,EAAA;QAC5D,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AAChC,YAAA,IAAK,CAA4B,CAAC,OAAO,EAAE;AAC1C,gBAAA,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE;;AAE5D,YAAA,OAAO,CAAC;AACT,SAAC,CAAC;;;IAKH,UAAU,CAAC,QAAkB,EAAE,EAAA;;;AAI/B,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAGnB,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;;AAGlB,IAAA,gBAAgB,CAAE,UAAmB,EAAA;AACpC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;;AAG7B;;;;;AAKG;AACH,IAAA,iBAAiB,CAAC,KAAU,EAAA;AAC3B,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;;IAG1B,SAAS,CAAC,IAAe,EAAE,KAAiB,EAAA;QAC3C,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AAC1B,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;AACvD,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;AAEzB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;oBAC5B,QAAQ,EAAE,CAAC,IAAI,CAAC;AAChB,oBAAA,SAAS,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;oBACnC,IAAI,EAAE,CAAC,IAAI,CAAC;oBACZ,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC3B,iBAAA,CAAC;AAEF,gBAAA,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;gBAEtB,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE;AACpC,oBAAA,IAAI,CAAC,SAAS,CACb,KAAK,CAAC,GAAG,CAAC,UAAU,CAAc,EAClC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CACvB;;;AAGF,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;;AAKnB,IAAA,UAAU,CAAC,KAAe,EAAA;QACzB,MAAM,KAAK,GAAsC,EAAE;AACnD,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACzB,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,GAAG,IAAW;AAC5C,YAAA,IAAI,QAAQ,EAAE,MAAM,EAAE;gBACrB,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;;YAEhD,KAAK,CAAC,IAAI,CAAC;AACV,gBAAA,GAAG,OAAO;AACV,gBAAA,SAAS,EAAE;AACX,aAAA,CAAC;;AAEH,QAAA,OAAO,KAAK;;AAGb,IAAA,eAAe,CAAC,OAAoB,EAAA;QACnC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;;AAGnC;;;;;;;;;;;;;;;;;AAiBG;AACH,IAAA,WAAW,CACV,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAChC,KAAa,EACb,KAAa,EACb,KAAiB,EAAA;AAEjB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAClB;;QAGD,IAAI,CAAC,OAAO,CAAC;YACZ,KAAK;YACL,KAAK;YACL,QAAQ;YACR,SAAS;AACT,YAAA,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI;AAC7D,YAAA,IAAI,EAAE,IAAS;AACf,YAAA,UAAU,EAAE;AACZ,SAAA,CAAC;;AAGH,IAAA,aAAa,CAAC,IAAY,EAAA;;;;;;;IAQ1B,MAAM,GAAA;;;;;;;;;;8GA3MM,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAhBvB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,EAAA,SAAA,EAAA;AACV,YAAA;AACC,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,sBAAsB;AACnC,gBAAA,KAAK,EAAE;AACP;AACD,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAuDa,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,WAAW,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAE/C,+BAA+B,EAAU,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAW,EC/FnE,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,8+IAmJA,ED3GE,MAAA,EAAA,CAAA,yNAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,itCAGnB,WAAW,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAIA,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAvBlC,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2CAA2C,EAG/C,IAAA,EAAA;AACL,wBAAA,KAAK,EAAE;qBACP,EACU,SAAA,EAAA;AACV,wBAAA;AACC,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAwB,sBAAA;AACnC,4BAAA,KAAK,EAAE;AACP;qBACD,EACQ,OAAA,EAAA;wBACR,YAAY;wBACZ,mBAAmB;wBACnB,kBAAkB;wBAClB,+BAA+B;wBAC/B;AACA,qBAAA,EAAA,UAAA,EACW,IAAI,EAAA,QAAA,EAAA,8+IAAA,EAAA,MAAA,EAAA,CAAA,yNAAA,CAAA,EAAA;8BAKP,SAAS,EAAA,CAAA;sBAAjB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAcG,OAAO,EAAA,CAAA;sBADV;gBAQG,KAAK,EAAA,CAAA;sBADR;gBAUQ,OAAO,EAAA,CAAA;sBAAf;gBASD,OAAO,EAAA,CAAA;sBADN,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,0BAA0B,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;gBAG/D,SAAS,EAAA,CAAA;sBADR,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,+BAA+B,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;gBAuBhE,YAAY,EAAA,CAAA;sBADf;;;AE5GF;;;;;;;;;;;;;AAaG;MAMU,eAAe,CAAA;AAL5B,IAAA,WAAA,GAAA;AAMC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEhC;;AAEG;QACH,IAAK,CAAA,KAAA,GAAa,IAAI;AAEtB;;AAEG;QACH,IAAY,CAAA,YAAA,GAAwB,IAAI;AAqCxC;AA/CA,IAAA,IAAI;AAYJ;;AAEG;IACH,WAAW,GAAA;QACV,IAAI,CAAC,WAAW,EAAE;;AAGnB;;;;;AAKG;AACH,IAAA,SAAS,CAAC,KAAwB,EAAA;AACjC,QAAA,IAAI,KAAK,YAAY,UAAU,EAAE;YAChC,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC9C,gBAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACzB,aAAC,CAAC;;aACI;AACN,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;QAEnB,OAAO,IAAI,CAAC,KAAK;;AAGlB;;AAEG;IACK,WAAW,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AAC/B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;;;8GA7Cd,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACL,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACN,iBAAA;;;MCDY,+BAA+B,CAAA;AAR5C,IAAA,WAAA,GAAA;AASC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAIxB,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAC9B,IAAY,CAAA,YAAA,GAAgC,IAAI;QAChD,IAAe,CAAA,eAAA,GAAuB,IAAI;QAEzC,IAAG,CAAA,GAAA,GAAG,KAAK,EAAoB;AAExC,QAAA,IAAA,CAAA,QAAQ,GAA2B,EAAE,OAAO,EAAE,EAAE,EAAE;AAwBzC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAA8B,MAAM,CAAC;AAErD,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC;QAEzC,IAAW,CAAA,WAAA,GAAkB,IAAI;QACjC,IAAK,CAAA,KAAA,GAAY,KAAK;AAyEtB;AAhHA,IAAA,WAAW;AAUX,IAAA,QAAQ;AAER,IAAA,IACI,OAAO,GAAA;QACV,OAAO,IAAI,CAAC,QAAQ;;IAErB,IAAI,OAAO,CAAC,CAAyB,EAAA;QACpC,IAAI,CAAC,QAAQ,GAAG;AACf,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,GAAG;SACH;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE;AACnC,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC;;aAC3D;AACN,YAAA,IAAI,CAAC,WAAW;gBACf,MAAM;AACN,oBAAA,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;AAC7C,yBAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;yBACf,IAAI,CAAC,GAAG,CAAC;;;AAWd;;;;;;AAMG;AAEH,IAAA,QAAQ,CAAC,KAAK,EAAA;AACb,QAAA,IACC,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;YACtD,IAAI,CAAC,KAAK,EACT;YACD,IAAI,CAAC,KAAK,EAAE;;;IAId,MAAM,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACf,IAAI,CAAC,KAAK,EAAE;YACZ;;AAGD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AAEjB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,MAAM,MAAM,GACX,QAAQ,KAAK;cACV,QAAQ,CAAC;cACT,QAAQ,YAAY;AACrB,kBAAE;AACF,kBAAE,IAAI,CAAC,WAAW,CAAC,aAAa;;AAGnC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACjE,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;QAEjC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,SAA0B;AAC9D,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO;AAE9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC;AACrE,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;AAE3C,QAAA,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;AAC5B,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAI,EAAA,CAAA;YACxC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,CAAI,EAAA;AACvC,SAAA,CAAC;AAEF,QAAA,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;;AAG5B;;AAEG;IACH,KAAK,GAAA;AACJ,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAElB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;;QAGzB,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;YAC/D,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,WAAW,CAC7C,IAAI,CAAC,eAAe,CACpB;AACD,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;;;8GA9GjB,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1B5C,oyDA4DA,EDtCW,MAAA,EAAA,CAAA,sEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,oFAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAIjD,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAR3C,SAAS;+BACC,8CAA8C,EAAA,UAAA,EAE5C,IAAI,EAAA,OAAA,EACP,CAAC,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,oyDAAA,EAAA,MAAA,EAAA,CAAA,sEAAA,CAAA,EAAA;8BAOpC,WAAW,EAAA,CAAA;sBAApC,SAAS;uBAAC,aAAa;gBAWpB,OAAO,EAAA,CAAA;sBADV;gBAqCD,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;ME3D9B,aAAa,CAAA;AAL1B,IAAA,WAAA,GAAA;AAMS,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAChC,QAAA,IAAA,CAAA,wBAAwB,GAAG,MAAM,CAAC,2BAA2B,CAAC;QAEtE,IAAK,CAAA,KAAA,GAAW,EAAE;QAClB,IAAO,CAAA,OAAA,GAAkB,IAAI;QAC7B,IAAU,CAAA,UAAA,GAAU,EAAE;AAsGtB;AAlGA;;;;;;;AAOG;IACH,WAAW,CAAC,GAAW,EAAE,iBAA0B,EAAA;AAClD,QAAA,MAAM,KAAK,GAAG,iBAAiB,CAC9B,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC,GAAG,CAAC,EACjD,iBAAiB,CACjB;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,KAAK,SAAS,GAAG,KAAK,GAAG,GAAG;AAC9C,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;;AAGzB;;;;;;;;;;AAUG;AACH,IAAA,SAAS,CAAC,KAAa,EAAE,GAAG,IAAW,EAAA;QACtC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AAC5B,YAAA,OAAO,KAAK;;;AAIb,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;YACjE,OAAO,IAAI,CAAC,KAAK;;QAGlB,IAAI,iBAAiB,GAAuB,SAAS;AACrD,QAAA,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;AACtC,YAAA,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;;;AAGlD,gBAAA,IAAI,SAAS,GAAW,IAAI,CAAC,CAAC;AAC5B,qBAAA,OAAO,CAAC,kCAAkC,EAAE,OAAO;AACnD,qBAAA,OAAO,CAAC,sBAAsB,EAAE,OAAO,CAAC;AAC1C,gBAAA,IAAI;AACH,oBAAA,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;;gBACxC,OAAO,CAAC,EAAE;oBACX,MAAM,IAAI,WAAW,CACpB,CAAwE,qEAAA,EAAA,IAAI,CAAC,CAAC,CAAC,CAAE,CAAA,CACjF;;;AAEI,iBAAA,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAClE,gBAAA,iBAAiB,GAAG,IAAI,CAAC,CAAC,CAAC;;;;AAK7B,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;;AAGpB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;;AAGtB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,iBAAiB,CAAC;;QAG1C,IAAI,CAAC,QAAQ,EAAE;AAEf,QAAA,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;AAClC,YAAA,IAAI,CAAC,uBAAuB;gBAC3B,IAAI,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,SAAS,CAC1D,MAAK;AACJ,oBAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACjB,wBAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,wBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,iBAAiB,CAAC;;AAE5C,iBAAC,CACD;;QAEH,OAAO,IAAI,CAAC,KAAK;;AAGlB;;AAEG;IACK,QAAQ,GAAA;AACf,QAAA,IAAI,OAAO,IAAI,CAAC,uBAAuB,KAAK,WAAW,EAAE;AACxD,YAAA,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE;AAC1C,YAAA,IAAI,CAAC,uBAAuB,GAAG,SAAS;;;IAI1C,WAAW,GAAA;QACV,IAAI,CAAC,QAAQ,EAAE;;8GA1GJ,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBALzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACL,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACN,iBAAA;;;MCQY,iCAAiC,CAAA;AAd9C,IAAA,WAAA,GAAA;QAeU,IAAQ,CAAA,QAAA,GAAG,KAAK;QAChB,IAAI,CAAA,IAAA,GAAsB,QAAQ;AAE3C,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,KAAyC,KAAI,GAAG;AAE5D,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,GAAG;AAEpB,QAAA,IAAA,CAAA,KAAK,GAAqD,CAAC,IAAI,EAAE,IAAI,CAAC;AAuBtE;AArBA,IAAA,UAAU,CAAC,KAAyC,EAAA;AACnD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;aACZ;YACN,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;;;AAI3B,IAAA,gBAAgB,CACf,EAAuD,EAAA;AAEvD,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAGnB,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC/B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGpB,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;;8GA7Bf,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,EARlC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oDAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA;AACV,YAAA;AACC,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iCAAiC,CAAC;AAChE,gBAAA,KAAK,EAAE;AACP;AACD,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrBF,22BA0BA,EDZW,MAAA,EAAA,CAAA,wRAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,6CAAE,WAAW,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FASrC,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAd7C,SAAS;+BACC,oDAAoD,EAAA,UAAA,EAGlD,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,EACvC,SAAA,EAAA;AACV,wBAAA;AACC,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,uCAAuC,CAAC;AAChE,4BAAA,KAAK,EAAE;AACP;AACD,qBAAA,EAAA,QAAA,EAAA,22BAAA,EAAA,MAAA,EAAA,CAAA,wRAAA,CAAA,EAAA;8BAGQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,IAAI,EAAA,CAAA;sBAAZ;;;MElBW,kBAAkB,CAAA;AAL/B,IAAA,WAAA,GAAA;QAOC,IAAK,CAAA,KAAA,GAAkB,IAAI;AAK3B;AAHA,IAAA,QAAQ,CAAC,KAAU,EAAA;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;8GALP,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,mICP/B,qKAMA,EAAA,MAAA,EAAA,CAAA,mYAAA,CAAA,EAAA,CAAA,CAAA;;2FDCa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;+BACC,eAAe,EAAA,QAAA,EAAA,qKAAA,EAAA,MAAA,EAAA,CAAA,mYAAA,CAAA,EAAA;8BAMzB,KAAK,EAAA,CAAA;sBADJ,WAAW;uBAAC,gBAAgB;;;AER9B;;;AAGG;IACS;AAAZ,CAAA,UAAY,eAAe,EAAA;;AAE1B,IAAA,eAAA,CAAA,YAAA,CAAA,GAAA,IAAiB;;AAGjB,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,IAAY;;AAGZ,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,IAAa;;AAGb,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,IAAY;;AAGZ,IAAA,eAAA,CAAA,YAAA,CAAA,GAAA,IAAiB;AAClB,CAAC,EAfW,eAAe,KAAf,eAAe,GAe1B,EAAA,CAAA,CAAA;;MCbY,2BAA2B,CAAA;AAEvC,IAAA,WAAA,CAAmB,QAA0B,EAAA;QAA1B,IAAQ,CAAA,QAAA,GAAR,QAAQ;;8GAFf,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,iCAAiC;AAC3C,oBAAA,UAAU,EAAE;AACZ,iBAAA;gFAE2B,MAAM,EAAA,CAAA;sBAAhC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;;MCDb,4BAA4B,CAAA;AACxC,IAAA,WAAA,CAAmB,QAA0B,EAAA;QAA1B,IAAQ,CAAA,QAAA,GAAR,QAAQ;;8GADf,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAJxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,mCAAmC;AAC7C,oBAAA,UAAU,EAAE;AACZ,iBAAA;;;MCCY,mCAAmC,CAAA;AAC/C,IAAA,WAAA,CAAmB,WAA6B,EAAA;QAA7B,IAAW,CAAA,WAAA,GAAX,WAAW;;8GADlB,mCAAmC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnC,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iDAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAnC,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAJ/C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,iDAAiD;AAC3D,oBAAA,UAAU,EAAE;AACZ,iBAAA;;;MCCY,6BAA6B,CAAA;AAGzC,IAAA,WAAA,CAAmB,QAA0B,EAAA;QAA1B,IAAQ,CAAA,QAAA,GAAR,QAAQ;;8GAHf,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAJzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,qCAAqC;AAC/C,oBAAA,UAAU,EAAE;AACZ,iBAAA;gFAES,MAAM,EAAA,CAAA;sBAAd;;;MCDW,6BAA6B,CAAA;AAEzC,IAAA,WAAA,CAAmB,QAA0B,EAAA;QAA1B,IAAQ,CAAA,QAAA,GAAR,QAAQ;;8GAFf,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAJzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,qCAAqC;AAC/C,oBAAA,UAAU,EAAE;AACZ,iBAAA;gFAE2B,MAAM,EAAA,CAAA;sBAAhC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;;MCDb,8BAA8B,CAAA;AAC1C,IAAA,WAAA,CAAmB,QAA0B,EAAA;QAA1B,IAAQ,CAAA,QAAA,GAAR,QAAQ;;8GADf,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA9B,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAJ1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,uCAAuC;AACjD,oBAAA,UAAU,EAAE;AACZ,iBAAA;;;MCCY,0BAA0B,CAAA;AACtC,IAAA,WAAA,CAAmB,QAA0B,EAAA;QAA1B,IAAQ,CAAA,QAAA,GAAR,QAAQ;;8GADf,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,+BAA+B;AACzC,oBAAA,UAAU,EAAE;AACZ,iBAAA;;;MCCY,OAAO,CAAA;AACnB;;;;AAIG;AACH,IAAA,SAAS,CAAC,KAAU,EAAE,IAAY,EAAE,YAAkB,EAAA;AACrD,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC7B,YAAA,OAAO,KAAK;;AAEb,QAAA,OAAO;aACL,KAAK,CAAC,GAAG;aACT,MAAM,CACN,CAAC,CAAC,EAAE,CAAC,KACJ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK;AAC9B,cAAE,CAAC,CAAC,CAAC;AACL,cAAE,YAAY,IAAI,IAAI,EACxB,KAAK,CACL;;8GAlBS,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAP,OAAO,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA;;2FAAP,OAAO,EAAA,UAAA,EAAA,CAAA;kBAJnB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACL,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,UAAU,EAAE;AACZ,iBAAA;;;MCEY,gBAAgB,CAAA;AAC5B,IAAA,SAAS,CAAC,KAAwB,EAAA;AACjC,QAAA,OAAO,YAAY,CAAC,KAAK,CAAC;;8GAFf,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACL,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,UAAU,EAAE;AACZ,iBAAA;;;MCiBY,iBAAiB,CAAA;AAX9B,IAAA,WAAA,GAAA;AAYS,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEhB,QAAA,IAAA,CAAA,EAAE,GAAG,gBAAgB,CAAC,EAAE,CAAC;AAEvC,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAE7B;AAEM,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAE9B;QAEJ,IAAQ,CAAA,QAAA,GAAY,KAAK;AAmBzB;IAjBA,MAAM,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACxB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;;;IAIjC,aAAa,GAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;;IAGzB,YAAY,GAAA;AACX,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;;8GA9Bb,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,iOCvB9B,wZAiBA,EAAA,MAAA,EAAA,CAAA,0CAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDMa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAX7B,SAAS;+BACC,+BAA+B,EAAA,UAAA,EAC7B,IAAI,EACP,OAAA,EAAA,EAAE,mBAGM,uBAAuB,CAAC,MAAM,EACzC,IAAA,EAAA;AACL,wBAAA,KAAK,EAAE;AACP,qBAAA,EAAA,QAAA,EAAA,wZAAA,EAAA,MAAA,EAAA,CAAA,0CAAA,CAAA,EAAA;8BAKuB,EAAE,EAAA,CAAA;sBAAzB;;sBAAe;gBAEN,IAAI,EAAA,CAAA;sBAAb;gBAIS,KAAK,EAAA,CAAA;sBAAd;;;AEGF;;AAEG;IACS;AAAZ,CAAA,UAAY,mBAAmB,EAAA;AAC9B;;AAEG;AACH,IAAA,mBAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AAET;;AAEG;AACH,IAAA,mBAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACZ,CAAC,EAVW,mBAAmB,KAAnB,mBAAmB,GAU9B,EAAA,CAAA,CAAA;IAEW;AAAZ,CAAA,UAAY,gBAAgB,EAAA;AAC3B,IAAA,gBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,gBAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,gBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACtB,CAAC,EAPW,gBAAgB,KAAhB,gBAAgB,GAO3B,EAAA,CAAA,CAAA;IAEW;AAAZ,CAAA,UAAY,gBAAgB,EAAA;AAC3B,IAAA,gBAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,gBAAA,CAAA,oBAAA,CAAA,GAAA,oBAAyC;AACzC,IAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,gBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,gBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACtB,CAAC,EAPW,gBAAgB,KAAhB,gBAAgB,GAO3B,EAAA,CAAA,CAAA;IAEW;AAAZ,CAAA,UAAY,cAAc,EAAA;AACzB,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,cAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,cAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC9B,CAAC,EAPW,cAAc,KAAd,cAAc,GAOzB,EAAA,CAAA,CAAA;IAEW;AAAZ,CAAA,UAAY,iBAAiB,EAAA;AAC5B,IAAA,iBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,iBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACtB,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,GAG5B,EAAA,CAAA,CAAA;IAEW;AAAZ,CAAA,UAAY,cAAc,EAAA;AACzB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,cAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACxB,CAAC,EAHW,cAAc,KAAd,cAAc,GAGzB,EAAA,CAAA,CAAA;;MCvCY,mBAAmB,CAAA;AApBhC,IAAA,WAAA,GAAA;AAqBC,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC;AACzB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAanC,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACrB,YAAA,QAAQ,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC;YACnC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACxB,SAAA,CAAC;AAMF,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,KAA6B,KAAI,GAAG;AAChD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,GAAG;QAEpB,IAAU,CAAA,UAAA,GAAsB,EAAE;QAClC,IAAc,CAAA,cAAA,GAAG,cAAc;AAkI/B;AA7JA,IAAA,GAAG;AACH,IAAA,OAAO;AAEP,IAAA,OAAO;AACP,IAAA,IACI,MAAM,GAAA;QACT,OAAO,IAAI,CAAC,OAAO;;IAEpB,IAAI,MAAM,CAAC,CAAuB,EAAA;AACjC,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC;QAChB,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,eAAe,EAAE;;AAQvB,IAAA,IAAI,OAAO,GAAA;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAc;;AAW3C;;;AAGG;AACH,IAAA,UAAU,CAAC,KAA6B,EAAA;AACvC,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;QACpB,IAAI,CAAC,KAAK,EAAE;AACX,YAAA,KAAK,GAAG,IAAI,CAAC,YAAY;;AAE1B,QAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;;AAG5B,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAGnB,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGpB;;;;;;AAMG;AACH,IAAA,GAAG,CAAC,KAAsB,EAAA;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAc;AACnD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAC7B,KAAK,EAAE,CAAC,IAAI,CAAC;YACb,SAAS,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9B,SAAA,CAAC;QACF,IAAI,KAAK,EAAE;AACV,YAAA,MAAM,CAAC,UAAU,CAAC,KAAY,CAAC;;AAEhC,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;;AAGrB;;AAEG;IACH,KAAK,GAAA;QACJ,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAc;QACnD,OAAO,CAAC,KAAK,EAAE;QACf,IAAI,CAAC,GAAG,EAAE;QACV,IAAI,CAAC,KAAK,EAAE;;AAGb;;AAEG;IACH,KAAK,GAAA;QACJ,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAwB;QAC5D,KAAK,GAAG,KAAK,EAAE,MAAM,CACpB,CAAC,IAAI,KACJ,CAAC,cAAc,CAAC,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,QAAQ,CACzD,IAAI,CAAC,SAAgB,CACrB;AACD,aAAC,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAClD;AACD,QAAA,IAAI,CAAC,QAAQ,CACZ,KAAK,CAAC;AACL,cAAE;gBACA,QAAQ;gBACR;AACC;cACD,IAAI,CACP;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;;AAG7B;;AAEG;IACH,YAAY,GAAA;AACX,QAAA,IAAI,UAAU;QACd,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI;AAC/B,YAAA,KAAK,QAAQ;gBACZ,UAAU,GAAG,gBAAgB;gBAC7B;AACD,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,YAAY;gBAChB,UAAU,GAAG,cAAc;gBAC3B;AACD,YAAA,KAAK,SAAS;gBACb,UAAU,GAAG,iBAAiB;gBAC9B;AACD,YAAA;gBACC,UAAU,GAAG,gBAAgB;gBAC7B;;QAEF,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,UAAU,EAAE,GAAG,cAAc,EAAE;;AAGvD;;AAEG;IACH,eAAe,GAAA;AACd,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,YAAY,GAAG;YACnB,QAAQ,EAAE,mBAAmB,CAAC,GAAG;AACjC,YAAA,KAAK,EAAE;AACN,gBAAA;AACC,oBAAA,KAAK,EAAE,IAAI;oBACX;AACA;AACD;SACD;;AAGF;;;;;AAKG;AACH,IAAA,2BAA2B,CAAC,KAAgB,EAAA;AAC3C,QAAA,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,KAAK;AACjC,QAAA,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YACtD,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE;;aACvB;YACN,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE;;;8GA3JlB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EARpB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAAA;AACV,YAAA;AACC,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE;AACP;SACD,EC5CF,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,oqMAsLA,EDxJE,MAAA,EAAA,CAAA,4GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,YAAY,4CACZ,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACb,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACb,WAAW,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAYA,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBApB/B,SAAS;+BACC,aAAa,EAAA,UAAA,EACX,IAAI,EACP,OAAA,EAAA;wBACR,mBAAmB;wBACnB,YAAY;wBACZ,aAAa;wBACb,aAAa;wBACb;qBACA,EAGU,SAAA,EAAA;AACV,wBAAA;AACC,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE;AACP;AACD,qBAAA,EAAA,QAAA,EAAA,oqMAAA,EAAA,MAAA,EAAA,CAAA,4GAAA,CAAA,EAAA;8BAQG,MAAM,EAAA,CAAA;sBADT;;;MEwDW,cAAc,CAAA;AA9C3B,IAAA,WAAA,GAAA;AA+CC,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,kBAAkB,CAAC;QAEhC,IAAE,CAAA,EAAA,GAAG,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAEvB,IAAO,CAAA,OAAA,GAAG,KAAK,CAAwB;AAC/C,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,OAAO,EAAE;AACT,SAAA,CAAC;AAEF;;;;;AAKG;QACH,IAAK,CAAA,KAAA,GAAa,EAAE;AAEpB;;;;;AAKG;QACH,IAAe,CAAA,eAAA,GAAY,KAAK;AAEhC;;;;;AAKG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,CAAC,CAAC;AAE3B,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAuC,EAAE,CAAC;AAEzD,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AACrC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;YAC9B,MAAM,YAAY,GAAgC,OAAO,CAAC,GAAG,CAC5D,CAAC,MAAM,KAAI;AACV,gBAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;oBAC/B,OAAO;AACN,wBAAA,KAAK,EAAE,MAAM;AACb,wBAAA,QAAQ,EAAE;qBACV;;AAEF,gBAAA,OAAO,MAAM;AACd,aAAC,CACD;;AAGD,YAAA,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE;AAClC,gBAAA,IACC,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,QAAQ;AACpC,oBAAA,MAAM,CAAC,OAAO;AACd,oBAAA,CAAC,MAAM,CAAC,QAAQ,EACf;oBACD,MAAM,CAAC,MAAM,CACZ,MAAM,EACN,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EACvD,MAAM,CACN;;;AAGH,YAAA,OAAO,YAAY;AACpB,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;YAC5B,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM;YACtC,IACC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;AACrC,gBAAA,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,EACzB;AACD,gBAAA,KAAK,EAAE;;AAER,YAAA,IACC,IAAI,CAAC,qBAAqB,EAAE,EAAE,MAAM;AACH,+CAChC;AACD,gBAAA,KAAK,EAAE;;AAER,YAAA,OAAO,KAAK;AACb,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAC/C,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CACzB;YACD,UAAU,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC3C,YAAA,OAAO,aAAa;AACrB,SAAC,CAAC;AAEO,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAA4B,EAAE,CAAC;AAEvD;;;;;AAKG;AACH,QAAA,IAAA,CAAA,SAAS,GAAc,IAAI,SAAS,CAAC,EAAE,CAAC;QAExC,IAAa,CAAA,aAAA,GAAY,KAAK;AAE9B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,MAAK;AAC1B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;;YAG9B,UAAU,CAAC,MAAK;AACf,gBAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;aAC9D,EAAE,EAAE,CAAC;AACP,SAAC,CAAC;QAEF,IAAa,CAAA,aAAA,GAAG,QAAQ,CACvB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAC/D;AAED,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,MAAK;AACnC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE;YACpC,IAAI,OAAO,KAAK,SAAS;gBAAE;AAE3B,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACpB,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;;AAE1B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACvB,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;YAChC,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAC/B,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,IAAI,KAAK,MAAM,CACvC;AACF,SAAC,CAAC;AAEO,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAGnB,EAAE,EAAE;AACL,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,SAAS,EAAE,CACV,CAAgD,KACzB;AACvB,gBAAA,IAAI,CAAC,CAAC;AAAE,oBAAA,OAAO,EAAE;gBAEjB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAK,CAAC,CAAC,IAAiB,IAAI,EAAE,CAAC;gBAEjE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBACtB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;oBACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;oBAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;;AAGlC,gBAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;;AAExD,SAAA,CAAC;AAEF,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,MAAK;AACxB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;YACxB,IAAI,CAAC,YAAY,EAAE;AACpB,SAAC,CAAC;QAEF,IAAU,CAAA,UAAA,GAAY,IAAI;QAUjB,IAAc,CAAA,cAAA,GAAG,KAAK,CAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;AACpD,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAgB,IAAI,CAAC;AACjC,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAgB,IAAI,CAAC;AACpC,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAgB,IAAI,CAAC;AAEvC,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAoB;YACrD,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACxC,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAG,GAAG,IAAI,CAAC,OAAO,EAAG,CAAC;;AAEvD,YAAA,OAAO,IAAI;AACZ,SAAC,CAAC;QAEO,IAAU,CAAA,UAAA,GAAG,KAAK,EAA4B;AAEvD;;;;;AAKG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,IAAI,CAAC;AAExC;;;;;AAKG;QACM,IAAS,CAAA,SAAA,GAAG,KAAK,EAAU;AAE3B,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAU,KAAK,CAAC;AAE/B,QAAA,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAA4B,QAAQ,CAAC;AAE/D,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAU,IAAI,CAAC;AAErC,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAU,KAAK,CAAC;AAErC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAG3B,EAAE,EAAE;AACL,YAAA,SAAS,EAAE,CAAC,KAAiD,KAAI;AAChE,gBAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AACzB,oBAAA,IAAK,IAA+B,CAAC,OAAO,EAAE;AAC7C,wBAAA,IAAI,GAAG;AACN,4BAAA,IAAI,EAAE,IAAI;AACV,4BAAA,QAAQ,EAAE,OAAO;AACjB,4BAAA,KAAK,EAAE,OAAO;AACd,4BAAA,GAAG;yBACH;;AAEF,oBAAA,OAAO,IAAI;AACZ,iBAAC,CAAC;;AAEH,SAAA,CAAC;AAEO,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAU,KAAK,CAAC;AAE3C;;;;;AAKG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC;AAEzC;;;;;AAKG;AACM,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAU,IAAI,CAAC;AAEjC,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAS,EAAE,CAAC;QAEvC,IAAY,CAAA,YAAA,GAAG,IAAI,eAAe,CAAS,IAAI,CAAC,UAAU,EAAE,CAAC;AAE7D,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,MAAK;AAC9B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;;AAG7B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC;iBACf,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,oBAAoB,EAAE;AAChD,iBAAA,SAAS,CAAC,CAAC,KAAK,KAAI;;AAEpB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,aAAC,CAAC;;YAGH,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AAEzC,YAAA,OAAO,MAAK;AACX,gBAAA,OAAO,GAAG,CAAC,WAAW,EAAE;AACzB,aAAC;AACF,SAAC,CAAC;QAEO,IAAQ,CAAA,QAAA,GAAG,KAAK,EAA2B;;QAG3C,IAAS,CAAA,SAAA,GAAG,KAAK,EAA2B;AAErD;;;;AAIG;QACM,IAAO,CAAA,OAAA,GACf,KAAK,EAAqD;AAElD,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAyB,IAAI,CAAC;AAEzD,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AAClC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE;AAClC,YAAA,IAAI,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAChE,gBAAA,OAAO,QAAQ,KAAK,eAAe,CAAC;AACnC,sBAAE;AACF,sBAAE,mBAAmB,GAAG,IAAI,CAAC,UAAU;;AAEzC,YAAA,OAAO,IAAI;AACZ,SAAC,CAAC;QAEF,IAAQ,CAAA,QAAA,GAAY,KAAK;AAEhB,QAAA,IAAA,CAAA,WAAW,GAAG,YAAY,CAAC,0BAA0B,EAAE;AAC/D,YAAA,IAAI,EAAE;AACN,SAAA,CAAC;AACO,QAAA,IAAA,CAAA,UAAU,GAAG,eAAe,CAAC,6BAA6B,CAAC;AAC3D,QAAA,IAAA,CAAA,aAAa,GAAG,eAAe,CAAC,2BAA2B,CAAC;AAC5D,QAAA,IAAA,CAAA,SAAS,GAAG,YAAY,CAAC,+BAA+B,EAAE;AAClE,YAAA,IAAI,EAAE;AACN,SAAA,CAAC;AACO,QAAA,IAAA,CAAA,UAAU,GAAG,YAAY,CAAC,8BAA8B,EAAE;AAClE,YAAA,IAAI,EAAE;AACN,SAAA,CAAC;AACO,QAAA,IAAA,CAAA,QAAQ,GAAG,YAAY,CAAC,4BAA4B,EAAE;AAC9D,YAAA,IAAI,EAAE;AACN,SAAA,CAAC;AACO,QAAA,IAAA,CAAA,qBAAqB,GAAG,eAAe,CAC/C,mCAAmC,CACnC;AACQ,QAAA,IAAA,CAAA,UAAU,GAAG,eAAe,CAAC,6BAA6B,CAAC;AAE3D,QAAA,IAAA,CAAA,kBAAkB,GAAG,YAAY,CAAC,iBAAiB,CAAC;AAW7D,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,CAAM,KAAI,GAAG;AACzB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAK,GAAG;AAuVlB;AA9pBA,IAAA,GAAG;AAmKH,IAAA,gBAAgB,CAAC,IAAO,EAAA;QACvB,OAAO;AACN,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,SAAS,EAAE,IAAI;YACf;SACA;;AAqJF,IAAA,UAAU,CAAC,KAAU,EAAA;QACpB,IAAI,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC;;aAC7C;AACN,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;;QAEhB,IAAI,CAAC,YAAY,EAAE;;AAMpB,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAGnB,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;;AAGlB,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;;AAG3B;;;;;;;;;;;AAWG;IACH,WAAW,CAAC,KAAiB,EAAE,IAAc,EAAA;AAC5C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;QAC9B,IAAI,CAAC,OAAO,EAAE;YACb;;QAED,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC;;AAG5B;;;;;;;AAOG;AACH,IAAA,IAAI,CAAC,MAA4B,EAAA;AAChC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YACrB;;AAED,QAAA,IACC,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,IAAI,CAAC,UAAU,EAAE,EAAE,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAC9C;AACD,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBACnB,QAAQ,EAAE,MAAM,CAAC,QAAe;AAChC,gBAAA,SAAS,EAAE;AACX,aAAA,CAAC;;aACI;AACN,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;AACzB,gBAAA,SAAS,EACR,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,KAAK,KAAK,GAAG,MAAM,GAAG;AACnD,aAAA,CAAC;;;AAIJ;;;;;;AAMG;AACH,IAAA,kBAAkB,CACjB,MAA4B,EAAA;QAE5B,IACC,CAAC,IAAI,CAAC,UAAU;YAChB,IAAI,CAAC,UAAU,EAAE,EAAE,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAC9C;AACD,YAAA,OAAO,SAAS;;QAEjB,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,CAAC,WAAW,EAAE,KAAK;AACrD,cAAE;cACA,cAAc;;AAGlB;;;;;;AAMG;AACH,IAAA,iBAAiB,CAAC,MAA4B,EAAA;AAC7C,QAAA,MAAM,QAAQ,GAAG,MAAM,YAAY,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,QAAQ;QACpE,IAAI,CAAC,QAAQ,EAAE;AACd,YAAA,OAAO,IAAI;;AAEZ,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAI;AAC9C,YAAA,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;AAC7B,SAAC,CAAC;QACF,OAAO,SAAS,GAAG,SAAS,CAAC,QAAQ,GAAG,IAAI;;AAG7C;;;;;;AAMG;AACH,IAAA,eAAe,CAAC,MAA4B,EAAA;AAC3C,QAAA,MAAM,QAAQ,GAAG,MAAM,YAAY,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,QAAQ;QACpE,IAAI,CAAC,QAAQ,EAAE;AACd,YAAA,OAAO,IAAI;;AAEZ,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAI;AACjD,YAAA,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;AAC7B,SAAC,CAAC;AACF,QAAA,OAAO,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,IAAI;;AAGhD;;;;;;AAMG;AACH,IAAA,iBAAiB,CAChB,MAA4B,EAAA;AAE5B,QAAA,MAAM,QAAQ,GAAG,MAAM,YAAY,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,QAAQ;QACpE,IAAI,CAAC,QAAQ,EAAE;AACd,YAAA,OAAO,IAAI;;QAEZ,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC;QACtE,OAAO,SAAS,GAAG,SAAS,CAAC,QAAQ,GAAG,IAAI;;AAG7C;;;;;;AAMG;AACH,IAAA,YAAY,CACX,KAAY,EACZ,OAAgC,EAChC,GAAa,EAAA;QAEb,KAAK,CAAC,eAAe,EAAE;QACvB,OAAO,CAAC,GAAG,CAAC;;AAGb;;;;;AAKG;AACH,IAAA,iBAAiB,CAAC,MAAkB,EAAA;AACnC,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE;AACnB,YAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;;;;IAK5B,QAAQ,CAAC,MAAiB,EAAE,GAAa,EAAA;AACxC,QAAA,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;YACxC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;YACjC,OAAO,YAAY,CAAC,MAAM;AACzB,kBAAG;AACH,kBAAE,EAAE,CAAC,MAAM,CAAC;;QAEd,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;;AAG3B;;;;;AAKG;AACH,IAAA,iBAAiB,CAAC,IAAc,EAAA;AAC/B,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS;;AAGjC;;;;AAIG;IACH,SAAS,GAAA;AACR,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,eAAe;AAC5C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxB,IAAI,CAAC,IAAI,EAAE;YACV;;AAED,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACvB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;YAClC,MAAM,MAAM,GAAG;AACd,kBAAG,GAAG,CAAC,IAA4B,CAAC,SAAS;AAC7C,kBAAE,GAAG,CAAC,IAAI;YACX,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YACxC,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;gBACxC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;;iBACrB,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE;AAChD,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;;AAExB,YAAA,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe;;QAEpC,IAAI,CAAC,SAAS,EAAE;;AAGjB;;;;;AAKG;AACH,IAAA,MAAM,CAAC,GAAgB,EAAA;AACtB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxB,IAAI,CAAC,IAAI,EAAE;YACV;;AAGD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;QAClC,MAAM,MAAM,GAAG;AACd,cAAG,GAAG,CAAC,IAA4B,CAAC,SAAS;AAC7C,cAAE,GAAG,CAAC,IAAI;QAEX,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;AACxC,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YACf,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AAC3B,YAAA,GAAG,CAAC,QAAQ,GAAG,KAAK;;aACd;AACN,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;AACvB,YAAA,GAAG,CAAC,QAAQ,GAAG,IAAI;;AAGpB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACrB,YAAA,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE;AACzC,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;gBAClB,MAAM,MAAM,GAAG;AACd,sBAAG,CAAC,CAAC,IAA4B,CAAC,SAAS;AAC3C,sBAAE,CAAC,CAAC,IAAI;AACT,gBAAA,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC7C,aAAC,CAAC;;aACI;AACN,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;;QAGrD,IAAI,CAAC,SAAS,EAAE;;AAGjB;;;;AAIG;IACH,YAAY,GAAA;AACX,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE;YAClB;;AAGD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAElC,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACpB,YAAA,MAAM,MAAM,GAAG,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,IAAI;AACzD,YAAA,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC;AAClD,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;;AAGrD;;;AAGG;IACH,SAAS,GAAA;QACR,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;AAG5D;;;;;;;;AAQG;;IAEK,SAAS,CAAC,KAAU,EAAE,MAAS,EAAA;QACtC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE;YAClD,OAAO,KAAK,CAAC,IAAI,CAChB,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CACnD;;QAEF,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;AAGlC;;;;AAIG;IACH,kBAAkB,GAAA;AACjB,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;AAC5D,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC;AAC1C,SAAC,CAAC;AAEF,QAAA,KAAK,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YAC/D,IAAI,CAAC,SAAS,CAAC,UAAU,CACxB,MAAM,EAAE,GAAG,IAAI,QAAQ,EACvB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CACtB;;;AAGF,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;AAGxB;;;;AAIG;IACH,YAAY,GAAA;AACX,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;;AAGvB;;;;AAIG;IACH,sBAAsB,CAAC,EAAE,EAAE,EAAkB,EAAA;QAC5C,IAAI,CAAC,kBAAkB,EAAE,EAAE,OAAO,CAAC,CAAC,QAAQ,KAAI;YAC/C,IAAI,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,QAAQ,CAAC,QAAQ,EAAE;gBAC5C,QAAQ,CAAC,aAAa,EAAE;;AAE1B,SAAC,CAAC;;8GA7pBS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAXf,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,OAAA,EAAA,eAAA,EAAA,IAAA,EAAA,YAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EAAA;AACV,YAAA;AACC,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,cAAc,CAAC;AAC7C,gBAAA,KAAK,EAAE;AACP;SACD,EA8SmC,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,0BAA0B,EACvD,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAW,EAEoB,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,6BAA6B,EAC1B,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,SAAA,EAAA,2BAA2B,EAClC,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,+BAA+B,EAC1D,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAW,EAEiB,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,8BAA8B,EAC1D,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAW,EAEe,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,4BAA4B,EACtD,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAW,EAGjB,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,SAAA,EAAA,mCAAmC,EAEE,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,6BAA6B,EAExB,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,iBAAiB,ECva7D,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,yntBAqrBA,EDnnBE,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,EACP,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAS,EACT,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EACX,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,EACb,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,WAAW,EACX,IAAA,EAAA,SAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,eAAe,EACf,IAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,IAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,+BAA+B,EAC/B,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,EAClB,QAAA,EAAA,0CAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,EACjB,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAEhB,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iCAAiC,EAEjC,QAAA,EAAA,oDAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,OAAO,EAEI,IAAA,EAAA,KAAA,EAAA,CAAA,EAAA,UAAA,EAAA;YACX,OAAO,CAAC,WAAW,EAAE;gBACpB,UAAU,CAAC,QAAQ,EAAE;AACpB,oBAAA,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AACrB,oBAAA,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;iBAC5D,CAAC;gBACF,UAAU,CAAC,QAAQ,EAAE;AACpB,oBAAA,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;iBAC5D;aACD;AACD,SAAA,EAAA,CAAA,CAAA;;2FAYW,cAAc,EAAA,UAAA,EAAA,CAAA;kBA9C1B,SAAS;+BACC,yBAAyB,EAAA,UAAA,EACvB,IAAI,EAEP,OAAA,EAAA;wBACR,OAAO;wBACP,gBAAgB;wBAChB,SAAS;wBACT,mBAAmB;wBACnB,WAAW;wBACX,aAAa;wBACb,WAAW;wBACX,eAAe;wBACf,gBAAgB;wBAChB,+BAA+B;wBAC/B,kBAAkB;wBAClB,iBAAiB;wBACjB,mBAAmB;wBACnB,gBAAgB;wBAChB,kBAAkB;wBAClB,iCAAiC;wBACjC,SAAS;wBACT;qBACA,EACW,UAAA,EAAA;wBACX,OAAO,CAAC,WAAW,EAAE;4BACpB,UAAU,CAAC,QAAQ,EAAE;AACpB,gCAAA,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AACrB,gCAAA,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;6BAC5D,CAAC;4BACF,UAAU,CAAC,QAAQ,EAAE;AACpB,gCAAA,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;6BAC5D;yBACD;qBACD,EACU,SAAA,EAAA;AACV,wBAAA;AACC,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,oBAAoB,CAAC;AAC7C,4BAAA,KAAK,EAAE;AACP;qBACD,EACK,IAAA,EAAA;AACL,wBAAA,KAAK,EAAE;AACP,qBAAA,EAAA,QAAA,EAAA,yntBAAA,EAAA;;;ME3FW,kBAAkB,CAAA;AAmB9B,IAAA,WAAA,CACoC,WAAgB,iBACd,UAAmC,EAAA;QADrC,IAAW,CAAA,WAAA,GAAX,WAAW;QACT,IAAU,CAAA,UAAA,GAAV,UAAU;AAnBvC,QAAA,IAAA,CAAA,SAAS,GAAG,SAAS,CAC7B,IAAI,CAAC,UAAU,CAAC,aAAa,EAC7B,WAAW,CACX,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,CAAC,EAC9B,SAAS,CAAC,MAAK;YACd,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;iBACvC,OAAO,CAAC,IAAI;AACZ,iBAAA,qBAAqB,EAAE;AACzB,YAAA,OAAO,SAAS,CAAa,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,IAAI,CAC/D,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,KAAK,GAAG,OAAO,GAAG,KAAK,CAAC,EAC7CC,sBAAoB,EAAE,EACtB,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CACjD;SACD,CAAC,CACF;;8GAjBW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAoBrB,QAAQ,EAAA,EAAA,EAAA,KAAA,EACR,UAAU,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGArBP,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE;AACV,iBAAA;;0BAqBE,MAAM;2BAAC,QAAQ;;0BACf,MAAM;2BAAC,UAAU;yCAnBV,SAAS,EAAA,CAAA;sBADjB;;;MCJW,gBAAgB,CAAA;IAO5B,WAAoB,CAAA,EAAc,EAAU,QAAmB,EAAA;QAA3C,IAAE,CAAA,EAAA,GAAF,EAAE;QAAsB,IAAQ,CAAA,QAAA,GAAR,QAAQ;QAFpD,IAAM,CAAA,MAAA,GAAG,CAAC;;IAIkB,YAAY,GAAA;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAClB,IAAI,CAAC,IAAI,EAAE;;;IAIU,OAAO,GAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,IAAI,EAAE;;;IAIe,YAAY,GAAA;AACvC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,IAAI,EAAE;;;IAIb,IAAI,GAAA;QACH,IAAI,CAAC,MAAM,EAAE;QACb,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC;;IAGxD,IAAI,GAAA;QACH,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC;AAC1D,QAAA,MAAM,CAAC,UAAU,CAAC,MAAK;AACtB,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC;AACtD,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACpB,SAAC,EAAE,IAAI,CAAC,KAAK,CAAC;;IAGf,MAAM,GAAA;QACL,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;QAElD,IAAI,CAAC,QAAQ,CAAC,WAAW,CACxB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;SAC3C;AAED,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC;;QAGtD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;AAClD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,IAAI,CAAC,SAAS,CAAA,CAAE,CAAC;;AAGpE,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACrB,IAAI,CAAC,OAAO,EACZ,oBAAoB,EACpB,CAAW,QAAA,EAAA,IAAI,CAAC,KAAK,CAAA,EAAA,CAAI,CACzB;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACrB,IAAI,CAAC,OAAO,EACZ,iBAAiB,EACjB,CAAW,QAAA,EAAA,IAAI,CAAC,KAAK,CAAA,EAAA,CAAI,CACzB;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACrB,IAAI,CAAC,OAAO,EACZ,eAAe,EACf,CAAW,QAAA,EAAA,IAAI,CAAC,KAAK,CAAA,EAAA,CAAI,CACzB;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACrB,IAAI,CAAC,OAAO,EACZ,YAAY,EACZ,CAAW,QAAA,EAAA,IAAI,CAAC,KAAK,CAAA,EAAA,CAAI,CACzB;;IAGF,WAAW,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAClB;;;QAGD,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE;;QAG7D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE;;;;AAKvD,QAAA,MAAM,SAAS,GACd,MAAM,CAAC,WAAW;YAClB,QAAQ,CAAC,eAAe,CAAC,SAAS;YAClC,QAAQ,CAAC,IAAI,CAAC,SAAS;AACvB,YAAA,CAAC;QAEF,IAAI,GAAG,EAAE,IAAI;AAEb,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;AAC7B,YAAA,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AACnD,YAAA,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,CAAC;;AAG7D,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;YAChC,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AAClC,YAAA,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,CAAC;;AAG7D,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;AAC9B,YAAA,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC;AAC5D,YAAA,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;;AAGrD,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE;AAC/B,YAAA,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC;YAC5D,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;;;AAInC,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAG,EAAA,GAAG,GAAG,SAAS,CAAA,EAAA,CAAI,CAAC;AACnE,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAA,EAAG,IAAI,CAAA,EAAA,CAAI,CAAC;;8GAzH9C,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,CAAA,SAAA,EAAA,cAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE;AACV,iBAAA;uGAEkB,YAAY,EAAA,CAAA;sBAA7B,KAAK;uBAAC,SAAS;gBACP,SAAS,EAAA,CAAA;sBAAjB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBAM2B,YAAY,EAAA,CAAA;sBAAvC,YAAY;uBAAC,YAAY;gBAMH,OAAO,EAAA,CAAA;sBAA7B,YAAY;uBAAC,OAAO;gBAMO,YAAY,EAAA,CAAA;sBAAvC,YAAY;uBAAC,YAAY;;;ACA3B;;;AAGG;IACS;AAAZ,CAAA,UAAY,mBAAmB,EAAA;AAC9B;;AAEG;AACH,IAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AAEb;;AAEG;AACH,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AAEjB;;AAEG;AACH,IAAA,mBAAA,CAAA,aAAA,CAAA,GAAA,cAA4B;AAE5B;;AAEG;AACH,IAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AAEb;;AAEG;AACH,IAAA,mBAAA,CAAA,WAAA,CAAA,GAAA,YAAwB;AAExB;;AAEG;AACH,IAAA,mBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACpB,CAAC,EA9BW,mBAAmB,KAAnB,mBAAmB,GA8B9B,EAAA,CAAA,CAAA;;MC5DY,iBAAiB,CAAA;IAC7B,QAAQ,CAAC,KAAY,EAAE,MAAW,EAAA;QACjC,IAAI,QAAQ,GAAe,EAAE;AAC7B,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;AAC1B,YAAA,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE;YACzB,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,EAAE;AAC3C,gBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU;gBACpC,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;oBAC3C,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;AACnC,wBAAA,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAC5B,CAAC,CAAC,KACD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AACd,6BAAA,QAAQ;AACR,6BAAA,WAAW;AACX,6BAAA,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAC3B;AACF,qBAAC,CAAC;;;AAIJ,YAAA,IAAI,MAAM,CAAC,UAAU,EAAE;AACtB,gBAAA,QAAQ,GAAG,IAAI,CAAC,OAAO,CACtB,QAAQ,EACR,MAAM,CAAC,UAAU,CAAC,QAAQ,EAC1B,MAAM,CAAC,UAAU,CAAC,SAAS,CAC3B;;;AAGH,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC;;AAG7B,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE;AAClC,YAAA,MAAM,CAAC,QAAQ,GAAG,IAAI;;AAEvB,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC;AACtB,cAAE,MAAM,CAAC,OAAO,IAAI;AACpB,cAAE,QAAQ,CAAC,MAAM;AAElB,QAAA,MAAM,UAAU,GAA6B;AAC5C,YAAA,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC;YAC9C,OAAO;AACP,YAAA,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,OAAO;YAC1B,EAAE,EAAE,IAAI,GAAG,OAAO;YAClB,KAAK,EAAE,QAAQ,CAAC,MAAM;AACtB,YAAA,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,OAAO,EAAE,IAAI,GAAG,OAAO;SACzD;AAED,QAAA,OAAO,UAAU;;AAGlB;;;;;;;;AAQG;AACH,IAAA,OAAO,CACN,UAAiB,EACjB,QAAgB,EAChB,YAAoB,KAAK,EAAA;QAEzB,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC;AACnC,YAAA,IAAI,SAAS,KAAK,MAAM,EAAE;gBACzB,OAAO,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;;iBAC3C;gBACN,OAAO,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;;AAEnD,SAAC,CAAC;;IAGH,GAAG,CAAC,MAAW,EAAE,IAAoB,EAAA;QACpC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE;AACvC,YAAA,IAAI,GAAI,IAAe,CAAC,KAAK,CAAC,GAAG,CAAC;;AAEnC,QAAA,OAAQ,IAAc,CAAC,MAAM,CAC5B,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,EACxD,MAAM,CACN;;8GAnFU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFjB,MAAM,EAAA,CAAA,CAAA;;2FAEN,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACX,oBAAA,UAAU,EAAE;AACZ,iBAAA;;;ICLW;AAAZ,CAAA,UAAY,cAAc,EAAA;AACzB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACtB,CAAC,EAHW,cAAc,KAAd,cAAc,GAGzB,EAAA,CAAA,CAAA;;ACHD;;ACAA;;AAEG;;ACFH;;AAEG;;;;"}