{"version":3,"file":"primeng-treetable.js","sources":["ng://primeng/treetable/treetable.ts","ng://primeng/treetable/primeng-treetable.ts"],"sourcesContent":["import { NgModule, AfterContentInit, OnInit, OnDestroy, HostListener, Injectable, Directive, Component, Input, Output, EventEmitter, ContentChildren, TemplateRef, QueryList, ElementRef, NgZone, ViewChild, AfterViewInit, AfterViewChecked, OnChanges, SimpleChanges, ChangeDetectionStrategy} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TreeNode } from 'primeng/api';\nimport { Subject, Subscription } from 'rxjs';\nimport { DomHandler } from 'primeng/dom';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { PrimeTemplate, SharedModule } from 'primeng/api';\nimport { SortMeta } from 'primeng/api';\nimport { BlockableUI } from 'primeng/api';\nimport { FilterMetadata } from 'primeng/api';\nimport { ObjectUtils } from 'primeng/utils';\nimport { FilterUtils } from 'primeng/utils';\n\n@Injectable()\nexport class TreeTableService {\n\n private sortSource = new Subject();\n private selectionSource = new Subject();\n private contextMenuSource = new Subject();\n private uiUpdateSource = new Subject();\n private totalRecordsSource = new Subject();\n\n sortSource$ = this.sortSource.asObservable();\n selectionSource$ = this.selectionSource.asObservable();\n contextMenuSource$ = this.contextMenuSource.asObservable();\n uiUpdateSource$ = this.uiUpdateSource.asObservable();\n totalRecordsSource$ = this.totalRecordsSource.asObservable();\n\n onSort(sortMeta: SortMeta|SortMeta[]) {\n this.sortSource.next(sortMeta);\n }\n\n onSelectionChange() {\n this.selectionSource.next();\n }\n\n onContextMenu(node: any) {\n this.contextMenuSource.next(node);\n }\n\n onUIUpdate(value: any) {\n this.uiUpdateSource.next(value);\n }\n\n onTotalRecordsChange(value: number) {\n this.totalRecordsSource.next(value);\n }\n}\n\n@Component({\n selector: 'p-treeTable',\n template: `\n
\n
\n
\n \n
\n
\n \n
\n \n \n
\n \n \n \n \n \n \n \n \n \n
\n
\n\n
\n
\n
\n
\n\n \n
\n \n
\n\n
\n\n \n \n
\n `,\n providers: [TreeTableService],\n changeDetection: ChangeDetectionStrategy.Default\n})\nexport class TreeTable implements AfterContentInit, OnInit, OnDestroy, BlockableUI, OnChanges {\n\n @Input() columns: any[];\n\n @Input() style: any;\n\n @Input() styleClass: string;\n\n @Input() autoLayout: boolean;\n\n @Input() lazy: boolean = false;\n\n @Input() paginator: boolean;\n\n @Input() rows: number;\n\n @Input() first: number = 0;\n\n @Input() pageLinks: number = 5;\n\n @Input() rowsPerPageOptions: any[];\n\n @Input() alwaysShowPaginator: boolean = true;\n\n @Input() paginatorPosition: string = 'bottom';\n\n @Input() paginatorDropdownAppendTo: any;\n\n @Input() currentPageReportTemplate: string = '{currentPage} of {totalPages}';\n\n @Input() showCurrentPageReport: boolean;\n\n @Input() defaultSortOrder: number = 1;\n\n @Input() sortMode: string = 'single';\n \n @Input() resetPageOnSort: boolean = true;\n\n @Input() customSort: boolean;\n\n @Input() selectionMode: string;\n\n @Output() selectionChange: EventEmitter = new EventEmitter();\n\n @Input() contextMenuSelection: any;\n\n @Output() contextMenuSelectionChange: EventEmitter = new EventEmitter();\n\n @Input() contextMenuSelectionMode: string = \"separate\";\n\n @Input() dataKey: string;\n\n @Input() metaKeySelection: boolean;\n\n @Input() compareSelectionBy: string = 'deepEquals';\n\n @Input() rowHover: boolean;\n\n @Input() loading: boolean;\n\n @Input() loadingIcon: string = 'pi pi-spinner';\n\n @Input() showLoader: boolean = true;\n\n @Input() scrollable: boolean;\n\n @Input() scrollHeight: string;\n\n @Input() virtualScroll: boolean;\n\n @Input() virtualScrollDelay: number = 150;\n\n @Input() virtualRowHeight: number = 28;\n\n @Input() frozenWidth: string;\n\n @Input() frozenColumns: any[];\n\n @Input() resizableColumns: boolean;\n\n @Input() columnResizeMode: string = 'fit';\n\n @Input() reorderableColumns: boolean;\n\n @Input() contextMenu: any;\n\n @Input() rowTrackBy: Function = (index: number, item: any) => item;\n\n @Input() filters: { [s: string]: FilterMetadata; } = {};\n\n @Input() globalFilterFields: string[];\n\n @Input() filterDelay: number = 300;\n\n @Input() filterMode: string = 'lenient';\n\n @Output() onFilter: EventEmitter = new EventEmitter();\n\n @Output() onNodeExpand: EventEmitter = new EventEmitter();\n\n @Output() onNodeCollapse: EventEmitter = new EventEmitter();\n\n @Output() onPage: EventEmitter = new EventEmitter();\n\n @Output() onSort: EventEmitter = new EventEmitter();\n\n @Output() onLazyLoad: EventEmitter = new EventEmitter();\n\n @Output() sortFunction: EventEmitter = new EventEmitter();\n\n @Output() onColResize: EventEmitter = new EventEmitter();\n\n @Output() onColReorder: EventEmitter = new EventEmitter();\n\n @Output() onNodeSelect: EventEmitter = new EventEmitter();\n\n @Output() onNodeUnselect: EventEmitter = new EventEmitter();\n\n @Output() onContextMenuSelect: EventEmitter = new EventEmitter();\n\n @Output() onHeaderCheckboxToggle: EventEmitter = new EventEmitter();\n\n @Output() onEditInit: EventEmitter = new EventEmitter();\n\n @Output() onEditComplete: EventEmitter = new EventEmitter();\n\n @Output() onEditCancel: EventEmitter = new EventEmitter();\n\n @ViewChild('container') containerViewChild: ElementRef;\n\n @ViewChild('resizeHelper') resizeHelperViewChild: ElementRef;\n\n @ViewChild('reorderIndicatorUp') reorderIndicatorUpViewChild: ElementRef;\n\n @ViewChild('reorderIndicatorDown') reorderIndicatorDownViewChild: ElementRef;\n\n @ViewChild('table') tableViewChild: ElementRef;\n\n @ContentChildren(PrimeTemplate) templates: QueryList;\n\n _value: TreeNode[] = [];\n\n serializedValue: any[];\n\n _totalRecords: number = 0;\n\n _multiSortMeta: SortMeta[];\n\n _sortField: string;\n\n _sortOrder: number = 1;\n\n virtualScrollTimer: any;\n \n virtualScrollCallback: Function;\n\n filteredNodes: any[];\n\n filterTimeout: any;\n\n colGroupTemplate: TemplateRef;\n\n captionTemplate: TemplateRef;\n\n headerTemplate: TemplateRef;\n\n bodyTemplate: TemplateRef;\n\n loadingBodyTemplate: TemplateRef;\n\n footerTemplate: TemplateRef;\n\n summaryTemplate: TemplateRef;\n\n emptyMessageTemplate: TemplateRef;\n\n paginatorLeftTemplate: TemplateRef;\n\n paginatorRightTemplate: TemplateRef;\n\n frozenHeaderTemplate: TemplateRef;\n\n frozenBodyTemplate: TemplateRef;\n\n frozenFooterTemplate: TemplateRef;\n\n frozenColGroupTemplate: TemplateRef;\n\n lastResizerHelperX: number;\n\n reorderIconWidth: number;\n\n reorderIconHeight: number;\n\n draggedColumn: any;\n\n dropPosition: number;\n\n preventSelectionSetterPropagation: boolean;\n\n _selection: any;\n\n selectionKeys: any = {};\n\n rowTouched: boolean;\n\n editingCell: Element;\n\n editingCellClick: boolean;\n\n documentEditListener: any;\n\n initialized: boolean;\n\n toggleRowIndex: number;\n\n ngOnInit() {\n if (this.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n this.initialized = true;\n }\n\n ngAfterContentInit() {\n this.templates.forEach((item) => {\n switch (item.getType()) {\n case 'caption':\n this.captionTemplate = item.template;\n break;\n\n case 'header':\n this.headerTemplate = item.template;\n break;\n\n case 'body':\n this.bodyTemplate = item.template;\n break;\n\n case 'loadingbody':\n this.loadingBodyTemplate = item.template;\n break;\n\n case 'footer':\n this.footerTemplate = item.template;\n break;\n\n case 'summary':\n this.summaryTemplate = item.template;\n break;\n\n case 'colgroup':\n this.colGroupTemplate = item.template;\n break;\n\n case 'emptymessage':\n this.emptyMessageTemplate = item.template;\n break;\n\n case 'paginatorleft':\n this.paginatorLeftTemplate = item.template;\n break;\n\n case 'paginatorright':\n this.paginatorRightTemplate = item.template;\n break;\n\n case 'frozenheader':\n this.frozenHeaderTemplate = item.template;\n break;\n\n case 'frozenbody':\n this.frozenBodyTemplate = item.template;\n break;\n\n case 'frozenfooter':\n this.frozenFooterTemplate = item.template;\n break;\n\n case 'frozencolgroup':\n this.frozenColGroupTemplate = item.template;\n break;\n }\n });\n }\n\n constructor(public el: ElementRef, public zone: NgZone, public tableService: TreeTableService) {}\n\n ngOnChanges(simpleChange: SimpleChanges) {\n if (simpleChange.value) {\n this._value = simpleChange.value.currentValue;\n\n if (!this.lazy) {\n this.totalRecords = (this._value ? this._value.length : 0);\n\n if (this.sortMode == 'single' && this.sortField)\n this.sortSingle();\n else if (this.sortMode == 'multiple' && this.multiSortMeta)\n this.sortMultiple();\n else if (this.hasFilter()) //sort already filters\n this._filter();\n }\n\n if (this.virtualScroll && this.virtualScrollCallback) {\n this.virtualScrollCallback();\n }\n\n this.updateSerializedValue();\n this.tableService.onUIUpdate(this.value);\n }\n\n if (simpleChange.sortField) {\n this._sortField = simpleChange.sortField.currentValue;\n\n //avoid triggering lazy load prior to lazy initialization at onInit\n if ( !this.lazy || this.initialized ) {\n if (this.sortMode === 'single') {\n this.sortSingle();\n }\n }\n }\n\n if (simpleChange.sortOrder) {\n this._sortOrder = simpleChange.sortOrder.currentValue;\n\n //avoid triggering lazy load prior to lazy initialization at onInit\n if ( !this.lazy || this.initialized ) {\n if (this.sortMode === 'single') {\n this.sortSingle();\n }\n }\n }\n\n if (simpleChange.multiSortMeta) {\n this._multiSortMeta = simpleChange.multiSortMeta.currentValue;\n if (this.sortMode === 'multiple') {\n this.sortMultiple();\n }\n }\n\n if (simpleChange.selection) {\n this._selection = simpleChange.selection.currentValue;\n\n if (!this.preventSelectionSetterPropagation) {\n this.updateSelectionKeys();\n this.tableService.onSelectionChange();\n }\n this.preventSelectionSetterPropagation = false;\n }\n }\n\n @Input() get value(): any[] {\n return this._value;\n }\n set value(val: any[]) {\n this._value = val;\n }\n\n updateSerializedValue() {\n this.serializedValue = [];\n\n if (this.paginator)\n this.serializePageNodes();\n else\n this.serializeNodes(null, this.filteredNodes||this.value, 0, true);\n }\n\n serializeNodes(parent, nodes, level, visible) {\n if (nodes && nodes.length) {\n for(let node of nodes) {\n node.parent = parent;\n const rowNode = {\n node: node,\n parent: parent,\n level: level,\n visible: visible && (parent ? parent.expanded : true)\n };\n this.serializedValue.push(rowNode);\n \n if (rowNode.visible && node.expanded) {\n this.serializeNodes(node, node.children, level + 1, rowNode.visible);\n }\n }\n }\n }\n\n serializePageNodes() {\n let data = this.filteredNodes || this.value;\n this.serializedValue = [];\n if (data && data.length) {\n const first = this.lazy ? 0 : this.first;\n\n for(let i = first; i < (first + this.rows); i++) {\n let node = data[i];\n if (node) {\n this.serializedValue.push({\n node: node,\n parent: null,\n level: 0,\n visible: true\n });\n \n this.serializeNodes(node, node.children, 1, true);\n }\n }\n }\n }\n\n @Input() get totalRecords(): number {\n return this._totalRecords;\n }\n set totalRecords(val: number) {\n this._totalRecords = val;\n this.tableService.onTotalRecordsChange(this._totalRecords);\n }\n\n @Input() get sortField(): string {\n return this._sortField;\n }\n\n set sortField(val: string) {\n this._sortField = val;\n }\n\n @Input() get sortOrder(): number {\n return this._sortOrder;\n }\n set sortOrder(val: number) {\n this._sortOrder = val;\n }\n\n @Input() get multiSortMeta(): SortMeta[] {\n return this._multiSortMeta;\n }\n\n set multiSortMeta(val: SortMeta[]) {\n this._multiSortMeta = val;\n }\n\n @Input() get selection(): any {\n return this._selection;\n }\n\n set selection(val: any) {\n this._selection = val;\n }\n\n updateSelectionKeys() {\n if (this.dataKey && this._selection) {\n this.selectionKeys = {};\n if (Array.isArray(this._selection)) {\n for(let node of this._selection) {\n this.selectionKeys[String(ObjectUtils.resolveFieldData(node.data, this.dataKey))] = 1;\n }\n }\n else {\n this.selectionKeys[String(ObjectUtils.resolveFieldData(this._selection.data, this.dataKey))] = 1;\n }\n }\n }\n\n onPageChange(event) {\n this.first = event.first;\n this.rows = event.rows;\n\n if (this.lazy)\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n else\n this.serializePageNodes();\n\n this.onPage.emit({\n first: this.first,\n rows: this.rows\n });\n \n this.tableService.onUIUpdate(this.value);\n }\n\n sort(event) {\n let originalEvent = event.originalEvent;\n\n if (this.sortMode === 'single') {\n this._sortOrder = (this.sortField === event.field) ? this.sortOrder * -1 : this.defaultSortOrder;\n this._sortField = event.field;\n this.sortSingle();\n }\n if (this.sortMode === 'multiple') {\n let metaKey = originalEvent.metaKey || originalEvent.ctrlKey;\n let sortMeta = this.getSortMeta(event.field);\n\n if (sortMeta) {\n if (!metaKey) {\n this._multiSortMeta = [{ field: event.field, order: sortMeta.order * -1 }]\n }\n else {\n sortMeta.order = sortMeta.order * -1;\n }\n }\n else {\n if (!metaKey || !this.multiSortMeta) {\n this._multiSortMeta = [];\n }\n this.multiSortMeta.push({ field: event.field, order: this.defaultSortOrder });\n }\n \n this.sortMultiple();\n }\n }\n\n sortSingle() {\n if (this.sortField && this.sortOrder) {\n if (this.resetPageOnSort) {\n this.first = 0;\n }\n\n if (this.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n else if (this.value) {\n this.sortNodes(this.value);\n\n if (this.hasFilter()) {\n this._filter();\n }\n }\n \n let sortMeta: SortMeta = {\n field: this.sortField,\n order: this.sortOrder\n };\n \n this.onSort.emit(sortMeta);\n this.tableService.onSort(sortMeta);\n this.updateSerializedValue();\n }\n }\n\n sortNodes(nodes) {\n if (!nodes || nodes.length === 0) {\n return;\n } \n\n if (this.customSort) {\n this.sortFunction.emit({\n data: nodes,\n mode: this.sortMode,\n field: this.sortField,\n order: this.sortOrder\n });\n }\n else {\n nodes.sort((node1, node2) => {\n let value1 = ObjectUtils.resolveFieldData(node1.data, this.sortField);\n let value2 = ObjectUtils.resolveFieldData(node2.data, this.sortField);\n let result = null;\n\n if (value1 == null && value2 != null)\n result = -1;\n else if (value1 != null && value2 == null)\n result = 1;\n else if (value1 == null && value2 == null)\n result = 0;\n else if (typeof value1 === 'string' && typeof value2 === 'string')\n result = value1.localeCompare(value2, undefined, {numeric: true});\n else\n result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0;\n\n return (this.sortOrder * result);\n });\n }\n\n for(let node of nodes) {\n this.sortNodes(node.children);\n }\n }\n\n sortMultiple() {\n if (this.multiSortMeta) {\n if (this.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n else if (this.value) {\n this.sortMultipleNodes(this.value);\n\n if (this.hasFilter()) {\n this._filter();\n }\n }\n \n this.onSort.emit({\n multisortmeta: this.multiSortMeta\n });\n this.tableService.onSort(this.multiSortMeta);\n this.updateSerializedValue();\n }\n }\n\n sortMultipleNodes(nodes) {\n if (!nodes || nodes.length === 0) {\n return;\n } \n \n if (this.customSort) {\n this.sortFunction.emit({\n data: this.value,\n mode: this.sortMode,\n multiSortMeta: this.multiSortMeta\n });\n }\n else {\n this.value.sort((node1, node2) => {\n return this.multisortField(node1, node2, this.multiSortMeta, 0);\n });\n }\n\n for(let node of nodes) {\n this.sortMultipleNodes(node.children);\n }\n }\n\n multisortField(node1, node2, multiSortMeta, index) {\n let value1 = ObjectUtils.resolveFieldData(node1.data, multiSortMeta[index].field);\n let value2 = ObjectUtils.resolveFieldData(node2.data, multiSortMeta[index].field);\n let result = null;\n\n if (value1 == null && value2 != null)\n result = -1;\n else if (value1 != null && value2 == null)\n result = 1;\n else if (value1 == null && value2 == null)\n result = 0;\n if (typeof value1 == 'string' || value1 instanceof String) {\n if (value1.localeCompare && (value1 != value2)) {\n return (multiSortMeta[index].order * value1.localeCompare(value2, undefined, {numeric: true}));\n }\n }\n else {\n result = (value1 < value2) ? -1 : 1;\n }\n\n if (value1 == value2) {\n return (multiSortMeta.length - 1) > (index) ? (this.multisortField(node1, node2, multiSortMeta, index + 1)) : 0;\n }\n\n return (multiSortMeta[index].order * result);\n }\n\n getSortMeta(field: string) {\n if (this.multiSortMeta && this.multiSortMeta.length) {\n for (let i = 0; i < this.multiSortMeta.length; i++) {\n if (this.multiSortMeta[i].field === field) {\n return this.multiSortMeta[i];\n }\n }\n }\n \n return null;\n }\n\n isSorted(field: string) {\n if (this.sortMode === 'single') {\n return (this.sortField && this.sortField === field);\n }\n else if (this.sortMode === 'multiple') {\n let sorted = false;\n if (this.multiSortMeta) {\n for(let i = 0; i < this.multiSortMeta.length; i++) {\n if (this.multiSortMeta[i].field == field) {\n sorted = true;\n break;\n }\n }\n }\n return sorted;\n }\n }\n\n createLazyLoadMetadata(): any {\n return {\n first: this.first,\n rows: this.virtualScroll ? this.rows * 2 : this.rows,\n sortField: this.sortField,\n sortOrder: this.sortOrder,\n filters: this.filters,\n globalFilter: this.filters && this.filters['global'] ? this.filters['global'].value : null,\n multiSortMeta: this.multiSortMeta\n };\n }\n\n handleVirtualScroll(event) {\n this.first = (event.page - 1) * this.rows;\n this.virtualScrollCallback = event.callback;\n \n this.zone.run(() => {\n if (this.virtualScrollTimer) {\n clearTimeout(this.virtualScrollTimer);\n }\n \n this.virtualScrollTimer = setTimeout(() => {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }, this.virtualScrollDelay);\n });\n }\n\n isEmpty() {\n let data = this.filteredNodes||this.value;\n return data == null || data.length == 0;\n }\n\n getBlockableElement(): HTMLElement {\n return this.el.nativeElement.children[0];\n }\n \n onColumnResizeBegin(event) {\n let containerLeft = DomHandler.getOffset(this.containerViewChild.nativeElement).left;\n this.lastResizerHelperX = (event.pageX - containerLeft + this.containerViewChild.nativeElement.scrollLeft);\n event.preventDefault();\n }\n\n onColumnResize(event) {\n let containerLeft = DomHandler.getOffset(this.containerViewChild.nativeElement).left;\n DomHandler.addClass(this.containerViewChild.nativeElement, 'ui-unselectable-text');\n this.resizeHelperViewChild.nativeElement.style.height = this.containerViewChild.nativeElement.offsetHeight + 'px';\n this.resizeHelperViewChild.nativeElement.style.top = 0 + 'px';\n this.resizeHelperViewChild.nativeElement.style.left = (event.pageX - containerLeft + this.containerViewChild.nativeElement.scrollLeft) + 'px';\n\n this.resizeHelperViewChild.nativeElement.style.display = 'block';\n }\n\n onColumnResizeEnd(event, column) {\n let delta = this.resizeHelperViewChild.nativeElement.offsetLeft - this.lastResizerHelperX;\n let columnWidth = column.offsetWidth;\n let newColumnWidth = columnWidth + delta;\n let minWidth = column.style.minWidth || 15;\n\n if (columnWidth + delta > parseInt(minWidth)) {\n if (this.columnResizeMode === 'fit') {\n let nextColumn = column.nextElementSibling;\n while (!nextColumn.offsetParent) {\n nextColumn = nextColumn.nextElementSibling;\n }\n\n if (nextColumn) {\n let nextColumnWidth = nextColumn.offsetWidth - delta;\n let nextColumnMinWidth = nextColumn.style.minWidth || 15;\n\n if (newColumnWidth > 15 && nextColumnWidth > parseInt(nextColumnMinWidth)) {\n if (this.scrollable) {\n let scrollableView = this.findParentScrollableView(column);\n let scrollableBodyTable = DomHandler.findSingle(scrollableView, 'table.ui-treetable-scrollable-body-table');\n let scrollableHeaderTable = DomHandler.findSingle(scrollableView, 'table.ui-treetable-scrollable-header-table');\n let scrollableFooterTable = DomHandler.findSingle(scrollableView, 'table.ui-treetable-scrollable-footer-table');\n let resizeColumnIndex = DomHandler.index(column);\n\n this.resizeColGroup(scrollableHeaderTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);\n this.resizeColGroup(scrollableBodyTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);\n this.resizeColGroup(scrollableFooterTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);\n }\n else {\n column.style.width = newColumnWidth + 'px';\n if (nextColumn) {\n nextColumn.style.width = nextColumnWidth + 'px';\n }\n }\n }\n }\n }\n else if (this.columnResizeMode === 'expand') {\n if (this.scrollable) {\n let scrollableView = this.findParentScrollableView(column);\n let scrollableBodyTable = DomHandler.findSingle(scrollableView, 'table.ui-treetable-scrollable-body-table');\n let scrollableHeaderTable = DomHandler.findSingle(scrollableView, 'table.ui-treetable-scrollable-header-table');\n let scrollableFooterTable = DomHandler.findSingle(scrollableView, 'table.ui-treetable-scrollable-footer-table');\n scrollableBodyTable.style.width = scrollableBodyTable.offsetWidth + delta + 'px';\n scrollableHeaderTable.style.width = scrollableHeaderTable.offsetWidth + delta + 'px';\n if (scrollableFooterTable) {\n scrollableFooterTable.style.width = scrollableFooterTable.offsetWidth + delta + 'px';\n }\n let resizeColumnIndex = DomHandler.index(column);\n\n this.resizeColGroup(scrollableHeaderTable, resizeColumnIndex, newColumnWidth, null);\n this.resizeColGroup(scrollableBodyTable, resizeColumnIndex, newColumnWidth, null);\n this.resizeColGroup(scrollableFooterTable, resizeColumnIndex, newColumnWidth, null);\n }\n else {\n this.tableViewChild.nativeElement.style.width = this.tableViewChild.nativeElement.offsetWidth + delta + 'px';\n column.style.width = newColumnWidth + 'px';\n let containerWidth = this.tableViewChild.nativeElement.style.width;\n this.containerViewChild.nativeElement.style.width = containerWidth + 'px';\n }\n }\n\n this.onColResize.emit({\n element: column,\n delta: delta\n });\n }\n\n this.resizeHelperViewChild.nativeElement.style.display = 'none';\n DomHandler.removeClass(this.containerViewChild.nativeElement, 'ui-unselectable-text');\n }\n\n findParentScrollableView(column) {\n if (column) {\n let parent = column.parentElement;\n while (parent && !DomHandler.hasClass(parent, 'ui-treetable-scrollable-view')) {\n parent = parent.parentElement;\n }\n\n return parent;\n }\n else {\n return null;\n }\n }\n\n resizeColGroup(table, resizeColumnIndex, newColumnWidth, nextColumnWidth) {\n if (table) {\n let colGroup = table.children[0].nodeName === 'COLGROUP' ? table.children[0] : null;\n\n if (colGroup) {\n let col = colGroup.children[resizeColumnIndex];\n let nextCol = col.nextElementSibling;\n col.style.width = newColumnWidth + 'px';\n \n if (nextCol && nextColumnWidth) {\n nextCol.style.width = nextColumnWidth + 'px';\n }\n }\n else {\n throw \"Scrollable tables require a colgroup to support resizable columns\";\n }\n }\n }\n\n onColumnDragStart(event, columnElement) {\n this.reorderIconWidth = DomHandler.getHiddenElementOuterWidth(this.reorderIndicatorUpViewChild.nativeElement);\n this.reorderIconHeight = DomHandler.getHiddenElementOuterHeight(this.reorderIndicatorDownViewChild.nativeElement);\n this.draggedColumn = columnElement;\n event.dataTransfer.setData('text', 'b'); // For firefox\n }\n\n onColumnDragEnter(event, dropHeader) {\n if (this.reorderableColumns && this.draggedColumn && dropHeader) {\n event.preventDefault();\n let containerOffset = DomHandler.getOffset(this.containerViewChild.nativeElement);\n let dropHeaderOffset = DomHandler.getOffset(dropHeader);\n\n if (this.draggedColumn != dropHeader) {\n let targetLeft = dropHeaderOffset.left - containerOffset.left;\n let targetTop = containerOffset.top - dropHeaderOffset.top;\n let columnCenter = dropHeaderOffset.left + dropHeader.offsetWidth / 2;\n\n this.reorderIndicatorUpViewChild.nativeElement.style.top = dropHeaderOffset.top - containerOffset.top - (this.reorderIconHeight - 1) + 'px';\n this.reorderIndicatorDownViewChild.nativeElement.style.top = dropHeaderOffset.top - containerOffset.top + dropHeader.offsetHeight + 'px';\n\n if (event.pageX > columnCenter) {\n this.reorderIndicatorUpViewChild.nativeElement.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n this.reorderIndicatorDownViewChild.nativeElement.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n this.dropPosition = 1;\n }\n else {\n this.reorderIndicatorUpViewChild.nativeElement.style.left = (targetLeft - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n this.reorderIndicatorDownViewChild.nativeElement.style.left = (targetLeft - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n this.dropPosition = -1;\n }\n\n this.reorderIndicatorUpViewChild.nativeElement.style.display = 'block';\n this.reorderIndicatorDownViewChild.nativeElement.style.display = 'block';\n }\n else {\n event.dataTransfer.dropEffect = 'none';\n }\n }\n }\n\n onColumnDragLeave(event) {\n if (this.reorderableColumns && this.draggedColumn) {\n event.preventDefault();\n this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';\n this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';\n }\n }\n\n onColumnDrop(event, dropColumn) {\n event.preventDefault();\n if (this.draggedColumn) {\n let dragIndex = DomHandler.indexWithinGroup(this.draggedColumn, 'ttreorderablecolumn');\n let dropIndex = DomHandler.indexWithinGroup(dropColumn, 'ttreorderablecolumn');\n let allowDrop = (dragIndex != dropIndex);\n if (allowDrop && ((dropIndex - dragIndex == 1 && this.dropPosition === -1) || (dragIndex - dropIndex == 1 && this.dropPosition === 1))) {\n allowDrop = false;\n }\n\n if (allowDrop && ((dropIndex < dragIndex && this.dropPosition === 1))) {\n dropIndex = dropIndex + 1;\n }\n\n if (allowDrop && ((dropIndex > dragIndex && this.dropPosition === -1))) {\n dropIndex = dropIndex - 1;\n }\n\n if (allowDrop) {\n ObjectUtils.reorderArray(this.columns, dragIndex, dropIndex);\n\n this.onColReorder.emit({\n dragIndex: dragIndex,\n dropIndex: dropIndex,\n columns: this.columns\n });\n }\n\n this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';\n this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';\n this.draggedColumn.draggable = false;\n this.draggedColumn = null;\n this.dropPosition = null;\n }\n }\n\n handleRowClick(event) {\n let targetNode = ( event.originalEvent.target).nodeName;\n if (targetNode == 'INPUT' || targetNode == 'BUTTON' || targetNode == 'A' || (DomHandler.hasClass(event.originalEvent.target, 'ui-clickable'))) {\n return;\n }\n\n if (this.selectionMode) {\n this.preventSelectionSetterPropagation = true;\n let rowNode = event.rowNode;\n let selected = this.isSelected(rowNode.node);\n let metaSelection = this.rowTouched ? false : this.metaKeySelection;\n let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowNode.node.data, this.dataKey)) : null;\n\n if (metaSelection) {\n let metaKey = event.originalEvent.metaKey||event.originalEvent.ctrlKey;\n\n if (selected && metaKey) {\n if (this.isSingleSelectionMode()) {\n this._selection = null;\n this.selectionKeys = {};\n this.selectionChange.emit(null);\n }\n else {\n let selectionIndex = this.findIndexInSelection(rowNode.node);\n this._selection = this.selection.filter((val,i) => i != selectionIndex);\n this.selectionChange.emit(this.selection);\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n }\n\n this.onNodeUnselect.emit({originalEvent: event.originalEvent, node: rowNode.node, type: 'row'});\n }\n else {\n if (this.isSingleSelectionMode()) {\n this._selection = rowNode.node;\n this.selectionChange.emit(rowNode.node);\n if (dataKeyValue) {\n this.selectionKeys = {};\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n else if (this.isMultipleSelectionMode()) {\n if (metaKey) {\n this._selection = this.selection||[];\n }\n else {\n this._selection = [];\n this.selectionKeys = {};\n }\n\n this._selection = [...this.selection, rowNode.node];\n this.selectionChange.emit(this.selection);\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n\n this.onNodeSelect.emit({originalEvent: event.originalEvent, node: rowNode.node, type: 'row', index: event.rowIndex});\n }\n }\n else {\n if (this.selectionMode === 'single') {\n if (selected) {\n this._selection = null;\n this.selectionKeys = {};\n this.selectionChange.emit(this.selection);\n this.onNodeUnselect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row' });\n }\n else {\n this._selection = rowNode.node;\n this.selectionChange.emit(this.selection);\n this.onNodeSelect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row', index: event.rowIndex });\n if (dataKeyValue) {\n this.selectionKeys = {};\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n }\n else if (this.selectionMode === 'multiple') {\n if (selected) {\n let selectionIndex = this.findIndexInSelection(rowNode.node);\n this._selection = this.selection.filter((val, i) => i != selectionIndex);\n this.selectionChange.emit(this.selection);\n this.onNodeUnselect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row' });\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n }\n else {\n this._selection = this.selection ? [...this.selection, rowNode.node] : [rowNode.node];\n this.selectionChange.emit(this.selection);\n this.onNodeSelect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row', index: event.rowIndex });\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n }\n }\n\n this.tableService.onSelectionChange();\n }\n\n this.rowTouched = false;\n }\n\n handleRowTouchEnd(event) {\n this.rowTouched = true;\n }\n\n handleRowRightClick(event) {\n if (this.contextMenu) {\n const node = event.rowNode.node;\n\n if (this.contextMenuSelectionMode === 'separate') {\n this.contextMenuSelection = node;\n this.contextMenuSelectionChange.emit(node);\n this.onContextMenuSelect.emit({originalEvent: event.originalEvent, node: node});\n this.contextMenu.show(event.originalEvent);\n this.tableService.onContextMenu(node);\n }\n else if (this.contextMenuSelectionMode === 'joint') {\n this.preventSelectionSetterPropagation = true;\n let selected = this.isSelected(node);\n let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(node.data, this.dataKey)) : null;\n\n if (!selected) {\n if (this.isSingleSelectionMode()) {\n this.selection = node;\n this.selectionChange.emit(node);\n }\n else if (this.isMultipleSelectionMode()) {\n this.selection = [node];\n this.selectionChange.emit(this.selection);\n }\n \n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n \n this.contextMenu.show(event.originalEvent);\n this.onContextMenuSelect.emit({originalEvent: event.originalEvent, node: node});\n }\n }\n }\n\n toggleNodeWithCheckbox(event) {\n this.selection = this.selection||[];\n this.preventSelectionSetterPropagation = true;\n let node = event.rowNode.node;\n let selected = this.isSelected(node);\n\n if (selected) {\n this.propagateSelectionDown(node, false);\n if (event.rowNode.parent) {\n this.propagateSelectionUp(node.parent, false);\n }\n this.selectionChange.emit(this.selection);\n this.onNodeUnselect.emit({originalEvent: event, node: node});\n }\n else {\n this.propagateSelectionDown(node, true);\n if (event.rowNode.parent) {\n this.propagateSelectionUp(node.parent, true);\n }\n this.selectionChange.emit(this.selection);\n this.onNodeSelect.emit({originalEvent: event, node: node});\n }\n\n this.tableService.onSelectionChange();\n }\n\n toggleNodesWithCheckbox(event: Event, check: boolean) {\n let data = this.filteredNodes || this.value;\n this._selection = check && data ? data.slice() : [];\n if (check) {\n if (data && data.length) {\n for (let node of data) {\n this.propagateSelectionDown(node, true);\n }\n }\n }\n else {\n this._selection = [];\n this.selectionKeys = {};\n }\n\n this.preventSelectionSetterPropagation = true;\n this.selectionChange.emit(this._selection);\n this.tableService.onSelectionChange();\n this.onHeaderCheckboxToggle.emit({originalEvent: event, checked: check});\n }\n \n propagateSelectionUp(node: TreeNode, select: boolean) {\n if (node.children && node.children.length) {\n let selectedChildCount: number = 0;\n let childPartialSelected: boolean = false;\n let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(node.data, this.dataKey)) : null;\n\n for (let child of node.children) {\n if (this.isSelected(child))\n selectedChildCount++;\n else if (child.partialSelected)\n childPartialSelected = true;\n }\n \n if (select && selectedChildCount == node.children.length) {\n this._selection = [...this.selection||[], node];\n node.partialSelected = false;\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n else { \n if (!select) {\n let index = this.findIndexInSelection(node);\n if (index >= 0) {\n this._selection = this.selection.filter((val,i) => i!=index);\n\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n }\n }\n \n if (childPartialSelected || selectedChildCount > 0 && selectedChildCount != node.children.length)\n node.partialSelected = true;\n else\n node.partialSelected = false;\n }\n }\n \n let parent = node.parent;\n if (parent) {\n this.propagateSelectionUp(parent, select);\n }\n }\n \n propagateSelectionDown(node: TreeNode, select: boolean) {\n let index = this.findIndexInSelection(node);\n let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(node.data, this.dataKey)) : null;\n \n if (select && index == -1) {\n this._selection = [...this.selection||[],node]\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n else if (!select && index > -1) {\n this._selection = this.selection.filter((val,i) => i!=index);\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n }\n \n node.partialSelected = false;\n \n if (node.children && node.children.length) {\n for (let child of node.children) {\n this.propagateSelectionDown(child, select);\n }\n }\n }\n\n isSelected(node) {\n if (node && this.selection) {\n if (this.dataKey) {\n return this.selectionKeys[ObjectUtils.resolveFieldData(node.data, this.dataKey)] !== undefined;\n }\n else {\n if (this.selection instanceof Array)\n return this.findIndexInSelection(node) > -1;\n else\n return this.equals(node, this.selection);\n }\n }\n\n return false;\n }\n\n findIndexInSelection(node: any) {\n let index: number = -1;\n if (this.selection && this.selection.length) {\n for (let i = 0; i < this.selection.length; i++) {\n if (this.equals(node, this.selection[i])) {\n index = i;\n break;\n }\n }\n }\n\n return index;\n }\n\n isSingleSelectionMode() {\n return this.selectionMode === 'single';\n }\n\n isMultipleSelectionMode() {\n return this.selectionMode === 'multiple';\n }\n\n equals(node1, node2) {\n return this.compareSelectionBy === 'equals' ? (node1 === node2) : ObjectUtils.equals(node1.data, node2.data, this.dataKey);\n }\n\n filter(value, field, matchMode) {\n if (this.filterTimeout) {\n clearTimeout(this.filterTimeout);\n }\n \n if (!this.isFilterBlank(value)) {\n this.filters[field] = { value: value, matchMode: matchMode };\n } else if (this.filters[field]) {\n delete this.filters[field];\n }\n \n this.filterTimeout = setTimeout(() => {\n this._filter();\n this.filterTimeout = null;\n }, this.filterDelay);\n }\n\n filterGlobal(value, matchMode) {\n this.filter(value, 'global', matchMode);\n }\n\n isFilterBlank(filter: any): boolean {\n if (filter !== null && filter !== undefined) {\n if ((typeof filter === 'string' && filter.trim().length == 0) || (filter instanceof Array && filter.length == 0))\n return true;\n else\n return false;\n }\n return true;\n }\n\n _filter() {\n if (this.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n else {\n if (!this.value) {\n return;\n }\n\n if (!this.hasFilter()) {\n this.filteredNodes = null;\n if (this.paginator) {\n this.totalRecords = this.value ? this.value.length : 0;\n }\n }\n else {\n let globalFilterFieldsArray;\n if (this.filters['global']) {\n if (!this.columns && !this.globalFilterFields)\n throw new Error('Global filtering requires dynamic columns or globalFilterFields to be defined.');\n else\n globalFilterFieldsArray = this.globalFilterFields||this.columns;\n }\n \n this.filteredNodes = [];\n const isStrictMode = this.filterMode === 'strict';\n let isValueChanged = false;\n\n for (let node of this.value) {\n let copyNode = {...node};\n let localMatch = true;\n let globalMatch = false;\n let paramsWithoutNode;\n \n for (let prop in this.filters) {\n if (this.filters.hasOwnProperty(prop) && prop !== 'global') {\n let filterMeta = this.filters[prop];\n let filterField = prop;\n let filterValue = filterMeta.value;\n let filterMatchMode = filterMeta.matchMode || 'startsWith';\n let filterConstraint = FilterUtils[filterMatchMode];\n paramsWithoutNode = {filterField, filterValue, filterConstraint, isStrictMode};\n if ((isStrictMode && !(this.findFilteredNodes(copyNode, paramsWithoutNode) || this.isFilterMatched(copyNode, paramsWithoutNode))) ||\n (!isStrictMode && !(this.isFilterMatched(copyNode, paramsWithoutNode) || this.findFilteredNodes(copyNode, paramsWithoutNode)))) {\n localMatch = false;\n }\n \n if (!localMatch) {\n break;\n }\n }\n }\n \n if (this.filters['global'] && !globalMatch && globalFilterFieldsArray) {\n for(let j = 0; j < globalFilterFieldsArray.length; j++) {\n let copyNodeForGlobal = {...copyNode};\n let filterField = globalFilterFieldsArray[j].field||globalFilterFieldsArray[j];\n let filterValue = this.filters['global'].value;\n let filterConstraint = FilterUtils[this.filters['global'].matchMode];\n paramsWithoutNode = {filterField, filterValue, filterConstraint, isStrictMode};\n\n if ((isStrictMode && (this.findFilteredNodes(copyNodeForGlobal, paramsWithoutNode) || this.isFilterMatched(copyNodeForGlobal, paramsWithoutNode))) ||\n (!isStrictMode && (this.isFilterMatched(copyNodeForGlobal, paramsWithoutNode) || this.findFilteredNodes(copyNodeForGlobal, paramsWithoutNode)))) {\n globalMatch = true;\n copyNode = copyNodeForGlobal;\n }\n }\n }\n \n let matches = localMatch;\n if (this.filters['global']) {\n matches = localMatch && globalMatch;\n }\n\n if (matches) {\n this.filteredNodes.push(copyNode);\n }\n\n isValueChanged = isValueChanged || !localMatch || globalMatch || (localMatch && this.filteredNodes.length > 0) || (!globalMatch && this.filteredNodes.length === 0)\n }\n \n if (!isValueChanged) {\n this.filteredNodes = null;\n }\n \n if (this.paginator) {\n this.totalRecords = this.filteredNodes ? this.filteredNodes.length : this.value ? this.value.length : 0;\n }\n }\n }\n\n this.first = 0;\n\n const filteredValue = this.filteredNodes || this.value;\n \n this.onFilter.emit({\n filters: this.filters,\n filteredValue: filteredValue\n });\n\n this.tableService.onUIUpdate(filteredValue);\n this.updateSerializedValue();\n }\n\n findFilteredNodes(node, paramsWithoutNode) {\n if (node) {\n let matched = false;\n if (node.children) {\n let childNodes = [...node.children];\n node.children = [];\n for (let childNode of childNodes) {\n let copyChildNode = {...childNode};\n if (this.isFilterMatched(copyChildNode, paramsWithoutNode)) {\n matched = true;\n node.children.push(copyChildNode);\n }\n }\n }\n \n if (matched) {\n return true;\n }\n }\n }\n\n isFilterMatched(node, {filterField, filterValue, filterConstraint, isStrictMode}) {\n let matched = false;\n let dataFieldValue = ObjectUtils.resolveFieldData(node.data, filterField);\n if (filterConstraint(dataFieldValue, filterValue)) {\n matched = true;\n }\n\n if (!matched || (isStrictMode && !this.isNodeLeaf(node))) {\n matched = this.findFilteredNodes(node, {filterField, filterValue, filterConstraint, isStrictMode}) || matched;\n }\n\n return matched;\n }\n\n isNodeLeaf(node) {\n return node.leaf === false ? false : !(node.children && node.children.length);\n }\n\n hasFilter() {\n let empty = true;\n for (let prop in this.filters) {\n if (this.filters.hasOwnProperty(prop)) {\n empty = false;\n break;\n }\n }\n\n return !empty;\n }\n\n public reset() {\n this._sortField = null;\n this._sortOrder = 1;\n this._multiSortMeta = null;\n this.tableService.onSort(null);\n\n this.filteredNodes = null;\n this.filters = {};\n \n this.first = 0;\n \n if (this.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n else {\n this.totalRecords = (this._value ? this._value.length : 0);\n }\n }\n\n updateEditingCell(cell) {\n this.editingCell = cell;\n this.bindDocumentEditListener();\n }\n\n isEditingCellValid() {\n return (this.editingCell && DomHandler.find(this.editingCell, '.ng-invalid.ng-dirty').length === 0);\n }\n\n bindDocumentEditListener() {\n if (!this.documentEditListener) {\n this.documentEditListener = (event) => {\n if (this.editingCell && !this.editingCellClick && this.isEditingCellValid()) {\n DomHandler.removeClass(this.editingCell, 'ui-editing-cell');\n this.editingCell = null;\n this.unbindDocumentEditListener();\n }\n\n this.editingCellClick = false;\n };\n \n document.addEventListener('click', this.documentEditListener);\n }\n }\n \n unbindDocumentEditListener() {\n if (this.documentEditListener) {\n document.removeEventListener('click', this.documentEditListener);\n this.documentEditListener = null;\n }\n }\n\n ngOnDestroy() {\n this.unbindDocumentEditListener();\n this.editingCell = null;\n this.initialized = null;\n }\n\n}\n\n@Component({\n selector: '[pTreeTableBody]',\n template: `\n \n \n \n \n \n \n \n \n `\n})\nexport class TTBody {\n\n @Input(\"pTreeTableBody\") columns: any[];\n\n @Input(\"pTreeTableBodyTemplate\") template: TemplateRef;\n\n constructor(public tt: TreeTable) {}\n}\n\n@Component({\n selector: '[ttScrollableView]',\n template: `\n
\n
\n \n \n \n \n \n
\n
\n
\n
\n \n \n \n
\n \n \n \n \n \n \n
\n
\n
\n \n `\n})\nexport class TTScrollableView implements AfterViewInit, OnDestroy, AfterViewChecked {\n\n @Input(\"ttScrollableView\") columns: any[];\n\n @Input() frozen: boolean;\n\n @ViewChild('scrollHeader') scrollHeaderViewChild: ElementRef;\n\n @ViewChild('scrollHeaderBox') scrollHeaderBoxViewChild: ElementRef;\n\n @ViewChild('scrollBody') scrollBodyViewChild: ElementRef;\n\n @ViewChild('scrollTable') scrollTableViewChild: ElementRef;\n\n @ViewChild('loadingTable') scrollLoadingTableViewChild: ElementRef;\n\n @ViewChild('scrollFooter') scrollFooterViewChild: ElementRef;\n\n @ViewChild('scrollFooterBox') scrollFooterBoxViewChild: ElementRef;\n\n @ViewChild('virtualScroller') virtualScrollerViewChild: ElementRef;\n\n headerScrollListener: Function;\n\n bodyScrollListener: Function;\n\n footerScrollListener: Function;\n\n frozenSiblingBody: Element;\n\n _scrollHeight: string;\n\n subscription: Subscription;\n\n totalRecordsSubscription: Subscription;\n \n initialized: boolean;\n\n loadingArray: number[] = [];\n\n constructor(public tt: TreeTable, public el: ElementRef, public zone: NgZone) {\n this.subscription = this.tt.tableService.uiUpdateSource$.subscribe(() => {\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n this.alignScrollBar();\n this.initialized = true;\n\n if (this.scrollLoadingTableViewChild && this.scrollLoadingTableViewChild.nativeElement) {\n this.scrollLoadingTableViewChild.nativeElement.style.display = 'none';\n }\n }, 50);\n });\n });\n\n if (this.tt.virtualScroll) {\n this.totalRecordsSubscription = this.tt.tableService.totalRecordsSource$.subscribe(() => {\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n this.setVirtualScrollerHeight();\n }, 50);\n });\n });\n }\n\n this.loadingArray = Array(this.tt.rows).fill(1);\n\n this.initialized = false;\n }\n\n @Input() get scrollHeight(): string {\n return this._scrollHeight;\n }\n set scrollHeight(val: string) {\n this._scrollHeight = val;\n this.setScrollHeight();\n }\n \n ngAfterViewChecked() {\n if (!this.initialized && this.el.nativeElement.offsetParent) {\n this.alignScrollBar();\n this.initialized = true;\n }\n }\n\n ngAfterViewInit() {\n this.bindEvents();\n this.setScrollHeight();\n this.alignScrollBar();\n\n if (!this.frozen) {\n if (this.tt.frozenColumns || this.tt.frozenBodyTemplate) {\n DomHandler.addClass(this.el.nativeElement, 'ui-treetable-unfrozen-view');\n }\n\n if (this.tt.frozenWidth) {\n this.el.nativeElement.style.left = this.tt.frozenWidth;\n this.el.nativeElement.style.width = 'calc(100% - ' + this.tt.frozenWidth + ')';\n }\n\n let frozenView = this.el.nativeElement.previousElementSibling;\n if (frozenView) {\n this.frozenSiblingBody = DomHandler.findSingle(frozenView, '.ui-treetable-scrollable-body');\n }\n }\n else {\n this.scrollBodyViewChild.nativeElement.style.paddingBottom = DomHandler.calculateScrollbarWidth() + 'px';\n }\n\n if (this.tt.virtualScroll) {\n this.setVirtualScrollerHeight();\n\n if (this.scrollLoadingTableViewChild && this.scrollLoadingTableViewChild.nativeElement) {\n this.scrollLoadingTableViewChild.nativeElement.style.display = 'table';\n }\n }\n }\n\n bindEvents() {\n this.zone.runOutsideAngular(() => {\n let scrollBarWidth = DomHandler.calculateScrollbarWidth();\n\n if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n this.headerScrollListener = this.onHeaderScroll.bind(this);\n this.scrollHeaderBoxViewChild.nativeElement.addEventListener('scroll', this.headerScrollListener);\n }\n\n if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n this.footerScrollListener = this.onFooterScroll.bind(this);\n this.scrollFooterViewChild.nativeElement.addEventListener('scroll', this.footerScrollListener);\n }\n\n if (!this.frozen) {\n this.bodyScrollListener = this.onBodyScroll.bind(this);\n this.scrollBodyViewChild.nativeElement.addEventListener('scroll', this.bodyScrollListener);\n }\n });\n }\n\n unbindEvents() {\n if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n this.scrollHeaderBoxViewChild.nativeElement.removeEventListener('scroll', this.headerScrollListener);\n }\n\n if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n this.scrollFooterViewChild.nativeElement.removeEventListener('scroll', this.footerScrollListener);\n }\n\n this.scrollBodyViewChild.nativeElement.addEventListener('scroll', this.bodyScrollListener);\n }\n\n onHeaderScroll(event) {\n this.scrollHeaderViewChild.nativeElement.scrollLeft = 0;\n }\n\n onFooterScroll(event) {\n this.scrollFooterViewChild.nativeElement.scrollLeft = 0;\n }\n\n onBodyScroll(event) {\n if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n this.scrollHeaderBoxViewChild.nativeElement.style.marginLeft = -1 * this.scrollBodyViewChild.nativeElement.scrollLeft + 'px';\n }\n\n if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n this.scrollFooterBoxViewChild.nativeElement.style.marginLeft = -1 * this.scrollBodyViewChild.nativeElement.scrollLeft + 'px';\n }\n\n if (this.frozenSiblingBody) {\n this.frozenSiblingBody.scrollTop = this.scrollBodyViewChild.nativeElement.scrollTop;\n }\n\n if (this.tt.virtualScroll) {\n let viewport = DomHandler.getOuterHeight(this.scrollBodyViewChild.nativeElement);\n let tableHeight = DomHandler.getOuterHeight(this.scrollTableViewChild.nativeElement);\n let pageHeight = this.tt.virtualRowHeight * this.tt.rows;\n let virtualTableHeight = DomHandler.getOuterHeight(this.virtualScrollerViewChild.nativeElement);\n let pageCount = (virtualTableHeight / pageHeight)||1;\n let scrollBodyTop = this.scrollTableViewChild.nativeElement.style.top||'0';\n\n if ((this.scrollBodyViewChild.nativeElement.scrollTop + viewport > parseFloat(scrollBodyTop) + tableHeight) || (this.scrollBodyViewChild.nativeElement.scrollTop < parseFloat(scrollBodyTop))) {\n if (this.scrollLoadingTableViewChild && this.scrollLoadingTableViewChild.nativeElement) {\n this.scrollLoadingTableViewChild.nativeElement.style.display = 'table';\n this.scrollLoadingTableViewChild.nativeElement.style.top = this.scrollBodyViewChild.nativeElement.scrollTop + 'px';\n }\n \n let page = Math.floor((this.scrollBodyViewChild.nativeElement.scrollTop * pageCount) / (this.scrollBodyViewChild.nativeElement.scrollHeight)) + 1;\n this.tt.handleVirtualScroll({\n page: page,\n callback: () => {\n if (this.scrollLoadingTableViewChild && this.scrollLoadingTableViewChild.nativeElement) {\n this.scrollLoadingTableViewChild.nativeElement.style.display = 'none';\n }\n \n this.scrollTableViewChild.nativeElement.style.top = ((page - 1) * pageHeight) + 'px';\n\n if (this.frozenSiblingBody) {\n ( this.frozenSiblingBody.children[0]).style.top = this.scrollTableViewChild.nativeElement.style.top;\n }\n }\n });\n }\n }\n }\n\n setScrollHeight() {\n if (this.scrollHeight && this.scrollBodyViewChild && this.scrollBodyViewChild.nativeElement) {\n if (this.scrollHeight.indexOf('%') !== -1) {\n let relativeHeight;\n this.scrollBodyViewChild.nativeElement.style.visibility = 'hidden';\n this.scrollBodyViewChild.nativeElement.style.height = '100px'; //temporary height to calculate static height\n let containerHeight = DomHandler.getOuterHeight(this.tt.el.nativeElement.children[0]);\n \n if (this.scrollHeight.includes(\"calc\")) {\n let percentHeight = parseInt(this.scrollHeight.slice(this.scrollHeight.indexOf(\"(\") + 1, this.scrollHeight.indexOf(\"%\")));\n let diffValue = parseInt(this.scrollHeight.slice(this.scrollHeight.indexOf(\"-\") + 1, this.scrollHeight.indexOf(\")\")));\n relativeHeight = (DomHandler.getOuterHeight(this.tt.el.nativeElement.parentElement) * percentHeight / 100) - diffValue;\n }\n else {\n relativeHeight = DomHandler.getOuterHeight(this.tt.el.nativeElement.parentElement) * parseInt(this.scrollHeight) / 100;\n }\n \n let staticHeight = containerHeight - 100; //total height of headers, footers, paginators\n let scrollBodyHeight = (relativeHeight - staticHeight);\n\n if (this.frozen) {\n scrollBodyHeight -= DomHandler.calculateScrollbarWidth();\n }\n \n this.scrollBodyViewChild.nativeElement.style.height = 'auto';\n this.scrollBodyViewChild.nativeElement.style.maxHeight = scrollBodyHeight + 'px';\n this.scrollBodyViewChild.nativeElement.style.visibility = 'visible';\n }\n else {\n if (this.frozen)\n this.scrollBodyViewChild.nativeElement.style.maxHeight = (parseInt(this.scrollHeight) - DomHandler.calculateScrollbarWidth()) + 'px';\n else\n this.scrollBodyViewChild.nativeElement.style.maxHeight = this.scrollHeight;\n }\n }\n }\n\n setVirtualScrollerHeight() {\n if (this.virtualScrollerViewChild.nativeElement) {\n this.virtualScrollerViewChild.nativeElement.style.height = this.tt.totalRecords * this.tt.virtualRowHeight + 'px';\n }\n }\n\n hasVerticalOverflow() {\n return DomHandler.getOuterHeight(this.scrollTableViewChild.nativeElement) > DomHandler.getOuterHeight(this.scrollBodyViewChild.nativeElement);\n }\n\n alignScrollBar() {\n if (!this.frozen) {\n let scrollBarWidth = this.hasVerticalOverflow() ? DomHandler.calculateScrollbarWidth() : 0;\n this.scrollHeaderBoxViewChild.nativeElement.style.marginRight = scrollBarWidth + 'px';\n \n if (this.scrollFooterBoxViewChild && this.scrollFooterBoxViewChild.nativeElement) {\n this.scrollFooterBoxViewChild.nativeElement.style.marginRight = scrollBarWidth + 'px';\n }\n }\n this.initialized = false;\n }\n\n ngOnDestroy() {\n this.unbindEvents();\n\n this.frozenSiblingBody = null;\n\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n\n if (this.totalRecordsSubscription) {\n this.totalRecordsSubscription.unsubscribe();\n }\n\n this.initialized = false;\n }\n}\n\n@Directive({\n selector: '[ttSortableColumn]',\n host: {\n '[class.ui-sortable-column]': 'isEnabled()',\n '[class.ui-state-highlight]': 'sorted',\n '[attr.tabindex]': 'isEnabled() ? \"0\" : null'\n }\n})\nexport class TTSortableColumn implements OnInit, OnDestroy {\n\n @Input(\"ttSortableColumn\") field: string;\n\n @Input() ttSortableColumnDisabled: boolean;\n\n sorted: boolean;\n \n subscription: Subscription;\n\n constructor(public tt: TreeTable) {\n if (this.isEnabled()) {\n this.subscription = this.tt.tableService.sortSource$.subscribe(sortMeta => {\n this.updateSortState();\n });\n }\n }\n\n ngOnInit() {\n if (this.isEnabled()) {\n this.updateSortState();\n }\n }\n\n updateSortState() {\n this.sorted = this.tt.isSorted(this.field);\n }\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent) {\n if (this.isEnabled()) {\n this.updateSortState();\n this.tt.sort({\n originalEvent: event,\n field: this.field\n });\n\n DomHandler.clearSelection();\n }\n }\n\n @HostListener('keydown.enter', ['$event'])\n onEnterKey(event: MouseEvent) {\n this.onClick(event);\n }\n\n isEnabled() {\n return this.ttSortableColumnDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n\n@Component({\n selector: 'p-treeTableSortIcon',\n template: `\n \n `\n})\nexport class TTSortIcon implements OnInit, OnDestroy {\n\n @Input() field: string;\n \n @Input() ariaLabelDesc: string;\n \n @Input() ariaLabelAsc: string;\n\n subscription: Subscription;\n\n sortOrder: number;\n\n constructor(public tt: TreeTable) {\n this.subscription = this.tt.tableService.sortSource$.subscribe(sortMeta => {\n this.updateSortState();\n });\n }\n\n ngOnInit() {\n this.updateSortState();\n }\n \n onClick(event){\n event.preventDefault();\n }\n\n updateSortState() {\n if (this.tt.sortMode === 'single') {\n this.sortOrder = this.tt.isSorted(this.field) ? this.tt.sortOrder : 0;\n }\n else if (this.tt.sortMode === 'multiple') {\n let sortMeta = this.tt.getSortMeta(this.field);\n this.sortOrder = sortMeta ? sortMeta.order: 0;\n }\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n\n@Directive({\n selector: '[ttResizableColumn]'\n})\nexport class TTResizableColumn implements AfterViewInit, OnDestroy {\n\n @Input() ttResizableColumnDisabled: boolean;\n\n resizer: HTMLSpanElement;\n\n resizerMouseDownListener: any;\n\n documentMouseMoveListener: any;\n\n documentMouseUpListener: any;\n\n constructor(public tt: TreeTable, public el: ElementRef, public zone: NgZone) { }\n\n ngAfterViewInit() {\n if (this.isEnabled()) {\n DomHandler.addClass(this.el.nativeElement, 'ui-resizable-column');\n this.resizer = document.createElement('span');\n this.resizer.className = 'ui-column-resizer ui-clickable';\n this.el.nativeElement.appendChild(this.resizer);\n \n this.zone.runOutsideAngular(() => {\n this.resizerMouseDownListener = this.onMouseDown.bind(this);\n this.resizer.addEventListener('mousedown', this.resizerMouseDownListener);\n });\n }\n }\n\n bindDocumentEvents() {\n this.zone.runOutsideAngular(() => {\n this.documentMouseMoveListener = this.onDocumentMouseMove.bind(this);\n document.addEventListener('mousemove', this.documentMouseMoveListener);\n\n this.documentMouseUpListener = this.onDocumentMouseUp.bind(this);\n document.addEventListener('mouseup', this.documentMouseUpListener);\n });\n }\n\n unbindDocumentEvents() {\n if (this.documentMouseMoveListener) {\n document.removeEventListener('mousemove', this.documentMouseMoveListener);\n this.documentMouseMoveListener = null;\n }\n\n if (this.documentMouseUpListener) {\n document.removeEventListener('mouseup', this.documentMouseUpListener);\n this.documentMouseUpListener = null;\n }\n }\n\n onMouseDown(event: Event) {\n this.tt.onColumnResizeBegin(event);\n this.bindDocumentEvents();\n }\n\n onDocumentMouseMove(event: Event) {\n this.tt.onColumnResize(event);\n }\n\n onDocumentMouseUp(event: Event) {\n this.tt.onColumnResizeEnd(event, this.el.nativeElement);\n this.unbindDocumentEvents();\n }\n\n isEnabled() {\n return this.ttResizableColumnDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.resizerMouseDownListener) {\n this.resizer.removeEventListener('mousedown', this.resizerMouseDownListener);\n }\n \n this.unbindDocumentEvents();\n }\n}\n\n@Directive({\n selector: '[ttReorderableColumn]'\n})\nexport class TTReorderableColumn implements AfterViewInit, OnDestroy {\n\n @Input() ttReorderableColumnDisabled: boolean;\n\n dragStartListener: any;\n\n dragOverListener: any;\n\n dragEnterListener: any;\n\n dragLeaveListener: any;\n\n mouseDownListener: any;\n\n constructor(public tt: TreeTable, public el: ElementRef, public zone: NgZone) { }\n\n ngAfterViewInit() {\n if (this.isEnabled()) {\n this.bindEvents();\n }\n }\n\n bindEvents() {\n this.zone.runOutsideAngular(() => {\n this.mouseDownListener = this.onMouseDown.bind(this);\n this.el.nativeElement.addEventListener('mousedown', this.mouseDownListener);\n\n this.dragStartListener = this.onDragStart.bind(this);\n this.el.nativeElement.addEventListener('dragstart', this.dragStartListener);\n\n this.dragOverListener = this.onDragEnter.bind(this);\n this.el.nativeElement.addEventListener('dragover', this.dragOverListener);\n\n this.dragEnterListener = this.onDragEnter.bind(this);\n this.el.nativeElement.addEventListener('dragenter', this.dragEnterListener);\n\n this.dragLeaveListener = this.onDragLeave.bind(this);\n this.el.nativeElement.addEventListener('dragleave', this.dragLeaveListener);\n });\n }\n\n unbindEvents() {\n if (this.mouseDownListener) {\n document.removeEventListener('mousedown', this.mouseDownListener);\n this.mouseDownListener = null;\n }\n\n if (this.dragOverListener) {\n document.removeEventListener('dragover', this.dragOverListener);\n this.dragOverListener = null;\n }\n\n if (this.dragEnterListener) {\n document.removeEventListener('dragenter', this.dragEnterListener);\n this.dragEnterListener = null;\n }\n\n if (this.dragEnterListener) {\n document.removeEventListener('dragenter', this.dragEnterListener);\n this.dragEnterListener = null;\n }\n\n if (this.dragLeaveListener) {\n document.removeEventListener('dragleave', this.dragLeaveListener);\n this.dragLeaveListener = null;\n }\n }\n\n onMouseDown(event) {\n if (event.target.nodeName === 'INPUT' || DomHandler.hasClass(event.target, 'ui-column-resizer'))\n this.el.nativeElement.draggable = false;\n else\n this.el.nativeElement.draggable = true;\n }\n\n onDragStart(event) {\n this.tt.onColumnDragStart(event, this.el.nativeElement);\n }\n\n onDragOver(event) {\n event.preventDefault();\n }\n\n onDragEnter(event) {\n this.tt.onColumnDragEnter(event, this.el.nativeElement);\n }\n\n onDragLeave(event) {\n this.tt.onColumnDragLeave(event);\n }\n\n @HostListener('drop', ['$event'])\n onDrop(event) {\n if (this.isEnabled()) {\n this.tt.onColumnDrop(event, this.el.nativeElement);\n }\n }\n\n isEnabled() {\n return this.ttReorderableColumnDisabled !== true;\n }\n\n ngOnDestroy() {\n this.unbindEvents();\n }\n\n}\n\n@Directive({\n selector: '[ttSelectableRow]',\n host: {\n '[class.ui-state-highlight]': 'selected'\n }\n})\nexport class TTSelectableRow implements OnInit, OnDestroy {\n\n @Input(\"ttSelectableRow\") rowNode: any;\n\n @Input() ttSelectableRowDisabled: boolean;\n\n selected: boolean;\n\n subscription: Subscription;\n\n constructor(public tt: TreeTable, public tableService: TreeTableService) {\n if (this.isEnabled()) {\n this.subscription = this.tt.tableService.selectionSource$.subscribe(() => {\n this.selected = this.tt.isSelected(this.rowNode.node);\n });\n }\n }\n\n ngOnInit() {\n if (this.isEnabled()) {\n this.selected = this.tt.isSelected(this.rowNode.node);\n }\n }\n\n @HostListener('click', ['$event'])\n onClick(event: Event) {\n if (this.isEnabled()) {\n this.tt.handleRowClick({\n originalEvent: event,\n rowNode: this.rowNode\n });\n }\n }\n\n @HostListener('keydown', ['$event'])\n onEnterKey(event: KeyboardEvent) {\n if (event.which === 13) {\n this.onClick(event);\n }\n }\n\n @HostListener('touchend', ['$event'])\n onTouchEnd(event: Event) {\n if (this.isEnabled()) {\n this.tt.handleRowTouchEnd(event);\n }\n }\n\n isEnabled() {\n return this.ttSelectableRowDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Directive({\n selector: '[ttSelectableRowDblClick]',\n host: {\n '[class.ui-state-highlight]': 'selected'\n }\n})\nexport class TTSelectableRowDblClick implements OnInit, OnDestroy {\n\n @Input(\"ttSelectableRowDblClick\") rowNode: any;\n\n @Input() ttSelectableRowDisabled: boolean;\n\n selected: boolean;\n\n subscription: Subscription;\n\n constructor(public tt: TreeTable, public tableService: TreeTableService) {\n if (this.isEnabled()) {\n this.subscription = this.tt.tableService.selectionSource$.subscribe(() => {\n this.selected = this.tt.isSelected(this.rowNode.node);\n });\n }\n }\n\n ngOnInit() {\n if (this.isEnabled()) {\n this.selected = this.tt.isSelected(this.rowNode.node);\n }\n }\n\n @HostListener('dblclick', ['$event'])\n onClick(event: Event) {\n if (this.isEnabled()) {\n this.tt.handleRowClick({\n originalEvent: event,\n rowNode: this.rowNode\n });\n }\n }\n\n isEnabled() {\n return this.ttSelectableRowDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Directive({\n selector: '[ttContextMenuRow]',\n host: {\n '[class.ui-contextmenu-selected]': 'selected',\n '[attr.tabindex]': 'isEnabled() ? 0 : undefined'\n }\n})\nexport class TTContextMenuRow {\n\n @Input(\"ttContextMenuRow\") rowNode: any;\n\n @Input() ttContextMenuRowDisabled: boolean;\n\n selected: boolean;\n\n subscription: Subscription;\n\n constructor(public tt: TreeTable, public tableService: TreeTableService, private el: ElementRef) {\n if (this.isEnabled()) {\n this.subscription = this.tt.tableService.contextMenuSource$.subscribe((node) => {\n this.selected = this.tt.equals(this.rowNode.node, node);\n });\n }\n }\n\n @HostListener('contextmenu', ['$event'])\n onContextMenu(event: Event) {\n if (this.isEnabled()) {\n this.tt.handleRowRightClick({\n originalEvent: event,\n rowNode: this.rowNode\n });\n\n this.el.nativeElement.focus();\n\n event.preventDefault();\n }\n }\n\n isEnabled() {\n return this.ttContextMenuRowDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Component({\n selector: 'p-treeTableCheckbox',\n template: `\n
\n
\n \n
\n
\n \n
\n
\n `\n})\nexport class TTCheckbox {\n\n @Input() disabled: boolean;\n\n @Input(\"value\") rowNode: any;\n\n @ViewChild('box') boxViewChild: ElementRef;\n\n checked: boolean;\n\n subscription: Subscription;\n\n constructor(public tt: TreeTable, public tableService: TreeTableService) {\n this.subscription = this.tt.tableService.selectionSource$.subscribe(() => {\n this.checked = this.tt.isSelected(this.rowNode.node);\n });\n }\n\n ngOnInit() {\n this.checked = this.tt.isSelected(this.rowNode.node);\n }\n\n onClick(event: Event) {\n if (!this.disabled) {\n this.tt.toggleNodeWithCheckbox({\n originalEvent: event,\n rowNode: this.rowNode\n });\n }\n DomHandler.clearSelection();\n }\n\n onFocus() {\n DomHandler.addClass(this.boxViewChild.nativeElement, 'ui-state-focus');\n }\n\n onBlur() {\n DomHandler.removeClass(this.boxViewChild.nativeElement, 'ui-state-focus');\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n \n}\n\n@Component({\n selector: 'p-treeTableHeaderCheckbox',\n template: `\n
\n
\n \n
\n
\n \n
\n
\n `\n})\nexport class TTHeaderCheckbox {\n\n @ViewChild('box') boxViewChild: ElementRef;\n\n checked: boolean;\n\n disabled: boolean;\n\n selectionChangeSubscription: Subscription;\n\n valueChangeSubscription: Subscription;\n\n constructor(public tt: TreeTable, public tableService: TreeTableService) {\n this.valueChangeSubscription = this.tt.tableService.uiUpdateSource$.subscribe(() => {\n this.checked = this.updateCheckedState();\n });\n\n this.selectionChangeSubscription = this.tt.tableService.selectionSource$.subscribe(() => {\n this.checked = this.updateCheckedState();\n });\n }\n\n ngOnInit() {\n this.checked = this.updateCheckedState();\n }\n\n onClick(event: Event, checked) {\n if (this.tt.value && this.tt.value.length > 0) {\n this.tt.toggleNodesWithCheckbox(event, !checked);\n }\n \n DomHandler.clearSelection();\n }\n\n onFocus() {\n DomHandler.addClass(this.boxViewChild.nativeElement, 'ui-state-focus');\n }\n\n onBlur() {\n DomHandler.removeClass(this.boxViewChild.nativeElement, 'ui-state-focus');\n }\n\n ngOnDestroy() {\n if (this.selectionChangeSubscription) {\n this.selectionChangeSubscription.unsubscribe();\n }\n\n if (this.valueChangeSubscription) {\n this.valueChangeSubscription.unsubscribe();\n }\n }\n\n updateCheckedState() {\n let checked: boolean;\n const data = this.tt.filteredNodes||this.tt.value;\n\n if (data) {\n for (let node of data) {\n if (this.tt.isSelected(node)) {\n checked = true;\n } \n else {\n checked = false;\n break;\n }\n }\n }\n else {\n checked = false;\n }\n\n return checked;\n }\n \n}\n\n@Directive({\n selector: '[ttEditableColumn]'\n})\nexport class TTEditableColumn implements AfterViewInit {\n\n @Input(\"ttEditableColumn\") data: any;\n\n @Input(\"ttEditableColumnField\") field: any;\n\n @Input() ttEditableColumnDisabled: boolean;\n\n constructor(public tt: TreeTable, public el: ElementRef, public zone: NgZone) {}\n\n ngAfterViewInit() {\n if (this.isEnabled()) {\n DomHandler.addClass(this.el.nativeElement, 'ui-editable-column');\n }\n }\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent) {\n if (this.isEnabled()) {\n this.tt.editingCellClick = true;\n\n if (this.tt.editingCell) {\n if (this.tt.editingCell !== this.el.nativeElement) {\n if (!this.tt.isEditingCellValid()) {\n return;\n }\n \n DomHandler.removeClass(this.tt.editingCell, 'ui-editing-cell');\n this.openCell();\n }\n }\n else {\n this.openCell();\n }\n }\n }\n\n openCell() {\n this.tt.updateEditingCell(this.el.nativeElement);\n DomHandler.addClass(this.el.nativeElement, 'ui-editing-cell');\n this.tt.onEditInit.emit({ field: this.field, data: this.data});\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n let focusable = DomHandler.findSingle(this.el.nativeElement, 'input, textarea');\n if (focusable) {\n focusable.focus();\n }\n }, 50);\n });\n }\n\n closeEditingCell() {\n DomHandler.removeClass(this.tt.editingCell, 'ui-editing-cell');\n this.tt.editingCell = null;\n this.tt.unbindDocumentEditListener();\n }\n\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent) {\n if (this.isEnabled()) {\n //enter\n if (event.keyCode == 13) {\n if (this.tt.isEditingCellValid()) {\n DomHandler.removeClass(this.tt.editingCell, 'ui-editing-cell');\n this.closeEditingCell();\n this.tt.onEditComplete.emit({ field: this.field, data: this.data });\n }\n \n event.preventDefault();\n }\n \n //escape\n else if (event.keyCode == 27) {\n if (this.tt.isEditingCellValid()) {\n DomHandler.removeClass(this.tt.editingCell, 'ui-editing-cell');\n this.closeEditingCell();\n this.tt.onEditCancel.emit({ field: this.field, data: this.data });\n }\n \n event.preventDefault();\n }\n \n //tab\n else if (event.keyCode == 9) {\n this.tt.onEditComplete.emit({ field: this.field, data: this.data });\n \n if (event.shiftKey)\n this.moveToPreviousCell(event);\n else\n this.moveToNextCell(event);\n }\n }\n }\n\n findCell(element) {\n if (element) {\n let cell = element;\n while (cell && !DomHandler.hasClass(cell, 'ui-editing-cell')) {\n cell = cell.parentElement;\n }\n\n return cell;\n }\n else {\n return null;\n }\n }\n\n moveToPreviousCell(event: KeyboardEvent) {\n let currentCell = this.findCell(event.target);\n let row = currentCell.parentElement;\n let targetCell = this.findPreviousEditableColumn(currentCell);\n\n if (targetCell) {\n DomHandler.invokeElementMethod(targetCell, 'click');\n event.preventDefault();\n }\n }\n\n moveToNextCell(event: KeyboardEvent) {\n let currentCell = this.findCell(event.target);\n let row = currentCell.parentElement;\n let targetCell = this.findNextEditableColumn(currentCell);\n\n if (targetCell) {\n DomHandler.invokeElementMethod(targetCell, 'click');\n event.preventDefault();\n }\n }\n\n findPreviousEditableColumn(cell: Element) {\n let prevCell = cell.previousElementSibling;\n\n if (!prevCell) {\n let previousRow = cell.parentElement ? cell.parentElement.previousElementSibling : null;\n if (previousRow) {\n prevCell = previousRow.lastElementChild;\n }\n }\n\n if (prevCell) {\n if (DomHandler.hasClass(prevCell, 'ui-editable-column'))\n return prevCell;\n else\n return this.findPreviousEditableColumn(prevCell);\n }\n else {\n return null;\n }\n }\n\n findNextEditableColumn(cell: Element) {\n let nextCell = cell.nextElementSibling;\n\n if (!nextCell) {\n let nextRow = cell.parentElement ? cell.parentElement.nextElementSibling : null;\n if (nextRow) {\n nextCell = nextRow.firstElementChild;\n }\n }\n\n if (nextCell) {\n if (DomHandler.hasClass(nextCell, 'ui-editable-column'))\n return nextCell;\n else\n return this.findNextEditableColumn(nextCell);\n }\n else {\n return null;\n }\n }\n\n isEnabled() {\n return this.ttEditableColumnDisabled !== true;\n }\n\n}\n\n@Component({\n selector: 'p-treeTableCellEditor',\n template: `\n \n \n \n \n \n \n `\n})\nexport class TreeTableCellEditor implements AfterContentInit {\n\n @ContentChildren(PrimeTemplate) templates: QueryList;\n\n inputTemplate: TemplateRef;\n\n outputTemplate: TemplateRef;\n\n constructor(public tt: TreeTable, public editableColumn: TTEditableColumn) { }\n\n ngAfterContentInit() {\n this.templates.forEach((item) => {\n switch (item.getType()) {\n case 'input':\n this.inputTemplate = item.template;\n break;\n\n case 'output':\n this.outputTemplate = item.template;\n break;\n }\n });\n }\n}\n\n@Directive({\n selector: '[ttRow]',\n host: {\n '[attr.tabindex]': '\"0\"'\n }\n})\nexport class TTRow {\n\n @Input('ttRow') rowNode: any;\n\n constructor(public tt: TreeTable, public el: ElementRef, public zone: NgZone) {}\n\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent) {\n switch (event.which) {\n //down arrow\n case 40:\n let nextRow = this.el.nativeElement.nextElementSibling;\n if (nextRow) {\n nextRow.focus();\n }\n\n event.preventDefault();\n break;\n\n //down arrow\n case 38:\n let prevRow = this.el.nativeElement.previousElementSibling;\n if (prevRow) {\n prevRow.focus();\n }\n\n event.preventDefault();\n break;\n\n //left arrow\n case 37:\n if (this.rowNode.node.expanded) {\n this.tt.toggleRowIndex = DomHandler.index(this.el.nativeElement);\n this.rowNode.node.expanded = false;\n\n this.tt.onNodeCollapse.emit({\n originalEvent: event,\n node: this.rowNode.node\n });\n\n this.tt.updateSerializedValue();\n this.tt.tableService.onUIUpdate(this.tt.value);\n this.restoreFocus();\n }\n break;\n\n //right arrow\n case 39:\n if (!this.rowNode.node.expanded) {\n this.tt.toggleRowIndex = DomHandler.index(this.el.nativeElement);\n this.rowNode.node.expanded = true;\n\n this.tt.onNodeExpand.emit({\n originalEvent: event,\n node: this.rowNode.node\n });\n\n this.tt.updateSerializedValue();\n this.tt.tableService.onUIUpdate(this.tt.value);\n this.restoreFocus();\n }\n break;\n }\n }\n\n restoreFocus() {\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n let row = DomHandler.findSingle(this.tt.containerViewChild.nativeElement, '.ui-treetable-tbody').children[this.tt.toggleRowIndex];\n if (row) {\n row.focus();\n }\n }, 25);\n });\n }\n}\n\n@Component({\n selector: 'p-treeTableToggler',\n template: `\n \n \n \n `\n})\nexport class TreeTableToggler {\n\n @Input() rowNode: any;\n\n constructor(public tt: TreeTable) {}\n\n onClick(event: Event) {\n this.rowNode.node.expanded = !this.rowNode.node.expanded;\n\n if (this.rowNode.node.expanded) {\n this.tt.onNodeExpand.emit({\n originalEvent: event,\n node: this.rowNode.node\n });\n }\n else {\n this.tt.onNodeCollapse.emit({\n originalEvent: event,\n node: this.rowNode.node\n });\n }\n\n this.tt.updateSerializedValue();\n this.tt.tableService.onUIUpdate(this.tt.value);\n \n event.preventDefault();\n }\n}\n\n@NgModule({\n imports: [CommonModule,PaginatorModule],\n exports: [TreeTable,SharedModule,TreeTableToggler,TTSortableColumn,TTSortIcon,TTResizableColumn,TTRow,TTReorderableColumn,TTSelectableRow,TTSelectableRowDblClick,TTContextMenuRow,TTCheckbox,TTHeaderCheckbox,TTEditableColumn,TreeTableCellEditor],\n declarations: [TreeTable,TreeTableToggler,TTScrollableView,TTBody,TTSortableColumn,TTSortIcon,TTResizableColumn,TTRow,TTReorderableColumn,TTSelectableRow,TTSelectableRowDblClick,TTContextMenuRow,TTCheckbox,TTHeaderCheckbox,TTEditableColumn,TreeTableCellEditor]\n})\nexport class TreeTableModule { }","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,IAca,gBAAgB,GAA7B,MAAa,gBAAgB;IAA7B;QAEY,eAAU,GAAG,IAAI,OAAO,EAAuB,CAAC;QAChD,oBAAe,GAAG,IAAI,OAAO,EAAE,CAAC;QAChC,sBAAiB,GAAG,IAAI,OAAO,EAAO,CAAC;QACvC,mBAAc,GAAG,IAAI,OAAO,EAAO,CAAC;QACpC,uBAAkB,GAAG,IAAI,OAAO,EAAO,CAAC;QAEhD,gBAAW,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;QAC7C,qBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;QACvD,uBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;QAC3D,oBAAe,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;QACrD,wBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;KAqBhE;IAnBG,MAAM,CAAC,QAA6B;QAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAClC;IAED,iBAAiB;QACb,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;KAC/B;IAED,aAAa,CAAC,IAAS;QACnB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACrC;IAED,UAAU,CAAC,KAAU;QACjB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACnC;IAED,oBAAoB,CAAC,KAAa;QAC9B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACvC;CACJ,CAAA;AAjCY,gBAAgB;IAD5B,UAAU,EAAE;GACA,gBAAgB,CAiC5B;IAuDY,SAAS,GAAtB,MAAa,SAAS;IA6RlB,YAAmB,EAAc,EAAS,IAAY,EAAS,YAA8B;QAA1E,OAAE,GAAF,EAAE,CAAY;QAAS,SAAI,GAAJ,IAAI,CAAQ;QAAS,iBAAY,GAAZ,YAAY,CAAkB;QAnRpF,SAAI,GAAY,KAAK,CAAC;QAMtB,UAAK,GAAW,CAAC,CAAC;QAElB,cAAS,GAAW,CAAC,CAAC;QAItB,wBAAmB,GAAY,IAAI,CAAC;QAEpC,sBAAiB,GAAW,QAAQ,CAAC;QAIrC,8BAAyB,GAAW,+BAA+B,CAAC;QAIpE,qBAAgB,GAAW,CAAC,CAAC;QAE7B,aAAQ,GAAW,QAAQ,CAAC;QAE5B,oBAAe,GAAY,IAAI,CAAC;QAM/B,oBAAe,GAAsB,IAAI,YAAY,EAAE,CAAC;QAIxD,+BAA0B,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEpE,6BAAwB,GAAW,UAAU,CAAC;QAM9C,uBAAkB,GAAW,YAAY,CAAC;QAM1C,gBAAW,GAAW,eAAe,CAAC;QAEtC,eAAU,GAAY,IAAI,CAAC;QAQ3B,uBAAkB,GAAW,GAAG,CAAC;QAEjC,qBAAgB,GAAW,EAAE,CAAC;QAQ9B,qBAAgB,GAAW,KAAK,CAAC;QAMjC,eAAU,GAAa,CAAC,KAAa,EAAE,IAAS,KAAK,IAAI,CAAC;QAE1D,YAAO,GAAqC,EAAE,CAAC;QAI/C,gBAAW,GAAW,GAAG,CAAC;QAE1B,eAAU,GAAW,SAAS,CAAC;QAE9B,aAAQ,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEjD,iBAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;QAErD,mBAAc,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEvD,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;QAE/C,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;QAE/C,eAAU,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEnD,iBAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;QAErD,gBAAW,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEpD,iBAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;QAErD,iBAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;QAErD,mBAAc,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEvD,wBAAmB,GAAsB,IAAI,YAAY,EAAE,CAAC;QAE5D,2BAAsB,GAAsB,IAAI,YAAY,EAAE,CAAC;QAE/D,eAAU,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEnD,mBAAc,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEvD,iBAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;QAc/D,WAAM,GAAe,EAAE,CAAC;QAIxB,kBAAa,GAAW,CAAC,CAAC;QAM1B,eAAU,GAAW,CAAC,CAAC;QAoDvB,kBAAa,GAAQ,EAAE,CAAC;KAmFyE;IArEjG,QAAQ;QACJ,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;SACvD;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KAC3B;IAED,kBAAkB;QACd,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI;YACxB,QAAQ,IAAI,CAAC,OAAO,EAAE;gBAClB,KAAK,SAAS;oBACV,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACzC,MAAM;gBAEN,KAAK,QAAQ;oBACT,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACxC,MAAM;gBAEN,KAAK,MAAM;oBACP,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACtC,MAAM;gBAEN,KAAK,aAAa;oBACd,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC7C,MAAM;gBAEN,KAAK,QAAQ;oBACT,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACxC,MAAM;gBAEN,KAAK,SAAS;oBACV,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACzC,MAAM;gBAEN,KAAK,UAAU;oBACX,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC1C,MAAM;gBAEN,KAAK,cAAc;oBACf,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC9C,MAAM;gBAEN,KAAK,eAAe;oBAChB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC/C,MAAM;gBAEN,KAAK,gBAAgB;oBACjB,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAChD,MAAM;gBAEN,KAAK,cAAc;oBACf,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC9C,MAAM;gBAEN,KAAK,YAAY;oBACb,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC5C,MAAM;gBAEN,KAAK,cAAc;oBACf,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC9C,MAAM;gBAEN,KAAK,gBAAgB;oBACjB,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAChD,MAAM;aACT;SACJ,CAAC,CAAC;KACN;IAID,WAAW,CAAC,YAA2B;QACnC,IAAI,YAAY,CAAC,KAAK,EAAE;YACpB,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC;YAE9C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACZ,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAE3D,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,IAAI,IAAI,CAAC,SAAS;oBAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;qBACjB,IAAI,IAAI,CAAC,QAAQ,IAAI,UAAU,IAAI,IAAI,CAAC,aAAa;oBACtD,IAAI,CAAC,YAAY,EAAE,CAAC;qBACnB,IAAI,IAAI,CAAC,SAAS,EAAE;oBACrB,IAAI,CAAC,OAAO,EAAE,CAAC;aACtB;YAED,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,qBAAqB,EAAE;gBAClD,IAAI,CAAC,qBAAqB,EAAE,CAAC;aAChC;YAED,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC5C;QAED,IAAI,YAAY,CAAC,SAAS,EAAE;YACxB,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC;;YAGtD,IAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAG;gBAClC,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;oBAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;iBACrB;aACJ;SACJ;QAED,IAAI,YAAY,CAAC,SAAS,EAAE;YACxB,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC;;YAGtD,IAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAG;gBAClC,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;oBAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;iBACrB;aACJ;SACJ;QAED,IAAI,YAAY,CAAC,aAAa,EAAE;YAC5B,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC,aAAa,CAAC,YAAY,CAAC;YAC9D,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE;gBAC9B,IAAI,CAAC,YAAY,EAAE,CAAC;aACvB;SACJ;QAED,IAAI,YAAY,CAAC,SAAS,EAAE;YACxB,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC;YAEtD,IAAI,CAAC,IAAI,CAAC,iCAAiC,EAAE;gBACzC,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC3B,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;aACzC;YACD,IAAI,CAAC,iCAAiC,GAAG,KAAK,CAAC;SAClD;KACJ;IAEQ,IAAI,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;IACD,IAAI,KAAK,CAAC,GAAU;QAChB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;KACrB;IAED,qBAAqB;QACjB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAE1B,IAAI,IAAI,CAAC,SAAS;YACd,IAAI,CAAC,kBAAkB,EAAE,CAAC;;YAE1B,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,IAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;KAC1E;IAED,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO;QACxC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;YACvB,KAAI,IAAI,IAAI,IAAI,KAAK,EAAE;gBACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,MAAM,OAAO,GAAG;oBACZ,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,OAAO,KAAK,MAAM,GAAG,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;iBACxD,CAAC;gBACF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAEnC,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;oBAClC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;iBACxE;aACJ;SACJ;KACJ;IAED,kBAAkB;QACd,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC;QAC5C,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YAEzC,KAAI,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC7C,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAI,IAAI,EAAE;oBACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;wBACtB,IAAI,EAAE,IAAI;wBACV,MAAM,EAAE,IAAI;wBACZ,KAAK,EAAE,CAAC;wBACR,OAAO,EAAE,IAAI;qBAChB,CAAC,CAAC;oBAEH,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;iBACrD;aACJ;SACJ;KACJ;IAEQ,IAAI,YAAY;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IACD,IAAI,YAAY,CAAC,GAAW;QACxB,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KAC9D;IAEQ,IAAI,SAAS;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;IAED,IAAI,SAAS,CAAC,GAAW;QACrB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;KACzB;IAEQ,IAAI,SAAS;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;IACD,IAAI,SAAS,CAAC,GAAW;QACrB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;KACzB;IAEQ,IAAI,aAAa;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC;KAC9B;IAED,IAAI,aAAa,CAAC,GAAe;QAC7B,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;KAC7B;IAEQ,IAAI,SAAS;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;IAED,IAAI,SAAS,CAAC,GAAQ;QAClB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;KACzB;IAED,mBAAmB;QACf,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE;YACjC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;YACxB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBAChC,KAAI,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;oBAC7B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;iBACzF;aACJ;iBACI;gBACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aACpG;SACJ;KACJ;IAED,YAAY,CAAC,KAAK;QACd,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAEvB,IAAI,IAAI,CAAC,IAAI;YACT,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;;YAEpD,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;SAClB,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC5C;IAED,IAAI,CAAC,KAAK;QACN,IAAI,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;QAExC,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAC5B,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;YACjG,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;YAC9B,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE;YAC9B,IAAI,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC;YAC7D,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAE7C,IAAI,QAAQ,EAAE;gBACV,IAAI,CAAC,OAAO,EAAE;oBACV,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAA;iBAC7E;qBACI;oBACD,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;iBACxC;aACJ;iBACI;gBACD,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;oBACjC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;iBAC5B;gBACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;aACjF;YAED,IAAI,CAAC,YAAY,EAAE,CAAC;SACvB;KACJ;IAED,UAAU;QACN,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE;YAClC,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;aAClB;YAED,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;aACvD;iBACI,IAAI,IAAI,CAAC,KAAK,EAAE;gBACjB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAE3B,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;oBAClB,IAAI,CAAC,OAAO,EAAE,CAAC;iBAClB;aACJ;YAED,IAAI,QAAQ,GAAa;gBACrB,KAAK,EAAE,IAAI,CAAC,SAAS;gBACrB,KAAK,EAAE,IAAI,CAAC,SAAS;aACxB,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,CAAC,qBAAqB,EAAE,CAAC;SAChC;KACJ;IAED,SAAS,CAAC,KAAK;QACX,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,OAAO;SACV;QAED,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,IAAI,CAAC,QAAQ;gBACnB,KAAK,EAAE,IAAI,CAAC,SAAS;gBACrB,KAAK,EAAE,IAAI,CAAC,SAAS;aACxB,CAAC,CAAC;SACN;aACI;YACD,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK;gBACpB,IAAI,MAAM,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtE,IAAI,MAAM,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtE,IAAI,MAAM,GAAG,IAAI,CAAC;gBAElB,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;oBAChC,MAAM,GAAG,CAAC,CAAC,CAAC;qBACX,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;oBACrC,MAAM,GAAG,CAAC,CAAC;qBACV,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;oBACrC,MAAM,GAAG,CAAC,CAAC;qBACV,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ;oBAC7D,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;;oBAElE,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;gBAEhE,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE;aACpC,CAAC,CAAC;SACN;QAED,KAAI,IAAI,IAAI,IAAI,KAAK,EAAE;YACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACjC;KACJ;IAED,YAAY;QACR,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;aACvD;iBACI,IAAI,IAAI,CAAC,KAAK,EAAE;gBAClB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAElC,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;oBAClB,IAAI,CAAC,OAAO,EAAE,CAAC;iBAClB;aACJ;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACb,aAAa,EAAE,IAAI,CAAC,aAAa;aACpC,CAAC,CAAC;YACH,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC7C,IAAI,CAAC,qBAAqB,EAAE,CAAC;SAChC;KACJ;IAED,iBAAiB,CAAC,KAAK;QACnB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,OAAO;SACV;QAED,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,IAAI,CAAC,KAAK;gBAChB,IAAI,EAAE,IAAI,CAAC,QAAQ;gBACnB,aAAa,EAAE,IAAI,CAAC,aAAa;aACpC,CAAC,CAAC;SACN;aACI;YACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK;gBACzB,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;aACnE,CAAC,CAAC;SACN;QAED,KAAI,IAAI,IAAI,IAAI,KAAK,EAAE;YACnB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACzC;KACJ;IAED,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK;QAC7C,IAAI,MAAM,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;QAClF,IAAI,MAAM,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;QAClF,IAAI,MAAM,GAAG,IAAI,CAAC;QAElB,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;YAChC,MAAM,GAAG,CAAC,CAAC,CAAC;aACX,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;YACrC,MAAM,GAAG,CAAC,CAAC;aACV,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;YACrC,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,MAAM,YAAY,MAAM,EAAE;YACvD,IAAI,MAAM,CAAC,aAAa,KAAK,MAAM,IAAI,MAAM,CAAC,EAAE;gBAC5C,QAAQ,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,EAAE;aAClG;SACJ;aACI;YACD,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;SACvC;QAED,IAAI,MAAM,IAAI,MAAM,EAAE;YAClB,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;SACnH;QAED,QAAQ,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,MAAM,EAAE;KAChD;IAED,WAAW,CAAC,KAAa;QACrB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAChD,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE;oBACvC,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;iBAChC;aACJ;SACJ;QAED,OAAO,IAAI,CAAC;KACf;IAED,QAAQ,CAAC,KAAa;QAClB,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAC5B,QAAQ,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;SACvD;aACI,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE;YACnC,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpB,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC/C,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,EAAE;wBACtC,MAAM,GAAG,IAAI,CAAC;wBACd,MAAM;qBACT;iBACJ;aACJ;YACD,OAAO,MAAM,CAAC;SACjB;KACJ;IAED,sBAAsB;QAClB,OAAO;YACH,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI;YACpD,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,YAAY,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,GAAG,IAAI;YAC1F,aAAa,EAAE,IAAI,CAAC,aAAa;SACpC,CAAC;KACL;IAED,mBAAmB,CAAC,KAAK;QACrB,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;QAC1C,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,QAAQ,CAAC;QAE5C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YACV,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBACzB,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;aACzC;YAED,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC;gBACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;aACvD,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;SAC/B,CAAC,CAAC;KACN;IAED,OAAO;QACH,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,IAAE,IAAI,CAAC,KAAK,CAAC;QAC1C,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;KAC3C;IAED,mBAAmB;QACf,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KAC5C;IAED,mBAAmB,CAAC,KAAK;QACrB,IAAI,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC;QACrF,IAAI,CAAC,kBAAkB,IAAI,KAAK,CAAC,KAAK,GAAG,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC3G,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;IAED,cAAc,CAAC,KAAK;QAChB,IAAI,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC;QACrF,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC;QACnF,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC;QAClH,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;QAC9D,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,UAAU,IAAI,IAAI,CAAC;QAE9I,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;KACpE;IAED,iBAAiB,CAAC,KAAK,EAAE,MAAM;QAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAC1F,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACrC,IAAI,cAAc,GAAG,WAAW,GAAG,KAAK,CAAC;QACzC,IAAI,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;QAE3C,IAAI,WAAW,GAAG,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAC1C,IAAI,IAAI,CAAC,gBAAgB,KAAK,KAAK,EAAE;gBACjC,IAAI,UAAU,GAAG,MAAM,CAAC,kBAAkB,CAAC;gBAC3C,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE;oBAC7B,UAAU,GAAG,UAAU,CAAC,kBAAkB,CAAC;iBAC9C;gBAED,IAAI,UAAU,EAAE;oBACZ,IAAI,eAAe,GAAG,UAAU,CAAC,WAAW,GAAG,KAAK,CAAC;oBACrD,IAAI,kBAAkB,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;oBAEzD,IAAI,cAAc,GAAG,EAAE,IAAI,eAAe,GAAG,QAAQ,CAAC,kBAAkB,CAAC,EAAE;wBACvE,IAAI,IAAI,CAAC,UAAU,EAAE;4BACjB,IAAI,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;4BAC3D,IAAI,mBAAmB,GAAG,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,0CAA0C,CAAC,CAAC;4BAC5G,IAAI,qBAAqB,GAAG,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,4CAA4C,CAAC,CAAC;4BAChH,IAAI,qBAAqB,GAAG,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,4CAA4C,CAAC,CAAC;4BAChH,IAAI,iBAAiB,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;4BAEjD,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;4BAC/F,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;4BAC7F,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;yBAClG;6BACI;4BACD,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,cAAc,GAAG,IAAI,CAAC;4BAC3C,IAAI,UAAU,EAAE;gCACZ,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,eAAe,GAAG,IAAI,CAAC;6BACnD;yBACJ;qBACJ;iBACJ;aACJ;iBACI,IAAI,IAAI,CAAC,gBAAgB,KAAK,QAAQ,EAAE;gBACzC,IAAI,IAAI,CAAC,UAAU,EAAE;oBACjB,IAAI,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;oBAC3D,IAAI,mBAAmB,GAAG,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,0CAA0C,CAAC,CAAC;oBAC5G,IAAI,qBAAqB,GAAG,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,4CAA4C,CAAC,CAAC;oBAChH,IAAI,qBAAqB,GAAG,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,4CAA4C,CAAC,CAAC;oBAChH,mBAAmB,CAAC,KAAK,CAAC,KAAK,GAAG,mBAAmB,CAAC,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC;oBACjF,qBAAqB,CAAC,KAAK,CAAC,KAAK,GAAG,qBAAqB,CAAC,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC;oBACrF,IAAI,qBAAqB,EAAE;wBACvB,qBAAqB,CAAC,KAAK,CAAC,KAAK,GAAG,qBAAqB,CAAC,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC;qBACxF;oBACD,IAAI,iBAAiB,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAEjD,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;oBACpF,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;oBAClF,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;iBACvF;qBACI;oBACD,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC;oBAC7G,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,cAAc,GAAG,IAAI,CAAC;oBAC3C,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;oBACnE,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,cAAc,GAAG,IAAI,CAAC;iBAC7E;aACJ;YAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;gBAClB,OAAO,EAAE,MAAM;gBACf,KAAK,EAAE,KAAK;aACf,CAAC,CAAC;SACN;QAED,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAChE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC;KACzF;IAED,wBAAwB,CAAC,MAAM;QAC3B,IAAI,MAAM,EAAE;YACR,IAAI,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;YAClC,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,8BAA8B,CAAC,EAAE;gBAC3E,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;aACjC;YAED,OAAO,MAAM,CAAC;SACjB;aACI;YACD,OAAO,IAAI,CAAC;SACf;KACJ;IAED,cAAc,CAAC,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe;QACpE,IAAI,KAAK,EAAE;YACP,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YAEpF,IAAI,QAAQ,EAAE;gBACV,IAAI,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;gBAC/C,IAAI,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC;gBACrC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,cAAc,GAAG,IAAI,CAAC;gBAExC,IAAI,OAAO,IAAI,eAAe,EAAE;oBAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,eAAe,GAAG,IAAI,CAAC;iBAChD;aACJ;iBACI;gBACD,MAAM,mEAAmE,CAAC;aAC7E;SACJ;KACJ;IAED,iBAAiB,CAAC,KAAK,EAAE,aAAa;QAClC,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,0BAA0B,CAAC,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,CAAC;QAC9G,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,2BAA2B,CAAC,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,CAAC;QAClH,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC3C;IAED,iBAAiB,CAAC,KAAK,EAAE,UAAU;QAC/B,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,aAAa,IAAI,UAAU,EAAE;YAC7D,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAClF,IAAI,gBAAgB,GAAG,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAExD,IAAI,IAAI,CAAC,aAAa,IAAI,UAAU,EAAE;gBAClC,IAAI,UAAU,GAAG,gBAAgB,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC;gBAC9D,IAAI,SAAS,GAAG,eAAe,CAAC,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC;gBAC3D,IAAI,YAAY,GAAG,gBAAgB,CAAC,IAAI,GAAG,UAAU,CAAC,WAAW,GAAG,CAAC,CAAC;gBAEtE,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,gBAAgB,CAAC,GAAG,GAAG,eAAe,CAAC,GAAG,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;gBAC5I,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,gBAAgB,CAAC,GAAG,GAAG,eAAe,CAAC,GAAG,GAAG,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;gBAEzI,IAAI,KAAK,CAAC,KAAK,GAAG,YAAY,EAAE;oBAC5B,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;oBAChJ,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;oBAClJ,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;iBACzB;qBACI;oBACD,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;oBACvH,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;oBACzH,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;iBAC1B;gBAED,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;gBACvE,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;aAC5E;iBACI;gBACD,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM,CAAC;aAC1C;SACJ;KACJ;IAED,iBAAiB,CAAC,KAAK;QACnB,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,aAAa,EAAE;YAC/C,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YACtE,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;SAC3E;KACJ;IAED,YAAY,CAAC,KAAK,EAAE,UAAU;QAC1B,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,SAAS,GAAG,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;YACvF,IAAI,SAAS,GAAG,UAAU,CAAC,gBAAgB,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;YAC/E,IAAI,SAAS,IAAI,SAAS,IAAI,SAAS,CAAC,CAAC;YACzC,IAAI,SAAS,KAAK,CAAC,SAAS,GAAG,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,MAAM,SAAS,GAAG,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE;gBACpI,SAAS,GAAG,KAAK,CAAC;aACrB;YAED,IAAI,SAAS,MAAM,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE,EAAE;gBACnE,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;aAC7B;YAED,IAAI,SAAS,MAAM,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,EAAE,EAAE;gBACpE,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;aAC7B;YAED,IAAI,SAAS,EAAE;gBACX,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;gBAE7D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;oBACnB,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,SAAS;oBACpB,OAAO,EAAE,IAAI,CAAC,OAAO;iBACxB,CAAC,CAAC;aACN;YAED,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YACtE,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YACxE,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,KAAK,CAAC;YACrC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC5B;KACJ;IAED,cAAc,CAAC,KAAK;QAChB,IAAI,UAAU,GAAkB,KAAK,CAAC,aAAa,CAAC,MAAO,CAAC,QAAQ,CAAC;QACrE,IAAI,UAAU,IAAI,OAAO,IAAI,UAAU,IAAI,QAAQ,IAAI,UAAU,IAAI,GAAG,KAAK,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,EAAE;YAC3I,OAAO;SACV;QAED,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,iCAAiC,GAAG,IAAI,CAAC;YAC9C,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC5B,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC;YACpE,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;YAE/G,IAAI,aAAa,EAAE;gBACf,IAAI,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,IAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC;gBAEvE,IAAI,QAAQ,IAAI,OAAO,EAAE;oBACrB,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;wBAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;wBACvB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;wBACxB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBACnC;yBACI;wBACD,IAAI,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBAC7D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAC,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,CAAC;wBACxE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAC1C,IAAI,YAAY,EAAE;4BACd,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;yBAC3C;qBACJ;oBAED,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAC,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC,CAAC,CAAC;iBACnG;qBACI;oBACD,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;wBAC9B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;wBAC/B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBACxC,IAAI,YAAY,EAAE;4BACd,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;4BACxB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;yBACxC;qBACJ;yBACI,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;wBACrC,IAAI,OAAO,EAAE;4BACT,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,IAAE,EAAE,CAAC;yBACxC;6BACI;4BACD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;4BACrB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;yBAC3B;wBAED,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;wBACpD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAC1C,IAAI,YAAY,EAAE;4BACd,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;yBACxC;qBACJ;oBAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAC,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAC,CAAC,CAAC;iBACxH;aACJ;iBACI;gBACD,IAAI,IAAI,CAAC,aAAa,KAAK,QAAQ,EAAE;oBACjC,IAAI,QAAQ,EAAE;wBACV,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;wBACvB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;wBACxB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAC1C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;qBACrG;yBACI;wBACD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;wBAC/B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;wBACvH,IAAI,YAAY,EAAE;4BACd,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;4BACxB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;yBACxC;qBACJ;iBACJ;qBACI,IAAI,IAAI,CAAC,aAAa,KAAK,UAAU,EAAE;oBACxC,IAAI,QAAQ,EAAE;wBACV,IAAI,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBAC7D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,CAAC;wBACzE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAC1C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;wBAClG,IAAI,YAAY,EAAE;4BACd,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;yBAC3C;qBACJ;yBACI;wBACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBACtF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;wBACvH,IAAI,YAAY,EAAE;4BACd,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;yBACxC;qBACJ;iBACJ;aACJ;YAED,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;SACzC;QAED,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;KAC3B;IAED,iBAAiB,CAAC,KAAK;QACnB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;KAC1B;IAED,mBAAmB,CAAC,KAAK;QACrB,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAEhC,IAAI,IAAI,CAAC,wBAAwB,KAAK,UAAU,EAAE;gBAC9C,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;gBACjC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAC,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;gBAChF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBAC3C,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;aACzC;iBACI,IAAI,IAAI,CAAC,wBAAwB,KAAK,OAAO,EAAE;gBAChD,IAAI,CAAC,iCAAiC,GAAG,IAAI,CAAC;gBAC9C,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;gBAEvG,IAAI,CAAC,QAAQ,EAAE;oBACX,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;wBAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;wBACtB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBACnC;yBACI,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;wBACrC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC;wBACxB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;qBAC7C;oBAED,IAAI,YAAY,EAAE;wBACd,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;qBACxC;iBACJ;gBAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBAC3C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAC,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;aACnF;SACJ;KACJ;IAED,sBAAsB,CAAC,KAAK;QACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAE,EAAE,CAAC;QACpC,IAAI,CAAC,iCAAiC,GAAG,IAAI,CAAC;QAC9C,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAC9B,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACzC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;gBACtB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;aACjD;YACD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAC,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;SAChE;aACI;YACD,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACxC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;gBACtB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;aAChD;YACD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAC,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;SAC9D;QAED,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;KACzC;IAED,uBAAuB,CAAC,KAAY,EAAE,KAAc;QAChD,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC;QAC5C,IAAI,CAAC,UAAU,GAAG,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;QACpD,IAAI,KAAK,EAAE;YACP,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;gBACrB,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;oBACnB,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;iBAC3C;aACJ;SACJ;aACI;YACD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;SAC3B;QAED,IAAI,CAAC,iCAAiC,GAAG,IAAI,CAAC;QAC9C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;QACtC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAC,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC;KAC5E;IAED,oBAAoB,CAAC,IAAc,EAAE,MAAe;QAChD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACvC,IAAI,kBAAkB,GAAW,CAAC,CAAC;YACnC,IAAI,oBAAoB,GAAY,KAAK,CAAC;YAC1C,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;YAEvG,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAC7B,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;oBAC1B,kBAAkB,EAAE,CAAC;qBAChB,IAAI,KAAK,CAAC,eAAe;oBAC1B,oBAAoB,GAAG,IAAI,CAAC;aACnC;YAED,IAAI,MAAM,IAAI,kBAAkB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;gBACtD,IAAI,CAAC,UAAU,GAAI,CAAC,GAAG,IAAI,CAAC,SAAS,IAAE,EAAE,EAAE,IAAI,CAAC,CAAC;gBACjD,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC7B,IAAI,YAAY,EAAE;oBACd,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;iBACxC;aACJ;iBACI;gBACD,IAAI,CAAC,MAAM,EAAE;oBACT,IAAI,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;oBAC5C,IAAI,KAAK,IAAI,CAAC,EAAE;wBACZ,IAAI,CAAC,UAAU,GAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAC,CAAC,KAAK,CAAC,IAAE,KAAK,CAAC,CAAC;wBAE9D,IAAI,YAAY,EAAE;4BACd,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;yBAC3C;qBACJ;iBACJ;gBAED,IAAI,oBAAoB,IAAI,kBAAkB,GAAG,CAAC,IAAI,kBAAkB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM;oBAC5F,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;;oBAE5B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;aACpC;SACJ;QAED,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,MAAM,EAAE;YACR,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SAC7C;KACJ;IAED,sBAAsB,CAAC,IAAc,EAAE,MAAe;QAClD,IAAI,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;QAEvG,IAAI,MAAM,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE;YACvB,IAAI,CAAC,UAAU,GAAI,CAAC,GAAG,IAAI,CAAC,SAAS,IAAE,EAAE,EAAC,IAAI,CAAC,CAAA;YAC/C,IAAI,YAAY,EAAE;gBACd,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;aACxC;SACJ;aACI,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YAC5B,IAAI,CAAC,UAAU,GAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAC,CAAC,KAAK,CAAC,IAAE,KAAK,CAAC,CAAC;YAC9D,IAAI,YAAY,EAAE;gBACd,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;aAC3C;SACJ;QAED,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAE7B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACvC,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAC7B,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;aAC9C;SACJ;KACJ;IAED,UAAU,CAAC,IAAI;QACX,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;YACxB,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,SAAS,CAAC;aAClG;iBACI;gBACD,IAAI,IAAI,CAAC,SAAS,YAAY,KAAK;oBAC/B,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;;oBAE5C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;aAChD;SACJ;QAED,OAAO,KAAK,CAAC;KAChB;IAED,oBAAoB,CAAC,IAAS;QAC1B,IAAI,KAAK,GAAW,CAAC,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;oBACtC,KAAK,GAAG,CAAC,CAAC;oBACV,MAAM;iBACT;aACJ;SACJ;QAED,OAAO,KAAK,CAAC;KAChB;IAED,qBAAqB;QACjB,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC;KAC1C;IAED,uBAAuB;QACnB,OAAO,IAAI,CAAC,aAAa,KAAK,UAAU,CAAC;KAC5C;IAED,MAAM,CAAC,KAAK,EAAE,KAAK;QACf,OAAO,IAAI,CAAC,kBAAkB,KAAK,QAAQ,IAAI,KAAK,KAAK,KAAK,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;KAC9H;IAED,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS;QAC1B,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SACpC;QAED,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;YAC5B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;SAChE;aAAM,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC9B;QAED,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC;YAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC7B,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;KACxB;IAED,YAAY,CAAC,KAAK,EAAE,SAAS;QACzB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;KAC3C;IAED,aAAa,CAAC,MAAW;QACrB,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;YACzC,IAAI,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,MAAM,MAAM,YAAY,KAAK,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;gBAC5G,OAAO,IAAI,CAAC;;gBAEZ,OAAO,KAAK,CAAC;SACpB;QACD,OAAO,IAAI,CAAC;KACf;IAED,OAAO;QACH,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;SACvD;aACI;YACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACb,OAAO;aACV;YAED,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;gBACnB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,IAAI,IAAI,CAAC,SAAS,EAAE;oBAChB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;iBAC1D;aACJ;iBACI;gBACD,IAAI,uBAAuB,CAAC;gBAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;oBACxB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB;wBACzC,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;;wBAElG,uBAAuB,GAAG,IAAI,CAAC,kBAAkB,IAAE,IAAI,CAAC,OAAO,CAAC;iBACvE;gBAED,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;gBACxB,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC;gBAClD,IAAI,cAAc,GAAG,KAAK,CAAC;gBAE3B,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;oBACzB,IAAI,QAAQ,qBAAO,IAAI,CAAC,CAAC;oBACzB,IAAI,UAAU,GAAG,IAAI,CAAC;oBACtB,IAAI,WAAW,GAAG,KAAK,CAAC;oBACxB,IAAI,iBAAiB,CAAC;oBAEtB,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;wBAC3B,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,QAAQ,EAAE;4BACxD,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;4BACpC,IAAI,WAAW,GAAG,IAAI,CAAC;4BACvB,IAAI,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC;4BACnC,IAAI,eAAe,GAAG,UAAU,CAAC,SAAS,IAAI,YAAY,CAAC;4BAC3D,IAAI,gBAAgB,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;4BACpD,iBAAiB,GAAG,EAAC,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAC,CAAC;4BAC/E,IAAI,CAAC,YAAY,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;iCAC3H,CAAC,YAAY,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,iBAAiB,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE;gCAC5H,UAAU,GAAG,KAAK,CAAC;6BAC1B;4BAED,IAAI,CAAC,UAAU,EAAE;gCACb,MAAM;6BACT;yBACJ;qBACJ;oBAED,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,uBAAuB,EAAE;wBACnE,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;4BACpD,IAAI,iBAAiB,qBAAO,QAAQ,CAAC,CAAC;4BACtC,IAAI,WAAW,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC,KAAK,IAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;4BAC/E,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;4BAC/C,IAAI,gBAAgB,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC;4BACrE,iBAAiB,GAAG,EAAC,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAC,CAAC;4BAE/E,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;iCAC5I,CAAC,YAAY,KAAK,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE;gCAC7I,WAAW,GAAG,IAAI,CAAC;gCACnB,QAAQ,GAAG,iBAAiB,CAAC;6BACpC;yBACJ;qBACJ;oBAED,IAAI,OAAO,GAAG,UAAU,CAAC;oBACzB,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;wBACxB,OAAO,GAAG,UAAU,IAAI,WAAW,CAAC;qBACvC;oBAED,IAAI,OAAO,EAAE;wBACT,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;qBACrC;oBAED,cAAc,GAAG,cAAc,IAAI,CAAC,UAAU,IAAI,WAAW,KAAK,UAAU,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAA;iBACtK;gBAED,IAAI,CAAC,cAAc,EAAE;oBACjB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;iBAC7B;gBAED,IAAI,IAAI,CAAC,SAAS,EAAE;oBAChB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;iBAC3G;aACJ;SACJ;QAED,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAEf,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC;QAEvD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,aAAa,EAAE,aAAa;SAC/B,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAC5C,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAChC;IAED,iBAAiB,CAAC,IAAI,EAAE,iBAAiB;QACrC,IAAI,IAAI,EAAE;YACN,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACpC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;gBACnB,KAAK,IAAI,SAAS,IAAI,UAAU,EAAE;oBAC9B,IAAI,aAAa,qBAAO,SAAS,CAAC,CAAC;oBACnC,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,iBAAiB,CAAC,EAAE;wBACxD,OAAO,GAAG,IAAI,CAAC;wBACf,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;qBACrC;iBACJ;aACJ;YAED,IAAI,OAAO,EAAE;gBACT,OAAO,IAAI,CAAC;aACf;SACJ;KACJ;IAED,eAAe,CAAC,IAAI,EAAE,EAAC,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAC;QAC5E,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,cAAc,GAAG,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC1E,IAAI,gBAAgB,CAAC,cAAc,EAAE,WAAW,CAAC,EAAE;YAC/C,OAAO,GAAG,IAAI,CAAC;SAClB;QAED,IAAI,CAAC,OAAO,KAAK,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE;YACtD,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAC,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAC,CAAC,IAAI,OAAO,CAAC;SACjH;QAED,OAAO,OAAO,CAAC;KAClB;IAED,UAAU,CAAC,IAAI;QACX,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,GAAG,KAAK,GAAG,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;KACjF;IAED,SAAS;QACL,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;YAC3B,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;gBACnC,KAAK,GAAG,KAAK,CAAC;gBACd,MAAM;aACT;SACJ;QAED,OAAO,CAAC,KAAK,CAAC;KACjB;IAEM,KAAK;QACR,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE/B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAElB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAEf,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;SACvD;aACI;YACD,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SAC9D;KACJ;IAED,iBAAiB,CAAC,IAAI;QAClB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,wBAAwB,EAAE,CAAC;KACnC;IAED,kBAAkB;QACd,QAAQ,IAAI,CAAC,WAAW,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;KACvG;IAED,wBAAwB;QACpB,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC5B,IAAI,CAAC,oBAAoB,GAAG,CAAC,KAAK;gBAC9B,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;oBACzE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;oBAC5D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;oBACxB,IAAI,CAAC,0BAA0B,EAAE,CAAC;iBACrC;gBAED,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;aACjC,CAAC;YAEF,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;SACjE;KACJ;IAED,0BAA0B;QACtB,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACjE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;SACpC;KACJ;IAED,WAAW;QACP,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KAC3B;CAEJ,CAAA;;YAhqC0B,UAAU;YAAe,MAAM;YAAuB,gBAAgB;;AA3RpF;IAAR,KAAK,EAAE;0CAAgB;AAEf;IAAR,KAAK,EAAE;wCAAY;AAEX;IAAR,KAAK,EAAE;6CAAoB;AAEnB;IAAR,KAAK,EAAE;6CAAqB;AAEpB;IAAR,KAAK,EAAE;uCAAuB;AAEtB;IAAR,KAAK,EAAE;4CAAoB;AAEnB;IAAR,KAAK,EAAE;uCAAc;AAEb;IAAR,KAAK,EAAE;wCAAmB;AAElB;IAAR,KAAK,EAAE;4CAAuB;AAEtB;IAAR,KAAK,EAAE;qDAA2B;AAE1B;IAAR,KAAK,EAAE;sDAAqC;AAEpC;IAAR,KAAK,EAAE;oDAAsC;AAErC;IAAR,KAAK,EAAE;4DAAgC;AAE/B;IAAR,KAAK,EAAE;4DAAqE;AAEpE;IAAR,KAAK,EAAE;wDAAgC;AAE/B;IAAR,KAAK,EAAE;mDAA8B;AAE7B;IAAR,KAAK,EAAE;2CAA6B;AAE5B;IAAR,KAAK,EAAE;kDAAiC;AAEhC;IAAR,KAAK,EAAE;6CAAqB;AAEpB;IAAR,KAAK,EAAE;gDAAuB;AAErB;IAAT,MAAM,EAAE;kDAAyD;AAEzD;IAAR,KAAK,EAAE;uDAA2B;AAEzB;IAAT,MAAM,EAAE;6DAAoE;AAEpE;IAAR,KAAK,EAAE;2DAA+C;AAE9C;IAAR,KAAK,EAAE;0CAAiB;AAEhB;IAAR,KAAK,EAAE;mDAA2B;AAE1B;IAAR,KAAK,EAAE;qDAA2C;AAE1C;IAAR,KAAK,EAAE;2CAAmB;AAElB;IAAR,KAAK,EAAE;0CAAkB;AAEjB;IAAR,KAAK,EAAE;8CAAuC;AAEtC;IAAR,KAAK,EAAE;6CAA4B;AAE3B;IAAR,KAAK,EAAE;6CAAqB;AAEpB;IAAR,KAAK,EAAE;+CAAsB;AAErB;IAAR,KAAK,EAAE;gDAAwB;AAEvB;IAAR,KAAK,EAAE;qDAAkC;AAEjC;IAAR,KAAK,EAAE;mDAA+B;AAE9B;IAAR,KAAK,EAAE;8CAAqB;AAEpB;IAAR,KAAK,EAAE;gDAAsB;AAErB;IAAR,KAAK,EAAE;mDAA2B;AAE1B;IAAR,KAAK,EAAE;mDAAkC;AAEjC;IAAR,KAAK,EAAE;qDAA6B;AAE5B;IAAR,KAAK,EAAE;8CAAkB;AAEjB;IAAR,KAAK,EAAE;6CAA2D;AAE1D;IAAR,KAAK,EAAE;0CAAgD;AAE/C;IAAR,KAAK,EAAE;qDAA8B;AAE7B;IAAR,KAAK,EAAE;8CAA2B;AAE1B;IAAR,KAAK,EAAE;6CAAgC;AAE9B;IAAT,MAAM,EAAE;2CAAkD;AAEjD;IAAT,MAAM,EAAE;+CAAsD;AAErD;IAAT,MAAM,EAAE;iDAAwD;AAEvD;IAAT,MAAM,EAAE;yCAAgD;AAE/C;IAAT,MAAM,EAAE;yCAAgD;AAE/C;IAAT,MAAM,EAAE;6CAAoD;AAEnD;IAAT,MAAM,EAAE;+CAAsD;AAErD;IAAT,MAAM,EAAE;8CAAqD;AAEpD;IAAT,MAAM,EAAE;+CAAsD;AAErD;IAAT,MAAM,EAAE;+CAAsD;AAErD;IAAT,MAAM,EAAE;iDAAwD;AAEvD;IAAT,MAAM,EAAE;sDAA6D;AAE5D;IAAT,MAAM,EAAE;yDAAgE;AAE/D;IAAT,MAAM,EAAE;6CAAoD;AAEnD;IAAT,MAAM,EAAE;iDAAwD;AAEvD;IAAT,MAAM,EAAE;+CAAsD;AAEvC;IAAvB,SAAS,CAAC,WAAW,CAAC;qDAAgC;AAE5B;IAA1B,SAAS,CAAC,cAAc,CAAC;wDAAmC;AAE5B;IAAhC,SAAS,CAAC,oBAAoB,CAAC;8DAAyC;AAEtC;IAAlC,SAAS,CAAC,sBAAsB,CAAC;gEAA2C;AAEzD;IAAnB,SAAS,CAAC,OAAO,CAAC;iDAA4B;AAEf;IAA/B,eAAe,CAAC,aAAa,CAAC;4CAAqC;AAoN3D;IAAR,KAAK,EAAE;sCAEP;AAuDQ;IAAR,KAAK,EAAE;6CAEP;AAMQ;IAAR,KAAK,EAAE;0CAEP;AAMQ;IAAR,KAAK,EAAE;0CAEP;AAKQ;IAAR,KAAK,EAAE;8CAEP;AAMQ;IAAR,KAAK,EAAE;0CAEP;AAxbQ,SAAS;IArDrB,SAAS,CAAC;QACP,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA+CT;QACD,SAAS,EAAE,CAAC,gBAAgB,CAAC;QAC7B,eAAe,EAAE,uBAAuB,CAAC,OAAO;KACnD,CAAC;GACW,SAAS,CA67CrB;IAeY,MAAM,GAAnB,MAAa,MAAM;IAMf,YAAmB,EAAa;QAAb,OAAE,GAAF,EAAE,CAAW;KAAI;CACvC,CAAA;;YAD0B,SAAS;;AAJP;IAAxB,KAAK,CAAC,gBAAgB,CAAC;uCAAgB;AAEP;IAAhC,KAAK,CAAC,wBAAwB,CAAC;wCAA4B;AAJnD,MAAM;IAblB,SAAS,CAAC;QACP,QAAQ,EAAE,kBAAkB;QAC5B,QAAQ,EAAE;;;;;;;;;KAST;KACJ,CAAC;GACW,MAAM,CAOlB;IAyCY,gBAAgB,GAA7B,MAAa,gBAAgB;IAwCzB,YAAmB,EAAa,EAAS,EAAc,EAAS,IAAY;QAAzD,OAAE,GAAF,EAAE,CAAW;QAAS,OAAE,GAAF,EAAE,CAAY;QAAS,SAAI,GAAJ,IAAI,CAAQ;QAF5E,iBAAY,GAAa,EAAE,CAAC;QAGxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,SAAS,CAAC;YAC/D,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBACxB,UAAU,CAAC;oBACP,IAAI,CAAC,cAAc,EAAE,CAAC;oBACtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;oBAExB,IAAI,IAAI,CAAC,2BAA2B,IAAI,IAAI,CAAC,2BAA2B,CAAC,aAAa,EAAE;wBACpF,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;qBACzE;iBACJ,EAAE,EAAE,CAAC,CAAC;aACV,CAAC,CAAC;SACN,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,mBAAmB,CAAC,SAAS,CAAC;gBAC/E,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;oBACxB,UAAU,CAAC;wBACP,IAAI,CAAC,wBAAwB,EAAE,CAAC;qBACnC,EAAE,EAAE,CAAC,CAAC;iBACV,CAAC,CAAC;aACN,CAAC,CAAC;SACN;QAED,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEhD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC3B;IAEO,IAAI,YAAY;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IACD,IAAI,YAAY,CAAC,GAAW;QACxB,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;QACzB,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;IAED,kBAAkB;QACd,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE;YACzD,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;SAC3B;KACJ;IAED,eAAe;QACX,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,IAAI,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE;gBACrD,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,4BAA4B,CAAC,CAAC;aAC5E;YAED,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;gBACrB,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC;gBACvD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,GAAG,GAAG,CAAC;aAClF;YAED,IAAI,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,sBAAsB,CAAC;YAC9D,IAAI,UAAU,EAAE;gBACZ,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,+BAA+B,CAAC,CAAC;aAC/F;SACJ;aACI;YACD,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,GAAG,UAAU,CAAC,uBAAuB,EAAE,GAAG,IAAI,CAAC;SAC5G;QAED,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAEhC,IAAI,IAAI,CAAC,2BAA2B,IAAI,IAAI,CAAC,2BAA2B,CAAC,aAAa,EAAE;gBACpF,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;aAC1E;SACJ;KACJ;IAED,UAAU;QACN,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACxB,IAAI,cAAc,GAAG,UAAU,CAAC,uBAAuB,EAAE,CAAC;YAE1D,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;gBACxE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3D,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;aACrG;YAED,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;gBACxE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3D,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;aAClG;YAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBACd,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvD,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;aAC9F;SACJ,CAAC,CAAC;KACN;IAED,YAAY;QACR,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;YACxE,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;SACxG;QAED,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;YACxE,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;SACrG;QAED,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;KAC9F;IAED,cAAc,CAAC,KAAK;QAChB,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,UAAU,GAAG,CAAC,CAAC;KAC3D;IAED,cAAc,CAAC,KAAK;QAChB,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,UAAU,GAAG,CAAC,CAAC;KAC3D;IAED,YAAY,CAAC,KAAK;QACd,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;YACxE,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC;SAChI;QAED,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;YACxE,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC;SAChI;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,SAAS,CAAC;SACvF;QAED,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;YACvB,IAAI,QAAQ,GAAG,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;YACjF,IAAI,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;YACrF,IAAI,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;YACzD,IAAI,kBAAkB,GAAG,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC;YAChG,IAAI,SAAS,GAAG,CAAC,kBAAkB,GAAG,UAAU,KAAG,CAAC,CAAC;YACrD,IAAI,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,IAAE,GAAG,CAAC;YAE3E,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,WAAW,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,SAAS,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,EAAE;gBAC3L,IAAI,IAAI,CAAC,2BAA2B,IAAI,IAAI,CAAC,2BAA2B,CAAC,aAAa,EAAE;oBACpF,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;oBACvE,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC;iBACtH;gBAED,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,SAAS,GAAG,SAAS,KAAK,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClJ,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC;oBACxB,IAAI,EAAE,IAAI;oBACV,QAAQ,EAAE;wBACN,IAAI,IAAI,CAAC,2BAA2B,IAAI,IAAI,CAAC,2BAA2B,CAAC,aAAa,EAAE;4BACpF,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;yBACzE;wBAED,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,UAAU,IAAI,IAAI,CAAC;wBAErF,IAAI,IAAI,CAAC,iBAAiB,EAAE;4BACT,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;yBACpH;qBACJ;iBACJ,CAAC,CAAC;aACN;SACJ;KACJ;IAED,eAAe;QACX,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE;YACzF,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;gBACvC,IAAI,cAAc,CAAC;gBACnB,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;gBACnE,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;gBAC9D,IAAI,eAAe,GAAG,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEtF,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;oBACpC,IAAI,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC1H,IAAI,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACtH,cAAc,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,aAAa,GAAG,GAAG,IAAI,SAAS,CAAC;iBAC1H;qBACI;oBACD,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC;iBAC1H;gBAED,IAAI,YAAY,GAAG,eAAe,GAAG,GAAG,CAAC;gBACzC,IAAI,gBAAgB,IAAI,cAAc,GAAG,YAAY,CAAC,CAAC;gBAEvD,IAAI,IAAI,CAAC,MAAM,EAAE;oBACb,gBAAgB,IAAI,UAAU,CAAC,uBAAuB,EAAE,CAAC;iBAC5D;gBAED,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;gBAC7D,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,gBAAgB,GAAG,IAAI,CAAC;gBACjF,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;aACvE;iBACI;gBACD,IAAI,IAAI,CAAC,MAAM;oBACX,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC,uBAAuB,EAAE,IAAI,IAAI,CAAC;;oBAErI,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;aAClF;SACJ;KACJ;IAED,wBAAwB;QACpB,IAAI,IAAI,CAAC,wBAAwB,CAAC,aAAa,EAAE;YAC7C,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,GAAG,IAAI,CAAC;SACrH;KACJ;IAED,mBAAmB;QACf,OAAO,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;KACjJ;IAED,cAAc;QACV,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,IAAI,cAAc,GAAG,IAAI,CAAC,mBAAmB,EAAE,GAAG,UAAU,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;YAC3F,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,GAAG,cAAc,GAAG,IAAI,CAAC;YAEtF,IAAI,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,wBAAwB,CAAC,aAAa,EAAE;gBAC9E,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,GAAG,cAAc,GAAG,IAAI,CAAC;aACzF;SACJ;QACD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC5B;IAED,WAAW;QACP,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAE9B,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;SACnC;QAED,IAAI,IAAI,CAAC,wBAAwB,EAAE;YAC/B,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,CAAC;SAC/C;QAED,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC5B;CACJ,CAAA;;YA9O0B,SAAS;YAAa,UAAU;YAAe,MAAM;;AAtCjD;IAA1B,KAAK,CAAC,kBAAkB,CAAC;iDAAgB;AAEjC;IAAR,KAAK,EAAE;gDAAiB;AAEE;IAA1B,SAAS,CAAC,cAAc,CAAC;+DAAmC;AAE/B;IAA7B,SAAS,CAAC,iBAAiB,CAAC;kEAAsC;AAE1C;IAAxB,SAAS,CAAC,YAAY,CAAC;6DAAiC;AAE/B;IAAzB,SAAS,CAAC,aAAa,CAAC;8DAAkC;AAEhC;IAA1B,SAAS,CAAC,cAAc,CAAC;qEAAyC;AAExC;IAA1B,SAAS,CAAC,cAAc,CAAC;+DAAmC;AAE/B;IAA7B,SAAS,CAAC,iBAAiB,CAAC;kEAAsC;AAErC;IAA7B,SAAS,CAAC,iBAAiB,CAAC;kEAAsC;AAiD1D;IAAR,KAAK,EAAE;oDAEP;AAvEQ,gBAAgB;IAvC5B,SAAS,CAAC;QACP,QAAQ,EAAE,oBAAoB;QAC9B,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAmCT;KACJ,CAAC;GACW,gBAAgB,CAsR5B;IAUY,gBAAgB,GAA7B,MAAa,gBAAgB;IAUzB,YAAmB,EAAa;QAAb,OAAE,GAAF,EAAE,CAAW;QAC5B,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ;gBACnE,IAAI,CAAC,eAAe,EAAE,CAAC;aAC1B,CAAC,CAAC;SACN;KACJ;IAED,QAAQ;QACJ,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB,IAAI,CAAC,eAAe,EAAE,CAAC;SAC1B;KACJ;IAED,eAAe;QACX,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC9C;IAGD,OAAO,CAAC,KAAiB;QACrB,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;gBACT,aAAa,EAAE,KAAK;gBACpB,KAAK,EAAE,IAAI,CAAC,KAAK;aACpB,CAAC,CAAC;YAEH,UAAU,CAAC,cAAc,EAAE,CAAC;SAC/B;KACJ;IAGD,UAAU,CAAC,KAAiB;QACxB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KACvB;IAED,SAAS;QACL,OAAO,IAAI,CAAC,wBAAwB,KAAK,IAAI,CAAC;KACjD;IAED,WAAW;QACP,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;SACnC;KACJ;CACJ,CAAA;;YA7C0B,SAAS;;AARL;IAA1B,KAAK,CAAC,kBAAkB,CAAC;+CAAe;AAEhC;IAAR,KAAK,EAAE;kEAAmC;AAyB3C;IADC,YAAY,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;+CAWjC;AAGD;IADC,YAAY,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,CAAC;kDAGzC;AA5CQ,gBAAgB;IAR5B,SAAS,CAAC;QACP,QAAQ,EAAE,oBAAoB;QAC9B,IAAI,EAAE;YACF,4BAA4B,EAAE,aAAa;YAC3C,4BAA4B,EAAE,QAAQ;YACtC,iBAAiB,EAAE,0BAA0B;SAChD;KACJ,CAAC;GACW,gBAAgB,CAuD5B;IAQY,UAAU,GAAvB,MAAa,UAAU;IAYnB,YAAmB,EAAa;QAAb,OAAE,GAAF,EAAE,CAAW;QAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ;YACnE,IAAI,CAAC,eAAe,EAAE,CAAC;SAC1B,CAAC,CAAC;KACN;IAED,QAAQ;QACJ,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;IAED,OAAO,CAAC,KAAK;QACT,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;IAED,eAAe;QACX,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC;SACzE;aACI,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,KAAK,UAAU,EAAE;YACtC,IAAI,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC,KAAK,GAAE,CAAC,CAAC;SACjD;KACJ;IAED,WAAW;QACP,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;SACnC;KACJ;CACJ,CAAA;;YA7B0B,SAAS;;AAVvB;IAAR,KAAK,EAAE;yCAAe;AAEd;IAAR,KAAK,EAAE;iDAAuB;AAEtB;IAAR,KAAK,EAAE;gDAAsB;AANrB,UAAU;IANtB,SAAS,CAAC;QACP,QAAQ,EAAE,qBAAqB;QAC/B,QAAQ,EAAE;;KAET;KACJ,CAAC;GACW,UAAU,CAyCtB;IAKY,iBAAiB,GAA9B,MAAa,iBAAiB;IAY1B,YAAmB,EAAa,EAAS,EAAc,EAAS,IAAY;QAAzD,OAAE,GAAF,EAAE,CAAW;QAAS,OAAE,GAAF,EAAE,CAAY;QAAS,SAAI,GAAJ,IAAI,CAAQ;KAAK;IAEjF,eAAe;QACX,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;YAClE,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,gCAAgC,CAAC;YAC1D,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEhD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBACxB,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5D,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;aAC7E,CAAC,CAAC;SACN;KACJ;IAED,kBAAkB;QACd,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACxB,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrE,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;YAEvE,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjE,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;SACtE,CAAC,CAAC;KACN;IAED,oBAAoB;QAChB,IAAI,IAAI,CAAC,yBAAyB,EAAE;YAChC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;YAC1E,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;SACzC;QAED,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAC9B,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACtE,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;SACvC;KACJ;IAED,WAAW,CAAC,KAAY;QACpB,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC7B;IAED,mBAAmB,CAAC,KAAY;QAC5B,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;KACjC;IAED,iBAAiB,CAAC,KAAY;QAC1B,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;QACxD,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC/B;IAED,SAAS;QACL,OAAO,IAAI,CAAC,yBAAyB,KAAK,IAAI,CAAC;KAClD;IAED,WAAW;QACP,IAAI,IAAI,CAAC,wBAAwB,EAAE;YAC/B,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;SAChF;QAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC/B;CACJ,CAAA;;YA/D0B,SAAS;YAAa,UAAU;YAAe,MAAM;;AAVnE;IAAR,KAAK,EAAE;oEAAoC;AAFnC,iBAAiB;IAH7B,SAAS,CAAC;QACP,QAAQ,EAAE,qBAAqB;KAClC,CAAC;GACW,iBAAiB,CA2E7B;IAKY,mBAAmB,GAAhC,MAAa,mBAAmB;IAc5B,YAAmB,EAAa,EAAS,EAAc,EAAS,IAAY;QAAzD,OAAE,GAAF,EAAE,CAAW;QAAS,OAAE,GAAF,EAAE,CAAY;QAAS,SAAI,GAAJ,IAAI,CAAQ;KAAK;IAEjF,eAAe;QACX,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;KACJ;IAED,UAAU;QACN,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACxB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAE5E,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAE5E,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAE1E,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAE5E,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAC/E,CAAC,CAAC;KACN;IAED,YAAY;QACR,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAClE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;SACjC;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,QAAQ,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAChE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;SAChC;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAClE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;SACjC;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAClE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;SACjC;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAClE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;SACjC;KACJ;IAED,WAAW,CAAC,KAAK;QACb,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,mBAAmB,CAAC;YAC3F,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,GAAG,KAAK,CAAC;;YAExC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC;KAC9C;IAED,WAAW,CAAC,KAAK;QACb,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;KAC3D;IAED,UAAU,CAAC,KAAK;QACZ,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;IAED,WAAW,CAAC,KAAK;QACb,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;KAC3D;IAED,WAAW,CAAC,KAAK;QACb,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;KACpC;IAGD,MAAM,CAAC,KAAK;QACR,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;SACtD;KACJ;IAED,SAAS;QACL,OAAO,IAAI,CAAC,2BAA2B,KAAK,IAAI,CAAC;KACpD;IAED,WAAW;QACP,IAAI,CAAC,YAAY,EAAE,CAAC;KACvB;CAEJ,CAAA;;YA5F0B,SAAS;YAAa,UAAU;YAAe,MAAM;;AAZnE;IAAR,KAAK,EAAE;wEAAsC;AA0F9C;IADC,YAAY,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;iDAKhC;AAhGQ,mBAAmB;IAH/B,SAAS,CAAC;QACP,QAAQ,EAAE,uBAAuB;KACpC,CAAC;GACW,mBAAmB,CA0G/B;IAQY,eAAe,GAA5B,MAAa,eAAe;IAUxB,YAAmB,EAAa,EAAS,YAA8B;QAApD,OAAE,GAAF,EAAE,CAAW;QAAS,iBAAY,GAAZ,YAAY,CAAkB;QACnE,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,SAAS,CAAC;gBAChE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aACzD,CAAC,CAAC;SACN;KACJ;IAED,QAAQ;QACJ,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACzD;KACJ;IAGD,OAAO,CAAC,KAAY;QAChB,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC;gBACnB,aAAa,EAAE,KAAK;gBACpB,OAAO,EAAE,IAAI,CAAC,OAAO;aACxB,CAAC,CAAC;SACN;KACJ;IAGD,UAAU,CAAC,KAAoB;QAC3B,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,EAAE;YACpB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACvB;KACJ;IAGD,UAAU,CAAC,KAAY;QACnB,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;SACpC;KACJ;IAED,SAAS;QACL,OAAO,IAAI,CAAC,uBAAuB,KAAK,IAAI,CAAC;KAChD;IAED,WAAW;QACP,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;SACnC;KACJ;CAEJ,CAAA;;YAhD0B,SAAS;YAAuB,gBAAgB;;AAR7C;IAAzB,KAAK,CAAC,iBAAiB,CAAC;gDAAc;AAE9B;IAAR,KAAK,EAAE;gEAAkC;AAqB1C;IADC,YAAY,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;8CAQjC;AAGD;IADC,YAAY,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC;iDAKnC;AAGD;IADC,YAAY,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;iDAKpC;AA9CQ,eAAe;IAN3B,SAAS,CAAC;QACP,QAAQ,EAAE,mBAAmB;QAC7B,IAAI,EAAE;YACF,4BAA4B,EAAE,UAAU;SAC3C;KACJ,CAAC;GACW,eAAe,CA0D3B;IAQY,uBAAuB,GAApC,MAAa,uBAAuB;IAUhC,YAAmB,EAAa,EAAS,YAA8B;QAApD,OAAE,GAAF,EAAE,CAAW;QAAS,iBAAY,GAAZ,YAAY,CAAkB;QACnE,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,SAAS,CAAC;gBAChE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aACzD,CAAC,CAAC;SACN;KACJ;IAED,QAAQ;QACJ,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACzD;KACJ;IAGD,OAAO,CAAC,KAAY;QAChB,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC;gBACnB,aAAa,EAAE,KAAK;gBACpB,OAAO,EAAE,IAAI,CAAC,OAAO;aACxB,CAAC,CAAC;SACN;KACJ;IAED,SAAS;QACL,OAAO,IAAI,CAAC,uBAAuB,KAAK,IAAI,CAAC;KAChD;IAED,WAAW;QACP,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;SACnC;KACJ;CAEJ,CAAA;;YAlC0B,SAAS;YAAuB,gBAAgB;;AARrC;IAAjC,KAAK,CAAC,yBAAyB,CAAC;wDAAc;AAEtC;IAAR,KAAK,EAAE;wEAAkC;AAqB1C;IADC,YAAY,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;sDAQpC;AAhCQ,uBAAuB;IANnC,SAAS,CAAC;QACP,QAAQ,EAAE,2BAA2B;QACrC,IAAI,EAAE;YACF,4BAA4B,EAAE,UAAU;SAC3C;KACJ,CAAC;GACW,uBAAuB,CA4CnC;IASY,gBAAgB,GAA7B,MAAa,gBAAgB;IAUzB,YAAmB,EAAa,EAAS,YAA8B,EAAU,EAAc;QAA5E,OAAE,GAAF,EAAE,CAAW;QAAS,iBAAY,GAAZ,YAAY,CAAkB;QAAU,OAAE,GAAF,EAAE,CAAY;QAC3F,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,IAAI;gBACvE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aAC3D,CAAC,CAAC;SACN;KACJ;IAGD,aAAa,CAAC,KAAY;QACtB,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC;gBACxB,aAAa,EAAE,KAAK;gBACpB,OAAO,EAAE,IAAI,CAAC,OAAO;aACxB,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YAE9B,KAAK,CAAC,cAAc,EAAE,CAAC;SAC1B;KACJ;IAED,SAAS;QACL,OAAO,IAAI,CAAC,wBAAwB,KAAK,IAAI,CAAC;KACjD;IAED,WAAW;QACP,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;SACnC;KACJ;CAEJ,CAAA;;YAhC0B,SAAS;YAAuB,gBAAgB;YAAc,UAAU;;AARpE;IAA1B,KAAK,CAAC,kBAAkB,CAAC;iDAAc;AAE/B;IAAR,KAAK,EAAE;kEAAmC;AAe3C;IADC,YAAY,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,CAAC;qDAYvC;AA9BQ,gBAAgB;IAP5B,SAAS,CAAC;QACP,QAAQ,EAAE,oBAAoB;QAC9B,IAAI,EAAE;YACF,iCAAiC,EAAE,UAAU;YAC7C,iBAAiB,EAAE,6BAA6B;SACnD;KACJ,CAAC;GACW,gBAAgB,CA0C5B;IAgBY,UAAU,GAAvB,MAAa,UAAU;IAYnB,YAAmB,EAAa,EAAS,YAA8B;QAApD,OAAE,GAAF,EAAE,CAAW;QAAS,iBAAY,GAAZ,YAAY,CAAkB;QACnE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,SAAS,CAAC;YAChE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACxD,CAAC,CAAC;KACN;IAED,QAAQ;QACJ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACxD;IAED,OAAO,CAAC,KAAY;QAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,IAAI,CAAC,EAAE,CAAC,sBAAsB,CAAC;gBAC3B,aAAa,EAAE,KAAK;gBACpB,OAAO,EAAE,IAAI,CAAC,OAAO;aACxB,CAAC,CAAC;SACN;QACD,UAAU,CAAC,cAAc,EAAE,CAAC;KAC/B;IAED,OAAO;QACH,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;KAC1E;IAED,MAAM;QACF,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;KAC7E;IAED,WAAW;QACP,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;SACnC;KACJ;CAEJ,CAAA;;YAlC0B,SAAS;YAAuB,gBAAgB;;AAV9D;IAAR,KAAK,EAAE;4CAAmB;AAEX;IAAf,KAAK,CAAC,OAAO,CAAC;2CAAc;AAEX;IAAjB,SAAS,CAAC,KAAK,CAAC;gDAA0B;AANlC,UAAU;IAdtB,SAAS,CAAC;QACP,QAAQ,EAAE,qBAAqB;QAC/B,QAAQ,EAAE;;;;;;;;;;KAUT;KACJ,CAAC;GACW,UAAU,CA8CtB;IAgBY,gBAAgB,GAA7B,MAAa,gBAAgB;IAYzB,YAAmB,EAAa,EAAS,YAA8B;QAApD,OAAE,GAAF,EAAE,CAAW;QAAS,iBAAY,GAAZ,YAAY,CAAkB;QACnE,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,SAAS,CAAC;YAC1E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC5C,CAAC,CAAC;QAEH,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,SAAS,CAAC;YAC/E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC5C,CAAC,CAAC;KACN;IAED,QAAQ;QACJ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC5C;IAED,OAAO,CAAC,KAAY,EAAE,OAAO;QACzB,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3C,IAAI,CAAC,EAAE,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC;SACpD;QAED,UAAU,CAAC,cAAc,EAAE,CAAC;KAC/B;IAED,OAAO;QACH,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;KAC1E;IAED,MAAM;QACF,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;KAC7E;IAED,WAAW;QACP,IAAI,IAAI,CAAC,2BAA2B,EAAE;YAClC,IAAI,CAAC,2BAA2B,CAAC,WAAW,EAAE,CAAC;SAClD;QAED,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,CAAC;SAC9C;KACJ;IAED,kBAAkB;QACd,IAAI,OAAgB,CAAC;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,IAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;QAElD,IAAI,IAAI,EAAE;YACN,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;gBACnB,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;oBAC1B,OAAO,GAAG,IAAI,CAAC;iBAClB;qBACK;oBACF,OAAO,GAAG,KAAK,CAAC;oBAChB,MAAM;iBACT;aACJ;SACJ;aACI;YACD,OAAO,GAAG,KAAK,CAAC;SACnB;QAED,OAAO,OAAO,CAAC;KAClB;CAEJ,CAAA;;YA9D0B,SAAS;YAAuB,gBAAgB;;AAVrD;IAAjB,SAAS,CAAC,KAAK,CAAC;sDAA0B;AAFlC,gBAAgB;IAd5B,SAAS,CAAC;QACP,QAAQ,EAAE,2BAA2B;QACrC,QAAQ,EAAE;;;;;;;;;;KAUT;KACJ,CAAC;GACW,gBAAgB,CA0E5B;IAKY,gBAAgB,GAA7B,MAAa,gBAAgB;IAQzB,YAAmB,EAAa,EAAS,EAAc,EAAS,IAAY;QAAzD,OAAE,GAAF,EAAE,CAAW;QAAS,OAAE,GAAF,EAAE,CAAY;QAAS,SAAI,GAAJ,IAAI,CAAQ;KAAI;IAEhF,eAAe;QACX,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;SACpE;KACJ;IAGD,OAAO,CAAC,KAAiB;QACrB,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB,IAAI,CAAC,EAAE,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAEhC,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;gBACrB,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,KAAK,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;oBAC/C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,EAAE;wBAC/B,OAAO;qBACV;oBAED,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;oBAC/D,IAAI,CAAC,QAAQ,EAAE,CAAC;iBACnB;aACJ;iBACI;gBACD,IAAI,CAAC,QAAQ,EAAE,CAAC;aACnB;SACJ;KACJ;IAED,QAAQ;QACJ,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;QACjD,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;QAC9D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACxB,UAAU,CAAC;gBACP,IAAI,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;gBAChF,IAAI,SAAS,EAAE;oBACX,SAAS,CAAC,KAAK,EAAE,CAAC;iBACrB;aACJ,EAAE,EAAE,CAAC,CAAC;SACV,CAAC,CAAC;KACN;IAED,gBAAgB;QACZ,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;QAC/D,IAAI,CAAC,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC;KACxC;IAGD,SAAS,CAAC,KAAoB;QAC1B,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;;YAElB,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE;gBACrB,IAAI,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,EAAE;oBAC9B,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;oBAC/D,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACxB,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;iBACvE;gBAED,KAAK,CAAC,cAAc,EAAE,CAAC;aAC1B;;iBAGI,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE;gBAC1B,IAAI,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,EAAE;oBAC9B,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;oBAC/D,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACxB,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;iBACrE;gBAED,KAAK,CAAC,cAAc,EAAE,CAAC;aAC1B;;iBAGI,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,EAAE;gBACzB,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAEpE,IAAI,KAAK,CAAC,QAAQ;oBACd,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;;oBAE/B,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;aAClC;SACJ;KACJ;IAED,QAAQ,CAAC,OAAO;QACZ,IAAI,OAAO,EAAE;YACT,IAAI,IAAI,GAAG,OAAO,CAAC;YACnB,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE;gBAC1D,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC;aAC7B;YAED,OAAO,IAAI,CAAC;SACf;aACI;YACD,OAAO,IAAI,CAAC;SACf;KACJ;IAED,kBAAkB,CAAC,KAAoB;QACnC,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,GAAG,GAAG,WAAW,CAAC,aAAa,CAAC;QACpC,IAAI,UAAU,GAAG,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC;QAE9D,IAAI,UAAU,EAAE;YACZ,UAAU,CAAC,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACpD,KAAK,CAAC,cAAc,EAAE,CAAC;SAC1B;KACJ;IAED,cAAc,CAAC,KAAoB;QAC/B,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,GAAG,GAAG,WAAW,CAAC,aAAa,CAAC;QACpC,IAAI,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;QAE1D,IAAI,UAAU,EAAE;YACZ,UAAU,CAAC,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACpD,KAAK,CAAC,cAAc,EAAE,CAAC;SAC1B;KACJ;IAED,0BAA0B,CAAC,IAAa;QACpC,IAAI,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC;QAE3C,IAAI,CAAC,QAAQ,EAAE;YACX,IAAI,WAAW,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,sBAAsB,GAAG,IAAI,CAAC;YACxF,IAAI,WAAW,EAAE;gBACb,QAAQ,GAAG,WAAW,CAAC,gBAAgB,CAAC;aAC3C;SACJ;QAED,IAAI,QAAQ,EAAE;YACV,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;gBACnD,OAAO,QAAQ,CAAC;;gBAEhB,OAAO,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;SACxD;aACI;YACD,OAAO,IAAI,CAAC;SACf;KACJ;IAED,sBAAsB,CAAC,IAAa;QAChC,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAEvC,IAAI,CAAC,QAAQ,EAAE;YACX,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAChF,IAAI,OAAO,EAAE;gBACT,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC;aACxC;SACJ;QAED,IAAI,QAAQ,EAAE;YACV,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;gBACnD,OAAO,QAAQ,CAAC;;gBAEhB,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;SACpD;aACI;YACD,OAAO,IAAI,CAAC;SACf;KACJ;IAED,SAAS;QACL,OAAO,IAAI,CAAC,wBAAwB,KAAK,IAAI,CAAC;KACjD;CAEJ,CAAA;;YAxK0B,SAAS;YAAa,UAAU;YAAe,MAAM;;AANjD;IAA1B,KAAK,CAAC,kBAAkB,CAAC;8CAAW;AAEL;IAA/B,KAAK,CAAC,uBAAuB,CAAC;+CAAY;AAElC;IAAR,KAAK,EAAE;kEAAmC;AAW3C;IADC,YAAY,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;+CAmBjC;AAuBD;IADC,YAAY,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC;iDAmCnC;AA5FQ,gBAAgB;IAH5B,SAAS,CAAC;QACP,QAAQ,EAAE,oBAAoB;KACjC,CAAC;GACW,gBAAgB,CAgL5B;IAaY,mBAAmB,GAAhC,MAAa,mBAAmB;IAQ5B,YAAmB,EAAa,EAAS,cAAgC;QAAtD,OAAE,GAAF,EAAE,CAAW;QAAS,mBAAc,GAAd,cAAc,CAAkB;KAAK;IAE9E,kBAAkB;QACd,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI;YACxB,QAAQ,IAAI,CAAC,OAAO,EAAE;gBAClB,KAAK,OAAO;oBACR,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACnC,MAAM;gBAEV,KAAK,QAAQ;oBACT,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACpC,MAAM;aACb;SACJ,CAAC,CAAC;KACN;CACJ,CAAA;;YAf0B,SAAS;YAAyB,gBAAgB;;AANzC;IAA/B,eAAe,CAAC,aAAa,CAAC;sDAAqC;AAF3D,mBAAmB;IAX/B,SAAS,CAAC;QACP,QAAQ,EAAE,uBAAuB;QACjC,QAAQ,EAAE;;;;;;;KAOT;KACJ,CAAC;GACW,mBAAmB,CAuB/B;IAQY,KAAK,GAAlB,MAAa,KAAK;IAId,YAAmB,EAAa,EAAS,EAAc,EAAS,IAAY;QAAzD,OAAE,GAAF,EAAE,CAAW;QAAS,OAAE,GAAF,EAAE,CAAY;QAAS,SAAI,GAAJ,IAAI,CAAQ;KAAI;IAGhF,SAAS,CAAC,KAAoB;QAC1B,QAAQ,KAAK,CAAC,KAAK;;YAEf,KAAK,EAAE;gBACH,IAAI,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC;gBACvD,IAAI,OAAO,EAAE;oBACT,OAAO,CAAC,KAAK,EAAE,CAAC;iBACnB;gBAED,KAAK,CAAC,cAAc,EAAE,CAAC;gBAC3B,MAAM;;YAGN,KAAK,EAAE;gBACH,IAAI,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,sBAAsB,CAAC;gBAC3D,IAAI,OAAO,EAAE;oBACT,OAAO,CAAC,KAAK,EAAE,CAAC;iBACnB;gBAED,KAAK,CAAC,cAAc,EAAE,CAAC;gBAC3B,MAAM;;YAGN,KAAK,EAAE;gBACH,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;oBAC5B,IAAI,CAAC,EAAE,CAAC,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;oBACjE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;oBAEnC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC;wBACxB,aAAa,EAAE,KAAK;wBACpB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;qBAC1B,CAAC,CAAC;oBAEH,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC;oBAChC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;oBAC/C,IAAI,CAAC,YAAY,EAAE,CAAC;iBACvB;gBACL,MAAM;;YAGN,KAAK,EAAE;gBACH,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;oBAC7B,IAAI,CAAC,EAAE,CAAC,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;oBACjE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;oBAElC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC;wBACtB,aAAa,EAAE,KAAK;wBACpB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;qBAC1B,CAAC,CAAC;oBAEH,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC;oBAChC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;oBAC/C,IAAI,CAAC,YAAY,EAAE,CAAC;iBACvB;gBACL,MAAM;SACT;KACJ;IAED,YAAY;QACR,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACxB,UAAU,CAAC;gBACP,IAAI,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;gBAClI,IAAI,GAAG,EAAE;oBACL,GAAG,CAAC,KAAK,EAAE,CAAC;iBACf;aACJ,EAAE,EAAE,CAAC,CAAC;SACV,CAAC,CAAC;KACN;CACJ,CAAA;;YAvE0B,SAAS;YAAa,UAAU;YAAe,MAAM;;AAF5D;IAAf,KAAK,CAAC,OAAO,CAAC;sCAAc;AAK7B;IADC,YAAY,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC;sCAyDnC;AA/DQ,KAAK;IANjB,SAAS,CAAC;QACP,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE;YACF,iBAAiB,EAAE,KAAK;SAC3B;KACJ,CAAC;GACW,KAAK,CA2EjB;IAWY,gBAAgB,GAA7B,MAAa,gBAAgB;IAIzB,YAAmB,EAAa;QAAb,OAAE,GAAF,EAAE,CAAW;KAAI;IAEpC,OAAO,CAAC,KAAY;QAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;QAEzD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC5B,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC;gBACtB,aAAa,EAAE,KAAK;gBACpB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;aAC1B,CAAC,CAAC;SACN;aACI;YACD,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC;gBACxB,aAAa,EAAE,KAAK;gBACpB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;aAC1B,CAAC,CAAC;SACN;QAED,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC;QAChC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAE/C,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;CACJ,CAAA;;YAvB0B,SAAS;;AAFvB;IAAR,KAAK,EAAE;iDAAc;AAFb,gBAAgB;IAT5B,SAAS,CAAC;QACP,QAAQ,EAAE,oBAAoB;QAC9B,QAAQ,EAAE;;;;;KAKT;KACJ,CAAC;GACW,gBAAgB,CA2B5B;IAOY,eAAe,GAA5B,MAAa,eAAe;CAAI,CAAA;AAAnB,eAAe;IAL3B,QAAQ,CAAC;QACN,OAAO,EAAE,CAAC,YAAY,EAAC,eAAe,CAAC;QACvC,OAAO,EAAE,CAAC,SAAS,EAAC,YAAY,EAAC,gBAAgB,EAAC,gBAAgB,EAAC,UAAU,EAAC,iBAAiB,EAAC,KAAK,EAAC,mBAAmB,EAAC,eAAe,EAAC,uBAAuB,EAAC,gBAAgB,EAAC,UAAU,EAAC,gBAAgB,EAAC,gBAAgB,EAAC,mBAAmB,CAAC;QACpP,YAAY,EAAE,CAAC,SAAS,EAAC,gBAAgB,EAAC,gBAAgB,EAAC,MAAM,EAAC,gBAAgB,EAAC,UAAU,EAAC,iBAAiB,EAAC,KAAK,EAAC,mBAAmB,EAAC,eAAe,EAAC,uBAAuB,EAAC,gBAAgB,EAAC,UAAU,EAAC,gBAAgB,EAAC,gBAAgB,EAAC,mBAAmB,CAAC;KACvQ,CAAC;GACW,eAAe,CAAI;;ACn0FhC;;GAEG;;;;"}