{"version":3,"file":"igniteui-angular-combo.mjs","sources":["../../../projects/igniteui-angular/combo/src/combo/combo.api.ts","../../../projects/igniteui-angular/combo/src/combo/combo-item.component.ts","../../../projects/igniteui-angular/combo/src/combo/combo-item.component.html","../../../projects/igniteui-angular/combo/src/combo/combo.directives.ts","../../../projects/igniteui-angular/combo/src/combo/combo.common.ts","../../../projects/igniteui-angular/combo/src/combo/combo-add-item.component.ts","../../../projects/igniteui-angular/combo/src/combo/combo-dropdown.component.ts","../../../projects/igniteui-angular/drop-down/src/drop-down/drop-down.component.html","../../../projects/igniteui-angular/combo/src/combo/combo.pipes.ts","../../../projects/igniteui-angular/combo/src/combo/combo.component.ts","../../../projects/igniteui-angular/combo/src/combo/combo.component.html","../../../projects/igniteui-angular/combo/src/combo/public_api.ts","../../../projects/igniteui-angular/combo/src/combo/combo.module.ts","../../../projects/igniteui-angular/combo/src/igniteui-angular-combo.ts"],"sourcesContent":["import { IgxComboBase } from './combo.common';\nimport { Injectable } from '@angular/core';\n\n/**\n * @hidden\n */\n@Injectable()\nexport class IgxComboAPIService {\n    public disableTransitions = false;\n    protected combo: IgxComboBase;\n\n    public get valueKey() {\n        return this.combo.valueKey !== null && this.combo.valueKey !== undefined ? this.combo.valueKey : null;\n    }\n\n    public get item_focusable(): boolean {\n        return false;\n    }\n    public get isRemote(): boolean {\n        return this.combo.isRemote;\n    }\n\n    public get comboID(): string {\n        return this.combo.id;\n    }\n\n    public register(combo: IgxComboBase) {\n        this.combo = combo;\n    }\n\n    public clear(): void {\n        this.combo = null;\n    }\n\n    public add_custom_item(): void {\n        if (!this.combo) {\n            return;\n        }\n        this.combo.addItemToCollection();\n    }\n\n    public set_selected_item(itemID: any, event?: Event): void {\n        const selected = this.combo.isItemSelected(itemID);\n        if (itemID === undefined) {\n            return;\n        }\n        if (!selected) {\n            this.combo.select([itemID], false, event);\n        } else {\n            this.combo.deselect([itemID], event);\n        }\n    }\n\n    public is_item_selected(itemID: any): boolean {\n        return this.combo.isItemSelected(itemID);\n    }\n}\n","import {\n    Component,\n    HostBinding,\n    Input,\n    booleanAttribute,\n    inject\n} from '@angular/core';\nimport { IgxComboAPIService } from './combo.api';\nimport { rem } from 'igniteui-angular/core';\nimport { IgxCheckboxComponent } from 'igniteui-angular/checkbox';\nimport { IgxDropDownItemComponent, Navigate } from 'igniteui-angular/drop-down';\n\n/** @hidden */\n@Component({\n    selector: 'igx-combo-item',\n    templateUrl: 'combo-item.component.html',\n    imports: [IgxCheckboxComponent]\n})\nexport class IgxComboItemComponent extends IgxDropDownItemComponent {\n    protected comboAPI = inject(IgxComboAPIService);\n\n\n    /**\n     * Gets the height of a list item\n     *\n     * @hidden\n     */\n    @Input()\n    public itemHeight: string | number = '';\n\n    /** @hidden @internal */\n    @HostBinding('style.height.rem')\n    public get _itemHeightToRem() {\n        if (this.itemHeight) {\n            return rem(this.itemHeight);\n        }\n    }\n\n    @HostBinding('attr.aria-label')\n    @Input()\n    public override get ariaLabel(): string {\n        const valueKey = this.comboAPI.valueKey;\n        return (valueKey !== null && this.value != null) ? this.value[valueKey] : this.value;\n    }\n\n    /** @hidden @internal */\n    @Input({ transform: booleanAttribute })\n    public singleMode: boolean;\n\n    /**\n     * @hidden\n     */\n    public override get itemID() {\n        const valueKey = this.comboAPI.valueKey;\n        return valueKey !== null ? this.value[valueKey] : this.value;\n    }\n\n    /**\n     * @hidden\n     */\n    public get comboID() {\n        return this.comboAPI.comboID;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get disableTransitions() {\n        return this.comboAPI.disableTransitions;\n    }\n\n    /**\n     * @hidden\n     */\n    public override get selected(): boolean {\n        return this.comboAPI.is_item_selected(this.itemID);\n    }\n\n    public override set selected(value: boolean) {\n        if (this.isHeader) {\n            return;\n        }\n        this._selected = value;\n    }\n\n    /**\n     * @hidden\n     */\n    public isVisible(direction: Navigate): boolean {\n        const rect = this.element.nativeElement.getBoundingClientRect();\n        const parentDiv = this.element.nativeElement.parentElement.parentElement.getBoundingClientRect();\n        if (direction === Navigate.Down) {\n            return rect.y + rect.height <= parentDiv.y + parentDiv.height;\n        }\n        return rect.y >= parentDiv.y;\n    }\n\n    public override clicked(event): void {\n        this.comboAPI.disableTransitions = false;\n        if (!this.isSelectable) {\n            return;\n        }\n        this.dropDown.navigateItem(this.index);\n        this.comboAPI.set_selected_item(this.itemID, event);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     * The event that is prevented is the click on the checkbox label element.\n     * That is the only visible element that a user can interact with.\n     * The click propagates to the host and the preventDefault is to stop it from\n     * switching focus to the input it's base on.\n     * The toggle happens in an internal handler in the drop-down on the next task queue cycle.\n     */\n    public disableCheck(event: MouseEvent) {\n        event.preventDefault();\n    }\n}\n","@if (!isHeader && !singleMode) {\n    <!-- checkbox should not allow changing its state from UI click (that's why it should be readonly=true), becasue when cancelling the selectionChange event in the combo, then checkbox will still change state.-->\n    <igx-checkbox [checked]=\"selected\" [readonly]=\"true\" [disableRipple]=\"true\" [disableTransitions]=\"disableTransitions\" [tabindex]=\"-1\" (click)=\"disableCheck($event)\" class=\"igx-combo__checkbox\"></igx-checkbox>\n}\n<span class=\"igx-drop-down__inner\"><ng-content></ng-content></span>\n","import { Directive } from '@angular/core';\n\n/**\n * Allows a custom element to be added at the beginning of the combo list.\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo>\n *   <ng-template igxComboHeader>\n *      <div class=\"header-class\">Custom header</div>\n *      <img src=\"\"/>\n *   </ng-template>\n * </igx-combo>\n */\n@Directive({\n    selector: '[igxComboHeader]',\n    standalone: true\n})\nexport class IgxComboHeaderDirective { }\n\n/**\n * Allows a custom element to be added at the end of the combo list.\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo>\n *   <ng-template igxComboFooter>\n *      <div class=\"footer-class\">Custom footer</div>\n *      <img src=\"\"/>\n *   </ng-template>\n * </igx-combo>\n */\n@Directive({\n    selector: '[igxComboFooter]',\n    standalone: true\n})\nexport class IgxComboFooterDirective { }\n\n/**\n * Allows the combo's items to be modified with a custom template\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo>\n *\t<ng-template igxComboItem let-display let-key=\"valueKey\">\n *\t\t<div class=\"item\">\n *\t\t\t<span class=\"state\">State: {{ display[key] }}</span>\n *\t \t\t<span class=\"region\">Region: {{ display.region }}</span>\n *\t \t</div>\n *\t </ng-template>\n  * </igx-combo>\n */\n@Directive({\n    selector: '[igxComboItem]',\n    standalone: true\n})\nexport class IgxComboItemDirective { }\n\n/**\n * Defines the custom template that will be displayed when the combo's list is empty\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n *  <igx-combo>\n *      <ng-template igxComboEmpty>\n *          <div class=\"combo--empty\">\n *              There are no items to display\n *          </div>\n *      </ng-template>\n *  </igx-combo>\n */\n@Directive({\n    selector: '[igxComboEmpty]',\n    standalone: true\n})\nexport class IgxComboEmptyDirective { }\n\n/**\n * Defines the custom template that will be used when rendering header items for groups in the combo's list\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n *  <igx-combo>\n *      <ng-template igxComboHeaderItem let-item let-key=\"groupKey\">\n *          <div class=\"custom-item--group\">Group header for {{ item[key] }}</div>\n *      </ng-template>\n *  </igx-combo>\n */\n@Directive({\n    selector: '[igxComboHeaderItem]',\n    standalone: true\n})\nexport class IgxComboHeaderItemDirective { }\n\n/**\n * Defines the custom template that will be used to display the `ADD` button\n *\n * @remarks To show the `ADD` button, the `allowCustomValues` option must be enabled\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo #combo>\n *      <ng-template igxComboAddItem>\n *          <button type=\"button\" class=\"combo__add-button\">\n *              Click to add item\n *          </button>\n *      </ng-template>\n *  </igx-combo>\n */\n@Directive({\n    selector: '[igxComboAddItem]',\n    standalone: true\n})\nexport class IgxComboAddItemDirective { }\n\n/**\n * The custom template that will be used when rendering the combo's toggle button\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n *  <igx-combo #combo>\n *      <ng-template igxComboToggleIcon let-collapsed>\n *          <igx-icon>{{ collapsed ? 'remove_circle' : 'remove_circle_outline'}}</igx-icon>\n *      </ng-template>\n *  </igx-combo>\n */\n@Directive({\n    selector: '[igxComboToggleIcon]',\n    standalone: true\n})\nexport class IgxComboToggleIconDirective { }\n\n/**\n * Defines the custom template that will be used when rendering the combo's clear icon\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n *  <igx-combo #combo>\n *      <ng-template igxComboClearIcon>\n *          <igx-icon>clear</igx-icon>\n *      </ng-template>\n *  </igx-combo>\n */\n@Directive({\n    selector: '[igxComboClearIcon]',\n    standalone: true\n})\nexport class IgxComboClearIconDirective { }\n","import {\n    AfterContentChecked,\n    AfterViewChecked,\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectorRef,\n    ContentChild,\n    ContentChildren,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    HostBinding,\n    InjectionToken,\n    Injector,\n    Input,\n    OnDestroy,\n    OnInit,\n    Output,\n    QueryList,\n    TemplateRef,\n    ViewChild,\n    DOCUMENT,\n    ViewChildren,\n    inject\n} from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NgControl } from '@angular/forms';\nimport { caseSensitive } from '@igniteui/material-icons-extended';\nimport { noop, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n    IgxSelectionAPIService,\n    SortingDirection,\n    CancelableBrowserEventArgs,\n    cloneArray,\n    IBaseCancelableBrowserEventArgs,\n    IBaseEventArgs,\n    rem,\n    AbsoluteScrollStrategy,\n    AutoPositionStrategy,\n    OverlaySettings,\n    ComboResourceStringsEN,\n    IComboResourceStrings,\n    getCurrentResourceStrings,\n    onResourceChangeHandle\n} from 'igniteui-angular/core';\nimport { IForOfState, IgxForOfDirective } from 'igniteui-angular/directives';\nimport { IgxIconService } from 'igniteui-angular/icon';\nimport { IGX_INPUT_GROUP_TYPE, IgxInputDirective, IgxInputGroupComponent, IgxInputGroupType, IgxInputState, IgxLabelDirective, IgxPrefixDirective, IgxSuffixDirective } from 'igniteui-angular/input-group';\nimport { IgxComboDropDownComponent } from './combo-dropdown.component';\nimport { IgxComboAPIService } from './combo.api';\nimport {\n    IgxComboAddItemDirective, IgxComboClearIconDirective, IgxComboEmptyDirective,\n    IgxComboFooterDirective, IgxComboHeaderDirective, IgxComboHeaderItemDirective, IgxComboItemDirective, IgxComboToggleIconDirective\n} from './combo.directives';\nimport { isEqual } from 'lodash-es';\nimport { IComboItemAdditionEvent, IComboSearchInputEventArgs } from './combo.component';\n\nexport const IGX_COMBO_COMPONENT = /*@__PURE__*/new InjectionToken<IgxComboBase>('IgxComboComponentToken');\n\n/** @hidden @internal TODO: Evaluate */\nexport interface IgxComboBase {\n    id: string;\n    data: any[] | null;\n    valueKey: string;\n    groupKey: string;\n    isRemote: boolean;\n    filteredData: any[] | null;\n    totalItemCount: number;\n    itemsMaxHeight: number;\n    itemHeight: number;\n    searchValue: string;\n    searchInput: ElementRef<HTMLInputElement>;\n    comboInput: ElementRef<HTMLInputElement>;\n    opened: EventEmitter<IBaseEventArgs>;\n    opening: EventEmitter<CancelableBrowserEventArgs>;\n    closing: EventEmitter<CancelableBrowserEventArgs>;\n    closed: EventEmitter<IBaseEventArgs>;\n    focusSearchInput(opening?: boolean): void;\n    triggerCheck(): void;\n    addItemToCollection(): void;\n    isAddButtonVisible(): boolean;\n    handleInputChange(event?: string): void;\n    isItemSelected(itemID: any): boolean;\n    select(item: any): void;\n    select(itemIDs: any[], clearSelection?: boolean, event?: Event): void;\n    deselect(...args: [] | [itemIDs: any[], event?: Event]): void;\n    setActiveDescendant(): void;\n}\n\nlet NEXT_ID = 0;\n\n\n/** @hidden @internal */\nexport const enum DataTypes {\n    EMPTY = 'empty',\n    PRIMITIVE = 'primitive',\n    COMPLEX = 'complex',\n    PRIMARYKEY = 'valueKey'\n}\n\n/** The filtering criteria to be applied on data search */\nexport interface IComboFilteringOptions {\n    /** Defines filtering case-sensitivity */\n    caseSensitive?: boolean;\n    /** Defines optional key to filter against complex list items. Default to displayKey if provided.*/\n    filteringKey?: string;\n}\n\n@Directive()\nexport abstract class IgxComboBaseDirective implements IgxComboBase, AfterViewChecked, OnInit,\n    AfterViewInit, AfterContentChecked, OnDestroy, ControlValueAccessor {\n    protected elementRef = inject(ElementRef);\n    protected cdr = inject(ChangeDetectorRef);\n    protected selectionService = inject(IgxSelectionAPIService);\n    protected comboAPI = inject(IgxComboAPIService);\n    public document = inject<Document>(DOCUMENT);\n    protected _inputGroupType = inject<IgxInputGroupType>(IGX_INPUT_GROUP_TYPE, { optional: true });\n    protected _injector = inject(Injector, { optional: true });\n    protected _iconService = inject(IgxIconService, { optional: true });\n\n    /**\n     * Defines whether the caseSensitive icon should be shown in the search input\n     *\n     * ```typescript\n     * // get\n     * let myComboShowSearchCaseIcon = this.combo.showSearchCaseIcon;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [showSearchCaseIcon]='true'></igx-combo>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public showSearchCaseIcon = false;\n\n     /**\n     * Enables/disables filtering in the list. The default is `false`.\n     */\n    @Input({ transform: booleanAttribute })\n    public get disableFiltering(): boolean {\n        return this._disableFiltering;\n    }\n    public set disableFiltering(value: boolean) {\n        this._disableFiltering = value;\n    }\n\n    /**\n     * Set custom overlay settings that control how the combo's list of items is displayed.\n     * Set:\n     * ```html\n     * <igx-combo [overlaySettings]=\"customOverlaySettings\"></igx-combo>\n     * ```\n     *\n     * ```typescript\n     *  const customSettings = { positionStrategy: { settings: { target: myTarget } } };\n     *  combo.overlaySettings = customSettings;\n     * ```\n     * Get any custom overlay settings used by the combo:\n     * ```typescript\n     *  const comboOverlaySettings: OverlaySettings = myCombo.overlaySettings;\n     * ```\n     */\n    @Input()\n    public overlaySettings: OverlaySettings = null;\n\n    /**\n     * Gets/gets combo id.\n     *\n     * ```typescript\n     * // get\n     * let id = this.combo.id;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [id]='combo1'></igx-combo>\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public get id(): string {\n        return this._id;\n    }\n\n    public set id(value: string) {\n        if (!value) {\n            return;\n        }\n        const selection = this.selectionService.get(this._id);\n        this.selectionService.clear(this._id);\n        this._id = value;\n        if (selection) {\n            this.selectionService.set(this._id, selection);\n        }\n    }\n\n    /**\n     * Sets the style width of the element\n     *\n     * ```typescript\n     * // get\n     * let myComboWidth = this.combo.width;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [width]='250px'></igx-combo>\n     * ```\n     */\n    @HostBinding('style.width')\n    @Input()\n    public width: string;\n\n    /**\n     * Controls whether custom values can be added to the collection\n     *\n     * ```typescript\n     * // get\n     * let comboAllowsCustomValues = this.combo.allowCustomValues;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [allowCustomValues]='true'></igx-combo>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public allowCustomValues = false;\n\n    /**\n     * Configures the drop down list height\n     *\n     * ```typescript\n     * // get\n     * let myComboItemsMaxHeight = this.combo.itemsMaxHeight;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [itemsMaxHeight]='320'></igx-combo>\n     * ```\n     */\n    @Input()\n    public get itemsMaxHeight(): number {\n        if (this.itemHeight && !this._itemsMaxHeight) {\n            return this.itemHeight * this.itemsInContainer;\n        }\n        return this._itemsMaxHeight;\n    }\n\n    public set itemsMaxHeight(val: number) {\n        this._itemsMaxHeight = val;\n    }\n\n    /** @hidden */\n    public get itemsMaxHeightInRem() {\n        if (this.itemsMaxHeight) {\n            return rem(this.itemsMaxHeight);\n        }\n    }\n\n    /**\n     * Configures the drop down list item height\n     *\n     * ```typescript\n     * // get\n     * let myComboItemHeight = this.combo.itemHeight;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [itemHeight]='32'></igx-combo>\n     * ```\n     */\n    @Input()\n    public get itemHeight(): number {\n        return this._itemHeight;\n    }\n\n    public set itemHeight(val: number) {\n        this._itemHeight = val;\n    }\n\n    /**\n     * Configures the drop down list width\n     *\n     * ```typescript\n     * // get\n     * let myComboItemsWidth = this.combo.itemsWidth;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [itemsWidth] = '\"180px\"'></igx-combo>\n     * ```\n     */\n    @Input()\n    public itemsWidth: string;\n\n    /**\n     * Defines the placeholder value for the combo value field\n     *\n     * ```typescript\n     * // get\n     * let myComboPlaceholder = this.combo.placeholder;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [placeholder]='newPlaceHolder'></igx-combo>\n     * ```\n     */\n    @Input()\n    public placeholder: string;\n\n    /**\n     * Combo data source.\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [data]='items'></igx-combo>\n     * ```\n     */\n    @Input()\n    public get data(): any[] | null {\n        return this._data;\n    }\n    public set data(val: any[] | null) {\n        // igxFor directive ignores undefined values\n        // if the combo uses simple data and filtering is applied\n        // an error will occur due to the mismatch of the length of the data\n        // this can occur during filtering for the igx-combo and\n        // during filtering & selection for the igx-simple-combo\n        // since the simple combo's input is both a container for the selection and a filter\n        this._data = (val) ? val.filter(x => x !== undefined) : [];\n    }\n\n    /**\n     * Determines which column in the data source is used to determine the value.\n     *\n     * ```typescript\n     * // get\n     * let myComboValueKey = this.combo.valueKey;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [valueKey]='myKey'></igx-combo>\n     * ```\n     */\n    @Input()\n    public valueKey: string = null;\n\n    @Input()\n    public set displayKey(val: string) {\n        this._displayKey = val;\n    }\n\n    /**\n     * Determines which column in the data source is used to determine the display value.\n     *\n     * ```typescript\n     * // get\n     * let myComboDisplayKey = this.combo.displayKey;\n     *\n     * // set\n     * this.combo.displayKey = 'val';\n     *\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [displayKey]='myDisplayKey'></igx-combo>\n     * ```\n     */\n    public get displayKey() {\n        return this._displayKey ? this._displayKey : this.valueKey;\n    }\n\n    /**\n     * The item property by which items should be grouped inside the items list. Not usable if data is not of type Object[].\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [groupKey]='newGroupKey'></igx-combo>\n     * ```\n     */\n    @Input()\n    public set groupKey(val: string) {\n        this._groupKey = val;\n    }\n\n    /**\n     * The item property by which items should be grouped inside the items list. Not usable if data is not of type Object[].\n     *\n     * ```typescript\n     * // get\n     * let currentGroupKey = this.combo.groupKey;\n     * ```\n     */\n    public get groupKey(): string {\n        return this._groupKey;\n    }\n\n    /**\n     * Sets groups sorting order.\n     *\n     * @example\n     * ```html\n     * <igx-combo [groupSortingDirection]=\"groupSortingDirection\"></igx-combo>\n     * ```\n     * ```typescript\n     * public groupSortingDirection = SortingDirection.Asc;\n     * ```\n     */\n    @Input()\n    public get groupSortingDirection(): SortingDirection {\n        return this._groupSortingDirection;\n    }\n    public set groupSortingDirection(val: SortingDirection) {\n        this._groupSortingDirection = val;\n    }\n\n    /**\n     * Gets/Sets the custom filtering function of the combo.\n     *\n     * @example\n     * ```html\n     *  <igx-comb #combo [data]=\"localData\" [filterFunction]=\"filterFunction\"></igx-combo>\n     * ```\n     */\n    @Input()\n    public filterFunction: (collection: any[], searchValue: any, filteringOptions: IComboFilteringOptions) => any[];\n\n    /**\n     * Sets aria-labelledby attribute value.\n     * ```html\n     * <igx-combo [ariaLabelledBy]=\"'label1'\">\n     * ```\n     */\n    @Input()\n    public ariaLabelledBy: string;\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-combo')\n    public cssClass = 'igx-combo'; // Independent of display density for the time being\n\n    /**\n     * Disables the combo. The default is `false`.\n     * ```html\n     * <igx-combo [disabled]=\"'true'\">\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public disabled = false;\n\n    /**\n     * Sets the visual combo type.\n     * The allowed values are `line`, `box`, `border` and `search`. The default is `box`.\n     * ```html\n     * <igx-combo [type]=\"'line'\">\n     * ```\n     */\n    @Input()\n    public get type(): IgxInputGroupType {\n        return this._type || this._inputGroupType || 'box';\n    }\n\n    public set type(val: IgxInputGroupType) {\n        this._type = val;\n    }\n\n    /**\n     * Gets/Sets the resource strings.\n     *\n     * @remarks\n     * By default it uses EN resources.\n     */\n    @Input()\n    public get resourceStrings(): IComboResourceStrings {\n        return this._resourceStrings || this._defaultResourceStrings;\n    }\n    public set resourceStrings(value: IComboResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    /**\n     * Emitted before the dropdown is opened\n     *\n     * ```html\n     * <igx-combo opening='handleOpening($event)'></igx-combo>\n     * ```\n     */\n    @Output()\n    public opening = new EventEmitter<IBaseCancelableBrowserEventArgs>();\n\n    /**\n     * Emitted after the dropdown is opened\n     *\n     * ```html\n     * <igx-combo (opened)='handleOpened($event)'></igx-combo>\n     * ```\n     */\n    @Output()\n    public opened = new EventEmitter<IBaseEventArgs>();\n\n    /**\n     * Emitted before the dropdown is closed\n     *\n     * ```html\n     * <igx-combo (closing)='handleClosing($event)'></igx-combo>\n     * ```\n     */\n    @Output()\n    public closing = new EventEmitter<IBaseCancelableBrowserEventArgs>();\n\n    /**\n     * Emitted after the dropdown is closed\n     *\n     * ```html\n     * <igx-combo (closed)='handleClosed($event)'></igx-combo>\n     * ```\n     */\n    @Output()\n    public closed = new EventEmitter<IBaseEventArgs>();\n\n    /**\n     * Emitted when an item is being added to the data collection\n     *\n     * ```html\n     * <igx-combo (addition)='handleAdditionEvent($event)'></igx-combo>\n     * ```\n     */\n    @Output()\n    public addition = new EventEmitter<IComboItemAdditionEvent>();\n\n    /**\n     * Emitted when the value of the search input changes (e.g. typing, pasting, clear, etc.)\n     *\n     * ```html\n     * <igx-combo (searchInputUpdate)='handleSearchInputEvent($event)'></igx-combo>\n     * ```\n     */\n    @Output()\n    public searchInputUpdate = new EventEmitter<IComboSearchInputEventArgs>();\n\n    /**\n     * Emitted when new chunk of data is loaded from the virtualization\n     *\n     * ```html\n     * <igx-combo (dataPreLoad)='handleDataPreloadEvent($event)'></igx-combo>\n     * ```\n     */\n    @Output()\n    public dataPreLoad = new EventEmitter<IForOfState>();\n\n    /**\n     * The custom template, if any, that should be used when rendering ITEMS in the combo list\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.combo.itemTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-combo #combo>\n     *      ...\n     *      <ng-template igxComboItem let-item let-key=\"valueKey\">\n     *          <div class=\"custom-item\">\n     *              <div class=\"custom-item__name\">{{ item[key] }}</div>\n     *              <div class=\"custom-item__cost\">{{ item.cost }}</div>\n     *          </div>\n     *      </ng-template>\n     *  </igx-combo>\n     * ```\n     */\n    @ContentChild(IgxComboItemDirective, { read: TemplateRef })\n    public itemTemplate: TemplateRef<any> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering the HEADER for the combo items list\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.combo.headerTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-combo #combo>\n     *      ...\n     *      <ng-template igxComboHeader>\n     *          <div class=\"combo__header\">\n     *              This is a custom header\n     *          </div>\n     *      </ng-template>\n     *  </igx-combo>\n     * ```\n     */\n    @ContentChild(IgxComboHeaderDirective, { read: TemplateRef })\n    public headerTemplate: TemplateRef<any> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering the FOOTER for the combo items list\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.combo.footerTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-combo #combo>\n     *      ...\n     *      <ng-template igxComboFooter>\n     *          <div class=\"combo__footer\">\n     *              This is a custom footer\n     *          </div>\n     *      </ng-template>\n     *  </igx-combo>\n     * ```\n     */\n    @ContentChild(IgxComboFooterDirective, { read: TemplateRef })\n    public footerTemplate: TemplateRef<any> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering HEADER ITEMS for groups in the combo list\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.combo.headerItemTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-combo #combo>\n     *      ...\n     *      <ng-template igxComboHeaderItem let-item let-key=\"groupKey\">\n     *          <div class=\"custom-item--group\">Group header for {{ item[key] }}</div>\n     *      </ng-template>\n     *  </igx-combo>\n     * ```\n     */\n    @ContentChild(IgxComboHeaderItemDirective, { read: TemplateRef })\n    public headerItemTemplate: TemplateRef<any> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering the ADD BUTTON in the combo drop down\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.combo.addItemTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-combo #combo>\n     *      ...\n     *      <ng-template igxComboAddItem>\n     *          <button type=\"button\" igxButton=\"contained\" class=\"combo__add-button\">\n     *              Click to add item\n     *          </button>\n     *      </ng-template>\n     *  </igx-combo>\n     * ```\n     */\n    @ContentChild(IgxComboAddItemDirective, { read: TemplateRef })\n    public addItemTemplate: TemplateRef<any> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering the ADD BUTTON in the combo drop down\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.combo.emptyTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-combo #combo>\n     *      ...\n     *      <ng-template igxComboEmpty>\n     *          <div class=\"combo--empty\">\n     *              There are no items to display\n     *          </div>\n     *      </ng-template>\n     *  </igx-combo>\n     * ```\n     */\n    @ContentChild(IgxComboEmptyDirective, { read: TemplateRef })\n    public emptyTemplate: TemplateRef<any> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering the combo TOGGLE(open/close) button\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.combo.toggleIconTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-combo #combo>\n     *      ...\n     *      <ng-template igxComboToggleIcon let-collapsed>\n     *          <igx-icon>{{ collapsed ? 'remove_circle' : 'remove_circle_outline'}}</igx-icon>\n     *      </ng-template>\n     *  </igx-combo>\n     * ```\n     */\n    @ContentChild(IgxComboToggleIconDirective, { read: TemplateRef })\n    public toggleIconTemplate: TemplateRef<any> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering the combo CLEAR button\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.combo.clearIconTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-combo #combo>\n     *      ...\n     *      <ng-template igxComboClearIcon>\n     *          <igx-icon>clear</igx-icon>\n     *      </ng-template>\n     *  </igx-combo>\n     * ```\n     */\n    @ContentChild(IgxComboClearIconDirective, { read: TemplateRef })\n    public clearIconTemplate: TemplateRef<any> = null;\n\n    /** @hidden @internal */\n    @ContentChild(forwardRef(() => IgxLabelDirective), { static: true }) public label: IgxLabelDirective;\n\n    /** @hidden @internal */\n    @ViewChild('inputGroup', { read: IgxInputGroupComponent, static: true })\n    public inputGroup: IgxInputGroupComponent;\n\n    /** @hidden @internal */\n    @ViewChild('comboInput', { read: IgxInputDirective, static: true })\n    public comboInput: IgxInputDirective;\n\n    /** @hidden @internal */\n    @ViewChild('searchInput')\n    public searchInput: ElementRef<HTMLInputElement> = null;\n\n    /** @hidden @internal */\n    @ViewChild(IgxForOfDirective, { static: true })\n    public virtualScrollContainer: IgxForOfDirective<any>;\n\n    @ViewChild(IgxForOfDirective, { read: IgxForOfDirective, static: true })\n    protected virtDir: IgxForOfDirective<any>;\n\n    @ViewChild('dropdownItemContainer', { static: true })\n    protected dropdownContainer: ElementRef = null;\n\n    @ViewChild('primitive', { read: TemplateRef, static: true })\n    protected primitiveTemplate: TemplateRef<any>;\n\n    @ViewChild('complex', { read: TemplateRef, static: true })\n    protected complexTemplate: TemplateRef<any>;\n\n    @ContentChildren(IgxPrefixDirective, { descendants: true })\n    protected prefixes: QueryList<IgxPrefixDirective>;\n\n    @ContentChildren(IgxSuffixDirective, { descendants: true })\n    protected suffixes: QueryList<IgxSuffixDirective>;\n\n    @ViewChildren(IgxSuffixDirective)\n    protected internalSuffixes: QueryList<IgxSuffixDirective>;\n\n    /** @hidden @internal */\n    public get searchValue(): string {\n        return this._searchValue;\n    }\n    public set searchValue(val: string) {\n        this.filterValue = val;\n        this._searchValue = val;\n    }\n\n    /** @hidden @internal */\n    public get isRemote() {\n        return this.totalItemCount > 0 &&\n            this.valueKey &&\n            this.dataType === DataTypes.COMPLEX;\n    }\n\n    /** @hidden @internal */\n    public get dataType(): string {\n        if (this.displayKey) {\n            return DataTypes.COMPLEX;\n        }\n        return DataTypes.PRIMITIVE;\n    }\n\n    /**\n     * Gets if control is valid, when used in a form\n     *\n     * ```typescript\n     * // get\n     * let valid = this.combo.valid;\n     * ```\n     */\n    public get valid(): IgxInputState {\n        return this._valid;\n    }\n\n    /**\n     * Sets if control is valid, when used in a form\n     *\n     * ```typescript\n     * // set\n     * this.combo.valid = IgxInputState.INVALID;\n     * ```\n     */\n    public set valid(valid: IgxInputState) {\n        this._valid = valid;\n        this.comboInput.valid = valid;\n    }\n\n    /**\n     * The value of the combo\n     *\n     * ```typescript\n     * // get\n     * let comboValue = this.combo.value;\n     * ```\n     */\n    public get value(): any[] {\n        return this._value;\n    }\n\n    /**\n     * The text displayed in the combo input\n     *\n     * ```typescript\n     * // get\n     * let comboDisplayValue = this.combo.displayValue;\n     * ```\n     */\n    public get displayValue(): string {\n        return this._displayValue;\n    }\n\n    /**\n     * Defines the current state of the virtualized data. It contains `startIndex` and `chunkSize`\n     *\n     * ```typescript\n     * // get\n     * let state = this.combo.virtualizationState;\n     * ```\n     */\n    public get virtualizationState(): IForOfState {\n        return this.virtDir.state;\n    }\n    /**\n     * Sets the current state of the virtualized data.\n     *\n     * ```typescript\n     * // set\n     * this.combo.virtualizationState(state);\n     * ```\n     */\n    public set virtualizationState(state: IForOfState) {\n        this.virtDir.state = state;\n    }\n\n    /**\n     * Gets drop down state.\n     *\n     * ```typescript\n     * let state = this.combo.collapsed;\n     * ```\n     */\n    public get collapsed(): boolean {\n        return this.dropdown.collapsed;\n    }\n\n    /**\n     * Gets total count of the virtual data items, when using remote service.\n     *\n     * ```typescript\n     * // get\n     * let count = this.combo.totalItemCount;\n     * ```\n     */\n    public get totalItemCount(): number {\n        return this.virtDir.totalItemCount;\n    }\n    /**\n     * Sets total count of the virtual data items, when using remote service.\n     *\n     * ```typescript\n     * // set\n     * this.combo.totalItemCount(remoteService.count);\n     * ```\n     */\n    public set totalItemCount(count: number) {\n        this.virtDir.totalItemCount = count;\n    }\n\n    /** @hidden @internal */\n    public get template(): TemplateRef<any> {\n        this._dataType = this.dataType;\n        if (this.itemTemplate) {\n            return this.itemTemplate;\n        }\n        if (this._dataType === DataTypes.COMPLEX) {\n            return this.complexTemplate;\n        }\n        return this.primitiveTemplate;\n    }\n\n    /** @hidden @internal */\n    public customValueFlag = true;\n    /** @hidden @internal */\n    public filterValue = '';\n    /** @hidden @internal */\n    public defaultFallbackGroup = 'Other';\n    /** @hidden @internal */\n    public activeDescendant = '';\n\n    /**\n     * Configures the way combo items will be filtered.\n     *\n     * ```typescript\n     * // get\n     * let myFilteringOptions = this.combo.filteringOptions;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [filteringOptions]='myFilteringOptions'></igx-combo>\n     * ```\n     */\n\n    @Input()\n    public get filteringOptions(): IComboFilteringOptions {\n        return this._filteringOptions || this._defaultFilteringOptions;\n    }\n    public set filteringOptions(value: IComboFilteringOptions) {\n        this._filteringOptions = value;\n    }\n\n    protected containerSize = undefined;\n    protected itemSize = undefined;\n    protected _data = [];\n    protected _value = [];\n    protected _displayValue = '';\n    protected _groupKey = '';\n    protected _searchValue = '';\n    protected _filteredData = [];\n    protected _displayKey: string;\n    protected _remoteSelection = {};\n    protected _resourceStrings: IComboResourceStrings = null;\n    protected _defaultResourceStrings = getCurrentResourceStrings(ComboResourceStringsEN);\n    protected _valid = IgxInputState.INITIAL;\n    protected ngControl: NgControl = null;\n    protected destroy$ = new Subject<void>();\n    protected _onTouchedCallback: () => void = noop;\n    protected _onChangeCallback: (_: any) => void = noop;\n    protected compareCollator = new Intl.Collator();\n    protected computedStyles;\n\n    private _id: string = `igx-combo-${NEXT_ID++}`;\n    private _disableFiltering = false;\n    private _type = null;\n    private _dataType = '';\n    private _itemHeight = undefined;\n    private _itemsMaxHeight = null;\n    private _overlaySettings: OverlaySettings;\n    private _groupSortingDirection: SortingDirection = SortingDirection.Asc;\n    private _filteringOptions: IComboFilteringOptions;\n    private _defaultFilteringOptions: IComboFilteringOptions = { caseSensitive: false };\n    private itemsInContainer = 10;\n\n    public abstract dropdown: IgxComboDropDownComponent;\n    public abstract selectionChanging: EventEmitter<any>;\n\n    constructor() {\n        onResourceChangeHandle(this.destroy$, () => {\n            this._defaultResourceStrings = getCurrentResourceStrings(ComboResourceStringsEN, false);\n        }, this);\n    }\n\n    public ngAfterViewChecked() {\n        const targetElement = this.inputGroup.element.nativeElement.querySelector('.igx-input-group__bundle') as HTMLElement;\n\n        this._overlaySettings = {\n            target: targetElement,\n            scrollStrategy: new AbsoluteScrollStrategy(),\n            positionStrategy: new AutoPositionStrategy(),\n            modal: false,\n            closeOnOutsideClick: true,\n            excludeFromOutsideClick: [targetElement]\n        };\n    }\n\n    /** @hidden @internal */\n    public ngAfterContentChecked(): void {\n        if (this.inputGroup && this.prefixes?.length > 0) {\n            this.inputGroup.prefixes = this.prefixes;\n        }\n\n        if (this.inputGroup) {\n            const suffixesArray = this.suffixes?.toArray() ?? [];\n            const internalSuffixesArray = this.internalSuffixes?.toArray() ?? [];\n            const mergedSuffixes = new QueryList<IgxSuffixDirective>();\n            mergedSuffixes.reset([\n                ...suffixesArray,\n                ...internalSuffixesArray\n            ]);\n            this.inputGroup.suffixes = mergedSuffixes;\n        }\n    }\n\n    /** @hidden @internal */\n    public ngOnInit() {\n        this.ngControl = this._injector.get<NgControl>(NgControl, null);\n        this.selectionService.set(this.id, new Set());\n        this._iconService?.addSvgIconFromText(caseSensitive.name, caseSensitive.value, 'imx-icons');\n        this.computedStyles = this.document.defaultView.getComputedStyle(this.elementRef.nativeElement);\n    }\n\n    /** @hidden @internal */\n    public ngAfterViewInit(): void {\n        this.filteredData = [...this.data];\n        if (this.ngControl) {\n            this.ngControl.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(this.onStatusChanged);\n            this.manageRequiredAsterisk();\n            this.cdr.detectChanges();\n        }\n        this.virtDir.chunkPreload.pipe(takeUntil(this.destroy$)).subscribe((e: IForOfState) => {\n            const eventArgs: IForOfState = Object.assign({}, e, { owner: this });\n            this.dataPreLoad.emit(eventArgs);\n        });\n        this.dropdown?.opening.subscribe((_args: IBaseCancelableBrowserEventArgs) => {\n            // calculate the container size and item size based on the sizes from the DOM\n            const dropdownContainerHeight = this.dropdownContainer.nativeElement.getBoundingClientRect().height;\n            if (dropdownContainerHeight) {\n                this.containerSize = parseFloat(dropdownContainerHeight);\n            }\n            if (this.dropdown.children?.first) {\n                this.itemSize = this.dropdown.children.first.element.nativeElement.getBoundingClientRect().height;\n            }\n        });\n    }\n\n    /** @hidden @internal */\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n        this.comboAPI.clear();\n        this.selectionService.delete(this.id);\n    }\n\n    /**\n     * A method that opens/closes the combo.\n     *\n     * ```html\n     * <button type=\"button\" (click)=\"combo.toggle()\">Toggle Combo</button>\n     * <igx-combo #combo></igx-combo>\n     * ```\n     */\n    public toggle(): void {\n        if (this.collapsed && this._displayValue.length !== 0) {\n            this.filterValue = '';\n            this.cdr.detectChanges();\n        }\n        const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);\n        this.dropdown.toggle(overlaySettings);\n        if (!this.collapsed) {\n            this.setActiveDescendant();\n        }\n    }\n\n    /**\n     * A method that opens the combo.\n     *\n     * ```html\n     * <button type=\"button\" (click)=\"combo.open()\">Open Combo</button>\n     * <igx-combo #combo></igx-combo>\n     * ```\n     */\n    public open(): void {\n        if (this.collapsed && this._displayValue.length !== 0) {\n            this.filterValue = '';\n            this.cdr.detectChanges();\n        }\n        const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);\n        this.dropdown.open(overlaySettings);\n        this.setActiveDescendant();\n    }\n\n    /**\n     * A method that closes the combo.\n     *\n     * ```html\n     * <button type=\"button\" (click)=\"combo.close()\">Close Combo</button>\n     * <igx-combo #combo></igx-combo>\n     * ```\n     */\n    public close(): void {\n        this.dropdown.close();\n    }\n\n    /**\n     * Triggers change detection on the combo view\n     */\n    public triggerCheck() {\n        this.cdr.detectChanges();\n    }\n\n    /**\n     * Get current selection state\n     *\n     * @returns Array of selected items\n     * ```typescript\n     * let mySelection = this.combo.selection;\n     * ```\n     */\n    public get selection(): any[] {\n        const serviceRef = this.selectionService.get(this.id);\n        return serviceRef ? this.convertKeysToItems(Array.from(serviceRef)) : [];\n    }\n\n    /**\n     * Returns if the specified itemID is selected\n     *\n     * @hidden\n     * @internal\n     */\n    public isItemSelected(item: any): boolean {\n        return this.selectionService.is_item_selected(this.id, item);\n    }\n\n    /** @hidden @internal */\n    public get toggleIcon(): string {\n        return this.dropdown.collapsed ? 'input_expand' : 'input_collapse';\n    }\n\n    /** @hidden @internal */\n    public addItemToCollection() {\n        if (!this.searchValue) {\n            return;\n        }\n        const addedItem = this.displayKey ? {\n            [this.valueKey]: this.searchValue,\n            [this.displayKey]: this.searchValue\n        } : this.searchValue;\n        if (this.groupKey) {\n            Object.assign(addedItem, { [this.groupKey]: this.defaultFallbackGroup });\n        }\n        // expose shallow copy instead of this.data in event args so this.data can't be mutated\n        const oldCollection = [...this.data];\n        const newCollection = [...this.data, addedItem];\n        const args: IComboItemAdditionEvent = {\n            oldCollection, addedItem, newCollection, owner: this, cancel: false\n        };\n        this.addition.emit(args);\n        if (args.cancel) {\n            return;\n        }\n        this.data.push(args.addedItem);\n        // trigger re-render\n        this.data = cloneArray(this.data);\n        this.select(this.valueKey !== null && this.valueKey !== undefined ?\n            [args.addedItem[this.valueKey]] : [args.addedItem], false);\n        this.customValueFlag = false;\n        this.searchInput?.nativeElement.focus();\n        this.dropdown.focusedItem = null;\n        this.virtDir.scrollTo(0);\n    }\n\n    /** @hidden @internal */\n    public isAddButtonVisible(): boolean {\n        // This should always return a boolean value. If this.searchValue was '', it returns '' instead of false;\n        return this.searchValue !== '' && this.customValueFlag;\n    }\n\n    /** @hidden @internal */\n    public handleInputChange(event?: any) {\n        if (event !== undefined) {\n            const args: IComboSearchInputEventArgs = {\n                searchText: typeof event === 'string' ? event : event.target.value,\n                owner: this,\n                cancel: false\n            };\n            this.searchInputUpdate.emit(args);\n            if (args.cancel) {\n                this.filterValue = null;\n            }\n        }\n        this.checkMatch();\n    }\n\n    /**\n     * Event handlers\n     *\n     * @hidden\n     * @internal\n     */\n    public handleOpening(e: IBaseCancelableBrowserEventArgs) {\n        const args: IBaseCancelableBrowserEventArgs = { owner: this, event: e.event, cancel: e.cancel };\n        this.opening.emit(args);\n        e.cancel = args.cancel;\n    }\n\n    /** @hidden @internal */\n    public handleClosing(e: IBaseCancelableBrowserEventArgs) {\n        const args: IBaseCancelableBrowserEventArgs = { owner: this, event: e.event, cancel: e.cancel };\n        this.closing.emit(args);\n        e.cancel = args.cancel;\n        if (e.cancel) {\n            return;\n        }\n        this.searchValue = '';\n        const isTab = (e.event as KeyboardEvent)?.key === 'Tab';\n        if (!e.event || isTab) {\n            this.comboInput?.nativeElement.focus();\n        } else {\n            this._onTouchedCallback();\n            this.updateValidity();\n        }\n    }\n\n    /** @hidden @internal */\n    public handleClosed() {\n        this.closed.emit({ owner: this });\n    }\n\n    /** @hidden @internal */\n    public handleKeyDown(event: KeyboardEvent) {\n        if (event.key === 'ArrowUp' || event.key === 'Up') {\n            event.preventDefault();\n            event.stopPropagation();\n            this.close();\n        }\n        if (event.key === 'Tab') {\n            this.close();\n        }\n    }\n\n    /** @hidden @internal */\n    public getAriaLabel(): string {\n        return this.displayValue ? this.resourceStrings.igx_combo_aria_label_options : this.resourceStrings.igx_combo_aria_label_no_options;\n    }\n\n\n    /** @hidden @internal */\n    public registerOnChange(fn: any): void {\n        this._onChangeCallback = fn;\n    }\n\n    /** @hidden @internal */\n    public registerOnTouched(fn: any): void {\n        this._onTouchedCallback = fn;\n    }\n\n    /** @hidden @internal */\n    public setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n    }\n\n    /** @hidden @internal */\n    public onClick(event: Event) {\n        event.stopPropagation();\n        event.preventDefault();\n        if (!this.disabled) {\n            this.toggle();\n        }\n    }\n\n    /** @hidden @internal */\n    public onBlur() {\n        if (this.collapsed) {\n            this._onTouchedCallback();\n            this.updateValidity();\n        }\n    }\n\n    /** @hidden @internal */\n    public setActiveDescendant(): void {\n        this.activeDescendant = this.dropdown.focusedItem?.id || '';\n    }\n\n    /** @hidden @internal */\n    public toggleCaseSensitive() {\n        this.filteringOptions = Object.assign({}, this.filteringOptions, { caseSensitive: !this.filteringOptions.caseSensitive });\n    }\n\n    protected onStatusChanged = () => {\n        if (this.ngControl && this.isTouchedOrDirty && !this.disabled) {\n            if (this.hasValidators && (!this.collapsed || this.inputGroup.isFocused)) {\n                this.valid = this.ngControl.valid ? IgxInputState.VALID : IgxInputState.INVALID;\n            } else {\n                this.valid = this.ngControl.valid ? IgxInputState.INITIAL : IgxInputState.INVALID;\n            }\n        } else {\n            // B.P. 18 May 2021: IgxDatePicker does not reset its state upon resetForm #9526\n            this.valid = IgxInputState.INITIAL;\n        }\n        this.manageRequiredAsterisk();\n    };\n\n    private updateValidity() {\n        if (this.ngControl && this.ngControl.invalid) {\n            this.valid = IgxInputState.INVALID;\n        } else {\n            this.valid = IgxInputState.INITIAL;\n        }\n    }\n\n    private get isTouchedOrDirty(): boolean {\n        return (this.ngControl.control.touched || this.ngControl.control.dirty);\n    }\n\n    private get hasValidators(): boolean {\n        return (!!this.ngControl.control.validator || !!this.ngControl.control.asyncValidator);\n    }\n\n    /** if there is a valueKey - map the keys to data items, else - just return the keys */\n    protected convertKeysToItems(keys: any[]) {\n        if (this.valueKey === null || this.valueKey === undefined) {\n            return keys;\n        }\n\n        return keys.map(key => {\n            const item = this.data.find(entry => isEqual(entry[this.valueKey], key));\n\n            return item !== undefined ? item : { [this.valueKey]: key };\n        });\n    }\n\n    protected checkMatch(): void {\n        const itemMatch = this.filteredData.some(this.findMatch);\n        this.customValueFlag = this.allowCustomValues && !itemMatch;\n    }\n\n    protected findMatch = (element: any): boolean => {\n        const value = this.displayKey ? element[this.displayKey] : element;\n        const searchValue = this.searchValue || this.comboInput?.value;\n        return value?.toString().trim().toLowerCase() === searchValue.trim().toLowerCase();\n    };\n\n    protected manageRequiredAsterisk(): void {\n        if (this.ngControl) {\n            this.inputGroup.isRequired = this.required;\n        }\n    }\n\n    /** Contains key-value pairs of the selected valueKeys and their resp. displayKeys */\n    protected registerRemoteEntries(ids: any[], add = true) {\n        if (add) {\n            const selection = this.getValueDisplayPairs(ids);\n            for (const entry of selection) {\n                this._remoteSelection[entry[this.valueKey]] = entry[this.displayKey];\n            }\n        } else {\n            for (const entry of ids) {\n                delete this._remoteSelection[entry];\n            }\n        }\n    }\n\n    /**\n     * For `id: any[]` returns a mapped `{ [combo.valueKey]: any, [combo.displayKey]: any }[]`\n     */\n    protected getValueDisplayPairs(ids: any[]) {\n        return this.data.filter(entry => ids.indexOf(entry[this.valueKey]) > -1).map(e => ({\n            [this.valueKey]: e[this.valueKey],\n            [this.displayKey]: e[this.displayKey]\n        }));\n    }\n\n    protected getRemoteSelection(newSelection: any[], oldSelection: any[]): string {\n        if (!newSelection.length) {\n            // If new selection is empty, clear all items\n            this.registerRemoteEntries(oldSelection, false);\n            return '';\n        }\n        const removedItems = oldSelection.filter(e => newSelection.indexOf(e) < 0);\n        const addedItems = newSelection.filter(e => oldSelection.indexOf(e) < 0);\n        this.registerRemoteEntries(addedItems);\n        this.registerRemoteEntries(removedItems, false);\n        return Object.keys(this._remoteSelection).map(e => this._remoteSelection[e]).join(', ');\n    }\n\n    protected get required(): boolean {\n        if (this.ngControl && this.ngControl.control && this.ngControl.control.validator) {\n            // Run the validation with empty object to check if required is enabled.\n            const error = this.ngControl.control.validator({} as AbstractControl);\n            return error && error.required;\n        }\n\n        return false;\n    }\n\n    public abstract get filteredData(): any[] | null;\n    public abstract set filteredData(val: any[] | null);\n\n    public abstract handleOpened();\n    public abstract onArrowDown(event: Event);\n    public abstract focusSearchInput(opening?: boolean);\n\n    public abstract select(newItem: any): void;\n    public abstract select(newItems: Array<any> | any, clearCurrentSelection?: boolean, event?: Event): void;\n\n    public abstract deselect(...args: [] | [items: Array<any>, event?: Event]): void;\n\n    public abstract writeValue(value: any): void;\n\n    protected abstract setSelection(newSelection: Set<any>, event?: Event): void;\n    protected abstract createDisplayText(newSelection: any[], oldSelection: any[]);\n}\n","import { IgxComboItemComponent } from './combo-item.component';\nimport { Component, HostBinding } from '@angular/core';\n\n/**\n * @hidden\n */\n@Component({\n    selector: 'igx-combo-add-item',\n    template: '<ng-content></ng-content>',\n    providers: [{ provide: IgxComboItemComponent, useExisting: IgxComboAddItemComponent }],\n})\nexport class IgxComboAddItemComponent extends IgxComboItemComponent {\n    @HostBinding('class.igx-drop-down__item')\n    public get isDropDownItem(): boolean {\n        return false;\n    }\n\n    public override get selected(): boolean {\n        return false;\n    }\n    public override set selected(value: boolean) {\n    }\n\n    public override clicked(event?) {// eslint-disable-line\n        this.comboAPI.disableTransitions = false;\n        this.comboAPI.add_custom_item();\n    }\n}\n","import { Component, QueryList, OnDestroy, AfterViewInit, ContentChildren, Input, booleanAttribute, inject } from '@angular/core';\nimport { IgxComboBase, IGX_COMBO_COMPONENT } from './combo.common';\nimport { IgxComboAddItemComponent } from './combo-add-item.component';\nimport { IgxComboAPIService } from './combo.api';\nimport { IgxComboItemComponent } from './combo-item.component';\nimport { IgxToggleDirective } from 'igniteui-angular/directives';\nimport { DropDownActionKey, IDropDownBase, IGX_DROPDOWN_BASE, IgxDropDownComponent, IgxDropDownItemBaseDirective } from 'igniteui-angular/drop-down';\n\n/** @hidden */\n@Component({\n    selector: 'igx-combo-drop-down',\n    templateUrl: '../../../drop-down/src/drop-down/drop-down.component.html',\n    providers: [{ provide: IGX_DROPDOWN_BASE, useExisting: IgxComboDropDownComponent }],\n    imports: [IgxToggleDirective]\n})\nexport class IgxComboDropDownComponent extends IgxDropDownComponent implements IDropDownBase, OnDestroy, AfterViewInit {\n    public combo = inject<IgxComboBase>(IGX_COMBO_COMPONENT);\n    protected comboAPI = inject(IgxComboAPIService);\n\n    /** @hidden @internal */\n    @Input({ transform: booleanAttribute })\n    public singleMode = false;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChildren(IgxComboItemComponent, { descendants: true })\n    public override children: QueryList<IgxDropDownItemBaseDirective> = null;\n\n    /** @hidden @internal */\n    public override get scrollContainer(): HTMLElement {\n        // TODO: Update, use public API if possible:\n        return this.virtDir.dc.location.nativeElement;\n    }\n\n    protected get isScrolledToLast(): boolean {\n        const scrollTop = this.virtDir.scrollPosition;\n        const scrollHeight = this.virtDir.getScroll().scrollHeight;\n        return Math.floor(scrollTop + this.virtDir.igxForContainerSize) === scrollHeight;\n    }\n\n    protected get lastVisibleIndex(): number {\n        return this.combo.totalItemCount ?\n            Math.floor(this.combo.itemsMaxHeight / this.combo.itemHeight) :\n            this.items.length - 1;\n    }\n\n    protected get sortedChildren(): IgxDropDownItemBaseDirective[] {\n        if (this.children !== undefined) {\n            return this.children.toArray()\n                .sort((a: IgxDropDownItemBaseDirective, b: IgxDropDownItemBaseDirective) => a.index - b.index);\n        }\n        return null;\n    }\n\n    /**\n     * Get all non-header items\n     *\n     * ```typescript\n     * let myDropDownItems = this.dropdown.items;\n     * ```\n     */\n    public override get items(): IgxComboItemComponent[] {\n        const items: IgxComboItemComponent[] = [];\n        if (this.children !== undefined) {\n            const sortedChildren = this.sortedChildren as IgxComboItemComponent[];\n            for (const child of sortedChildren) {\n                if (!child.isHeader) {\n                    items.push(child);\n                }\n            }\n        }\n\n        return items;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onFocus() {\n        this.focusedItem = this._focusedItem || this.items[0];\n        this.combo.setActiveDescendant();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onBlur(_evt?) {\n        this.focusedItem = null;\n        this.combo.setActiveDescendant();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override onToggleOpened() {\n        this.opened.emit();\n    }\n\n    /**\n     * @hidden\n     */\n    public override navigateFirst() {\n        this.navigateItem(this.virtDir.igxForOf.findIndex(e => !e?.isHeader));\n        this.combo.setActiveDescendant();\n    }\n\n    /**\n     * @hidden\n     */\n    public override navigatePrev() {\n        if (this._focusedItem && this._focusedItem.index === 0 && this.virtDir.state.startIndex === 0) {\n            this.combo.focusSearchInput(false);\n            this.focusedItem = null;\n        } else {\n            super.navigatePrev();\n        }\n        this.combo.setActiveDescendant();\n    }\n\n\n    /**\n     * @hidden\n     */\n    public override navigateNext() {\n        const lastIndex = this.combo.totalItemCount ? this.combo.totalItemCount - 1 : this.virtDir.igxForOf.length - 1;\n        if (this._focusedItem && this._focusedItem.index === lastIndex) {\n            this.focusAddItemButton();\n        } else {\n            super.navigateNext();\n        }\n        this.combo.setActiveDescendant();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override selectItem(item: IgxDropDownItemBaseDirective) {\n        if (item === null || item === undefined) {\n            return;\n        }\n        this.comboAPI.set_selected_item(item.itemID);\n        this._focusedItem = item;\n        this.combo.setActiveDescendant();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override updateScrollPosition() {\n        this.virtDir.getScroll().scrollTop = this._scrollPosition;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override onItemActionKey(key: DropDownActionKey, event?: KeyboardEvent) {\n        switch (key) {\n            case DropDownActionKey.ENTER:\n                this.handleEnter();\n                break;\n            case DropDownActionKey.SPACE:\n                this.handleSpace();\n                break;\n            case DropDownActionKey.ESCAPE:\n                this.close();\n                break;\n            case DropDownActionKey.TAB:\n                this.close(event);\n        }\n    }\n\n    public override ngAfterViewInit() {\n        this.virtDir.getScroll().addEventListener('scroll', this.scrollHandler);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override ngOnDestroy(): void {\n        this.virtDir.getScroll().removeEventListener('scroll', this.scrollHandler);\n        super.ngOnDestroy();\n    }\n\n    protected override scrollToHiddenItem(_newItem: any): void { }\n\n    protected scrollHandler = () => {\n        this.comboAPI.disableTransitions = true;\n    };\n\n    private handleEnter() {\n        if (this.isAddItemFocused()) {\n            this.combo.addItemToCollection();\n            return;\n        }\n        if (this.singleMode && this.focusedItem) {\n            this.combo.select(this.focusedItem.itemID);\n        }\n\n        this.close();\n    }\n\n    private handleSpace() {\n        if (this.isAddItemFocused()) {\n            return;\n        } else {\n            this.selectItem(this.focusedItem);\n        }\n    }\n\n    private isAddItemFocused(): boolean {\n        return this.focusedItem instanceof IgxComboAddItemComponent;\n    }\n\n    private focusAddItemButton() {\n        if (this.combo.isAddButtonVisible()) {\n            this.focusedItem = this.items[this.items.length - 1];\n        }\n    }\n}\n","<div class=\"igx-drop-down__list\" [style.width]=\"width\"\n    igxToggle\n    (appended)=\"onToggleContentAppended($event)\"\n    (opening)=\"onToggleOpening($event)\" (opened)=\"onToggleOpened()\"\n    (closing)=\"onToggleClosing($event)\" (closed)=\"onToggleClosed()\">\n    <div class=\"igx-drop-down__list-scroll\" #scrollContainer [attr.id]=\"listId\" [attr.role]=\"role\" [attr.aria-labelledby]=\"labelledBy\"\n        [style.height]=\"height\"\n        [style.maxHeight]=\"maxHeight\">\n        @if (!collapsed) {\n            <ng-content></ng-content>\n        }\n    </div>\n</div>\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { IComboFilteringOptions, IgxComboBase, IGX_COMBO_COMPONENT } from './combo.common';\nimport { SortingDirection } from 'igniteui-angular/core';\n\n/** @hidden */\n@Pipe({\n    name: 'comboFiltering',\n    standalone: true\n})\nexport class IgxComboFilteringPipe implements PipeTransform {\n    public transform(\n        collection: any[],\n        searchValue: any,\n        displayKey: any,\n        filteringOptions: IComboFilteringOptions,\n        filterFunction: (collection: any[], searchValue: any, filteringOptions: IComboFilteringOptions) => any[] = defaultFilterFunction,\n        disableFiltering: boolean = false) {\n        if (!collection) {\n            return [];\n        }\n        if (disableFiltering) {\n            return collection;\n        }\n        filteringOptions.filteringKey = filteringOptions.filteringKey ?? displayKey;\n        return filterFunction(collection, searchValue, filteringOptions);\n    }\n}\n\n/** @hidden */\n@Pipe({\n    name: 'comboGrouping',\n    standalone: true\n})\nexport class IgxComboGroupingPipe implements PipeTransform {\n    public combo = inject<IgxComboBase>(IGX_COMBO_COMPONENT);\n\n\n    public transform(collection: any[], groupKey: any, valueKey: any, sortingDirection: SortingDirection, compareCollator: Intl.Collator) {\n        // TODO: should filteredData be changed here?\n        this.combo.filteredData = collection;\n        if ((!groupKey && groupKey !== 0) || !collection.length) {\n            return collection;\n        }\n        const groups = Object.entries(groupBy(collection, (item) => item[groupKey] ?? 'Other'));\n        if (sortingDirection !== SortingDirection.None) {\n            const reverse = sortingDirection === SortingDirection.Desc ? -1 : 1;\n            groups.sort((a,b) => {\n                return compareCollator.compare(a[0], b[0]) * reverse;\n            });\n        }\n        const result = groups.flatMap(([_, items]) => {\n            items.unshift({\n                isHeader: true,\n                [valueKey]: items[0][groupKey],\n                [groupKey]: items[0][groupKey]\n            })\n            return items;\n        });\n        return result;\n    }\n}\n\nfunction defaultFilterFunction<T>(collection: T[], searchValue: string, filteringOptions: IComboFilteringOptions): T[] {\n    if (!searchValue) {\n        return collection;\n    }\n\n    const { caseSensitive, filteringKey } = filteringOptions;\n    const term = caseSensitive ? searchValue : searchValue.toLowerCase();\n\n    return collection.filter(item => {\n        const str = filteringKey ? `${item[filteringKey]}` : `${item}`;\n        return (caseSensitive ? str : str.toLowerCase()).includes(term);\n    });\n}\n\nfunction normalizeString(str: string, caseSensitive = false): string {\n    return (caseSensitive ? str : str.toLocaleLowerCase())\n        .normalize('NFKD')\n        .replace(/\\p{M}/gu, '');\n}\n\nfunction groupBy<T>(data: T[], key: keyof T | ((item: T) => any)) {\n    const result: Record<string, T[]> = {};\n    const _get = typeof key === 'function' ? key : (item: T) => item[key];\n\n    for (const item of data) {\n      const category = _get(item);\n      const group = result[category];\n\n      Array.isArray(group) ? group.push(item) : (result[category] = [item]);\n    }\n\n    return result;\n}\n\n/**\n * Combo filter function which does not distinguish between accented letters and their base letters.\n * For example, when filtering for \"resume\", this function will match both \"resume\" and \"résumé\".\n *\n * @example\n * ```html\n * <igx-combo [filterFunction]=\"comboIgnoreDiacriticFilterFunction\"></igx-combo>\n * ```\n */\nexport function comboIgnoreDiacriticsFilter<T>(collection: T[], searchValue: string, filteringOptions: IComboFilteringOptions): T[] {\n    if (!searchValue) {\n        return collection;\n    }\n\n    const { caseSensitive, filteringKey } = filteringOptions;\n    const term = normalizeString(searchValue, caseSensitive);\n\n    return collection.filter(item => {\n        const str = filteringKey ? `${item[filteringKey]}` : `${item}`;\n        return normalizeString(str, caseSensitive).includes(term);\n    });\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { AfterViewInit, Component, OnInit, OnDestroy, ViewChild, Input, Output, EventEmitter, HostListener, DoCheck, booleanAttribute } from '@angular/core';\n\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport {\n    IBaseEventArgs,\n    IBaseCancelableEventArgs,\n    CancelableEventArgs,\n    EditorProvider\n} from 'igniteui-angular/core';\nimport { IgxForOfDirective } from 'igniteui-angular/directives';\nimport { IgxRippleDirective } from 'igniteui-angular/directives';\nimport { IgxButtonDirective } from 'igniteui-angular/directives';\nimport { IgxComboItemComponent } from './combo-item.component';\nimport { IgxComboDropDownComponent } from './combo-dropdown.component';\nimport { IgxComboFilteringPipe, IgxComboGroupingPipe } from './combo.pipes';\nimport { IGX_COMBO_COMPONENT, IgxComboBaseDirective } from './combo.common';\nimport { IgxComboAddItemComponent } from './combo-add-item.component';\nimport { IgxComboAPIService } from './combo.api';\nimport { IgxInputGroupComponent, IgxInputDirective, IgxReadOnlyInputDirective, IgxSuffixDirective } from 'igniteui-angular/input-group';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxDropDownItemNavigationDirective } from 'igniteui-angular/drop-down';\n\n/** Event emitted when an igx-combo's selection is changing */\nexport interface IComboSelectionChangingEventArgs extends IBaseCancelableEventArgs {\n    /** An array containing the values that are currently selected */\n    oldValue: any[];\n    /** An array containing the values that will be selected after this event */\n    newValue: any[];\n    /** An array containing the items that are currently selected */\n    oldSelection: any[];\n    /** An array containing the items that will be selected after this event */\n    newSelection: any[];\n    /** An array containing the items that will be added to the selection (if any) */\n    added: any[];\n    /** An array containing the items that will be removed from the selection (if any) */\n    removed: any[];\n    /** The text that will be displayed in the combo text box */\n    displayText: string;\n    /** The user interaction that triggered the selection change */\n    event?: Event;\n}\n\n/** Event emitted when the igx-combo's search input changes */\nexport interface IComboSearchInputEventArgs extends IBaseCancelableEventArgs {\n    /** The text that has been typed into the search input */\n    searchText: string;\n}\n\nexport interface IComboItemAdditionEvent extends IBaseEventArgs, CancelableEventArgs {\n    oldCollection: any[];\n    addedItem: any;\n    newCollection: any[];\n}\n\n/**\n * When called with sets A & B, returns A - B (as array);\n *\n * @hidden\n */\nconst diffInSets = (set1: Set<any>, set2: Set<any>): any[] => {\n    const results = [];\n    set1.forEach(entry => {\n        if (!set2.has(entry)) {\n            results.push(entry);\n        }\n    });\n    return results;\n};\n\n/**\n *  Represents a drop-down list that provides editable functionalities, allowing users to choose an option from a predefined list.\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @remarks\n * It provides the ability to filter items as well as perform selection with the provided data.\n * Additionally, it exposes keyboard navigation and custom styling capabilities.\n * @example\n * ```html\n * <igx-combo [itemsMaxHeight]=\"250\" [data]=\"locationData\"\n *  [displayKey]=\"'field'\" [valueKey]=\"'field'\"\n *  placeholder=\"Location(s)\" searchPlaceholder=\"Search...\">\n * </igx-combo>\n * ```\n */\n@Component({\n    selector: 'igx-combo',\n    templateUrl: 'combo.component.html',\n    providers: [\n        IgxComboAPIService,\n        { provide: IGX_COMBO_COMPONENT, useExisting: IgxComboComponent },\n        { provide: NG_VALUE_ACCESSOR, useExisting: IgxComboComponent, multi: true }\n    ],\n    imports: [\n        NgTemplateOutlet,\n        NgClass,\n        FormsModule,\n        IgxInputGroupComponent,\n        IgxInputDirective,\n        IgxSuffixDirective,\n        IgxIconComponent,\n        IgxComboDropDownComponent,\n        IgxDropDownItemNavigationDirective,\n        IgxForOfDirective,\n        IgxComboItemComponent,\n        IgxComboAddItemComponent,\n        IgxButtonDirective,\n        IgxRippleDirective,\n        IgxReadOnlyInputDirective,\n        IgxComboFilteringPipe,\n        IgxComboGroupingPipe\n    ]\n})\nexport class IgxComboComponent extends IgxComboBaseDirective implements AfterViewInit, ControlValueAccessor, OnInit,\n    OnDestroy, DoCheck, EditorProvider {\n    /**\n     * Whether the combo's search box should be focused after the dropdown is opened.\n     * When `false`, the combo's list item container will be focused instead\n     */\n    @Input({ transform: booleanAttribute })\n    public autoFocusSearch = true;\n\n\n    /**\n     * Defines the placeholder value for the combo dropdown search field\n     *\n     * @deprecated in version 18.2.0. Replaced with values in the localization resource strings.\n     *\n     * ```typescript\n     * // get\n     * let myComboSearchPlaceholder = this.combo.searchPlaceholder;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [searchPlaceholder]='newPlaceHolder'></igx-combo>\n     * ```\n     */\n    @Input()\n    public searchPlaceholder: string;\n\n    /**\n     * Emitted when item selection is changing, before the selection completes\n     *\n     * ```html\n     * <igx-combo (selectionChanging)='handleSelection()'></igx-combo>\n     * ```\n     */\n    @Output()\n    public selectionChanging = new EventEmitter<IComboSelectionChangingEventArgs>();\n\n    /** @hidden @internal */\n    @ViewChild(IgxComboDropDownComponent, { static: true })\n    public dropdown: IgxComboDropDownComponent;\n\n    /** @hidden @internal */\n    public get filteredData(): any[] | null {\n        return this.disableFiltering ? this.data : this._filteredData;\n    }\n    /** @hidden @internal */\n    public set filteredData(val: any[] | null) {\n        this._filteredData = this.groupKey ? (val || []).filter((e) => e.isHeader !== true) : val;\n        this.checkMatch();\n    }\n\n    protected _prevInputValue = '';\n\n    private _displayText: string;\n\n    constructor() {\n        super();\n        this.comboAPI.register(this);\n    }\n\n    @HostListener('keydown.ArrowDown', ['$event'])\n    @HostListener('keydown.Alt.ArrowDown', ['$event'])\n    public onArrowDown(event: Event) {\n        event.preventDefault();\n        event.stopPropagation();\n        this.open();\n    }\n\n    @HostListener('keydown.Escape', ['$event'])\n    public onEscape(event: Event) {\n        if (this.collapsed) {\n            this.deselectAllItems(true, event);\n        }\n    }\n\n    /** @hidden @internal */\n    public get displaySearchInput(): boolean {\n        return !this.disableFiltering || this.allowCustomValues;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public handleKeyUp(event: KeyboardEvent): void {\n        // TODO: use PlatformUtil for keyboard navigation\n        if (event.key === 'ArrowDown' || event.key === 'Down') {\n            this.dropdown.focusedItem = this.dropdown.items[0];\n            this.dropdownContainer.nativeElement.focus();\n        } else if (event.key === 'Escape' || event.key === 'Esc') {\n            this.toggle();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public handleSelectAll(evt) {\n        if (evt.checked) {\n            this.selectAllItems();\n        } else {\n            this.deselectAllItems();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public writeValue(value: any[]): void {\n        const selection = Array.isArray(value) ? value.filter(x => x !== undefined) : [];\n        const oldSelection = this.selection;\n        this.selectionService.select_items(this.id, selection, true);\n        this.cdr.markForCheck();\n        this._displayValue = this.createDisplayText(this.selection, oldSelection);\n        this._value = this.valueKey ? this.selection.map(item => item[this.valueKey]) : this.selection;\n    }\n\n    /** @hidden @internal */\n    public ngDoCheck(): void {\n        if (this.data?.length && this.selection.length) {\n            this._displayValue = this._displayText || this.createDisplayText(this.selection, []);\n            this._value = this.valueKey ? this.selection.map(item => item[this.valueKey]) : this.selection;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public getEditElement(): HTMLElement {\n        return this.comboInput.nativeElement;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get context(): any {\n        return {\n            $implicit: this\n        };\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public handleClearItems(event: Event): void {\n        if (this.disabled) {\n            return;\n        }\n        this.deselectAllItems(true, event);\n        if (this.collapsed) {\n            this.getEditElement().focus();\n        } else {\n            this.focusSearchInput(true);\n        }\n        event.stopPropagation();\n    }\n\n    /**\n     * Select defined items\n     *\n     * @param newItems new items to be selected\n     * @param clearCurrentSelection if true clear previous selected items\n     * ```typescript\n     * this.combo.select([\"New York\", \"New Jersey\"]);\n     * ```\n     */\n    public select(newItems: Array<any>, clearCurrentSelection?: boolean, event?: Event) {\n        if (newItems) {\n            const newSelection = this.selectionService.add_items(this.id, newItems, clearCurrentSelection);\n            this.setSelection(newSelection, event);\n        }\n    }\n\n    /**\n     * Deselect defined items\n     *\n     * @param items items to deselected\n     * ```typescript\n     * this.combo.deselect([\"New York\", \"New Jersey\"]);\n     * ```\n     */\n    public deselect(items: Array<any>, event?: Event) {\n        if (items) {\n            const newSelection = this.selectionService.delete_items(this.id, items);\n            this.setSelection(newSelection, event);\n        }\n    }\n\n    /**\n     * Select all (filtered) items\n     *\n     * @param ignoreFilter if set to true, selects all items, otherwise selects only the filtered ones.\n     * ```typescript\n     * this.combo.selectAllItems();\n     * ```\n     */\n    public selectAllItems(ignoreFilter?: boolean, event?: Event) {\n        const allVisible = this.selectionService.get_all_ids(ignoreFilter ? this.data : this.filteredData, this.valueKey);\n        const newSelection = this.selectionService.add_items(this.id, allVisible);\n        this.setSelection(newSelection, event);\n    }\n\n    /**\n     * Deselect all (filtered) items\n     *\n     * @param ignoreFilter if set to true, deselects all items, otherwise deselects only the filtered ones.\n     * ```typescript\n     * this.combo.deselectAllItems();\n     * ```\n     */\n    public deselectAllItems(ignoreFilter?: boolean, event?: Event): void {\n        let newSelection = this.selectionService.get_empty();\n        if (this.filteredData.length !== this.data.length && !ignoreFilter) {\n            newSelection = this.selectionService.delete_items(this.id, this.selectionService.get_all_ids(this.filteredData, this.valueKey));\n        }\n        this.setSelection(newSelection, event);\n    }\n\n    /**\n     * Selects/Deselects a single item\n     *\n     * @param itemID the itemID of the specific item\n     * @param select If the item should be selected (true) or deselected (false)\n     *\n     * Without specified valueKey;\n     * ```typescript\n     * this.combo.valueKey = null;\n     * const items: { field: string, region: string}[] = data;\n     * this.combo.setSelectedItem(items[0], true);\n     * ```\n     * With specified valueKey;\n     * ```typescript\n     * this.combo.valueKey = 'field';\n     * const items: { field: string, region: string}[] = data;\n     * this.combo.setSelectedItem('Connecticut', true);\n     * ```\n     */\n    public setSelectedItem(itemID: any, select = true, event?: Event): void {\n        if (itemID === undefined) {\n            return;\n        }\n        if (select) {\n            this.select([itemID], false, event);\n        } else {\n            this.deselect([itemID], event);\n        }\n    }\n\n    /** @hidden @internal */\n    public handleOpened() {\n        this.triggerCheck();\n\n        // Disabling focus of the search input should happen only when drop down opens.\n        // During keyboard navigation input should receive focus, even the autoFocusSearch is disabled.\n        // That is why in such cases focusing of the dropdownContainer happens outside focusSearchInput method.\n        if (this.autoFocusSearch) {\n            this.focusSearchInput(true);\n        } else {\n            this.dropdownContainer.nativeElement.focus();\n        }\n        this.opened.emit({ owner: this });\n    }\n\n    /** @hidden @internal */\n    public focusSearchInput(opening?: boolean): void {\n        if (this.displaySearchInput && this.searchInput) {\n            this.searchInput.nativeElement.focus();\n        } else {\n            if (opening) {\n                this.dropdownContainer.nativeElement.focus();\n            } else {\n                this.comboInput.nativeElement.focus();\n                this.toggle();\n            }\n        }\n    }\n\n    protected setSelection(selection: Set<any>, event?: Event): void {\n        const currentSelection = this.selectionService.get(this.id);\n        const removed = this.convertKeysToItems(diffInSets(currentSelection, selection));\n        const added = this.convertKeysToItems(diffInSets(selection, currentSelection));\n        const newValue = Array.from(selection);\n        const oldValue = Array.from(currentSelection || []);\n        const newSelection = this.convertKeysToItems(newValue);\n        const oldSelection = this.convertKeysToItems(oldValue);\n        const displayText = this.createDisplayText(this.convertKeysToItems(newValue), oldValue);\n        const args: IComboSelectionChangingEventArgs = {\n            newValue,\n            oldValue,\n            newSelection,\n            oldSelection,\n            added,\n            removed,\n            event,\n            owner: this,\n            displayText,\n            cancel: false\n        };\n        this.selectionChanging.emit(args);\n        if (!args.cancel) {\n            this.selectionService.select_items(this.id, args.newValue, true);\n            this._value = args.newValue;\n            if (displayText !== args.displayText) {\n                this._displayValue = this._displayText = args.displayText;\n            } else {\n                this._displayValue = this.createDisplayText(this.selection, args.oldSelection);\n            }\n            this._onChangeCallback(args.newValue);\n        } else if (this.isRemote) {\n            this.registerRemoteEntries(diffInSets(selection, currentSelection), false);\n        }\n    }\n\n    protected createDisplayText(newSelection: any[], oldSelection: any[]) {\n        const selection = this.valueKey ? newSelection.map(item => item[this.valueKey]) : newSelection;\n        return this.isRemote\n            ? this.getRemoteSelection(selection, oldSelection)\n            : this.concatDisplayText(newSelection);\n    }\n\n    protected getSearchPlaceholderText(): string {\n        return this.searchPlaceholder ||\n            (this.disableFiltering ? this.resourceStrings.igx_combo_addCustomValues_placeholder : this.resourceStrings.igx_combo_filter_search_placeholder);\n    }\n\n    /** Returns a string that should be populated in the combo's text box */\n    private concatDisplayText(selection: any[]): string {\n        const value = this.displayKey !== null && this.displayKey !== undefined ?\n            selection.map(entry => entry[this.displayKey]).join(', ') :\n            selection.join(', ');\n        return value;\n    }\n}\n","<igx-input-group #inputGroup [type]=\"type === 'search' ? 'box' : type\" (click)=\"onClick($event)\">\n    <ng-container ngProjectAs=\"[igxLabel]\">\n        <ng-content select=\"[igxLabel]\"></ng-content>\n    </ng-container>\n    <ng-container ngProjectAs=\"igx-prefix\">\n        <ng-content select=\"igx-prefix,[igxPrefix]\"></ng-content>\n    </ng-container>\n    <ng-container ngProjectAs=\"igx-hint, [igxHint]\">\n        <ng-content select=\"igx-hint, [igxHint]\"></ng-content>\n    </ng-container>\n    <input igxInput #comboInput name=\"comboInput\" type=\"text\" [value]=\"displayValue\" readonly\n        [attr.placeholder]=\"placeholder\" [disabled]=\"disabled\" [igxReadOnlyInput]=\"false\"\n        role=\"combobox\" aria-haspopup=\"listbox\"\n        [attr.aria-expanded]=\"!dropdown.collapsed\" [attr.aria-controls]=\"dropdown.listId\"\n        [attr.aria-labelledby]=\"ariaLabelledBy || label?.id || placeholder\"\n        [attr.aria-label]=\"getAriaLabel()\"\n        (blur)=\"onBlur()\" />\n    <ng-container ngProjectAs=\"igx-suffix\">\n        <ng-content select=\"igx-suffix,[igxSuffix]\"></ng-content>\n    </ng-container>\n    @if (displayValue) {\n        <igx-suffix [attr.aria-label]=\"resourceStrings.igx_combo_clearItems_placeholder\" class=\"igx-combo__clear-button\"\n            (click)=\"handleClearItems($event)\">\n            @if (clearIconTemplate) {\n                <ng-container *ngTemplateOutlet=\"clearIconTemplate\"></ng-container>\n            }\n            @if (!clearIconTemplate) {\n                <igx-icon family=\"default\" name=\"input_clear\"></igx-icon>\n            }\n        </igx-suffix>\n    }\n    <igx-suffix class=\"igx-combo__toggle-button\">\n        @if (toggleIconTemplate) {\n            <ng-container *ngTemplateOutlet=\"toggleIconTemplate; context: {$implicit: collapsed}\"></ng-container>\n        }\n        @if (!toggleIconTemplate) {\n            <igx-icon family=\"default\" [name]=\"toggleIcon\"></igx-icon>\n        }\n    </igx-suffix>\n</igx-input-group>\n<igx-combo-drop-down #igxComboDropDown class=\"igx-combo__drop-down\"\n    [labelledBy]=\"ariaLabelledBy || label?.id || placeholder || ''\"\n    [width]=\"itemsWidth || '100%'\" (opening)=\"handleOpening($event)\" (closing)=\"handleClosing($event)\"\n    (opened)=\"handleOpened()\" (closed)=\"handleClosed()\">\n    @if (displaySearchInput) {\n        <div class=\"igx-combo__search\">\n            <igx-input-group type=\"line\">\n                <input igxInput #searchInput name=\"searchInput\" autocomplete=\"off\" type=\"text\"\n                    [(ngModel)]=\"searchValue\" (ngModelChange)=\"handleInputChange($event)\" (keyup)=\"handleKeyUp($event)\"\n                    (keydown)=\"handleKeyDown($event)\" (focus)=\"dropdown.onBlur($event)\" [attr.placeholder]=\"getSearchPlaceholderText()\"\n                    aria-autocomplete=\"list\" role=\"searchbox\" aria-label=\"search\"/>\n                @if (showSearchCaseIcon) {\n                    <igx-suffix (click)=\"toggleCaseSensitive()\">\n                        <span [ngClass]=\"filteringOptions.caseSensitive? 'igx-combo__case-icon--active' : 'igx-combo__case-icon'\">\n                            <igx-icon\n                                family=\"default\"\n                                name=\"case_sensitive\"\n                                [active]=\"filteringOptions.caseSensitive\">\n                            </igx-icon>\n                        </span>\n                    </igx-suffix>\n                }\n            </igx-input-group>\n        </div>\n    }\n    <ng-container *ngTemplateOutlet=\"headerTemplate\">\n    </ng-container>\n    <div #dropdownItemContainer class=\"igx-combo__content\" [style.overflow]=\"'hidden'\"\n        [style.maxHeight.rem]=\"itemsMaxHeightInRem\" [igxDropDownItemNavigation]=\"dropdown\" (focus)=\"dropdown.onFocus()\"\n        [tabindex]=\"dropdown.collapsed ? -1 : 0\" [attr.id]=\"dropdown.id\" aria-multiselectable=\"true\"\n        [attr.aria-activedescendant]=\"activeDescendant\">\n        <igx-combo-item [itemHeight]=\"itemHeight\" *igxFor=\"let item of data\n            | comboFiltering:filterValue:displayKey:filteringOptions:filterFunction:disableFiltering\n            | comboGrouping:groupKey:valueKey:groupSortingDirection:compareCollator;\n            index as rowIndex; initialChunkSize: 10; containerSize: itemsMaxHeight || containerSize; itemSize: itemHeight || itemSize, scrollOrientation: 'vertical';\"\n            [value]=\"item\" [isHeader]=\"item?.isHeader\" [index]=\"rowIndex\" [role]=\"item?.isHeader? 'group' : 'option'\">\n            @if (item?.isHeader) {\n                <ng-container\n                    *ngTemplateOutlet=\"headerItemTemplate ? headerItemTemplate : headerItemBase;\n                    context: {$implicit: item, data: data, valueKey: valueKey, groupKey: groupKey, displayKey: displayKey}\">\n                </ng-container>\n            }\n            <!-- if item is 'null' it should be displayed and !!(item?.isHeader) would resolve it to 'false' and not display it -->\n            @if (!item?.isHeader) {\n                <ng-container #listItem\n                    *ngTemplateOutlet=\"template; context: {$implicit: item, data: data, valueKey: valueKey, displayKey: displayKey};\">\n                </ng-container>\n            }\n        </igx-combo-item>\n    </div>\n    @if (filteredData.length === 0 || isAddButtonVisible()) {\n        <div class=\"igx-combo__add\">\n            @if (filteredData.length === 0) {\n                <div class=\"igx-combo__empty\">\n                    <ng-container *ngTemplateOutlet=\"emptyTemplate ? emptyTemplate : empty\">\n                    </ng-container>\n                </div>\n            }\n            @if (isAddButtonVisible()) {\n                <igx-combo-add-item [itemHeight]=\"itemHeight\"\n                    [tabindex]=\"dropdown.collapsed ? -1 : customValueFlag ? 1 : -1\" class=\"igx-combo__add-item\" role=\"button\"\n                    [attr.aria-label]=\"resourceStrings.igx_combo_addCustomValues_placeholder\" [index]=\"virtualScrollContainer.igxForOf.length\">\n                    <ng-container *ngTemplateOutlet=\"addItemTemplate ? addItemTemplate : addItemDefault\">\n                    </ng-container>\n                </igx-combo-add-item>\n            }\n        </div>\n    }\n    <ng-container *ngTemplateOutlet=\"footerTemplate\">\n    </ng-container>\n</igx-combo-drop-down>\n<ng-template #complex let-display let-data=\"data\" let-key=\"displayKey\">\n    {{display[key]}}\n</ng-template>\n<ng-template #primitive let-display>\n    {{display}}\n</ng-template>\n<ng-template #empty>\n    <span>{{resourceStrings.igx_combo_empty_message}}</span>\n</ng-template>\n<ng-template #addItemDefault let-control>\n    <button type=\"button\" igxButton=\"flat\" igxRipple>{{ resourceStrings.igx_combo_addCustomValues_placeholder }}</button>\n</ng-template>\n<ng-template #headerItemBase let-item let-key=\"valueKey\" let-groupKey=\"groupKey\">\n    {{ item[key] }}\n</ng-template>\n","import { IgxHintDirective, IgxLabelDirective, IgxPrefixDirective, IgxSuffixDirective } from 'igniteui-angular/input-group';\nimport { IgxComboComponent } from './combo.component';\nimport {\n    IgxComboAddItemDirective,\n    IgxComboClearIconDirective,\n    IgxComboEmptyDirective,\n    IgxComboFooterDirective,\n    IgxComboHeaderDirective,\n    IgxComboHeaderItemDirective,\n    IgxComboItemDirective,\n    IgxComboToggleIconDirective\n} from './combo.directives';\n\nexport * from './combo.api';\nexport * from './combo.common';\nexport * from './combo.component';\nexport * from './combo.directives';\nexport * from './combo.pipes';\nexport * from './combo-add-item.component';\nexport * from './combo-dropdown.component'\nexport * from './combo-item.component';\nexport { comboIgnoreDiacriticsFilter } from './combo.pipes';\n\n/* NOTE: Combo directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_COMBO_DIRECTIVES = [\n    IgxComboComponent,\n    IgxComboAddItemDirective,\n    IgxComboClearIconDirective,\n    IgxComboEmptyDirective,\n    IgxComboFooterDirective,\n    IgxComboHeaderDirective,\n    IgxComboHeaderItemDirective,\n    IgxComboItemDirective,\n    IgxComboToggleIconDirective,\n    IgxLabelDirective,\n    IgxPrefixDirective,\n    IgxSuffixDirective,\n    IgxHintDirective\n] as const;\n","import { NgModule } from '@angular/core';\nimport { IGX_COMBO_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_COMBO_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_COMBO_DIRECTIVES\n    ]\n})\nexport class IgxComboModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.IgxComboComponent","i2.IgxComboAddItemDirective","i2.IgxComboClearIconDirective","i2.IgxComboEmptyDirective","i2.IgxComboFooterDirective","i2.IgxComboHeaderDirective","i2.IgxComboHeaderItemDirective","i2.IgxComboItemDirective","i2.IgxComboToggleIconDirective"],"mappings":";;;;;;;;;;;;;;;;;AAGA;;AAEG;MAEU,kBAAkB,CAAA;AAD/B,IAAA,WAAA,GAAA;QAEW,IAAA,CAAA,kBAAkB,GAAG,KAAK;AAgDpC,IAAA;AA7CG,IAAA,IAAW,QAAQ,GAAA;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI;IACzG;AAEA,IAAA,IAAW,cAAc,GAAA;AACrB,QAAA,OAAO,KAAK;IAChB;AACA,IAAA,IAAW,QAAQ,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ;IAC9B;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE;IACxB;AAEO,IAAA,QAAQ,CAAC,KAAmB,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACtB;IAEO,KAAK,GAAA;AACR,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;IACrB;IAEO,eAAe,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACb;QACJ;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE;IACpC;IAEO,iBAAiB,CAAC,MAAW,EAAE,KAAa,EAAA;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;AAClD,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;YACtB;QACJ;QACA,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;QAC7C;aAAO;YACH,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;QACxC;IACJ;AAEO,IAAA,gBAAgB,CAAC,MAAW,EAAA;QAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;IAC5C;8GAhDS,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAlB,kBAAkB,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;;ACMD;AAMM,MAAO,qBAAsB,SAAQ,wBAAwB,CAAA;AALnE,IAAA,WAAA,GAAA;;AAMc,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAG/C;;;;AAIG;QAEI,IAAA,CAAA,UAAU,GAAoB,EAAE;AA2F1C,IAAA;;AAxFG,IAAA,IACW,gBAAgB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;QAC/B;IACJ;AAEA,IAAA,IAEoB,SAAS,GAAA;AACzB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ;QACvC,OAAO,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK;IACxF;AAMA;;AAEG;AACH,IAAA,IAAoB,MAAM,GAAA;AACtB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ;AACvC,QAAA,OAAO,QAAQ,KAAK,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK;IAChE;AAEA;;AAEG;AACH,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO;IAChC;AAEA;;;AAGG;AACH,IAAA,IAAW,kBAAkB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,kBAAkB;IAC3C;AAEA;;AAEG;AACH,IAAA,IAAoB,QAAQ,GAAA;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC;IACtD;IAEA,IAAoB,QAAQ,CAAC,KAAc,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf;QACJ;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IAC1B;AAEA;;AAEG;AACI,IAAA,SAAS,CAAC,SAAmB,EAAA;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,qBAAqB,EAAE;AAC/D,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,qBAAqB,EAAE;AAChG,QAAA,IAAI,SAAS,KAAK,QAAQ,CAAC,IAAI,EAAE;AAC7B,YAAA,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM;QACjE;AACA,QAAA,OAAO,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;IAChC;AAEgB,IAAA,OAAO,CAAC,KAAK,EAAA;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,KAAK;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpB;QACJ;QACA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;IACvD;AAEA;;;;;;;;AAQG;AACI,IAAA,YAAY,CAAC,KAAiB,EAAA;QACjC,KAAK,CAAC,cAAc,EAAE;IAC1B;8GApGS,qBAAqB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EA4BV,gBAAgB,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,kBAAA,EAAA,uBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9CxC,0iBAKA,4CDWc,oBAAoB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAErB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACI,gBAAgB,EAAA,OAAA,EAEjB,CAAC,oBAAoB,CAAC,EAAA,QAAA,EAAA,0iBAAA,EAAA;;sBAW9B;;sBAIA,WAAW;uBAAC,kBAAkB;;sBAO9B,WAAW;uBAAC,iBAAiB;;sBAC7B;;sBAOA,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;;AE5C1C;;;;;;;;;;;;;;;AAeG;MAKU,uBAAuB,CAAA;8GAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAJnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE;AACf,iBAAA;;AAGD;;;;;;;;;;;;;;;AAeG;MAKU,uBAAuB,CAAA;8GAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAJnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE;AACf,iBAAA;;AAGD;;;;;;;;;;;;;;;;;AAiBG;MAKU,qBAAqB,CAAA;8GAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE;AACf,iBAAA;;AAGD;;;;;;;;;;;;;;;;AAgBG;MAKU,sBAAsB,CAAA;8GAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE;AACf,iBAAA;;AAGD;;;;;;;;;;;;;;AAcG;MAKU,2BAA2B,CAAA;8GAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE;AACf,iBAAA;;AAGD;;;;;;;;;;;;;;;;;;AAkBG;MAKU,wBAAwB,CAAA;8GAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE;AACf,iBAAA;;AAGD;;;;;;;;;;;;;;AAcG;MAKU,2BAA2B,CAAA;8GAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE;AACf,iBAAA;;AAGD;;;;;;;;;;;;;;AAcG;MAKU,0BAA0B,CAAA;8GAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACxHM,MAAM,mBAAmB,iBAAgB,IAAI,cAAc,CAAe,wBAAwB;AAgCzG,IAAI,OAAO,GAAG,CAAC;MAoBO,qBAAqB,CAAA;AA2BtC;;AAEE;AACH,IAAA,IACW,gBAAgB,GAAA;QACvB,OAAO,IAAI,CAAC,iBAAiB;IACjC;IACA,IAAW,gBAAgB,CAAC,KAAc,EAAA;AACtC,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;IAClC;AAqBA;;;;;;;;;;;;AAYG;AACH,IAAA,IAEW,EAAE,GAAA;QACT,OAAO,IAAI,CAAC,GAAG;IACnB;IAEA,IAAW,EAAE,CAAC,KAAa,EAAA;QACvB,IAAI,CAAC,KAAK,EAAE;YACR;QACJ;AACA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;QACrD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACrC,QAAA,IAAI,CAAC,GAAG,GAAG,KAAK;QAChB,IAAI,SAAS,EAAE;YACX,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC;QAClD;IACJ;AAmCA;;;;;;;;;;;;AAYG;AACH,IAAA,IACW,cAAc,GAAA;QACrB,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AAC1C,YAAA,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB;QAClD;QACA,OAAO,IAAI,CAAC,eAAe;IAC/B;IAEA,IAAW,cAAc,CAAC,GAAW,EAAA;AACjC,QAAA,IAAI,CAAC,eAAe,GAAG,GAAG;IAC9B;;AAGA,IAAA,IAAW,mBAAmB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACrB,YAAA,OAAO,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;QACnC;IACJ;AAEA;;;;;;;;;;;;AAYG;AACH,IAAA,IACW,UAAU,GAAA;QACjB,OAAO,IAAI,CAAC,WAAW;IAC3B;IAEA,IAAW,UAAU,CAAC,GAAW,EAAA;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,GAAG;IAC1B;AAkCA;;;;;;;AAOG;AACH,IAAA,IACW,IAAI,GAAA;QACX,OAAO,IAAI,CAAC,KAAK;IACrB;IACA,IAAW,IAAI,CAAC,GAAiB,EAAA;;;;;;;QAO7B,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,GAAG,EAAE;IAC9D;IAkBA,IACW,UAAU,CAAC,GAAW,EAAA;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,GAAG;IAC1B;AAEA;;;;;;;;;;;;;;;;AAgBG;AACH,IAAA,IAAW,UAAU,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ;IAC9D;AAEA;;;;;;;AAOG;IACH,IACW,QAAQ,CAAC,GAAW,EAAA;AAC3B,QAAA,IAAI,CAAC,SAAS,GAAG,GAAG;IACxB;AAEA;;;;;;;AAOG;AACH,IAAA,IAAW,QAAQ,GAAA;QACf,OAAO,IAAI,CAAC,SAAS;IACzB;AAEA;;;;;;;;;;AAUG;AACH,IAAA,IACW,qBAAqB,GAAA;QAC5B,OAAO,IAAI,CAAC,sBAAsB;IACtC;IACA,IAAW,qBAAqB,CAAC,GAAqB,EAAA;AAClD,QAAA,IAAI,CAAC,sBAAsB,GAAG,GAAG;IACrC;AAmCA;;;;;;AAMG;AACH,IAAA,IACW,IAAI,GAAA;QACX,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,IAAI,KAAK;IACtD;IAEA,IAAW,IAAI,CAAC,GAAsB,EAAA;AAClC,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG;IACpB;AAEA;;;;;AAKG;AACH,IAAA,IACW,eAAe,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,uBAAuB;IAChE;IACA,IAAW,eAAe,CAAC,KAA4B,EAAA;AACnD,QAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;IAC3E;;AAoSA,IAAA,IAAW,WAAW,GAAA;QAClB,OAAO,IAAI,CAAC,YAAY;IAC5B;IACA,IAAW,WAAW,CAAC,GAAW,EAAA;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,GAAG;AACtB,QAAA,IAAI,CAAC,YAAY,GAAG,GAAG;IAC3B;;AAGA,IAAA,IAAW,QAAQ,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,cAAc,GAAG,CAAC;AAC1B,YAAA,IAAI,CAAC,QAAQ;YACb,IAAI,CAAC,QAAQ,KAAA,SAAA;IACrB;;AAGA,IAAA,IAAW,QAAQ,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,OAAA,SAAA;QACJ;QACA,OAAA,WAAA;IACJ;AAEA;;;;;;;AAOG;AACH,IAAA,IAAW,KAAK,GAAA;QACZ,OAAO,IAAI,CAAC,MAAM;IACtB;AAEA;;;;;;;AAOG;IACH,IAAW,KAAK,CAAC,KAAoB,EAAA;AACjC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,KAAK;IACjC;AAEA;;;;;;;AAOG;AACH,IAAA,IAAW,KAAK,GAAA;QACZ,OAAO,IAAI,CAAC,MAAM;IACtB;AAEA;;;;;;;AAOG;AACH,IAAA,IAAW,YAAY,GAAA;QACnB,OAAO,IAAI,CAAC,aAAa;IAC7B;AAEA;;;;;;;AAOG;AACH,IAAA,IAAW,mBAAmB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK;IAC7B;AACA;;;;;;;AAOG;IACH,IAAW,mBAAmB,CAAC,KAAkB,EAAA;AAC7C,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK;IAC9B;AAEA;;;;;;AAMG;AACH,IAAA,IAAW,SAAS,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS;IAClC;AAEA;;;;;;;AAOG;AACH,IAAA,IAAW,cAAc,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc;IACtC;AACA;;;;;;;AAOG;IACH,IAAW,cAAc,CAAC,KAAa,EAAA;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,KAAK;IACvC;;AAGA,IAAA,IAAW,QAAQ,GAAA;AACf,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ;AAC9B,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,OAAO,IAAI,CAAC,YAAY;QAC5B;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,KAAA,SAAA,0BAAwB;YACtC,OAAO,IAAI,CAAC,eAAe;QAC/B;QACA,OAAO,IAAI,CAAC,iBAAiB;IACjC;AAWA;;;;;;;;;;;;AAYG;AAEH,IAAA,IACW,gBAAgB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,wBAAwB;IAClE;IACA,IAAW,gBAAgB,CAAC,KAA6B,EAAA;AACrD,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;IAClC;AAqCA,IAAA,WAAA,GAAA;AAz2BU,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACjD,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACxC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAW,QAAQ,CAAC;QAClC,IAAA,CAAA,eAAe,GAAG,MAAM,CAAoB,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACrF,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAChD,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEnE;;;;;;;;;;;;AAYG;QAEI,IAAA,CAAA,kBAAkB,GAAG,KAAK;AAajC;;;;;;;;;;;;;;;AAeG;QAEI,IAAA,CAAA,eAAe,GAAoB,IAAI;AAkD9C;;;;;;;;;;;;AAYG;QAEI,IAAA,CAAA,iBAAiB,GAAG,KAAK;AA8GhC;;;;;;;;;;;;AAYG;QAEI,IAAA,CAAA,QAAQ,GAAW,IAAI;;AA8FvB,QAAA,IAAA,CAAA,QAAQ,GAAG,WAAW,CAAC;AAE9B;;;;;AAKG;QAEI,IAAA,CAAA,QAAQ,GAAG,KAAK;AAgCvB;;;;;;AAMG;AAEI,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAmC;AAEpE;;;;;;AAMG;AAEI,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAkB;AAElD;;;;;;AAMG;AAEI,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAmC;AAEpE;;;;;;AAMG;AAEI,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAkB;AAElD;;;;;;AAMG;AAEI,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAA2B;AAE7D;;;;;;AAMG;AAEI,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAA8B;AAEzE;;;;;;AAMG;AAEI,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAe;AAEpD;;;;;;;;;;;;;;;;;;;;AAoBG;QAEI,IAAA,CAAA,YAAY,GAAqB,IAAI;AAE5C;;;;;;;;;;;;;;;;;;;AAmBG;QAEI,IAAA,CAAA,cAAc,GAAqB,IAAI;AAE9C;;;;;;;;;;;;;;;;;;;AAmBG;QAEI,IAAA,CAAA,cAAc,GAAqB,IAAI;AAE9C;;;;;;;;;;;;;;;;;AAiBG;QAEI,IAAA,CAAA,kBAAkB,GAAqB,IAAI;AAElD;;;;;;;;;;;;;;;;;;;AAmBG;QAEI,IAAA,CAAA,eAAe,GAAqB,IAAI;AAE/C;;;;;;;;;;;;;;;;;;;AAmBG;QAEI,IAAA,CAAA,aAAa,GAAqB,IAAI;AAE7C;;;;;;;;;;;;;;;;;AAiBG;QAEI,IAAA,CAAA,kBAAkB,GAAqB,IAAI;AAElD;;;;;;;;;;;;;;;;;AAiBG;QAEI,IAAA,CAAA,iBAAiB,GAAqB,IAAI;;QAe1C,IAAA,CAAA,WAAW,GAAiC,IAAI;QAU7C,IAAA,CAAA,iBAAiB,GAAe,IAAI;;QAgKvC,IAAA,CAAA,eAAe,GAAG,IAAI;;QAEtB,IAAA,CAAA,WAAW,GAAG,EAAE;;QAEhB,IAAA,CAAA,oBAAoB,GAAG,OAAO;;QAE9B,IAAA,CAAA,gBAAgB,GAAG,EAAE;QAwBlB,IAAA,CAAA,aAAa,GAAG,SAAS;QACzB,IAAA,CAAA,QAAQ,GAAG,SAAS;QACpB,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,MAAM,GAAG,EAAE;QACX,IAAA,CAAA,aAAa,GAAG,EAAE;QAClB,IAAA,CAAA,SAAS,GAAG,EAAE;QACd,IAAA,CAAA,YAAY,GAAG,EAAE;QACjB,IAAA,CAAA,aAAa,GAAG,EAAE;QAElB,IAAA,CAAA,gBAAgB,GAAG,EAAE;QACrB,IAAA,CAAA,gBAAgB,GAA0B,IAAI;AAC9C,QAAA,IAAA,CAAA,uBAAuB,GAAG,yBAAyB,CAAC,sBAAsB,CAAC;AAC3E,QAAA,IAAA,CAAA,MAAM,GAAG,aAAa,CAAC,OAAO;QAC9B,IAAA,CAAA,SAAS,GAAc,IAAI;AAC3B,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;QAC9B,IAAA,CAAA,kBAAkB,GAAe,IAAI;QACrC,IAAA,CAAA,iBAAiB,GAAqB,IAAI;AAC1C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE;AAGvC,QAAA,IAAA,CAAA,GAAG,GAAW,CAAA,UAAA,EAAa,OAAO,EAAE,EAAE;QACtC,IAAA,CAAA,iBAAiB,GAAG,KAAK;QACzB,IAAA,CAAA,KAAK,GAAG,IAAI;QACZ,IAAA,CAAA,SAAS,GAAG,EAAE;QACd,IAAA,CAAA,WAAW,GAAG,SAAS;QACvB,IAAA,CAAA,eAAe,GAAG,IAAI;AAEtB,QAAA,IAAA,CAAA,sBAAsB,GAAqB,gBAAgB,CAAC,GAAG;AAE/D,QAAA,IAAA,CAAA,wBAAwB,GAA2B,EAAE,aAAa,EAAE,KAAK,EAAE;QAC3E,IAAA,CAAA,gBAAgB,GAAG,EAAE;QA6TnB,IAAA,CAAA,eAAe,GAAG,MAAK;AAC7B,YAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC3D,gBAAA,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;oBACtE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,GAAG,aAAa,CAAC,OAAO;gBACnF;qBAAO;oBACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,aAAa,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO;gBACrF;YACJ;iBAAO;;AAEH,gBAAA,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,OAAO;YACtC;YACA,IAAI,CAAC,sBAAsB,EAAE;AACjC,QAAA,CAAC;AAoCS,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,OAAY,KAAa;AAC5C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO;YAClE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK;AAC9D,YAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AACtF,QAAA,CAAC;AA3WG,QAAA,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAK;YACvC,IAAI,CAAC,uBAAuB,GAAG,yBAAyB,CAAC,sBAAsB,EAAE,KAAK,CAAC;QAC3F,CAAC,EAAE,IAAI,CAAC;IACZ;IAEO,kBAAkB,GAAA;AACrB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,0BAA0B,CAAgB;QAEpH,IAAI,CAAC,gBAAgB,GAAG;AACpB,YAAA,MAAM,EAAE,aAAa;YACrB,cAAc,EAAE,IAAI,sBAAsB,EAAE;YAC5C,gBAAgB,EAAE,IAAI,oBAAoB,EAAE;AAC5C,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,mBAAmB,EAAE,IAAI;YACzB,uBAAuB,EAAE,CAAC,aAAa;SAC1C;IACL;;IAGO,qBAAqB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE;YAC9C,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;QAC5C;AAEA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE;YACpD,MAAM,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE;AACpE,YAAA,MAAM,cAAc,GAAG,IAAI,SAAS,EAAsB;YAC1D,cAAc,CAAC,KAAK,CAAC;AACjB,gBAAA,GAAG,aAAa;AAChB,gBAAA,GAAG;AACN,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,cAAc;QAC7C;IACJ;;IAGO,QAAQ,GAAA;AACX,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAY,SAAS,EAAE,IAAI,CAAC;AAC/D,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC;AAC7C,QAAA,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC;AAC3F,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;IACnG;;IAGO,eAAe,GAAA;QAClB,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;AAClC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC;YAC3F,IAAI,CAAC,sBAAsB,EAAE;AAC7B,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QAC5B;QACA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAc,KAAI;AAClF,YAAA,MAAM,SAAS,GAAgB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACpE,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;AACpC,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,KAAsC,KAAI;;AAExE,YAAA,MAAM,uBAAuB,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,MAAM;YACnG,IAAI,uBAAuB,EAAE;AACzB,gBAAA,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,uBAAuB,CAAC;YAC5D;YACA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE;AAC/B,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,MAAM;YACrG;AACJ,QAAA,CAAC,CAAC;IACN;;IAGO,WAAW,GAAA;AACd,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;QACrB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACzC;AAEA;;;;;;;AAOG;IACI,MAAM,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AACnD,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QAC5B;AACA,QAAA,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,eAAe,CAAC;AACtF,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB,IAAI,CAAC,mBAAmB,EAAE;QAC9B;IACJ;AAEA;;;;;;;AAOG;IACI,IAAI,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AACnD,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QAC5B;AACA,QAAA,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,eAAe,CAAC;AACtF,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;QACnC,IAAI,CAAC,mBAAmB,EAAE;IAC9B;AAEA;;;;;;;AAOG;IACI,KAAK,GAAA;AACR,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;IACzB;AAEA;;AAEG;IACI,YAAY,GAAA;AACf,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC5B;AAEA;;;;;;;AAOG;AACH,IAAA,IAAW,SAAS,GAAA;AAChB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACrD,QAAA,OAAO,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE;IAC5E;AAEA;;;;;AAKG;AACI,IAAA,cAAc,CAAC,IAAS,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;IAChE;;AAGA,IAAA,IAAW,UAAU,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,cAAc,GAAG,gBAAgB;IACtE;;IAGO,mBAAmB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB;QACJ;AACA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG;AAChC,YAAA,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW;AACjC,YAAA,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC3B,SAAA,GAAG,IAAI,CAAC,WAAW;AACpB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5E;;QAEA,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QACpC,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;AAC/C,QAAA,MAAM,IAAI,GAA4B;YAClC,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE;SACjE;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACb;QACJ;QACA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;;QAE9B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAC7D,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC;AAC9D,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,EAAE;AACvC,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5B;;IAGO,kBAAkB,GAAA;;QAErB,OAAO,IAAI,CAAC,WAAW,KAAK,EAAE,IAAI,IAAI,CAAC,eAAe;IAC1D;;AAGO,IAAA,iBAAiB,CAAC,KAAW,EAAA;AAChC,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACrB,YAAA,MAAM,IAAI,GAA+B;AACrC,gBAAA,UAAU,EAAE,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK;AAClE,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,MAAM,EAAE;aACX;AACD,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;YAC3B;QACJ;QACA,IAAI,CAAC,UAAU,EAAE;IACrB;AAEA;;;;;AAKG;AACI,IAAA,aAAa,CAAC,CAAkC,EAAA;AACnD,QAAA,MAAM,IAAI,GAAoC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;AAC/F,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,QAAA,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;IAC1B;;AAGO,IAAA,aAAa,CAAC,CAAkC,EAAA;AACnD,QAAA,MAAM,IAAI,GAAoC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;AAC/F,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,QAAA,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AACtB,QAAA,IAAI,CAAC,CAAC,MAAM,EAAE;YACV;QACJ;AACA,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;QACrB,MAAM,KAAK,GAAI,CAAC,CAAC,KAAuB,EAAE,GAAG,KAAK,KAAK;AACvD,QAAA,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,KAAK,EAAE;QAC1C;aAAO;YACH,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,cAAc,EAAE;QACzB;IACJ;;IAGO,YAAY,GAAA;QACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACrC;;AAGO,IAAA,aAAa,CAAC,KAAoB,EAAA;AACrC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,EAAE;YAC/C,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;YACvB,IAAI,CAAC,KAAK,EAAE;QAChB;AACA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;YACrB,IAAI,CAAC,KAAK,EAAE;QAChB;IACJ;;IAGO,YAAY,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,4BAA4B,GAAG,IAAI,CAAC,eAAe,CAAC,+BAA+B;IACvI;;AAIO,IAAA,gBAAgB,CAAC,EAAO,EAAA;AAC3B,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;IAC/B;;AAGO,IAAA,iBAAiB,CAAC,EAAO,EAAA;AAC5B,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;IAChC;;AAGO,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AACvC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;IAC9B;;AAGO,IAAA,OAAO,CAAC,KAAY,EAAA;QACvB,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,IAAI,CAAC,MAAM,EAAE;QACjB;IACJ;;IAGO,MAAM,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,cAAc,EAAE;QACzB;IACJ;;IAGO,mBAAmB,GAAA;AACtB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE;IAC/D;;IAGO,mBAAmB,GAAA;QACtB,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,aAAa,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC;IAC7H;IAgBQ,cAAc,GAAA;QAClB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AAC1C,YAAA,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,OAAO;QACtC;aAAO;AACH,YAAA,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,OAAO;QACtC;IACJ;AAEA,IAAA,IAAY,gBAAgB,GAAA;AACxB,QAAA,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK;IAC1E;AAEA,IAAA,IAAY,aAAa,GAAA;QACrB,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc;IACzF;;AAGU,IAAA,kBAAkB,CAAC,IAAW,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;AACvD,YAAA,OAAO,IAAI;QACf;AAEA,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,IAAG;YAClB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;AAExE,YAAA,OAAO,IAAI,KAAK,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE;AAC/D,QAAA,CAAC,CAAC;IACN;IAEU,UAAU,GAAA;AAChB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QACxD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,iBAAiB,IAAI,CAAC,SAAS;IAC/D;IAQU,sBAAsB,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ;QAC9C;IACJ;;AAGU,IAAA,qBAAqB,CAAC,GAAU,EAAE,GAAG,GAAG,IAAI,EAAA;QAClD,IAAI,GAAG,EAAE;YACL,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;AAChD,YAAA,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;AAC3B,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;YACxE;QACJ;aAAO;AACH,YAAA,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE;AACrB,gBAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YACvC;QACJ;IACJ;AAEA;;AAEG;AACO,IAAA,oBAAoB,CAAC,GAAU,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK;YAC/E,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;YACjC,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU;AACvC,SAAA,CAAC,CAAC;IACP;IAEU,kBAAkB,CAAC,YAAmB,EAAE,YAAmB,EAAA;AACjE,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;;AAEtB,YAAA,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,KAAK,CAAC;AAC/C,YAAA,OAAO,EAAE;QACb;AACA,QAAA,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1E,QAAA,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACxE,QAAA,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC;AACtC,QAAA,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,KAAK,CAAC;QAC/C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3F;AAEA,IAAA,IAAc,QAAQ,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE;;AAE9E,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,EAAqB,CAAC;AACrE,YAAA,OAAO,KAAK,IAAI,KAAK,CAAC,QAAQ;QAClC;AAEA,QAAA,OAAO,KAAK;IAChB;8GA5wCkB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,kBAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAwBnB,gBAAgB,CAAA,EAAA,gBAAA,EAAA,CAAA,kBAAA,EAAA,kBAAA,EAMhB,gBAAgB,CAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,CAAA,mBAAA,EAAA,mBAAA,EAwFhB,gBAAgB,CAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAmOhB,gBAAgB,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA4HtB,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,WAAW,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAuB1C,uBAAuB,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,WAAW,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAuB5C,uBAAuB,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,WAAW,EAAA,EAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAqB5C,2BAA2B,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,WAAW,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAuBhD,wBAAwB,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,WAAW,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAuB7C,sBAAsB,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,WAAW,EAAA,EAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAqB3C,2BAA2B,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,WAAW,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAqBhD,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,WAAW,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAI9B,iBAAiB,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EA8B/B,kBAAkB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAGlB,kBAAkB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EA9BF,sBAAsB,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAItB,iBAAiB,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAQvC,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGjB,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,iBAAiB,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAMvB,WAAW,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAGb,WAAW,iEAS3B,kBAAkB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAxpBd,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAD1C;;sBAyBI,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAMrC,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAwBrC;;sBAgBA,WAAW;uBAAC,SAAS;;sBACrB;;sBA8BA,WAAW;uBAAC,aAAa;;sBACzB;;sBAgBA,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAgBrC;;sBAgCA;;sBAsBA;;sBAgBA;;sBAWA;;sBA2BA;;sBAGA;;sBAkCA;;sBA4BA;;sBAgBA;;sBASA;;sBAIA,WAAW;uBAAC,iBAAiB;;sBAS7B,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAUrC;;sBAeA;;sBAeA;;sBAUA;;sBAUA;;sBAUA;;sBAUA;;sBAUA;;sBAUA;;sBAwBA,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,qBAAqB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;;sBAuBzD,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,uBAAuB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;;sBAuB3D,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,uBAAuB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;;sBAqB3D,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,2BAA2B,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;;sBAuB/D,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,wBAAwB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;;sBAuB5D,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,sBAAsB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;;sBAqB1D,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,2BAA2B,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;;sBAqB/D,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,0BAA0B,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;;sBAI9D,YAAY;uBAAC,UAAU,CAAC,MAAM,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAGlE,SAAS;uBAAC,YAAY,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAItE,SAAS;uBAAC,YAAY,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAIjE,SAAS;uBAAC,aAAa;;sBAIvB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAG7C,SAAS;uBAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAGtE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAGnD,SAAS;uBAAC,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAG1D,SAAS;uBAAC,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAGxD,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,kBAAkB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;;sBAGzD,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,kBAAkB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;;sBAGzD,YAAY;uBAAC,kBAAkB;;sBAwK/B;;;AC36BL;;AAEG;AAMG,MAAO,wBAAyB,SAAQ,qBAAqB,CAAA;AAC/D,IAAA,IACW,cAAc,GAAA;AACrB,QAAA,OAAO,KAAK;IAChB;AAEA,IAAA,IAAoB,QAAQ,GAAA;AACxB,QAAA,OAAO,KAAK;IAChB;IACA,IAAoB,QAAQ,CAAC,KAAc,EAAA;IAC3C;AAEgB,IAAA,OAAO,CAAC,KAAM,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,KAAK;AACxC,QAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;IACnC;8GAfS,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,2BAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,SAAA,EAFtB,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC,iDAD5E,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;2FAG5B,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE,2BAA2B;oBACrC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAA,wBAA0B,EAAE,CAAC;AACzF,iBAAA;;sBAEI,WAAW;uBAAC,2BAA2B;;;ACJ5C;AAOM,MAAO,yBAA0B,SAAQ,oBAAoB,CAAA;AANnE,IAAA,WAAA,GAAA;;AAOW,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAe,mBAAmB,CAAC;AAC9C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,kBAAkB,CAAC;;QAIxC,IAAA,CAAA,UAAU,GAAG,KAAK;AAEzB;;;AAGG;QAEa,IAAA,CAAA,QAAQ,GAA4C,IAAI;QA+J9D,IAAA,CAAA,aAAa,GAAG,MAAK;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,IAAI;AAC3C,QAAA,CAAC;AA+BJ,IAAA;;AA7LG,IAAA,IAAoB,eAAe,GAAA;;QAE/B,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,aAAa;IACjD;AAEA,IAAA,IAAc,gBAAgB,GAAA;AAC1B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc;QAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,YAAY;AAC1D,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,YAAY;IACpF;AAEA,IAAA,IAAc,gBAAgB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc;AAC5B,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;AAC7D,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;IAC7B;AAEA,IAAA,IAAc,cAAc,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;AAC7B,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO;AACvB,iBAAA,IAAI,CAAC,CAAC,CAA+B,EAAE,CAA+B,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QACtG;AACA,QAAA,OAAO,IAAI;IACf;AAEA;;;;;;AAMG;AACH,IAAA,IAAoB,KAAK,GAAA;QACrB,MAAM,KAAK,GAA4B,EAAE;AACzC,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;AAC7B,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAyC;AACrE,YAAA,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE;AAChC,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACjB,oBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;gBACrB;YACJ;QACJ;AAEA,QAAA,OAAO,KAAK;IAChB;AAEA;;AAEG;IACI,OAAO,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE;IACpC;AAEA;;AAEG;AACI,IAAA,MAAM,CAAC,IAAK,EAAA;AACf,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE;IACpC;AAEA;;AAEG;IACa,cAAc,GAAA;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACtB;AAEA;;AAEG;IACa,aAAa,GAAA;QACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACrE,QAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE;IACpC;AAEA;;AAEG;IACa,YAAY,GAAA;QACxB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,EAAE;AAC3F,YAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAClC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QAC3B;aAAO;YACH,KAAK,CAAC,YAAY,EAAE;QACxB;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE;IACpC;AAGA;;AAEG;IACa,YAAY,GAAA;AACxB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;AAC9G,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,KAAK,SAAS,EAAE;YAC5D,IAAI,CAAC,kBAAkB,EAAE;QAC7B;aAAO;YACH,KAAK,CAAC,YAAY,EAAE;QACxB;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE;IACpC;AAEA;;AAEG;AACa,IAAA,UAAU,CAAC,IAAkC,EAAA;QACzD,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;YACrC;QACJ;QACA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;AAC5C,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE;IACpC;AAEA;;AAEG;IACa,oBAAoB,GAAA;QAChC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe;IAC7D;AAEA;;AAEG;IACa,eAAe,CAAC,GAAsB,EAAE,KAAqB,EAAA;QACzE,QAAQ,GAAG;YACP,KAAK,iBAAiB,CAAC,KAAK;gBACxB,IAAI,CAAC,WAAW,EAAE;gBAClB;YACJ,KAAK,iBAAiB,CAAC,KAAK;gBACxB,IAAI,CAAC,WAAW,EAAE;gBAClB;YACJ,KAAK,iBAAiB,CAAC,MAAM;gBACzB,IAAI,CAAC,KAAK,EAAE;gBACZ;YACJ,KAAK,iBAAiB,CAAC,GAAG;AACtB,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;;IAE7B;IAEgB,eAAe,GAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC;IAC3E;AAEA;;AAEG;IACa,WAAW,GAAA;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC;QAC1E,KAAK,CAAC,WAAW,EAAE;IACvB;IAEmB,kBAAkB,CAAC,QAAa,EAAA,EAAU;IAMrD,WAAW,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AACzB,YAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE;YAChC;QACJ;QACA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAC9C;QAEA,IAAI,CAAC,KAAK,EAAE;IAChB;IAEQ,WAAW,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;YACzB;QACJ;aAAO;AACH,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;QACrC;IACJ;IAEQ,gBAAgB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,WAAW,YAAY,wBAAwB;IAC/D;IAEQ,kBAAkB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE;AACjC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACxD;IACJ;8GA5MS,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,0GAKd,gBAAgB,CAAA,EAAA,EAAA,SAAA,EARzB,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,yBAAyB,EAAE,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAelE,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3B1C,mlBAaA,4CDAc,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAEnB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,SAAA,EAEpB,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAA,yBAA2B,EAAE,CAAC,EAAA,OAAA,EAC1E,CAAC,kBAAkB,CAAC,EAAA,QAAA,EAAA,mlBAAA,EAAA;;sBAO5B,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAOrC,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,qBAAqB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;;;AEvBjE;MAKa,qBAAqB,CAAA;AACvB,IAAA,SAAS,CACZ,UAAiB,EACjB,WAAgB,EAChB,UAAe,EACf,gBAAwC,EACxC,cAAA,GAA2G,qBAAqB,EAChI,mBAA4B,KAAK,EAAA;QACjC,IAAI,CAAC,UAAU,EAAE;AACb,YAAA,OAAO,EAAE;QACb;QACA,IAAI,gBAAgB,EAAE;AAClB,YAAA,OAAO,UAAU;QACrB;QACA,gBAAgB,CAAC,YAAY,GAAG,gBAAgB,CAAC,YAAY,IAAI,UAAU;QAC3E,OAAO,cAAc,CAAC,UAAU,EAAE,WAAW,EAAE,gBAAgB,CAAC;IACpE;8GAhBS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,UAAU,EAAE;AACf,iBAAA;;AAoBD;MAKa,oBAAoB,CAAA;AAJjC,IAAA,WAAA,GAAA;AAKW,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAe,mBAAmB,CAAC;AA0B3D,IAAA;IAvBU,SAAS,CAAC,UAAiB,EAAE,QAAa,EAAE,QAAa,EAAE,gBAAkC,EAAE,eAA8B,EAAA;;AAEhI,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,UAAU;AACpC,QAAA,IAAI,CAAC,CAAC,QAAQ,IAAI,QAAQ,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE;AACrD,YAAA,OAAO,UAAU;QACrB;QACA,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,CAAC;AACvF,QAAA,IAAI,gBAAgB,KAAK,gBAAgB,CAAC,IAAI,EAAE;AAC5C,YAAA,MAAM,OAAO,GAAG,gBAAgB,KAAK,gBAAgB,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC;YACnE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,KAAI;AAChB,gBAAA,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACxD,YAAA,CAAC,CAAC;QACN;AACA,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAI;YACzC,KAAK,CAAC,OAAO,CAAC;AACV,gBAAA,QAAQ,EAAE,IAAI;gBACd,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAC9B,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ;AAChC,aAAA,CAAC;AACF,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,MAAM;IACjB;8GA1BS,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,UAAU,EAAE;AACf,iBAAA;;AA8BD,SAAS,qBAAqB,CAAI,UAAe,EAAE,WAAmB,EAAE,gBAAwC,EAAA;IAC5G,IAAI,CAAC,WAAW,EAAE;AACd,QAAA,OAAO,UAAU;IACrB;AAEA,IAAA,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,gBAAgB;AACxD,IAAA,MAAM,IAAI,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE;AAEpE,IAAA,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,IAAG;AAC5B,QAAA,MAAM,GAAG,GAAG,YAAY,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,CAAA,EAAG,IAAI,EAAE;AAC9D,QAAA,OAAO,CAAC,aAAa,GAAG,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC;AACnE,IAAA,CAAC,CAAC;AACN;AAEA,SAAS,eAAe,CAAC,GAAW,EAAE,aAAa,GAAG,KAAK,EAAA;AACvD,IAAA,OAAO,CAAC,aAAa,GAAG,GAAG,GAAG,GAAG,CAAC,iBAAiB,EAAE;SAChD,SAAS,CAAC,MAAM;AAChB,SAAA,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;AAC/B;AAEA,SAAS,OAAO,CAAI,IAAS,EAAE,GAAiC,EAAA;IAC5D,MAAM,MAAM,GAAwB,EAAE;IACtC,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,GAAG,CAAC,IAAO,KAAK,IAAI,CAAC,GAAG,CAAC;AAErE,IAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;QAE9B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvE;AAEA,IAAA,OAAO,MAAM;AACjB;AAEA;;;;;;;;AAQG;SACa,2BAA2B,CAAI,UAAe,EAAE,WAAmB,EAAE,gBAAwC,EAAA;IACzH,IAAI,CAAC,WAAW,EAAE;AACd,QAAA,OAAO,UAAU;IACrB;AAEA,IAAA,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,gBAAgB;IACxD,MAAM,IAAI,GAAG,eAAe,CAAC,WAAW,EAAE,aAAa,CAAC;AAExD,IAAA,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,IAAG;AAC5B,QAAA,MAAM,GAAG,GAAG,YAAY,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,CAAA,EAAG,IAAI,EAAE;QAC9D,OAAO,eAAe,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC7D,IAAA,CAAC,CAAC;AACN;;AC7DA;;;;AAIG;AACH,MAAM,UAAU,GAAG,CAAC,IAAc,EAAE,IAAc,KAAW;IACzD,MAAM,OAAO,GAAG,EAAE;AAClB,IAAA,IAAI,CAAC,OAAO,CAAC,KAAK,IAAG;QACjB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAClB,YAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QACvB;AACJ,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,OAAO;AAClB,CAAC;AAED;;;;;;;;;;;;;;;;;;AAkBG;AA6BG,MAAO,iBAAkB,SAAQ,qBAAqB,CAAA;;AA2CxD,IAAA,IAAW,YAAY,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa;IACjE;;IAEA,IAAW,YAAY,CAAC,GAAiB,EAAA;AACrC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,GAAG,GAAG;QACzF,IAAI,CAAC,UAAU,EAAE;IACrB;AAMA,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AAvDX;;;AAGG;QAEI,IAAA,CAAA,eAAe,GAAG,IAAI;AAqB7B;;;;;;AAMG;AAEI,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAoC;QAgBrE,IAAA,CAAA,eAAe,GAAG,EAAE;AAM1B,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;IAChC;AAIO,IAAA,WAAW,CAAC,KAAY,EAAA;QAC3B,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,IAAI,EAAE;IACf;AAGO,IAAA,QAAQ,CAAC,KAAY,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC;QACtC;IACJ;;AAGA,IAAA,IAAW,kBAAkB,GAAA;QACzB,OAAO,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,iBAAiB;IAC3D;AAEA;;AAEG;AACI,IAAA,WAAW,CAAC,KAAoB,EAAA;;AAEnC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,EAAE;AACnD,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,KAAK,EAAE;QAChD;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;YACtD,IAAI,CAAC,MAAM,EAAE;QACjB;IACJ;AAEA;;AAEG;AACI,IAAA,eAAe,CAAC,GAAG,EAAA;AACtB,QAAA,IAAI,GAAG,CAAC,OAAO,EAAE;YACb,IAAI,CAAC,cAAc,EAAE;QACzB;aAAO;YACH,IAAI,CAAC,gBAAgB,EAAE;QAC3B;IACJ;AAEA;;AAEG;AACI,IAAA,UAAU,CAAC,KAAY,EAAA;QAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,GAAG,EAAE;AAChF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS;AACnC,QAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC;AAC5D,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;AACzE,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS;IAClG;;IAGO,SAAS,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AAC5C,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;AACpF,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS;QAClG;IACJ;AAEA;;AAEG;IACI,cAAc,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa;IACxC;AAEA;;AAEG;AACH,IAAA,IAAW,OAAO,GAAA;QACd,OAAO;AACH,YAAA,SAAS,EAAE;SACd;IACL;AAEA;;AAEG;AACI,IAAA,gBAAgB,CAAC,KAAY,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf;QACJ;AACA,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC;AAClC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE;QACjC;aAAO;AACH,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC/B;QACA,KAAK,CAAC,eAAe,EAAE;IAC3B;AAEA;;;;;;;;AAQG;AACI,IAAA,MAAM,CAAC,QAAoB,EAAE,qBAA+B,EAAE,KAAa,EAAA;QAC9E,IAAI,QAAQ,EAAE;AACV,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,qBAAqB,CAAC;AAC9F,YAAA,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC;QAC1C;IACJ;AAEA;;;;;;;AAOG;IACI,QAAQ,CAAC,KAAiB,EAAE,KAAa,EAAA;QAC5C,IAAI,KAAK,EAAE;AACP,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC;AACvE,YAAA,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC;QAC1C;IACJ;AAEA;;;;;;;AAOG;IACI,cAAc,CAAC,YAAsB,EAAE,KAAa,EAAA;QACvD,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC;AACjH,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC;AACzE,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC;IAC1C;AAEA;;;;;;;AAOG;IACI,gBAAgB,CAAC,YAAsB,EAAE,KAAa,EAAA;QACzD,IAAI,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE;AACpD,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE;YAChE,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnI;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC;IAC1C;AAEA;;;;;;;;;;;;;;;;;;AAkBG;AACI,IAAA,eAAe,CAAC,MAAW,EAAE,MAAM,GAAG,IAAI,EAAE,KAAa,EAAA;AAC5D,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;YACtB;QACJ;QACA,IAAI,MAAM,EAAE;YACR,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;QACvC;aAAO;YACH,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;QAClC;IACJ;;IAGO,YAAY,GAAA;QACf,IAAI,CAAC,YAAY,EAAE;;;;AAKnB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC/B;aAAO;AACH,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,KAAK,EAAE;QAChD;QACA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACrC;;AAGO,IAAA,gBAAgB,CAAC,OAAiB,EAAA;QACrC,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,WAAW,EAAE;AAC7C,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE;QAC1C;aAAO;YACH,IAAI,OAAO,EAAE;AACT,gBAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,KAAK,EAAE;YAChD;iBAAO;AACH,gBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;gBACrC,IAAI,CAAC,MAAM,EAAE;YACjB;QACJ;IACJ;IAEU,YAAY,CAAC,SAAmB,EAAE,KAAa,EAAA;AACrD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;AAChF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QAC9E,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;QACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC;QACnD,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;QACtD,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;AACtD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;AACvF,QAAA,MAAM,IAAI,GAAqC;YAC3C,QAAQ;YACR,QAAQ;YACR,YAAY;YACZ,YAAY;YACZ,KAAK;YACL,OAAO;YACP,KAAK;AACL,YAAA,KAAK,EAAE,IAAI;YACX,WAAW;AACX,YAAA,MAAM,EAAE;SACX;AACD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACd,YAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;AAChE,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ;AAC3B,YAAA,IAAI,WAAW,KAAK,IAAI,CAAC,WAAW,EAAE;gBAClC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW;YAC7D;iBAAO;AACH,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;YAClF;AACA,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACzC;AAAO,aAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACtB,YAAA,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,SAAS,EAAE,gBAAgB,CAAC,EAAE,KAAK,CAAC;QAC9E;IACJ;IAEU,iBAAiB,CAAC,YAAmB,EAAE,YAAmB,EAAA;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,YAAY;QAC9F,OAAO,IAAI,CAAC;cACN,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,YAAY;AACjD,cAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC;IAC9C;IAEU,wBAAwB,GAAA;QAC9B,OAAO,IAAI,CAAC,iBAAiB;aACxB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,qCAAqC,GAAG,IAAI,CAAC,eAAe,CAAC,mCAAmC,CAAC;IACvJ;;AAGQ,IAAA,iBAAiB,CAAC,SAAgB,EAAA;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YACnE,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACzD,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,OAAO,KAAK;IAChB;8GA3US,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,CAAA,iBAAA,EAAA,iBAAA,EAMN,gBAAgB,CAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,SAAA,EA/BzB;YACP,kBAAkB;AAClB,YAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,iBAAiB,EAAE;YAChE,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI;AAC5E,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA4DU,yBAAyB,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7JxC,u6NA8HA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED3BQ,gBAAgB,oJAChB,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACP,WAAW,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,EACX,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,iBAAiB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,kBAAkB,4EAClB,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,yBAAyB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,kCAAkC,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClC,iBAAiB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,oBAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,wBAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,4BAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,qBAAqB,8GACrB,wBAAwB,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACzB,qBAAqB,kDACrB,oBAAoB,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAGf,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA5B7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,SAAA,EAEV;wBACP,kBAAkB;AAClB,wBAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,mBAAmB,EAAE;wBAChE,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,mBAAmB,EAAE,KAAK,EAAE,IAAI;qBAC5E,EAAA,OAAA,EACQ;wBACL,gBAAgB;wBAChB,OAAO;wBACP,WAAW;wBACX,sBAAsB;wBACtB,iBAAiB;wBACjB,kBAAkB;wBAClB,gBAAgB;wBAChB,yBAAyB;wBACzB,kCAAkC;wBAClC,iBAAiB;wBACjB,qBAAqB;wBACrB,wBAAwB;wBACxB,kBAAkB;wBAClB,kBAAkB;wBAClB,yBAAyB;wBACzB,qBAAqB;wBACrB;AACH,qBAAA,EAAA,QAAA,EAAA,u6NAAA,EAAA;;sBAQA,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAmBrC;;sBAUA;;sBAIA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,yBAAyB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAsBrD,YAAY;uBAAC,mBAAmB,EAAE,CAAC,QAAQ,CAAC;;sBAC5C,YAAY;uBAAC,uBAAuB,EAAE,CAAC,QAAQ,CAAC;;sBAOhD,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;AEpK9C;AACO,MAAM,oBAAoB,GAAG;IAChC,iBAAiB;IACjB,wBAAwB;IACxB,0BAA0B;IAC1B,sBAAsB;IACtB,uBAAuB;IACvB,uBAAuB;IACvB,2BAA2B;IAC3B,qBAAqB;IACrB,2BAA2B;IAC3B,iBAAiB;IACjB,kBAAkB;IAClB,kBAAkB;IAClB;;;AClCJ;;;AAGG;MASU,cAAc,CAAA;8GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAd,cAAc,EAAA,OAAA,EAAA,CAAAA,iBAAA,EAAAC,wBAAA,EAAAC,0BAAA,EAAAC,sBAAA,EAAAC,uBAAA,EAAAC,uBAAA,EAAAC,2BAAA,EAAAC,qBAAA,EAAAC,2BAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAAR,iBAAA,EAAAC,wBAAA,EAAAC,0BAAA,EAAAC,sBAAA,EAAAC,uBAAA,EAAAC,uBAAA,EAAAC,2BAAA,EAAAC,qBAAA,EAAAC,2BAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,CAAA;+GAAd,cAAc,EAAA,OAAA,EAAA,CAAAR,iBAAA,CAAA,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAR1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;AACL,wBAAA,GAAG;AACN,qBAAA;AACD,oBAAA,OAAO,EAAE;AACL,wBAAA,GAAG;AACN;AACJ,iBAAA;;;ACdD;;AAEG;;;;"}