{"version":3,"file":"ng-doc-app-components-api-list.mjs","sources":["../tmp-esm2022/components/api-list/api-list.component.js","../tmp-esm2022/components/api-list/ng-doc-app-components-api-list.js"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, signal, } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { FormBuilder, FormsModule, ReactiveFormsModule, } from '@angular/forms';\nimport { ActivatedRoute, Router, RouterLink } from '@angular/router';\nimport { NgDocKindIconComponent } from '@ng-doc/app/components/kind-icon';\nimport { asArray } from '@ng-doc/core/helpers/as-array';\nimport { NgDocAutofocusDirective, NgDocButtonToggleComponent, NgDocIconComponent, NgDocInputStringDirective, NgDocInputWrapperComponent, NgDocRadioGroupDirective, NgDocTextComponent, NgDocTooltipDirective, } from '@ng-doc/ui-kit';\nimport { NG_REQUEST_BASE_PATH } from '@ng-doc/ui-kit/tokens';\nimport { startWith } from 'rxjs/operators';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nexport class NgDocApiListComponent {\n    constructor() {\n        this.baseUrl = inject(NG_REQUEST_BASE_PATH);\n        this.title = input('API References');\n        this.segment = input();\n        this.apiList = signal([]);\n        this.formBuilder = inject(FormBuilder);\n        this.route = inject(ActivatedRoute);\n        this.router = inject(Router);\n        this.httpClient = inject(HttpClient);\n        this.formGroup = this.formBuilder.group({\n            filter: [''],\n            scope: [''],\n            type: [''],\n        });\n        this.filter = toSignal(this.formGroup.valueChanges.pipe(startWith(this.formGroup.value)), {\n            initialValue: this.formGroup.value,\n        });\n        this.scopes = computed(() => asArray(new Set(this.apiList().flatMap((api) => api.title))).sort());\n        this.types = computed(() => asArray(new Set(this.apiList()\n            .flatMap((api) => api.items)\n            .flatMap((item) => item.type))).sort());\n        this.route.queryParamMap.pipe(takeUntilDestroyed()).subscribe((paramMap) => this.formGroup.setValue({\n            filter: paramMap.get('filter') || null,\n            scope: paramMap.get('scope') || null,\n            type: paramMap.get('type') || null,\n        }));\n        this.formGroup.valueChanges\n            .pipe(takeUntilDestroyed())\n            .subscribe((formValue) => this.router.navigate([], {\n            relativeTo: this.route,\n            queryParams: formValue,\n            queryParamsHandling: 'merge',\n        }));\n        this.filteredApiList = computed(() => {\n            const { filter, scope, type } = this.filter();\n            return this.apiList()\n                .filter((api) => !scope || api.title === scope)\n                .map((api) => ({\n                ...api,\n                items: api.items\n                    .filter((item) => item.name.toLowerCase().includes(filter?.toLowerCase() ?? '') &&\n                    (!type || item.type === type))\n                    .sort((a, b) => a.type.localeCompare(b.type) || a.name.localeCompare(b.name)),\n            }))\n                .filter((api) => api.items.length);\n        });\n    }\n    ngOnInit() {\n        this.httpClient\n            .get(this.baseUrl + asArray('assets/ng-doc', this.segment(), 'api-list.json').join('/'))\n            .subscribe((apiList) => this.apiList.set(apiList));\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: NgDocApiListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.3\", type: NgDocApiListComponent, isStandalone: true, selector: \"ng-doc-api-list\", inputs: { title: { classPropertyName: \"title\", publicName: \"title\", isSignal: true, isRequired: false, transformFunction: null }, segment: { classPropertyName: \"segment\", publicName: \"segment\", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: \"<h1 ng-doc-text>{{ title() }}</h1>\\n<div class=\\\"ng-doc-api-list-wrapper\\\">\\n  <form [formGroup]=\\\"formGroup\\\">\\n    @if (types().length) {\\n      <h3>Declaration types</h3>\\n      <ul class=\\\"ng-doc-filter-list\\\" ngDocRadioGroup formControlName=\\\"type\\\">\\n        @for (type of types(); track type) {\\n          <li>\\n            <button class=\\\"ng-doc-filter-button\\\" ng-doc-button-toggle [value]=\\\"type\\\">\\n              <ng-doc-kind-icon [kind]=\\\"type\\\" size=\\\"medium\\\"></ng-doc-kind-icon>\\n              {{ type }}\\n            </button>\\n          </li>\\n        }\\n      </ul>\\n    }\\n\\n    @if (scopes().length) {\\n      <h3>Scopes</h3>\\n      <ul class=\\\"ng-doc-filter-list\\\" ngDocRadioGroup formControlName=\\\"scope\\\">\\n        @for (scope of scopes(); track scope) {\\n          <li>\\n            <button class=\\\"ng-doc-filter-button\\\" ng-doc-button-toggle [value]=\\\"scope\\\">\\n              {{ scope }}\\n            </button>\\n          </li>\\n        }\\n      </ul>\\n    }\\n\\n    <h3>Filter</h3>\\n    <ng-doc-input-wrapper class=\\\"ng-doc-api-list-filter-input\\\">\\n      <ng-doc-icon icon=\\\"search\\\" ngDocInputWrapperLeft></ng-doc-icon>\\n      <input\\n        ngDocInputString\\n        formControlName=\\\"filter\\\"\\n        placeholder=\\\"Declaration name...\\\"\\n        ngDocAutofocus />\\n    </ng-doc-input-wrapper>\\n  </form>\\n\\n  <div class=\\\"ng-doc-api-list\\\">\\n    @for (scope of filteredApiList(); track scope) {\\n      <div class=\\\"ng-doc-api-scope\\\">\\n        <h3 class=\\\"ng-doc-scope-title\\\" ng-doc-text>{{ scope.title }}</h3>\\n        @if (scope.items.length) {\\n          <ul class=\\\"ng-doc-scope-items\\\">\\n            @for (apiReference of scope.items; track apiReference) {\\n              <li class=\\\"ng-doc-scope-item\\\">\\n                <a class=\\\"ng-doc-scope-item-link\\\" [routerLink]=\\\"[apiReference.route]\\\">\\n                  <ng-doc-kind-icon\\n                    [kind]=\\\"apiReference.type\\\"\\n                    size=\\\"medium\\\"\\n                    [ngDocTooltip]=\\\"apiReference.type\\\">\\n                  </ng-doc-kind-icon>\\n                  {{ apiReference.name }}\\n                </a>\\n              </li>\\n            }\\n          </ul>\\n        }\\n      </div>\\n    }\\n  </div>\\n</div>\\n\", styles: [\":host h1{margin-top:0}:host .ng-doc-filter-list{display:grid;grid-template-columns:repeat(6,1fr);gap:var(--ng-doc-base-gutter);list-style:none;padding:0}@container api-list-wrapper (max-width: 775px){:host .ng-doc-filter-list{grid-template-columns:repeat(4,1fr)}}@container api-list-wrapper (max-width: 600px){:host .ng-doc-filter-list{grid-template-columns:repeat(3,1fr)}}@container api-list-wrapper (max-width: 500px){:host .ng-doc-filter-list{grid-template-columns:repeat(2,1fr)}}@container api-list-wrapper (max-width: 350px){:host .ng-doc-filter-list{grid-template-columns:repeat(1,1fr)}}:host .ng-doc-filter-list .ng-doc-filter-button{justify-content:flex-start;text-wrap:nowrap;width:100%}:host .ng-doc-filter-list .ng-doc-filter-button ng-doc-kind-icon{margin-right:var(--ng-doc-base-gutter)}:host .ng-doc-api-list-filter-input{max-width:450px}:host .ng-doc-api-list-wrapper{container:api-list-wrapper/inline-size}:host .ng-doc-api-list-wrapper .ng-doc-api-filter{display:flex;margin-top:calc(var(--ng-doc-base-gutter) * 3);flex-wrap:wrap;gap:calc(var(--ng-doc-base-gutter) * 2)}:host .ng-doc-api-list-wrapper .ng-doc-api-filter .ng-doc-api-filter-item{width:200px}:host .ng-doc-api-list-wrapper .ng-doc-api-list{margin-top:calc(var(--ng-doc-base-gutter) * 2)}:host .ng-doc-api-list-wrapper .ng-doc-api-list .ng-doc-api-scope{display:flex;flex-direction:column}:host .ng-doc-api-list-wrapper .ng-doc-api-list .ng-doc-api-scope .ng-doc-scope-items{margin-top:calc(var(--ng-doc-base-gutter) * 3);list-style:none;padding:0}:host .ng-doc-api-list-wrapper .ng-doc-api-list .ng-doc-api-scope .ng-doc-scope-items .ng-doc-scope-item{float:left;width:33%;overflow:hidden;min-width:330px;text-overflow:ellipsis;white-space:nowrap}:host .ng-doc-api-list-wrapper .ng-doc-api-list .ng-doc-api-scope .ng-doc-scope-items .ng-doc-scope-item .ng-doc-scope-item-link{display:flex;align-items:center;border-left:1px solid var(--ng-doc-border-color);padding:var(--ng-doc-base-gutter);color:var(--ng-doc-text);background:color-mix(in srgb,var(--ng-doc-scope-item-link-background),transparent 90%);text-decoration:none}:host .ng-doc-api-list-wrapper .ng-doc-api-list .ng-doc-api-scope .ng-doc-scope-items .ng-doc-scope-item .ng-doc-scope-item-link:hover{color:var(--ng-doc-heading-color);border-left-color:var(--ng-doc-primary);--ng-doc-scope-item-link-background: var(--ng-doc-primary)}:host .ng-doc-api-list-wrapper .ng-doc-api-list .ng-doc-api-scope .ng-doc-scope-items .ng-doc-scope-item .ng-doc-scope-item-link ng-doc-kind-icon{margin-right:var(--ng-doc-base-gutter);text-decoration:none!important}:host ng-doc-input-wrapper ng-doc-icon{--ng-doc-icon-color: var(--ng-doc-text-muted)}\\n\"], dependencies: [{ kind: \"component\", type: NgDocTextComponent, selector: \"[ng-doc-text]\", inputs: [\"size\", \"color\", \"align\", \"absoluteContent\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.ɵNgNoValidate, selector: \"form:not([ngNoForm]):not([ngNativeValidate])\" }, { kind: \"directive\", type: i1.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgControlStatusGroup, selector: \"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]\" }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"directive\", type: i1.FormGroupDirective, selector: \"[formGroup]\", inputs: [\"formGroup\"], outputs: [\"ngSubmit\"], exportAs: [\"ngForm\"] }, { kind: \"directive\", type: i1.FormControlName, selector: \"[formControlName]\", inputs: [\"formControlName\", \"disabled\", \"ngModel\"], outputs: [\"ngModelChange\"] }, { kind: \"component\", type: NgDocInputWrapperComponent, selector: \"ng-doc-input-wrapper\", inputs: [\"blurContent\", \"blurContext\", \"align\"] }, { kind: \"component\", type: NgDocIconComponent, selector: \"ng-doc-icon\", inputs: [\"icon\", \"customIcon\", \"size\"] }, { kind: \"directive\", type: NgDocInputStringDirective, selector: \"input[ngDocInputString]\" }, { kind: \"directive\", type: NgDocAutofocusDirective, selector: \"[ngDocAutofocus]\", inputs: [\"selectAll\"] }, { kind: \"component\", type: NgDocKindIconComponent, selector: \"ng-doc-kind-icon\", inputs: [\"kind\", \"type\", \"size\"] }, { kind: \"directive\", type: NgDocTooltipDirective, selector: \"[ngDocTooltip]\", inputs: [\"ngDocTooltip\", \"delay\", \"displayOrigin\", \"pointerOrigin\", \"positions\", \"canOpen\", \"panelClass\", \"minHeight\", \"maxHeight\", \"height\", \"minWidth\", \"maxWidth\", \"width\"], outputs: [\"beforeOpen\", \"afterOpen\", \"beforeClose\", \"afterClose\"], exportAs: [\"ngDocTooltip\"] }, { kind: \"directive\", type: RouterLink, selector: \"[routerLink]\", inputs: [\"target\", \"queryParams\", \"fragment\", \"queryParamsHandling\", \"state\", \"info\", \"relativeTo\", \"preserveFragment\", \"skipLocationChange\", \"replaceUrl\", \"routerLink\"] }, { kind: \"directive\", type: NgDocRadioGroupDirective, selector: \"[ngDocRadioGroup]\" }, { kind: \"component\", type: NgDocButtonToggleComponent, selector: \"[ng-doc-button-toggle]\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: NgDocApiListComponent, decorators: [{\n            type: Component,\n            args: [{ selector: 'ng-doc-api-list', changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n                        NgDocTextComponent,\n                        FormsModule,\n                        ReactiveFormsModule,\n                        NgDocInputWrapperComponent,\n                        NgDocIconComponent,\n                        NgDocInputStringDirective,\n                        NgDocAutofocusDirective,\n                        NgDocKindIconComponent,\n                        NgDocTooltipDirective,\n                        RouterLink,\n                        NgDocRadioGroupDirective,\n                        NgDocButtonToggleComponent,\n                    ], template: \"<h1 ng-doc-text>{{ title() }}</h1>\\n<div class=\\\"ng-doc-api-list-wrapper\\\">\\n  <form [formGroup]=\\\"formGroup\\\">\\n    @if (types().length) {\\n      <h3>Declaration types</h3>\\n      <ul class=\\\"ng-doc-filter-list\\\" ngDocRadioGroup formControlName=\\\"type\\\">\\n        @for (type of types(); track type) {\\n          <li>\\n            <button class=\\\"ng-doc-filter-button\\\" ng-doc-button-toggle [value]=\\\"type\\\">\\n              <ng-doc-kind-icon [kind]=\\\"type\\\" size=\\\"medium\\\"></ng-doc-kind-icon>\\n              {{ type }}\\n            </button>\\n          </li>\\n        }\\n      </ul>\\n    }\\n\\n    @if (scopes().length) {\\n      <h3>Scopes</h3>\\n      <ul class=\\\"ng-doc-filter-list\\\" ngDocRadioGroup formControlName=\\\"scope\\\">\\n        @for (scope of scopes(); track scope) {\\n          <li>\\n            <button class=\\\"ng-doc-filter-button\\\" ng-doc-button-toggle [value]=\\\"scope\\\">\\n              {{ scope }}\\n            </button>\\n          </li>\\n        }\\n      </ul>\\n    }\\n\\n    <h3>Filter</h3>\\n    <ng-doc-input-wrapper class=\\\"ng-doc-api-list-filter-input\\\">\\n      <ng-doc-icon icon=\\\"search\\\" ngDocInputWrapperLeft></ng-doc-icon>\\n      <input\\n        ngDocInputString\\n        formControlName=\\\"filter\\\"\\n        placeholder=\\\"Declaration name...\\\"\\n        ngDocAutofocus />\\n    </ng-doc-input-wrapper>\\n  </form>\\n\\n  <div class=\\\"ng-doc-api-list\\\">\\n    @for (scope of filteredApiList(); track scope) {\\n      <div class=\\\"ng-doc-api-scope\\\">\\n        <h3 class=\\\"ng-doc-scope-title\\\" ng-doc-text>{{ scope.title }}</h3>\\n        @if (scope.items.length) {\\n          <ul class=\\\"ng-doc-scope-items\\\">\\n            @for (apiReference of scope.items; track apiReference) {\\n              <li class=\\\"ng-doc-scope-item\\\">\\n                <a class=\\\"ng-doc-scope-item-link\\\" [routerLink]=\\\"[apiReference.route]\\\">\\n                  <ng-doc-kind-icon\\n                    [kind]=\\\"apiReference.type\\\"\\n                    size=\\\"medium\\\"\\n                    [ngDocTooltip]=\\\"apiReference.type\\\">\\n                  </ng-doc-kind-icon>\\n                  {{ apiReference.name }}\\n                </a>\\n              </li>\\n            }\\n          </ul>\\n        }\\n      </div>\\n    }\\n  </div>\\n</div>\\n\", styles: [\":host h1{margin-top:0}:host .ng-doc-filter-list{display:grid;grid-template-columns:repeat(6,1fr);gap:var(--ng-doc-base-gutter);list-style:none;padding:0}@container api-list-wrapper (max-width: 775px){:host .ng-doc-filter-list{grid-template-columns:repeat(4,1fr)}}@container api-list-wrapper (max-width: 600px){:host .ng-doc-filter-list{grid-template-columns:repeat(3,1fr)}}@container api-list-wrapper (max-width: 500px){:host .ng-doc-filter-list{grid-template-columns:repeat(2,1fr)}}@container api-list-wrapper (max-width: 350px){:host .ng-doc-filter-list{grid-template-columns:repeat(1,1fr)}}:host .ng-doc-filter-list .ng-doc-filter-button{justify-content:flex-start;text-wrap:nowrap;width:100%}:host .ng-doc-filter-list .ng-doc-filter-button ng-doc-kind-icon{margin-right:var(--ng-doc-base-gutter)}:host .ng-doc-api-list-filter-input{max-width:450px}:host .ng-doc-api-list-wrapper{container:api-list-wrapper/inline-size}:host .ng-doc-api-list-wrapper .ng-doc-api-filter{display:flex;margin-top:calc(var(--ng-doc-base-gutter) * 3);flex-wrap:wrap;gap:calc(var(--ng-doc-base-gutter) * 2)}:host .ng-doc-api-list-wrapper .ng-doc-api-filter .ng-doc-api-filter-item{width:200px}:host .ng-doc-api-list-wrapper .ng-doc-api-list{margin-top:calc(var(--ng-doc-base-gutter) * 2)}:host .ng-doc-api-list-wrapper .ng-doc-api-list .ng-doc-api-scope{display:flex;flex-direction:column}:host .ng-doc-api-list-wrapper .ng-doc-api-list .ng-doc-api-scope .ng-doc-scope-items{margin-top:calc(var(--ng-doc-base-gutter) * 3);list-style:none;padding:0}:host .ng-doc-api-list-wrapper .ng-doc-api-list .ng-doc-api-scope .ng-doc-scope-items .ng-doc-scope-item{float:left;width:33%;overflow:hidden;min-width:330px;text-overflow:ellipsis;white-space:nowrap}:host .ng-doc-api-list-wrapper .ng-doc-api-list .ng-doc-api-scope .ng-doc-scope-items .ng-doc-scope-item .ng-doc-scope-item-link{display:flex;align-items:center;border-left:1px solid var(--ng-doc-border-color);padding:var(--ng-doc-base-gutter);color:var(--ng-doc-text);background:color-mix(in srgb,var(--ng-doc-scope-item-link-background),transparent 90%);text-decoration:none}:host .ng-doc-api-list-wrapper .ng-doc-api-list .ng-doc-api-scope .ng-doc-scope-items .ng-doc-scope-item .ng-doc-scope-item-link:hover{color:var(--ng-doc-heading-color);border-left-color:var(--ng-doc-primary);--ng-doc-scope-item-link-background: var(--ng-doc-primary)}:host .ng-doc-api-list-wrapper .ng-doc-api-list .ng-doc-api-scope .ng-doc-scope-items .ng-doc-scope-item .ng-doc-scope-item-link ng-doc-kind-icon{margin-right:var(--ng-doc-base-gutter);text-decoration:none!important}:host ng-doc-input-wrapper ng-doc-icon{--ng-doc-icon-color: var(--ng-doc-text-muted)}\\n\"] }]\n        }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcHAvY29tcG9uZW50cy9hcGktbGlzdC9hcGktbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwcC9jb21wb25lbnRzL2FwaS1saXN0L2FwaS1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFFLE9BQU8sRUFDTCxXQUFXLEVBR1gsV0FBVyxFQUNYLG1CQUFtQixHQUNwQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxjQUFjLEVBQVksTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV4RCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDBCQUEwQixFQUMxQixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLDBCQUEwQixFQUMxQix3QkFBd0IsRUFDeEIsa0JBQWtCLEVBQ2xCLHFCQUFxQixHQUN0QixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBNEIzQyxNQUFNLE9BQU8scUJBQXFCO0lB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QU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDOzhHQTFGVSxxQkFBcUI7a0dBQXJCLHFCQUFxQiw2VUNoRWxDLGtyRUFpRUEsOHFGRGZJLGtCQUFrQixnSEFDbEIsV0FBVywycEJBQ1gsbUJBQW1CLGdWQUNuQiwwQkFBMEIsa0hBQzFCLGtCQUFrQixnR0FDbEIseUJBQXlCLG9FQUN6Qix1QkFBdUIsb0ZBQ3ZCLHNCQUFzQiwrRkFDdEIscUJBQXFCLDBVQUNyQixVQUFVLG9PQUNWLHdCQUF3Qiw4REFDeEIsMEJBQTBCOzsyRkFHakIscUJBQXFCO2tCQXBCakMsU0FBUzsrQkFDRSxpQkFBaUIsbUJBR1YsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxrQkFBa0I7d0JBQ2xCLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQiwwQkFBMEI7d0JBQzFCLGtCQUFrQjt3QkFDbEIseUJBQXlCO3dCQUN6Qix1QkFBdUI7d0JBQ3ZCLHNCQUFzQjt3QkFDdEIscUJBQXFCO3dCQUNyQixVQUFVO3dCQUNWLHdCQUF3Qjt3QkFDeEIsMEJBQTBCO3FCQUMzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgT25Jbml0LFxuICBTaWduYWwsXG4gIHNpZ25hbCxcbiAgV3JpdGFibGVTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7XG4gIEZvcm1CdWlsZGVyLFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwLFxuICBGb3Jtc01vZHVsZSxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFBhcmFtTWFwLCBSb3V0ZXIsIFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTmdEb2NLaW5kSWNvbkNvbXBvbmVudCB9IGZyb20gJ0BuZy1kb2MvYXBwL2NvbXBvbmVudHMva2luZC1pY29uJztcbmltcG9ydCB7IE5nRG9jRm9ybVBhcnRpYWxWYWx1ZSB9IGZyb20gJ0BuZy1kb2MvYXBwL3R5cGVzJztcbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICdAbmctZG9jL2NvcmUvaGVscGVycy9hcy1hcnJheSc7XG5pbXBvcnQgeyBOZ0RvY0FwaUxpc3QsIE5nRG9jQXBpTGlzdEl0ZW0gfSBmcm9tICdAbmctZG9jL2NvcmUvaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICBOZ0RvY0F1dG9mb2N1c0RpcmVjdGl2ZSxcbiAgTmdEb2NCdXR0b25Ub2dnbGVDb21wb25lbnQsXG4gIE5nRG9jSWNvbkNvbXBvbmVudCxcbiAgTmdEb2NJbnB1dFN0cmluZ0RpcmVjdGl2ZSxcbiAgTmdEb2NJbnB1dFdyYXBwZXJDb21wb25lbnQsXG4gIE5nRG9jUmFkaW9Hcm91cERpcmVjdGl2ZSxcbiAgTmdEb2NUZXh0Q29tcG9uZW50LFxuICBOZ0RvY1Rvb2x0aXBEaXJlY3RpdmUsXG59IGZyb20gJ0BuZy1kb2MvdWkta2l0JztcbmltcG9ydCB7IE5HX1JFUVVFU1RfQkFTRV9QQVRIIH0gZnJvbSAnQG5nLWRvYy91aS1raXQvdG9rZW5zJztcbmltcG9ydCB7IHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW50ZXJmYWNlIEFwaUZpbHRlckZvcm0ge1xuICBmaWx0ZXI6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xuICBzY29wZTogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XG4gIHR5cGU6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZy1kb2MtYXBpLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBpLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hcGktbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIE5nRG9jVGV4dENvbXBvbmVudCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIE5nRG9jSW5wdXRXcmFwcGVyQ29tcG9uZW50LFxuICAgIE5nRG9jSWNvbkNvbXBvbmVudCxcbiAgICBOZ0RvY0lucHV0U3RyaW5nRGlyZWN0aXZlLFxuICAgIE5nRG9jQXV0b2ZvY3VzRGlyZWN0aXZlLFxuICAgIE5nRG9jS2luZEljb25Db21wb25lbnQsXG4gICAgTmdEb2NUb29sdGlwRGlyZWN0aXZlLFxuICAgIFJvdXRlckxpbmssXG4gICAgTmdEb2NSYWRpb0dyb3VwRGlyZWN0aXZlLFxuICAgIE5nRG9jQnV0dG9uVG9nZ2xlQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ0RvY0FwaUxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IGJhc2VVcmwgPSBpbmplY3QoTkdfUkVRVUVTVF9CQVNFX1BBVEgpO1xuXG4gIHRpdGxlID0gaW5wdXQ8c3RyaW5nPignQVBJIFJlZmVyZW5jZXMnKTtcbiAgc2VnbWVudCA9IGlucHV0PHN0cmluZz4oKTtcblxuICBhcGlMaXN0OiBXcml0YWJsZVNpZ25hbDxOZ0RvY0FwaUxpc3RbXT4gPSBzaWduYWwoW10pO1xuICBmaWx0ZXJlZEFwaUxpc3Q6IFNpZ25hbDxOZ0RvY0FwaUxpc3RbXT47XG4gIGZpbHRlcjogU2lnbmFsPGFueT47XG4gIHNjb3BlczogU2lnbmFsPHN0cmluZ1tdPjtcbiAgdHlwZXM6IFNpZ25hbDxzdHJpbmdbXT47XG5cbiAgcHJvdGVjdGVkIGZvcm1Hcm91cDogRm9ybUdyb3VwPEFwaUZpbHRlckZvcm0+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZm9ybUJ1aWxkZXIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBodHRwQ2xpZW50ID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBmaWx0ZXI6IFsnJ10sXG4gICAgICBzY29wZTogWycnXSxcbiAgICAgIHR5cGU6IFsnJ10sXG4gICAgfSk7XG5cbiAgICB0aGlzLmZpbHRlciA9IHRvU2lnbmFsKHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmZvcm1Hcm91cC52YWx1ZSkpLCB7XG4gICAgICBpbml0aWFsVmFsdWU6IHRoaXMuZm9ybUdyb3VwLnZhbHVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zY29wZXMgPSBjb21wdXRlZCgoKSA9PlxuICAgICAgYXNBcnJheShuZXcgU2V0KHRoaXMuYXBpTGlzdCgpLmZsYXRNYXAoKGFwaTogTmdEb2NBcGlMaXN0KSA9PiBhcGkudGl0bGUpKSkuc29ydCgpLFxuICAgICk7XG5cbiAgICB0aGlzLnR5cGVzID0gY29tcHV0ZWQoKCkgPT5cbiAgICAgIGFzQXJyYXkoXG4gICAgICAgIG5ldyBTZXQoXG4gICAgICAgICAgdGhpcy5hcGlMaXN0KClcbiAgICAgICAgICAgIC5mbGF0TWFwKChhcGk6IE5nRG9jQXBpTGlzdCkgPT4gYXBpLml0ZW1zKVxuICAgICAgICAgICAgLmZsYXRNYXAoKGl0ZW06IE5nRG9jQXBpTGlzdEl0ZW0pID0+IGl0ZW0udHlwZSksXG4gICAgICAgICksXG4gICAgICApLnNvcnQoKSxcbiAgICApO1xuXG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtTWFwLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgocGFyYW1NYXA6IFBhcmFtTWFwKSA9PlxuICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0VmFsdWUoe1xuICAgICAgICBmaWx0ZXI6IHBhcmFtTWFwLmdldCgnZmlsdGVyJykgfHwgbnVsbCxcbiAgICAgICAgc2NvcGU6IHBhcmFtTWFwLmdldCgnc2NvcGUnKSB8fCBudWxsLFxuICAgICAgICB0eXBlOiBwYXJhbU1hcC5nZXQoJ3R5cGUnKSB8fCBudWxsLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKChmb3JtVmFsdWU6IE5nRG9jRm9ybVBhcnRpYWxWYWx1ZTx0eXBlb2YgdGhpcy5mb3JtR3JvdXA+KSA9PlxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXM6IGZvcm1WYWx1ZSxcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICB0aGlzLmZpbHRlcmVkQXBpTGlzdCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIGNvbnN0IHsgZmlsdGVyLCBzY29wZSwgdHlwZSB9ID0gdGhpcy5maWx0ZXIoKTtcblxuICAgICAgcmV0dXJuIHRoaXMuYXBpTGlzdCgpXG4gICAgICAgIC5maWx0ZXIoKGFwaTogTmdEb2NBcGlMaXN0KSA9PiAhc2NvcGUgfHwgYXBpLnRpdGxlID09PSBzY29wZSlcbiAgICAgICAgLm1hcCgoYXBpOiBOZ0RvY0FwaUxpc3QpID0+ICh7XG4gICAgICAgICAgLi4uYXBpLFxuICAgICAgICAgIGl0ZW1zOiBhcGkuaXRlbXNcbiAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgIChpdGVtOiBOZ0RvY0FwaUxpc3RJdGVtKSA9PlxuICAgICAgICAgICAgICAgIGl0ZW0ubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlcj8udG9Mb3dlckNhc2UoKSA/PyAnJykgJiZcbiAgICAgICAgICAgICAgICAoIXR5cGUgfHwgaXRlbS50eXBlID09PSB0eXBlKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zb3J0KFxuICAgICAgICAgICAgICAoYTogTmdEb2NBcGlMaXN0SXRlbSwgYjogTmdEb2NBcGlMaXN0SXRlbSkgPT5cbiAgICAgICAgICAgICAgICBhLnR5cGUubG9jYWxlQ29tcGFyZShiLnR5cGUpIHx8IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSksXG4gICAgICAgICAgICApLFxuICAgICAgICB9KSlcbiAgICAgICAgLmZpbHRlcigoYXBpOiBOZ0RvY0FwaUxpc3QpID0+IGFwaS5pdGVtcy5sZW5ndGgpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0PFxuICAgICAgICBOZ0RvY0FwaUxpc3RbXVxuICAgICAgPih0aGlzLmJhc2VVcmwgKyBhc0FycmF5KCdhc3NldHMvbmctZG9jJywgdGhpcy5zZWdtZW50KCksICdhcGktbGlzdC5qc29uJykuam9pbignLycpKVxuICAgICAgLnN1YnNjcmliZSgoYXBpTGlzdCkgPT4gdGhpcy5hcGlMaXN0LnNldChhcGlMaXN0KSk7XG4gIH1cbn1cbiIsIjxoMSBuZy1kb2MtdGV4dD57eyB0aXRsZSgpIH19PC9oMT5cbjxkaXYgY2xhc3M9XCJuZy1kb2MtYXBpLWxpc3Qtd3JhcHBlclwiPlxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICAgIEBpZiAodHlwZXMoKS5sZW5ndGgpIHtcbiAgICAgIDxoMz5EZWNsYXJhdGlvbiB0eXBlczwvaDM+XG4gICAgICA8dWwgY2xhc3M9XCJuZy1kb2MtZmlsdGVyLWxpc3RcIiBuZ0RvY1JhZGlvR3JvdXAgZm9ybUNvbnRyb2xOYW1lPVwidHlwZVwiPlxuICAgICAgICBAZm9yICh0eXBlIG9mIHR5cGVzKCk7IHRyYWNrIHR5cGUpIHtcbiAgICAgICAgICA8bGk+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmctZG9jLWZpbHRlci1idXR0b25cIiBuZy1kb2MtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwidHlwZVwiPlxuICAgICAgICAgICAgICA8bmctZG9jLWtpbmQtaWNvbiBba2luZF09XCJ0eXBlXCIgc2l6ZT1cIm1lZGl1bVwiPjwvbmctZG9jLWtpbmQtaWNvbj5cbiAgICAgICAgICAgICAge3sgdHlwZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgfVxuICAgICAgPC91bD5cbiAgICB9XG5cbiAgICBAaWYgKHNjb3BlcygpLmxlbmd0aCkge1xuICAgICAgPGgzPlNjb3BlczwvaDM+XG4gICAgICA8dWwgY2xhc3M9XCJuZy1kb2MtZmlsdGVyLWxpc3RcIiBuZ0RvY1JhZGlvR3JvdXAgZm9ybUNvbnRyb2xOYW1lPVwic2NvcGVcIj5cbiAgICAgICAgQGZvciAoc2NvcGUgb2Ygc2NvcGVzKCk7IHRyYWNrIHNjb3BlKSB7XG4gICAgICAgICAgPGxpPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm5nLWRvYy1maWx0ZXItYnV0dG9uXCIgbmctZG9jLWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cInNjb3BlXCI+XG4gICAgICAgICAgICAgIHt7IHNjb3BlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICB9XG4gICAgICA8L3VsPlxuICAgIH1cblxuICAgIDxoMz5GaWx0ZXI8L2gzPlxuICAgIDxuZy1kb2MtaW5wdXQtd3JhcHBlciBjbGFzcz1cIm5nLWRvYy1hcGktbGlzdC1maWx0ZXItaW5wdXRcIj5cbiAgICAgIDxuZy1kb2MtaWNvbiBpY29uPVwic2VhcmNoXCIgbmdEb2NJbnB1dFdyYXBwZXJMZWZ0PjwvbmctZG9jLWljb24+XG4gICAgICA8aW5wdXRcbiAgICAgICAgbmdEb2NJbnB1dFN0cmluZ1xuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmaWx0ZXJcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIkRlY2xhcmF0aW9uIG5hbWUuLi5cIlxuICAgICAgICBuZ0RvY0F1dG9mb2N1cyAvPlxuICAgIDwvbmctZG9jLWlucHV0LXdyYXBwZXI+XG4gIDwvZm9ybT5cblxuICA8ZGl2IGNsYXNzPVwibmctZG9jLWFwaS1saXN0XCI+XG4gICAgQGZvciAoc2NvcGUgb2YgZmlsdGVyZWRBcGlMaXN0KCk7IHRyYWNrIHNjb3BlKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwibmctZG9jLWFwaS1zY29wZVwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJuZy1kb2Mtc2NvcGUtdGl0bGVcIiBuZy1kb2MtdGV4dD57eyBzY29wZS50aXRsZSB9fTwvaDM+XG4gICAgICAgIEBpZiAoc2NvcGUuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgPHVsIGNsYXNzPVwibmctZG9jLXNjb3BlLWl0ZW1zXCI+XG4gICAgICAgICAgICBAZm9yIChhcGlSZWZlcmVuY2Ugb2Ygc2NvcGUuaXRlbXM7IHRyYWNrIGFwaVJlZmVyZW5jZSkge1xuICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuZy1kb2Mtc2NvcGUtaXRlbVwiPlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmctZG9jLXNjb3BlLWl0ZW0tbGlua1wiIFtyb3V0ZXJMaW5rXT1cIlthcGlSZWZlcmVuY2Uucm91dGVdXCI+XG4gICAgICAgICAgICAgICAgICA8bmctZG9jLWtpbmQtaWNvblxuICAgICAgICAgICAgICAgICAgICBba2luZF09XCJhcGlSZWZlcmVuY2UudHlwZVwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJtZWRpdW1cIlxuICAgICAgICAgICAgICAgICAgICBbbmdEb2NUb29sdGlwXT1cImFwaVJlZmVyZW5jZS50eXBlXCI+XG4gICAgICAgICAgICAgICAgICA8L25nLWRvYy1raW5kLWljb24+XG4gICAgICAgICAgICAgICAgICB7eyBhcGlSZWZlcmVuY2UubmFtZSB9fVxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3VsPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZG9jLWFwcC1jb21wb25lbnRzLWFwaS1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcHAvY29tcG9uZW50cy9hcGktbGlzdC9uZy1kb2MtYXBwLWNvbXBvbmVudHMtYXBpLWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":";;;;;;;;;;;;;AAYO,MAAM,qBAAqB,CAAC;AACnC,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC;AAC5C,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK,EAAE;AAC9B,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC;AACjC,QAAQ,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAC9C,QAAQ,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC3C,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACpC,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC5C,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAChD,YAAY,MAAM,EAAE,CAAC,EAAE,CAAC;AACxB,YAAY,KAAK,EAAE,CAAC,EAAE,CAAC;AACvB,YAAY,IAAI,EAAE,CAAC,EAAE,CAAC;AACtB,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE;AAClG,YAAY,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK;AAC9C,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACzG,QAAQ,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO;AAChE,aAAa,OAAO,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK;AACvC,aAAa,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACnD,QAAQ,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AAC5G,YAAY,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI;AAClD,YAAY,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI;AAChD,YAAY,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI;AAC9C,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,SAAS,CAAC;AACvB,aAAa,IAAI,CAAC,kBAAkB,EAAE;AACtC,aAAa,SAAS,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE;AAC/D,YAAY,UAAU,EAAE,IAAI,CAAC,KAAK;AAClC,YAAY,WAAW,EAAE,SAAS;AAClC,YAAY,mBAAmB,EAAE,OAAO;AACxC,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,MAAM;AAC9C,YAAY,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AACzD,YAAY,OAAO,IAAI,CAAC,OAAO;AAC/B,iBAAiB,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,KAAK,KAAK;AAC9D,iBAAiB,GAAG,CAAC,CAAC,GAAG,MAAM;AAC/B,gBAAgB,GAAG,GAAG;AACtB,gBAAgB,KAAK,EAAE,GAAG,CAAC;AAC3B,qBAAqB,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AACnG,qBAAqB,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;AACjD,qBAAqB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACjG,aAAa,CAAC;AACd,iBAAiB,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;AAClD,SAAS,CAAC;AACV;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,CAAC;AACb,aAAa,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACnG,aAAa,SAAS,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC9D;AACA,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACvL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,qBAAqB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,krEAAkrE,EAAE,MAAM,EAAE,CAAC,snFAAsnF,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,8CAA8C,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,oBAAoB,EAAE,QAAQ,EAAE,8MAA8M,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,2CAA2C,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,oBAAoB,EAAE,QAAQ,EAAE,0FAA0F,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC,iBAAiB,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,0BAA0B,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,yBAAyB,EAAE,QAAQ,EAAE,yBAAyB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,0BAA0B,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,CAAC;AACtwP;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,UAAU,EAAE,CAAC;AAC/H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE;AAC5G,wBAAwB,kBAAkB;AAC1C,wBAAwB,WAAW;AACnC,wBAAwB,mBAAmB;AAC3C,wBAAwB,0BAA0B;AAClD,wBAAwB,kBAAkB;AAC1C,wBAAwB,yBAAyB;AACjD,wBAAwB,uBAAuB;AAC/C,wBAAwB,sBAAsB;AAC9C,wBAAwB,qBAAqB;AAC7C,wBAAwB,UAAU;AAClC,wBAAwB,wBAAwB;AAChD,wBAAwB,0BAA0B;AAClD,qBAAqB,EAAE,QAAQ,EAAE,krEAAkrE,EAAE,MAAM,EAAE,CAAC,snFAAsnF,CAAC,EAAE;AACv1J,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC;;ACpFvC;AACA;AACA;;;;"}