@elite.framework/ng.ui.core 2.0.6 → 2.0.33

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.
Files changed (71) hide show
  1. package/column-settings-popover/index.d.ts +2 -2
  2. package/excel-import/index.d.ts +1 -1
  3. package/fesm2022/elite.framework-ng.ui.core-checkbox.mjs +3 -4
  4. package/fesm2022/elite.framework-ng.ui.core-checkbox.mjs.map +1 -1
  5. package/fesm2022/elite.framework-ng.ui.core-color-picker.mjs +3 -4
  6. package/fesm2022/elite.framework-ng.ui.core-color-picker.mjs.map +1 -1
  7. package/fesm2022/elite.framework-ng.ui.core-column-settings-popover.mjs +6 -6
  8. package/fesm2022/elite.framework-ng.ui.core-column-settings-popover.mjs.map +1 -1
  9. package/fesm2022/elite.framework-ng.ui.core-condition-editor.mjs +3 -4
  10. package/fesm2022/elite.framework-ng.ui.core-condition-editor.mjs.map +1 -1
  11. package/fesm2022/elite.framework-ng.ui.core-custom-switch.mjs +3 -4
  12. package/fesm2022/elite.framework-ng.ui.core-custom-switch.mjs.map +1 -1
  13. package/fesm2022/elite.framework-ng.ui.core-datepicker.mjs +3 -4
  14. package/fesm2022/elite.framework-ng.ui.core-datepicker.mjs.map +1 -1
  15. package/fesm2022/elite.framework-ng.ui.core-deactivation-reason.mjs +3 -4
  16. package/fesm2022/elite.framework-ng.ui.core-deactivation-reason.mjs.map +1 -1
  17. package/fesm2022/elite.framework-ng.ui.core-excel-import.mjs +5 -6
  18. package/fesm2022/elite.framework-ng.ui.core-excel-import.mjs.map +1 -1
  19. package/fesm2022/elite.framework-ng.ui.core-form-field.mjs +5 -5
  20. package/fesm2022/elite.framework-ng.ui.core-form-field.mjs.map +1 -1
  21. package/fesm2022/elite.framework-ng.ui.core-formly-avatar-label.mjs +3 -4
  22. package/fesm2022/elite.framework-ng.ui.core-formly-avatar-label.mjs.map +1 -1
  23. package/fesm2022/elite.framework-ng.ui.core-formly-button-selector.mjs +6 -6
  24. package/fesm2022/elite.framework-ng.ui.core-formly-button-selector.mjs.map +1 -1
  25. package/fesm2022/elite.framework-ng.ui.core-formly-button.mjs +3 -3
  26. package/fesm2022/elite.framework-ng.ui.core-formly-button.mjs.map +1 -1
  27. package/fesm2022/elite.framework-ng.ui.core-generic-autocomplete.mjs +3 -4
  28. package/fesm2022/elite.framework-ng.ui.core-generic-autocomplete.mjs.map +1 -1
  29. package/fesm2022/elite.framework-ng.ui.core-generic-button.mjs +3 -4
  30. package/fesm2022/elite.framework-ng.ui.core-generic-button.mjs.map +1 -1
  31. package/fesm2022/elite.framework-ng.ui.core-generic-card.mjs +3 -4
  32. package/fesm2022/elite.framework-ng.ui.core-generic-card.mjs.map +1 -1
  33. package/fesm2022/elite.framework-ng.ui.core-generic-crud-table.mjs +8 -9
  34. package/fesm2022/elite.framework-ng.ui.core-generic-crud-table.mjs.map +1 -1
  35. package/fesm2022/elite.framework-ng.ui.core-generic-dialog.mjs +5 -6
  36. package/fesm2022/elite.framework-ng.ui.core-generic-dialog.mjs.map +1 -1
  37. package/fesm2022/elite.framework-ng.ui.core-generic-report.mjs +8 -9
  38. package/fesm2022/elite.framework-ng.ui.core-generic-report.mjs.map +1 -1
  39. package/fesm2022/elite.framework-ng.ui.core-generic-search-advanced.mjs +29 -24
  40. package/fesm2022/elite.framework-ng.ui.core-generic-search-advanced.mjs.map +1 -1
  41. package/fesm2022/elite.framework-ng.ui.core-generic-search.mjs +5 -5
  42. package/fesm2022/elite.framework-ng.ui.core-generic-search.mjs.map +1 -1
  43. package/fesm2022/elite.framework-ng.ui.core-generic-selector.mjs +7 -6
  44. package/fesm2022/elite.framework-ng.ui.core-generic-selector.mjs.map +1 -1
  45. package/fesm2022/elite.framework-ng.ui.core-generic-table.mjs +5 -6
  46. package/fesm2022/elite.framework-ng.ui.core-generic-table.mjs.map +1 -1
  47. package/fesm2022/elite.framework-ng.ui.core-generic-view.mjs +3 -4
  48. package/fesm2022/elite.framework-ng.ui.core-generic-view.mjs.map +1 -1
  49. package/fesm2022/elite.framework-ng.ui.core-input-switch.mjs +3 -4
  50. package/fesm2022/elite.framework-ng.ui.core-input-switch.mjs.map +1 -1
  51. package/fesm2022/elite.framework-ng.ui.core-input.mjs +3 -4
  52. package/fesm2022/elite.framework-ng.ui.core-input.mjs.map +1 -1
  53. package/fesm2022/elite.framework-ng.ui.core-repeat.mjs +5 -6
  54. package/fesm2022/elite.framework-ng.ui.core-repeat.mjs.map +1 -1
  55. package/fesm2022/elite.framework-ng.ui.core-select.mjs +3 -4
  56. package/fesm2022/elite.framework-ng.ui.core-select.mjs.map +1 -1
  57. package/fesm2022/elite.framework-ng.ui.core-tag-type.mjs +7 -8
  58. package/fesm2022/elite.framework-ng.ui.core-tag-type.mjs.map +1 -1
  59. package/fesm2022/elite.framework-ng.ui.core-textarea.mjs +3 -4
  60. package/fesm2022/elite.framework-ng.ui.core-textarea.mjs.map +1 -1
  61. package/fesm2022/elite.framework-ng.ui.core-wrappers.mjs +9 -10
  62. package/fesm2022/elite.framework-ng.ui.core-wrappers.mjs.map +1 -1
  63. package/form-field/index.d.ts +2 -2
  64. package/formly-button-selector/index.d.ts +2 -2
  65. package/generic-crud-table/index.d.ts +2 -3
  66. package/generic-dialog/index.d.ts +2 -3
  67. package/generic-report/index.d.ts +2 -2
  68. package/generic-search/index.d.ts +2 -2
  69. package/generic-search-advanced/index.d.ts +4 -5
  70. package/generic-table/index.d.ts +2 -3
  71. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"file":"elite.framework-ng.ui.core-generic-report.mjs","sources":["../tmp-esm2022/generic-report/lib/generic-report-module.js","../tmp-esm2022/generic-report/lib/report-name-dialog.component.js","../tmp-esm2022/generic-report/lib/generic-report.component.js","../tmp-esm2022/generic-report/elite.framework-ng.ui.core-generic-report.js"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from \"@angular/core\";\nexport class GenericReportModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericReportModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericReportModule, imports: [CommonModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericReportModule, imports: [CommonModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericReportModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1yZXBvcnQtbW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtcmVwb3J0L3NyYy9saWIvZ2VuZXJpYy1yZXBvcnQtbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUsvQyxNQUFNLE9BQU8sbUJBQW1CO3VHQUFuQixtQkFBbUI7d0dBQW5CLG1CQUFtQixZQUZwQixZQUFZO3dHQUVYLG1CQUFtQixZQUZwQixZQUFZOzsyRkFFWCxtQkFBbUI7a0JBSC9CLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY1JlcG9ydE1vZHVsZSB7fVxuIl19","// report-name-dialog.component.ts\nimport { Component, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { DynamicDialogRef, DynamicDialogConfig } from 'primeng/dynamicdialog';\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nimport * as i2 from \"primeng/button\";\nimport * as i3 from \"primeng/inputtext\";\nimport * as i4 from \"@ngx-translate/core\";\nexport class ReportNameDialogComponent {\n fileName = '';\n ref = inject(DynamicDialogRef);\n config = inject(DynamicDialogConfig);\n translate = inject(TranslateService);\n ngOnInit() {\n this.fileName = this.config.data?.fileName || '';\n }\n save() {\n if (this.fileName?.trim()) {\n this.ref.close(this.fileName.trim());\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ReportNameDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.8\", type: ReportNameDialogComponent, isStandalone: true, selector: \"app-report-name-dialog\", ngImport: i0, template: `\r\n <div class=\"p-fluid\">\r\n <div class=\"field\">\r\n <label for=\"fileName\" class=\"block text-sm font-medium mb-2\">\r\n {{ 'REPORT_NAME' | translate }}\r\n </label>\r\n <input\r\n id=\"fileName\"\r\n type=\"text\"\r\n [(ngModel)]=\"fileName\"\r\n pInputText\r\n class=\"w-full\"\r\n [placeholder]=\"'ENTER_REPORT_NAME' | translate\"\r\n autofocus>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex justify-end gap-2 mt-4\">\r\n <button\r\n type=\"button\"\r\n pButton\r\n class=\"p-button-text\"\r\n (click)=\"ref.close()\"\r\n [label]=\"'CANCEL' | translate\">\r\n </button>\r\n <button\r\n type=\"button\"\r\n pButton\r\n (click)=\"save()\"\r\n [label]=\"'SAVE' | translate\">\r\n </button>\r\n </div>\r\n `, isInline: true, dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"directive\", type: i2.ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"ngmodule\", type: InputTextModule }, { kind: \"directive\", type: i3.InputText, selector: \"[pInputText]\", inputs: [\"pSize\", \"variant\", \"fluid\", \"invalid\"] }, { kind: \"pipe\", type: i4.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ReportNameDialogComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'app-report-name-dialog',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n TranslateModule,\n ButtonModule,\n InputTextModule\n ],\n template: `\r\n <div class=\"p-fluid\">\r\n <div class=\"field\">\r\n <label for=\"fileName\" class=\"block text-sm font-medium mb-2\">\r\n {{ 'REPORT_NAME' | translate }}\r\n </label>\r\n <input\r\n id=\"fileName\"\r\n type=\"text\"\r\n [(ngModel)]=\"fileName\"\r\n pInputText\r\n class=\"w-full\"\r\n [placeholder]=\"'ENTER_REPORT_NAME' | translate\"\r\n autofocus>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex justify-end gap-2 mt-4\">\r\n <button\r\n type=\"button\"\r\n pButton\r\n class=\"p-button-text\"\r\n (click)=\"ref.close()\"\r\n [label]=\"'CANCEL' | translate\">\r\n </button>\r\n <button\r\n type=\"button\"\r\n pButton\r\n (click)=\"save()\"\r\n [label]=\"'SAVE' | translate\">\r\n </button>\r\n </div>\r\n `\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LW5hbWUtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXJlcG9ydC9zcmMvbGliL3JlcG9ydC1uYW1lLWRpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0NBQWtDO0FBQ2xDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7OztBQThDcEQsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQyxRQUFRLEdBQVcsRUFBRSxDQUFDO0lBRXRCLEdBQUcsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMvQixNQUFNLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDckMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRXJDLFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUM7dUdBZlUseUJBQXlCOzJGQUF6Qix5QkFBeUIsa0ZBbEMxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ1QsMkRBdENDLFlBQVksOEJBQ1osV0FBVyw4bUJBQ1gsZUFBZSw4QkFDZixZQUFZLG9RQUNaLGVBQWU7OzJGQW9DTix5QkFBeUI7a0JBNUNyQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixlQUFlO3FCQUNoQjtvQkFDRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NUO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gcmVwb3J0LW5hbWUtZGlhbG9nLmNvbXBvbmVudC50c1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dSZWYsIER5bmFtaWNEaWFsb2dDb25maWcgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XHJcbmltcG9ydCB7IElucHV0VGV4dE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXJlcG9ydC1uYW1lLWRpYWxvZycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcclxuICAgIEJ1dHRvbk1vZHVsZSxcclxuICAgIElucHV0VGV4dE1vZHVsZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgY2xhc3M9XCJwLWZsdWlkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZFwiPlxyXG4gICAgICAgIDxsYWJlbCBmb3I9XCJmaWxlTmFtZVwiIGNsYXNzPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSBtYi0yXCI+XHJcbiAgICAgICAgICB7eyAnUkVQT1JUX05BTUUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIGlkPVwiZmlsZU5hbWVcIlxyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWxlTmFtZVwiXHJcbiAgICAgICAgICBwSW5wdXRUZXh0XHJcbiAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0VOVEVSX1JFUE9SVF9OQU1FJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICBhdXRvZm9jdXM+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgZ2FwLTIgbXQtNFwiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgcEJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dFwiXHJcbiAgICAgICAgKGNsaWNrKT1cInJlZi5jbG9zZSgpXCJcclxuICAgICAgICBbbGFiZWxdPVwiJ0NBTkNFTCcgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBwQnV0dG9uXHJcbiAgICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXHJcbiAgICAgICAgW2xhYmVsXT1cIidTQVZFJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIGBcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlcG9ydE5hbWVEaWFsb2dDb21wb25lbnQge1xyXG4gIGZpbGVOYW1lOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgcmVmID0gaW5qZWN0KER5bmFtaWNEaWFsb2dSZWYpO1xyXG4gIGNvbmZpZyA9IGluamVjdChEeW5hbWljRGlhbG9nQ29uZmlnKTtcclxuICB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5maWxlTmFtZSA9IHRoaXMuY29uZmlnLmRhdGE/LmZpbGVOYW1lIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgc2F2ZSgpIHtcclxuICAgIGlmICh0aGlzLmZpbGVOYW1lPy50cmltKCkpIHtcclxuICAgICAgdGhpcy5yZWYuY2xvc2UodGhpcy5maWxlTmFtZS50cmltKCkpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=","import { CommonModule } from '@angular/common';\nimport { Component, inject, ViewChild, ElementRef, Input } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FormlyForm } from '@ngx-formly/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { RadioButtonModule } from 'primeng/radiobutton';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { DynamicDialogRef, DynamicDialogConfig, DialogService } from 'primeng/dynamicdialog';\nimport { RestService } from '@elite.framework/ng.core/services';\nimport { Subject, takeUntil } from 'rxjs';\nimport { DrawerModule } from 'primeng/drawer';\nimport { TableModule } from 'primeng/table';\nimport { SplitButtonModule } from 'primeng/splitbutton';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { ReportNameDialogComponent } from './report-name-dialog.component';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { QueryBuilderService } from '@elite.framework/ng.ui.core/generic-search-advanced';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"primeng/dynamicdialog\";\nimport * as i2 from \"@angular/common\";\nimport * as i3 from \"@angular/forms\";\nimport * as i4 from \"primeng/button\";\nimport * as i5 from \"primeng/api\";\nimport * as i6 from \"primeng/drawer\";\nimport * as i7 from \"primeng/splitbutton\";\nimport * as i8 from \"primeng/tooltip\";\nimport * as i9 from \"@ngx-translate/core\";\nexport var ExportType;\n(function (ExportType) {\n ExportType[ExportType[\"LIST\"] = 0] = \"LIST\";\n ExportType[ExportType[\"HTML\"] = 1] = \"HTML\";\n ExportType[ExportType[\"PDF\"] = 2] = \"PDF\";\n ExportType[ExportType[\"EXCEL\"] = 3] = \"EXCEL\";\n ExportType[ExportType[\"PRINT\"] = 4] = \"PRINT\";\n})(ExportType || (ExportType = {}));\nexport class GenericReportComponent {\n ref;\n config;\n previewContainer;\n filterFields = [];\n fields_ = [];\n exportType = ExportType.PDF;\n fileName = '';\n showFilters = false;\n loading = false;\n currentDate = new Date();\n previewData = [];\n htmlExportContent = '';\n showHtmlInIframe = false;\n previewColumns = [];\n options = {};\n enableQueryBuilder = true;\n localExport = false;\n queryString = '';\n apiName = '';\n model = {};\n form = new FormGroup({});\n exportConfig;\n exportTypes = [\n { value: ExportType.EXCEL, label: 'EXCEL', icon: 'pi pi-file-excel' },\n { value: ExportType.PDF, label: 'PDF', icon: 'pi pi-file-pdf' },\n { value: ExportType.HTML, label: 'HTML', icon: 'pi pi-code' },\n { value: ExportType.PRINT, label: 'PRINT', icon: 'pi pi-print' }\n ];\n exportMenuItems = [];\n destroy$ = new Subject();\n dialogService = inject(DialogService);\n translate = inject(TranslateService);\n restService = inject(RestService);\n queryBuilder = inject(QueryBuilderService);\n sanitizer = inject(DomSanitizer);\n constructor(ref, config) {\n this.ref = ref;\n this.config = config;\n }\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n if (this.ref) {\n try {\n this.ref.close();\n }\n catch (e) {\n // Ignore errors during cleanup\n }\n }\n }\n ngOnInit() {\n this.filterFields = this.config.data?.filterFields || [];\n this.buildQueryUIFields();\n this.initializeComponent();\n this.initializeExportConfig();\n this.initializeExportMenu();\n }\n get filterCount() {\n return this.queryBuilder.getAppliedFiltersCount(this.model).total;\n }\n buildQueryUIFields() {\n if (this.enableQueryBuilder) {\n this.fields_ = this.queryBuilder.buildQueryUIFields(this.filterFields, true, true);\n }\n else {\n this.fields_ = this.filterFields;\n }\n }\n initializeComponent() {\n this.apiName = this.config.data?.apiName || '';\n this.initializeFilterFields();\n this.onExport();\n }\n initializeFilterFields() {\n this.filterFields = this.config.data?.filterFields || this.getDefaultFilterFields();\n this.model = this.config.data?.model || {};\n this.fileName = this.config.data?.defaultFileName || `export_${new Date().toISOString().split('T')[0]}`;\n }\n initializeExportConfig() {\n this.exportConfig = {\n filters: this.model,\n exportType: this.exportType,\n fileName: this.fileName\n };\n }\n initializeExportMenu() {\n this.exportMenuItems = [\n // Edit Report Name menu item\n {\n label: this.translate.instant('EDIT_REPORT_NAME'),\n icon: 'pi pi-pencil',\n command: () => this.openReportNameDialog()\n },\n // Separator\n { separator: true },\n // Export type menu items\n ...this.exportTypes.map(type => ({\n label: this.translate.instant(type.label),\n icon: type.icon,\n command: () => this.onExportTypeChange(type.value)\n }))\n ];\n }\n openReportNameDialog() {\n const ref = this.dialogService.open(ReportNameDialogComponent, {\n header: this.translate.instant('EDIT_REPORT_NAME'),\n width: '500px',\n data: {\n fileName: this.fileName\n }\n });\n ref.onClose.subscribe((result) => {\n if (result) {\n this.fileName = result;\n }\n });\n }\n getDefaultFilterFields() {\n return [\n {\n key: 'search',\n type: 'input',\n props: {\n label: this.translate.instant('SEARCH'),\n placeholder: this.translate.instant('ENTER_SEARCH_TERM'),\n }\n }\n ];\n }\n // Query and Preview Methods\n generatePreview() {\n this.onExport();\n }\n onSubmit() {\n const odataParams = this.queryBuilder.buildODataFromQueryModel(this.model, this.filterFields);\n this.queryString = this.queryBuilder.toODataQueryString(odataParams);\n this.onExport();\n }\n onReset() {\n this.exportType = ExportType.PDF;\n this.fileName = `export_${new Date().toISOString().split('T')[0]}`;\n this.form.reset();\n this.model = {};\n this.generatePreview();\n }\n // Export Methods\n onExport() {\n this.loading = true;\n const exportConfig = this.createExportConfig();\n this.handleApiExport(exportConfig);\n }\n createExportConfig() {\n return {\n filters: this.model,\n exportType: this.exportType,\n fileName: this.fileName\n };\n }\n handleApiExport(config) {\n if (this.form.invalid)\n return;\n const requestOptions = this.createRequestOptions(config);\n this.restService.request(requestOptions, { apiName: this.apiName })\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: (response) => {\n this.handleExportResponse(response, config);\n },\n error: (error) => {\n console.error('Export failed:', error);\n this.loading = false;\n }\n });\n }\n createRequestOptions(config) {\n // Default query\n if (!this.queryString || this.queryString == '') {\n // Use the new QueryBuilderService methods\n const odataParams = this.queryBuilder.buildODataFromQueryModel(this.model, this.filterFields);\n // this.odataSearch.emit(odataParams);\n // Generate query string using the unified method\n this.queryString = this.queryBuilder.toODataQueryString(odataParams);\n // console.log('OData Query String:', queryString);\n }\n const filters = {\n fileName: config.fileName || '',\n query: this.queryString,\n exportType: config.exportType,\n };\n const params = Object.keys(filters).reduce((acc, key) => {\n acc[key] = filters[key];\n return acc;\n }, {});\n const requestOptions = {\n method: 'GET',\n url: `/${this.apiName}/export`,\n params: params\n };\n if (config.exportType === ExportType.HTML) {\n requestOptions.responseType = 'text';\n }\n return requestOptions;\n }\n // private handleExportResponse(response: any, config: any) {\n // this.loading = false;\n // if (config.exportType === ExportType.HTML) {\n // this.showHtmlExport(response);\n // } else {\n // this.downloadBinaryExport(response, config);\n // }\n // }\n handleExportResponse(response, config) {\n this.loading = false;\n if (config.exportType === ExportType.HTML) {\n this.showHtmlExport(response);\n // } else if (config.exportType === ExportType.PDF && this.isMobileDevice()) {\n }\n else if (config.exportType === ExportType.PDF) {\n this.showPdfInMobile(response, config);\n }\n else {\n this.downloadBinaryExport(response, config);\n }\n }\n // Platform detection methods\n isMobileDevice() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n }\n isIOS() {\n return /iPad|iPhone|iPod/.test(navigator.userAgent);\n }\n isAndroid() {\n return /Android/.test(navigator.userAgent);\n }\n showPdfModal = false;\n currentPdfUrl;\n currentFileName = '';\n showPdfInMobile(base64Data, config) {\n try {\n const blob = this.base64ToBlob(base64Data, this.getMimeType(ExportType.PDF));\n this.currentPdfUrl = this.sanitizeUrl(URL.createObjectURL(blob));\n this.currentFileName = `${config.fileName}.pdf`;\n this.showPdfModal = true;\n }\n catch (error) {\n var error = 'PDF is too large for mobile viewing. Please download instead.';\n }\n finally {\n // this.loading = false;\n }\n }\n sanitizeUrl(url) {\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n }\n // onPdfModalClose(): void {\n // this.showPdfModal = false;\n // if (this.currentPdfUrl) {\n // URL.revokeObjectURL(this.currentPdfUrl);\n // this.currentPdfUrl = '';\n // }\n // }\n onPdfDownload() {\n // Trigger download\n // const blob = this.base64ToBlob(this.getCurrentBase64(), this.getMimeType(ExportType.PDF));\n // this.downloadFile(blob, this.currentFileName);\n }\n downloadBinaryExport(response, config) {\n const blob = this.base64ToBlob(response, this.getMimeType(config.exportType));\n this.downloadFile(blob, `${config.fileName}.${this.getFileExtension(config.exportType)}`);\n }\n // HTML Export Methods\n showHtmlExport(htmlContent) {\n const cleanHtml = this.cleanHtmlContent(htmlContent);\n this.htmlExportContent = cleanHtml;\n this.showHtmlInIframe = true;\n setTimeout(() => {\n this.setIframeContent(cleanHtml);\n }, 100);\n }\n setIframeContent(htmlContent) {\n const iframe = document.getElementById('reportIframe');\n if (!iframe) {\n console.error('Iframe not found');\n return;\n }\n const iframeDoc = iframe.contentDocument || iframe.contentWindow?.document;\n if (iframeDoc) {\n iframeDoc.open();\n iframeDoc.write(htmlContent);\n iframeDoc.close();\n }\n }\n print() {\n // const iframe = document.getElementById('reportIframe') as HTMLIFrameElement | null;\n // if (!iframe || !iframe.contentWindow) return;\n // const iframeWindow = iframe.contentWindow;\n // iframeWindow.focus();\n // iframeWindow.print();\n document.getElementById('reportIframe').contentWindow.print();\n }\n // Utility Methods\n getExportButtonText() {\n switch (this.exportType) {\n case ExportType.PRINT:\n return this.translate.instant('PRINT');\n case ExportType.HTML:\n return this.translate.instant('EXPORT');\n default:\n return this.translate.instant('EXPORT');\n }\n }\n onExportTypeChange(type) {\n this.exportType = type;\n }\n getCurrentExportTypeIcon() {\n const currentType = this.exportTypes.find(type => type.value === this.exportType);\n return currentType?.icon || 'pi pi-download';\n }\n base64ToBlob(base64, mime) {\n const byteChars = atob(base64);\n const byteNums = Array.from(byteChars, c => c.charCodeAt(0));\n return new Blob([new Uint8Array(byteNums)], { type: mime });\n }\n downloadFile(blob, fileName) {\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n }\n getFileExtension(exportType) {\n switch (exportType) {\n case ExportType.EXCEL:\n return 'xlsx';\n case ExportType.PDF:\n return 'pdf';\n case ExportType.HTML:\n return 'html';\n default:\n return 'pdf';\n }\n }\n getMimeType(exportType) {\n switch (exportType) {\n case ExportType.EXCEL:\n return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n case ExportType.PDF:\n return 'application/pdf';\n default:\n return 'application/octet-stream';\n }\n }\n cleanHtmlContent(html) {\n return html\n .replace(/\\\\r\\\\n/g, '\\n')\n .replace(/\\\\\"/g, '\"')\n .replace(/\\\\t/g, ' ')\n .trim();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericReportComponent, deps: [{ token: i1.DynamicDialogRef }, { token: i1.DynamicDialogConfig }], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: GenericReportComponent, isStandalone: true, selector: \"app-generic-report\", inputs: { filterFields: \"filterFields\", enableQueryBuilder: \"enableQueryBuilder\", localExport: \"localExport\", queryString: \"queryString\", apiName: \"apiName\", model: \"model\" }, providers: [DialogService, RestService], viewQueries: [{ propertyName: \"previewContainer\", first: true, predicate: [\"previewContainer\"], descendants: true }], ngImport: i0, template: \"<!-- class=\\\"flex flex-col h-full bg-white dark:bg-gray-900 rounded-lg max-w-6xl mx-auto\\\" -->\\r\\n<div >\\r\\n <!-- Content -->\\r\\n <div class=\\\"flex-1 overflow-hidden p-2\\\">\\r\\n\\r\\n <!-- Preview Actions -->\\r\\n <div class=\\\"flex justify-between items-center mb-6 p-2 bg-white rounded-lg\\\">\\r\\n <h3 class=\\\"text-lg font-semibold text-gray-900 dark:text-white\\\">\\r\\n {{ 'REPORT' | translate }}\\r\\n </h3>\\r\\n <div class=\\\"flex gap-2\\\">\\r\\n <!-- Filters Button -->\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"showFilters = !showFilters\\\"\\r\\n class=\\\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\\\"\\r\\n [pTooltip]=\\\"'SEARCH_FILTERS' | translate\\\">\\r\\n <i class=\\\"pi pi-filter\\\"></i>\\r\\n <span *ngIf=\\\"filterCount > 0\\\" class=\\\"ml-2 bg-blue-500 text-white text-xs rounded-full h-5 w-5 flex items-center justify-center\\\">\\r\\n {{ filterCount }}\\r\\n </span>\\r\\n </button>\\r\\n\\r\\n <!-- Refresh Preview -->\\r\\n <button\\r\\n (click)=\\\"generatePreview()\\\"\\r\\n [disabled]=\\\"loading\\\"\\r\\n class=\\\"flex items-center px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-lg hover:bg-blue-700 disabled:bg-gray-300 disabled:cursor-not-allowed transition-colors\\\"\\r\\n [pTooltip]=\\\"'REFRESH' | translate\\\">\\r\\n <i class=\\\"pi pi-refresh mr-2 ml-2\\\" [class.animate-spin]=\\\"loading\\\"></i>\\r\\n {{ 'REFRESH' | translate }}\\r\\n </button>\\r\\n\\r\\n <!-- Print Button -->\\r\\n <button\\r\\n *ngIf=\\\"exportType === 4 || exportType === 1 || exportType === 2\\\"\\r\\n (click)=\\\"print()\\\"\\r\\n class=\\\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\\\"\\r\\n [pTooltip]=\\\"'PRINT' | translate\\\">\\r\\n <i class=\\\"pi pi-print mr-2 ml-2\\\"></i>\\r\\n {{ 'PRINT' | translate }}\\r\\n </button>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <!-- Preview Content -->\\r\\n <div #previewContainer class=\\\"bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg\\\">\\r\\n <!-- HTML Export Preview (Iframe) -->\\r\\n <div *ngIf=\\\"showHtmlInIframe && htmlExportContent || showPdfModal\\\" class=\\\"html-export-preview\\\">\\r\\n <iframe\\r\\n id=\\\"reportIframe\\\"\\r\\n class=\\\"w-full border border-gray-300 dark:border-gray-600 rounded-b-lg\\\"\\r\\n [style.height]=\\\"'600px'\\\"\\r\\n title=\\\"HTML Export Preview\\\"\\r\\n [src]=\\\"currentPdfUrl\\\"\\r\\n width=\\\"100%\\\"\\r\\n height=\\\"100%\\\"\\r\\n frameborder=\\\"0\\\"\\r\\n allowfullscreen\\r\\n\\r\\n >\\r\\n <!-- allowfullscreen -->\\r\\n </iframe>\\r\\n </div>\\r\\n <!-- <app-pdf-modal\\r\\n *ngIf=\\\"showPdfModal\\\"\\r\\n [pdfUrl]=\\\"currentPdfUrl\\\"\\r\\n [fileName]=\\\"currentFileName\\\"\\r\\n (closed)=\\\"onPdfModalClose()\\\"\\r\\n (downloadRequested)=\\\"onPdfDownload()\\\">\\r\\n</app-pdf-modal> -->\\r\\n\\r\\n <!-- Regular Preview Table -->\\r\\n <!-- <div *ngIf=\\\"!showHtmlInIframe\\\" class=\\\"p-4\\\">\\r\\n <p-table\\r\\n [value]=\\\"previewData\\\"\\r\\n [columns]=\\\"previewColumns\\\"\\r\\n [paginator]=\\\"true\\\"\\r\\n [rows]=\\\"10\\\"\\r\\n [showCurrentPageReport]=\\\"true\\\"\\r\\n currentPageReportTemplate=\\\"Showing {first} to {last} of {totalRecords} entries\\\"\\r\\n styleClass=\\\"p-datatable-sm\\\">\\r\\n <ng-template pTemplate=\\\"header\\\">\\r\\n <tr>\\r\\n <th *ngFor=\\\"let col of previewColumns\\\" class=\\\"text-left\\\">\\r\\n {{ col.header }}\\r\\n </th>\\r\\n </tr>\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"body\\\" let-rowData>\\r\\n <tr>\\r\\n <td *ngFor=\\\"let col of previewColumns\\\" class=\\\"text-left\\\">\\r\\n {{ rowData[col.field] }}\\r\\n </td>\\r\\n </tr>\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"emptymessage\\\">\\r\\n <tr>\\r\\n <td [attr.colspan]=\\\"previewColumns.length\\\" class=\\\"text-center py-4\\\">\\r\\n <div class=\\\"text-center py-8\\\">\\r\\n <i class=\\\"pi pi-inbox text-4xl text-gray-400 dark:text-gray-500 mb-4\\\"></i>\\r\\n <p class=\\\"text-gray-500 dark:text-gray-400\\\">{{ 'NO_PREVIEW_DATA' | translate }}</p>\\r\\n </div>\\r\\n </td>\\r\\n </tr>\\r\\n </ng-template>\\r\\n </p-table>\\r\\n </div> -->\\r\\n </div>\\r\\n\\r\\n <!-- <div class=\\\"mt-4 p-3 bg-green-50 dark:bg-green-900/20 rounded-lg\\\">\\r\\n <p class=\\\"text-sm text-green-700 dark:text-green-300\\\">\\r\\n <i class=\\\"pi pi-info-circle mr-2\\\"></i>\\r\\n {{ 'PREVIEW_INFO' | translate }}\\r\\n </p>\\r\\n </div> -->\\r\\n </div>\\r\\n\\r\\n <!-- Footer -->\\r\\n <div class=\\\"border-t border-gray-200 dark:border-gray-700 px-2 py-2 bg-gray-50 dark:bg-gray-800\\\">\\r\\n <div class=\\\"flex justify-between items-center\\\">\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"onReset()\\\"\\r\\n class=\\\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\\\"\\r\\n [disabled]=\\\"loading\\\">\\r\\n <i class=\\\"pi pi-refresh mr-2\\\"></i>\\r\\n {{ 'RESET' | translate }}\\r\\n </button>\\r\\n\\r\\n <div class=\\\"flex gap-2\\\">\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"ref?.close()\\\"\\r\\n class=\\\"px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\\\"\\r\\n [disabled]=\\\"loading\\\">\\r\\n {{ 'CANCEL' | translate }}\\r\\n </button>\\r\\n\\r\\n <!-- SplitButton for Export -->\\r\\n <!-- || previewData.length === 0 -->\\r\\n <p-splitButton\\r\\n [label]=\\\"getExportButtonText()\\\"\\r\\n [icon]=\\\"getCurrentExportTypeIcon()\\\"\\r\\n [model]=\\\"exportMenuItems\\\"\\r\\n (onClick)=\\\"onExport()\\\"\\r\\n [disabled]=\\\"loading\\\"\\r\\n styleClass=\\\"p-button-primary\\\">\\r\\n </p-splitButton>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <!-- Filters Drawer -->\\r\\n @if(showFilters){\\r\\n <p-drawer\\r\\n [(visible)]=\\\"showFilters\\\"\\r\\n position=\\\"right\\\"\\r\\n [styleClass]=\\\"'!w-full md:!w-80 lg:!w-[40rem] !h-full' \\\"\\r\\n [modal]=\\\"true\\\"\\r\\n [dismissible]=\\\"true\\\"\\r\\n styleClass=\\\"p-4 w-full max-w-md max-h-[90vh] flex flex-col\\\">\\r\\n <form [formGroup]=\\\"form\\\" (ngSubmit)=\\\"onSubmit(); showFilters=false\\\" class=\\\"flex flex-col flex-1\\\">\\r\\n <div class=\\\"flex-1 overflow-auto\\\">\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"fields_\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [options]=\\\"options\\\">\\r\\n </formly-form>\\r\\n </div>\\r\\n </form>\\r\\n <ng-template pTemplate=\\\"footer\\\">\\r\\n <div class=\\\"flex justify-end mt-2 space-x-2 flex-none\\\">\\r\\n <button\\r\\n type=\\\"submit\\\"\\r\\n pButton size=\\\"small\\\"\\r\\n (click)=\\\" onSubmit(); showFilters=false\\\"\\r\\n label=\\\"{{ 'SEARCH' | translate }}\\\">\\r\\n </button>\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n pButton\\r\\n size=\\\"small\\\"\\r\\n class=\\\"p-button-text\\\"\\r\\n (click)=\\\"onReset(); showFilters=false\\\">\\r\\n {{ 'CLEAR' | translate }}\\r\\n </button>\\r\\n </div>\\r\\n </ng-template>\\r\\n </p-drawer>\\r\\n }\\r\\n</div>\\r\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"directive\", type: i3.ɵNgNoValidate, selector: \"form:not([ngNoForm]):not([ngNativeValidate])\" }, { kind: \"directive\", type: i3.NgControlStatusGroup, selector: \"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]\" }, { kind: \"directive\", type: i3.FormGroupDirective, selector: \"[formGroup]\", inputs: [\"formGroup\"], outputs: [\"ngSubmit\"], exportAs: [\"ngForm\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"ngmodule\", type: TranslateModule }, { 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: \"directive\", type: i5.PrimeTemplate, selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { kind: \"ngmodule\", type: DialogModule }, { kind: \"ngmodule\", type: InputTextModule }, { kind: \"ngmodule\", type: RadioButtonModule }, { kind: \"ngmodule\", type: CheckboxModule }, { kind: \"ngmodule\", type: DrawerModule }, { kind: \"component\", type: i6.Drawer, selector: \"p-drawer\", inputs: [\"appendTo\", \"blockScroll\", \"style\", \"styleClass\", \"ariaCloseLabel\", \"autoZIndex\", \"baseZIndex\", \"modal\", \"closeButtonProps\", \"dismissible\", \"showCloseIcon\", \"closeOnEscape\", \"transitionOptions\", \"visible\", \"position\", \"fullScreen\", \"header\", \"maskStyle\", \"closable\"], outputs: [\"onShow\", \"onHide\", \"visibleChange\"] }, { kind: \"component\", type: FormlyForm, selector: \"formly-form\", inputs: [\"form\", \"model\", \"fields\", \"options\"], outputs: [\"modelChange\"] }, { kind: \"ngmodule\", type: TableModule }, { kind: \"ngmodule\", type: SplitButtonModule }, { kind: \"component\", type: i7.SplitButton, selector: \"p-splitbutton, p-splitButton, p-split-button\", inputs: [\"model\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"icon\", \"iconPos\", \"label\", \"tooltip\", \"tooltipOptions\", \"styleClass\", \"menuStyle\", \"menuStyleClass\", \"dropdownIcon\", \"appendTo\", \"dir\", \"expandAriaLabel\", \"showTransitionOptions\", \"hideTransitionOptions\", \"buttonProps\", \"menuButtonProps\", \"autofocus\", \"disabled\", \"tabindex\", \"menuButtonDisabled\", \"buttonDisabled\"], outputs: [\"onClick\", \"onMenuHide\", \"onMenuShow\", \"onDropdownClick\"] }, { kind: \"ngmodule\", type: TooltipModule }, { kind: \"directive\", type: i8.Tooltip, selector: \"[pTooltip]\", inputs: [\"tooltipPosition\", \"tooltipEvent\", \"positionStyle\", \"tooltipStyleClass\", \"tooltipZIndex\", \"escape\", \"showDelay\", \"hideDelay\", \"life\", \"positionTop\", \"positionLeft\", \"autoHide\", \"fitContent\", \"hideOnEscape\", \"pTooltip\", \"tooltipDisabled\", \"tooltipOptions\", \"appendTo\"] }, { kind: \"pipe\", type: i9.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericReportComponent, decorators: [{\n type: Component,\n args: [{ selector: 'app-generic-report', imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n TranslateModule,\n ButtonModule,\n DialogModule,\n InputTextModule,\n RadioButtonModule,\n CheckboxModule,\n DrawerModule,\n FormlyForm,\n TableModule,\n SplitButtonModule,\n TooltipModule,\n ], providers: [DialogService, RestService], template: \"<!-- class=\\\"flex flex-col h-full bg-white dark:bg-gray-900 rounded-lg max-w-6xl mx-auto\\\" -->\\r\\n<div >\\r\\n <!-- Content -->\\r\\n <div class=\\\"flex-1 overflow-hidden p-2\\\">\\r\\n\\r\\n <!-- Preview Actions -->\\r\\n <div class=\\\"flex justify-between items-center mb-6 p-2 bg-white rounded-lg\\\">\\r\\n <h3 class=\\\"text-lg font-semibold text-gray-900 dark:text-white\\\">\\r\\n {{ 'REPORT' | translate }}\\r\\n </h3>\\r\\n <div class=\\\"flex gap-2\\\">\\r\\n <!-- Filters Button -->\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"showFilters = !showFilters\\\"\\r\\n class=\\\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\\\"\\r\\n [pTooltip]=\\\"'SEARCH_FILTERS' | translate\\\">\\r\\n <i class=\\\"pi pi-filter\\\"></i>\\r\\n <span *ngIf=\\\"filterCount > 0\\\" class=\\\"ml-2 bg-blue-500 text-white text-xs rounded-full h-5 w-5 flex items-center justify-center\\\">\\r\\n {{ filterCount }}\\r\\n </span>\\r\\n </button>\\r\\n\\r\\n <!-- Refresh Preview -->\\r\\n <button\\r\\n (click)=\\\"generatePreview()\\\"\\r\\n [disabled]=\\\"loading\\\"\\r\\n class=\\\"flex items-center px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-lg hover:bg-blue-700 disabled:bg-gray-300 disabled:cursor-not-allowed transition-colors\\\"\\r\\n [pTooltip]=\\\"'REFRESH' | translate\\\">\\r\\n <i class=\\\"pi pi-refresh mr-2 ml-2\\\" [class.animate-spin]=\\\"loading\\\"></i>\\r\\n {{ 'REFRESH' | translate }}\\r\\n </button>\\r\\n\\r\\n <!-- Print Button -->\\r\\n <button\\r\\n *ngIf=\\\"exportType === 4 || exportType === 1 || exportType === 2\\\"\\r\\n (click)=\\\"print()\\\"\\r\\n class=\\\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\\\"\\r\\n [pTooltip]=\\\"'PRINT' | translate\\\">\\r\\n <i class=\\\"pi pi-print mr-2 ml-2\\\"></i>\\r\\n {{ 'PRINT' | translate }}\\r\\n </button>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <!-- Preview Content -->\\r\\n <div #previewContainer class=\\\"bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg\\\">\\r\\n <!-- HTML Export Preview (Iframe) -->\\r\\n <div *ngIf=\\\"showHtmlInIframe && htmlExportContent || showPdfModal\\\" class=\\\"html-export-preview\\\">\\r\\n <iframe\\r\\n id=\\\"reportIframe\\\"\\r\\n class=\\\"w-full border border-gray-300 dark:border-gray-600 rounded-b-lg\\\"\\r\\n [style.height]=\\\"'600px'\\\"\\r\\n title=\\\"HTML Export Preview\\\"\\r\\n [src]=\\\"currentPdfUrl\\\"\\r\\n width=\\\"100%\\\"\\r\\n height=\\\"100%\\\"\\r\\n frameborder=\\\"0\\\"\\r\\n allowfullscreen\\r\\n\\r\\n >\\r\\n <!-- allowfullscreen -->\\r\\n </iframe>\\r\\n </div>\\r\\n <!-- <app-pdf-modal\\r\\n *ngIf=\\\"showPdfModal\\\"\\r\\n [pdfUrl]=\\\"currentPdfUrl\\\"\\r\\n [fileName]=\\\"currentFileName\\\"\\r\\n (closed)=\\\"onPdfModalClose()\\\"\\r\\n (downloadRequested)=\\\"onPdfDownload()\\\">\\r\\n</app-pdf-modal> -->\\r\\n\\r\\n <!-- Regular Preview Table -->\\r\\n <!-- <div *ngIf=\\\"!showHtmlInIframe\\\" class=\\\"p-4\\\">\\r\\n <p-table\\r\\n [value]=\\\"previewData\\\"\\r\\n [columns]=\\\"previewColumns\\\"\\r\\n [paginator]=\\\"true\\\"\\r\\n [rows]=\\\"10\\\"\\r\\n [showCurrentPageReport]=\\\"true\\\"\\r\\n currentPageReportTemplate=\\\"Showing {first} to {last} of {totalRecords} entries\\\"\\r\\n styleClass=\\\"p-datatable-sm\\\">\\r\\n <ng-template pTemplate=\\\"header\\\">\\r\\n <tr>\\r\\n <th *ngFor=\\\"let col of previewColumns\\\" class=\\\"text-left\\\">\\r\\n {{ col.header }}\\r\\n </th>\\r\\n </tr>\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"body\\\" let-rowData>\\r\\n <tr>\\r\\n <td *ngFor=\\\"let col of previewColumns\\\" class=\\\"text-left\\\">\\r\\n {{ rowData[col.field] }}\\r\\n </td>\\r\\n </tr>\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"emptymessage\\\">\\r\\n <tr>\\r\\n <td [attr.colspan]=\\\"previewColumns.length\\\" class=\\\"text-center py-4\\\">\\r\\n <div class=\\\"text-center py-8\\\">\\r\\n <i class=\\\"pi pi-inbox text-4xl text-gray-400 dark:text-gray-500 mb-4\\\"></i>\\r\\n <p class=\\\"text-gray-500 dark:text-gray-400\\\">{{ 'NO_PREVIEW_DATA' | translate }}</p>\\r\\n </div>\\r\\n </td>\\r\\n </tr>\\r\\n </ng-template>\\r\\n </p-table>\\r\\n </div> -->\\r\\n </div>\\r\\n\\r\\n <!-- <div class=\\\"mt-4 p-3 bg-green-50 dark:bg-green-900/20 rounded-lg\\\">\\r\\n <p class=\\\"text-sm text-green-700 dark:text-green-300\\\">\\r\\n <i class=\\\"pi pi-info-circle mr-2\\\"></i>\\r\\n {{ 'PREVIEW_INFO' | translate }}\\r\\n </p>\\r\\n </div> -->\\r\\n </div>\\r\\n\\r\\n <!-- Footer -->\\r\\n <div class=\\\"border-t border-gray-200 dark:border-gray-700 px-2 py-2 bg-gray-50 dark:bg-gray-800\\\">\\r\\n <div class=\\\"flex justify-between items-center\\\">\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"onReset()\\\"\\r\\n class=\\\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\\\"\\r\\n [disabled]=\\\"loading\\\">\\r\\n <i class=\\\"pi pi-refresh mr-2\\\"></i>\\r\\n {{ 'RESET' | translate }}\\r\\n </button>\\r\\n\\r\\n <div class=\\\"flex gap-2\\\">\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"ref?.close()\\\"\\r\\n class=\\\"px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\\\"\\r\\n [disabled]=\\\"loading\\\">\\r\\n {{ 'CANCEL' | translate }}\\r\\n </button>\\r\\n\\r\\n <!-- SplitButton for Export -->\\r\\n <!-- || previewData.length === 0 -->\\r\\n <p-splitButton\\r\\n [label]=\\\"getExportButtonText()\\\"\\r\\n [icon]=\\\"getCurrentExportTypeIcon()\\\"\\r\\n [model]=\\\"exportMenuItems\\\"\\r\\n (onClick)=\\\"onExport()\\\"\\r\\n [disabled]=\\\"loading\\\"\\r\\n styleClass=\\\"p-button-primary\\\">\\r\\n </p-splitButton>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <!-- Filters Drawer -->\\r\\n @if(showFilters){\\r\\n <p-drawer\\r\\n [(visible)]=\\\"showFilters\\\"\\r\\n position=\\\"right\\\"\\r\\n [styleClass]=\\\"'!w-full md:!w-80 lg:!w-[40rem] !h-full' \\\"\\r\\n [modal]=\\\"true\\\"\\r\\n [dismissible]=\\\"true\\\"\\r\\n styleClass=\\\"p-4 w-full max-w-md max-h-[90vh] flex flex-col\\\">\\r\\n <form [formGroup]=\\\"form\\\" (ngSubmit)=\\\"onSubmit(); showFilters=false\\\" class=\\\"flex flex-col flex-1\\\">\\r\\n <div class=\\\"flex-1 overflow-auto\\\">\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"fields_\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [options]=\\\"options\\\">\\r\\n </formly-form>\\r\\n </div>\\r\\n </form>\\r\\n <ng-template pTemplate=\\\"footer\\\">\\r\\n <div class=\\\"flex justify-end mt-2 space-x-2 flex-none\\\">\\r\\n <button\\r\\n type=\\\"submit\\\"\\r\\n pButton size=\\\"small\\\"\\r\\n (click)=\\\" onSubmit(); showFilters=false\\\"\\r\\n label=\\\"{{ 'SEARCH' | translate }}\\\">\\r\\n </button>\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n pButton\\r\\n size=\\\"small\\\"\\r\\n class=\\\"p-button-text\\\"\\r\\n (click)=\\\"onReset(); showFilters=false\\\">\\r\\n {{ 'CLEAR' | translate }}\\r\\n </button>\\r\\n </div>\\r\\n </ng-template>\\r\\n </p-drawer>\\r\\n }\\r\\n</div>\\r\\n\" }]\n }], ctorParameters: () => [{ type: i1.DynamicDialogRef }, { type: i1.DynamicDialogConfig }], propDecorators: { previewContainer: [{\n type: ViewChild,\n args: ['previewContainer']\n }], filterFields: [{\n type: Input\n }], enableQueryBuilder: [{\n type: Input\n }], localExport: [{\n type: Input\n }], queryString: [{\n type: Input\n }], apiName: [{\n type: Input\n }], model: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtcmVwb3J0L3NyYy9saWIvZ2VuZXJpYy1yZXBvcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtcmVwb3J0L3NyYy9saWIvZ2VuZXJpYy1yZXBvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUF3QyxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FB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YUFBYSxFQUFDLFdBQVcsQ0FBQzt1SEFHTixnQkFBZ0I7c0JBQTlDLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUVwQixZQUFZO3NCQUFwQixLQUFLO2dCQWFHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRm9ybWx5Rm9ybU9wdGlvbnMsIEZvcm1seUZvcm0gfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgRGlhbG9nTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kaWFsb2cnO1xyXG5pbXBvcnQgeyBJbnB1dFRleHRNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0dGV4dCc7XHJcbmltcG9ydCB7IFJhZGlvQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9yYWRpb2J1dHRvbic7XHJcbmltcG9ydCB7IENoZWNrYm94TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9jaGVja2JveCc7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dSZWYsIER5bmFtaWNEaWFsb2dDb25maWcsIERpYWxvZ1NlcnZpY2UgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBEcmF3ZXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RyYXdlcic7XHJcbmltcG9ydCB7IFRhYmxlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XHJcbmltcG9ydCB7IFNwbGl0QnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9zcGxpdGJ1dHRvbic7XHJcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcclxuaW1wb3J0IHsgUmVwb3J0TmFtZURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vcmVwb3J0LW5hbWUtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZVJlc291cmNlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IFF1ZXJ5QnVpbGRlclNlcnZpY2UgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWFyY2gtYWR2YW5jZWQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRDb25maWcge1xyXG4gIGZpbHRlcnM6IGFueTtcclxuICBleHBvcnRUeXBlOiBFeHBvcnRUeXBlO1xyXG4gIGZpbGVOYW1lPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBFeHBvcnRUeXBlIHtcclxuICBMSVNULFxyXG4gIEhUTUwsXHJcbiAgUERGLFxyXG4gIEVYQ0VMLFxyXG4gIFBSSU5UXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWdlbmVyaWMtcmVwb3J0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJpYy1yZXBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcclxuICAgIEJ1dHRvbk1vZHVsZSxcclxuICAgIERpYWxvZ01vZHVsZSxcclxuICAgIElucHV0VGV4dE1vZHVsZSxcclxuICAgIFJhZGlvQnV0dG9uTW9kdWxlLFxyXG4gICAgQ2hlY2tib3hNb2R1bGUsXHJcbiAgICBEcmF3ZXJNb2R1bGUsXHJcbiAgICBGb3JtbHlGb3JtLFxyXG4gICAgVGFibGVNb2R1bGUsXHJcbiAgICBTcGxpdEJ1dHRvbk1vZHVsZSxcclxuICAgIFRvb2x0aXBNb2R1bGUsXHJcblxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOltEaWFsb2dTZXJ2aWNlLFJlc3RTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2VuZXJpY1JlcG9ydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKCdwcmV2aWV3Q29udGFpbmVyJykgcHJldmlld0NvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBJbnB1dCgpIGZpbHRlckZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xyXG4gIGZpZWxkc186IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcclxuICBleHBvcnRUeXBlOiBFeHBvcnRUeXBlID0gRXhwb3J0VHlwZS5QREY7XHJcbiAgZmlsZU5hbWU6IHN0cmluZyA9ICcnO1xyXG4gIHNob3dGaWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGN1cnJlbnREYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcclxuICBwcmV2aWV3RGF0YTogYW55W10gPSBbXTtcclxuICBodG1sRXhwb3J0Q29udGVudDogc3RyaW5nID0gJyc7XHJcbiAgc2hvd0h0bWxJbklmcmFtZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByZXZpZXdDb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG5cclxuICBvcHRpb25zOiBGb3JtbHlGb3JtT3B0aW9ucyA9IHt9O1xyXG4gIEBJbnB1dCgpIGVuYWJsZVF1ZXJ5QnVpbGRlcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgbG9jYWxFeHBvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBxdWVyeVN0cmluZzogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgYXBpTmFtZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIEBJbnB1dCgpIG1vZGVsOiBhbnkgPSB7fTtcclxuICBmb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgZXhwb3J0Q29uZmlnITogRXhwb3J0Q29uZmlnO1xyXG5cclxuICBleHBvcnRUeXBlcyA9IFtcclxuICAgIHsgdmFsdWU6IEV4cG9ydFR5cGUuRVhDRUwsIGxhYmVsOiAnRVhDRUwnLCBpY29uOiAncGkgcGktZmlsZS1leGNlbCcgfSxcclxuICAgIHsgdmFsdWU6IEV4cG9ydFR5cGUuUERGLCBsYWJlbDogJ1BERicsIGljb246ICdwaSBwaS1maWxlLXBkZicgfSxcclxuICAgIHsgdmFsdWU6IEV4cG9ydFR5cGUuSFRNTCwgbGFiZWw6ICdIVE1MJywgaWNvbjogJ3BpIHBpLWNvZGUnIH0sXHJcbiAgICB7IHZhbHVlOiBFeHBvcnRUeXBlLlBSSU5ULCBsYWJlbDogJ1BSSU5UJywgaWNvbjogJ3BpIHBpLXByaW50JyB9XHJcbiAgXTtcclxuXHJcbiAgZXhwb3J0TWVudUl0ZW1zOiBNZW51SXRlbVtdID0gW107XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgZGlhbG9nU2VydmljZTpEaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xyXG4gIHByaXZhdGUgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xyXG4gIHByaXZhdGUgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlID0gaW5qZWN0KFJlc3RTZXJ2aWNlKTtcclxuICBwcml2YXRlIHF1ZXJ5QnVpbGRlciA9IGluamVjdChRdWVyeUJ1aWxkZXJTZXJ2aWNlKTtcclxucHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJlZjogRHluYW1pY0RpYWxvZ1JlZixcclxuICAgIHB1YmxpYyBjb25maWc6IER5bmFtaWNEaWFsb2dDb25maWdcclxuICApIHt9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMucmVmKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5yZWYuY2xvc2UoKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vIElnbm9yZSBlcnJvcnMgZHVyaW5nIGNsZWFudXBcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmZpbHRlckZpZWxkcyA9IHRoaXMuY29uZmlnLmRhdGE/LmZpbHRlckZpZWxkcyB8fCBbXTtcclxuICAgIHRoaXMuYnVpbGRRdWVyeVVJRmllbGRzKCk7XHJcbiAgICB0aGlzLmluaXRpYWxpemVDb21wb25lbnQoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZUV4cG9ydENvbmZpZygpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplRXhwb3J0TWVudSgpO1xyXG4gIH1cclxuIGdldCBmaWx0ZXJDb3VudCgpIHtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5xdWVyeUJ1aWxkZXIuZ2V0QXBwbGllZEZpbHRlcnNDb3VudCh0aGlzLm1vZGVsKS50b3RhbDtcclxuICB9XHJcbiAgcHJpdmF0ZSBidWlsZFF1ZXJ5VUlGaWVsZHMoKSB7XHJcbiAgICBpZiAodGhpcy5lbmFibGVRdWVyeUJ1aWxkZXIpIHtcclxuICAgICAgdGhpcy5maWVsZHNfID0gdGhpcy5xdWVyeUJ1aWxkZXIuYnVpbGRRdWVyeVVJRmllbGRzKHRoaXMuZmlsdGVyRmllbGRzLHRydWUsdHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkc18gPSB0aGlzLmZpbHRlckZpZWxkcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbXBvbmVudCgpIHtcclxuICAgIHRoaXMuYXBpTmFtZSA9IHRoaXMuY29uZmlnLmRhdGE/LmFwaU5hbWUgfHwgJyc7XHJcbiAgICB0aGlzLmluaXRpYWxpemVGaWx0ZXJGaWVsZHMoKTtcclxuICAgIHRoaXMub25FeHBvcnQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUZpbHRlckZpZWxkcygpIHtcclxuICAgIHRoaXMuZmlsdGVyRmllbGRzID0gdGhpcy5jb25maWcuZGF0YT8uZmlsdGVyRmllbGRzIHx8IHRoaXMuZ2V0RGVmYXVsdEZpbHRlckZpZWxkcygpO1xyXG4gICAgdGhpcy5tb2RlbCA9IHRoaXMuY29uZmlnLmRhdGE/Lm1vZGVsIHx8IHt9O1xyXG4gICAgdGhpcy5maWxlTmFtZSA9IHRoaXMuY29uZmlnLmRhdGE/LmRlZmF1bHRGaWxlTmFtZSB8fCBgZXhwb3J0XyR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF19YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUV4cG9ydENvbmZpZygpIHtcclxuICAgIHRoaXMuZXhwb3J0Q29uZmlnID0ge1xyXG4gICAgICBmaWx0ZXJzOiB0aGlzLm1vZGVsLFxyXG4gICAgICBleHBvcnRUeXBlOiB0aGlzLmV4cG9ydFR5cGUsXHJcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiBwcml2YXRlIGluaXRpYWxpemVFeHBvcnRNZW51KCkge1xyXG4gIHRoaXMuZXhwb3J0TWVudUl0ZW1zID0gW1xyXG4gICAgLy8gRWRpdCBSZXBvcnQgTmFtZSBtZW51IGl0ZW1cclxuICAgIHtcclxuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ0VESVRfUkVQT1JUX05BTUUnKSxcclxuICAgICAgaWNvbjogJ3BpIHBpLXBlbmNpbCcsXHJcbiAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMub3BlblJlcG9ydE5hbWVEaWFsb2coKVxyXG4gICAgfSxcclxuICAgIC8vIFNlcGFyYXRvclxyXG4gICAgeyBzZXBhcmF0b3I6IHRydWUgfSxcclxuICAgIC8vIEV4cG9ydCB0eXBlIG1lbnUgaXRlbXNcclxuICAgIC4uLnRoaXMuZXhwb3J0VHlwZXMubWFwKHR5cGUgPT4gKHtcclxuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQodHlwZS5sYWJlbCksXHJcbiAgICAgIGljb246IHR5cGUuaWNvbixcclxuICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy5vbkV4cG9ydFR5cGVDaGFuZ2UodHlwZS52YWx1ZSlcclxuICAgIH0pKVxyXG4gIF07XHJcbn1cclxuXHJcbnByaXZhdGUgb3BlblJlcG9ydE5hbWVEaWFsb2coKSB7XHJcbiAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oUmVwb3J0TmFtZURpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdFRElUX1JFUE9SVF9OQU1FJyksXHJcbiAgICB3aWR0aDogJzUwMHB4JyxcclxuICAgIGRhdGE6IHtcclxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWVcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXN1bHQ6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICB0aGlzLmZpbGVOYW1lID0gcmVzdWx0O1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG4gIHByaXZhdGUgZ2V0RGVmYXVsdEZpbHRlckZpZWxkcygpOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6ICdzZWFyY2gnLFxyXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdTRUFSQ0gnKSxcclxuICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdFTlRFUl9TRUFSQ0hfVEVSTScpLFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIC8vIFF1ZXJ5IGFuZCBQcmV2aWV3IE1ldGhvZHNcclxuICBnZW5lcmF0ZVByZXZpZXcoKSB7XHJcbiAgICB0aGlzLm9uRXhwb3J0KCk7XHJcbiAgfVxyXG5cclxuICBvblN1Ym1pdCgpIHtcclxuICAgIGNvbnN0IG9kYXRhUGFyYW1zID0gdGhpcy5xdWVyeUJ1aWxkZXIuYnVpbGRPRGF0YUZyb21RdWVyeU1vZGVsKHRoaXMubW9kZWwsIHRoaXMuZmlsdGVyRmllbGRzKTtcclxuICAgIHRoaXMucXVlcnlTdHJpbmcgPSB0aGlzLnF1ZXJ5QnVpbGRlci50b09EYXRhUXVlcnlTdHJpbmcob2RhdGFQYXJhbXMpO1xyXG4gICAgdGhpcy5vbkV4cG9ydCgpO1xyXG4gIH1cclxuXHJcbiAgb25SZXNldCgpIHtcclxuICAgIHRoaXMuZXhwb3J0VHlwZSA9IEV4cG9ydFR5cGUuUERGO1xyXG4gICAgdGhpcy5maWxlTmFtZSA9IGBleHBvcnRfJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXX1gO1xyXG4gICAgdGhpcy5mb3JtLnJlc2V0KCk7XHJcbiAgICB0aGlzLm1vZGVsID0ge307XHJcbiAgICB0aGlzLmdlbmVyYXRlUHJldmlldygpO1xyXG4gIH1cclxuXHJcbiAgLy8gRXhwb3J0IE1ldGhvZHNcclxuICBvbkV4cG9ydCgpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBleHBvcnRDb25maWcgPSB0aGlzLmNyZWF0ZUV4cG9ydENvbmZpZygpO1xyXG4gICAgdGhpcy5oYW5kbGVBcGlFeHBvcnQoZXhwb3J0Q29uZmlnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRXhwb3J0Q29uZmlnKCk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmaWx0ZXJzOiB0aGlzLm1vZGVsLFxyXG4gICAgICBleHBvcnRUeXBlOiB0aGlzLmV4cG9ydFR5cGUsXHJcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVBcGlFeHBvcnQoY29uZmlnOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gdGhpcy5jcmVhdGVSZXF1ZXN0T3B0aW9ucyhjb25maWcpO1xyXG5cclxuICAgIHRoaXMucmVzdFNlcnZpY2UucmVxdWVzdDxhbnksIGFueT4oXHJcbiAgICAgIHJlcXVlc3RPcHRpb25zLFxyXG4gICAgICB7IGFwaU5hbWU6IHRoaXMuYXBpTmFtZSB9XHJcbiAgICApXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUV4cG9ydFJlc3BvbnNlKHJlc3BvbnNlLCBjb25maWcpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXhwb3J0IGZhaWxlZDonLCBlcnJvcik7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVSZXF1ZXN0T3B0aW9ucyhjb25maWc6IGFueSk6IGFueSB7XHJcbiAgICAgLy8gRGVmYXVsdCBxdWVyeVxyXG4gICAgaWYoIXRoaXMucXVlcnlTdHJpbmcgfHwgdGhpcy5xdWVyeVN0cmluZyA9PSAnJyl7XHJcblxyXG4gICAgICAgLy8gVXNlIHRoZSBuZXcgUXVlcnlCdWlsZGVyU2VydmljZSBtZXRob2RzXHJcbiAgICBjb25zdCBvZGF0YVBhcmFtcyA9IHRoaXMucXVlcnlCdWlsZGVyLmJ1aWxkT0RhdGFGcm9tUXVlcnlNb2RlbCh0aGlzLm1vZGVsLCB0aGlzLmZpbHRlckZpZWxkcyk7XHJcbiAgICAvLyB0aGlzLm9kYXRhU2VhcmNoLmVtaXQob2RhdGFQYXJhbXMpO1xyXG5cclxuICAgIC8vIEdlbmVyYXRlIHF1ZXJ5IHN0cmluZyB1c2luZyB0aGUgdW5pZmllZCBtZXRob2RcclxuICAgICB0aGlzLnF1ZXJ5U3RyaW5nID0gdGhpcy5xdWVyeUJ1aWxkZXIudG9PRGF0YVF1ZXJ5U3RyaW5nKG9kYXRhUGFyYW1zKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdPRGF0YSBRdWVyeSBTdHJpbmc6JywgcXVlcnlTdHJpbmcpO1xyXG5cclxuICB9XHJcbiAgICBjb25zdCBmaWx0ZXJzOiBQYXJ0aWFsPGFueT4gPSB7XHJcbiAgICAgIGZpbGVOYW1lOiBjb25maWcuZmlsZU5hbWUgfHwgJycsXHJcbiAgICAgIHF1ZXJ5OiB0aGlzLnF1ZXJ5U3RyaW5nLFxyXG4gICAgICBleHBvcnRUeXBlOiBjb25maWcuZXhwb3J0VHlwZSxcclxuICAgIH07XHJcblxyXG5cclxuXHJcbiAgICBjb25zdCBwYXJhbXMgPSBPYmplY3Qua2V5cyhmaWx0ZXJzKS5yZWR1Y2UoKGFjYzogYW55LCBrZXkpID0+IHtcclxuICAgICAgYWNjW2tleV0gPSBmaWx0ZXJzW2tleV07XHJcbiAgICAgIHJldHVybiBhY2M7XHJcbiAgICB9LCB7fSk7XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnM6IGFueSA9IHtcclxuICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgdXJsOiBgLyR7dGhpcy5hcGlOYW1lfS9leHBvcnRgLFxyXG4gICAgICBwYXJhbXM6IHBhcmFtc1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoY29uZmlnLmV4cG9ydFR5cGUgPT09IEV4cG9ydFR5cGUuSFRNTCkge1xyXG4gICAgICByZXF1ZXN0T3B0aW9ucy5yZXNwb25zZVR5cGUgPSAndGV4dCc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlcXVlc3RPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBoYW5kbGVFeHBvcnRSZXNwb25zZShyZXNwb25zZTogYW55LCBjb25maWc6IGFueSkge1xyXG4gIC8vICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIC8vICAgaWYgKGNvbmZpZy5leHBvcnRUeXBlID09PSBFeHBvcnRUeXBlLkhUTUwpIHtcclxuICAvLyAgICAgdGhpcy5zaG93SHRtbEV4cG9ydChyZXNwb25zZSk7XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICB0aGlzLmRvd25sb2FkQmluYXJ5RXhwb3J0KHJlc3BvbnNlLCBjb25maWcpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuICAgcHJpdmF0ZSBoYW5kbGVFeHBvcnRSZXNwb25zZShyZXNwb25zZTogYW55LCBjb25maWc6IGFueSkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGNvbmZpZy5leHBvcnRUeXBlID09PSBFeHBvcnRUeXBlLkhUTUwpIHtcclxuICAgICAgdGhpcy5zaG93SHRtbEV4cG9ydChyZXNwb25zZSk7XHJcbiAgICAvLyB9IGVsc2UgaWYgKGNvbmZpZy5leHBvcnRUeXBlID09PSBFeHBvcnRUeXBlLlBERiAmJiB0aGlzLmlzTW9iaWxlRGV2aWNlKCkpIHtcclxuICAgIH0gZWxzZSBpZiAoY29uZmlnLmV4cG9ydFR5cGUgPT09IEV4cG9ydFR5cGUuUERGKSB7XHJcbiAgICAgIHRoaXMuc2hvd1BkZkluTW9iaWxlKHJlc3BvbnNlLCBjb25maWcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kb3dubG9hZEJpbmFyeUV4cG9ydChyZXNwb25zZSwgY29uZmlnKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8gUGxhdGZvcm0gZGV0ZWN0aW9uIG1ldGhvZHNcclxucHJpdmF0ZSBpc01vYmlsZURldmljZSgpOiBib29sZWFuIHtcclxuICByZXR1cm4gL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG59XHJcblxyXG5wcml2YXRlIGlzSU9TKCk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcclxufVxyXG5cclxucHJpdmF0ZSBpc0FuZHJvaWQoKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIC9BbmRyb2lkLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG59XHJcbiAgc2hvd1BkZk1vZGFsID0gZmFsc2U7XHJcbiAgY3VycmVudFBkZlVybD86U2FmZVJlc291cmNlVXJsO1xyXG4gIGN1cnJlbnRGaWxlTmFtZSA9ICcnO1xyXG4gcHJpdmF0ZSBzaG93UGRmSW5Nb2JpbGUoYmFzZTY0RGF0YTogc3RyaW5nLCBjb25maWc6IGFueSk6IHZvaWQge1xyXG5cclxuXHJcbiAgICB0cnkge1xyXG4gICBjb25zdCBibG9iID0gdGhpcy5iYXNlNjRUb0Jsb2IoYmFzZTY0RGF0YSwgdGhpcy5nZXRNaW1lVHlwZShFeHBvcnRUeXBlLlBERikpO1xyXG4gICAgdGhpcy5jdXJyZW50UGRmVXJsID0gdGhpcy5zYW5pdGl6ZVVybChVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpKTtcclxuICAgIHRoaXMuY3VycmVudEZpbGVOYW1lID0gYCR7Y29uZmlnLmZpbGVOYW1lfS5wZGZgO1xyXG4gICAgdGhpcy5zaG93UGRmTW9kYWwgPSB0cnVlO1xyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICB2YXIgZXJyb3IgPSAnUERGIGlzIHRvbyBsYXJnZSBmb3IgbW9iaWxlIHZpZXdpbmcuIFBsZWFzZSBkb3dubG9hZCBpbnN0ZWFkLic7XHJcbiAgfSBmaW5hbGx5IHtcclxuICAgIC8vIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gIH1cclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIHNhbml0aXplVXJsKHVybDogc3RyaW5nKTogU2FmZVJlc291cmNlVXJsIHtcclxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodXJsKTtcclxuICB9XHJcblxyXG4gIC8vIG9uUGRmTW9kYWxDbG9zZSgpOiB2b2lkIHtcclxuICAvLyAgIHRoaXMuc2hvd1BkZk1vZGFsID0gZmFsc2U7XHJcbiAgLy8gICBpZiAodGhpcy5jdXJyZW50UGRmVXJsKSB7XHJcbiAgLy8gICAgIFVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5jdXJyZW50UGRmVXJsKTtcclxuICAvLyAgICAgdGhpcy5jdXJyZW50UGRmVXJsID0gJyc7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBvblBkZkRvd25sb2FkKCk6IHZvaWQge1xyXG4gICAgLy8gVHJpZ2dlciBkb3dubG9hZFxyXG4gICAgLy8gY29uc3QgYmxvYiA9IHRoaXMuYmFzZTY0VG9CbG9iKHRoaXMuZ2V0Q3VycmVudEJhc2U2NCgpLCB0aGlzLmdldE1pbWVUeXBlKEV4cG9ydFR5cGUuUERGKSk7XHJcbiAgICAvLyB0aGlzLmRvd25sb2FkRmlsZShibG9iLCB0aGlzLmN1cnJlbnRGaWxlTmFtZSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgZG93bmxvYWRCaW5hcnlFeHBvcnQocmVzcG9uc2U6IGFueSwgY29uZmlnOiBhbnkpIHtcclxuICAgIGNvbnN0IGJsb2IgPSB0aGlzLmJhc2U2NFRvQmxvYihcclxuICAgICAgcmVzcG9uc2UsXHJcbiAgICAgIHRoaXMuZ2V0TWltZVR5cGUoY29uZmlnLmV4cG9ydFR5cGUpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuZG93bmxvYWRGaWxlKFxyXG4gICAgICBibG9iLFxyXG4gICAgICBgJHtjb25maWcuZmlsZU5hbWV9LiR7dGhpcy5nZXRGaWxlRXh0ZW5zaW9uKGNvbmZpZy5leHBvcnRUeXBlKX1gXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gSFRNTCBFeHBvcnQgTWV0aG9kc1xyXG4gIHByaXZhdGUgc2hvd0h0bWxFeHBvcnQoaHRtbENvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgY2xlYW5IdG1sID0gdGhpcy5jbGVhbkh0bWxDb250ZW50KGh0bWxDb250ZW50KTtcclxuICAgIHRoaXMuaHRtbEV4cG9ydENvbnRlbnQgPSBjbGVhbkh0bWw7XHJcbiAgICB0aGlzLnNob3dIdG1sSW5JZnJhbWUgPSB0cnVlO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldElmcmFtZUNvbnRlbnQoY2xlYW5IdG1sKTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldElmcmFtZUNvbnRlbnQoaHRtbENvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlcG9ydElmcmFtZScpIGFzIEhUTUxJRnJhbWVFbGVtZW50O1xyXG4gICAgaWYgKCFpZnJhbWUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignSWZyYW1lIG5vdCBmb3VuZCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaWZyYW1lRG9jID0gaWZyYW1lLmNvbnRlbnREb2N1bWVudCB8fCBpZnJhbWUuY29udGVudFdpbmRvdz8uZG9jdW1lbnQ7XHJcbiAgICBpZiAoaWZyYW1lRG9jKSB7XHJcbiAgICAgIGlmcmFtZURvYy5vcGVuKCk7XHJcbiAgICAgIGlmcmFtZURvYy53cml0ZShodG1sQ29udGVudCk7XHJcbiAgICAgIGlmcmFtZURvYy5jbG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpbnQoKTogdm9pZCB7XHJcbiAgICAvLyBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVwb3J0SWZyYW1lJykgYXMgSFRNTElGcmFtZUVsZW1lbnQgfCBudWxsO1xyXG4gICAgLy8gaWYgKCFpZnJhbWUgfHwgIWlmcmFtZS5jb250ZW50V2luZG93KSByZXR1cm47XHJcblxyXG4gICAgLy8gY29uc3QgaWZyYW1lV2luZG93ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3c7XHJcbiAgICAvLyBpZnJhbWVXaW5kb3cuZm9jdXMoKTtcclxuICAgIC8vIGlmcmFtZVdpbmRvdy5wcmludCgpO1xyXG5cclxuICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlcG9ydElmcmFtZScpIGFzIGFueSkuY29udGVudFdpbmRvdy5wcmludCgpIDtcclxuICB9XHJcblxyXG5cclxuICAvLyBVdGlsaXR5IE1ldGhvZHNcclxuICBnZXRFeHBvcnRCdXR0b25UZXh0KCk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuZXhwb3J0VHlwZSkge1xyXG4gICAgICBjYXNlIEV4cG9ydFR5cGUuUFJJTlQ6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ1BSSU5UJyk7XHJcbiAgICAgIGNhc2UgRXhwb3J0VHlwZS5IVE1MOlxyXG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdFWFBPUlQnKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnRVhQT1JUJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkV4cG9ydFR5cGVDaGFuZ2UodHlwZTogRXhwb3J0VHlwZSkge1xyXG4gICAgdGhpcy5leHBvcnRUeXBlID0gdHlwZTtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnRFeHBvcnRUeXBlSWNvbigpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY3VycmVudFR5cGUgPSB0aGlzLmV4cG9ydFR5cGVzLmZpbmQodHlwZSA9PiB0eXBlLnZhbHVlID09PSB0aGlzLmV4cG9ydFR5cGUpO1xyXG4gICAgcmV0dXJuIGN1cnJlbnRUeXBlPy5pY29uIHx8ICdwaSBwaS1kb3dubG9hZCc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJhc2U2NFRvQmxvYihiYXNlNjQ6IHN0cmluZywgbWltZTogc3RyaW5nKTogQmxvYiB7XHJcbiAgICBjb25zdCBieXRlQ2hhcnMgPSBhdG9iKGJhc2U2NCk7XHJcbiAgICBjb25zdCBieXRlTnVtcyA9IEFycmF5LmZyb20oYnl0ZUNoYXJzLCBjID0+IGMuY2hhckNvZGVBdCgwKSk7XHJcbiAgICByZXR1cm4gbmV3IEJsb2IoW25ldyBVaW50OEFycmF5KGJ5dGVOdW1zKV0sIHsgdHlwZTogbWltZSB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZG93bmxvYWRGaWxlKGJsb2I6IEJsb2IsIGZpbGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGxpbmsuaHJlZiA9IHVybDtcclxuICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlTmFtZTtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xyXG4gICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmlsZUV4dGVuc2lvbihleHBvcnRUeXBlOiBFeHBvcnRUeXBlKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAoZXhwb3J0VHlwZSkge1xyXG4gICAgICBjYXNlIEV4cG9ydFR5cGUuRVhDRUw6XHJcbiAgICAgICAgcmV0dXJuICd4bHN4JztcclxuICAgICAgY2FzZSBFeHBvcnRUeXBlLlBERjpcclxuICAgICAgICByZXR1cm4gJ3BkZic7XHJcbiAgICAgIGNhc2UgRXhwb3J0VHlwZS5IVE1MOlxyXG4gICAgICAgIHJldHVybiAnaHRtbCc7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICdwZGYnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNaW1lVHlwZShleHBvcnRUeXBlOiBFeHBvcnRUeXBlKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAoZXhwb3J0VHlwZSkge1xyXG4gICAgICBjYXNlIEV4cG9ydFR5cGUuRVhDRUw6XHJcbiAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCc7XHJcbiAgICAgIGNhc2UgRXhwb3J0VHlwZS5QREY6XHJcbiAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9wZGYnO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYW5IdG1sQ29udGVudChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGh0bWxcclxuICAgICAgLnJlcGxhY2UoL1xcXFxyXFxcXG4vZywgJ1xcbicpXHJcbiAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJylcclxuICAgICAgLnJlcGxhY2UoL1xcXFx0L2csICcgJylcclxuICAgICAgLnRyaW0oKTtcclxuICB9XHJcbn1cclxuIiwiPCEtLSBjbGFzcz1cImZsZXggZmxleC1jb2wgaC1mdWxsIGJnLXdoaXRlIGRhcms6YmctZ3JheS05MDAgcm91bmRlZC1sZyBtYXgtdy02eGwgbXgtYXV0b1wiIC0tPlxyXG48ZGl2ID5cclxuICA8IS0tIENvbnRlbnQgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImZsZXgtMSBvdmVyZmxvdy1oaWRkZW4gcC0yXCI+XHJcblxyXG4gICAgPCEtLSBQcmV2aWV3IEFjdGlvbnMgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIG1iLTYgcC0yIGJnLXdoaXRlIHJvdW5kZWQtbGdcIj5cclxuICAgICAgPGgzIGNsYXNzPVwidGV4dC1sZyBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlXCI+XHJcbiAgICAgICAge3sgJ1JFUE9SVCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9oMz5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTJcIj5cclxuICAgICAgICA8IS0tIEZpbHRlcnMgQnV0dG9uIC0tPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dGaWx0ZXJzID0gIXNob3dGaWx0ZXJzXCJcclxuICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBkYXJrOnRleHQtZ3JheS0zMDAgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCByb3VuZGVkLWxnIGhvdmVyOmJnLWdyYXktNTAgZGFyazpob3ZlcjpiZy1ncmF5LTcwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICAgICAgICBbcFRvb2x0aXBdPVwiJ1NFQVJDSF9GSUxURVJTJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1maWx0ZXJcIj48L2k+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlckNvdW50ID4gMFwiIGNsYXNzPVwibWwtMiBiZy1ibHVlLTUwMCB0ZXh0LXdoaXRlIHRleHQteHMgcm91bmRlZC1mdWxsIGgtNSB3LTUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cclxuICAgICAgICAgICAge3sgZmlsdGVyQ291bnQgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPCEtLSBSZWZyZXNoIFByZXZpZXcgLS0+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKGNsaWNrKT1cImdlbmVyYXRlUHJldmlldygpXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nXCJcclxuICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSBiZy1ibHVlLTYwMCByb3VuZGVkLWxnIGhvdmVyOmJnLWJsdWUtNzAwIGRpc2FibGVkOmJnLWdyYXktMzAwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICAgICAgICBbcFRvb2x0aXBdPVwiJ1JFRlJFU0gnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXJlZnJlc2ggbXItMiBtbC0yXCIgW2NsYXNzLmFuaW1hdGUtc3Bpbl09XCJsb2FkaW5nXCI+PC9pPlxyXG4gICAgICAgICAge3sgJ1JFRlJFU0gnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDwhLS0gUHJpbnQgQnV0dG9uIC0tPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICpuZ0lmPVwiZXhwb3J0VHlwZSA9PT0gNCB8fCBleHBvcnRUeXBlID09PSAxIHx8IGV4cG9ydFR5cGUgPT09IDJcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInByaW50KClcIlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBweC00IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIGRhcms6dGV4dC1ncmF5LTMwMCBib3JkZXIgYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwIHJvdW5kZWQtbGcgaG92ZXI6YmctZ3JheS01MCBkYXJrOmhvdmVyOmJnLWdyYXktNzAwIHRyYW5zaXRpb24tY29sb3JzXCJcclxuICAgICAgICAgIFtwVG9vbHRpcF09XCInUFJJTlQnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXByaW50IG1yLTIgbWwtMlwiPjwvaT5cclxuICAgICAgICAgIHt7ICdQUklOVCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFByZXZpZXcgQ29udGVudCAtLT5cclxuICAgIDxkaXYgI3ByZXZpZXdDb250YWluZXIgY2xhc3M9XCJiZy13aGl0ZSBkYXJrOmJnLWdyYXktODAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZ3JheS03MDAgcm91bmRlZC1sZ1wiPlxyXG4gICAgICA8IS0tIEhUTUwgRXhwb3J0IFByZXZpZXcgKElmcmFtZSkgLS0+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93SHRtbEluSWZyYW1lICYmIGh0bWxFeHBvcnRDb250ZW50IHx8IHNob3dQZGZNb2RhbFwiIGNsYXNzPVwiaHRtbC1leHBvcnQtcHJldmlld1wiPlxyXG4gICAgICAgIDxpZnJhbWVcclxuICAgICAgICAgIGlkPVwicmVwb3J0SWZyYW1lXCJcclxuICAgICAgICAgIGNsYXNzPVwidy1mdWxsIGJvcmRlciBib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZ3JheS02MDAgcm91bmRlZC1iLWxnXCJcclxuICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiJzYwMHB4J1wiXHJcbiAgICAgICAgICB0aXRsZT1cIkhUTUwgRXhwb3J0IFByZXZpZXdcIlxyXG4gICAgICAgICAgW3NyY109XCJjdXJyZW50UGRmVXJsXCJcclxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcclxuICAgICAgICAgICAgaGVpZ2h0PVwiMTAwJVwiXHJcbiAgICAgICAgICAgIGZyYW1lYm9yZGVyPVwiMFwiXHJcbiAgICAgICAgICAgIGFsbG93ZnVsbHNjcmVlblxyXG5cclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwhLS0gIGFsbG93ZnVsbHNjcmVlbiAtLT5cclxuICAgICAgICA8L2lmcmFtZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gPGFwcC1wZGYtbW9kYWxcclxuICAqbmdJZj1cInNob3dQZGZNb2RhbFwiXHJcbiAgW3BkZlVybF09XCJjdXJyZW50UGRmVXJsXCJcclxuICBbZmlsZU5hbWVdPVwiY3VycmVudEZpbGVOYW1lXCJcclxuICAoY2xvc2VkKT1cIm9uUGRmTW9kYWxDbG9zZSgpXCJcclxuICAoZG93bmxvYWRSZXF1ZXN0ZWQpPVwib25QZGZEb3dubG9hZCgpXCI+XHJcbjwvYXBwLXBkZi1tb2RhbD4gLS0+XHJcblxyXG4gICAgICA8IS0tIFJlZ3VsYXIgUHJldmlldyBUYWJsZSAtLT5cclxuICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiIXNob3dIdG1sSW5JZnJhbWVcIiBjbGFzcz1cInAtNFwiPlxyXG4gICAgICAgIDxwLXRhYmxlXHJcbiAgICAgICAgICBbdmFsdWVdPVwicHJldmlld0RhdGFcIlxyXG4gICAgICAgICAgW2NvbHVtbnNdPVwicHJldmlld0NvbHVtbnNcIlxyXG4gICAgICAgICAgW3BhZ2luYXRvcl09XCJ0cnVlXCJcclxuICAgICAgICAgIFtyb3dzXT1cIjEwXCJcclxuICAgICAgICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwiU2hvd2luZyB7Zmlyc3R9IHRvIHtsYXN0fSBvZiB7dG90YWxSZWNvcmRzfSBlbnRyaWVzXCJcclxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zbVwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgcHJldmlld0NvbHVtbnNcIiBjbGFzcz1cInRleHQtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmhlYWRlciB9fVxyXG4gICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtcm93RGF0YT5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sIG9mIHByZXZpZXdDb2x1bW5zXCIgY2xhc3M9XCJ0ZXh0LWxlZnRcIj5cclxuICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwicHJldmlld0NvbHVtbnMubGVuZ3RoXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHktOFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWluYm94IHRleHQtNHhsIHRleHQtZ3JheS00MDAgZGFyazp0ZXh0LWdyYXktNTAwIG1iLTRcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1ncmF5LTUwMCBkYXJrOnRleHQtZ3JheS00MDBcIj57eyAnTk9fUFJFVklFV19EQVRBJyB8IHRyYW5zbGF0ZSB9fTwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvcC10YWJsZT5cclxuICAgICAgPC9kaXY+IC0tPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwibXQtNCBwLTMgYmctZ3JlZW4tNTAgZGFyazpiZy1ncmVlbi05MDAvMjAgcm91bmRlZC1sZ1wiPlxyXG4gICAgICA8cCBjbGFzcz1cInRleHQtc20gdGV4dC1ncmVlbi03MDAgZGFyazp0ZXh0LWdyZWVuLTMwMFwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwicGkgcGktaW5mby1jaXJjbGUgbXItMlwiPjwvaT5cclxuICAgICAgICB7eyAnUFJFVklFV19JTkZPJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L3A+XHJcbiAgICA8L2Rpdj4gLS0+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gRm9vdGVyIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJib3JkZXItdCBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZ3JheS03MDAgcHgtMiBweS0yIGJnLWdyYXktNTAgZGFyazpiZy1ncmF5LTgwMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uUmVzZXQoKVwiXHJcbiAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBweC00IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIGRhcms6dGV4dC1ncmF5LTMwMCBob3Zlcjp0ZXh0LWdyYXktOTAwIGRhcms6aG92ZXI6dGV4dC13aGl0ZSBob3ZlcjpiZy1ncmF5LTEwMCBkYXJrOmhvdmVyOmJnLWdyYXktNzAwIHJvdW5kZWQtbGcgdHJhbnNpdGlvbi1jb2xvcnNcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1yZWZyZXNoIG1yLTJcIj48L2k+XHJcbiAgICAgICAge3sgJ1JFU0VUJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yXCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwicmVmPy5jbG9zZSgpXCJcclxuICAgICAgICAgIGNsYXNzPVwicHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBkYXJrOnRleHQtZ3JheS0zMDAgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCByb3VuZGVkLWxnIGhvdmVyOmJnLWdyYXktNTAgZGFyazpob3ZlcjpiZy1ncmF5LTcwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1wiPlxyXG4gICAgICAgICAge3sgJ0NBTkNFTCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPCEtLSBTcGxpdEJ1dHRvbiBmb3IgRXhwb3J0IC0tPlxyXG4gICAgICAgICA8IS0tIHx8IHByZXZpZXdEYXRhLmxlbmd0aCA9PT0gMCAtLT5cclxuICAgICAgICA8cC1zcGxpdEJ1dHRvblxyXG4gICAgICAgICAgW2xhYmVsXT1cImdldEV4cG9ydEJ1dHRvblRleHQoKVwiXHJcbiAgICAgICAgICBbaWNvbl09XCJnZXRDdXJyZW50RXhwb3J0VHlwZUljb24oKVwiXHJcbiAgICAgICAgICBbbW9kZWxdPVwiZXhwb3J0TWVudUl0ZW1zXCJcclxuICAgICAgICAgIChvbkNsaWNrKT1cIm9uRXhwb3J0KClcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIlxyXG4gICAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXByaW1hcnlcIj5cclxuICAgICAgICA8L3Atc3BsaXRCdXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gRmlsdGVycyBEcmF3ZXIgLS0+XHJcbiAgQGlmKHNob3dGaWx0ZXJzKXtcclxuICA8cC1kcmF3ZXJcclxuICAgIFsodmlzaWJsZSldPVwic2hvd0ZpbHRlcnNcIlxyXG4gICAgcG9zaXRpb249XCJyaWdodFwiXHJcbiAgICBbc3R5bGVDbGFzc109XCInIXctZnVsbCBtZDohdy04MCBsZzohdy1bNDByZW1dICFoLWZ1bGwnIFwiXHJcbiAgICBbbW9kYWxdPVwidHJ1ZVwiXHJcbiAgICBbZGlzbWlzc2libGVdPVwidHJ1ZVwiXHJcbiAgICBzdHlsZUNsYXNzPVwicC00IHctZnVsbCBtYXgtdy1tZCBtYXgtaC1bOTB2aF0gZmxleCBmbGV4LWNvbFwiPlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0KCk7IHNob3dGaWx0ZXJzPWZhbHNlXCIgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtMVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIG92ZXJmbG93LWF1dG9cIj5cclxuICAgICAgICA8Zm9ybWx5LWZvcm1cclxuICAgICAgICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICAgICAgW2ZpZWxkc109XCJmaWVsZHNfXCJcclxuICAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXHJcbiAgICAgICAgICBbb3B0aW9uc109XCJvcHRpb25zXCI+XHJcbiAgICAgICAgPC9mb3JtbHktZm9ybT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIG10LTIgc3BhY2UteC0yIGZsZXgtbm9uZVwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxyXG4gICAgICAgICAgcEJ1dHRvbiBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIiBvblN1Ym1pdCgpOyBzaG93RmlsdGVycz1mYWxzZVwiXHJcbiAgICAgICAgICBsYWJlbD1cInt7ICdTRUFSQ0gnIHwgdHJhbnNsYXRlIH19XCI+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBwQnV0dG9uXHJcbiAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0XCJcclxuICAgICAgICAgIChjbGljayk9XCJvblJlc2V0KCk7IHNob3dGaWx0ZXJzPWZhbHNlXCI+XHJcbiAgICAgICAgICB7eyAnQ0xFQVInIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtZHJhd2VyPlxyXG4gIH1cclxuPC9kaXY+XHJcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy1yZXBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1yZXBvcnQvc3JjL2VsaXRlLmZyYW1ld29yay1uZy51aS5jb3JlLWdlbmVyaWMtcmVwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i1","i2","i3","i4","i9"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,MAAM,mBAAmB,CAAC;AACjC,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;AAC5K,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;AACvJ,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;AACvJ;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC;AAC7H,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,OAAO,EAAE,CAAC,YAAY,CAAC;AAC3C,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACbb;AAaO,MAAM,yBAAyB,CAAC;AACvC,IAAI,QAAQ,GAAG,EAAE;AACjB,IAAI,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAClC,IAAI,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACxC,IAAI,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE;AACxD;AACA,IAAI,IAAI,GAAG;AACX,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;AACnC,YAAY,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AAChD;AACA;AACA,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;AACnL,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,yBAAyB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,wBAAwB,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;AACvM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,oBAAoB,EAAE,QAAQ,EAAE,8MAA8M,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,2CAA2C,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,qDAAqD,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;AACvuC;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,UAAU,EAAE,CAAC;AACnI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,QAAQ,EAAE,wBAAwB;AACtD,oBAAoB,UAAU,EAAE,IAAI;AACpC,oBAAoB,OAAO,EAAE;AAC7B,wBAAwB,YAAY;AACpC,wBAAwB,WAAW;AACnC,wBAAwB,eAAe;AACvC,wBAAwB,YAAY;AACpC,wBAAwB;AACxB,qBAAqB;AACrB,oBAAoB,QAAQ,EAAE,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;AC7EH,IAAC;AACX,CAAC,UAAU,UAAU,EAAE;AACvB,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;AAC/C,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;AAC/C,IAAI,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK;AAC7C,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO;AACjD,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO;AACjD,CAAC,EAAE,UAAU,KAAK,UAAU,GAAG,EAAE,CAAC,CAAC;AAC5B,MAAM,sBAAsB,CAAC;AACpC,IAAI,GAAG;AACP,IAAI,MAAM;AACV,IAAI,gBAAgB;AACpB,IAAI,YAAY,GAAG,EAAE;AACrB,IAAI,OAAO,GAAG,EAAE;AAChB,IAAI,UAAU,GAAG,UAAU,CAAC,GAAG;AAC/B,IAAI,QAAQ,GAAG,EAAE;AACjB,IAAI,WAAW,GAAG,KAAK;AACvB,IAAI,OAAO,GAAG,KAAK;AACnB,IAAI,WAAW,GAAG,IAAI,IAAI,EAAE;AAC5B,IAAI,WAAW,GAAG,EAAE;AACpB,IAAI,iBAAiB,GAAG,EAAE;AAC1B,IAAI,gBAAgB,GAAG,KAAK;AAC5B,IAAI,cAAc,GAAG,EAAE;AACvB,IAAI,OAAO,GAAG,EAAE;AAChB,IAAI,kBAAkB,GAAG,IAAI;AAC7B,IAAI,WAAW,GAAG,KAAK;AACvB,IAAI,WAAW,GAAG,EAAE;AACpB,IAAI,OAAO,GAAG,EAAE;AAChB,IAAI,KAAK,GAAG,EAAE;AACd,IAAI,IAAI,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC;AAC5B,IAAI,YAAY;AAChB,IAAI,WAAW,GAAG;AAClB,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE;AAC7E,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE;AACvE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE;AACrE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa;AACtE,KAAK;AACL,IAAI,eAAe,GAAG,EAAE;AACxB,IAAI,QAAQ,GAAG,IAAI,OAAO,EAAE;AAC5B,IAAI,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACzC,IAAI,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACrC,IAAI,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC9C,IAAI,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;AACpC,IAAI,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE;AAC7B,QAAQ,IAAI,CAAC,GAAG,GAAG,GAAG;AACtB,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;AAC5B;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC5B,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AAChC,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE;AACtB,YAAY,IAAI;AAChB,gBAAgB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;AAChC;AACA,YAAY,OAAO,CAAC,EAAE;AACtB;AACA;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,IAAI,EAAE;AAChE,QAAQ,IAAI,CAAC,kBAAkB,EAAE;AACjC,QAAQ,IAAI,CAAC,mBAAmB,EAAE;AAClC,QAAQ,IAAI,CAAC,sBAAsB,EAAE;AACrC,QAAQ,IAAI,CAAC,oBAAoB,EAAE;AACnC;AACA,IAAI,IAAI,WAAW,GAAG;AACtB,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK;AACzE;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACrC,YAAY,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC;AAC9F;AACA,aAAa;AACb,YAAY,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY;AAC5C;AACA;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE;AACtD,QAAQ,IAAI,CAAC,sBAAsB,EAAE;AACrC,QAAQ,IAAI,CAAC,QAAQ,EAAE;AACvB;AACA,IAAI,sBAAsB,GAAG;AAC7B,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC3F,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;AAClD,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/G;AACA,IAAI,sBAAsB,GAAG;AAC7B,QAAQ,IAAI,CAAC,YAAY,GAAG;AAC5B,YAAY,OAAO,EAAE,IAAI,CAAC,KAAK;AAC/B,YAAY,UAAU,EAAE,IAAI,CAAC,UAAU;AACvC,YAAY,QAAQ,EAAE,IAAI,CAAC;AAC3B,SAAS;AACT;AACA,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,IAAI,CAAC,eAAe,GAAG;AAC/B;AACA,YAAY;AACZ,gBAAgB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC;AACjE,gBAAgB,IAAI,EAAE,cAAc;AACpC,gBAAgB,OAAO,EAAE,MAAM,IAAI,CAAC,oBAAoB;AACxD,aAAa;AACb;AACA,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE;AAC/B;AACA,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,KAAK;AAC7C,gBAAgB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACzD,gBAAgB,IAAI,EAAE,IAAI,CAAC,IAAI;AAC/B,gBAAgB,OAAO,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK;AACjE,aAAa,CAAC;AACd,SAAS;AACT;AACA,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,yBAAyB,EAAE;AACvE,YAAY,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC;AAC9D,YAAY,KAAK,EAAE,OAAO;AAC1B,YAAY,IAAI,EAAE;AAClB,gBAAgB,QAAQ,EAAE,IAAI,CAAC;AAC/B;AACA,SAAS,CAAC;AACV,QAAQ,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK;AAC1C,YAAY,IAAI,MAAM,EAAE;AACxB,gBAAgB,IAAI,CAAC,QAAQ,GAAG,MAAM;AACtC;AACA,SAAS,CAAC;AACV;AACA,IAAI,sBAAsB,GAAG;AAC7B,QAAQ,OAAO;AACf,YAAY;AACZ,gBAAgB,GAAG,EAAE,QAAQ;AAC7B,gBAAgB,IAAI,EAAE,OAAO;AAC7B,gBAAgB,KAAK,EAAE;AACvB,oBAAoB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC3D,oBAAoB,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAC;AAC5E;AACA;AACA,SAAS;AACT;AACA;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,IAAI,CAAC,QAAQ,EAAE;AACvB;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;AACrG,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,WAAW,CAAC;AAC5E,QAAQ,IAAI,CAAC,QAAQ,EAAE;AACvB;AACA,IAAI,OAAO,GAAG;AACd,QAAQ,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG;AACxC,QAAQ,IAAI,CAAC,QAAQ,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACzB,QAAQ,IAAI,CAAC,KAAK,GAAG,EAAE;AACvB,QAAQ,IAAI,CAAC,eAAe,EAAE;AAC9B;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI;AAC3B,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACtD,QAAQ,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;AAC1C;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,OAAO;AACf,YAAY,OAAO,EAAE,IAAI,CAAC,KAAK;AAC/B,YAAY,UAAU,EAAE,IAAI,CAAC,UAAU;AACvC,YAAY,QAAQ,EAAE,IAAI,CAAC;AAC3B,SAAS;AACT;AACA,IAAI,eAAe,CAAC,MAAM,EAAE;AAC5B,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO;AAC7B,YAAY;AACZ,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;AAChE,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AAC1E,aAAa,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC1C,aAAa,SAAS,CAAC;AACvB,YAAY,IAAI,EAAE,CAAC,QAAQ,KAAK;AAChC,gBAAgB,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC3D,aAAa;AACb,YAAY,KAAK,EAAE,CAAC,KAAK,KAAK;AAC9B,gBAAgB,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC;AACtD,gBAAgB,IAAI,CAAC,OAAO,GAAG,KAAK;AACpC;AACA,SAAS,CAAC;AACV;AACA,IAAI,oBAAoB,CAAC,MAAM,EAAE;AACjC;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE;AACzD;AACA,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;AACzG;AACA;AACA,YAAY,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,WAAW,CAAC;AAChF;AACA;AACA,QAAQ,MAAM,OAAO,GAAG;AACxB,YAAY,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;AAC3C,YAAY,KAAK,EAAE,IAAI,CAAC,WAAW;AACnC,YAAY,UAAU,EAAE,MAAM,CAAC,UAAU;AACzC,SAAS;AACT,QAAQ,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK;AACjE,YAAY,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;AACnC,YAAY,OAAO,GAAG;AACtB,SAAS,EAAE,EAAE,CAAC;AACd,QAAQ,MAAM,cAAc,GAAG;AAC/B,YAAY,MAAM,EAAE,KAAK;AACzB,YAAY,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;AAC1C,YAAY,MAAM,EAAE;AACpB,SAAS;AACT,QAAQ,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,CAAC,IAAI,EAAE;AACnD,YAAY,cAAc,CAAC,YAAY,GAAG,MAAM;AAChD;AACA,QAAQ,OAAO,cAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE;AAC3C,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK;AAC5B,QAAQ,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,CAAC,IAAI,EAAE;AACnD,YAAY,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;AACzC;AACA;AACA,aAAa,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,CAAC,GAAG,EAAE;AACvD,YAAY,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC;AAClD;AACA,aAAa;AACb,YAAY,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC;AACvD;AACA;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,OAAO,gEAAgE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;AACzG;AACA,IAAI,KAAK,GAAG;AACZ,QAAQ,OAAO,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;AAC3D;AACA,IAAI,SAAS,GAAG;AAChB,QAAQ,OAAO,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;AAClD;AACA,IAAI,YAAY,GAAG,KAAK;AACxB,IAAI,aAAa;AACjB,IAAI,eAAe,GAAG,EAAE;AACxB,IAAI,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE;AACxC,QAAQ,IAAI;AACZ,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACxF,YAAY,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC5E,YAAY,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC3D,YAAY,IAAI,CAAC,YAAY,GAAG,IAAI;AACpC;AACA,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,IAAI,KAAK,GAAG,+DAA+D;AACvF;AACA,gBAAgB;AAChB;AACA;AACA;AACA,IAAI,WAAW,CAAC,GAAG,EAAE;AACrB,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC,GAAG,CAAC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB;AACA;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE;AAC3C,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACrF,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACjG;AACA;AACA,IAAI,cAAc,CAAC,WAAW,EAAE;AAChC,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;AAC5D,QAAQ,IAAI,CAAC,iBAAiB,GAAG,SAAS;AAC1C,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI;AACpC,QAAQ,UAAU,CAAC,MAAM;AACzB,YAAY,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAC5C,SAAS,EAAE,GAAG,CAAC;AACf;AACA,IAAI,gBAAgB,CAAC,WAAW,EAAE;AAClC,QAAQ,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC;AAC9D,QAAQ,IAAI,CAAC,MAAM,EAAE;AACrB,YAAY,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC;AAC7C,YAAY;AACZ;AACA,QAAQ,MAAM,SAAS,GAAG,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,aAAa,EAAE,QAAQ;AAClF,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,SAAS,CAAC,IAAI,EAAE;AAC5B,YAAY,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC;AACxC,YAAY,SAAS,CAAC,KAAK,EAAE;AAC7B;AACA;AACA,IAAI,KAAK,GAAG;AACZ;AACA;AACA;AACA;AACA;AACA,QAAQ,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE;AACrE;AACA;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,QAAQ,IAAI,CAAC,UAAU;AAC/B,YAAY,KAAK,UAAU,CAAC,KAAK;AACjC,gBAAgB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC;AACtD,YAAY,KAAK,UAAU,CAAC,IAAI;AAChC,gBAAgB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;AACvD,YAAY;AACZ,gBAAgB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;AACvD;AACA;AACA,IAAI,kBAAkB,CAAC,IAAI,EAAE;AAC7B,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI;AAC9B;AACA,IAAI,wBAAwB,GAAG;AAC/B,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC;AACzF,QAAQ,OAAO,WAAW,EAAE,IAAI,IAAI,gBAAgB;AACpD;AACA,IAAI,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE;AAC/B,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;AACtC,QAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACpE,QAAQ,OAAO,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACnE;AACA,IAAI,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE;AACjC,QAAQ,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;AACpD,QAAQ,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AAChD,QAAQ,IAAI,CAAC,IAAI,GAAG,GAAG;AACvB,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ;AAChC,QAAQ,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACvC,QAAQ,IAAI,CAAC,KAAK,EAAE;AACpB,QAAQ,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACvC,QAAQ,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AACvC;AACA,IAAI,gBAAgB,CAAC,UAAU,EAAE;AACjC,QAAQ,QAAQ,UAAU;AAC1B,YAAY,KAAK,UAAU,CAAC,KAAK;AACjC,gBAAgB,OAAO,MAAM;AAC7B,YAAY,KAAK,UAAU,CAAC,GAAG;AAC/B,gBAAgB,OAAO,KAAK;AAC5B,YAAY,KAAK,UAAU,CAAC,IAAI;AAChC,gBAAgB,OAAO,MAAM;AAC7B,YAAY;AACZ,gBAAgB,OAAO,KAAK;AAC5B;AACA;AACA,IAAI,WAAW,CAAC,UAAU,EAAE;AAC5B,QAAQ,QAAQ,UAAU;AAC1B,YAAY,KAAK,UAAU,CAAC,KAAK;AACjC,gBAAgB,OAAO,mEAAmE;AAC1F,YAAY,KAAK,UAAU,CAAC,GAAG;AAC/B,gBAAgB,OAAO,iBAAiB;AACxC,YAAY;AACZ,gBAAgB,OAAO,0BAA0B;AACjD;AACA;AACA,IAAI,gBAAgB,CAAC,IAAI,EAAE;AAC3B,QAAQ,OAAO;AACf,aAAa,OAAO,CAAC,SAAS,EAAE,IAAI;AACpC,aAAa,OAAO,CAAC,MAAM,EAAE,GAAG;AAChC,aAAa,OAAO,CAAC,MAAM,EAAE,GAAG;AAChC,aAAa,IAAI,EAAE;AACnB;AACA,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAEA,IAAE,CAAC,gBAAgB,EAAE,EAAE,EAAE,KAAK,EAAEA,IAAE,CAAC,mBAAmB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;AACjP,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,sBAAsB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,kBAAkB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,qwPAAqwP,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAEC,IAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAEC,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,8CAA8C,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAEA,EAAE,CAAC,oBAAoB,EAAE,QAAQ,EAAE,0FAA0F,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAEA,EAAE,CAAC,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAEC,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,mBAAmB,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,8CAA8C,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,oBAAoB,EAAE,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAEC,EAAE,CAAC,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;AAC5oW;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,CAAC;AAChI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,oBAAoB,EAAE,OAAO,EAAE;AAC9D,wBAAwB,YAAY;AACpC,wBAAwB,mBAAmB;AAC3C,wBAAwB,WAAW;AACnC,wBAAwB,eAAe;AACvC,wBAAwB,YAAY;AACpC,wBAAwB,YAAY;AACpC,wBAAwB,eAAe;AACvC,wBAAwB,iBAAiB;AACzC,wBAAwB,cAAc;AACtC,wBAAwB,YAAY;AACpC,wBAAwB,UAAU;AAClC,wBAAwB,WAAW;AACnC,wBAAwB,iBAAiB;AACzC,wBAAwB,aAAa;AACrC,qBAAqB,EAAE,SAAS,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,qwPAAqwP,EAAE;AACj1P,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAEJ,IAAE,CAAC,gBAAgB,EAAE,EAAE,EAAE,IAAI,EAAEA,IAAE,CAAC,mBAAmB,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,gBAAgB,EAAE,CAAC;AAC1I,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,kBAAkB;AACzC,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;AACrC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC;AACxB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,EAAE,CAAC;;ACtbnB;AACA;AACA;;;;"}
1
+ {"version":3,"file":"elite.framework-ng.ui.core-generic-report.mjs","sources":["../tmp-esm2022/generic-report/lib/generic-report-module.js","../tmp-esm2022/generic-report/lib/report-name-dialog.component.js","../tmp-esm2022/generic-report/lib/generic-report.component.js","../tmp-esm2022/generic-report/elite.framework-ng.ui.core-generic-report.js"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from \"@angular/core\";\nexport class GenericReportModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericReportModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericReportModule, imports: [CommonModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericReportModule, imports: [CommonModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericReportModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1yZXBvcnQtbW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtcmVwb3J0L3NyYy9saWIvZ2VuZXJpYy1yZXBvcnQtbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUsvQyxNQUFNLE9BQU8sbUJBQW1CO3VHQUFuQixtQkFBbUI7d0dBQW5CLG1CQUFtQixZQUZwQixZQUFZO3dHQUVYLG1CQUFtQixZQUZwQixZQUFZOzsyRkFFWCxtQkFBbUI7a0JBSC9CLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY1JlcG9ydE1vZHVsZSB7fVxuIl19","// report-name-dialog.component.ts\nimport { Component, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@elite.framework/ng.core/pipes';\nimport { DynamicDialogRef, DynamicDialogConfig } from 'primeng/dynamicdialog';\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { LocalizationService } from '@elite.framework/ng.core/services';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nimport * as i2 from \"primeng/button\";\nimport * as i3 from \"primeng/inputtext\";\nexport class ReportNameDialogComponent {\n fileName = '';\n ref = inject(DynamicDialogRef);\n config = inject(DynamicDialogConfig);\n translate = inject(LocalizationService);\n ngOnInit() {\n this.fileName = this.config.data?.fileName || '';\n }\n save() {\n if (this.fileName?.trim()) {\n this.ref.close(this.fileName.trim());\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ReportNameDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.8\", type: ReportNameDialogComponent, isStandalone: true, selector: \"app-report-name-dialog\", ngImport: i0, template: `\r\n <div class=\"p-fluid\">\r\n <div class=\"field\">\r\n <label for=\"fileName\" class=\"block text-sm font-medium mb-2\">\r\n {{ 'REPORT_NAME' | translate }}\r\n </label>\r\n <input\r\n id=\"fileName\"\r\n type=\"text\"\r\n [(ngModel)]=\"fileName\"\r\n pInputText\r\n class=\"w-full\"\r\n [placeholder]=\"'ENTER_REPORT_NAME' | translate\"\r\n autofocus>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex justify-end gap-2 mt-4\">\r\n <button\r\n type=\"button\"\r\n pButton\r\n class=\"p-button-text\"\r\n (click)=\"ref.close()\"\r\n [label]=\"'CANCEL' | translate\">\r\n </button>\r\n <button\r\n type=\"button\"\r\n pButton\r\n (click)=\"save()\"\r\n [label]=\"'SAVE' | translate\">\r\n </button>\r\n </div>\r\n `, isInline: true, dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"directive\", type: i2.ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"ngmodule\", type: InputTextModule }, { kind: \"directive\", type: i3.InputText, selector: \"[pInputText]\", inputs: [\"pSize\", \"variant\", \"fluid\", \"invalid\"] }, { kind: \"pipe\", type: TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ReportNameDialogComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'app-report-name-dialog',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n TranslatePipe,\n ButtonModule,\n InputTextModule\n ],\n template: `\r\n <div class=\"p-fluid\">\r\n <div class=\"field\">\r\n <label for=\"fileName\" class=\"block text-sm font-medium mb-2\">\r\n {{ 'REPORT_NAME' | translate }}\r\n </label>\r\n <input\r\n id=\"fileName\"\r\n type=\"text\"\r\n [(ngModel)]=\"fileName\"\r\n pInputText\r\n class=\"w-full\"\r\n [placeholder]=\"'ENTER_REPORT_NAME' | translate\"\r\n autofocus>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex justify-end gap-2 mt-4\">\r\n <button\r\n type=\"button\"\r\n pButton\r\n class=\"p-button-text\"\r\n (click)=\"ref.close()\"\r\n [label]=\"'CANCEL' | translate\">\r\n </button>\r\n <button\r\n type=\"button\"\r\n pButton\r\n (click)=\"save()\"\r\n [label]=\"'SAVE' | translate\">\r\n </button>\r\n </div>\r\n `\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LW5hbWUtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXJlcG9ydC9zcmMvbGliL3JlcG9ydC1uYW1lLWRpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0NBQWtDO0FBQ2xDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7O0FBOEN4RSxNQUFNLE9BQU8seUJBQXlCO0lBQ3BDLFFBQVEsR0FBVyxFQUFFLENBQUM7SUFFdEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQy9CLE1BQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNyQyxTQUFTLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFeEMsUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQzt1R0FmVSx5QkFBeUI7MkZBQXpCLHlCQUF5QixrRkFsQzFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdDVCwyREF0Q0MsWUFBWSw4QkFDWixXQUFXLDhtQkFFWCxZQUFZLG9RQUNaLGVBQWUsaUpBRmYsYUFBYTs7MkZBc0NKLHlCQUF5QjtrQkE1Q3JDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYixZQUFZO3dCQUNaLGVBQWU7cUJBQ2hCO29CQUNELFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ1Q7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyByZXBvcnQtbmFtZS1kaWFsb2cuY29tcG9uZW50LnRzXHJcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL3BpcGVzJztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ1JlZiwgRHluYW1pY0RpYWxvZ0NvbmZpZyB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgSW5wdXRUZXh0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL3NlcnZpY2VzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXJlcG9ydC1uYW1lLWRpYWxvZycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFRyYW5zbGF0ZVBpcGUsXHJcbiAgICBCdXR0b25Nb2R1bGUsXHJcbiAgICBJbnB1dFRleHRNb2R1bGVcclxuICBdLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwicC1mbHVpZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGRcIj5cclxuICAgICAgICA8bGFiZWwgZm9yPVwiZmlsZU5hbWVcIiBjbGFzcz1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gbWItMlwiPlxyXG4gICAgICAgICAge3sgJ1JFUE9SVF9OQU1FJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBpZD1cImZpbGVOYW1lXCJcclxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlsZU5hbWVcIlxyXG4gICAgICAgICAgcElucHV0VGV4dFxyXG4gICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxyXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidFTlRFUl9SRVBPUlRfTkFNRScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgYXV0b2ZvY3VzPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIGdhcC0yIG10LTRcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIHBCdXR0b25cclxuICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXRleHRcIlxyXG4gICAgICAgIChjbGljayk9XCJyZWYuY2xvc2UoKVwiXHJcbiAgICAgICAgW2xhYmVsXT1cIidDQU5DRUwnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgcEJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJzYXZlKClcIlxyXG4gICAgICAgIFtsYWJlbF09XCInU0FWRScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICBgXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXBvcnROYW1lRGlhbG9nQ29tcG9uZW50IHtcclxuICBmaWxlTmFtZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIHJlZiA9IGluamVjdChEeW5hbWljRGlhbG9nUmVmKTtcclxuICBjb25maWcgPSBpbmplY3QoRHluYW1pY0RpYWxvZ0NvbmZpZyk7XHJcbiAgdHJhbnNsYXRlID0gaW5qZWN0KExvY2FsaXphdGlvblNlcnZpY2UpO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZmlsZU5hbWUgPSB0aGlzLmNvbmZpZy5kYXRhPy5maWxlTmFtZSB8fCAnJztcclxuICB9XHJcblxyXG4gIHNhdmUoKSB7XHJcbiAgICBpZiAodGhpcy5maWxlTmFtZT8udHJpbSgpKSB7XHJcbiAgICAgIHRoaXMucmVmLmNsb3NlKHRoaXMuZmlsZU5hbWUudHJpbSgpKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19","import { CommonModule } from '@angular/common';\nimport { Component, inject, ViewChild, ElementRef, Input } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FormlyForm } from '@ngx-formly/core';\nimport { TranslatePipe } from '@elite.framework/ng.core/pipes';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { RadioButtonModule } from 'primeng/radiobutton';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { DynamicDialogRef, DynamicDialogConfig, DialogService } from 'primeng/dynamicdialog';\nimport { LocalizationService, RestService } from '@elite.framework/ng.core/services';\nimport { Subject, takeUntil } from 'rxjs';\nimport { DrawerModule } from 'primeng/drawer';\nimport { TableModule } from 'primeng/table';\nimport { SplitButtonModule } from 'primeng/splitbutton';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { ReportNameDialogComponent } from './report-name-dialog.component';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { QueryBuilderService } from '@elite.framework/ng.ui.core/generic-search-advanced';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"primeng/dynamicdialog\";\nimport * as i2 from \"@angular/common\";\nimport * as i3 from \"@angular/forms\";\nimport * as i4 from \"primeng/button\";\nimport * as i5 from \"primeng/api\";\nimport * as i6 from \"primeng/drawer\";\nimport * as i7 from \"primeng/splitbutton\";\nimport * as i8 from \"primeng/tooltip\";\nexport var ExportType;\n(function (ExportType) {\n ExportType[ExportType[\"LIST\"] = 0] = \"LIST\";\n ExportType[ExportType[\"HTML\"] = 1] = \"HTML\";\n ExportType[ExportType[\"PDF\"] = 2] = \"PDF\";\n ExportType[ExportType[\"EXCEL\"] = 3] = \"EXCEL\";\n ExportType[ExportType[\"PRINT\"] = 4] = \"PRINT\";\n})(ExportType || (ExportType = {}));\nexport class GenericReportComponent {\n ref;\n config;\n previewContainer;\n filterFields = [];\n fields_ = [];\n exportType = ExportType.PDF;\n fileName = '';\n showFilters = false;\n loading = false;\n currentDate = new Date();\n previewData = [];\n htmlExportContent = '';\n showHtmlInIframe = false;\n previewColumns = [];\n options = {};\n enableQueryBuilder = true;\n localExport = false;\n queryString = '';\n apiName = '';\n model = {};\n form = new FormGroup({});\n exportConfig;\n exportTypes = [\n { value: ExportType.EXCEL, label: 'EXCEL', icon: 'pi pi-file-excel' },\n { value: ExportType.PDF, label: 'PDF', icon: 'pi pi-file-pdf' },\n { value: ExportType.HTML, label: 'HTML', icon: 'pi pi-code' },\n { value: ExportType.PRINT, label: 'PRINT', icon: 'pi pi-print' }\n ];\n exportMenuItems = [];\n destroy$ = new Subject();\n dialogService = inject(DialogService);\n translate = inject(LocalizationService);\n restService = inject(RestService);\n queryBuilder = inject(QueryBuilderService);\n sanitizer = inject(DomSanitizer);\n constructor(ref, config) {\n this.ref = ref;\n this.config = config;\n }\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n if (this.ref) {\n try {\n this.ref.close();\n }\n catch (e) {\n // Ignore errors during cleanup\n }\n }\n }\n ngOnInit() {\n this.filterFields = this.config.data?.filterFields || [];\n this.buildQueryUIFields();\n this.initializeComponent();\n this.initializeExportConfig();\n this.initializeExportMenu();\n }\n get filterCount() {\n return this.queryBuilder.getAppliedFiltersCount(this.model).total;\n }\n buildQueryUIFields() {\n if (this.enableQueryBuilder) {\n this.fields_ = this.queryBuilder.buildQueryUIFields(this.filterFields, true, true);\n }\n else {\n this.fields_ = this.filterFields;\n }\n }\n initializeComponent() {\n this.apiName = this.config.data?.apiName || '';\n this.initializeFilterFields();\n this.onExport();\n }\n initializeFilterFields() {\n this.filterFields = this.config.data?.filterFields || this.getDefaultFilterFields();\n this.model = this.config.data?.model || {};\n this.fileName = this.config.data?.defaultFileName || `export_${new Date().toISOString().split('T')[0]}`;\n }\n initializeExportConfig() {\n this.exportConfig = {\n filters: this.model,\n exportType: this.exportType,\n fileName: this.fileName\n };\n }\n initializeExportMenu() {\n this.exportMenuItems = [\n // Edit Report Name menu item\n {\n label: this.translate.instant('EDIT_REPORT_NAME'),\n icon: 'pi pi-pencil',\n command: () => this.openReportNameDialog()\n },\n // Separator\n { separator: true },\n // Export type menu items\n ...this.exportTypes.map(type => ({\n label: this.translate.instant(type.label),\n icon: type.icon,\n command: () => this.onExportTypeChange(type.value)\n }))\n ];\n }\n openReportNameDialog() {\n const ref = this.dialogService.open(ReportNameDialogComponent, {\n header: this.translate.instant('EDIT_REPORT_NAME'),\n width: '500px',\n data: {\n fileName: this.fileName\n }\n });\n ref.onClose.subscribe((result) => {\n if (result) {\n this.fileName = result;\n }\n });\n }\n getDefaultFilterFields() {\n return [\n {\n key: 'search',\n type: 'input',\n props: {\n label: this.translate.instant('SEARCH'),\n placeholder: this.translate.instant('ENTER_SEARCH_TERM'),\n }\n }\n ];\n }\n // Query and Preview Methods\n generatePreview() {\n this.onExport();\n }\n onSubmit() {\n const odataParams = this.queryBuilder.buildODataFromQueryModel(this.model, this.filterFields);\n this.queryString = this.queryBuilder.toODataQueryString(odataParams);\n this.onExport();\n }\n onReset() {\n this.exportType = ExportType.PDF;\n this.fileName = `export_${new Date().toISOString().split('T')[0]}`;\n this.form.reset();\n this.model = {};\n this.generatePreview();\n }\n // Export Methods\n onExport() {\n this.loading = true;\n const exportConfig = this.createExportConfig();\n this.handleApiExport(exportConfig);\n }\n createExportConfig() {\n return {\n filters: this.model,\n exportType: this.exportType,\n fileName: this.fileName\n };\n }\n handleApiExport(config) {\n if (this.form.invalid)\n return;\n const requestOptions = this.createRequestOptions(config);\n this.restService.request(requestOptions, { apiName: this.apiName })\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: (response) => {\n this.handleExportResponse(response, config);\n },\n error: (error) => {\n console.error('Export failed:', error);\n this.loading = false;\n }\n });\n }\n createRequestOptions(config) {\n // Default query\n if (!this.queryString || this.queryString == '') {\n // Use the new QueryBuilderService methods\n const odataParams = this.queryBuilder.buildODataFromQueryModel(this.model, this.filterFields);\n // this.odataSearch.emit(odataParams);\n // Generate query string using the unified method\n this.queryString = this.queryBuilder.toODataQueryString(odataParams);\n // console.log('OData Query String:', queryString);\n }\n const filters = {\n fileName: config.fileName || '',\n query: this.queryString,\n exportType: config.exportType,\n };\n const params = Object.keys(filters).reduce((acc, key) => {\n acc[key] = filters[key];\n return acc;\n }, {});\n const requestOptions = {\n method: 'GET',\n url: `/${this.apiName}/export`,\n params: params\n };\n if (config.exportType === ExportType.HTML) {\n requestOptions.responseType = 'text';\n }\n return requestOptions;\n }\n // private handleExportResponse(response: any, config: any) {\n // this.loading = false;\n // if (config.exportType === ExportType.HTML) {\n // this.showHtmlExport(response);\n // } else {\n // this.downloadBinaryExport(response, config);\n // }\n // }\n handleExportResponse(response, config) {\n this.loading = false;\n if (config.exportType === ExportType.HTML) {\n this.showHtmlExport(response);\n // } else if (config.exportType === ExportType.PDF && this.isMobileDevice()) {\n }\n else if (config.exportType === ExportType.PDF) {\n this.showPdfInMobile(response, config);\n }\n else {\n this.downloadBinaryExport(response, config);\n }\n }\n // Platform detection methods\n isMobileDevice() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n }\n isIOS() {\n return /iPad|iPhone|iPod/.test(navigator.userAgent);\n }\n isAndroid() {\n return /Android/.test(navigator.userAgent);\n }\n showPdfModal = false;\n currentPdfUrl;\n currentFileName = '';\n showPdfInMobile(base64Data, config) {\n try {\n const blob = this.base64ToBlob(base64Data, this.getMimeType(ExportType.PDF));\n this.currentPdfUrl = this.sanitizeUrl(URL.createObjectURL(blob));\n this.currentFileName = `${config.fileName}.pdf`;\n this.showPdfModal = true;\n }\n catch (error) {\n var error = 'PDF is too large for mobile viewing. Please download instead.';\n }\n finally {\n // this.loading = false;\n }\n }\n sanitizeUrl(url) {\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n }\n // onPdfModalClose(): void {\n // this.showPdfModal = false;\n // if (this.currentPdfUrl) {\n // URL.revokeObjectURL(this.currentPdfUrl);\n // this.currentPdfUrl = '';\n // }\n // }\n onPdfDownload() {\n // Trigger download\n // const blob = this.base64ToBlob(this.getCurrentBase64(), this.getMimeType(ExportType.PDF));\n // this.downloadFile(blob, this.currentFileName);\n }\n downloadBinaryExport(response, config) {\n const blob = this.base64ToBlob(response, this.getMimeType(config.exportType));\n this.downloadFile(blob, `${config.fileName}.${this.getFileExtension(config.exportType)}`);\n }\n // HTML Export Methods\n showHtmlExport(htmlContent) {\n const cleanHtml = this.cleanHtmlContent(htmlContent);\n this.htmlExportContent = cleanHtml;\n this.showHtmlInIframe = true;\n setTimeout(() => {\n this.setIframeContent(cleanHtml);\n }, 100);\n }\n setIframeContent(htmlContent) {\n const iframe = document.getElementById('reportIframe');\n if (!iframe) {\n console.error('Iframe not found');\n return;\n }\n const iframeDoc = iframe.contentDocument || iframe.contentWindow?.document;\n if (iframeDoc) {\n iframeDoc.open();\n iframeDoc.write(htmlContent);\n iframeDoc.close();\n }\n }\n print() {\n // const iframe = document.getElementById('reportIframe') as HTMLIFrameElement | null;\n // if (!iframe || !iframe.contentWindow) return;\n // const iframeWindow = iframe.contentWindow;\n // iframeWindow.focus();\n // iframeWindow.print();\n document.getElementById('reportIframe').contentWindow.print();\n }\n // Utility Methods\n getExportButtonText() {\n switch (this.exportType) {\n case ExportType.PRINT:\n return this.translate.instant('PRINT');\n case ExportType.HTML:\n return this.translate.instant('EXPORT');\n default:\n return this.translate.instant('EXPORT');\n }\n }\n onExportTypeChange(type) {\n this.exportType = type;\n }\n getCurrentExportTypeIcon() {\n const currentType = this.exportTypes.find(type => type.value === this.exportType);\n return currentType?.icon || 'pi pi-download';\n }\n base64ToBlob(base64, mime) {\n const byteChars = atob(base64);\n const byteNums = Array.from(byteChars, c => c.charCodeAt(0));\n return new Blob([new Uint8Array(byteNums)], { type: mime });\n }\n downloadFile(blob, fileName) {\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n }\n getFileExtension(exportType) {\n switch (exportType) {\n case ExportType.EXCEL:\n return 'xlsx';\n case ExportType.PDF:\n return 'pdf';\n case ExportType.HTML:\n return 'html';\n default:\n return 'pdf';\n }\n }\n getMimeType(exportType) {\n switch (exportType) {\n case ExportType.EXCEL:\n return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n case ExportType.PDF:\n return 'application/pdf';\n default:\n return 'application/octet-stream';\n }\n }\n cleanHtmlContent(html) {\n return html\n .replace(/\\\\r\\\\n/g, '\\n')\n .replace(/\\\\\"/g, '\"')\n .replace(/\\\\t/g, ' ')\n .trim();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericReportComponent, deps: [{ token: i1.DynamicDialogRef }, { token: i1.DynamicDialogConfig }], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: GenericReportComponent, isStandalone: true, selector: \"app-generic-report\", inputs: { filterFields: \"filterFields\", enableQueryBuilder: \"enableQueryBuilder\", localExport: \"localExport\", queryString: \"queryString\", apiName: \"apiName\", model: \"model\" }, providers: [DialogService, RestService], viewQueries: [{ propertyName: \"previewContainer\", first: true, predicate: [\"previewContainer\"], descendants: true }], ngImport: i0, template: \"<!-- class=\\\"flex flex-col h-full bg-white dark:bg-gray-900 rounded-lg max-w-6xl mx-auto\\\" -->\\r\\n<div >\\r\\n <!-- Content -->\\r\\n <div class=\\\"flex-1 overflow-hidden p-2\\\">\\r\\n\\r\\n <!-- Preview Actions -->\\r\\n <div class=\\\"flex justify-between items-center mb-6 p-2 bg-white rounded-lg\\\">\\r\\n <h3 class=\\\"text-lg font-semibold text-gray-900 dark:text-white\\\">\\r\\n {{ 'REPORT' | translate }}\\r\\n </h3>\\r\\n <div class=\\\"flex gap-2\\\">\\r\\n <!-- Filters Button -->\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"showFilters = !showFilters\\\"\\r\\n class=\\\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\\\"\\r\\n [pTooltip]=\\\"'SEARCH_FILTERS' | translate\\\">\\r\\n <i class=\\\"pi pi-filter\\\"></i>\\r\\n <span *ngIf=\\\"filterCount > 0\\\" class=\\\"ml-2 bg-blue-500 text-white text-xs rounded-full h-5 w-5 flex items-center justify-center\\\">\\r\\n {{ filterCount }}\\r\\n </span>\\r\\n </button>\\r\\n\\r\\n <!-- Refresh Preview -->\\r\\n <button\\r\\n (click)=\\\"generatePreview()\\\"\\r\\n [disabled]=\\\"loading\\\"\\r\\n class=\\\"flex items-center px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-lg hover:bg-blue-700 disabled:bg-gray-300 disabled:cursor-not-allowed transition-colors\\\"\\r\\n [pTooltip]=\\\"'REFRESH' | translate\\\">\\r\\n <i class=\\\"pi pi-refresh mr-2 ml-2\\\" [class.animate-spin]=\\\"loading\\\"></i>\\r\\n {{ 'REFRESH' | translate }}\\r\\n </button>\\r\\n\\r\\n <!-- Print Button -->\\r\\n <button\\r\\n *ngIf=\\\"exportType === 4 || exportType === 1 || exportType === 2\\\"\\r\\n (click)=\\\"print()\\\"\\r\\n class=\\\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\\\"\\r\\n [pTooltip]=\\\"'PRINT' | translate\\\">\\r\\n <i class=\\\"pi pi-print mr-2 ml-2\\\"></i>\\r\\n {{ 'PRINT' | translate }}\\r\\n </button>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <!-- Preview Content -->\\r\\n <div #previewContainer class=\\\"bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg\\\">\\r\\n <!-- HTML Export Preview (Iframe) -->\\r\\n <div *ngIf=\\\"showHtmlInIframe && htmlExportContent || showPdfModal\\\" class=\\\"html-export-preview\\\">\\r\\n <iframe\\r\\n id=\\\"reportIframe\\\"\\r\\n class=\\\"w-full border border-gray-300 dark:border-gray-600 rounded-b-lg\\\"\\r\\n [style.height]=\\\"'600px'\\\"\\r\\n title=\\\"HTML Export Preview\\\"\\r\\n [src]=\\\"currentPdfUrl\\\"\\r\\n width=\\\"100%\\\"\\r\\n height=\\\"100%\\\"\\r\\n frameborder=\\\"0\\\"\\r\\n allowfullscreen\\r\\n\\r\\n >\\r\\n <!-- allowfullscreen -->\\r\\n </iframe>\\r\\n </div>\\r\\n <!-- <app-pdf-modal\\r\\n *ngIf=\\\"showPdfModal\\\"\\r\\n [pdfUrl]=\\\"currentPdfUrl\\\"\\r\\n [fileName]=\\\"currentFileName\\\"\\r\\n (closed)=\\\"onPdfModalClose()\\\"\\r\\n (downloadRequested)=\\\"onPdfDownload()\\\">\\r\\n</app-pdf-modal> -->\\r\\n\\r\\n <!-- Regular Preview Table -->\\r\\n <!-- <div *ngIf=\\\"!showHtmlInIframe\\\" class=\\\"p-4\\\">\\r\\n <p-table\\r\\n [value]=\\\"previewData\\\"\\r\\n [columns]=\\\"previewColumns\\\"\\r\\n [paginator]=\\\"true\\\"\\r\\n [rows]=\\\"10\\\"\\r\\n [showCurrentPageReport]=\\\"true\\\"\\r\\n currentPageReportTemplate=\\\"Showing {first} to {last} of {totalRecords} entries\\\"\\r\\n styleClass=\\\"p-datatable-sm\\\">\\r\\n <ng-template pTemplate=\\\"header\\\">\\r\\n <tr>\\r\\n <th *ngFor=\\\"let col of previewColumns\\\" class=\\\"text-left\\\">\\r\\n {{ col.header }}\\r\\n </th>\\r\\n </tr>\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"body\\\" let-rowData>\\r\\n <tr>\\r\\n <td *ngFor=\\\"let col of previewColumns\\\" class=\\\"text-left\\\">\\r\\n {{ rowData[col.field] }}\\r\\n </td>\\r\\n </tr>\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"emptymessage\\\">\\r\\n <tr>\\r\\n <td [attr.colspan]=\\\"previewColumns.length\\\" class=\\\"text-center py-4\\\">\\r\\n <div class=\\\"text-center py-8\\\">\\r\\n <i class=\\\"pi pi-inbox text-4xl text-gray-400 dark:text-gray-500 mb-4\\\"></i>\\r\\n <p class=\\\"text-gray-500 dark:text-gray-400\\\">{{ 'NO_PREVIEW_DATA' | translate }}</p>\\r\\n </div>\\r\\n </td>\\r\\n </tr>\\r\\n </ng-template>\\r\\n </p-table>\\r\\n </div> -->\\r\\n </div>\\r\\n\\r\\n <!-- <div class=\\\"mt-4 p-3 bg-green-50 dark:bg-green-900/20 rounded-lg\\\">\\r\\n <p class=\\\"text-sm text-green-700 dark:text-green-300\\\">\\r\\n <i class=\\\"pi pi-info-circle mr-2\\\"></i>\\r\\n {{ 'PREVIEW_INFO' | translate }}\\r\\n </p>\\r\\n </div> -->\\r\\n </div>\\r\\n\\r\\n <!-- Footer -->\\r\\n <div class=\\\"border-t border-gray-200 dark:border-gray-700 px-2 py-2 bg-gray-50 dark:bg-gray-800\\\">\\r\\n <div class=\\\"flex justify-between items-center\\\">\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"onReset()\\\"\\r\\n class=\\\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\\\"\\r\\n [disabled]=\\\"loading\\\">\\r\\n <i class=\\\"pi pi-refresh mr-2\\\"></i>\\r\\n {{ 'RESET' | translate }}\\r\\n </button>\\r\\n\\r\\n <div class=\\\"flex gap-2\\\">\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"ref?.close()\\\"\\r\\n class=\\\"px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\\\"\\r\\n [disabled]=\\\"loading\\\">\\r\\n {{ 'CANCEL' | translate }}\\r\\n </button>\\r\\n\\r\\n <!-- SplitButton for Export -->\\r\\n <!-- || previewData.length === 0 -->\\r\\n <p-splitButton\\r\\n [label]=\\\"getExportButtonText()\\\"\\r\\n [icon]=\\\"getCurrentExportTypeIcon()\\\"\\r\\n [model]=\\\"exportMenuItems\\\"\\r\\n (onClick)=\\\"onExport()\\\"\\r\\n [disabled]=\\\"loading\\\"\\r\\n styleClass=\\\"p-button-primary\\\">\\r\\n </p-splitButton>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <!-- Filters Drawer -->\\r\\n @if(showFilters){\\r\\n <p-drawer\\r\\n [(visible)]=\\\"showFilters\\\"\\r\\n position=\\\"right\\\"\\r\\n [styleClass]=\\\"'!w-full md:!w-80 lg:!w-[40rem] !h-full' \\\"\\r\\n [modal]=\\\"true\\\"\\r\\n [dismissible]=\\\"true\\\"\\r\\n styleClass=\\\"p-4 w-full max-w-md max-h-[90vh] flex flex-col\\\">\\r\\n <form [formGroup]=\\\"form\\\" (ngSubmit)=\\\"onSubmit(); showFilters=false\\\" class=\\\"flex flex-col flex-1\\\">\\r\\n <div class=\\\"flex-1 overflow-auto\\\">\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"fields_\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [options]=\\\"options\\\">\\r\\n </formly-form>\\r\\n </div>\\r\\n </form>\\r\\n <ng-template pTemplate=\\\"footer\\\">\\r\\n <div class=\\\"flex justify-end mt-2 space-x-2 flex-none\\\">\\r\\n <button\\r\\n type=\\\"submit\\\"\\r\\n pButton size=\\\"small\\\"\\r\\n (click)=\\\" onSubmit(); showFilters=false\\\"\\r\\n label=\\\"{{ 'SEARCH' | translate }}\\\">\\r\\n </button>\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n pButton\\r\\n size=\\\"small\\\"\\r\\n class=\\\"p-button-text\\\"\\r\\n (click)=\\\"onReset(); showFilters=false\\\">\\r\\n {{ 'CLEAR' | translate }}\\r\\n </button>\\r\\n </div>\\r\\n </ng-template>\\r\\n </p-drawer>\\r\\n }\\r\\n</div>\\r\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"directive\", type: i3.ɵNgNoValidate, selector: \"form:not([ngNoForm]):not([ngNativeValidate])\" }, { kind: \"directive\", type: i3.NgControlStatusGroup, selector: \"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]\" }, { kind: \"directive\", type: i3.FormGroupDirective, selector: \"[formGroup]\", inputs: [\"formGroup\"], outputs: [\"ngSubmit\"], exportAs: [\"ngForm\"] }, { kind: \"ngmodule\", type: FormsModule }, { 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: \"directive\", type: i5.PrimeTemplate, selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { kind: \"ngmodule\", type: DialogModule }, { kind: \"ngmodule\", type: InputTextModule }, { kind: \"ngmodule\", type: RadioButtonModule }, { kind: \"ngmodule\", type: CheckboxModule }, { kind: \"ngmodule\", type: DrawerModule }, { kind: \"component\", type: i6.Drawer, selector: \"p-drawer\", inputs: [\"appendTo\", \"blockScroll\", \"style\", \"styleClass\", \"ariaCloseLabel\", \"autoZIndex\", \"baseZIndex\", \"modal\", \"closeButtonProps\", \"dismissible\", \"showCloseIcon\", \"closeOnEscape\", \"transitionOptions\", \"visible\", \"position\", \"fullScreen\", \"header\", \"maskStyle\", \"closable\"], outputs: [\"onShow\", \"onHide\", \"visibleChange\"] }, { kind: \"component\", type: FormlyForm, selector: \"formly-form\", inputs: [\"form\", \"model\", \"fields\", \"options\"], outputs: [\"modelChange\"] }, { kind: \"ngmodule\", type: TableModule }, { kind: \"ngmodule\", type: SplitButtonModule }, { kind: \"component\", type: i7.SplitButton, selector: \"p-splitbutton, p-splitButton, p-split-button\", inputs: [\"model\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"icon\", \"iconPos\", \"label\", \"tooltip\", \"tooltipOptions\", \"styleClass\", \"menuStyle\", \"menuStyleClass\", \"dropdownIcon\", \"appendTo\", \"dir\", \"expandAriaLabel\", \"showTransitionOptions\", \"hideTransitionOptions\", \"buttonProps\", \"menuButtonProps\", \"autofocus\", \"disabled\", \"tabindex\", \"menuButtonDisabled\", \"buttonDisabled\"], outputs: [\"onClick\", \"onMenuHide\", \"onMenuShow\", \"onDropdownClick\"] }, { kind: \"ngmodule\", type: TooltipModule }, { kind: \"directive\", type: i8.Tooltip, selector: \"[pTooltip]\", inputs: [\"tooltipPosition\", \"tooltipEvent\", \"positionStyle\", \"tooltipStyleClass\", \"tooltipZIndex\", \"escape\", \"showDelay\", \"hideDelay\", \"life\", \"positionTop\", \"positionLeft\", \"autoHide\", \"fitContent\", \"hideOnEscape\", \"pTooltip\", \"tooltipDisabled\", \"tooltipOptions\", \"appendTo\"] }, { kind: \"pipe\", type: TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericReportComponent, decorators: [{\n type: Component,\n args: [{ selector: 'app-generic-report', imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n TranslatePipe,\n ButtonModule,\n DialogModule,\n InputTextModule,\n RadioButtonModule,\n CheckboxModule,\n DrawerModule,\n FormlyForm,\n TableModule,\n SplitButtonModule,\n TooltipModule,\n ], providers: [DialogService, RestService], template: \"<!-- class=\\\"flex flex-col h-full bg-white dark:bg-gray-900 rounded-lg max-w-6xl mx-auto\\\" -->\\r\\n<div >\\r\\n <!-- Content -->\\r\\n <div class=\\\"flex-1 overflow-hidden p-2\\\">\\r\\n\\r\\n <!-- Preview Actions -->\\r\\n <div class=\\\"flex justify-between items-center mb-6 p-2 bg-white rounded-lg\\\">\\r\\n <h3 class=\\\"text-lg font-semibold text-gray-900 dark:text-white\\\">\\r\\n {{ 'REPORT' | translate }}\\r\\n </h3>\\r\\n <div class=\\\"flex gap-2\\\">\\r\\n <!-- Filters Button -->\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"showFilters = !showFilters\\\"\\r\\n class=\\\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\\\"\\r\\n [pTooltip]=\\\"'SEARCH_FILTERS' | translate\\\">\\r\\n <i class=\\\"pi pi-filter\\\"></i>\\r\\n <span *ngIf=\\\"filterCount > 0\\\" class=\\\"ml-2 bg-blue-500 text-white text-xs rounded-full h-5 w-5 flex items-center justify-center\\\">\\r\\n {{ filterCount }}\\r\\n </span>\\r\\n </button>\\r\\n\\r\\n <!-- Refresh Preview -->\\r\\n <button\\r\\n (click)=\\\"generatePreview()\\\"\\r\\n [disabled]=\\\"loading\\\"\\r\\n class=\\\"flex items-center px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-lg hover:bg-blue-700 disabled:bg-gray-300 disabled:cursor-not-allowed transition-colors\\\"\\r\\n [pTooltip]=\\\"'REFRESH' | translate\\\">\\r\\n <i class=\\\"pi pi-refresh mr-2 ml-2\\\" [class.animate-spin]=\\\"loading\\\"></i>\\r\\n {{ 'REFRESH' | translate }}\\r\\n </button>\\r\\n\\r\\n <!-- Print Button -->\\r\\n <button\\r\\n *ngIf=\\\"exportType === 4 || exportType === 1 || exportType === 2\\\"\\r\\n (click)=\\\"print()\\\"\\r\\n class=\\\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\\\"\\r\\n [pTooltip]=\\\"'PRINT' | translate\\\">\\r\\n <i class=\\\"pi pi-print mr-2 ml-2\\\"></i>\\r\\n {{ 'PRINT' | translate }}\\r\\n </button>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <!-- Preview Content -->\\r\\n <div #previewContainer class=\\\"bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg\\\">\\r\\n <!-- HTML Export Preview (Iframe) -->\\r\\n <div *ngIf=\\\"showHtmlInIframe && htmlExportContent || showPdfModal\\\" class=\\\"html-export-preview\\\">\\r\\n <iframe\\r\\n id=\\\"reportIframe\\\"\\r\\n class=\\\"w-full border border-gray-300 dark:border-gray-600 rounded-b-lg\\\"\\r\\n [style.height]=\\\"'600px'\\\"\\r\\n title=\\\"HTML Export Preview\\\"\\r\\n [src]=\\\"currentPdfUrl\\\"\\r\\n width=\\\"100%\\\"\\r\\n height=\\\"100%\\\"\\r\\n frameborder=\\\"0\\\"\\r\\n allowfullscreen\\r\\n\\r\\n >\\r\\n <!-- allowfullscreen -->\\r\\n </iframe>\\r\\n </div>\\r\\n <!-- <app-pdf-modal\\r\\n *ngIf=\\\"showPdfModal\\\"\\r\\n [pdfUrl]=\\\"currentPdfUrl\\\"\\r\\n [fileName]=\\\"currentFileName\\\"\\r\\n (closed)=\\\"onPdfModalClose()\\\"\\r\\n (downloadRequested)=\\\"onPdfDownload()\\\">\\r\\n</app-pdf-modal> -->\\r\\n\\r\\n <!-- Regular Preview Table -->\\r\\n <!-- <div *ngIf=\\\"!showHtmlInIframe\\\" class=\\\"p-4\\\">\\r\\n <p-table\\r\\n [value]=\\\"previewData\\\"\\r\\n [columns]=\\\"previewColumns\\\"\\r\\n [paginator]=\\\"true\\\"\\r\\n [rows]=\\\"10\\\"\\r\\n [showCurrentPageReport]=\\\"true\\\"\\r\\n currentPageReportTemplate=\\\"Showing {first} to {last} of {totalRecords} entries\\\"\\r\\n styleClass=\\\"p-datatable-sm\\\">\\r\\n <ng-template pTemplate=\\\"header\\\">\\r\\n <tr>\\r\\n <th *ngFor=\\\"let col of previewColumns\\\" class=\\\"text-left\\\">\\r\\n {{ col.header }}\\r\\n </th>\\r\\n </tr>\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"body\\\" let-rowData>\\r\\n <tr>\\r\\n <td *ngFor=\\\"let col of previewColumns\\\" class=\\\"text-left\\\">\\r\\n {{ rowData[col.field] }}\\r\\n </td>\\r\\n </tr>\\r\\n </ng-template>\\r\\n <ng-template pTemplate=\\\"emptymessage\\\">\\r\\n <tr>\\r\\n <td [attr.colspan]=\\\"previewColumns.length\\\" class=\\\"text-center py-4\\\">\\r\\n <div class=\\\"text-center py-8\\\">\\r\\n <i class=\\\"pi pi-inbox text-4xl text-gray-400 dark:text-gray-500 mb-4\\\"></i>\\r\\n <p class=\\\"text-gray-500 dark:text-gray-400\\\">{{ 'NO_PREVIEW_DATA' | translate }}</p>\\r\\n </div>\\r\\n </td>\\r\\n </tr>\\r\\n </ng-template>\\r\\n </p-table>\\r\\n </div> -->\\r\\n </div>\\r\\n\\r\\n <!-- <div class=\\\"mt-4 p-3 bg-green-50 dark:bg-green-900/20 rounded-lg\\\">\\r\\n <p class=\\\"text-sm text-green-700 dark:text-green-300\\\">\\r\\n <i class=\\\"pi pi-info-circle mr-2\\\"></i>\\r\\n {{ 'PREVIEW_INFO' | translate }}\\r\\n </p>\\r\\n </div> -->\\r\\n </div>\\r\\n\\r\\n <!-- Footer -->\\r\\n <div class=\\\"border-t border-gray-200 dark:border-gray-700 px-2 py-2 bg-gray-50 dark:bg-gray-800\\\">\\r\\n <div class=\\\"flex justify-between items-center\\\">\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"onReset()\\\"\\r\\n class=\\\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\\\"\\r\\n [disabled]=\\\"loading\\\">\\r\\n <i class=\\\"pi pi-refresh mr-2\\\"></i>\\r\\n {{ 'RESET' | translate }}\\r\\n </button>\\r\\n\\r\\n <div class=\\\"flex gap-2\\\">\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"ref?.close()\\\"\\r\\n class=\\\"px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\\\"\\r\\n [disabled]=\\\"loading\\\">\\r\\n {{ 'CANCEL' | translate }}\\r\\n </button>\\r\\n\\r\\n <!-- SplitButton for Export -->\\r\\n <!-- || previewData.length === 0 -->\\r\\n <p-splitButton\\r\\n [label]=\\\"getExportButtonText()\\\"\\r\\n [icon]=\\\"getCurrentExportTypeIcon()\\\"\\r\\n [model]=\\\"exportMenuItems\\\"\\r\\n (onClick)=\\\"onExport()\\\"\\r\\n [disabled]=\\\"loading\\\"\\r\\n styleClass=\\\"p-button-primary\\\">\\r\\n </p-splitButton>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <!-- Filters Drawer -->\\r\\n @if(showFilters){\\r\\n <p-drawer\\r\\n [(visible)]=\\\"showFilters\\\"\\r\\n position=\\\"right\\\"\\r\\n [styleClass]=\\\"'!w-full md:!w-80 lg:!w-[40rem] !h-full' \\\"\\r\\n [modal]=\\\"true\\\"\\r\\n [dismissible]=\\\"true\\\"\\r\\n styleClass=\\\"p-4 w-full max-w-md max-h-[90vh] flex flex-col\\\">\\r\\n <form [formGroup]=\\\"form\\\" (ngSubmit)=\\\"onSubmit(); showFilters=false\\\" class=\\\"flex flex-col flex-1\\\">\\r\\n <div class=\\\"flex-1 overflow-auto\\\">\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"fields_\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [options]=\\\"options\\\">\\r\\n </formly-form>\\r\\n </div>\\r\\n </form>\\r\\n <ng-template pTemplate=\\\"footer\\\">\\r\\n <div class=\\\"flex justify-end mt-2 space-x-2 flex-none\\\">\\r\\n <button\\r\\n type=\\\"submit\\\"\\r\\n pButton size=\\\"small\\\"\\r\\n (click)=\\\" onSubmit(); showFilters=false\\\"\\r\\n label=\\\"{{ 'SEARCH' | translate }}\\\">\\r\\n </button>\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n pButton\\r\\n size=\\\"small\\\"\\r\\n class=\\\"p-button-text\\\"\\r\\n (click)=\\\"onReset(); showFilters=false\\\">\\r\\n {{ 'CLEAR' | translate }}\\r\\n </button>\\r\\n </div>\\r\\n </ng-template>\\r\\n </p-drawer>\\r\\n }\\r\\n</div>\\r\\n\" }]\n }], ctorParameters: () => [{ type: i1.DynamicDialogRef }, { type: i1.DynamicDialogConfig }], propDecorators: { previewContainer: [{\n type: ViewChild,\n args: ['previewContainer']\n }], filterFields: [{\n type: Input\n }], enableQueryBuilder: [{\n type: Input\n }], localExport: [{\n type: Input\n }], queryString: [{\n type: Input\n }], apiName: [{\n type: Input\n }], model: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtcmVwb3J0L3NyYy9saWIvZ2VuZXJpYy1yZXBvcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtcmVwb3J0L3NyYy9saWIvZ2VuZXJpYy1yZXBvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUF3QyxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckYsT0FB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QUFhLEVBQUMsV0FBVyxDQUFDO3VIQUdOLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBRXBCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBYUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIE9uSW5pdCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEZvcm1seUZpZWxkQ29uZmlnLCBGb3JtbHlGb3JtT3B0aW9ucywgRm9ybWx5Rm9ybSB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL3BpcGVzJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBEaWFsb2dNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RpYWxvZyc7XHJcbmltcG9ydCB7IElucHV0VGV4dE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcclxuaW1wb3J0IHsgUmFkaW9CdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL3JhZGlvYnV0dG9uJztcclxuaW1wb3J0IHsgQ2hlY2tib3hNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NoZWNrYm94JztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ1JlZiwgRHluYW1pY0RpYWxvZ0NvbmZpZywgRGlhbG9nU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UsIFJlc3RTZXJ2aWNlIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IERyYXdlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJhd2VyJztcclxuaW1wb3J0IHsgVGFibGVNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcclxuaW1wb3J0IHsgU3BsaXRCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL3NwbGl0YnV0dG9uJztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBSZXBvcnROYW1lRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9yZXBvcnQtbmFtZS1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgUXVlcnlCdWlsZGVyU2VydmljZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcudWkuY29yZS9nZW5lcmljLXNlYXJjaC1hZHZhbmNlZCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydENvbmZpZyB7XHJcbiAgZmlsdGVyczogYW55O1xyXG4gIGV4cG9ydFR5cGU6IEV4cG9ydFR5cGU7XHJcbiAgZmlsZU5hbWU/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEV4cG9ydFR5cGUge1xyXG4gIExJU1QsXHJcbiAgSFRNTCxcclxuICBQREYsXHJcbiAgRVhDRUwsXHJcbiAgUFJJTlRcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZ2VuZXJpYy1yZXBvcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW5lcmljLXJlcG9ydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgVHJhbnNsYXRlUGlwZSxcclxuICAgIEJ1dHRvbk1vZHVsZSxcclxuICAgIERpYWxvZ01vZHVsZSxcclxuICAgIElucHV0VGV4dE1vZHVsZSxcclxuICAgIFJhZGlvQnV0dG9uTW9kdWxlLFxyXG4gICAgQ2hlY2tib3hNb2R1bGUsXHJcbiAgICBEcmF3ZXJNb2R1bGUsXHJcbiAgICBGb3JtbHlGb3JtLFxyXG4gICAgVGFibGVNb2R1bGUsXHJcbiAgICBTcGxpdEJ1dHRvbk1vZHVsZSxcclxuICAgIFRvb2x0aXBNb2R1bGUsXHJcblxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOltEaWFsb2dTZXJ2aWNlLFJlc3RTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2VuZXJpY1JlcG9ydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKCdwcmV2aWV3Q29udGFpbmVyJykgcHJldmlld0NvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBJbnB1dCgpIGZpbHRlckZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xyXG4gIGZpZWxkc186IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcclxuICBleHBvcnRUeXBlOiBFeHBvcnRUeXBlID0gRXhwb3J0VHlwZS5QREY7XHJcbiAgZmlsZU5hbWU6IHN0cmluZyA9ICcnO1xyXG4gIHNob3dGaWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGN1cnJlbnREYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcclxuICBwcmV2aWV3RGF0YTogYW55W10gPSBbXTtcclxuICBodG1sRXhwb3J0Q29udGVudDogc3RyaW5nID0gJyc7XHJcbiAgc2hvd0h0bWxJbklmcmFtZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByZXZpZXdDb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG5cclxuICBvcHRpb25zOiBGb3JtbHlGb3JtT3B0aW9ucyA9IHt9O1xyXG4gIEBJbnB1dCgpIGVuYWJsZVF1ZXJ5QnVpbGRlcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgbG9jYWxFeHBvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBxdWVyeVN0cmluZzogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgYXBpTmFtZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIEBJbnB1dCgpIG1vZGVsOiBhbnkgPSB7fTtcclxuICBmb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgZXhwb3J0Q29uZmlnITogRXhwb3J0Q29uZmlnO1xyXG5cclxuICBleHBvcnRUeXBlcyA9IFtcclxuICAgIHsgdmFsdWU6IEV4cG9ydFR5cGUuRVhDRUwsIGxhYmVsOiAnRVhDRUwnLCBpY29uOiAncGkgcGktZmlsZS1leGNlbCcgfSxcclxuICAgIHsgdmFsdWU6IEV4cG9ydFR5cGUuUERGLCBsYWJlbDogJ1BERicsIGljb246ICdwaSBwaS1maWxlLXBkZicgfSxcclxuICAgIHsgdmFsdWU6IEV4cG9ydFR5cGUuSFRNTCwgbGFiZWw6ICdIVE1MJywgaWNvbjogJ3BpIHBpLWNvZGUnIH0sXHJcbiAgICB7IHZhbHVlOiBFeHBvcnRUeXBlLlBSSU5ULCBsYWJlbDogJ1BSSU5UJywgaWNvbjogJ3BpIHBpLXByaW50JyB9XHJcbiAgXTtcclxuXHJcbiAgZXhwb3J0TWVudUl0ZW1zOiBNZW51SXRlbVtdID0gW107XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgZGlhbG9nU2VydmljZTpEaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xyXG4gIHByaXZhdGUgdHJhbnNsYXRlID0gaW5qZWN0KExvY2FsaXphdGlvblNlcnZpY2UpO1xyXG4gIHByaXZhdGUgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlID0gaW5qZWN0KFJlc3RTZXJ2aWNlKTtcclxuICBwcml2YXRlIHF1ZXJ5QnVpbGRlciA9IGluamVjdChRdWVyeUJ1aWxkZXJTZXJ2aWNlKTtcclxucHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJlZjogRHluYW1pY0RpYWxvZ1JlZixcclxuICAgIHB1YmxpYyBjb25maWc6IER5bmFtaWNEaWFsb2dDb25maWdcclxuICApIHt9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMucmVmKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5yZWYuY2xvc2UoKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vIElnbm9yZSBlcnJvcnMgZHVyaW5nIGNsZWFudXBcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmZpbHRlckZpZWxkcyA9IHRoaXMuY29uZmlnLmRhdGE/LmZpbHRlckZpZWxkcyB8fCBbXTtcclxuICAgIHRoaXMuYnVpbGRRdWVyeVVJRmllbGRzKCk7XHJcbiAgICB0aGlzLmluaXRpYWxpemVDb21wb25lbnQoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZUV4cG9ydENvbmZpZygpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplRXhwb3J0TWVudSgpO1xyXG4gIH1cclxuIGdldCBmaWx0ZXJDb3VudCgpIHtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5xdWVyeUJ1aWxkZXIuZ2V0QXBwbGllZEZpbHRlcnNDb3VudCh0aGlzLm1vZGVsKS50b3RhbDtcclxuICB9XHJcbiAgcHJpdmF0ZSBidWlsZFF1ZXJ5VUlGaWVsZHMoKSB7XHJcbiAgICBpZiAodGhpcy5lbmFibGVRdWVyeUJ1aWxkZXIpIHtcclxuICAgICAgdGhpcy5maWVsZHNfID0gdGhpcy5xdWVyeUJ1aWxkZXIuYnVpbGRRdWVyeVVJRmllbGRzKHRoaXMuZmlsdGVyRmllbGRzLHRydWUsdHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkc18gPSB0aGlzLmZpbHRlckZpZWxkcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbXBvbmVudCgpIHtcclxuICAgIHRoaXMuYXBpTmFtZSA9IHRoaXMuY29uZmlnLmRhdGE/LmFwaU5hbWUgfHwgJyc7XHJcbiAgICB0aGlzLmluaXRpYWxpemVGaWx0ZXJGaWVsZHMoKTtcclxuICAgIHRoaXMub25FeHBvcnQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUZpbHRlckZpZWxkcygpIHtcclxuICAgIHRoaXMuZmlsdGVyRmllbGRzID0gdGhpcy5jb25maWcuZGF0YT8uZmlsdGVyRmllbGRzIHx8IHRoaXMuZ2V0RGVmYXVsdEZpbHRlckZpZWxkcygpO1xyXG4gICAgdGhpcy5tb2RlbCA9IHRoaXMuY29uZmlnLmRhdGE/Lm1vZGVsIHx8IHt9O1xyXG4gICAgdGhpcy5maWxlTmFtZSA9IHRoaXMuY29uZmlnLmRhdGE/LmRlZmF1bHRGaWxlTmFtZSB8fCBgZXhwb3J0XyR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF19YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUV4cG9ydENvbmZpZygpIHtcclxuICAgIHRoaXMuZXhwb3J0Q29uZmlnID0ge1xyXG4gICAgICBmaWx0ZXJzOiB0aGlzLm1vZGVsLFxyXG4gICAgICBleHBvcnRUeXBlOiB0aGlzLmV4cG9ydFR5cGUsXHJcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiBwcml2YXRlIGluaXRpYWxpemVFeHBvcnRNZW51KCkge1xyXG4gIHRoaXMuZXhwb3J0TWVudUl0ZW1zID0gW1xyXG4gICAgLy8gRWRpdCBSZXBvcnQgTmFtZSBtZW51IGl0ZW1cclxuICAgIHtcclxuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ0VESVRfUkVQT1JUX05BTUUnKSxcclxuICAgICAgaWNvbjogJ3BpIHBpLXBlbmNpbCcsXHJcbiAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMub3BlblJlcG9ydE5hbWVEaWFsb2coKVxyXG4gICAgfSxcclxuICAgIC8vIFNlcGFyYXRvclxyXG4gICAgeyBzZXBhcmF0b3I6IHRydWUgfSxcclxuICAgIC8vIEV4cG9ydCB0eXBlIG1lbnUgaXRlbXNcclxuICAgIC4uLnRoaXMuZXhwb3J0VHlwZXMubWFwKHR5cGUgPT4gKHtcclxuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQodHlwZS5sYWJlbCksXHJcbiAgICAgIGljb246IHR5cGUuaWNvbixcclxuICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy5vbkV4cG9ydFR5cGVDaGFuZ2UodHlwZS52YWx1ZSlcclxuICAgIH0pKVxyXG4gIF07XHJcbn1cclxuXHJcbnByaXZhdGUgb3BlblJlcG9ydE5hbWVEaWFsb2coKSB7XHJcbiAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oUmVwb3J0TmFtZURpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdFRElUX1JFUE9SVF9OQU1FJyksXHJcbiAgICB3aWR0aDogJzUwMHB4JyxcclxuICAgIGRhdGE6IHtcclxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWVcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXN1bHQ6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICB0aGlzLmZpbGVOYW1lID0gcmVzdWx0O1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG4gIHByaXZhdGUgZ2V0RGVmYXVsdEZpbHRlckZpZWxkcygpOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6ICdzZWFyY2gnLFxyXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdTRUFSQ0gnKSxcclxuICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdFTlRFUl9TRUFSQ0hfVEVSTScpLFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIC8vIFF1ZXJ5IGFuZCBQcmV2aWV3IE1ldGhvZHNcclxuICBnZW5lcmF0ZVByZXZpZXcoKSB7XHJcbiAgICB0aGlzLm9uRXhwb3J0KCk7XHJcbiAgfVxyXG5cclxuICBvblN1Ym1pdCgpIHtcclxuICAgIGNvbnN0IG9kYXRhUGFyYW1zID0gdGhpcy5xdWVyeUJ1aWxkZXIuYnVpbGRPRGF0YUZyb21RdWVyeU1vZGVsKHRoaXMubW9kZWwsIHRoaXMuZmlsdGVyRmllbGRzKTtcclxuICAgIHRoaXMucXVlcnlTdHJpbmcgPSB0aGlzLnF1ZXJ5QnVpbGRlci50b09EYXRhUXVlcnlTdHJpbmcob2RhdGFQYXJhbXMpO1xyXG4gICAgdGhpcy5vbkV4cG9ydCgpO1xyXG4gIH1cclxuXHJcbiAgb25SZXNldCgpIHtcclxuICAgIHRoaXMuZXhwb3J0VHlwZSA9IEV4cG9ydFR5cGUuUERGO1xyXG4gICAgdGhpcy5maWxlTmFtZSA9IGBleHBvcnRfJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXX1gO1xyXG4gICAgdGhpcy5mb3JtLnJlc2V0KCk7XHJcbiAgICB0aGlzLm1vZGVsID0ge307XHJcbiAgICB0aGlzLmdlbmVyYXRlUHJldmlldygpO1xyXG4gIH1cclxuXHJcbiAgLy8gRXhwb3J0IE1ldGhvZHNcclxuICBvbkV4cG9ydCgpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBleHBvcnRDb25maWcgPSB0aGlzLmNyZWF0ZUV4cG9ydENvbmZpZygpO1xyXG4gICAgdGhpcy5oYW5kbGVBcGlFeHBvcnQoZXhwb3J0Q29uZmlnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRXhwb3J0Q29uZmlnKCk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmaWx0ZXJzOiB0aGlzLm1vZGVsLFxyXG4gICAgICBleHBvcnRUeXBlOiB0aGlzLmV4cG9ydFR5cGUsXHJcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVBcGlFeHBvcnQoY29uZmlnOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gdGhpcy5jcmVhdGVSZXF1ZXN0T3B0aW9ucyhjb25maWcpO1xyXG5cclxuICAgIHRoaXMucmVzdFNlcnZpY2UucmVxdWVzdDxhbnksIGFueT4oXHJcbiAgICAgIHJlcXVlc3RPcHRpb25zLFxyXG4gICAgICB7IGFwaU5hbWU6IHRoaXMuYXBpTmFtZSB9XHJcbiAgICApXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUV4cG9ydFJlc3BvbnNlKHJlc3BvbnNlLCBjb25maWcpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXhwb3J0IGZhaWxlZDonLCBlcnJvcik7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVSZXF1ZXN0T3B0aW9ucyhjb25maWc6IGFueSk6IGFueSB7XHJcbiAgICAgLy8gRGVmYXVsdCBxdWVyeVxyXG4gICAgaWYoIXRoaXMucXVlcnlTdHJpbmcgfHwgdGhpcy5xdWVyeVN0cmluZyA9PSAnJyl7XHJcblxyXG4gICAgICAgLy8gVXNlIHRoZSBuZXcgUXVlcnlCdWlsZGVyU2VydmljZSBtZXRob2RzXHJcbiAgICBjb25zdCBvZGF0YVBhcmFtcyA9IHRoaXMucXVlcnlCdWlsZGVyLmJ1aWxkT0RhdGFGcm9tUXVlcnlNb2RlbCh0aGlzLm1vZGVsLCB0aGlzLmZpbHRlckZpZWxkcyk7XHJcbiAgICAvLyB0aGlzLm9kYXRhU2VhcmNoLmVtaXQob2RhdGFQYXJhbXMpO1xyXG5cclxuICAgIC8vIEdlbmVyYXRlIHF1ZXJ5IHN0cmluZyB1c2luZyB0aGUgdW5pZmllZCBtZXRob2RcclxuICAgICB0aGlzLnF1ZXJ5U3RyaW5nID0gdGhpcy5xdWVyeUJ1aWxkZXIudG9PRGF0YVF1ZXJ5U3RyaW5nKG9kYXRhUGFyYW1zKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdPRGF0YSBRdWVyeSBTdHJpbmc6JywgcXVlcnlTdHJpbmcpO1xyXG5cclxuICB9XHJcbiAgICBjb25zdCBmaWx0ZXJzOiBQYXJ0aWFsPGFueT4gPSB7XHJcbiAgICAgIGZpbGVOYW1lOiBjb25maWcuZmlsZU5hbWUgfHwgJycsXHJcbiAgICAgIHF1ZXJ5OiB0aGlzLnF1ZXJ5U3RyaW5nLFxyXG4gICAgICBleHBvcnRUeXBlOiBjb25maWcuZXhwb3J0VHlwZSxcclxuICAgIH07XHJcblxyXG5cclxuXHJcbiAgICBjb25zdCBwYXJhbXMgPSBPYmplY3Qua2V5cyhmaWx0ZXJzKS5yZWR1Y2UoKGFjYzogYW55LCBrZXkpID0+IHtcclxuICAgICAgYWNjW2tleV0gPSBmaWx0ZXJzW2tleV07XHJcbiAgICAgIHJldHVybiBhY2M7XHJcbiAgICB9LCB7fSk7XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnM6IGFueSA9IHtcclxuICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgdXJsOiBgLyR7dGhpcy5hcGlOYW1lfS9leHBvcnRgLFxyXG4gICAgICBwYXJhbXM6IHBhcmFtc1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoY29uZmlnLmV4cG9ydFR5cGUgPT09IEV4cG9ydFR5cGUuSFRNTCkge1xyXG4gICAgICByZXF1ZXN0T3B0aW9ucy5yZXNwb25zZVR5cGUgPSAndGV4dCc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlcXVlc3RPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBoYW5kbGVFeHBvcnRSZXNwb25zZShyZXNwb25zZTogYW55LCBjb25maWc6IGFueSkge1xyXG4gIC8vICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIC8vICAgaWYgKGNvbmZpZy5leHBvcnRUeXBlID09PSBFeHBvcnRUeXBlLkhUTUwpIHtcclxuICAvLyAgICAgdGhpcy5zaG93SHRtbEV4cG9ydChyZXNwb25zZSk7XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICB0aGlzLmRvd25sb2FkQmluYXJ5RXhwb3J0KHJlc3BvbnNlLCBjb25maWcpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuICAgcHJpdmF0ZSBoYW5kbGVFeHBvcnRSZXNwb25zZShyZXNwb25zZTogYW55LCBjb25maWc6IGFueSkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGNvbmZpZy5leHBvcnRUeXBlID09PSBFeHBvcnRUeXBlLkhUTUwpIHtcclxuICAgICAgdGhpcy5zaG93SHRtbEV4cG9ydChyZXNwb25zZSk7XHJcbiAgICAvLyB9IGVsc2UgaWYgKGNvbmZpZy5leHBvcnRUeXBlID09PSBFeHBvcnRUeXBlLlBERiAmJiB0aGlzLmlzTW9iaWxlRGV2aWNlKCkpIHtcclxuICAgIH0gZWxzZSBpZiAoY29uZmlnLmV4cG9ydFR5cGUgPT09IEV4cG9ydFR5cGUuUERGKSB7XHJcbiAgICAgIHRoaXMuc2hvd1BkZkluTW9iaWxlKHJlc3BvbnNlLCBjb25maWcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kb3dubG9hZEJpbmFyeUV4cG9ydChyZXNwb25zZSwgY29uZmlnKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8gUGxhdGZvcm0gZGV0ZWN0aW9uIG1ldGhvZHNcclxucHJpdmF0ZSBpc01vYmlsZURldmljZSgpOiBib29sZWFuIHtcclxuICByZXR1cm4gL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG59XHJcblxyXG5wcml2YXRlIGlzSU9TKCk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcclxufVxyXG5cclxucHJpdmF0ZSBpc0FuZHJvaWQoKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIC9BbmRyb2lkLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG59XHJcbiAgc2hvd1BkZk1vZGFsID0gZmFsc2U7XHJcbiAgY3VycmVudFBkZlVybD86U2FmZVJlc291cmNlVXJsO1xyXG4gIGN1cnJlbnRGaWxlTmFtZSA9ICcnO1xyXG4gcHJpdmF0ZSBzaG93UGRmSW5Nb2JpbGUoYmFzZTY0RGF0YTogc3RyaW5nLCBjb25maWc6IGFueSk6IHZvaWQge1xyXG5cclxuXHJcbiAgICB0cnkge1xyXG4gICBjb25zdCBibG9iID0gdGhpcy5iYXNlNjRUb0Jsb2IoYmFzZTY0RGF0YSwgdGhpcy5nZXRNaW1lVHlwZShFeHBvcnRUeXBlLlBERikpO1xyXG4gICAgdGhpcy5jdXJyZW50UGRmVXJsID0gdGhpcy5zYW5pdGl6ZVVybChVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpKTtcclxuICAgIHRoaXMuY3VycmVudEZpbGVOYW1lID0gYCR7Y29uZmlnLmZpbGVOYW1lfS5wZGZgO1xyXG4gICAgdGhpcy5zaG93UGRmTW9kYWwgPSB0cnVlO1xyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICB2YXIgZXJyb3IgPSAnUERGIGlzIHRvbyBsYXJnZSBmb3IgbW9iaWxlIHZpZXdpbmcuIFBsZWFzZSBkb3dubG9hZCBpbnN0ZWFkLic7XHJcbiAgfSBmaW5hbGx5IHtcclxuICAgIC8vIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gIH1cclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIHNhbml0aXplVXJsKHVybDogc3RyaW5nKTogU2FmZVJlc291cmNlVXJsIHtcclxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodXJsKTtcclxuICB9XHJcblxyXG4gIC8vIG9uUGRmTW9kYWxDbG9zZSgpOiB2b2lkIHtcclxuICAvLyAgIHRoaXMuc2hvd1BkZk1vZGFsID0gZmFsc2U7XHJcbiAgLy8gICBpZiAodGhpcy5jdXJyZW50UGRmVXJsKSB7XHJcbiAgLy8gICAgIFVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5jdXJyZW50UGRmVXJsKTtcclxuICAvLyAgICAgdGhpcy5jdXJyZW50UGRmVXJsID0gJyc7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBvblBkZkRvd25sb2FkKCk6IHZvaWQge1xyXG4gICAgLy8gVHJpZ2dlciBkb3dubG9hZFxyXG4gICAgLy8gY29uc3QgYmxvYiA9IHRoaXMuYmFzZTY0VG9CbG9iKHRoaXMuZ2V0Q3VycmVudEJhc2U2NCgpLCB0aGlzLmdldE1pbWVUeXBlKEV4cG9ydFR5cGUuUERGKSk7XHJcbiAgICAvLyB0aGlzLmRvd25sb2FkRmlsZShibG9iLCB0aGlzLmN1cnJlbnRGaWxlTmFtZSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgZG93bmxvYWRCaW5hcnlFeHBvcnQocmVzcG9uc2U6IGFueSwgY29uZmlnOiBhbnkpIHtcclxuICAgIGNvbnN0IGJsb2IgPSB0aGlzLmJhc2U2NFRvQmxvYihcclxuICAgICAgcmVzcG9uc2UsXHJcbiAgICAgIHRoaXMuZ2V0TWltZVR5cGUoY29uZmlnLmV4cG9ydFR5cGUpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuZG93bmxvYWRGaWxlKFxyXG4gICAgICBibG9iLFxyXG4gICAgICBgJHtjb25maWcuZmlsZU5hbWV9LiR7dGhpcy5nZXRGaWxlRXh0ZW5zaW9uKGNvbmZpZy5leHBvcnRUeXBlKX1gXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gSFRNTCBFeHBvcnQgTWV0aG9kc1xyXG4gIHByaXZhdGUgc2hvd0h0bWxFeHBvcnQoaHRtbENvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgY2xlYW5IdG1sID0gdGhpcy5jbGVhbkh0bWxDb250ZW50KGh0bWxDb250ZW50KTtcclxuICAgIHRoaXMuaHRtbEV4cG9ydENvbnRlbnQgPSBjbGVhbkh0bWw7XHJcbiAgICB0aGlzLnNob3dIdG1sSW5JZnJhbWUgPSB0cnVlO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldElmcmFtZUNvbnRlbnQoY2xlYW5IdG1sKTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldElmcmFtZUNvbnRlbnQoaHRtbENvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlcG9ydElmcmFtZScpIGFzIEhUTUxJRnJhbWVFbGVtZW50O1xyXG4gICAgaWYgKCFpZnJhbWUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignSWZyYW1lIG5vdCBmb3VuZCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaWZyYW1lRG9jID0gaWZyYW1lLmNvbnRlbnREb2N1bWVudCB8fCBpZnJhbWUuY29udGVudFdpbmRvdz8uZG9jdW1lbnQ7XHJcbiAgICBpZiAoaWZyYW1lRG9jKSB7XHJcbiAgICAgIGlmcmFtZURvYy5vcGVuKCk7XHJcbiAgICAgIGlmcmFtZURvYy53cml0ZShodG1sQ29udGVudCk7XHJcbiAgICAgIGlmcmFtZURvYy5jbG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpbnQoKTogdm9pZCB7XHJcbiAgICAvLyBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVwb3J0SWZyYW1lJykgYXMgSFRNTElGcmFtZUVsZW1lbnQgfCBudWxsO1xyXG4gICAgLy8gaWYgKCFpZnJhbWUgfHwgIWlmcmFtZS5jb250ZW50V2luZG93KSByZXR1cm47XHJcblxyXG4gICAgLy8gY29uc3QgaWZyYW1lV2luZG93ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3c7XHJcbiAgICAvLyBpZnJhbWVXaW5kb3cuZm9jdXMoKTtcclxuICAgIC8vIGlmcmFtZVdpbmRvdy5wcmludCgpO1xyXG5cclxuICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlcG9ydElmcmFtZScpIGFzIGFueSkuY29udGVudFdpbmRvdy5wcmludCgpIDtcclxuICB9XHJcblxyXG5cclxuICAvLyBVdGlsaXR5IE1ldGhvZHNcclxuICBnZXRFeHBvcnRCdXR0b25UZXh0KCk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuZXhwb3J0VHlwZSkge1xyXG4gICAgICBjYXNlIEV4cG9ydFR5cGUuUFJJTlQ6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ1BSSU5UJyk7XHJcbiAgICAgIGNhc2UgRXhwb3J0VHlwZS5IVE1MOlxyXG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdFWFBPUlQnKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnRVhQT1JUJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkV4cG9ydFR5cGVDaGFuZ2UodHlwZTogRXhwb3J0VHlwZSkge1xyXG4gICAgdGhpcy5leHBvcnRUeXBlID0gdHlwZTtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnRFeHBvcnRUeXBlSWNvbigpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY3VycmVudFR5cGUgPSB0aGlzLmV4cG9ydFR5cGVzLmZpbmQodHlwZSA9PiB0eXBlLnZhbHVlID09PSB0aGlzLmV4cG9ydFR5cGUpO1xyXG4gICAgcmV0dXJuIGN1cnJlbnRUeXBlPy5pY29uIHx8ICdwaSBwaS1kb3dubG9hZCc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJhc2U2NFRvQmxvYihiYXNlNjQ6IHN0cmluZywgbWltZTogc3RyaW5nKTogQmxvYiB7XHJcbiAgICBjb25zdCBieXRlQ2hhcnMgPSBhdG9iKGJhc2U2NCk7XHJcbiAgICBjb25zdCBieXRlTnVtcyA9IEFycmF5LmZyb20oYnl0ZUNoYXJzLCBjID0+IGMuY2hhckNvZGVBdCgwKSk7XHJcbiAgICByZXR1cm4gbmV3IEJsb2IoW25ldyBVaW50OEFycmF5KGJ5dGVOdW1zKV0sIHsgdHlwZTogbWltZSB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZG93bmxvYWRGaWxlKGJsb2I6IEJsb2IsIGZpbGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGxpbmsuaHJlZiA9IHVybDtcclxuICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlTmFtZTtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xyXG4gICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmlsZUV4dGVuc2lvbihleHBvcnRUeXBlOiBFeHBvcnRUeXBlKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAoZXhwb3J0VHlwZSkge1xyXG4gICAgICBjYXNlIEV4cG9ydFR5cGUuRVhDRUw6XHJcbiAgICAgICAgcmV0dXJuICd4bHN4JztcclxuICAgICAgY2FzZSBFeHBvcnRUeXBlLlBERjpcclxuICAgICAgICByZXR1cm4gJ3BkZic7XHJcbiAgICAgIGNhc2UgRXhwb3J0VHlwZS5IVE1MOlxyXG4gICAgICAgIHJldHVybiAnaHRtbCc7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICdwZGYnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNaW1lVHlwZShleHBvcnRUeXBlOiBFeHBvcnRUeXBlKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAoZXhwb3J0VHlwZSkge1xyXG4gICAgICBjYXNlIEV4cG9ydFR5cGUuRVhDRUw6XHJcbiAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCc7XHJcbiAgICAgIGNhc2UgRXhwb3J0VHlwZS5QREY6XHJcbiAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9wZGYnO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYW5IdG1sQ29udGVudChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGh0bWxcclxuICAgICAgLnJlcGxhY2UoL1xcXFxyXFxcXG4vZywgJ1xcbicpXHJcbiAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJylcclxuICAgICAgLnJlcGxhY2UoL1xcXFx0L2csICcgJylcclxuICAgICAgLnRyaW0oKTtcclxuICB9XHJcbn1cclxuIiwiPCEtLSBjbGFzcz1cImZsZXggZmxleC1jb2wgaC1mdWxsIGJnLXdoaXRlIGRhcms6YmctZ3JheS05MDAgcm91bmRlZC1sZyBtYXgtdy02eGwgbXgtYXV0b1wiIC0tPlxyXG48ZGl2ID5cclxuICA8IS0tIENvbnRlbnQgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImZsZXgtMSBvdmVyZmxvdy1oaWRkZW4gcC0yXCI+XHJcblxyXG4gICAgPCEtLSBQcmV2aWV3IEFjdGlvbnMgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIG1iLTYgcC0yIGJnLXdoaXRlIHJvdW5kZWQtbGdcIj5cclxuICAgICAgPGgzIGNsYXNzPVwidGV4dC1sZyBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlXCI+XHJcbiAgICAgICAge3sgJ1JFUE9SVCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9oMz5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTJcIj5cclxuICAgICAgICA8IS0tIEZpbHRlcnMgQnV0dG9uIC0tPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dGaWx0ZXJzID0gIXNob3dGaWx0ZXJzXCJcclxuICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBkYXJrOnRleHQtZ3JheS0zMDAgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCByb3VuZGVkLWxnIGhvdmVyOmJnLWdyYXktNTAgZGFyazpob3ZlcjpiZy1ncmF5LTcwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICAgICAgICBbcFRvb2x0aXBdPVwiJ1NFQVJDSF9GSUxURVJTJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1maWx0ZXJcIj48L2k+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlckNvdW50ID4gMFwiIGNsYXNzPVwibWwtMiBiZy1ibHVlLTUwMCB0ZXh0LXdoaXRlIHRleHQteHMgcm91bmRlZC1mdWxsIGgtNSB3LTUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cclxuICAgICAgICAgICAge3sgZmlsdGVyQ291bnQgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPCEtLSBSZWZyZXNoIFByZXZpZXcgLS0+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKGNsaWNrKT1cImdlbmVyYXRlUHJldmlldygpXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nXCJcclxuICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSBiZy1ibHVlLTYwMCByb3VuZGVkLWxnIGhvdmVyOmJnLWJsdWUtNzAwIGRpc2FibGVkOmJnLWdyYXktMzAwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICAgICAgICBbcFRvb2x0aXBdPVwiJ1JFRlJFU0gnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXJlZnJlc2ggbXItMiBtbC0yXCIgW2NsYXNzLmFuaW1hdGUtc3Bpbl09XCJsb2FkaW5nXCI+PC9pPlxyXG4gICAgICAgICAge3sgJ1JFRlJFU0gnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDwhLS0gUHJpbnQgQnV0dG9uIC0tPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICpuZ0lmPVwiZXhwb3J0VHlwZSA9PT0gNCB8fCBleHBvcnRUeXBlID09PSAxIHx8IGV4cG9ydFR5cGUgPT09IDJcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInByaW50KClcIlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBweC00IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIGRhcms6dGV4dC1ncmF5LTMwMCBib3JkZXIgYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwIHJvdW5kZWQtbGcgaG92ZXI6YmctZ3JheS01MCBkYXJrOmhvdmVyOmJnLWdyYXktNzAwIHRyYW5zaXRpb24tY29sb3JzXCJcclxuICAgICAgICAgIFtwVG9vbHRpcF09XCInUFJJTlQnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXByaW50IG1yLTIgbWwtMlwiPjwvaT5cclxuICAgICAgICAgIHt7ICdQUklOVCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFByZXZpZXcgQ29udGVudCAtLT5cclxuICAgIDxkaXYgI3ByZXZpZXdDb250YWluZXIgY2xhc3M9XCJiZy13aGl0ZSBkYXJrOmJnLWdyYXktODAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZ3JheS03MDAgcm91bmRlZC1sZ1wiPlxyXG4gICAgICA8IS0tIEhUTUwgRXhwb3J0IFByZXZpZXcgKElmcmFtZSkgLS0+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93SHRtbEluSWZyYW1lICYmIGh0bWxFeHBvcnRDb250ZW50IHx8IHNob3dQZGZNb2RhbFwiIGNsYXNzPVwiaHRtbC1leHBvcnQtcHJldmlld1wiPlxyXG4gICAgICAgIDxpZnJhbWVcclxuICAgICAgICAgIGlkPVwicmVwb3J0SWZyYW1lXCJcclxuICAgICAgICAgIGNsYXNzPVwidy1mdWxsIGJvcmRlciBib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZ3JheS02MDAgcm91bmRlZC1iLWxnXCJcclxuICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiJzYwMHB4J1wiXHJcbiAgICAgICAgICB0aXRsZT1cIkhUTUwgRXhwb3J0IFByZXZpZXdcIlxyXG4gICAgICAgICAgW3NyY109XCJjdXJyZW50UGRmVXJsXCJcclxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcclxuICAgICAgICAgICAgaGVpZ2h0PVwiMTAwJVwiXHJcbiAgICAgICAgICAgIGZyYW1lYm9yZGVyPVwiMFwiXHJcbiAgICAgICAgICAgIGFsbG93ZnVsbHNjcmVlblxyXG5cclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwhLS0gIGFsbG93ZnVsbHNjcmVlbiAtLT5cclxuICAgICAgICA8L2lmcmFtZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gPGFwcC1wZGYtbW9kYWxcclxuICAqbmdJZj1cInNob3dQZGZNb2RhbFwiXHJcbiAgW3BkZlVybF09XCJjdXJyZW50UGRmVXJsXCJcclxuICBbZmlsZU5hbWVdPVwiY3VycmVudEZpbGVOYW1lXCJcclxuICAoY2xvc2VkKT1cIm9uUGRmTW9kYWxDbG9zZSgpXCJcclxuICAoZG93bmxvYWRSZXF1ZXN0ZWQpPVwib25QZGZEb3dubG9hZCgpXCI+XHJcbjwvYXBwLXBkZi1tb2RhbD4gLS0+XHJcblxyXG4gICAgICA8IS0tIFJlZ3VsYXIgUHJldmlldyBUYWJsZSAtLT5cclxuICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiIXNob3dIdG1sSW5JZnJhbWVcIiBjbGFzcz1cInAtNFwiPlxyXG4gICAgICAgIDxwLXRhYmxlXHJcbiAgICAgICAgICBbdmFsdWVdPVwicHJldmlld0RhdGFcIlxyXG4gICAgICAgICAgW2NvbHVtbnNdPVwicHJldmlld0NvbHVtbnNcIlxyXG4gICAgICAgICAgW3BhZ2luYXRvcl09XCJ0cnVlXCJcclxuICAgICAgICAgIFtyb3dzXT1cIjEwXCJcclxuICAgICAgICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwiU2hvd2luZyB7Zmlyc3R9IHRvIHtsYXN0fSBvZiB7dG90YWxSZWNvcmRzfSBlbnRyaWVzXCJcclxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zbVwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgcHJldmlld0NvbHVtbnNcIiBjbGFzcz1cInRleHQtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmhlYWRlciB9fVxyXG4gICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtcm93RGF0YT5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sIG9mIHByZXZpZXdDb2x1bW5zXCIgY2xhc3M9XCJ0ZXh0LWxlZnRcIj5cclxuICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwicHJldmlld0NvbHVtbnMubGVuZ3RoXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHktOFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWluYm94IHRleHQtNHhsIHRleHQtZ3JheS00MDAgZGFyazp0ZXh0LWdyYXktNTAwIG1iLTRcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1ncmF5LTUwMCBkYXJrOnRleHQtZ3JheS00MDBcIj57eyAnTk9fUFJFVklFV19EQVRBJyB8IHRyYW5zbGF0ZSB9fTwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvcC10YWJsZT5cclxuICAgICAgPC9kaXY+IC0tPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwibXQtNCBwLTMgYmctZ3JlZW4tNTAgZGFyazpiZy1ncmVlbi05MDAvMjAgcm91bmRlZC1sZ1wiPlxyXG4gICAgICA8cCBjbGFzcz1cInRleHQtc20gdGV4dC1ncmVlbi03MDAgZGFyazp0ZXh0LWdyZWVuLTMwMFwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwicGkgcGktaW5mby1jaXJjbGUgbXItMlwiPjwvaT5cclxuICAgICAgICB7eyAnUFJFVklFV19JTkZPJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L3A+XHJcbiAgICA8L2Rpdj4gLS0+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gRm9vdGVyIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJib3JkZXItdCBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZ3JheS03MDAgcHgtMiBweS0yIGJnLWdyYXktNTAgZGFyazpiZy1ncmF5LTgwMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uUmVzZXQoKVwiXHJcbiAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBweC00IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIGRhcms6dGV4dC1ncmF5LTMwMCBob3Zlcjp0ZXh0LWdyYXktOTAwIGRhcms6aG92ZXI6dGV4dC13aGl0ZSBob3ZlcjpiZy1ncmF5LTEwMCBkYXJrOmhvdmVyOmJnLWdyYXktNzAwIHJvdW5kZWQtbGcgdHJhbnNpdGlvbi1jb2xvcnNcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1yZWZyZXNoIG1yLTJcIj48L2k+XHJcbiAgICAgICAge3sgJ1JFU0VUJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yXCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwicmVmPy5jbG9zZSgpXCJcclxuICAgICAgICAgIGNsYXNzPVwicHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBkYXJrOnRleHQtZ3JheS0zMDAgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCByb3VuZGVkLWxnIGhvdmVyOmJnLWdyYXktNTAgZGFyazpob3ZlcjpiZy1ncmF5LTcwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1wiPlxyXG4gICAgICAgICAge3sgJ0NBTkNFTCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPCEtLSBTcGxpdEJ1dHRvbiBmb3IgRXhwb3J0IC0tPlxyXG4gICAgICAgICA8IS0tIHx8IHByZXZpZXdEYXRhLmxlbmd0aCA9PT0gMCAtLT5cclxuICAgICAgICA8cC1zcGxpdEJ1dHRvblxyXG4gICAgICAgICAgW2xhYmVsXT1cImdldEV4cG9ydEJ1dHRvblRleHQoKVwiXHJcbiAgICAgICAgICBbaWNvbl09XCJnZXRDdXJyZW50RXhwb3J0VHlwZUljb24oKVwiXHJcbiAgICAgICAgICBbbW9kZWxdPVwiZXhwb3J0TWVudUl0ZW1zXCJcclxuICAgICAgICAgIChvbkNsaWNrKT1cIm9uRXhwb3J0KClcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIlxyXG4gICAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXByaW1hcnlcIj5cclxuICAgICAgICA8L3Atc3BsaXRCdXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gRmlsdGVycyBEcmF3ZXIgLS0+XHJcbiAgQGlmKHNob3dGaWx0ZXJzKXtcclxuICA8cC1kcmF3ZXJcclxuICAgIFsodmlzaWJsZSldPVwic2hvd0ZpbHRlcnNcIlxyXG4gICAgcG9zaXRpb249XCJyaWdodFwiXHJcbiAgICBbc3R5bGVDbGFzc109XCInIXctZnVsbCBtZDohdy04MCBsZzohdy1bNDByZW1dICFoLWZ1bGwnIFwiXHJcbiAgICBbbW9kYWxdPVwidHJ1ZVwiXHJcbiAgICBbZGlzbWlzc2libGVdPVwidHJ1ZVwiXHJcbiAgICBzdHlsZUNsYXNzPVwicC00IHctZnVsbCBtYXgtdy1tZCBtYXgtaC1bOTB2aF0gZmxleCBmbGV4LWNvbFwiPlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0KCk7IHNob3dGaWx0ZXJzPWZhbHNlXCIgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtMVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIG92ZXJmbG93LWF1dG9cIj5cclxuICAgICAgICA8Zm9ybWx5LWZvcm1cclxuICAgICAgICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICAgICAgW2ZpZWxkc109XCJmaWVsZHNfXCJcclxuICAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXHJcbiAgICAgICAgICBbb3B0aW9uc109XCJvcHRpb25zXCI+XHJcbiAgICAgICAgPC9mb3JtbHktZm9ybT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIG10LTIgc3BhY2UteC0yIGZsZXgtbm9uZVwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxyXG4gICAgICAgICAgcEJ1dHRvbiBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIiBvblN1Ym1pdCgpOyBzaG93RmlsdGVycz1mYWxzZVwiXHJcbiAgICAgICAgICBsYWJlbD1cInt7ICdTRUFSQ0gnIHwgdHJhbnNsYXRlIH19XCI+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBwQnV0dG9uXHJcbiAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0XCJcclxuICAgICAgICAgIChjbGljayk9XCJvblJlc2V0KCk7IHNob3dGaWx0ZXJzPWZhbHNlXCI+XHJcbiAgICAgICAgICB7eyAnQ0xFQVInIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtZHJhd2VyPlxyXG4gIH1cclxuPC9kaXY+XHJcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy1yZXBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1yZXBvcnQvc3JjL2VsaXRlLmZyYW1ld29yay1uZy51aS5jb3JlLWdlbmVyaWMtcmVwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i1","i2","i3","i4"],"mappings":"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"}