{"version":3,"file":"deja-js-component-tree-list.mjs","sources":["../../../../projects/deja-js/component/tree-list/tree-list.component.ts","../../../../projects/deja-js/component/tree-list/tree-list.component.html","../../../../projects/deja-js/component/tree-list/tree-list-scroll-event.ts","../../../../projects/deja-js/component/tree-list/index.ts","../../../../projects/deja-js/component/tree-list/deja-js-component-tree-list.ts"],"sourcesContent":["/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { BooleanInput, coerceBooleanProperty, coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { AfterContentInit, AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, HostBinding, Input, Optional, Output, Self, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { DejaChildValidatorDirective, DejaClipboardService, KeyCodes } from '@deja-js/component/core';\nimport { Position, Rect } from '@deja-js/component/core/graphics';\nimport { DejaItemComponent, DejaItemEvent, DejaItemsEvent, GroupingService, IFindItemResult, IItemBase, IItemTree, ItemListBase, ItemListService, IViewListResult, IViewPort, SortingService, ViewPortService } from '@deja-js/component/core/item-list';\nimport { IDejaDragContext, IDejaDragEvent, IDejaDropContext } from '@deja-js/component/dragdrop';\nimport { BehaviorSubject, combineLatestWith, debounceTime, filter, fromEvent, map, mergeWith, Observable, of, Subject, Subscription, switchMap, take, takeUntil, tap, timer } from 'rxjs';\n\nimport { DejaTreeListScrollEvent } from './tree-list-scroll-event';\n\n/** Composant de liste évoluée avec gestion de viewport et templating */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    providers: [ViewPortService],\n    selector: 'deja-tree-list',\n    styleUrls: [\n        './tree-list.component.scss'\n    ],\n    templateUrl: './tree-list.component.html'\n})\nexport class DejaTreeListComponent extends ItemListBase<unknown> implements AfterViewInit, AfterContentInit, ControlValueAccessor {\n    @ContentChildren(DejaItemComponent) public options: DejaItemComponent[];\n\n    /** Exécuté lorsque la scrollbar change de position. */\n    // eslint-disable-next-line @angular-eslint/no-output-native\n    @Output() public readonly scroll = new EventEmitter<DejaTreeListScrollEvent>();\n    /** Texte à afficher par default dans la zone de recherche */\n    @Input() public placeholder: string;\n    /** Texte affiché si aucune donnée n'est présente dans le tableau */\n    @Input() public nodataholder: string;\n    /** Correspond au ngModel du champ de filtrage ou recherche */\n    @Input() public query = '';\n    /** Permet de définir un template de ligne par binding */\n    @Input() public itemTemplateExternal: TemplateRef<unknown>;\n    /** Permet de définir un template de ligne parente par binding. */\n    @Input() public parentItemTemplateExternal: TemplateRef<unknown>;\n    /** Permet de définir un template pour le loader par binding. */\n    @Input() public loaderTemplateExternal: TemplateRef<unknown>;\n    /** Permet de définir un template d'entête de colonne par binding. */\n    @Input() public headerTemplateExternal: TemplateRef<unknown>;\n    /** Permet de définir un template comme prefixe de la zone de recherche par binding. */\n    @Input() public searchPrefixTemplateExternal: TemplateRef<unknown>;\n    /** Permet de définir un template comme suffixe de la zone de recherche par binding. */\n    @Input() public searchSuffixTemplateExternal: TemplateRef<unknown>;\n    /** Largeur des éléments par defaut si différent de 100% */\n    @Input() public itemsWidth: number = null;\n    /** Exécuté lorsque le déplacement d'une ligne est terminée. */\n    @Output() public readonly itemDragEnd = new EventEmitter<IDejaDragEvent>();\n    /** Exécuté lorsque le déplacement d'une ligne commence. */\n    @Output() public readonly itemDragStart = new EventEmitter<IDejaDragEvent>();\n    /** Exécuté lorsque l'utilisateur sélectionne ou désélectionne une ligne. */\n    @Output() public readonly selectedChange = new EventEmitter<DejaItemsEvent<unknown> | DejaItemEvent<unknown>>();\n    /** Exécuté lorsque le calcul du viewPort est executé. */\n    @Output() public readonly viewPortChanged = new EventEmitter<IViewPort>();\n\n    /** Internal use */\n    @ViewChild('inputelement') public input: ElementRef<HTMLInputElement>;\n\n    @HostBinding('attr.disabled') public _disabled: boolean = null;\n\n    // Templates\n    @ContentChild('itemTemplate') private itemTemplateInternal: TemplateRef<unknown>;\n    @ContentChild('parentItemTemplate') private parentItemTemplateInternal: TemplateRef<unknown>;\n    @ContentChild('loaderTemplate') private loaderTemplateInternal: TemplateRef<unknown>;\n    @ContentChild('headerTemplate') private headerTemplateInternal: TemplateRef<unknown>;\n    @ContentChild('searchPrefixTemplate') private searchPrefixTemplateInternal: TemplateRef<unknown>;\n    @ContentChild('searchSuffixTemplate') private searchSuffixTemplateInternal: TemplateRef<unknown>;\n\n    public setQuery$ = new Subject<string>();\n\n    private _keyboardNavigation = false;\n\n    // protected _items: IItemBase[]; In the base class, correspond to the model\n    private clickedItem: IItemBase<unknown>;\n    private rangeStartIndex = 0;\n    private filterExpression = '';\n    private _searchArea = false;\n    private _sortable = false;\n    private _itemsDraggable = false;\n    private hasCustomService = false;\n    private hasLoadingEvent = false;\n    private _modelIsValue = false;\n\n    private keyboardNavigation$ = new Subject<void>();\n\n    private mouseUp$sub: Subscription;\n\n    private clearFilterExpression$ = new BehaviorSubject<void>(null);\n    private writeValue$ = new Subject<unknown[] | unknown>();\n    private selectItems$ = new Subject<unknown[] | unknown>();\n    private contentInitialized$ = new Subject<boolean>();\n\n    /** Définit la longueur minimale de caractères dans le champ de recherche avant que la recherche ou le filtrage soient effectués */\n    // eslint-disable-next-line @angular-eslint/no-input-rename\n    @Input('min-search-length')\n    public set minSearchlength(value: NumberInput) {\n        this._minSearchLength = coerceNumberProperty(value);\n    }\n\n    public get minSearchlength(): NumberInput {\n        return this._minSearchLength;\n    }\n\n    public constructor(changeDetectorRef: ChangeDetectorRef, public viewPort: ViewPortService, public elementRef: ElementRef, @Self() @Optional() public control: NgControl, @Optional() private clipboardService: DejaClipboardService) {\n        super(changeDetectorRef, viewPort);\n\n        console.warn('@deja-js/component/deja-tree-list is deprecated, and will be removed in a further version. Please use @deja-js/component/v2/tree-list instead.');\n\n        if (this.control) {\n            this.control.valueAccessor = this;\n        }\n\n        this.clearFilterExpression$.pipe(\n            debounceTime(400),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => this.filterExpression = '');\n\n        this.keyboardNavigation$.pipe(\n            tap(() => this._keyboardNavigation = true),\n            debounceTime(1000),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => {\n            this._keyboardNavigation = false;\n            this.changeDetectorRef.markForCheck();\n        });\n\n        fromEvent<Event>(window, 'resize').pipe(\n            debounceTime(5),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => {\n            this.viewPort.deleteSizeCache();\n            this.viewPort.refresh();\n            this.changeDetectorRef.markForCheck();\n        });\n\n        this.setQuery$.pipe(\n            debounceTime(250),\n            switchMap(query => {\n                this.query = query;\n                this.setCurrentItem(undefined);\n                return this.calcViewList$();\n            }),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n\n        const selectItems$ = this.selectItems$.pipe(\n            combineLatestWith(this.contentInitialized$),\n            map(([value]) => value),\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n            map(value => this.getVirtualSelectedEntities(value)),\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n            map(value => (value instanceof Array && value) || (value && [value]) || [] as unknown[]),\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n            tap(values => super.setSelectedItems(values)));\n\n        const selectModels$ = this.writeValue$.pipe(\n            combineLatestWith(this.contentInitialized$),\n            map(([value]) => {\n                if (this.modelIsValue === undefined) {\n                    if (value instanceof Array) {\n                        const av = value || [];\n                        const modelType = av.length && typeof av[0];\n                        this.modelIsValue = modelType === 'string' || modelType === 'number';\n                    } else {\n                        const modelType = typeof value;\n                        this.modelIsValue = value === '' || modelType === 'string' || modelType === 'number';\n                    }\n                }\n                if (this.modelIsValue) {\n                    this.query = '';\n                }\n                return value;\n            }),\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n            map(value => this.getVirtualSelectedEntities(value)),\n            tap(value => super.setSelectedModels(!value || this._multiSelect || value instanceof Array ? value as unknown[] : [value])));\n\n        selectModels$.pipe(\n            mergeWith(selectItems$),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => {\n            super.getItemListService().ensureSelection();\n            this.changeDetectorRef.markForCheck();\n        });\n\n        this._viewPortChanged = this.viewPortChanged;\n\n        this.maxHeight = 0;\n    }\n\n    @ViewChild('listElement', { static: true })\n    public set listElememtRef(elem: ElementRef<HTMLElement>) {\n        this.listElement = elem.nativeElement;\n    }\n\n    public keyboardNavigation(): boolean {\n        return this._keyboardNavigation;\n    }\n\n    /** Affiche un barre de recherche au dessus de la liste. */\n    @Input()\n    public set searchArea(value: BooleanInput) {\n        this._searchArea = coerceBooleanProperty(value);\n    }\n\n    public get searchArea(): BooleanInput {\n        return this._searchArea || this.minSearchlength > 0;\n    }\n\n    /** Définit une valeur indiquant si en reactive form le model renvoyé doit être un obeject oue une valeur */\n    @Input()\n    public set modelIsValue(value: BooleanInput) {\n        this._modelIsValue = coerceBooleanProperty(value);\n    }\n\n    public get modelIsValue(): BooleanInput {\n        return this._modelIsValue;\n    }\n\n    /** Retourne ou définit une valeur indiquant si les lignes de la liste peuvent être déplacées manuelement par l'utilisateur */\n    @Input()\n    public set sortable(value: BooleanInput) {\n        this._sortable = coerceBooleanProperty(value);\n    }\n\n    public get sortable(): BooleanInput {\n        return this._sortable;\n    }\n\n    /** Retourne ou définit une valeur indiquant si les lignes peuvent être déplacées vers un autre composant */\n    @Input()\n    public set itemsDraggable(value: BooleanInput) {\n        this._itemsDraggable = coerceBooleanProperty(value);\n    }\n\n    public get itemsDraggable(): BooleanInput {\n        return this._itemsDraggable;\n    }\n\n    @Input()\n    /** Définit le nombre de lignes à sauter en cas de pression sur les touches PageUp ou PageDown */\n    public set pageSize(value: NumberInput) {\n        this._pageSize = coerceNumberProperty(value);\n    }\n\n    /** Retourne le nombre de lignes à sauter en cas de pression sur les touches PageUp ou PageDown */\n    public get pageSize(): NumberInput {\n        if (this._pageSize === 0) {\n            const vpRowHeight = this.getViewPortRowHeight();\n            const containerHeight = this.getMaxHeight() || this.listElement.clientHeight;\n            return Math.floor(containerHeight / vpRowHeight);\n        }\n\n        return this._pageSize;\n    }\n\n    /** Définit un texte de conseil en cas d'erreur de validation ou autre */\n    @Input()\n    public set hintLabel(value: string) {\n        this.setHintLabel(value);\n    }\n\n    /** Retourne un texte de conseil en cas d'erreur de validation ou autre */\n    public get hintLabel(): string {\n        return this._hintLabel;\n    }\n\n    /** Définit la hauteur d'une ligne pour le calcul du viewport en pixels (la valeur par défaut sera utilisée si aucune valeur n'est setté). */\n    @Input()\n    public set viewPortRowHeight(value: NumberInput) {\n        this.setViewPortRowHeight(value);\n    }\n\n    /**\n     * Les valeurs acceptées en paramètre se trouvent dans l'enum ViewportMode (disabled, constant, variable ou auto)\n     * Attention, une désactivation du viewport dégrade considérablement les performances de la liste et ne doit pas être activée si la liste\n     * est suceptible de contenir beaucoup d'éléments.\n     */\n    @Input()\n    public set viewportMode(mode: string) {\n        this.setViewportMode(mode);\n    }\n\n    /** Retourne le champ utilisé pour la liste des enfants d'un parent */\n    @Input()\n    public set childrenField(value: string) {\n        super.setChildrenField(value);\n    }\n\n    /** Définit le champ utilisé pour la liste des enfants d'un parent */\n    public get childrenField(): string {\n        return this._childrenField;\n    }\n\n    /** Définit le champ à utiliser comme valeur d'affichage. */\n    @Input()\n    public set textField(value: string) {\n        super.setTextField(value);\n    }\n\n    /** Définit le champ à utiliser comme valeur de comparaison. */\n    @Input()\n    public set valueField(value: string) {\n        super.setValueField(value);\n    }\n\n    /** Définit le champ à utiliser comme champ de recherche.\n     * Ce champ peut indiquer, un champ contenant une valeur, un texte indexé, ou une fonction.\n     */\n    @Input()\n    public set searchField(value: string) {\n        super.setSearchField(value);\n    }\n\n    /** Retourne le champ à utiliser comme champ de recherche.\n     * Ce champ peut indiquer, un champ contenant une valeur, un texte indexé, ou une fonction.\n     */\n    public get searchField(): string {\n        return this._searchField;\n    }\n\n    /** Définit la hauteur maximum avant que le composant affiche une scrollbar\n     * spécifier une grande valeur pour ne jamais afficher de scrollbar\n     * Spécifier 0 pour que le composant determine sa hauteur à partir du container\n     */\n    @Input()\n    public set maxHeight(value: NumberInput) {\n        super.setMaxHeight(value);\n    }\n\n    /** Retourne la hauteur maximum avant que le composant affiche une scrollbar\n     * spécifier une grande valeur pour ne jamais afficher de scrollbar\n     * Spécifier 0 pour que le composant determine sa hauteur à partir du container\n     */\n    public get maxHeight(): NumberInput {\n        return this.getMaxHeight();\n    }\n\n    /** Définit la ligne courant ou ligne active */\n    @Input()\n    public set currentItem(item: IItemBase<unknown>) {\n        super.setCurrentItem(item);\n        if (item) {\n            this.ensureItemVisible(item);\n        }\n    }\n\n    /** Retourne la ligne courant ou ligne active */\n    public get currentItem(): IItemBase<unknown> {\n        return super.getCurrentItem();\n    }\n\n    /** Retourne le nombre de niveau pour une liste hierarchique */\n    public get depthMax(): number {\n        return this._depthMax;\n    }\n\n    /** Définit une valeur indiquant si plusieurs lignes peuvent être sélectionées. */\n    @Input()\n    public set multiSelect(value: BooleanInput) {\n        super.setMultiSelect(coerceBooleanProperty(value));\n    }\n\n    /** Retourne une valeur indiquant si plusieurs lignes peuvent être sélectionées. */\n    public get multiSelect(): BooleanInput {\n        return this._multiSelect;\n    }\n\n    /** Définit la liste des éléments selectionés en mode multiselect */\n    @Input()\n    public set selectedItems(value: IItemBase<unknown>[]) {\n        if (value !== undefined) {\n            this.selectItems$.next(value);\n        }\n    }\n\n    /** Retourne la liste des éléments selectionés en mode multiselect */\n    public get selectedItems(): IItemBase<unknown>[] {\n        return super.getSelectedItems();\n    }\n\n    /** Définit l'élément selectioné en mode single select */\n    @Input()\n    public set selectedItem(value: unknown) {\n        if (value !== undefined) {\n            this.selectItems$.next(value);\n        }\n    }\n\n    /** Retourne l'éléments selectioné en mode single select */\n    public get selectedItem(): unknown {\n        const selectedItem = super.getSelectedItems();\n        return selectedItem?.[0];\n    }\n\n    /** Définit le model selectioné en mode single select */\n    @Input()\n    public set selectedModel(value: unknown) {\n        if (value !== undefined) {\n            this.writeValue(value);\n        }\n    }\n\n    /** Retourne le model selectioné en mode single select */\n    public get selectedModel(): unknown {\n        const selectedModel = super.getSelectedModels();\n        return selectedModel?.[0];\n    }\n\n    /** Définit la liste des models selectionés en mode multiselect */\n    @Input()\n    public set selectedModels(value: unknown[]) {\n        if (value !== undefined) {\n            this.writeValue(value);\n        }\n    }\n\n    /** Retourne la liste des models selectionés en mode multiselect */\n    public get selectedModels(): unknown[] {\n        return super.getSelectedModels();\n    }\n\n    /** Definit le service de liste utilisé par ce composant. Ce srevice permet de controller dynamiquement la liste, ou de faire du lazyloading. */\n    @Input()\n    public set itemListService(itemListService: ItemListService<unknown>) {\n        if (itemListService !== undefined) {\n            this.hasCustomService = true;\n            this.setItemListService(itemListService);\n            if (itemListService?.lastQuery) {\n                this.query = itemListService.lastQuery.toString();\n            }\n        }\n    }\n\n    /** Retourne le service de liste utilisé par ce composant. Ce srevice permet de controller dynamiquement la liste, ou de faire du lazyloading. */\n    public get itemListService(): ItemListService<unknown> {\n        return this.getItemListService();\n    }\n\n    /** Definit le service utilisé pour le tri de la liste */\n    @Input()\n    public set sortingService(value: SortingService) {\n        this.setSortingService(value);\n    }\n\n    /** Definit le service utilisé pour le regroupement de la liste */\n    @Input()\n    public set groupingService(value: GroupingService) {\n        this.setGroupingService(value);\n    }\n\n    /** Définit la liste des éléments */\n    // eslint-disable-next-line rxjs/finnish\n    @Input() public set items(items: IItemBase<unknown>[] | Promise<IItemBase<unknown>[]> | Observable<IItemBase<unknown>[]>) {\n        delete this.hintLabel;\n        super.setItems$(items).pipe(\n            switchMap(itms => {\n                if (this.minSearchlength > 0 && !this.query) {\n                    // Waiting for query\n                    this._itemList = [];\n                    this.changeDetectorRef.markForCheck();\n                    return of(itms);\n                } else {\n                    return this.calcViewList$().pipe(map(() => itms));\n                }\n            }),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n    }\n\n    /**\n     * Set a observable called before the list will be displayed\n     */\n    @Input()\n    public set loadingItems(fn: (query: string | RegExp, selectedItems: IItemBase<unknown>[]) => Observable<IItemBase<unknown>[]>) {\n        this.hasLoadingEvent = !!fn;\n        super.setLoadingItems(fn);\n    }\n\n    /**\n     * Set a promise or an observable called before an item selection\n     */\n    @Input()\n    public set selectingItem(fn: (item: IItemBase<unknown>) => Promise<IItemBase<unknown>> | Observable<IItemBase<unknown>>) {\n        super.setSelectingItem(fn);\n    }\n\n    /**\n     * Set a promise or an observable called before an item deselection\n     */\n    @Input()\n    public set unselectingItem(fn: (item: IItemBase<unknown>) => Promise<IItemBase<unknown>> | Observable<IItemBase<unknown>>) {\n        super.setUnselectingItem(fn);\n    }\n\n    /**\n     * Set a promise or an observable called before an item expand\n     */\n    @Input()\n    public set expandingItem(fn: (item: IItemTree<unknown>) => Promise<IItemTree<unknown>> | Observable<IItemTree<unknown>>) {\n        super.setExpandingItem(fn);\n    }\n\n    /**\n     * Set a promise or an observable called before an item collapse\n     */\n    @Input()\n    public set collapsingItem(fn: (item: IItemTree<unknown>) => Promise<IItemTree<unknown>> | Observable<IItemTree<unknown>>) {\n        super.setCollapsingItem(fn);\n    }\n\n    /** Définit la liste des éléments (tout type d'objet métier) */\n    // eslint-disable-next-line rxjs/finnish\n    @Input() public set models(items: unknown[] | Observable<unknown[]>) {\n        super.setModels$(items).pipe(\n            take(1),\n            switchMap(() => this.calcViewList$()),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n    }\n\n    /** Permet de désactiver la liste */\n    @Input()\n    public set disabled(value: BooleanInput) {\n        const disabled = coerceBooleanProperty(value);\n        this._disabled = disabled || null;\n        this.changeDetectorRef.markForCheck();\n    }\n\n    public get disabled(): BooleanInput {\n        return this._disabled;\n    }\n\n    /** Definit si le waiter doit être affiché dans la liste. */\n    @Input()\n    public set waiter(value: BooleanInput) {\n        this._waiter = coerceBooleanProperty(value);\n    }\n\n    /** Retourne si le waiter doit être affiché dans la liste. */\n    public get waiter(): BooleanInput {\n        return this._waiter;\n    }\n\n    @ViewChild(DejaChildValidatorDirective)\n    public set inputValidatorDirective(value: DejaChildValidatorDirective) {\n        if (value) {\n            value.parentControl = this.control;\n        }\n    }\n\n    public set currentItemIndex(value: number) {\n        super.setCurrentItemIndex(value);\n        this.changeDetectorRef.markForCheck();\n    }\n\n    public get currentItemIndex(): number {\n        return this.getCurrentItemIndex();\n    }\n\n    public get itemTemplate(): TemplateRef<unknown> {\n        return this.itemTemplateExternal || this.itemTemplateInternal;\n    }\n\n    public get parentItemTemplate(): TemplateRef<unknown> {\n        return this.parentItemTemplateExternal || this.parentItemTemplateInternal;\n    }\n\n    public get loaderTemplate(): TemplateRef<unknown> {\n        return this.loaderTemplateExternal || this.loaderTemplateInternal;\n    }\n\n    public get headerTemplate(): TemplateRef<unknown> {\n        return this.headerTemplateExternal || this.headerTemplateInternal;\n    }\n\n    public get searchPrefixTemplate(): TemplateRef<unknown> {\n        return this.searchPrefixTemplateExternal || this.searchPrefixTemplateInternal;\n    }\n\n    public get searchSuffixTemplate(): TemplateRef<unknown> {\n        return this.searchSuffixTemplateExternal || this.searchSuffixTemplateInternal;\n    }\n\n    // ************* ControlValueAccessor Implementation **************\n    public get value(): unknown {\n        return this._multiSelect ? this.selectedItems : this.selectedItem;\n    }\n\n    public set value(val: unknown) {\n        this.writeValue(val);\n        this.onChangeCallback(val);\n        this.onTouchedCallback();\n    }\n\n    public writeValue(value: IItemBase<unknown>[] | IItemBase<unknown>): void {\n        this.writeValue$.next(value);\n    }\n\n    public registerOnChange(fn: (_a: unknown) => void): void {\n        this.onChangeCallback = fn;\n    }\n\n    public registerOnTouched(fn: () => void): void {\n        this.onTouchedCallback = fn;\n    }\n\n    public setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n    }\n    // ************* End of ControlValueAccessor Implementation **************\n\n    /** Change l'état d'expansion de toute les lignes parentes */\n    public toggleAll$(collapsed?: boolean): Observable<IItemTree<unknown>[]> {\n        return super.toggleAll$(collapsed).pipe(\n            switchMap(items => this.calcViewList$().pipe(take(1), map(() => items))));\n    }\n\n    /** Change l'état d'expansion de toute les lignes parentes */\n    public toggleAll(collapsed?: boolean): void {\n        this.toggleAll$(collapsed).pipe(\n            take(1),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n    }\n\n    /** Positionne a scrollbar pour assurer que l'élément spécifié soit visible */\n    public ensureItemVisible(item: IItemBase<unknown> | number): void {\n        super.ensureItemVisible(item);\n    }\n\n    /** Efface le contenu de la liste */\n    public clearViewPort(): void {\n        super.clearViewPort();\n    }\n\n    public ngAfterContentInit(): void {\n        if (!this.items && this.options?.length) {\n            const selectedModels = [] as unknown[];\n            this.valueField = 'value';\n            this.textField = 'text';\n            const models = this.options.map(option => {\n                const model = {\n                    text: option.text,\n                    value: option.value\n                };\n                if (option.selected) {\n                    selectedModels.push(model);\n                }\n                return model;\n            });\n            this.models = models;\n            if (selectedModels.length) {\n                this.selectedModels = selectedModels;\n            }\n            if (models.length > 100) {\n                // eslint-disable-next-line no-debugger\n                debugger;\n                console.error('Select options with more than 100 items can have performance options. Please bind directly the items in code behind with items or models input.');\n            }\n        }\n\n        this.contentInitialized$.next(true);\n    }\n\n    public ngAfterViewInit(): void {\n        // FIXME Issue angular/issues/6005\n        // see http://stackoverflow.com/questions/34364880/expression-has-changed-after-it-was-checked\n        if (this._itemList.length === 0 && (this.hasCustomService || this.hasLoadingEvent)) {\n            timer(1).pipe(\n                take(1),\n                switchMap(() => this.calcViewList$()),\n                takeUntil(this.destroyed$)\n            ).subscribe();\n        }\n\n        fromEvent<Event>(this.listElement, 'scroll').pipe(\n            map(event => {\n                const target = event.target as HTMLElement;\n                const e = {\n                    originalEvent: event,\n                    scrollLeft: target.scrollLeft,\n                    scrollTop: target.scrollTop\n                } as DejaTreeListScrollEvent;\n\n                this.scroll.emit(e);\n                return target.scrollTop;\n            }),\n            takeUntil(this.destroyed$)\n        ).subscribe(scrollPos => this.viewPort.scrollPosition$.next(scrollPos));\n\n        let keyDown$ = fromEvent<KeyboardEvent>(this.listElement, 'keydown');\n        if (this.input) {\n            const inputKeyDown$ = fromEvent<KeyboardEvent>(this.input.nativeElement, 'keydown');\n            keyDown$ = keyDown$.pipe(\n                mergeWith(inputKeyDown$)\n            );\n        }\n\n        keyDown$.pipe(\n            filter(() => !this.disabled),\n            filter(event => {\n                const keyCode = event.code;\n                return keyCode === KeyCodes.Home ||\n                    keyCode === KeyCodes.End ||\n                    keyCode === KeyCodes.PageUp ||\n                    keyCode === KeyCodes.PageDown ||\n                    keyCode === KeyCodes.UpArrow ||\n                    keyCode === KeyCodes.DownArrow ||\n                    keyCode === KeyCodes.Space ||\n                    keyCode === KeyCodes.Enter;\n            }),\n            switchMap(event => this.ensureListCaches$().pipe(\n                switchMap(() => {\n                    if (!this.rowsCount) {\n                        return of(null);\n                    }\n\n                    // Set current item from index for keyboard features only\n                    const setCurrentIndex = (index: number): void => {\n                        this.currentItemIndex = index;\n                        this.ensureItemVisible(this.currentItemIndex);\n                        this.viewPort.refresh();\n                    };\n\n                    const currentIndex = this.rangeStartIndex >= 0 ? this.rangeStartIndex : this.rangeStartIndex = this.currentItemIndex;\n                    let upindex: number;\n                    let dindex: number;\n                    let uaindex: number;\n                    let daindex: number;\n                    let target: HTMLElement;\n                    let eitem: IItemTree<unknown>;\n                    let sitem: IItemTree<unknown>;\n\n                    switch (event.code) {\n                        case KeyCodes.Home:\n                            setCurrentIndex(0);\n                            if (event.shiftKey) {\n                                return this.selectRange$(currentIndex, 0);\n                            } else if (!event.ctrlKey) {\n                                this.rangeStartIndex = 0;\n                                return this.selectRange$(this.rangeStartIndex);\n                            } else {\n                                return of(-1);\n                            }\n\n                        case KeyCodes.End:\n                            setCurrentIndex(this.rowsCount - 1);\n                            if (event.shiftKey) {\n                                return this.selectRange$(currentIndex, this.rowsCount - 1);\n                            } else if (!event.ctrlKey) {\n                                this.rangeStartIndex = this.rowsCount - 1;\n                                return this.selectRange$(this.rangeStartIndex);\n                            } else {\n                                return of(-1);\n                            }\n\n                        case KeyCodes.PageUp:\n                            upindex = Math.max(0, this.currentItemIndex - this._pageSize);\n                            setCurrentIndex(upindex);\n                            if (event.shiftKey) {\n                                return this.selectRange$(currentIndex, upindex);\n                            } else if (!event.ctrlKey) {\n                                this.rangeStartIndex = upindex;\n                                return this.selectRange$(this.rangeStartIndex);\n                            } else {\n                                return of(-1);\n                            }\n\n                        case KeyCodes.PageDown:\n                            dindex = Math.min(this.rowsCount - 1, this.currentItemIndex + this._pageSize);\n                            setCurrentIndex(dindex);\n                            if (event.shiftKey) {\n                                return this.selectRange$(currentIndex, dindex);\n                            } else if (!event.ctrlKey) {\n                                this.rangeStartIndex = dindex;\n                                return this.selectRange$(this.rangeStartIndex);\n                            } else {\n                                return of(-1);\n                            }\n\n                        case KeyCodes.UpArrow:\n                            uaindex = Math.max(0, this.currentItemIndex - 1);\n                            if (uaindex !== -1) {\n                                setCurrentIndex(uaindex);\n                                if (event.shiftKey) {\n                                    return this.selectRange$(currentIndex, uaindex);\n                                } else if (!event.ctrlKey) {\n                                    this.rangeStartIndex = uaindex;\n                                    return this.selectRange$(this.rangeStartIndex);\n                                }\n                            }\n                            return of(-1);\n\n                        case KeyCodes.DownArrow:\n                            daindex = Math.min(this.rowsCount - 1, this.currentItemIndex + 1);\n                            if (daindex !== -1) {\n                                setCurrentIndex(daindex);\n                                if (event.shiftKey) {\n                                    return this.selectRange$(currentIndex, daindex);\n                                } else if (!event.ctrlKey) {\n                                    this.rangeStartIndex = daindex;\n                                    return this.selectRange$(this.rangeStartIndex);\n                                }\n                            }\n                            return of(-1);\n\n                        case KeyCodes.Space:\n                            target = event.target as HTMLElement;\n                            if (target.tagName === 'INPUT' && !event.ctrlKey && !event.shiftKey) {\n                                return of(null);\n                            }\n\n                            sitem = this.currentItem;\n                            if (sitem) {\n                                if (this.isCollapsible(sitem)) {\n                                    return this.toggleCollapse$(currentIndex, !sitem.collapsed);\n                                } else if (sitem.selected) {\n                                    return this.toggleSelect$([sitem], false);\n                                } else if (this.multiSelect && event.ctrlKey) {\n                                    return this.toggleSelect$([sitem], !sitem.selected);\n                                } else {\n                                    return this.unselectAll$().pipe(\n                                        switchMap(() => this.toggleSelect$([sitem], true))\n                                    );\n                                }\n                            }\n                            return of(-1);\n\n                        case KeyCodes.Enter:\n                            eitem = this.currentItem;\n                            if (eitem) {\n                                if (this.isCollapsible(eitem)) {\n                                    return this.toggleCollapse$(currentIndex, !eitem.collapsed);\n                                } else if (this.isSelectable(eitem)) {\n                                    return this.unselectAll$().pipe(\n                                        switchMap(() => this.toggleSelect$([eitem], true))\n                                    );\n                                }\n                            }\n                            return of(-1);\n\n                        default:\n                            return of(null);\n                    }\n                }),\n                map(continuePropagation => {\n                    if (continuePropagation !== null) {\n                        this.keyboardNavigation$.next();\n                        this.changeDetectorRef.markForCheck();\n                        event.preventDefault();\n                        return false;\n                    }\n                    return undefined;\n                })\n            )),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n\n        let keyUp$ = fromEvent<KeyboardEvent>(this.listElement, 'keyup');\n        if (this.input) {\n            const inputKeyup$ = fromEvent<KeyboardEvent>(this.input.nativeElement, 'keyup');\n            const inputDrop$ = fromEvent<KeyboardEvent>(this.input.nativeElement, 'drop');\n            keyUp$ = keyUp$.pipe(\n                mergeWith(inputKeyup$, inputDrop$)\n            );\n        }\n\n        // Ensure list cache\n        keyUp$.pipe(\n            filter(() => !this.disabled),\n            tap(() => {\n                if ((this.query || '').length < this.minSearchlength) {\n                    this._itemList = [];\n                    return;\n                }\n            }),\n            filter(event => {\n                const keyCode = event.code;\n                return keyCode >= KeyCodes.Key0 ||\n                    keyCode === KeyCodes.Backspace ||\n                    keyCode === KeyCodes.Space ||\n                    keyCode === KeyCodes.Delete;\n            }),\n            switchMap(event => {\n                if (!this.searchArea) {\n                    if ((/[a-zA-Z0-9]/).test(event.key)) {\n                        // Valid char\n                        this.clearFilterExpression$.next(null);\n\n                        // Search next\n                        this.filterExpression += event.key;\n                        const rg = new RegExp(`^${this.filterExpression}`, 'i');\n                        return this.findNextMatch$(item => {\n                            if (item && this.isSelectable(item)) {\n                                const label = this.getTextValue(item);\n                                if (rg.test(label)) {\n                                    return true;\n                                }\n                            }\n                            event.preventDefault();\n                            return false;\n                        }, this.currentItemIndex);\n                    }\n                } else {\n                    // Autocomplete, filter the list\n                    this.keyboardNavigation$.next();\n                }\n\n                return of(null as IFindItemResult<unknown>);\n            }),\n            filter(result => result?.index >= 0),\n            takeUntil(this.destroyed$)\n        ).subscribe(result => {\n            // Set current item from index for keyboard features only\n            this.currentItemIndex = result.index;\n            this.ensureItemVisible(this.currentItemIndex);\n        });\n\n        this.viewPort.element$.next(this.listElement);\n    }\n\n    public mousedown(e: MouseEvent): boolean {\n        if (this.mouseUp$sub) {\n            this.mouseUp$sub.unsubscribe();\n            this.mouseUp$sub = undefined;\n        }\n\n        if (this.disabled) {\n            return undefined;\n        }\n\n        const target = e.target as HTMLElement;\n        const itemIndex = this.getItemIndexFromHTMLElement(target);\n        if (itemIndex === undefined) {\n            return undefined;\n        }\n\n        const isExpandButton = (el: HTMLElement): boolean => el.id === 'expandbtn' || el.parentElement.id === 'expandbtn';\n\n        const item = this._itemList[itemIndex - this.vpStartRow];\n        this.clickedItem = item;\n\n        if ((!isExpandButton(target) || !this.isCollapsible(item)) && this.isSelectable(item) && (!e.ctrlKey || !this.multiSelect) && (e.button === 0 || !item.selected)) {\n            if (e.shiftKey && this.multiSelect) {\n                // Select all from current to clicked\n                this.selectRange$(itemIndex, this.currentItemIndex).pipe(\n                    take(1),\n                    takeUntil(this.destroyed$)\n                ).subscribe(() => this.changeDetectorRef.markForCheck());\n                return false;\n            } else if (!e.ctrlKey) {\n                if (!this.multiSelect && item.selected) {\n                    return undefined;\n                }\n\n                this.unselectAll$().pipe(\n                    take(1),\n                    switchMap(() => {\n                        this.currentItemIndex = itemIndex;\n                        return this.toggleSelect$([item], true);\n                    }),\n                    take(1),\n                    takeUntil(this.destroyed$)\n                ).subscribe(() => this.changeDetectorRef.markForCheck());\n            }\n        }\n\n        this.mouseUp$sub = fromEvent<MouseEvent>(this.listElement, 'mouseup').pipe(\n            take(1),\n            filter(() => !this.disabled),\n            switchMap(upevt => {\n                // Because .take(1)\n                this.mouseUp$sub = undefined;\n\n                const upTarget = upevt.target as HTMLElement;\n                const upIndex = this.getItemIndexFromHTMLElement(upTarget);\n                if (upIndex === undefined) {\n                    return of(null as number);\n                }\n\n                const upItem = this._itemList[upIndex - this.vpStartRow];\n                if (this.clickedItem && upItem !== this.clickedItem) {\n                    return of(null as number);\n                }\n\n                if (upevt.shiftKey) {\n                    return of(null as number);\n                }\n\n                if (upevt.button !== 0) {\n                    // Right click menu\n                    return of(null as number);\n                }\n\n                if (this.isCollapsible(upItem) && (isExpandButton(upTarget) || !this.isSelectable(upItem))) {\n                    const treeItem = upItem as unknown as IItemTree<unknown>;\n                    return this.toggleCollapse$(upIndex, !treeItem.collapsed).pipe(\n                        map(() => upIndex)\n                    );\n\n                } else if (upevt.ctrlKey) {\n                    if (this.multiSelect) {\n                        return this.toggleSelect$([upItem], !upItem.selected).pipe(\n                            map(() => upIndex)\n                        );\n                    } else {\n                        const o$ = this.selectedItem && this.selectedItem !== upItem ? this.toggleSelect$([this.selectedItem], false).pipe(switchMap(() => this.toggleSelect$([upItem], true))) : this.toggleSelect$([upItem], !upItem.selected);\n                        return o$.pipe(\n                            map(() => upIndex)\n                        );\n                    }\n                }\n\n                this.rangeStartIndex = -1;\n                return of(null as number);\n            }),\n            filter(currentIndex => currentIndex !== null),\n            takeUntil(this.destroyed$)\n        ).subscribe(currentIndex => {\n            this.currentItemIndex = currentIndex;\n            this.changeDetectorRef.markForCheck();\n        });\n\n        return undefined;\n    }\n\n    public getDragContext(index: number): IDejaDragContext {\n        if (!this.clipboardService || (!this.sortable && !this.itemsDraggable)) {\n            return null;\n        }\n\n        return {\n            dragendcallback: (event: IDejaDragEvent) => {\n                this.itemDragEnd.emit(event);\n                delete this._ddStartIndex;\n                delete this._ddTargetIndex;\n                this.calcViewList$().pipe(\n                    take(1),\n                    takeUntil(this.destroyed$)\n                ).subscribe(); // Comment this line to debug dragdrop\n            },\n            dragstartcallback: (event: IDejaDragEvent) => {\n                const targetIndex = this.getItemIndexFromHTMLElement(event.target as HTMLElement);\n                if (targetIndex === undefined) {\n                    return;\n                }\n                this._ddStartIndex = index;\n                event.dragObject = this._itemList[targetIndex - this.vpStartRow];\n                this.itemDragStart.emit(event);\n            },\n            object: {\n                index: index\n            }\n        } as IDejaDragContext;\n    }\n\n    public getDropContext(): IDejaDropContext {\n        if (!this.clipboardService || !this.sortable) {\n            return null;\n        }\n\n        const dragcallback = (event: IDejaDragEvent): void => {\n            if (this._ddStartIndex === undefined) {\n                return;\n            }\n\n            const targetIndex = this.getItemIndexFromHTMLElement(event.target as HTMLElement);\n            if (targetIndex === undefined) {\n                return;\n            }\n\n            // Faire calculer le target final en fonction de la hierarchie par le service\n            this.calcDragTargetIndex$(this._ddStartIndex, targetIndex).pipe(\n                switchMap(finalTarget => {\n                    if (finalTarget !== undefined && finalTarget !== this._ddTargetIndex) {\n                        this._ddTargetIndex = finalTarget;\n                        return this.calcViewList$().pipe(\n                            take(1),\n                            map(() => finalTarget));\n                    } else {\n                        return of(finalTarget);\n                    }\n                }),\n                takeUntil(this.destroyed$)\n            ).subscribe();\n\n            event.preventDefault();\n            return;\n        };\n\n        return {\n            dragentercallback: dragcallback,\n            dragovercallback: dragcallback,\n            dropcallback: (event: IDejaDragEvent) => {\n                delete this._ddStartIndex;\n                delete this._ddTargetIndex;\n                this.drop$().pipe(\n                    switchMap(() => this.calcViewList$().pipe(take(1))),\n                    takeUntil(this.destroyed$)\n                ).subscribe();\n                event.preventDefault();\n            }\n        } as IDejaDropContext;\n    }\n\n    public dragLeave(event: DragEvent): void {\n        const listRect = this.listElement.getBoundingClientRect();\n\n        const listBounds = Rect.fromLTRB(listRect.left,\n            listRect.top,\n            listRect.right,\n            listRect.bottom);\n\n        if (!listBounds.containsPoint(new Position(event.pageX, event.pageY))) {\n            this._ddTargetIndex = this._ddStartIndex;\n            this.calcViewList$().pipe(\n                take(1),\n                takeUntil(this.destroyed$)\n            ).subscribe();\n        }\n    }\n\n    public onSelectionChange(): void {\n        let outputEmitter = null;\n\n        let output = null;\n\n        if (this.multiSelect) {\n            const models = this.selectedModels as Record<string, unknown>[];\n\n            outputEmitter = {\n                items: this.selectedItems,\n                models: models\n            } as DejaItemsEvent<Record<string, unknown>>;\n\n            if (this.modelIsValue) {\n                const valueField = this.getValueField();\n                if (models.find(m => !!m[valueField])) {\n                    output = models.map(m => m[valueField] !== undefined ? m[valueField] : m);\n                }\n            } else {\n                output = models;\n            }\n        } else {\n            const model = this.selectedModel as Record<string, unknown>;\n\n            outputEmitter = {\n                item: this.selectedItems[0],\n                model: model\n            } as DejaItemEvent<Record<string, unknown>>;\n\n            if (this.modelIsValue) {\n                const valueField = this.getValueField();\n                output = model[valueField] !== undefined ? model[valueField] : model;\n            } else {\n                output = model;\n            }\n        }\n\n        this.onChangeCallback(output);\n        this.selectedChange.emit(outputEmitter);\n    }\n\n    public selectRange$(indexFrom: number, indexTo?: number): Observable<number> {\n        return super.selectRange$(indexFrom, indexTo).pipe(tap(selectedCount => {\n            if (selectedCount) {\n                // Raise event\n                this.onSelectionChange();\n            }\n            return selectedCount;\n        }), tap(() => this.changeDetectorRef.markForCheck()));\n    }\n\n    public toggleSelect$(items: IItemBase<unknown>[], state: boolean): Observable<IItemBase<unknown>[]> {\n        if (!this._multiSelect && !items[0].selected === !state) {\n            return of(items);\n        } else {\n            return super.toggleSelect$(items, state).pipe(\n                tap(() => {\n                    // Raise event\n                    this.onSelectionChange();\n                }));\n        }\n    }\n\n    public calcViewList$(): Observable<IViewListResult<unknown>> {\n        return super.calcViewList$(this.query).pipe(\n            tap(() => this.changeDetectorRef.markForCheck()));\n    }\n\n    public getItemClass(item: IItemTree<unknown>): string {\n        const classNames = ['listitem'] as string[];\n        if (item.className) {\n            classNames.push(item.className);\n        }\n        if (item.collapsing || item.expanding) {\n            classNames.push('hide');\n        }\n        if (item.depth < this.depthMax) {\n            classNames.push('parent');\n        }\n        if (item.collapsed) {\n            classNames.push('collapsed');\n        }\n        if (item.selected) {\n            classNames.push('selected');\n        }\n        if (!(item.selectable ?? true)) {\n            classNames.push('unselectable');\n        }\n        if (item.depth === this._depthMax && item.odd) {\n            classNames.push('odd');\n        }\n        return classNames.join(' ');\n    }\n\n    // NgModel implementation\n    public onTouchedCallback = (): void => undefined;\n    public onChangeCallback = (_a?: unknown): void => undefined;\n}\n","<div id=\"header\" *ngIf=\"searchArea\">\n    <mat-form-field deja-child-validator id=\"input\" *ngIf=\"searchArea\">\n        <input #inputelement type=\"text\" matInput tabindex=\"0\" [ngModel]=\"query\" [placeholder]=\"placeholder\" [disabled]=\"disabled\" (input)=\"setQuery$.next(model && model.value)\" #model=\"ngModel\">\n        <span *ngIf=\"searchPrefixTemplate\" matPrefix>\n\t\t\t<ng-template [ngTemplateOutlet]=\"searchPrefixTemplate\"></ng-template>\n\t\t</span>\n        <span *ngIf=\"searchSuffixTemplate\" matSuffix>\n\t\t\t<ng-template [ngTemplateOutlet]=\"searchSuffixTemplate\"></ng-template>\n\t\t</span>\n    </mat-form-field>\n</div>\n<div id=\"listheader\" *ngIf=\"headerTemplate\">\n    <ng-template [ngTemplateOutlet]=\"headerTemplate\"></ng-template>\n</div>\n<div [id]=\"listElementId\" #listElement class=\"deja-listcontainer\" [attr.itemscount]=\"itemList && itemList.length\" [attr.depth-max]=\"depthMax || null\" [attr.vp-rowheight]=\"getViewPortRowHeight()\" [style.max-height.px]=\"maxHeight || null\" tabindex=\"1\" [class.hasheader]=\"headerTemplate\" [class.dragover]=\"ddStartIndex !== undefined ? ddStartIndex : null\" [attr.keynav]=\"keyboardNavigation()\" (dragleave)=\"sortable ? dragLeave($event): null\" (mousedown)=\"mousedown($event)\" [deja-droppable]=\"getDropContext()\">\n    <div id=\"nodata-holder\" *ngIf=\"(!itemList || itemList.length === 0) && !waiter\">{{ nodataholder }}</div>\n    <div id=\"error-hint\" *ngIf=\"hintLabel\">{{ hintLabel }}</div>\n    <div *ngIf=\"vpBeforeHeight && !waiter\" [style.height.px]=\"vpBeforeHeight\"></div>\n    <ng-container *ngIf=\"!waiter\">\n        <div *ngFor=\"let item of treeItemList; let index = index\" #listitem [attr.class]=\"getItemClass(item)\" [attr.current]=\"(vpStartRow+index === currentItemIndex) || null\" [attr.depth]=\"depthMax ? item.depth : null\" [attr.id]=\"item.id || null\" [attr.flat]=\"vpStartRow + index\" [deja-draggable]=\"getDragContext(vpStartRow + index)\" [style.width.px]=\"itemsWidth\" [style.height.px]=\"getItemHeight(item)\">\n            <span id=\"expandbtn\">\n                <mat-icon *ngIf=\"item.$items?.length\">arrow_drop_down</mat-icon>\n            </span>\n\n            <ng-container *ngIf=\"(!item.$items || !parentItemTemplate) && (item.$items || !itemTemplate)\">{{ getTextValue(item) }}</ng-container>\n            <ng-container *ngIf=\"item.$items && parentItemTemplate\">\n                <ng-template [ngTemplateOutlet]=\"parentItemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item, query: query, flatindex: vpStartRow+index }\"></ng-template>\n            </ng-container>\n            <ng-container *ngIf=\"!item.$items && itemTemplate\">\n                <ng-template [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item, query: query, flatindex: vpStartRow+index }\"></ng-template>\n            </ng-container>\n        </div>\n    </ng-container>\n    <div *ngIf=\"vpAfterHeight && !waiter\" [style.height.px]=\"vpAfterHeight\"></div>\n    <deja-list-loader id=\"loader\" *ngIf=\"waiter && !loaderTemplate\"></deja-list-loader>\n    <ng-container *ngIf=\"waiter && loaderTemplate\">\n        <ng-template [ngTemplateOutlet]=\"loaderTemplate\"></ng-template>\n    </ng-container>\n</div>\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nexport class DejaTreeListScrollEvent {\n    public originalEvent: Event;\n    public scrollTop: number;\n    public scrollLeft: number;\n}\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { DejaChildValidatorModule, DejaTextMetricsModule } from '@deja-js/component/core';\nimport { DejaItemModule } from '@deja-js/component/core/item-list';\nimport { DejaDragDropModule } from '@deja-js/component/dragdrop';\nimport { DejaListLoaderModule } from '@deja-js/component/loaders';\n\nimport { DejaTreeListComponent } from './tree-list.component';\n\n@NgModule({\n    declarations: [\n        DejaTreeListComponent\n    ],\n    exports: [\n        DejaTreeListComponent\n    ],\n    imports: [\n        CommonModule,\n        DejaChildValidatorModule,\n        DejaDragDropModule,\n        DejaItemModule,\n        DejaListLoaderModule,\n        DejaTextMetricsModule,\n        FormsModule,\n        MatButtonModule,\n        MatCheckboxModule,\n        MatIconModule,\n        MatInputModule\n    ]\n})\nexport class DejaTreeListModule { }\n\nexport * from './tree-list-scroll-event';\nexport * from './tree-list.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;AAMG;AAaH;AAWM,MAAO,qBAAsB,SAAQ,YAAqB,CAAA;IAmF5D,WAAmB,CAAA,iBAAoC,EAAS,QAAyB,EAAS,UAAsB,EAA6B,OAAkB,EAAsB,gBAAsC,EAAA;AAC/N,QAAA,KAAK,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QADyB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAiB;QAAS,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QAA6B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAW;QAAsB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAsB;;;AA9EzM,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAA2B,CAAC;;QAM/D,IAAK,CAAA,KAAA,GAAG,EAAE,CAAC;;QAcX,IAAU,CAAA,UAAA,GAAW,IAAI,CAAC;;AAEhB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAkB,CAAC;;AAEjD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAkB,CAAC;;AAEnD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAoD,CAAC;;AAEtF,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAa,CAAC;QAKrC,IAAS,CAAA,SAAA,GAAY,IAAI,CAAC;AAUxD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAU,CAAC;QAEjC,IAAmB,CAAA,mBAAA,GAAG,KAAK,CAAC;QAI5B,IAAe,CAAA,eAAA,GAAG,CAAC,CAAC;QACpB,IAAgB,CAAA,gBAAA,GAAG,EAAE,CAAC;QACtB,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;QACpB,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;QAClB,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;QACxB,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;QACzB,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;QACxB,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;AAEtB,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,OAAO,EAAQ,CAAC;AAI1C,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,eAAe,CAAO,IAAI,CAAC,CAAC;AACzD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAuB,CAAC;AACjD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAuB,CAAC;AAClD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,OAAO,EAAW,CAAC;;AAwmC9C,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAY,SAAS,CAAC;AAC1C,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,EAAY,KAAW,SAAS,CAAC;AAzlCxD,QAAA,OAAO,CAAC,IAAI,CAAC,gJAAgJ,CAAC,CAAC;QAE/J,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;AACrC,SAAA;AAED,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAC5B,YAAY,CAAC,GAAG,CAAC,EACjB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;AAE9C,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CACzB,GAAG,CAAC,MAAM,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,EAC1C,YAAY,CAAC,IAAI,CAAC,EAClB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAK;AACb,YAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;AACjC,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAC1C,SAAC,CAAC,CAAC;QAEH,SAAS,CAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,IAAI,CACnC,YAAY,CAAC,CAAC,CAAC,EACf,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAK;AACb,YAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;AAChC,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAC1C,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CACf,YAAY,CAAC,GAAG,CAAC,EACjB,SAAS,CAAC,KAAK,IAAG;AACd,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,YAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AAC/B,YAAA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;AAChC,SAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,EAAE,CAAC;QAEd,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CACvC,iBAAiB,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAC3C,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;;QAEvB,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;;QAEpD,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAe,CAAC;;AAExF,QAAA,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAEnD,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACvC,iBAAiB,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAC3C,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAI;AACZ,YAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;gBACjC,IAAI,KAAK,YAAY,KAAK,EAAE;AACxB,oBAAA,MAAM,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC;oBACvB,MAAM,SAAS,GAAG,EAAE,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC5C,IAAI,CAAC,YAAY,GAAG,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,QAAQ,CAAC;AACxE,iBAAA;AAAM,qBAAA;AACH,oBAAA,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC;AAC/B,oBAAA,IAAI,CAAC,YAAY,GAAG,KAAK,KAAK,EAAE,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,QAAQ,CAAC;AACxF,iBAAA;AACJ,aAAA;YACD,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,gBAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AACnB,aAAA;AACD,YAAA,OAAO,KAAK,CAAC;AACjB,SAAC,CAAC;;QAEF,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,EACpD,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,IAAI,KAAK,YAAY,KAAK,GAAG,KAAkB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAEjI,QAAA,aAAa,CAAC,IAAI,CACd,SAAS,CAAC,YAAY,CAAC,EACvB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAK;AACb,YAAA,KAAK,CAAC,kBAAkB,EAAE,CAAC,eAAe,EAAE,CAAC;AAC7C,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAC1C,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC;AAE7C,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;KACtB;;;IA9FD,IACW,eAAe,CAAC,KAAkB,EAAA;AACzC,QAAA,IAAI,CAAC,gBAAgB,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;KACvD;AAED,IAAA,IAAW,eAAe,GAAA;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;KAChC;IAyFD,IACW,cAAc,CAAC,IAA6B,EAAA;AACnD,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC;KACzC;IAEM,kBAAkB,GAAA;QACrB,OAAO,IAAI,CAAC,mBAAmB,CAAC;KACnC;;IAGD,IACW,UAAU,CAAC,KAAmB,EAAA;AACrC,QAAA,IAAI,CAAC,WAAW,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;KACnD;AAED,IAAA,IAAW,UAAU,GAAA;QACjB,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;KACvD;;IAGD,IACW,YAAY,CAAC,KAAmB,EAAA;AACvC,QAAA,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;KACrD;AAED,IAAA,IAAW,YAAY,GAAA;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;;IAGD,IACW,QAAQ,CAAC,KAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;KACjD;AAED,IAAA,IAAW,QAAQ,GAAA;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;;IAGD,IACW,cAAc,CAAC,KAAmB,EAAA;AACzC,QAAA,IAAI,CAAC,eAAe,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;KACvD;AAED,IAAA,IAAW,cAAc,GAAA;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC;KAC/B;IAED,IAEW,QAAQ,CAAC,KAAkB,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;KAChD;;AAGD,IAAA,IAAW,QAAQ,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AACtB,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAChD,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;YAC7E,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,WAAW,CAAC,CAAC;AACpD,SAAA;QAED,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;;IAGD,IACW,SAAS,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;KAC5B;;AAGD,IAAA,IAAW,SAAS,GAAA;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;;IAGD,IACW,iBAAiB,CAAC,KAAkB,EAAA;AAC3C,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;KACpC;AAED;;;;AAIG;IACH,IACW,YAAY,CAAC,IAAY,EAAA;AAChC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KAC9B;;IAGD,IACW,aAAa,CAAC,KAAa,EAAA;AAClC,QAAA,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;KACjC;;AAGD,IAAA,IAAW,aAAa,GAAA;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;KAC9B;;IAGD,IACW,SAAS,CAAC,KAAa,EAAA;AAC9B,QAAA,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;KAC7B;;IAGD,IACW,UAAU,CAAC,KAAa,EAAA;AAC/B,QAAA,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KAC9B;AAED;;AAEG;IACH,IACW,WAAW,CAAC,KAAa,EAAA;AAChC,QAAA,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;KAC/B;AAED;;AAEG;AACH,IAAA,IAAW,WAAW,GAAA;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;KAC5B;AAED;;;AAGG;IACH,IACW,SAAS,CAAC,KAAkB,EAAA;AACnC,QAAA,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;KAC7B;AAED;;;AAGG;AACH,IAAA,IAAW,SAAS,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;KAC9B;;IAGD,IACW,WAAW,CAAC,IAAwB,EAAA;AAC3C,QAAA,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAC3B,QAAA,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAChC,SAAA;KACJ;;AAGD,IAAA,IAAW,WAAW,GAAA;AAClB,QAAA,OAAO,KAAK,CAAC,cAAc,EAAE,CAAC;KACjC;;AAGD,IAAA,IAAW,QAAQ,GAAA;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;;IAGD,IACW,WAAW,CAAC,KAAmB,EAAA;QACtC,KAAK,CAAC,cAAc,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;KACtD;;AAGD,IAAA,IAAW,WAAW,GAAA;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;KAC5B;;IAGD,IACW,aAAa,CAAC,KAA2B,EAAA;QAChD,IAAI,KAAK,KAAK,SAAS,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,SAAA;KACJ;;AAGD,IAAA,IAAW,aAAa,GAAA;AACpB,QAAA,OAAO,KAAK,CAAC,gBAAgB,EAAE,CAAC;KACnC;;IAGD,IACW,YAAY,CAAC,KAAc,EAAA;QAClC,IAAI,KAAK,KAAK,SAAS,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,SAAA;KACJ;;AAGD,IAAA,IAAW,YAAY,GAAA;AACnB,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;AAC9C,QAAA,OAAO,YAAY,GAAG,CAAC,CAAC,CAAC;KAC5B;;IAGD,IACW,aAAa,CAAC,KAAc,EAAA;QACnC,IAAI,KAAK,KAAK,SAAS,EAAE;AACrB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC1B,SAAA;KACJ;;AAGD,IAAA,IAAW,aAAa,GAAA;AACpB,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;AAChD,QAAA,OAAO,aAAa,GAAG,CAAC,CAAC,CAAC;KAC7B;;IAGD,IACW,cAAc,CAAC,KAAgB,EAAA;QACtC,IAAI,KAAK,KAAK,SAAS,EAAE;AACrB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC1B,SAAA;KACJ;;AAGD,IAAA,IAAW,cAAc,GAAA;AACrB,QAAA,OAAO,KAAK,CAAC,iBAAiB,EAAE,CAAC;KACpC;;IAGD,IACW,eAAe,CAAC,eAAyC,EAAA;QAChE,IAAI,eAAe,KAAK,SAAS,EAAE;AAC/B,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC7B,YAAA,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;YACzC,IAAI,eAAe,EAAE,SAAS,EAAE;gBAC5B,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;AACrD,aAAA;AACJ,SAAA;KACJ;;AAGD,IAAA,IAAW,eAAe,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;KACpC;;IAGD,IACW,cAAc,CAAC,KAAqB,EAAA;AAC3C,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;KACjC;;IAGD,IACW,eAAe,CAAC,KAAsB,EAAA;AAC7C,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;KAClC;;;IAID,IAAoB,KAAK,CAAC,KAA8F,EAAA;QACpH,OAAO,IAAI,CAAC,SAAS,CAAC;AACtB,QAAA,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CACvB,SAAS,CAAC,IAAI,IAAG;YACb,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;;AAEzC,gBAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACpB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AACtC,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AACnB,aAAA;AAAM,iBAAA;AACH,gBAAA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AACrD,aAAA;AACL,SAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,EAAE,CAAC;KACjB;AAED;;AAEG;IACH,IACW,YAAY,CAAC,EAAqG,EAAA;AACzH,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,EAAE,CAAC;AAC5B,QAAA,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;KAC7B;AAED;;AAEG;IACH,IACW,aAAa,CAAC,EAA8F,EAAA;AACnH,QAAA,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;KAC9B;AAED;;AAEG;IACH,IACW,eAAe,CAAC,EAA8F,EAAA;AACrH,QAAA,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;KAChC;AAED;;AAEG;IACH,IACW,aAAa,CAAC,EAA8F,EAAA;AACnH,QAAA,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;KAC9B;AAED;;AAEG;IACH,IACW,cAAc,CAAC,EAA8F,EAAA;AACpH,QAAA,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;KAC/B;;;IAID,IAAoB,MAAM,CAAC,KAAwC,EAAA;AAC/D,QAAA,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CACxB,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,EACrC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,EAAE,CAAC;KACjB;;IAGD,IACW,QAAQ,CAAC,KAAmB,EAAA;AACnC,QAAA,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,IAAI,IAAI,CAAC;AAClC,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACzC;AAED,IAAA,IAAW,QAAQ,GAAA;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;;IAGD,IACW,MAAM,CAAC,KAAmB,EAAA;AACjC,QAAA,IAAI,CAAC,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;KAC/C;;AAGD,IAAA,IAAW,MAAM,GAAA;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;IAED,IACW,uBAAuB,CAAC,KAAkC,EAAA;AACjE,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC;AACtC,SAAA;KACJ;IAED,IAAW,gBAAgB,CAAC,KAAa,EAAA;AACrC,QAAA,KAAK,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACzC;AAED,IAAA,IAAW,gBAAgB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;KACrC;AAED,IAAA,IAAW,YAAY,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC;KACjE;AAED,IAAA,IAAW,kBAAkB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,0BAA0B,IAAI,IAAI,CAAC,0BAA0B,CAAC;KAC7E;AAED,IAAA,IAAW,cAAc,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,sBAAsB,CAAC;KACrE;AAED,IAAA,IAAW,cAAc,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,sBAAsB,CAAC;KACrE;AAED,IAAA,IAAW,oBAAoB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,4BAA4B,IAAI,IAAI,CAAC,4BAA4B,CAAC;KACjF;AAED,IAAA,IAAW,oBAAoB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,4BAA4B,IAAI,IAAI,CAAC,4BAA4B,CAAC;KACjF;;AAGD,IAAA,IAAW,KAAK,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;KACrE;IAED,IAAW,KAAK,CAAC,GAAY,EAAA;AACzB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC5B;AAEM,IAAA,UAAU,CAAC,KAAgD,EAAA;AAC9D,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAChC;AAEM,IAAA,gBAAgB,CAAC,EAAyB,EAAA;AAC7C,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;KAC9B;AAEM,IAAA,iBAAiB,CAAC,EAAc,EAAA;AACnC,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;KAC/B;AAEM,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AACvC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;KAC9B;;;AAIM,IAAA,UAAU,CAAC,SAAmB,EAAA;AACjC,QAAA,OAAO,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CACnC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACjF;;AAGM,IAAA,SAAS,CAAC,SAAmB,EAAA;QAChC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CAC3B,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,EAAE,CAAC;KACjB;;AAGM,IAAA,iBAAiB,CAAC,IAAiC,EAAA;AACtD,QAAA,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;KACjC;;IAGM,aAAa,GAAA;QAChB,KAAK,CAAC,aAAa,EAAE,CAAC;KACzB;IAEM,kBAAkB,GAAA;QACrB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;YACrC,MAAM,cAAc,GAAG,EAAe,CAAC;AACvC,YAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;AAC1B,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAG;AACrC,gBAAA,MAAM,KAAK,GAAG;oBACV,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;iBACtB,CAAC;gBACF,IAAI,MAAM,CAAC,QAAQ,EAAE;AACjB,oBAAA,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,iBAAA;AACD,gBAAA,OAAO,KAAK,CAAC;AACjB,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,cAAc,CAAC,MAAM,EAAE;AACvB,gBAAA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;AACxC,aAAA;AACD,YAAA,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;;AAErB,gBAAA,SAAS;AACT,gBAAA,OAAO,CAAC,KAAK,CAAC,iJAAiJ,CAAC,CAAC;AACpK,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACvC;IAEM,eAAe,GAAA;;;AAGlB,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,KAAK,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE;AAChF,YAAA,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CACT,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,EACrC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,EAAE,CAAC;AACjB,SAAA;AAED,QAAA,SAAS,CAAQ,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,IAAI,CAC7C,GAAG,CAAC,KAAK,IAAG;AACR,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;AAC3C,YAAA,MAAM,CAAC,GAAG;AACN,gBAAA,aAAa,EAAE,KAAK;gBACpB,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;aACH,CAAC;AAE7B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,OAAO,MAAM,CAAC,SAAS,CAAC;SAC3B,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAExE,IAAI,QAAQ,GAAG,SAAS,CAAgB,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACrE,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,MAAM,aAAa,GAAG,SAAS,CAAgB,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YACpF,QAAQ,GAAG,QAAQ,CAAC,IAAI,CACpB,SAAS,CAAC,aAAa,CAAC,CAC3B,CAAC;AACL,SAAA;AAED,QAAA,QAAQ,CAAC,IAAI,CACT,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAC5B,MAAM,CAAC,KAAK,IAAG;AACX,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;AAC3B,YAAA,OAAO,OAAO,KAAK,QAAQ,CAAC,IAAI;gBAC5B,OAAO,KAAK,QAAQ,CAAC,GAAG;gBACxB,OAAO,KAAK,QAAQ,CAAC,MAAM;gBAC3B,OAAO,KAAK,QAAQ,CAAC,QAAQ;gBAC7B,OAAO,KAAK,QAAQ,CAAC,OAAO;gBAC5B,OAAO,KAAK,QAAQ,CAAC,SAAS;gBAC9B,OAAO,KAAK,QAAQ,CAAC,KAAK;AAC1B,gBAAA,OAAO,KAAK,QAAQ,CAAC,KAAK,CAAC;AACnC,SAAC,CAAC,EACF,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAC5C,SAAS,CAAC,MAAK;AACX,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AACnB,aAAA;;AAGD,YAAA,MAAM,eAAe,GAAG,CAAC,KAAa,KAAU;AAC5C,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC9B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC9C,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC5B,aAAC,CAAC;YAEF,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;AACrH,YAAA,IAAI,OAAe,CAAC;AACpB,YAAA,IAAI,MAAc,CAAC;AACnB,YAAA,IAAI,OAAe,CAAC;AACpB,YAAA,IAAI,OAAe,CAAC;AACpB,YAAA,IAAI,MAAmB,CAAC;AACxB,YAAA,IAAI,KAAyB,CAAC;AAC9B,YAAA,IAAI,KAAyB,CAAC;YAE9B,QAAQ,KAAK,CAAC,IAAI;gBACd,KAAK,QAAQ,CAAC,IAAI;oBACd,eAAe,CAAC,CAAC,CAAC,CAAC;oBACnB,IAAI,KAAK,CAAC,QAAQ,EAAE;wBAChB,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;AAC7C,qBAAA;AAAM,yBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACvB,wBAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;wBACzB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAClD,qBAAA;AAAM,yBAAA;AACH,wBAAA,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,qBAAA;gBAEL,KAAK,QAAQ,CAAC,GAAG;AACb,oBAAA,eAAe,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;oBACpC,IAAI,KAAK,CAAC,QAAQ,EAAE;AAChB,wBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AAC9D,qBAAA;AAAM,yBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;wBACvB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;wBAC1C,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAClD,qBAAA;AAAM,yBAAA;AACH,wBAAA,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,qBAAA;gBAEL,KAAK,QAAQ,CAAC,MAAM;AAChB,oBAAA,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC9D,eAAe,CAAC,OAAO,CAAC,CAAC;oBACzB,IAAI,KAAK,CAAC,QAAQ,EAAE;wBAChB,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AACnD,qBAAA;AAAM,yBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACvB,wBAAA,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;wBAC/B,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAClD,qBAAA;AAAM,yBAAA;AACH,wBAAA,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,qBAAA;gBAEL,KAAK,QAAQ,CAAC,QAAQ;AAClB,oBAAA,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC9E,eAAe,CAAC,MAAM,CAAC,CAAC;oBACxB,IAAI,KAAK,CAAC,QAAQ,EAAE;wBAChB,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AAClD,qBAAA;AAAM,yBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACvB,wBAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC;wBAC9B,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAClD,qBAAA;AAAM,yBAAA;AACH,wBAAA,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,qBAAA;gBAEL,KAAK,QAAQ,CAAC,OAAO;AACjB,oBAAA,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;AACjD,oBAAA,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE;wBAChB,eAAe,CAAC,OAAO,CAAC,CAAC;wBACzB,IAAI,KAAK,CAAC,QAAQ,EAAE;4BAChB,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AACnD,yBAAA;AAAM,6BAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACvB,4BAAA,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;4BAC/B,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAClD,yBAAA;AACJ,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAElB,KAAK,QAAQ,CAAC,SAAS;AACnB,oBAAA,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;AAClE,oBAAA,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE;wBAChB,eAAe,CAAC,OAAO,CAAC,CAAC;wBACzB,IAAI,KAAK,CAAC,QAAQ,EAAE;4BAChB,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AACnD,yBAAA;AAAM,6BAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACvB,4BAAA,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;4BAC/B,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAClD,yBAAA;AACJ,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAElB,KAAK,QAAQ,CAAC,KAAK;AACf,oBAAA,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;AACrC,oBAAA,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACjE,wBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AACnB,qBAAA;AAED,oBAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;AACzB,oBAAA,IAAI,KAAK,EAAE;AACP,wBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;4BAC3B,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC/D,yBAAA;6BAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;4BACvB,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AAC7C,yBAAA;AAAM,6BAAA,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,OAAO,EAAE;AAC1C,4BAAA,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACvD,yBAAA;AAAM,6BAAA;4BACH,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAC3B,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CACrD,CAAC;AACL,yBAAA;AACJ,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAElB,KAAK,QAAQ,CAAC,KAAK;AACf,oBAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;AACzB,oBAAA,IAAI,KAAK,EAAE;AACP,wBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;4BAC3B,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC/D,yBAAA;AAAM,6BAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;4BACjC,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAC3B,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CACrD,CAAC;AACL,yBAAA;AACJ,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAElB,gBAAA;AACI,oBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AACvB,aAAA;AACL,SAAC,CAAC,EACF,GAAG,CAAC,mBAAmB,IAAG;YACtB,IAAI,mBAAmB,KAAK,IAAI,EAAE;AAC9B,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;AAChC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;gBACtC,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,OAAO,KAAK,CAAC;AAChB,aAAA;AACD,YAAA,OAAO,SAAS,CAAC;AACrB,SAAC,CAAC,CACL,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,EAAE,CAAC;QAEd,IAAI,MAAM,GAAG,SAAS,CAAgB,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACjE,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,MAAM,WAAW,GAAG,SAAS,CAAgB,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AAChF,YAAA,MAAM,UAAU,GAAG,SAAS,CAAgB,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAC9E,YAAA,MAAM,GAAG,MAAM,CAAC,IAAI,CAChB,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,CACrC,CAAC;AACL,SAAA;;AAGD,QAAA,MAAM,CAAC,IAAI,CACP,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAC5B,GAAG,CAAC,MAAK;AACL,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;AAClD,gBAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;gBACpB,OAAO;AACV,aAAA;AACL,SAAC,CAAC,EACF,MAAM,CAAC,KAAK,IAAG;AACX,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;AAC3B,YAAA,OAAO,OAAO,IAAI,QAAQ,CAAC,IAAI;gBAC3B,OAAO,KAAK,QAAQ,CAAC,SAAS;gBAC9B,OAAO,KAAK,QAAQ,CAAC,KAAK;AAC1B,gBAAA,OAAO,KAAK,QAAQ,CAAC,MAAM,CAAC;AACpC,SAAC,CAAC,EACF,SAAS,CAAC,KAAK,IAAG;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBAClB,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;;AAEjC,oBAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAGvC,oBAAA,IAAI,CAAC,gBAAgB,IAAI,KAAK,CAAC,GAAG,CAAC;AACnC,oBAAA,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,gBAAgB,CAAA,CAAE,EAAE,GAAG,CAAC,CAAC;AACxD,oBAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,IAAG;wBAC9B,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;4BACjC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACtC,4BAAA,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAChB,gCAAA,OAAO,IAAI,CAAC;AACf,6BAAA;AACJ,yBAAA;wBACD,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,wBAAA,OAAO,KAAK,CAAC;AACjB,qBAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC7B,iBAAA;AACJ,aAAA;AAAM,iBAAA;;AAEH,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;AACnC,aAAA;AAED,YAAA,OAAO,EAAE,CAAC,IAAgC,CAAC,CAAC;SAC/C,CAAC,EACF,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,KAAK,IAAI,CAAC,CAAC,EACpC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAM,IAAG;;AAEjB,YAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC;AACrC,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAClD,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACjD;AAEM,IAAA,SAAS,CAAC,CAAa,EAAA;QAC1B,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;AAC/B,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;AAChC,SAAA;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,OAAO,SAAS,CAAC;AACpB,SAAA;AAED,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAqB,CAAC;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;QAC3D,IAAI,SAAS,KAAK,SAAS,EAAE;AACzB,YAAA,OAAO,SAAS,CAAC;AACpB,SAAA;QAED,MAAM,cAAc,GAAG,CAAC,EAAe,KAAc,EAAE,CAAC,EAAE,KAAK,WAAW,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,WAAW,CAAC;AAElH,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,IAAI,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC9J,YAAA,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;;AAEhC,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CACpD,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC;AACzD,gBAAA,OAAO,KAAK,CAAC;AAChB,aAAA;AAAM,iBAAA,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;gBACnB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE;AACpC,oBAAA,OAAO,SAAS,CAAC;AACpB,iBAAA;AAED,gBAAA,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CACpB,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,MAAK;AACX,oBAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;oBAClC,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;iBAC3C,CAAC,EACF,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC;AAC5D,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAa,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,IAAI,CACtE,IAAI,CAAC,CAAC,CAAC,EACP,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAC5B,SAAS,CAAC,KAAK,IAAG;;AAEd,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;AAE7B,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAqB,CAAC;YAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;YAC3D,IAAI,OAAO,KAAK,SAAS,EAAE;AACvB,gBAAA,OAAO,EAAE,CAAC,IAAc,CAAC,CAAC;AAC7B,aAAA;AAED,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YACzD,IAAI,IAAI,CAAC,WAAW,IAAI,MAAM,KAAK,IAAI,CAAC,WAAW,EAAE;AACjD,gBAAA,OAAO,EAAE,CAAC,IAAc,CAAC,CAAC;AAC7B,aAAA;YAED,IAAI,KAAK,CAAC,QAAQ,EAAE;AAChB,gBAAA,OAAO,EAAE,CAAC,IAAc,CAAC,CAAC;AAC7B,aAAA;AAED,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;AAEpB,gBAAA,OAAO,EAAE,CAAC,IAAc,CAAC,CAAC;AAC7B,aAAA;YAED,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE;gBACxF,MAAM,QAAQ,GAAG,MAAuC,CAAC;gBACzD,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAC1D,GAAG,CAAC,MAAM,OAAO,CAAC,CACrB,CAAC;AAEL,aAAA;iBAAM,IAAI,KAAK,CAAC,OAAO,EAAE;gBACtB,IAAI,IAAI,CAAC,WAAW,EAAE;oBAClB,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CACtD,GAAG,CAAC,MAAM,OAAO,CAAC,CACrB,CAAC;AACL,iBAAA;AAAM,qBAAA;AACH,oBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACzN,oBAAA,OAAO,EAAE,CAAC,IAAI,CACV,GAAG,CAAC,MAAM,OAAO,CAAC,CACrB,CAAC;AACL,iBAAA;AACJ,aAAA;AAED,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;AAC1B,YAAA,OAAO,EAAE,CAAC,IAAc,CAAC,CAAC;SAC7B,CAAC,EACF,MAAM,CAAC,YAAY,IAAI,YAAY,KAAK,IAAI,CAAC,EAC7C,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,YAAY,IAAG;AACvB,YAAA,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC;AACrC,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAC1C,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,SAAS,CAAC;KACpB;AAEM,IAAA,cAAc,CAAC,KAAa,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;AACpE,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;QAED,OAAO;AACH,YAAA,eAAe,EAAE,CAAC,KAAqB,KAAI;AACvC,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC7B,OAAO,IAAI,CAAC,aAAa,CAAC;gBAC1B,OAAO,IAAI,CAAC,cAAc,CAAC;gBAC3B,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CACrB,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,EAAE,CAAC;aACjB;AACD,YAAA,iBAAiB,EAAE,CAAC,KAAqB,KAAI;gBACzC,MAAM,WAAW,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,MAAqB,CAAC,CAAC;gBAClF,IAAI,WAAW,KAAK,SAAS,EAAE;oBAC3B,OAAO;AACV,iBAAA;AACD,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC3B,gBAAA,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;AACjE,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAClC;AACD,YAAA,MAAM,EAAE;AACJ,gBAAA,KAAK,EAAE,KAAK;AACf,aAAA;SACgB,CAAC;KACzB;IAEM,cAAc,GAAA;QACjB,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC1C,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AAED,QAAA,MAAM,YAAY,GAAG,CAAC,KAAqB,KAAU;AACjD,YAAA,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;gBAClC,OAAO;AACV,aAAA;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,MAAqB,CAAC,CAAC;YAClF,IAAI,WAAW,KAAK,SAAS,EAAE;gBAC3B,OAAO;AACV,aAAA;;AAGD,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAC3D,SAAS,CAAC,WAAW,IAAG;gBACpB,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI,CAAC,cAAc,EAAE;AAClE,oBAAA,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC;oBAClC,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAC5B,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC;AAC/B,iBAAA;AAAM,qBAAA;AACH,oBAAA,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC;AAC1B,iBAAA;AACL,aAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,EAAE,CAAC;YAEd,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO;AACX,SAAC,CAAC;QAEF,OAAO;AACH,YAAA,iBAAiB,EAAE,YAAY;AAC/B,YAAA,gBAAgB,EAAE,YAAY;AAC9B,YAAA,YAAY,EAAE,CAAC,KAAqB,KAAI;gBACpC,OAAO,IAAI,CAAC,aAAa,CAAC;gBAC1B,OAAO,IAAI,CAAC,cAAc,CAAC;AAC3B,gBAAA,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CACb,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EACnD,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,EAAE,CAAC;gBACd,KAAK,CAAC,cAAc,EAAE,CAAC;aAC1B;SACgB,CAAC;KACzB;AAEM,IAAA,SAAS,CAAC,KAAgB,EAAA;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC;QAE1D,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAC1C,QAAQ,CAAC,GAAG,EACZ,QAAQ,CAAC,KAAK,EACd,QAAQ,CAAC,MAAM,CAAC,CAAC;AAErB,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;AACnE,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC;YACzC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CACrB,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,EAAE,CAAC;AACjB,SAAA;KACJ;IAEM,iBAAiB,GAAA;QACpB,IAAI,aAAa,GAAG,IAAI,CAAC;QAEzB,IAAI,MAAM,GAAG,IAAI,CAAC;QAElB,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAA2C,CAAC;AAEhE,YAAA,aAAa,GAAG;gBACZ,KAAK,EAAE,IAAI,CAAC,aAAa;AACzB,gBAAA,MAAM,EAAE,MAAM;aAC0B,CAAC;YAE7C,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACxC,gBAAA,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE;oBACnC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,SAAS,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7E,iBAAA;AACJ,aAAA;AAAM,iBAAA;gBACH,MAAM,GAAG,MAAM,CAAC;AACnB,aAAA;AACJ,SAAA;AAAM,aAAA;AACH,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAwC,CAAC;AAE5D,YAAA,aAAa,GAAG;AACZ,gBAAA,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC3B,gBAAA,KAAK,EAAE,KAAK;aAC2B,CAAC;YAE5C,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACxC,gBAAA,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;AACxE,aAAA;AAAM,iBAAA;gBACH,MAAM,GAAG,KAAK,CAAC;AAClB,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KAC3C;IAEM,YAAY,CAAC,SAAiB,EAAE,OAAgB,EAAA;AACnD,QAAA,OAAO,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,IAAG;AACnE,YAAA,IAAI,aAAa,EAAE;;gBAEf,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC5B,aAAA;AACD,YAAA,OAAO,aAAa,CAAC;AACzB,SAAC,CAAC,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;KACzD;IAEM,aAAa,CAAC,KAA2B,EAAE,KAAc,EAAA;AAC5D,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,KAAK,EAAE;AACrD,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;AACpB,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CACzC,GAAG,CAAC,MAAK;;gBAEL,IAAI,CAAC,iBAAiB,EAAE,CAAC;aAC5B,CAAC,CAAC,CAAC;AACX,SAAA;KACJ;IAEM,aAAa,GAAA;QAChB,OAAO,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CACvC,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;KACzD;AAEM,IAAA,YAAY,CAAC,IAAwB,EAAA;AACxC,QAAA,MAAM,UAAU,GAAG,CAAC,UAAU,CAAa,CAAC;QAC5C,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACnC,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,EAAE;AACnC,YAAA,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3B,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC5B,YAAA,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7B,SAAA;QACD,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAChC,SAAA;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC/B,SAAA;QACD,IAAI,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,EAAE;AAC5B,YAAA,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACnC,SAAA;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;AAC3C,YAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,SAAA;AACD,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC/B;;kHA3qCQ,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sGAArB,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,OAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,4BAAA,EAAA,8BAAA,EAAA,4BAAA,EAAA,8BAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,CAAA,mBAAA,EAAA,iBAAA,CAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,SAAA,EAPnB,CAAC,eAAe,CAAC,gtBAQX,iBAAiB,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA2gBvB,2BAA2B,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1iB1C,ktGAuCA,EAAA,MAAA,EAAA,CAAA,qmKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FDTa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAVjC,SAAS;sCACW,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAC1B,CAAC,eAAe,CAAC,EAAA,QAAA,EAClB,gBAAgB,EAAA,QAAA,EAAA,ktGAAA,EAAA,MAAA,EAAA,CAAA,qmKAAA,CAAA,EAAA,CAAA;;0BAyFiG,IAAI;;0BAAI,QAAQ;;0BAA+B,QAAQ;4CAlFvI,OAAO,EAAA,CAAA;sBAAjD,eAAe;uBAAC,iBAAiB,CAAA;gBAIR,MAAM,EAAA,CAAA;sBAA/B,MAAM;gBAES,WAAW,EAAA,CAAA;sBAA1B,KAAK;gBAEU,YAAY,EAAA,CAAA;sBAA3B,KAAK;gBAEU,KAAK,EAAA,CAAA;sBAApB,KAAK;gBAEU,oBAAoB,EAAA,CAAA;sBAAnC,KAAK;gBAEU,0BAA0B,EAAA,CAAA;sBAAzC,KAAK;gBAEU,sBAAsB,EAAA,CAAA;sBAArC,KAAK;gBAEU,sBAAsB,EAAA,CAAA;sBAArC,KAAK;gBAEU,4BAA4B,EAAA,CAAA;sBAA3C,KAAK;gBAEU,4BAA4B,EAAA,CAAA;sBAA3C,KAAK;gBAEU,UAAU,EAAA,CAAA;sBAAzB,KAAK;gBAEoB,WAAW,EAAA,CAAA;sBAApC,MAAM;gBAEmB,aAAa,EAAA,CAAA;sBAAtC,MAAM;gBAEmB,cAAc,EAAA,CAAA;sBAAvC,MAAM;gBAEmB,eAAe,EAAA,CAAA;sBAAxC,MAAM;gBAG2B,KAAK,EAAA,CAAA;sBAAtC,SAAS;uBAAC,cAAc,CAAA;gBAEY,SAAS,EAAA,CAAA;sBAA7C,WAAW;uBAAC,eAAe,CAAA;gBAGU,oBAAoB,EAAA,CAAA;sBAAzD,YAAY;uBAAC,cAAc,CAAA;gBACgB,0BAA0B,EAAA,CAAA;sBAArE,YAAY;uBAAC,oBAAoB,CAAA;gBACM,sBAAsB,EAAA,CAAA;sBAA7D,YAAY;uBAAC,gBAAgB,CAAA;gBACU,sBAAsB,EAAA,CAAA;sBAA7D,YAAY;uBAAC,gBAAgB,CAAA;gBACgB,4BAA4B,EAAA,CAAA;sBAAzE,YAAY;uBAAC,sBAAsB,CAAA;gBACU,4BAA4B,EAAA,CAAA;sBAAzE,YAAY;uBAAC,sBAAsB,CAAA;gBA6BzB,eAAe,EAAA,CAAA;sBADzB,KAAK;uBAAC,mBAAmB,CAAA;gBAiGf,cAAc,EAAA,CAAA;sBADxB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAW/B,UAAU,EAAA,CAAA;sBADpB,KAAK;gBAWK,YAAY,EAAA,CAAA;sBADtB,KAAK;gBAWK,QAAQ,EAAA,CAAA;sBADlB,KAAK;gBAWK,cAAc,EAAA,CAAA;sBADxB,KAAK;gBAWK,QAAQ,EAAA,CAAA;sBAFlB,KAAK;gBAmBK,SAAS,EAAA,CAAA;sBADnB,KAAK;gBAYK,iBAAiB,EAAA,CAAA;sBAD3B,KAAK;gBAWK,YAAY,EAAA,CAAA;sBADtB,KAAK;gBAOK,aAAa,EAAA,CAAA;sBADvB,KAAK;gBAYK,SAAS,EAAA,CAAA;sBADnB,KAAK;gBAOK,UAAU,EAAA,CAAA;sBADpB,KAAK;gBASK,WAAW,EAAA,CAAA;sBADrB,KAAK;gBAiBK,SAAS,EAAA,CAAA;sBADnB,KAAK;gBAeK,WAAW,EAAA,CAAA;sBADrB,KAAK;gBAoBK,WAAW,EAAA,CAAA;sBADrB,KAAK;gBAYK,aAAa,EAAA,CAAA;sBADvB,KAAK;gBAcK,YAAY,EAAA,CAAA;sBADtB,KAAK;gBAeK,aAAa,EAAA,CAAA;sBADvB,KAAK;gBAeK,cAAc,EAAA,CAAA;sBADxB,KAAK;gBAcK,eAAe,EAAA,CAAA;sBADzB,KAAK;gBAkBK,cAAc,EAAA,CAAA;sBADxB,KAAK;gBAOK,eAAe,EAAA,CAAA;sBADzB,KAAK;gBAOc,KAAK,EAAA,CAAA;sBAAxB,KAAK;gBAqBK,YAAY,EAAA,CAAA;sBADtB,KAAK;gBAUK,aAAa,EAAA,CAAA;sBADvB,KAAK;gBASK,eAAe,EAAA,CAAA;sBADzB,KAAK;gBASK,aAAa,EAAA,CAAA;sBADvB,KAAK;gBASK,cAAc,EAAA,CAAA;sBADxB,KAAK;gBAOc,MAAM,EAAA,CAAA;sBAAzB,KAAK;gBAUK,QAAQ,EAAA,CAAA;sBADlB,KAAK;gBAaK,MAAM,EAAA,CAAA;sBADhB,KAAK;gBAWK,uBAAuB,EAAA,CAAA;sBADjC,SAAS;uBAAC,2BAA2B,CAAA;;;AE1iB1C;;;;;;AAMG;MAEU,uBAAuB,CAAA;AAInC;;ACZD;;;;;;AAMG;MAqCU,kBAAkB,CAAA;;+GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAlB,kBAAkB,EAAA,YAAA,EAAA,CAnBvB,qBAAqB,CAAA,EAAA,OAAA,EAAA,CAMrB,YAAY;QACZ,wBAAwB;QACxB,kBAAkB;QAClB,cAAc;QACd,oBAAoB;QACpB,qBAAqB;QACrB,WAAW;QACX,eAAe;QACf,iBAAiB;QACjB,aAAa;AACb,QAAA,cAAc,aAbd,qBAAqB,CAAA,EAAA,CAAA,CAAA;AAgBhB,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,YAbvB,YAAY;QACZ,wBAAwB;QACxB,kBAAkB;QAClB,cAAc;QACd,oBAAoB;QACpB,qBAAqB;QACrB,WAAW;QACX,eAAe;QACf,iBAAiB;QACjB,aAAa;QACb,cAAc,CAAA,EAAA,CAAA,CAAA;2FAGT,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBArB9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE;wBACV,qBAAqB;AACxB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,qBAAqB;AACxB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,wBAAwB;wBACxB,kBAAkB;wBAClB,cAAc;wBACd,oBAAoB;wBACpB,qBAAqB;wBACrB,WAAW;wBACX,eAAe;wBACf,iBAAiB;wBACjB,aAAa;wBACb,cAAc;AACjB,qBAAA;AACJ,iBAAA,CAAA;;;AC1CD;;AAEG;;;;"}