@elite.framework/ng.ui.core 1.0.73 → 1.0.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -345,13 +345,13 @@ class GenericSelectorTypeComponent extends FieldType {
345
345
  this.search({ query: '' });
346
346
  }
347
347
  search(event) {
348
- const q = event.query?.toString().toLowerCase() || '';
348
+ const q = event.query?.toString() || '';
349
349
  const lf = this.optionLabel;
350
350
  const fixedFilters = this.getFixedFilters();
351
351
  if (this.to['offline']) {
352
352
  this.options_ = this.to['offlineDataFn']
353
353
  ? this.to['offlineDataFn'](q)
354
- : this._offlineList.filter(item => item[lf]?.toString().toLowerCase().includes(q));
354
+ : this._offlineList.filter(item => item[lf]?.toString().includes(q));
355
355
  setTimeout(() => this.autoComp?.show(), 0);
356
356
  }
357
357
  else {
@@ -361,10 +361,13 @@ class GenericSelectorTypeComponent extends FieldType {
361
361
  const queryParams = {
362
362
  filters: [],
363
363
  orderBy: [],
364
- groupBy: []
364
+ groupBy: [],
365
+ expand: [],
366
+ top: 10,
367
+ skip: 0,
365
368
  };
366
369
  // Handle main search and fixed filters
367
- if (!this.to['filters']) {
370
+ if (!this.to['query']) {
368
371
  // Create a group for main search condition
369
372
  const mainGroup = {
370
373
  logicalOperator: 'and',
@@ -391,14 +394,23 @@ class GenericSelectorTypeComponent extends FieldType {
391
394
  queryParams.filters.push(mainGroup);
392
395
  }
393
396
  }
397
+ else {
398
+ queryParams.skip = this.to['query'].skip ?? 0;
399
+ queryParams.top = this.to['query'].top ?? 10;
400
+ queryParams.orderBy = this.to['query'].orderBy;
401
+ queryParams.groupBy = this.to['query'].groupBy;
402
+ queryParams.expand = this.to['query'].expand;
403
+ }
394
404
  // Merge dynamic filters (function or array)
395
405
  let dynamicFilters = [];
396
- const filtersProp = this.to['filters'];
397
- if (typeof filtersProp === 'function') {
398
- dynamicFilters = filtersProp(q, this.field); // pass search text
399
- }
400
- else if (Array.isArray(filtersProp)) {
401
- dynamicFilters = filtersProp;
406
+ if (this.to['query'] && this.to['query']['filters']) {
407
+ const filtersProp = this.to['query']['filters'];
408
+ if (typeof filtersProp === 'function') {
409
+ dynamicFilters = filtersProp(q, this.field); // pass search text
410
+ }
411
+ else if (Array.isArray(filtersProp)) {
412
+ dynamicFilters = filtersProp;
413
+ }
402
414
  }
403
415
  // Add dynamic filters with proper groupLogicalOperator
404
416
  dynamicFilters.forEach((filterGroup, index) => {
@@ -1 +1 @@
1
- {"version":3,"file":"elite.framework-ng.ui.core-generic-selector.mjs","sources":["../tmp-esm2022/generic-selector/lib/generic-selector-module.js","../tmp-esm2022/generic-selector/lib/generic-selector.component.js","../tmp-esm2022/generic-selector/elite.framework-ng.ui.core-generic-selector.js"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from \"@angular/core\";\nexport class GenericSelectorModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorModule, imports: [CommonModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorModule, imports: [CommonModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1zZWxlY3Rvci1tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWxlY3Rvci9zcmMvbGliL2dlbmVyaWMtc2VsZWN0b3ItbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUsvQyxNQUFNLE9BQU8scUJBQXFCO3VHQUFyQixxQkFBcUI7d0dBQXJCLHFCQUFxQixZQUZ0QixZQUFZO3dHQUVYLHFCQUFxQixZQUZ0QixZQUFZOzsyRkFFWCxxQkFBcUI7a0JBSGpDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY1NlbGVjdG9yTW9kdWxlIHt9XG4iXX0=","import { ChangeDetectorRef, Component, Injector, ViewChild, inject } from '@angular/core';\nimport { FieldType, FormlyAttributes } from '@ngx-formly/core';\nimport { DialogService } from 'primeng/dynamicdialog';\nimport { forkJoin } from 'rxjs';\nimport { finalize, map } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { AutoCompleteModule, AutoComplete } from 'primeng/autocomplete';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { ButtonModule } from 'primeng/button';\nimport { BaseService, QueryParser } from '@elite.framework/ng.core/services';\nimport { GenericDialogComponent } from '@elite.framework/ng.ui.core/generic-dialog';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@elite.framework/ng.core/services\";\nimport * as i2 from \"@angular/forms\";\nimport * as i3 from \"primeng/autocomplete\";\nimport * as i4 from \"primeng/api\";\nimport * as i5 from \"primeng/inputgroup\";\nimport * as i6 from \"primeng/inputgroupaddon\";\nimport * as i7 from \"primeng/button\";\nimport * as i8 from \"@ngx-translate/core\";\nexport class GenericSelectorTypeComponent extends FieldType {\n svc;\n injector;\n cdr;\n autoComp;\n dialog;\n options_ = [];\n selectedItem;\n loading = false;\n _offlineList = [];\n translateService = inject(TranslateService);\n api;\n valueChangeSubscription; // Add a subscription to manage the observable\n get optionLabel() {\n if (this.to.useMultiLang == true) {\n if (this.translateService.currentLang == 'en') {\n return this.to?.labelFieldEn || 'name';\n }\n return this.to?.labelField || 'name';\n }\n return this.to?.labelField || 'name';\n }\n isNullOrEmpty(val) {\n return val === null || val === undefined || val === '';\n }\n getPrimaryLabel(item) {\n const fields = [\n this.optionLabel, // resolved field name from getter\n this.to.labelField || 'name',\n this.to.labelFieldEn || 'name'\n ];\n for (const f of fields) {\n const v = item[f];\n if (!this.isNullOrEmpty(v)) {\n return v;\n }\n }\n return '';\n }\n constructor(svc, injector, cdr) {\n super();\n this.svc = svc;\n this.injector = injector;\n this.cdr = cdr;\n }\n ngOnInit() {\n this.api = this.svc;\n const to = this.props;\n this.api.apiName = to['serviceName'];\n if (to['offline']) {\n if (to['offlineDataFn']) {\n this._offlineList = to['offlineDataFn']();\n this.initOfflineSelection();\n }\n else if (to['offlineItems$']) {\n to['offlineItems$'].subscribe((list) => {\n this._offlineList = list;\n this.initOfflineSelection();\n });\n }\n else {\n this._offlineList = to['offlineItems'] || [];\n this.initOfflineSelection();\n }\n }\n else {\n if (this.props.loadSaved && !this.props.multiple && this.props.loadSavedField && this.props.valueField) {\n const vf = this.to['valueField'] || 'id';\n const lf = this.optionLabel;\n this.selectedItem =\n {\n [vf]: this.formControl.value,\n [lf]: this.model[this.props.loadSavedField],\n };\n if (this.props.change) {\n this.props.change(this.field, { item: this.selectedItem });\n this.cdr.detectChanges();\n }\n }\n else {\n this.initOnlineSelection();\n }\n }\n // Subscribe to formControl value changes\n this.valueChangeSubscription = this.formControl.valueChanges\n .subscribe(() => {\n // This tap operator is a good place to run side effects\n // like calling your change handler after a value changes.\n // this.selectedItem = this.formControl.value;\n if (this.props.change) {\n if (to['offline']) {\n if (to['offlineDataFn']) {\n this._offlineList = to['offlineDataFn']();\n this.initOfflineSelection(false);\n }\n else if (to['offlineItems$']) {\n to['offlineItems$'].subscribe((list) => {\n this._offlineList = list;\n this.initOfflineSelection(false);\n });\n }\n else {\n this._offlineList = to['offlineItems'] || [];\n this.initOfflineSelection(false);\n }\n }\n else {\n this.initOnlineSelection(false);\n }\n }\n });\n }\n // Remember to unsubscribe to prevent memory leaks!\n ngOnDestroy() {\n if (this.valueChangeSubscription) {\n this.valueChangeSubscription.unsubscribe();\n }\n }\n loadDefaultValue() {\n this.loading = true;\n const vf = this.to['valueField'] || 'id';\n const fixedFilters = this.getFixedFilters();\n const lf = this.to['loadDefaultField'] || 'isDefault';\n const lfValue = this.to['loadDefaultValue'] || true;\n const searchParams = {\n [lf]: lfValue,\n ...fixedFilters,\n };\n this.api.getList(searchParams)\n .subscribe({\n next: (res) => {\n // Assuming the API returns a list and you want to select the first one\n if (res && res.items && res.items.length > 0) {\n if (this.to['multiple']) {\n this.formControl.setValue(res.items.map((c) => c[vf]));\n }\n else {\n const defaultValue = res.items[0];\n this.formControl.setValue(defaultValue?.[vf]);\n }\n }\n this.loading = false;\n // this.initOnlineSelection(); // Proceed with online selection after setting the value\n },\n error: (err) => {\n console.error(\"Failed to load default value from API:\", err);\n this.loading = false;\n // this.initOnlineSelection(); // Fallback to local selection if API fails\n }\n });\n }\n // New method to handle loading the default value from the API\n afterSave(event) {\n this.onSelectionChange(event.record);\n if (this.props.afterSave) {\n this.props.afterSave(this.field, { item: event.response });\n this.cdr.detectChanges();\n }\n }\n onSelect(event) {\n if (this.props.onSelect) {\n this.props.onSelect(this.field, { item: event.value });\n this.cdr.detectChanges();\n }\n }\n onSelectionChange(val) {\n const vf = this.to['valueField'] || 'id';\n if (this.to['offline']) {\n // this.selectedItem = val;\n if (this.to['multiple'] && Array.isArray(val)) {\n this.selectedItem = this._offlineList.filter(item => val.includes(item[vf]));\n this.formControl.setValue(Array.isArray(this.selectedItem) ? this.selectedItem.map((c) => c[vf]) : []);\n }\n else {\n this.selectedItem = this._offlineList.find(item => item[vf] === val);\n this.formControl.setValue(this.selectedItem?.[vf] ?? null);\n }\n }\n else {\n this.selectedItem = val;\n if (this.to['multiple']) {\n this.formControl.setValue(Array.isArray(val) ? val.map((c) => c[vf]) : []);\n }\n else {\n this.formControl.setValue(val?.[vf] ?? null);\n }\n }\n }\n initOfflineSelection(withSetValue = true) {\n const val = this.formControl.value;\n const vf = this.to['valueField'] || 'id';\n if (val == null)\n return;\n if (this.to['multiple'] && Array.isArray(val)) {\n this.selectedItem = this._offlineList.filter(item => val.includes(item[vf]));\n }\n else {\n this.selectedItem = this._offlineList.find(item => item[vf] === val);\n }\n if (withSetValue == true) {\n this.formControl.setValue(this.to['multiple']\n ? this.selectedItem.map((c) => c[vf])\n : this.selectedItem?.[vf]);\n }\n else {\n if (this.props.change) {\n this.props.change(this.field, { item: this.selectedItem });\n this.cdr.detectChanges();\n }\n }\n }\n initOnlineSelection(withSetValue = true) {\n const val = this.formControl.value;\n const vf = this.to['valueField'] || 'id';\n if (val == null || (Array.isArray(val) && val.length === 0)) {\n this.selectedItem = this.to['multiple'] ? [] : null;\n if (this.props['loadDefault'] === true) {\n this.loadDefaultValue();\n }\n return;\n }\n if (this.to['multiple'] && Array.isArray(val) && val.length) {\n this.loading = true;\n const fixedFilters = this.getFixedFilters();\n // 🔑 one getList call per id, but include fixedFilters in each\n const calls = val.map((id) => this.api.getList({ ...fixedFilters, [vf]: id }).pipe(map((res) => (res?.items?.length ? res.items[0] : null))));\n forkJoin(calls)\n .pipe(finalize(() => (this.loading = false)))\n .subscribe({\n next: (items) => {\n this.selectedItem = items.filter(i => i != null);\n if (withSetValue) {\n this.formControl.setValue(this.selectedItem.map((c) => c[vf]));\n }\n else if (this.props.change) {\n this.props.change(this.field, { item: this.selectedItem });\n }\n this.cdr.detectChanges();\n },\n error: (err) => {\n console.error('Failed to load multiple selections:', err);\n this.selectedItem = [];\n this.loading = false;\n },\n });\n }\n else {\n this.loading = true;\n const fixedFilters = this.getFixedFilters();\n const searchParams = { ...fixedFilters, [vf]: val };\n this.api\n .getList(searchParams)\n .pipe(finalize(() => (this.loading = false)))\n .subscribe({\n next: (res) => {\n const item = res?.items?.[0] || null;\n this.selectedItem = item;\n if (withSetValue) {\n this.formControl.setValue(item?.[vf]);\n }\n else if (this.props.change) {\n this.props.change(this.field, { item: this.selectedItem });\n }\n this.cdr.detectChanges();\n },\n error: (err) => {\n console.error('Failed to load selection:', err);\n this.selectedItem = null;\n this.loading = false;\n },\n });\n }\n }\n getFixedFilters() {\n const fixedFilters = this.to['fixedFilters'];\n if (typeof fixedFilters === 'function') {\n // Call with current model (and optionally field)\n return fixedFilters(this.model);\n }\n return fixedFilters || {};\n }\n onArrowDown(event) {\n event.preventDefault();\n // this.autoComp.show();\n this.onDropdownButtonClick();\n }\n onEscape(event) {\n this.autoComp.hide();\n }\n onAddNewClick() {\n // your logic for adding a new item\n // e.g. open dialog or emit event\n console.log('Add new item clicked');\n this.dialog.openForm(\"create\");\n }\n onDropdownButtonClick() {\n this.search({ query: '' }); // trigger your own search\n setTimeout(() => this.autoComp.show(), 0); // force dropdown to open\n }\n // Called when dropdown button clicked\n onDropdownClick(event) {\n // 🚫 stop the default dropdown behavior\n event.originalEvent.preventDefault();\n event.originalEvent.stopPropagation();\n console.log('Dropdown clicked!', event);\n // ✅ your custom code here\n // e.g., force trigger search for empty query\n this.search({ query: '' });\n }\n search(event) {\n const q = event.query?.toString().toLowerCase() || '';\n const lf = this.optionLabel;\n const fixedFilters = this.getFixedFilters();\n if (this.to['offline']) {\n this.options_ = this.to['offlineDataFn']\n ? this.to['offlineDataFn'](q)\n : this._offlineList.filter(item => item[lf]?.toString().toLowerCase().includes(q));\n setTimeout(() => this.autoComp?.show(), 0);\n }\n else {\n this.loading = true;\n this.options_ = [];\n // Build QueryParameters\n const queryParams = {\n filters: [],\n orderBy: [],\n groupBy: []\n };\n // Handle main search and fixed filters\n if (!this.to['filters']) {\n // Create a group for main search condition\n const mainGroup = {\n logicalOperator: 'and',\n conditions: [\n {\n field: lf,\n operator: 'contains',\n value: q\n }\n ]\n };\n // Add fixed filters to the same group\n Object.keys(fixedFilters || {}).forEach(key => {\n const value = fixedFilters[key];\n if (value !== null && value !== undefined) {\n mainGroup.conditions.push({\n field: key,\n operator: 'eq',\n value: value\n });\n }\n });\n if (mainGroup.conditions.length > 0) {\n queryParams.filters.push(mainGroup);\n }\n }\n // Merge dynamic filters (function or array)\n let dynamicFilters = [];\n const filtersProp = this.to['filters'];\n if (typeof filtersProp === 'function') {\n dynamicFilters = filtersProp(q, this.field); // pass search text\n }\n else if (Array.isArray(filtersProp)) {\n dynamicFilters = filtersProp;\n }\n // Add dynamic filters with proper groupLogicalOperator\n dynamicFilters.forEach((filterGroup, index) => {\n if (index === 0 && queryParams.filters.length === 0) {\n // First filter group, no groupLogicalOperator needed\n queryParams.filters.push(filterGroup);\n }\n else {\n // Subsequent groups, ensure they have groupLogicalOperator\n const groupWithOperator = {\n ...filterGroup,\n groupLogicalOperator: filterGroup.groupLogicalOperator || 'and'\n };\n queryParams.filters.push(groupWithOperator);\n }\n });\n // Use listEndpoint if available, otherwise use default\n let listEndpoint = this.props.listEndpoint;\n if (typeof listEndpoint === 'function') {\n listEndpoint = listEndpoint(this.model);\n }\n const searchParams = {\n 'query': QueryParser.toString(queryParams)\n };\n this.api.getList(searchParams, listEndpoint)\n .pipe(finalize(() => (this.loading = false)))\n .subscribe({\n next: (res) => {\n this.options_ = res.items ?? res ?? [];\n setTimeout(() => this.autoComp?.show(), 0);\n },\n error: () => {\n this.options_ = [];\n },\n });\n }\n }\n openCrud(mode) {\n const payload = mode === 'add' ? null : this.selectedItem;\n // Example integration:\n // const ref = this.dialog.open(CrudComponent, {\n // data: {\n // serviceName: this.to.serviceName,\n // mode,\n // record: payload\n // }\n // });\n // ref.onClose.subscribe((updated: any) => {\n // if (!this.to.multiple && updated?.[this.to.valueField]) {\n // this.api.get(updated[this.to.valueField])\n // .subscribe(item => {\n // this.selectedItem = item;\n // this.formControl.setValue(item?.[this.to.valueField]);\n // });\n // }\n // });\n }\n getEmptyMessage() {\n if (this.loading) {\n return 'LOADING_DATA_MESSAGE'; // مفتاح ترجمة لـ \"جاري تحميل البيانات...\"\n }\n else if (this.options_.length === 0) {\n return 'NO_RESULTS_FOUND'; // مفتاح ترجمة لـ \"لا توجد نتائج مطابقة.\"\n }\n return ''; // لا تُعرض رسالة إذا كانت هناك نتائج\n }\n isItemSelected(item) {\n const vf = this.to['valueField'] || 'id';\n return Array.isArray(this.selectedItem) &&\n this.selectedItem.some((sel) => sel[vf] === item[vf]);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorTypeComponent, deps: [{ token: i1.BaseService }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: GenericSelectorTypeComponent, isStandalone: true, selector: \"formly-generic-selector\", providers: [DialogService, BaseService], viewQueries: [{ propertyName: \"autoComp\", first: true, predicate: [\"autoComp\"], descendants: true }, { propertyName: \"dialog\", first: true, predicate: [\"dialog\"], descendants: true }], usesInheritance: true, ngImport: i0, template: `\r\n <!-- [ngStyle]=\"{'display': props.display ? 'block': 'none'}\" -->\r\n <p-inputGroup class=\"w-full\">\r\n <p-autoComplete\r\n #autoComp\r\n [ngModel]=\"selectedItem\"\r\n (ngModelChange)=\"onSelectionChange($event)\"\r\n [formlyAttributes]=\"field\"\r\n [suggestions]=\"options_\"\r\n (completeMethod)=\"search($event)\"\r\n [multiple]=\"to['multiple']\"\r\n [optionLabel]=\"optionLabel\"\r\n [dropdown]=\"false\"\r\n [forceSelection]=\"true\"\r\n [placeholder]=\"(props['placeholder'] ?? '') | translate\"\r\n [disabled]=\"!!props.disabled\"\r\n dropdownMode=\"current\"\r\n appendTo=\"body\"\r\n class=\"w-full rounded-none\"\r\n [showEmptyMessage]=\"true\"\r\n (onSelect)=\"onSelect($event)\"\r\n emptyMessage=\"{{ getEmptyMessage() | translate }}\"\r\n [showTransitionOptions]=\"'0ms'\"\r\n [showClear]=\"false\"\r\n\r\n (keydown.arrowdown)=\"onArrowDown($event)\"\r\n (keydown.escape)=\"onEscape($event)\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div class=\"flex flex-col\">\r\n <span>{{ getPrimaryLabel(item) }}</span>\r\n\r\n </div>\r\n </ng-template>\r\n </p-autoComplete>\r\n\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled || loading\"\r\n [icon]=\"loading ? 'pi pi-spinner pi-spin' : 'pi pi-chevron-down'\"\r\n (click)=\"onDropdownButtonClick()\"\r\n severity=\"secondary\" />\r\n </p-inputGroupAddon>\r\n <!-- Add new button -->\r\n @if (props.canAdd && props.formFields) {\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled\"\r\n icon=\"pi pi-plus\"\r\n (click)=\"onAddNewClick()\"\r\n severity=\"primary\" />\r\n </p-inputGroupAddon>\r\n }\r\n</p-inputGroup>\r\n\r\n<!-- [model]=\"model\" -->\r\n <app-generic-dialog\r\n #dialog\r\n [formFields]=\"props.formFields ?? []\"\r\n [apiName]=\"props.serviceName\"\r\n [idField]=\"props.idField ??'id'\"\r\n [displayMode]=\"props.dialogDisplayMode ?? 'dialog'\"\r\n (afterSave)=\"afterSave($event)\"\r\n >\r\n </app-generic-dialog>\r\n\r\n\r\n `, isInline: true, dependencies: [{ kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"ngmodule\", type: AutoCompleteModule }, { kind: \"component\", type: i3.AutoComplete, selector: \"p-autoComplete, p-autocomplete, p-auto-complete\", inputs: [\"minLength\", \"minQueryLength\", \"delay\", \"panelStyle\", \"styleClass\", \"panelStyleClass\", \"inputStyle\", \"inputId\", \"inputStyleClass\", \"placeholder\", \"readonly\", \"scrollHeight\", \"lazy\", \"virtualScroll\", \"virtualScrollItemSize\", \"virtualScrollOptions\", \"autoHighlight\", \"forceSelection\", \"type\", \"autoZIndex\", \"baseZIndex\", \"ariaLabel\", \"dropdownAriaLabel\", \"ariaLabelledBy\", \"dropdownIcon\", \"unique\", \"group\", \"completeOnFocus\", \"showClear\", \"dropdown\", \"showEmptyMessage\", \"dropdownMode\", \"multiple\", \"tabindex\", \"dataKey\", \"emptyMessage\", \"showTransitionOptions\", \"hideTransitionOptions\", \"autofocus\", \"autocomplete\", \"optionGroupChildren\", \"optionGroupLabel\", \"overlayOptions\", \"suggestions\", \"optionLabel\", \"optionValue\", \"id\", \"searchMessage\", \"emptySelectionMessage\", \"selectionMessage\", \"autoOptionFocus\", \"selectOnFocus\", \"searchLocale\", \"optionDisabled\", \"focusOnHover\", \"typeahead\", \"appendTo\"], outputs: [\"completeMethod\", \"onSelect\", \"onUnselect\", \"onFocus\", \"onBlur\", \"onDropdownClick\", \"onClear\", \"onKeyUp\", \"onShow\", \"onHide\", \"onLazyLoad\"] }, { kind: \"directive\", type: i4.PrimeTemplate, selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: InputGroupModule }, { kind: \"component\", type: i5.InputGroup, selector: \"p-inputgroup, p-inputGroup, p-input-group\", inputs: [\"styleClass\"] }, { kind: \"ngmodule\", type: InputGroupAddonModule }, { kind: \"component\", type: i6.InputGroupAddon, selector: \"p-inputgroup-addon, p-inputGroupAddon\", inputs: [\"style\", \"styleClass\"] }, { kind: \"directive\", type: FormlyAttributes, selector: \"[formlyAttributes]\", inputs: [\"formlyAttributes\", \"id\"] }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"ngmodule\", type: CheckboxModule }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"component\", type: i7.Button, selector: \"p-button\", inputs: [\"type\", \"iconPos\", \"icon\", \"badge\", \"label\", \"disabled\", \"loading\", \"loadingIcon\", \"raised\", \"rounded\", \"text\", \"plain\", \"severity\", \"outlined\", \"link\", \"tabindex\", \"size\", \"variant\", \"style\", \"styleClass\", \"badgeClass\", \"badgeSeverity\", \"ariaLabel\", \"buttonProps\", \"autofocus\", \"fluid\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\"] }, { kind: \"component\", type: GenericDialogComponent, selector: \"app-generic-dialog\", inputs: [\"form\", \"service\", \"formFields\", \"model\", \"apiName\", \"idField\", \"dialogMaxWidth\", \"displayMode\", \"mode\", \"forceState\", \"drawerVisible\", \"dialogVisible\", \"isViewMode\", \"isEditMode\", \"useConfirmOnSave\", \"loading\", \"errorMsg\", \"errorMessage\", \"beforeSaveTransform\", \"hideTable\", \"autoShowForm\"], outputs: [\"action\", \"afterSave\", \"afterDelete\", \"beforeSave\", \"beforeDelete\", \"formCancel\", \"formInit\", \"dataLoaded\", \"selectionChange\", \"error\", \"visibleChange\"] }, { kind: \"pipe\", type: i8.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorTypeComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'formly-generic-selector',\n template: `\r\n <!-- [ngStyle]=\"{'display': props.display ? 'block': 'none'}\" -->\r\n <p-inputGroup class=\"w-full\">\r\n <p-autoComplete\r\n #autoComp\r\n [ngModel]=\"selectedItem\"\r\n (ngModelChange)=\"onSelectionChange($event)\"\r\n [formlyAttributes]=\"field\"\r\n [suggestions]=\"options_\"\r\n (completeMethod)=\"search($event)\"\r\n [multiple]=\"to['multiple']\"\r\n [optionLabel]=\"optionLabel\"\r\n [dropdown]=\"false\"\r\n [forceSelection]=\"true\"\r\n [placeholder]=\"(props['placeholder'] ?? '') | translate\"\r\n [disabled]=\"!!props.disabled\"\r\n dropdownMode=\"current\"\r\n appendTo=\"body\"\r\n class=\"w-full rounded-none\"\r\n [showEmptyMessage]=\"true\"\r\n (onSelect)=\"onSelect($event)\"\r\n emptyMessage=\"{{ getEmptyMessage() | translate }}\"\r\n [showTransitionOptions]=\"'0ms'\"\r\n [showClear]=\"false\"\r\n\r\n (keydown.arrowdown)=\"onArrowDown($event)\"\r\n (keydown.escape)=\"onEscape($event)\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div class=\"flex flex-col\">\r\n <span>{{ getPrimaryLabel(item) }}</span>\r\n\r\n </div>\r\n </ng-template>\r\n </p-autoComplete>\r\n\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled || loading\"\r\n [icon]=\"loading ? 'pi pi-spinner pi-spin' : 'pi pi-chevron-down'\"\r\n (click)=\"onDropdownButtonClick()\"\r\n severity=\"secondary\" />\r\n </p-inputGroupAddon>\r\n <!-- Add new button -->\r\n @if (props.canAdd && props.formFields) {\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled\"\r\n icon=\"pi pi-plus\"\r\n (click)=\"onAddNewClick()\"\r\n severity=\"primary\" />\r\n </p-inputGroupAddon>\r\n }\r\n</p-inputGroup>\r\n\r\n<!-- [model]=\"model\" -->\r\n <app-generic-dialog\r\n #dialog\r\n [formFields]=\"props.formFields ?? []\"\r\n [apiName]=\"props.serviceName\"\r\n [idField]=\"props.idField ??'id'\"\r\n [displayMode]=\"props.dialogDisplayMode ?? 'dialog'\"\r\n (afterSave)=\"afterSave($event)\"\r\n >\r\n </app-generic-dialog>\r\n\r\n\r\n `,\n providers: [DialogService, BaseService],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n AutoCompleteModule,\n CommonModule,\n InputGroupModule,\n InputGroupAddonModule,\n FormlyAttributes,\n TranslateModule,\n AutoComplete,\n CheckboxModule,\n ButtonModule,\n GenericDialogComponent\n ]\n }]\n }], ctorParameters: () => [{ type: i1.BaseService }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }], propDecorators: { autoComp: [{\n type: ViewChild,\n args: ['autoComp']\n }], dialog: [{\n type: ViewChild,\n args: ['dialog']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWxlY3Rvci9zcmMvbGliL2dlbmVyaWMtc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBcUIsU0FBUyxFQUFFLGdCQUFnQixFQUFtQixNQUFNLGtCQUFrQixDQUFDO0FBQ25HLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQWdDLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzNHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7Ozs7Ozs7O0FBbUpwRixNQUFNLE9BQVEsNEJBQTZCLFNBQVEsU0FBZ0Q7SUE2QzdFO0lBQXlCO0lBQTJCO0lBNUNqRCxRQUFRLENBQWdCO0lBQzFCLE1BQU0sQ0FBMEI7SUFDckQsUUFBUSxHQUFVLEVBQUUsQ0FBQztJQUNyQixZQUFZLENBQU07SUFFbEIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNSLFlBQVksR0FBVSxFQUFFLENBQUM7SUFDekIsZ0JBQWdCLEdBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFbkQsR0FBRyxDQUFrQjtJQUNkLHVCQUF1QixDQUFnQixDQUFDLDhDQUE4QztJQUUvRixJQUFJLFdBQVc7UUFDYixJQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxJQUFJLElBQUksRUFBQyxDQUFDO1lBQzlCLElBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUMsQ0FBQztnQkFDOUMsT0FBTyxJQUFJLENBQUMsRUFBRSxFQUFFLFlBQVksSUFBSSxNQUFNLENBQUM7WUFDdkMsQ0FBQztZQUNBLE9BQU8sSUFBSSxDQUFDLEVBQUUsRUFBRSxVQUFVLElBQUksTUFBTSxDQUFDO1FBQ3pDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxFQUFFLEVBQUUsVUFBVSxJQUFJLE1BQU0sQ0FBQztJQUN2QyxDQUFDO0lBRU8sYUFBYSxDQUFDLEdBQVE7UUFDNUIsT0FBTyxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQVM7UUFDdkIsTUFBTSxNQUFNLEdBQUc7WUFDYixJQUFJLENBQUMsV0FBVyxFQUEyQixrQ0FBa0M7WUFDN0UsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLElBQUksTUFBTTtZQUM1QixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksSUFBSSxNQUFNO1NBQy9CLENBQUM7UUFFRixLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMzQixPQUFPLENBQUMsQ0FBQztZQUNYLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBR0MsWUFBb0IsR0FBZ0IsRUFBUyxRQUFrQixFQUFTLEdBQXNCO1FBQzVGLEtBQUssRUFBRSxDQUFDO1FBRFUsUUFBRyxHQUFILEdBQUcsQ0FBYTtRQUFTLGFBQVEsR0FBUixRQUFRLENBQVU7UUFBUyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtJQUc5RixDQUFDO0lBRUEsUUFBUTtRQUNQLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNwQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVyQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2xCLElBQUksRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzlCLENBQUM7aUJBQU0sSUFBSSxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQVcsRUFBRSxFQUFFO29CQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztvQkFDekIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzlCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBRUwsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3RHLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDO2dCQUN6QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUM1QixJQUFJLENBQUMsWUFBWTtvQkFDakI7d0JBQ0UsQ0FBQyxFQUFFLENBQUMsRUFBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUs7d0JBQzNCLENBQUMsRUFBRSxDQUFDLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztxQkFDM0MsQ0FBQztnQkFDRixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7b0JBQzFELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzVCLENBQUM7WUFDSixDQUFDO2lCQUNHLENBQUM7Z0JBRUgsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDN0IsQ0FBQztRQUNKLENBQUM7UUFFRCx5Q0FBeUM7UUFDekMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWTthQUN6RCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osd0RBQXdEO1lBQ3hELDBEQUEwRDtZQUMxRCw4Q0FBOEM7WUFDOUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN4QixJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUN4QixJQUFJLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO3dCQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO3dCQUMxQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25DLENBQUM7eUJBQU0sSUFBSSxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQzt3QkFDL0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQVcsRUFBRSxFQUFFOzRCQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQzs0QkFDekIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNuQyxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUM3QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25DLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEMsQ0FBQztZQUNILENBQUM7UUFDSyxDQUFDLENBQUMsQ0FDSDtJQUNMLENBQUM7SUFFRCxtREFBbUQ7SUFDbkQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBQ0ssZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMzQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksV0FBVyxDQUFDO1FBQ3RELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDekQsTUFBTSxZQUFZLEdBQUc7WUFDaEIsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPO1lBQ1osR0FBRyxZQUFZO1NBQ2hCLENBQUM7UUFDSixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7YUFDM0IsU0FBUyxDQUFDO1lBQ1QsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLHVFQUF1RTtnQkFDdkUsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDN0MsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFDLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM3RCxDQUFDO3lCQUNHLENBQUM7d0JBQ0YsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDOUMsQ0FBQztnQkFDSCxDQUFDO2dCQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQix1RkFBdUY7WUFDekYsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNsQixPQUFPLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDckIsMEVBQTBFO1lBQzVFLENBQUM7U0FDRixDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0csOERBQThEO0lBRTlELFNBQVMsQ0FBQyxLQUFVO1FBQ2xCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ1gsQ0FBQztJQUVHLFFBQVEsQ0FBQyxLQUFVO1FBRXBCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDNUIsQ0FBQztJQUNYLENBQUM7SUFFQyxpQkFBaUIsQ0FBQyxHQUFRO1FBQ3ZCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDO1FBQzFDLElBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBQyxDQUFDO1lBQ25CLDJCQUEyQjtZQUUzQixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ2xELEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ3ZCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDakYsQ0FBQztZQUNGLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNyRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7WUFDN0QsQ0FBQztRQUNELENBQUM7YUFDRyxDQUFDO1lBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7WUFFOUIsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUN2QixLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUNyRCxDQUFDO1lBQ0osQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO1lBQy9DLENBQUM7UUFDQyxDQUFDO0lBRUwsQ0FBQztJQUNTLG9CQUFvQixDQUFDLFlBQVksR0FBQyxJQUFJO1FBQzVDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ25DLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDO1FBRXpDLElBQUksR0FBRyxJQUFJLElBQUk7WUFBRSxPQUFPO1FBRXhCLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNsRCxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUN2QixDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFFRCxJQUFHLFlBQVksSUFBSSxJQUFJLEVBQUMsQ0FBQztZQUV6QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUM1QixDQUFDO1FBQ0osQ0FBQzthQUNHLENBQUM7WUFDSCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7Z0JBQzFELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDNUIsQ0FBQztRQUNULENBQUM7SUFDRCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsWUFBWSxHQUFHLElBQUk7UUFDL0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFDbkMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUM7UUFFekMsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDNUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUVwRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM1RCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUVwQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFFNUMsK0RBQStEO1lBQy9ELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ2xELEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDOUQsQ0FDRixDQUFDO1lBRUYsUUFBUSxDQUFDLEtBQUssQ0FBQztpQkFDWixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUM1QyxTQUFTLENBQUM7Z0JBQ1QsSUFBSSxFQUFFLENBQUMsS0FBWSxFQUFFLEVBQUU7b0JBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztvQkFFakQsSUFBSSxZQUFZLEVBQUUsQ0FBQzt3QkFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3RFLENBQUM7eUJBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO29CQUM3RCxDQUFDO29CQUVELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzNCLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2xCLE9BQU8sQ0FBQyxLQUFLLENBQUMscUNBQXFDLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQzFELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDdkIsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNQLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFFcEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzVDLE1BQU0sWUFBWSxHQUFHLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUVwRCxJQUFJLENBQUMsR0FBRztpQkFDTCxPQUFPLENBQUMsWUFBWSxDQUFDO2lCQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUM1QyxTQUFTLENBQUM7Z0JBQ1QsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2pCLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUV6QixJQUFJLFlBQVksRUFBRSxDQUFDO3dCQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN4QyxDQUFDO3lCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztvQkFDN0QsQ0FBQztvQkFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUMzQixDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNsQixPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztvQkFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLENBQUM7YUFDRixDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQztJQUdELGVBQWU7UUFDYixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTdDLElBQUksT0FBTyxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdkMsaURBQWlEO1lBQ2pELE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsT0FBTyxZQUFZLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBVTtRQUNyQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsd0JBQXdCO1FBQzVCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBVTtRQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRXZCLENBQUM7SUFDRCxhQUFhO1FBQ1gsbUNBQW1DO1FBQ25DLGlDQUFpQztRQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNELHFCQUFxQjtRQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBRywwQkFBMEI7UUFDeEQsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyx5QkFBeUI7SUFDdEUsQ0FBQztJQUNELHNDQUFzQztJQUNwQyxlQUFlLENBQUMsS0FBVTtRQUN4Qix3Q0FBd0M7UUFDMUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNyQyxLQUFLLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXBDLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEMsMEJBQTBCO1FBQzFCLDZDQUE2QztRQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUtILE1BQU0sQ0FBQyxLQUF3QjtRQUM3QixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN0RCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzVCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUU1QyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDO2dCQUN0QyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdCLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUM5QixJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUMvQyxDQUFDO1lBRU4sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0MsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUVuQix3QkFBd0I7WUFDeEIsTUFBTSxXQUFXLEdBQW9CO2dCQUNuQyxPQUFPLEVBQUUsRUFBRTtnQkFDWCxPQUFPLEVBQUUsRUFBRTtnQkFDWCxPQUFPLEVBQUUsRUFBRTthQUNaLENBQUM7WUFFRix1Q0FBdUM7WUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsMkNBQTJDO2dCQUMzQyxNQUFNLFNBQVMsR0FBZ0I7b0JBQzdCLGVBQWUsRUFBRSxLQUFLO29CQUN0QixVQUFVLEVBQUU7d0JBQ1Y7NEJBQ0UsS0FBSyxFQUFFLEVBQUU7NEJBQ1QsUUFBUSxFQUFFLFVBQVU7NEJBQ3BCLEtBQUssRUFBRSxDQUFDO3lCQUNUO3FCQUNGO2lCQUNGLENBQUM7Z0JBRUYsc0NBQXNDO2dCQUN0QyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQzVDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDaEMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDMUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7NEJBQ3hCLEtBQUssRUFBRSxHQUFHOzRCQUNWLFFBQVEsRUFBRSxJQUFJOzRCQUNkLEtBQUssRUFBRSxLQUFLO3lCQUNiLENBQUMsQ0FBQztvQkFDTCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3BDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN0QyxDQUFDO1lBQ0gsQ0FBQztZQUVELDRDQUE0QztZQUM1QyxJQUFJLGNBQWMsR0FBMEIsRUFBRSxDQUFDO1lBQy9DLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFdkMsSUFBSSxPQUFPLFdBQVcsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDdEMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsbUJBQW1CO1lBQ2pFLENBQUM7aUJBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLGNBQWMsR0FBRyxXQUFXLENBQUM7WUFDL0IsQ0FBQztZQUVELHVEQUF1RDtZQUN2RCxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUM1QyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3BELHFEQUFxRDtvQkFDckQsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7cUJBQU0sQ0FBQztvQkFDTiwyREFBMkQ7b0JBQzNELE1BQU0saUJBQWlCLEdBQUc7d0JBQ3hCLEdBQUcsV0FBVzt3QkFDZCxvQkFBb0IsRUFBRSxXQUFXLENBQUMsb0JBQW9CLElBQUksS0FBSztxQkFDaEUsQ0FBQztvQkFDRixXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUM5QyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCx1REFBdUQ7WUFDdkQsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUM7WUFDM0MsSUFBSSxPQUFPLFlBQVksS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDdkMsWUFBWSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsQ0FBQztZQUVELE1BQU0sWUFBWSxHQUF3QjtnQkFDeEMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO2FBQzNDLENBQUM7WUFFRixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDO2lCQUN6QyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUM1QyxTQUFTLENBQUM7Z0JBQ1QsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO29CQUN2QyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDN0MsQ0FBQztnQkFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO29CQUNWLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO2dCQUNyQixDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNILENBQUM7SUFFQyxRQUFRLENBQUMsSUFBNkI7UUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBRTFELHVCQUF1QjtRQUN2QixnREFBZ0Q7UUFDaEQsWUFBWTtRQUNaLHdDQUF3QztRQUN4QyxZQUFZO1FBQ1osc0JBQXNCO1FBQ3RCLE1BQU07UUFDTixNQUFNO1FBQ04sNENBQTRDO1FBQzVDLDhEQUE4RDtRQUM5RCxnREFBZ0Q7UUFDaEQsNkJBQTZCO1FBQzdCLG9DQUFvQztRQUNwQyxpRUFBaUU7UUFDakUsWUFBWTtRQUNaLE1BQU07UUFDTixNQUFNO0lBRVIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixPQUFPLHNCQUFzQixDQUFDLENBQUMsMENBQTBDO1FBQzNFLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE9BQU8sa0JBQWtCLENBQUMsQ0FBQyx5Q0FBeUM7UUFDdEUsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLENBQUMscUNBQXFDO0lBQ2xELENBQUM7SUFFSCxjQUFjLENBQUMsSUFBUztRQUN0QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQztRQUN6QyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7dUdBamZhLDRCQUE0QjsyRkFBNUIsNEJBQTRCLHNFQWhCN0IsQ0FBQyxhQUFhLEVBQUMsV0FBVyxDQUFDLDBPQXRFNUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFFVCwyREFHQyxXQUFXLDhWQUNYLG1CQUFtQiw4QkFDbkIsa0JBQWtCLHN4Q0FDbEIsWUFBWSw4QkFDWixnQkFBZ0IseUpBQ2hCLHFCQUFxQixvS0FDckIsZ0JBQWdCLGtHQUNoQixlQUFlLDhCQUVmLGNBQWMsOEJBQ2QsWUFBWSxrYkFDWixzQkFBc0I7OzJGQUdaLDRCQUE0QjtrQkF4RnpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxRVQ7b0JBQ0QsU0FBUyxFQUFFLENBQUMsYUFBYSxFQUFDLFdBQVcsQ0FBQztvQkFDdEMsT0FBTyxFQUFDO3dCQUNOLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixxQkFBcUI7d0JBQ3JCLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsWUFBWTt3QkFDWixzQkFBc0I7cUJBQ3pCO2lCQUNBO3VJQUV3QixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBQ0EsTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRmllbGRUeXBlLCBGb3JtbHlBdHRyaWJ1dGVzLCBGaWVsZFR5cGVDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmluYWxpemUsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQXV0b0NvbXBsZXRlTW9kdWxlLCBBdXRvQ29tcGxldGUgfSBmcm9tICdwcmltZW5nL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IElucHV0R3JvdXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXAnO1xyXG5pbXBvcnQgeyBJbnB1dEdyb3VwQWRkb25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXBhZGRvbic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtbHlGaWVsZFByb3BzIH0gZnJvbSAnQG5neC1mb3JtbHkvcHJpbWVuZy9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgQ2hlY2tib3hNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NoZWNrYm94JztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSwgRmlsdGVyR3JvdXAsIFF1ZXJ5UGFyYW1ldGVycywgUXVlcnlQYXJzZXIgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvc2VydmljZXMnO1xyXG5pbXBvcnQgeyBHZW5lcmljRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy51aS5jb3JlL2dlbmVyaWMtZGlhbG9nJztcclxuXHJcbmludGVyZmFjZSBHZW5lcmljU2VsZWN0b3JQcm9wcyBleHRlbmRzIEZvcm1seUZpZWxkUHJvcHMvKiAsIEZvcm1seUZpZWxkU2VsZWN0UHJvcHMgKi8ge1xyXG4gIC8vIGFwcGVuZFRvPzogU2VsZWN0WydhcHBlbmRUbyddO1xyXG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XHJcbiAgbGlzdEVuZHBvaW50Pzogc3RyaW5nIHwgKChtb2RlbDogYW55KSA9PiBzdHJpbmcpO1xyXG4gIGxvYWREZWZhdWx0RmllbGQ/OiBzdHJpbmc7XHJcbiAgbG9hZERlZmF1bHRWYWx1ZT86IHN0cmluZztcclxuICBsb2FkRGVmYXVsdD86IGJvb2xlYW47XHJcblxyXG4gIGxhYmVsRmllbGQ/OiBzdHJpbmc7XHJcbiAgbGFiZWxGaWVsZEVuPzogc3RyaW5nO1xyXG4gIHZhbHVlRmllbGQ/OiBzdHJpbmc7XHJcbiAgdXNlTXVsdGlMYW5nPzogYm9vbGVhbjtcclxuXHJcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xyXG5cclxuICBkaXNwbGF5PzogYm9vbGVhbjtcclxuICBvZmZsaW5lPzogYm9vbGVhbjtcclxuXHJcbiAgbG9hZFNhdmVkPzogYm9vbGVhbjtcclxuICBsb2FkU2F2ZWRGaWVsZD86IHN0cmluZztcclxuXHJcblxyXG4gIC8qKiBTdGF0aWMgb2ZmbGluZSBpdGVtcyAoYXJyYXkgb2Ygb2JqZWN0cykgKi9cclxuICBvZmZsaW5lSXRlbXM/OiBhbnlbXTtcclxuXHJcbiAgLyoqIEFzeW5jIG9mZmxpbmUgaXRlbXMgKG9ic2VydmFibGUpICovXHJcbiAgb2ZmbGluZUl0ZW1zJD86IE9ic2VydmFibGU8YW55W10+O1xyXG5cclxuICAvKiogRnVuY3Rpb24tYmFzZWQgZmlsdGVyIGZvciBvZmZsaW5lIGl0ZW1zICovXHJcbiAgb25TZWxlY3Q/OiAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnLCBldmVudD86IGFueSkgPT4gdm9pZDtcclxuXHJcbiAgb2ZmbGluZURhdGFGbj86IChxdWVyeT86IHN0cmluZykgPT4gYW55W107XHJcbiAgZmlsdGVycz86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBGaWx0ZXJHcm91cFtdO1xyXG4gICBmaXhlZEZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG4gICAgZGVmYXVsdFZhbHVlPzogYW55OyAgICAgICAvLyBpZCDYo9mIIGFycmF5IG9mIGlkc1xyXG4gIGRlZmF1bHRJdGVtPzogYW55OyAgICAgICAgLy8g2KfZhNmD2KfYptmGINmD2KfZhdmEIChvYmplY3QpINil2LDYpyDYudmG2K/ZgyDYrNin2YfYslxyXG5cclxuICB2aWV3UGVybWlzc2lvbk5hbWU/OiBzdHJpbmc7XHJcbiAgZWRpdFBlcm1pc3Npb25OYW1lPzogc3RyaW5nO1xyXG4gIGFkZFBlcm1pc3Npb25OYW1lPzogc3RyaW5nO1xyXG4gIGlkRmllbGQ/OiBzdHJpbmc7XHJcbiAgZGlhbG9nRGlzcGxheU1vZGU/OiAgfCAnZHJhd2VyJ1xyXG4gICAgfCAnZGlhbG9nJ1xyXG4gICAgfCAncm91dGUnXHJcbiAgICB8ICdpbmxpbmUnXHJcbiAgICB8IFBhcnRpYWw8XHJcbiAgICAgIFJlY29yZDxcclxuICAgICAgICAnYWRkJyB8ICdlZGl0JyB8ICd2aWV3JyxcclxuICAgICAgICAnZHJhd2VyJyB8ICdkaWFsb2cnIHwgJ3JvdXRlJyB8ICdpbmxpbmUnXHJcbiAgICAgID4+O1xyXG4gIGNhbkFkZD86IGJvb2xlYW47XHJcbiAgY2FuTG9va3VwPzogYm9vbGVhbjtcclxuICBmb3JtRmllbGRzPzogIEZvcm1seUZpZWxkQ29uZmlnW107XHJcbiAgYWZ0ZXJTYXZlPzogKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZywgZXZlbnQ/OiBhbnkpID0+IHZvaWQ7XHJcblxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Zvcm1seS1nZW5lcmljLXNlbGVjdG9yJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gIDwhLS0gW25nU3R5bGVdPVwieydkaXNwbGF5JzogcHJvcHMuZGlzcGxheSA/ICdibG9jayc6ICdub25lJ31cIiAtLT5cclxuIDxwLWlucHV0R3JvdXAgICBjbGFzcz1cInctZnVsbFwiPlxyXG4gIDxwLWF1dG9Db21wbGV0ZVxyXG4gICAgI2F1dG9Db21wXHJcbiAgICBbbmdNb2RlbF09XCJzZWxlY3RlZEl0ZW1cIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICBbZm9ybWx5QXR0cmlidXRlc109XCJmaWVsZFwiXHJcbiAgICBbc3VnZ2VzdGlvbnNdPVwib3B0aW9uc19cIlxyXG4gICAgKGNvbXBsZXRlTWV0aG9kKT1cInNlYXJjaCgkZXZlbnQpXCJcclxuICAgIFttdWx0aXBsZV09XCJ0b1snbXVsdGlwbGUnXVwiXHJcbiAgICBbb3B0aW9uTGFiZWxdPVwib3B0aW9uTGFiZWxcIlxyXG4gICAgW2Ryb3Bkb3duXT1cImZhbHNlXCJcclxuICAgIFtmb3JjZVNlbGVjdGlvbl09XCJ0cnVlXCJcclxuICAgIFtwbGFjZWhvbGRlcl09XCIocHJvcHNbJ3BsYWNlaG9sZGVyJ10gPz8gJycpIHwgdHJhbnNsYXRlXCJcclxuICAgIFtkaXNhYmxlZF09XCIhIXByb3BzLmRpc2FibGVkXCJcclxuICAgIGRyb3Bkb3duTW9kZT1cImN1cnJlbnRcIlxyXG4gICAgYXBwZW5kVG89XCJib2R5XCJcclxuICAgIGNsYXNzPVwidy1mdWxsIHJvdW5kZWQtbm9uZVwiXHJcbiAgICBbc2hvd0VtcHR5TWVzc2FnZV09XCJ0cnVlXCJcclxuICAgIChvblNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQpXCJcclxuICAgIGVtcHR5TWVzc2FnZT1cInt7IGdldEVtcHR5TWVzc2FnZSgpIHwgdHJhbnNsYXRlIH19XCJcclxuICAgIFtzaG93VHJhbnNpdGlvbk9wdGlvbnNdPVwiJzBtcydcIlxyXG4gICAgW3Nob3dDbGVhcl09XCJmYWxzZVwiXHJcblxyXG4gICAgIChrZXlkb3duLmFycm93ZG93bik9XCJvbkFycm93RG93bigkZXZlbnQpXCJcclxuICAoa2V5ZG93bi5lc2NhcGUpPVwib25Fc2NhcGUoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbSBwVGVtcGxhdGU9XCJpdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIj5cclxuICAgICAgICAgIDxzcGFuPnt7IGdldFByaW1hcnlMYWJlbChpdGVtKSB9fTwvc3Bhbj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLWF1dG9Db21wbGV0ZT5cclxuXHJcbiAgPHAtaW5wdXRHcm91cEFkZG9uPlxyXG4gICAgPHAtYnV0dG9uXHJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiISFwcm9wcy5kaXNhYmxlZCB8fCBsb2FkaW5nXCJcclxuICAgICAgW2ljb25dPVwibG9hZGluZyA/ICdwaSBwaS1zcGlubmVyIHBpLXNwaW4nIDogJ3BpIHBpLWNoZXZyb24tZG93bidcIlxyXG4gICAgICAoY2xpY2spPVwib25Ecm9wZG93bkJ1dHRvbkNsaWNrKClcIlxyXG4gICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiIC8+XHJcbiAgPC9wLWlucHV0R3JvdXBBZGRvbj5cclxuICA8IS0tIEFkZCBuZXcgYnV0dG9uIC0tPlxyXG4gICBAaWYgKHByb3BzLmNhbkFkZCAmJiBwcm9wcy5mb3JtRmllbGRzKSB7XHJcbiAgPHAtaW5wdXRHcm91cEFkZG9uPlxyXG4gICAgPHAtYnV0dG9uXHJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiISFwcm9wcy5kaXNhYmxlZFwiXHJcbiAgICAgIGljb249XCJwaSBwaS1wbHVzXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQWRkTmV3Q2xpY2soKVwiXHJcbiAgICAgIHNldmVyaXR5PVwicHJpbWFyeVwiIC8+XHJcbiAgPC9wLWlucHV0R3JvdXBBZGRvbj5cclxuICAgfVxyXG48L3AtaW5wdXRHcm91cD5cclxuXHJcbjwhLS0gW21vZGVsXT1cIm1vZGVsXCIgLS0+XHJcbiAgPGFwcC1nZW5lcmljLWRpYWxvZ1xyXG4gICAgI2RpYWxvZ1xyXG4gICAgW2Zvcm1GaWVsZHNdPVwicHJvcHMuZm9ybUZpZWxkcyA/PyBbXVwiXHJcbiAgICBbYXBpTmFtZV09XCJwcm9wcy5zZXJ2aWNlTmFtZVwiXHJcbiAgICBbaWRGaWVsZF09XCJwcm9wcy5pZEZpZWxkID8/J2lkJ1wiXHJcbiAgICBbZGlzcGxheU1vZGVdPVwicHJvcHMuZGlhbG9nRGlzcGxheU1vZGUgPz8gJ2RpYWxvZydcIlxyXG4gICAgKGFmdGVyU2F2ZSk9XCJhZnRlclNhdmUoJGV2ZW50KVwiXHJcbiAgPlxyXG4gIDwvYXBwLWdlbmVyaWMtZGlhbG9nPlxyXG5cclxuXHJcbiAgYCxcclxuICBwcm92aWRlcnM6IFtEaWFsb2dTZXJ2aWNlLEJhc2VTZXJ2aWNlXSxcclxuICBpbXBvcnRzOltcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEF1dG9Db21wbGV0ZU1vZHVsZSxcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIElucHV0R3JvdXBNb2R1bGUsXHJcbiAgICBJbnB1dEdyb3VwQWRkb25Nb2R1bGUsXHJcbiAgICBGb3JtbHlBdHRyaWJ1dGVzLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxyXG4gICAgQXV0b0NvbXBsZXRlLFxyXG4gICAgQ2hlY2tib3hNb2R1bGUsXHJcbiAgICBCdXR0b25Nb2R1bGUsXHJcbiAgICBHZW5lcmljRGlhbG9nQ29tcG9uZW50XHJcbl1cclxufSlcclxuZXhwb3J0ICBjbGFzcyBHZW5lcmljU2VsZWN0b3JUeXBlQ29tcG9uZW50IGV4dGVuZHMgRmllbGRUeXBlPEZpZWxkVHlwZUNvbmZpZzxHZW5lcmljU2VsZWN0b3JQcm9wcz4+IGltcGxlbWVudHMgT25Jbml0LE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgnYXV0b0NvbXAnKSBhdXRvQ29tcCE6IEF1dG9Db21wbGV0ZTtcclxuICBAVmlld0NoaWxkKCdkaWFsb2cnKSBkaWFsb2chOiBHZW5lcmljRGlhbG9nQ29tcG9uZW50O1xyXG4gIG9wdGlvbnNfOiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkSXRlbTogYW55O1xyXG5cclxuICBsb2FkaW5nID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfb2ZmbGluZUxpc3Q6IGFueVtdID0gW107XHJcbiAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XHJcblxyXG4gIGFwaTogQmFzZVNlcnZpY2V8YW55O1xyXG4gcHJpdmF0ZSB2YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjsgLy8gQWRkIGEgc3Vic2NyaXB0aW9uIHRvIG1hbmFnZSB0aGUgb2JzZXJ2YWJsZVxyXG5cclxuZ2V0IG9wdGlvbkxhYmVsKCk6IHN0cmluZyB7XHJcbiAgaWYodGhpcy50by51c2VNdWx0aUxhbmcgPT0gdHJ1ZSl7XHJcbiAgICAgaWYodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nID09ICdlbicpe1xyXG4gICAgIHJldHVybiB0aGlzLnRvPy5sYWJlbEZpZWxkRW4gfHwgJ25hbWUnO1xyXG4gICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMudG8/LmxhYmVsRmllbGQgfHwgJ25hbWUnO1xyXG4gIH1cclxuICByZXR1cm4gdGhpcy50bz8ubGFiZWxGaWVsZCB8fCAnbmFtZSc7XHJcbn1cclxuXHJcbnByaXZhdGUgaXNOdWxsT3JFbXB0eSh2YWw6IGFueSk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiB2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSAnJztcclxufVxyXG5cclxuZ2V0UHJpbWFyeUxhYmVsKGl0ZW06IGFueSk6IHN0cmluZyB7XHJcbiAgY29uc3QgZmllbGRzID0gW1xyXG4gICAgdGhpcy5vcHRpb25MYWJlbCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc29sdmVkIGZpZWxkIG5hbWUgZnJvbSBnZXR0ZXJcclxuICAgIHRoaXMudG8ubGFiZWxGaWVsZCB8fCAnbmFtZScsXHJcbiAgICB0aGlzLnRvLmxhYmVsRmllbGRFbiB8fCAnbmFtZSdcclxuICBdO1xyXG5cclxuICBmb3IgKGNvbnN0IGYgb2YgZmllbGRzKSB7XHJcbiAgICBjb25zdCB2ID0gaXRlbVtmXTtcclxuICAgIGlmICghdGhpcy5pc051bGxPckVtcHR5KHYpKSB7XHJcbiAgICAgIHJldHVybiB2O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuICcnO1xyXG59XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN2YzogQmFzZVNlcnZpY2UscHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IscHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICBzdXBlcigpO1xyXG5cclxuICB9XHJcblxyXG4gICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuYXBpID0gdGhpcy5zdmM7XHJcbiAgICBjb25zdCB0byA9IHRoaXMucHJvcHM7XHJcbiAgICB0aGlzLmFwaS5hcGlOYW1lID0gdG9bJ3NlcnZpY2VOYW1lJ107XHJcblxyXG4gICAgaWYgKHRvWydvZmZsaW5lJ10pIHtcclxuICAgICAgaWYgKHRvWydvZmZsaW5lRGF0YUZuJ10pIHtcclxuICAgICAgICB0aGlzLl9vZmZsaW5lTGlzdCA9IHRvWydvZmZsaW5lRGF0YUZuJ10oKTtcclxuICAgICAgICB0aGlzLmluaXRPZmZsaW5lU2VsZWN0aW9uKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodG9bJ29mZmxpbmVJdGVtcyQnXSkge1xyXG4gICAgICAgIHRvWydvZmZsaW5lSXRlbXMkJ10uc3Vic2NyaWJlKChsaXN0OiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fb2ZmbGluZUxpc3QgPSBsaXN0O1xyXG4gICAgICAgICAgdGhpcy5pbml0T2ZmbGluZVNlbGVjdGlvbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX29mZmxpbmVMaXN0ID0gdG9bJ29mZmxpbmVJdGVtcyddIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuaW5pdE9mZmxpbmVTZWxlY3Rpb24oKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICBpZiAodGhpcy5wcm9wcy5sb2FkU2F2ZWQgJiYgIXRoaXMucHJvcHMubXVsdGlwbGUgJiYgdGhpcy5wcm9wcy5sb2FkU2F2ZWRGaWVsZCAmJiB0aGlzLnByb3BzLnZhbHVlRmllbGQpIHtcclxuICAgICAgICAgIGNvbnN0IHZmID0gdGhpcy50b1sndmFsdWVGaWVsZCddIHx8ICdpZCc7XHJcbiAgICAgICAgICBjb25zdCBsZiA9IHRoaXMub3B0aW9uTGFiZWw7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9XHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFt2Zl06dGhpcy5mb3JtQ29udHJvbC52YWx1ZSxcclxuICAgICAgICAgICAgW2xmXTp0aGlzLm1vZGVsW3RoaXMucHJvcHMubG9hZFNhdmVkRmllbGRdLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGlmICh0aGlzLnByb3BzLmNoYW5nZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoYW5nZSh0aGlzLmZpZWxkLCB7IGl0ZW06IHRoaXMuc2VsZWN0ZWRJdGVtIH0pO1xyXG4gICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgfVxyXG4gICAgICAgZWxzZXtcclxuXHJcbiAgICAgICAgIHRoaXMuaW5pdE9ubGluZVNlbGVjdGlvbigpO1xyXG4gICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFN1YnNjcmliZSB0byBmb3JtQ29udHJvbCB2YWx1ZSBjaGFuZ2VzXHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAvLyBUaGlzIHRhcCBvcGVyYXRvciBpcyBhIGdvb2QgcGxhY2UgdG8gcnVuIHNpZGUgZWZmZWN0c1xyXG4gICAgICAgICAgLy8gbGlrZSBjYWxsaW5nIHlvdXIgY2hhbmdlIGhhbmRsZXIgYWZ0ZXIgYSB2YWx1ZSBjaGFuZ2VzLlxyXG4gICAgICAgICAgLy8gdGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMuY2hhbmdlKSB7XHJcbiAgICAgICAgICBpZiAodG9bJ29mZmxpbmUnXSkge1xyXG4gICAgICBpZiAodG9bJ29mZmxpbmVEYXRhRm4nXSkge1xyXG4gICAgICAgIHRoaXMuX29mZmxpbmVMaXN0ID0gdG9bJ29mZmxpbmVEYXRhRm4nXSgpO1xyXG4gICAgICAgIHRoaXMuaW5pdE9mZmxpbmVTZWxlY3Rpb24oZmFsc2UpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRvWydvZmZsaW5lSXRlbXMkJ10pIHtcclxuICAgICAgICB0b1snb2ZmbGluZUl0ZW1zJCddLnN1YnNjcmliZSgobGlzdDogYW55W10pID0+IHtcclxuICAgICAgICAgIHRoaXMuX29mZmxpbmVMaXN0ID0gbGlzdDtcclxuICAgICAgICAgIHRoaXMuaW5pdE9mZmxpbmVTZWxlY3Rpb24oZmFsc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX29mZmxpbmVMaXN0ID0gdG9bJ29mZmxpbmVJdGVtcyddIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuaW5pdE9mZmxpbmVTZWxlY3Rpb24oZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmluaXRPbmxpbmVTZWxlY3Rpb24oZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuICAgICAgICB9KVxyXG4gICAgICA7XHJcbiAgfVxyXG5cclxuICAvLyBSZW1lbWJlciB0byB1bnN1YnNjcmliZSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyFcclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLnZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcbnByaXZhdGUgbG9hZERlZmF1bHRWYWx1ZSgpIHtcclxuICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgdmYgPSB0aGlzLnRvWyd2YWx1ZUZpZWxkJ10gfHwgJ2lkJztcclxuICAgIGNvbnN0IGZpeGVkRmlsdGVycyA9IHRoaXMuZ2V0Rml4ZWRGaWx0ZXJzKCk7XHJcbiAgICAgY29uc3QgbGYgPSB0aGlzLnRvWydsb2FkRGVmYXVsdEZpZWxkJ10gfHwgJ2lzRGVmYXVsdCc7XHJcbiAgICAgY29uc3QgbGZWYWx1ZSA9IHRoaXMudG9bJ2xvYWREZWZhdWx0VmFsdWUnXSB8fCB0cnVlO1xyXG5jb25zdCBzZWFyY2hQYXJhbXMgPSB7XHJcbiAgICAgW2xmXTogbGZWYWx1ZSxcclxuICAgICAgLi4uZml4ZWRGaWx0ZXJzLFxyXG4gICAgfTtcclxuICB0aGlzLmFwaS5nZXRMaXN0KHNlYXJjaFBhcmFtcylcclxuICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBBc3N1bWluZyB0aGUgQVBJIHJldHVybnMgYSBsaXN0IGFuZCB5b3Ugd2FudCB0byBzZWxlY3QgdGhlIGZpcnN0IG9uZVxyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLml0ZW1zICYmIHJlcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy50b1snbXVsdGlwbGUnXSl7XHJcbiAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShyZXMuaXRlbXMubWFwKChjOiBhbnkpID0+IGNbdmZdKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gcmVzLml0ZW1zWzBdO1xyXG4gICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShkZWZhdWx0VmFsdWU/Llt2Zl0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAvLyB0aGlzLmluaXRPbmxpbmVTZWxlY3Rpb24oKTsgLy8gUHJvY2VlZCB3aXRoIG9ubGluZSBzZWxlY3Rpb24gYWZ0ZXIgc2V0dGluZyB0aGUgdmFsdWVcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gbG9hZCBkZWZhdWx0IHZhbHVlIGZyb20gQVBJOlwiLCBlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIC8vIHRoaXMuaW5pdE9ubGluZVNlbGVjdGlvbigpOyAvLyBGYWxsYmFjayB0byBsb2NhbCBzZWxlY3Rpb24gaWYgQVBJIGZhaWxzXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbiAgICAvLyBOZXcgbWV0aG9kIHRvIGhhbmRsZSBsb2FkaW5nIHRoZSBkZWZhdWx0IHZhbHVlIGZyb20gdGhlIEFQSVxyXG5cclxuICAgIGFmdGVyU2F2ZShldmVudDogYW55KSB7XHJcbiAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQucmVjb3JkKTtcclxuICAgaWYgKHRoaXMucHJvcHMuYWZ0ZXJTYXZlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuYWZ0ZXJTYXZlKHRoaXMuZmllbGQsIHsgaXRlbTogZXZlbnQucmVzcG9uc2UgfSk7XHJcbiAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbn1cclxuXHJcbiAgICBvblNlbGVjdChldmVudDogYW55KSB7XHJcblxyXG4gICBpZiAodGhpcy5wcm9wcy5vblNlbGVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uU2VsZWN0KHRoaXMuZmllbGQsIHsgaXRlbTogZXZlbnQudmFsdWUgfSk7XHJcbiAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbn1cclxuXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2UodmFsOiBhbnkpIHtcclxuICAgICBjb25zdCB2ZiA9IHRoaXMudG9bJ3ZhbHVlRmllbGQnXSB8fCAnaWQnO1xyXG4gICAgaWYodGhpcy50b1snb2ZmbGluZSddKXtcclxuICAgICAgICAvLyB0aGlzLnNlbGVjdGVkSXRlbSA9IHZhbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudG9bJ211bHRpcGxlJ10gJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gdGhpcy5fb2ZmbGluZUxpc3QuZmlsdGVyKGl0ZW0gPT5cclxuICAgICAgICB2YWwuaW5jbHVkZXMoaXRlbVt2Zl0pXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoXHJcbiAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RlZEl0ZW0pID8gdGhpcy5zZWxlY3RlZEl0ZW0ubWFwKChjOiBhbnkpID0+IGNbdmZdKSA6IFtdXHJcbiAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLl9vZmZsaW5lTGlzdC5maW5kKGl0ZW0gPT4gaXRlbVt2Zl0gPT09IHZhbCk7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5zZWxlY3RlZEl0ZW0/Llt2Zl0gPz8gbnVsbCk7XHJcbiAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gdmFsO1xyXG5cclxuICBpZiAodGhpcy50b1snbXVsdGlwbGUnXSkge1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShcclxuICAgICAgQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsLm1hcCgoYzogYW55KSA9PiBjW3ZmXSkgOiBbXVxyXG4gICAgKTtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWw/Llt2Zl0gPz8gbnVsbCk7XHJcbiAgfVxyXG4gICAgfVxyXG5cclxufVxyXG4gIHByaXZhdGUgaW5pdE9mZmxpbmVTZWxlY3Rpb24od2l0aFNldFZhbHVlPXRydWUpIHtcclxuICAgIGNvbnN0IHZhbCA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICBjb25zdCB2ZiA9IHRoaXMudG9bJ3ZhbHVlRmllbGQnXSB8fCAnaWQnO1xyXG5cclxuICAgIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmICh0aGlzLnRvWydtdWx0aXBsZSddICYmIEFycmF5LmlzQXJyYXkodmFsKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuX29mZmxpbmVMaXN0LmZpbHRlcihpdGVtID0+XHJcbiAgICAgICAgdmFsLmluY2x1ZGVzKGl0ZW1bdmZdKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLl9vZmZsaW5lTGlzdC5maW5kKGl0ZW0gPT4gaXRlbVt2Zl0gPT09IHZhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYod2l0aFNldFZhbHVlID09IHRydWUpe1xyXG5cclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoXHJcbiAgICAgIHRoaXMudG9bJ211bHRpcGxlJ11cclxuICAgICAgICA/IHRoaXMuc2VsZWN0ZWRJdGVtLm1hcCgoYzogYW55KSA9PiBjW3ZmXSlcclxuICAgICAgICA6IHRoaXMuc2VsZWN0ZWRJdGVtPy5bdmZdXHJcbiAgICApO1xyXG4gIH1cclxuICBlbHNle1xyXG4gICAgaWYgKHRoaXMucHJvcHMuY2hhbmdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hhbmdlKHRoaXMuZmllbGQsIHsgaXRlbTogdGhpcy5zZWxlY3RlZEl0ZW0gfSk7XHJcbiAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0T25saW5lU2VsZWN0aW9uKHdpdGhTZXRWYWx1ZSA9IHRydWUpIHtcclxuICBjb25zdCB2YWwgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xyXG4gIGNvbnN0IHZmID0gdGhpcy50b1sndmFsdWVGaWVsZCddIHx8ICdpZCc7XHJcblxyXG4gIGlmICh2YWwgPT0gbnVsbCB8fCAoQXJyYXkuaXNBcnJheSh2YWwpICYmIHZhbC5sZW5ndGggPT09IDApKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMudG9bJ211bHRpcGxlJ10gPyBbXSA6IG51bGw7XHJcblxyXG4gICAgaWYgKHRoaXMucHJvcHNbJ2xvYWREZWZhdWx0J10gPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5sb2FkRGVmYXVsdFZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy50b1snbXVsdGlwbGUnXSAmJiBBcnJheS5pc0FycmF5KHZhbCkgJiYgdmFsLmxlbmd0aCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBmaXhlZEZpbHRlcnMgPSB0aGlzLmdldEZpeGVkRmlsdGVycygpO1xyXG5cclxuICAgIC8vIPCflJEgb25lIGdldExpc3QgY2FsbCBwZXIgaWQsIGJ1dCBpbmNsdWRlIGZpeGVkRmlsdGVycyBpbiBlYWNoXHJcbiAgICBjb25zdCBjYWxscyA9IHZhbC5tYXAoKGlkOiBhbnkpID0+XHJcbiAgICAgIHRoaXMuYXBpLmdldExpc3QoeyAuLi5maXhlZEZpbHRlcnMsIFt2Zl06IGlkIH0pLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4gKHJlcz8uaXRlbXM/Lmxlbmd0aCA/IHJlcy5pdGVtc1swXSA6IG51bGwpKVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGZvcmtKb2luKGNhbGxzKVxyXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBpdGVtcy5maWx0ZXIoaSA9PiBpICE9IG51bGwpO1xyXG5cclxuICAgICAgICAgIGlmICh3aXRoU2V0VmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkSXRlbS5tYXAoKGM6IGFueSkgPT4gY1t2Zl0pKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5jaGFuZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGFuZ2UodGhpcy5maWVsZCwgeyBpdGVtOiB0aGlzLnNlbGVjdGVkSXRlbSB9KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBtdWx0aXBsZSBzZWxlY3Rpb25zOicsIGVycik7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgZml4ZWRGaWx0ZXJzID0gdGhpcy5nZXRGaXhlZEZpbHRlcnMoKTtcclxuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHsgLi4uZml4ZWRGaWx0ZXJzLCBbdmZdOiB2YWwgfTtcclxuXHJcbiAgICB0aGlzLmFwaVxyXG4gICAgICAuZ2V0TGlzdChzZWFyY2hQYXJhbXMpXHJcbiAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSByZXM/Lml0ZW1zPy5bMF0gfHwgbnVsbDtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTtcclxuXHJcbiAgICAgICAgICBpZiAod2l0aFNldFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoaXRlbT8uW3ZmXSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuY2hhbmdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hhbmdlKHRoaXMuZmllbGQsIHsgaXRlbTogdGhpcy5zZWxlY3RlZEl0ZW0gfSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgc2VsZWN0aW9uOicsIGVycik7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5nZXRGaXhlZEZpbHRlcnMoKTogYW55IHtcclxuICBjb25zdCBmaXhlZEZpbHRlcnMgPSB0aGlzLnRvWydmaXhlZEZpbHRlcnMnXTtcclxuXHJcbiAgaWYgKHR5cGVvZiBmaXhlZEZpbHRlcnMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIC8vIENhbGwgd2l0aCBjdXJyZW50IG1vZGVsIChhbmQgb3B0aW9uYWxseSBmaWVsZClcclxuICAgIHJldHVybiBmaXhlZEZpbHRlcnModGhpcy5tb2RlbCk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZml4ZWRGaWx0ZXJzIHx8IHt9O1xyXG59XHJcblxyXG5vbkFycm93RG93bihldmVudDogYW55KSB7XHJcbiBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy8gdGhpcy5hdXRvQ29tcC5zaG93KCk7XHJcbnRoaXMub25Ecm9wZG93bkJ1dHRvbkNsaWNrKCk7XHJcbn1cclxuXHJcbm9uRXNjYXBlKGV2ZW50OiBhbnkpIHtcclxuICB0aGlzLmF1dG9Db21wLmhpZGUoKTtcclxuXHJcbn1cclxub25BZGROZXdDbGljaygpIHtcclxuICAvLyB5b3VyIGxvZ2ljIGZvciBhZGRpbmcgYSBuZXcgaXRlbVxyXG4gIC8vIGUuZy4gb3BlbiBkaWFsb2cgb3IgZW1pdCBldmVudFxyXG4gIGNvbnNvbGUubG9nKCdBZGQgbmV3IGl0ZW0gY2xpY2tlZCcpO1xyXG4gIHRoaXMuZGlhbG9nLm9wZW5Gb3JtKFwiY3JlYXRlXCIpO1xyXG59XHJcbm9uRHJvcGRvd25CdXR0b25DbGljaygpIHtcclxuICB0aGlzLnNlYXJjaCh7IHF1ZXJ5OiAnJyB9KTsgICAvLyB0cmlnZ2VyIHlvdXIgb3duIHNlYXJjaFxyXG4gIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdXRvQ29tcC5zaG93KCksIDApOyAvLyBmb3JjZSBkcm9wZG93biB0byBvcGVuXHJcbn1cclxuLy8gQ2FsbGVkIHdoZW4gZHJvcGRvd24gYnV0dG9uIGNsaWNrZWRcclxuICBvbkRyb3Bkb3duQ2xpY2soZXZlbnQ6IGFueSkge1xyXG4gICAgLy8g8J+aqyBzdG9wIHRoZSBkZWZhdWx0IGRyb3Bkb3duIGJlaGF2aW9yXHJcbiAgZXZlbnQub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIGV2ZW50Lm9yaWdpbmFsRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgY29uc29sZS5sb2coJ0Ryb3Bkb3duIGNsaWNrZWQhJywgZXZlbnQpO1xyXG4gICAgLy8g4pyFIHlvdXIgY3VzdG9tIGNvZGUgaGVyZVxyXG4gICAgLy8gZS5nLiwgZm9yY2UgdHJpZ2dlciBzZWFyY2ggZm9yIGVtcHR5IHF1ZXJ5XHJcbiAgICB0aGlzLnNlYXJjaCh7IHF1ZXJ5OiAnJyB9KTtcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5zZWFyY2goZXZlbnQ6IHsgcXVlcnk6IHN0cmluZyB9KSB7XHJcbiAgY29uc3QgcSA9IGV2ZW50LnF1ZXJ5Py50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgfHwgJyc7XHJcbiAgY29uc3QgbGYgPSB0aGlzLm9wdGlvbkxhYmVsO1xyXG4gIGNvbnN0IGZpeGVkRmlsdGVycyA9IHRoaXMuZ2V0Rml4ZWRGaWx0ZXJzKCk7XHJcblxyXG4gIGlmICh0aGlzLnRvWydvZmZsaW5lJ10pIHtcclxuICAgIHRoaXMub3B0aW9uc18gPSB0aGlzLnRvWydvZmZsaW5lRGF0YUZuJ11cclxuICAgICAgPyB0aGlzLnRvWydvZmZsaW5lRGF0YUZuJ10ocSlcclxuICAgICAgOiB0aGlzLl9vZmZsaW5lTGlzdC5maWx0ZXIoaXRlbSA9PlxyXG4gICAgICAgICAgaXRlbVtsZl0/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmF1dG9Db21wPy5zaG93KCksIDApO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5vcHRpb25zXyA9IFtdO1xyXG5cclxuICAgIC8vIEJ1aWxkIFF1ZXJ5UGFyYW1ldGVyc1xyXG4gICAgY29uc3QgcXVlcnlQYXJhbXM6IFF1ZXJ5UGFyYW1ldGVycyA9IHtcclxuICAgICAgZmlsdGVyczogW10sXHJcbiAgICAgIG9yZGVyQnk6IFtdLFxyXG4gICAgICBncm91cEJ5OiBbXVxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBIYW5kbGUgbWFpbiBzZWFyY2ggYW5kIGZpeGVkIGZpbHRlcnNcclxuICAgIGlmICghdGhpcy50b1snZmlsdGVycyddKSB7XHJcbiAgICAgIC8vIENyZWF0ZSBhIGdyb3VwIGZvciBtYWluIHNlYXJjaCBjb25kaXRpb25cclxuICAgICAgY29uc3QgbWFpbkdyb3VwOiBGaWx0ZXJHcm91cCA9IHtcclxuICAgICAgICBsb2dpY2FsT3BlcmF0b3I6ICdhbmQnLFxyXG4gICAgICAgIGNvbmRpdGlvbnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6IGxmLFxyXG4gICAgICAgICAgICBvcGVyYXRvcjogJ2NvbnRhaW5zJyxcclxuICAgICAgICAgICAgdmFsdWU6IHFcclxuICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBBZGQgZml4ZWQgZmlsdGVycyB0byB0aGUgc2FtZSBncm91cFxyXG4gICAgICBPYmplY3Qua2V5cyhmaXhlZEZpbHRlcnMgfHwge30pLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGZpeGVkRmlsdGVyc1trZXldO1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBtYWluR3JvdXAuY29uZGl0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgZmllbGQ6IGtleSxcclxuICAgICAgICAgICAgb3BlcmF0b3I6ICdlcScsXHJcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChtYWluR3JvdXAuY29uZGl0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcXVlcnlQYXJhbXMuZmlsdGVycy5wdXNoKG1haW5Hcm91cCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBNZXJnZSBkeW5hbWljIGZpbHRlcnMgKGZ1bmN0aW9uIG9yIGFycmF5KVxyXG4gICAgbGV0IGR5bmFtaWNGaWx0ZXJzOiBGaWx0ZXJHcm91cFtdIHwgYW55W10gPSBbXTtcclxuICAgIGNvbnN0IGZpbHRlcnNQcm9wID0gdGhpcy50b1snZmlsdGVycyddO1xyXG5cclxuICAgIGlmICh0eXBlb2YgZmlsdGVyc1Byb3AgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgZHluYW1pY0ZpbHRlcnMgPSBmaWx0ZXJzUHJvcChxLHRoaXMuZmllbGQpOyAvLyBwYXNzIHNlYXJjaCB0ZXh0XHJcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyc1Byb3ApKSB7XHJcbiAgICAgIGR5bmFtaWNGaWx0ZXJzID0gZmlsdGVyc1Byb3A7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWRkIGR5bmFtaWMgZmlsdGVycyB3aXRoIHByb3BlciBncm91cExvZ2ljYWxPcGVyYXRvclxyXG4gICAgZHluYW1pY0ZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyR3JvdXAsIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChpbmRleCA9PT0gMCAmJiBxdWVyeVBhcmFtcy5maWx0ZXJzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIC8vIEZpcnN0IGZpbHRlciBncm91cCwgbm8gZ3JvdXBMb2dpY2FsT3BlcmF0b3IgbmVlZGVkXHJcbiAgICAgICAgcXVlcnlQYXJhbXMuZmlsdGVycy5wdXNoKGZpbHRlckdyb3VwKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBTdWJzZXF1ZW50IGdyb3VwcywgZW5zdXJlIHRoZXkgaGF2ZSBncm91cExvZ2ljYWxPcGVyYXRvclxyXG4gICAgICAgIGNvbnN0IGdyb3VwV2l0aE9wZXJhdG9yID0ge1xyXG4gICAgICAgICAgLi4uZmlsdGVyR3JvdXAsXHJcbiAgICAgICAgICBncm91cExvZ2ljYWxPcGVyYXRvcjogZmlsdGVyR3JvdXAuZ3JvdXBMb2dpY2FsT3BlcmF0b3IgfHwgJ2FuZCdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHF1ZXJ5UGFyYW1zLmZpbHRlcnMucHVzaChncm91cFdpdGhPcGVyYXRvcik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFVzZSBsaXN0RW5kcG9pbnQgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIGRlZmF1bHRcclxuICAgIGxldCBsaXN0RW5kcG9pbnQgPSB0aGlzLnByb3BzLmxpc3RFbmRwb2ludDtcclxuICAgIGlmICh0eXBlb2YgbGlzdEVuZHBvaW50ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGxpc3RFbmRwb2ludCA9IGxpc3RFbmRwb2ludCh0aGlzLm1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWFyY2hQYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XHJcbiAgICAgICdxdWVyeSc6IFF1ZXJ5UGFyc2VyLnRvU3RyaW5nKHF1ZXJ5UGFyYW1zKVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmFwaS5nZXRMaXN0KHNlYXJjaFBhcmFtcywgbGlzdEVuZHBvaW50KVxyXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnNfID0gcmVzLml0ZW1zID8/IHJlcyA/PyBbXTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdXRvQ29tcD8uc2hvdygpLCAwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnNfID0gW107XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG4gIG9wZW5DcnVkKG1vZGU6ICdhZGQnIHwgJ2VkaXQnIHwgJ2luZm8nKSB7XHJcbiAgICBjb25zdCBwYXlsb2FkID0gbW9kZSA9PT0gJ2FkZCcgPyBudWxsIDogdGhpcy5zZWxlY3RlZEl0ZW07XHJcblxyXG4gICAgLy8gRXhhbXBsZSBpbnRlZ3JhdGlvbjpcclxuICAgIC8vIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ3J1ZENvbXBvbmVudCwge1xyXG4gICAgLy8gICBkYXRhOiB7XHJcbiAgICAvLyAgICAgc2VydmljZU5hbWU6IHRoaXMudG8uc2VydmljZU5hbWUsXHJcbiAgICAvLyAgICAgbW9kZSxcclxuICAgIC8vICAgICByZWNvcmQ6IHBheWxvYWRcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgICAvLyByZWYub25DbG9zZS5zdWJzY3JpYmUoKHVwZGF0ZWQ6IGFueSkgPT4ge1xyXG4gICAgLy8gICBpZiAoIXRoaXMudG8ubXVsdGlwbGUgJiYgdXBkYXRlZD8uW3RoaXMudG8udmFsdWVGaWVsZF0pIHtcclxuICAgIC8vICAgICB0aGlzLmFwaS5nZXQodXBkYXRlZFt0aGlzLnRvLnZhbHVlRmllbGRdKVxyXG4gICAgLy8gICAgICAgLnN1YnNjcmliZShpdGVtID0+IHtcclxuICAgIC8vICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBpdGVtO1xyXG4gICAgLy8gICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGl0ZW0/Llt0aGlzLnRvLnZhbHVlRmllbGRdKTtcclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBnZXRFbXB0eU1lc3NhZ2UoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcclxuICAgICAgcmV0dXJuICdMT0FESU5HX0RBVEFfTUVTU0FHRSc7IC8vINmF2YHYqtin2K0g2KrYsdis2YXYqSDZhNmAIFwi2KzYp9ix2Yog2KrYrdmF2YrZhCDYp9mE2KjZitin2YbYp9iqLi4uXCJcclxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zXy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuICdOT19SRVNVTFRTX0ZPVU5EJzsgLy8g2YXZgdiq2KfYrSDYqtix2KzZhdipINmE2YAgXCLZhNinINiq2YjYrNivINmG2KrYp9im2Kwg2YXYt9in2KjZgtipLlwiXHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7IC8vINmE2Kcg2KrZj9i52LHYtiDYsdiz2KfZhNipINil2LDYpyDZg9in2YbYqiDZh9mG2KfZgyDZhtiq2KfYptisXHJcbiAgfVxyXG5cclxuaXNJdGVtU2VsZWN0ZWQoaXRlbTogYW55KTogYm9vbGVhbiB7XHJcbiAgY29uc3QgdmYgPSB0aGlzLnRvWyd2YWx1ZUZpZWxkJ10gfHwgJ2lkJztcclxuICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdGVkSXRlbSkgJiZcclxuICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uc29tZSgoc2VsOiBhbnkpID0+IHNlbFt2Zl0gPT09IGl0ZW1bdmZdKTtcclxufVxyXG5cclxuXHJcbn1cclxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy1zZWxlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXNlbGVjdG9yL3NyYy9lbGl0ZS5mcmFtZXdvcmstbmcudWkuY29yZS1nZW5lcmljLXNlbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"elite.framework-ng.ui.core-generic-selector.mjs","sources":["../tmp-esm2022/generic-selector/lib/generic-selector-module.js","../tmp-esm2022/generic-selector/lib/generic-selector.component.js","../tmp-esm2022/generic-selector/elite.framework-ng.ui.core-generic-selector.js"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from \"@angular/core\";\nexport class GenericSelectorModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorModule, imports: [CommonModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorModule, imports: [CommonModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1zZWxlY3Rvci1tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWxlY3Rvci9zcmMvbGliL2dlbmVyaWMtc2VsZWN0b3ItbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUsvQyxNQUFNLE9BQU8scUJBQXFCO3VHQUFyQixxQkFBcUI7d0dBQXJCLHFCQUFxQixZQUZ0QixZQUFZO3dHQUVYLHFCQUFxQixZQUZ0QixZQUFZOzsyRkFFWCxxQkFBcUI7a0JBSGpDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY1NlbGVjdG9yTW9kdWxlIHt9XG4iXX0=","import { ChangeDetectorRef, Component, Injector, ViewChild, inject } from '@angular/core';\nimport { FieldType, FormlyAttributes } from '@ngx-formly/core';\nimport { DialogService } from 'primeng/dynamicdialog';\nimport { forkJoin } from 'rxjs';\nimport { finalize, map } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { AutoCompleteModule, AutoComplete } from 'primeng/autocomplete';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { ButtonModule } from 'primeng/button';\nimport { BaseService, QueryParser } from '@elite.framework/ng.core/services';\nimport { GenericDialogComponent } from '@elite.framework/ng.ui.core/generic-dialog';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@elite.framework/ng.core/services\";\nimport * as i2 from \"@angular/forms\";\nimport * as i3 from \"primeng/autocomplete\";\nimport * as i4 from \"primeng/api\";\nimport * as i5 from \"primeng/inputgroup\";\nimport * as i6 from \"primeng/inputgroupaddon\";\nimport * as i7 from \"primeng/button\";\nimport * as i8 from \"@ngx-translate/core\";\nexport class GenericSelectorTypeComponent extends FieldType {\n svc;\n injector;\n cdr;\n autoComp;\n dialog;\n options_ = [];\n selectedItem;\n loading = false;\n _offlineList = [];\n translateService = inject(TranslateService);\n api;\n valueChangeSubscription; // Add a subscription to manage the observable\n get optionLabel() {\n if (this.to.useMultiLang == true) {\n if (this.translateService.currentLang == 'en') {\n return this.to?.labelFieldEn || 'name';\n }\n return this.to?.labelField || 'name';\n }\n return this.to?.labelField || 'name';\n }\n isNullOrEmpty(val) {\n return val === null || val === undefined || val === '';\n }\n getPrimaryLabel(item) {\n const fields = [\n this.optionLabel, // resolved field name from getter\n this.to.labelField || 'name',\n this.to.labelFieldEn || 'name'\n ];\n for (const f of fields) {\n const v = item[f];\n if (!this.isNullOrEmpty(v)) {\n return v;\n }\n }\n return '';\n }\n constructor(svc, injector, cdr) {\n super();\n this.svc = svc;\n this.injector = injector;\n this.cdr = cdr;\n }\n ngOnInit() {\n this.api = this.svc;\n const to = this.props;\n this.api.apiName = to['serviceName'];\n if (to['offline']) {\n if (to['offlineDataFn']) {\n this._offlineList = to['offlineDataFn']();\n this.initOfflineSelection();\n }\n else if (to['offlineItems$']) {\n to['offlineItems$'].subscribe((list) => {\n this._offlineList = list;\n this.initOfflineSelection();\n });\n }\n else {\n this._offlineList = to['offlineItems'] || [];\n this.initOfflineSelection();\n }\n }\n else {\n if (this.props.loadSaved && !this.props.multiple && this.props.loadSavedField && this.props.valueField) {\n const vf = this.to['valueField'] || 'id';\n const lf = this.optionLabel;\n this.selectedItem =\n {\n [vf]: this.formControl.value,\n [lf]: this.model[this.props.loadSavedField],\n };\n if (this.props.change) {\n this.props.change(this.field, { item: this.selectedItem });\n this.cdr.detectChanges();\n }\n }\n else {\n this.initOnlineSelection();\n }\n }\n // Subscribe to formControl value changes\n this.valueChangeSubscription = this.formControl.valueChanges\n .subscribe(() => {\n // This tap operator is a good place to run side effects\n // like calling your change handler after a value changes.\n // this.selectedItem = this.formControl.value;\n if (this.props.change) {\n if (to['offline']) {\n if (to['offlineDataFn']) {\n this._offlineList = to['offlineDataFn']();\n this.initOfflineSelection(false);\n }\n else if (to['offlineItems$']) {\n to['offlineItems$'].subscribe((list) => {\n this._offlineList = list;\n this.initOfflineSelection(false);\n });\n }\n else {\n this._offlineList = to['offlineItems'] || [];\n this.initOfflineSelection(false);\n }\n }\n else {\n this.initOnlineSelection(false);\n }\n }\n });\n }\n // Remember to unsubscribe to prevent memory leaks!\n ngOnDestroy() {\n if (this.valueChangeSubscription) {\n this.valueChangeSubscription.unsubscribe();\n }\n }\n loadDefaultValue() {\n this.loading = true;\n const vf = this.to['valueField'] || 'id';\n const fixedFilters = this.getFixedFilters();\n const lf = this.to['loadDefaultField'] || 'isDefault';\n const lfValue = this.to['loadDefaultValue'] || true;\n const searchParams = {\n [lf]: lfValue,\n ...fixedFilters,\n };\n this.api.getList(searchParams)\n .subscribe({\n next: (res) => {\n // Assuming the API returns a list and you want to select the first one\n if (res && res.items && res.items.length > 0) {\n if (this.to['multiple']) {\n this.formControl.setValue(res.items.map((c) => c[vf]));\n }\n else {\n const defaultValue = res.items[0];\n this.formControl.setValue(defaultValue?.[vf]);\n }\n }\n this.loading = false;\n // this.initOnlineSelection(); // Proceed with online selection after setting the value\n },\n error: (err) => {\n console.error(\"Failed to load default value from API:\", err);\n this.loading = false;\n // this.initOnlineSelection(); // Fallback to local selection if API fails\n }\n });\n }\n // New method to handle loading the default value from the API\n afterSave(event) {\n this.onSelectionChange(event.record);\n if (this.props.afterSave) {\n this.props.afterSave(this.field, { item: event.response });\n this.cdr.detectChanges();\n }\n }\n onSelect(event) {\n if (this.props.onSelect) {\n this.props.onSelect(this.field, { item: event.value });\n this.cdr.detectChanges();\n }\n }\n onSelectionChange(val) {\n const vf = this.to['valueField'] || 'id';\n if (this.to['offline']) {\n // this.selectedItem = val;\n if (this.to['multiple'] && Array.isArray(val)) {\n this.selectedItem = this._offlineList.filter(item => val.includes(item[vf]));\n this.formControl.setValue(Array.isArray(this.selectedItem) ? this.selectedItem.map((c) => c[vf]) : []);\n }\n else {\n this.selectedItem = this._offlineList.find(item => item[vf] === val);\n this.formControl.setValue(this.selectedItem?.[vf] ?? null);\n }\n }\n else {\n this.selectedItem = val;\n if (this.to['multiple']) {\n this.formControl.setValue(Array.isArray(val) ? val.map((c) => c[vf]) : []);\n }\n else {\n this.formControl.setValue(val?.[vf] ?? null);\n }\n }\n }\n initOfflineSelection(withSetValue = true) {\n const val = this.formControl.value;\n const vf = this.to['valueField'] || 'id';\n if (val == null)\n return;\n if (this.to['multiple'] && Array.isArray(val)) {\n this.selectedItem = this._offlineList.filter(item => val.includes(item[vf]));\n }\n else {\n this.selectedItem = this._offlineList.find(item => item[vf] === val);\n }\n if (withSetValue == true) {\n this.formControl.setValue(this.to['multiple']\n ? this.selectedItem.map((c) => c[vf])\n : this.selectedItem?.[vf]);\n }\n else {\n if (this.props.change) {\n this.props.change(this.field, { item: this.selectedItem });\n this.cdr.detectChanges();\n }\n }\n }\n initOnlineSelection(withSetValue = true) {\n const val = this.formControl.value;\n const vf = this.to['valueField'] || 'id';\n if (val == null || (Array.isArray(val) && val.length === 0)) {\n this.selectedItem = this.to['multiple'] ? [] : null;\n if (this.props['loadDefault'] === true) {\n this.loadDefaultValue();\n }\n return;\n }\n if (this.to['multiple'] && Array.isArray(val) && val.length) {\n this.loading = true;\n const fixedFilters = this.getFixedFilters();\n // 🔑 one getList call per id, but include fixedFilters in each\n const calls = val.map((id) => this.api.getList({ ...fixedFilters, [vf]: id }).pipe(map((res) => (res?.items?.length ? res.items[0] : null))));\n forkJoin(calls)\n .pipe(finalize(() => (this.loading = false)))\n .subscribe({\n next: (items) => {\n this.selectedItem = items.filter(i => i != null);\n if (withSetValue) {\n this.formControl.setValue(this.selectedItem.map((c) => c[vf]));\n }\n else if (this.props.change) {\n this.props.change(this.field, { item: this.selectedItem });\n }\n this.cdr.detectChanges();\n },\n error: (err) => {\n console.error('Failed to load multiple selections:', err);\n this.selectedItem = [];\n this.loading = false;\n },\n });\n }\n else {\n this.loading = true;\n const fixedFilters = this.getFixedFilters();\n const searchParams = { ...fixedFilters, [vf]: val };\n this.api\n .getList(searchParams)\n .pipe(finalize(() => (this.loading = false)))\n .subscribe({\n next: (res) => {\n const item = res?.items?.[0] || null;\n this.selectedItem = item;\n if (withSetValue) {\n this.formControl.setValue(item?.[vf]);\n }\n else if (this.props.change) {\n this.props.change(this.field, { item: this.selectedItem });\n }\n this.cdr.detectChanges();\n },\n error: (err) => {\n console.error('Failed to load selection:', err);\n this.selectedItem = null;\n this.loading = false;\n },\n });\n }\n }\n getFixedFilters() {\n const fixedFilters = this.to['fixedFilters'];\n if (typeof fixedFilters === 'function') {\n // Call with current model (and optionally field)\n return fixedFilters(this.model);\n }\n return fixedFilters || {};\n }\n onArrowDown(event) {\n event.preventDefault();\n // this.autoComp.show();\n this.onDropdownButtonClick();\n }\n onEscape(event) {\n this.autoComp.hide();\n }\n onAddNewClick() {\n // your logic for adding a new item\n // e.g. open dialog or emit event\n console.log('Add new item clicked');\n this.dialog.openForm(\"create\");\n }\n onDropdownButtonClick() {\n this.search({ query: '' }); // trigger your own search\n setTimeout(() => this.autoComp.show(), 0); // force dropdown to open\n }\n // Called when dropdown button clicked\n onDropdownClick(event) {\n // 🚫 stop the default dropdown behavior\n event.originalEvent.preventDefault();\n event.originalEvent.stopPropagation();\n console.log('Dropdown clicked!', event);\n // ✅ your custom code here\n // e.g., force trigger search for empty query\n this.search({ query: '' });\n }\n search(event) {\n const q = event.query?.toString() || '';\n const lf = this.optionLabel;\n const fixedFilters = this.getFixedFilters();\n if (this.to['offline']) {\n this.options_ = this.to['offlineDataFn']\n ? this.to['offlineDataFn'](q)\n : this._offlineList.filter(item => item[lf]?.toString().includes(q));\n setTimeout(() => this.autoComp?.show(), 0);\n }\n else {\n this.loading = true;\n this.options_ = [];\n // Build QueryParameters\n const queryParams = {\n filters: [],\n orderBy: [],\n groupBy: [],\n expand: [],\n top: 10,\n skip: 0,\n };\n // Handle main search and fixed filters\n if (!this.to['query']) {\n // Create a group for main search condition\n const mainGroup = {\n logicalOperator: 'and',\n conditions: [\n {\n field: lf,\n operator: 'contains',\n value: q\n }\n ]\n };\n // Add fixed filters to the same group\n Object.keys(fixedFilters || {}).forEach(key => {\n const value = fixedFilters[key];\n if (value !== null && value !== undefined) {\n mainGroup.conditions.push({\n field: key,\n operator: 'eq',\n value: value\n });\n }\n });\n if (mainGroup.conditions.length > 0) {\n queryParams.filters.push(mainGroup);\n }\n }\n else {\n queryParams.skip = this.to['query'].skip ?? 0;\n queryParams.top = this.to['query'].top ?? 10;\n queryParams.orderBy = this.to['query'].orderBy;\n queryParams.groupBy = this.to['query'].groupBy;\n queryParams.expand = this.to['query'].expand;\n }\n // Merge dynamic filters (function or array)\n let dynamicFilters = [];\n if (this.to['query'] && this.to['query']['filters']) {\n const filtersProp = this.to['query']['filters'];\n if (typeof filtersProp === 'function') {\n dynamicFilters = filtersProp(q, this.field); // pass search text\n }\n else if (Array.isArray(filtersProp)) {\n dynamicFilters = filtersProp;\n }\n }\n // Add dynamic filters with proper groupLogicalOperator\n dynamicFilters.forEach((filterGroup, index) => {\n if (index === 0 && queryParams.filters.length === 0) {\n // First filter group, no groupLogicalOperator needed\n queryParams.filters.push(filterGroup);\n }\n else {\n // Subsequent groups, ensure they have groupLogicalOperator\n const groupWithOperator = {\n ...filterGroup,\n groupLogicalOperator: filterGroup.groupLogicalOperator || 'and'\n };\n queryParams.filters.push(groupWithOperator);\n }\n });\n // Use listEndpoint if available, otherwise use default\n let listEndpoint = this.props.listEndpoint;\n if (typeof listEndpoint === 'function') {\n listEndpoint = listEndpoint(this.model);\n }\n const searchParams = {\n 'query': QueryParser.toString(queryParams)\n };\n this.api.getList(searchParams, listEndpoint)\n .pipe(finalize(() => (this.loading = false)))\n .subscribe({\n next: (res) => {\n this.options_ = res.items ?? res ?? [];\n setTimeout(() => this.autoComp?.show(), 0);\n },\n error: () => {\n this.options_ = [];\n },\n });\n }\n }\n openCrud(mode) {\n const payload = mode === 'add' ? null : this.selectedItem;\n // Example integration:\n // const ref = this.dialog.open(CrudComponent, {\n // data: {\n // serviceName: this.to.serviceName,\n // mode,\n // record: payload\n // }\n // });\n // ref.onClose.subscribe((updated: any) => {\n // if (!this.to.multiple && updated?.[this.to.valueField]) {\n // this.api.get(updated[this.to.valueField])\n // .subscribe(item => {\n // this.selectedItem = item;\n // this.formControl.setValue(item?.[this.to.valueField]);\n // });\n // }\n // });\n }\n getEmptyMessage() {\n if (this.loading) {\n return 'LOADING_DATA_MESSAGE'; // مفتاح ترجمة لـ \"جاري تحميل البيانات...\"\n }\n else if (this.options_.length === 0) {\n return 'NO_RESULTS_FOUND'; // مفتاح ترجمة لـ \"لا توجد نتائج مطابقة.\"\n }\n return ''; // لا تُعرض رسالة إذا كانت هناك نتائج\n }\n isItemSelected(item) {\n const vf = this.to['valueField'] || 'id';\n return Array.isArray(this.selectedItem) &&\n this.selectedItem.some((sel) => sel[vf] === item[vf]);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorTypeComponent, deps: [{ token: i1.BaseService }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: GenericSelectorTypeComponent, isStandalone: true, selector: \"formly-generic-selector\", providers: [DialogService, BaseService], viewQueries: [{ propertyName: \"autoComp\", first: true, predicate: [\"autoComp\"], descendants: true }, { propertyName: \"dialog\", first: true, predicate: [\"dialog\"], descendants: true }], usesInheritance: true, ngImport: i0, template: `\r\n <!-- [ngStyle]=\"{'display': props.display ? 'block': 'none'}\" -->\r\n <p-inputGroup class=\"w-full\">\r\n <p-autoComplete\r\n #autoComp\r\n [ngModel]=\"selectedItem\"\r\n (ngModelChange)=\"onSelectionChange($event)\"\r\n [formlyAttributes]=\"field\"\r\n [suggestions]=\"options_\"\r\n (completeMethod)=\"search($event)\"\r\n [multiple]=\"to['multiple']\"\r\n [optionLabel]=\"optionLabel\"\r\n [dropdown]=\"false\"\r\n [forceSelection]=\"true\"\r\n [placeholder]=\"(props['placeholder'] ?? '') | translate\"\r\n [disabled]=\"!!props.disabled\"\r\n dropdownMode=\"current\"\r\n appendTo=\"body\"\r\n class=\"w-full rounded-none\"\r\n [showEmptyMessage]=\"true\"\r\n (onSelect)=\"onSelect($event)\"\r\n emptyMessage=\"{{ getEmptyMessage() | translate }}\"\r\n [showTransitionOptions]=\"'0ms'\"\r\n [showClear]=\"false\"\r\n\r\n (keydown.arrowdown)=\"onArrowDown($event)\"\r\n (keydown.escape)=\"onEscape($event)\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div class=\"flex flex-col\">\r\n <span>{{ getPrimaryLabel(item) }}</span>\r\n\r\n </div>\r\n </ng-template>\r\n </p-autoComplete>\r\n\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled || loading\"\r\n [icon]=\"loading ? 'pi pi-spinner pi-spin' : 'pi pi-chevron-down'\"\r\n (click)=\"onDropdownButtonClick()\"\r\n severity=\"secondary\" />\r\n </p-inputGroupAddon>\r\n <!-- Add new button -->\r\n @if (props.canAdd && props.formFields) {\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled\"\r\n icon=\"pi pi-plus\"\r\n (click)=\"onAddNewClick()\"\r\n severity=\"primary\" />\r\n </p-inputGroupAddon>\r\n }\r\n</p-inputGroup>\r\n\r\n<!-- [model]=\"model\" -->\r\n <app-generic-dialog\r\n #dialog\r\n [formFields]=\"props.formFields ?? []\"\r\n [apiName]=\"props.serviceName\"\r\n [idField]=\"props.idField ??'id'\"\r\n [displayMode]=\"props.dialogDisplayMode ?? 'dialog'\"\r\n (afterSave)=\"afterSave($event)\"\r\n >\r\n </app-generic-dialog>\r\n\r\n\r\n `, isInline: true, dependencies: [{ kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"ngmodule\", type: AutoCompleteModule }, { kind: \"component\", type: i3.AutoComplete, selector: \"p-autoComplete, p-autocomplete, p-auto-complete\", inputs: [\"minLength\", \"minQueryLength\", \"delay\", \"panelStyle\", \"styleClass\", \"panelStyleClass\", \"inputStyle\", \"inputId\", \"inputStyleClass\", \"placeholder\", \"readonly\", \"scrollHeight\", \"lazy\", \"virtualScroll\", \"virtualScrollItemSize\", \"virtualScrollOptions\", \"autoHighlight\", \"forceSelection\", \"type\", \"autoZIndex\", \"baseZIndex\", \"ariaLabel\", \"dropdownAriaLabel\", \"ariaLabelledBy\", \"dropdownIcon\", \"unique\", \"group\", \"completeOnFocus\", \"showClear\", \"dropdown\", \"showEmptyMessage\", \"dropdownMode\", \"multiple\", \"tabindex\", \"dataKey\", \"emptyMessage\", \"showTransitionOptions\", \"hideTransitionOptions\", \"autofocus\", \"autocomplete\", \"optionGroupChildren\", \"optionGroupLabel\", \"overlayOptions\", \"suggestions\", \"optionLabel\", \"optionValue\", \"id\", \"searchMessage\", \"emptySelectionMessage\", \"selectionMessage\", \"autoOptionFocus\", \"selectOnFocus\", \"searchLocale\", \"optionDisabled\", \"focusOnHover\", \"typeahead\", \"appendTo\"], outputs: [\"completeMethod\", \"onSelect\", \"onUnselect\", \"onFocus\", \"onBlur\", \"onDropdownClick\", \"onClear\", \"onKeyUp\", \"onShow\", \"onHide\", \"onLazyLoad\"] }, { kind: \"directive\", type: i4.PrimeTemplate, selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: InputGroupModule }, { kind: \"component\", type: i5.InputGroup, selector: \"p-inputgroup, p-inputGroup, p-input-group\", inputs: [\"styleClass\"] }, { kind: \"ngmodule\", type: InputGroupAddonModule }, { kind: \"component\", type: i6.InputGroupAddon, selector: \"p-inputgroup-addon, p-inputGroupAddon\", inputs: [\"style\", \"styleClass\"] }, { kind: \"directive\", type: FormlyAttributes, selector: \"[formlyAttributes]\", inputs: [\"formlyAttributes\", \"id\"] }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"ngmodule\", type: CheckboxModule }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"component\", type: i7.Button, selector: \"p-button\", inputs: [\"type\", \"iconPos\", \"icon\", \"badge\", \"label\", \"disabled\", \"loading\", \"loadingIcon\", \"raised\", \"rounded\", \"text\", \"plain\", \"severity\", \"outlined\", \"link\", \"tabindex\", \"size\", \"variant\", \"style\", \"styleClass\", \"badgeClass\", \"badgeSeverity\", \"ariaLabel\", \"buttonProps\", \"autofocus\", \"fluid\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\"] }, { kind: \"component\", type: GenericDialogComponent, selector: \"app-generic-dialog\", inputs: [\"form\", \"service\", \"formFields\", \"model\", \"apiName\", \"idField\", \"dialogMaxWidth\", \"displayMode\", \"mode\", \"forceState\", \"drawerVisible\", \"dialogVisible\", \"isViewMode\", \"isEditMode\", \"useConfirmOnSave\", \"loading\", \"errorMsg\", \"errorMessage\", \"beforeSaveTransform\", \"hideTable\", \"autoShowForm\"], outputs: [\"action\", \"afterSave\", \"afterDelete\", \"beforeSave\", \"beforeDelete\", \"formCancel\", \"formInit\", \"dataLoaded\", \"selectionChange\", \"error\", \"visibleChange\"] }, { kind: \"pipe\", type: i8.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorTypeComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'formly-generic-selector',\n template: `\r\n <!-- [ngStyle]=\"{'display': props.display ? 'block': 'none'}\" -->\r\n <p-inputGroup class=\"w-full\">\r\n <p-autoComplete\r\n #autoComp\r\n [ngModel]=\"selectedItem\"\r\n (ngModelChange)=\"onSelectionChange($event)\"\r\n [formlyAttributes]=\"field\"\r\n [suggestions]=\"options_\"\r\n (completeMethod)=\"search($event)\"\r\n [multiple]=\"to['multiple']\"\r\n [optionLabel]=\"optionLabel\"\r\n [dropdown]=\"false\"\r\n [forceSelection]=\"true\"\r\n [placeholder]=\"(props['placeholder'] ?? '') | translate\"\r\n [disabled]=\"!!props.disabled\"\r\n dropdownMode=\"current\"\r\n appendTo=\"body\"\r\n class=\"w-full rounded-none\"\r\n [showEmptyMessage]=\"true\"\r\n (onSelect)=\"onSelect($event)\"\r\n emptyMessage=\"{{ getEmptyMessage() | translate }}\"\r\n [showTransitionOptions]=\"'0ms'\"\r\n [showClear]=\"false\"\r\n\r\n (keydown.arrowdown)=\"onArrowDown($event)\"\r\n (keydown.escape)=\"onEscape($event)\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div class=\"flex flex-col\">\r\n <span>{{ getPrimaryLabel(item) }}</span>\r\n\r\n </div>\r\n </ng-template>\r\n </p-autoComplete>\r\n\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled || loading\"\r\n [icon]=\"loading ? 'pi pi-spinner pi-spin' : 'pi pi-chevron-down'\"\r\n (click)=\"onDropdownButtonClick()\"\r\n severity=\"secondary\" />\r\n </p-inputGroupAddon>\r\n <!-- Add new button -->\r\n @if (props.canAdd && props.formFields) {\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled\"\r\n icon=\"pi pi-plus\"\r\n (click)=\"onAddNewClick()\"\r\n severity=\"primary\" />\r\n </p-inputGroupAddon>\r\n }\r\n</p-inputGroup>\r\n\r\n<!-- [model]=\"model\" -->\r\n <app-generic-dialog\r\n #dialog\r\n [formFields]=\"props.formFields ?? []\"\r\n [apiName]=\"props.serviceName\"\r\n [idField]=\"props.idField ??'id'\"\r\n [displayMode]=\"props.dialogDisplayMode ?? 'dialog'\"\r\n (afterSave)=\"afterSave($event)\"\r\n >\r\n </app-generic-dialog>\r\n\r\n\r\n `,\n providers: [DialogService, BaseService],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n AutoCompleteModule,\n CommonModule,\n InputGroupModule,\n InputGroupAddonModule,\n FormlyAttributes,\n TranslateModule,\n AutoComplete,\n CheckboxModule,\n ButtonModule,\n GenericDialogComponent\n ]\n }]\n }], ctorParameters: () => [{ type: i1.BaseService }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }], propDecorators: { autoComp: [{\n type: ViewChild,\n args: ['autoComp']\n }], dialog: [{\n type: ViewChild,\n args: ['dialog']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWxlY3Rvci9zcmMvbGliL2dlbmVyaWMtc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBcUIsU0FBUyxFQUFFLGdCQUFnQixFQUFtQixNQUFNLGtCQUFrQixDQUFDO0FBQ25HLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQWdDLFdBQVcsRUFBRSxNQUFNLG1D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Ozs7Ozs7Ozs7Ozs7R0FxRVQ7b0JBQ0QsU0FBUyxFQUFFLENBQUMsYUFBYSxFQUFDLFdBQVcsQ0FBQztvQkFDdEMsT0FBTyxFQUFDO3dCQUNOLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixxQkFBcUI7d0JBQ3JCLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsWUFBWTt3QkFDWixzQkFBc0I7cUJBQ3pCO2lCQUNBO3VJQUV3QixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBQ0EsTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRmllbGRUeXBlLCBGb3JtbHlBdHRyaWJ1dGVzLCBGaWVsZFR5cGVDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmluYWxpemUsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQXV0b0NvbXBsZXRlTW9kdWxlLCBBdXRvQ29tcGxldGUgfSBmcm9tICdwcmltZW5nL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IElucHV0R3JvdXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXAnO1xyXG5pbXBvcnQgeyBJbnB1dEdyb3VwQWRkb25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXBhZGRvbic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtbHlGaWVsZFByb3BzIH0gZnJvbSAnQG5neC1mb3JtbHkvcHJpbWVuZy9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgQ2hlY2tib3hNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NoZWNrYm94JztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSwgRmlsdGVyR3JvdXAsIFF1ZXJ5UGFyYW1ldGVycywgUXVlcnlQYXJzZXIgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvc2VydmljZXMnO1xyXG5pbXBvcnQgeyBHZW5lcmljRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy51aS5jb3JlL2dlbmVyaWMtZGlhbG9nJztcclxuXHJcbmludGVyZmFjZSBHZW5lcmljU2VsZWN0b3JQcm9wcyBleHRlbmRzIEZvcm1seUZpZWxkUHJvcHMvKiAsIEZvcm1seUZpZWxkU2VsZWN0UHJvcHMgKi8ge1xyXG4gIC8vIGFwcGVuZFRvPzogU2VsZWN0WydhcHBlbmRUbyddO1xyXG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XHJcbiAgbGlzdEVuZHBvaW50Pzogc3RyaW5nIHwgKChtb2RlbDogYW55KSA9PiBzdHJpbmcpO1xyXG4gIGxvYWREZWZhdWx0RmllbGQ/OiBzdHJpbmc7XHJcbiAgbG9hZERlZmF1bHRWYWx1ZT86IHN0cmluZztcclxuICBsb2FkRGVmYXVsdD86IGJvb2xlYW47XHJcblxyXG4gIGxhYmVsRmllbGQ/OiBzdHJpbmc7XHJcbiAgbGFiZWxGaWVsZEVuPzogc3RyaW5nO1xyXG4gIHZhbHVlRmllbGQ/OiBzdHJpbmc7XHJcbiAgdXNlTXVsdGlMYW5nPzogYm9vbGVhbjtcclxuXHJcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xyXG5cclxuICBkaXNwbGF5PzogYm9vbGVhbjtcclxuICBvZmZsaW5lPzogYm9vbGVhbjtcclxuXHJcbiAgbG9hZFNhdmVkPzogYm9vbGVhbjtcclxuICBsb2FkU2F2ZWRGaWVsZD86IHN0cmluZztcclxuXHJcblxyXG4gIC8qKiBTdGF0aWMgb2ZmbGluZSBpdGVtcyAoYXJyYXkgb2Ygb2JqZWN0cykgKi9cclxuICBvZmZsaW5lSXRlbXM/OiBhbnlbXTtcclxuXHJcbiAgLyoqIEFzeW5jIG9mZmxpbmUgaXRlbXMgKG9ic2VydmFibGUpICovXHJcbiAgb2ZmbGluZUl0ZW1zJD86IE9ic2VydmFibGU8YW55W10+O1xyXG5cclxuICAvKiogRnVuY3Rpb24tYmFzZWQgZmlsdGVyIGZvciBvZmZsaW5lIGl0ZW1zICovXHJcbiAgb25TZWxlY3Q/OiAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnLCBldmVudD86IGFueSkgPT4gdm9pZDtcclxuXHJcbiAgb2ZmbGluZURhdGFGbj86IChxdWVyeT86IHN0cmluZykgPT4gYW55W107XHJcbiAgcXVlcnk/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgUXVlcnlQYXJhbWV0ZXJzO1xyXG4gICBmaXhlZEZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG4gICAgZGVmYXVsdFZhbHVlPzogYW55OyAgICAgICAvLyBpZCDYo9mIIGFycmF5IG9mIGlkc1xyXG4gIGRlZmF1bHRJdGVtPzogYW55OyAgICAgICAgLy8g2KfZhNmD2KfYptmGINmD2KfZhdmEIChvYmplY3QpINil2LDYpyDYudmG2K/ZgyDYrNin2YfYslxyXG5cclxuICB2aWV3UGVybWlzc2lvbk5hbWU/OiBzdHJpbmc7XHJcbiAgZWRpdFBlcm1pc3Npb25OYW1lPzogc3RyaW5nO1xyXG4gIGFkZFBlcm1pc3Npb25OYW1lPzogc3RyaW5nO1xyXG4gIGlkRmllbGQ/OiBzdHJpbmc7XHJcbiAgZGlhbG9nRGlzcGxheU1vZGU/OiAgfCAnZHJhd2VyJ1xyXG4gICAgfCAnZGlhbG9nJ1xyXG4gICAgfCAncm91dGUnXHJcbiAgICB8ICdpbmxpbmUnXHJcbiAgICB8IFBhcnRpYWw8XHJcbiAgICAgIFJlY29yZDxcclxuICAgICAgICAnYWRkJyB8ICdlZGl0JyB8ICd2aWV3JyxcclxuICAgICAgICAnZHJhd2VyJyB8ICdkaWFsb2cnIHwgJ3JvdXRlJyB8ICdpbmxpbmUnXHJcbiAgICAgID4+O1xyXG4gIGNhbkFkZD86IGJvb2xlYW47XHJcbiAgY2FuTG9va3VwPzogYm9vbGVhbjtcclxuICBmb3JtRmllbGRzPzogIEZvcm1seUZpZWxkQ29uZmlnW107XHJcbiAgYWZ0ZXJTYXZlPzogKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZywgZXZlbnQ/OiBhbnkpID0+IHZvaWQ7XHJcblxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Zvcm1seS1nZW5lcmljLXNlbGVjdG9yJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gIDwhLS0gW25nU3R5bGVdPVwieydkaXNwbGF5JzogcHJvcHMuZGlzcGxheSA/ICdibG9jayc6ICdub25lJ31cIiAtLT5cclxuIDxwLWlucHV0R3JvdXAgICBjbGFzcz1cInctZnVsbFwiPlxyXG4gIDxwLWF1dG9Db21wbGV0ZVxyXG4gICAgI2F1dG9Db21wXHJcbiAgICBbbmdNb2RlbF09XCJzZWxlY3RlZEl0ZW1cIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICBbZm9ybWx5QXR0cmlidXRlc109XCJmaWVsZFwiXHJcbiAgICBbc3VnZ2VzdGlvbnNdPVwib3B0aW9uc19cIlxyXG4gICAgKGNvbXBsZXRlTWV0aG9kKT1cInNlYXJjaCgkZXZlbnQpXCJcclxuICAgIFttdWx0aXBsZV09XCJ0b1snbXVsdGlwbGUnXVwiXHJcbiAgICBbb3B0aW9uTGFiZWxdPVwib3B0aW9uTGFiZWxcIlxyXG4gICAgW2Ryb3Bkb3duXT1cImZhbHNlXCJcclxuICAgIFtmb3JjZVNlbGVjdGlvbl09XCJ0cnVlXCJcclxuICAgIFtwbGFjZWhvbGRlcl09XCIocHJvcHNbJ3BsYWNlaG9sZGVyJ10gPz8gJycpIHwgdHJhbnNsYXRlXCJcclxuICAgIFtkaXNhYmxlZF09XCIhIXByb3BzLmRpc2FibGVkXCJcclxuICAgIGRyb3Bkb3duTW9kZT1cImN1cnJlbnRcIlxyXG4gICAgYXBwZW5kVG89XCJib2R5XCJcclxuICAgIGNsYXNzPVwidy1mdWxsIHJvdW5kZWQtbm9uZVwiXHJcbiAgICBbc2hvd0VtcHR5TWVzc2FnZV09XCJ0cnVlXCJcclxuICAgIChvblNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQpXCJcclxuICAgIGVtcHR5TWVzc2FnZT1cInt7IGdldEVtcHR5TWVzc2FnZSgpIHwgdHJhbnNsYXRlIH19XCJcclxuICAgIFtzaG93VHJhbnNpdGlvbk9wdGlvbnNdPVwiJzBtcydcIlxyXG4gICAgW3Nob3dDbGVhcl09XCJmYWxzZVwiXHJcblxyXG4gICAgIChrZXlkb3duLmFycm93ZG93bik9XCJvbkFycm93RG93bigkZXZlbnQpXCJcclxuICAoa2V5ZG93bi5lc2NhcGUpPVwib25Fc2NhcGUoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbSBwVGVtcGxhdGU9XCJpdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIj5cclxuICAgICAgICAgIDxzcGFuPnt7IGdldFByaW1hcnlMYWJlbChpdGVtKSB9fTwvc3Bhbj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLWF1dG9Db21wbGV0ZT5cclxuXHJcbiAgPHAtaW5wdXRHcm91cEFkZG9uPlxyXG4gICAgPHAtYnV0dG9uXHJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiISFwcm9wcy5kaXNhYmxlZCB8fCBsb2FkaW5nXCJcclxuICAgICAgW2ljb25dPVwibG9hZGluZyA/ICdwaSBwaS1zcGlubmVyIHBpLXNwaW4nIDogJ3BpIHBpLWNoZXZyb24tZG93bidcIlxyXG4gICAgICAoY2xpY2spPVwib25Ecm9wZG93bkJ1dHRvbkNsaWNrKClcIlxyXG4gICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiIC8+XHJcbiAgPC9wLWlucHV0R3JvdXBBZGRvbj5cclxuICA8IS0tIEFkZCBuZXcgYnV0dG9uIC0tPlxyXG4gICBAaWYgKHByb3BzLmNhbkFkZCAmJiBwcm9wcy5mb3JtRmllbGRzKSB7XHJcbiAgPHAtaW5wdXRHcm91cEFkZG9uPlxyXG4gICAgPHAtYnV0dG9uXHJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiISFwcm9wcy5kaXNhYmxlZFwiXHJcbiAgICAgIGljb249XCJwaSBwaS1wbHVzXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQWRkTmV3Q2xpY2soKVwiXHJcbiAgICAgIHNldmVyaXR5PVwicHJpbWFyeVwiIC8+XHJcbiAgPC9wLWlucHV0R3JvdXBBZGRvbj5cclxuICAgfVxyXG48L3AtaW5wdXRHcm91cD5cclxuXHJcbjwhLS0gW21vZGVsXT1cIm1vZGVsXCIgLS0+XHJcbiAgPGFwcC1nZW5lcmljLWRpYWxvZ1xyXG4gICAgI2RpYWxvZ1xyXG4gICAgW2Zvcm1GaWVsZHNdPVwicHJvcHMuZm9ybUZpZWxkcyA/PyBbXVwiXHJcbiAgICBbYXBpTmFtZV09XCJwcm9wcy5zZXJ2aWNlTmFtZVwiXHJcbiAgICBbaWRGaWVsZF09XCJwcm9wcy5pZEZpZWxkID8/J2lkJ1wiXHJcbiAgICBbZGlzcGxheU1vZGVdPVwicHJvcHMuZGlhbG9nRGlzcGxheU1vZGUgPz8gJ2RpYWxvZydcIlxyXG4gICAgKGFmdGVyU2F2ZSk9XCJhZnRlclNhdmUoJGV2ZW50KVwiXHJcbiAgPlxyXG4gIDwvYXBwLWdlbmVyaWMtZGlhbG9nPlxyXG5cclxuXHJcbiAgYCxcclxuICBwcm92aWRlcnM6IFtEaWFsb2dTZXJ2aWNlLEJhc2VTZXJ2aWNlXSxcclxuICBpbXBvcnRzOltcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEF1dG9Db21wbGV0ZU1vZHVsZSxcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIElucHV0R3JvdXBNb2R1bGUsXHJcbiAgICBJbnB1dEdyb3VwQWRkb25Nb2R1bGUsXHJcbiAgICBGb3JtbHlBdHRyaWJ1dGVzLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxyXG4gICAgQXV0b0NvbXBsZXRlLFxyXG4gICAgQ2hlY2tib3hNb2R1bGUsXHJcbiAgICBCdXR0b25Nb2R1bGUsXHJcbiAgICBHZW5lcmljRGlhbG9nQ29tcG9uZW50XHJcbl1cclxufSlcclxuZXhwb3J0ICBjbGFzcyBHZW5lcmljU2VsZWN0b3JUeXBlQ29tcG9uZW50IGV4dGVuZHMgRmllbGRUeXBlPEZpZWxkVHlwZUNvbmZpZzxHZW5lcmljU2VsZWN0b3JQcm9wcz4+IGltcGxlbWVudHMgT25Jbml0LE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgnYXV0b0NvbXAnKSBhdXRvQ29tcCE6IEF1dG9Db21wbGV0ZTtcclxuICBAVmlld0NoaWxkKCdkaWFsb2cnKSBkaWFsb2chOiBHZW5lcmljRGlhbG9nQ29tcG9uZW50O1xyXG4gIG9wdGlvbnNfOiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkSXRlbTogYW55O1xyXG5cclxuICBsb2FkaW5nID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfb2ZmbGluZUxpc3Q6IGFueVtdID0gW107XHJcbiAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XHJcblxyXG4gIGFwaTogQmFzZVNlcnZpY2V8YW55O1xyXG4gcHJpdmF0ZSB2YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjsgLy8gQWRkIGEgc3Vic2NyaXB0aW9uIHRvIG1hbmFnZSB0aGUgb2JzZXJ2YWJsZVxyXG5cclxuZ2V0IG9wdGlvbkxhYmVsKCk6IHN0cmluZyB7XHJcbiAgaWYodGhpcy50by51c2VNdWx0aUxhbmcgPT0gdHJ1ZSl7XHJcbiAgICAgaWYodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nID09ICdlbicpe1xyXG4gICAgIHJldHVybiB0aGlzLnRvPy5sYWJlbEZpZWxkRW4gfHwgJ25hbWUnO1xyXG4gICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMudG8/LmxhYmVsRmllbGQgfHwgJ25hbWUnO1xyXG4gIH1cclxuICByZXR1cm4gdGhpcy50bz8ubGFiZWxGaWVsZCB8fCAnbmFtZSc7XHJcbn1cclxuXHJcbnByaXZhdGUgaXNOdWxsT3JFbXB0eSh2YWw6IGFueSk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiB2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSAnJztcclxufVxyXG5cclxuZ2V0UHJpbWFyeUxhYmVsKGl0ZW06IGFueSk6IHN0cmluZyB7XHJcbiAgY29uc3QgZmllbGRzID0gW1xyXG4gICAgdGhpcy5vcHRpb25MYWJlbCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc29sdmVkIGZpZWxkIG5hbWUgZnJvbSBnZXR0ZXJcclxuICAgIHRoaXMudG8ubGFiZWxGaWVsZCB8fCAnbmFtZScsXHJcbiAgICB0aGlzLnRvLmxhYmVsRmllbGRFbiB8fCAnbmFtZSdcclxuICBdO1xyXG5cclxuICBmb3IgKGNvbnN0IGYgb2YgZmllbGRzKSB7XHJcbiAgICBjb25zdCB2ID0gaXRlbVtmXTtcclxuICAgIGlmICghdGhpcy5pc051bGxPckVtcHR5KHYpKSB7XHJcbiAgICAgIHJldHVybiB2O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuICcnO1xyXG59XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN2YzogQmFzZVNlcnZpY2UscHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IscHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICBzdXBlcigpO1xyXG5cclxuICB9XHJcblxyXG4gICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuYXBpID0gdGhpcy5zdmM7XHJcbiAgICBjb25zdCB0byA9IHRoaXMucHJvcHM7XHJcbiAgICB0aGlzLmFwaS5hcGlOYW1lID0gdG9bJ3NlcnZpY2VOYW1lJ107XHJcblxyXG4gICAgaWYgKHRvWydvZmZsaW5lJ10pIHtcclxuICAgICAgaWYgKHRvWydvZmZsaW5lRGF0YUZuJ10pIHtcclxuICAgICAgICB0aGlzLl9vZmZsaW5lTGlzdCA9IHRvWydvZmZsaW5lRGF0YUZuJ10oKTtcclxuICAgICAgICB0aGlzLmluaXRPZmZsaW5lU2VsZWN0aW9uKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodG9bJ29mZmxpbmVJdGVtcyQnXSkge1xyXG4gICAgICAgIHRvWydvZmZsaW5lSXRlbXMkJ10uc3Vic2NyaWJlKChsaXN0OiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fb2ZmbGluZUxpc3QgPSBsaXN0O1xyXG4gICAgICAgICAgdGhpcy5pbml0T2ZmbGluZVNlbGVjdGlvbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX29mZmxpbmVMaXN0ID0gdG9bJ29mZmxpbmVJdGVtcyddIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuaW5pdE9mZmxpbmVTZWxlY3Rpb24oKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICBpZiAodGhpcy5wcm9wcy5sb2FkU2F2ZWQgJiYgIXRoaXMucHJvcHMubXVsdGlwbGUgJiYgdGhpcy5wcm9wcy5sb2FkU2F2ZWRGaWVsZCAmJiB0aGlzLnByb3BzLnZhbHVlRmllbGQpIHtcclxuICAgICAgICAgIGNvbnN0IHZmID0gdGhpcy50b1sndmFsdWVGaWVsZCddIHx8ICdpZCc7XHJcbiAgICAgICAgICBjb25zdCBsZiA9IHRoaXMub3B0aW9uTGFiZWw7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9XHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFt2Zl06dGhpcy5mb3JtQ29udHJvbC52YWx1ZSxcclxuICAgICAgICAgICAgW2xmXTp0aGlzLm1vZGVsW3RoaXMucHJvcHMubG9hZFNhdmVkRmllbGRdLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGlmICh0aGlzLnByb3BzLmNoYW5nZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoYW5nZSh0aGlzLmZpZWxkLCB7IGl0ZW06IHRoaXMuc2VsZWN0ZWRJdGVtIH0pO1xyXG4gICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgfVxyXG4gICAgICAgZWxzZXtcclxuXHJcbiAgICAgICAgIHRoaXMuaW5pdE9ubGluZVNlbGVjdGlvbigpO1xyXG4gICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFN1YnNjcmliZSB0byBmb3JtQ29udHJvbCB2YWx1ZSBjaGFuZ2VzXHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAvLyBUaGlzIHRhcCBvcGVyYXRvciBpcyBhIGdvb2QgcGxhY2UgdG8gcnVuIHNpZGUgZWZmZWN0c1xyXG4gICAgICAgICAgLy8gbGlrZSBjYWxsaW5nIHlvdXIgY2hhbmdlIGhhbmRsZXIgYWZ0ZXIgYSB2YWx1ZSBjaGFuZ2VzLlxyXG4gICAgICAgICAgLy8gdGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMuY2hhbmdlKSB7XHJcbiAgICAgICAgICBpZiAodG9bJ29mZmxpbmUnXSkge1xyXG4gICAgICBpZiAodG9bJ29mZmxpbmVEYXRhRm4nXSkge1xyXG4gICAgICAgIHRoaXMuX29mZmxpbmVMaXN0ID0gdG9bJ29mZmxpbmVEYXRhRm4nXSgpO1xyXG4gICAgICAgIHRoaXMuaW5pdE9mZmxpbmVTZWxlY3Rpb24oZmFsc2UpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRvWydvZmZsaW5lSXRlbXMkJ10pIHtcclxuICAgICAgICB0b1snb2ZmbGluZUl0ZW1zJCddLnN1YnNjcmliZSgobGlzdDogYW55W10pID0+IHtcclxuICAgICAgICAgIHRoaXMuX29mZmxpbmVMaXN0ID0gbGlzdDtcclxuICAgICAgICAgIHRoaXMuaW5pdE9mZmxpbmVTZWxlY3Rpb24oZmFsc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX29mZmxpbmVMaXN0ID0gdG9bJ29mZmxpbmVJdGVtcyddIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuaW5pdE9mZmxpbmVTZWxlY3Rpb24oZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmluaXRPbmxpbmVTZWxlY3Rpb24oZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuICAgICAgICB9KVxyXG4gICAgICA7XHJcbiAgfVxyXG5cclxuICAvLyBSZW1lbWJlciB0byB1bnN1YnNjcmliZSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyFcclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLnZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcbnByaXZhdGUgbG9hZERlZmF1bHRWYWx1ZSgpIHtcclxuICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgdmYgPSB0aGlzLnRvWyd2YWx1ZUZpZWxkJ10gfHwgJ2lkJztcclxuICAgIGNvbnN0IGZpeGVkRmlsdGVycyA9IHRoaXMuZ2V0Rml4ZWRGaWx0ZXJzKCk7XHJcbiAgICAgY29uc3QgbGYgPSB0aGlzLnRvWydsb2FkRGVmYXVsdEZpZWxkJ10gfHwgJ2lzRGVmYXVsdCc7XHJcbiAgICAgY29uc3QgbGZWYWx1ZSA9IHRoaXMudG9bJ2xvYWREZWZhdWx0VmFsdWUnXSB8fCB0cnVlO1xyXG5jb25zdCBzZWFyY2hQYXJhbXMgPSB7XHJcbiAgICAgW2xmXTogbGZWYWx1ZSxcclxuICAgICAgLi4uZml4ZWRGaWx0ZXJzLFxyXG4gICAgfTtcclxuICB0aGlzLmFwaS5nZXRMaXN0KHNlYXJjaFBhcmFtcylcclxuICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBBc3N1bWluZyB0aGUgQVBJIHJldHVybnMgYSBsaXN0IGFuZCB5b3Ugd2FudCB0byBzZWxlY3QgdGhlIGZpcnN0IG9uZVxyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLml0ZW1zICYmIHJlcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy50b1snbXVsdGlwbGUnXSl7XHJcbiAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShyZXMuaXRlbXMubWFwKChjOiBhbnkpID0+IGNbdmZdKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gcmVzLml0ZW1zWzBdO1xyXG4gICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShkZWZhdWx0VmFsdWU/Llt2Zl0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAvLyB0aGlzLmluaXRPbmxpbmVTZWxlY3Rpb24oKTsgLy8gUHJvY2VlZCB3aXRoIG9ubGluZSBzZWxlY3Rpb24gYWZ0ZXIgc2V0dGluZyB0aGUgdmFsdWVcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gbG9hZCBkZWZhdWx0IHZhbHVlIGZyb20gQVBJOlwiLCBlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIC8vIHRoaXMuaW5pdE9ubGluZVNlbGVjdGlvbigpOyAvLyBGYWxsYmFjayB0byBsb2NhbCBzZWxlY3Rpb24gaWYgQVBJIGZhaWxzXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbiAgICAvLyBOZXcgbWV0aG9kIHRvIGhhbmRsZSBsb2FkaW5nIHRoZSBkZWZhdWx0IHZhbHVlIGZyb20gdGhlIEFQSVxyXG5cclxuICAgIGFmdGVyU2F2ZShldmVudDogYW55KSB7XHJcbiAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQucmVjb3JkKTtcclxuICAgaWYgKHRoaXMucHJvcHMuYWZ0ZXJTYXZlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuYWZ0ZXJTYXZlKHRoaXMuZmllbGQsIHsgaXRlbTogZXZlbnQucmVzcG9uc2UgfSk7XHJcbiAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbn1cclxuXHJcbiAgICBvblNlbGVjdChldmVudDogYW55KSB7XHJcblxyXG4gICBpZiAodGhpcy5wcm9wcy5vblNlbGVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uU2VsZWN0KHRoaXMuZmllbGQsIHsgaXRlbTogZXZlbnQudmFsdWUgfSk7XHJcbiAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbn1cclxuXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2UodmFsOiBhbnkpIHtcclxuICAgICBjb25zdCB2ZiA9IHRoaXMudG9bJ3ZhbHVlRmllbGQnXSB8fCAnaWQnO1xyXG4gICAgaWYodGhpcy50b1snb2ZmbGluZSddKXtcclxuICAgICAgICAvLyB0aGlzLnNlbGVjdGVkSXRlbSA9IHZhbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudG9bJ211bHRpcGxlJ10gJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gdGhpcy5fb2ZmbGluZUxpc3QuZmlsdGVyKGl0ZW0gPT5cclxuICAgICAgICB2YWwuaW5jbHVkZXMoaXRlbVt2Zl0pXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoXHJcbiAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RlZEl0ZW0pID8gdGhpcy5zZWxlY3RlZEl0ZW0ubWFwKChjOiBhbnkpID0+IGNbdmZdKSA6IFtdXHJcbiAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLl9vZmZsaW5lTGlzdC5maW5kKGl0ZW0gPT4gaXRlbVt2Zl0gPT09IHZhbCk7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5zZWxlY3RlZEl0ZW0/Llt2Zl0gPz8gbnVsbCk7XHJcbiAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gdmFsO1xyXG5cclxuICBpZiAodGhpcy50b1snbXVsdGlwbGUnXSkge1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShcclxuICAgICAgQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsLm1hcCgoYzogYW55KSA9PiBjW3ZmXSkgOiBbXVxyXG4gICAgKTtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWw/Llt2Zl0gPz8gbnVsbCk7XHJcbiAgfVxyXG4gICAgfVxyXG5cclxufVxyXG4gIHByaXZhdGUgaW5pdE9mZmxpbmVTZWxlY3Rpb24od2l0aFNldFZhbHVlPXRydWUpIHtcclxuICAgIGNvbnN0IHZhbCA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICBjb25zdCB2ZiA9IHRoaXMudG9bJ3ZhbHVlRmllbGQnXSB8fCAnaWQnO1xyXG5cclxuICAgIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmICh0aGlzLnRvWydtdWx0aXBsZSddICYmIEFycmF5LmlzQXJyYXkodmFsKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuX29mZmxpbmVMaXN0LmZpbHRlcihpdGVtID0+XHJcbiAgICAgICAgdmFsLmluY2x1ZGVzKGl0ZW1bdmZdKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLl9vZmZsaW5lTGlzdC5maW5kKGl0ZW0gPT4gaXRlbVt2Zl0gPT09IHZhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYod2l0aFNldFZhbHVlID09IHRydWUpe1xyXG5cclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoXHJcbiAgICAgIHRoaXMudG9bJ211bHRpcGxlJ11cclxuICAgICAgICA/IHRoaXMuc2VsZWN0ZWRJdGVtLm1hcCgoYzogYW55KSA9PiBjW3ZmXSlcclxuICAgICAgICA6IHRoaXMuc2VsZWN0ZWRJdGVtPy5bdmZdXHJcbiAgICApO1xyXG4gIH1cclxuICBlbHNle1xyXG4gICAgaWYgKHRoaXMucHJvcHMuY2hhbmdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hhbmdlKHRoaXMuZmllbGQsIHsgaXRlbTogdGhpcy5zZWxlY3RlZEl0ZW0gfSk7XHJcbiAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0T25saW5lU2VsZWN0aW9uKHdpdGhTZXRWYWx1ZSA9IHRydWUpIHtcclxuICBjb25zdCB2YWwgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xyXG4gIGNvbnN0IHZmID0gdGhpcy50b1sndmFsdWVGaWVsZCddIHx8ICdpZCc7XHJcblxyXG4gIGlmICh2YWwgPT0gbnVsbCB8fCAoQXJyYXkuaXNBcnJheSh2YWwpICYmIHZhbC5sZW5ndGggPT09IDApKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMudG9bJ211bHRpcGxlJ10gPyBbXSA6IG51bGw7XHJcblxyXG4gICAgaWYgKHRoaXMucHJvcHNbJ2xvYWREZWZhdWx0J10gPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5sb2FkRGVmYXVsdFZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy50b1snbXVsdGlwbGUnXSAmJiBBcnJheS5pc0FycmF5KHZhbCkgJiYgdmFsLmxlbmd0aCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBmaXhlZEZpbHRlcnMgPSB0aGlzLmdldEZpeGVkRmlsdGVycygpO1xyXG5cclxuICAgIC8vIPCflJEgb25lIGdldExpc3QgY2FsbCBwZXIgaWQsIGJ1dCBpbmNsdWRlIGZpeGVkRmlsdGVycyBpbiBlYWNoXHJcbiAgICBjb25zdCBjYWxscyA9IHZhbC5tYXAoKGlkOiBhbnkpID0+XHJcbiAgICAgIHRoaXMuYXBpLmdldExpc3QoeyAuLi5maXhlZEZpbHRlcnMsIFt2Zl06IGlkIH0pLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4gKHJlcz8uaXRlbXM/Lmxlbmd0aCA/IHJlcy5pdGVtc1swXSA6IG51bGwpKVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGZvcmtKb2luKGNhbGxzKVxyXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBpdGVtcy5maWx0ZXIoaSA9PiBpICE9IG51bGwpO1xyXG5cclxuICAgICAgICAgIGlmICh3aXRoU2V0VmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkSXRlbS5tYXAoKGM6IGFueSkgPT4gY1t2Zl0pKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5jaGFuZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGFuZ2UodGhpcy5maWVsZCwgeyBpdGVtOiB0aGlzLnNlbGVjdGVkSXRlbSB9KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBtdWx0aXBsZSBzZWxlY3Rpb25zOicsIGVycik7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgZml4ZWRGaWx0ZXJzID0gdGhpcy5nZXRGaXhlZEZpbHRlcnMoKTtcclxuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHsgLi4uZml4ZWRGaWx0ZXJzLCBbdmZdOiB2YWwgfTtcclxuXHJcbiAgICB0aGlzLmFwaVxyXG4gICAgICAuZ2V0TGlzdChzZWFyY2hQYXJhbXMpXHJcbiAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSByZXM/Lml0ZW1zPy5bMF0gfHwgbnVsbDtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTtcclxuXHJcbiAgICAgICAgICBpZiAod2l0aFNldFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoaXRlbT8uW3ZmXSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuY2hhbmdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hhbmdlKHRoaXMuZmllbGQsIHsgaXRlbTogdGhpcy5zZWxlY3RlZEl0ZW0gfSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgc2VsZWN0aW9uOicsIGVycik7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5nZXRGaXhlZEZpbHRlcnMoKTogYW55IHtcclxuICBjb25zdCBmaXhlZEZpbHRlcnMgPSB0aGlzLnRvWydmaXhlZEZpbHRlcnMnXTtcclxuXHJcbiAgaWYgKHR5cGVvZiBmaXhlZEZpbHRlcnMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIC8vIENhbGwgd2l0aCBjdXJyZW50IG1vZGVsIChhbmQgb3B0aW9uYWxseSBmaWVsZClcclxuICAgIHJldHVybiBmaXhlZEZpbHRlcnModGhpcy5tb2RlbCk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZml4ZWRGaWx0ZXJzIHx8IHt9O1xyXG59XHJcblxyXG5vbkFycm93RG93bihldmVudDogYW55KSB7XHJcbiBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy8gdGhpcy5hdXRvQ29tcC5zaG93KCk7XHJcbnRoaXMub25Ecm9wZG93bkJ1dHRvbkNsaWNrKCk7XHJcbn1cclxuXHJcbm9uRXNjYXBlKGV2ZW50OiBhbnkpIHtcclxuICB0aGlzLmF1dG9Db21wLmhpZGUoKTtcclxuXHJcbn1cclxub25BZGROZXdDbGljaygpIHtcclxuICAvLyB5b3VyIGxvZ2ljIGZvciBhZGRpbmcgYSBuZXcgaXRlbVxyXG4gIC8vIGUuZy4gb3BlbiBkaWFsb2cgb3IgZW1pdCBldmVudFxyXG4gIGNvbnNvbGUubG9nKCdBZGQgbmV3IGl0ZW0gY2xpY2tlZCcpO1xyXG4gIHRoaXMuZGlhbG9nLm9wZW5Gb3JtKFwiY3JlYXRlXCIpO1xyXG59XHJcbm9uRHJvcGRvd25CdXR0b25DbGljaygpIHtcclxuICB0aGlzLnNlYXJjaCh7IHF1ZXJ5OiAnJyB9KTsgICAvLyB0cmlnZ2VyIHlvdXIgb3duIHNlYXJjaFxyXG4gIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdXRvQ29tcC5zaG93KCksIDApOyAvLyBmb3JjZSBkcm9wZG93biB0byBvcGVuXHJcbn1cclxuLy8gQ2FsbGVkIHdoZW4gZHJvcGRvd24gYnV0dG9uIGNsaWNrZWRcclxuICBvbkRyb3Bkb3duQ2xpY2soZXZlbnQ6IGFueSkge1xyXG4gICAgLy8g8J+aqyBzdG9wIHRoZSBkZWZhdWx0IGRyb3Bkb3duIGJlaGF2aW9yXHJcbiAgZXZlbnQub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIGV2ZW50Lm9yaWdpbmFsRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgY29uc29sZS5sb2coJ0Ryb3Bkb3duIGNsaWNrZWQhJywgZXZlbnQpO1xyXG4gICAgLy8g4pyFIHlvdXIgY3VzdG9tIGNvZGUgaGVyZVxyXG4gICAgLy8gZS5nLiwgZm9yY2UgdHJpZ2dlciBzZWFyY2ggZm9yIGVtcHR5IHF1ZXJ5XHJcbiAgICB0aGlzLnNlYXJjaCh7IHF1ZXJ5OiAnJyB9KTtcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5zZWFyY2goZXZlbnQ6IHsgcXVlcnk6IHN0cmluZyB9KSB7XHJcbiAgY29uc3QgcSA9IGV2ZW50LnF1ZXJ5Py50b1N0cmluZygpIHx8ICcnO1xyXG4gIGNvbnN0IGxmID0gdGhpcy5vcHRpb25MYWJlbDtcclxuICBjb25zdCBmaXhlZEZpbHRlcnMgPSB0aGlzLmdldEZpeGVkRmlsdGVycygpO1xyXG5cclxuICBpZiAodGhpcy50b1snb2ZmbGluZSddKSB7XHJcbiAgICB0aGlzLm9wdGlvbnNfID0gdGhpcy50b1snb2ZmbGluZURhdGFGbiddXHJcbiAgICAgID8gdGhpcy50b1snb2ZmbGluZURhdGFGbiddKHEpXHJcbiAgICAgIDogdGhpcy5fb2ZmbGluZUxpc3QuZmlsdGVyKGl0ZW0gPT5cclxuICAgICAgICAgIGl0ZW1bbGZdPy50b1N0cmluZygpLmluY2x1ZGVzKHEpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXV0b0NvbXA/LnNob3coKSwgMCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm9wdGlvbnNfID0gW107XHJcblxyXG4gICAgLy8gQnVpbGQgUXVlcnlQYXJhbWV0ZXJzXHJcbiAgICBjb25zdCBxdWVyeVBhcmFtczogUXVlcnlQYXJhbWV0ZXJzID0ge1xyXG4gICAgICBmaWx0ZXJzOiBbXSxcclxuICAgICAgb3JkZXJCeTogW10sXHJcbiAgICAgIGdyb3VwQnk6IFtdLFxyXG4gICAgICBleHBhbmQ6W10sXHJcbiAgICAgIHRvcDogMTAsXHJcbiAgICAgIHNraXA6IDAsXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEhhbmRsZSBtYWluIHNlYXJjaCBhbmQgZml4ZWQgZmlsdGVyc1xyXG4gICAgaWYgKCF0aGlzLnRvWydxdWVyeSddKSB7XHJcbiAgICAgIC8vIENyZWF0ZSBhIGdyb3VwIGZvciBtYWluIHNlYXJjaCBjb25kaXRpb25cclxuICAgICAgY29uc3QgbWFpbkdyb3VwOiBGaWx0ZXJHcm91cCA9IHtcclxuICAgICAgICBsb2dpY2FsT3BlcmF0b3I6ICdhbmQnLFxyXG4gICAgICAgIGNvbmRpdGlvbnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6IGxmLFxyXG4gICAgICAgICAgICBvcGVyYXRvcjogJ2NvbnRhaW5zJyxcclxuICAgICAgICAgICAgdmFsdWU6IHFcclxuICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBBZGQgZml4ZWQgZmlsdGVycyB0byB0aGUgc2FtZSBncm91cFxyXG4gICAgICBPYmplY3Qua2V5cyhmaXhlZEZpbHRlcnMgfHwge30pLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGZpeGVkRmlsdGVyc1trZXldO1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBtYWluR3JvdXAuY29uZGl0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgZmllbGQ6IGtleSxcclxuICAgICAgICAgICAgb3BlcmF0b3I6ICdlcScsXHJcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChtYWluR3JvdXAuY29uZGl0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcXVlcnlQYXJhbXMuZmlsdGVycy5wdXNoKG1haW5Hcm91cCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2V7XHJcblxyXG4gICAgICBxdWVyeVBhcmFtcy5za2lwID0gdGhpcy50b1sncXVlcnknXS5za2lwID8/IDA7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zLnRvcCA9IHRoaXMudG9bJ3F1ZXJ5J10udG9wID8/IDEwO1xyXG4gICAgICBxdWVyeVBhcmFtcy5vcmRlckJ5ID0gdGhpcy50b1sncXVlcnknXS5vcmRlckJ5O1xyXG4gICAgICBxdWVyeVBhcmFtcy5ncm91cEJ5ID0gdGhpcy50b1sncXVlcnknXS5ncm91cEJ5O1xyXG4gICAgICBxdWVyeVBhcmFtcy5leHBhbmQgPSB0aGlzLnRvWydxdWVyeSddLmV4cGFuZDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWVyZ2UgZHluYW1pYyBmaWx0ZXJzIChmdW5jdGlvbiBvciBhcnJheSlcclxuICAgIGxldCBkeW5hbWljRmlsdGVyczogRmlsdGVyR3JvdXBbXSB8IGFueVtdID0gW107XHJcbiAgICBpZih0aGlzLnRvWydxdWVyeSddICYmIHRoaXMudG9bJ3F1ZXJ5J11bJ2ZpbHRlcnMnXSl7XHJcblxyXG4gICAgY29uc3QgZmlsdGVyc1Byb3AgPSB0aGlzLnRvWydxdWVyeSddWydmaWx0ZXJzJ107XHJcbiAgICBpZiAodHlwZW9mIGZpbHRlcnNQcm9wID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGR5bmFtaWNGaWx0ZXJzID0gZmlsdGVyc1Byb3AocSx0aGlzLmZpZWxkKTsgLy8gcGFzcyBzZWFyY2ggdGV4dFxyXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcnNQcm9wKSkge1xyXG4gICAgICBkeW5hbWljRmlsdGVycyA9IGZpbHRlcnNQcm9wO1xyXG4gICAgfVxyXG4gIH1cclxuICAgIC8vIEFkZCBkeW5hbWljIGZpbHRlcnMgd2l0aCBwcm9wZXIgZ3JvdXBMb2dpY2FsT3BlcmF0b3JcclxuICAgIGR5bmFtaWNGaWx0ZXJzLmZvckVhY2goKGZpbHRlckdyb3VwLCBpbmRleCkgPT4ge1xyXG4gICAgICBpZiAoaW5kZXggPT09IDAgJiYgcXVlcnlQYXJhbXMuZmlsdGVycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAvLyBGaXJzdCBmaWx0ZXIgZ3JvdXAsIG5vIGdyb3VwTG9naWNhbE9wZXJhdG9yIG5lZWRlZFxyXG4gICAgICAgIHF1ZXJ5UGFyYW1zLmZpbHRlcnMucHVzaChmaWx0ZXJHcm91cCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gU3Vic2VxdWVudCBncm91cHMsIGVuc3VyZSB0aGV5IGhhdmUgZ3JvdXBMb2dpY2FsT3BlcmF0b3JcclxuICAgICAgICBjb25zdCBncm91cFdpdGhPcGVyYXRvciA9IHtcclxuICAgICAgICAgIC4uLmZpbHRlckdyb3VwLFxyXG4gICAgICAgICAgZ3JvdXBMb2dpY2FsT3BlcmF0b3I6IGZpbHRlckdyb3VwLmdyb3VwTG9naWNhbE9wZXJhdG9yIHx8ICdhbmQnXHJcbiAgICAgICAgfTtcclxuICAgICAgICBxdWVyeVBhcmFtcy5maWx0ZXJzLnB1c2goZ3JvdXBXaXRoT3BlcmF0b3IpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBVc2UgbGlzdEVuZHBvaW50IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBkZWZhdWx0XHJcbiAgICBsZXQgbGlzdEVuZHBvaW50ID0gdGhpcy5wcm9wcy5saXN0RW5kcG9pbnQ7XHJcbiAgICBpZiAodHlwZW9mIGxpc3RFbmRwb2ludCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBsaXN0RW5kcG9pbnQgPSBsaXN0RW5kcG9pbnQodGhpcy5tb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xyXG4gICAgICAncXVlcnknOiBRdWVyeVBhcnNlci50b1N0cmluZyhxdWVyeVBhcmFtcylcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5hcGkuZ2V0TGlzdChzZWFyY2hQYXJhbXMsIGxpc3RFbmRwb2ludClcclxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zXyA9IHJlcy5pdGVtcyA/PyByZXMgPz8gW107XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXV0b0NvbXA/LnNob3coKSwgMCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zXyA9IFtdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuICBvcGVuQ3J1ZChtb2RlOiAnYWRkJyB8ICdlZGl0JyB8ICdpbmZvJykge1xyXG4gICAgY29uc3QgcGF5bG9hZCA9IG1vZGUgPT09ICdhZGQnID8gbnVsbCA6IHRoaXMuc2VsZWN0ZWRJdGVtO1xyXG5cclxuICAgIC8vIEV4YW1wbGUgaW50ZWdyYXRpb246XHJcbiAgICAvLyBjb25zdCByZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENydWRDb21wb25lbnQsIHtcclxuICAgIC8vICAgZGF0YToge1xyXG4gICAgLy8gICAgIHNlcnZpY2VOYW1lOiB0aGlzLnRvLnNlcnZpY2VOYW1lLFxyXG4gICAgLy8gICAgIG1vZGUsXHJcbiAgICAvLyAgICAgcmVjb3JkOiBwYXlsb2FkXHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pO1xyXG4gICAgLy8gcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh1cGRhdGVkOiBhbnkpID0+IHtcclxuICAgIC8vICAgaWYgKCF0aGlzLnRvLm11bHRpcGxlICYmIHVwZGF0ZWQ/Llt0aGlzLnRvLnZhbHVlRmllbGRdKSB7XHJcbiAgICAvLyAgICAgdGhpcy5hcGkuZ2V0KHVwZGF0ZWRbdGhpcy50by52YWx1ZUZpZWxkXSlcclxuICAgIC8vICAgICAgIC5zdWJzY3JpYmUoaXRlbSA9PiB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTtcclxuICAgIC8vICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShpdGVtPy5bdGhpcy50by52YWx1ZUZpZWxkXSk7XHJcbiAgICAvLyAgICAgICB9KTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0RW1wdHlNZXNzYWdlKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5sb2FkaW5nKSB7XHJcbiAgICAgIHJldHVybiAnTE9BRElOR19EQVRBX01FU1NBR0UnOyAvLyDZhdmB2KrYp9itINiq2LHYrNmF2Kkg2YTZgCBcItis2KfYsdmKINiq2K3ZhdmK2YQg2KfZhNio2YrYp9mG2KfYqi4uLlwiXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9uc18ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiAnTk9fUkVTVUxUU19GT1VORCc7IC8vINmF2YHYqtin2K0g2KrYsdis2YXYqSDZhNmAIFwi2YTYpyDYqtmI2KzYryDZhtiq2KfYptisINmF2LfYp9io2YLYqS5cIlxyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnOyAvLyDZhNinINiq2Y/Yudix2LYg2LHYs9in2YTYqSDYpdiw2Kcg2YPYp9mG2Kog2YfZhtin2YMg2YbYqtin2KbYrFxyXG4gIH1cclxuXHJcbmlzSXRlbVNlbGVjdGVkKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IHZmID0gdGhpcy50b1sndmFsdWVGaWVsZCddIHx8ICdpZCc7XHJcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RlZEl0ZW0pICYmXHJcbiAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLnNvbWUoKHNlbDogYW55KSA9PiBzZWxbdmZdID09PSBpdGVtW3ZmXSk7XHJcbn1cclxuXHJcblxyXG59XHJcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy1zZWxlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXNlbGVjdG9yL3NyYy9lbGl0ZS5mcmFtZXdvcmstbmcudWkuY29yZS1nZW5lcmljLXNlbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
@@ -222,6 +222,13 @@ class GenericTable {
222
222
  // ].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
223
223
  // }
224
224
  get sortedActions() {
225
+ return this.actions
226
+ .filter(action => (action.visible !== false) && // ✅ يخفي أي زر `visible = false`
227
+ (!action.permissions?.length ||
228
+ action.permissions.every(p => this.permissionsService.isGranted(p))))
229
+ .sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
230
+ }
231
+ get sortedActions2() {
225
232
  return this.actions
226
233
  .filter(action => !action.permissions?.length || // no permissions → allow
227
234
  action.permissions.every(p => this.permissionsService.isGranted(p)) // all granted
@@ -1 +1 @@
1
- {"version":3,"file":"elite.framework-ng.ui.core-generic-table.mjs","sources":["../tmp-esm2022/generic-table/lib/generic-table-module.js","../tmp-esm2022/generic-table/lib/action-menu.component.js","../tmp-esm2022/generic-table/lib/generic-table.js","../tmp-esm2022/generic-table/elite.framework-ng.ui.core-generic-table.js"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from \"@angular/core\";\nexport class GenericTableModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericTableModule, imports: [CommonModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericTableModule, imports: [CommonModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericTableModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy10YWJsZS1tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy10YWJsZS9zcmMvbGliL2dlbmVyaWMtdGFibGUtbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUsvQyxNQUFNLE9BQU8sa0JBQWtCO3VHQUFsQixrQkFBa0I7d0dBQWxCLGtCQUFrQixZQUZuQixZQUFZO3dHQUVYLGtCQUFrQixZQUZuQixZQUFZOzsyRkFFWCxrQkFBa0I7a0JBSDlCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY1RhYmxlTW9kdWxlIHt9XG4iXX0=","import { CommonModule } from '@angular/common';\nimport { Component, Input, ViewChildren, QueryList } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { OverlayModule } from 'primeng/overlay';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"primeng/overlay\";\nexport class ActionMenuComponent {\n items = [];\n open = false;\n menuItems;\n menuPositionClass = 'right-0';\n toggle() {\n this.open = !this.open;\n // Optional: adjust position when opening\n // if (this.open) setTimeout(() => this.adjustMenuPosition());\n }\n adjustMenuPosition() {\n const menu = document.querySelector('.absolute.mt-2');\n if (!menu)\n return;\n const rect = menu.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n this.menuPositionClass = rect.right > viewportWidth ? 'left-0' : 'right-0';\n }\n onClick(item, event) {\n this.open = false;\n if (item.command) {\n item.command({ originalEvent: event, item });\n }\n }\n onOutsideClick(event) {\n const target = event.target;\n if (!target.closest('.inline-block')) {\n this.open = false;\n }\n }\n // ========================\n // Focus & Keyboard navigation\n // ========================\n focusFirst() {\n // Delay needed because overlay content is rendered asynchronously\n setTimeout(() => {\n this.menuItems.first?.nativeElement.focus();\n });\n }\n // -------------------\n // Keyboard on menu container\n // -------------------\n onMenuKeydown(event) {\n // Convert QueryList to array of HTMLButtonElement\n const items = this.menuItems.toArray().map(i => i.nativeElement);\n let index = items.indexOf(document.activeElement);\n if (index === -1)\n return;\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n index = (index + 1) % items.length;\n items[index].focus();\n break;\n case 'ArrowUp':\n event.preventDefault();\n index = (index - 1 + items.length) % items.length;\n items[index].focus();\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n items[index].click();\n break;\n case 'Escape':\n this.open = false;\n break;\n }\n }\n onTriggerKeydown(event) {\n // Open overlay via keyboard\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.open = true;\n this.focusFirst();\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ActionMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.8\", type: ActionMenuComponent, isStandalone: true, selector: \"app-action-menu\", inputs: { items: \"items\" }, viewQueries: [{ propertyName: \"menuItems\", predicate: [\"menuItem\"], descendants: true }], ngImport: i0, template: \"<div class=\\\"inline-block relative\\\">\\r\\n <button type=\\\"button\\\"\\r\\n class=\\\"p-ripple p-button p-button-icon-only p-button-outlined p-component\\\"\\r\\n #trigger\\r\\n (click)=\\\"toggle()\\\">\\r\\n <span class=\\\"pi pi-ellipsis-v\\\"></span>\\r\\n </button>\\r\\n\\r\\n <p-overlay [(visible)]=\\\"open\\\" [appendTo]=\\\"'body'\\\" (onShow)=\\\"focusFirst()\\\">\\r\\n <div class=\\\"w-48 rounded-lg shadow-lg bg-white border border-gray-200\\\"\\r\\n tabindex=\\\"0\\\"\\r\\n (keydown)=\\\"onMenuKeydown($event)\\\">\\r\\n <button #menuItem\\r\\n *ngFor=\\\"let item of items\\\"\\r\\n (click)=\\\"onClick(item, $event)\\\"\\r\\n class=\\\"flex items-center w-full text-left px-4 py-2 text-sm hover:bg-gray-100 focus:bg-gray-100 focus:outline-none\\\">\\r\\n <i *ngIf=\\\"item.icon\\\" [class]=\\\"item.icon + ' ml-2 mr-2 text-gray-500'\\\"></i>\\r\\n <span>{{ item.label }}</span>\\r\\n </button>\\r\\n </div>\\r\\n </p-overlay>\\r\\n</div>\\r\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"ngmodule\", type: OverlayModule }, { kind: \"component\", type: i2.Overlay, selector: \"p-overlay\", inputs: [\"visible\", \"mode\", \"style\", \"styleClass\", \"contentStyle\", \"contentStyleClass\", \"target\", \"autoZIndex\", \"baseZIndex\", \"showTransitionOptions\", \"hideTransitionOptions\", \"listener\", \"responsive\", \"options\", \"appendTo\", \"hostAttrSelector\"], outputs: [\"visibleChange\", \"onBeforeShow\", \"onShow\", \"onBeforeHide\", \"onHide\", \"onAnimationStart\", \"onAnimationDone\"] }, { kind: \"ngmodule\", type: ButtonModule }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ActionMenuComponent, decorators: [{\n type: Component,\n args: [{ selector: 'app-action-menu', imports: [CommonModule, OverlayModule, ButtonModule], template: \"<div class=\\\"inline-block relative\\\">\\r\\n <button type=\\\"button\\\"\\r\\n class=\\\"p-ripple p-button p-button-icon-only p-button-outlined p-component\\\"\\r\\n #trigger\\r\\n (click)=\\\"toggle()\\\">\\r\\n <span class=\\\"pi pi-ellipsis-v\\\"></span>\\r\\n </button>\\r\\n\\r\\n <p-overlay [(visible)]=\\\"open\\\" [appendTo]=\\\"'body'\\\" (onShow)=\\\"focusFirst()\\\">\\r\\n <div class=\\\"w-48 rounded-lg shadow-lg bg-white border border-gray-200\\\"\\r\\n tabindex=\\\"0\\\"\\r\\n (keydown)=\\\"onMenuKeydown($event)\\\">\\r\\n <button #menuItem\\r\\n *ngFor=\\\"let item of items\\\"\\r\\n (click)=\\\"onClick(item, $event)\\\"\\r\\n class=\\\"flex items-center w-full text-left px-4 py-2 text-sm hover:bg-gray-100 focus:bg-gray-100 focus:outline-none\\\">\\r\\n <i *ngIf=\\\"item.icon\\\" [class]=\\\"item.icon + ' ml-2 mr-2 text-gray-500'\\\"></i>\\r\\n <span>{{ item.label }}</span>\\r\\n </button>\\r\\n </div>\\r\\n </p-overlay>\\r\\n</div>\\r\\n\" }]\n }], propDecorators: { items: [{\n type: Input\n }], menuItems: [{\n type: ViewChildren,\n args: ['menuItem']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtdGFibGUvc3JjL2xpYi9hY3Rpb24tbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy10YWJsZS9zcmMvbGliL2FjdGlvbi1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBRXRGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFPaEQsTUFBTSxPQUFPLG1CQUFtQjtJQUNyQixLQUFLLEdBQWUsRUFBRSxDQUFDO0lBQ2hDLElBQUksR0FBRyxLQUFLLENBQUM7SUFFYSxTQUFTLENBQTRDO0lBRS9FLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztJQUU5QixNQUFNO1FBQ0osSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdkIseUNBQXlDO1FBQ3pDLDhEQUE4RDtJQUNoRSxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQWdCLENBQUM7UUFDckUsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBRWxCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzFDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFFeEMsSUFBSSxDQUFDLGlCQUFpQixH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QTVGVSxtQkFBbUI7MkZBQW5CLG1CQUFtQixpTUNYaEMsbTlCQXNCQSwyQ0RiWSxZQUFZLCtQQUFFLGFBQWEsMmNBQUUsWUFBWTs7MkZBRXhDLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUIsV0FFbEIsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQzs4QkFHM0MsS0FBSztzQkFBYixLQUFLO2dCQUdvQixTQUFTO3NCQUFsQyxZQUFZO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9vdmVybGF5JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWFjdGlvbi1tZW51JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uLW1lbnUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE92ZXJsYXlNb2R1bGUsIEJ1dHRvbk1vZHVsZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY3Rpb25NZW51Q29tcG9uZW50IHtcclxuICBASW5wdXQoKSBpdGVtczogTWVudUl0ZW1bXSA9IFtdO1xyXG4gIG9wZW4gPSBmYWxzZTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignbWVudUl0ZW0nKSBtZW51SXRlbXMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD4+O1xyXG5cclxuICBtZW51UG9zaXRpb25DbGFzcyA9ICdyaWdodC0wJztcclxuXHJcbiAgdG9nZ2xlKCkge1xyXG4gICAgdGhpcy5vcGVuID0gIXRoaXMub3BlbjtcclxuICAgIC8vIE9wdGlvbmFsOiBhZGp1c3QgcG9zaXRpb24gd2hlbiBvcGVuaW5nXHJcbiAgICAvLyBpZiAodGhpcy5vcGVuKSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYWRqdXN0TWVudVBvc2l0aW9uKCkpO1xyXG4gIH1cclxuXHJcbiAgYWRqdXN0TWVudVBvc2l0aW9uKCkge1xyXG4gICAgY29uc3QgbWVudSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hYnNvbHV0ZS5tdC0yJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAoIW1lbnUpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCByZWN0ID0gbWVudS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuXHJcbiAgICB0aGlzLm1lbnVQb3NpdGlvbkNsYXNzID0gcmVjdC5yaWdodCA+IHZpZXdwb3J0V2lkdGggPyAnbGVmdC0wJyA6ICdyaWdodC0wJztcclxuICB9XHJcblxyXG4gIG9uQ2xpY2soaXRlbTogTWVudUl0ZW0sIGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICB0aGlzLm9wZW4gPSBmYWxzZTtcclxuICAgIGlmIChpdGVtLmNvbW1hbmQpIHtcclxuICAgICAgaXRlbS5jb21tYW5kKHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIGl0ZW0gfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk91dHNpZGVDbGljayhldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKCF0YXJnZXQuY2xvc2VzdCgnLmlubGluZS1ibG9jaycpKSB7XHJcbiAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gIC8vIEZvY3VzICYgS2V5Ym9hcmQgbmF2aWdhdGlvblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gIGZvY3VzRmlyc3QoKSB7XHJcbiAgICAvLyBEZWxheSBuZWVkZWQgYmVjYXVzZSBvdmVybGF5IGNvbnRlbnQgaXMgcmVuZGVyZWQgYXN5bmNocm9ub3VzbHlcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLm1lbnVJdGVtcy5maXJzdD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gS2V5Ym9hcmQgb24gbWVudSBjb250YWluZXJcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiBvbk1lbnVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgLy8gQ29udmVydCBRdWVyeUxpc3QgdG8gYXJyYXkgb2YgSFRNTEJ1dHRvbkVsZW1lbnRcclxuICBjb25zdCBpdGVtczogSFRNTEJ1dHRvbkVsZW1lbnRbXSA9IHRoaXMubWVudUl0ZW1zLnRvQXJyYXkoKS5tYXAoaSA9PiBpLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEJ1dHRvbkVsZW1lbnQpO1xyXG5cclxuICBsZXQgaW5kZXggPSBpdGVtcy5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEJ1dHRvbkVsZW1lbnQpO1xyXG4gIGlmIChpbmRleCA9PT0gLTEpIHJldHVybjtcclxuXHJcbiAgc3dpdGNoIChldmVudC5rZXkpIHtcclxuICAgIGNhc2UgJ0Fycm93RG93bic6XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJSBpdGVtcy5sZW5ndGg7XHJcbiAgICAgIGl0ZW1zW2luZGV4XS5mb2N1cygpO1xyXG4gICAgICBicmVhaztcclxuXHJcbiAgICBjYXNlICdBcnJvd1VwJzpcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgaW5kZXggPSAoaW5kZXggLSAxICsgaXRlbXMubGVuZ3RoKSAlIGl0ZW1zLmxlbmd0aDtcclxuICAgICAgaXRlbXNbaW5kZXhdLmZvY3VzKCk7XHJcbiAgICAgIGJyZWFrO1xyXG5cclxuICAgIGNhc2UgJ0VudGVyJzpcclxuICAgIGNhc2UgJyAnOlxyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBpdGVtc1tpbmRleF0uY2xpY2soKTtcclxuICAgICAgYnJlYWs7XHJcblxyXG4gICAgY2FzZSAnRXNjYXBlJzpcclxuICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XHJcbiAgICAgIGJyZWFrO1xyXG4gIH1cclxufVxyXG5cclxuXHJcblxyXG4gIG9uVHJpZ2dlcktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIC8vIE9wZW4gb3ZlcmxheSB2aWEga2V5Ym9hcmRcclxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICcgJykge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLm9wZW4gPSB0cnVlO1xyXG4gICAgICB0aGlzLmZvY3VzRmlyc3QoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImlubGluZS1ibG9jayByZWxhdGl2ZVwiPlxyXG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBjbGFzcz1cInAtcmlwcGxlIHAtYnV0dG9uIHAtYnV0dG9uLWljb24tb25seSBwLWJ1dHRvbi1vdXRsaW5lZCBwLWNvbXBvbmVudFwiXHJcbiAgICAgICAgICAjdHJpZ2dlclxyXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZSgpXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cInBpIHBpLWVsbGlwc2lzLXZcIj48L3NwYW4+XHJcbiAgPC9idXR0b24+XHJcblxyXG4gIDxwLW92ZXJsYXkgWyh2aXNpYmxlKV09XCJvcGVuXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiIChvblNob3cpPVwiZm9jdXNGaXJzdCgpXCI+XHJcbiAgIDxkaXYgY2xhc3M9XCJ3LTQ4IHJvdW5kZWQtbGcgc2hhZG93LWxnIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDBcIlxyXG4gICAgICAgICB0YWJpbmRleD1cIjBcIlxyXG4gICAgICAgICAoa2V5ZG93bik9XCJvbk1lbnVLZXlkb3duKCRldmVudClcIj5cclxuICAgICAgPGJ1dHRvbiAjbWVudUl0ZW1cclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2soaXRlbSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciB3LWZ1bGwgdGV4dC1sZWZ0IHB4LTQgcHktMiB0ZXh0LXNtIGhvdmVyOmJnLWdyYXktMTAwIGZvY3VzOmJnLWdyYXktMTAwIGZvY3VzOm91dGxpbmUtbm9uZVwiPlxyXG4gICAgICAgIDxpICpuZ0lmPVwiaXRlbS5pY29uXCIgW2NsYXNzXT1cIml0ZW0uaWNvbiArICcgbWwtMiBtci0yIHRleHQtZ3JheS01MDAnXCI+PC9pPlxyXG4gICAgICAgIDxzcGFuPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9wLW92ZXJsYXk+XHJcbjwvZGl2PlxyXG4iXX0=","import { Component, Input, Output, EventEmitter, ViewChild, inject } from '@angular/core';\nimport { Table } from 'primeng/table';\nimport { CommonModule, NgForOf, NgIf } from '@angular/common';\nimport { TableModule } from 'primeng/table';\nimport { ButtonModule, Button } from 'primeng/button';\nimport { MenuModule, Menu } from 'primeng/menu';\nimport { TranslateModule, TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { FormlyField, FormlyForm } from '@ngx-formly/core';\nimport { FormGroup } from '@angular/forms';\nimport { cloneDeep } from 'lodash';\nimport { GenericButton } from '@elite.framework/ng.ui.core/generic-button';\nimport { PermissionsService } from '@elite.framework/ng.core/services';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { ActionMenuComponent } from './action-menu.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"primeng/table\";\nimport * as i3 from \"primeng/api\";\nimport * as i4 from \"primeng/button\";\nimport * as i5 from \"@ngx-translate/core\";\nexport class GenericTable {\n translateService = inject(TranslateService);\n permissionsService = inject(PermissionsService);\n dt;\n data = [];\n data_ = [];\n columns = [];\n processedFields = [];\n columns_ = [];\n loading = false;\n actions = [];\n actionsPosition = 'end';\n actionsMode = 'buttons';\n first = 0;\n rows = 10;\n totalRecords = 0;\n sortField;\n sortOrder = 1;\n globalFilterFields = [];\n action = new EventEmitter();\n pageChange = new EventEmitter();\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onAddNew = new EventEmitter();\n addButtonConfigs = [];\n scrollHeight = '400px';\n // **جديد**: تمكين اختيار الصفوف\n /** فعّل اختيار الصفين single/multiple */\n rowSelectable = true;\n /** يحتفظ بالصف المحدد */\n //@Input() selection: T | T[] | null = null;\n // هذا سيكون مرتبطًا بـ [(selection)] في p-table\n _selection = null;\n get selection() {\n return this._selection;\n }\n set selection(val) {\n this._selection = val;\n // لا تُصدر الحدث هنا، بل في onInternalSelectionChange فقط\n }\n trackByIdx(index, item) {\n return index;\n }\n /** يصدر الصف المحدد عند النقر */\n rowSelect = new EventEmitter();\n /** يصدر الصفوف المحددة عند التغيير (للربط الثنائي) */\n selectionChange = new EventEmitter();\n /** جديد: التحكم بظهور الـ paginator */\n paginator = true;\n form = new FormGroup({});\n options = {};\n // **جديد**: يتحكم بإظهار عمود اختيار الصفوف (checkboxes)\n /** يتحكم في إظهار عمود اختيار الصفوف المتعددة بواسطة checkboxes */\n showRowSelectionCheckbox = false;\n onInternalSelectionChange(event) {\n if ('data' in event) {\n // Row select/unselect (single أو multiple)\n if (Array.isArray(this._selection)) {\n this._selection = [...this._selection]; // تحديث نسخة المصفوفة عند متعدد\n }\n else {\n this._selection = event.data; // اختيار فردي\n }\n }\n else if ('checked' in event) {\n // Header checkbox toggle\n this._selection = event.checked ? [...this.data] : [];\n }\n this.selectionChange.emit(this._selection);\n }\n customSort(event) {\n event.data?.sort((data1, data2) => {\n const value1 = this.resolveFieldData(data1, event.field ?? '');\n const value2 = this.resolveFieldData(data2, event.field ?? '');\n let result = 0;\n if (value1 == null && value2 != null)\n result = -1;\n else if (value1 != null && value2 == null)\n result = 1;\n else if (value1 == null && value2 == null)\n result = 0;\n else if (typeof value1 === 'string' && typeof value2 === 'string')\n result = value1.localeCompare(value2);\n else\n result = value1 < value2 ? -1 : value1 > value2 ? 1 : 0;\n return (event.order ?? 1) * result;\n });\n }\n resolveFieldData(data, field) {\n if (!field)\n return null;\n if (field.indexOf('.') === -1)\n return data[field];\n return field.split('.').reduce((obj, prop) => (obj ? obj[prop] : null), data);\n }\n // getOrderedColumns(): TableColumn[] {\n // return [...this.columns,\n // ...(this.showRowSelectionCheckbox ? [{ type: 'selection', order: -1 }] : []),\n // { type: 'operations', label: 'OPERATIONS', order: 999 }\n // ].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n // }\n get sortedActions() {\n return this.actions\n .filter(action => !action.permissions?.length || // no permissions → allow\n action.permissions.every(p => this.permissionsService.isGranted(p)) // all granted\n )\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n }\n onAction(act, row) {\n if (act.action) {\n act.action(row);\n }\n else {\n this.action.emit({ name: act.name, row });\n }\n }\n // cloneField(field: any): any {\n // if (field === null || typeof field !== 'object') {\n // return field;\n // }\n // if (Array.isArray(field)) {\n // // preserve `this` context\n // return field.map((item) => this.cloneField(item));\n // }\n // const cloned: any = {};\n // for (const key of Object.keys(field)) {\n // cloned[key] = this.cloneField(field[key]);\n // }\n // return cloned;\n // }\n // Use a map to store form groups for each row and column\n cellForms = new Map();\n forms = new FormGroup({}); // A main form for the table\n // Refactored getForm to return an existing form instance\n getForm(rowIndex, colIndex) {\n const key = `${rowIndex}_${colIndex}`;\n let form = this.cellForms.get(key);\n if (!form) {\n form = new FormGroup({});\n this.cellForms.set(key, form);\n }\n return form;\n }\n trackByFn(index, item) {\n return index; // or a unique identifier from your data\n }\n // This method is called whenever any @Input() property changes.\n ngOnChanges(changes) {\n // Check if the 'data' property has changed.\n if (changes['data']) {\n const currentData = changes['data'].currentValue;\n const previousData = changes['data'].previousValue;\n // For example, you can call a method to re-render or process the data.\n this.refreshData();\n }\n }\n onLazyLoad(event) {\n // Reinitialize forms on new data load\n // this.cellForms.clear();\n this.refreshData();\n this.pageChange.emit(event);\n }\n applyFilter(filters) {\n // if (field) {\n // this.dt.filter(global, field, 'contains');\n // } else {\n // this.dt.filterGlobal(global, 'contains');\n // }\n }\n refreshData() {\n this.data_ = this.data.map(rowData => {\n // Create a new array of fields for each row\n const rowFields = this.columns.map(col => {\n return cloneDeep(col);\n });\n // Attach the unique fields to the row data object\n return {\n ...rowData,\n rowFields: rowFields\n };\n });\n }\n getMenuItems(row) {\n return this.sortedActions.map(act => ({\n label: this.translateService.instant(act.label ?? ''),\n icon: act.icon,\n command: () => this.onAction(act, row),\n styleClass: act.styleClass\n }));\n }\n // **جديد**: يتم إطلاق هذا عند اختيار صف\n onRowSelect(event) {\n // debugger\n if (event.data) {\n this.rowSelect.emit(event.data);\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericTable, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.8\", type: GenericTable, isStandalone: true, selector: \"lib-generic-table\", inputs: { data: \"data\", columns: \"columns\", loading: \"loading\", actions: \"actions\", actionsPosition: \"actionsPosition\", actionsMode: \"actionsMode\", first: \"first\", rows: \"rows\", totalRecords: \"totalRecords\", sortField: \"sortField\", sortOrder: \"sortOrder\", globalFilterFields: \"globalFilterFields\", addButtonConfigs: \"addButtonConfigs\", scrollHeight: \"scrollHeight\", rowSelectable: \"rowSelectable\", selection: \"selection\", paginator: \"paginator\", showRowSelectionCheckbox: \"showRowSelectionCheckbox\" }, outputs: { action: \"action\", pageChange: \"pageChange\", onAddNew: \"onAddNew\", rowSelect: \"rowSelect\", selectionChange: \"selectionChange\" }, viewQueries: [{ propertyName: \"dt\", first: true, predicate: [\"dt\"], descendants: true }], usesOnChanges: true, ngImport: i0, template: \"<div class=\\\"flex flex-col h-screen\\\" style=\\\" height: 60vh;\\\">\\r\\n <div class=\\\"flex-1 border rounded-lg overflow-hidden flex flex-col\\\">\\r\\n\\r\\n <!-- PrimeNG Table -->\\r\\n <p-table #dt\\r\\n [value]=\\\"data_\\\"\\r\\n [columns]=\\\"columns\\\"\\r\\n [lazy]=\\\"true\\\"\\r\\n [paginator]=\\\"false\\\"\\r\\n [rows]=\\\"rows\\\"\\r\\n [first]=\\\"first\\\"\\r\\n [totalRecords]=\\\"totalRecords\\\"\\r\\n [sortField]=\\\"sortField\\\"\\r\\n [sortOrder]=\\\"sortOrder\\\"\\r\\n (onLazyLoad)=\\\"onLazyLoad($event)\\\"\\r\\n [globalFilterFields]=\\\"globalFilterFields\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n [scrollable]=\\\"true\\\"\\r\\n scrollHeight=\\\"flex\\\"\\r\\n [selectionMode]=\\\"showRowSelectionCheckbox ? 'multiple' : (rowSelectable ? 'single' : undefined)\\\"\\r\\n [(selection)]=\\\"_selection\\\"\\r\\n (onRowSelect)=\\\"onInternalSelectionChange($event)\\\"\\r\\n (onRowUnselect)=\\\"onInternalSelectionChange($event)\\\"\\r\\n (onHeaderCheckboxToggle)=\\\"onInternalSelectionChange($event)\\\"\\r\\n tableLayout=\\\"fixed\\\"\\r\\n [customSort]=\\\"false\\\"\\r\\n (sortFunction)=\\\"customSort($event)\\\"\\r\\n class=\\\"flex-1 overflow-auto\\\"\\r\\n >\\r\\n\\r\\n <!-- Empty message -->\\r\\n <ng-template pTemplate=\\\"emptymessage\\\">\\r\\n <tr>\\r\\n <td colspan=\\\"10\\\">\\r\\n <div class=\\\"flex flex-col items-center justify-center py-10 text-center w-full\\\">\\r\\n <i class=\\\"pi pi-inbox text-4xl text-gray-400 mb-4\\\"></i>\\r\\n <p class=\\\"text-gray-500 mb-4\\\">{{ 'NO_DATA_FOUND' | translate }}</p>\\r\\n\\r\\n <ng-container *ngFor=\\\"let btn of addButtonConfigs; trackBy: trackByIdx\\\">\\r\\n <lib-generic-button\\r\\n *ngIf=\\\"!btn.visible || btn.visible === true\\\"\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"onAddNew.emit()\\\"\\r\\n class=\\\"mb-2\\\"\\r\\n ></lib-generic-button>\\r\\n </ng-container>\\r\\n </div>\\r\\n </td>\\r\\n </tr>\\r\\n </ng-template>\\r\\n\\r\\n <!-- Table header -->\\r\\n <ng-template pTemplate=\\\"header\\\" let-columns>\\r\\n <tr class=\\\"bg-gray-200 sticky top-0 z-10\\\">\\r\\n <th *ngIf=\\\"showRowSelectionCheckbox\\\" style=\\\"width: 2rem\\\">\\r\\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\\r\\n </th>\\r\\n <th *ngIf=\\\"actions.length > 0 && actionsPosition === 'start'\\\" class=\\\"px-4 py-2 text-sm font-medium text-center sticky right-0\\\">\\r\\n {{ '*' | translate }}\\r\\n </th>\\r\\n <ng-container *ngFor=\\\"let col of columns; trackBy: trackByFn\\\">\\r\\n <th\\r\\n [pSortableColumn]=\\\"col.key\\\"\\r\\n class=\\\"px-4 py-2 text-sm font-medium text-center\\\"\\r\\n [style.min-width]=\\\"col.props?.table?.props?.width || '150px'\\\"\\r\\n >\\r\\n {{ col.props?.label | translate }}\\r\\n <p-sortIcon [field]=\\\"col.key\\\"></p-sortIcon>\\r\\n </th>\\r\\n </ng-container>\\r\\n\\r\\n <th *ngIf=\\\"actions.length > 0 && actionsPosition === 'end'\\\" class=\\\"px-4 py-2 text-sm font-medium text-center sticky left-0\\\">\\r\\n {{ '*' | translate }}\\r\\n </th>\\r\\n </tr>\\r\\n </ng-template>\\r\\n\\r\\n <!-- Table body -->\\r\\n <ng-template pTemplate=\\\"body\\\" let-rowData let-columns=\\\"columns\\\" let-i=\\\"rowIndex\\\">\\r\\n <tr class=\\\"even:bg-gray-50 hover:bg-gray-100 cursor-pointer\\\" (click)=\\\"rowSelect.emit(rowData)\\\">\\r\\n <td *ngIf=\\\"showRowSelectionCheckbox\\\" style=\\\"width: 2rem\\\">\\r\\n <p-tableCheckbox [value]=\\\"rowData\\\"></p-tableCheckbox>\\r\\n </td>\\r\\n <td *ngIf=\\\"actions.length > 0 && actionsPosition === 'start'\\\" class=\\\"border-t border-gray-200 px-4 py-2 text-center sticky right-0 bg-gray-50\\\">\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"actionsTemplate; context: {$implicit: rowData}\\\">\\r\\n </ng-container>\\r\\n\\r\\n </td>\\r\\n\\r\\n <td\\r\\n *ngFor=\\\"let col of rowData.rowFields; let colIndex = index; trackBy: trackByFn\\\"\\r\\n class=\\\"border-t border-gray-200 px-4 py-2 text-center text-sm text-gray-700\\\"\\r\\n [style.width]=\\\"col.props?.table?.props?.width\\\"\\r\\n >\\r\\n <formly-form\\r\\n [model]=\\\"rowData\\\"\\r\\n [form]=\\\"getForm(i, colIndex)\\\"\\r\\n [fields]=\\\"[col]\\\"\\r\\n [options]=\\\"options\\\"\\r\\n ></formly-form>\\r\\n </td>\\r\\n\\r\\n <td *ngIf=\\\"actions.length > 0 && actionsPosition === 'end'\\\" class=\\\"border-t border-gray-200 px-4 py-2 text-center sticky left-0 bg-gray-50\\\">\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"actionsTemplate; context: {$implicit: rowData}\\\">\\r\\n </ng-container>\\r\\n\\r\\n </td>\\r\\n </tr>\\r\\n\\r\\n </ng-template>\\r\\n\\r\\n\\r\\n </p-table>\\r\\n </div>\\r\\n</div>\\r\\n\\r\\n<ng-template #actionsTemplate let-rowData>\\r\\n <ng-container [ngSwitch]=\\\"actionsMode\\\">\\r\\n\\r\\n <ng-container *ngSwitchCase=\\\"'buttons'\\\">\\r\\n <ng-container *ngFor=\\\"let act of sortedActions\\\">\\r\\n <button\\r\\n *ngIf=\\\"act.icon || act.label\\\"\\r\\n pButton\\r\\n [icon]=\\\"act.icon || ''\\\"\\r\\n [label]=\\\"(act.label ?? '') | translate\\\"\\r\\n [class]=\\\"act.styleClass || ''\\\"\\r\\n class=\\\"p-button-sm mx-1\\\"\\r\\n (click)=\\\"onAction(act, rowData)\\\" ></button>\\r\\n </ng-container>\\r\\n </ng-container>\\r\\n\\r\\n <ng-container *ngSwitchCase=\\\"'menu'\\\">\\r\\n <app-action-menu [items]=\\\"getMenuItems(rowData) || []\\\"></app-action-menu>\\r\\n <!-- <p-menu #menu [model]=\\\"getMenuItems(rowData)\\\" [popup]=\\\"true\\\" appendTo=\\\"body\\\"></p-menu>\\r\\n <p-button\\r\\n outlined\\r\\n icon=\\\"pi pi-ellipsis-v\\\"\\r\\n class=\\\"p-button-text p-button-sm\\\"\\r\\n (onClick)=\\\"menu.toggle($event)\\\"\\r\\n ></p-button> -->\\r\\n </ng-container>\\r\\n\\r\\n </ng-container>\\r\\n</ng-template>\\r\\n\\r\\n\", styles: [\".custom-button-medium{font-size:1.1rem;width:2.5rem;height:2.5rem;line-height:2.5rem;padding:0}.custom-button-gray{color:#333;background-color:transparent;border:none}.custom-button-gray:hover{background-color:#eee;color:#000}.icon-delete{color:red!important}.icon-edit{color:#333}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i1.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i1.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"ngmodule\", type: TableModule }, { kind: \"component\", type: i2.Table, selector: \"p-table\", inputs: [\"frozenColumns\", \"frozenValue\", \"styleClass\", \"tableStyle\", \"tableStyleClass\", \"paginator\", \"pageLinks\", \"rowsPerPageOptions\", \"alwaysShowPaginator\", \"paginatorPosition\", \"paginatorStyleClass\", \"paginatorDropdownAppendTo\", \"paginatorDropdownScrollHeight\", \"currentPageReportTemplate\", \"showCurrentPageReport\", \"showJumpToPageDropdown\", \"showJumpToPageInput\", \"showFirstLastIcon\", \"showPageLinks\", \"defaultSortOrder\", \"sortMode\", \"resetPageOnSort\", \"selectionMode\", \"selectionPageOnly\", \"contextMenuSelection\", \"contextMenuSelectionMode\", \"dataKey\", \"metaKeySelection\", \"rowSelectable\", \"rowTrackBy\", \"lazy\", \"lazyLoadOnInit\", \"compareSelectionBy\", \"csvSeparator\", \"exportFilename\", \"filters\", \"globalFilterFields\", \"filterDelay\", \"filterLocale\", \"expandedRowKeys\", \"editingRowKeys\", \"rowExpandMode\", \"scrollable\", \"rowGroupMode\", \"scrollHeight\", \"virtualScroll\", \"virtualScrollItemSize\", \"virtualScrollOptions\", \"virtualScrollDelay\", \"frozenWidth\", \"contextMenu\", \"resizableColumns\", \"columnResizeMode\", \"reorderableColumns\", \"loading\", \"loadingIcon\", \"showLoader\", \"rowHover\", \"customSort\", \"showInitialSortBadge\", \"exportFunction\", \"exportHeader\", \"stateKey\", \"stateStorage\", \"editMode\", \"groupRowsBy\", \"size\", \"showGridlines\", \"stripedRows\", \"groupRowsByOrder\", \"responsiveLayout\", \"breakpoint\", \"paginatorLocale\", \"value\", \"columns\", \"first\", \"rows\", \"totalRecords\", \"sortField\", \"sortOrder\", \"multiSortMeta\", \"selection\", \"selectAll\"], outputs: [\"contextMenuSelectionChange\", \"selectAllChange\", \"selectionChange\", \"onRowSelect\", \"onRowUnselect\", \"onPage\", \"onSort\", \"onFilter\", \"onLazyLoad\", \"onRowExpand\", \"onRowCollapse\", \"onContextMenuSelect\", \"onColResize\", \"onColReorder\", \"onRowReorder\", \"onEditInit\", \"onEditComplete\", \"onEditCancel\", \"onHeaderCheckboxToggle\", \"sortFunction\", \"firstChange\", \"rowsChange\", \"onStateSave\", \"onStateRestore\"] }, { kind: \"directive\", type: i3.PrimeTemplate, selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { kind: \"directive\", type: i2.SortableColumn, selector: \"[pSortableColumn]\", inputs: [\"pSortableColumn\", \"pSortableColumnDisabled\"] }, { kind: \"component\", type: i2.SortIcon, selector: \"p-sortIcon\", inputs: [\"field\"] }, { kind: \"component\", type: i2.TableCheckbox, selector: \"p-tableCheckbox\", inputs: [\"value\", \"disabled\", \"required\", \"index\", \"inputId\", \"name\", \"ariaLabel\"] }, { kind: \"component\", type: i2.TableHeaderCheckbox, selector: \"p-tableHeaderCheckbox\", inputs: [\"disabled\", \"inputId\", \"name\", \"ariaLabel\"] }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"directive\", type: i4.ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"ngmodule\", type: MenuModule }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"component\", type: FormlyForm, selector: \"formly-form\", inputs: [\"form\", \"model\", \"fields\", \"options\"], outputs: [\"modelChange\"] }, { kind: \"component\", type: GenericButton, selector: \"lib-generic-button\", inputs: [\"model\", \"type\", \"icon\", \"label\", \"variant\", \"severity\", \"size\", \"iconPosition\", \"disabled\", \"loading\", \"ariaLabel\", \"extraClasses\", \"permission\"], outputs: [\"clicked\", \"itemClick\"] }, { kind: \"ngmodule\", type: PaginatorModule }, { kind: \"component\", type: ActionMenuComponent, selector: \"app-action-menu\", inputs: [\"items\"] }, { kind: \"pipe\", type: i5.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericTable, decorators: [{\n type: Component,\n args: [{ selector: 'lib-generic-table', imports: [CommonModule, TableModule, ButtonModule, MenuModule, NgForOf, TranslateModule, FormlyField, FormlyForm, NgIf, TranslatePipe, Menu, Button, GenericButton, PaginatorModule, ActionMenuComponent], template: \"<div class=\\\"flex flex-col h-screen\\\" style=\\\" height: 60vh;\\\">\\r\\n <div class=\\\"flex-1 border rounded-lg overflow-hidden flex flex-col\\\">\\r\\n\\r\\n <!-- PrimeNG Table -->\\r\\n <p-table #dt\\r\\n [value]=\\\"data_\\\"\\r\\n [columns]=\\\"columns\\\"\\r\\n [lazy]=\\\"true\\\"\\r\\n [paginator]=\\\"false\\\"\\r\\n [rows]=\\\"rows\\\"\\r\\n [first]=\\\"first\\\"\\r\\n [totalRecords]=\\\"totalRecords\\\"\\r\\n [sortField]=\\\"sortField\\\"\\r\\n [sortOrder]=\\\"sortOrder\\\"\\r\\n (onLazyLoad)=\\\"onLazyLoad($event)\\\"\\r\\n [globalFilterFields]=\\\"globalFilterFields\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n [scrollable]=\\\"true\\\"\\r\\n scrollHeight=\\\"flex\\\"\\r\\n [selectionMode]=\\\"showRowSelectionCheckbox ? 'multiple' : (rowSelectable ? 'single' : undefined)\\\"\\r\\n [(selection)]=\\\"_selection\\\"\\r\\n (onRowSelect)=\\\"onInternalSelectionChange($event)\\\"\\r\\n (onRowUnselect)=\\\"onInternalSelectionChange($event)\\\"\\r\\n (onHeaderCheckboxToggle)=\\\"onInternalSelectionChange($event)\\\"\\r\\n tableLayout=\\\"fixed\\\"\\r\\n [customSort]=\\\"false\\\"\\r\\n (sortFunction)=\\\"customSort($event)\\\"\\r\\n class=\\\"flex-1 overflow-auto\\\"\\r\\n >\\r\\n\\r\\n <!-- Empty message -->\\r\\n <ng-template pTemplate=\\\"emptymessage\\\">\\r\\n <tr>\\r\\n <td colspan=\\\"10\\\">\\r\\n <div class=\\\"flex flex-col items-center justify-center py-10 text-center w-full\\\">\\r\\n <i class=\\\"pi pi-inbox text-4xl text-gray-400 mb-4\\\"></i>\\r\\n <p class=\\\"text-gray-500 mb-4\\\">{{ 'NO_DATA_FOUND' | translate }}</p>\\r\\n\\r\\n <ng-container *ngFor=\\\"let btn of addButtonConfigs; trackBy: trackByIdx\\\">\\r\\n <lib-generic-button\\r\\n *ngIf=\\\"!btn.visible || btn.visible === true\\\"\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"onAddNew.emit()\\\"\\r\\n class=\\\"mb-2\\\"\\r\\n ></lib-generic-button>\\r\\n </ng-container>\\r\\n </div>\\r\\n </td>\\r\\n </tr>\\r\\n </ng-template>\\r\\n\\r\\n <!-- Table header -->\\r\\n <ng-template pTemplate=\\\"header\\\" let-columns>\\r\\n <tr class=\\\"bg-gray-200 sticky top-0 z-10\\\">\\r\\n <th *ngIf=\\\"showRowSelectionCheckbox\\\" style=\\\"width: 2rem\\\">\\r\\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\\r\\n </th>\\r\\n <th *ngIf=\\\"actions.length > 0 && actionsPosition === 'start'\\\" class=\\\"px-4 py-2 text-sm font-medium text-center sticky right-0\\\">\\r\\n {{ '*' | translate }}\\r\\n </th>\\r\\n <ng-container *ngFor=\\\"let col of columns; trackBy: trackByFn\\\">\\r\\n <th\\r\\n [pSortableColumn]=\\\"col.key\\\"\\r\\n class=\\\"px-4 py-2 text-sm font-medium text-center\\\"\\r\\n [style.min-width]=\\\"col.props?.table?.props?.width || '150px'\\\"\\r\\n >\\r\\n {{ col.props?.label | translate }}\\r\\n <p-sortIcon [field]=\\\"col.key\\\"></p-sortIcon>\\r\\n </th>\\r\\n </ng-container>\\r\\n\\r\\n <th *ngIf=\\\"actions.length > 0 && actionsPosition === 'end'\\\" class=\\\"px-4 py-2 text-sm font-medium text-center sticky left-0\\\">\\r\\n {{ '*' | translate }}\\r\\n </th>\\r\\n </tr>\\r\\n </ng-template>\\r\\n\\r\\n <!-- Table body -->\\r\\n <ng-template pTemplate=\\\"body\\\" let-rowData let-columns=\\\"columns\\\" let-i=\\\"rowIndex\\\">\\r\\n <tr class=\\\"even:bg-gray-50 hover:bg-gray-100 cursor-pointer\\\" (click)=\\\"rowSelect.emit(rowData)\\\">\\r\\n <td *ngIf=\\\"showRowSelectionCheckbox\\\" style=\\\"width: 2rem\\\">\\r\\n <p-tableCheckbox [value]=\\\"rowData\\\"></p-tableCheckbox>\\r\\n </td>\\r\\n <td *ngIf=\\\"actions.length > 0 && actionsPosition === 'start'\\\" class=\\\"border-t border-gray-200 px-4 py-2 text-center sticky right-0 bg-gray-50\\\">\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"actionsTemplate; context: {$implicit: rowData}\\\">\\r\\n </ng-container>\\r\\n\\r\\n </td>\\r\\n\\r\\n <td\\r\\n *ngFor=\\\"let col of rowData.rowFields; let colIndex = index; trackBy: trackByFn\\\"\\r\\n class=\\\"border-t border-gray-200 px-4 py-2 text-center text-sm text-gray-700\\\"\\r\\n [style.width]=\\\"col.props?.table?.props?.width\\\"\\r\\n >\\r\\n <formly-form\\r\\n [model]=\\\"rowData\\\"\\r\\n [form]=\\\"getForm(i, colIndex)\\\"\\r\\n [fields]=\\\"[col]\\\"\\r\\n [options]=\\\"options\\\"\\r\\n ></formly-form>\\r\\n </td>\\r\\n\\r\\n <td *ngIf=\\\"actions.length > 0 && actionsPosition === 'end'\\\" class=\\\"border-t border-gray-200 px-4 py-2 text-center sticky left-0 bg-gray-50\\\">\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"actionsTemplate; context: {$implicit: rowData}\\\">\\r\\n </ng-container>\\r\\n\\r\\n </td>\\r\\n </tr>\\r\\n\\r\\n </ng-template>\\r\\n\\r\\n\\r\\n </p-table>\\r\\n </div>\\r\\n</div>\\r\\n\\r\\n<ng-template #actionsTemplate let-rowData>\\r\\n <ng-container [ngSwitch]=\\\"actionsMode\\\">\\r\\n\\r\\n <ng-container *ngSwitchCase=\\\"'buttons'\\\">\\r\\n <ng-container *ngFor=\\\"let act of sortedActions\\\">\\r\\n <button\\r\\n *ngIf=\\\"act.icon || act.label\\\"\\r\\n pButton\\r\\n [icon]=\\\"act.icon || ''\\\"\\r\\n [label]=\\\"(act.label ?? '') | translate\\\"\\r\\n [class]=\\\"act.styleClass || ''\\\"\\r\\n class=\\\"p-button-sm mx-1\\\"\\r\\n (click)=\\\"onAction(act, rowData)\\\" ></button>\\r\\n </ng-container>\\r\\n </ng-container>\\r\\n\\r\\n <ng-container *ngSwitchCase=\\\"'menu'\\\">\\r\\n <app-action-menu [items]=\\\"getMenuItems(rowData) || []\\\"></app-action-menu>\\r\\n <!-- <p-menu #menu [model]=\\\"getMenuItems(rowData)\\\" [popup]=\\\"true\\\" appendTo=\\\"body\\\"></p-menu>\\r\\n <p-button\\r\\n outlined\\r\\n icon=\\\"pi pi-ellipsis-v\\\"\\r\\n class=\\\"p-button-text p-button-sm\\\"\\r\\n (onClick)=\\\"menu.toggle($event)\\\"\\r\\n ></p-button> -->\\r\\n </ng-container>\\r\\n\\r\\n </ng-container>\\r\\n</ng-template>\\r\\n\\r\\n\", styles: [\".custom-button-medium{font-size:1.1rem;width:2.5rem;height:2.5rem;line-height:2.5rem;padding:0}.custom-button-gray{color:#333;background-color:transparent;border:none}.custom-button-gray:hover{background-color:#eee;color:#000}.icon-delete{color:red!important}.icon-edit{color:#333}\\n\"] }]\n }], propDecorators: { dt: [{\n type: ViewChild,\n args: ['dt']\n }], data: [{\n type: Input\n }], columns: [{\n type: Input\n }], loading: [{\n type: Input\n }], actions: [{\n type: Input\n }], actionsPosition: [{\n type: Input\n }], actionsMode: [{\n type: Input\n }], first: [{\n type: Input\n }], rows: [{\n type: Input\n }], totalRecords: [{\n type: Input\n }], sortField: [{\n type: Input\n }], sortOrder: [{\n type: Input\n }], globalFilterFields: [{\n type: Input\n }], action: [{\n type: Output\n }], pageChange: [{\n type: Output\n }], onAddNew: [{\n type: Output\n }], addButtonConfigs: [{\n type: Input\n }], scrollHeight: [{\n type: Input\n }], rowSelectable: [{\n type: Input\n }], selection: [{\n type: Input\n }], rowSelect: [{\n type: Output\n }], selectionChange: [{\n type: Output\n }], paginator: [{\n type: Input\n }], showRowSelectionCheckbox: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy10YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXRhYmxlL3NyYy9saWIvZ2VuZXJpYy10YWJsZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXRhYmxlL3NyYy9saWIvZ2VuZXJpYy10YWJsZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUE2QixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckgsT0FBTyxFQUFFLEtBQUssRUFBMkUsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkYsT0FBTyxFQUFFLFdBQVcsRUFBcUIsVUFBVSxFQUFxQixNQUFNLGtCQUFrQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsU0FBUyxFQUFXLE1BQU0sUUFBUSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFF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O2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUdHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0EsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNLLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSUcsYUFBYTtzQkFBckIsS0FBSztnQkFTRixTQUFTO3NCQURaLEtBQUs7Z0JBWUksU0FBUztzQkFBbEIsTUFBTTtnQkFHRyxlQUFlO3NCQUF4QixNQUFNO2dCQUlFLFNBQVM7c0JBQWpCLEtBQUs7Z0JBT0csd0JBQXdCO3NCQUFoQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCwgIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1lbnVJdGVtLCBTb3J0RXZlbnQgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFRhYmxlLCBUYWJsZUhlYWRlckNoZWNrYm94VG9nZ2xlRXZlbnQsIFRhYmxlTGF6eUxvYWRFdmVudCwgVGFibGVSb3dTZWxlY3RFdmVudCB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nRm9yT2YsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUYWJsZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUsIEJ1dHRvbiB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgTWVudU1vZHVsZSwgTWVudSB9IGZyb20gJ3ByaW1lbmcvbWVudSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlUGlwZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtbHlGaWVsZCwgRm9ybWx5RmllbGRDb25maWcsIEZvcm1seUZvcm0sIEZvcm1seUZvcm1PcHRpb25zIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aW9uRGVmLCBCdXR0b25Db25maWcgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvbW9kZWxzJztcclxuaW1wb3J0IHsgY2xvbmVEZWVwLCBmb3JFYWNoIH0gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgR2VuZXJpY0J1dHRvbiB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcudWkuY29yZS9nZW5lcmljLWJ1dHRvbic7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25zU2VydmljZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFBhZ2luYXRvck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgQWN0aW9uTWVudUNvbXBvbmVudCB9IGZyb20gJy4vYWN0aW9uLW1lbnUuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWdlbmVyaWMtdGFibGUnLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRhYmxlTW9kdWxlLCBCdXR0b25Nb2R1bGUsIE1lbnVNb2R1bGUsIE5nRm9yT2YsVHJhbnNsYXRlTW9kdWxlLEZvcm1seUZpZWxkLEZvcm1seUZvcm0sIE5nSWYsIFRyYW5zbGF0ZVBpcGUsIE1lbnUsIEJ1dHRvbixHZW5lcmljQnV0dG9uLFBhZ2luYXRvck1vZHVsZSxBY3Rpb25NZW51Q29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJpYy10YWJsZS5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZ2VuZXJpYy10YWJsZS5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHZW5lcmljVGFibGU8VD4gIGltcGxlbWVudHMgT25DaGFuZ2Vze1xyXG5cclxuICB0cmFuc2xhdGVTZXJ2aWNlOlRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XHJcbiAgcGVybWlzc2lvbnNTZXJ2aWNlOlBlcm1pc3Npb25zU2VydmljZSA9IGluamVjdChQZXJtaXNzaW9uc1NlcnZpY2UpO1xyXG5cclxuQFZpZXdDaGlsZCgnZHQnKSBkdCE6IFRhYmxlO1xyXG5cclxuQElucHV0KCkgZGF0YTogYW55W10gPSBbXTtcclxuIGRhdGFfOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGNvbHVtbnM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcclxuICBwcm9jZXNzZWRGaWVsZHM6IGFueVtdID0gW107XHJcbiAgY29sdW1uc186IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcclxuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYWN0aW9uczogQWN0aW9uRGVmPFQ+W10gPSBbXTtcclxuICBASW5wdXQoKSBhY3Rpb25zUG9zaXRpb246ICdzdGFydCcgfCAnZW5kJyA9ICdlbmQnO1xyXG4gIEBJbnB1dCgpIGFjdGlvbnNNb2RlOiAnYnV0dG9ucycgfCAnbWVudScgPSAnYnV0dG9ucyc7XHJcbiAgQElucHV0KCkgZmlyc3QgPSAwO1xyXG4gIEBJbnB1dCgpIHJvd3MgPSAxMDtcclxuICBASW5wdXQoKSB0b3RhbFJlY29yZHMgPSAwO1xyXG4gIEBJbnB1dCgpIHNvcnRGaWVsZD86IHN0cmluZztcclxuICBASW5wdXQoKSBzb3J0T3JkZXI6IDEgfCAtMSA9IDE7XHJcbiAgQElucHV0KCkgZ2xvYmFsRmlsdGVyRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBAT3V0cHV0KCkgYWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IG5hbWU6IHN0cmluZzsgcm93OiBUIH0+KCk7XHJcbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlTGF6eUxvYWRFdmVudD4oKTtcclxuXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XHJcbiAgQE91dHB1dCgpIG9uQWRkTmV3ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbkBJbnB1dCgpIGFkZEJ1dHRvbkNvbmZpZ3M6IEJ1dHRvbkNvbmZpZ1tdID0gW107XHJcbiAgQElucHV0KCkgc2Nyb2xsSGVpZ2h0ID0gJzQwMHB4JztcclxuXHJcbiAvLyAqKtis2K/ZitivKio6INiq2YXZg9mK2YYg2KfYrtiq2YrYp9ixINin2YTYtdmB2YjZgVxyXG4gIC8qKiDZgdi52ZHZhCDYp9iu2KrZitin2LEg2KfZhNi12YHZitmGIHNpbmdsZS9tdWx0aXBsZSAqL1xyXG4gIEBJbnB1dCgpIHJvd1NlbGVjdGFibGUgPSB0cnVlO1xyXG4gIC8qKiDZitit2KrZgdi4INio2KfZhNi12YEg2KfZhNmF2K3Yr9ivICovXHJcbiAgLy9ASW5wdXQoKSBzZWxlY3Rpb246IFQgfCBUW10gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLy8g2YfYsNinINiz2YrZg9mI2YYg2YXYsdiq2KjYt9mL2Kcg2KjZgCBbKHNlbGVjdGlvbildINmB2YogcC10YWJsZVxyXG4gIF9zZWxlY3Rpb246IFQgfCBUW10gfCBudWxsID0gbnVsbDtcclxuXHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHNlbGVjdGlvbigpOiBUIHwgVFtdIHwgbnVsbCB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb247XHJcbiAgfVxyXG4gIHNldCBzZWxlY3Rpb24odmFsOiBUIHwgVFtdIHwgbnVsbCkge1xyXG4gICAgICB0aGlzLl9zZWxlY3Rpb24gPSB2YWw7XHJcbiAgICAgIC8vINmE2Kcg2KrZj9i12K/YsSDYp9mE2K3Yr9irINmH2YbYp9iMINio2YQg2YHZiiBvbkludGVybmFsU2VsZWN0aW9uQ2hhbmdlINmB2YLYt1xyXG4gIH1cclxuIHRyYWNrQnlJZHgoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KTogbnVtYmVyIHtcclxuICByZXR1cm4gaW5kZXg7XHJcbiB9XHJcbiAgLyoqINmK2LXYr9ixINin2YTYtdmBINin2YTZhdit2K/YryDYudmG2K8g2KfZhNmG2YLYsSAqL1xyXG4gIEBPdXRwdXQoKSByb3dTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XHJcblxyXG4gICAgIC8qKiDZiti12K/YsSDYp9mE2LXZgdmI2YEg2KfZhNmF2K3Yr9iv2Kkg2LnZhtivINin2YTYqti62YrZitixICjZhNmE2LHYqNi3INin2YTYq9mG2KfYptmKKSAqL1xyXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFQgfCBUW10gfCBudWxsPigpO1xyXG5cclxuXHJcbiAgIC8qKiDYrNiv2YrYrzog2KfZhNiq2K3Zg9mFINio2LjZh9mI2LEg2KfZhNmAIHBhZ2luYXRvciAqL1xyXG4gIEBJbnB1dCgpIHBhZ2luYXRvciA9IHRydWU7XHJcbmZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxub3B0aW9uczogRm9ybWx5Rm9ybU9wdGlvbnMgPSB7fTtcclxuXHJcblxyXG4gIC8vICoq2KzYr9mK2K8qKjog2YrYqtit2YPZhSDYqNil2LjZh9in2LEg2LnZhdmI2K8g2KfYrtiq2YrYp9ixINin2YTYtdmB2YjZgSAoY2hlY2tib3hlcylcclxuICAvKiog2YrYqtit2YPZhSDZgdmKINil2LjZh9in2LEg2LnZhdmI2K8g2KfYrtiq2YrYp9ixINin2YTYtdmB2YjZgSDYp9mE2YXYqti52K/Yr9ipINio2YjYp9iz2LfYqSBjaGVja2JveGVzICovXHJcbiAgQElucHV0KCkgc2hvd1Jvd1NlbGVjdGlvbkNoZWNrYm94ID0gZmFsc2U7XHJcblxyXG5cclxuICBvbkludGVybmFsU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBUYWJsZVJvd1NlbGVjdEV2ZW50PFQ+XHJcbiAgICB8IFRhYmxlSGVhZGVyQ2hlY2tib3hUb2dnbGVFdmVudCk6IHZvaWQge1xyXG4gIGlmICgnZGF0YScgaW4gZXZlbnQpIHtcclxuICAgIC8vIFJvdyBzZWxlY3QvdW5zZWxlY3QgKHNpbmdsZSDYo9mIIG11bHRpcGxlKVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5fc2VsZWN0aW9uKSkge1xyXG4gICAgICB0aGlzLl9zZWxlY3Rpb24gPSBbLi4udGhpcy5fc2VsZWN0aW9uXTsgLy8g2KrYrdiv2YrYqyDZhtiz2K7YqSDYp9mE2YXYtdmB2YjZgdipINi52YbYryDZhdiq2LnYr9ivXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9zZWxlY3Rpb24gPSBldmVudC5kYXRhIGFzIFQ7IC8vINin2K7YqtmK2KfYsSDZgdix2K/ZilxyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAoJ2NoZWNrZWQnIGluIGV2ZW50KSB7XHJcbiAgICAvLyBIZWFkZXIgY2hlY2tib3ggdG9nZ2xlXHJcbiAgICB0aGlzLl9zZWxlY3Rpb24gPSBldmVudC5jaGVja2VkID8gWy4uLnRoaXMuZGF0YV0gOiBbXTtcclxuICB9XHJcblxyXG4gIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0aW9uKTtcclxufVxyXG5cclxuXHJcblxyXG5jdXN0b21Tb3J0KGV2ZW50OiBTb3J0RXZlbnQpIHtcclxuICBldmVudC5kYXRhPy5zb3J0KChkYXRhMSwgZGF0YTIpID0+IHtcclxuICAgIGNvbnN0IHZhbHVlMSA9IHRoaXMucmVzb2x2ZUZpZWxkRGF0YShkYXRhMSwgZXZlbnQuZmllbGQgPz8gJycpO1xyXG4gICAgY29uc3QgdmFsdWUyID0gdGhpcy5yZXNvbHZlRmllbGREYXRhKGRhdGEyLCBldmVudC5maWVsZCA/PyAnJyk7XHJcblxyXG4gICAgbGV0IHJlc3VsdCA9IDA7XHJcbiAgICBpZiAodmFsdWUxID09IG51bGwgJiYgdmFsdWUyICE9IG51bGwpIHJlc3VsdCA9IC0xO1xyXG4gICAgZWxzZSBpZiAodmFsdWUxICE9IG51bGwgJiYgdmFsdWUyID09IG51bGwpIHJlc3VsdCA9IDE7XHJcbiAgICBlbHNlIGlmICh2YWx1ZTEgPT0gbnVsbCAmJiB2YWx1ZTIgPT0gbnVsbCkgcmVzdWx0ID0gMDtcclxuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZTEgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZTIgPT09ICdzdHJpbmcnKVxyXG4gICAgICByZXN1bHQgPSB2YWx1ZTEubG9jYWxlQ29tcGFyZSh2YWx1ZTIpO1xyXG4gICAgZWxzZSByZXN1bHQgPSB2YWx1ZTEgPCB2YWx1ZTIgPyAtMSA6IHZhbHVlMSA+IHZhbHVlMiA/IDEgOiAwO1xyXG5cclxuICAgIHJldHVybiAoZXZlbnQub3JkZXIgPz8gMSkgKiByZXN1bHQ7XHJcbiAgfSk7XHJcbn1cclxucmVzb2x2ZUZpZWxkRGF0YShkYXRhOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBhbnkge1xyXG4gIGlmICghZmllbGQpIHJldHVybiBudWxsO1xyXG4gIGlmIChmaWVsZC5pbmRleE9mKCcuJykgPT09IC0xKSByZXR1cm4gZGF0YVtmaWVsZF07XHJcbiAgcmV0dXJuIGZpZWxkLnNwbGl0KCcuJykucmVkdWNlKChvYmosIHByb3ApID0+IChvYmogPyBvYmpbcHJvcF0gOiBudWxsKSwgZGF0YSk7XHJcbn1cclxuXHJcbi8vIGdldE9yZGVyZWRDb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10ge1xyXG4vLyAgIHJldHVybiBbLi4udGhpcy5jb2x1bW5zLFxyXG4vLyAgICAgLi4uKHRoaXMuc2hvd1Jvd1NlbGVjdGlvbkNoZWNrYm94ID8gW3sgdHlwZTogJ3NlbGVjdGlvbicsIG9yZGVyOiAtMSB9XSA6IFtdKSxcclxuLy8gICAgIHsgdHlwZTogJ29wZXJhdGlvbnMnLCBsYWJlbDogJ09QRVJBVElPTlMnLCBvcmRlcjogOTk5IH1cclxuLy8gICBdLnNvcnQoKGEsIGIpID0+IChhLm9yZGVyID8/IDApIC0gKGIub3JkZXIgPz8gMCkpO1xyXG4vLyB9XHJcblxyXG5nZXQgc29ydGVkQWN0aW9ucygpOiBBY3Rpb25EZWY8VD5bXSB7XHJcbiAgcmV0dXJuIHRoaXMuYWN0aW9uc1xyXG4gICAgLmZpbHRlcihhY3Rpb24gPT5cclxuICAgICAgIWFjdGlvbi5wZXJtaXNzaW9ucz8ubGVuZ3RoIHx8IC8vIG5vIHBlcm1pc3Npb25zIOKGkiBhbGxvd1xyXG4gICAgICBhY3Rpb24ucGVybWlzc2lvbnMuZXZlcnkocCA9PiB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5pc0dyYW50ZWQocCkpIC8vIGFsbCBncmFudGVkXHJcbiAgICApXHJcbiAgICAuc29ydCgoYSwgYikgPT4gKGEub3JkZXIgPz8gMCkgLSAoYi5vcmRlciA/PyAwKSk7XHJcbn1cclxuXHJcblxyXG4gb25BY3Rpb24oYWN0OiBBY3Rpb25EZWY8VD4sIHJvdzogVCkge1xyXG4gICAgaWYgKGFjdC5hY3Rpb24pIHtcclxuICAgICAgYWN0LmFjdGlvbihyb3cpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hY3Rpb24uZW1pdCh7IG5hbWU6IGFjdC5uYW1lLCByb3cgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4vLyAgY2xvbmVGaWVsZChmaWVsZDogYW55KTogYW55IHtcclxuLy8gICBpZiAoZmllbGQgPT09IG51bGwgfHwgdHlwZW9mIGZpZWxkICE9PSAnb2JqZWN0Jykge1xyXG4vLyAgICAgcmV0dXJuIGZpZWxkO1xyXG4vLyAgIH1cclxuXHJcbi8vICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkKSkge1xyXG4vLyAgICAgLy8gcHJlc2VydmUgYHRoaXNgIGNvbnRleHRcclxuLy8gICAgIHJldHVybiBmaWVsZC5tYXAoKGl0ZW0pID0+IHRoaXMuY2xvbmVGaWVsZChpdGVtKSk7XHJcbi8vICAgfVxyXG4vLyAgIGNvbnN0IGNsb25lZDogYW55ID0ge307XHJcbi8vICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZmllbGQpKSB7XHJcbi8vICAgICBjbG9uZWRba2V5XSA9IHRoaXMuY2xvbmVGaWVsZChmaWVsZFtrZXldKTtcclxuLy8gICB9XHJcblxyXG4vLyAgIHJldHVybiBjbG9uZWQ7XHJcbi8vIH1cclxuXHJcbiAvLyBVc2UgYSBtYXAgdG8gc3RvcmUgZm9ybSBncm91cHMgZm9yIGVhY2ggcm93IGFuZCBjb2x1bW5cclxuICBwcml2YXRlIGNlbGxGb3JtczogTWFwPHN0cmluZywgRm9ybUdyb3VwPiA9IG5ldyBNYXAoKTtcclxuICBmb3JtczogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7IC8vIEEgbWFpbiBmb3JtIGZvciB0aGUgdGFibGVcclxuXHJcblxyXG4gIC8vIFJlZmFjdG9yZWQgZ2V0Rm9ybSB0byByZXR1cm4gYW4gZXhpc3RpbmcgZm9ybSBpbnN0YW5jZVxyXG4gIGdldEZvcm0ocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IEZvcm1Hcm91cCB7XHJcbiAgICBjb25zdCBrZXkgPSBgJHtyb3dJbmRleH1fJHtjb2xJbmRleH1gO1xyXG4gICAgbGV0IGZvcm0gPSB0aGlzLmNlbGxGb3Jtcy5nZXQoa2V5KTtcclxuXHJcbiAgICBpZiAoIWZvcm0pIHtcclxuICAgICAgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgICB0aGlzLmNlbGxGb3Jtcy5zZXQoa2V5LCBmb3JtKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmb3JtO1xyXG4gIH1cclxudHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xyXG4gIHJldHVybiBpbmRleDsgLy8gb3IgYSB1bmlxdWUgaWRlbnRpZmllciBmcm9tIHlvdXIgZGF0YVxyXG59XHJcbiAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgYW55IEBJbnB1dCgpIHByb3BlcnR5IGNoYW5nZXMuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgLy8gQ2hlY2sgaWYgdGhlICdkYXRhJyBwcm9wZXJ0eSBoYXMgY2hhbmdlZC5cclxuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10pIHtcclxuICAgICAgY29uc3QgY3VycmVudERhdGEgPSBjaGFuZ2VzWydkYXRhJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICBjb25zdCBwcmV2aW91c0RhdGEgPSBjaGFuZ2VzWydkYXRhJ10ucHJldmlvdXNWYWx1ZTtcclxuXHJcblxyXG4gICAgICAvLyBGb3IgZXhhbXBsZSwgeW91IGNhbiBjYWxsIGEgbWV0aG9kIHRvIHJlLXJlbmRlciBvciBwcm9jZXNzIHRoZSBkYXRhLlxyXG4gICAgICB0aGlzLnJlZnJlc2hEYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuIG9uTGF6eUxvYWQoZXZlbnQ6IFRhYmxlTGF6eUxvYWRFdmVudCk6IHZvaWQge1xyXG4gICAgLy8gUmVpbml0aWFsaXplIGZvcm1zIG9uIG5ldyBkYXRhIGxvYWRcclxuICAgIC8vIHRoaXMuY2VsbEZvcm1zLmNsZWFyKCk7XHJcbiAgdGhpcy5yZWZyZXNoRGF0YSgpO1xyXG4gICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcblxyXG4gIGFwcGx5RmlsdGVyKGZpbHRlcnM6IGFueSk6IHZvaWQge1xyXG4gICAgLy8gaWYgKGZpZWxkKSB7XHJcbiAgICAvLyAgIHRoaXMuZHQuZmlsdGVyKGdsb2JhbCwgZmllbGQsICdjb250YWlucycpO1xyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgdGhpcy5kdC5maWx0ZXJHbG9iYWwoZ2xvYmFsLCAnY29udGFpbnMnKTtcclxuICAgIC8vIH1cclxuXHJcbiAgfVxyXG4gIHJlZnJlc2hEYXRhKCl7XHJcbiAgICAgdGhpcy5kYXRhXyA9IHRoaXMuZGF0YS5tYXAocm93RGF0YSA9PiB7XHJcbiAgICAvLyBDcmVhdGUgYSBuZXcgYXJyYXkgb2YgZmllbGRzIGZvciBlYWNoIHJvd1xyXG4gICAgY29uc3Qgcm93RmllbGRzID0gdGhpcy5jb2x1bW5zLm1hcChjb2wgPT4ge1xyXG4gICAgICByZXR1cm4gY2xvbmVEZWVwKGNvbCk7XHJcbiAgICB9KTtcclxuICAgIC8vIEF0dGFjaCB0aGUgdW5pcXVlIGZpZWxkcyB0byB0aGUgcm93IGRhdGEgb2JqZWN0XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi5yb3dEYXRhLFxyXG4gICAgICByb3dGaWVsZHM6IHJvd0ZpZWxkc1xyXG4gICAgfTtcclxuICB9KTtcclxuICB9XHJcblxyXG4gIGdldE1lbnVJdGVtcyhyb3c6IFQpOiBNZW51SXRlbVtdIHtcclxuICAgIHJldHVybiB0aGlzLnNvcnRlZEFjdGlvbnMubWFwKGFjdCA9PiAoe1xyXG4gICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoIGFjdC5sYWJlbCA/PycnKSAsXHJcbiAgICAgIGljb246IGFjdC5pY29uLFxyXG4gICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLm9uQWN0aW9uKGFjdCwgcm93ICksXHJcbiAgICAgIHN0eWxlQ2xhc3M6IGFjdC5zdHlsZUNsYXNzXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuIC8vICoq2KzYr9mK2K8qKjog2YrYqtmFINil2LfZhNin2YIg2YfYsNinINi52YbYryDYp9iu2KrZitin2LEg2LXZgVxyXG4gIG9uUm93U2VsZWN0KGV2ZW50OiBUYWJsZVJvd1NlbGVjdEV2ZW50PFQ+KSB7XHJcbiAgICAvLyBkZWJ1Z2dlclxyXG4gICAgaWYgKGV2ZW50LmRhdGEpIHtcclxuICAgICAgdGhpcy5yb3dTZWxlY3QuZW1pdChldmVudC5kYXRhIGFzIFQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaC1zY3JlZW5cIiBzdHlsZT1cIiAgICBoZWlnaHQ6IDYwdmg7XCI+XHJcbiAgPGRpdiBjbGFzcz1cImZsZXgtMSBib3JkZXIgcm91bmRlZC1sZyBvdmVyZmxvdy1oaWRkZW4gZmxleCBmbGV4LWNvbFwiPlxyXG5cclxuICAgIDwhLS0gUHJpbWVORyBUYWJsZSAtLT5cclxuICAgIDxwLXRhYmxlICNkdFxyXG4gICAgICBbdmFsdWVdPVwiZGF0YV9cIlxyXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcclxuICAgICAgW2xhenldPVwidHJ1ZVwiXHJcbiAgICAgIFtwYWdpbmF0b3JdPVwiZmFsc2VcIlxyXG4gICAgICBbcm93c109XCJyb3dzXCJcclxuICAgICAgW2ZpcnN0XT1cImZpcnN0XCJcclxuICAgICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxyXG4gICAgICBbc29ydEZpZWxkXT1cInNvcnRGaWVsZFwiXHJcbiAgICAgIFtzb3J0T3JkZXJdPVwic29ydE9yZGVyXCJcclxuICAgICAgKG9uTGF6eUxvYWQpPVwib25MYXp5TG9hZCgkZXZlbnQpXCJcclxuICAgICAgW2dsb2JhbEZpbHRlckZpZWxkc109XCJnbG9iYWxGaWx0ZXJGaWVsZHNcIlxyXG4gICAgICBbbG9hZGluZ109XCJsb2FkaW5nXCJcclxuICAgICAgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXHJcbiAgICAgIHNjcm9sbEhlaWdodD1cImZsZXhcIlxyXG4gICAgICBbc2VsZWN0aW9uTW9kZV09XCJzaG93Um93U2VsZWN0aW9uQ2hlY2tib3ggPyAnbXVsdGlwbGUnIDogKHJvd1NlbGVjdGFibGUgPyAnc2luZ2xlJyA6IHVuZGVmaW5lZClcIlxyXG4gICAgICBbKHNlbGVjdGlvbildPVwiX3NlbGVjdGlvblwiXHJcbiAgICAgIChvblJvd1NlbGVjdCk9XCJvbkludGVybmFsU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAob25Sb3dVbnNlbGVjdCk9XCJvbkludGVybmFsU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAob25IZWFkZXJDaGVja2JveFRvZ2dsZSk9XCJvbkludGVybmFsU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICB0YWJsZUxheW91dD1cImZpeGVkXCJcclxuICAgICAgW2N1c3RvbVNvcnRdPVwiZmFsc2VcIlxyXG4gICAgICAoc29ydEZ1bmN0aW9uKT1cImN1c3RvbVNvcnQoJGV2ZW50KVwiXHJcbiAgICAgIGNsYXNzPVwiZmxleC0xIG92ZXJmbG93LWF1dG9cIlxyXG4gICAgPlxyXG5cclxuICAgICAgPCEtLSBFbXB0eSBtZXNzYWdlIC0tPlxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgPHRkIGNvbHNwYW49XCIxMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMTAgdGV4dC1jZW50ZXIgdy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1pbmJveCB0ZXh0LTR4bCB0ZXh0LWdyYXktNDAwIG1iLTRcIj48L2k+XHJcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWdyYXktNTAwIG1iLTRcIj57eyAnTk9fREFUQV9GT1VORCcgfCB0cmFuc2xhdGUgfX08L3A+XHJcblxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ0biBvZiBhZGRCdXR0b25Db25maWdzOyB0cmFja0J5OiB0cmFja0J5SWR4XCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLWdlbmVyaWMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWJ0bi52aXNpYmxlIHx8IGJ0bi52aXNpYmxlID09PSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW2ljb25dPVwiYnRuLmljb25cIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiYnRuLmxhYmVsIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiYnRuLnZhcmlhbnRcIlxyXG4gICAgICAgICAgICAgICAgICBbc2l6ZV09XCJidG4uc2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFttb2RlbF09XCJidG4uc3BsaXRBY3Rpb25zXCJcclxuICAgICAgICAgICAgICAgICAgW3Blcm1pc3Npb25dPVwiYnRuLnBlcm1pc3Npb25cIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJvbkFkZE5ldy5lbWl0KClcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTJcIlxyXG4gICAgICAgICAgICAgICAgPjwvbGliLWdlbmVyaWMtYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDwhLS0gVGFibGUgaGVhZGVyIC0tPlxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHVtbnM+XHJcbiAgICAgICAgPHRyIGNsYXNzPVwiYmctZ3JheS0yMDAgc3RpY2t5IHRvcC0wIHotMTBcIj5cclxuICAgICAgICAgIDx0aCAqbmdJZj1cInNob3dSb3dTZWxlY3Rpb25DaGVja2JveFwiIHN0eWxlPVwid2lkdGg6IDJyZW1cIj5cclxuICAgICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveD48L3AtdGFibGVIZWFkZXJDaGVja2JveD5cclxuICAgICAgICAgIDwvdGg+XHJcbiA8dGggKm5nSWY9XCJhY3Rpb25zLmxlbmd0aCA+IDAgJiYgYWN0aW9uc1Bvc2l0aW9uID09PSAnc3RhcnQnXCIgY2xhc3M9XCJweC00IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWNlbnRlciBzdGlja3kgcmlnaHQtMFwiPlxyXG4gICAgICAgICAgICB7eyAnKicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XHJcbiAgICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLmtleVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJweC00IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJjb2wucHJvcHM/LnRhYmxlPy5wcm9wcz8ud2lkdGggfHwgJzE1MHB4J1wiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7eyBjb2wucHJvcHM/LmxhYmVsIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgPHAtc29ydEljb24gW2ZpZWxkXT1cImNvbC5rZXlcIj48L3Atc29ydEljb24+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8dGggKm5nSWY9XCJhY3Rpb25zLmxlbmd0aCA+IDAgJiYgYWN0aW9uc1Bvc2l0aW9uID09PSAnZW5kJ1wiIGNsYXNzPVwicHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1jZW50ZXIgc3RpY2t5IGxlZnQtMFwiPlxyXG4gICAgICAgICAgICB7eyAnKicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDwhLS0gVGFibGUgYm9keSAtLT5cclxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtcm93RGF0YSBsZXQtY29sdW1ucz1cImNvbHVtbnNcIiBsZXQtaT1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgPHRyIGNsYXNzPVwiZXZlbjpiZy1ncmF5LTUwIGhvdmVyOmJnLWdyYXktMTAwIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInJvd1NlbGVjdC5lbWl0KHJvd0RhdGEpXCI+XHJcbiAgICAgICAgICA8dGQgKm5nSWY9XCJzaG93Um93U2VsZWN0aW9uQ2hlY2tib3hcIiBzdHlsZT1cIndpZHRoOiAycmVtXCI+XHJcbiAgICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3ggW3ZhbHVlXT1cInJvd0RhdGFcIj48L3AtdGFibGVDaGVja2JveD5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8dGQgKm5nSWY9XCJhY3Rpb25zLmxlbmd0aCA+IDAgJiYgYWN0aW9uc1Bvc2l0aW9uID09PSAnc3RhcnQnXCIgY2xhc3M9XCJib3JkZXItdCBib3JkZXItZ3JheS0yMDAgcHgtNCBweS0yIHRleHQtY2VudGVyIHN0aWNreSByaWdodC0wIGJnLWdyYXktNTBcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhY3Rpb25zVGVtcGxhdGU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IHJvd0RhdGF9XCI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIHJvd0RhdGEucm93RmllbGRzOyBsZXQgY29sSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUZuXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJib3JkZXItdCBib3JkZXItZ3JheS0yMDAgcHgtNCBweS0yIHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1ncmF5LTcwMFwiXHJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2wucHJvcHM/LnRhYmxlPy5wcm9wcz8ud2lkdGhcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8Zm9ybWx5LWZvcm1cclxuICAgICAgICAgICAgICBbbW9kZWxdPVwicm93RGF0YVwiXHJcbiAgICAgICAgICAgICAgW2Zvcm1dPVwiZ2V0Rm9ybShpLCBjb2xJbmRleClcIlxyXG4gICAgICAgICAgICAgIFtmaWVsZHNdPVwiW2NvbF1cIlxyXG4gICAgICAgICAgICAgIFtvcHRpb25zXT1cIm9wdGlvbnNcIlxyXG4gICAgICAgICAgICA+PC9mb3JtbHktZm9ybT5cclxuICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgPHRkICpuZ0lmPVwiYWN0aW9ucy5sZW5ndGggPiAwICYmIGFjdGlvbnNQb3NpdGlvbiA9PT0gJ2VuZCdcIiBjbGFzcz1cImJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBweC00IHB5LTIgdGV4dC1jZW50ZXIgc3RpY2t5IGxlZnQtMCBiZy1ncmF5LTUwXCI+XHJcbiAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhY3Rpb25zVGVtcGxhdGU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IHJvd0RhdGF9XCI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcblxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbiAgICA8L3AtdGFibGU+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNhY3Rpb25zVGVtcGxhdGUgbGV0LXJvd0RhdGE+XHJcbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJhY3Rpb25zTW9kZVwiPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYnV0dG9ucydcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0IG9mIHNvcnRlZEFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdC5pY29uIHx8IGFjdC5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgcEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImFjdC5pY29uIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiKGFjdC5sYWJlbCA/PyAnJykgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJhY3Quc3R5bGVDbGFzcyB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1zbSBteC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BY3Rpb24oYWN0LCByb3dEYXRhKVwiID48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidtZW51J1wiPlxyXG4gICAgICAgICAgPGFwcC1hY3Rpb24tbWVudSBbaXRlbXNdPVwiZ2V0TWVudUl0ZW1zKHJvd0RhdGEpIHx8IFtdXCI+PC9hcHAtYWN0aW9uLW1lbnU+XHJcbiAgICAgICAgICAgIDwhLS0gPHAtbWVudSAjbWVudSBbbW9kZWxdPVwiZ2V0TWVudUl0ZW1zKHJvd0RhdGEpXCIgW3BvcHVwXT1cInRydWVcIiBhcHBlbmRUbz1cImJvZHlcIj48L3AtbWVudT5cclxuICAgICAgICAgICAgPHAtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBvdXRsaW5lZFxyXG4gICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWVsbGlwc2lzLXZcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXNtXCJcclxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm1lbnUudG9nZ2xlKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC9wLWJ1dHRvbj4gLS0+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy10YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXRhYmxlL3NyYy9lbGl0ZS5mcmFtZXdvcmstbmcudWkuY29yZS1nZW5lcmljLXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i2"],"mappings":"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"}
1
+ {"version":3,"file":"elite.framework-ng.ui.core-generic-table.mjs","sources":["../tmp-esm2022/generic-table/lib/generic-table-module.js","../tmp-esm2022/generic-table/lib/action-menu.component.js","../tmp-esm2022/generic-table/lib/generic-table.js","../tmp-esm2022/generic-table/elite.framework-ng.ui.core-generic-table.js"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from \"@angular/core\";\nexport class GenericTableModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericTableModule, imports: [CommonModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericTableModule, imports: [CommonModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericTableModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy10YWJsZS1tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy10YWJsZS9zcmMvbGliL2dlbmVyaWMtdGFibGUtbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUsvQyxNQUFNLE9BQU8sa0JBQWtCO3VHQUFsQixrQkFBa0I7d0dBQWxCLGtCQUFrQixZQUZuQixZQUFZO3dHQUVYLGtCQUFrQixZQUZuQixZQUFZOzsyRkFFWCxrQkFBa0I7a0JBSDlCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY1RhYmxlTW9kdWxlIHt9XG4iXX0=","import { CommonModule } from '@angular/common';\nimport { Component, Input, ViewChildren, QueryList } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { OverlayModule } from 'primeng/overlay';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"primeng/overlay\";\nexport class ActionMenuComponent {\n items = [];\n open = false;\n menuItems;\n menuPositionClass = 'right-0';\n toggle() {\n this.open = !this.open;\n // Optional: adjust position when opening\n // if (this.open) setTimeout(() => this.adjustMenuPosition());\n }\n adjustMenuPosition() {\n const menu = document.querySelector('.absolute.mt-2');\n if (!menu)\n return;\n const rect = menu.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n this.menuPositionClass = rect.right > viewportWidth ? 'left-0' : 'right-0';\n }\n onClick(item, event) {\n this.open = false;\n if (item.command) {\n item.command({ originalEvent: event, item });\n }\n }\n onOutsideClick(event) {\n const target = event.target;\n if (!target.closest('.inline-block')) {\n this.open = false;\n }\n }\n // ========================\n // Focus & Keyboard navigation\n // ========================\n focusFirst() {\n // Delay needed because overlay content is rendered asynchronously\n setTimeout(() => {\n this.menuItems.first?.nativeElement.focus();\n });\n }\n // -------------------\n // Keyboard on menu container\n // -------------------\n onMenuKeydown(event) {\n // Convert QueryList to array of HTMLButtonElement\n const items = this.menuItems.toArray().map(i => i.nativeElement);\n let index = items.indexOf(document.activeElement);\n if (index === -1)\n return;\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n index = (index + 1) % items.length;\n items[index].focus();\n break;\n case 'ArrowUp':\n event.preventDefault();\n index = (index - 1 + items.length) % items.length;\n items[index].focus();\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n items[index].click();\n break;\n case 'Escape':\n this.open = false;\n break;\n }\n }\n onTriggerKeydown(event) {\n // Open overlay via keyboard\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.open = true;\n this.focusFirst();\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ActionMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.8\", type: ActionMenuComponent, isStandalone: true, selector: \"app-action-menu\", inputs: { items: \"items\" }, viewQueries: [{ propertyName: \"menuItems\", predicate: [\"menuItem\"], descendants: true }], ngImport: i0, template: \"<div class=\\\"inline-block relative\\\">\\r\\n <button type=\\\"button\\\"\\r\\n class=\\\"p-ripple p-button p-button-icon-only p-button-outlined p-component\\\"\\r\\n #trigger\\r\\n (click)=\\\"toggle()\\\">\\r\\n <span class=\\\"pi pi-ellipsis-v\\\"></span>\\r\\n </button>\\r\\n\\r\\n <p-overlay [(visible)]=\\\"open\\\" [appendTo]=\\\"'body'\\\" (onShow)=\\\"focusFirst()\\\">\\r\\n <div class=\\\"w-48 rounded-lg shadow-lg bg-white border border-gray-200\\\"\\r\\n tabindex=\\\"0\\\"\\r\\n (keydown)=\\\"onMenuKeydown($event)\\\">\\r\\n <button #menuItem\\r\\n *ngFor=\\\"let item of items\\\"\\r\\n (click)=\\\"onClick(item, $event)\\\"\\r\\n class=\\\"flex items-center w-full text-left px-4 py-2 text-sm hover:bg-gray-100 focus:bg-gray-100 focus:outline-none\\\">\\r\\n <i *ngIf=\\\"item.icon\\\" [class]=\\\"item.icon + ' ml-2 mr-2 text-gray-500'\\\"></i>\\r\\n <span>{{ item.label }}</span>\\r\\n </button>\\r\\n </div>\\r\\n </p-overlay>\\r\\n</div>\\r\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"ngmodule\", type: OverlayModule }, { kind: \"component\", type: i2.Overlay, selector: \"p-overlay\", inputs: [\"visible\", \"mode\", \"style\", \"styleClass\", \"contentStyle\", \"contentStyleClass\", \"target\", \"autoZIndex\", \"baseZIndex\", \"showTransitionOptions\", \"hideTransitionOptions\", \"listener\", \"responsive\", \"options\", \"appendTo\", \"hostAttrSelector\"], outputs: [\"visibleChange\", \"onBeforeShow\", \"onShow\", \"onBeforeHide\", \"onHide\", \"onAnimationStart\", \"onAnimationDone\"] }, { kind: \"ngmodule\", type: ButtonModule }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ActionMenuComponent, decorators: [{\n type: Component,\n args: [{ selector: 'app-action-menu', imports: [CommonModule, OverlayModule, ButtonModule], template: \"<div class=\\\"inline-block relative\\\">\\r\\n <button type=\\\"button\\\"\\r\\n class=\\\"p-ripple p-button p-button-icon-only p-button-outlined p-component\\\"\\r\\n #trigger\\r\\n (click)=\\\"toggle()\\\">\\r\\n <span class=\\\"pi pi-ellipsis-v\\\"></span>\\r\\n </button>\\r\\n\\r\\n <p-overlay [(visible)]=\\\"open\\\" [appendTo]=\\\"'body'\\\" (onShow)=\\\"focusFirst()\\\">\\r\\n <div class=\\\"w-48 rounded-lg shadow-lg bg-white border border-gray-200\\\"\\r\\n tabindex=\\\"0\\\"\\r\\n (keydown)=\\\"onMenuKeydown($event)\\\">\\r\\n <button #menuItem\\r\\n *ngFor=\\\"let item of items\\\"\\r\\n (click)=\\\"onClick(item, $event)\\\"\\r\\n class=\\\"flex items-center w-full text-left px-4 py-2 text-sm hover:bg-gray-100 focus:bg-gray-100 focus:outline-none\\\">\\r\\n <i *ngIf=\\\"item.icon\\\" [class]=\\\"item.icon + ' ml-2 mr-2 text-gray-500'\\\"></i>\\r\\n <span>{{ item.label }}</span>\\r\\n </button>\\r\\n </div>\\r\\n </p-overlay>\\r\\n</div>\\r\\n\" }]\n }], propDecorators: { items: [{\n type: Input\n }], menuItems: [{\n type: ViewChildren,\n args: ['menuItem']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtdGFibGUvc3JjL2xpYi9hY3Rpb24tbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy10YWJsZS9zcmMvbGliL2FjdGlvbi1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBRXRGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFPaEQsTUFBTSxPQUFPLG1CQUFtQjtJQUNyQixLQUFLLEdBQWUsRUFBRSxDQUFDO0lBQ2hDLElBQUksR0FBRyxLQUFLLENBQUM7SUFFYSxTQUFTLENBQTRDO0lBRS9FLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztJQUU5QixNQUFNO1FBQ0osSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdkIseUNBQXlDO1FBQ3pDLDhEQUE4RDtJQUNoRSxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQWdCLENBQUM7UUFDckUsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBRWxCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzFDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFFeEMsSUFBSSxDQUFDLGlCQUFpQixH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QTVGVSxtQkFBbUI7MkZBQW5CLG1CQUFtQixpTUNYaEMsbTlCQXNCQSwyQ0RiWSxZQUFZLCtQQUFFLGFBQWEsMmNBQUUsWUFBWTs7MkZBRXhDLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUIsV0FFbEIsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQzs4QkFHM0MsS0FBSztzQkFBYixLQUFLO2dCQUdvQixTQUFTO3NCQUFsQyxZQUFZO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9vdmVybGF5JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWFjdGlvbi1tZW51JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uLW1lbnUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE92ZXJsYXlNb2R1bGUsIEJ1dHRvbk1vZHVsZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY3Rpb25NZW51Q29tcG9uZW50IHtcclxuICBASW5wdXQoKSBpdGVtczogTWVudUl0ZW1bXSA9IFtdO1xyXG4gIG9wZW4gPSBmYWxzZTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignbWVudUl0ZW0nKSBtZW51SXRlbXMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD4+O1xyXG5cclxuICBtZW51UG9zaXRpb25DbGFzcyA9ICdyaWdodC0wJztcclxuXHJcbiAgdG9nZ2xlKCkge1xyXG4gICAgdGhpcy5vcGVuID0gIXRoaXMub3BlbjtcclxuICAgIC8vIE9wdGlvbmFsOiBhZGp1c3QgcG9zaXRpb24gd2hlbiBvcGVuaW5nXHJcbiAgICAvLyBpZiAodGhpcy5vcGVuKSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYWRqdXN0TWVudVBvc2l0aW9uKCkpO1xyXG4gIH1cclxuXHJcbiAgYWRqdXN0TWVudVBvc2l0aW9uKCkge1xyXG4gICAgY29uc3QgbWVudSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hYnNvbHV0ZS5tdC0yJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAoIW1lbnUpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCByZWN0ID0gbWVudS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuXHJcbiAgICB0aGlzLm1lbnVQb3NpdGlvbkNsYXNzID0gcmVjdC5yaWdodCA+IHZpZXdwb3J0V2lkdGggPyAnbGVmdC0wJyA6ICdyaWdodC0wJztcclxuICB9XHJcblxyXG4gIG9uQ2xpY2soaXRlbTogTWVudUl0ZW0sIGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICB0aGlzLm9wZW4gPSBmYWxzZTtcclxuICAgIGlmIChpdGVtLmNvbW1hbmQpIHtcclxuICAgICAgaXRlbS5jb21tYW5kKHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIGl0ZW0gfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk91dHNpZGVDbGljayhldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKCF0YXJnZXQuY2xvc2VzdCgnLmlubGluZS1ibG9jaycpKSB7XHJcbiAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gIC8vIEZvY3VzICYgS2V5Ym9hcmQgbmF2aWdhdGlvblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gIGZvY3VzRmlyc3QoKSB7XHJcbiAgICAvLyBEZWxheSBuZWVkZWQgYmVjYXVzZSBvdmVybGF5IGNvbnRlbnQgaXMgcmVuZGVyZWQgYXN5bmNocm9ub3VzbHlcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLm1lbnVJdGVtcy5maXJzdD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gS2V5Ym9hcmQgb24gbWVudSBjb250YWluZXJcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiBvbk1lbnVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgLy8gQ29udmVydCBRdWVyeUxpc3QgdG8gYXJyYXkgb2YgSFRNTEJ1dHRvbkVsZW1lbnRcclxuICBjb25zdCBpdGVtczogSFRNTEJ1dHRvbkVsZW1lbnRbXSA9IHRoaXMubWVudUl0ZW1zLnRvQXJyYXkoKS5tYXAoaSA9PiBpLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEJ1dHRvbkVsZW1lbnQpO1xyXG5cclxuICBsZXQgaW5kZXggPSBpdGVtcy5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEJ1dHRvbkVsZW1lbnQpO1xyXG4gIGlmIChpbmRleCA9PT0gLTEpIHJldHVybjtcclxuXHJcbiAgc3dpdGNoIChldmVudC5rZXkpIHtcclxuICAgIGNhc2UgJ0Fycm93RG93bic6XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJSBpdGVtcy5sZW5ndGg7XHJcbiAgICAgIGl0ZW1zW2luZGV4XS5mb2N1cygpO1xyXG4gICAgICBicmVhaztcclxuXHJcbiAgICBjYXNlICdBcnJvd1VwJzpcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgaW5kZXggPSAoaW5kZXggLSAxICsgaXRlbXMubGVuZ3RoKSAlIGl0ZW1zLmxlbmd0aDtcclxuICAgICAgaXRlbXNbaW5kZXhdLmZvY3VzKCk7XHJcbiAgICAgIGJyZWFrO1xyXG5cclxuICAgIGNhc2UgJ0VudGVyJzpcclxuICAgIGNhc2UgJyAnOlxyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBpdGVtc1tpbmRleF0uY2xpY2soKTtcclxuICAgICAgYnJlYWs7XHJcblxyXG4gICAgY2FzZSAnRXNjYXBlJzpcclxuICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XHJcbiAgICAgIGJyZWFrO1xyXG4gIH1cclxufVxyXG5cclxuXHJcblxyXG4gIG9uVHJpZ2dlcktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIC8vIE9wZW4gb3ZlcmxheSB2aWEga2V5Ym9hcmRcclxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICcgJykge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLm9wZW4gPSB0cnVlO1xyXG4gICAgICB0aGlzLmZvY3VzRmlyc3QoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImlubGluZS1ibG9jayByZWxhdGl2ZVwiPlxyXG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBjbGFzcz1cInAtcmlwcGxlIHAtYnV0dG9uIHAtYnV0dG9uLWljb24tb25seSBwLWJ1dHRvbi1vdXRsaW5lZCBwLWNvbXBvbmVudFwiXHJcbiAgICAgICAgICAjdHJpZ2dlclxyXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZSgpXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cInBpIHBpLWVsbGlwc2lzLXZcIj48L3NwYW4+XHJcbiAgPC9idXR0b24+XHJcblxyXG4gIDxwLW92ZXJsYXkgWyh2aXNpYmxlKV09XCJvcGVuXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiIChvblNob3cpPVwiZm9jdXNGaXJzdCgpXCI+XHJcbiAgIDxkaXYgY2xhc3M9XCJ3LTQ4IHJvdW5kZWQtbGcgc2hhZG93LWxnIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDBcIlxyXG4gICAgICAgICB0YWJpbmRleD1cIjBcIlxyXG4gICAgICAgICAoa2V5ZG93bik9XCJvbk1lbnVLZXlkb3duKCRldmVudClcIj5cclxuICAgICAgPGJ1dHRvbiAjbWVudUl0ZW1cclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2soaXRlbSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciB3LWZ1bGwgdGV4dC1sZWZ0IHB4LTQgcHktMiB0ZXh0LXNtIGhvdmVyOmJnLWdyYXktMTAwIGZvY3VzOmJnLWdyYXktMTAwIGZvY3VzOm91dGxpbmUtbm9uZVwiPlxyXG4gICAgICAgIDxpICpuZ0lmPVwiaXRlbS5pY29uXCIgW2NsYXNzXT1cIml0ZW0uaWNvbiArICcgbWwtMiBtci0yIHRleHQtZ3JheS01MDAnXCI+PC9pPlxyXG4gICAgICAgIDxzcGFuPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9wLW92ZXJsYXk+XHJcbjwvZGl2PlxyXG4iXX0=","import { Component, Input, Output, EventEmitter, ViewChild, inject } from '@angular/core';\nimport { Table } from 'primeng/table';\nimport { CommonModule, NgForOf, NgIf } from '@angular/common';\nimport { TableModule } from 'primeng/table';\nimport { ButtonModule, Button } from 'primeng/button';\nimport { MenuModule, Menu } from 'primeng/menu';\nimport { TranslateModule, TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { FormlyField, FormlyForm } from '@ngx-formly/core';\nimport { FormGroup } from '@angular/forms';\nimport { cloneDeep } from 'lodash';\nimport { GenericButton } from '@elite.framework/ng.ui.core/generic-button';\nimport { PermissionsService } from '@elite.framework/ng.core/services';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { ActionMenuComponent } from './action-menu.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"primeng/table\";\nimport * as i3 from \"primeng/api\";\nimport * as i4 from \"primeng/button\";\nimport * as i5 from \"@ngx-translate/core\";\nexport class GenericTable {\n translateService = inject(TranslateService);\n permissionsService = inject(PermissionsService);\n dt;\n data = [];\n data_ = [];\n columns = [];\n processedFields = [];\n columns_ = [];\n loading = false;\n actions = [];\n actionsPosition = 'end';\n actionsMode = 'buttons';\n first = 0;\n rows = 10;\n totalRecords = 0;\n sortField;\n sortOrder = 1;\n globalFilterFields = [];\n action = new EventEmitter();\n pageChange = new EventEmitter();\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onAddNew = new EventEmitter();\n addButtonConfigs = [];\n scrollHeight = '400px';\n // **جديد**: تمكين اختيار الصفوف\n /** فعّل اختيار الصفين single/multiple */\n rowSelectable = true;\n /** يحتفظ بالصف المحدد */\n //@Input() selection: T | T[] | null = null;\n // هذا سيكون مرتبطًا بـ [(selection)] في p-table\n _selection = null;\n get selection() {\n return this._selection;\n }\n set selection(val) {\n this._selection = val;\n // لا تُصدر الحدث هنا، بل في onInternalSelectionChange فقط\n }\n trackByIdx(index, item) {\n return index;\n }\n /** يصدر الصف المحدد عند النقر */\n rowSelect = new EventEmitter();\n /** يصدر الصفوف المحددة عند التغيير (للربط الثنائي) */\n selectionChange = new EventEmitter();\n /** جديد: التحكم بظهور الـ paginator */\n paginator = true;\n form = new FormGroup({});\n options = {};\n // **جديد**: يتحكم بإظهار عمود اختيار الصفوف (checkboxes)\n /** يتحكم في إظهار عمود اختيار الصفوف المتعددة بواسطة checkboxes */\n showRowSelectionCheckbox = false;\n onInternalSelectionChange(event) {\n if ('data' in event) {\n // Row select/unselect (single أو multiple)\n if (Array.isArray(this._selection)) {\n this._selection = [...this._selection]; // تحديث نسخة المصفوفة عند متعدد\n }\n else {\n this._selection = event.data; // اختيار فردي\n }\n }\n else if ('checked' in event) {\n // Header checkbox toggle\n this._selection = event.checked ? [...this.data] : [];\n }\n this.selectionChange.emit(this._selection);\n }\n customSort(event) {\n event.data?.sort((data1, data2) => {\n const value1 = this.resolveFieldData(data1, event.field ?? '');\n const value2 = this.resolveFieldData(data2, event.field ?? '');\n let result = 0;\n if (value1 == null && value2 != null)\n result = -1;\n else if (value1 != null && value2 == null)\n result = 1;\n else if (value1 == null && value2 == null)\n result = 0;\n else if (typeof value1 === 'string' && typeof value2 === 'string')\n result = value1.localeCompare(value2);\n else\n result = value1 < value2 ? -1 : value1 > value2 ? 1 : 0;\n return (event.order ?? 1) * result;\n });\n }\n resolveFieldData(data, field) {\n if (!field)\n return null;\n if (field.indexOf('.') === -1)\n return data[field];\n return field.split('.').reduce((obj, prop) => (obj ? obj[prop] : null), data);\n }\n // getOrderedColumns(): TableColumn[] {\n // return [...this.columns,\n // ...(this.showRowSelectionCheckbox ? [{ type: 'selection', order: -1 }] : []),\n // { type: 'operations', label: 'OPERATIONS', order: 999 }\n // ].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n // }\n get sortedActions() {\n return this.actions\n .filter(action => (action.visible !== false) && // ✅ يخفي أي زر `visible = false`\n (!action.permissions?.length ||\n action.permissions.every(p => this.permissionsService.isGranted(p))))\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n }\n get sortedActions2() {\n return this.actions\n .filter(action => !action.permissions?.length || // no permissions → allow\n action.permissions.every(p => this.permissionsService.isGranted(p)) // all granted\n )\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n }\n onAction(act, row) {\n if (act.action) {\n act.action(row);\n }\n else {\n this.action.emit({ name: act.name, row });\n }\n }\n // cloneField(field: any): any {\n // if (field === null || typeof field !== 'object') {\n // return field;\n // }\n // if (Array.isArray(field)) {\n // // preserve `this` context\n // return field.map((item) => this.cloneField(item));\n // }\n // const cloned: any = {};\n // for (const key of Object.keys(field)) {\n // cloned[key] = this.cloneField(field[key]);\n // }\n // return cloned;\n // }\n // Use a map to store form groups for each row and column\n cellForms = new Map();\n forms = new FormGroup({}); // A main form for the table\n // Refactored getForm to return an existing form instance\n getForm(rowIndex, colIndex) {\n const key = `${rowIndex}_${colIndex}`;\n let form = this.cellForms.get(key);\n if (!form) {\n form = new FormGroup({});\n this.cellForms.set(key, form);\n }\n return form;\n }\n trackByFn(index, item) {\n return index; // or a unique identifier from your data\n }\n // This method is called whenever any @Input() property changes.\n ngOnChanges(changes) {\n // Check if the 'data' property has changed.\n if (changes['data']) {\n const currentData = changes['data'].currentValue;\n const previousData = changes['data'].previousValue;\n // For example, you can call a method to re-render or process the data.\n this.refreshData();\n }\n }\n onLazyLoad(event) {\n // Reinitialize forms on new data load\n // this.cellForms.clear();\n this.refreshData();\n this.pageChange.emit(event);\n }\n applyFilter(filters) {\n // if (field) {\n // this.dt.filter(global, field, 'contains');\n // } else {\n // this.dt.filterGlobal(global, 'contains');\n // }\n }\n refreshData() {\n this.data_ = this.data.map(rowData => {\n // Create a new array of fields for each row\n const rowFields = this.columns.map(col => {\n return cloneDeep(col);\n });\n // Attach the unique fields to the row data object\n return {\n ...rowData,\n rowFields: rowFields\n };\n });\n }\n getMenuItems(row) {\n return this.sortedActions.map(act => ({\n label: this.translateService.instant(act.label ?? ''),\n icon: act.icon,\n command: () => this.onAction(act, row),\n styleClass: act.styleClass\n }));\n }\n // **جديد**: يتم إطلاق هذا عند اختيار صف\n onRowSelect(event) {\n // debugger\n if (event.data) {\n this.rowSelect.emit(event.data);\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericTable, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.8\", type: GenericTable, isStandalone: true, selector: \"lib-generic-table\", inputs: { data: \"data\", columns: \"columns\", loading: \"loading\", actions: \"actions\", actionsPosition: \"actionsPosition\", actionsMode: \"actionsMode\", first: \"first\", rows: \"rows\", totalRecords: \"totalRecords\", sortField: \"sortField\", sortOrder: \"sortOrder\", globalFilterFields: \"globalFilterFields\", addButtonConfigs: \"addButtonConfigs\", scrollHeight: \"scrollHeight\", rowSelectable: \"rowSelectable\", selection: \"selection\", paginator: \"paginator\", showRowSelectionCheckbox: \"showRowSelectionCheckbox\" }, outputs: { action: \"action\", pageChange: \"pageChange\", onAddNew: \"onAddNew\", rowSelect: \"rowSelect\", selectionChange: \"selectionChange\" }, viewQueries: [{ propertyName: \"dt\", first: true, predicate: [\"dt\"], descendants: true }], usesOnChanges: true, ngImport: i0, template: \"<div class=\\\"flex flex-col h-screen\\\" style=\\\" height: 60vh;\\\">\\r\\n <div class=\\\"flex-1 border rounded-lg overflow-hidden flex flex-col\\\">\\r\\n\\r\\n <!-- PrimeNG Table -->\\r\\n <p-table #dt\\r\\n [value]=\\\"data_\\\"\\r\\n [columns]=\\\"columns\\\"\\r\\n [lazy]=\\\"true\\\"\\r\\n [paginator]=\\\"false\\\"\\r\\n [rows]=\\\"rows\\\"\\r\\n [first]=\\\"first\\\"\\r\\n [totalRecords]=\\\"totalRecords\\\"\\r\\n [sortField]=\\\"sortField\\\"\\r\\n [sortOrder]=\\\"sortOrder\\\"\\r\\n (onLazyLoad)=\\\"onLazyLoad($event)\\\"\\r\\n [globalFilterFields]=\\\"globalFilterFields\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n [scrollable]=\\\"true\\\"\\r\\n scrollHeight=\\\"flex\\\"\\r\\n [selectionMode]=\\\"showRowSelectionCheckbox ? 'multiple' : (rowSelectable ? 'single' : undefined)\\\"\\r\\n [(selection)]=\\\"_selection\\\"\\r\\n (onRowSelect)=\\\"onInternalSelectionChange($event)\\\"\\r\\n (onRowUnselect)=\\\"onInternalSelectionChange($event)\\\"\\r\\n (onHeaderCheckboxToggle)=\\\"onInternalSelectionChange($event)\\\"\\r\\n tableLayout=\\\"fixed\\\"\\r\\n [customSort]=\\\"false\\\"\\r\\n (sortFunction)=\\\"customSort($event)\\\"\\r\\n class=\\\"flex-1 overflow-auto\\\"\\r\\n >\\r\\n\\r\\n <!-- Empty message -->\\r\\n <ng-template pTemplate=\\\"emptymessage\\\">\\r\\n <tr>\\r\\n <td colspan=\\\"10\\\">\\r\\n <div class=\\\"flex flex-col items-center justify-center py-10 text-center w-full\\\">\\r\\n <i class=\\\"pi pi-inbox text-4xl text-gray-400 mb-4\\\"></i>\\r\\n <p class=\\\"text-gray-500 mb-4\\\">{{ 'NO_DATA_FOUND' | translate }}</p>\\r\\n\\r\\n <ng-container *ngFor=\\\"let btn of addButtonConfigs; trackBy: trackByIdx\\\">\\r\\n <lib-generic-button\\r\\n *ngIf=\\\"!btn.visible || btn.visible === true\\\"\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"onAddNew.emit()\\\"\\r\\n class=\\\"mb-2\\\"\\r\\n ></lib-generic-button>\\r\\n </ng-container>\\r\\n </div>\\r\\n </td>\\r\\n </tr>\\r\\n </ng-template>\\r\\n\\r\\n <!-- Table header -->\\r\\n <ng-template pTemplate=\\\"header\\\" let-columns>\\r\\n <tr class=\\\"bg-gray-200 sticky top-0 z-10\\\">\\r\\n <th *ngIf=\\\"showRowSelectionCheckbox\\\" style=\\\"width: 2rem\\\">\\r\\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\\r\\n </th>\\r\\n <th *ngIf=\\\"actions.length > 0 && actionsPosition === 'start'\\\" class=\\\"px-4 py-2 text-sm font-medium text-center sticky right-0\\\">\\r\\n {{ '*' | translate }}\\r\\n </th>\\r\\n <ng-container *ngFor=\\\"let col of columns; trackBy: trackByFn\\\">\\r\\n <th\\r\\n [pSortableColumn]=\\\"col.key\\\"\\r\\n class=\\\"px-4 py-2 text-sm font-medium text-center\\\"\\r\\n [style.min-width]=\\\"col.props?.table?.props?.width || '150px'\\\"\\r\\n >\\r\\n {{ col.props?.label | translate }}\\r\\n <p-sortIcon [field]=\\\"col.key\\\"></p-sortIcon>\\r\\n </th>\\r\\n </ng-container>\\r\\n\\r\\n <th *ngIf=\\\"actions.length > 0 && actionsPosition === 'end'\\\" class=\\\"px-4 py-2 text-sm font-medium text-center sticky left-0\\\">\\r\\n {{ '*' | translate }}\\r\\n </th>\\r\\n </tr>\\r\\n </ng-template>\\r\\n\\r\\n <!-- Table body -->\\r\\n <ng-template pTemplate=\\\"body\\\" let-rowData let-columns=\\\"columns\\\" let-i=\\\"rowIndex\\\">\\r\\n <tr class=\\\"even:bg-gray-50 hover:bg-gray-100 cursor-pointer\\\" (click)=\\\"rowSelect.emit(rowData)\\\">\\r\\n <td *ngIf=\\\"showRowSelectionCheckbox\\\" style=\\\"width: 2rem\\\">\\r\\n <p-tableCheckbox [value]=\\\"rowData\\\"></p-tableCheckbox>\\r\\n </td>\\r\\n <td *ngIf=\\\"actions.length > 0 && actionsPosition === 'start'\\\" class=\\\"border-t border-gray-200 px-4 py-2 text-center sticky right-0 bg-gray-50\\\">\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"actionsTemplate; context: {$implicit: rowData}\\\">\\r\\n </ng-container>\\r\\n\\r\\n </td>\\r\\n\\r\\n <td\\r\\n *ngFor=\\\"let col of rowData.rowFields; let colIndex = index; trackBy: trackByFn\\\"\\r\\n class=\\\"border-t border-gray-200 px-4 py-2 text-center text-sm text-gray-700\\\"\\r\\n [style.width]=\\\"col.props?.table?.props?.width\\\"\\r\\n >\\r\\n <formly-form\\r\\n [model]=\\\"rowData\\\"\\r\\n [form]=\\\"getForm(i, colIndex)\\\"\\r\\n [fields]=\\\"[col]\\\"\\r\\n [options]=\\\"options\\\"\\r\\n ></formly-form>\\r\\n </td>\\r\\n\\r\\n <td *ngIf=\\\"actions.length > 0 && actionsPosition === 'end'\\\" class=\\\"border-t border-gray-200 px-4 py-2 text-center sticky left-0 bg-gray-50\\\">\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"actionsTemplate; context: {$implicit: rowData}\\\">\\r\\n </ng-container>\\r\\n\\r\\n </td>\\r\\n </tr>\\r\\n\\r\\n </ng-template>\\r\\n\\r\\n\\r\\n </p-table>\\r\\n </div>\\r\\n</div>\\r\\n\\r\\n<ng-template #actionsTemplate let-rowData>\\r\\n <ng-container [ngSwitch]=\\\"actionsMode\\\">\\r\\n\\r\\n <ng-container *ngSwitchCase=\\\"'buttons'\\\">\\r\\n <ng-container *ngFor=\\\"let act of sortedActions\\\">\\r\\n <button\\r\\n *ngIf=\\\"act.icon || act.label\\\"\\r\\n pButton\\r\\n [icon]=\\\"act.icon || ''\\\"\\r\\n [label]=\\\"(act.label ?? '') | translate\\\"\\r\\n [class]=\\\"act.styleClass || ''\\\"\\r\\n class=\\\"p-button-sm mx-1\\\"\\r\\n (click)=\\\"onAction(act, rowData)\\\" ></button>\\r\\n </ng-container>\\r\\n </ng-container>\\r\\n\\r\\n <ng-container *ngSwitchCase=\\\"'menu'\\\">\\r\\n <app-action-menu [items]=\\\"getMenuItems(rowData) || []\\\"></app-action-menu>\\r\\n <!-- <p-menu #menu [model]=\\\"getMenuItems(rowData)\\\" [popup]=\\\"true\\\" appendTo=\\\"body\\\"></p-menu>\\r\\n <p-button\\r\\n outlined\\r\\n icon=\\\"pi pi-ellipsis-v\\\"\\r\\n class=\\\"p-button-text p-button-sm\\\"\\r\\n (onClick)=\\\"menu.toggle($event)\\\"\\r\\n ></p-button> -->\\r\\n </ng-container>\\r\\n\\r\\n </ng-container>\\r\\n</ng-template>\\r\\n\\r\\n\", styles: [\".custom-button-medium{font-size:1.1rem;width:2.5rem;height:2.5rem;line-height:2.5rem;padding:0}.custom-button-gray{color:#333;background-color:transparent;border:none}.custom-button-gray:hover{background-color:#eee;color:#000}.icon-delete{color:red!important}.icon-edit{color:#333}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i1.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i1.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"ngmodule\", type: TableModule }, { kind: \"component\", type: i2.Table, selector: \"p-table\", inputs: [\"frozenColumns\", \"frozenValue\", \"styleClass\", \"tableStyle\", \"tableStyleClass\", \"paginator\", \"pageLinks\", \"rowsPerPageOptions\", \"alwaysShowPaginator\", \"paginatorPosition\", \"paginatorStyleClass\", \"paginatorDropdownAppendTo\", \"paginatorDropdownScrollHeight\", \"currentPageReportTemplate\", \"showCurrentPageReport\", \"showJumpToPageDropdown\", \"showJumpToPageInput\", \"showFirstLastIcon\", \"showPageLinks\", \"defaultSortOrder\", \"sortMode\", \"resetPageOnSort\", \"selectionMode\", \"selectionPageOnly\", \"contextMenuSelection\", \"contextMenuSelectionMode\", \"dataKey\", \"metaKeySelection\", \"rowSelectable\", \"rowTrackBy\", \"lazy\", \"lazyLoadOnInit\", \"compareSelectionBy\", \"csvSeparator\", \"exportFilename\", \"filters\", \"globalFilterFields\", \"filterDelay\", \"filterLocale\", \"expandedRowKeys\", \"editingRowKeys\", \"rowExpandMode\", \"scrollable\", \"rowGroupMode\", \"scrollHeight\", \"virtualScroll\", \"virtualScrollItemSize\", \"virtualScrollOptions\", \"virtualScrollDelay\", \"frozenWidth\", \"contextMenu\", \"resizableColumns\", \"columnResizeMode\", \"reorderableColumns\", \"loading\", \"loadingIcon\", \"showLoader\", \"rowHover\", \"customSort\", \"showInitialSortBadge\", \"exportFunction\", \"exportHeader\", \"stateKey\", \"stateStorage\", \"editMode\", \"groupRowsBy\", \"size\", \"showGridlines\", \"stripedRows\", \"groupRowsByOrder\", \"responsiveLayout\", \"breakpoint\", \"paginatorLocale\", \"value\", \"columns\", \"first\", \"rows\", \"totalRecords\", \"sortField\", \"sortOrder\", \"multiSortMeta\", \"selection\", \"selectAll\"], outputs: [\"contextMenuSelectionChange\", \"selectAllChange\", \"selectionChange\", \"onRowSelect\", \"onRowUnselect\", \"onPage\", \"onSort\", \"onFilter\", \"onLazyLoad\", \"onRowExpand\", \"onRowCollapse\", \"onContextMenuSelect\", \"onColResize\", \"onColReorder\", \"onRowReorder\", \"onEditInit\", \"onEditComplete\", \"onEditCancel\", \"onHeaderCheckboxToggle\", \"sortFunction\", \"firstChange\", \"rowsChange\", \"onStateSave\", \"onStateRestore\"] }, { kind: \"directive\", type: i3.PrimeTemplate, selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { kind: \"directive\", type: i2.SortableColumn, selector: \"[pSortableColumn]\", inputs: [\"pSortableColumn\", \"pSortableColumnDisabled\"] }, { kind: \"component\", type: i2.SortIcon, selector: \"p-sortIcon\", inputs: [\"field\"] }, { kind: \"component\", type: i2.TableCheckbox, selector: \"p-tableCheckbox\", inputs: [\"value\", \"disabled\", \"required\", \"index\", \"inputId\", \"name\", \"ariaLabel\"] }, { kind: \"component\", type: i2.TableHeaderCheckbox, selector: \"p-tableHeaderCheckbox\", inputs: [\"disabled\", \"inputId\", \"name\", \"ariaLabel\"] }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"directive\", type: i4.ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"ngmodule\", type: MenuModule }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"component\", type: FormlyForm, selector: \"formly-form\", inputs: [\"form\", \"model\", \"fields\", \"options\"], outputs: [\"modelChange\"] }, { kind: \"component\", type: GenericButton, selector: \"lib-generic-button\", inputs: [\"model\", \"type\", \"icon\", \"label\", \"variant\", \"severity\", \"size\", \"iconPosition\", \"disabled\", \"loading\", \"ariaLabel\", \"extraClasses\", \"permission\"], outputs: [\"clicked\", \"itemClick\"] }, { kind: \"ngmodule\", type: PaginatorModule }, { kind: \"component\", type: ActionMenuComponent, selector: \"app-action-menu\", inputs: [\"items\"] }, { kind: \"pipe\", type: i5.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericTable, decorators: [{\n type: Component,\n args: [{ selector: 'lib-generic-table', imports: [CommonModule, TableModule, ButtonModule, MenuModule, NgForOf, TranslateModule, FormlyField, FormlyForm, NgIf, TranslatePipe, Menu, Button, GenericButton, PaginatorModule, ActionMenuComponent], template: \"<div class=\\\"flex flex-col h-screen\\\" style=\\\" height: 60vh;\\\">\\r\\n <div class=\\\"flex-1 border rounded-lg overflow-hidden flex flex-col\\\">\\r\\n\\r\\n <!-- PrimeNG Table -->\\r\\n <p-table #dt\\r\\n [value]=\\\"data_\\\"\\r\\n [columns]=\\\"columns\\\"\\r\\n [lazy]=\\\"true\\\"\\r\\n [paginator]=\\\"false\\\"\\r\\n [rows]=\\\"rows\\\"\\r\\n [first]=\\\"first\\\"\\r\\n [totalRecords]=\\\"totalRecords\\\"\\r\\n [sortField]=\\\"sortField\\\"\\r\\n [sortOrder]=\\\"sortOrder\\\"\\r\\n (onLazyLoad)=\\\"onLazyLoad($event)\\\"\\r\\n [globalFilterFields]=\\\"globalFilterFields\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n [scrollable]=\\\"true\\\"\\r\\n scrollHeight=\\\"flex\\\"\\r\\n [selectionMode]=\\\"showRowSelectionCheckbox ? 'multiple' : (rowSelectable ? 'single' : undefined)\\\"\\r\\n [(selection)]=\\\"_selection\\\"\\r\\n (onRowSelect)=\\\"onInternalSelectionChange($event)\\\"\\r\\n (onRowUnselect)=\\\"onInternalSelectionChange($event)\\\"\\r\\n (onHeaderCheckboxToggle)=\\\"onInternalSelectionChange($event)\\\"\\r\\n tableLayout=\\\"fixed\\\"\\r\\n [customSort]=\\\"false\\\"\\r\\n (sortFunction)=\\\"customSort($event)\\\"\\r\\n class=\\\"flex-1 overflow-auto\\\"\\r\\n >\\r\\n\\r\\n <!-- Empty message -->\\r\\n <ng-template pTemplate=\\\"emptymessage\\\">\\r\\n <tr>\\r\\n <td colspan=\\\"10\\\">\\r\\n <div class=\\\"flex flex-col items-center justify-center py-10 text-center w-full\\\">\\r\\n <i class=\\\"pi pi-inbox text-4xl text-gray-400 mb-4\\\"></i>\\r\\n <p class=\\\"text-gray-500 mb-4\\\">{{ 'NO_DATA_FOUND' | translate }}</p>\\r\\n\\r\\n <ng-container *ngFor=\\\"let btn of addButtonConfigs; trackBy: trackByIdx\\\">\\r\\n <lib-generic-button\\r\\n *ngIf=\\\"!btn.visible || btn.visible === true\\\"\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n [label]=\\\"btn.label | translate\\\"\\r\\n [variant]=\\\"btn.variant\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [model]=\\\"btn.splitActions\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"onAddNew.emit()\\\"\\r\\n class=\\\"mb-2\\\"\\r\\n ></lib-generic-button>\\r\\n </ng-container>\\r\\n </div>\\r\\n </td>\\r\\n </tr>\\r\\n </ng-template>\\r\\n\\r\\n <!-- Table header -->\\r\\n <ng-template pTemplate=\\\"header\\\" let-columns>\\r\\n <tr class=\\\"bg-gray-200 sticky top-0 z-10\\\">\\r\\n <th *ngIf=\\\"showRowSelectionCheckbox\\\" style=\\\"width: 2rem\\\">\\r\\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\\r\\n </th>\\r\\n <th *ngIf=\\\"actions.length > 0 && actionsPosition === 'start'\\\" class=\\\"px-4 py-2 text-sm font-medium text-center sticky right-0\\\">\\r\\n {{ '*' | translate }}\\r\\n </th>\\r\\n <ng-container *ngFor=\\\"let col of columns; trackBy: trackByFn\\\">\\r\\n <th\\r\\n [pSortableColumn]=\\\"col.key\\\"\\r\\n class=\\\"px-4 py-2 text-sm font-medium text-center\\\"\\r\\n [style.min-width]=\\\"col.props?.table?.props?.width || '150px'\\\"\\r\\n >\\r\\n {{ col.props?.label | translate }}\\r\\n <p-sortIcon [field]=\\\"col.key\\\"></p-sortIcon>\\r\\n </th>\\r\\n </ng-container>\\r\\n\\r\\n <th *ngIf=\\\"actions.length > 0 && actionsPosition === 'end'\\\" class=\\\"px-4 py-2 text-sm font-medium text-center sticky left-0\\\">\\r\\n {{ '*' | translate }}\\r\\n </th>\\r\\n </tr>\\r\\n </ng-template>\\r\\n\\r\\n <!-- Table body -->\\r\\n <ng-template pTemplate=\\\"body\\\" let-rowData let-columns=\\\"columns\\\" let-i=\\\"rowIndex\\\">\\r\\n <tr class=\\\"even:bg-gray-50 hover:bg-gray-100 cursor-pointer\\\" (click)=\\\"rowSelect.emit(rowData)\\\">\\r\\n <td *ngIf=\\\"showRowSelectionCheckbox\\\" style=\\\"width: 2rem\\\">\\r\\n <p-tableCheckbox [value]=\\\"rowData\\\"></p-tableCheckbox>\\r\\n </td>\\r\\n <td *ngIf=\\\"actions.length > 0 && actionsPosition === 'start'\\\" class=\\\"border-t border-gray-200 px-4 py-2 text-center sticky right-0 bg-gray-50\\\">\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"actionsTemplate; context: {$implicit: rowData}\\\">\\r\\n </ng-container>\\r\\n\\r\\n </td>\\r\\n\\r\\n <td\\r\\n *ngFor=\\\"let col of rowData.rowFields; let colIndex = index; trackBy: trackByFn\\\"\\r\\n class=\\\"border-t border-gray-200 px-4 py-2 text-center text-sm text-gray-700\\\"\\r\\n [style.width]=\\\"col.props?.table?.props?.width\\\"\\r\\n >\\r\\n <formly-form\\r\\n [model]=\\\"rowData\\\"\\r\\n [form]=\\\"getForm(i, colIndex)\\\"\\r\\n [fields]=\\\"[col]\\\"\\r\\n [options]=\\\"options\\\"\\r\\n ></formly-form>\\r\\n </td>\\r\\n\\r\\n <td *ngIf=\\\"actions.length > 0 && actionsPosition === 'end'\\\" class=\\\"border-t border-gray-200 px-4 py-2 text-center sticky left-0 bg-gray-50\\\">\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"actionsTemplate; context: {$implicit: rowData}\\\">\\r\\n </ng-container>\\r\\n\\r\\n </td>\\r\\n </tr>\\r\\n\\r\\n </ng-template>\\r\\n\\r\\n\\r\\n </p-table>\\r\\n </div>\\r\\n</div>\\r\\n\\r\\n<ng-template #actionsTemplate let-rowData>\\r\\n <ng-container [ngSwitch]=\\\"actionsMode\\\">\\r\\n\\r\\n <ng-container *ngSwitchCase=\\\"'buttons'\\\">\\r\\n <ng-container *ngFor=\\\"let act of sortedActions\\\">\\r\\n <button\\r\\n *ngIf=\\\"act.icon || act.label\\\"\\r\\n pButton\\r\\n [icon]=\\\"act.icon || ''\\\"\\r\\n [label]=\\\"(act.label ?? '') | translate\\\"\\r\\n [class]=\\\"act.styleClass || ''\\\"\\r\\n class=\\\"p-button-sm mx-1\\\"\\r\\n (click)=\\\"onAction(act, rowData)\\\" ></button>\\r\\n </ng-container>\\r\\n </ng-container>\\r\\n\\r\\n <ng-container *ngSwitchCase=\\\"'menu'\\\">\\r\\n <app-action-menu [items]=\\\"getMenuItems(rowData) || []\\\"></app-action-menu>\\r\\n <!-- <p-menu #menu [model]=\\\"getMenuItems(rowData)\\\" [popup]=\\\"true\\\" appendTo=\\\"body\\\"></p-menu>\\r\\n <p-button\\r\\n outlined\\r\\n icon=\\\"pi pi-ellipsis-v\\\"\\r\\n class=\\\"p-button-text p-button-sm\\\"\\r\\n (onClick)=\\\"menu.toggle($event)\\\"\\r\\n ></p-button> -->\\r\\n </ng-container>\\r\\n\\r\\n </ng-container>\\r\\n</ng-template>\\r\\n\\r\\n\", styles: [\".custom-button-medium{font-size:1.1rem;width:2.5rem;height:2.5rem;line-height:2.5rem;padding:0}.custom-button-gray{color:#333;background-color:transparent;border:none}.custom-button-gray:hover{background-color:#eee;color:#000}.icon-delete{color:red!important}.icon-edit{color:#333}\\n\"] }]\n }], propDecorators: { dt: [{\n type: ViewChild,\n args: ['dt']\n }], data: [{\n type: Input\n }], columns: [{\n type: Input\n }], loading: [{\n type: Input\n }], actions: [{\n type: Input\n }], actionsPosition: [{\n type: Input\n }], actionsMode: [{\n type: Input\n }], first: [{\n type: Input\n }], rows: [{\n type: Input\n }], totalRecords: [{\n type: Input\n }], sortField: [{\n type: Input\n }], sortOrder: [{\n type: Input\n }], globalFilterFields: [{\n type: Input\n }], action: [{\n type: Output\n }], pageChange: [{\n type: Output\n }], onAddNew: [{\n type: Output\n }], addButtonConfigs: [{\n type: Input\n }], scrollHeight: [{\n type: Input\n }], rowSelectable: [{\n type: Input\n }], selection: [{\n type: Input\n }], rowSelect: [{\n type: Output\n }], selectionChange: [{\n type: Output\n }], paginator: [{\n type: Input\n }], showRowSelectionCheckbox: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy10YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXRhYmxlL3NyYy9saWIvZ2VuZXJpYy10YWJsZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXRhYmxlL3NyYy9saWIvZ2VuZXJpYy10YWJsZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUE2QixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckgsT0FBTyxFQUFFLEtBQUssRUFBMkUsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkYsT0FBTyxFQUFFLFdBQVcsRUFBcUIsVUFBVSxFQUFxQixNQUFNLGtCQUFrQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsU0FBUyxFQUFXLE1BQU0sUUFBUSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFF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QkFBVSxlQUFlLCtCQUFhLFVBQVUsa0lBQW9DLGFBQWEsOFBBQUMsZUFBZSwrQkFBQyxtQkFBbUI7OzJGQUl2TCxZQUFZO2tCQU54QixTQUFTOytCQUNFLG1CQUFtQixXQUNwQixDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsZUFBZSxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDLGFBQWEsRUFBQyxlQUFlLEVBQUMsbUJBQW1CLENBQUM7OEJBU3BMLEVBQUU7c0JBQWxCLFNBQVM7dUJBQUMsSUFBSTtnQkFFTixJQUFJO3NCQUFaLEtBQUs7Z0JBRUssT0FBTztzQkFBZixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUdHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0EsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNLLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSUcsYUFBYTtzQkFBckIsS0FBSztnQkFTRixTQUFTO3NCQURaLEtBQUs7Z0JBWUksU0FBUztzQkFBbEIsTUFBTTtnQkFHRyxlQUFlO3NCQUF4QixNQUFNO2dCQUlFLFNBQVM7c0JBQWpCLEtBQUs7Z0JBT0csd0JBQXdCO3NCQUFoQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCwgIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1lbnVJdGVtLCBTb3J0RXZlbnQgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFRhYmxlLCBUYWJsZUhlYWRlckNoZWNrYm94VG9nZ2xlRXZlbnQsIFRhYmxlTGF6eUxvYWRFdmVudCwgVGFibGVSb3dTZWxlY3RFdmVudCB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nRm9yT2YsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUYWJsZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUsIEJ1dHRvbiB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgTWVudU1vZHVsZSwgTWVudSB9IGZyb20gJ3ByaW1lbmcvbWVudSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlUGlwZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtbHlGaWVsZCwgRm9ybWx5RmllbGRDb25maWcsIEZvcm1seUZvcm0sIEZvcm1seUZvcm1PcHRpb25zIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aW9uRGVmLCBCdXR0b25Db25maWcgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvbW9kZWxzJztcclxuaW1wb3J0IHsgY2xvbmVEZWVwLCBmb3JFYWNoIH0gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgR2VuZXJpY0J1dHRvbiB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcudWkuY29yZS9nZW5lcmljLWJ1dHRvbic7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25zU2VydmljZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFBhZ2luYXRvck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgQWN0aW9uTWVudUNvbXBvbmVudCB9IGZyb20gJy4vYWN0aW9uLW1lbnUuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWdlbmVyaWMtdGFibGUnLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRhYmxlTW9kdWxlLCBCdXR0b25Nb2R1bGUsIE1lbnVNb2R1bGUsIE5nRm9yT2YsVHJhbnNsYXRlTW9kdWxlLEZvcm1seUZpZWxkLEZvcm1seUZvcm0sIE5nSWYsIFRyYW5zbGF0ZVBpcGUsIE1lbnUsIEJ1dHRvbixHZW5lcmljQnV0dG9uLFBhZ2luYXRvck1vZHVsZSxBY3Rpb25NZW51Q29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJpYy10YWJsZS5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZ2VuZXJpYy10YWJsZS5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHZW5lcmljVGFibGU8VD4gIGltcGxlbWVudHMgT25DaGFuZ2Vze1xyXG5cclxuICB0cmFuc2xhdGVTZXJ2aWNlOlRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XHJcbiAgcGVybWlzc2lvbnNTZXJ2aWNlOlBlcm1pc3Npb25zU2VydmljZSA9IGluamVjdChQZXJtaXNzaW9uc1NlcnZpY2UpO1xyXG5cclxuQFZpZXdDaGlsZCgnZHQnKSBkdCE6IFRhYmxlO1xyXG5cclxuQElucHV0KCkgZGF0YTogYW55W10gPSBbXTtcclxuIGRhdGFfOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGNvbHVtbnM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcclxuICBwcm9jZXNzZWRGaWVsZHM6IGFueVtdID0gW107XHJcbiAgY29sdW1uc186IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcclxuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYWN0aW9uczogQWN0aW9uRGVmPFQ+W10gPSBbXTtcclxuICBASW5wdXQoKSBhY3Rpb25zUG9zaXRpb246ICdzdGFydCcgfCAnZW5kJyA9ICdlbmQnO1xyXG4gIEBJbnB1dCgpIGFjdGlvbnNNb2RlOiAnYnV0dG9ucycgfCAnbWVudScgPSAnYnV0dG9ucyc7XHJcbiAgQElucHV0KCkgZmlyc3QgPSAwO1xyXG4gIEBJbnB1dCgpIHJvd3MgPSAxMDtcclxuICBASW5wdXQoKSB0b3RhbFJlY29yZHMgPSAwO1xyXG4gIEBJbnB1dCgpIHNvcnRGaWVsZD86IHN0cmluZztcclxuICBASW5wdXQoKSBzb3J0T3JkZXI6IDEgfCAtMSA9IDE7XHJcbiAgQElucHV0KCkgZ2xvYmFsRmlsdGVyRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBAT3V0cHV0KCkgYWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IG5hbWU6IHN0cmluZzsgcm93OiBUIH0+KCk7XHJcbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlTGF6eUxvYWRFdmVudD4oKTtcclxuXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XHJcbiAgQE91dHB1dCgpIG9uQWRkTmV3ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbkBJbnB1dCgpIGFkZEJ1dHRvbkNvbmZpZ3M6IEJ1dHRvbkNvbmZpZ1tdID0gW107XHJcbiAgQElucHV0KCkgc2Nyb2xsSGVpZ2h0ID0gJzQwMHB4JztcclxuXHJcbiAvLyAqKtis2K/ZitivKio6INiq2YXZg9mK2YYg2KfYrtiq2YrYp9ixINin2YTYtdmB2YjZgVxyXG4gIC8qKiDZgdi52ZHZhCDYp9iu2KrZitin2LEg2KfZhNi12YHZitmGIHNpbmdsZS9tdWx0aXBsZSAqL1xyXG4gIEBJbnB1dCgpIHJvd1NlbGVjdGFibGUgPSB0cnVlO1xyXG4gIC8qKiDZitit2KrZgdi4INio2KfZhNi12YEg2KfZhNmF2K3Yr9ivICovXHJcbiAgLy9ASW5wdXQoKSBzZWxlY3Rpb246IFQgfCBUW10gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLy8g2YfYsNinINiz2YrZg9mI2YYg2YXYsdiq2KjYt9mL2Kcg2KjZgCBbKHNlbGVjdGlvbildINmB2YogcC10YWJsZVxyXG4gIF9zZWxlY3Rpb246IFQgfCBUW10gfCBudWxsID0gbnVsbDtcclxuXHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHNlbGVjdGlvbigpOiBUIHwgVFtdIHwgbnVsbCB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb247XHJcbiAgfVxyXG4gIHNldCBzZWxlY3Rpb24odmFsOiBUIHwgVFtdIHwgbnVsbCkge1xyXG4gICAgICB0aGlzLl9zZWxlY3Rpb24gPSB2YWw7XHJcbiAgICAgIC8vINmE2Kcg2KrZj9i12K/YsSDYp9mE2K3Yr9irINmH2YbYp9iMINio2YQg2YHZiiBvbkludGVybmFsU2VsZWN0aW9uQ2hhbmdlINmB2YLYt1xyXG4gIH1cclxuIHRyYWNrQnlJZHgoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KTogbnVtYmVyIHtcclxuICByZXR1cm4gaW5kZXg7XHJcbiB9XHJcbiAgLyoqINmK2LXYr9ixINin2YTYtdmBINin2YTZhdit2K/YryDYudmG2K8g2KfZhNmG2YLYsSAqL1xyXG4gIEBPdXRwdXQoKSByb3dTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XHJcblxyXG4gICAgIC8qKiDZiti12K/YsSDYp9mE2LXZgdmI2YEg2KfZhNmF2K3Yr9iv2Kkg2LnZhtivINin2YTYqti62YrZitixICjZhNmE2LHYqNi3INin2YTYq9mG2KfYptmKKSAqL1xyXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFQgfCBUW10gfCBudWxsPigpO1xyXG5cclxuXHJcbiAgIC8qKiDYrNiv2YrYrzog2KfZhNiq2K3Zg9mFINio2LjZh9mI2LEg2KfZhNmAIHBhZ2luYXRvciAqL1xyXG4gIEBJbnB1dCgpIHBhZ2luYXRvciA9IHRydWU7XHJcbmZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxub3B0aW9uczogRm9ybWx5Rm9ybU9wdGlvbnMgPSB7fTtcclxuXHJcblxyXG4gIC8vICoq2KzYr9mK2K8qKjog2YrYqtit2YPZhSDYqNil2LjZh9in2LEg2LnZhdmI2K8g2KfYrtiq2YrYp9ixINin2YTYtdmB2YjZgSAoY2hlY2tib3hlcylcclxuICAvKiog2YrYqtit2YPZhSDZgdmKINil2LjZh9in2LEg2LnZhdmI2K8g2KfYrtiq2YrYp9ixINin2YTYtdmB2YjZgSDYp9mE2YXYqti52K/Yr9ipINio2YjYp9iz2LfYqSBjaGVja2JveGVzICovXHJcbiAgQElucHV0KCkgc2hvd1Jvd1NlbGVjdGlvbkNoZWNrYm94ID0gZmFsc2U7XHJcblxyXG5cclxuICBvbkludGVybmFsU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBUYWJsZVJvd1NlbGVjdEV2ZW50PFQ+XHJcbiAgICB8IFRhYmxlSGVhZGVyQ2hlY2tib3hUb2dnbGVFdmVudCk6IHZvaWQge1xyXG4gIGlmICgnZGF0YScgaW4gZXZlbnQpIHtcclxuICAgIC8vIFJvdyBzZWxlY3QvdW5zZWxlY3QgKHNpbmdsZSDYo9mIIG11bHRpcGxlKVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5fc2VsZWN0aW9uKSkge1xyXG4gICAgICB0aGlzLl9zZWxlY3Rpb24gPSBbLi4udGhpcy5fc2VsZWN0aW9uXTsgLy8g2KrYrdiv2YrYqyDZhtiz2K7YqSDYp9mE2YXYtdmB2YjZgdipINi52YbYryDZhdiq2LnYr9ivXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9zZWxlY3Rpb24gPSBldmVudC5kYXRhIGFzIFQ7IC8vINin2K7YqtmK2KfYsSDZgdix2K/ZilxyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAoJ2NoZWNrZWQnIGluIGV2ZW50KSB7XHJcbiAgICAvLyBIZWFkZXIgY2hlY2tib3ggdG9nZ2xlXHJcbiAgICB0aGlzLl9zZWxlY3Rpb24gPSBldmVudC5jaGVja2VkID8gWy4uLnRoaXMuZGF0YV0gOiBbXTtcclxuICB9XHJcblxyXG4gIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0aW9uKTtcclxufVxyXG5cclxuXHJcblxyXG5jdXN0b21Tb3J0KGV2ZW50OiBTb3J0RXZlbnQpIHtcclxuICBldmVudC5kYXRhPy5zb3J0KChkYXRhMSwgZGF0YTIpID0+IHtcclxuICAgIGNvbnN0IHZhbHVlMSA9IHRoaXMucmVzb2x2ZUZpZWxkRGF0YShkYXRhMSwgZXZlbnQuZmllbGQgPz8gJycpO1xyXG4gICAgY29uc3QgdmFsdWUyID0gdGhpcy5yZXNvbHZlRmllbGREYXRhKGRhdGEyLCBldmVudC5maWVsZCA/PyAnJyk7XHJcblxyXG4gICAgbGV0IHJlc3VsdCA9IDA7XHJcbiAgICBpZiAodmFsdWUxID09IG51bGwgJiYgdmFsdWUyICE9IG51bGwpIHJlc3VsdCA9IC0xO1xyXG4gICAgZWxzZSBpZiAodmFsdWUxICE9IG51bGwgJiYgdmFsdWUyID09IG51bGwpIHJlc3VsdCA9IDE7XHJcbiAgICBlbHNlIGlmICh2YWx1ZTEgPT0gbnVsbCAmJiB2YWx1ZTIgPT0gbnVsbCkgcmVzdWx0ID0gMDtcclxuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZTEgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZTIgPT09ICdzdHJpbmcnKVxyXG4gICAgICByZXN1bHQgPSB2YWx1ZTEubG9jYWxlQ29tcGFyZSh2YWx1ZTIpO1xyXG4gICAgZWxzZSByZXN1bHQgPSB2YWx1ZTEgPCB2YWx1ZTIgPyAtMSA6IHZhbHVlMSA+IHZhbHVlMiA/IDEgOiAwO1xyXG5cclxuICAgIHJldHVybiAoZXZlbnQub3JkZXIgPz8gMSkgKiByZXN1bHQ7XHJcbiAgfSk7XHJcbn1cclxucmVzb2x2ZUZpZWxkRGF0YShkYXRhOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBhbnkge1xyXG4gIGlmICghZmllbGQpIHJldHVybiBudWxsO1xyXG4gIGlmIChmaWVsZC5pbmRleE9mKCcuJykgPT09IC0xKSByZXR1cm4gZGF0YVtmaWVsZF07XHJcbiAgcmV0dXJuIGZpZWxkLnNwbGl0KCcuJykucmVkdWNlKChvYmosIHByb3ApID0+IChvYmogPyBvYmpbcHJvcF0gOiBudWxsKSwgZGF0YSk7XHJcbn1cclxuXHJcbi8vIGdldE9yZGVyZWRDb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10ge1xyXG4vLyAgIHJldHVybiBbLi4udGhpcy5jb2x1bW5zLFxyXG4vLyAgICAgLi4uKHRoaXMuc2hvd1Jvd1NlbGVjdGlvbkNoZWNrYm94ID8gW3sgdHlwZTogJ3NlbGVjdGlvbicsIG9yZGVyOiAtMSB9XSA6IFtdKSxcclxuLy8gICAgIHsgdHlwZTogJ29wZXJhdGlvbnMnLCBsYWJlbDogJ09QRVJBVElPTlMnLCBvcmRlcjogOTk5IH1cclxuLy8gICBdLnNvcnQoKGEsIGIpID0+IChhLm9yZGVyID8/IDApIC0gKGIub3JkZXIgPz8gMCkpO1xyXG4vLyB9XHJcblxyXG5nZXQgc29ydGVkQWN0aW9ucygpOiBBY3Rpb25EZWY8VD5bXSB7XHJcbiAgcmV0dXJuIHRoaXMuYWN0aW9uc1xyXG4gICAgLmZpbHRlcihhY3Rpb24gPT5cclxuICAgICAgKGFjdGlvbi52aXNpYmxlICE9PSBmYWxzZSkgJiYgLy8g4pyFINmK2K7ZgdmKINij2Yog2LLYsSBgdmlzaWJsZSA9IGZhbHNlYFxyXG4gICAgICAoXHJcbiAgICAgICAgIWFjdGlvbi5wZXJtaXNzaW9ucz8ubGVuZ3RoIHx8XHJcbiAgICAgICAgYWN0aW9uLnBlcm1pc3Npb25zLmV2ZXJ5KHAgPT4gdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuaXNHcmFudGVkKHApKVxyXG4gICAgICApXHJcbiAgICApXHJcbiAgICAuc29ydCgoYSwgYikgPT4gKGEub3JkZXIgPz8gMCkgLSAoYi5vcmRlciA/PyAwKSk7XHJcbn1cclxuXHJcblxyXG5nZXQgc29ydGVkQWN0aW9uczIoKTogQWN0aW9uRGVmPFQ+W10ge1xyXG4gIHJldHVybiB0aGlzLmFjdGlvbnNcclxuICAgIC5maWx0ZXIoYWN0aW9uID0+XHJcbiAgICAgICFhY3Rpb24ucGVybWlzc2lvbnM/Lmxlbmd0aCB8fCAvLyBubyBwZXJtaXNzaW9ucyDihpIgYWxsb3dcclxuICAgICAgYWN0aW9uLnBlcm1pc3Npb25zLmV2ZXJ5KHAgPT4gdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuaXNHcmFudGVkKHApKSAvLyBhbGwgZ3JhbnRlZFxyXG4gICAgKVxyXG4gICAgLnNvcnQoKGEsIGIpID0+IChhLm9yZGVyID8/IDApIC0gKGIub3JkZXIgPz8gMCkpO1xyXG59XHJcblxyXG5cclxuIG9uQWN0aW9uKGFjdDogQWN0aW9uRGVmPFQ+LCByb3c6IFQpIHtcclxuICAgIGlmIChhY3QuYWN0aW9uKSB7XHJcbiAgICAgIGFjdC5hY3Rpb24ocm93KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWN0aW9uLmVtaXQoeyBuYW1lOiBhY3QubmFtZSwgcm93IH0pO1xyXG4gICAgfVxyXG4gIH1cclxuLy8gIGNsb25lRmllbGQoZmllbGQ6IGFueSk6IGFueSB7XHJcbi8vICAgaWYgKGZpZWxkID09PSBudWxsIHx8IHR5cGVvZiBmaWVsZCAhPT0gJ29iamVjdCcpIHtcclxuLy8gICAgIHJldHVybiBmaWVsZDtcclxuLy8gICB9XHJcblxyXG4vLyAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZCkpIHtcclxuLy8gICAgIC8vIHByZXNlcnZlIGB0aGlzYCBjb250ZXh0XHJcbi8vICAgICByZXR1cm4gZmllbGQubWFwKChpdGVtKSA9PiB0aGlzLmNsb25lRmllbGQoaXRlbSkpO1xyXG4vLyAgIH1cclxuLy8gICBjb25zdCBjbG9uZWQ6IGFueSA9IHt9O1xyXG4vLyAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGZpZWxkKSkge1xyXG4vLyAgICAgY2xvbmVkW2tleV0gPSB0aGlzLmNsb25lRmllbGQoZmllbGRba2V5XSk7XHJcbi8vICAgfVxyXG5cclxuLy8gICByZXR1cm4gY2xvbmVkO1xyXG4vLyB9XHJcblxyXG4gLy8gVXNlIGEgbWFwIHRvIHN0b3JlIGZvcm0gZ3JvdXBzIGZvciBlYWNoIHJvdyBhbmQgY29sdW1uXHJcbiAgcHJpdmF0ZSBjZWxsRm9ybXM6IE1hcDxzdHJpbmcsIEZvcm1Hcm91cD4gPSBuZXcgTWFwKCk7XHJcbiAgZm9ybXM6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pOyAvLyBBIG1haW4gZm9ybSBmb3IgdGhlIHRhYmxlXHJcblxyXG5cclxuICAvLyBSZWZhY3RvcmVkIGdldEZvcm0gdG8gcmV0dXJuIGFuIGV4aXN0aW5nIGZvcm0gaW5zdGFuY2VcclxuICBnZXRGb3JtKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBGb3JtR3JvdXAge1xyXG4gICAgY29uc3Qga2V5ID0gYCR7cm93SW5kZXh9XyR7Y29sSW5kZXh9YDtcclxuICAgIGxldCBmb3JtID0gdGhpcy5jZWxsRm9ybXMuZ2V0KGtleSk7XHJcblxyXG4gICAgaWYgKCFmb3JtKSB7XHJcbiAgICAgIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgdGhpcy5jZWxsRm9ybXMuc2V0KGtleSwgZm9ybSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybTtcclxuICB9XHJcbnRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcclxuICByZXR1cm4gaW5kZXg7IC8vIG9yIGEgdW5pcXVlIGlkZW50aWZpZXIgZnJvbSB5b3VyIGRhdGFcclxufVxyXG4gLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIGFueSBASW5wdXQoKSBwcm9wZXJ0eSBjaGFuZ2VzLlxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIC8vIENoZWNrIGlmIHRoZSAnZGF0YScgcHJvcGVydHkgaGFzIGNoYW5nZWQuXHJcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRhID0gY2hhbmdlc1snZGF0YSddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgY29uc3QgcHJldmlvdXNEYXRhID0gY2hhbmdlc1snZGF0YSddLnByZXZpb3VzVmFsdWU7XHJcblxyXG5cclxuICAgICAgLy8gRm9yIGV4YW1wbGUsIHlvdSBjYW4gY2FsbCBhIG1ldGhvZCB0byByZS1yZW5kZXIgb3IgcHJvY2VzcyB0aGUgZGF0YS5cclxuICAgICAgdGhpcy5yZWZyZXNoRGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiBvbkxhenlMb2FkKGV2ZW50OiBUYWJsZUxhenlMb2FkRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vIFJlaW5pdGlhbGl6ZSBmb3JtcyBvbiBuZXcgZGF0YSBsb2FkXHJcbiAgICAvLyB0aGlzLmNlbGxGb3Jtcy5jbGVhcigpO1xyXG4gIHRoaXMucmVmcmVzaERhdGEoKTtcclxuICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG5cclxuICBhcHBseUZpbHRlcihmaWx0ZXJzOiBhbnkpOiB2b2lkIHtcclxuICAgIC8vIGlmIChmaWVsZCkge1xyXG4gICAgLy8gICB0aGlzLmR0LmZpbHRlcihnbG9iYWwsIGZpZWxkLCAnY29udGFpbnMnKTtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIHRoaXMuZHQuZmlsdGVyR2xvYmFsKGdsb2JhbCwgJ2NvbnRhaW5zJyk7XHJcbiAgICAvLyB9XHJcblxyXG4gIH1cclxuICByZWZyZXNoRGF0YSgpe1xyXG4gICAgIHRoaXMuZGF0YV8gPSB0aGlzLmRhdGEubWFwKHJvd0RhdGEgPT4ge1xyXG4gICAgLy8gQ3JlYXRlIGEgbmV3IGFycmF5IG9mIGZpZWxkcyBmb3IgZWFjaCByb3dcclxuICAgIGNvbnN0IHJvd0ZpZWxkcyA9IHRoaXMuY29sdW1ucy5tYXAoY29sID0+IHtcclxuICAgICAgcmV0dXJuIGNsb25lRGVlcChjb2wpO1xyXG4gICAgfSk7XHJcbiAgICAvLyBBdHRhY2ggdGhlIHVuaXF1ZSBmaWVsZHMgdG8gdGhlIHJvdyBkYXRhIG9iamVjdFxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4ucm93RGF0YSxcclxuICAgICAgcm93RmllbGRzOiByb3dGaWVsZHNcclxuICAgIH07XHJcbiAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRNZW51SXRlbXMocm93OiBUKTogTWVudUl0ZW1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5zb3J0ZWRBY3Rpb25zLm1hcChhY3QgPT4gKHtcclxuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCBhY3QubGFiZWwgPz8nJykgLFxyXG4gICAgICBpY29uOiBhY3QuaWNvbixcclxuICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy5vbkFjdGlvbihhY3QsIHJvdyApLFxyXG4gICAgICBzdHlsZUNsYXNzOiBhY3Quc3R5bGVDbGFzc1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAvLyAqKtis2K/ZitivKio6INmK2KrZhSDYpdi32YTYp9mCINmH2LDYpyDYudmG2K8g2KfYrtiq2YrYp9ixINi12YFcclxuICBvblJvd1NlbGVjdChldmVudDogVGFibGVSb3dTZWxlY3RFdmVudDxUPikge1xyXG4gICAgLy8gZGVidWdnZXJcclxuICAgIGlmIChldmVudC5kYXRhKSB7XHJcbiAgICAgIHRoaXMucm93U2VsZWN0LmVtaXQoZXZlbnQuZGF0YSBhcyBUKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGgtc2NyZWVuXCIgc3R5bGU9XCIgICAgaGVpZ2h0OiA2MHZoO1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJmbGV4LTEgYm9yZGVyIHJvdW5kZWQtbGcgb3ZlcmZsb3ctaGlkZGVuIGZsZXggZmxleC1jb2xcIj5cclxuXHJcbiAgICA8IS0tIFByaW1lTkcgVGFibGUgLS0+XHJcbiAgICA8cC10YWJsZSAjZHRcclxuICAgICAgW3ZhbHVlXT1cImRhdGFfXCJcclxuICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXHJcbiAgICAgIFtsYXp5XT1cInRydWVcIlxyXG4gICAgICBbcGFnaW5hdG9yXT1cImZhbHNlXCJcclxuICAgICAgW3Jvd3NdPVwicm93c1wiXHJcbiAgICAgIFtmaXJzdF09XCJmaXJzdFwiXHJcbiAgICAgIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcclxuICAgICAgW3NvcnRGaWVsZF09XCJzb3J0RmllbGRcIlxyXG4gICAgICBbc29ydE9yZGVyXT1cInNvcnRPcmRlclwiXHJcbiAgICAgIChvbkxhenlMb2FkKT1cIm9uTGF6eUxvYWQoJGV2ZW50KVwiXHJcbiAgICAgIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZ2xvYmFsRmlsdGVyRmllbGRzXCJcclxuICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXHJcbiAgICAgIFtzY3JvbGxhYmxlXT1cInRydWVcIlxyXG4gICAgICBzY3JvbGxIZWlnaHQ9XCJmbGV4XCJcclxuICAgICAgW3NlbGVjdGlvbk1vZGVdPVwic2hvd1Jvd1NlbGVjdGlvbkNoZWNrYm94ID8gJ211bHRpcGxlJyA6IChyb3dTZWxlY3RhYmxlID8gJ3NpbmdsZScgOiB1bmRlZmluZWQpXCJcclxuICAgICAgWyhzZWxlY3Rpb24pXT1cIl9zZWxlY3Rpb25cIlxyXG4gICAgICAob25Sb3dTZWxlY3QpPVwib25JbnRlcm5hbFNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgKG9uUm93VW5zZWxlY3QpPVwib25JbnRlcm5hbFNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgKG9uSGVhZGVyQ2hlY2tib3hUb2dnbGUpPVwib25JbnRlcm5hbFNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgdGFibGVMYXlvdXQ9XCJmaXhlZFwiXHJcbiAgICAgIFtjdXN0b21Tb3J0XT1cImZhbHNlXCJcclxuICAgICAgKHNvcnRGdW5jdGlvbik9XCJjdXN0b21Tb3J0KCRldmVudClcIlxyXG4gICAgICBjbGFzcz1cImZsZXgtMSBvdmVyZmxvdy1hdXRvXCJcclxuICAgID5cclxuXHJcbiAgICAgIDwhLS0gRW1wdHkgbWVzc2FnZSAtLT5cclxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgIDx0cj5cclxuICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiMTBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEwIHRleHQtY2VudGVyIHctZnVsbFwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktaW5ib3ggdGV4dC00eGwgdGV4dC1ncmF5LTQwMCBtYi00XCI+PC9pPlxyXG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1ncmF5LTUwMCBtYi00XCI+e3sgJ05PX0RBVEFfRk9VTkQnIHwgdHJhbnNsYXRlIH19PC9wPlxyXG5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidG4gb2YgYWRkQnV0dG9uQ29uZmlnczsgdHJhY2tCeTogdHJhY2tCeUlkeFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1nZW5lcmljLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFidG4udmlzaWJsZSB8fCBidG4udmlzaWJsZSA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtpY29uXT1cImJ0bi5pY29uXCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImJ0bi5sYWJlbCB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFt2YXJpYW50XT1cImJ0bi52YXJpYW50XCJcclxuICAgICAgICAgICAgICAgICAgW3NpemVdPVwiYnRuLnNpemVcIlxyXG4gICAgICAgICAgICAgICAgICBbbW9kZWxdPVwiYnRuLnNwbGl0QWN0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgIFtwZXJtaXNzaW9uXT1cImJ0bi5wZXJtaXNzaW9uXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwib25BZGROZXcuZW1pdCgpXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0yXCJcclxuICAgICAgICAgICAgICAgID48L2xpYi1nZW5lcmljLWJ1dHRvbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8IS0tIFRhYmxlIGhlYWRlciAtLT5cclxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2x1bW5zPlxyXG4gICAgICAgIDx0ciBjbGFzcz1cImJnLWdyYXktMjAwIHN0aWNreSB0b3AtMCB6LTEwXCI+XHJcbiAgICAgICAgICA8dGggKm5nSWY9XCJzaG93Um93U2VsZWN0aW9uQ2hlY2tib3hcIiBzdHlsZT1cIndpZHRoOiAycmVtXCI+XHJcbiAgICAgICAgICAgIDxwLXRhYmxlSGVhZGVyQ2hlY2tib3g+PC9wLXRhYmxlSGVhZGVyQ2hlY2tib3g+XHJcbiAgICAgICAgICA8L3RoPlxyXG4gPHRoICpuZ0lmPVwiYWN0aW9ucy5sZW5ndGggPiAwICYmIGFjdGlvbnNQb3NpdGlvbiA9PT0gJ3N0YXJ0J1wiIGNsYXNzPVwicHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1jZW50ZXIgc3RpY2t5IHJpZ2h0LTBcIj5cclxuICAgICAgICAgICAge3sgJyonIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnM7IHRyYWNrQnk6IHRyYWNrQnlGblwiPlxyXG4gICAgICAgICAgICA8dGhcclxuICAgICAgICAgICAgICBbcFNvcnRhYmxlQ29sdW1uXT1cImNvbC5rZXlcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwicHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwiY29sLnByb3BzPy50YWJsZT8ucHJvcHM/LndpZHRoIHx8ICcxNTBweCdcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgY29sLnByb3BzPy5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgIDxwLXNvcnRJY29uIFtmaWVsZF09XCJjb2wua2V5XCI+PC9wLXNvcnRJY29uPlxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPHRoICpuZ0lmPVwiYWN0aW9ucy5sZW5ndGggPiAwICYmIGFjdGlvbnNQb3NpdGlvbiA9PT0gJ2VuZCdcIiBjbGFzcz1cInB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtY2VudGVyIHN0aWNreSBsZWZ0LTBcIj5cclxuICAgICAgICAgICAge3sgJyonIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8IS0tIFRhYmxlIGJvZHkgLS0+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvd0RhdGEgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCIgbGV0LWk9XCJyb3dJbmRleFwiPlxyXG4gICAgICAgIDx0ciBjbGFzcz1cImV2ZW46YmctZ3JheS01MCBob3ZlcjpiZy1ncmF5LTEwMCBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJyb3dTZWxlY3QuZW1pdChyb3dEYXRhKVwiPlxyXG4gICAgICAgICAgPHRkICpuZ0lmPVwic2hvd1Jvd1NlbGVjdGlvbkNoZWNrYm94XCIgc3R5bGU9XCJ3aWR0aDogMnJlbVwiPlxyXG4gICAgICAgICAgICA8cC10YWJsZUNoZWNrYm94IFt2YWx1ZV09XCJyb3dEYXRhXCI+PC9wLXRhYmxlQ2hlY2tib3g+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPHRkICpuZ0lmPVwiYWN0aW9ucy5sZW5ndGggPiAwICYmIGFjdGlvbnNQb3NpdGlvbiA9PT0gJ3N0YXJ0J1wiIGNsYXNzPVwiYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwIHB4LTQgcHktMiB0ZXh0LWNlbnRlciBzdGlja3kgcmlnaHQtMCBiZy1ncmF5LTUwXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWN0aW9uc1RlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiByb3dEYXRhfVwiPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiByb3dEYXRhLnJvd0ZpZWxkczsgbGV0IGNvbEluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlGblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwIHB4LTQgcHktMiB0ZXh0LWNlbnRlciB0ZXh0LXNtIHRleHQtZ3JheS03MDBcIlxyXG4gICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sLnByb3BzPy50YWJsZT8ucHJvcHM/LndpZHRoXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGZvcm1seS1mb3JtXHJcbiAgICAgICAgICAgICAgW21vZGVsXT1cInJvd0RhdGFcIlxyXG4gICAgICAgICAgICAgIFtmb3JtXT1cImdldEZvcm0oaSwgY29sSW5kZXgpXCJcclxuICAgICAgICAgICAgICBbZmllbGRzXT1cIltjb2xdXCJcclxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJvcHRpb25zXCJcclxuICAgICAgICAgICAgPjwvZm9ybWx5LWZvcm0+XHJcbiAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgIDx0ZCAqbmdJZj1cImFjdGlvbnMubGVuZ3RoID4gMCAmJiBhY3Rpb25zUG9zaXRpb24gPT09ICdlbmQnXCIgY2xhc3M9XCJib3JkZXItdCBib3JkZXItZ3JheS0yMDAgcHgtNCBweS0yIHRleHQtY2VudGVyIHN0aWNreSBsZWZ0LTAgYmctZ3JheS01MFwiPlxyXG4gICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWN0aW9uc1RlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiByb3dEYXRhfVwiPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG4gICAgPC9wLXRhYmxlPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYWN0aW9uc1RlbXBsYXRlIGxldC1yb3dEYXRhPlxyXG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiYWN0aW9uc01vZGVcIj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2J1dHRvbnMnXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdCBvZiBzb3J0ZWRBY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3QuaWNvbiB8fCBhY3QubGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgIHBCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJhY3QuaWNvbiB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIihhY3QubGFiZWwgPz8gJycpIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0LnN0eWxlQ2xhc3MgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tc20gbXgtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQWN0aW9uKGFjdCwgcm93RGF0YSlcIiA+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbWVudSdcIj5cclxuICAgICAgICAgIDxhcHAtYWN0aW9uLW1lbnUgW2l0ZW1zXT1cImdldE1lbnVJdGVtcyhyb3dEYXRhKSB8fCBbXVwiPjwvYXBwLWFjdGlvbi1tZW51PlxyXG4gICAgICAgICAgICA8IS0tIDxwLW1lbnUgI21lbnUgW21vZGVsXT1cImdldE1lbnVJdGVtcyhyb3dEYXRhKVwiIFtwb3B1cF09XCJ0cnVlXCIgYXBwZW5kVG89XCJib2R5XCI+PC9wLW1lbnU+XHJcbiAgICAgICAgICAgIDxwLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgb3V0bGluZWRcclxuICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1lbGxpcHNpcy12XCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zbVwiXHJcbiAgICAgICAgICAgICAgICAob25DbGljayk9XCJtZW51LnRvZ2dsZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwvcC1idXR0b24+IC0tPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy10YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXRhYmxlL3NyYy9lbGl0ZS5mcmFtZXdvcmstbmcudWkuY29yZS1nZW5lcmljLXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i2"],"mappings":"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"}
@@ -5,7 +5,7 @@ import { FieldType, FieldTypeConfig, FormlyFieldConfig } from '@ngx-formly/core'
5
5
  import { Observable } from 'rxjs';
6
6
  import { AutoComplete } from 'primeng/autocomplete';
7
7
  import { FormlyFieldProps } from '@ngx-formly/primeng/form-field';
8
- import { FilterGroup, BaseService } from '@elite.framework/ng.core/services';
8
+ import { QueryParameters, BaseService } from '@elite.framework/ng.core/services';
9
9
  import { GenericDialogComponent } from '@elite.framework/ng.ui.core/generic-dialog';
10
10
 
11
11
  declare class GenericSelectorModule {
@@ -36,7 +36,7 @@ interface GenericSelectorProps extends FormlyFieldProps {
36
36
  /** Function-based filter for offline items */
37
37
  onSelect?: (field: FormlyFieldConfig, event?: any) => void;
38
38
  offlineDataFn?: (query?: string) => any[];
39
- filters?: Record<string, any> | FilterGroup[];
39
+ query?: Record<string, any> | QueryParameters;
40
40
  fixedFilters?: Record<string, any>;
41
41
  defaultValue?: any;
42
42
  defaultItem?: any;
@@ -63,6 +63,7 @@ declare class GenericTable<T> implements OnChanges {
63
63
  customSort(event: SortEvent): void;
64
64
  resolveFieldData(data: any, field: string): any;
65
65
  get sortedActions(): ActionDef<T>[];
66
+ get sortedActions2(): ActionDef<T>[];
66
67
  onAction(act: ActionDef<T>, row: T): void;
67
68
  private cellForms;
68
69
  forms: FormGroup;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elite.framework/ng.ui.core",
3
- "version": "1.0.73",
3
+ "version": "1.0.75",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.1.0",
6
6
  "@angular/core": "^20.1.0"
@@ -16,6 +16,10 @@
16
16
  "types": "./index.d.ts",
17
17
  "default": "./fesm2022/elite.framework-ng.ui.core.mjs"
18
18
  },
19
+ "./attachments": {
20
+ "types": "./attachments/index.d.ts",
21
+ "default": "./fesm2022/elite.framework-ng.ui.core-attachments.mjs"
22
+ },
19
23
  "./base-crud": {
20
24
  "types": "./base-crud/index.d.ts",
21
25
  "default": "./fesm2022/elite.framework-ng.ui.core-base-crud.mjs"
@@ -24,10 +28,6 @@
24
28
  "types": "./breadcrumb/index.d.ts",
25
29
  "default": "./fesm2022/elite.framework-ng.ui.core-breadcrumb.mjs"
26
30
  },
27
- "./attachments": {
28
- "types": "./attachments/index.d.ts",
29
- "default": "./fesm2022/elite.framework-ng.ui.core-attachments.mjs"
30
- },
31
31
  "./checkbox": {
32
32
  "types": "./checkbox/index.d.ts",
33
33
  "default": "./fesm2022/elite.framework-ng.ui.core-checkbox.mjs"
@@ -168,14 +168,14 @@
168
168
  "types": "./header-wrapper/index.d.ts",
169
169
  "default": "./fesm2022/elite.framework-ng.ui.core-header-wrapper.mjs"
170
170
  },
171
- "./icon-picker": {
172
- "types": "./icon-picker/index.d.ts",
173
- "default": "./fesm2022/elite.framework-ng.ui.core-icon-picker.mjs"
174
- },
175
171
  "./input": {
176
172
  "types": "./input/index.d.ts",
177
173
  "default": "./fesm2022/elite.framework-ng.ui.core-input.mjs"
178
174
  },
175
+ "./icon-picker": {
176
+ "types": "./icon-picker/index.d.ts",
177
+ "default": "./fesm2022/elite.framework-ng.ui.core-icon-picker.mjs"
178
+ },
179
179
  "./input-switch": {
180
180
  "types": "./input-switch/index.d.ts",
181
181
  "default": "./fesm2022/elite.framework-ng.ui.core-input-switch.mjs"
@@ -204,14 +204,14 @@
204
204
  "types": "./select/index.d.ts",
205
205
  "default": "./fesm2022/elite.framework-ng.ui.core-select.mjs"
206
206
  },
207
- "./sidebar-cards": {
208
- "types": "./sidebar-cards/index.d.ts",
209
- "default": "./fesm2022/elite.framework-ng.ui.core-sidebar-cards.mjs"
210
- },
211
207
  "./sidebar-toggles": {
212
208
  "types": "./sidebar-toggles/index.d.ts",
213
209
  "default": "./fesm2022/elite.framework-ng.ui.core-sidebar-toggles.mjs"
214
210
  },
211
+ "./sidebar-cards": {
212
+ "types": "./sidebar-cards/index.d.ts",
213
+ "default": "./fesm2022/elite.framework-ng.ui.core-sidebar-cards.mjs"
214
+ },
215
215
  "./tabs": {
216
216
  "types": "./tabs/index.d.ts",
217
217
  "default": "./fesm2022/elite.framework-ng.ui.core-tabs.mjs"