@mediusinc/mng-commons 7.0.0-rc.0 → 7.0.0-rc.1
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.
- package/core/index.d.ts +8 -8
- package/fesm2022/mediusinc-mng-commons-core.mjs +2 -6
- package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-filter.mjs +20 -0
- package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-form.mjs +94 -11
- package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table-api.mjs +0 -2
- package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
- package/fesm2022/{mediusinc-mng-commons-table-column-toggle.component-Dvenjj9n.mjs → mediusinc-mng-commons-table-column-toggle.component-0Dtv48mq.mjs} +2 -2
- package/fesm2022/{mediusinc-mng-commons-table-column-toggle.component-Dvenjj9n.mjs.map → mediusinc-mng-commons-table-column-toggle.component-0Dtv48mq.mjs.map} +1 -1
- package/fesm2022/mediusinc-mng-commons-table-mediusinc-mng-commons-table-BsAwyXiN.mjs +2417 -0
- package/fesm2022/mediusinc-mng-commons-table-mediusinc-mng-commons-table-BsAwyXiN.mjs.map +1 -0
- package/fesm2022/mediusinc-mng-commons-table.mjs +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +16 -3
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview.mjs +43 -47
- package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
- package/filter/index.d.ts +16 -3
- package/form/index.d.ts +48 -6
- package/i18n/en.json +5 -2
- package/i18n/sl.json +5 -2
- package/package.json +1 -1
- package/table/api/index.d.ts +2 -2
- package/table/index.d.ts +161 -126
- package/tableview/api/index.d.ts +1 -3
- package/tableview/index.d.ts +24 -33
- package/version-info.json +5 -5
- package/fesm2022/mediusinc-mng-commons-table-mediusinc-mng-commons-table-DFcdSUCN.mjs +0 -2142
- package/fesm2022/mediusinc-mng-commons-table-mediusinc-mng-commons-table-DFcdSUCN.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mediusinc-mng-commons-core.mjs","sources":["../tmp-esm2022/core/components/notification/notification-wrapper.component.js","../tmp-esm2022/core/error/error.model.js","../tmp-esm2022/core/helpers/date.js","../tmp-esm2022/core/data-list/filter-match.model.js","../tmp-esm2022/core/data-list/data-list-params-helpers.js","../tmp-esm2022/core/data-providers/base.data-provider.js","../tmp-esm2022/core/reactivity/effect.js","../tmp-esm2022/core/directives/component.directive.js","../tmp-esm2022/core/directives/rerender.directive.js","../tmp-esm2022/core/directives/template.directive.js","../tmp-esm2022/core/enum/enum-helpers.js","../tmp-esm2022/core/log/log.model.js","../tmp-esm2022/core/log/logger.service.js","../tmp-esm2022/core/helpers/object.js","../tmp-esm2022/core/helpers/string.js","../tmp-esm2022/core/error/error-helpers.js","../tmp-esm2022/core/error/error-handler.js","../tmp-esm2022/core/helpers/coercion.js","../tmp-esm2022/core/helpers/notification.js","../tmp-esm2022/core/helpers/number.js","../tmp-esm2022/core/helpers/route.js","../tmp-esm2022/core/helpers/templates.js","../tmp-esm2022/core/i18n/i18n-common.js","../tmp-esm2022/core/i18n/i18n-error.js","../tmp-esm2022/core/i18n/i18n-type.js","../tmp-esm2022/core/log/log-publisher-console.service.js","../tmp-esm2022/core/pipes/boolean.pipe.js","../tmp-esm2022/core/pipes/class-map.pipe.js","../tmp-esm2022/core/reflect/type-enum-metadata.js","../tmp-esm2022/core/pipes/enum.pipe.js","../tmp-esm2022/core/pipes/json-path.pipe.js","../tmp-esm2022/core/pipes/enumerate.pipe.js","../tmp-esm2022/core/pipes/enumerate-async.pipe.js","../tmp-esm2022/core/pipes/getter.pipe.js","../tmp-esm2022/core/pipes/i18n-property.pipe.js","../tmp-esm2022/core/pipes/parametrize.pipe.js","../tmp-esm2022/core/pipes/template.pipe.js","../tmp-esm2022/core/reflect/type-enum-decorator.js","../tmp-esm2022/core/registry/type-registry.js","../tmp-esm2022/core/services/tokens/browser-storage.token.js","../tmp-esm2022/core/services/tokens/module-config.token.js","../tmp-esm2022/core/services/commons.service.js","../tmp-esm2022/core/security/permissions.model.js","../tmp-esm2022/core/security/permission-helpers.js","../tmp-esm2022/core/security/permission.service.js","../tmp-esm2022/core/security/permission.guard.js","../tmp-esm2022/core/router/route-builder.js","../tmp-esm2022/core/router/routes-builder.js","../tmp-esm2022/core/rxjs/map-data-list-result-operator.js","../tmp-esm2022/core/services/providers/commons-init.provider.js","../tmp-esm2022/core/services/tokens/commons-init.token.js","../tmp-esm2022/core/services/tokens/log-publisher.token.js","../tmp-esm2022/core/services/commons-configuration.service.js","../tmp-esm2022/core/services/commons-router.service.js","../tmp-esm2022/core/services/commons-init.service.js","../tmp-esm2022/core/services/commons-storage.service.js","../tmp-esm2022/core/styles/style.model.js","../tmp-esm2022/core/styles/style-constants.js","../tmp-esm2022/core/provide.js","../tmp-esm2022/core/index.js","../tmp-esm2022/core/mediusinc-mng-commons-core.js"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { Dialog } from 'primeng/dialog';\nimport { Toast } from 'primeng/toast';\nimport * as i0 from \"@angular/core\";\nexport class NotificationWrapperComponent {\n constructor() {\n this.notificationCutoff = 70;\n this.isDialogNotificationVisible = computed(() => this.dialogNotification() !== null, ...(ngDevMode ? [{ debugName: \"isDialogNotificationVisible\" }] : []));\n this.dialogNotification = signal(null, ...(ngDevMode ? [{ debugName: \"dialogNotification\" }] : []));\n this.dialogNotificationIconClass = computed(() => this.getMessageIcon(this.dialogNotification()), ...(ngDevMode ? [{ debugName: \"dialogNotificationIconClass\" }] : []));\n }\n getMessageIcon(message) {\n if (message?.icon)\n return message.icon;\n switch (message?.severity) {\n case 'info':\n return 'pi-info-circle';\n case 'warn':\n return 'pi-exclamation-triangle';\n case 'error':\n return 'pi-times-circle';\n case 'success':\n return 'pi-check';\n default:\n return '';\n }\n }\n onShowNotificationInDialog(message) {\n this.dialogNotification.set(message);\n }\n onDialogNotificationVisibilityChange(visible) {\n if (!visible) {\n this.dialogNotification.set(null);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: NotificationWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.7\", type: NotificationWrapperComponent, isStandalone: true, selector: \"mng-notification-wrapper\", ngImport: i0, template: \"<ng-content></ng-content>\\n<p-confirmDialog appendTo=\\\"body\\\" [baseZIndex]=\\\"50\\\"></p-confirmDialog>\\n\\n<p-toast [baseZIndex]=\\\"50\\\">\\n <ng-template #message let-message>\\n <span [class]=\\\"'p-toast-message-icon pi ' + getMessageIcon(message)\\\"></span>\\n <div class=\\\"p-toast-message-text\\\">\\n <div class=\\\"p-toast-summary\\\">{{ message.summary }}</div>\\n @if (message.detail) {\\n <div class=\\\"p-toast-detail\\\">{{ message.detail.slice(0, notificationCutoff) + (message.detail.length > notificationCutoff ? '...' : '') }}</div>\\n @if (message.detail.length > notificationCutoff) {\\n <div (click)=\\\"onShowNotificationInDialog(message)\\\" class=\\\"font-semibold text-sm mt-2 flex items-center\\\">\\n <i class=\\\"pi pi-chevron-down mr-1\\\"></i>{{ 'notification.details' | translate }}\\n </div>\\n }\\n }\\n </div>\\n </ng-template>\\n</p-toast>\\n\\n<p-dialog\\n [visible]=\\\"isDialogNotificationVisible()\\\"\\n (visibleChange)=\\\"onDialogNotificationVisibilityChange($event)\\\"\\n [styleClass]=\\\"'mng-dialog mng-dialog-xs mng-message-detail-dialog mng-message-detail-dialog-' + (dialogNotification()?.severity ?? '')\\\"\\n appendTo=\\\"body\\\"\\n draggable=\\\"false\\\"\\n modal=\\\"true\\\">\\n <ng-template #header>\\n <span class=\\\"p-dialog-title font-bold mng-dialog-success\\\">\\n <span [class]=\\\"'mr-2 pi ' + dialogNotificationIconClass()\\\"></span>\\n {{ dialogNotification()?.summary ?? '' }}\\n </span>\\n </ng-template>\\n <div class=\\\"mng-notification-details\\\">\\n {{ dialogNotification()?.detail ?? '' }}\\n </div>\\n</p-dialog>\\n\", styles: [\".mng-notification-details{white-space:pre-wrap;word-wrap:break-word}\\n\"], dependencies: [{ kind: \"component\", type: ConfirmDialog, selector: \"p-confirmDialog, p-confirmdialog, p-confirm-dialog\", inputs: [\"header\", \"icon\", \"message\", \"style\", \"styleClass\", \"maskStyleClass\", \"acceptIcon\", \"acceptLabel\", \"closeAriaLabel\", \"acceptAriaLabel\", \"acceptVisible\", \"rejectIcon\", \"rejectLabel\", \"rejectAriaLabel\", \"rejectVisible\", \"acceptButtonStyleClass\", \"rejectButtonStyleClass\", \"closeOnEscape\", \"dismissableMask\", \"blockScroll\", \"rtl\", \"closable\", \"appendTo\", \"key\", \"autoZIndex\", \"baseZIndex\", \"transitionOptions\", \"focusTrap\", \"defaultFocus\", \"breakpoints\", \"visible\", \"position\", \"draggable\"], outputs: [\"onHide\"] }, { kind: \"component\", type: Dialog, selector: \"p-dialog\", inputs: [\"header\", \"draggable\", \"resizable\", \"contentStyle\", \"contentStyleClass\", \"modal\", \"closeOnEscape\", \"dismissableMask\", \"rtl\", \"closable\", \"breakpoints\", \"styleClass\", \"maskStyleClass\", \"maskStyle\", \"showHeader\", \"blockScroll\", \"autoZIndex\", \"baseZIndex\", \"minX\", \"minY\", \"focusOnShow\", \"maximizable\", \"keepInViewport\", \"focusTrap\", \"transitionOptions\", \"closeIcon\", \"closeAriaLabel\", \"closeTabindex\", \"minimizeIcon\", \"maximizeIcon\", \"closeButtonProps\", \"maximizeButtonProps\", \"visible\", \"style\", \"position\", \"role\", \"appendTo\", \"content\", \"contentTemplate\", \"footerTemplate\", \"closeIconTemplate\", \"maximizeIconTemplate\", \"minimizeIconTemplate\", \"headlessTemplate\"], outputs: [\"onShow\", \"onHide\", \"visibleChange\", \"onResizeInit\", \"onResizeEnd\", \"onDragEnd\", \"onMaximize\"] }, { kind: \"component\", type: Toast, selector: \"p-toast\", inputs: [\"key\", \"autoZIndex\", \"baseZIndex\", \"life\", \"styleClass\", \"position\", \"preventOpenDuplicates\", \"preventDuplicates\", \"showTransformOptions\", \"hideTransformOptions\", \"showTransitionOptions\", \"hideTransitionOptions\", \"breakpoints\"], outputs: [\"onClose\"] }, { kind: \"pipe\", type: TranslatePipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: NotificationWrapperComponent, decorators: [{\n type: Component,\n args: [{ selector: 'mng-notification-wrapper', imports: [ConfirmDialog, TranslatePipe, Dialog, Toast], changeDetection: ChangeDetectionStrategy.OnPush, template: \"<ng-content></ng-content>\\n<p-confirmDialog appendTo=\\\"body\\\" [baseZIndex]=\\\"50\\\"></p-confirmDialog>\\n\\n<p-toast [baseZIndex]=\\\"50\\\">\\n <ng-template #message let-message>\\n <span [class]=\\\"'p-toast-message-icon pi ' + getMessageIcon(message)\\\"></span>\\n <div class=\\\"p-toast-message-text\\\">\\n <div class=\\\"p-toast-summary\\\">{{ message.summary }}</div>\\n @if (message.detail) {\\n <div class=\\\"p-toast-detail\\\">{{ message.detail.slice(0, notificationCutoff) + (message.detail.length > notificationCutoff ? '...' : '') }}</div>\\n @if (message.detail.length > notificationCutoff) {\\n <div (click)=\\\"onShowNotificationInDialog(message)\\\" class=\\\"font-semibold text-sm mt-2 flex items-center\\\">\\n <i class=\\\"pi pi-chevron-down mr-1\\\"></i>{{ 'notification.details' | translate }}\\n </div>\\n }\\n }\\n </div>\\n </ng-template>\\n</p-toast>\\n\\n<p-dialog\\n [visible]=\\\"isDialogNotificationVisible()\\\"\\n (visibleChange)=\\\"onDialogNotificationVisibilityChange($event)\\\"\\n [styleClass]=\\\"'mng-dialog mng-dialog-xs mng-message-detail-dialog mng-message-detail-dialog-' + (dialogNotification()?.severity ?? '')\\\"\\n appendTo=\\\"body\\\"\\n draggable=\\\"false\\\"\\n modal=\\\"true\\\">\\n <ng-template #header>\\n <span class=\\\"p-dialog-title font-bold mng-dialog-success\\\">\\n <span [class]=\\\"'mr-2 pi ' + dialogNotificationIconClass()\\\"></span>\\n {{ dialogNotification()?.summary ?? '' }}\\n </span>\\n </ng-template>\\n <div class=\\\"mng-notification-details\\\">\\n {{ dialogNotification()?.detail ?? '' }}\\n </div>\\n</p-dialog>\\n\", styles: [\".mng-notification-details{white-space:pre-wrap;word-wrap:break-word}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXdyYXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vY29yZS9zcmMvY29tcG9uZW50cy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLXdyYXBwZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vY29yZS9zcmMvY29tcG9uZW50cy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRW5GLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7O0FBV3BDLE1BQU0sT0FBTyw0QkFBNEI7SUFQekM7UUFRb0IsdUJBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLGdDQUEyQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxJQUFJLHVFQUFDLENBQUM7UUFDakYsdUJBQWtCLEdBQUcsTUFBTSxDQUE2QixJQUFJLDhEQUFDLENBQUM7UUFDOUQsZ0NBQTJCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsdUVBQUMsQ0FBQztLQTRCdkc7SUExQlUsY0FBYyxDQUFDLE9BQXNDO1FBQ3hELElBQUksT0FBTyxFQUFFLElBQUk7WUFBRSxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFFdkMsUUFBUSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDeEIsS0FBSyxNQUFNO2dCQUNQLE9BQU8sZ0JBQWdCLENBQUM7WUFDNUIsS0FBSyxNQUFNO2dCQUNQLE9BQU8seUJBQXlCLENBQUM7WUFDckMsS0FBSyxPQUFPO2dCQUNSLE9BQU8saUJBQWlCLENBQUM7WUFDN0IsS0FBSyxTQUFTO2dCQUNWLE9BQU8sVUFBVSxDQUFDO1lBQ3RCO2dCQUNJLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLENBQUM7SUFDTCxDQUFDO0lBRU0sMEJBQTBCLENBQUMsT0FBNEI7UUFDMUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU0sb0NBQW9DLENBQUMsT0FBZ0I7UUFDeEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0wsQ0FBQzs4R0EvQlEsNEJBQTRCO2tHQUE1Qiw0QkFBNEIsb0ZDakJ6Qyxxc0RBcUNBLGdJRHZCYyxhQUFhLHNtQkFBaUIsTUFBTSxpMEJBQUUsS0FBSyxtVEFBNUIsYUFBYTs7MkZBRzdCLDRCQUE0QjtrQkFQeEMsU0FBUzsrQkFDSSwwQkFBMEIsV0FHM0IsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsbUJBQ3JDLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBzaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVBpcGV9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtUb2FzdE1lc3NhZ2VPcHRpb25zfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0NvbmZpcm1EaWFsb2d9IGZyb20gJ3ByaW1lbmcvY29uZmlybWRpYWxvZyc7XG5pbXBvcnQge0RpYWxvZ30gZnJvbSAncHJpbWVuZy9kaWFsb2cnO1xuaW1wb3J0IHtUb2FzdH0gZnJvbSAncHJpbWVuZy90b2FzdCc7XG5cbmltcG9ydCB7TnVsbGFibGV9IGZyb20gJy4uLy4uL2hlbHBlcnMvdHlwZS1oZWxwZXJzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtbmctbm90aWZpY2F0aW9uLXdyYXBwZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnbm90aWZpY2F0aW9uLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydub3RpZmljYXRpb24td3JhcHBlci5jb21wb25lbnQuY3NzJ10sXG4gICAgaW1wb3J0czogW0NvbmZpcm1EaWFsb2csIFRyYW5zbGF0ZVBpcGUsIERpYWxvZywgVG9hc3RdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbldyYXBwZXJDb21wb25lbnQge1xuICAgIHB1YmxpYyByZWFkb25seSBub3RpZmljYXRpb25DdXRvZmYgPSA3MDtcbiAgICBwdWJsaWMgaXNEaWFsb2dOb3RpZmljYXRpb25WaXNpYmxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kaWFsb2dOb3RpZmljYXRpb24oKSAhPT0gbnVsbCk7XG4gICAgcHVibGljIGRpYWxvZ05vdGlmaWNhdGlvbiA9IHNpZ25hbDxUb2FzdE1lc3NhZ2VPcHRpb25zIHwgbnVsbD4obnVsbCk7XG4gICAgcHVibGljIGRpYWxvZ05vdGlmaWNhdGlvbkljb25DbGFzcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZ2V0TWVzc2FnZUljb24odGhpcy5kaWFsb2dOb3RpZmljYXRpb24oKSkpO1xuXG4gICAgcHVibGljIGdldE1lc3NhZ2VJY29uKG1lc3NhZ2U6IE51bGxhYmxlPFRvYXN0TWVzc2FnZU9wdGlvbnM+KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKG1lc3NhZ2U/Lmljb24pIHJldHVybiBtZXNzYWdlLmljb247XG5cbiAgICAgICAgc3dpdGNoIChtZXNzYWdlPy5zZXZlcml0eSkge1xuICAgICAgICAgICAgY2FzZSAnaW5mbyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwaS1pbmZvLWNpcmNsZSc7XG4gICAgICAgICAgICBjYXNlICd3YXJuJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJztcbiAgICAgICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BpLXRpbWVzLWNpcmNsZSc7XG4gICAgICAgICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BpLWNoZWNrJztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2hvd05vdGlmaWNhdGlvbkluRGlhbG9nKG1lc3NhZ2U6IFRvYXN0TWVzc2FnZU9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5kaWFsb2dOb3RpZmljYXRpb24uc2V0KG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRpYWxvZ05vdGlmaWNhdGlvblZpc2liaWxpdHlDaGFuZ2UodmlzaWJsZTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIXZpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nTm90aWZpY2F0aW9uLnNldChudWxsKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjxwLWNvbmZpcm1EaWFsb2cgYXBwZW5kVG89XCJib2R5XCIgW2Jhc2VaSW5kZXhdPVwiNTBcIj48L3AtY29uZmlybURpYWxvZz5cblxuPHAtdG9hc3QgW2Jhc2VaSW5kZXhdPVwiNTBcIj5cbiAgICA8bmctdGVtcGxhdGUgI21lc3NhZ2UgbGV0LW1lc3NhZ2U+XG4gICAgICAgIDxzcGFuIFtjbGFzc109XCIncC10b2FzdC1tZXNzYWdlLWljb24gcGkgJyArIGdldE1lc3NhZ2VJY29uKG1lc3NhZ2UpXCI+PC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicC10b2FzdC1tZXNzYWdlLXRleHRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLXRvYXN0LXN1bW1hcnlcIj57eyBtZXNzYWdlLnN1bW1hcnkgfX08L2Rpdj5cbiAgICAgICAgICAgIEBpZiAobWVzc2FnZS5kZXRhaWwpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC10b2FzdC1kZXRhaWxcIj57eyBtZXNzYWdlLmRldGFpbC5zbGljZSgwLCBub3RpZmljYXRpb25DdXRvZmYpICsgKG1lc3NhZ2UuZGV0YWlsLmxlbmd0aCA+IG5vdGlmaWNhdGlvbkN1dG9mZiA/ICcuLi4nIDogJycpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgQGlmIChtZXNzYWdlLmRldGFpbC5sZW5ndGggPiBub3RpZmljYXRpb25DdXRvZmYpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwib25TaG93Tm90aWZpY2F0aW9uSW5EaWFsb2cobWVzc2FnZSlcIiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1zbSBtdC0yIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWNoZXZyb24tZG93biBtci0xXCI+PC9pPnt7ICdub3RpZmljYXRpb24uZGV0YWlscycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9wLXRvYXN0PlxuXG48cC1kaWFsb2dcbiAgICBbdmlzaWJsZV09XCJpc0RpYWxvZ05vdGlmaWNhdGlvblZpc2libGUoKVwiXG4gICAgKHZpc2libGVDaGFuZ2UpPVwib25EaWFsb2dOb3RpZmljYXRpb25WaXNpYmlsaXR5Q2hhbmdlKCRldmVudClcIlxuICAgIFtzdHlsZUNsYXNzXT1cIidtbmctZGlhbG9nIG1uZy1kaWFsb2cteHMgbW5nLW1lc3NhZ2UtZGV0YWlsLWRpYWxvZyBtbmctbWVzc2FnZS1kZXRhaWwtZGlhbG9nLScgKyAoZGlhbG9nTm90aWZpY2F0aW9uKCk/LnNldmVyaXR5ID8/ICcnKVwiXG4gICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICBkcmFnZ2FibGU9XCJmYWxzZVwiXG4gICAgbW9kYWw9XCJ0cnVlXCI+XG4gICAgPG5nLXRlbXBsYXRlICNoZWFkZXI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicC1kaWFsb2ctdGl0bGUgZm9udC1ib2xkIG1uZy1kaWFsb2ctc3VjY2Vzc1wiPlxuICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIidtci0yIHBpICcgKyBkaWFsb2dOb3RpZmljYXRpb25JY29uQ2xhc3MoKVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIHt7IGRpYWxvZ05vdGlmaWNhdGlvbigpPy5zdW1tYXJ5ID8/ICcnIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJtbmctbm90aWZpY2F0aW9uLWRldGFpbHNcIj5cbiAgICAgICAge3sgZGlhbG9nTm90aWZpY2F0aW9uKCk/LmRldGFpbCA/PyAnJyB9fVxuICAgIDwvZGl2PlxuPC9wLWRpYWxvZz5cbiJdfQ==","export class ACommonsErrorBase extends Error {\n constructor(message, options) {\n super(message);\n this.name = options?.name ?? 'MngError';\n this.messageCode = options?.messageCode;\n this.location = options?.location ?? window?.location?.href;\n this.cause = options?.cause;\n this.stack = options?.stack ?? (options?.cause ? options.cause.stack : new Error(message).stack);\n this.details = options?.details;\n this.notification = options?.notification;\n }\n}\nexport class CommonsInternalError extends ACommonsErrorBase {\n constructor(message, options) {\n super(message, {\n name: 'CommonsInternalError',\n ...options\n });\n this.type = 'CommonsInternalError';\n }\n}\nexport class CommonsHttpError extends ACommonsErrorBase {\n constructor(message, httpError, options) {\n super(message, {\n name: 'CommonsHttpError_' + httpError.url,\n cause: httpError,\n ...options\n });\n this.type = 'CommonsHttpError';\n this.httpError = httpError;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9lcnJvci9lcnJvci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQ0EsTUFBTSxPQUFnQixpQkFBa0IsU0FBUSxLQUFLO0lBU2pELFlBQXNCLE9BQWUsRUFBRSxPQUFpQztRQUNwRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sRUFBRSxJQUFJLElBQUksVUFBVSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxFQUFFLFdBQVcsQ0FBQztRQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sRUFBRSxRQUFRLElBQUksTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUM7UUFDNUQsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLEVBQUUsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxFQUFFLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sRUFBRSxPQUFPLENBQUM7UUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLEVBQUUsWUFBWSxDQUFDO0lBQzlDLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxpQkFBaUI7SUFHdkQsWUFBWSxPQUFlLEVBQUUsT0FBaUM7UUFDMUQsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUNYLElBQUksRUFBRSxzQkFBc0I7WUFDNUIsR0FBRyxPQUFPO1NBQ2IsQ0FBQyxDQUFDO1FBTlMsU0FBSSxHQUFHLHNCQUFzQixDQUFDO0lBTzlDLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxpQkFBaUI7SUFLbkQsWUFBWSxPQUFlLEVBQUUsU0FBNEIsRUFBRSxPQUFpQztRQUN4RixLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ1gsSUFBSSxFQUFFLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxHQUFHO1lBQ3pDLEtBQUssRUFBRSxTQUFTO1lBQ2hCLEdBQUcsT0FBTztTQUNiLENBQUMsQ0FBQztRQVRTLFNBQUksR0FBRyxrQkFBa0IsQ0FBQztRQVV0QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUMvQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBFcnJvclJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7VG9hc3RNZXNzYWdlT3B0aW9uc30gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5pbXBvcnQge0FjdGlvblBhcmFtZXRlcnN9IGZyb20gJy4uL2FjdGlvbi9hY3Rpb24tcGFyYW1ldGVycy5tb2RlbCc7XG5cbmV4cG9ydCB0eXBlIEVycm9yVHlwZXMgPSAnQ29tbW9uc0ludGVybmFsRXJyb3InIHwgJ0NvbW1vbnNBY3Rpb25FcnJvcicgfCAnQ29tbW9uc0h0dHBFcnJvcic7XG5cbi8qKlxuICogTWFpbiB1c2UgZm9yIGNvbW1vbnMgZXJyb3IgZnJvbSBhY3Rpb24gZXhlY3V0aW9uLlxuICogSWYgaHR0cCBlcnJvciBpcyB0aHJvd24sIGFkZCBpdCBpbiBjYXVzZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29tbW9uc0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIHR5cGU6IEVycm9yVHlwZXM7XG4gICAgbWVzc2FnZUNvZGU/OiBudW1iZXIgfCBzdHJpbmc7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIGRldGFpbHM/OiBhbnk7XG4gICAgc3RhY2s/OiBzdHJpbmc7XG4gICAgY2F1c2U/OiBFcnJvciB8IHVua25vd247XG4gICAgbm90aWZpY2F0aW9uPzogVG9hc3RNZXNzYWdlT3B0aW9ucztcbiAgICBub3RpZmljYXRpb25FbWl0U291cmNlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbnNFcnJvckJhc2VPcHRpb25zIHtcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIG1lc3NhZ2VDb2RlPzogbnVtYmVyIHwgc3RyaW5nO1xuICAgIGRldGFpbHM/OiBhbnk7XG4gICAgY2F1c2U/OiBFcnJvcjtcbiAgICBzdGFjaz86IHN0cmluZztcbiAgICBsb2NhdGlvbj86IHN0cmluZztcbiAgICBub3RpZmljYXRpb24/OiBUb2FzdE1lc3NhZ2VPcHRpb25zO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQUNvbW1vbnNFcnJvckJhc2UgZXh0ZW5kcyBFcnJvciBpbXBsZW1lbnRzIElDb21tb25zRXJyb3Ige1xuICAgIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB0eXBlOiBFcnJvclR5cGVzO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IG1lc3NhZ2VDb2RlPzogbnVtYmVyIHwgc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSBsb2NhdGlvbj86IHN0cmluZztcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGV0YWlscz86IGFueTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbm90aWZpY2F0aW9uPzogVG9hc3RNZXNzYWdlT3B0aW9ucztcbiAgICBwdWJsaWMgcmVhZG9ubHkgbm90aWZpY2F0aW9uRW1pdFNvdXJjZT86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIG9wdGlvbnM/OiBDb21tb25zRXJyb3JCYXNlT3B0aW9ucykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcblxuICAgICAgICB0aGlzLm5hbWUgPSBvcHRpb25zPy5uYW1lID8/ICdNbmdFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZUNvZGUgPSBvcHRpb25zPy5tZXNzYWdlQ29kZTtcbiAgICAgICAgdGhpcy5sb2NhdGlvbiA9IG9wdGlvbnM/LmxvY2F0aW9uID8/IHdpbmRvdz8ubG9jYXRpb24/LmhyZWY7XG4gICAgICAgIHRoaXMuY2F1c2UgPSBvcHRpb25zPy5jYXVzZTtcbiAgICAgICAgdGhpcy5zdGFjayA9IG9wdGlvbnM/LnN0YWNrID8/IChvcHRpb25zPy5jYXVzZSA/IG9wdGlvbnMuY2F1c2Uuc3RhY2sgOiBuZXcgRXJyb3IobWVzc2FnZSkuc3RhY2spO1xuICAgICAgICB0aGlzLmRldGFpbHMgPSBvcHRpb25zPy5kZXRhaWxzO1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IG9wdGlvbnM/Lm5vdGlmaWNhdGlvbjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tb25zSW50ZXJuYWxFcnJvciBleHRlbmRzIEFDb21tb25zRXJyb3JCYXNlIGltcGxlbWVudHMgSUNvbW1vbnNFcnJvciB7XG4gICAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSAnQ29tbW9uc0ludGVybmFsRXJyb3InO1xuXG4gICAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBvcHRpb25zPzogQ29tbW9uc0Vycm9yQmFzZU9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSwge1xuICAgICAgICAgICAgbmFtZTogJ0NvbW1vbnNJbnRlcm5hbEVycm9yJyxcbiAgICAgICAgICAgIC4uLm9wdGlvbnNcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tbW9uc0h0dHBFcnJvciBleHRlbmRzIEFDb21tb25zRXJyb3JCYXNlIGltcGxlbWVudHMgSUNvbW1vbnNFcnJvciB7XG4gICAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSAnQ29tbW9uc0h0dHBFcnJvcic7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgaHR0cEVycm9yOiBIdHRwRXJyb3JSZXNwb25zZTtcblxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgaHR0cEVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSwgb3B0aW9ucz86IENvbW1vbnNFcnJvckJhc2VPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UsIHtcbiAgICAgICAgICAgIG5hbWU6ICdDb21tb25zSHR0cEVycm9yXycgKyBodHRwRXJyb3IudXJsLFxuICAgICAgICAgICAgY2F1c2U6IGh0dHBFcnJvcixcbiAgICAgICAgICAgIC4uLm9wdGlvbnNcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaHR0cEVycm9yID0gaHR0cEVycm9yO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29tbW9uc0FjdGlvbkVycm9yIGV4dGVuZHMgSUNvbW1vbnNFcnJvciB7XG4gICAgdHlwZTogJ0NvbW1vbnNBY3Rpb25FcnJvcic7XG4gICAgaHR0cEVycm9yPzogSHR0cEVycm9yUmVzcG9uc2U7XG4gICAgYWN0aW9uQ29udGV4dD86IElDb21tb25zQWN0aW9uRXJyb3JDb250ZXh0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb21tb25zQWN0aW9uRXJyb3JDb250ZXh0IHtcbiAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPGFueT47XG59XG4iXX0=","const ngPrimerFormatSupported = [/d{1,2}/g, /E{1,5}/g, /c{1,5}/g, /M{1,5}/g, /L{1,5}/g, /y{1,4}/g, /Y{1,4}/g];\nconst ngPrimeFormatOther = [/G{1,5}/g, /w{1,2}/g, /W/g, /a{1,5}/g, /B{1,5}/g, /b{1,5}/g, /h{1,2}/g, /H{1,2}/g, /m{1,2}/g, /s{1,2}/g, /S{1,3}/g, /z{1,4}/g, /Z{1,5}/g, /O{1,4}/g];\nconst ngPrimerFormatMap = {\n // days\n d: 'd',\n dd: 'dd',\n E: 'D',\n EE: 'D',\n EEE: 'D',\n EEEE: 'DD',\n EEEEE: 'D',\n EEEEEE: 'D',\n c: 'd',\n cc: 'dd',\n ccc: 'D',\n cccc: 'DD',\n ccccc: 'D',\n cccccc: 'D',\n // months\n M: 'm',\n MM: 'mm',\n MMM: 'M',\n MMMM: 'MM',\n MMMMM: 'M',\n L: 'm',\n LL: 'mm',\n LLL: 'M',\n LLLL: 'MM',\n LLLLL: 'M',\n // year\n y: 'y',\n yy: 'y',\n yyy: 'yy',\n yyyy: 'yy',\n Y: 'y',\n YY: 'y',\n YYY: 'yy',\n YYYY: 'yy'\n};\nfunction padNumber(num, size = 2) {\n let str = String(num);\n while (str.length < size) {\n str = '0' + str;\n }\n return str;\n}\nexport function dateToIsoString(value, type = 'date-time', dateTimeOpts = {}) {\n if (typeof value === 'string') {\n value = new Date(value);\n }\n if (typeof value === 'number') {\n value = new Date(value);\n }\n if (!(value instanceof Date)) {\n return null;\n }\n if (type === 'date') {\n // date only, no time part (and timezone, millis, utc does not matter ...)\n return value.getFullYear() + '-' + padNumber(value.getMonth() + 1) + '-' + padNumber(value.getDate());\n }\n if (dateTimeOpts.utc) {\n let str = value.toISOString();\n if (dateTimeOpts.noMillis) {\n const dotIdx = str.lastIndexOf('.');\n str = str.substring(0, dotIdx) + str.substring(dotIdx + 4, str.length);\n }\n if (dateTimeOpts.noTimezone) {\n str = str.substring(0, str.length - 1);\n }\n return str;\n }\n else {\n let base = value.getFullYear() +\n '-' +\n padNumber(value.getMonth() + 1) +\n '-' +\n padNumber(value.getDate()) +\n 'T' +\n padNumber(value.getHours()) +\n ':' +\n padNumber(value.getMinutes()) +\n ':' +\n padNumber(value.getSeconds());\n if (!dateTimeOpts.noMillis) {\n base += '.' + padNumber(value.getMilliseconds(), 3);\n }\n if (!dateTimeOpts.noTimezone) {\n const tzo = -value.getTimezoneOffset(), dif = tzo >= 0 ? '+' : '-';\n base = base + (dif + padNumber(Math.floor(Math.abs(tzo) / 60)) + ':' + padNumber(Math.abs(tzo) % 60));\n }\n return base;\n }\n}\nexport function fromAngularDateFormatToPrime(ngDateFormat) {\n let primeDateFormat = ngDateFormat;\n for (const regex of ngPrimeFormatOther) {\n primeDateFormat = primeDateFormat.replace(regex, ' ');\n }\n for (const regex of ngPrimerFormatSupported) {\n const matches = [...primeDateFormat.matchAll(regex)].reverse();\n for (const match of matches) {\n if (match.index) {\n const matchStr = match[0];\n const replacement = ngPrimerFormatMap[matchStr] ?? match[0];\n primeDateFormat = primeDateFormat.substring(0, match.index) + replacement + primeDateFormat.substring(match.index + matchStr.length);\n }\n }\n }\n primeDateFormat = primeDateFormat.replace(/\\s+\\W\\s+/g, ' ');\n primeDateFormat = primeDateFormat.replace(/\\s\\s+/g, ' ');\n return primeDateFormat.trim();\n}\nexport function angularDateFormatHasTime(ngDateFormat) {\n return /[hHmsS]/.test(ngDateFormat);\n}\nexport function angularDateFormatHasSeconds(ngDateFormat) {\n return /[sS]/.test(ngDateFormat);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL2hlbHBlcnMvZGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLHVCQUF1QixHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDOUcsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNqTCxNQUFNLGlCQUFpQixHQUFHO0lBQ3RCLE9BQU87SUFDUCxDQUFDLEVBQUUsR0FBRztJQUNOLEVBQUUsRUFBRSxJQUFJO0lBQ1IsQ0FBQyxFQUFFLEdBQUc7SUFDTixFQUFFLEVBQUUsR0FBRztJQUNQLEdBQUcsRUFBRSxHQUFHO0lBQ1IsSUFBSSxFQUFFLElBQUk7SUFDVixLQUFLLEVBQUUsR0FBRztJQUNWLE1BQU0sRUFBRSxHQUFHO0lBQ1gsQ0FBQyxFQUFFLEdBQUc7SUFDTixFQUFFLEVBQUUsSUFBSTtJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsSUFBSSxFQUFFLElBQUk7SUFDVixLQUFLLEVBQUUsR0FBRztJQUNWLE1BQU0sRUFBRSxHQUFHO0lBQ1gsU0FBUztJQUNULENBQUMsRUFBRSxHQUFHO0lBQ04sRUFBRSxFQUFFLElBQUk7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLElBQUksRUFBRSxJQUFJO0lBQ1YsS0FBSyxFQUFFLEdBQUc7SUFDVixDQUFDLEVBQUUsR0FBRztJQUNOLEVBQUUsRUFBRSxJQUFJO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixJQUFJLEVBQUUsSUFBSTtJ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QUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxRQUF3QixDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1RSxlQUFlLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLFdBQVcsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pJLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUNELGVBQWUsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM1RCxlQUFlLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFekQsT0FBTyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbEMsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxZQUFvQjtJQUN6RCxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxZQUFvQjtJQUM1RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDckMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIHRvSXNvU3RyaW5nVHlwZU9wdFR5cGUgPSAnZGF0ZScgfCAnZGF0ZS10aW1lJyB8ICdkYXRlVGltZSc7XG5leHBvcnQgdHlwZSB0b0lzb1N0cmluZ0RhdGVUaW1lT3B0c1R5cGUgPSB7dXRjPzogYm9vbGVhbjsgbm9UaW1lem9uZT86IGJvb2xlYW47IG5vTWlsbGlzPzogYm9vbGVhbn07XG5cbmNvbnN0IG5nUHJpbWVyRm9ybWF0U3VwcG9ydGVkID0gWy9kezEsMn0vZywgL0V7MSw1fS9nLCAvY3sxLDV9L2csIC9NezEsNX0vZywgL0x7MSw1fS9nLCAveXsxLDR9L2csIC9ZezEsNH0vZ107XG5jb25zdCBuZ1ByaW1lRm9ybWF0T3RoZXIgPSBbL0d7MSw1fS9nLCAvd3sxLDJ9L2csIC9XL2csIC9hezEsNX0vZywgL0J7MSw1fS9nLCAvYnsxLDV9L2csIC9oezEsMn0vZywgL0h7MSwyfS9nLCAvbXsxLDJ9L2csIC9zezEsMn0vZywgL1N7MSwzfS9nLCAvensxLDR9L2csIC9aezEsNX0vZywgL097MSw0fS9nXTtcbmNvbnN0IG5nUHJpbWVyRm9ybWF0TWFwID0ge1xuICAgIC8vIGRheXNcbiAgICBkOiAnZCcsXG4gICAgZGQ6ICdkZCcsXG4gICAgRTogJ0QnLFxuICAgIEVFOiAnRCcsXG4gICAgRUVFOiAnRCcsXG4gICAgRUVFRTogJ0REJyxcbiAgICBFRUVFRTogJ0QnLFxuICAgIEVFRUVFRTogJ0QnLFxuICAgIGM6ICdkJyxcbiAgICBjYzogJ2RkJyxcbiAgICBjY2M6ICdEJyxcbiAgICBjY2NjOiAnREQnLFxuICAgIGNjY2NjOiAnRCcsXG4gICAgY2NjY2NjOiAnRCcsXG4gICAgLy8gbW9udGhzXG4gICAgTTogJ20nLFxuICAgIE1NOiAnbW0nLFxuICAgIE1NTTogJ00nLFxuICAgIE1NTU06ICdNTScsXG4gICAgTU1NTU06ICdNJyxcbiAgICBMOiAnbScsXG4gICAgTEw6ICdtbScsXG4gICAgTExMOiAnTScsXG4gICAgTExMTDogJ01NJyxcbiAgICBMTExMTDogJ00nLFxuICAgIC8vIHllYXJcbiAgICB5OiAneScsXG4gICAgeXk6ICd5JyxcbiAgICB5eXk6ICd5eScsXG4gICAgeXl5eTogJ3l5JyxcbiAgICBZOiAneScsXG4gICAgWVk6ICd5JyxcbiAgICBZWVk6ICd5eScsXG4gICAgWVlZWTogJ3l5J1xufTtcblxuZnVuY3Rpb24gcGFkTnVtYmVyKG51bTogbnVtYmVyLCBzaXplID0gMikge1xuICAgIGxldCBzdHIgPSBTdHJpbmcobnVtKTtcbiAgICB3aGlsZSAoc3RyLmxlbmd0aCA8IHNpemUpIHtcbiAgICAgICAgc3RyID0gJzAnICsgc3RyO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGF0ZVRvSXNvU3RyaW5nKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlLCB0eXBlPzogJ2RhdGUnKTogc3RyaW5nO1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGVUb0lzb1N0cmluZyh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSwgdHlwZTogJ2RhdGUtdGltZScgfCAnZGF0ZVRpbWUnLCBkYXRlVGltZU9wdHM/OiB0b0lzb1N0cmluZ0RhdGVUaW1lT3B0c1R5cGUpOiBzdHJpbmc7XG5leHBvcnQgZnVuY3Rpb24gZGF0ZVRvSXNvU3RyaW5nKHZhbHVlOiB1bmRlZmluZWQgfCBudWxsIHwgdW5rbm93biwgdHlwZT86ICdkYXRlJyk6IG51bGw7XG5leHBvcnQgZnVuY3Rpb24gZGF0ZVRvSXNvU3RyaW5nKHZhbHVlOiB1bmRlZmluZWQgfCBudWxsIHwgdW5rbm93biwgdHlwZTogJ2RhdGUtdGltZScgfCAnZGF0ZVRpbWUnLCBkYXRlVGltZU9wdHM/OiB0b0lzb1N0cmluZ0RhdGVUaW1lT3B0c1R5cGUpOiBudWxsO1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGVUb0lzb1N0cmluZyh2YWx1ZTogdW5rbm93biwgdHlwZT86IHRvSXNvU3RyaW5nVHlwZU9wdFR5cGUsIGRhdGVUaW1lT3B0cz86IHRvSXNvU3RyaW5nRGF0ZVRpbWVPcHRzVHlwZSk6IHN0cmluZyB8IG51bGw7XG5leHBvcnQgZnVuY3Rpb24gZGF0ZVRvSXNvU3RyaW5nKHZhbHVlOiB1bmtub3duLCB0eXBlOiB0b0lzb1N0cmluZ1R5cGVPcHRUeXBlID0gJ2RhdGUtdGltZScsIGRhdGVUaW1lT3B0czogdG9Jc29TdHJpbmdEYXRlVGltZU9wdHNUeXBlID0ge30pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgfVxuICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgLy8gZGF0ZSBvbmx5LCBubyB0aW1lIHBhcnQgKGFuZCB0aW1lem9uZSwgbWlsbGlzLCB1dGMgZG9lcyBub3QgbWF0dGVyIC4uLilcbiAgICAgICAgcmV0dXJuIHZhbHVlLmdldEZ1bGxZZWFyKCkgKyAnLScgKyBwYWROdW1iZXIodmFsdWUuZ2V0TW9udGgoKSArIDEpICsgJy0nICsgcGFkTnVtYmVyKHZhbHVlLmdldERhdGUoKSk7XG4gICAgfVxuICAgIGlmIChkYXRlVGltZU9wdHMudXRjKSB7XG4gICAgICAgIGxldCBzdHIgPSB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgICAgICBpZiAoZGF0ZVRpbWVPcHRzLm5vTWlsbGlzKSB7XG4gICAgICAgICAgICBjb25zdCBkb3RJZHggPSBzdHIubGFzdEluZGV4T2YoJy4nKTtcbiAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgZG90SWR4KSArIHN0ci5zdWJzdHJpbmcoZG90SWR4ICsgNCwgc3RyLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGVUaW1lT3B0cy5ub1RpbWV6b25lKSB7XG4gICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIHN0ci5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBiYXNlID1cbiAgICAgICAgICAgIHZhbHVlLmdldEZ1bGxZZWFyKCkgK1xuICAgICAgICAgICAgJy0nICtcbiAgICAgICAgICAgIHBhZE51bWJlcih2YWx1ZS5nZXRNb250aCgpICsgMSkgK1xuICAgICAgICAgICAgJy0nICtcbiAgICAgICAgICAgIHBhZE51bWJlcih2YWx1ZS5nZXREYXRlKCkpICtcbiAgICAgICAgICAgICdUJyArXG4gICAgICAgICAgICBwYWROdW1iZXIodmFsdWUuZ2V0SG91cnMoKSkgK1xuICAgICAgICAgICAgJzonICtcbiAgICAgICAgICAgIHBhZE51bWJlcih2YWx1ZS5nZXRNaW51dGVzKCkpICtcbiAgICAgICAgICAgICc6JyArXG4gICAgICAgICAgICBwYWROdW1iZXIodmFsdWUuZ2V0U2Vjb25kcygpKTtcblxuICAgICAgICBpZiAoIWRhdGVUaW1lT3B0cy5ub01pbGxpcykge1xuICAgICAgICAgICAgYmFzZSArPSAnLicgKyBwYWROdW1iZXIodmFsdWUuZ2V0TWlsbGlzZWNvbmRzKCksIDMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGF0ZVRpbWVPcHRzLm5vVGltZXpvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHR6byA9IC12YWx1ZS5nZXRUaW1lem9uZU9mZnNldCgpLFxuICAgICAgICAgICAgICAgIGRpZiA9IHR6byA+PSAwID8gJysnIDogJy0nO1xuXG4gICAgICAgICAgICBiYXNlID0gYmFzZSArIChkaWYgKyBwYWROdW1iZXIoTWF0aC5mbG9vcihNYXRoLmFicyh0em8pIC8gNjApKSArICc6JyArIHBhZE51bWJlcihNYXRoLmFicyh0em8pICUgNjApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBiYXNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Bbmd1bGFyRGF0ZUZvcm1hdFRvUHJpbWUobmdEYXRlRm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBwcmltZURhdGVGb3JtYXQgPSBuZ0RhdGVGb3JtYXQ7XG4gICAgZm9yIChjb25zdCByZWdleCBvZiBuZ1ByaW1lRm9ybWF0T3RoZXIpIHtcbiAgICAgICAgcHJpbWVEYXRlRm9ybWF0ID0gcHJpbWVEYXRlRm9ybWF0LnJlcGxhY2UocmVnZXgsICcgJyk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcmVnZXggb2YgbmdQcmltZXJGb3JtYXRTdXBwb3J0ZWQpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IFsuLi5wcmltZURhdGVGb3JtYXQubWF0Y2hBbGwocmVnZXgpXS5yZXZlcnNlKCk7XG4gICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgbWF0Y2hlcykge1xuICAgICAgICAgICAgaWYgKG1hdGNoLmluZGV4KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hTdHIgPSBtYXRjaFswXTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXBsYWNlbWVudCA9IG5nUHJpbWVyRm9ybWF0TWFwW21hdGNoU3RyIGFzIGtleW9mIG9iamVjdF0gPz8gbWF0Y2hbMF07XG4gICAgICAgICAgICAgICAgcHJpbWVEYXRlRm9ybWF0ID0gcHJpbWVEYXRlRm9ybWF0LnN1YnN0cmluZygwLCBtYXRjaC5pbmRleCkgKyByZXBsYWNlbWVudCArIHByaW1lRGF0ZUZvcm1hdC5zdWJzdHJpbmcobWF0Y2guaW5kZXggKyBtYXRjaFN0ci5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHByaW1lRGF0ZUZvcm1hdCA9IHByaW1lRGF0ZUZvcm1hdC5yZXBsYWNlKC9cXHMrXFxXXFxzKy9nLCAnICcpO1xuICAgIHByaW1lRGF0ZUZvcm1hdCA9IHByaW1lRGF0ZUZvcm1hdC5yZXBsYWNlKC9cXHNcXHMrL2csICcgJyk7XG5cbiAgICByZXR1cm4gcHJpbWVEYXRlRm9ybWF0LnRyaW0oKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFuZ3VsYXJEYXRlRm9ybWF0SGFzVGltZShuZ0RhdGVGb3JtYXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvW2hIbXNTXS8udGVzdChuZ0RhdGVGb3JtYXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5ndWxhckRhdGVGb3JtYXRIYXNTZWNvbmRzKG5nRGF0ZUZvcm1hdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9bc1NdLy50ZXN0KG5nRGF0ZUZvcm1hdCk7XG59XG4iXX0=","export class FilterMatchMode {\n static { this.Equals = 'equals'; }\n static { this.EqualsAbbr = 'eq'; }\n static { this.NotEquals = 'notEquals'; }\n static { this.NotEqualsAbbr = 'ne'; }\n static { this.Contains = 'contains'; }\n static { this.ContainsAbbr = 'cn'; }\n static { this.NotContains = 'notContains'; }\n static { this.NotContainsAbbr = 'nc'; }\n static { this.In = 'in'; }\n static { this.InAbbr = 'in'; }\n static { this.NotIn = 'notIn'; }\n static { this.NotInAbbr = 'ni'; }\n static { this.StartsWith = 'startsWith'; }\n static { this.StartsWithAbbr = 'sw'; }\n static { this.EndsWith = 'endsWith'; }\n static { this.EndsWithAbbr = 'ew'; }\n static { this.LessThan = 'lessThan'; }\n static { this.LessThanAbbr = 'lt'; }\n static { this.LessThanOrEqualTo = 'lessThanOrEqualTo'; }\n static { this.LessThanOrEqualToAbbr = 'le'; }\n static { this.GreaterThan = 'greaterThan'; }\n static { this.GreaterThanAbbr = 'gt'; }\n static { this.GreaterThanOrEqualTo = 'greaterThanOrEqualTo'; }\n static { this.GreaterThanOrEqualToAbbr = 'ge'; }\n static { this.Between = 'between'; }\n static { this.BetweenAbbr = 'bt'; }\n static { this.Exists = 'exists'; }\n static { this.ExistsAbbr = 'ex'; }\n static { this.DoesNotExist = 'doesNotExist'; }\n static { this.DoesNotExistAbbr = 'nx'; }\n static getAbbreviation(mode) {\n switch (mode) {\n case FilterMatchMode.Equals:\n return FilterMatchMode.EqualsAbbr;\n case FilterMatchMode.NotEquals:\n return FilterMatchMode.NotEqualsAbbr;\n case FilterMatchMode.Contains:\n return FilterMatchMode.ContainsAbbr;\n case FilterMatchMode.NotContains:\n return FilterMatchMode.NotContainsAbbr;\n case FilterMatchMode.In:\n return FilterMatchMode.InAbbr;\n case FilterMatchMode.NotIn:\n return FilterMatchMode.NotInAbbr;\n case FilterMatchMode.StartsWith:\n return FilterMatchMode.StartsWithAbbr;\n case FilterMatchMode.EndsWith:\n return FilterMatchMode.EndsWithAbbr;\n case FilterMatchMode.LessThan:\n return FilterMatchMode.LessThanAbbr;\n case FilterMatchMode.LessThanOrEqualTo:\n return FilterMatchMode.LessThanOrEqualToAbbr;\n case FilterMatchMode.GreaterThan:\n return FilterMatchMode.GreaterThanAbbr;\n case FilterMatchMode.GreaterThanOrEqualTo:\n return FilterMatchMode.GreaterThanOrEqualToAbbr;\n case FilterMatchMode.Between:\n return FilterMatchMode.BetweenAbbr;\n case FilterMatchMode.Exists:\n return FilterMatchMode.ExistsAbbr;\n case FilterMatchMode.DoesNotExist:\n return FilterMatchMode.DoesNotExistAbbr;\n default:\n return null;\n }\n }\n static fromAbbreviation(abbr) {\n switch (abbr) {\n case FilterMatchMode.EqualsAbbr:\n return FilterMatchMode.Equals;\n case FilterMatchMode.NotEqualsAbbr:\n return FilterMatchMode.NotEquals;\n case FilterMatchMode.ContainsAbbr:\n return FilterMatchMode.Contains;\n case FilterMatchMode.NotContainsAbbr:\n return FilterMatchMode.NotContains;\n case FilterMatchMode.InAbbr:\n return FilterMatchMode.In;\n case FilterMatchMode.NotInAbbr:\n return FilterMatchMode.NotIn;\n case FilterMatchMode.StartsWithAbbr:\n return FilterMatchMode.StartsWith;\n case FilterMatchMode.EndsWithAbbr:\n return FilterMatchMode.EndsWith;\n case FilterMatchMode.LessThanAbbr:\n return FilterMatchMode.LessThan;\n case FilterMatchMode.LessThanOrEqualToAbbr:\n return FilterMatchMode.LessThanOrEqualTo;\n case FilterMatchMode.GreaterThanAbbr:\n return FilterMatchMode.GreaterThan;\n case FilterMatchMode.GreaterThanOrEqualToAbbr:\n return FilterMatchMode.GreaterThanOrEqualTo;\n case FilterMatchMode.BetweenAbbr:\n return FilterMatchMode.Between;\n case FilterMatchMode.ExistsAbbr:\n return FilterMatchMode.Exists;\n case FilterMatchMode.DoesNotExistAbbr:\n return FilterMatchMode.DoesNotExist;\n default:\n return null;\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLW1hdGNoLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvZGF0YS1saXN0L2ZpbHRlci1tYXRjaC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsTUFBTSxPQUFPLGVBQWU7YUFDVixXQUFNLEdBQXdCLFFBQVEsQ0FBQzthQUN2QyxlQUFVLEdBQUcsSUFBSSxDQUFDO2FBRWxCLGNBQVMsR0FBd0IsV0FBVyxDQUFDO2FBQzdDLGtCQUFhLEdBQUcsSUFBSSxDQUFDO2FBRXJCLGFBQVEsR0FBd0IsVUFBVSxDQUFDO2FBQzNDLGlCQUFZLEdBQUcsSUFBSSxDQUFDO2FBRXBCLGdCQUFXLEdBQXdCLGFBQWEsQ0FBQzthQUNqRCxvQkFBZSxHQUFHLElBQUksQ0FBQzthQUV2QixPQUFFLEdBQXdCLElBQUksQ0FBQzthQUMvQixXQUFNLEdBQUcsSUFBSSxDQUFDO2FBRWQsVUFBSyxHQUF3QixPQUFPLENBQUM7YUFDckMsY0FBUyxHQUFHLElBQUksQ0FBQzthQUVqQixlQUFVLEdBQXdCLFlBQVksQ0FBQzthQUMvQyxtQkFBYyxHQUFHLElBQUksQ0FBQzthQUV0QixhQUFRLEdBQXdCLFVBQVUsQ0FBQzthQUMzQyxpQkFBWSxHQUFHLElBQUksQ0FBQzthQUVwQixhQUFRLEdBQXdCLFVBQVUsQ0FBQzthQUMzQyxpQkFBWSxHQUFHLElBQUksQ0FBQzthQUVwQixzQkFBaUIsR0FBd0IsbUJBQW1CLENBQUM7YUFDN0QsMEJBQXFCLEdBQUcsSUFBSSxDQUFDO2FBRTdCLGdCQUFXLEdBQXdCLGFBQWEsQ0FBQzthQUNqRCxvQkFBZSxHQUFHLElBQUksQ0FBQzthQUV2Qix5QkFBb0IsR0FBd0Isc0JBQXNCLENBQUM7YUFDbkUsNkJBQXdCLEdBQUcsSUFBSSxDQUFDO2FBRWhDLFlBQU8sR0FBd0IsU0FBUyxDQUFDO2FBQ3pDLGdCQUFXLEdBQUcsSUFBSSxDQUFDO2FBRW5CLFdBQU0sR0FBd0IsUUFB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Z0JBQ3pDLE9BQU8sZUFBZSxDQUFDLG9CQUFvQixDQUFDO1lBQ2hELEtBQUssZUFBZSxDQUFDLFdBQVc7Z0JBQzVCLE9BQU8sZUFBZSxDQUFDLE9BQU8sQ0FBQztZQUNuQyxLQUFLLGVBQWUsQ0FBQyxVQUFVO2dCQUMzQixPQUFPLGVBQWUsQ0FBQyxNQUFNLENBQUM7WUFDbEMsS0FBSyxlQUFlLENBQUMsZ0JBQWdCO2dCQUNqQyxPQUFPLGVBQWUsQ0FBQyxZQUFZLENBQUM7WUFDeEM7Z0JBQ0ksT0FBTyxJQUFJLENBQUM7UUFDcEIsQ0FBQztJQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBGaWx0ZXJNYXRjaE1vZGVUeXBlID1cbiAgICB8ICdlcXVhbHMnXG4gICAgfCAnbm90RXF1YWxzJ1xuICAgIHwgJ2NvbnRhaW5zJ1xuICAgIHwgJ25vdENvbnRhaW5zJ1xuICAgIHwgJ2luJ1xuICAgIHwgJ25vdEluJ1xuICAgIHwgJ3N0YXJ0c1dpdGgnXG4gICAgfCAnZW5kc1dpdGgnXG4gICAgfCAnbGVzc1RoYW4nXG4gICAgfCAnbGVzc1RoYW5PckVxdWFsVG8nXG4gICAgfCAnZ3JlYXRlclRoYW4nXG4gICAgfCAnZ3JlYXRlclRoYW5PckVxdWFsVG8nXG4gICAgfCAnYmV0d2VlbidcbiAgICB8ICdleGlzdHMnXG4gICAgfCAnZG9lc05vdEV4aXN0JztcbmV4cG9ydCB0eXBlIEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZSA9IEZpbHRlck1hdGNoTW9kZVR5cGUgfCBzdHJpbmc7XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJNYXRjaE1vZGUge1xuICAgIHB1YmxpYyBzdGF0aWMgRXF1YWxzOiBGaWx0ZXJNYXRjaE1vZGVUeXBlID0gJ2VxdWFscyc7XG4gICAgcHVibGljIHN0YXRpYyBFcXVhbHNBYmJyID0gJ2VxJztcblxuICAgIHB1YmxpYyBzdGF0aWMgTm90RXF1YWxzOiBGaWx0ZXJNYXRjaE1vZGVUeXBlID0gJ25vdEVxdWFscyc7XG4gICAgcHVibGljIHN0YXRpYyBOb3RFcXVhbHNBYmJyID0gJ25lJztcblxuICAgIHB1YmxpYyBzdGF0aWMgQ29udGFpbnM6IEZpbHRlck1hdGNoTW9kZVR5cGUgPSAnY29udGFpbnMnO1xuICAgIHB1YmxpYyBzdGF0aWMgQ29udGFpbnNBYmJyID0gJ2NuJztcblxuICAgIHB1YmxpYyBzdGF0aWMgTm90Q29udGFpbnM6IEZpbHRlck1hdGNoTW9kZVR5cGUgPSAnbm90Q29udGFpbnMnO1xuICAgIHB1YmxpYyBzdGF0aWMgTm90Q29udGFpbnNBYmJyID0gJ25jJztcblxuICAgIHB1YmxpYyBzdGF0aWMgSW46IEZpbHRlck1hdGNoTW9kZVR5cGUgPSAnaW4nO1xuICAgIHB1YmxpYyBzdGF0aWMgSW5BYmJyID0gJ2luJztcblxuICAgIHB1YmxpYyBzdGF0aWMgTm90SW46IEZpbHRlck1hdGNoTW9kZVR5cGUgPSAnbm90SW4nO1xuICAgIHB1YmxpYyBzdGF0aWMgTm90SW5BYmJyID0gJ25pJztcblxuICAgIHB1YmxpYyBzdGF0aWMgU3RhcnRzV2l0aDogRmlsdGVyTWF0Y2hNb2RlVHlwZSA9ICdzdGFydHNXaXRoJztcbiAgICBwdWJsaWMgc3RhdGljIFN0YXJ0c1dpdGhBYmJyID0gJ3N3JztcblxuICAgIHB1YmxpYyBzdGF0aWMgRW5kc1dpdGg6IEZpbHRlck1hdGNoTW9kZVR5cGUgPSAnZW5kc1dpdGgnO1xuICAgIHB1YmxpYyBzdGF0aWMgRW5kc1dpdGhBYmJyID0gJ2V3JztcblxuICAgIHB1YmxpYyBzdGF0aWMgTGVzc1RoYW46IEZpbHRlck1hdGNoTW9kZVR5cGUgPSAnbGVzc1RoYW4nO1xuICAgIHB1YmxpYyBzdGF0aWMgTGVzc1RoYW5BYmJyID0gJ2x0JztcblxuICAgIHB1YmxpYyBzdGF0aWMgTGVzc1RoYW5PckVxdWFsVG86IEZpbHRlck1hdGNoTW9kZVR5cGUgPSAnbGVzc1RoYW5PckVxdWFsVG8nO1xuICAgIHB1YmxpYyBzdGF0aWMgTGVzc1RoYW5PckVxdWFsVG9BYmJyID0gJ2xlJztcblxuICAgIHB1YmxpYyBzdGF0aWMgR3JlYXRlclRoYW46IEZpbHRlck1hdGNoTW9kZVR5cGUgPSAnZ3JlYXRlclRoYW4nO1xuICAgIHB1YmxpYyBzdGF0aWMgR3JlYXRlclRoYW5BYmJyID0gJ2d0JztcblxuICAgIHB1YmxpYyBzdGF0aWMgR3JlYXRlclRoYW5PckVxdWFsVG86IEZpbHRlck1hdGNoTW9kZVR5cGUgPSAnZ3JlYXRlclRoYW5PckVxdWFsVG8nO1xuICAgIHB1YmxpYyBzdGF0aWMgR3JlYXRlclRoYW5PckVxdWFsVG9BYmJyID0gJ2dlJztcblxuICAgIHB1YmxpYyBzdGF0aWMgQmV0d2VlbjogRmlsdGVyTWF0Y2hNb2RlVHlwZSA9ICdiZXR3ZWVuJztcbiAgICBwdWJsaWMgc3RhdGljIEJldHdlZW5BYmJyID0gJ2J0JztcblxuICAgIHB1YmxpYyBzdGF0aWMgRXhpc3RzOiBGaWx0ZXJNYXRjaE1vZGVUeXBlID0gJ2V4aXN0cyc7XG4gICAgcHVibGljIHN0YXRpYyBFeGlzdHNBYmJyID0gJ2V4JztcblxuICAgIHB1YmxpYyBzdGF0aWMgRG9lc05vdEV4aXN0OiBGaWx0ZXJNYXRjaE1vZGVUeXBlID0gJ2RvZXNOb3RFeGlzdCc7XG4gICAgcHVibGljIHN0YXRpYyBEb2VzTm90RXhpc3RBYmJyID0gJ254JztcblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QWJicmV2aWF0aW9uKG1vZGU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkVxdWFsczpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLkVxdWFsc0FiYnI7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5Ob3RFcXVhbHM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5Ob3RFcXVhbHNBYmJyO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuQ29udGFpbnM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5Db250YWluc0FiYnI7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5Ob3RDb250YWluczpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLk5vdENvbnRhaW5zQWJicjtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkluOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJNYXRjaE1vZGUuSW5BYmJyO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTm90SW46XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5Ob3RJbkFiYnI7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5TdGFydHNXaXRoOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJNYXRjaE1vZGUuU3RhcnRzV2l0aEFiYnI7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5FbmRzV2l0aDpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLkVuZHNXaXRoQWJicjtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkxlc3NUaGFuOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJNYXRjaE1vZGUuTGVzc1RoYW5BYmJyO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTGVzc1RoYW5PckVxdWFsVG86XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5MZXNzVGhhbk9yRXF1YWxUb0FiYnI7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5HcmVhdGVyVGhhbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLkdyZWF0ZXJUaGFuQWJicjtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkdyZWF0ZXJUaGFuT3JFcXVhbFRvOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJNYXRjaE1vZGUuR3JlYXRlclRoYW5PckVxdWFsVG9BYmJyO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW5BYmJyO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzQWJicjtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdEFiYnI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tQWJicmV2aWF0aW9uKGFiYnI6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBzd2l0Y2ggKGFiYnIpIHtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkVxdWFsc0FiYnI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5FcXVhbHM7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5Ob3RFcXVhbHNBYmJyOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJNYXRjaE1vZGUuTm90RXF1YWxzO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuQ29udGFpbnNBYmJyOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJNYXRjaE1vZGUuQ29udGFpbnM7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5Ob3RDb250YWluc0FiYnI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5Ob3RDb250YWlucztcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkluQWJicjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLkluO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTm90SW5BYmJyOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJNYXRjaE1vZGUuTm90SW47XG4gICAgICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5TdGFydHNXaXRoQWJicjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLlN0YXJ0c1dpdGg7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5FbmRzV2l0aEFiYnI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5FbmRzV2l0aDtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkxlc3NUaGFuQWJicjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLkxlc3NUaGFuO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTGVzc1RoYW5PckVxdWFsVG9BYmJyOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJNYXRjaE1vZGUuTGVzc1RoYW5PckVxdWFsVG87XG4gICAgICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5HcmVhdGVyVGhhbkFiYnI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5HcmVhdGVyVGhhbjtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkdyZWF0ZXJUaGFuT3JFcXVhbFRvQWJicjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLkdyZWF0ZXJUaGFuT3JFcXVhbFRvO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbkFiYnI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzQWJicjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cztcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdEFiYnI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3Q7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19","import { CommonsInternalError } from '../error/error.model';\nimport { dateToIsoString } from '../helpers/date';\nimport { FilterMatchMode } from './filter-match.model';\n/**\n * Converts a TableLazyLoadEvent to DataListParams.\n *\n * @param {TableLazyLoadEvent} event - The event containing the data to convert.\n * @return {DataListParams} - The converted DataListParams object.\n */\nexport function fromTableLoadToDataListParams(event) {\n const params = {};\n if (event.first != null) {\n params.offset = event.first;\n }\n if (event.rows != null) {\n params.limit = event.rows;\n }\n if (typeof event.globalFilter === 'string') {\n params.search = event.globalFilter;\n }\n else if (Array.isArray(event.globalFilter) && event.globalFilter.length > 0) {\n params.search = event.globalFilter[0];\n }\n if (Array.isArray(event.multiSortMeta) && event.multiSortMeta.length > 0) {\n params.sort = event.multiSortMeta.map(m => ({ property: m.field, ascending: m.order >= 0 }));\n }\n if (event.filters) {\n params.filters = Object.keys(event.filters).reduce((acc, key) => {\n const filter = {};\n const eventFilter = event.filters?.[key];\n if (Array.isArray(eventFilter)) {\n filter.value = eventFilter[0].value;\n filter.matchMode = eventFilter[0].matchMode;\n filter.caseSensitive = eventFilter[0].caseSensitive;\n }\n else if (eventFilter !== undefined) {\n filter.value = eventFilter.value;\n filter.matchMode = eventFilter.matchMode;\n filter.caseSensitive = eventFilter.caseSensitive;\n }\n // handle search case sensitivity to be also written on searchCaseSensitive\n if (key === 'global' && typeof params.search === 'string' && filter.caseSensitive !== undefined) {\n params.searchCaseSensitive = filter.caseSensitive;\n return acc;\n }\n return { ...acc, [key]: filter };\n }, {});\n }\n return params;\n}\n/**\n * Converts the given parameters to URL query parameters.\n * Sorts are formatted in Medius data API sort query language: `asc:prop1,desc:prop2`, ...\n * Filter keys are \"flattened\" in the new object, values are formatted in Medius data API filter query language: `cs:eq:asd`, `in:asd,qwe`, `ex`, ...\n *\n * @param {DataListParams} params - The parameters to convert.\n * @param {DataListParams|null} defaults - The default parameters used if no matching property in params is available. Defaults to { limit: 25, offset: 0 } if not provided.\n * @param opts - Options in converting to url query:\n * - prependFilterName Prepends filter key with provided string\n * @returns {Params} - The URL query parameters object.\n */\nexport function dataListParamsToUrlQuery(params, defaults = {\n limit: 25,\n offset: 0\n}, opts) {\n const urlParams = {};\n if (params.limit && params.limit !== defaults?.limit) {\n urlParams['limit'] = params.limit;\n }\n else if (!opts?.skipPresetDefaultsLimit) {\n urlParams['limit'] = defaults?.limit;\n }\n if (params.offset && params.offset !== defaults?.offset) {\n urlParams['offset'] = params.offset;\n }\n if (params.search && params.search !== defaults?.search) {\n urlParams['q'] = `${params.searchCaseSensitive ? `cs:` : ''}${params.search}`;\n }\n if (params.sort && Array.isArray(params.sort) && params.sort.length > 0) {\n if (defaults?.sort == null ||\n !Array.isArray(defaults.sort) ||\n defaults.sort.length === 0 ||\n params.sort.length !== defaults.sort.length ||\n defaults.sort.some((ds, idx) => ds.property !== params.sort[idx].property || (ds.ascending ?? true) !== (params.sort[idx].ascending ?? true))) {\n urlParams['sort'] = dataListParamsSortToUrlQuery(params);\n }\n }\n if (params.filters) {\n Object.keys(params.filters).forEach(k => {\n // global search filter is already included in the 'q' parameter, no need to include it here\n if (k === 'global') {\n return;\n }\n const paramFilter = params.filters[k];\n const defaultFilter = defaults?.filters?.[k];\n if (defaultFilter &&\n ((Array.isArray(defaultFilter.value) &&\n Array.isArray(paramFilter.value) &&\n defaultFilter.value.length === paramFilter.value.length &&\n defaultFilter.value.every((v, idx) => {\n const value = paramFilter.value[idx];\n if (value instanceof Date && v instanceof Date)\n return value.getTime() === v.getTime();\n else\n return value === v;\n })) || // handle arrays\n defaultFilter.value === paramFilter.value) &&\n defaultFilter.matchMode === paramFilter.matchMode &&\n (defaultFilter.caseSensitive ?? false) === (paramFilter.caseSensitive ?? false)) {\n return;\n }\n if (paramFilter.value == null &&\n defaultFilter?.value == null &&\n paramFilter.matchMode !== FilterMatchMode.Exists &&\n paramFilter.matchMode !== FilterMatchMode.DoesNotExist) {\n return;\n }\n if (paramFilter.value == null &&\n defaultFilter?.value != null &&\n paramFilter.matchMode !== FilterMatchMode.Exists &&\n paramFilter.matchMode !== FilterMatchMode.DoesNotExist) {\n urlParams[`${opts?.prependFilterName ?? ''}${k}`] = 'null';\n return;\n }\n urlParams[`${opts?.prependFilterName ?? ''}${k}`] = dataListParamsFiltersToUrlQuery(params, k, true);\n });\n }\n if (defaults?.filters) {\n // add other defaults\n const paramFilterKeys = params.filters ? Object.keys(params.filters) : [];\n Object.keys(defaults.filters)\n .filter(k => paramFilterKeys.indexOf(k) < 0)\n .forEach(k => {\n urlParams[`${opts?.prependFilterName ?? ''}${k}`] = dataListParamsFiltersToUrlQuery(defaults, k);\n });\n }\n return urlParams;\n}\n/**\n * Merges the provided parameters with default values and returns the merged object.\n *\n * @param {DataListParams} params - The parameters to merge with defaults.\n * @param {DataListParams} defaults - The default values to merge with params (optional, default is { limit: 25, offset: 0 }).\n * @returns {DataListParams} - The merged parameters object.\n */\nexport function mergeDataListParamsWithDefaults(params, defaults = {\n limit: 25,\n offset: 0\n}) {\n const merged = {\n limit: params.limit ?? defaults.limit,\n offset: params.offset ?? defaults.offset,\n search: params.search ?? defaults.search,\n sort: (params.sort ?? defaults.sort)?.map(s => ({ ...s }))\n };\n if (params.filters) {\n merged.filters = {};\n Object.entries(params.filters).forEach(([key, value]) => (merged.filters[key] = { ...value }));\n }\n if (defaults.filters) {\n if (!merged.filters)\n merged.filters = {};\n Object.entries(defaults.filters).forEach(([key, value]) => {\n if (merged.filters[key] === undefined) {\n merged.filters[key] = { ...value };\n }\n });\n }\n return merged;\n}\n/**\n * Converts an object of parameters to a URL query string for sorting.\n * Sorts are formatted in Medius data API sort query language: `asc:prop1,desc:prop2`, ...\n *\n * @param {DataListParams} params - An optional object containing sort parameters.\n * @returns A string representing the URL query or undefined if no sort parameters are provided.\n */\nexport function dataListParamsSortToUrlQuery(params) {\n return params && Array.isArray(params.sort)\n ? params.sort.map(s => `${s.ascending === true || s.ascending === undefined ? 'asc' : 'desc'}:${String(s.property)}`).join(',')\n : undefined;\n}\n/**\n * Converts a specific filter parameter (by key) from DataListParams object to a URL query string.\n * Filter keys are \"flattened\" in the new object, values are formatted in Medius data API filter query language: `cs:eq:asd`, `in:asd,qwe`, `ex`, ...\n *\n * @param {DataListParams<any, Filters> | undefined} params - The DataListParams object containing the filters.\n * @param {Filters} key - The key of the filter to convert.\n * @param {boolean} [allowNull=false] - Indicates whether to allow null values in the query string.\n * @return {string | undefined} - The URL query string representing the specified filter, or undefined if the filter is not found.\n */\nexport function dataListParamsFiltersToUrlQuery(params, key, allowNull = false) {\n const paramFilter = params?.filters?.[key];\n return dataListParamsFilterToUrlQuery(paramFilter, allowNull);\n}\n/**\n * Converts a filter to a URL query string.\n * Filter keys are \"flattened\" in the new object, values are formatted in Medius data API filter query language: `cs:eq:asd`, `in:asd,qwe`, `ex`, ...\n *\n * @param {DataListFilter} paramFilter - The filter object to be converted.\n * @param {boolean} [allowNull=false] - Indicates whether to allow null values in the filter.\n * @returns {string|undefined} - The filter converted to a URL query string, or undefined if no filter is provided or the filter has empty or invalid values.\n * @throws {CommonsInternalError} - If the filter has invalid values.\n */\nexport function dataListParamsFilterToUrlQuery(paramFilter, allowNull = false) {\n const filterValueAsArray = Array.isArray(paramFilter?.value) ? paramFilter.value.filter(v => v !== undefined && (allowNull || v !== null)) : undefined;\n const matchMode = paramFilter?.matchMode ?? FilterMatchMode.Equals;\n if (paramFilter === undefined ||\n (!allowNull && matchMode !== 'exists' && matchMode !== 'doesNotExist' && paramFilter.value == null) ||\n (typeof paramFilter.value === 'string' && paramFilter.value.length === 0) ||\n (Array.isArray(filterValueAsArray) && filterValueAsArray.length === 0)) {\n // no need to include filters for empty values\n return undefined;\n }\n if (matchMode === FilterMatchMode.Between && !(Array.isArray(filterValueAsArray) && filterValueAsArray.length === 2)) {\n throw new CommonsInternalError(`Filter match mode between requires exactly 2 values: ${paramFilter.value}`);\n }\n if ((matchMode === FilterMatchMode.In || matchMode === FilterMatchMode.NotIn) && (!Array.isArray(filterValueAsArray) || filterValueAsArray.length === 0)) {\n throw new CommonsInternalError(`Filter match mode ${matchMode} requires non-empty array: ${paramFilter.value}`);\n }\n if ([FilterMatchMode.In, FilterMatchMode.NotIn, FilterMatchMode.Between].indexOf(matchMode) === -1 && Array.isArray(filterValueAsArray)) {\n throw new CommonsInternalError(`Filter match mode ${matchMode} must not be array: ${paramFilter.value}`);\n }\n const noVal = paramFilter.matchMode === FilterMatchMode.Exists || paramFilter.matchMode === FilterMatchMode.DoesNotExist;\n const urlValuePart = noVal ? '' : `:${dataListParamsFilterValueToUrlString(filterValueAsArray ?? paramFilter.value, allowNull)}`;\n return `${paramFilter.caseSensitive ? 'cs:' : paramFilter.caseSensitive === false ? 'ci:' : ''}${FilterMatchMode.getAbbreviation(matchMode) ?? matchMode}${urlValuePart}`;\n}\n/**\n * Converts URL query parameters to a DataListParams object.\n * Sorts are formatted from Medius data API sort query language: `asc:prop1,desc:prop2`, ...\n * Filter keys are all keys in Params object that are not matched elsewhere, values are formatted from Medius data API filter query language: `cs:eq:asd`, `in:asd,qwe`, `ex`, ...\n *\n * @param {Params} urlParams - The URL query parameters.\n * @param opts Additional options for conversion:\n * - searchAsGlobal - The URL query parameters.\n * - prependFilterName - Filter names are prepended with provided string.\n * @return {DataListParams} - The converted DataListParams object.\n */\nexport function fromUrlQueryToDataListParams(urlParams, opts) {\n const params = {};\n Object.entries(urlParams).forEach(([urlParamKey, urlParamValue]) => {\n if (urlParamKey === 'limit') {\n params.limit = +urlParamValue;\n if (isNaN(params.limit) || params.limit < 0) {\n delete params.limit;\n }\n }\n else if (urlParamKey === 'offset') {\n params.offset = +urlParamValue;\n if (isNaN(params.offset) || params.offset < 0) {\n delete params.offset;\n }\n }\n else if (urlParamKey === 'q') {\n if (typeof urlParamValue === 'string' && urlParamValue.length > 0) {\n const searchQuery = urlParamValue.startsWith('cs:') || urlParamValue.startsWith('ci:') ? urlParamValue.substring(3) : urlParamValue;\n const caseSensitive = urlParamValue.startsWith('cs:');\n params.search = searchQuery;\n params.searchCaseSensitive = caseSensitive;\n if (opts?.searchAsGlobal) {\n if (!params.filters) {\n params.filters = {};\n }\n params.filters['global'] = {\n value: searchQuery,\n matchMode: FilterMatchMode.Contains,\n caseSensitive: caseSensitive\n };\n }\n }\n }\n else if (urlParamKey === 'sort') {\n if (typeof urlParamValue === 'string') {\n params.sort = urlParamValue.split(',').map(s => {\n const [direction, property] = s.split(':');\n return { property: (property ?? direction), ascending: direction !== 'desc' };\n });\n }\n else {\n throw new CommonsInternalError(`String is expected as value for '${urlParamKey}' when converting from urlParams`);\n }\n }\n else if ((!opts?.prependFilterName || urlParamKey.startsWith(opts.prependFilterName)) && typeof urlParamValue === 'string') {\n if (urlParamValue.length === 0) {\n // empty string should be ignored\n return;\n }\n const filterKey = opts?.prependFilterName ? urlParamKey.substring(opts.prependFilterName.length) : urlParamKey;\n const filterParts = urlParamValue.split(':');\n let partIdx = 0;\n // removed default filter\n if (filterParts[partIdx] === 'null') {\n if (!params.filters) {\n params.filters = {};\n }\n params.filters[filterKey] = { value: null };\n return;\n }\n // case sensitive\n let caseSensitive = undefined;\n if (filterParts[partIdx] === 'cs' || filterParts[partIdx] === 'ci') {\n caseSensitive = filterParts[partIdx++] === 'cs';\n }\n // match mode\n const matchMode = filterParts[partIdx] ? (FilterMatchMode.fromAbbreviation(filterParts[partIdx]) ?? filterParts[partIdx]) : FilterMatchMode.Equals;\n partIdx++;\n const noVal = matchMode === FilterMatchMode.Exists || matchMode === FilterMatchMode.DoesNotExist;\n // value\n let value = undefined;\n if (!noVal) {\n if (filterParts.length < 2) {\n return;\n }\n if (partIdx === filterParts.length - 1) {\n value = filterParts[partIdx];\n }\n else if (partIdx < filterParts.length) {\n // array that should not be array, so join back together\n value = filterParts.slice(partIdx, filterParts.length).join(':');\n }\n if (value === undefined && matchMode !== FilterMatchMode.Exists && matchMode !== FilterMatchMode.DoesNotExist) {\n // if value undefined and match mode expects value, then skip\n return;\n }\n if (value === 'null') {\n value = null;\n }\n if ((matchMode === FilterMatchMode.In || matchMode === FilterMatchMode.NotIn || matchMode === FilterMatchMode.Between) && typeof value === 'string') {\n let arrayVal = [];\n // these match modes expect array\n if (value.indexOf('\"') >= 0) {\n const tokens = [];\n let currentToken = '';\n let explicitQuotes = false; //token is quoted, e.g. in:1,2,\"22\"\"\",\",123\"\"\"\n let quotesOpened = false; //token has started processing\n let quotesExplicitlyClosed = false; //token processing has finished, after single \" in quoted mode, or before , in not quoted\n for (let i = 0; i < value.length; i++) {\n const c = value[i];\n // reset the tokenizer when seeing the token separator\n // only if either:\n // the quotes have not been opened yet (when there are no characters between separators),\n // the token has been explicitly closed (when we actually have explicit opening i.e., quotes as the first character)\n // or we have implicit quotes (i.e., quotes are not the first character)\n if (c === ',' && (!quotesOpened || quotesExplicitlyClosed || !explicitQuotes)) {\n tokens.push(currentToken);\n currentToken = '';\n quotesOpened = false;\n quotesExplicitlyClosed = false;\n explicitQuotes = false;\n }\n else if (c == '\"') {\n // escaped double-quotes\n if (explicitQuotes && i + 1 < value.length && value[i + 1] === '\"') {\n currentToken += c; // Append one double-quote to the current token\n i++; // Skip the next double-quote\n }\n // we encounter quotes again after they were the first character => we close the token\n else if (explicitQuotes) {\n quotesExplicitlyClosed = true;\n }\n // implicit quotes\n else if (quotesOpened) {\n currentToken += c;\n }\n // quotes are the first character => explicitly open the token\n else {\n currentToken = '';\n quotesOpened = true;\n explicitQuotes = true;\n }\n }\n else {\n if (quotesExplicitlyClosed) {\n return;\n }\n quotesOpened = true;\n currentToken += c;\n }\n }\n if (quotesOpened && !quotesExplicitlyClosed && explicitQuotes) {\n return;\n }\n // Append the last token after the loop ends\n tokens.push(currentToken.toString());\n arrayVal = tokens;\n }\n else {\n arrayVal = value.split(',');\n }\n if (matchMode === FilterMatchMode.Between && arrayVal.length !== 2) {\n return;\n }\n value = arrayVal;\n }\n if ((typeof value === 'string' && value.length === 0) || (Array.isArray(value) && value.length === 0)) {\n // filter with empty value is to be ignored\n return;\n }\n }\n else {\n caseSensitive = undefined;\n }\n if (!params.filters) {\n params.filters = {};\n }\n params.filters[filterKey] = { value: value, matchMode: matchMode, caseSensitive: caseSensitive };\n }\n });\n return params;\n}\n/**\n * Makes a copy of the given DataListParams object.\n *\n * @param {DataListParams<Sorts, Filters>} params - The DataListParams object to be copied.\n * @returns {DataListParams<Sorts, Filters>} - Returns a new copy of the DataListParams object.\n */\nexport function copyDataListParams(params) {\n const copy = {\n offset: params.offset,\n limit: params.limit,\n search: params.search\n };\n if (params.sort) {\n copy.sort = params.sort?.map(s => ({ ...s }));\n }\n if (params.filters) {\n copy.filters = Object.entries(params.filters).reduce((acc, [key, value]) => {\n const filterValue = value;\n return {\n ...acc,\n [key]: {\n ...filterValue,\n value: Array.isArray(filterValue.value) ? [...filterValue.value] : filterValue.value\n }\n };\n }, {});\n }\n return copy;\n}\n/**\n * Converts a value to a URL query param string representation.\n *\n * @param {unknown} value - The value to be converted.\n * @param {boolean} [allowNull=false] - Indicates whether null values are allowed.\n * @returns {string} The URL parameter representation of the value.\n * @throws {CommonsInternalError} If an undefined value is passed without allowNull set to true.\n * @throws {CommonsInternalError} If the value is an object (excluding Date).\n */\nexport function dataListParamsFilterValueToUrlString(value, allowNull = false) {\n if (value === null && allowNull)\n return 'null';\n if (value == null)\n throw new CommonsInternalError('Undefined value cannot be converted to url param.'); // this should not happen, should be filtered out earlier\n if (Array.isArray(value))\n return value\n .map(v => dataListParamsFilterValueToUrlString(v, allowNull))\n .map(v => (v.indexOf(',') >= 0 || v.indexOf('\"') >= 0 ? `\"${v.replaceAll('\"', '\"\"')}\"` : v))\n .join(',');\n if (typeof value === 'object') {\n if (value instanceof Date)\n return dateToIsoString(value, 'dateTime', { utc: true });\n else {\n throw new CommonsInternalError('Filter value cannot be object');\n }\n }\n return String(value);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LXBhcmFtcy1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvZGF0YS1saXN0L2RhdGEtbGlzdC1wYXJhbXMtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBR3JEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUFDLEtBQXlCO0lBQ25FLE1BQU0sTUFBTSxHQUFtQixFQUFFLENBQUM7SUFFbEMsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxPQUFPLEtBQUssQ0FBQyxZQUFZLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDekMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO0lBQ3ZDLENBQUM7U0FBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2RSxNQUFNLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDNUQsTUFBTSxNQUFNLEdBQW1CLEVBQUUsQ0FBQztZQUNsQyxNQUFNLFdBQVcsR0FBZ0UsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQW1CLENBQUMsQ0FBQztZQUN0SCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUNwQyxNQUFNLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzVDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUN4RCxDQUFDO2lCQUFNLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7Z0JBQ2pDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztnQkFDekMsTUFBTSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDO1lBQ3JELENBQUM7WUFDRCwyRUFBMkU7WUFDM0UsSUFBSSxHQUFHLEtBQUssUUFBUSxJQUFJLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLGFBQWEsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDOUYsTUFBTSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7Z0JBQ2xELE9BQU8sR0FBRyxDQUFDO1lBQ2YsQ0FBQztZQUNELE9BQU8sRUFBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBQyxDQUFDO1FBQ25DLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FDcEMsTUFBZ0MsRUFDaEMsV0FBNEM7SUFDeEMsS0FBSyxFQUFFLEVBQUU7SUFDVCxNQUFNLEVBQUUsQ0FBQztDQUNaLEVBQ0QsSUFHQztJQUVELE1BQU0sU0FBUyxHQUFXLEVBQUUsQ0FBQztJQUU3QixJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDbkQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDdEMsQ0FBQztTQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQztRQUN4QyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUN6QyxDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3RELFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3hDLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDdEQsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEYsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0RSxJQUNJLFFBQVEsRUFBRSxJQUFJLElBQUksSUFBSTtZQUN0QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUM3QixRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUMzQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDLElBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsRUFDakosQ0FBQztZQUNDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0wsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNwQyw0RkFBNEY7WUFDNUYsSUFBSSxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2pCLE9BQU87WUFDWCxDQUFDO1lBQ0QsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQVEsQ0FBQyxDQUFpQixDQUFFLENBQUM7WUFDeEQsTUFBTSxhQUFhLEdBQUcsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQWlCLENBQUMsQ0FBQztZQUM3RCxJQUNJLGFBQWE7Z0JBQ2IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztvQkFDaEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO29CQUNoQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU07b0JBQ3ZELGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO3dCQUNqQyxNQUFNLEtBQUssR0FBSSxXQUFXLENBQUMsS0FBd0MsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDekUsSUFBSSxLQUFLLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJOzRCQUFFLE9BQU8sS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7NEJBQ2xGLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQztvQkFDNUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxnQkFBZ0I7b0JBQ3ZCLGFBQWEsQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLEtBQUssQ0FBQztnQkFDOUMsYUFBYSxDQUFDLFNBQVMsS0FBSyxXQUFXLENBQUMsU0FBUztnQkFDakQsQ0FBQyxhQUFhLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUMsRUFDakYsQ0FBQztnQkFDQyxPQUFPO1lBQ1gsQ0FBQztZQUVELElBQ0ksV0FBVyxDQUFDLEtBQUssSUFBSSxJQUFJO2dCQUN6QixhQUFhLEVBQUUsS0FBSyxJQUFJLElBQUk7Z0JBQzVCLFdBQVcsQ0FBQyxTQUFTLEtBQUssZUFBZSxDQUFDLE1BQU07Z0JBQ2hELFdBQVcsQ0FBQyxTQUFTLEtBQUssZUFBZSxDQUFDLFlBQVksRUFDeEQsQ0FBQztnQkFDQyxPQUFPO1lBQ1gsQ0FBQztZQUVELElBQ0ksV0FBVyxDQUFDLEtBQUssSUFBSSxJQUFJO2dCQUN6QixhQUFhLEVBQUUsS0FBSyxJQUFJLElBQUk7Z0JBQzVCLFdBQVcsQ0FBQyxTQUFTLEtBQUssZUFBZSxDQUFDLE1BQU07Z0JBQ2hELFdBQVcsQ0FBQyxTQUFTLEtBQUssZUFBZSxDQUFDLFlBQVksRUFDeEQsQ0FBQztnQkFDQyxTQUFTLENBQUMsR0FBRyxJQUFJLEVBQUUsaUJBQWlCLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO2dCQUMzRCxPQUFPO1lBQ1gsQ0FBQztZQUVELFNBQVMsQ0FBQyxHQUFHLElBQUksRUFBRSxpQkFBaUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRywrQkFBK0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pHLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNELElBQUksUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLHFCQUFxQjtRQUNyQixNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQzthQUN4QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUMzQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDVCxTQUFTLENBQUMsR0FBRyxJQUFJLEVBQUUsaUJBQWlCLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsK0JBQStCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JHLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsK0JBQStCLENBQzNDLE1BQXNDLEVBQ3RDLFdBQTJDO0lBQ3ZDLEtBQUssRUFBRSxFQUFFO0lBQ1QsTUFBTSxFQUFFLENBQUM7Q0FDWjtJQUVELE1BQU0sTUFBTSxHQUFtQztRQUMzQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsS0FBSztRQUNyQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTTtRQUN4QyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTTtRQUN4QyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0tBQzNELENBQUM7SUFFRixJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixNQUFNLENBQUMsT0FBTyxHQUFHLEVBQWtDLENBQUM7UUFDcEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQVEsQ0FBQyxHQUFjLENBQUMsR0FBRyxFQUFDLEdBQUksS0FBd0IsRUFBQyxDQUFDLENBQUMsQ0FBQztJQUNqSSxDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1lBQUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxFQUFrQyxDQUFDO1FBQ3pFLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDdEQsSUFBSSxNQUFNLENBQUMsT0FBUSxDQUFDLEdBQWMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNoRCxNQUFNLENBQUMsT0FBUSxDQUFDLEdBQWMsQ0FBQyxHQUFHLEVBQUMsR0FBSSxLQUF3QixFQUFDLENBQUM7WUFDckUsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsNEJBQTRCLENBQUMsTUFBaUM7SUFDMUUsT0FBTyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDL0gsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNwQixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsK0JBQStCLENBQzNDLE1BQWdELEVBQ2hELEdBQVksRUFDWixTQUFTLEdBQUcsS0FBSztJQUVqQixNQUFNLFdBQVcsR0FBRyxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0MsT0FBTyw4QkFBOEIsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLDhCQUE4QixDQUFDLFdBQTRCLEVBQUUsU0FBUyxHQUFHLEtBQUs7SUFDMUYsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDeEosTUFBTSxTQUFTLEdBQUcsV0FBVyxFQUFFLFNBQVMsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDO0lBQ25FLElBQ0ksV0FBVyxLQUFLLFNBQVM7UUFDekIsQ0FBQyxDQUFDLFNBQVMsSUFBSSxTQUFTLEtBQUssUUFBUSxJQUFJLFNBQVMsS0FBSyxjQUFjLElBQUksV0FBVyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7UUFDbkcsQ0FBQyxPQUFPLFdBQVcsQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUN6RSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQ3hFLENBQUM7UUFDQyw4Q0FBOEM7UUFDOUMsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksU0FBUyxLQUFLLGVBQWUsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuSCxNQUFNLElBQUksb0JBQW9CLENBQUMsd0RBQXdELFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2hILENBQUM7SUFFRCxJQUFJLENBQUMsU0FBUyxLQUFLLGVBQWUsQ0FBQyxFQUFFLElBQUksU0FBUyxLQUFLLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZKLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxxQkFBcUIsU0FBUyw4QkFBOEIsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDcEgsQ0FBQztJQUVELElBQUssQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLGVBQWUsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLE9BQU8sQ0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztRQUNwSixNQUFNLElBQUksb0JBQW9CLENBQUMscUJBQXFCLFNBQVMsdUJBQXVCLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsU0FBUyxLQUFLLGVBQWUsQ0FBQyxNQUFNLElBQUksV0FBVyxDQUFDLFNBQVMsS0FBSyxlQUFlLENBQUMsWUFBWSxDQUFDO0lBQ3pILE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLG9DQUFvQyxDQUFDLGtCQUFrQixJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQztJQUVqSSxPQUFPLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsYUFBYSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsZUFBZSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLEdBQUcsWUFBWSxFQUFFLENBQUM7QUFDOUssQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsNEJBQTRCLENBQ3hDLFNBQWlCLEVBQ2pCLElBR0M7SUFFRCxNQUFNLE1BQU0sR0FBbUIsRUFBRSxDQUFDO0lBRWxDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLEVBQUUsRUFBRTtRQUMvRCxJQUFJLFdBQVcsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUMxQixNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsYUFBYSxDQUFDO1lBQzlCLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDeEIsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLFdBQVcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNsQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsYUFBYSxDQUFDO1lBQy9CLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM1QyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDekIsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLFdBQVcsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUM3QixJQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVEsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNoRSxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztnQkFDcEksTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFdEQsTUFBTSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7Z0JBQzVCLE1BQU0sQ0FBQyxtQkFBbUIsR0FBRyxhQUFhLENBQUM7Z0JBRTNDLElBQUksSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUNsQixNQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztvQkFDeEIsQ0FBQztvQkFDRCxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHO3dCQUN2QixLQUFLLEVBQUUsV0FBVzt3QkFDbEIsU0FBUyxFQUFFLGVBQWUsQ0FBQyxRQUFRO3dCQUNuQyxhQUFhLEVBQUUsYUFBYTtxQkFDL0IsQ0FBQztnQkFDTixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLFdBQVcsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNoQyxJQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUMzQyxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzNDLE9BQU8sRUFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFpQixFQUFFLFNBQVMsRUFBRSxTQUFTLEtBQUssTUFBTSxFQUFDLENBQUM7Z0JBQ2hHLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxvQ0FBb0MsV0FBVyxrQ0FBa0MsQ0FBQyxDQUFDO1lBQ3RILENBQUM7UUFDTCxDQUFDO2FBQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLGlCQUFpQixJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxPQUFPLGFBQWEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMzSCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLGlDQUFpQztnQkFDakMsT0FBTztZQUNYLENBQUM7WUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFDL0csTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3QyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFFaEIseUJBQXlCO1lBQ3pCLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNsQixNQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQztnQkFDRCxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQXlCLENBQUMsR0FBRyxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUMsQ0FBQztnQkFDMUQsT0FBTztZQUNYLENBQUM7WUFFRCxpQkFBaUI7WUFDakIsSUFBSSxhQUFhLEdBQXdCLFNBQVMsQ0FBQztZQUNuRCxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNqRSxhQUFhLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDO1lBQ3BELENBQUM7WUFFRCxhQUFhO1lBQ2IsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztZQUNuSixPQUFPLEVBQUUsQ0FBQztZQUVWLE1BQU0sS0FBSyxHQUFHLFNBQVMsS0FBSyxlQUFlLENBQUMsTUFBTSxJQUFJLFNBQVMsS0FBSyxlQUFlLENBQUMsWUFBWSxDQUFDO1lBRWpHLFFBQVE7WUFDUixJQUFJLEtBQUssR0FBeUMsU0FBUyxDQUFDO1lBQzVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDVCxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3pCLE9BQU87Z0JBQ1gsQ0FBQztnQkFFRCxJQUFJLE9BQU8sS0FBSyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNyQyxLQUFLLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNqQyxDQUFDO3FCQUFNLElBQUksT0FBTyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDdEMsd0RBQXdEO29CQUN4RCxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckUsQ0FBQztnQkFFRCxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksU0FBUyxLQUFLLGVBQWUsQ0FBQyxNQUFNLElBQUksU0FBUyxLQUFLLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDNUcsNkRBQTZEO29CQUM3RCxPQUFPO2dCQUNYLENBQUM7Z0JBRUQsSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFLENBQUM7b0JBQ25CLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ2pCLENBQUM7Z0JBRUQsSUFBSSxDQUFDLFNBQVMsS0FBSyxlQUFlLENBQUMsRUFBRSxJQUFJLFNBQVMsS0FBSyxlQUFlLENBQUMsS0FBSyxJQUFJLFNBQVMsS0FBSyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ2xKLElBQUksUUFBUSxHQUFhLEVBQUUsQ0FBQztvQkFDNUIsaUNBQWlDO29CQUNqQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQzFCLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQzt3QkFDNUIsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO3dCQUN0QixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyw4Q0FBOEM7d0JBQzFFLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQyxDQUFDLDhCQUE4Qjt3QkFDeEQsSUFBSSxzQkFBc0IsR0FBRyxLQUFLLENBQUMsQ0FBQyx5RkFBeUY7d0JBRTdILEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7NEJBQ3BDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFFbkIsc0RBQXNEOzRCQUN0RCxrQkFBa0I7NEJBQ2xCLHlGQUF5Rjs0QkFDekYsb0hBQW9IOzRCQUNwSCx3RUFBd0U7NEJBQ3hFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsWUFBWSxJQUFJLHNCQUFzQixJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQ0FDNUUsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQ0FDMUIsWUFBWSxHQUFHLEVBQUUsQ0FBQztnQ0FDbEIsWUFBWSxHQUFHLEtBQUssQ0FBQztnQ0FDckIsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO2dDQUMvQixjQUFjLEdBQUcsS0FBSyxDQUFDOzRCQUMzQixDQUFDO2lDQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dDQUNsQix3QkFBd0I7Z0NBQ3hCLElBQUksY0FBYyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO29DQUNqRSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsK0NBQStDO29DQUNsRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLDZCQUE2QjtnQ0FDdEMsQ0FBQztnQ0FDRCxzRkFBc0Y7cUNBQ2pGLElBQUksY0FBYyxFQUFFLENBQUM7b0NBQ3RCLHNCQUFzQixHQUFHLElBQUksQ0FBQztnQ0FDbEMsQ0FBQztnQ0FDRCxrQkFBa0I7cUNBQ2IsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQ0FDcEIsWUFBWSxJQUFJLENBQUMsQ0FBQztnQ0FDdEIsQ0FBQztnQ0FDRCw4REFBOEQ7cUNBQ3pELENBQUM7b0NBQ0YsWUFBWSxHQUFHLEVBQUUsQ0FBQztvQ0FDbEIsWUFBWSxHQUFHLElBQUksQ0FBQztvQ0FDcEIsY0FBYyxHQUFHLElBQUksQ0FBQztnQ0FDMUIsQ0FBQzs0QkFDTCxDQUFDO2lDQUFNLENBQUM7Z0NBQ0osSUFBSSxzQkFBc0IsRUFBRSxDQUFDO29DQUN6QixPQUFPO2dDQUNYLENBQUM7Z0NBRUQsWUFBWSxHQUFHLElBQUksQ0FBQztnQ0FDcEIsWUFBWSxJQUFJLENBQUMsQ0FBQzs0QkFDdEIsQ0FBQzt3QkFDTCxDQUFDO3dCQUVELElBQUksWUFBWSxJQUFJLENBQUMsc0JBQXNCLElBQUksY0FBYyxFQUFFLENBQUM7NEJBQzVELE9BQU87d0JBQ1gsQ0FBQzt3QkFFRCw0Q0FBNEM7d0JBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7d0JBRXJDLFFBQVEsR0FBRyxNQUFNLENBQUM7b0JBQ3RCLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDaEMsQ0FBQztvQkFFRCxJQUFJLFNBQVMsS0FBSyxlQUFlLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ2pFLE9BQU87b0JBQ1gsQ0FBQztvQkFFRCxLQUFLLEdBQUcsUUFBUSxDQUFDO2dCQUNyQixDQUFDO2dCQUVELElBQUksQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNyRywyQ0FBMkM7b0JBQzNDLE9BQU87Z0JBQ1gsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDSixhQUFhLEdBQUcsU0FBUyxDQUFDO1lBQzlCLENBQUM7WUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNsQixNQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUN4QixDQUFDO1lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUF5QixDQUFDLEdBQUcsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBQyxDQUFDO1FBQ25ILENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBcUQsTUFBc0M7SUFDekgsTUFBTSxJQUFJLEdBQW1DO1FBQ3pDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtRQUNyQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7UUFDbkIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO0tBQ3hCLENBQUM7SUFFRixJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDdkUsTUFBTSxXQUFXLEdBQUcsS0FBdUIsQ0FBQztZQUM1QyxPQUFPO2dCQUNILEdBQUcsR0FBRztnQkFDTixDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNILEdBQUcsV0FBVztvQkFDZCxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLO2lCQUNyRTthQUN0QixDQUFDO1FBQ04sQ0FBQyxFQUFFLEVBQWtDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLG9DQUFvQyxDQUFDLEtBQWMsRUFBRSxTQUFTLEdBQUcsS0FBSztJQUNsRixJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksU0FBUztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQy9DLElBQUksS0FBSyxJQUFJLElBQUk7UUFBRSxNQUFNLElBQUksb0JBQW9CLENBQUMsbURBQW1ELENBQUMsQ0FBQyxDQUFDLHlEQUF5RDtJQUNqSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3BCLE9BQU8sS0FBSzthQUNQLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLG9DQUFvQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQzthQUM1RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNGLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksS0FBSyxZQUFZLElBQUk7WUFBRSxPQUFPLGVBQWUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7YUFDN0UsQ0FBQztZQUNGLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGFyYW1zfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1RhYmxlTGF6eUxvYWRFdmVudH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5cbmltcG9ydCB7Q29tbW9uc0ludGVybmFsRXJyb3J9IGZyb20gJy4uL2Vycm9yL2Vycm9yLm1vZGVsJztcbmltcG9ydCB7ZGF0ZVRvSXNvU3RyaW5nfSBmcm9tICcuLi9oZWxwZXJzL2RhdGUnO1xuaW1wb3J0IHtEYXRhTGlzdEZpbHRlciwgRGF0YUxpc3RGaWx0ZXJWYWx1ZVR5cGUsIERhdGFMaXN0RmlsdGVyc1R5cGUsIERhdGFMaXN0UGFyYW1zfSBmcm9tICcuL2RhdGEtbGlzdC5tb2RlbCc7XG5pbXBvcnQge0ZpbHRlck1hdGNoTW9kZX0gZnJvbSAnLi9maWx0ZXItbWF0Y2gubW9kZWwnO1xuaW1wb3J0IHtDb21tb25zRmlsdGVyTWV0YWRhdGF9IGZyb20gJy4vZmlsdGVyLW1ldGFkYXRhLm1vZGVsJztcblxuLyoqXG4gKiBDb252ZXJ0cyBhIFRhYmxlTGF6eUxvYWRFdmVudCB0byBEYXRhTGlzdFBhcmFtcy5cbiAqXG4gKiBAcGFyYW0ge1RhYmxlTGF6eUxvYWRFdmVudH0gZXZlbnQgLSBUaGUgZXZlbnQgY29udGFpbmluZyB0aGUgZGF0YSB0byBjb252ZXJ0LlxuICogQHJldHVybiB7RGF0YUxpc3RQYXJhbXN9IC0gVGhlIGNvbnZlcnRlZCBEYXRhTGlzdFBhcmFtcyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVGFibGVMb2FkVG9EYXRhTGlzdFBhcmFtcyhldmVudDogVGFibGVMYXp5TG9hZEV2ZW50KTogRGF0YUxpc3RQYXJhbXMge1xuICAgIGNvbnN0IHBhcmFtczogRGF0YUxpc3RQYXJhbXMgPSB7fTtcblxuICAgIGlmIChldmVudC5maXJzdCAhPSBudWxsKSB7XG4gICAgICAgIHBhcmFtcy5vZmZzZXQgPSBldmVudC5maXJzdDtcbiAgICB9XG4gICAgaWYgKGV2ZW50LnJvd3MgIT0gbnVsbCkge1xuICAgICAgICBwYXJhbXMubGltaXQgPSBldmVudC5yb3dzO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXZlbnQuZ2xvYmFsRmlsdGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICBwYXJhbXMuc2VhcmNoID0gZXZlbnQuZ2xvYmFsRmlsdGVyO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShldmVudC5nbG9iYWxGaWx0ZXIpICYmIGV2ZW50Lmdsb2JhbEZpbHRlci5sZW5ndGggPiAwKSB7XG4gICAgICAgIHBhcmFtcy5zZWFyY2ggPSBldmVudC5nbG9iYWxGaWx0ZXJbMF07XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQubXVsdGlTb3J0TWV0YSkgJiYgZXZlbnQubXVsdGlTb3J0TWV0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHBhcmFtcy5zb3J0ID0gZXZlbnQubXVsdGlTb3J0TWV0YS5tYXAobSA9PiAoe3Byb3BlcnR5OiBtLmZpZWxkLCBhc2NlbmRpbmc6IG0ub3JkZXIgPj0gMH0pKTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQuZmlsdGVycykge1xuICAgICAgICBwYXJhbXMuZmlsdGVycyA9IE9iamVjdC5rZXlzKGV2ZW50LmZpbHRlcnMpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcjogRGF0YUxpc3RGaWx0ZXIgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50RmlsdGVyOiBDb21tb25zRmlsdGVyTWV0YWRhdGEgfCBDb21tb25zRmlsdGVyTWV0YWRhdGFbXSB8IHVuZGVmaW5lZCA9IGV2ZW50LmZpbHRlcnM/LltrZXkgYXMga2V5b2Ygb2JqZWN0XTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50RmlsdGVyKSkge1xuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IGV2ZW50RmlsdGVyWzBdLnZhbHVlO1xuICAgICAgICAgICAgICAgIGZpbHRlci5tYXRjaE1vZGUgPSBldmVudEZpbHRlclswXS5tYXRjaE1vZGU7XG4gICAgICAgICAgICAgICAgZmlsdGVyLmNhc2VTZW5zaXRpdmUgPSBldmVudEZpbHRlclswXS5jYXNlU2Vuc2l0aXZlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudEZpbHRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnZhbHVlID0gZXZlbnRGaWx0ZXIudmFsdWU7XG4gICAgICAgICAgICAgICAgZmlsdGVyLm1hdGNoTW9kZSA9IGV2ZW50RmlsdGVyLm1hdGNoTW9kZTtcbiAgICAgICAgICAgICAgICBmaWx0ZXIuY2FzZVNlbnNpdGl2ZSA9IGV2ZW50RmlsdGVyLmNhc2VTZW5zaXRpdmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBoYW5kbGUgc2VhcmNoIGNhc2Ugc2Vuc2l0aXZpdHkgdG8gYmUgYWxzbyB3cml0dGVuIG9uIHNlYXJjaENhc2VTZW5zaXRpdmVcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdnbG9iYWwnICYmIHR5cGVvZiBwYXJhbXMuc2VhcmNoID09PSAnc3RyaW5nJyAmJiBmaWx0ZXIuY2FzZVNlbnNpdGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnNlYXJjaENhc2VTZW5zaXRpdmUgPSBmaWx0ZXIuY2FzZVNlbnNpdGl2ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsuLi5hY2MsIFtrZXldOiBmaWx0ZXJ9O1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gcGFyYW1ldGVycyB0byBVUkwgcXVlcnkgcGFyYW1ldGVycy5cbiAqIFNvcnRzIGFyZSBmb3JtYXR0ZWQgaW4gTWVkaXVzIGRhdGEgQVBJIHNvcnQgcXVlcnkgbGFuZ3VhZ2U6IGBhc2M6cHJvcDEsZGVzYzpwcm9wMmAsIC4uLlxuICogRmlsdGVyIGtleXMgYXJlIFwiZmxhdHRlbmVkXCIgaW4gdGhlIG5ldyBvYmplY3QsIHZhbHVlcyBhcmUgZm9ybWF0dGVkIGluIE1lZGl1cyBkYXRhIEFQSSBmaWx0ZXIgcXVlcnkgbGFuZ3VhZ2U6IGBjczplcTphc2RgLCBgaW46YXNkLHF3ZWAsIGBleGAsIC4uLlxuICpcbiAqIEBwYXJhbSB7RGF0YUxpc3RQYXJhbXN9IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGNvbnZlcnQuXG4gKiBAcGFyYW0ge0RhdGFMaXN0UGFyYW1zfG51bGx9IGRlZmF1bHRzIC0gVGhlIGRlZmF1bHQgcGFyYW1ldGVycyB1c2VkIGlmIG5vIG1hdGNoaW5nIHByb3BlcnR5IGluIHBhcmFtcyBpcyBhdmFpbGFibGUuIERlZmF1bHRzIHRvIHsgbGltaXQ6IDI1LCBvZmZzZXQ6IDAgfSBpZiBub3QgcHJvdmlkZWQuXG4gKiBAcGFyYW0gb3B0cyAtIE9wdGlvbnMgaW4gY29udmVydGluZyB0byB1cmwgcXVlcnk6XG4gKiAgIC0gcHJlcGVuZEZpbHRlck5hbWUgUHJlcGVuZHMgZmlsdGVyIGtleSB3aXRoIHByb3ZpZGVkIHN0cmluZ1xuICogQHJldHVybnMge1BhcmFtc30gLSBUaGUgVVJMIHF1ZXJ5IHBhcmFtZXRlcnMgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGF0YUxpc3RQYXJhbXNUb1VybFF1ZXJ5KFxuICAgIHBhcmFtczogRGF0YUxpc3RQYXJhbXM8YW55LCBhbnk+LFxuICAgIGRlZmF1bHRzOiBEYXRhTGlzdFBhcmFtczxhbnksIGFueT4gfCBudWxsID0ge1xuICAgICAgICBsaW1pdDogMjUsXG4gICAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgb3B0cz86IHtcbiAgICAgICAgcHJlcGVuZEZpbHRlck5hbWU/OiBzdHJpbmc7XG4gICAgICAgIHNraXBQcmVzZXREZWZhdWx0c0xpbWl0PzogYm9vbGVhbjtcbiAgICB9XG4pOiBQYXJhbXMge1xuICAgIGNvbnN0IHVybFBhcmFtczogUGFyYW1zID0ge307XG5cbiAgICBpZiAocGFyYW1zLmxpbWl0ICYmIHBhcmFtcy5saW1pdCAhPT0gZGVmYXVsdHM/LmxpbWl0KSB7XG4gICAgICAgIHVybFBhcmFtc1snbGltaXQnXSA9IHBhcmFtcy5saW1pdDtcbiAgICB9IGVsc2UgaWYgKCFvcHRzPy5za2lwUHJlc2V0RGVmYXVsdHNMaW1pdCkge1xuICAgICAgICB1cmxQYXJhbXNbJ2xpbWl0J10gPSBkZWZhdWx0cz8ubGltaXQ7XG4gICAgfVxuICAgIGlmIChwYXJhbXMub2Zmc2V0ICYmIHBhcmFtcy5vZmZzZXQgIT09IGRlZmF1bHRzPy5vZmZzZXQpIHtcbiAgICAgICAgdXJsUGFyYW1zWydvZmZzZXQnXSA9IHBhcmFtcy5vZmZzZXQ7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuc2VhcmNoICYmIHBhcmFtcy5zZWFyY2ggIT09IGRlZmF1bHRzPy5zZWFyY2gpIHtcbiAgICAgICAgdXJsUGFyYW1zWydxJ10gPSBgJHtwYXJhbXMuc2VhcmNoQ2FzZVNlbnNpdGl2ZSA/IGBjczpgIDogJyd9JHtwYXJhbXMuc2VhcmNofWA7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuc29ydCAmJiBBcnJheS5pc0FycmF5KHBhcmFtcy5zb3J0KSAmJiBwYXJhbXMuc29ydC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGRlZmF1bHRzPy5zb3J0ID09IG51bGwgfHxcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGRlZmF1bHRzLnNvcnQpIHx8XG4gICAgICAgICAgICBkZWZhdWx0cy5zb3J0Lmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcGFyYW1zLnNvcnQubGVuZ3RoICE9PSBkZWZhdWx0cy5zb3J0Lmxlbmd0aCB8fFxuICAgICAgICAgICAgZGVmYXVsdHMuc29ydC5zb21lKChkcywgaWR4KSA9PiBkcy5wcm9wZXJ0eSAhPT0gcGFyYW1zLnNvcnQhW2lkeF0ucHJvcGVydHkgfHwgKGRzLmFzY2VuZGluZyA/PyB0cnVlKSAhPT0gKHBhcmFtcy5zb3J0IVtpZHhdLmFzY2VuZGluZyA/PyB0cnVlKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB1cmxQYXJhbXNbJ3NvcnQnXSA9IGRhdGFMaXN0UGFyYW1zU29ydFRvVXJsUXVlcnkocGFyYW1zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocGFyYW1zLmZpbHRlcnMpIHtcbiAgICAgICAgT2JqZWN0LmtleXMocGFyYW1zLmZpbHRlcnMpLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAvLyBnbG9iYWwgc2VhcmNoIGZpbHRlciBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIHRoZSAncScgcGFyYW1ldGVyLCBubyBuZWVkIHRvIGluY2x1ZGUgaXQgaGVyZVxuICAgICAgICAgICAgaWYgKGsgPT09ICdnbG9iYWwnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFyYW1GaWx0ZXIgPSBwYXJhbXMuZmlsdGVycyFbayBhcyBrZXlvZiBvYmplY3RdITtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXIgPSBkZWZhdWx0cz8uZmlsdGVycz8uW2sgYXMga2V5b2Ygb2JqZWN0XTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVyICYmXG4gICAgICAgICAgICAgICAgKChBcnJheS5pc0FycmF5KGRlZmF1bHRGaWx0ZXIudmFsdWUpICYmXG4gICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocGFyYW1GaWx0ZXIudmFsdWUpICYmXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXIudmFsdWUubGVuZ3RoID09PSBwYXJhbUZpbHRlci52YWx1ZS5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlci52YWx1ZS5ldmVyeSgodiwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IChwYXJhbUZpbHRlci52YWx1ZSBhcyBBcnJheTxEYXRhTGlzdEZpbHRlclZhbHVlVHlwZT4pW2lkeF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmIHYgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gdmFsdWUuZ2V0VGltZSgpID09PSB2LmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIHZhbHVlID09PSB2O1xuICAgICAgICAgICAgICAgICAgICB9KSkgfHwgLy8gaGFuZGxlIGFycmF5c1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVyLnZhbHVlID09PSBwYXJhbUZpbHRlci52YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVyLm1hdGNoTW9kZSA9PT0gcGFyYW1GaWx0ZXIubWF0Y2hNb2RlICYmXG4gICAgICAgICAgICAgICAgKGRlZmF1bHRGaWx0ZXIuY2FzZVNlbnNpdGl2ZSA/PyBmYWxzZSkgPT09IChwYXJhbUZpbHRlci5jYXNlU2Vuc2l0aXZlID8/IGZhbHNlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcGFyYW1GaWx0ZXIudmFsdWUgPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXI/LnZhbHVlID09IG51bGwgJiZcbiAgICAgICAgICAgICAgICBwYXJhbUZpbHRlci5tYXRjaE1vZGUgIT09IEZpbHRlck1hdGNoTW9kZS5FeGlzdHMgJiZcbiAgICAgICAgICAgICAgICBwYXJhbUZpbHRlci5tYXRjaE1vZGUgIT09IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3RcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHBhcmFtRmlsdGVyLnZhbHVlID09IG51bGwgJiZcbiAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVyPy52YWx1ZSAhPSBudWxsICYmXG4gICAgICAgICAgICAgICAgcGFyYW1GaWx0ZXIubWF0Y2hNb2RlICE9PSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzICYmXG4gICAgICAgICAgICAgICAgcGFyYW1GaWx0ZXIubWF0Y2hNb2RlICE9PSBGaWx0ZXJNYXRjaE1vZGUuRG9lc05vdEV4aXN0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB1cmxQYXJhbXNbYCR7b3B0cz8ucHJlcGVuZEZpbHRlck5hbWUgPz8gJyd9JHtrfWBdID0gJ251bGwnO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdXJsUGFyYW1zW2Ake29wdHM/LnByZXBlbmRGaWx0ZXJOYW1lID8/ICcnfSR7a31gXSA9IGRhdGFMaXN0UGFyYW1zRmlsdGVyc1RvVXJsUXVlcnkocGFyYW1zLCBrLCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChkZWZhdWx0cz8uZmlsdGVycykge1xuICAgICAgICAvLyBhZGQgb3RoZXIgZGVmYXVsdHNcbiAgICAgICAgY29uc3QgcGFyYW1GaWx0ZXJLZXlzID0gcGFyYW1zLmZpbHRlcnMgPyBPYmplY3Qua2V5cyhwYXJhbXMuZmlsdGVycykgOiBbXTtcbiAgICAgICAgT2JqZWN0LmtleXMoZGVmYXVsdHMuZmlsdGVycylcbiAgICAgICAgICAgIC5maWx0ZXIoayA9PiBwYXJhbUZpbHRlcktleXMuaW5kZXhPZihrKSA8IDApXG4gICAgICAgICAgICAuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICB1cmxQYXJhbXNbYCR7b3B0cz8ucHJlcGVuZEZpbHRlck5hbWUgPz8gJyd9JHtrfWBdID0gZGF0YUxpc3RQYXJhbXNGaWx0ZXJzVG9VcmxRdWVyeShkZWZhdWx0cywgayk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsUGFyYW1zO1xufVxuXG4vKipcbiAqIE1lcmdlcyB0aGUgcHJvdmlkZWQgcGFyYW1ldGVycyB3aXRoIGRlZmF1bHQgdmFsdWVzIGFuZCByZXR1cm5zIHRoZSBtZXJnZWQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7RGF0YUxpc3RQYXJhbXN9IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIG1lcmdlIHdpdGggZGVmYXVsdHMuXG4gKiBAcGFyYW0ge0RhdGFMaXN0UGFyYW1zfSBkZWZhdWx0cyAtIFRoZSBkZWZhdWx0IHZhbHVlcyB0byBtZXJnZSB3aXRoIHBhcmFtcyAob3B0aW9uYWwsIGRlZmF1bHQgaXMgeyBsaW1pdDogMjUsIG9mZnNldDogMCB9KS5cbiAqIEByZXR1cm5zIHtEYXRhTGlzdFBhcmFtc30gLSBUaGUgbWVyZ2VkIHBhcmFtZXRlcnMgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEYXRhTGlzdFBhcmFtc1dpdGhEZWZhdWx0czxTb3J0cyA9IGFueSwgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGFueT4oXG4gICAgcGFyYW1zOiBEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz4sXG4gICAgZGVmYXVsdHM6IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPiA9IHtcbiAgICAgICAgbGltaXQ6IDI1LFxuICAgICAgICBvZmZzZXQ6IDBcbiAgICB9XG4pOiBEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz4ge1xuICAgIGNvbnN0IG1lcmdlZDogRGF0YUxpc3RQYXJhbXM8U29ydHMsIEZpbHRlcnM+ID0ge1xuICAgICAgICBsaW1pdDogcGFyYW1zLmxpbWl0ID8/IGRlZmF1bHRzLmxpbWl0LFxuICAgICAgICBvZmZzZXQ6IHBhcmFtcy5vZmZzZXQgPz8gZGVmYXVsdHMub2Zmc2V0LFxuICAgICAgICBzZWFyY2g6IHBhcmFtcy5zZWFyY2ggPz8gZGVmYXVsdHMuc2VhcmNoLFxuICAgICAgICBzb3J0OiAocGFyYW1zLnNvcnQgPz8gZGVmYXVsdHMuc29ydCk/Lm1hcChzID0+ICh7Li4uc30pKVxuICAgIH07XG5cbiAgICBpZiAocGFyYW1zLmZpbHRlcnMpIHtcbiAgICAgICAgbWVyZ2VkLmZpbHRlcnMgPSB7fSBhcyBEYXRhTGlzdEZpbHRlcnNUeXBlPEZpbHRlcnM+O1xuICAgICAgICBPYmplY3QuZW50cmllcyhwYXJhbXMuZmlsdGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiAobWVyZ2VkLmZpbHRlcnMhW2tleSBhcyBGaWx0ZXJzXSA9IHsuLi4odmFsdWUgYXMgRGF0YUxpc3RGaWx0ZXIpfSkpO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdHMuZmlsdGVycykge1xuICAgICAgICBpZiAoIW1lcmdlZC5maWx0ZXJzKSBtZXJnZWQuZmlsdGVycyA9IHt9IGFzIERhdGFMaXN0RmlsdGVyc1R5cGU8RmlsdGVycz47XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGRlZmF1bHRzLmZpbHRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgaWYgKG1lcmdlZC5maWx0ZXJzIVtrZXkgYXMgRmlsdGVyc10gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG1lcmdlZC5maWx0ZXJzIVtrZXkgYXMgRmlsdGVyc10gPSB7Li4uKHZhbHVlIGFzIERhdGFMaXN0RmlsdGVyKX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZWQ7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHBhcmFtZXRlcnMgdG8gYSBVUkwgcXVlcnkgc3RyaW5nIGZvciBzb3J0aW5nLlxuICogU29ydHMgYXJlIGZvcm1hdHRlZCBpbiBNZWRpdXMgZGF0YSBBUEkgc29ydCBxdWVyeSBsYW5ndWFnZTogYGFzYzpwcm9wMSxkZXNjOnByb3AyYCwgLi4uXG4gKlxuICogQHBhcmFtIHtEYXRhTGlzdFBhcmFtc30gcGFyYW1zIC0gQW4gb3B0aW9uYWwgb2JqZWN0IGNvbnRhaW5pbmcgc29ydCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBVUkwgcXVlcnkgb3IgdW5kZWZpbmVkIGlmIG5vIHNvcnQgcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRhTGlzdFBhcmFtc1NvcnRUb1VybFF1ZXJ5KHBhcmFtcz86IERhdGFMaXN0UGFyYW1zPGFueSwgYW55Pik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHBhcmFtcyAmJiBBcnJheS5pc0FycmF5KHBhcmFtcy5zb3J0KVxuICAgICAgICA/IHBhcmFtcy5zb3J0Lm1hcChzID0+IGAke3MuYXNjZW5kaW5nID09PSB0cnVlIHx8IHMuYXNjZW5kaW5nID09PSB1bmRlZmluZWQgPyAnYXNjJyA6ICdkZXNjJ306JHtTdHJpbmcocy5wcm9wZXJ0eSl9YCkuam9pbignLCcpXG4gICAgICAgIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3BlY2lmaWMgZmlsdGVyIHBhcmFtZXRlciAoYnkga2V5KSBmcm9tIERhdGFMaXN0UGFyYW1zIG9iamVjdCB0byBhIFVSTCBxdWVyeSBzdHJpbmcuXG4gKiBGaWx0ZXIga2V5cyBhcmUgXCJmbGF0dGVuZWRcIiBpbiB0aGUgbmV3IG9iamVjdCwgdmFsdWVzIGFyZSBmb3JtYXR0ZWQgaW4gTWVkaXVzIGRhdGEgQVBJIGZpbHRlciBxdWVyeSBsYW5ndWFnZTogYGNzOmVxOmFzZGAsIGBpbjphc2QscXdlYCwgYGV4YCwgLi4uXG4gKlxuICogQHBhcmFtIHtEYXRhTGlzdFBhcmFtczxhbnksIEZpbHRlcnM+IHwgdW5kZWZpbmVkfSBwYXJhbXMgLSBUaGUgRGF0YUxpc3RQYXJhbXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpbHRlcnMuXG4gKiBAcGFyYW0ge0ZpbHRlcnN9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGZpbHRlciB0byBjb252ZXJ0LlxuICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dOdWxsPWZhbHNlXSAtIEluZGljYXRlcyB3aGV0aGVyIHRvIGFsbG93IG51bGwgdmFsdWVzIGluIHRoZSBxdWVyeSBzdHJpbmcuXG4gKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gVGhlIFVSTCBxdWVyeSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzcGVjaWZpZWQgZmlsdGVyLCBvciB1bmRlZmluZWQgaWYgdGhlIGZpbHRlciBpcyBub3QgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRhTGlzdFBhcmFtc0ZpbHRlcnNUb1VybFF1ZXJ5PEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBzdHJpbmc+KFxuICAgIHBhcmFtczogRGF0YUxpc3RQYXJhbXM8YW55LCBGaWx0ZXJzPiB8IHVuZGVmaW5lZCxcbiAgICBrZXk6IEZpbHRlcnMsXG4gICAgYWxsb3dOdWxsID0gZmFsc2Vcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcGFyYW1GaWx0ZXIgPSBwYXJhbXM/LmZpbHRlcnM/LltrZXldO1xuICAgIHJldHVybiBkYXRhTGlzdFBhcmFtc0ZpbHRlclRvVXJsUXVlcnkocGFyYW1GaWx0ZXIsIGFsbG93TnVsbCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBmaWx0ZXIgdG8gYSBVUkwgcXVlcnkgc3RyaW5nLlxuICogRmlsdGVyIGtleXMgYXJlIFwiZmxhdHRlbmVkXCIgaW4gdGhlIG5ldyBvYmplY3QsIHZhbHVlcyBhcmUgZm9ybWF0dGVkIGluIE1lZGl1cyBkYXRhIEFQSSBmaWx0ZXIgcXVlcnkgbGFuZ3VhZ2U6IGBjczplcTphc2RgLCBgaW46YXNkLHF3ZWAsIGBleGAsIC4uLlxuICpcbiAqIEBwYXJhbSB7RGF0YUxpc3RGaWx0ZXJ9IHBhcmFtRmlsdGVyIC0gVGhlIGZpbHRlciBvYmplY3QgdG8gYmUgY29udmVydGVkLlxuICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dOdWxsPWZhbHNlXSAtIEluZGljYXRlcyB3aGV0aGVyIHRvIGFsbG93IG51bGwgdmFsdWVzIGluIHRoZSBmaWx0ZXIuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gLSBUaGUgZmlsdGVyIGNvbnZlcnRlZCB0byBhIFVSTCBxdWVyeSBzdHJpbmcsIG9yIHVuZGVmaW5lZCBpZiBubyBmaWx0ZXIgaXMgcHJvdmlkZWQgb3IgdGhlIGZpbHRlciBoYXMgZW1wdHkgb3IgaW52YWxpZCB2YWx1ZXMuXG4gKiBAdGhyb3dzIHtDb21tb25zSW50ZXJuYWxFcnJvcn0gLSBJZiB0aGUgZmlsdGVyIGhhcyBpbnZhbGlkIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGFMaXN0UGFyYW1zRmlsdGVyVG9VcmxRdWVyeShwYXJhbUZpbHRlcj86IERhdGFMaXN0RmlsdGVyLCBhbGxvd051bGwgPSBmYWxzZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmlsdGVyVmFsdWVBc0FycmF5ID0gQXJyYXkuaXNBcnJheShwYXJhbUZpbHRlcj8udmFsdWUpID8gcGFyYW1GaWx0ZXIhLnZhbHVlLmZpbHRlcih2ID0+IHYgIT09IHVuZGVmaW5lZCAmJiAoYWxsb3dOdWxsIHx8IHYgIT09IG51bGwpKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBtYXRjaE1vZGUgPSBwYXJhbUZpbHRlcj8ubWF0Y2hNb2RlID8/IEZpbHRlck1hdGNoTW9kZS5FcXVhbHM7XG4gICAgaWYgKFxuICAgICAgICBwYXJhbUZpbHRlciA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICghYWxsb3dOdWxsICYmIG1hdGNoTW9kZSAhPT0gJ2V4aXN0cycgJiYgbWF0Y2hNb2RlICE9PSAnZG9lc05vdEV4aXN0JyAmJiBwYXJhbUZpbHRlci52YWx1ZSA9PSBudWxsKSB8fFxuICAgICAgICAodHlwZW9mIHBhcmFtRmlsdGVyLnZhbHVlID09PSAnc3RyaW5nJyAmJiBwYXJhbUZpbHRlci52YWx1ZS5sZW5ndGggPT09IDApIHx8XG4gICAgICAgIChBcnJheS5pc0FycmF5KGZpbHRlclZhbHVlQXNBcnJheSkgJiYgZmlsdGVyVmFsdWVBc0FycmF5Lmxlbmd0aCA9PT0gMClcbiAgICApIHtcbiAgICAgICAgLy8gbm8gbmVlZCB0byBpbmNsdWRlIGZpbHRlcnMgZm9yIGVtcHR5IHZhbHVlc1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuICYmICEoQXJyYXkuaXNBcnJheShmaWx0ZXJWYWx1ZUFzQXJyYXkpICYmIGZpbHRlclZhbHVlQXNBcnJheS5sZW5ndGggPT09IDIpKSB7XG4gICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgRmlsdGVyIG1hdGNoIG1vZGUgYmV0d2VlbiByZXF1aXJlcyBleGFjdGx5IDIgdmFsdWVzOiAke3BhcmFtRmlsdGVyLnZhbHVlfWApO1xuICAgIH1cblxuICAgIGlmICgobWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuSW4gfHwgbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuTm90SW4pICYmICghQXJyYXkuaXNBcnJheShmaWx0ZXJWYWx1ZUFzQXJyYXkpIHx8IGZpbHRlclZhbHVlQXNBcnJheS5sZW5ndGggPT09IDApKSB7XG4gICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgRmlsdGVyIG1hdGNoIG1vZGUgJHttYXRjaE1vZGV9IHJlcXVpcmVzIG5vbi1lbXB0eSBhcnJheTogJHtwYXJhbUZpbHRlci52YWx1ZX1gKTtcbiAgICB9XG5cbiAgICBpZiAoKFtGaWx0ZXJNYXRjaE1vZGUuSW4sIEZpbHRlck1hdGNoTW9kZS5Ob3RJbiwgRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW5dIGFzIHN0cmluZ1tdKS5pbmRleE9mKG1hdGNoTW9kZSkgPT09IC0xICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyVmFsdWVBc0FycmF5KSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEZpbHRlciBtYXRjaCBtb2RlICR7bWF0Y2hNb2RlfSBtdXN0IG5vdCBiZSBhcnJheTogJHtwYXJhbUZpbHRlci52YWx1ZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBub1ZhbCA9IHBhcmFtRmlsdGVyLm1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cyB8fCBwYXJhbUZpbHRlci5tYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3Q7XG4gICAgY29uc3QgdXJsVmFsdWVQYXJ0ID0gbm9WYWwgPyAnJyA6IGA6JHtkYXRhTGlzdFBhcmFtc0ZpbHRlclZhbHVlVG9VcmxTdHJpbmcoZmlsdGVyVmFsdWVBc0FycmF5ID8/IHBhcmFtRmlsdGVyLnZhbHVlLCBhbGxvd051bGwpfWA7XG5cbiAgICByZXR1cm4gYCR7cGFyYW1GaWx0ZXIuY2FzZVNlbnNpdGl2ZSA/ICdjczonIDogcGFyYW1GaWx0ZXIuY2FzZVNlbnNpdGl2ZSA9PT0gZmFsc2UgPyAnY2k6JyA6ICcnfSR7RmlsdGVyTWF0Y2hNb2RlLmdldEFiYnJldmlhdGlvbihtYXRjaE1vZGUpID8/IG1hdGNoTW9kZX0ke3VybFZhbHVlUGFydH1gO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIFVSTCBxdWVyeSBwYXJhbWV0ZXJzIHRvIGEgRGF0YUxpc3RQYXJhbXMgb2JqZWN0LlxuICogU29ydHMgYXJlIGZvcm1hdHRlZCBmcm9tIE1lZGl1cyBkYXRhIEFQSSBzb3J0IHF1ZXJ5IGxhbmd1YWdlOiBgYXNjOnByb3AxLGRlc2M6cHJvcDJgLCAuLi5cbiAqIEZpbHRlciBrZXlzIGFyZSBhbGwga2V5cyBpbiBQYXJhbXMgb2JqZWN0IHRoYXQgYXJlIG5vdCBtYXRjaGVkIGVsc2V3aGVyZSwgdmFsdWVzIGFyZSBmb3JtYXR0ZWQgZnJvbSBNZWRpdXMgZGF0YSBBUEkgZmlsdGVyIHF1ZXJ5IGxhbmd1YWdlOiBgY3M6ZXE6YXNkYCwgYGluOmFzZCxxd2VgLCBgZXhgLCAuLi5cbiAqXG4gKiBAcGFyYW0ge1BhcmFtc30gdXJsUGFyYW1zIC0gVGhlIFVSTCBxdWVyeSBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIG9wdHMgQWRkaXRpb25hbCBvcHRpb25zIGZvciBjb252ZXJzaW9uOlxuICogIC0gc2VhcmNoQXNHbG9iYWwgLSBUaGUgVVJMIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gKiAgLSBwcmVwZW5kRmlsdGVyTmFtZSAtIEZpbHRlciBuYW1lcyBhcmUgcHJlcGVuZGVkIHdpdGggcHJvdmlkZWQgc3RyaW5nLlxuICogQHJldHVybiB7RGF0YUxpc3RQYXJhbXN9IC0gVGhlIGNvbnZlcnRlZCBEYXRhTGlzdFBhcmFtcyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVXJsUXVlcnlUb0RhdGFMaXN0UGFyYW1zKFxuICAgIHVybFBhcmFtczogUGFyYW1zLFxuICAgIG9wdHM/OiB7XG4gICAgICAgIHNlYXJjaEFzR2xvYmFsPzogYm9vbGVhbjtcbiAgICAgICAgcHJlcGVuZEZpbHRlck5hbWU/OiBzdHJpbmc7XG4gICAgfVxuKTogRGF0YUxpc3RQYXJhbXMge1xuICAgIGNvbnN0IHBhcmFtczogRGF0YUxpc3RQYXJhbXMgPSB7fTtcblxuICAgIE9iamVjdC5lbnRyaWVzKHVybFBhcmFtcykuZm9yRWFjaCgoW3VybFBhcmFtS2V5LCB1cmxQYXJhbVZhbHVlXSkgPT4ge1xuICAgICAgICBpZiAodXJsUGFyYW1LZXkgPT09ICdsaW1pdCcpIHtcbiAgICAgICAgICAgIHBhcmFtcy5saW1pdCA9ICt1cmxQYXJhbVZhbHVlO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHBhcmFtcy5saW1pdCkgfHwgcGFyYW1zLmxpbWl0IDwgMCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJhbXMubGltaXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodXJsUGFyYW1LZXkgPT09ICdvZmZzZXQnKSB7XG4gICAgICAgICAgICBwYXJhbXMub2Zmc2V0ID0gK3VybFBhcmFtVmFsdWU7XG4gICAgICAgICAgICBpZiAoaXNOYU4ocGFyYW1zLm9mZnNldCkgfHwgcGFyYW1zLm9mZnNldCA8IDApIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW1zLm9mZnNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh1cmxQYXJhbUtleSA9PT0gJ3EnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHVybFBhcmFtVmFsdWUgPT09ICdzdHJpbmcnICYmIHVybFBhcmFtVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaFF1ZXJ5ID0gdXJsUGFyYW1WYWx1ZS5zdGFydHNXaXRoKCdjczonKSB8fCB1cmxQYXJhbVZhbHVlLnN0YXJ0c1dpdGgoJ2NpOicpID8gdXJsUGFyYW1WYWx1ZS5zdWJzdHJpbmcoMykgOiB1cmxQYXJhbVZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhc2VTZW5zaXRpdmUgPSB1cmxQYXJhbVZhbHVlLnN0YXJ0c1dpdGgoJ2NzOicpO1xuXG4gICAgICAgICAgICAgICAgcGFyYW1zLnNlYXJjaCA9IHNlYXJjaFF1ZXJ5O1xuICAgICAgICAgICAgICAgIHBhcmFtcy5zZWFyY2hDYXNlU2Vuc2l0aXZlID0gY2FzZVNlbnNpdGl2ZTtcblxuICAgICAgICAgICAgICAgIGlmIChvcHRzPy5zZWFyY2hBc0dsb2JhbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmFtcy5maWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVycyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJzWydnbG9iYWwnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzZWFyY2hRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogRmlsdGVyTWF0Y2hNb2RlLkNvbnRhaW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZTogY2FzZVNlbnNpdGl2ZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh1cmxQYXJhbUtleSA9PT0gJ3NvcnQnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHVybFBhcmFtVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnNvcnQgPSB1cmxQYXJhbVZhbHVlLnNwbGl0KCcsJykubWFwKHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbZGlyZWN0aW9uLCBwcm9wZXJ0eV0gPSBzLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7cHJvcGVydHk6IChwcm9wZXJ0eSA/PyBkaXJlY3Rpb24pIGFzIGtleW9mIG9iamVjdCwgYXNjZW5kaW5nOiBkaXJlY3Rpb24gIT09ICdkZXNjJ307XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgU3RyaW5nIGlzIGV4cGVjdGVkIGFzIHZhbHVlIGZvciAnJHt1cmxQYXJhbUtleX0nIHdoZW4gY29udmVydGluZyBmcm9tIHVybFBhcmFtc2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCghb3B0cz8ucHJlcGVuZEZpbHRlck5hbWUgfHwgdXJsUGFyYW1LZXkuc3RhcnRzV2l0aChvcHRzLnByZXBlbmRGaWx0ZXJOYW1lKSkgJiYgdHlwZW9mIHVybFBhcmFtVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAodXJsUGFyYW1WYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBlbXB0eSBzdHJpbmcgc2hvdWxkIGJlIGlnbm9yZWRcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcktleSA9IG9wdHM/LnByZXBlbmRGaWx0ZXJOYW1lID8gdXJsUGFyYW1LZXkuc3Vic3RyaW5nKG9wdHMucHJlcGVuZEZpbHRlck5hbWUubGVuZ3RoKSA6IHVybFBhcmFtS2V5O1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyUGFydHMgPSB1cmxQYXJhbVZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICBsZXQgcGFydElkeCA9IDA7XG5cbiAgICAgICAgICAgIC8vIHJlbW92ZWQgZGVmYXVsdCBmaWx0ZXJcbiAgICAgICAgICAgIGlmIChmaWx0ZXJQYXJ0c1twYXJ0SWR4XSA9PT0gJ251bGwnKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJhbXMuZmlsdGVycykge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVycyA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyc1tmaWx0ZXJLZXkgYXMga2V5b2Ygb2JqZWN0XSA9IHt2YWx1ZTogbnVsbH07XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjYXNlIHNlbnNpdGl2ZVxuICAgICAgICAgICAgbGV0IGNhc2VTZW5zaXRpdmU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoZmlsdGVyUGFydHNbcGFydElkeF0gPT09ICdjcycgfHwgZmlsdGVyUGFydHNbcGFydElkeF0gPT09ICdjaScpIHtcbiAgICAgICAgICAgICAgICBjYXNlU2Vuc2l0aXZlID0gZmlsdGVyUGFydHNbcGFydElkeCsrXSA9PT0gJ2NzJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbWF0Y2ggbW9kZVxuICAgICAgICAgICAgY29uc3QgbWF0Y2hNb2RlID0gZmlsdGVyUGFydHNbcGFydElkeF0gPyAoRmlsdGVyTWF0Y2hNb2RlLmZyb21BYmJyZXZpYXRpb24oZmlsdGVyUGFydHNbcGFydElkeF0pID8/IGZpbHRlclBhcnRzW3BhcnRJZHhdKSA6IEZpbHRlck1hdGNoTW9kZS5FcXVhbHM7XG4gICAgICAgICAgICBwYXJ0SWR4Kys7XG5cbiAgICAgICAgICAgIGNvbnN0IG5vVmFsID0gbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzIHx8IG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdDtcblxuICAgICAgICAgICAgLy8gdmFsdWVcbiAgICAgICAgICAgIGxldCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQgfCBudWxsID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKCFub1ZhbCkge1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJQYXJ0cy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocGFydElkeCA9PT0gZmlsdGVyUGFydHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGZpbHRlclBhcnRzW3BhcnRJZHhdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydElkeCA8IGZpbHRlclBhcnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBhcnJheSB0aGF0IHNob3VsZCBub3QgYmUgYXJyYXksIHNvIGpvaW4gYmFjayB0b2dldGhlclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGZpbHRlclBhcnRzLnNsaWNlKHBhcnRJZHgsIGZpbHRlclBhcnRzLmxlbmd0aCkuam9pbignOicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIG1hdGNoTW9kZSAhPT0gRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cyAmJiBtYXRjaE1vZGUgIT09IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdmFsdWUgdW5kZWZpbmVkIGFuZCBtYXRjaCBtb2RlIGV4cGVjdHMgdmFsdWUsIHRoZW4gc2tpcFxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnbnVsbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgobWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuSW4gfHwgbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuTm90SW4gfHwgbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbikgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXlWYWw6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZXNlIG1hdGNoIG1vZGVzIGV4cGVjdCBhcnJheVxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuaW5kZXhPZignXCInKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2tlbnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudFRva2VuID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXhwbGljaXRRdW90ZXMgPSBmYWxzZTsgLy90b2tlbiBpcyBxdW90ZWQsIGUuZy4gaW46MSwyLFwiMjJcIlwiXCIsXCIsMTIzXCJcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcXVvdGVzT3BlbmVkID0gZmFsc2U7IC8vdG9rZW4gaGFzIHN0YXJ0ZWQgcHJvY2Vzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHF1b3Rlc0V4cGxpY2l0bHlDbG9zZWQgPSBmYWxzZTsgLy90b2tlbiBwcm9jZXNzaW5nIGhhcyBmaW5pc2hlZCwgYWZ0ZXIgc2luZ2xlIFwiIGluIHF1b3RlZCBtb2RlLCBvciBiZWZvcmUgLCBpbiBub3QgcXVvdGVkXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjID0gdmFsdWVbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNldCB0aGUgdG9rZW5pemVyIHdoZW4gc2VlaW5nIHRoZSB0b2tlbiBzZXBhcmF0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGlmIGVpdGhlcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcXVvdGVzIGhhdmUgbm90IGJlZW4gb3BlbmVkIHlldCAod2hlbiB0aGVyZSBhcmUgbm8gY2hhcmFjdGVycyBiZXR3ZWVuIHNlcGFyYXRvcnMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0b2tlbiBoYXMgYmVlbiBleHBsaWNpdGx5IGNsb3NlZCAod2hlbiB3ZSBhY3R1YWxseSBoYXZlIGV4cGxpY2l0IG9wZW5pbmcgaS5lLiwgcXVvdGVzIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3Igd2UgaGF2ZSBpbXBsaWNpdCBxdW90ZXMgKGkuZS4sIHF1b3RlcyBhcmUgbm90IHRoZSBmaXJzdCBjaGFyYWN0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICcsJyAmJiAoIXF1b3Rlc09wZW5lZCB8fCBxdW90ZXNFeHBsaWNpdGx5Q2xvc2VkIHx8ICFleHBsaWNpdFF1b3RlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2goY3VycmVudFRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFRva2VuID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3Rlc09wZW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZXNFeHBsaWNpdGx5Q2xvc2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxpY2l0UXVvdGVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICdcIicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNjYXBlZCBkb3VibGUtcXVvdGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHBsaWNpdFF1b3RlcyAmJiBpICsgMSA8IHZhbHVlLmxlbmd0aCAmJiB2YWx1ZVtpICsgMV0gPT09ICdcIicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbiArPSBjOyAvLyBBcHBlbmQgb25lIGRvdWJsZS1xdW90ZSB0byB0aGUgY3VycmVudCB0b2tlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrOyAvLyBTa2lwIHRoZSBuZXh0IGRvdWJsZS1xdW90ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGVuY291bnRlciBxdW90ZXMgYWdhaW4gYWZ0ZXIgdGhleSB3ZXJlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgPT4gd2UgY2xvc2UgdGhlIHRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV4cGxpY2l0UXVvdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZXNFeHBsaWNpdGx5Q2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbXBsaWNpdCBxdW90ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocXVvdGVzT3BlbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW4gKz0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBxdW90ZXMgYXJlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgPT4gZXhwbGljaXRseSBvcGVuIHRoZSB0b2tlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbiA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGVzT3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxpY2l0UXVvdGVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdW90ZXNFeHBsaWNpdGx5Q2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZXNPcGVuZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW4gKz0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdW90ZXNPcGVuZWQgJiYgIXF1b3Rlc0V4cGxpY2l0bHlDbG9zZWQgJiYgZXhwbGljaXRRdW90ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgbGFzdCB0b2tlbiBhZnRlciB0aGUgbG9vcCBlbmRzXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaChjdXJyZW50VG9rZW4udG9TdHJpbmcoKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5VmFsID0gdG9rZW5zO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlWYWwgPSB2YWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4gJiYgYXJyYXlWYWwubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFycmF5VmFsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHx8IChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZSEubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBmaWx0ZXIgd2l0aCBlbXB0eSB2YWx1ZSBpcyB0byBiZSBpZ25vcmVkXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhc2VTZW5zaXRpdmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghcGFyYW1zLmZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVycyA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwYXJhbXMuZmlsdGVyc1tmaWx0ZXJLZXkgYXMga2V5b2Ygb2JqZWN0XSA9IHt2YWx1ZTogdmFsdWUsIG1hdGNoTW9kZTogbWF0Y2hNb2RlLCBjYXNlU2Vuc2l0aXZlOiBjYXNlU2Vuc2l0aXZlfTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHBhcmFtcztcbn1cblxuLyoqXG4gKiBNYWtlcyBhIGNvcHkgb2YgdGhlIGdpdmVuIERhdGFMaXN0UGFyYW1zIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge0RhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPn0gcGFyYW1zIC0gVGhlIERhdGFMaXN0UGFyYW1zIG9iamVjdCB0byBiZSBjb3BpZWQuXG4gKiBAcmV0dXJucyB7RGF0YUxpc3RQYXJhbXM8U29ydHMsIEZpbHRlcnM+fSAtIFJldHVybnMgYSBuZXcgY29weSBvZiB0aGUgRGF0YUxpc3RQYXJhbXMgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weURhdGFMaXN0UGFyYW1zPFNvcnRzID0gc3RyaW5nLCBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0gc3RyaW5nPihwYXJhbXM6IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPik6IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPiB7XG4gICAgY29uc3QgY29weTogRGF0YUxpc3RQYXJhbXM8U29ydHMsIEZpbHRlcnM+ID0ge1xuICAgICAgICBvZmZzZXQ6IHBhcmFtcy5vZmZzZXQsXG4gICAgICAgIGxpbWl0OiBwYXJhbXMubGltaXQsXG4gICAgICAgIHNlYXJjaDogcGFyYW1zLnNlYXJjaFxuICAgIH07XG5cbiAgICBpZiAocGFyYW1zLnNvcnQpIHtcbiAgICAgICAgY29weS5zb3J0ID0gcGFyYW1zLnNvcnQ/Lm1hcChzID0+ICh7Li4uc30pKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5maWx0ZXJzKSB7XG4gICAgICAgIGNvcHkuZmlsdGVycyA9IE9iamVjdC5lbnRyaWVzKHBhcmFtcy5maWx0ZXJzKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHZhbHVlIGFzIERhdGFMaXN0RmlsdGVyO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICAgICAgW2tleV06IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZmlsdGVyVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBBcnJheS5pc0FycmF5KGZpbHRlclZhbHVlLnZhbHVlKSA/IFsuLi5maWx0ZXJWYWx1ZS52YWx1ZV0gOiBmaWx0ZXJWYWx1ZS52YWx1ZVxuICAgICAgICAgICAgICAgIH0gYXMgRGF0YUxpc3RGaWx0ZXJcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIHt9IGFzIERhdGFMaXN0RmlsdGVyc1R5cGU8RmlsdGVycz4pO1xuICAgIH1cblxuICAgIHJldHVybiBjb3B5O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgdmFsdWUgdG8gYSBVUkwgcXVlcnkgcGFyYW0gc3RyaW5nIHJlcHJlc2VudGF0aW9uLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgY29udmVydGVkLlxuICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dOdWxsPWZhbHNlXSAtIEluZGljYXRlcyB3aGV0aGVyIG51bGwgdmFsdWVzIGFyZSBhbGxvd2VkLlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIFVSTCBwYXJhbWV0ZXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlLlxuICogQHRocm93cyB7Q29tbW9uc0ludGVybmFsRXJyb3J9IElmIGFuIHVuZGVmaW5lZCB2YWx1ZSBpcyBwYXNzZWQgd2l0aG91dCBhbGxvd051bGwgc2V0IHRvIHRydWUuXG4gKiBAdGhyb3dzIHtDb21tb25zSW50ZXJuYWxFcnJvcn0gSWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCAoZXhjbHVkaW5nIERhdGUpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGF0YUxpc3RQYXJhbXNGaWx0ZXJWYWx1ZVRvVXJsU3RyaW5nKHZhbHVlOiB1bmtub3duLCBhbGxvd051bGwgPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsICYmIGFsbG93TnVsbCkgcmV0dXJuICdudWxsJztcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKCdVbmRlZmluZWQgdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRlZCB0byB1cmwgcGFyYW0uJyk7IC8vIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIHNob3VsZCBiZSBmaWx0ZXJlZCBvdXQgZWFybGllclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICAubWFwKHYgPT4gZGF0YUxpc3RQYXJhbXNGaWx0ZXJWYWx1ZVRvVXJsU3RyaW5nKHYsIGFsbG93TnVsbCkpXG4gICAgICAgICAgICAubWFwKHYgPT4gKHYuaW5kZXhPZignLCcpID49IDAgfHwgdi5pbmRleE9mKCdcIicpID49IDAgPyBgXCIke3YucmVwbGFjZUFsbCgnXCInLCAnXCJcIicpfVwiYCA6IHYpKVxuICAgICAgICAgICAgLmpvaW4oJywnKTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gZGF0ZVRvSXNvU3RyaW5nKHZhbHVlLCAnZGF0ZVRpbWUnLCB7dXRjOiB0cnVlfSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKCdGaWx0ZXIgdmFsdWUgY2Fubm90IGJlIG9iamVjdCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuIl19","/**\n * A base data provider class used for handling data operations.\n *\n * @tparam Model - The type of data this data provider will handle.\n * @tparam Service - The type of service used by this data provider (optional).\n * @tparam ServiceClass - The service type for the data provider (optional).\n */\nexport class DataProviderInst {\n constructor(serviceType) {\n this.serviceType = serviceType;\n }\n get isDataProvider() {\n return true;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5kYXRhLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvZGF0YS1wcm92aWRlcnMvYmFzZS5kYXRhLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUFDekIsWUFBbUMsV0FBeUI7UUFBekIsZ0JBQVcsR0FBWCxXQUFXLENBQWM7SUFBRyxDQUFDO0lBRWhFLElBQVcsY0FBYztRQUNyQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NlcnZpY2VDbGFzc09wdFR5cGV9IGZyb20gJy4uL21vZGVscy9jbGFzcy1zZXJ2aWNlLm1vZGVsJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZXhwb3J0IHR5cGUgSURhdGFQcm92aWRlcjxNb2RlbFR5cGUgPSBhbnksIFNlcnZpY2VUeXBlID0gYW55LCBTVCA9IFNlcnZpY2VDbGFzc09wdFR5cGU8U2VydmljZVR5cGU+PiA9IHtcbiAgICBzZXJ2aWNlVHlwZTogU1Q7XG4gICAgaXNEYXRhUHJvdmlkZXI6IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEEgYmFzZSBkYXRhIHByb3ZpZGVyIGNsYXNzIHVzZWQgZm9yIGhhbmRsaW5nIGRhdGEgb3BlcmF0aW9ucy5cbiAqXG4gKiBAdHBhcmFtIE1vZGVsIC0gVGhlIHR5cGUgb2YgZGF0YSB0aGlzIGRhdGEgcHJvdmlkZXIgd2lsbCBoYW5kbGUuXG4gKiBAdHBhcmFtIFNlcnZpY2UgLSBUaGUgdHlwZSBvZiBzZXJ2aWNlIHVzZWQgYnkgdGhpcyBkYXRhIHByb3ZpZGVyIChvcHRpb25hbCkuXG4gKiBAdHBhcmFtIFNlcnZpY2VDbGFzcyAtIFRoZSBzZXJ2aWNlIHR5cGUgZm9yIHRoZSBkYXRhIHByb3ZpZGVyICAob3B0aW9uYWwpLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YVByb3ZpZGVySW5zdDxNb2RlbCwgU2VydmljZSA9IGFueSwgU2VydmljZUNsYXNzID0gU2VydmljZUNsYXNzT3B0VHlwZTxTZXJ2aWNlPj4gaW1wbGVtZW50cyBJRGF0YVByb3ZpZGVyPE1vZGVsLCBTZXJ2aWNlLCBTZXJ2aWNlQ2xhc3M+IHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHNlcnZpY2VUeXBlOiBTZXJ2aWNlQ2xhc3MpIHt9XG5cbiAgICBwdWJsaWMgZ2V0IGlzRGF0YVByb3ZpZGVyKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG4iXX0=","import { effect, untracked } from '@angular/core';\n/**\n * Effect function with explicit declaration of dependencies. Dependencies will be tracked, whereas the main execution will not be.\n *\n * @param deps Array of dependencies to be tracked.\n * @param fn Function where dependencies will no longer be tracked.\n * @param opts Additional options:\n * - firstOnly Executes effect only once, then destroy it.\n */\nexport function effectWithDeps(deps, fn, opts) {\n let execCnt = 0;\n const ref = effect(() => {\n if (opts?.firstOnly) {\n if (execCnt > 0) {\n return;\n }\n ref.destroy();\n }\n const depsValues = deps.map(s => s());\n execCnt++;\n untracked(() => {\n fn(depsValues);\n });\n }, ...(ngDevMode ? [{ debugName: \"ref\" }] : []));\n return ref;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvcmVhY3Rpdml0eS9lZmZlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFZLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFNM0Q7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQzFCLElBQStDLEVBQy9DLEVBQTBCLEVBQzFCLElBQTRCO0lBRTVCLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNoQixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFO1FBQ3BCLElBQUksSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNkLE9BQU87WUFDWCxDQUFDO1lBQ0QsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QyxPQUFPLEVBQUUsQ0FBQztRQUNWLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWCxFQUFFLENBQUMsVUFBaUIsQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQywrQ0FBQyxDQUFDO0lBQ0gsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFZmZlY3RSZWYsIGVmZmVjdCwgdW50cmFja2VkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxudHlwZSBFZmZlY3RXaXRoRGVwc1ZhbHVlczxUPiA9IHtcbiAgICBbSyBpbiBrZXlvZiBUXTogKCkgPT4gVFtLXTtcbn07XG5cbi8qKlxuICogRWZmZWN0IGZ1bmN0aW9uIHdpdGggZXhwbGljaXQgZGVjbGFyYXRpb24gb2YgZGVwZW5kZW5jaWVzLiBEZXBlbmRlbmNpZXMgd2lsbCBiZSB0cmFja2VkLCB3aGVyZWFzIHRoZSBtYWluIGV4ZWN1dGlvbiB3aWxsIG5vdCBiZS5cbiAqXG4gKiBAcGFyYW0gZGVwcyBBcnJheSBvZiBkZXBlbmRlbmNpZXMgdG8gYmUgdHJhY2tlZC5cbiAqIEBwYXJhbSBmbiBGdW5jdGlvbiB3aGVyZSBkZXBlbmRlbmNpZXMgd2lsbCBubyBsb25nZXIgYmUgdHJhY2tlZC5cbiAqIEBwYXJhbSBvcHRzIEFkZGl0aW9uYWwgb3B0aW9uczpcbiAqICAgLSBmaXJzdE9ubHkgRXhlY3V0ZXMgZWZmZWN0IG9ubHkgb25jZSwgdGhlbiBkZXN0cm95IGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZWZmZWN0V2l0aERlcHM8SW5wdXQgZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10sIFBhcmFtcyA9IElucHV0PihcbiAgICBkZXBzOiByZWFkb25seSBbLi4uRWZmZWN0V2l0aERlcHNWYWx1ZXM8SW5wdXQ+XSxcbiAgICBmbjogKGRlcHM6IFBhcmFtcykgPT4gdm9pZCxcbiAgICBvcHRzPzoge2ZpcnN0T25seT86IGJvb2xlYW59XG4pOiBFZmZlY3RSZWYge1xuICAgIGxldCBleGVjQ250ID0gMDtcbiAgICBjb25zdCByZWYgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAob3B0cz8uZmlyc3RPbmx5KSB7XG4gICAgICAgICAgICBpZiAoZXhlY0NudCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWYuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlcHNWYWx1ZXMgPSBkZXBzLm1hcChzID0+IHMoKSk7XG4gICAgICAgIGV4ZWNDbnQrKztcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgIGZuKGRlcHNWYWx1ZXMgYXMgYW55KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlZjtcbn1cbiJdfQ==","import { ApplicationRef, Directive, ElementRef, EnvironmentInjector, Injector, ViewContainerRef, booleanAttribute, createComponent, inject, input, output } from '@angular/core';\nimport { CommonsInternalError } from '../error/error.model';\nimport { effectWithDeps } from '../reactivity/effect';\nimport * as i0 from \"@angular/core\";\nexport class ComponentDirective {\n constructor() {\n this.injector = inject(Injector);\n this.elementRef = inject(ElementRef);\n this.applicationRef = inject(ApplicationRef);\n this.viewContainerRef = inject(ViewContainerRef);\n this.component = input(undefined, ...(ngDevMode ? [{ debugName: \"component\", alias: 'mngComponent' }] : [{ alias: 'mngComponent' }]));\n this.componentIt = input(undefined, ...(ngDevMode ? [{ debugName: \"componentIt\", alias: 'injectionToken' }] : [{ alias: 'injectionToken' }]));\n this.inputs = input(...(ngDevMode ? [undefined, { debugName: \"inputs\" }] : []));\n this.attachToHost = input(false, ...(ngDevMode ? [{ debugName: \"attachToHost\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.parentInjector = input(...(ngDevMode ? [undefined, { debugName: \"parentInjector\" }] : []));\n this.instanceCreated = output();\n effectWithDeps([this.component, this.componentIt], ([componentInput, componentItInput]) => {\n let component = componentInput;\n const componentIt = componentItInput;\n if (!component && componentIt) {\n component = this.injector.get(componentIt, null, { optional: true }) ?? undefined;\n }\n if (!component) {\n throw new CommonsInternalError(`Component cannot be created, no component (${component}) or no or invalid injection token provided (${componentIt}).`);\n }\n const elementInjector = this.parentInjector() ?? this.injector;\n const environmentInjector = elementInjector.get(EnvironmentInjector, null, { optional: true }) ?? this.applicationRef.injector;\n if (this.attachToHost()) {\n this.componentRef = createComponent(component, {\n hostElement: this.elementRef.nativeElement,\n environmentInjector: environmentInjector,\n elementInjector: elementInjector\n });\n }\n else {\n this.viewContainerRef.clear();\n this.componentRef = this.viewContainerRef.createComponent(component, {\n environmentInjector: environmentInjector,\n injector: elementInjector\n });\n }\n const inputs = this.inputs();\n if (inputs) {\n for (const input in inputs) {\n this.componentRef.setInput(input, inputs[input]);\n }\n }\n if (this.attachToHost()) {\n this.applicationRef.attachView(this.componentRef.hostView);\n }\n if (this.componentRef) {\n this.instanceCreated.emit(this.componentRef.instance);\n }\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: ComponentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.1.7\", type: ComponentDirective, isStandalone: true, selector: \"[mngComponent]\", inputs: { component: { classPropertyName: \"component\", publicName: \"mngComponent\", isSignal: true, isRequired: false, transformFunction: null }, componentIt: { classPropertyName: \"componentIt\", publicName: \"injectionToken\", isSignal: true, isRequired: false, transformFunction: null }, inputs: { classPropertyName: \"inputs\", publicName: \"inputs\", isSignal: true, isRequired: false, transformFunction: null }, attachToHost: { classPropertyName: \"attachToHost\", publicName: \"attachToHost\", isSignal: true, isRequired: false, transformFunction: null }, parentInjector: { classPropertyName: \"parentInjector\", publicName: \"parentInjector\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { instanceCreated: \"instanceCreated\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: ComponentDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[mngComponent]'\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL2RpcmVjdGl2ZXMvY29tcG9uZW50LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsY0FBYyxFQUVkLFNBQVMsRUFDVCxVQUFVLEVBQ1YsbUJBQW1CLEVBRW5CLFFBQVEsRUFFUixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7O0FBS3BELE1BQU0sT0FBTyxrQkFBa0I7SUFnQjNCO1FBZmlCLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4QyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUU3QyxjQUFTLEdBQUcsS0FBSyxDQUFzQixTQUFTLDZDQUFHLEtBQUssRUFBRSxjQUFjLE9BQXRCLEVBQUMsS0FBSyxFQUFFLGNBQWMsRUFBQyxHQUFDLENBQUM7UUFDM0UsZ0JBQVcsR0FBRyxLQUFLLENBQTBCLFNBQVMsK0NBQUcsS0FBSyxFQUFFLGdCQUFnQixPQUF4QixFQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBQyxHQUFDLENBQUM7UUFDbkYsV0FBTSxHQUFHLEtBQUssNERBQW1DLENBQUM7UUFDbEQsaUJBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxnREFBRyxTQUFTLEVBQUUsZ0JBQWdCLE9BQTVCLEVBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFDLEdBQUMsQ0FBQztRQUMzRCxtQkFBYyxHQUFHLEtBQUssb0VBQXdCLENBQUM7UUFFL0Msb0JBQWUsR0FBRyxNQUFNLEVBQUssQ0FBQztRQUsxQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsY0FBYyxFQUFFLGdCQUFnQixDQUFDLEVBQUUsRUFBRTtZQUN0RixJQUFJLFNBQVMsR0FBRyxjQUFjLENBQUM7WUFDL0IsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7WUFDckMsSUFBSSxDQUFDLFNBQVMsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDNUIsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsSUFBSSxTQUFTLENBQUM7WUFDcEYsQ0FBQztZQUVELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDYixNQUFNLElBQUksb0JBQW9CLENBQUMsOENBQThDLFNBQVMsZ0RBQWdELFdBQVcsSUFBSSxDQUFDLENBQUM7WUFDM0osQ0FBQztZQUVELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQy9ELE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztZQUU3SCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUU7b0JBQzNDLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWE7b0JBQzFDLG1CQUFtQixFQUFFLG1CQUFtQjtvQkFDeEMsZUFBZSxFQUFFLGVBQWU7aUJBQ25DLENBQUMsQ0FBQztZQUNQLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBTSxTQUFTLEVBQUU7b0JBQ3RFLG1CQUFtQixFQUFFLG1CQUFtQjtvQkFDeEMsUUFBUSxFQUFFLGVBQWU7aUJBQzVCLENBQUMsQ0FBQztZQUNQLENBQUM7WUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0IsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDVCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUQsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0E1RFEsa0JBQWtCO2tHQUFsQixrQkFBa0I7OzJGQUFsQixrQkFBa0I7a0JBSDlCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdCQUFnQjtpQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFwcGxpY2F0aW9uUmVmLFxuICAgIENvbXBvbmVudFJlZixcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgIEluamVjdGlvblRva2VuLFxuICAgIEluamVjdG9yLFxuICAgIFR5cGUsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIGNyZWF0ZUNvbXBvbmVudCxcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG4gICAgb3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0NvbW1vbnNJbnRlcm5hbEVycm9yfSBmcm9tICcuLi9lcnJvci9lcnJvci5tb2RlbCc7XG5pbXBvcnQge2VmZmVjdFdpdGhEZXBzfSBmcm9tICcuLi9yZWFjdGl2aXR5L2VmZmVjdCc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW21uZ0NvbXBvbmVudF0nXG59KVxuZXhwb3J0IGNsYXNzIENvbXBvbmVudERpcmVjdGl2ZTxDPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwbGljYXRpb25SZWYgPSBpbmplY3QoQXBwbGljYXRpb25SZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcblxuICAgIHB1YmxpYyByZWFkb25seSBjb21wb25lbnQgPSBpbnB1dDxUeXBlPEM+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHthbGlhczogJ21uZ0NvbXBvbmVudCd9KTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50SXQgPSBpbnB1dDxJbmplY3Rpb25Ub2tlbjxUeXBlPEM+Pj4odW5kZWZpbmVkLCB7YWxpYXM6ICdpbmplY3Rpb25Ub2tlbid9KTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgaW5wdXRzID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZD4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgYXR0YWNoVG9Ib3N0ID0gaW5wdXQoZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcGFyZW50SW5qZWN0b3IgPSBpbnB1dDxJbmplY3RvciB8IHVuZGVmaW5lZD4oKTtcblxuICAgIHB1YmxpYyByZWFkb25seSBpbnN0YW5jZUNyZWF0ZWQgPSBvdXRwdXQ8Qz4oKTtcblxuICAgIHB1YmxpYyBjb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8Qz47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgZWZmZWN0V2l0aERlcHMoW3RoaXMuY29tcG9uZW50LCB0aGlzLmNvbXBvbmVudEl0XSwgKFtjb21wb25lbnRJbnB1dCwgY29tcG9uZW50SXRJbnB1dF0pID0+IHtcbiAgICAgICAgICAgIGxldCBjb21wb25lbnQgPSBjb21wb25lbnRJbnB1dDtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudEl0ID0gY29tcG9uZW50SXRJbnB1dDtcbiAgICAgICAgICAgIGlmICghY29tcG9uZW50ICYmIGNvbXBvbmVudEl0KSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gdGhpcy5pbmplY3Rvci5nZXQoY29tcG9uZW50SXQsIG51bGwsIHtvcHRpb25hbDogdHJ1ZX0pID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYENvbXBvbmVudCBjYW5ub3QgYmUgY3JlYXRlZCwgbm8gY29tcG9uZW50ICgke2NvbXBvbmVudH0pIG9yIG5vIG9yIGludmFsaWQgaW5qZWN0aW9uIHRva2VuIHByb3ZpZGVkICgke2NvbXBvbmVudEl0fSkuYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRJbmplY3RvciA9IHRoaXMucGFyZW50SW5qZWN0b3IoKSA/PyB0aGlzLmluamVjdG9yO1xuICAgICAgICAgICAgY29uc3QgZW52aXJvbm1lbnRJbmplY3RvciA9IGVsZW1lbnRJbmplY3Rvci5nZXQoRW52aXJvbm1lbnRJbmplY3RvciwgbnVsbCwge29wdGlvbmFsOiB0cnVlfSkgPz8gdGhpcy5hcHBsaWNhdGlvblJlZi5pbmplY3RvcjtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0YWNoVG9Ib3N0KCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IGNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgaG9zdEVsZW1lbnQ6IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudEluamVjdG9yOiBlbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50SW5qZWN0b3I6IGVsZW1lbnRJbmplY3RvclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQ8YW55Pihjb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogZW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0b3I6IGVsZW1lbnRJbmplY3RvclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpbnB1dHMgPSB0aGlzLmlucHV0cygpO1xuICAgICAgICAgICAgaWYgKGlucHV0cykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaW5wdXQgaW4gaW5wdXRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KGlucHV0LCBpbnB1dHNbaW5wdXRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaFRvSG9zdCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvblJlZi5hdHRhY2hWaWV3KHRoaXMuY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZUNyZWF0ZWQuZW1pdCh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==","import { Directive, TemplateRef, ViewContainerRef, inject, input } from '@angular/core';\nimport { effectWithDeps } from '../reactivity/effect';\nimport * as i0 from \"@angular/core\";\nexport class RerenderDirective {\n constructor() {\n this.templateRef = inject((TemplateRef));\n this.viewContainerRef = inject(ViewContainerRef);\n this.mngRerender = input.required(...(ngDevMode ? [{ debugName: \"mngRerender\" }] : []));\n effectWithDeps([this.mngRerender], () => {\n this.viewContainerRef.clear();\n this.viewContainerRef.createEmbeddedView(this.templateRef);\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RerenderDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.1.7\", type: RerenderDirective, isStandalone: true, selector: \"[mngRerender]\", inputs: { mngRerender: { classPropertyName: \"mngRerender\", publicName: \"mngRerender\", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RerenderDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[mngRerender]'\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVyZW5kZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvZGlyZWN0aXZlcy9yZXJlbmRlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV0RixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7O0FBS3BELE1BQU0sT0FBTyxpQkFBaUI7SUFNMUI7UUFMaUIsZ0JBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQSxXQUFvQixDQUFBLENBQUMsQ0FBQztRQUMzQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUU3QyxnQkFBVyxHQUFHLEtBQUssQ0FBQyxRQUFRLHNEQUFFLENBQUM7UUFHM0MsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsRUFBRTtZQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OEdBWFEsaUJBQWlCO2tHQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBSDdCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGVBQWU7aUJBQzVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmLCBpbmplY3QsIGlucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtlZmZlY3RXaXRoRGVwc30gZnJvbSAnLi4vcmVhY3Rpdml0eS9lZmZlY3QnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1ttbmdSZXJlbmRlcl0nXG59KVxuZXhwb3J0IGNsYXNzIFJlcmVuZGVyRGlyZWN0aXZlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmPHVua25vd24+KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgbW5nUmVyZW5kZXIgPSBpbnB1dC5yZXF1aXJlZCgpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGVmZmVjdFdpdGhEZXBzKFt0aGlzLm1uZ1JlcmVuZGVyXSwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=","import { Directive, TemplateRef, inject, input } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class TemplateDirective {\n constructor() {\n this.template = inject((TemplateRef));\n this.name = input.required(...(ngDevMode ? [{ debugName: \"name\", alias: 'mngTemplate' }] : [{ alias: 'mngTemplate' }]));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.1.7\", type: TemplateDirective, isStandalone: true, selector: \"[mngTemplate]\", inputs: { name: { classPropertyName: \"name\", publicName: \"mngTemplate\", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[mngTemplate]'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvZGlyZWN0aXZlcy90ZW1wbGF0ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFLcEUsTUFBTSxPQUFPLGlCQUFpQjtJQUg5QjtRQUlvQixhQUFRLEdBQUcsTUFBTSxDQUFDLENBQUEsV0FBZ0IsQ0FBQSxDQUFDLENBQUM7UUFFcEMsU0FBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLHVDQUFVLEtBQUssRUFBRSxhQUFhLE9BQXJCLEVBQUMsS0FBSyxFQUFFLGFBQWEsRUFBQyxHQUFDLENBQUM7S0FDekU7OEdBSlksaUJBQWlCO2tHQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBSDdCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGVBQWU7aUJBQzVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIFRlbXBsYXRlUmVmLCBpbmplY3QsIGlucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbbW5nVGVtcGxhdGVdJ1xufSlcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgcHVibGljIHJlYWRvbmx5IHRlbXBsYXRlID0gaW5qZWN0KFRlbXBsYXRlUmVmPGFueT4pO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IG5hbWUgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KHthbGlhczogJ21uZ1RlbXBsYXRlJ30pO1xufVxuIl19","/**\n * Returns array of names for constants in enum.\n * @param enumType Enum object.\n */\nexport function getEnumConstantNames(enumType) {\n return getEnumConstantNamesFromObject(enumType);\n}\n/**\n * Returns array of names for constants in enum.\n * @param enumObj Enum object.\n */\nexport function getEnumConstantNamesFromObject(enumObj) {\n // in number enum, the numbers are also represented in objects and should be filtered out\n return Object.keys(enumObj).filter(v => isNaN(+v));\n}\n/**\n * Returns array of values for constants in enum.\n * @param enumType Enum object.\n */\nexport function getEnumConstantValues(enumType) {\n return Object.keys(enumType)\n .filter(v => isNaN(+v))\n .map(v => enumType[v]);\n}\n/**\n * Returns array of string values for constants in enum.\n * @param enumType Enum object.\n */\nexport function getEnumConstantValuesAsString(enumType) {\n return Object.keys(enumType).map(v => enumType[v]);\n}\n/**\n * Returns array of number values for constants in enum.\n * @param enumType Enum object.\n */\nexport function getEnumConstantValuesAsNumber(enumType) {\n return Object.keys(enumType)\n .filter(v => !isNaN(+v))\n .map(v => +v);\n}\n/**\n * Returns array of type EnumValue for all constants in enum.\n * @param enumType Enum object.\n * @param nameAsValue If use name of constant as value (optional, default: false).\n * @param titlePath Base path for title to use as translation (optional).\n */\nexport function fromEnumConstantsAsValueArray(enumType, nameAsValue = false, titlePath) {\n return getEnumConstantNames(enumType).map(n => ({ name: n, title: `${titlePath ? `${titlePath}.` : ''}${n}`, value: nameAsValue ? n : enumType[n] }));\n}\n/**\n * Returns array of type EnumValue for provided values in enum.\n * @param enumType Enum object.\n * @param values Enum values (constants).\n * @param nameAsValue If use name of constant as value (optional, default: false).\n * @param titlePath Base path for title to use as translation (optional).\n */\nexport function fromEnumValuesAsValueArray(enumType, values, nameAsValue = false, titlePath) {\n return values.map(v => {\n const k = getEnumConstantName(enumType, v);\n return { name: k, title: `${titlePath ? `${titlePath}.` : ''}${k}`, value: nameAsValue ? k : v };\n });\n}\n/**\n * Gets constant name for value.\n * @param enumType Enum object.\n * @param value Value of enum constant.\n */\nexport function getEnumConstantName(enumType, value) {\n if (typeof value === 'string') {\n return getEnumConstantNames(enumType).find(c => enumType[c] === value) ?? null;\n }\n else {\n return typeof enumType[value] !== 'undefined' ? enumType[value] : null;\n }\n}\n/**\n * Gets constant name for value.\n * @param enumObj Enum object.\n * @param value Value of enum constant.\n */\nexport function getEnumConstantNameFromObject(enumObj, value) {\n const enumObjAny = enumObj;\n if (typeof value === 'string') {\n return getEnumConstantNamesFromObject(enumObj).find(c => enumObjAny[c] === value) ?? null;\n }\n else {\n return typeof enumObjAny[value] !== 'undefined' ? enumObjAny[value] : null;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvZW51bS9lbnVtLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0E7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFFBQWtCO0lBQ25ELE9BQU8sOEJBQThCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSw4QkFBOEIsQ0FBQyxPQUFlO0lBQzFELHlGQUF5RjtJQUN6RixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLFFBQWtCO0lBQ3BELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxRQUFrQjtJQUM1RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQWlCLENBQVcsQ0FBQyxDQUFDO0FBQ2pGLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsNkJBQTZCLENBQUMsUUFBa0I7SUFDNUQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUFDLFFBQWtCLEVBQUUsV0FBVyxHQUFHLEtBQUssRUFBRSxTQUFrQjtJQUNyRyxPQUFPLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQVcsRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUEsQ0FBQyxDQUFDO0FBQ2pLLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQWtDLFFBQWtCLEVBQUUsTUFBMkIsRUFBRSxXQUFXLEdBQUcsS0FBSyxFQUFFLFNBQWtCO0lBQ2hLLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNsQixNQUFNLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0MsT0FBTyxFQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQWMsQ0FBQztJQUNoSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFrQyxRQUFrQixFQUFFLEtBQW1CO0lBQ3hHLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUIsT0FBTyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ25GLENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxPQUFPLFFBQVEsQ0FBQyxLQUFxQixDQUFDLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBRSxRQUFRLENBQUMsS0FBcUIsQ0FBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdkgsQ0FBQztBQUNMLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUFrQyxPQUFlLEVBQUUsS0FBbUI7SUFDL0csTUFBTSxVQUFVLEdBQUcsT0FBYyxDQUFDO0lBQ2xDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUIsT0FBTyw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQzlGLENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFFLFVBQVUsQ0FBQyxLQUFLLENBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzNGLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFbnVtQ29uc3RhbnRUeXBlLCBFbnVtVHlwZX0gZnJvbSAnLi4vaGVscGVycy90eXBlLWhlbHBlcnMnO1xuaW1wb3J0IHtFbnVtVmFsdWV9IGZyb20gJy4vZW51bS5tb2RlbCc7XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiBuYW1lcyBmb3IgY29uc3RhbnRzIGluIGVudW0uXG4gKiBAcGFyYW0gZW51bVR5cGUgRW51bSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnVtQ29uc3RhbnROYW1lcyhlbnVtVHlwZTogRW51bVR5cGUpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50TmFtZXNGcm9tT2JqZWN0KGVudW1UeXBlKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFycmF5IG9mIG5hbWVzIGZvciBjb25zdGFudHMgaW4gZW51bS5cbiAqIEBwYXJhbSBlbnVtT2JqIEVudW0gb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bUNvbnN0YW50TmFtZXNGcm9tT2JqZWN0KGVudW1PYmo6IG9iamVjdCk6IEFycmF5PHN0cmluZz4ge1xuICAgIC8vIGluIG51bWJlciBlbnVtLCB0aGUgbnVtYmVycyBhcmUgYWxzbyByZXByZXNlbnRlZCBpbiBvYmplY3RzIGFuZCBzaG91bGQgYmUgZmlsdGVyZWQgb3V0XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGVudW1PYmopLmZpbHRlcih2ID0+IGlzTmFOKCt2KSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiB2YWx1ZXMgZm9yIGNvbnN0YW50cyBpbiBlbnVtLlxuICogQHBhcmFtIGVudW1UeXBlIEVudW0gb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bUNvbnN0YW50VmFsdWVzKGVudW1UeXBlOiBFbnVtVHlwZSk6IEFycmF5PEVudW1Db25zdGFudFR5cGU+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZW51bVR5cGUpXG4gICAgICAgIC5maWx0ZXIodiA9PiBpc05hTigrdikpXG4gICAgICAgIC5tYXAodiA9PiBlbnVtVHlwZVt2XSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiBzdHJpbmcgdmFsdWVzIGZvciBjb25zdGFudHMgaW4gZW51bS5cbiAqIEBwYXJhbSBlbnVtVHlwZSBFbnVtIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1Db25zdGFudFZhbHVlc0FzU3RyaW5nKGVudW1UeXBlOiBFbnVtVHlwZSk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhlbnVtVHlwZSkubWFwKHYgPT4gZW51bVR5cGVbdiBhcyBrZXlvZiBvYmplY3RdIGFzIHN0cmluZyk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiBudW1iZXIgdmFsdWVzIGZvciBjb25zdGFudHMgaW4gZW51bS5cbiAqIEBwYXJhbSBlbnVtVHlwZSBFbnVtIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1Db25zdGFudFZhbHVlc0FzTnVtYmVyKGVudW1UeXBlOiBFbnVtVHlwZSk6IEFycmF5PG51bWJlcj4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhlbnVtVHlwZSlcbiAgICAgICAgLmZpbHRlcih2ID0+ICFpc05hTigrdikpXG4gICAgICAgIC5tYXAodiA9PiArdik7XG59XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiB0eXBlIEVudW1WYWx1ZSBmb3IgYWxsIGNvbnN0YW50cyBpbiBlbnVtLlxuICogQHBhcmFtIGVudW1UeXBlIEVudW0gb2JqZWN0LlxuICogQHBhcmFtIG5hbWVBc1ZhbHVlIElmIHVzZSBuYW1lIG9mIGNvbnN0YW50IGFzIHZhbHVlIChvcHRpb25hbCwgZGVmYXVsdDogZmFsc2UpLlxuICogQHBhcmFtIHRpdGxlUGF0aCBCYXNlIHBhdGggZm9yIHRpdGxlIHRvIHVzZSBhcyB0cmFuc2xhdGlvbiAob3B0aW9uYWwpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUVudW1Db25zdGFudHNBc1ZhbHVlQXJyYXkoZW51bVR5cGU6IEVudW1UeXBlLCBuYW1lQXNWYWx1ZSA9IGZhbHNlLCB0aXRsZVBhdGg/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50TmFtZXMoZW51bVR5cGUpLm1hcChuID0+IDxFbnVtVmFsdWU+e25hbWU6IG4sIHRpdGxlOiBgJHt0aXRsZVBhdGggPyBgJHt0aXRsZVBhdGh9LmAgOiAnJ30ke259YCwgdmFsdWU6IG5hbWVBc1ZhbHVlID8gbiA6IGVudW1UeXBlW25dfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiB0eXBlIEVudW1WYWx1ZSBmb3IgcHJvdmlkZWQgdmFsdWVzIGluIGVudW0uXG4gKiBAcGFyYW0gZW51bVR5cGUgRW51bSBvYmplY3QuXG4gKiBAcGFyYW0gdmFsdWVzIEVudW0gdmFsdWVzIChjb25zdGFudHMpLlxuICogQHBhcmFtIG5hbWVBc1ZhbHVlIElmIHVzZSBuYW1lIG9mIGNvbnN0YW50IGFzIHZhbHVlIChvcHRpb25hbCwgZGVmYXVsdDogZmFsc2UpLlxuICogQHBhcmFtIHRpdGxlUGF0aCBCYXNlIHBhdGggZm9yIHRpdGxlIHRvIHVzZSBhcyB0cmFuc2xhdGlvbiAob3B0aW9uYWwpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUVudW1WYWx1ZXNBc1ZhbHVlQXJyYXk8RW51bUNvbnN0YW50ID0gRW51bUNvbnN0YW50VHlwZT4oZW51bVR5cGU6IEVudW1UeXBlLCB2YWx1ZXM6IEFycmF5PEVudW1Db25zdGFudD4sIG5hbWVBc1ZhbHVlID0gZmFsc2UsIHRpdGxlUGF0aD86IHN0cmluZykge1xuICAgIHJldHVybiB2YWx1ZXMubWFwKHYgPT4ge1xuICAgICAgICBjb25zdCBrID0gZ2V0RW51bUNvbnN0YW50TmFtZShlbnVtVHlwZSwgdik7XG4gICAgICAgIHJldHVybiB7bmFtZTogaywgdGl0bGU6IGAke3RpdGxlUGF0aCA/IGAke3RpdGxlUGF0aH0uYCA6ICcnfSR7a31gLCB2YWx1ZTogbmFtZUFzVmFsdWUgPyBrIDogdn0gYXMgRW51bVZhbHVlO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIEdldHMgY29uc3RhbnQgbmFtZSBmb3IgdmFsdWUuXG4gKiBAcGFyYW0gZW51bVR5cGUgRW51bSBvYmplY3QuXG4gKiBAcGFyYW0gdmFsdWUgVmFsdWUgb2YgZW51bSBjb25zdGFudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1Db25zdGFudE5hbWU8RW51bUNvbnN0YW50ID0gRW51bUNvbnN0YW50VHlwZT4oZW51bVR5cGU6IEVudW1UeXBlLCB2YWx1ZTogRW51bUNvbnN0YW50KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGdldEVudW1Db25zdGFudE5hbWVzKGVudW1UeXBlKS5maW5kKGMgPT4gZW51bVR5cGVbY10gPT09IHZhbHVlKSA/PyBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZW51bVR5cGVbdmFsdWUgYXMga2V5b2Ygb2JqZWN0XSAhPT0gJ3VuZGVmaW5lZCcgPyAoZW51bVR5cGVbdmFsdWUgYXMga2V5b2Ygb2JqZWN0XSBhcyBzdHJpbmcpIDogbnVsbDtcbiAgICB9XG59XG5cbi8qKlxuICogR2V0cyBjb25zdGFudCBuYW1lIGZvciB2YWx1ZS5cbiAqIEBwYXJhbSBlbnVtT2JqIEVudW0gb2JqZWN0LlxuICogQHBhcmFtIHZhbHVlIFZhbHVlIG9mIGVudW0gY29uc3RhbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnVtQ29uc3RhbnROYW1lRnJvbU9iamVjdDxFbnVtQ29uc3RhbnQgPSBFbnVtQ29uc3RhbnRUeXBlPihlbnVtT2JqOiBvYmplY3QsIHZhbHVlOiBFbnVtQ29uc3RhbnQpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBlbnVtT2JqQW55ID0gZW51bU9iaiBhcyBhbnk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGdldEVudW1Db25zdGFudE5hbWVzRnJvbU9iamVjdChlbnVtT2JqKS5maW5kKGMgPT4gZW51bU9iakFueVtjXSA9PT0gdmFsdWUpID8/IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBlbnVtT2JqQW55W3ZhbHVlXSAhPT0gJ3VuZGVmaW5lZCcgPyAoZW51bU9iakFueVt2YWx1ZV0gYXMgc3RyaW5nKSA6IG51bGw7XG4gICAgfVxufVxuIl19","export var LogLevelEnum;\n(function (LogLevelEnum) {\n LogLevelEnum[LogLevelEnum[\"Trace\"] = 0] = \"Trace\";\n LogLevelEnum[LogLevelEnum[\"Debug\"] = 1] = \"Debug\";\n LogLevelEnum[LogLevelEnum[\"Log\"] = 2] = \"Log\";\n LogLevelEnum[LogLevelEnum[\"Info\"] = 3] = \"Info\";\n LogLevelEnum[LogLevelEnum[\"Warning\"] = 4] = \"Warning\";\n LogLevelEnum[LogLevelEnum[\"Error\"] = 5] = \"Error\";\n})(LogLevelEnum || (LogLevelEnum = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvbG9nL2xvZy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSxZQU9YO0FBUEQsV0FBWSxZQUFZO0lBQ3BCLGlEQUFLLENBQUE7SUFDTCxpREFBSyxDQUFBO0lBQ0wsNkNBQUcsQ0FBQTtJQUNILCtDQUFJLENBQUE7SUFDSixxREFBTyxDQUFBO0lBQ1AsaURBQUssQ0FBQTtBQUNULENBQUMsRUFQVyxZQUFZLEtBQVosWUFBWSxRQU92QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIExvZ0xldmVsRW51bSB7XG4gICAgVHJhY2UsXG4gICAgRGVidWcsXG4gICAgTG9nLFxuICAgIEluZm8sXG4gICAgV2FybmluZyxcbiAgICBFcnJvclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ0VudHJ5IHtcbiAgICBsZXZlbDogTG9nTGV2ZWxFbnVtO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBtZXNzYWdlRGV0YWlscz86IHN0cmluZztcbiAgICB0aW1lc3RhbXA6IERhdGU7XG4gICAgdGltZXN0YW1wRm9ybWF0dGVkPzogc3RyaW5nO1xuICAgIGNhdGVnb3J5Pzogc3RyaW5nO1xuICAgIGVycm9yPzogRXJyb3I7XG4gICAgZGF0YT86IGFueVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ0NvbmZpZyB7XG4gICAgbGV2ZWw/OiBMb2dMZXZlbEVudW07XG4gICAgdGltZXN0YW1wRm9ybWF0Pzogc3RyaW5nO1xuICAgIGNhdGVnb3J5Pzoge1xuICAgICAgICBbY2F0ZWdvcnk6IHN0cmluZ106IHtcbiAgICAgICAgICAgIGxldmVsPzogTG9nTGV2ZWxFbnVtO1xuICAgICAgICB9O1xuICAgIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ2dlclNlcnZpY2Uge1xuICAgIGNyZWF0ZShjb250ZXh0OiBzdHJpbmcpOiBJTG9nZ2VyU2VydmljZTtcbiAgICB0cmFjZShtc2dPckVycm9yOiBzdHJpbmcgfCBFcnJvciwgLi4uZGF0YTogYW55W10pOiB2b2lkO1xuICAgIGRlYnVnKG1zZ09yRXJyb3I6IHN0cmluZyB8IEVycm9yLCAuLi5kYXRhOiBhbnlbXSk6IHZvaWQ7XG4gICAgbG9nKG1zZ09yRXJyb3I6IHN0cmluZyB8IEVycm9yLCBsb2dMZXZlbDogTG9nTGV2ZWxFbnVtLCBjYXRlZ29yeTogc3RyaW5nIHwgdW5kZWZpbmVkLCAuLi5kYXRhOiBhbnlbXSk6IHZvaWQ7XG4gICAgbG9nRW50cnkobG9nRW50cnk6IFBhcnRpYWw8TG9nRW50cnk+KTogdm9pZDtcbiAgICBpbmZvKG1zZ09yRXJyb3I6IHN0cmluZyB8IEVycm9yLCAuLi5kYXRhOiBhbnlbXSk6IHZvaWQ7XG4gICAgd2Fybihtc2dPckVycm9yOiBzdHJpbmcgfCBFcnJvciwgLi4uZGF0YTogYW55W10pOiB2b2lkO1xuICAgIGVycm9yKG1zZ09yRXJyb3I6IHN0cmluZyB8IEVycm9yLCAuLi5kYXRhOiBhbnlbXSk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ1B1Ymxpc2hlciB7XG4gICAgYWRkRW50cnkoZW50cnk6IExvZ0VudHJ5KTogdm9pZDtcbn1cbiJdfQ==","import { DatePipe } from '@angular/common';\nimport { CommonsInternalError } from '../error/error.model';\nimport { dateToIsoString } from '../helpers/date';\nimport { LogLevelEnum } from './log.model';\nexport class LoggerService {\n static { this._instance = new LoggerService(); }\n static { this._isInit = false; }\n static { this._publishers = []; }\n static { this._entriesBuffer = []; }\n static { this._categoryInstances = {}; }\n static { this._timestampFormat = 'yyyy-MM-dd HH:mm:ss.SSS'; }\n constructor() {\n // Temporary settings that cover logging calls before initialisation\n this.defaultLogLevel = LogLevelEnum.Info;\n this.datePipe = new DatePipe('en-US');\n // empty\n }\n static get() {\n return LoggerService._instance;\n }\n static configure(config) {\n if (config.timestampFormat) {\n LoggerService._timestampFormat = config.timestampFormat;\n }\n }\n static init(configurationService, publishers) {\n if (LoggerService._isInit) {\n return;\n }\n LoggerService._configurationService = configurationService;\n LoggerService._publishers = publishers;\n LoggerService._isInit = true;\n LoggerService._flushBuffer();\n }\n static _flushBuffer() {\n if (!LoggerService._isInit) {\n return;\n }\n LoggerService._entriesBuffer.forEach(e => this._instance._log(e));\n LoggerService._entriesBuffer = [];\n }\n static create(category) {\n return LoggerService._instance.create(category);\n }\n create(category) {\n if (this.category) {\n throw new CommonsInternalError(`Cannot create logger with category inside another category (${this.category}). Must create logger on root.`);\n }\n if (LoggerService._categoryInstances[category]) {\n return LoggerService._categoryInstances[category];\n }\n const logger = new LoggerService();\n logger.category = category;\n LoggerService._categoryInstances[category] = logger;\n return logger;\n }\n _processLog(msgOrError, logLevel, category = undefined, data) {\n const [timestamp, timestampFormatted] = [...this._getTimestamps()];\n const logEntry = {\n level: logLevel,\n message: typeof msgOrError === 'string' ? msgOrError : msgOrError.message,\n data: data,\n category: this.category ?? category,\n timestamp: timestamp,\n timestampFormatted: timestampFormatted ?? undefined\n };\n if (msgOrError instanceof Error) {\n // set error from message param\n logEntry.error = msgOrError;\n }\n else if (data?.length && data[0] instanceof Error) {\n // if first data is error, also consider as error\n logEntry.error = data[0];\n logEntry.data = data.splice(1);\n }\n this._log(logEntry);\n }\n _getTimestamps() {\n const timestamp = new Date();\n const timestampFormatted = this.datePipe.transform(timestamp, LoggerService._timestampFormat) ?? dateToIsoString(timestamp);\n return [timestamp, timestampFormatted];\n }\n _log(log) {\n if (!LoggerService._isInit) {\n // add to buffer\n LoggerService._entriesBuffer.push(log);\n return;\n }\n const logConfig = (LoggerService._configurationService?.getConfigValue)?.('log');\n if ((log.category && log.level < (logConfig?.category?.[log.category]?.level ?? logConfig?.level ?? this.defaultLogLevel)) ||\n (!log.category && log.level < (logConfig?.level ?? this.defaultLogLevel))) {\n return;\n }\n if (logConfig?.timestampFormat) {\n log.timestampFormatted = this.datePipe.transform(log.timestamp, logConfig.timestampFormat) ?? undefined;\n }\n LoggerService._publishers.forEach(p => p.addEntry(log));\n }\n trace(msgOrError, ...data) {\n this._processLog(msgOrError, LogLevelEnum.Trace, undefined, data);\n }\n debug(msgOrError, ...data) {\n this._processLog(msgOrError, LogLevelEnum.Debug, undefined, data);\n }\n log(msgOrError, logLevel = LogLevelEnum.Log, category = undefined, ...data) {\n this._processLog(msgOrError, logLevel, category, data);\n }\n logEntry(logEntry) {\n const [timestamp, timestampFormatted] = [...this._getTimestamps()];\n const logEntryFinal = {\n timestamp: timestamp,\n timestampFormatted: timestampFormatted ?? undefined,\n category: this.category ?? logEntry.category,\n message: '',\n messageDetails: logEntry.messageDetails,\n level: LogLevelEnum.Log,\n ...logEntry\n };\n this._log(logEntryFinal);\n }\n info(msgOrError, ...data) {\n this._processLog(msgOrError, LogLevelEnum.Info, undefined, data);\n }\n warn(msgOrError, ...data) {\n this._processLog(msgOrError, LogLevelEnum.Warning, undefined, data);\n }\n error(msgOrError, ...data) {\n this._processLog(msgOrError, LogLevelEnum.Error, undefined, data);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9sb2cvbG9nZ2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXpDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRCxPQUFPLEVBQXFELFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUU3RixNQUFNLE9BQU8sYUFBYTthQUNQLGNBQVMsR0FBa0IsSUFBSSxhQUFhLEVBQUUsQUFBckMsQ0FBc0M7YUFDL0MsWUFBTyxHQUFHLEtBQUssQUFBUixDQUFTO2FBRWhCLGdCQUFXLEdBQW9CLEVBQUUsQUFBdEIsQ0FBdUI7YUFDbEMsbUJBQWMsR0FBZSxFQUFFLEFBQWpCLENBQWtCO2FBQ2hDLHVCQUFrQixHQUFrQyxFQUFFLEFBQXBDLENBQXFDO2FBQ3ZELHFCQUFnQixHQUFHLHlCQUF5QixBQUE1QixDQUE2QjtJQVE1RDtRQUpBLG9FQUFvRTtRQUNuRCxvQkFBZSxHQUFpQixZQUFZLENBQUMsSUFBSSxDQUFDO1FBQzNELGFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUdyQyxRQUFRO0lBQ1osQ0FBQztJQUVNLE1BQU0sQ0FBQyxHQUFHO1FBQ2IsT0FBTyxhQUFhLENBQUMsU0FBUyxDQUFDO0lBQ25DLENBQUM7SUFFTSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQWtDO1FBQ3RELElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLGFBQWEsQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDO1FBQzVELENBQUM7SUFDTCxDQUFDO0lBRU0sTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBaUQsRUFBRSxVQUEyQjtRQUM3RixJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QixPQUFPO1FBQ1gsQ0FBQztRQUVELGFBQWEsQ0FBQyxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQztRQUMzRCxhQUFhLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUV2QyxhQUFhLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUM3QixhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxZQUFZO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekIsT0FBTztRQUNYLENBQUM7UUFDRCxhQUFhLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsYUFBYSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBZ0I7UUFDakMsT0FBTyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU0sTUFBTSxDQUFDLFFBQWdCO1FBQzFCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQywrREFBK0QsSUFBSSxDQUFDLFFBQVEsZ0NBQWdDLENBQUMsQ0FBQztRQUNqSixDQUFDO1FBQ0QsSUFBSSxhQUFhLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM3QyxPQUFPLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNuQyxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUUzQixhQUFhLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBRXBELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxXQUFXLENBQUMsVUFBMEIsRUFBRSxRQUFzQixFQUFFLFdBQStCLFNBQVMsRUFBRSxJQUFZO1FBQzFILE1BQU0sQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFFbkUsTUFBTSxRQUFRLEdBQWE7WUFDdkIsS0FBSyxFQUFFLFFBQVE7WUFDZixPQUFPLEVBQUUsT0FBTyxVQUFVLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPO1lBQ3pFLElBQUksRUFBRSxJQUFJO1lBQ1YsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUTtZQUNuQyxTQUFTLEVBQUUsU0FBUztZQUNwQixrQkFBa0IsRUFBRSxrQkFBa0IsSUFBSSxTQUFTO1NBQ3RELENBQUM7UUFFRixJQUFJLFVBQVUsWUFBWSxLQUFLLEVBQUUsQ0FBQztZQUM5QiwrQkFBK0I7WUFDL0IsUUFBUSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7UUFDaEMsQ0FBQzthQUFNLElBQUksSUFBSSxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxFQUFFLENBQUM7WUFDbEQsaURBQWlEO1lBQ2pELFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRU8sY0FBYztRQUNsQixNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzdCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1SCxPQUFPLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVPLElBQUksQ0FBQyxHQUFhO1FBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekIsZ0JBQWdCO1lBQ2hCLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU87UUFDWCxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsQ0FBQSxhQUFhLENBQUMscUJBQXFCLEVBQUUsY0FBYyxDQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRixJQUNJLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLElBQUksU0FBUyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdEgsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQzNFLENBQUM7WUFDQyxPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDO1lBQzdCLEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxlQUFlLENBQUMsSUFBSSxTQUFTLENBQUM7UUFDNUcsQ0FBQztRQUVELGFBQWEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTSxLQUFLLENBQUMsVUFBMEIsRUFBRSxHQUFHLElBQVc7UUFDbkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVNLEtBQUssQ0FBQyxVQUEwQixFQUFFLEdBQUcsSUFBVztRQUNuRCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRU0sR0FBRyxDQUFDLFVBQTBCLEVBQUUsV0FBeUIsWUFBWSxDQUFDLEdBQUcsRUFBRSxXQUErQixTQUFTLEVBQUUsR0FBRyxJQUFXO1FBQ3RJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVNLFFBQVEsQ0FBOEIsUUFBVztRQUNwRCxNQUFNLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sYUFBYSxHQUFhO1lBQzVCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLGtCQUFrQixFQUFFLGtCQUFrQixJQUFJLFNBQVM7WUFDbkQsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVE7WUFDNUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxjQUFjLEVBQUUsUUFBUSxDQUFDLGNBQWM7WUFDdkMsS0FBSyxFQUFFLFlBQVksQ0FBQyxHQUFHO1lBQ3ZCLEdBQUcsUUFBUTtTQUNkLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTSxJQUFJLENBQUMsVUFBMEIsRUFBRSxHQUFHLElBQVc7UUFDbEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVNLElBQUksQ0FBQyxVQUEwQixFQUFFLEdBQUcsSUFBVztRQUNsRCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQTBCLEVBQUUsR0FBRyxJQUFXO1FBQ25ELElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RhdGVQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQge0NvbW1vbnNJbnRlcm5hbEVycm9yfSBmcm9tICcuLi9lcnJvci9lcnJvci5tb2RlbCc7XG5pbXBvcnQge2RhdGVUb0lzb1N0cmluZ30gZnJvbSAnLi4vaGVscGVycy9kYXRlJztcbmltcG9ydCB7Q29tbW9uc0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9jb21tb25zLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQge0lMb2dQdWJsaXNoZXIsIElMb2dnZXJTZXJ2aWNlLCBMb2dDb25maWcsIExvZ0VudHJ5LCBMb2dMZXZlbEVudW19IGZyb20gJy4vbG9nLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIExvZ2dlclNlcnZpY2UgaW1wbGVtZW50cyBJTG9nZ2VyU2VydmljZSB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBMb2dnZXJTZXJ2aWNlID0gbmV3IExvZ2dlclNlcnZpY2UoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBfaXNJbml0ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2NvbmZpZ3VyYXRpb25TZXJ2aWNlPzogQ29tbW9uc0NvbmZpZ3VyYXRpb25TZXJ2aWNlO1xuICAgIHByaXZhdGUgc3RhdGljIF9wdWJsaXNoZXJzOiBJTG9nUHVibGlzaGVyW10gPSBbXTtcbiAgICBwcml2YXRlIHN0YXRpYyBfZW50cmllc0J1ZmZlcjogTG9nRW50cnlbXSA9IFtdO1xuICAgIHByaXZhdGUgc3RhdGljIF9jYXRlZ29yeUluc3RhbmNlczogUmVjb3JkPHN0cmluZywgTG9nZ2VyU2VydmljZT4gPSB7fTtcbiAgICBwcml2YXRlIHN0YXRpYyBfdGltZXN0YW1wRm9ybWF0ID0gJ3l5eXktTU0tZGQgSEg6bW06c3MuU1NTJztcblxuICAgIHByaXZhdGUgY2F0ZWdvcnk/OiBzdHJpbmc7XG5cbiAgICAvLyBUZW1wb3Jhcnkgc2V0dGluZ3MgdGhhdCBjb3ZlciBsb2dnaW5nIGNhbGxzIGJlZm9yZSBpbml0aWFsaXNhdGlvblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdExvZ0xldmVsOiBMb2dMZXZlbEVudW0gPSBMb2dMZXZlbEVudW0uSW5mbztcbiAgICBwcml2YXRlIGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKCdlbi1VUycpO1xuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLy8gZW1wdHlcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIExvZ2dlclNlcnZpY2UuX2luc3RhbmNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY29uZmlndXJlKGNvbmZpZzoge3RpbWVzdGFtcEZvcm1hdD86IHN0cmluZ30pIHtcbiAgICAgICAgaWYgKGNvbmZpZy50aW1lc3RhbXBGb3JtYXQpIHtcbiAgICAgICAgICAgIExvZ2dlclNlcnZpY2UuX3RpbWVzdGFtcEZvcm1hdCA9IGNvbmZpZy50aW1lc3RhbXBGb3JtYXQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGluaXQoY29uZmlndXJhdGlvblNlcnZpY2U6IENvbW1vbnNDb25maWd1cmF0aW9uU2VydmljZSwgcHVibGlzaGVyczogSUxvZ1B1Ymxpc2hlcltdKSB7XG4gICAgICAgIGlmIChMb2dnZXJTZXJ2aWNlLl9pc0luaXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIExvZ2dlclNlcnZpY2UuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlID0gY29uZmlndXJhdGlvblNlcnZpY2U7XG4gICAgICAgIExvZ2dlclNlcnZpY2UuX3B1Ymxpc2hlcnMgPSBwdWJsaXNoZXJzO1xuXG4gICAgICAgIExvZ2dlclNlcnZpY2UuX2lzSW5pdCA9IHRydWU7XG4gICAgICAgIExvZ2dlclNlcnZpY2UuX2ZsdXNoQnVmZmVyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2ZsdXNoQnVmZmVyKCkge1xuICAgICAgICBpZiAoIUxvZ2dlclNlcnZpY2UuX2lzSW5pdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIExvZ2dlclNlcnZpY2UuX2VudHJpZXNCdWZmZXIuZm9yRWFjaChlID0+IHRoaXMuX2luc3RhbmNlLl9sb2coZSkpO1xuICAgICAgICBMb2dnZXJTZXJ2aWNlLl9lbnRyaWVzQnVmZmVyID0gW107XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGUoY2F0ZWdvcnk6IHN0cmluZyk6IExvZ2dlclNlcnZpY2Uge1xuICAgICAgICByZXR1cm4gTG9nZ2VyU2VydmljZS5faW5zdGFuY2UuY3JlYXRlKGNhdGVnb3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlKGNhdGVnb3J5OiBzdHJpbmcpOiBMb2dnZXJTZXJ2aWNlIHtcbiAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgQ2Fubm90IGNyZWF0ZSBsb2dnZXIgd2l0aCBjYXRlZ29yeSBpbnNpZGUgYW5vdGhlciBjYXRlZ29yeSAoJHt0aGlzLmNhdGVnb3J5fSkuIE11c3QgY3JlYXRlIGxvZ2dlciBvbiByb290LmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChMb2dnZXJTZXJ2aWNlLl9jYXRlZ29yeUluc3RhbmNlc1tjYXRlZ29yeV0pIHtcbiAgICAgICAgICAgIHJldHVybiBMb2dnZXJTZXJ2aWNlLl9jYXRlZ29yeUluc3RhbmNlc1tjYXRlZ29yeV07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyU2VydmljZSgpO1xuICAgICAgICBsb2dnZXIuY2F0ZWdvcnkgPSBjYXRlZ29yeTtcblxuICAgICAgICBMb2dnZXJTZXJ2aWNlLl9jYXRlZ29yeUluc3RhbmNlc1tjYXRlZ29yeV0gPSBsb2dnZXI7XG5cbiAgICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcm9jZXNzTG9nKG1zZ09yRXJyb3I6IHN0cmluZyB8IEVycm9yLCBsb2dMZXZlbDogTG9nTGV2ZWxFbnVtLCBjYXRlZ29yeTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLCBkYXRhPzogYW55W10pIHtcbiAgICAgICAgY29uc3QgW3RpbWVzdGFtcCwgdGltZXN0YW1wRm9ybWF0dGVkXSA9IFsuLi50aGlzLl9nZXRUaW1lc3RhbXBzKCldO1xuXG4gICAgICAgIGNvbnN0IGxvZ0VudHJ5ID0gPExvZ0VudHJ5PntcbiAgICAgICAgICAgIGxldmVsOiBsb2dMZXZlbCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHR5cGVvZiBtc2dPckVycm9yID09PSAnc3RyaW5nJyA/IG1zZ09yRXJyb3IgOiBtc2dPckVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IHRoaXMuY2F0ZWdvcnkgPz8gY2F0ZWdvcnksXG4gICAgICAgICAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgIHRpbWVzdGFtcEZvcm1hdHRlZDogdGltZXN0YW1wRm9ybWF0dGVkID8/IHVuZGVmaW5lZFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChtc2dPckVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIC8vIHNldCBlcnJvciBmcm9tIG1lc3NhZ2UgcGFyYW1cbiAgICAgICAgICAgIGxvZ0VudHJ5LmVycm9yID0gbXNnT3JFcnJvcjtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhPy5sZW5ndGggJiYgZGF0YVswXSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAvLyBpZiBmaXJzdCBkYXRhIGlzIGVycm9yLCBhbHNvIGNvbnNpZGVyIGFzIGVycm9yXG4gICAgICAgICAgICBsb2dFbnRyeS5lcnJvciA9IGRhdGFbMF07XG4gICAgICAgICAgICBsb2dFbnRyeS5kYXRhID0gZGF0YS5zcGxpY2UoMSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2cobG9nRW50cnkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFRpbWVzdGFtcHMoKTogW0RhdGUsIHN0cmluZyB8IG51bGxdIHtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoKTtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wRm9ybWF0dGVkID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGltZXN0YW1wLCBMb2dnZXJTZXJ2aWNlLl90aW1lc3RhbXBGb3JtYXQpID8/IGRhdGVUb0lzb1N0cmluZyh0aW1lc3RhbXApO1xuICAgICAgICByZXR1cm4gW3RpbWVzdGFtcCwgdGltZXN0YW1wRm9ybWF0dGVkXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9sb2cobG9nOiBMb2dFbnRyeSkge1xuICAgICAgICBpZiAoIUxvZ2dlclNlcnZpY2UuX2lzSW5pdCkge1xuICAgICAgICAgICAgLy8gYWRkIHRvIGJ1ZmZlclxuICAgICAgICAgICAgTG9nZ2VyU2VydmljZS5fZW50cmllc0J1ZmZlci5wdXNoKGxvZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2dDb25maWcgPSBMb2dnZXJTZXJ2aWNlLl9jb25maWd1cmF0aW9uU2VydmljZT8uZ2V0Q29uZmlnVmFsdWU8TG9nQ29uZmlnPj8uKCdsb2cnKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGxvZy5jYXRlZ29yeSAmJiBsb2cubGV2ZWwgPCAobG9nQ29uZmlnPy5jYXRlZ29yeT8uW2xvZy5jYXRlZ29yeV0/LmxldmVsID8/IGxvZ0NvbmZpZz8ubGV2ZWwgPz8gdGhpcy5kZWZhdWx0TG9nTGV2ZWwpKSB8fFxuICAgICAgICAgICAgKCFsb2cuY2F0ZWdvcnkgJiYgbG9nLmxldmVsIDwgKGxvZ0NvbmZpZz8ubGV2ZWwgPz8gdGhpcy5kZWZhdWx0TG9nTGV2ZWwpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2dDb25maWc/LnRpbWVzdGFtcEZvcm1hdCkge1xuICAgICAgICAgICAgbG9nLnRpbWVzdGFtcEZvcm1hdHRlZCA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGxvZy50aW1lc3RhbXAsIGxvZ0NvbmZpZy50aW1lc3RhbXBGb3JtYXQpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIExvZ2dlclNlcnZpY2UuX3B1Ymxpc2hlcnMuZm9yRWFjaChwID0+IHAuYWRkRW50cnkobG9nKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRyYWNlKG1zZ09yRXJyb3I6IHN0cmluZyB8IEVycm9yLCAuLi5kYXRhOiBhbnlbXSkge1xuICAgICAgICB0aGlzLl9wcm9jZXNzTG9nKG1zZ09yRXJyb3IsIExvZ0xldmVsRW51bS5UcmFjZSwgdW5kZWZpbmVkLCBkYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVidWcobXNnT3JFcnJvcjogc3RyaW5nIHwgRXJyb3IsIC4uLmRhdGE6IGFueVtdKSB7XG4gICAgICAgIHRoaXMuX3Byb2Nlc3NMb2cobXNnT3JFcnJvciwgTG9nTGV2ZWxFbnVtLkRlYnVnLCB1bmRlZmluZWQsIGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2cobXNnT3JFcnJvcjogc3RyaW5nIHwgRXJyb3IsIGxvZ0xldmVsOiBMb2dMZXZlbEVudW0gPSBMb2dMZXZlbEVudW0uTG9nLCBjYXRlZ29yeTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLCAuLi5kYXRhOiBhbnlbXSkge1xuICAgICAgICB0aGlzLl9wcm9jZXNzTG9nKG1zZ09yRXJyb3IsIGxvZ0xldmVsLCBjYXRlZ29yeSwgZGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIGxvZ0VudHJ5PEUgZXh0ZW5kcyBQYXJ0aWFsPExvZ0VudHJ5Pj4obG9nRW50cnk6IEUpIHtcbiAgICAgICAgY29uc3QgW3RpbWVzdGFtcCwgdGltZXN0YW1wRm9ybWF0dGVkXSA9IFsuLi50aGlzLl9nZXRUaW1lc3RhbXBzKCldO1xuICAgICAgICBjb25zdCBsb2dFbnRyeUZpbmFsOiBMb2dFbnRyeSA9IHtcbiAgICAgICAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLFxuICAgICAgICAgICAgdGltZXN0YW1wRm9ybWF0dGVkOiB0aW1lc3RhbXBGb3JtYXR0ZWQgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IHRoaXMuY2F0ZWdvcnkgPz8gbG9nRW50cnkuY2F0ZWdvcnksXG4gICAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICAgIG1lc3NhZ2VEZXRhaWxzOiBsb2dFbnRyeS5tZXNzYWdlRGV0YWlscyxcbiAgICAgICAgICAgIGxldmVsOiBMb2dMZXZlbEVudW0uTG9nLFxuICAgICAgICAgICAgLi4ubG9nRW50cnlcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fbG9nKGxvZ0VudHJ5RmluYWwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbmZvKG1zZ09yRXJyb3I6IHN0cmluZyB8IEVycm9yLCAuLi5kYXRhOiBhbnlbXSkge1xuICAgICAgICB0aGlzLl9wcm9jZXNzTG9nKG1zZ09yRXJyb3IsIExvZ0xldmVsRW51bS5JbmZvLCB1bmRlZmluZWQsIGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3YXJuKG1zZ09yRXJyb3I6IHN0cmluZyB8IEVycm9yLCAuLi5kYXRhOiBhbnlbXSkge1xuICAgICAgICB0aGlzLl9wcm9jZXNzTG9nKG1zZ09yRXJyb3IsIExvZ0xldmVsRW51bS5XYXJuaW5nLCB1bmRlZmluZWQsIGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlcnJvcihtc2dPckVycm9yOiBzdHJpbmcgfCBFcnJvciwgLi4uZGF0YTogYW55W10pIHtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0xvZyhtc2dPckVycm9yLCBMb2dMZXZlbEVudW0uRXJyb3IsIHVuZGVmaW5lZCwgZGF0YSk7XG4gICAgfVxufVxuIl19","export function objectDeepCopy(obj, options) {\n if (typeof obj !== 'object' || obj === null || Array.isArray(obj)) {\n return obj;\n }\n // copy known object types by directly creating\n if (obj instanceof Date) {\n return new Date(+obj);\n }\n else if (obj instanceof File) {\n return new File([obj], obj.name, {\n type: obj.type,\n lastModified: obj.lastModified\n });\n }\n let copy;\n if (options?.mapGettersToProperties) {\n copy = {};\n }\n else {\n copy = options?.objectPrototype ? Object.create(options.objectPrototype['prototype']) : Object.create(Object.getPrototypeOf(obj));\n Object.assign(copy, obj);\n }\n for (const key of getObjectProperties(obj)) {\n const prop = obj[key];\n copy[key] = handleProp(prop, { mapGettersToProperties: options?.mapGettersToProperties });\n }\n if (options?.mapGettersToProperties) {\n for (const getterKey of getObjectGetters(obj)) {\n const prop = obj[getterKey];\n copy[getterKey] = handleProp(prop, { mapGettersToProperties: options?.mapGettersToProperties });\n }\n }\n return copy;\n}\nexport function objectDeepMerge(target, source) {\n if (!isObject(source)) {\n return target;\n }\n for (const key of getObjectProperties(source)) {\n if (isObject(source[key])) {\n if (isObject(target[key])) {\n target[key] = objectDeepMerge(target[key], source[key]);\n }\n else {\n target[key] = objectDeepCopy(source[key]);\n }\n }\n else if (Array.isArray(source[key])) {\n if (!Array.isArray(target[key])) {\n target[key] = source[key].map(i => (isObject(i) ? objectDeepMerge({}, i) : i));\n }\n }\n else if (typeof target[key] === 'undefined') {\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction isObject(obj) {\n return typeof obj === 'object' && obj !== null && !Array.isArray(obj);\n}\nfunction handleProp(prop, options) {\n if (Array.isArray(prop)) {\n return prop.map(i => objectDeepCopy(i, options));\n }\n else if (typeof prop === 'object' && prop !== null) {\n return objectDeepCopy(prop, options);\n }\n else {\n return prop;\n }\n}\nexport function getObjectProperties(obj) {\n return Object.keys(obj);\n}\nexport function getObjectGetters(obj) {\n const getterSet = new Set();\n let currObj = obj;\n while (currObj) {\n const getters = Object.entries(Object.getOwnPropertyDescriptors(currObj))\n .filter(([, descriptor]) => typeof descriptor.get === 'function')\n .filter(([key]) => key !== '__proto__')\n .map(([key]) => key);\n for (const getter of getters) {\n getterSet.add(getter);\n }\n currObj = Object.getPrototypeOf(currObj);\n }\n return Array.from(getterSet);\n}\nexport function getObjectPropertyByPath(value, path) {\n if (path === '$') {\n // only return the root\n return value;\n }\n // Check for leading root object notation\n if (path.startsWith('$')) {\n path = path.substring(1);\n }\n // Check for leading .\n if (path.startsWith('.')) {\n path = path.substring(1);\n }\n if (path.indexOf('.') >= 0) {\n const pathSplit = path.split('.');\n let currValue = value;\n for (const p of pathSplit) {\n if (typeof currValue === 'undefined' || currValue === null) {\n return currValue;\n }\n if (!p.length) {\n // empty path, return current value\n return currValue;\n }\n const leftBracketIdx = p.indexOf('[');\n if (leftBracketIdx >= 0 && p.endsWith(']')) {\n // should be reference to array\n const arrayPath = p.substring(0, leftBracketIdx);\n const arrayIdx = +p.substring(leftBracketIdx + 1, p.length - 1);\n const array = currValue[arrayPath];\n if (Array.isArray(array)) {\n if (arrayIdx >= 0 && arrayIdx < array.length) {\n // valid index, continue on the path\n currValue = array[arrayIdx];\n continue;\n }\n }\n return undefined;\n }\n else if (typeof currValue === 'object') {\n currValue = currValue[p];\n }\n }\n return currValue;\n }\n else {\n return value[path];\n }\n}\nexport function flattenObjectKeys(objectModel) {\n const flatten = (object, parent) => {\n let results = [];\n for (const key in object) {\n const value = object[key];\n const thisKey = parent ? `${parent}.${key}` : `${key}`;\n results = results.concat(isObject(value) ? flatten(value, thisKey) : [[`${thisKey}`, value]]);\n }\n return results;\n };\n return flatten(objectModel);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvaGVscGVycy9vYmplY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0JBLE1BQU0sVUFBVSxjQUFjLENBQXlCLEdBQU0sRUFBRSxPQUE0QjtJQUN2RixJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNoRSxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRCwrQ0FBK0M7SUFDL0MsSUFBSSxHQUFHLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDdEIsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7U0FBTSxJQUFJLEdBQUcsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUM3QixPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRTtZQUM3QixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7WUFDZCxZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVk7U0FDakMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDO0lBQ1QsSUFBSSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2QsQ0FBQztTQUFNLENBQUM7UUFDSixJQUFJLEdBQUcsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLFdBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsSixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFB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QUFHLENBQUMsQ0FBQztZQUMxQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBRXZELE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDLENBQUM7SUFFRixPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDbGFzc1R5cGV9IGZyb20gJy4uL21vZGVscy9jbGFzcy1zZXJ2aWNlLm1vZGVsJztcblxuaW50ZXJmYWNlIERlZXBDb3B5UHJvcHNPcHRpb25zIHtcbiAgICBtYXBHZXR0ZXJzVG9Qcm9wZXJ0aWVzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWVwQ29weU9wdGlvbnM8UCA9IG9iamVjdD4gZXh0ZW5kcyBEZWVwQ29weVByb3BzT3B0aW9ucyB7XG4gICAgb2JqZWN0UHJvdG90eXBlPzogQ2xhc3NUeXBlPFA+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0RGVlcENvcHk8VCA9IG9iamVjdCwgUCA9IG9iamVjdD4ob2JqOiBULCBvcHRpb25zOiBEZWVwQ29weU9wdGlvbnM8UD4gJiB7bWFwR2V0dGVyc1RvUHJvcGVydGllczogdHJ1ZX0pOiBUIHwgUmVjb3JkPHN0cmluZywgYW55PjtcbmV4cG9ydCBmdW5jdGlvbiBvYmplY3REZWVwQ29weTxUID0gb2JqZWN0LCBQID0gb2JqZWN0PihvYmo6IFQsIG9wdGlvbnM6IERlZXBDb3B5T3B0aW9uczxQPiAmIHtvYmplY3RQcm90b3R5cGU6IENsYXNzVHlwZTxQPn0gJiB7bWFwR2V0dGVyc1RvUHJvcGVydGllcz86IGZhbHNlfSk6IFA7XG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0RGVlcENvcHk8VCA9IG9iamVjdCwgUCA9IG9iamVjdD4oXG4gICAgb2JqOiBULFxuICAgIG9wdGlvbnM6IERlZXBDb3B5T3B0aW9uczxQPiAmIHtvYmplY3RQcm90b3R5cGU6IENsYXNzVHlwZTxQPn0gJiB7bWFwR2V0dGVyc1RvUHJvcGVydGllczogdHJ1ZX1cbik6IFAgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdERlZXBDb3B5PFQgPSBvYmplY3QsIFAgPSBvYmplY3Q+KG9iajogVCwgb3B0aW9ucz86IERlZXBDb3B5T3B0aW9uczxQPik6IFQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3REZWVwQ29weTxUID0gb2JqZWN0LCBQID0gb2JqZWN0PihvYmo6IFQsIG9wdGlvbnM/OiBEZWVwQ29weU9wdGlvbnM8UD4pOiBUIHwgUCB8IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgLy8gY29weSBrbm93biBvYmplY3QgdHlwZXMgYnkgZGlyZWN0bHkgY3JlYXRpbmdcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoK29iaik7XG4gICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsZShbb2JqXSwgb2JqLm5hbWUsIHtcbiAgICAgICAgICAgIHR5cGU6IG9iai50eXBlLFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiBvYmoubGFzdE1vZGlmaWVkXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBjb3B5O1xuICAgIGlmIChvcHRpb25zPy5tYXBHZXR0ZXJzVG9Qcm9wZXJ0aWVzKSB7XG4gICAgICAgIGNvcHkgPSB7fTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb3B5ID0gb3B0aW9ucz8ub2JqZWN0UHJvdG90eXBlID8gT2JqZWN0LmNyZWF0ZShvcHRpb25zLm9iamVjdFByb3RvdHlwZVsncHJvdG90eXBlJyBhcyBrZXlvZiBvYmplY3RdKSA6IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikpO1xuICAgICAgICBPYmplY3QuYXNzaWduKGNvcHksIG9iaik7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgZ2V0T2JqZWN0UHJvcGVydGllcyhvYmopKSB7XG4gICAgICAgIGNvbnN0IHByb3AgPSBvYmpba2V5IGFzIGtleW9mIG9iamVjdF07XG4gICAgICAgIGNvcHlba2V5XSA9IGhhbmRsZVByb3AocHJvcCwge21hcEdldHRlcnNUb1Byb3BlcnRpZXM6IG9wdGlvbnM/Lm1hcEdldHRlcnNUb1Byb3BlcnRpZXN9KTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8ubWFwR2V0dGVyc1RvUHJvcGVydGllcykge1xuICAgICAgICBmb3IgKGNvbnN0IGdldHRlcktleSBvZiBnZXRPYmplY3RHZXR0ZXJzKG9iaikpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3AgPSBvYmpbZ2V0dGVyS2V5IGFzIGtleW9mIG9iamVjdF07XG4gICAgICAgICAgICBjb3B5W2dldHRlcktleV0gPSBoYW5kbGVQcm9wKHByb3AsIHttYXBHZXR0ZXJzVG9Qcm9wZXJ0aWVzOiBvcHRpb25zPy5tYXBHZXR0ZXJzVG9Qcm9wZXJ0aWVzfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29weTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdERlZXBNZXJnZSh0YXJnZXQ6IFJlY29yZDxzdHJpbmcsIGFueT4sIHNvdXJjZTogUmVjb3JkPHN0cmluZywgYW55Pik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGlmICghaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGdldE9iamVjdFByb3BlcnRpZXMoc291cmNlKSkge1xuICAgICAgICBpZiAoaXNPYmplY3Qoc291cmNlW2tleV0pKSB7XG4gICAgICAgICAgICBpZiAoaXNPYmplY3QodGFyZ2V0W2tleV0pKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBvYmplY3REZWVwTWVyZ2UodGFyZ2V0W2tleV0sIHNvdXJjZVtrZXldKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBvYmplY3REZWVwQ29weShzb3VyY2Vba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2Vba2V5XSkpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0YXJnZXRba2V5XSkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IChzb3VyY2Vba2V5XSBhcyBBcnJheTx1bmtub3duPikubWFwKGkgPT4gKGlzT2JqZWN0KGkpID8gb2JqZWN0RGVlcE1lcmdlKHt9LCBpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA6IGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGFyZ2V0W2tleV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3Qob2JqOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KG9iaik7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVByb3AocHJvcDogYW55LCBvcHRpb25zPzogRGVlcENvcHlQcm9wc09wdGlvbnMpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wKSkge1xuICAgICAgICByZXR1cm4gcHJvcC5tYXAoaSA9PiBvYmplY3REZWVwQ29weShpLCBvcHRpb25zKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcHJvcCA9PT0gJ29iamVjdCcgJiYgcHJvcCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gb2JqZWN0RGVlcENvcHkocHJvcCwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHByb3A7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T2JqZWN0UHJvcGVydGllcyhvYmo6IG9iamVjdCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T2JqZWN0R2V0dGVycyhvYmo6IGFueSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBnZXR0ZXJTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBsZXQgY3Vyck9iaiA9IG9iajtcblxuICAgIHdoaWxlIChjdXJyT2JqKSB7XG4gICAgICAgIGNvbnN0IGdldHRlcnMgPSBPYmplY3QuZW50cmllcyhPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjdXJyT2JqKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFssIGRlc2NyaXB0b3JdKSA9PiB0eXBlb2YgZGVzY3JpcHRvci5nZXQgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICAuZmlsdGVyKChba2V5XSkgPT4ga2V5ICE9PSAnX19wcm90b19fJylcbiAgICAgICAgICAgIC5tYXAoKFtrZXldKSA9PiBrZXkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZ2V0dGVyIG9mIGdldHRlcnMpIHtcbiAgICAgICAgICAgIGdldHRlclNldC5hZGQoZ2V0dGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJPYmogPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY3Vyck9iaik7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oZ2V0dGVyU2V0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9iamVjdFByb3BlcnR5QnlQYXRoKHZhbHVlOiBhbnksIHBhdGg6IHN0cmluZyk6IGFueSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHBhdGggPT09ICckJykge1xuICAgICAgICAvLyBvbmx5IHJldHVybiB0aGUgcm9vdFxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxlYWRpbmcgcm9vdCBvYmplY3Qgbm90YXRpb25cbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKCckJykpIHtcbiAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDEpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsZWFkaW5nIC5cbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDEpO1xuICAgIH1cblxuICAgIGlmIChwYXRoLmluZGV4T2YoJy4nKSA+PSAwKSB7XG4gICAgICAgIGNvbnN0IHBhdGhTcGxpdCA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICAgICAgbGV0IGN1cnJWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcGF0aFNwbGl0KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgY3VyclZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJWYWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFwLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8vIGVtcHR5IHBhdGgsIHJldHVybiBjdXJyZW50IHZhbHVlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJWYWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbGVmdEJyYWNrZXRJZHggPSBwLmluZGV4T2YoJ1snKTtcbiAgICAgICAgICAgIGlmIChsZWZ0QnJhY2tldElkeCA+PSAwICYmIHAuZW5kc1dpdGgoJ10nKSkge1xuICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSByZWZlcmVuY2UgdG8gYXJyYXlcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheVBhdGggPSBwLnN1YnN0cmluZygwLCBsZWZ0QnJhY2tldElkeCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyYXlJZHggPSArcC5zdWJzdHJpbmcobGVmdEJyYWNrZXRJZHggKyAxLCBwLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5ID0gY3VyclZhbHVlW2FycmF5UGF0aF07XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnJheUlkeCA+PSAwICYmIGFycmF5SWR4IDwgYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWxpZCBpbmRleCwgY29udGludWUgb24gdGhlIHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IGFycmF5W2FycmF5SWR4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGN1cnJWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBjdXJyVmFsdWVbcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnJWYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWVbcGF0aF07XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbk9iamVjdEtleXMob2JqZWN0TW9kZWw6IGFueSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBmbGF0dGVuID0gKG9iamVjdDogYW55LCBwYXJlbnQ/OiBhbnkpID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdHM6IGFueVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XTtcbiAgICAgICAgICAgIGNvbnN0IHRoaXNLZXkgPSBwYXJlbnQgPyBgJHtwYXJlbnR9LiR7a2V5fWAgOiBgJHtrZXl9YDtcblxuICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KGlzT2JqZWN0KHZhbHVlKSA/IGZsYXR0ZW4odmFsdWUsIHRoaXNLZXkpIDogW1tgJHt0aGlzS2V5fWAsIHZhbHVlXV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH07XG5cbiAgICByZXR1cm4gZmxhdHRlbihvYmplY3RNb2RlbCk7XG59XG4iXX0=","import { dateToIsoString } from './date';\nimport { objectDeepCopy } from './object';\nexport function escapeHtml(value) {\n return value.replace(/</g, '<').replace(/>/g, '>');\n}\nexport function escapeHtmlAny(value) {\n if (typeof value === 'string') {\n return escapeHtml(value);\n }\n else if (typeof value === 'object') {\n const escapedValue = objectDeepCopy(value, { mapGettersToProperties: true });\n for (const key in value) {\n if (typeof value[key] === 'string') {\n escapedValue[key] = escapeHtml(value[key]);\n }\n else if (typeof value[key] === 'object') {\n escapedValue[key] = escapeHtmlAny(value[key]);\n }\n else {\n escapedValue[key] = value[key];\n }\n }\n return escapedValue;\n }\n return value;\n}\n/**\n * Stringifies a value - primitives with toString, dates with dateUtil, objects with JSON.stringify.\n * @param value Any value.\n */\nexport function stringify(value) {\n if (value === null) {\n return 'null';\n }\n if (typeof value === 'undefined') {\n return 'undefined';\n }\n // eliminate functions, cause they could fall into objects\n if (typeof value === 'function') {\n return `Function ${value.name ?? 'anonymous'}()`;\n }\n if (typeof value === 'object') {\n // date is object, but would like it in ISO string representation\n if (value instanceof Date) {\n return dateToIsoString(value) ?? 'null';\n }\n try {\n return JSON.stringify(value);\n }\n catch {\n return value.toString();\n }\n }\n // only primitives should be left to be printed like this (string, number, boolean)\n return value.toString();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvaGVscGVycy9zdHJpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRXhDLE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBYTtJQUNwQyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBVztJQUNyQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7U0FBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ25DLE1BQU0sWUFBWSxHQUFRLGNBQWMsQ0FBQyxLQUFLLEVBQUUsRUFBQyxzQkFBc0IsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBRWhGLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDdEIsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDakMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMvQyxDQUFDO2lCQUFNLElBQUksT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3hDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbEQsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBVTtJQUNoQyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNqQixPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUMvQixPQUFPLFdBQVcsQ0FBQztJQUN2QixDQUFDO0lBQ0QsMERBQTBEO0lBQzFELElBQUksT0FBTyxLQUFLLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDOUIsT0FBTyxZQUFZLEtBQUssQ0FBQyxJQUFJLElBQUksV0FBVyxJQUFJLENBQUM7SUFDckQsQ0FBQztJQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUIsaUVBQWlFO1FBQ2pFLElBQUksS0FBSyxZQUFZLElBQUksRUFBRSxDQUFDO1lBQ3hCLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDTCxPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ0wsQ0FBQztJQUNELG1GQUFtRjtJQUNuRixPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUM1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkYXRlVG9Jc29TdHJpbmd9IGZyb20gJy4vZGF0ZSc7XG5pbXBvcnQge29iamVjdERlZXBDb3B5fSBmcm9tICcuL29iamVjdCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVIdG1sKHZhbHVlOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlSHRtbEFueSh2YWx1ZT86IGFueSk6IGFueSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGVzY2FwZUh0bWwodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCBlc2NhcGVkVmFsdWU6IGFueSA9IG9iamVjdERlZXBDb3B5KHZhbHVlLCB7bWFwR2V0dGVyc1RvUHJvcGVydGllczogdHJ1ZX0pO1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlW2tleV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZXNjYXBlZFZhbHVlW2tleV0gPSBlc2NhcGVIdG1sKHZhbHVlW2tleV0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWVba2V5XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkVmFsdWVba2V5XSA9IGVzY2FwZUh0bWxBbnkodmFsdWVba2V5XSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVzY2FwZWRWYWx1ZVtrZXldID0gdmFsdWVba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXNjYXBlZFZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBTdHJpbmdpZmllcyBhIHZhbHVlIC0gcHJpbWl0aXZlcyB3aXRoIHRvU3RyaW5nLCBkYXRlcyB3aXRoIGRhdGVVdGlsLCBvYmplY3RzIHdpdGggSlNPTi5zdHJpbmdpZnkuXG4gKiBAcGFyYW0gdmFsdWUgQW55IHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5KHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gICAgfVxuICAgIC8vIGVsaW1pbmF0ZSBmdW5jdGlvbnMsIGNhdXNlIHRoZXkgY291bGQgZmFsbCBpbnRvIG9iamVjdHNcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBgRnVuY3Rpb24gJHt2YWx1ZS5uYW1lID8/ICdhbm9ueW1vdXMnfSgpYDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gZGF0ZSBpcyBvYmplY3QsIGJ1dCB3b3VsZCBsaWtlIGl0IGluIElTTyBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGVUb0lzb1N0cmluZyh2YWx1ZSkgPz8gJ251bGwnO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIG9ubHkgcHJpbWl0aXZlcyBzaG91bGQgYmUgbGVmdCB0byBiZSBwcmludGVkIGxpa2UgdGhpcyAoc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4pXG4gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG59XG4iXX0=","import { HttpErrorResponse } from '@angular/common/http';\nimport { stringify } from '../helpers/string';\nimport { LogLevelEnum } from '../log/log.model';\nimport { ACommonsErrorBase, CommonsHttpError, CommonsInternalError } from './error.model';\n/**\n * Converts RxJS subscription error to CommonsError.\n * @param error Error.\n * @param name Optional name to write in commons error.\n * @param details Optional details of error.\n */\nexport function fromSubscribeError(error, name, details) {\n const opts = {\n name,\n details,\n location: window?.location?.href\n };\n if (error instanceof HttpErrorResponse) {\n return new CommonsHttpError(error.message ?? 'Http Error occurred', error, opts);\n }\n else {\n opts.cause = error;\n return new CommonsInternalError(error.message ?? 'Internal Error occurred', opts);\n }\n}\n/**\n * Checks if error is Http error (Angular or Commons).\n * @param error\n */\nexport function isHttpErrorResponse(error) {\n return error instanceof HttpErrorResponse || error instanceof CommonsHttpError || error?.httpError instanceof HttpErrorResponse;\n}\n/**\n * Gets HttpErrorResponse from error (Angular or Commons).\n * @param error Error.\n */\nexport function getHttpErrorResponse(error) {\n if (error instanceof HttpErrorResponse) {\n return error;\n }\n else if (error instanceof CommonsHttpError) {\n return error.httpError;\n }\n else if (error?.httpError instanceof HttpErrorResponse) {\n return error.httpError;\n }\n else {\n return null;\n }\n}\n/**\n * Gets HttpErrorResponse status from error (Angular or Commons).\n * @param error Error.\n */\nexport function getHttpErrorResponseStatus(error) {\n return getHttpErrorResponse(error)?.status ?? null;\n}\n/**\n * Gets HttpErrorResponse status text from error (Angular or Commons).\n * @param error Error.\n */\nexport function getHttpErrorResponseStatusText(error) {\n return getHttpErrorResponse(error)?.statusText ?? null;\n}\n/**\n * Get error log level. All is error, except if error is http error with status >=400 and <500.\n * @param error Error.\n */\nexport function getErrorLogLevel(error) {\n if (isHttpErrorResponse(error)) {\n const status = getHttpErrorResponseStatus(error);\n if (status && status >= 400 && status < 500) {\n return LogLevelEnum.Warning;\n }\n }\n return LogLevelEnum.Error;\n}\n/**\n * Get error name (prototype name or type from commons error if name is not provided).\n * @param error Error.\n */\nexport function getErrorName(error) {\n if (error instanceof ACommonsErrorBase) {\n return error.name ?? error.type;\n }\n else {\n return error.name;\n }\n}\n/**\n * Writes http error to string with all headers and body.\n * @param error Http response error.\n * @param opts Options for hiding parts of error:\n * - hideMessage Hides message of error (message include url, status and status text!).\n * - hideHeaders Hides headers.\n * - hideBody Hides JSON representation of body.\n */\nexport function httpErrorResponseToString(error, opts) {\n let str = opts?.hideMessage ? '' : `${error.message}\\n`; // message should already include url, status, etc.\n if (!opts?.hideHeaders) {\n str += `Http Response Headers: ${error.headers.keys().reduce((acc, key) => `${acc}[${key}: ${error.headers.get(key)}]`, '')}`;\n }\n if (!opts?.hideBody) {\n str += `\\nHttp Response Body: ${stringify(error.error)}`;\n }\n return str;\n}\n/**\n * Error to string.\n * @param error Error.\n * @param opts Options for hiding parts of error:\n * - hideMessage Hides message of error.\n * - hideName Hides error name.\n * - hideCause Hides cause of an error (if present, see @link(errorCauseToString) for other options).\n * - hideStack Hides stack of an error (if present).\n * - hideDetails Hides JSON detail's representation of error (if present).\n * - hideLocation Hides location (URL) where error was thrown.\n * - hideHttp Hides http error portion of error if http error response (see @link(httpErrorResponseToString) for other options).\n */\nexport function errorToString(error, opts) {\n if (error instanceof ACommonsErrorBase) {\n return commonsErrorToString(error, opts);\n }\n else if (error instanceof HttpErrorResponse) {\n return httpErrorResponseToString(error, opts);\n }\n const strBlocks = [];\n if (!opts?.hideMessage) {\n strBlocks.push(error.message);\n }\n if (error.name) {\n strBlocks.push(`Error name: ${error.name}`);\n }\n if (!opts?.hideCause) {\n strBlocks.push(errorCauseToString(error, opts));\n }\n if (!opts?.hideStack && error.stack) {\n strBlocks.push(`Stack trace:\\n${error.stack}`);\n }\n return strBlocks.filter(s => s.trim().length > 0).join('\\n');\n}\n/**\n * Commons error to string.\n * @param error Commons error.\n * @param opts Options for hiding parts of error:\n * - hideMessage Hides message of error.\n * - hideName Hides error name.\n * - hideCause Hides cause of an error (if present, see @link(errorCauseToString) for other options).\n * - hideStack Hides stack of an error (if present).\n * - hideDetails Hides JSON detail's representation of error (if present).\n * - hideLocation Hides location (URL) where error was thrown.\n * - hideHttp Hides http error portion of error if http error response (see @link(httpErrorResponseToString) for other options).\n * - hideItems Hides all item information (http body, action context data).\n * - hideActionData See @link(commonsActionErrorContextToString) for additional info.\n * - hideQueryParams See @link(commonsActionErrorContextToString) for additional info.\n */\nexport function commonsErrorToString(error, opts) {\n const strBlocks = [];\n if (!opts?.hideMessage) {\n strBlocks.push(`${error.message}${error.messageCode ? ` (code: ${error.messageCode})` : ''}`);\n }\n if (!opts?.hideName) {\n strBlocks.push(`Error name: ${error.name ?? error.type} ${error.name ? `(${error.type})` : ''}`);\n }\n if (!opts?.hideLocation && error.location) {\n strBlocks.push(`Location: ${error.location}`);\n }\n let isHttp = false;\n if (!opts?.hideHttp && error instanceof CommonsHttpError) {\n strBlocks.push(httpErrorResponseToString(error.httpError, {\n hideBody: opts?.hideItems || opts?.hideBody,\n hideHeaders: opts?.hideHeaders,\n hideMessage: error.message.indexOf(error.httpError.message) >= 0\n }));\n isHttp = true;\n }\n if (error.type === 'CommonsActionError') {\n const actionError = error;\n if (actionError.actionContext) {\n strBlocks.push(commonsActionErrorContextToString(actionError, opts));\n }\n if (!opts?.hideHttp && actionError.httpError instanceof HttpErrorResponse) {\n strBlocks.push(httpErrorResponseToString(actionError.httpError, {\n hideBody: opts?.hideItems || opts?.hideBody,\n hideHeaders: opts?.hideHeaders,\n hideMessage: error.message.indexOf(actionError.httpError.message) >= 0\n }));\n isHttp = true;\n }\n }\n if (!opts?.hideDetails && error.details) {\n strBlocks.push(`Details: ${stringify(error.details)}`);\n }\n if (!opts?.hideCause && (!isHttp || !(error.cause instanceof HttpErrorResponse))) {\n strBlocks.push(errorCauseToString(error, opts));\n }\n if (!opts?.hideStack && error.stack) {\n strBlocks.push(`Stack trace:\\n${error.stack}`);\n }\n return strBlocks.filter(s => s.trim().length > 0).join('\\n');\n}\n/**\n * Writes commons action error info from context as string.\n * @param error Commons action error.\n * @param opts Options for hiding parts of error:\n * - hideItems Hides all item related information (item, form item, submit item, ...).\n * - hideActionData Hides action data.\n * - hideQueryParams Hides query params.\n */\nexport function commonsActionErrorContextToString(error, opts) {\n let paramsMessage = '';\n if (error.actionContext?.parameters) {\n if (error.actionContext?.parameters.itemId) {\n paramsMessage += `[itemId: ${error.actionContext.parameters.itemId}]`;\n }\n if (!opts?.hideItems && error.actionContext?.parameters.item) {\n paramsMessage += `[item: ${stringify(error.actionContext.parameters.item)}]`;\n }\n if (!opts?.hideActionData && error.actionContext?.parameters.actionData) {\n paramsMessage += Object.entries(error.actionContext?.parameters.actionData).reduce((acc, [key, value]) => `${acc}[actionData ${key}: ${stringify(value)}]`, '');\n }\n if (!opts?.hideQueryParams && error.actionContext?.parameters.dataListParams) {\n paramsMessage += `[dataListParams: ${stringify(error.actionContext.parameters.dataListParams)}]`;\n }\n if (!opts?.hideItems && error.actionContext?.parameters.formItem) {\n paramsMessage += `[formItem: ${stringify(error.actionContext.parameters.formItem)}]`;\n }\n if (!opts?.hideItems && error.actionContext?.parameters.submitResult) {\n paramsMessage += `[formItem: ${stringify(error.actionContext.parameters.submitResult)}]`;\n }\n if (error.actionContext?.parameters.locale) {\n paramsMessage += `[locale: ${stringify(error.actionContext.parameters.locale)}]`;\n }\n }\n return paramsMessage;\n}\n/**\n * Writes cause of an error as string.\n * @param error Error.\n * @param opts Options for hiding parts of error:\n * - causeOnErrorOnly Prints only if cause is instance of error.\n * - causeAsJson Print error cause as a JSON (by default, if error only message and name will be printed).\n */\nexport function errorCauseToString(error, opts) {\n // if already logged as http error, check that cause is not also http error (cause it is usually duplicated)\n if (error.cause && (!opts?.causeOnErrorOnly || error.cause instanceof Error)) {\n const needsStringify = opts?.causeAsJson || !(error.cause instanceof Error);\n if (!opts?.causeOnErrorOnly || error.cause instanceof Error) {\n return ('Caused by: ' +\n (needsStringify ? stringify(error.cause) : `${error.cause.message}${error.cause.name ? ` (${error.cause.name})` : ''}`));\n }\n }\n return '';\n}\n/**\n * Throws an error with the provided error message.\n * The intended usage is for in-line throwing of an error with TS type narrowing.\n * <br>\n * <i>Example</i>:\n * <pre>\n * const value: string | null = getValue(\"\");\n * const nonNullValue: string = getValue(\"\") ?? throwError(\"value missing\");\n * </pre>\n *\n * @param {string} errorMessage - The error message to be thrown.\n * @param {CommonsErrorBaseOptions} [options] - Additional options for the thrown error.\n * @throws {Error} - The error object with the provided error message.\n * @returns {never} - This function does not return a value.\n * @see CommonsErrorBaseOptions\n */\nexport function throwError(errorMessage, options) {\n throw new CommonsInternalError(errorMessage, options);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL2Vycm9yL2Vycm9yLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFdkQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsaUJBQWlCLEVBQTJCLGdCQUFnQixFQUFFLG9CQUFvQixFQUFzQixNQUFNLGVBQWUsQ0FBQztBQUV0STs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFVLEVBQUUsSUFBYSxFQUFFLE9BQWE7SUFDdkUsTUFBTSxJQUFJLEdBQTRCO1FBQ2xDLElBQUk7UUFDSixPQUFPO1FBQ1AsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSTtLQUNuQyxDQUFDO0lBRUYsSUFBSSxLQUFLLFlBQVksaUJBQWlCLEVBQUUsQ0FBQztRQUNyQyxPQUFPLElBQUksZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckYsQ0FBQztTQUFNLENBQUM7UUFDSixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixPQUFPLElBQUksb0JBQW9CLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSx5QkFBeUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RixDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUFVO0lBQzFDLE9BQU8sS0FBSyxZQUFZLGlCQUFpQixJQUFJLEtBQUssWUFBWSxnQkFBZ0IsSUFBSyxLQUF5QyxFQUFFLFNBQVMsWUFBWSxpQkFBaUIsQ0FB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QUFLLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMzRSxNQUFNLGNBQWMsR0FBRyxJQUFJLEVBQUUsV0FBVyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLElBQUksS0FBSyxDQUFDLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztZQUMxRCxPQUFPLENBQ0gsYUFBYTtnQkFDYixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSSxLQUFLLENBQUMsS0FBZSxDQUFDLE9BQU8sR0FBSSxLQUFLLENBQUMsS0FBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBTSxLQUFLLENBQUMsS0FBZSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUMzSixDQUFDO1FBQ04sQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLFlBQW9CLEVBQUUsT0FBaUM7SUFDOUUsTUFBTSxJQUFJLG9CQUFvQixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQge3N0cmluZ2lmeX0gZnJvbSAnLi4vaGVscGVycy9zdHJpbmcnO1xuaW1wb3J0IHtMb2dMZXZlbEVudW19IGZyb20gJy4uL2xvZy9sb2cubW9kZWwnO1xuaW1wb3J0IHtBQ29tbW9uc0Vycm9yQmFzZSwgQ29tbW9uc0Vycm9yQmFzZU9wdGlvbnMsIENvbW1vbnNIdHRwRXJyb3IsIENvbW1vbnNJbnRlcm5hbEVycm9yLCBJQ29tbW9uc0FjdGlvbkVycm9yfSBmcm9tICcuL2Vycm9yLm1vZGVsJztcblxuLyoqXG4gKiBDb252ZXJ0cyBSeEpTIHN1YnNjcmlwdGlvbiBlcnJvciB0byBDb21tb25zRXJyb3IuXG4gKiBAcGFyYW0gZXJyb3IgRXJyb3IuXG4gKiBAcGFyYW0gbmFtZSBPcHRpb25hbCBuYW1lIHRvIHdyaXRlIGluIGNvbW1vbnMgZXJyb3IuXG4gKiBAcGFyYW0gZGV0YWlscyBPcHRpb25hbCBkZXRhaWxzIG9mIGVycm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbVN1YnNjcmliZUVycm9yKGVycm9yOiBhbnksIG5hbWU/OiBzdHJpbmcsIGRldGFpbHM/OiBhbnkpOiBBQ29tbW9uc0Vycm9yQmFzZSB7XG4gICAgY29uc3Qgb3B0czogQ29tbW9uc0Vycm9yQmFzZU9wdGlvbnMgPSB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRldGFpbHMsXG4gICAgICAgIGxvY2F0aW9uOiB3aW5kb3c/LmxvY2F0aW9uPy5ocmVmXG4gICAgfTtcblxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tbW9uc0h0dHBFcnJvcihlcnJvci5tZXNzYWdlID8/ICdIdHRwIEVycm9yIG9jY3VycmVkJywgZXJyb3IsIG9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdHMuY2F1c2UgPSBlcnJvcjtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihlcnJvci5tZXNzYWdlID8/ICdJbnRlcm5hbCBFcnJvciBvY2N1cnJlZCcsIG9wdHMpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgZXJyb3IgaXMgSHR0cCBlcnJvciAoQW5ndWxhciBvciBDb21tb25zKS5cbiAqIEBwYXJhbSBlcnJvclxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNIdHRwRXJyb3JSZXNwb25zZShlcnJvcjogYW55KSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgfHwgZXJyb3IgaW5zdGFuY2VvZiBDb21tb25zSHR0cEVycm9yIHx8IChlcnJvciBhcyBJQ29tbW9uc0FjdGlvbkVycm9yIHwgdW5kZWZpbmVkKT8uaHR0cEVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2U7XG59XG5cbi8qKlxuICogR2V0cyBIdHRwRXJyb3JSZXNwb25zZSBmcm9tIGVycm9yIChBbmd1bGFyIG9yIENvbW1vbnMpLlxuICogQHBhcmFtIGVycm9yIEVycm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SHR0cEVycm9yUmVzcG9uc2UoZXJyb3I6IGFueSk6IEh0dHBFcnJvclJlc3BvbnNlIHwgbnVsbCB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDb21tb25zSHR0cEVycm9yKSB7XG4gICAgICAgIHJldHVybiBlcnJvci5odHRwRXJyb3I7XG4gICAgfSBlbHNlIGlmICgoZXJyb3IgYXMgSUNvbW1vbnNBY3Rpb25FcnJvciB8IHVuZGVmaW5lZCk/Lmh0dHBFcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgIHJldHVybiBlcnJvci5odHRwRXJyb3I7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuXG4vKipcbiAqIEdldHMgSHR0cEVycm9yUmVzcG9uc2Ugc3RhdHVzIGZyb20gZXJyb3IgKEFuZ3VsYXIgb3IgQ29tbW9ucykuXG4gKiBAcGFyYW0gZXJyb3IgRXJyb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIdHRwRXJyb3JSZXNwb25zZVN0YXR1cyhlcnJvcjogYW55KTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIGdldEh0dHBFcnJvclJlc3BvbnNlKGVycm9yKT8uc3RhdHVzID8/IG51bGw7XG59XG5cbi8qKlxuICogR2V0cyBIdHRwRXJyb3JSZXNwb25zZSBzdGF0dXMgdGV4dCBmcm9tIGVycm9yIChBbmd1bGFyIG9yIENvbW1vbnMpLlxuICogQHBhcmFtIGVycm9yIEVycm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SHR0cEVycm9yUmVzcG9uc2VTdGF0dXNUZXh0KGVycm9yOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gZ2V0SHR0cEVycm9yUmVzcG9uc2UoZXJyb3IpPy5zdGF0dXNUZXh0ID8/IG51bGw7XG59XG5cbi8qKlxuICogR2V0IGVycm9yIGxvZyBsZXZlbC4gQWxsIGlzIGVycm9yLCBleGNlcHQgaWYgZXJyb3IgaXMgaHR0cCBlcnJvciB3aXRoIHN0YXR1cyA+PTQwMCBhbmQgPDUwMC5cbiAqIEBwYXJhbSBlcnJvciBFcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVycm9yTG9nTGV2ZWwoZXJyb3I6IGFueSk6IExvZ0xldmVsRW51bSB7XG4gICAgaWYgKGlzSHR0cEVycm9yUmVzcG9uc2UoZXJyb3IpKSB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGdldEh0dHBFcnJvclJlc3BvbnNlU3RhdHVzKGVycm9yKTtcbiAgICAgICAgaWYgKHN0YXR1cyAmJiBzdGF0dXMgPj0gNDAwICYmIHN0YXR1cyA8IDUwMCkge1xuICAgICAgICAgICAgcmV0dXJuIExvZ0xldmVsRW51bS5XYXJuaW5nO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBMb2dMZXZlbEVudW0uRXJyb3I7XG59XG5cbi8qKlxuICogR2V0IGVycm9yIG5hbWUgKHByb3RvdHlwZSBuYW1lIG9yIHR5cGUgZnJvbSBjb21tb25zIGVycm9yIGlmIG5hbWUgaXMgbm90IHByb3ZpZGVkKS5cbiAqIEBwYXJhbSBlcnJvciBFcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVycm9yTmFtZShlcnJvcjogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBQ29tbW9uc0Vycm9yQmFzZSkge1xuICAgICAgICByZXR1cm4gZXJyb3IubmFtZSA/PyBlcnJvci50eXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlcnJvci5uYW1lO1xuICAgIH1cbn1cblxuLyoqXG4gKiBXcml0ZXMgaHR0cCBlcnJvciB0byBzdHJpbmcgd2l0aCBhbGwgaGVhZGVycyBhbmQgYm9keS5cbiAqIEBwYXJhbSBlcnJvciBIdHRwIHJlc3BvbnNlIGVycm9yLlxuICogQHBhcmFtIG9wdHMgT3B0aW9ucyBmb3IgaGlkaW5nIHBhcnRzIG9mIGVycm9yOlxuICogIC0gaGlkZU1lc3NhZ2UgSGlkZXMgbWVzc2FnZSBvZiBlcnJvciAobWVzc2FnZSBpbmNsdWRlIHVybCwgc3RhdHVzIGFuZCBzdGF0dXMgdGV4dCEpLlxuICogIC0gaGlkZUhlYWRlcnMgSGlkZXMgaGVhZGVycy5cbiAqICAtIGhpZGVCb2R5IEhpZGVzIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYm9keS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh0dHBFcnJvclJlc3BvbnNlVG9TdHJpbmcoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlLCBvcHRzPzogSHR0cEVycm9yUmVzcG9uc2VUb1N0cmluZ09wdGlvbnNUeXBlKTogc3RyaW5nIHtcbiAgICBsZXQgc3RyID0gb3B0cz8uaGlkZU1lc3NhZ2UgPyAnJyA6IGAke2Vycm9yLm1lc3NhZ2V9XFxuYDsgLy8gbWVzc2FnZSBzaG91bGQgYWxyZWFkeSBpbmNsdWRlIHVybCwgc3RhdHVzLCBldGMuXG4gICAgaWYgKCFvcHRzPy5oaWRlSGVhZGVycykge1xuICAgICAgICBzdHIgKz0gYEh0dHAgUmVzcG9uc2UgSGVhZGVyczogJHtlcnJvci5oZWFkZXJzLmtleXMoKS5yZWR1Y2UoKGFjYywga2V5KSA9PiBgJHthY2N9WyR7a2V5fTogJHtlcnJvci5oZWFkZXJzLmdldChrZXkpfV1gLCAnJyl9YDtcbiAgICB9XG4gICAgaWYgKCFvcHRzPy5oaWRlQm9keSkge1xuICAgICAgICBzdHIgKz0gYFxcbkh0dHAgUmVzcG9uc2UgQm9keTogJHtzdHJpbmdpZnkoZXJyb3IuZXJyb3IpfWA7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogRXJyb3IgdG8gc3RyaW5nLlxuICogQHBhcmFtIGVycm9yIEVycm9yLlxuICogQHBhcmFtIG9wdHMgT3B0aW9ucyBmb3IgaGlkaW5nIHBhcnRzIG9mIGVycm9yOlxuICogLSBoaWRlTWVzc2FnZSBIaWRlcyBtZXNzYWdlIG9mIGVycm9yLlxuICogLSBoaWRlTmFtZSBIaWRlcyBlcnJvciBuYW1lLlxuICogLSBoaWRlQ2F1c2UgSGlkZXMgY2F1c2Ugb2YgYW4gZXJyb3IgKGlmIHByZXNlbnQsIHNlZSBAbGluayhlcnJvckNhdXNlVG9TdHJpbmcpIGZvciBvdGhlciBvcHRpb25zKS5cbiAqIC0gaGlkZVN0YWNrIEhpZGVzIHN0YWNrIG9mIGFuIGVycm9yIChpZiBwcmVzZW50KS5cbiAqIC0gaGlkZURldGFpbHMgSGlkZXMgSlNPTiBkZXRhaWwncyByZXByZXNlbnRhdGlvbiBvZiBlcnJvciAoaWYgcHJlc2VudCkuXG4gKiAtIGhpZGVMb2NhdGlvbiBIaWRlcyBsb2NhdGlvbiAoVVJMKSB3aGVyZSBlcnJvciB3YXMgdGhyb3duLlxuICogLSBoaWRlSHR0cCBIaWRlcyBodHRwIGVycm9yIHBvcnRpb24gb2YgZXJyb3IgaWYgaHR0cCBlcnJvciByZXNwb25zZSAoc2VlIEBsaW5rKGh0dHBFcnJvclJlc3BvbnNlVG9TdHJpbmcpIGZvciBvdGhlciBvcHRpb25zKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yVG9TdHJpbmcoZXJyb3I6IEVycm9yLCBvcHRzPzogRXJyb3JUb1N0cmluZ09wdGlvbnNUeXBlKTogc3RyaW5nIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBQ29tbW9uc0Vycm9yQmFzZSkge1xuICAgICAgICByZXR1cm4gY29tbW9uc0Vycm9yVG9TdHJpbmcoZXJyb3IsIG9wdHMpO1xuICAgIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICByZXR1cm4gaHR0cEVycm9yUmVzcG9uc2VUb1N0cmluZyhlcnJvciwgb3B0cyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyQmxvY2tzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICghb3B0cz8uaGlkZU1lc3NhZ2UpIHtcbiAgICAgICAgc3RyQmxvY2tzLnB1c2goZXJyb3IubWVzc2FnZSk7XG4gICAgfVxuICAgIGlmIChlcnJvci5uYW1lKSB7XG4gICAgICAgIHN0ckJsb2Nrcy5wdXNoKGBFcnJvciBuYW1lOiAke2Vycm9yLm5hbWV9YCk7XG4gICAgfVxuICAgIGlmICghb3B0cz8uaGlkZUNhdXNlKSB7XG4gICAgICAgIHN0ckJsb2Nrcy5wdXNoKGVycm9yQ2F1c2VUb1N0cmluZyhlcnJvciwgb3B0cykpO1xuICAgIH1cbiAgICBpZiAoIW9wdHM/LmhpZGVTdGFjayAmJiBlcnJvci5zdGFjaykge1xuICAgICAgICBzdHJCbG9ja3MucHVzaChgU3RhY2sgdHJhY2U6XFxuJHtlcnJvci5zdGFja31gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyQmxvY2tzLmZpbHRlcihzID0+IHMudHJpbSgpLmxlbmd0aCA+IDApLmpvaW4oJ1xcbicpO1xufVxuXG4vKipcbiAqIENvbW1vbnMgZXJyb3IgdG8gc3RyaW5nLlxuICogQHBhcmFtIGVycm9yIENvbW1vbnMgZXJyb3IuXG4gKiBAcGFyYW0gb3B0cyBPcHRpb25zIGZvciBoaWRpbmcgcGFydHMgb2YgZXJyb3I6XG4gKiAtIGhpZGVNZXNzYWdlIEhpZGVzIG1lc3NhZ2Ugb2YgZXJyb3IuXG4gKiAtIGhpZGVOYW1lIEhpZGVzIGVycm9yIG5hbWUuXG4gKiAtIGhpZGVDYXVzZSBIaWRlcyBjYXVzZSBvZiBhbiBlcnJvciAoaWYgcHJlc2VudCwgc2VlIEBsaW5rKGVycm9yQ2F1c2VUb1N0cmluZykgZm9yIG90aGVyIG9wdGlvbnMpLlxuICogLSBoaWRlU3RhY2sgSGlkZXMgc3RhY2sgb2YgYW4gZXJyb3IgKGlmIHByZXNlbnQpLlxuICogLSBoaWRlRGV0YWlscyBIaWRlcyBKU09OIGRldGFpbCdzIHJlcHJlc2VudGF0aW9uIG9mIGVycm9yIChpZiBwcmVzZW50KS5cbiAqIC0gaGlkZUxvY2F0aW9uIEhpZGVzIGxvY2F0aW9uIChVUkwpIHdoZXJlIGVycm9yIHdhcyB0aHJvd24uXG4gKiAtIGhpZGVIdHRwIEhpZGVzIGh0dHAgZXJyb3IgcG9ydGlvbiBvZiBlcnJvciBpZiBodHRwIGVycm9yIHJlc3BvbnNlIChzZWUgQGxpbmsoaHR0cEVycm9yUmVzcG9uc2VUb1N0cmluZykgZm9yIG90aGVyIG9wdGlvbnMpLlxuICogLSBoaWRlSXRlbXMgSGlkZXMgYWxsIGl0ZW0gaW5mb3JtYXRpb24gKGh0dHAgYm9keSwgYWN0aW9uIGNvbnRleHQgZGF0YSkuXG4gKiAtIGhpZGVBY3Rpb25EYXRhIFNlZSBAbGluayhjb21tb25zQWN0aW9uRXJyb3JDb250ZXh0VG9TdHJpbmcpIGZvciBhZGRpdGlvbmFsIGluZm8uXG4gKiAtIGhpZGVRdWVyeVBhcmFtcyBTZWUgQGxpbmsoY29tbW9uc0FjdGlvbkVycm9yQ29udGV4dFRvU3RyaW5nKSBmb3IgYWRkaXRpb25hbCBpbmZvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbW9uc0Vycm9yVG9TdHJpbmcoZXJyb3I6IEFDb21tb25zRXJyb3JCYXNlLCBvcHRzPzogRXJyb3JUb1N0cmluZ09wdGlvbnNUeXBlKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHJCbG9ja3M6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKCFvcHRzPy5oaWRlTWVzc2FnZSkge1xuICAgICAgICBzdHJCbG9ja3MucHVzaChgJHtlcnJvci5tZXNzYWdlfSR7ZXJyb3IubWVzc2FnZUNvZGUgPyBgIChjb2RlOiAke2Vycm9yLm1lc3NhZ2VDb2RlfSlgIDogJyd9YCk7XG4gICAgfVxuICAgIGlmICghb3B0cz8uaGlkZU5hbWUpIHtcbiAgICAgICAgc3RyQmxvY2tzLnB1c2goYEVycm9yIG5hbWU6ICR7ZXJyb3IubmFtZSA/PyBlcnJvci50eXBlfSAke2Vycm9yLm5hbWUgPyBgKCR7ZXJyb3IudHlwZX0pYCA6ICcnfWApO1xuICAgIH1cbiAgICBpZiAoIW9wdHM/LmhpZGVMb2NhdGlvbiAmJiBlcnJvci5sb2NhdGlvbikge1xuICAgICAgICBzdHJCbG9ja3MucHVzaChgTG9jYXRpb246ICR7ZXJyb3IubG9jYXRpb259YCk7XG4gICAgfVxuXG4gICAgbGV0IGlzSHR0cCA9IGZhbHNlO1xuICAgIGlmICghb3B0cz8uaGlkZUh0dHAgJiYgZXJyb3IgaW5zdGFuY2VvZiBDb21tb25zSHR0cEVycm9yKSB7XG4gICAgICAgIHN0ckJsb2Nrcy5wdXNoKFxuICAgICAgICAgICAgaHR0cEVycm9yUmVzcG9uc2VUb1N0cmluZyhlcnJvci5odHRwRXJyb3IsIHtcbiAgICAgICAgICAgICAgICBoaWRlQm9keTogb3B0cz8uaGlkZUl0ZW1zIHx8IG9wdHM/LmhpZGVCb2R5LFxuICAgICAgICAgICAgICAgIGhpZGVIZWFkZXJzOiBvcHRzPy5oaWRlSGVhZGVycyxcbiAgICAgICAgICAgICAgICBoaWRlTWVzc2FnZTogZXJyb3IubWVzc2FnZS5pbmRleE9mKGVycm9yLmh0dHBFcnJvci5tZXNzYWdlKSA+PSAwXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICBpc0h0dHAgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoZXJyb3IudHlwZSA9PT0gJ0NvbW1vbnNBY3Rpb25FcnJvcicpIHtcbiAgICAgICAgY29uc3QgYWN0aW9uRXJyb3IgPSBlcnJvciBhcyB1bmtub3duIGFzIElDb21tb25zQWN0aW9uRXJyb3I7XG4gICAgICAgIGlmIChhY3Rpb25FcnJvci5hY3Rpb25Db250ZXh0KSB7XG4gICAgICAgICAgICBzdHJCbG9ja3MucHVzaChjb21tb25zQWN0aW9uRXJyb3JDb250ZXh0VG9TdHJpbmcoYWN0aW9uRXJyb3IsIG9wdHMpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdHM/LmhpZGVIdHRwICYmIGFjdGlvbkVycm9yLmh0dHBFcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICBzdHJCbG9ja3MucHVzaChcbiAgICAgICAgICAgICAgICBodHRwRXJyb3JSZXNwb25zZVRvU3RyaW5nKGFjdGlvbkVycm9yLmh0dHBFcnJvciwge1xuICAgICAgICAgICAgICAgICAgICBoaWRlQm9keTogb3B0cz8uaGlkZUl0ZW1zIHx8IG9wdHM/LmhpZGVCb2R5LFxuICAgICAgICAgICAgICAgICAgICBoaWRlSGVhZGVyczogb3B0cz8uaGlkZUhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIGhpZGVNZXNzYWdlOiBlcnJvci5tZXNzYWdlLmluZGV4T2YoYWN0aW9uRXJyb3IuaHR0cEVycm9yLm1lc3NhZ2UpID49IDBcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlzSHR0cCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIW9wdHM/LmhpZGVEZXRhaWxzICYmIGVycm9yLmRldGFpbHMpIHtcbiAgICAgICAgc3RyQmxvY2tzLnB1c2goYERldGFpbHM6ICR7c3RyaW5naWZ5KGVycm9yLmRldGFpbHMpfWApO1xuICAgIH1cbiAgICBpZiAoIW9wdHM/LmhpZGVDYXVzZSAmJiAoIWlzSHR0cCB8fCAhKGVycm9yLmNhdXNlIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpKSkge1xuICAgICAgICBzdHJCbG9ja3MucHVzaChlcnJvckNhdXNlVG9TdHJpbmcoZXJyb3IsIG9wdHMpKTtcbiAgICB9XG4gICAgaWYgKCFvcHRzPy5oaWRlU3RhY2sgJiYgZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgc3RyQmxvY2tzLnB1c2goYFN0YWNrIHRyYWNlOlxcbiR7ZXJyb3Iuc3RhY2t9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0ckJsb2Nrcy5maWx0ZXIocyA9PiBzLnRyaW0oKS5sZW5ndGggPiAwKS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBXcml0ZXMgY29tbW9ucyBhY3Rpb24gZXJyb3IgaW5mbyBmcm9tIGNvbnRleHQgYXMgc3RyaW5nLlxuICogQHBhcmFtIGVycm9yIENvbW1vbnMgYWN0aW9uIGVycm9yLlxuICogQHBhcmFtIG9wdHMgT3B0aW9ucyBmb3IgaGlkaW5nIHBhcnRzIG9mIGVycm9yOlxuICogLSBoaWRlSXRlbXMgSGlkZXMgYWxsIGl0ZW0gcmVsYXRlZCBpbmZvcm1hdGlvbiAoaXRlbSwgZm9ybSBpdGVtLCBzdWJtaXQgaXRlbSwgLi4uKS5cbiAqIC0gaGlkZUFjdGlvbkRhdGEgSGlkZXMgYWN0aW9uIGRhdGEuXG4gKiAtIGhpZGVRdWVyeVBhcmFtcyBIaWRlcyBxdWVyeSBwYXJhbXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tb25zQWN0aW9uRXJyb3JDb250ZXh0VG9TdHJpbmcoZXJyb3I6IElDb21tb25zQWN0aW9uRXJyb3IsIG9wdHM/OiBBY3Rpb25FcnJvckNvbnRleHRUb1N0cmluZ09wdGlvbnNUeXBlKTogc3RyaW5nIHtcbiAgICBsZXQgcGFyYW1zTWVzc2FnZSA9ICcnO1xuICAgIGlmIChlcnJvci5hY3Rpb25Db250ZXh0Py5wYXJhbWV0ZXJzKSB7XG4gICAgICAgIGlmIChlcnJvci5hY3Rpb25Db250ZXh0Py5wYXJhbWV0ZXJzLml0ZW1JZCkge1xuICAgICAgICAgICAgcGFyYW1zTWVzc2FnZSArPSBgW2l0ZW1JZDogJHtlcnJvci5hY3Rpb25Db250ZXh0LnBhcmFtZXRlcnMuaXRlbUlkfV1gO1xuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0cz8uaGlkZUl0ZW1zICYmIGVycm9yLmFjdGlvbkNvbnRleHQ/LnBhcmFtZXRlcnMuaXRlbSkge1xuICAgICAgICAgICAgcGFyYW1zTWVzc2FnZSArPSBgW2l0ZW06ICR7c3RyaW5naWZ5KGVycm9yLmFjdGlvbkNvbnRleHQucGFyYW1ldGVycy5pdGVtKX1dYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdHM/LmhpZGVBY3Rpb25EYXRhICYmIGVycm9yLmFjdGlvbkNvbnRleHQ/LnBhcmFtZXRlcnMuYWN0aW9uRGF0YSkge1xuICAgICAgICAgICAgcGFyYW1zTWVzc2FnZSArPSBPYmplY3QuZW50cmllcyhlcnJvci5hY3Rpb25Db250ZXh0Py5wYXJhbWV0ZXJzLmFjdGlvbkRhdGEpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IGAke2FjY31bYWN0aW9uRGF0YSAke2tleX06ICR7c3RyaW5naWZ5KHZhbHVlKX1dYCwgJycpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0cz8uaGlkZVF1ZXJ5UGFyYW1zICYmIGVycm9yLmFjdGlvbkNvbnRleHQ/LnBhcmFtZXRlcnMuZGF0YUxpc3RQYXJhbXMpIHtcbiAgICAgICAgICAgIHBhcmFtc01lc3NhZ2UgKz0gYFtkYXRhTGlzdFBhcmFtczogJHtzdHJpbmdpZnkoZXJyb3IuYWN0aW9uQ29udGV4dC5wYXJhbWV0ZXJzLmRhdGFMaXN0UGFyYW1zKX1dYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdHM/LmhpZGVJdGVtcyAmJiBlcnJvci5hY3Rpb25Db250ZXh0Py5wYXJhbWV0ZXJzLmZvcm1JdGVtKSB7XG4gICAgICAgICAgICBwYXJhbXNNZXNzYWdlICs9IGBbZm9ybUl0ZW06ICR7c3RyaW5naWZ5KGVycm9yLmFjdGlvbkNvbnRleHQucGFyYW1ldGVycy5mb3JtSXRlbSl9XWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRzPy5oaWRlSXRlbXMgJiYgZXJyb3IuYWN0aW9uQ29udGV4dD8ucGFyYW1ldGVycy5zdWJtaXRSZXN1bHQpIHtcbiAgICAgICAgICAgIHBhcmFtc01lc3NhZ2UgKz0gYFtmb3JtSXRlbTogJHtzdHJpbmdpZnkoZXJyb3IuYWN0aW9uQ29udGV4dC5wYXJhbWV0ZXJzLnN1Ym1pdFJlc3VsdCl9XWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yLmFjdGlvbkNvbnRleHQ/LnBhcmFtZXRlcnMubG9jYWxlKSB7XG4gICAgICAgICAgICBwYXJhbXNNZXNzYWdlICs9IGBbbG9jYWxlOiAke3N0cmluZ2lmeShlcnJvci5hY3Rpb25Db250ZXh0LnBhcmFtZXRlcnMubG9jYWxlKX1dYDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXNNZXNzYWdlO1xufVxuXG4vKipcbiAqIFdyaXRlcyBjYXVzZSBvZiBhbiBlcnJvciBhcyBzdHJpbmcuXG4gKiBAcGFyYW0gZXJyb3IgRXJyb3IuXG4gKiBAcGFyYW0gb3B0cyBPcHRpb25zIGZvciBoaWRpbmcgcGFydHMgb2YgZXJyb3I6XG4gKiAtIGNhdXNlT25FcnJvck9ubHkgUHJpbnRzIG9ubHkgaWYgY2F1c2UgaXMgaW5zdGFuY2Ugb2YgZXJyb3IuXG4gKiAtIGNhdXNlQXNKc29uIFByaW50IGVycm9yIGNhdXNlIGFzIGEgSlNPTiAoYnkgZGVmYXVsdCwgaWYgZXJyb3Igb25seSBtZXNzYWdlIGFuZCBuYW1lIHdpbGwgYmUgcHJpbnRlZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlcnJvckNhdXNlVG9TdHJpbmcoZXJyb3I6IEVycm9yLCBvcHRzPzogRXJyb3JDYXVzZVRvU3RyaW5nT3B0aW9uc1R5cGUpOiBzdHJpbmcge1xuICAgIC8vIGlmIGFscmVhZHkgbG9nZ2VkIGFzIGh0dHAgZXJyb3IsIGNoZWNrIHRoYXQgY2F1c2UgaXMgbm90IGFsc28gaHR0cCBlcnJvciAoY2F1c2UgaXQgaXMgdXN1YWxseSBkdXBsaWNhdGVkKVxuICAgIGlmIChlcnJvci5jYXVzZSAmJiAoIW9wdHM/LmNhdXNlT25FcnJvck9ubHkgfHwgZXJyb3IuY2F1c2UgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgY29uc3QgbmVlZHNTdHJpbmdpZnkgPSBvcHRzPy5jYXVzZUFzSnNvbiB8fCAhKGVycm9yLmNhdXNlIGluc3RhbmNlb2YgRXJyb3IpO1xuICAgICAgICBpZiAoIW9wdHM/LmNhdXNlT25FcnJvck9ubHkgfHwgZXJyb3IuY2F1c2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAnQ2F1c2VkIGJ5OiAnICtcbiAgICAgICAgICAgICAgICAobmVlZHNTdHJpbmdpZnkgPyBzdHJpbmdpZnkoZXJyb3IuY2F1c2UpIDogYCR7KGVycm9yLmNhdXNlIGFzIEVycm9yKS5tZXNzYWdlfSR7KGVycm9yLmNhdXNlIGFzIEVycm9yKS5uYW1lID8gYCAoJHsoZXJyb3IuY2F1c2UgYXMgRXJyb3IpLm5hbWV9KWAgOiAnJ31gKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogVGhyb3dzIGFuIGVycm9yIHdpdGggdGhlIHByb3ZpZGVkIGVycm9yIG1lc3NhZ2UuXG4gKiBUaGUgaW50ZW5kZWQgdXNhZ2UgaXMgZm9yIGluLWxpbmUgdGhyb3dpbmcgb2YgYW4gZXJyb3Igd2l0aCBUUyB0eXBlIG5hcnJvd2luZy5cbiAqIDxicj5cbiAqIDxpPkV4YW1wbGU8L2k+OlxuICogPHByZT5cbiAqICAgY29uc3QgdmFsdWU6IHN0cmluZyB8IG51bGwgPSBnZXRWYWx1ZShcIlwiKTtcbiAqICAgY29uc3Qgbm9uTnVsbFZhbHVlOiBzdHJpbmcgPSBnZXRWYWx1ZShcIlwiKSA/PyB0aHJvd0Vycm9yKFwidmFsdWUgbWlzc2luZ1wiKTtcbiAqIDwvcHJlPlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBlcnJvck1lc3NhZ2UgLSBUaGUgZXJyb3IgbWVzc2FnZSB0byBiZSB0aHJvd24uXG4gKiBAcGFyYW0ge0NvbW1vbnNFcnJvckJhc2VPcHRpb25zfSBbb3B0aW9uc10gLSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSB0aHJvd24gZXJyb3IuXG4gKiBAdGhyb3dzIHtFcnJvcn0gLSBUaGUgZXJyb3Igb2JqZWN0IHdpdGggdGhlIHByb3ZpZGVkIGVycm9yIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7bmV2ZXJ9IC0gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS5cbiAqIEBzZWUgQ29tbW9uc0Vycm9yQmFzZU9wdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm93RXJyb3IoZXJyb3JNZXNzYWdlOiBzdHJpbmcsIG9wdGlvbnM/OiBDb21tb25zRXJyb3JCYXNlT3B0aW9ucyk6IG5ldmVyIHtcbiAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoZXJyb3JNZXNzYWdlLCBvcHRpb25zKTtcbn1cblxuZXhwb3J0IHR5cGUgRXJyb3JUb1N0cmluZ09wdGlvbnNUeXBlID0gRXJyb3JUb1N0cmluZ09wdGlvbnNCYXNlVHlwZSAmXG4gICAgSHR0cEVycm9yUmVzcG9uc2VUb1N0cmluZ09wdGlvbnNUeXBlICZcbiAgICBBY3Rpb25FcnJvckNvbnRleHRUb1N0cmluZ09wdGlvbnNUeXBlICZcbiAgICBFcnJvckNhdXNlVG9TdHJpbmdPcHRpb25zVHlwZSAmIHtcbiAgICAgICAgaGlkZURldGFpbHM/OiBib29sZWFuO1xuICAgICAgICBoaWRlTG9jYXRpb24/OiBib29sZWFuO1xuICAgIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JUb1N0cmluZ09wdGlvbnNCYXNlVHlwZSB7XG4gICAgaGlkZU5hbWU/OiBib29sZWFuO1xuICAgIGhpZGVTdGFjaz86IGJvb2xlYW47XG4gICAgaGlkZUNhdXNlPzogYm9vbGVhbjtcbiAgICBoaWRlSHR0cD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cEVycm9yUmVzcG9uc2VUb1N0cmluZ09wdGlvbnNUeXBlIHtcbiAgICBoaWRlTWVzc2FnZT86IGJvb2xlYW47XG4gICAgaGlkZUhlYWRlcnM/OiBib29sZWFuO1xuICAgIGhpZGVCb2R5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25FcnJvckNvbnRleHRUb1N0cmluZ09wdGlvbnNUeXBlIHtcbiAgICBoaWRlSXRlbXM/OiBib29sZWFuO1xuICAgIGhpZGVBY3Rpb25EYXRhPzogYm9vbGVhbjtcbiAgICBoaWRlUXVlcnlQYXJhbXM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yQ2F1c2VUb1N0cmluZ09wdGlvbnNUeXBlIHtcbiAgICBjYXVzZU9uRXJyb3JPbmx5PzogYm9vbGVhbjtcbiAgICBjYXVzZUFzSnNvbj86IGJvb2xlYW47XG59XG4iXX0=","import { HttpErrorResponse } from '@angular/common/http';\nimport { LoggerService } from '../log/logger.service';\nimport { getErrorLogLevel } from './error-helpers';\nimport { ACommonsErrorBase } from './error.model';\nexport class CommonsErrorHandler {\n constructor() {\n this.logger = LoggerService.get();\n }\n static { this.logCategory = 'ErrorHandler'; }\n handleError(error) {\n if (error instanceof ACommonsErrorBase || error instanceof HttpErrorResponse) {\n const logLevel = getErrorLogLevel(error);\n this.logger.log(error, logLevel);\n }\n else {\n this.logger.error('Unexpected error occurred', error);\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL2Vycm9yL2Vycm9yLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFHdkQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVoRCxNQUFNLE9BQU8sbUJBQW1CO0lBQWhDO1FBRXFCLFdBQU0sR0FBRyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUM7SUFVbEQsQ0FBQzthQVgyQixnQkFBVyxHQUFHLGNBQWMsQUFBakIsQ0FBa0I7SUFHckQsV0FBVyxDQUFDLEtBQVk7UUFDcEIsSUFBSSxLQUFLLFlBQVksaUJBQWlCLElBQUksS0FBSyxZQUFZLGlCQUFpQixFQUFFLENBQUM7WUFDM0UsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUQsQ0FBQztJQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBFcnJvclJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0Vycm9ySGFuZGxlcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vbG9nL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7Z2V0RXJyb3JMb2dMZXZlbH0gZnJvbSAnLi9lcnJvci1oZWxwZXJzJztcbmltcG9ydCB7QUNvbW1vbnNFcnJvckJhc2V9IGZyb20gJy4vZXJyb3IubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgQ29tbW9uc0Vycm9ySGFuZGxlciBpbXBsZW1lbnRzIEVycm9ySGFuZGxlciB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgbG9nQ2F0ZWdvcnkgPSAnRXJyb3JIYW5kbGVyJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IExvZ2dlclNlcnZpY2UuZ2V0KCk7XG5cbiAgICBoYW5kbGVFcnJvcihlcnJvcjogRXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQUNvbW1vbnNFcnJvckJhc2UgfHwgZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc3QgbG9nTGV2ZWwgPSBnZXRFcnJvckxvZ0xldmVsKGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhlcnJvciwgbG9nTGV2ZWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQnLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=","import { booleanAttribute, numberAttribute } from '@angular/core';\nimport { isObservable, of } from 'rxjs';\nimport { CommonsInternalError } from '../error/error.model';\nexport function boolean$Attribute(value) {\n return isObservable(value) ? value : of(booleanAttribute(value));\n}\nexport function booleanOrUndefinedAttribute(value) {\n return typeof value === 'boolean' ? value : value == null ? undefined : value !== 'false';\n}\nexport function number$Attribute(value) {\n return isObservable(value) ? value : of(numberAttribute(value));\n}\nexport const toObservable = (value) => {\n return isObservable(value) ? value : of(value);\n};\nexport const itemIdToNumber = (value) => {\n if (typeof value === 'number') {\n return value;\n }\n else if (typeof value === 'string') {\n const num = +value;\n if (!isNaN(num)) {\n return num;\n }\n throw new CommonsInternalError(`ItemId is a string, but could not be transformed to number: ${value}`);\n }\n else {\n throw new CommonsInternalError(`ItemId is not a number: ${value}`);\n }\n};\nexport const itemIdToString = (value) => {\n if (typeof value === 'string') {\n return value;\n }\n else {\n throw new CommonsInternalError(`ItemId is not a string: ${value}`);\n }\n};\nexport const itemIdToDefined = (value) => {\n if (typeof value === 'undefined') {\n throw new CommonsInternalError(`ItemId is not defined: ${value}`);\n }\n else {\n return value;\n }\n};\nexport const valueToDefined = (value) => {\n if (typeof value === 'undefined' || value === null) {\n throw new CommonsInternalError(`Value is null or not defined: ${value}`);\n }\n else {\n return value;\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lcmNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9oZWxwZXJzL2NvZXJjaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxlQUFlLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFaEUsT0FBTyxFQUFhLFlBQVksRUFBRSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFbEQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFHMUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQWM7SUFDNUMsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFFLEtBQTZCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzlGLENBQUM7QUFFRCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsS0FBYztJQUN0RCxPQUFPLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUM7QUFDOUYsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFjO0lBQzNDLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBRSxLQUE0QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDNUYsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFJLEtBQXdCLEVBQWlCLEVBQUU7SUFDdkUsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFFLEtBQXVCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0RSxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFjLEVBQVUsRUFBRTtJQUNyRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7U0FBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ25DLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNkLE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sSUFBSSxvQkFBb0IsQ0FBQywrREFBK0QsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzRyxDQUFDO1NBQU0sQ0FBQztRQUNKLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQywyQkFBMkIsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN2RSxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBYyxFQUFVLEVBQUU7SUFDckQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM1QixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO1NBQU0sQ0FBQztRQUNKLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQywyQkFBMkIsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN2RSxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBYyxFQUFVLEVBQUU7SUFDdEQsSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUMvQixNQUFNLElBQUksb0JBQW9CLENBQUMsMEJBQTBCLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUksS0FBa0IsRUFBSyxFQUFFO0lBQ3ZELElBQUksT0FBTyxLQUFLLEtBQUssV0FBVyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNqRCxNQUFNLElBQUksb0JBQW9CLENBQUMsaUNBQWlDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDN0UsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtib29sZWFuQXR0cmlidXRlLCBudW1iZXJBdHRyaWJ1dGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge09ic2VydmFibGUsIGlzT2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0NvbW1vbnNJbnRlcm5hbEVycm9yfSBmcm9tICcuLi9lcnJvci9lcnJvci5tb2RlbCc7XG5pbXBvcnQge0lkVHlwZSwgTnVsbGFibGV9IGZyb20gJy4vdHlwZS1oZWxwZXJzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGJvb2xlYW4kQXR0cmlidXRlKHZhbHVlOiB1bmtub3duKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGlzT2JzZXJ2YWJsZSh2YWx1ZSkgPyAodmFsdWUgYXMgT2JzZXJ2YWJsZTxib29sZWFuPikgOiBvZihib29sZWFuQXR0cmlidXRlKHZhbHVlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBib29sZWFuT3JVbmRlZmluZWRBdHRyaWJ1dGUodmFsdWU6IHVua25vd24pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgPyB2YWx1ZSA6IHZhbHVlID09IG51bGwgPyB1bmRlZmluZWQgOiB2YWx1ZSAhPT0gJ2ZhbHNlJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlciRBdHRyaWJ1dGUodmFsdWU6IHVua25vd24pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiBpc09ic2VydmFibGUodmFsdWUpID8gKHZhbHVlIGFzIE9ic2VydmFibGU8bnVtYmVyPikgOiBvZihudW1iZXJBdHRyaWJ1dGUodmFsdWUpKTtcbn1cblxuZXhwb3J0IGNvbnN0IHRvT2JzZXJ2YWJsZSA9IDxUPih2YWx1ZTogVCB8IE9ic2VydmFibGU8VD4pOiBPYnNlcnZhYmxlPFQ+ID0+IHtcbiAgICByZXR1cm4gaXNPYnNlcnZhYmxlKHZhbHVlKSA/ICh2YWx1ZSBhcyBPYnNlcnZhYmxlPFQ+KSA6IG9mKHZhbHVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpdGVtSWRUb051bWJlciA9ICh2YWx1ZT86IElkVHlwZSk6IG51bWJlciA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBudW0gPSArdmFsdWU7XG4gICAgICAgIGlmICghaXNOYU4obnVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEl0ZW1JZCBpcyBhIHN0cmluZywgYnV0IGNvdWxkIG5vdCBiZSB0cmFuc2Zvcm1lZCB0byBudW1iZXI6ICR7dmFsdWV9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBJdGVtSWQgaXMgbm90IGEgbnVtYmVyOiAke3ZhbHVlfWApO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpdGVtSWRUb1N0cmluZyA9ICh2YWx1ZT86IElkVHlwZSk6IHN0cmluZyA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgSXRlbUlkIGlzIG5vdCBhIHN0cmluZzogJHt2YWx1ZX1gKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXRlbUlkVG9EZWZpbmVkID0gKHZhbHVlPzogSWRUeXBlKTogSWRUeXBlID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEl0ZW1JZCBpcyBub3QgZGVmaW5lZDogJHt2YWx1ZX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHZhbHVlVG9EZWZpbmVkID0gPFQ+KHZhbHVlOiBOdWxsYWJsZTxUPik6IFQgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgVmFsdWUgaXMgbnVsbCBvciBub3QgZGVmaW5lZDogJHt2YWx1ZX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufTtcbiJdfQ==","/**\n * Displays a toast notification message with a specified severity level and optional customization. Presets the life of message and requires message.\n *\n * @param {string} message - The content of the toast message to be displayed.\n * @param {'success' | 'warn' | 'warning' | 'error'} [severity='success'] - The severity level of the message.\n * @param {ToastMessageOptsType} [opts] - Optional configuration for the toast message, which can include a title, icon, and message service for displaying the notification. If message service is provided, the message will be automatically added.\n * @return {Message} - The notification message object created for the toast.\n */\nexport function toastMessage(message, severity = 'success', opts) {\n switch (severity) {\n case 'warning':\n // primeng does not support 'warning', must be 'warn'\n severity = 'warn';\n break;\n }\n const notification = { severity: severity, summary: opts?.title, detail: message, life: severity === 'error' ? 10_000 : 5000, icon: opts?.icon };\n // it will only be added if message service is provided, otherwise provide manually\n opts?.messageService?.add(notification);\n return notification;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvaGVscGVycy9ub3RpZmljYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUE7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsT0FBZSxFQUFFLFdBQXFELFNBQVMsRUFBRSxJQUEyQjtJQUNySSxRQUFRLFFBQVEsRUFBRSxDQUFDO1FBQ2YsS0FBSyxTQUFTO1lBQ1YscURBQXFEO1lBQ3JELFFBQVEsR0FBRyxNQUFNLENBQUM7WUFDbEIsTUFBTTtJQUNkLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBd0IsRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFDcEssbUZBQW1GO0lBQ25GLElBQUksRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sWUFBWSxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01lc3NhZ2VTZXJ2aWNlLCBUb2FzdE1lc3NhZ2VPcHRpb25zfSBmcm9tICdwcmltZW5nL2FwaSc7XG5cbnR5cGUgVG9hc3RNZXNzYWdlT3B0c1R5cGUgPSB7XG4gICAgbWVzc2FnZVNlcnZpY2U/OiBNZXNzYWdlU2VydmljZTtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICBzdGlja3k/OiBib29sZWFuO1xuICAgIGNsb3NhYmxlPzogYm9vbGVhbjtcbiAgICBpY29uPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBEaXNwbGF5cyBhIHRvYXN0IG5vdGlmaWNhdGlvbiBtZXNzYWdlIHdpdGggYSBzcGVjaWZpZWQgc2V2ZXJpdHkgbGV2ZWwgYW5kIG9wdGlvbmFsIGN1c3RvbWl6YXRpb24uIFByZXNldHMgdGhlIGxpZmUgb2YgbWVzc2FnZSBhbmQgcmVxdWlyZXMgbWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBjb250ZW50IG9mIHRoZSB0b2FzdCBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZC5cbiAqIEBwYXJhbSB7J3N1Y2Nlc3MnIHwgJ3dhcm4nIHwgJ3dhcm5pbmcnIHwgJ2Vycm9yJ30gW3NldmVyaXR5PSdzdWNjZXNzJ10gLSBUaGUgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge1RvYXN0TWVzc2FnZU9wdHNUeXBlfSBbb3B0c10gLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgdG9hc3QgbWVzc2FnZSwgd2hpY2ggY2FuIGluY2x1ZGUgYSB0aXRsZSwgaWNvbiwgYW5kIG1lc3NhZ2Ugc2VydmljZSBmb3IgZGlzcGxheWluZyB0aGUgbm90aWZpY2F0aW9uLiBJZiBtZXNzYWdlIHNlcnZpY2UgaXMgcHJvdmlkZWQsIHRoZSBtZXNzYWdlIHdpbGwgYmUgYXV0b21hdGljYWxseSBhZGRlZC5cbiAqIEByZXR1cm4ge01lc3NhZ2V9IC0gVGhlIG5vdGlmaWNhdGlvbiBtZXNzYWdlIG9iamVjdCBjcmVhdGVkIGZvciB0aGUgdG9hc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2FzdE1lc3NhZ2UobWVzc2FnZTogc3RyaW5nLCBzZXZlcml0eTogJ3N1Y2Nlc3MnIHwgJ3dhcm4nIHwgJ3dhcm5pbmcnIHwgJ2Vycm9yJyA9ICdzdWNjZXNzJywgb3B0cz86IFRvYXN0TWVzc2FnZU9wdHNUeXBlKTogVG9hc3RNZXNzYWdlT3B0aW9ucyB7XG4gICAgc3dpdGNoIChzZXZlcml0eSkge1xuICAgICAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgICAgICAgIC8vIHByaW1lbmcgZG9lcyBub3Qgc3VwcG9ydCAnd2FybmluZycsIG11c3QgYmUgJ3dhcm4nXG4gICAgICAgICAgICBzZXZlcml0eSA9ICd3YXJuJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbjogVG9hc3RNZXNzYWdlT3B0aW9ucyA9IHtzZXZlcml0eTogc2V2ZXJpdHksIHN1bW1hcnk6IG9wdHM/LnRpdGxlLCBkZXRhaWw6IG1lc3NhZ2UsIGxpZmU6IHNldmVyaXR5ID09PSAnZXJyb3InID8gMTBfMDAwIDogNTAwMCwgaWNvbjogb3B0cz8uaWNvbn07XG4gICAgLy8gaXQgd2lsbCBvbmx5IGJlIGFkZGVkIGlmIG1lc3NhZ2Ugc2VydmljZSBpcyBwcm92aWRlZCwgb3RoZXJ3aXNlIHByb3ZpZGUgbWFudWFsbHlcbiAgICBvcHRzPy5tZXNzYWdlU2VydmljZT8uYWRkKG5vdGlmaWNhdGlvbik7XG4gICAgcmV0dXJuIG5vdGlmaWNhdGlvbjtcbn1cbiJdfQ==","export function fromAngularNumberFormatToFractions(format) {\n const hasDot = format.indexOf('.') >= 0;\n const hasDash = format.indexOf('-') >= 0;\n const [intPart, decPart] = format.split('.');\n let int = hasDot || (!hasDot && !hasDash) ? +intPart : 1;\n if (!int || isNaN(int))\n int = 1;\n let [fractionsMin, fractionsMax] = !hasDot && !hasDash ? [0, 0] : (hasDot ? decPart : intPart).split('-').map(f => +f);\n if (isNaN(fractionsMin))\n fractionsMin = 0;\n if (fractionsMax == null || isNaN(fractionsMax))\n fractionsMax = fractionsMin;\n return {\n integer: int,\n fractionsMin: fractionsMin,\n fractionsMax: fractionsMax\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvaGVscGVycy9udW1iZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLGtDQUFrQyxDQUFDLE1BQWM7SUFLN0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLElBQUksR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekQsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNoQyxJQUFJLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkgsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQUUsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUMxQyxJQUFJLFlBQVksSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQztRQUFFLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDN0UsT0FBTztRQUNILE9BQU8sRUFBRSxHQUFHO1FBQ1osWUFBWSxFQUFFLFlBQVk7UUFDMUIsWUFBWSxFQUFFLFlBQVk7S0FDN0IsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZnJvbUFuZ3VsYXJOdW1iZXJGb3JtYXRUb0ZyYWN0aW9ucyhmb3JtYXQ6IHN0cmluZyk6IHtcbiAgICBpbnRlZ2VyOiBudW1iZXI7XG4gICAgZnJhY3Rpb25zTWluOiBudW1iZXI7XG4gICAgZnJhY3Rpb25zTWF4OiBudW1iZXI7XG59IHtcbiAgICBjb25zdCBoYXNEb3QgPSBmb3JtYXQuaW5kZXhPZignLicpID49IDA7XG4gICAgY29uc3QgaGFzRGFzaCA9IGZvcm1hdC5pbmRleE9mKCctJykgPj0gMDtcbiAgICBjb25zdCBbaW50UGFydCwgZGVjUGFydF0gPSBmb3JtYXQuc3BsaXQoJy4nKTtcbiAgICBsZXQgaW50ID0gaGFzRG90IHx8ICghaGFzRG90ICYmICFoYXNEYXNoKSA/ICtpbnRQYXJ0IDogMTtcbiAgICBpZiAoIWludCB8fCBpc05hTihpbnQpKSBpbnQgPSAxO1xuICAgIGxldCBbZnJhY3Rpb25zTWluLCBmcmFjdGlvbnNNYXhdID0gIWhhc0RvdCAmJiAhaGFzRGFzaCA/IFswLCAwXSA6IChoYXNEb3QgPyBkZWNQYXJ0IDogaW50UGFydCkuc3BsaXQoJy0nKS5tYXAoZiA9PiArZik7XG4gICAgaWYgKGlzTmFOKGZyYWN0aW9uc01pbikpIGZyYWN0aW9uc01pbiA9IDA7XG4gICAgaWYgKGZyYWN0aW9uc01heCA9PSBudWxsIHx8IGlzTmFOKGZyYWN0aW9uc01heCkpIGZyYWN0aW9uc01heCA9IGZyYWN0aW9uc01pbjtcbiAgICByZXR1cm4ge1xuICAgICAgICBpbnRlZ2VyOiBpbnQsXG4gICAgICAgIGZyYWN0aW9uc01pbjogZnJhY3Rpb25zTWluLFxuICAgICAgICBmcmFjdGlvbnNNYXg6IGZyYWN0aW9uc01heFxuICAgIH07XG59XG4iXX0=","import { CommonsInternalError } from '../error/error.model';\nexport function removeRouteEmptyPathSegments(path) {\n const filteredPath = path.filter(ps => typeof ps === 'string' && ps.length > 0);\n return filteredPath.length > 0 ? filteredPath : [''];\n}\nexport function appendRoutePathToBasePath(basePath, path) {\n if (path.length > 0) {\n if (path[0].startsWith('/')) {\n return path;\n }\n else if (path[0].startsWith('../')) {\n throw new CommonsInternalError('Not implemented', { name: 'RouteUtilsError' });\n }\n else {\n return removeRouteEmptyPathSegments([...basePath, ...path]);\n }\n }\n else {\n return basePath;\n }\n}\nexport function doesUrlMatchRouterLink(link, url) {\n if (typeof url === 'string' && url.startsWith('/')) {\n url = url.substring(1);\n }\n else if (Array.isArray(url) && url.length > 0 && url[0].startsWith('/')) {\n url[0] = url[0].substring(1);\n }\n const routeSegments = Array.isArray(link) ? link : link.split('/');\n const urlSegments = Array.isArray(url) ? url : url.split('#')[0].split('?')[0].split('/');\n if (routeSegments.length > 0 && urlSegments.length > 0) {\n for (let i = 0; i < routeSegments.length; i++) {\n if (i < urlSegments.length) {\n if (routeSegments[i] !== urlSegments[i]) {\n return false;\n }\n }\n else {\n break;\n }\n }\n return true;\n }\n return false;\n}\nexport function adjustRouteMenuLazyChildrenRouterLinks(rootMenuItem, lazyChildren) {\n return lazyChildren.map(i => {\n const childMenuItem = { ...i };\n if (childMenuItem.routerLink) {\n childMenuItem.routerLink = appendRoutePathToBasePath(rootMenuItem.routerLink, typeof childMenuItem.routerLink === 'string' ? [childMenuItem.routerLink] : childMenuItem.routerLink);\n }\n if (Array.isArray(childMenuItem.items)) {\n childMenuItem.items = adjustRouteMenuLazyChildrenRouterLinks(rootMenuItem, childMenuItem.items);\n }\n return childMenuItem;\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9oZWxwZXJzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRzFELE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxJQUFtQjtJQUM1RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssUUFBUSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEYsT0FBTyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCLENBQUMsUUFBdUIsRUFBRSxJQUFtQjtJQUNsRixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxpQkFBaUIsRUFBRSxFQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBQyxDQUFDLENBQUM7UUFDakYsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLDRCQUE0QixDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7SUFDTCxDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLElBQTRCLEVBQUUsR0FBMkI7SUFDNUYsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2pELEdBQUcsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7U0FBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3hFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkUsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFMUYsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3JELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN6QixJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDdEMsT0FBTyxLQUFLLENBQUM7Z0JBQ2pCLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osTUFBTTtZQUNWLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxNQUFNLFVBQVUsc0NBQXNDLENBQUMsWUFBcUQsRUFBRSxZQUFvQztJQUM5SSxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDeEIsTUFBTSxhQUFhLEdBQUcsRUFBQyxHQUFHLENBQUMsRUFBQyxDQUFDO1FBQzdCLElBQUksYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNCLGFBQWEsQ0FBQyxVQUFVLEdBQUcseUJBQXlCLENBQ2hELFlBQVksQ0FBQyxVQUFVLEVBQ3ZCLE9BQU8sYUFBYSxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUN2RyxDQUFDO1FBQ04sQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxhQUFhLENBQUMsS0FBSyxHQUFHLHNDQUFzQyxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEcsQ0FBQztRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TWVudUl0ZW0gYXMgUHJpbWVNZW51SXRlbX0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5pbXBvcnQge0NvbW1vbnNJbnRlcm5hbEVycm9yfSBmcm9tICcuLi9lcnJvci9lcnJvci5tb2RlbCc7XG5pbXBvcnQge0NvbW1vbnNNZW51SXRlbSwgSW50ZXJuYWxDb21tb25zTWVudUl0ZW19IGZyb20gJy4uL21vZGVscy9tZW51Lm1vZGVsJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVJvdXRlRW1wdHlQYXRoU2VnbWVudHMocGF0aDogQXJyYXk8c3RyaW5nPikge1xuICAgIGNvbnN0IGZpbHRlcmVkUGF0aCA9IHBhdGguZmlsdGVyKHBzID0+IHR5cGVvZiBwcyA9PT0gJ3N0cmluZycgJiYgcHMubGVuZ3RoID4gMCk7XG4gICAgcmV0dXJuIGZpbHRlcmVkUGF0aC5sZW5ndGggPiAwID8gZmlsdGVyZWRQYXRoIDogWycnXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZFJvdXRlUGF0aFRvQmFzZVBhdGgoYmFzZVBhdGg6IEFycmF5PHN0cmluZz4sIHBhdGg6IEFycmF5PHN0cmluZz4pIHtcbiAgICBpZiAocGF0aC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChwYXRoWzBdLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICAgIH0gZWxzZSBpZiAocGF0aFswXS5zdGFydHNXaXRoKCcuLi8nKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnLCB7bmFtZTogJ1JvdXRlVXRpbHNFcnJvcid9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZW1vdmVSb3V0ZUVtcHR5UGF0aFNlZ21lbnRzKFsuLi5iYXNlUGF0aCwgLi4ucGF0aF0pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJhc2VQYXRoO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvZXNVcmxNYXRjaFJvdXRlckxpbmsobGluazogQXJyYXk8c3RyaW5nPiB8IHN0cmluZywgdXJsOiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnICYmIHVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgdXJsID0gdXJsLnN1YnN0cmluZygxKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodXJsKSAmJiB1cmwubGVuZ3RoID4gMCAmJiB1cmxbMF0uc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIHVybFswXSA9IHVybFswXS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm91dGVTZWdtZW50cyA9IEFycmF5LmlzQXJyYXkobGluaykgPyBsaW5rIDogbGluay5zcGxpdCgnLycpO1xuICAgIGNvbnN0IHVybFNlZ21lbnRzID0gQXJyYXkuaXNBcnJheSh1cmwpID8gdXJsIDogdXJsLnNwbGl0KCcjJylbMF0uc3BsaXQoJz8nKVswXS5zcGxpdCgnLycpO1xuXG4gICAgaWYgKHJvdXRlU2VnbWVudHMubGVuZ3RoID4gMCAmJiB1cmxTZWdtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm91dGVTZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgPCB1cmxTZWdtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAocm91dGVTZWdtZW50c1tpXSAhPT0gdXJsU2VnbWVudHNbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkanVzdFJvdXRlTWVudUxhenlDaGlsZHJlblJvdXRlckxpbmtzKHJvb3RNZW51SXRlbTogUHJpbWVNZW51SXRlbSB8IEludGVybmFsQ29tbW9uc01lbnVJdGVtLCBsYXp5Q2hpbGRyZW46IEFycmF5PENvbW1vbnNNZW51SXRlbT4pIHtcbiAgICByZXR1cm4gbGF6eUNoaWxkcmVuLm1hcChpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGRNZW51SXRlbSA9IHsuLi5pfTtcbiAgICAgICAgaWYgKGNoaWxkTWVudUl0ZW0ucm91dGVyTGluaykge1xuICAgICAgICAgICAgY2hpbGRNZW51SXRlbS5yb3V0ZXJMaW5rID0gYXBwZW5kUm91dGVQYXRoVG9CYXNlUGF0aChcbiAgICAgICAgICAgICAgICByb290TWVudUl0ZW0ucm91dGVyTGluayxcbiAgICAgICAgICAgICAgICB0eXBlb2YgY2hpbGRNZW51SXRlbS5yb3V0ZXJMaW5rID09PSAnc3RyaW5nJyA/IFtjaGlsZE1lbnVJdGVtLnJvdXRlckxpbmtdIDogY2hpbGRNZW51SXRlbS5yb3V0ZXJMaW5rXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkTWVudUl0ZW0uaXRlbXMpKSB7XG4gICAgICAgICAgICBjaGlsZE1lbnVJdGVtLml0ZW1zID0gYWRqdXN0Um91dGVNZW51TGF6eUNoaWxkcmVuUm91dGVyTGlua3Mocm9vdE1lbnVJdGVtLCBjaGlsZE1lbnVJdGVtLml0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hpbGRNZW51SXRlbTtcbiAgICB9KTtcbn1cbiJdfQ==","export function findTemplateByName(templates, name) {\n return templates.find(t => t.name() === name)?.template ?? null;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvaGVscGVycy90ZW1wbGF0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFNBQThCLEVBQUUsSUFBWTtJQUMzRSxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQztBQUNwRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUZW1wbGF0ZVJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7VGVtcGxhdGVEaXJlY3RpdmV9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdGVtcGxhdGUuZGlyZWN0aXZlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRUZW1wbGF0ZUJ5TmFtZSh0ZW1wbGF0ZXM6IFRlbXBsYXRlRGlyZWN0aXZlW10sIG5hbWU6IHN0cmluZyk6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsIHtcbiAgICByZXR1cm4gdGVtcGxhdGVzLmZpbmQodCA9PiB0Lm5hbWUoKSA9PT0gbmFtZSk/LnRlbXBsYXRlID8/IG51bGw7XG59XG4iXX0=","import { map } from 'rxjs/operators';\nexport function getI18nAsync(translate, params, ...keys) {\n return translate.stream(keys, params).pipe(map((i18n) => selectI18n(keys, i18n)));\n}\nexport function getI18n(translate, params, ...keys) {\n const i18n = translate.instant(keys, params);\n return selectI18n(keys, i18n);\n}\nexport function populateI18nParams(item, params = {}) {\n const paramsRes = { ...params };\n if (item) {\n paramsRes.item = item;\n }\n return paramsRes;\n}\nexport function selectI18n(keys, i18n) {\n for (const key of keys) {\n const i18nForKey = narrowI18nToTranslation(i18n, key);\n if (key !== i18nForKey) {\n return i18nForKey ?? null;\n }\n }\n return null;\n}\nexport function narrowI18nToTranslation(i18n, keyOrIdx) {\n if (i18n == null) {\n return undefined;\n }\n else if (Array.isArray(i18n)) {\n return typeof keyOrIdx === 'number' ? narrowI18nToTranslation(i18n[keyOrIdx]) : undefined;\n }\n else if (typeof i18n === 'object') {\n return keyOrIdx != null ? narrowI18nToTranslation(i18n[keyOrIdx]) : undefined;\n }\n else {\n return i18n;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi1jb21tb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9pMThuL2kxOG4tY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuQyxNQUFNLFVBQVUsWUFBWSxDQUFDLFNBQTJCLEVBQUUsTUFBWSxFQUFFLEdBQUcsSUFBbUI7SUFDMUYsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBdUIsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekcsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsU0FBMkIsRUFBRSxNQUFZLEVBQUUsR0FBRyxJQUFtQjtJQUNyRixNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM3QyxPQUFPLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxJQUFVLEVBQUUsU0FBYyxFQUFFO0lBQzNELE1BQU0sU0FBUyxHQUFHLEVBQUMsR0FBRyxNQUFNLEVBQUMsQ0FBQztJQUM5QixJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1AsU0FBUyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFDLElBQWMsRUFBRSxJQUFpQjtJQUN4RCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3JCLE1BQU0sVUFBVSxHQUFHLHVCQUF1QixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0RCxJQUFJLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNyQixPQUFPLFVBQVUsSUFBSSxJQUFJLENBQUM7UUFDOUIsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxVQUFVLHVCQUF1QixDQUFDLElBQXVCLEVBQUUsUUFBMEI7SUFDdkYsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDZixPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO1NBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDN0IsT0FBTyxPQUFPLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDOUYsQ0FBQztTQUFNLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbEMsT0FBTyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2xGLENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1N0cmljdFRyYW5zbGF0aW9uLCBUcmFuc2xhdGVTZXJ2aWNlLCBUcmFuc2xhdGlvbiwgVHJhbnNsYXRpb25PYmplY3R9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJMThuQXN5bmModHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBwYXJhbXM/OiBhbnksIC4uLmtleXM6IEFycmF5PHN0cmluZz4pOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gdHJhbnNsYXRlLnN0cmVhbShrZXlzLCBwYXJhbXMpLnBpcGUobWFwKChpMThuOiBUcmFuc2xhdGlvbk9iamVjdCkgPT4gc2VsZWN0STE4bihrZXlzLCBpMThuKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4bih0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHBhcmFtcz86IGFueSwgLi4ua2V5czogQXJyYXk8c3RyaW5nPik6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGkxOG4gPSB0cmFuc2xhdGUuaW5zdGFudChrZXlzLCBwYXJhbXMpO1xuICAgIHJldHVybiBzZWxlY3RJMThuKGtleXMsIGkxOG4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wdWxhdGVJMThuUGFyYW1zKGl0ZW0/OiBhbnksIHBhcmFtczogYW55ID0ge30pIHtcbiAgICBjb25zdCBwYXJhbXNSZXMgPSB7Li4ucGFyYW1zfTtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgICBwYXJhbXNSZXMuaXRlbSA9IGl0ZW07XG4gICAgfVxuICAgIHJldHVybiBwYXJhbXNSZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RJMThuKGtleXM6IHN0cmluZ1tdLCBpMThuOiBUcmFuc2xhdGlvbik6IHN0cmluZyB8IG51bGwge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgY29uc3QgaTE4bkZvcktleSA9IG5hcnJvd0kxOG5Ub1RyYW5zbGF0aW9uKGkxOG4sIGtleSk7XG4gICAgICAgIGlmIChrZXkgIT09IGkxOG5Gb3JLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBpMThuRm9yS2V5ID8/IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYXJyb3dJMThuVG9UcmFuc2xhdGlvbihpMThuOiBTdHJpY3RUcmFuc2xhdGlvbiwga2V5T3JJZHg/OiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmIChpMThuID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaTE4bikpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBrZXlPcklkeCA9PT0gJ251bWJlcicgPyBuYXJyb3dJMThuVG9UcmFuc2xhdGlvbihpMThuW2tleU9ySWR4XSkgOiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaTE4biA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGtleU9ySWR4ICE9IG51bGwgPyBuYXJyb3dJMThuVG9UcmFuc2xhdGlvbihpMThuW2tleU9ySWR4XSkgOiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGkxOG47XG4gICAgfVxufVxuIl19","import { getHttpErrorResponse, isHttpErrorResponse } from '../error/error-helpers';\nimport { getI18n } from './i18n-common';\nexport function getI18nForError(translate, error, params = {}) {\n const i18nParams = getI18nErrorParams(error, params);\n // try to get message code from code or http status\n const messageCode = error['messageCode'] ?? i18nParams.httpStatus;\n if (messageCode) {\n const keys = [`errors.${messageCode}`, `messages.${messageCode}`];\n const i18n = getI18n(translate, i18nParams, ...keys);\n if (i18n) {\n return i18n;\n }\n }\n return getI18n(translate, i18nParams, error.message);\n}\nexport function getI18nErrorParams(error, params = {}) {\n const paramsRes = { ...params };\n if (isHttpErrorResponse(error)) {\n const httpError = getHttpErrorResponse(error);\n paramsRes.httpUrl = httpError?.url;\n paramsRes.httpStatus = httpError?.status;\n paramsRes.httpMessage = httpError?.message;\n paramsRes.httpStatusText = httpError?.statusText;\n }\n paramsRes.message = error.message;\n paramsRes.error = error;\n return paramsRes;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi1lcnJvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL2kxOG4vaTE4bi1lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXRDLE1BQU0sVUFBVSxlQUFlLENBQUMsU0FBMkIsRUFBRSxLQUFZLEVBQUUsU0FBYyxFQUFFO0lBQ3ZGLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyRCxtREFBbUQ7SUFDbkQsTUFBTSxXQUFXLEdBQUksS0FBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUM7SUFDM0UsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNkLE1BQU0sSUFBSSxHQUFHLENBQUMsVUFBVSxXQUFXLEVBQUUsRUFBRSxZQUFZLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDbEUsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNyRCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1AsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQVksRUFBRSxTQUFjLEVBQUU7SUFDN0QsTUFBTSxTQUFTLEdBQUcsRUFBQyxHQUFHLE1BQU0sRUFBQyxDQUFDO0lBRTlCLElBQUksbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM3QixNQUFNLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxTQUFTLENBQUMsT0FBTyxHQUFHLFNBQVMsRUFBRSxHQUFHLENBQUM7UUFDbkMsU0FBUyxDQUFDLFVBQVUsR0FBRyxTQUFTLEVBQUUsTUFBTSxDQUFDO1FBQ3pDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsU0FBUyxFQUFFLE9BQU8sQ0FBQztRQUMzQyxTQUFTLENBQUMsY0FBYyxHQUFHLFNBQVMsRUFBRSxVQUFVLENBQUM7SUFDckQsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUNsQyxTQUFTLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUN4QixPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW1wb3J0IHtnZXRIdHRwRXJyb3JSZXNwb25zZSwgaXNIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSAnLi4vZXJyb3IvZXJyb3ItaGVscGVycyc7XG5pbXBvcnQge2dldEkxOG59IGZyb20gJy4vaTE4bi1jb21tb24nO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4bkZvckVycm9yKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgZXJyb3I6IEVycm9yLCBwYXJhbXM6IGFueSA9IHt9KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgaTE4blBhcmFtcyA9IGdldEkxOG5FcnJvclBhcmFtcyhlcnJvciwgcGFyYW1zKTtcbiAgICAvLyB0cnkgdG8gZ2V0IG1lc3NhZ2UgY29kZSBmcm9tIGNvZGUgb3IgaHR0cCBzdGF0dXNcbiAgICBjb25zdCBtZXNzYWdlQ29kZSA9IChlcnJvciBhcyBhbnkpWydtZXNzYWdlQ29kZSddID8/IGkxOG5QYXJhbXMuaHR0cFN0YXR1cztcbiAgICBpZiAobWVzc2FnZUNvZGUpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IFtgZXJyb3JzLiR7bWVzc2FnZUNvZGV9YCwgYG1lc3NhZ2VzLiR7bWVzc2FnZUNvZGV9YF07XG4gICAgICAgIGNvbnN0IGkxOG4gPSBnZXRJMThuKHRyYW5zbGF0ZSwgaTE4blBhcmFtcywgLi4ua2V5cyk7XG4gICAgICAgIGlmIChpMThuKSB7XG4gICAgICAgICAgICByZXR1cm4gaTE4bjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZ2V0STE4bih0cmFuc2xhdGUsIGkxOG5QYXJhbXMsIGVycm9yLm1lc3NhZ2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4bkVycm9yUGFyYW1zKGVycm9yOiBFcnJvciwgcGFyYW1zOiBhbnkgPSB7fSkge1xuICAgIGNvbnN0IHBhcmFtc1JlcyA9IHsuLi5wYXJhbXN9O1xuXG4gICAgaWYgKGlzSHR0cEVycm9yUmVzcG9uc2UoZXJyb3IpKSB7XG4gICAgICAgIGNvbnN0IGh0dHBFcnJvciA9IGdldEh0dHBFcnJvclJlc3BvbnNlKGVycm9yKTtcbiAgICAgICAgcGFyYW1zUmVzLmh0dHBVcmwgPSBodHRwRXJyb3I/LnVybDtcbiAgICAgICAgcGFyYW1zUmVzLmh0dHBTdGF0dXMgPSBodHRwRXJyb3I/LnN0YXR1cztcbiAgICAgICAgcGFyYW1zUmVzLmh0dHBNZXNzYWdlID0gaHR0cEVycm9yPy5tZXNzYWdlO1xuICAgICAgICBwYXJhbXNSZXMuaHR0cFN0YXR1c1RleHQgPSBodHRwRXJyb3I/LnN0YXR1c1RleHQ7XG4gICAgfVxuXG4gICAgcGFyYW1zUmVzLm1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgIHBhcmFtc1Jlcy5lcnJvciA9IGVycm9yO1xuICAgIHJldHVybiBwYXJhbXNSZXM7XG59XG4iXX0=","import { of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { getI18n, getI18nAsync, populateI18nParams } from './i18n-common';\nexport function getI18nTypeNameAsync(translate, typeName, singular) {\n const keys = getI18nTypeNameKeys(typeName, singular);\n return getI18nAsync(translate, undefined, ...keys);\n}\nexport function getI18nTypeName(translate, typeName, singular) {\n const keys = getI18nTypeNameKeys(typeName, singular);\n return getI18n(translate, undefined, ...keys);\n}\nexport function getI18nTypeTabKey(typeName, tab) {\n return getI18nTypeKeyBasePath(typeName, 'tabs', tab);\n}\nexport function getI18nTypeGroupKey(typeName, group) {\n return getI18nTypeKeyBasePath(typeName, 'groups', group);\n}\nexport function getI18nTypePropertyKey(typeName, property) {\n return getI18nTypeKeyBasePath(typeName, 'properties', property);\n}\nexport function getI18nTypeKeyBasePath(typeName, ...path) {\n return `${typeName.length ? `${typeName}.` : ''}${path.join('.')}`;\n}\nexport function getI18nTypeParams(translate, typeName, item, params = {}) {\n const i18nTypeName = typeName ? getI18nTypeName(translate, typeName, true) : null;\n return populateI18nTypeParams(i18nTypeName ?? undefined, item, params);\n}\nexport function getI18nTypeParamsAsync(translate, typeName, item, params = {}) {\n return (typeName ? getI18nTypeNameAsync(translate, typeName, true) : of(null)).pipe(map(i18nTypeName => populateI18nTypeParams(i18nTypeName ?? undefined, item, params)));\n}\nexport function populateI18nTypeParams(i18nTypeName, item, params = {}) {\n const paramsRes = { ...params };\n if (i18nTypeName) {\n paramsRes.typeName = i18nTypeName;\n }\n return populateI18nParams(item, paramsRes);\n}\nfunction getI18nTypeNameKeys(typeName, singular) {\n const keys = [];\n if (typeof singular !== 'undefined') {\n keys.push(singular ? `${typeName}.nameSingular` : `${typeName}.namePlural`);\n }\n keys.push(`${typeName.length ? `${typeName}.` : ''}name`);\n return keys;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi10eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvaTE4bi9pMThuLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFhLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsT0FBTyxFQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFeEUsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFNBQTJCLEVBQUUsUUFBZ0IsRUFBRSxRQUFrQjtJQUNsRyxNQUFNLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckQsT0FBTyxZQUFZLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLFNBQTJCLEVBQUUsUUFBZ0IsRUFBRSxRQUFrQjtJQUM3RixNQUFNLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckQsT0FBTyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBZ0IsRUFBRSxHQUFXO0lBQzNELE9BQU8sc0JBQXNCLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLFFBQWdCLEVBQUUsS0FBYTtJQUMvRCxPQUFPLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxRQUFnQixFQUFFLFFBQWdCO0lBQ3JFLE9BQU8sc0JBQXNCLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFFBQWdCLEVBQUUsR0FBRyxJQUFtQjtJQUMzRSxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUN2RSxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFNBQTJCLEVBQUUsUUFBaUIsRUFBRSxJQUFVLEVBQUUsU0FBYyxFQUFFO0lBQzFHLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNsRixPQUFPLHNCQUFzQixDQUFDLFlBQVksSUFBSSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsU0FBMkIsRUFBRSxRQUFpQixFQUFFLElBQVUsRUFBRSxTQUFjLEVBQUU7SUFDL0csT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLHNCQUFzQixDQUFDLFlBQVksSUFBSSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5SyxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFlBQXFCLEVBQUUsSUFBVSxFQUFFLFNBQWMsRUFBRTtJQUN0RixNQUFNLFNBQVMsR0FBRyxFQUFDLEdBQUcsTUFBTSxFQUFDLENBQUM7SUFDOUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNmLFNBQVMsQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDO0lBQ3RDLENBQUM7SUFDRCxPQUFPLGtCQUFrQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxRQUFnQixFQUFFLFFBQWtCO0lBQzdELE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNoQixJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsYUFBYSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUNELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBvZn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge2dldEkxOG4sIGdldEkxOG5Bc3luYywgcG9wdWxhdGVJMThuUGFyYW1zfSBmcm9tICcuL2kxOG4tY29tbW9uJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEkxOG5UeXBlTmFtZUFzeW5jKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgdHlwZU5hbWU6IHN0cmluZywgc2luZ3VsYXI/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3Qga2V5cyA9IGdldEkxOG5UeXBlTmFtZUtleXModHlwZU5hbWUsIHNpbmd1bGFyKTtcbiAgICByZXR1cm4gZ2V0STE4bkFzeW5jKHRyYW5zbGF0ZSwgdW5kZWZpbmVkLCAuLi5rZXlzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEkxOG5UeXBlTmFtZSh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHR5cGVOYW1lOiBzdHJpbmcsIHNpbmd1bGFyPzogYm9vbGVhbik6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGtleXMgPSBnZXRJMThuVHlwZU5hbWVLZXlzKHR5cGVOYW1lLCBzaW5ndWxhcik7XG4gICAgcmV0dXJuIGdldEkxOG4odHJhbnNsYXRlLCB1bmRlZmluZWQsIC4uLmtleXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4blR5cGVUYWJLZXkodHlwZU5hbWU6IHN0cmluZywgdGFiOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXRJMThuVHlwZUtleUJhc2VQYXRoKHR5cGVOYW1lLCAndGFicycsIHRhYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJMThuVHlwZUdyb3VwS2V5KHR5cGVOYW1lOiBzdHJpbmcsIGdyb3VwOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXRJMThuVHlwZUtleUJhc2VQYXRoKHR5cGVOYW1lLCAnZ3JvdXBzJywgZ3JvdXApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4blR5cGVQcm9wZXJ0eUtleSh0eXBlTmFtZTogc3RyaW5nLCBwcm9wZXJ0eTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0STE4blR5cGVLZXlCYXNlUGF0aCh0eXBlTmFtZSwgJ3Byb3BlcnRpZXMnLCBwcm9wZXJ0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJMThuVHlwZUtleUJhc2VQYXRoKHR5cGVOYW1lOiBzdHJpbmcsIC4uLnBhdGg6IEFycmF5PHN0cmluZz4pOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0eXBlTmFtZS5sZW5ndGggPyBgJHt0eXBlTmFtZX0uYCA6ICcnfSR7cGF0aC5qb2luKCcuJyl9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEkxOG5UeXBlUGFyYW1zKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgdHlwZU5hbWU/OiBzdHJpbmcsIGl0ZW0/OiBhbnksIHBhcmFtczogYW55ID0ge30pOiBhbnkge1xuICAgIGNvbnN0IGkxOG5UeXBlTmFtZSA9IHR5cGVOYW1lID8gZ2V0STE4blR5cGVOYW1lKHRyYW5zbGF0ZSwgdHlwZU5hbWUsIHRydWUpIDogbnVsbDtcbiAgICByZXR1cm4gcG9wdWxhdGVJMThuVHlwZVBhcmFtcyhpMThuVHlwZU5hbWUgPz8gdW5kZWZpbmVkLCBpdGVtLCBwYXJhbXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4blR5cGVQYXJhbXNBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHR5cGVOYW1lPzogc3RyaW5nLCBpdGVtPzogYW55LCBwYXJhbXM6IGFueSA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gKHR5cGVOYW1lID8gZ2V0STE4blR5cGVOYW1lQXN5bmModHJhbnNsYXRlLCB0eXBlTmFtZSwgdHJ1ZSkgOiBvZihudWxsKSkucGlwZShtYXAoaTE4blR5cGVOYW1lID0+IHBvcHVsYXRlSTE4blR5cGVQYXJhbXMoaTE4blR5cGVOYW1lID8/IHVuZGVmaW5lZCwgaXRlbSwgcGFyYW1zKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wdWxhdGVJMThuVHlwZVBhcmFtcyhpMThuVHlwZU5hbWU/OiBzdHJpbmcsIGl0ZW0/OiBhbnksIHBhcmFtczogYW55ID0ge30pOiBhbnkge1xuICAgIGNvbnN0IHBhcmFtc1JlcyA9IHsuLi5wYXJhbXN9O1xuICAgIGlmIChpMThuVHlwZU5hbWUpIHtcbiAgICAgICAgcGFyYW1zUmVzLnR5cGVOYW1lID0gaTE4blR5cGVOYW1lO1xuICAgIH1cbiAgICByZXR1cm4gcG9wdWxhdGVJMThuUGFyYW1zKGl0ZW0sIHBhcmFtc1Jlcyk7XG59XG5cbmZ1bmN0aW9uIGdldEkxOG5UeXBlTmFtZUtleXModHlwZU5hbWU6IHN0cmluZywgc2luZ3VsYXI/OiBib29sZWFuKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgY29uc3Qga2V5cyA9IFtdO1xuICAgIGlmICh0eXBlb2Ygc2luZ3VsYXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGtleXMucHVzaChzaW5ndWxhciA/IGAke3R5cGVOYW1lfS5uYW1lU2luZ3VsYXJgIDogYCR7dHlwZU5hbWV9Lm5hbWVQbHVyYWxgKTtcbiAgICB9XG4gICAga2V5cy5wdXNoKGAke3R5cGVOYW1lLmxlbmd0aCA/IGAke3R5cGVOYW1lfS5gIDogJyd9bmFtZWApO1xuICAgIHJldHVybiBrZXlzO1xufVxuIl19","/* eslint-disable no-console */\nimport { getErrorName } from '../error/error-helpers';\nimport { LogLevelEnum } from './log.model';\nexport class LogPublisherConsoleService {\n addEntry(entry) {\n let prefix = `${entry.timestampFormatted}`;\n if (entry.category)\n prefix += ` [${entry.category}]`;\n prefix += ':';\n const message = `${entry.message}${entry.messageDetails ? `\\n${entry.messageDetails}` : ''}`;\n const logParams = [prefix, message];\n if (entry.error) {\n logParams.push(`\\n${getErrorName(entry.error)}:`, entry.error);\n }\n if (entry.data?.length) {\n logParams.push(`\\nData:\\n`, ...entry.data);\n }\n switch (entry.level) {\n case LogLevelEnum.Trace:\n console.trace(...logParams);\n break;\n case LogLevelEnum.Debug:\n console.debug(...logParams);\n break;\n case LogLevelEnum.Log:\n console.log(...logParams);\n break;\n case LogLevelEnum.Info:\n console.info(...logParams);\n break;\n case LogLevelEnum.Warning:\n console.warn(...logParams);\n break;\n case LogLevelEnum.Error:\n console.error(...logParams);\n break;\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLXB1Ymxpc2hlci1jb25zb2xlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9sb2cvbG9nLXB1Ymxpc2hlci1jb25zb2xlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQTBCLFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUVsRSxNQUFNLE9BQU8sMEJBQTBCO0lBQ25DLFFBQVEsQ0FBQyxLQUFlO1FBQ3BCLElBQUksTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0MsSUFBSSxLQUFLLENBQUMsUUFBUTtZQUFFLE1BQU0sSUFBSSxLQUFLLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQztRQUNyRCxNQUFNLElBQUksR0FBRyxDQUFDO1FBRWQsTUFBTSxPQUFPLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM3RixNQUFNLFNBQVMsR0FBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNkLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDckIsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUVELFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xCLEtBQUssWUFBWSxDQUFDLEtBQUs7Z0JBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztnQkFDNUIsTUFBTTtZQUNWLEtBQUssWUFBWSxDQUFDLEtBQUs7Z0JBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztnQkFDNUIsTUFBTTtZQUNWLEtBQUssWUFBWSxDQUFDLEdBQUc7Z0JBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztnQkFDMUIsTUFBTTtZQUNWLEtBQUssWUFBWSxDQUFDLElBQUk7Z0JBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztnQkFDM0IsTUFBTTtZQUNWLEtBQUssWUFBWSxDQUFDLE9BQU87Z0JBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztnQkFDM0IsTUFBTTtZQUNWLEtBQUssWUFBWSxDQUFDLEtBQUs7Z0JBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztnQkFDNUIsTUFBTTtRQUNkLENBQUM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQge2dldEVycm9yTmFtZX0gZnJvbSAnLi4vZXJyb3IvZXJyb3ItaGVscGVycyc7XG5pbXBvcnQge0lMb2dQdWJsaXNoZXIsIExvZ0VudHJ5LCBMb2dMZXZlbEVudW19IGZyb20gJy4vbG9nLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIExvZ1B1Ymxpc2hlckNvbnNvbGVTZXJ2aWNlIGltcGxlbWVudHMgSUxvZ1B1Ymxpc2hlciB7XG4gICAgYWRkRW50cnkoZW50cnk6IExvZ0VudHJ5KTogdm9pZCB7XG4gICAgICAgIGxldCBwcmVmaXggPSBgJHtlbnRyeS50aW1lc3RhbXBGb3JtYXR0ZWR9YDtcbiAgICAgICAgaWYgKGVudHJ5LmNhdGVnb3J5KSBwcmVmaXggKz0gYCBbJHtlbnRyeS5jYXRlZ29yeX1dYDtcbiAgICAgICAgcHJlZml4ICs9ICc6JztcblxuICAgICAgICBjb25zdCBtZXNzYWdlID0gYCR7ZW50cnkubWVzc2FnZX0ke2VudHJ5Lm1lc3NhZ2VEZXRhaWxzID8gYFxcbiR7ZW50cnkubWVzc2FnZURldGFpbHN9YCA6ICcnfWA7XG4gICAgICAgIGNvbnN0IGxvZ1BhcmFtczogYW55W10gPSBbcHJlZml4LCBtZXNzYWdlXTtcbiAgICAgICAgaWYgKGVudHJ5LmVycm9yKSB7XG4gICAgICAgICAgICBsb2dQYXJhbXMucHVzaChgXFxuJHtnZXRFcnJvck5hbWUoZW50cnkuZXJyb3IpfTpgLCBlbnRyeS5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudHJ5LmRhdGE/Lmxlbmd0aCkge1xuICAgICAgICAgICAgbG9nUGFyYW1zLnB1c2goYFxcbkRhdGE6XFxuYCwgLi4uZW50cnkuZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGVudHJ5LmxldmVsKSB7XG4gICAgICAgICAgICBjYXNlIExvZ0xldmVsRW51bS5UcmFjZTpcbiAgICAgICAgICAgICAgICBjb25zb2xlLnRyYWNlKC4uLmxvZ1BhcmFtcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIExvZ0xldmVsRW51bS5EZWJ1ZzpcbiAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKC4uLmxvZ1BhcmFtcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIExvZ0xldmVsRW51bS5Mb2c6XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coLi4ubG9nUGFyYW1zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTG9nTGV2ZWxFbnVtLkluZm86XG4gICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKC4uLmxvZ1BhcmFtcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIExvZ0xldmVsRW51bS5XYXJuaW5nOlxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiguLi5sb2dQYXJhbXMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbEVudW0uRXJyb3I6XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciguLi5sb2dQYXJhbXMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19","import { Pipe } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class BooleanPipe {\n transform(value, yes, no, icon = false) {\n if (typeof value === 'string') {\n value = value.toLowerCase() === 'true';\n }\n else if (typeof value === 'number') {\n value = value === 1;\n }\n if (typeof value === 'boolean') {\n if (icon) {\n return value ? (yes ?? 'pi pi-check') : (no ?? 'pi pi-times');\n }\n else {\n return value ? (yes ?? 'general.yes') : (no ?? 'general.no');\n }\n }\n else {\n return value;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BooleanPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: BooleanPipe, isStandalone: true, name: \"mngBoolean\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BooleanPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngBoolean',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbi5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvcGlwZXMvYm9vbGVhbi5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQWdCLE1BQU0sZUFBZSxDQUFDOztBQU1sRCxNQUFNLE9BQU8sV0FBVztJQUNwQixTQUFTLENBQUMsS0FBVSxFQUFFLEdBQVksRUFBRSxFQUFXLEVBQUUsSUFBSSxHQUFHLEtBQUs7UUFDekQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM1QixLQUFLLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sQ0FBQztRQUMzQyxDQUFDO2FBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNuQyxLQUFLLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUN4QixDQUFDO1FBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM3QixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNQLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksYUFBYSxDQUFDLENBQUM7WUFDbEUsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksWUFBWSxDQUFDLENBQUM7WUFDakUsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztJQUNMLENBQUM7OEdBaEJRLFdBQVc7NEdBQVgsV0FBVzs7MkZBQVgsV0FBVztrQkFKdkIsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsWUFBWTtvQkFDbEIsSUFBSSxFQUFFLElBQUk7aUJBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BpcGUsIFBpcGVUcmFuc2Zvcm19IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ21uZ0Jvb2xlYW4nLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgQm9vbGVhblBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICB0cmFuc2Zvcm0odmFsdWU6IGFueSwgeWVzPzogc3RyaW5nLCBubz86IHN0cmluZywgaWNvbiA9IGZhbHNlKTogYW55IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgPT09IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBpZiAoaWNvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA/ICh5ZXMgPz8gJ3BpIHBpLWNoZWNrJykgOiAobm8gPz8gJ3BpIHBpLXRpbWVzJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA/ICh5ZXMgPz8gJ2dlbmVyYWwueWVzJykgOiAobm8gPz8gJ2dlbmVyYWwubm8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==","import { Pipe } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class ClassMapPipe {\n transform(className, classNameMapFn, item) {\n if (classNameMapFn && typeof classNameMapFn === 'function') {\n return classNameMapFn(className, item);\n }\n else {\n return className ?? '';\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: ClassMapPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: ClassMapPipe, isStandalone: true, name: \"mngClassMap\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: ClassMapPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngClassMap',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3MtbWFwLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9waXBlcy9jbGFzcy1tYXAucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsSUFBSSxFQUFnQixNQUFNLGVBQWUsQ0FBQzs7QUFNbEQsTUFBTSxPQUFPLFlBQVk7SUFDckIsU0FBUyxDQUFDLFNBQWtCLEVBQUUsY0FBeUQsRUFBRSxJQUFRO1FBQzdGLElBQUksY0FBYyxJQUFJLE9BQU8sY0FBYyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3pELE9BQU8sY0FBYyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzQyxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBQ0wsQ0FBQzs4R0FQUSxZQUFZOzRHQUFaLFlBQVk7OzJGQUFaLFlBQVk7a0JBSnhCLElBQUk7bUJBQUM7b0JBQ0YsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLElBQUksRUFBRSxJQUFJO2lCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoe1xuICAgIG5hbWU6ICdtbmdDbGFzc01hcCcsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDbGFzc01hcFBpcGU8VD4gaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICB0cmFuc2Zvcm0oY2xhc3NOYW1lPzogc3RyaW5nLCBjbGFzc05hbWVNYXBGbj86IChjbGFzc05hbWU/OiBzdHJpbmcsIGl0ZW0/OiBUKSA9PiBzdHJpbmcsIGl0ZW0/OiBUKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGNsYXNzTmFtZU1hcEZuICYmIHR5cGVvZiBjbGFzc05hbWVNYXBGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZU1hcEZuKGNsYXNzTmFtZSwgaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lID8/ICcnO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19","import 'reflect-metadata';\nimport { LoggerService } from '../log/logger.service';\nexport const reflectTypeNameKey = 'typeName';\nexport const reflectEnumNameKey = 'enumName';\n/**\n * Defines type name decorator.\n * @param targetType class.\n * @param typeName Name of the type.\n */\nexport function defineReflectTypeName(targetType, typeName) {\n if (!Reflect.hasOwnMetadata(reflectTypeNameKey, targetType)) {\n Reflect.defineMetadata(reflectTypeNameKey, typeName, targetType);\n }\n}\n/**\n * Defines enum name decorator.\n * @param targetType enum object.\n * @param enumName Name of the enum.\n */\nexport function defineReflectEnumName(targetType, enumName) {\n if (!Reflect.hasOwnMetadata(reflectEnumNameKey, targetType)) {\n Reflect.defineMetadata(reflectEnumNameKey, enumName, targetType);\n }\n}\n/**\n * Gets type name from reflect metadata.\n * @param type Class.\n */\nexport function findReflectTypeName(type) {\n if (!type) {\n return null;\n }\n const typeName = Reflect.getMetadata(reflectTypeNameKey, type);\n if (typeName) {\n return typeName;\n }\n LoggerService.get().debug('WARNING: Reflect metadata could not be found for type, you might experience some issues in production build.', type?.name);\n return type.name;\n}\n/**\n * Gets type name from either decorator or reflect metadata.\n * @param type Class.\n */\nexport function reflectTypeNameExists(type) {\n return Reflect.hasOwnMetadata(reflectTypeNameKey, type);\n}\n/**\n * Gets enum name from either decorator or reflect metadata.\n * @param enumType Class.\n */\nexport function findReflectEnumName(enumType) {\n const enumName = Reflect.getMetadata(reflectEnumNameKey, enumType);\n if (enumName) {\n return enumName;\n }\n LoggerService.get().debug(`WARNING: Reflect metadata could not be found for enum ${typeof enumType === 'object' ? Object.keys(enumType) : enumType}`, {\n name: 'TypeUtilsError',\n enumType: enumType\n });\n return null;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1lbnVtLW1ldGFkYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvcmVmbGVjdC90eXBlLWVudW0tbWV0YWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxrQkFBa0IsQ0FBQztBQUcxQixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHcEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLFVBQVUsQ0FBQztBQUU3Qzs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLFVBQTBCLEVBQUUsUUFBZ0I7SUFDOUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUMxRCxPQUFPLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNyRSxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsVUFBb0IsRUFBRSxRQUFnQjtJQUN4RSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzFELE9BQU8sQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7QUFDTCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFJLElBQW1CO0lBQ3RELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNSLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9ELElBQUksUUFBUSxFQUFFLENBQUM7UUFDWCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBQ0QsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyw4R0FBOEcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEosT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsSUFBb0I7SUFDdEQsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzVELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsUUFBa0I7SUFDbEQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNuRSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ1gsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUNELGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMseURBQXlELE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDbEosSUFBSSxFQUFFLGdCQUFnQjtRQUN0QixRQUFRLEVBQUUsUUFBUTtLQUNyQixDQUFDLENBQUM7SUFDSCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdyZWZsZWN0LW1ldGFkYXRhJztcblxuaW1wb3J0IHtFbnVtVHlwZX0gZnJvbSAnLi4vaGVscGVycy90eXBlLWhlbHBlcnMnO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi9sb2cvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtDbGFzc1R5cGV9IGZyb20gJy4uL21vZGVscy9jbGFzcy1zZXJ2aWNlLm1vZGVsJztcblxuZXhwb3J0IGNvbnN0IHJlZmxlY3RUeXBlTmFtZUtleSA9ICd0eXBlTmFtZSc7XG5leHBvcnQgY29uc3QgcmVmbGVjdEVudW1OYW1lS2V5ID0gJ2VudW1OYW1lJztcblxuLyoqXG4gKiBEZWZpbmVzIHR5cGUgbmFtZSBkZWNvcmF0b3IuXG4gKiBAcGFyYW0gdGFyZ2V0VHlwZSBjbGFzcy5cbiAqIEBwYXJhbSB0eXBlTmFtZSBOYW1lIG9mIHRoZSB0eXBlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lUmVmbGVjdFR5cGVOYW1lKHRhcmdldFR5cGU6IENsYXNzVHlwZTxhbnk+LCB0eXBlTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCFSZWZsZWN0Lmhhc093bk1ldGFkYXRhKHJlZmxlY3RUeXBlTmFtZUtleSwgdGFyZ2V0VHlwZSkpIHtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShyZWZsZWN0VHlwZU5hbWVLZXksIHR5cGVOYW1lLCB0YXJnZXRUeXBlKTtcbiAgICB9XG59XG5cbi8qKlxuICogRGVmaW5lcyBlbnVtIG5hbWUgZGVjb3JhdG9yLlxuICogQHBhcmFtIHRhcmdldFR5cGUgZW51bSBvYmplY3QuXG4gKiBAcGFyYW0gZW51bU5hbWUgTmFtZSBvZiB0aGUgZW51bS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVJlZmxlY3RFbnVtTmFtZSh0YXJnZXRUeXBlOiBFbnVtVHlwZSwgZW51bU5hbWU6IHN0cmluZykge1xuICAgIGlmICghUmVmbGVjdC5oYXNPd25NZXRhZGF0YShyZWZsZWN0RW51bU5hbWVLZXksIHRhcmdldFR5cGUpKSB7XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEocmVmbGVjdEVudW1OYW1lS2V5LCBlbnVtTmFtZSwgdGFyZ2V0VHlwZSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEdldHMgdHlwZSBuYW1lIGZyb20gcmVmbGVjdCBtZXRhZGF0YS5cbiAqIEBwYXJhbSB0eXBlIENsYXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFJlZmxlY3RUeXBlTmFtZTxUPih0eXBlPzogQ2xhc3NUeXBlPFQ+KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCF0eXBlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB0eXBlTmFtZSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEocmVmbGVjdFR5cGVOYW1lS2V5LCB0eXBlKTtcbiAgICBpZiAodHlwZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVOYW1lO1xuICAgIH1cbiAgICBMb2dnZXJTZXJ2aWNlLmdldCgpLmRlYnVnKCdXQVJOSU5HOiBSZWZsZWN0IG1ldGFkYXRhIGNvdWxkIG5vdCBiZSBmb3VuZCBmb3IgdHlwZSwgeW91IG1pZ2h0IGV4cGVyaWVuY2Ugc29tZSBpc3N1ZXMgaW4gcHJvZHVjdGlvbiBidWlsZC4nLCB0eXBlPy5uYW1lKTtcbiAgICByZXR1cm4gdHlwZS5uYW1lO1xufVxuXG4vKipcbiAqIEdldHMgdHlwZSBuYW1lIGZyb20gZWl0aGVyIGRlY29yYXRvciBvciByZWZsZWN0IG1ldGFkYXRhLlxuICogQHBhcmFtIHR5cGUgQ2xhc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZsZWN0VHlwZU5hbWVFeGlzdHModHlwZTogQ2xhc3NUeXBlPGFueT4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gUmVmbGVjdC5oYXNPd25NZXRhZGF0YShyZWZsZWN0VHlwZU5hbWVLZXksIHR5cGUpO1xufVxuXG4vKipcbiAqIEdldHMgZW51bSBuYW1lIGZyb20gZWl0aGVyIGRlY29yYXRvciBvciByZWZsZWN0IG1ldGFkYXRhLlxuICogQHBhcmFtIGVudW1UeXBlIENsYXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFJlZmxlY3RFbnVtTmFtZShlbnVtVHlwZTogRW51bVR5cGUpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBlbnVtTmFtZSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEocmVmbGVjdEVudW1OYW1lS2V5LCBlbnVtVHlwZSk7XG4gICAgaWYgKGVudW1OYW1lKSB7XG4gICAgICAgIHJldHVybiBlbnVtTmFtZTtcbiAgICB9XG4gICAgTG9nZ2VyU2VydmljZS5nZXQoKS5kZWJ1ZyhgV0FSTklORzogUmVmbGVjdCBtZXRhZGF0YSBjb3VsZCBub3QgYmUgZm91bmQgZm9yIGVudW0gJHt0eXBlb2YgZW51bVR5cGUgPT09ICdvYmplY3QnID8gT2JqZWN0LmtleXMoZW51bVR5cGUpIDogZW51bVR5cGV9YCwge1xuICAgICAgICBuYW1lOiAnVHlwZVV0aWxzRXJyb3InLFxuICAgICAgICBlbnVtVHlwZTogZW51bVR5cGVcbiAgICB9KTtcbiAgICByZXR1cm4gbnVsbDtcbn1cbiJdfQ==","import { Pipe } from '@angular/core';\nimport { getEnumConstantNameFromObject, getEnumConstantValues } from '../enum/enum-helpers';\nimport { findReflectEnumName } from '../reflect/type-enum-metadata';\nimport * as i0 from \"@angular/core\";\nexport class EnumPipe {\n transform(value, enumDesc, i18nPath) {\n if (value == null || (typeof value !== 'number' && typeof value !== 'string') || !enumDesc) {\n return value;\n }\n const enumValue = enumDesc.nameAsValue ? value : getEnumConstantNameFromObject(enumDesc.type, value);\n if (enumValue == null) {\n // no constant name found (probably not enum), return value\n return value;\n }\n if (enumDesc.nameAsValue) {\n // check if value exists in enum if nameAsValue is used\n const enumValueCheck = getEnumConstantValues(enumDesc.type).find(v => v === enumValue);\n if (enumValueCheck == null) {\n return value;\n }\n }\n if (typeof i18nPath === 'undefined' && enumDesc) {\n i18nPath = enumDesc.i18nBaseKey ?? findReflectEnumName(enumDesc.type);\n }\n return i18nPath ? `${i18nPath}.${enumValue}` : enumValue;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: EnumPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: EnumPipe, isStandalone: true, name: \"mngEnum\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: EnumPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngEnum',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvcGlwZXMvZW51bS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBR2xELE9BQU8sRUFBQyw2QkFBNkIsRUFBRSxxQkFBcUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRTFGLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLCtCQUErQixDQUFDOztBQU1sRSxNQUFNLE9BQU8sUUFBUTtJQUNqQixTQUFTLENBQUMsS0FBYyxFQUFFLFFBQTBCLEVBQUUsUUFBd0I7UUFDMUUsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekYsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRyxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNwQiwyREFBMkQ7WUFDM0QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZCLHVEQUF1RDtZQUN2RCxNQUFNLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZGLElBQUksY0FBYyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN6QixPQUFPLEtBQUssQ0FBQztZQUNqQixDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzlDLFFBQVEsR0FBRyxRQUFRLENBQUMsV0FBVyxJQUFJLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxJQUFnQixDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzdELENBQUM7OEdBdEJRLFFBQVE7NEdBQVIsUUFBUTs7MkZBQVIsUUFBUTtrQkFKcEIsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsU0FBUztvQkFDZixJQUFJLEVBQUUsSUFBSTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7SUVudW1EZXNjcmlwdG9yfSBmcm9tICcuLi9kZXNjcmlwdG9ycy9lbnVtLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtnZXRFbnVtQ29uc3RhbnROYW1lRnJvbU9iamVjdCwgZ2V0RW51bUNvbnN0YW50VmFsdWVzfSBmcm9tICcuLi9lbnVtL2VudW0taGVscGVycyc7XG5pbXBvcnQge0VudW1UeXBlfSBmcm9tICcuLi9oZWxwZXJzL3R5cGUtaGVscGVycyc7XG5pbXBvcnQge2ZpbmRSZWZsZWN0RW51bU5hbWV9IGZyb20gJy4uL3JlZmxlY3QvdHlwZS1lbnVtLW1ldGFkYXRhJztcblxuQFBpcGUoe1xuICAgIG5hbWU6ICdtbmdFbnVtJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEVudW1QaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKHZhbHVlOiB1bmtub3duLCBlbnVtRGVzYz86IElFbnVtRGVzY3JpcHRvciwgaTE4blBhdGg/OiBzdHJpbmcgfCBudWxsKTogYW55IHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykgfHwgIWVudW1EZXNjKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbnVtVmFsdWUgPSBlbnVtRGVzYy5uYW1lQXNWYWx1ZSA/IHZhbHVlIDogZ2V0RW51bUNvbnN0YW50TmFtZUZyb21PYmplY3QoZW51bURlc2MudHlwZSwgdmFsdWUpO1xuICAgICAgICBpZiAoZW51bVZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIG5vIGNvbnN0YW50IG5hbWUgZm91bmQgKHByb2JhYmx5IG5vdCBlbnVtKSwgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudW1EZXNjLm5hbWVBc1ZhbHVlKSB7XG4gICAgICAgICAgICAvLyBjaGVjayBpZiB2YWx1ZSBleGlzdHMgaW4gZW51bSBpZiBuYW1lQXNWYWx1ZSBpcyB1c2VkXG4gICAgICAgICAgICBjb25zdCBlbnVtVmFsdWVDaGVjayA9IGdldEVudW1Db25zdGFudFZhbHVlcyhlbnVtRGVzYy50eXBlKS5maW5kKHYgPT4gdiA9PT0gZW51bVZhbHVlKTtcbiAgICAgICAgICAgIGlmIChlbnVtVmFsdWVDaGVjayA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgaTE4blBhdGggPT09ICd1bmRlZmluZWQnICYmIGVudW1EZXNjKSB7XG4gICAgICAgICAgICBpMThuUGF0aCA9IGVudW1EZXNjLmkxOG5CYXNlS2V5ID8/IGZpbmRSZWZsZWN0RW51bU5hbWUoZW51bURlc2MudHlwZSBhcyBFbnVtVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGkxOG5QYXRoID8gYCR7aTE4blBhdGh9LiR7ZW51bVZhbHVlfWAgOiBlbnVtVmFsdWU7XG4gICAgfVxufVxuIl19","import { Pipe } from '@angular/core';\nimport { getObjectPropertyByPath } from '../helpers/object';\nimport * as i0 from \"@angular/core\";\n/**\n * Imitation of JSONPath Syntax. Supports:\n * - Root object notation with '$'\n * - Dot notation (e.g.: $.foo.bar), no bracket notation for properties\n * - Array notation (e.g.: [0])\n */\nexport class JsonPathPipe {\n transform(value, path = '') {\n return getObjectPropertyByPath(value, path);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: JsonPathPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: JsonPathPipe, isStandalone: true, name: \"mngJsonPath\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: JsonPathPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngJsonPath',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1wYXRoLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9waXBlcy9qc29uLXBhdGgucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsSUFBSSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFMUQ7Ozs7O0dBS0c7QUFLSCxNQUFNLE9BQU8sWUFBWTtJQUNyQixTQUFTLENBQUMsS0FBVSxFQUFFLElBQUksR0FBRyxFQUFFO1FBQzNCLE9BQU8sdUJBQXVCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7OEdBSFEsWUFBWTs0R0FBWixZQUFZOzsyRkFBWixZQUFZO2tCQUp4QixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxhQUFhO29CQUNuQixJQUFJLEVBQUUsSUFBSTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7Z2V0T2JqZWN0UHJvcGVydHlCeVBhdGh9IGZyb20gJy4uL2hlbHBlcnMvb2JqZWN0JztcblxuLyoqXG4gKiBJbWl0YXRpb24gb2YgSlNPTlBhdGggU3ludGF4LiBTdXBwb3J0czpcbiAqICAtIFJvb3Qgb2JqZWN0IG5vdGF0aW9uIHdpdGggJyQnXG4gKiAgLSBEb3Qgbm90YXRpb24gKGUuZy46ICQuZm9vLmJhciksIG5vIGJyYWNrZXQgbm90YXRpb24gZm9yIHByb3BlcnRpZXNcbiAqICAtIEFycmF5IG5vdGF0aW9uIChlLmcuOiBbMF0pXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnbW5nSnNvblBhdGgnLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSnNvblBhdGhQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIHBhdGggPSAnJyk6IGFueSB7XG4gICAgICAgIHJldHVybiBnZXRPYmplY3RQcm9wZXJ0eUJ5UGF0aCh2YWx1ZSwgcGF0aCk7XG4gICAgfVxufVxuIl19","import { Pipe, inject } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { JsonPathPipe } from './json-path.pipe';\nimport * as i0 from \"@angular/core\";\nexport class EnumeratePipe {\n constructor() {\n this.translate = inject(TranslateService);\n }\n transform(value, jsonPath = '$', valueSeparator = ', ', emptyValueReturn = '/', i18nBaseKey = '') {\n if (!value) {\n return emptyValueReturn;\n }\n i18nBaseKey = getEnumerationI18nBaseKey(i18nBaseKey);\n return Array.from(value)\n .map(i => {\n const itemEnumerate = toEnumerationI18nEnumerate(i, jsonPath, i18nBaseKey);\n itemEnumerate.i18n = this.translate.instant(itemEnumerate.i18nKey);\n // return i18n only if used and transl. was found\n return selectEnumerationI18n(itemEnumerate, i18nBaseKey);\n })\n .join(valueSeparator);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: EnumeratePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: EnumeratePipe, isStandalone: true, name: \"mngEnumerate\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: EnumeratePipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngEnumerate',\n pure: true\n }]\n }] });\nexport function getEnumerationI18nBaseKey(baseKey) {\n return baseKey.endsWith('.') ? baseKey?.substring(0, baseKey.length - 1) : baseKey;\n}\nexport function selectEnumerationI18n(value, baseKey) {\n return baseKey && value.i18nKey === value.i18n ? value.value : value.i18n;\n}\nexport function toEnumerationI18nEnumerate(value, jsonPath, baseKey) {\n const valueTrans = new JsonPathPipe().transform(value, jsonPath);\n const valueAsString = valueTrans.toString();\n return {\n value: valueAsString,\n i18nKey: baseKey ? `${baseKey}.${valueAsString}` : valueAsString,\n i18n: valueAsString\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bWVyYXRlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9waXBlcy9lbnVtZXJhdGUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsSUFBSSxFQUFpQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFMUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDOztBQU05QyxNQUFNLE9BQU8sYUFBYTtJQUoxQjtRQUtxQixjQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FnQnpEO0lBZEcsU0FBUyxDQUFJLEtBQXdCLEVBQUUsUUFBUSxHQUFHLEdBQUcsRUFBRSxjQUFjLEdBQUcsSUFBSSxFQUFFLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxXQUFXLEdBQUcsRUFBRTtRQUNsSCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDVCxPQUFPLGdCQUFnQixDQUFDO1FBQzVCLENBQUM7UUFDRCxXQUFXLEdBQUcseUJBQXlCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzthQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTCxNQUFNLGFBQWEsR0FBRywwQkFBMEIsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzNFLGFBQWEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25FLGlEQUFpRDtZQUNqRCxPQUFPLHFCQUFxQixDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUIsQ0FBQzs4R0FoQlEsYUFBYTs0R0FBYixhQUFhOzsyRkFBYixhQUFhO2tCQUp6QixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxjQUFjO29CQUNwQixJQUFJLEVBQUUsSUFBSTtpQkFDYjs7QUFvQkQsTUFBTSxVQUFVLHlCQUF5QixDQUFDLE9BQWU7SUFDckQsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDdkYsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUFnQyxFQUFFLE9BQWU7SUFDbkYsT0FBTyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzlFLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsS0FBYyxFQUFFLFFBQWdCLEVBQUUsT0FBZTtJQUN4RixNQUFNLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakUsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVDLE9BQWtDO1FBQzlCLEtBQUssRUFBRSxhQUFhO1FBQ3BCLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxJQUFJLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhO1FBQ2hFLElBQUksRUFBRSxhQUFhO0tBQ3RCLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQaXBlLCBQaXBlVHJhbnNmb3JtLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQge0pzb25QYXRoUGlwZX0gZnJvbSAnLi9qc29uLXBhdGgucGlwZSc7XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAnbW5nRW51bWVyYXRlJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEVudW1lcmF0ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICAgIHRyYW5zZm9ybTxUPih2YWx1ZTogQXJyYXk8VD4gfCBTZXQ8VD4sIGpzb25QYXRoID0gJyQnLCB2YWx1ZVNlcGFyYXRvciA9ICcsICcsIGVtcHR5VmFsdWVSZXR1cm4gPSAnLycsIGkxOG5CYXNlS2V5ID0gJycpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZW1wdHlWYWx1ZVJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpMThuQmFzZUtleSA9IGdldEVudW1lcmF0aW9uSTE4bkJhc2VLZXkoaTE4bkJhc2VLZXkpO1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh2YWx1ZSlcbiAgICAgICAgICAgIC5tYXAoaSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUVudW1lcmF0ZSA9IHRvRW51bWVyYXRpb25JMThuRW51bWVyYXRlKGksIGpzb25QYXRoLCBpMThuQmFzZUtleSk7XG4gICAgICAgICAgICAgICAgaXRlbUVudW1lcmF0ZS5pMThuID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChpdGVtRW51bWVyYXRlLmkxOG5LZXkpO1xuICAgICAgICAgICAgICAgIC8vIHJldHVybiBpMThuIG9ubHkgaWYgdXNlZCBhbmQgdHJhbnNsLiB3YXMgZm91bmRcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0RW51bWVyYXRpb25JMThuKGl0ZW1FbnVtZXJhdGUsIGkxOG5CYXNlS2V5KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbih2YWx1ZVNlcGFyYXRvcik7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bWVyYXRpb25JMThuQmFzZUtleShiYXNlS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBiYXNlS2V5LmVuZHNXaXRoKCcuJykgPyBiYXNlS2V5Py5zdWJzdHJpbmcoMCwgYmFzZUtleS5sZW5ndGggLSAxKSA6IGJhc2VLZXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RFbnVtZXJhdGlvbkkxOG4odmFsdWU6IEVudW1lcmF0ZVBpcGVJMThuSW50ZXJuYWwsIGJhc2VLZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGJhc2VLZXkgJiYgdmFsdWUuaTE4bktleSA9PT0gdmFsdWUuaTE4biA/IHZhbHVlLnZhbHVlIDogdmFsdWUuaTE4bjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvRW51bWVyYXRpb25JMThuRW51bWVyYXRlKHZhbHVlOiB1bmtub3duLCBqc29uUGF0aDogc3RyaW5nLCBiYXNlS2V5OiBzdHJpbmcpOiBFbnVtZXJhdGVQaXBlSTE4bkludGVybmFsIHtcbiAgICBjb25zdCB2YWx1ZVRyYW5zID0gbmV3IEpzb25QYXRoUGlwZSgpLnRyYW5zZm9ybSh2YWx1ZSwganNvblBhdGgpO1xuICAgIGNvbnN0IHZhbHVlQXNTdHJpbmcgPSB2YWx1ZVRyYW5zLnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIDxFbnVtZXJhdGVQaXBlSTE4bkludGVybmFsPntcbiAgICAgICAgdmFsdWU6IHZhbHVlQXNTdHJpbmcsXG4gICAgICAgIGkxOG5LZXk6IGJhc2VLZXkgPyBgJHtiYXNlS2V5fS4ke3ZhbHVlQXNTdHJpbmd9YCA6IHZhbHVlQXNTdHJpbmcsXG4gICAgICAgIGkxOG46IHZhbHVlQXNTdHJpbmdcbiAgICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudW1lcmF0ZVBpcGVJMThuSW50ZXJuYWwge1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgaTE4bktleTogc3RyaW5nO1xuICAgIGkxOG46IHN0cmluZztcbn1cbiJdfQ==","import { Pipe, inject } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { combineLatest, mergeMap, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { getEnumerationI18nBaseKey, selectEnumerationI18n, toEnumerationI18nEnumerate } from './enumerate.pipe';\nimport * as i0 from \"@angular/core\";\nexport class EnumerateAsyncPipe {\n constructor() {\n this.translate = inject(TranslateService);\n }\n transform(value, jsonPath = '$', valueSeparator = ', ', emptyValueReturn = '/', i18nBaseKey = '') {\n i18nBaseKey = getEnumerationI18nBaseKey(i18nBaseKey);\n return value.pipe(mergeMap(v => {\n if (!v) {\n return of([emptyValueReturn]);\n }\n return combineLatest(Array.from(v)\n .map(ai => toEnumerationI18nEnumerate(ai, jsonPath, i18nBaseKey))\n .map(i => this.translate.stream(i.i18nKey).pipe(map((i18n) => {\n i.i18n = i18n;\n return selectEnumerationI18n(i, i18nBaseKey);\n }))));\n }), map(i => i.join(valueSeparator)));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: EnumerateAsyncPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: EnumerateAsyncPipe, isStandalone: true, name: \"mngEnumerateAsync\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: EnumerateAsyncPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngEnumerateAsync',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bWVyYXRlLWFzeW5jLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9waXBlcy9lbnVtZXJhdGUtYXN5bmMucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsSUFBSSxFQUFpQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFMUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFhLGFBQWEsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuQyxPQUFPLEVBQUMseUJBQXlCLEVBQUUscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQzs7QUFNOUcsTUFBTSxPQUFPLGtCQUFrQjtJQUovQjtRQUtxQixjQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0F5QnpEO0lBdkJHLFNBQVMsQ0FBQyxLQUFnRCxFQUFFLFFBQVEsR0FBRyxHQUFHLEVBQUUsY0FBYyxHQUFHLElBQUksRUFBRSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsV0FBVyxHQUFHLEVBQUU7UUFDdkksV0FBVyxHQUFHLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FDYixRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDVCxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ0wsT0FBTyxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDbEMsQ0FBQztZQUNELE9BQU8sYUFBYSxDQUNoQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDUixHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2lCQUNoRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDTCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUNqQyxHQUFHLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRTtnQkFDakIsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ2QsT0FBTyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQ0wsQ0FDSixDQUNSLENBQUM7UUFDTixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQ25DLENBQUM7SUFDTixDQUFDOzhHQXpCUSxrQkFBa0I7NEdBQWxCLGtCQUFrQjs7MkZBQWxCLGtCQUFrQjtrQkFKOUIsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsbUJBQW1CO29CQUN6QixJQUFJLEVBQUUsSUFBSTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGlwZSwgUGlwZVRyYW5zZm9ybSwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgY29tYmluZUxhdGVzdCwgbWVyZ2VNYXAsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7Z2V0RW51bWVyYXRpb25JMThuQmFzZUtleSwgc2VsZWN0RW51bWVyYXRpb25JMThuLCB0b0VudW1lcmF0aW9uSTE4bkVudW1lcmF0ZX0gZnJvbSAnLi9lbnVtZXJhdGUucGlwZSc7XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAnbW5nRW51bWVyYXRlQXN5bmMnLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRW51bWVyYXRlQXN5bmNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgICB0cmFuc2Zvcm0odmFsdWU6IE9ic2VydmFibGU8QXJyYXk8dW5rbm93bj4gfCBTZXQ8dW5rbm93bj4+LCBqc29uUGF0aCA9ICckJywgdmFsdWVTZXBhcmF0b3IgPSAnLCAnLCBlbXB0eVZhbHVlUmV0dXJuID0gJy8nLCBpMThuQmFzZUtleSA9ICcnKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgaTE4bkJhc2VLZXkgPSBnZXRFbnVtZXJhdGlvbkkxOG5CYXNlS2V5KGkxOG5CYXNlS2V5KTtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnBpcGUoXG4gICAgICAgICAgICBtZXJnZU1hcCh2ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtlbXB0eVZhbHVlUmV0dXJuXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFxuICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHYpXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKGFpID0+IHRvRW51bWVyYXRpb25JMThuRW51bWVyYXRlKGFpLCBqc29uUGF0aCwgaTE4bkJhc2VLZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUuc3RyZWFtKGkuaTE4bktleSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChpMThuOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkuaTE4biA9IGkxOG47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0RW51bWVyYXRpb25JMThuKGksIGkxOG5CYXNlS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKGkgPT4gaS5qb2luKHZhbHVlU2VwYXJhdG9yKSlcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=","import { Pipe } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class GetterPipe {\n transform(value, getterFn, item) {\n if (typeof getterFn === 'function') {\n return getterFn(value, item);\n }\n return value;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: GetterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: GetterPipe, isStandalone: true, name: \"mngGetter\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: GetterPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngGetter',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0dGVyLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9waXBlcy9nZXR0ZXIucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsSUFBSSxFQUFnQixNQUFNLGVBQWUsQ0FBQzs7QUFRbEQsTUFBTSxPQUFPLFVBQVU7SUFDbkIsU0FBUyxDQUFDLEtBQWMsRUFBRSxRQUFtQixFQUFFLElBQWM7UUFDekQsSUFBSSxPQUFPLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNqQyxPQUFPLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7OEdBUFEsVUFBVTs0R0FBVixVQUFVOzsyRkFBVixVQUFVO2tCQUp0QixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxXQUFXO29CQUNqQixJQUFJLEVBQUUsSUFBSTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7R2V0dGVyRm59IGZyb20gJy4uL21vZGVscy9nZXR0ZXIubW9kZWwnO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ21uZ0dldHRlcicsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBHZXR0ZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKHZhbHVlOiB1bmtub3duLCBnZXR0ZXJGbj86IEdldHRlckZuLCBpdGVtPzogdW5rbm93bik6IGFueSB7XG4gICAgICAgIGlmICh0eXBlb2YgZ2V0dGVyRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXR0ZXJGbih2YWx1ZSwgaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufVxuIl19","import { Pipe } from '@angular/core';\nimport { getI18nTypePropertyKey } from '../i18n/i18n-type';\nimport * as i0 from \"@angular/core\";\nexport class I18nPropertyPipe {\n transform(property, model) {\n return getI18nTypePropertyKey(model.i18nBaseKey, property);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: I18nPropertyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: I18nPropertyPipe, isStandalone: true, name: \"mngI18nProperty\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: I18nPropertyPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngI18nProperty',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi1wcm9wZXJ0eS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvcGlwZXMvaTE4bi1wcm9wZXJ0eS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBR2xELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDOztBQU16RCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ3pCLFNBQVMsQ0FBQyxRQUFnQixFQUFFLEtBQTRCO1FBQ3BELE9BQU8sc0JBQXNCLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMvRCxDQUFDOzhHQUhRLGdCQUFnQjs0R0FBaEIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQUo1QixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxpQkFBaUI7b0JBQ3ZCLElBQUksRUFBRSxJQUFJO2lCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtJTW9kZWxEZXNjcmlwdG9yfSBmcm9tICcuLi9kZXNjcmlwdG9ycy9tb2RlbC5kZXNjcmlwdG9yJztcbmltcG9ydCB7Z2V0STE4blR5cGVQcm9wZXJ0eUtleX0gZnJvbSAnLi4vaTE4bi9pMThuLXR5cGUnO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ21uZ0kxOG5Qcm9wZXJ0eScsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJMThuUHJvcGVydHlQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKHByb3BlcnR5OiBzdHJpbmcsIG1vZGVsOiBJTW9kZWxEZXNjcmlwdG9yPGFueT4pOiBhbnkge1xuICAgICAgICByZXR1cm4gZ2V0STE4blR5cGVQcm9wZXJ0eUtleShtb2RlbC5pMThuQmFzZUtleSwgcHJvcGVydHkpO1xuICAgIH1cbn1cbiJdfQ==","import { Pipe } from '@angular/core';\nimport { escapeHtmlAny } from '../helpers/string';\nimport { JsonPathPipe } from './json-path.pipe';\nimport * as i0 from \"@angular/core\";\nexport class ParametrizePipe {\n constructor() {\n this.jsonPath = new JsonPathPipe();\n }\n transform(value, itemId, item, data, opts) {\n let params = {};\n if (data) {\n params = {\n ...params,\n ...data\n };\n }\n if (item) {\n params = {\n ...params,\n item: escapeHtmlAny(item)\n };\n }\n if (itemId) {\n params = {\n ...params,\n itemId: itemId\n };\n }\n if (typeof value === 'string') {\n return this.transformString(value, params, opts);\n }\n else if (Array.isArray(value) && value.length > 0 && typeof value[0] === 'string') {\n return value.map((s) => this.transformString(s, params, opts));\n }\n else if (typeof value === 'object') {\n // process only first level citizens\n const obj = { ...value };\n for (const key in obj) {\n const objProp = obj[key];\n if (typeof objProp === 'string') {\n obj[key] = this.transformString(objProp, params, opts);\n }\n }\n return obj;\n }\n else {\n return value;\n }\n }\n transformString(s, params, opts) {\n if ((s.indexOf('/') >= 0 && s.indexOf(':') >= 0 && !s.startsWith('http://') && !s.startsWith('https://')) || s.startsWith(':')) {\n // this is router link\n return s\n .split('/')\n .map(s => this.parametrizeStringAsRouterLink(s, params))\n .join('/');\n }\n else {\n // parametrize normally\n return this.parametrizeString(s, params, opts);\n }\n }\n parametrizeStringAsRouterLink(s, params) {\n if (s.startsWith(':')) {\n const itemProperty = s.substring(1);\n return encodeURIComponent(this.jsonPath.transform(params, itemProperty) ?? '');\n }\n else {\n return s;\n }\n }\n parametrizeString(s, params, opts) {\n return s.replace(/{{\\s?([^{}\\s]*)\\s?}}/g, (subs, key) => {\n let value = this.jsonPath.transform(params, key);\n if (value != null && opts?.encodeParams) {\n value = encodeURIComponent(value);\n }\n return value ?? subs;\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: ParametrizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: ParametrizePipe, isStandalone: true, name: \"mngParametrize\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: ParametrizePipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngParametrize',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldHJpemUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL3BpcGVzL3BhcmFtZXRyaXplLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLElBQUksRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWhELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQzs7QUFVOUMsTUFBTSxPQUFPLGVBQWU7SUFKNUI7UUFLWSxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztLQXlFekM7SUF2RUcsU0FBUyxDQUFDLEtBQWMsRUFBRSxNQUFlLEVBQUUsSUFBVSxFQUFFLElBQTBCLEVBQUUsSUFBd0I7UUFDdkcsSUFBSSxNQUFNLEdBQVEsRUFBRSxDQUFDO1FBQ3JCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxNQUFNLEdBQUc7Z0JBQ0wsR0FBRyxNQUFNO2dCQUNULEdBQUcsSUFBSTthQUNWLENBQUM7UUFDTixDQUFDO1FBQ0QsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNQLE1BQU0sR0FBRztnQkFDTCxHQUFHLE1BQU07Z0JBQ1QsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUM7YUFDNUIsQ0FBQztRQUNOLENBQUM7UUFDRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1QsTUFBTSxHQUFHO2dCQUNMLEdBQUcsTUFBTTtnQkFDVCxNQUFNLEVBQUUsTUFBTTthQUNqQixDQUFDO1FBQ04sQ0FBQztRQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDNUIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckQsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxL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SUFBSSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0F6RVEsZUFBZTs0R0FBZixlQUFlOzsyRkFBZixlQUFlO2tCQUozQixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxnQkFBZ0I7b0JBQ3RCLElBQUksRUFBRSxJQUFJO2lCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtlc2NhcGVIdG1sQW55fSBmcm9tICcuLi9oZWxwZXJzL3N0cmluZyc7XG5pbXBvcnQge0lkVHlwZX0gZnJvbSAnLi4vaGVscGVycy90eXBlLWhlbHBlcnMnO1xuaW1wb3J0IHtKc29uUGF0aFBpcGV9IGZyb20gJy4vanNvbi1wYXRoLnBpcGUnO1xuXG50eXBlIFRyYW5zZm9ybU9wdHNUeXBlID0ge1xuICAgIGVuY29kZVBhcmFtcz86IGJvb2xlYW47XG59O1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ21uZ1BhcmFtZXRyaXplJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFBhcmFtZXRyaXplUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHByaXZhdGUganNvblBhdGggPSBuZXcgSnNvblBhdGhQaXBlKCk7XG5cbiAgICB0cmFuc2Zvcm0odmFsdWU6IHVua25vd24sIGl0ZW1JZD86IElkVHlwZSwgaXRlbT86IGFueSwgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4sIG9wdHM/OiBUcmFuc2Zvcm1PcHRzVHlwZSk6IGFueSB7XG4gICAgICAgIGxldCBwYXJhbXM6IGFueSA9IHt9O1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgcGFyYW1zID0ge1xuICAgICAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgICAgICAuLi5kYXRhXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICAgICAgICAgIGl0ZW06IGVzY2FwZUh0bWxBbnkoaXRlbSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW1JZCkge1xuICAgICAgICAgICAgcGFyYW1zID0ge1xuICAgICAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgICAgICBpdGVtSWQ6IGl0ZW1JZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1TdHJpbmcodmFsdWUsIHBhcmFtcywgb3B0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMCAmJiB0eXBlb2YgdmFsdWVbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKChzOiBzdHJpbmcpID0+IHRoaXMudHJhbnNmb3JtU3RyaW5nKHMsIHBhcmFtcywgb3B0cykpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIC8vIHByb2Nlc3Mgb25seSBmaXJzdCBsZXZlbCBjaXRpemVuc1xuICAgICAgICAgICAgY29uc3Qgb2JqOiBhbnkgPSB7Li4udmFsdWV9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqUHJvcCA9IG9ialtrZXldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqUHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSB0aGlzLnRyYW5zZm9ybVN0cmluZyhvYmpQcm9wLCBwYXJhbXMsIG9wdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRyYW5zZm9ybVN0cmluZyhzOiBzdHJpbmcsIHBhcmFtczogYW55LCBvcHRzPzogVHJhbnNmb3JtT3B0c1R5cGUpIHtcbiAgICAgICAgaWYgKChzLmluZGV4T2YoJy8nKSA+PSAwICYmIHMuaW5kZXhPZignOicpID49IDAgJiYgIXMuc3RhcnRzV2l0aCgnaHR0cDovLycpICYmICFzLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHx8IHMuc3RhcnRzV2l0aCgnOicpKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHJvdXRlciBsaW5rXG4gICAgICAgICAgICByZXR1cm4gc1xuICAgICAgICAgICAgICAgIC5zcGxpdCgnLycpXG4gICAgICAgICAgICAgICAgLm1hcChzID0+IHRoaXMucGFyYW1ldHJpemVTdHJpbmdBc1JvdXRlckxpbmsocywgcGFyYW1zKSlcbiAgICAgICAgICAgICAgICAuam9pbignLycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcGFyYW1ldHJpemUgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmFtZXRyaXplU3RyaW5nKHMsIHBhcmFtcywgb3B0cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcmFtZXRyaXplU3RyaW5nQXNSb3V0ZXJMaW5rKHM6IHN0cmluZywgcGFyYW1zOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAocy5zdGFydHNXaXRoKCc6JykpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1Qcm9wZXJ0eSA9IHMuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmpzb25QYXRoLnRyYW5zZm9ybShwYXJhbXMsIGl0ZW1Qcm9wZXJ0eSkgPz8gJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcmFtZXRyaXplU3RyaW5nKHM6IHN0cmluZywgcGFyYW1zOiBhbnksIG9wdHM/OiBUcmFuc2Zvcm1PcHRzVHlwZSk6IGFueSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoL3t7XFxzPyhbXnt9XFxzXSopXFxzP319L2csIChzdWJzOiBzdHJpbmcsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmpzb25QYXRoLnRyYW5zZm9ybShwYXJhbXMsIGtleSk7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiBvcHRzPy5lbmNvZGVQYXJhbXMpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPz8gc3VicztcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19","import { Pipe } from '@angular/core';\nimport { ParametrizePipe } from './parametrize.pipe';\nimport * as i0 from \"@angular/core\";\nexport class TemplatePipe {\n constructor() {\n this.parametrizePipe = new ParametrizePipe();\n }\n transform(value, template) {\n if (typeof template === 'string') {\n return this.parametrizePipe.transform(template, undefined, value);\n }\n return value;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TemplatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: TemplatePipe, isStandalone: true, name: \"template\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TemplatePipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'template',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL3BpcGVzL3RlbXBsYXRlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLElBQUksRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDOztBQU1uRCxNQUFNLE9BQU8sWUFBWTtJQUp6QjtRQUtZLG9CQUFlLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztLQVNuRDtJQVBHLFNBQVMsQ0FBQyxLQUFjLEVBQUUsUUFBaUI7UUFDdkMsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMvQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7OEdBVFEsWUFBWTs0R0FBWixZQUFZOzsyRkFBWixZQUFZO2tCQUp4QixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxVQUFVO29CQUNoQixJQUFJLEVBQUUsSUFBSTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7UGFyYW1ldHJpemVQaXBlfSBmcm9tICcuL3BhcmFtZXRyaXplLnBpcGUnO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ3RlbXBsYXRlJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHByaXZhdGUgcGFyYW1ldHJpemVQaXBlID0gbmV3IFBhcmFtZXRyaXplUGlwZSgpO1xuXG4gICAgdHJhbnNmb3JtKHZhbHVlOiB1bmtub3duLCB0ZW1wbGF0ZT86IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGVtcGxhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJhbWV0cml6ZVBpcGUudHJhbnNmb3JtKHRlbXBsYXRlLCB1bmRlZmluZWQsIHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG4iXX0=","import { defineReflectEnumName, defineReflectTypeName } from './type-enum-metadata';\nexport function TypeName(typeName) {\n return function (target) {\n defineReflectTypeName(target, typeName);\n };\n}\nexport function EnumName(typeName) {\n return function (target) {\n defineReflectEnumName(target, typeName);\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1lbnVtLWRlY29yYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL3JlZmxlY3QvdHlwZS1lbnVtLWRlY29yYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMscUJBQXFCLEVBQUUscUJBQXFCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRixNQUFNLFVBQVUsUUFBUSxDQUFDLFFBQWdCO0lBQ3JDLE9BQU8sVUFBVSxNQUFXO1FBQ3hCLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxRQUFnQjtJQUNyQyxPQUFPLFVBQVUsTUFBVztRQUN4QixxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZGVmaW5lUmVmbGVjdEVudW1OYW1lLCBkZWZpbmVSZWZsZWN0VHlwZU5hbWV9IGZyb20gJy4vdHlwZS1lbnVtLW1ldGFkYXRhJztcblxuZXhwb3J0IGZ1bmN0aW9uIFR5cGVOYW1lKHR5cGVOYW1lOiBzdHJpbmcpOiBDbGFzc0RlY29yYXRvciB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IGFueSkge1xuICAgICAgICBkZWZpbmVSZWZsZWN0VHlwZU5hbWUodGFyZ2V0LCB0eXBlTmFtZSk7XG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVudW1OYW1lKHR5cGVOYW1lOiBzdHJpbmcpOiBDbGFzc0RlY29yYXRvciB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IGFueSkge1xuICAgICAgICBkZWZpbmVSZWZsZWN0RW51bU5hbWUodGFyZ2V0LCB0eXBlTmFtZSk7XG4gICAgfTtcbn1cbiJdfQ==","import { LogLevelEnum } from '../log/log.model';\nimport { LoggerService } from '../log/logger.service';\nimport { defineReflectEnumName, defineReflectTypeName, findReflectTypeName, reflectTypeNameExists } from '../reflect/type-enum-metadata';\nexport class TypeRegistry {\n constructor() {\n this._logCategory = 'TypeRegistry';\n this._typeMap = {};\n this._enumMap = {};\n }\n static { this._instance = new TypeRegistry(); }\n get typeMap() {\n return this._typeMap;\n }\n get enumMap() {\n return this._enumMap;\n }\n /**\n * Only use one instance of object (out of Angular context)\n */\n static get() {\n return TypeRegistry._instance;\n }\n findAttributeDefinitionByClassType(type, attributeName) {\n const typeName = findReflectTypeName(type);\n return typeName ? this.findAttributeDefinition(typeName, attributeName) : null;\n }\n findAttributeDefinition(typeName, attributeName) {\n const attributeDefs = this.findAttributesDefinition(typeName);\n if (!attributeDefs) {\n return null;\n }\n for (const attribute of attributeDefs) {\n if (attribute.name === attributeName) {\n return attribute;\n }\n }\n return null;\n }\n findAttributesDefinitionByClassType(type) {\n const typeName = findReflectTypeName(type);\n return typeName ? this.findAttributesDefinition(typeName) : null;\n }\n findAttributesDefinition(typeName) {\n const typeDef = this.findType(typeName);\n if (!typeDef || typeof typeDef.getAttributeTypeMap !== 'function') {\n return null;\n }\n return typeDef.getAttributeTypeMap();\n }\n findByClassType(type) {\n const typeName = findReflectTypeName(type);\n return typeName ? this.findType(typeName) : null;\n }\n findType(typeName) {\n return this._typeMap[typeName];\n }\n findEnum(enumName) {\n return this._enumMap[enumName];\n }\n registerTypes(types) {\n for (const key in types) {\n this.registerType(types[key], key);\n }\n }\n registerType(type, optTypeName) {\n // try to find name from metadata\n let typeName;\n if (reflectTypeNameExists(type)) {\n // defined name from optional type name\n typeName = findReflectTypeName(type) ?? undefined;\n }\n else if (optTypeName) {\n typeName = optTypeName;\n // register metadata\n defineReflectTypeName(type, typeName);\n }\n if (!typeName) {\n // this._logger.debug(`WARNING: registering type ${type} failed, because typeName could not be determined and optional name was not provided.`);\n LoggerService.get().log(`WARNING: registering type ${type} failed, because typeName could not be determined and optional name was not provided.`, LogLevelEnum.Debug, this._logCategory);\n return;\n }\n if (typeof this._typeMap[typeName] !== 'undefined') {\n // this._logger.debug(`WARNING: registering type ${type} under key ${typeName} skipped, because type already exists for this key.`);\n LoggerService.get().log(`WARNING: registering type ${type} under key ${typeName} skipped, because type already exists for this key.`, LogLevelEnum.Debug, this._logCategory);\n }\n else {\n this._typeMap[typeName] = type;\n }\n }\n registerEnums(enums) {\n for (const key in enums) {\n this.registerEnum(enums[key], key);\n }\n }\n registerEnum(enumType, enumName) {\n // try to find name from decorator\n defineReflectEnumName(enumType, enumName);\n if (typeof this._enumMap[enumName] !== 'undefined') {\n LoggerService.get().log(`Registering enum ${enumName} skipped, because enum already exists.`, LogLevelEnum.Debug, this._logCategory);\n }\n else {\n this._enumMap[enumName] = enumType;\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1yZWdpc3RyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL3JlZ2lzdHJ5L3R5cGUtcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUdwRCxPQUFPLEVBQUMscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUd2SSxNQUFNLE9BQU8sWUFBWTtJQUF6QjtRQUVxQixpQkFBWSxHQUFHLGNBQWMsQ0FBQztRQUM5QixhQUFRLEdBQW9CLEVBQUUsQ0FBQztRQUMvQixhQUFRLEdBQW9CLEVBQUUsQ0FBQztJQW1IcEQsQ0FBQzthQXRIa0IsY0FBUyxHQUFpQixJQUFJLFlBQVksRUFBRSxBQUFuQyxDQUFvQztJQUs1RCxJQUFXLE9BQU87UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVELElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsR0FBRztRQUNiLE9BQU8sWUFBWSxDQUFDLFNBQVMsQ0FBQztJQUNsQyxDQUFDO0lBRU0sa0NBQWtDLENBQUMsSUFBb0IsRUFBRSxhQUFxQjtRQUNqRixNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ25GLENBQUM7SUFFTSx1QkFBdUIsQ0FBQyxRQUFnQixFQUFFLGFBQXFCO1FBQ2xFLE1BQU0sYUFBYSxHQUFH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WSxDQUNwQixDQUFDO1FBQ04sQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNuQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGFBQWEsQ0FBQyxLQUFzQjtRQUN2QyxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0lBRU0sWUFBWSxDQUFDLFFBQWtCLEVBQUUsUUFBZ0I7UUFDcEQsa0NBQWtDO1FBQ2xDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMxQyxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNqRCxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLG9CQUFvQixRQUFRLHdDQUF3QyxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pJLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDdkMsQ0FBQztJQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0VudW1UeXBlfSBmcm9tICcuLi9oZWxwZXJzL3R5cGUtaGVscGVycyc7XG5pbXBvcnQge0xvZ0xldmVsRW51bX0gZnJvbSAnLi4vbG9nL2xvZy5tb2RlbCc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uL2xvZy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge0NsYXNzQXR0cmlidXRlRGVmfSBmcm9tICcuLi9tb2RlbHMvY2xhc3MtYXR0cmlidXRlLm1vZGVsJztcbmltcG9ydCB7Q2xhc3NUeXBlfSBmcm9tICcuLi9tb2RlbHMvY2xhc3Mtc2VydmljZS5tb2RlbCc7XG5pbXBvcnQge2RlZmluZVJlZmxlY3RFbnVtTmFtZSwgZGVmaW5lUmVmbGVjdFR5cGVOYW1lLCBmaW5kUmVmbGVjdFR5cGVOYW1lLCByZWZsZWN0VHlwZU5hbWVFeGlzdHN9IGZyb20gJy4uL3JlZmxlY3QvdHlwZS1lbnVtLW1ldGFkYXRhJztcbmltcG9ydCB7UmVnaXN0cnlFbnVtTWFwLCBSZWdpc3RyeVR5cGVNYXB9IGZyb20gJy4vcmVnaXN0cnkubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgVHlwZVJlZ2lzdHJ5IHtcbiAgICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IFR5cGVSZWdpc3RyeSA9IG5ldyBUeXBlUmVnaXN0cnkoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9sb2dDYXRlZ29yeSA9ICdUeXBlUmVnaXN0cnknO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3R5cGVNYXA6IFJlZ2lzdHJ5VHlwZU1hcCA9IHt9O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VudW1NYXA6IFJlZ2lzdHJ5RW51bU1hcCA9IHt9O1xuXG4gICAgcHVibGljIGdldCB0eXBlTWFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZU1hcDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVudW1NYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnVtTWFwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9ubHkgdXNlIG9uZSBpbnN0YW5jZSBvZiBvYmplY3QgKG91dCBvZiBBbmd1bGFyIGNvbnRleHQpXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXQoKTogVHlwZVJlZ2lzdHJ5IHtcbiAgICAgICAgcmV0dXJuIFR5cGVSZWdpc3RyeS5faW5zdGFuY2U7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRBdHRyaWJ1dGVEZWZpbml0aW9uQnlDbGFzc1R5cGUodHlwZTogQ2xhc3NUeXBlPGFueT4sIGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IENsYXNzQXR0cmlidXRlRGVmIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHR5cGVOYW1lID0gZmluZFJlZmxlY3RUeXBlTmFtZSh0eXBlKTtcbiAgICAgICAgcmV0dXJuIHR5cGVOYW1lID8gdGhpcy5maW5kQXR0cmlidXRlRGVmaW5pdGlvbih0eXBlTmFtZSwgYXR0cmlidXRlTmFtZSkgOiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kQXR0cmlidXRlRGVmaW5pdGlvbih0eXBlTmFtZTogc3RyaW5nLCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiBDbGFzc0F0dHJpYnV0ZURlZiB8IG51bGwge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVEZWZzID0gdGhpcy5maW5kQXR0cmlidXRlc0RlZmluaXRpb24odHlwZU5hbWUpO1xuICAgICAgICBpZiAoIWF0dHJpYnV0ZURlZnMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZURlZnMpIHtcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUubmFtZSA9PT0gYXR0cmlidXRlTmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRBdHRyaWJ1dGVzRGVmaW5pdGlvbkJ5Q2xhc3NUeXBlKHR5cGU6IENsYXNzVHlwZTxhbnk+KTogQXJyYXk8Q2xhc3NBdHRyaWJ1dGVEZWY+IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHR5cGVOYW1lID0gZmluZFJlZmxlY3RUeXBlTmFtZSh0eXBlKTtcbiAgICAgICAgcmV0dXJuIHR5cGVOYW1lID8gdGhpcy5maW5kQXR0cmlidXRlc0RlZmluaXRpb24odHlwZU5hbWUpIDogbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZEF0dHJpYnV0ZXNEZWZpbml0aW9uKHR5cGVOYW1lOiBzdHJpbmcpOiBBcnJheTxDbGFzc0F0dHJpYnV0ZURlZj4gfCBudWxsIHtcbiAgICAgICAgY29uc3QgdHlwZURlZiA9IHRoaXMuZmluZFR5cGUodHlwZU5hbWUpO1xuICAgICAgICBpZiAoIXR5cGVEZWYgfHwgdHlwZW9mIHR5cGVEZWYuZ2V0QXR0cmlidXRlVHlwZU1hcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGVEZWYuZ2V0QXR0cmlidXRlVHlwZU1hcCgpIGFzIEFycmF5PENsYXNzQXR0cmlidXRlRGVmPjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZEJ5Q2xhc3NUeXBlKHR5cGU6IENsYXNzVHlwZTxhbnk+KTogYW55IHtcbiAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBmaW5kUmVmbGVjdFR5cGVOYW1lKHR5cGUpO1xuICAgICAgICByZXR1cm4gdHlwZU5hbWUgPyB0aGlzLmZpbmRUeXBlKHR5cGVOYW1lKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRUeXBlKHR5cGVOYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZU1hcFt0eXBlTmFtZV07XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRFbnVtKGVudW1OYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW51bU1hcFtlbnVtTmFtZV07XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyVHlwZXModHlwZXM6IFJlZ2lzdHJ5VHlwZU1hcCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0eXBlcykge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlclR5cGUodHlwZXNba2V5XSwga2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlclR5cGUodHlwZTogQ2xhc3NUeXBlPGFueT4sIG9wdFR5cGVOYW1lPzogc3RyaW5nKSB7XG4gICAgICAgIC8vIHRyeSB0byBmaW5kIG5hbWUgZnJvbSBtZXRhZGF0YVxuICAgICAgICBsZXQgdHlwZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHJlZmxlY3RUeXBlTmFtZUV4aXN0cyh0eXBlKSkge1xuICAgICAgICAgICAgLy8gZGVmaW5lZCBuYW1lIGZyb20gb3B0aW9uYWwgdHlwZSBuYW1lXG4gICAgICAgICAgICB0eXBlTmFtZSA9IGZpbmRSZWZsZWN0VHlwZU5hbWUodHlwZSkgPz8gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdFR5cGVOYW1lKSB7XG4gICAgICAgICAgICB0eXBlTmFtZSA9IG9wdFR5cGVOYW1lO1xuICAgICAgICAgICAgLy8gcmVnaXN0ZXIgbWV0YWRhdGFcbiAgICAgICAgICAgIGRlZmluZVJlZmxlY3RUeXBlTmFtZSh0eXBlLCB0eXBlTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXR5cGVOYW1lKSB7XG4gICAgICAgICAgICAvLyB0aGlzLl9sb2dnZXIuZGVidWcoYFdBUk5JTkc6IHJlZ2lzdGVyaW5nIHR5cGUgJHt0eXBlfSBmYWlsZWQsIGJlY2F1c2UgdHlwZU5hbWUgY291bGQgbm90IGJlIGRldGVybWluZWQgYW5kIG9wdGlvbmFsIG5hbWUgd2FzIG5vdCBwcm92aWRlZC5gKTtcbiAgICAgICAgICAgIExvZ2dlclNlcnZpY2UuZ2V0KCkubG9nKFxuICAgICAgICAgICAgICAgIGBXQVJOSU5HOiByZWdpc3RlcmluZyB0eXBlICR7dHlwZX0gZmFpbGVkLCBiZWNhdXNlIHR5cGVOYW1lIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkIGFuZCBvcHRpb25hbCBuYW1lIHdhcyBub3QgcHJvdmlkZWQuYCxcbiAgICAgICAgICAgICAgICBMb2dMZXZlbEVudW0uRGVidWcsXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nQ2F0ZWdvcnlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl90eXBlTWFwW3R5cGVOYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIC8vIHRoaXMuX2xvZ2dlci5kZWJ1ZyhgV0FSTklORzogcmVnaXN0ZXJpbmcgdHlwZSAke3R5cGV9IHVuZGVyIGtleSAke3R5cGVOYW1lfSBza2lwcGVkLCBiZWNhdXNlIHR5cGUgYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMga2V5LmApO1xuICAgICAgICAgICAgTG9nZ2VyU2VydmljZS5nZXQoKS5sb2coXG4gICAgICAgICAgICAgICAgYFdBUk5JTkc6IHJlZ2lzdGVyaW5nIHR5cGUgJHt0eXBlfSB1bmRlciBrZXkgJHt0eXBlTmFtZX0gc2tpcHBlZCwgYmVjYXVzZSB0eXBlIGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIGtleS5gLFxuICAgICAgICAgICAgICAgIExvZ0xldmVsRW51bS5EZWJ1ZyxcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dDYXRlZ29yeVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3R5cGVNYXBbdHlwZU5hbWVdID0gdHlwZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlckVudW1zKGVudW1zOiBSZWdpc3RyeUVudW1NYXApIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZW51bXMpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJFbnVtKGVudW1zW2tleV0sIGtleSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJFbnVtKGVudW1UeXBlOiBFbnVtVHlwZSwgZW51bU5hbWU6IHN0cmluZykge1xuICAgICAgICAvLyB0cnkgdG8gZmluZCBuYW1lIGZyb20gZGVjb3JhdG9yXG4gICAgICAgIGRlZmluZVJlZmxlY3RFbnVtTmFtZShlbnVtVHlwZSwgZW51bU5hbWUpO1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2VudW1NYXBbZW51bU5hbWVdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgTG9nZ2VyU2VydmljZS5nZXQoKS5sb2coYFJlZ2lzdGVyaW5nIGVudW0gJHtlbnVtTmFtZX0gc2tpcHBlZCwgYmVjYXVzZSBlbnVtIGFscmVhZHkgZXhpc3RzLmAsIExvZ0xldmVsRW51bS5EZWJ1ZywgdGhpcy5fbG9nQ2F0ZWdvcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZW51bU1hcFtlbnVtTmFtZV0gPSBlbnVtVHlwZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==","import { InjectionToken } from '@angular/core';\nexport const BROWSER_STORAGE_IT = new InjectionToken('BROWSER_STORAGE');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1zdG9yYWdlLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vY29yZS9zcmMvc2VydmljZXMvdG9rZW5zL2Jyb3dzZXItc3RvcmFnZS50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUFVLGlCQUFpQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGlvblRva2VufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNvbnN0IEJST1dTRVJfU1RPUkFHRV9JVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTdG9yYWdlPignQlJPV1NFUl9TVE9SQUdFJyk7XG4iXX0=","import { InjectionToken } from '@angular/core';\nexport const COMMONS_MODULE_CONFIG_IT = new InjectionToken('COMMONS_MODULE_CONFIG');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLWNvbmZpZy50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvcmUvc3JjL3NlcnZpY2VzL3Rva2Vucy9tb2R1bGUtY29uZmlnLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFnQzdDLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUFzQix1QkFBdUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3Rpb25Ub2tlbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7TG9nQ29uZmlnfSBmcm9tICcuLi8uLi9sb2cvbG9nLm1vZGVsJztcbmltcG9ydCB7VmVyc2lvbkNvbmZpZ1R5cGV9IGZyb20gJy4uLy4uL21vZGVscy92ZXJzaW9uLm1vZGVsJztcblxuZXhwb3J0IHR5cGUgQ29sb3JTY2hlbWUgPSAnbGlnaHQnIHwgJ2RhcmsnIHwgJ2F1dG8nO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbnNNb2R1bGVDb25maWcge1xuICAgIGFwcD86IHtcbiAgICAgICAgbmFtZT86IHN0cmluZztcbiAgICAgICAgb3duZXI/OiBzdHJpbmc7XG4gICAgICAgIGxvY2FsZXM/OiBzdHJpbmdbXTtcbiAgICAgICAgZGF0YUxvY2FsZXM/OiBzdHJpbmdbXTtcbiAgICAgICAgdmVyc2lvbj86IFZlcnNpb25Db25maWdUeXBlO1xuICAgIH07XG4gICAgY29uZmlndXJhdGlvbj86IHtcbiAgICAgICAgcHJvamVjdEVudmlyb25tZW50PzogYW55O1xuICAgICAgICBqc29uU291cmNlPzogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPjtcbiAgICAgICAgc2tpcEpzb25Tb3VyY2VJbml0PzogYm9vbGVhbjtcbiAgICAgICAganNvblNvdXJjZUVuYWJsZUVudlByb2Q/OiBib29sZWFuO1xuICAgIH07XG4gICAgc2VyaWFsaXphdGlvbj86IENvbW1vbnNTZXJpYWxpemF0aW9uQ29uZmlnO1xuICAgIGxvZz86IExvZ0NvbmZpZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tb25zU2VyaWFsaXphdGlvbkNvbmZpZyB7XG4gICAgZGF0ZVRpbWVJblV0Yz86IGJvb2xlYW47XG4gICAgZGF0ZVRpbWVXaXRoVGltZXpvbmU/OiBib29sZWFuO1xuICAgIGRhdGVUaW1lV2l0aE1pbGxpcz86IGJvb2xlYW47XG4gICAgZmlsdGVyc0RhdGVPbmx5RGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQ09NTU9OU19NT0RVTEVfQ09ORklHX0lUID0gbmV3IEluamVjdGlvblRva2VuPENvbW1vbnNNb2R1bGVDb25maWc+KCdDT01NT05TX01PRFVMRV9DT05GSUcnKTtcbiJdfQ==","import { DestroyRef, Injectable, computed, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Title } from '@angular/platform-browser';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { PrimeNG } from 'primeng/config';\nimport { filter } from 'rxjs/operators';\nimport { narrowI18nToTranslation } from '../i18n/i18n-common';\nimport { LoggerService } from '../log/logger.service';\nimport { effectWithDeps } from '../reactivity/effect';\nimport { BROWSER_STORAGE_IT } from './tokens/browser-storage.token';\nimport { COMMONS_MODULE_CONFIG_IT } from './tokens/module-config.token';\nimport * as i0 from \"@angular/core\";\nexport class CommonsService {\n getDefaultLocale() {\n const browserLang = this.translate.getBrowserLang();\n if (browserLang && this.appLocales().some(l => l === browserLang)) {\n return browserLang;\n }\n return this.appLocales()?.length > 0 ? this.appLocales()[0] : 'en';\n }\n initAppLocale() {\n const lsLang = this.localStorage.getItem('lang');\n if (lsLang && this.appLocales().some(l => l === lsLang)) {\n return lsLang;\n }\n return this.getDefaultLocale();\n }\n setAppLocale(language) {\n if (this.appLocales().some(l => l === language)) {\n this.translate.use(language);\n this._appLocale.set(language);\n if (language !== this.getDefaultLocale())\n this.localStorage.setItem('lang', language);\n else\n this.localStorage.removeItem('lang');\n }\n }\n clearAppLocale() {\n this.localStorage.removeItem('lang');\n this._appLocale.set(this.getDefaultLocale());\n }\n initAppDataLocale() {\n const dataLang = this.localStorage.getItem('dataLang');\n if (dataLang && this.appDataLocales().some(dl => dl === dataLang)) {\n return dataLang;\n }\n return this.appDataLocales()?.length > 0 ? this.getDefaultLocale() : 'en';\n }\n setAppDataLocale(dataLocale) {\n if (this.appDataLocales().some(dl => dl === dataLocale)) {\n this._appDataLocale.set(dataLocale);\n if (dataLocale !== this.getDefaultLocale())\n this.localStorage.setItem('dataLang', dataLocale);\n else\n this.localStorage.removeItem('dataLang');\n }\n }\n clearAppDataLocale() {\n this.localStorage.removeItem('lang');\n this._appDataLocale.set(this.getDefaultLocale());\n }\n constructor() {\n // internal\n this.logger = inject(LoggerService).create('CommonsService');\n this.router = inject(Router);\n this.primengConfig = inject(PrimeNG);\n this.translate = inject(TranslateService);\n this.titleService = inject(Title);\n this.moduleConfig = inject(COMMONS_MODULE_CONFIG_IT, { optional: true });\n this.localStorage = inject(BROWSER_STORAGE_IT);\n this.destroyRef = inject(DestroyRef);\n // breadcrumbs\n this.breadcrumbHome = signal({\n icon: 'pi pi-home',\n routerLink: '/'\n }, ...(ngDevMode ? [{ debugName: \"breadcrumbHome\" }] : []));\n this.breadcrumbs = signal([], ...(ngDevMode ? [{ debugName: \"breadcrumbs\" }] : []));\n // user\n this.user = signal(undefined, ...(ngDevMode ? [{ debugName: \"user\" }] : []));\n this.userRoles = signal([], ...(ngDevMode ? [{ debugName: \"userRoles\" }] : []));\n // APP section\n this.appName = signal(this.moduleConfig?.app?.name ?? 'app.name', ...(ngDevMode ? [{ debugName: \"appName\" }] : []));\n this.appOwner = signal(this.moduleConfig?.app?.owner ?? 'app.owner', ...(ngDevMode ? [{ debugName: \"appOwner\" }] : []));\n this.appLocales = signal(this.moduleConfig?.app?.locales ?? ['en'], ...(ngDevMode ? [{ debugName: \"appLocales\" }] : []));\n this._appLocale = signal(this.initAppLocale(), ...(ngDevMode ? [{ debugName: \"_appLocale\" }] : []));\n this.appLocale = computed(() => this._appLocale(), ...(ngDevMode ? [{ debugName: \"appLocale\" }] : []));\n this.appDataLocales = signal(this.moduleConfig?.app?.dataLocales ?? ['en'], ...(ngDevMode ? [{ debugName: \"appDataLocales\" }] : []));\n this._appDataLocale = signal(this.initAppDataLocale(), ...(ngDevMode ? [{ debugName: \"_appDataLocale\" }] : []));\n this.appDataLocale = computed(() => this._appDataLocale(), ...(ngDevMode ? [{ debugName: \"appDataLocale\" }] : []));\n this.appVersion = signal(this.moduleConfig?.app?.version, ...(ngDevMode ? [{ debugName: \"appVersion\" }] : []));\n // ripple\n this.primengConfig.ripple.set(true);\n effectWithDeps([this.appLocales, this.appDataLocales], ([appLocales, appDataLocales]) => {\n if (appLocales) {\n this.setAppLocale(this.initAppLocale());\n this.translate.addLangs(appLocales);\n this.translate.setFallbackLang(appLocales[0]);\n }\n if (appDataLocales)\n this.setAppDataLocale(this.initAppDataLocale());\n });\n this.router.events\n .pipe(\n // Filter the NavigationEnd events as the breadcrumb is updated only when the route reaches its end\n filter(event => event instanceof NavigationEnd), takeUntilDestroyed())\n .subscribe(() => {\n this.updateBreadcrumbs();\n this.setPageTitle();\n });\n this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe(() => {\n this.updateBreadcrumbs();\n this.setPageTitle();\n });\n this.translate\n .stream('mngPrime')\n .pipe(takeUntilDestroyed())\n .subscribe((value) => this.primengConfig.setTranslation(value));\n }\n initialize() {\n this.logger.debug('Initialize');\n }\n // BREADCRUMB actions\n findBreadcrumbItem(item) {\n const items = this.breadcrumbs();\n if (item.id) {\n return items.find(i => i.id && i.id === item.id) ?? null;\n }\n else if (item.routerLink) {\n const routerLinkStr = Array.isArray(item.routerLink) ? item.routerLink.join('/') : item.routerLink;\n return items.find(i => i.routerLink && (Array.isArray(i.routerLink) ? i.routerLink.join('/') : i.routerLink) === routerLinkStr) ?? null;\n }\n else if (item.positionIndex) {\n return items.find(i => i.positionIndex && i.positionIndex === i.positionIndex) ?? null;\n }\n else if (item.label) {\n return items.find(i => i.label && i.label === i.label) ?? null;\n }\n else if (item.icon) {\n return items.find(i => i.icon && i.icon === i.icon) ?? null;\n }\n return null;\n }\n updateBreadcrumbItem(item) {\n const items = [...this.breadcrumbs()];\n let posIdx = -1;\n if (item.id) {\n posIdx = items.findIndex(i => i.id && i.id === item.id);\n }\n else if (item.routerLink) {\n const routerLinkStr = Array.isArray(item.routerLink) ? item.routerLink.join('/') : item.routerLink;\n posIdx = items.findIndex(i => i.routerLink && (Array.isArray(i.routerLink) ? i.routerLink.join('/') : i.routerLink) === routerLinkStr);\n }\n else if (item.positionIndex) {\n posIdx = items.findIndex(i => i.positionIndex && i.positionIndex === i.positionIndex);\n }\n else if (item.label) {\n posIdx = items.findIndex(i => i.label && i.label === i.label);\n }\n else if (item.icon) {\n posIdx = items.findIndex(i => i.icon && i.icon === i.icon);\n }\n if (posIdx < 0) {\n return false;\n }\n items[posIdx] = {\n ...items[posIdx],\n ...item,\n updated: true\n };\n this.breadcrumbs.set(items);\n return true;\n }\n updateBreadcrumbs() {\n if (this.breadcrumbsTranslateSubscription) {\n this.breadcrumbsTranslateSubscription.unsubscribe();\n this.breadcrumbsTranslateSubscription = undefined;\n }\n if (this.breadcrumbHomeTranslateSubscription) {\n this.breadcrumbHomeTranslateSubscription.unsubscribe();\n this.breadcrumbHomeTranslateSubscription = undefined;\n }\n const rootRoute = this.router.routerState.snapshot.root;\n const homeBreadcrumb = this.generateHomeBreadcrumb(rootRoute);\n if (homeBreadcrumb) {\n if (homeBreadcrumb.label) {\n this.breadcrumbHomeTranslateSubscription = this.translate\n .get(homeBreadcrumb.label)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((i18n) => {\n homeBreadcrumb.label = i18n;\n this.breadcrumbHome.set(homeBreadcrumb);\n });\n }\n else {\n this.breadcrumbHome.set(homeBreadcrumb);\n }\n }\n const breadcrumbs = [];\n this.generateBreadcrumbs(rootRoute, [], breadcrumbs);\n breadcrumbs.forEach((b, idx) => {\n b.positionIndex = idx;\n });\n const i18nKeys = breadcrumbs.filter(b => typeof b.label === 'string').map(b => b.label);\n if (i18nKeys.length > 0) {\n this.breadcrumbsTranslateSubscription = this.translate\n .get(i18nKeys)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((i18n) => {\n // Construct the breadcrumb hierarchy\n breadcrumbs.forEach(b => {\n const translation = narrowI18nToTranslation(i18n, b.label);\n if (translation) {\n b.label = translation;\n }\n });\n // Emit the new breadcrumbs\n this.breadcrumbs.set(breadcrumbs);\n });\n }\n else {\n this.breadcrumbs.set(breadcrumbs);\n }\n }\n generateHomeBreadcrumb(route) {\n if (!route) {\n return null;\n }\n const routeData = route.data;\n const breadcrumbRouteData = routeData?.breadcrumb;\n if (breadcrumbRouteData && typeof breadcrumbRouteData === 'object' && 'isHome' in breadcrumbRouteData) {\n if (breadcrumbRouteData.isHome === false) {\n return null;\n }\n const breadcrumb = this.createBreadcrumb('/', breadcrumbRouteData, true);\n if (breadcrumb) {\n if (typeof breadcrumb.icon === 'undefined') {\n breadcrumb.icon = 'pi pi-home';\n }\n return breadcrumb;\n }\n }\n else {\n return this.generateHomeBreadcrumb(route.firstChild);\n }\n return null;\n }\n generateBreadcrumbs(route, parentUrlSegments, breadcrumbs) {\n if (!route) {\n return;\n }\n const routeData = route.data;\n const routeUrlSegments = parentUrlSegments.concat(route.url.map(url => url.path));\n const routeUrl = `/${routeUrlSegments.join('/')}`;\n if (routeData?.breadcrumb) {\n const breadcrumbRouteData = routeData.breadcrumb;\n if (Array.isArray(breadcrumbRouteData)) {\n for (const breadcrumbRouteDataItem of breadcrumbRouteData) {\n const breadcrumb = this.createBreadcrumb(routeUrl, breadcrumbRouteDataItem);\n if (breadcrumb) {\n breadcrumbs.push(breadcrumb);\n }\n }\n }\n else if (typeof breadcrumbRouteData === 'function') {\n breadcrumbs.push(...breadcrumbRouteData(routeUrl, route));\n }\n else {\n const breadcrumb = this.createBreadcrumb(routeUrl, breadcrumbRouteData);\n if (breadcrumb) {\n breadcrumbs.push(breadcrumb);\n }\n }\n }\n this.generateBreadcrumbs(route.firstChild, routeUrlSegments, breadcrumbs);\n }\n createBreadcrumb(routeUrl, routeBreadcrumb, includeHome = false) {\n const existingBreadcrumb = this.findBreadcrumbItem({ routerLink: routeUrl });\n if (existingBreadcrumb?.updated) {\n return existingBreadcrumb;\n }\n if (typeof routeBreadcrumb === 'string') {\n // check for updated existing breadcrumb\n return {\n id: routeUrl,\n label: routeBreadcrumb,\n routerLink: routeUrl\n };\n }\n else {\n if (!includeHome && typeof routeBreadcrumb.isHome !== 'undefined') {\n // home should not be included\n return null;\n }\n if (typeof routeBreadcrumb.routerLink === 'undefined') {\n routeBreadcrumb.routerLink = routeUrl;\n }\n routeBreadcrumb.id = routeUrl;\n return routeBreadcrumb;\n }\n }\n // TITLE section\n setPageTitle(title) {\n let currentRoute = this.router.routerState.snapshot.root;\n while (currentRoute.firstChild) {\n currentRoute = currentRoute.firstChild;\n }\n const routeData = currentRoute.data;\n const pageTitle = title ?? routeData.pageTitle;\n this.titleService.setTitle(this.formatPageTitle(pageTitle));\n }\n formatPageTitle(titlePrefix) {\n const titlePieces = [];\n if (titlePrefix) {\n titlePieces.push(this.translate.instant(titlePrefix));\n }\n titlePieces.push(this.translate.instant('app.name'));\n return titlePieces.join(' - ');\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsService, decorators: [{\n type: Injectable\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvc2VydmljZXMvY29tbW9ucy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRCxPQUFPLEVBQXlCLGFBQWEsRUFBRSxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU5RSxPQUFPLEVBQW9CLGdCQUFnQixFQUFpQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3hHLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR3BELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQzs7QUFHdEUsTUFBTSxPQUFPLGNBQWM7SUE0QmhCLGdCQUFnQjtRQUNuQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BELElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssV0FB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QyxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUVELFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUVyRCxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQzs4R0FqVlEsY0FBYztrSEFBZCxjQUFjOzsyRkFBZCxjQUFjO2tCQUQxQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEZXN0cm95UmVmLCBJbmplY3RhYmxlLCBjb21wdXRlZCwgaW5qZWN0LCBzaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7VGl0bGV9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7U3RyaWN0VHJhbnNsYXRpb24sIFRyYW5zbGF0ZVNlcnZpY2UsIFRyYW5zbGF0aW9uLCBUcmFuc2xhdGlvbk9iamVjdH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1ByaW1lTkd9IGZyb20gJ3ByaW1lbmcvY29uZmlnJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmlsdGVyfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7bmFycm93STE4blRvVHJhbnNsYXRpb259IGZyb20gJy4uL2kxOG4vaTE4bi1jb21tb24nO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi9sb2cvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtDb21tb25zTWVudUl0ZW19IGZyb20gJy4uL21vZGVscy9tZW51Lm1vZGVsJztcbmltcG9ydCB7SVVzZXJ9IGZyb20gJy4uL21vZGVscy91c2VyLm1vZGVsJztcbmltcG9ydCB7ZWZmZWN0V2l0aERlcHN9IGZyb20gJy4uL3JlYWN0aXZpdHkvZWZmZWN0JztcbmltcG9ydCB7QnJlYWRjcnVtYk1lbnVJdGVtLCBDb21tb25zUm91dGVEYXRhfSBmcm9tICcuLi9yb3V0ZXIvcm91dGVyLm1vZGVsJztcbmltcG9ydCB7QlJPV1NFUl9TVE9SQUdFX0lUfSBmcm9tICcuL3Rva2Vucy9icm93c2VyLXN0b3JhZ2UudG9rZW4nO1xuaW1wb3J0IHtDT01NT05TX01PRFVMRV9DT05GSUdfSVR9IGZyb20gJy4vdG9rZW5zL21vZHVsZS1jb25maWcudG9rZW4nO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29tbW9uc1NlcnZpY2Uge1xuICAgIC8vIGludGVybmFsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBpbmplY3QoTG9nZ2VyU2VydmljZSkuY3JlYXRlKCdDb21tb25zU2VydmljZScpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmltZW5nQ29uZmlnID0gaW5qZWN0KFByaW1lTkcpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdGl0bGVTZXJ2aWNlID0gaW5qZWN0KFRpdGxlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1vZHVsZUNvbmZpZyA9IGluamVjdChDT01NT05TX01PRFVMRV9DT05GSUdfSVQsIHtvcHRpb25hbDogdHJ1ZX0pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxTdG9yYWdlID0gaW5qZWN0KEJST1dTRVJfU1RPUkFHRV9JVCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLy8gYnJlYWRjcnVtYnNcbiAgICBwdWJsaWMgcmVhZG9ubHkgYnJlYWRjcnVtYkhvbWUgPSBzaWduYWw8Q29tbW9uc01lbnVJdGVtIHwgbnVsbD4oe1xuICAgICAgICBpY29uOiAncGkgcGktaG9tZScsXG4gICAgICAgIHJvdXRlckxpbms6ICcvJ1xuICAgIH0pO1xuICAgIHB1YmxpYyByZWFkb25seSBicmVhZGNydW1icyA9IHNpZ25hbDxDb21tb25zTWVudUl0ZW1bXT4oW10pO1xuICAgIHByaXZhdGUgYnJlYWRjcnVtYnNUcmFuc2xhdGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBicmVhZGNydW1iSG9tZVRyYW5zbGF0ZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIC8vIHVzZXJcbiAgICBwdWJsaWMgdXNlciA9IHNpZ25hbDxJVXNlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwdWJsaWMgdXNlclJvbGVzID0gc2lnbmFsPEFycmF5PHN0cmluZz4+KFtdKTtcblxuICAgIC8vIEFQUCBzZWN0aW9uXG4gICAgcHVibGljIGFwcE5hbWUgPSBzaWduYWwodGhpcy5tb2R1bGVDb25maWc/LmFwcD8ubmFtZSA/PyAnYXBwLm5hbWUnKTtcbiAgICBwdWJsaWMgYXBwT3duZXIgPSBzaWduYWwodGhpcy5tb2R1bGVDb25maWc/LmFwcD8ub3duZXIgPz8gJ2FwcC5vd25lcicpO1xuXG4gICAgcHVibGljIGdldERlZmF1bHRMb2NhbGUoKSB7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJMYW5nID0gdGhpcy50cmFuc2xhdGUuZ2V0QnJvd3NlckxhbmcoKTtcbiAgICAgICAgaWYgKGJyb3dzZXJMYW5nICYmIHRoaXMuYXBwTG9jYWxlcygpLnNvbWUobCA9PiBsID09PSBicm93c2VyTGFuZykpIHtcbiAgICAgICAgICAgIHJldHVybiBicm93c2VyTGFuZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hcHBMb2NhbGVzKCk/Lmxlbmd0aCA+IDAgPyB0aGlzLmFwcExvY2FsZXMoKVswXSA6ICdlbic7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcExvY2FsZXMgPSBzaWduYWwodGhpcy5tb2R1bGVDb25maWc/LmFwcD8ubG9jYWxlcyA/PyBbJ2VuJ10pO1xuICAgIHByaXZhdGUgX2FwcExvY2FsZSA9IHNpZ25hbDxzdHJpbmc+KHRoaXMuaW5pdEFwcExvY2FsZSgpKTtcbiAgICBwdWJsaWMgYXBwTG9jYWxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fYXBwTG9jYWxlKCkpO1xuXG4gICAgcHJpdmF0ZSBpbml0QXBwTG9jYWxlKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGxzTGFuZyA9IHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmcnKTtcbiAgICAgICAgaWYgKGxzTGFuZyAmJiB0aGlzLmFwcExvY2FsZXMoKS5zb21lKGwgPT4gbCA9PT0gbHNMYW5nKSkge1xuICAgICAgICAgICAgcmV0dXJuIGxzTGFuZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXREZWZhdWx0TG9jYWxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEFwcExvY2FsZShsYW5ndWFnZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmFwcExvY2FsZXMoKS5zb21lKGwgPT4gbCA9PT0gbGFuZ3VhZ2UpKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS51c2UobGFuZ3VhZ2UpO1xuICAgICAgICAgICAgdGhpcy5fYXBwTG9jYWxlLnNldChsYW5ndWFnZSk7XG4gICAgICAgICAgICBpZiAobGFuZ3VhZ2UgIT09IHRoaXMuZ2V0RGVmYXVsdExvY2FsZSgpKSB0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdsYW5nJywgbGFuZ3VhZ2UpO1xuICAgICAgICAgICAgZWxzZSB0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdsYW5nJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJBcHBMb2NhbGUoKSB7XG4gICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2xhbmcnKTtcbiAgICAgICAgdGhpcy5fYXBwTG9jYWxlLnNldCh0aGlzLmdldERlZmF1bHRMb2NhbGUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcERhdGFMb2NhbGVzID0gc2lnbmFsKHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/LmRhdGFMb2NhbGVzID8/IFsnZW4nXSk7XG4gICAgcHJpdmF0ZSBfYXBwRGF0YUxvY2FsZSA9IHNpZ25hbDxzdHJpbmc+KHRoaXMuaW5pdEFwcERhdGFMb2NhbGUoKSk7XG4gICAgcHVibGljIGFwcERhdGFMb2NhbGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9hcHBEYXRhTG9jYWxlKCkpO1xuXG4gICAgcHJpdmF0ZSBpbml0QXBwRGF0YUxvY2FsZSgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBkYXRhTGFuZyA9IHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RhdGFMYW5nJyk7XG4gICAgICAgIGlmIChkYXRhTGFuZyAmJiB0aGlzLmFwcERhdGFMb2NhbGVzKCkuc29tZShkbCA9PiBkbCA9PT0gZGF0YUxhbmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YUxhbmc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwRGF0YUxvY2FsZXMoKT8ubGVuZ3RoID4gMCA/IHRoaXMuZ2V0RGVmYXVsdExvY2FsZSgpIDogJ2VuJztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QXBwRGF0YUxvY2FsZShkYXRhTG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuYXBwRGF0YUxvY2FsZXMoKS5zb21lKGRsID0+IGRsID09PSBkYXRhTG9jYWxlKSkge1xuICAgICAgICAgICAgdGhpcy5fYXBwRGF0YUxvY2FsZS5zZXQoZGF0YUxvY2FsZSk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhTG9jYWxlICE9PSB0aGlzLmdldERlZmF1bHRMb2NhbGUoKSkgdGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZGF0YUxhbmcnLCBkYXRhTG9jYWxlKTtcbiAgICAgICAgICAgIGVsc2UgdGhpcy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnZGF0YUxhbmcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhckFwcERhdGFMb2NhbGUoKSB7XG4gICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2xhbmcnKTtcbiAgICAgICAgdGhpcy5fYXBwRGF0YUxvY2FsZS5zZXQodGhpcy5nZXREZWZhdWx0TG9jYWxlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhcHBWZXJzaW9uID0gc2lnbmFsKHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/LnZlcnNpb24pO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8vIHJpcHBsZVxuICAgICAgICB0aGlzLnByaW1lbmdDb25maWcucmlwcGxlLnNldCh0cnVlKTtcblxuICAgICAgICBlZmZlY3RXaXRoRGVwcyhbdGhpcy5hcHBMb2NhbGVzLCB0aGlzLmFwcERhdGFMb2NhbGVzXSwgKFthcHBMb2NhbGVzLCBhcHBEYXRhTG9jYWxlc10pID0+IHtcbiAgICAgICAgICAgIGlmIChhcHBMb2NhbGVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBcHBMb2NhbGUodGhpcy5pbml0QXBwTG9jYWxlKCkpO1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLmFkZExhbmdzKGFwcExvY2FsZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLnNldEZhbGxiYWNrTGFuZyhhcHBMb2NhbGVzWzBdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGFwcERhdGFMb2NhbGVzKSB0aGlzLnNldEFwcERhdGFMb2NhbGUodGhpcy5pbml0QXBwRGF0YUxvY2FsZSgpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAvLyBGaWx0ZXIgdGhlIE5hdmlnYXRpb25FbmQgZXZlbnRzIGFzIHRoZSBicmVhZGNydW1iIGlzIHVwZGF0ZWQgb25seSB3aGVuIHRoZSByb3V0ZSByZWFjaGVzIGl0cyBlbmRcbiAgICAgICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVCcmVhZGNydW1icygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UGFnZVRpdGxlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJyZWFkY3J1bWJzKCk7XG4gICAgICAgICAgICB0aGlzLnNldFBhZ2VUaXRsZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVxuICAgICAgICAgICAgLnN0cmVhbSgnbW5nUHJpbWUnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogVHJhbnNsYXRpb25PYmplY3QpID0+IHRoaXMucHJpbWVuZ0NvbmZpZy5zZXRUcmFuc2xhdGlvbih2YWx1ZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbml0aWFsaXplKCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5pdGlhbGl6ZScpO1xuICAgIH1cblxuICAgIC8vIEJSRUFEQ1JVTUIgYWN0aW9uc1xuICAgIHB1YmxpYyBmaW5kQnJlYWRjcnVtYkl0ZW0oaXRlbTogQ29tbW9uc01lbnVJdGVtKTogQ29tbW9uc01lbnVJdGVtIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5icmVhZGNydW1icygpO1xuICAgICAgICBpZiAoaXRlbS5pZCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbmQoaSA9PiBpLmlkICYmIGkuaWQgPT09IGl0ZW0uaWQpID8/IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5yb3V0ZXJMaW5rKSB7XG4gICAgICAgICAgICBjb25zdCByb3V0ZXJMaW5rU3RyID0gQXJyYXkuaXNBcnJheShpdGVtLnJvdXRlckxpbmspID8gaXRlbS5yb3V0ZXJMaW5rLmpvaW4oJy8nKSA6IGl0ZW0ucm91dGVyTGluaztcbiAgICAgICAgICAgIHJldHVybiBpdGVtcy5maW5kKGkgPT4gaS5yb3V0ZXJMaW5rICYmIChBcnJheS5pc0FycmF5KGkucm91dGVyTGluaykgPyBpLnJvdXRlckxpbmsuam9pbignLycpIDogaS5yb3V0ZXJMaW5rKSA9PT0gcm91dGVyTGlua1N0cikgPz8gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnBvc2l0aW9uSW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtcy5maW5kKGkgPT4gaS5wb3NpdGlvbkluZGV4ICYmIGkucG9zaXRpb25JbmRleCA9PT0gaS5wb3NpdGlvbkluZGV4KSA/PyBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ubGFiZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtcy5maW5kKGkgPT4gaS5sYWJlbCAmJiBpLmxhYmVsID09PSBpLmxhYmVsKSA/PyBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWNvbikge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbmQoaSA9PiBpLmljb24gJiYgaS5pY29uID09PSBpLmljb24pID8/IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUJyZWFkY3J1bWJJdGVtKGl0ZW06IENvbW1vbnNNZW51SXRlbSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmJyZWFkY3J1bWJzKCldO1xuICAgICAgICBsZXQgcG9zSWR4ID0gLTE7XG4gICAgICAgIGlmIChpdGVtLmlkKSB7XG4gICAgICAgICAgICBwb3NJZHggPSBpdGVtcy5maW5kSW5kZXgoaSA9PiBpLmlkICYmIGkuaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ucm91dGVyTGluaykge1xuICAgICAgICAgICAgY29uc3Qgcm91dGVyTGlua1N0ciA9IEFycmF5LmlzQXJyYXkoaXRlbS5yb3V0ZXJMaW5rKSA/IGl0ZW0ucm91dGVyTGluay5qb2luKCcvJykgOiBpdGVtLnJvdXRlckxpbms7XG4gICAgICAgICAgICBwb3NJZHggPSBpdGVtcy5maW5kSW5kZXgoaSA9PiBpLnJvdXRlckxpbmsgJiYgKEFycmF5LmlzQXJyYXkoaS5yb3V0ZXJMaW5rKSA/IGkucm91dGVyTGluay5qb2luKCcvJykgOiBpLnJvdXRlckxpbmspID09PSByb3V0ZXJMaW5rU3RyKTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnBvc2l0aW9uSW5kZXgpIHtcbiAgICAgICAgICAgIHBvc0lkeCA9IGl0ZW1zLmZpbmRJbmRleChpID0+IGkucG9zaXRpb25JbmRleCAmJiBpLnBvc2l0aW9uSW5kZXggPT09IGkucG9zaXRpb25JbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5sYWJlbCkge1xuICAgICAgICAgICAgcG9zSWR4ID0gaXRlbXMuZmluZEluZGV4KGkgPT4gaS5sYWJlbCAmJiBpLmxhYmVsID09PSBpLmxhYmVsKTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLmljb24pIHtcbiAgICAgICAgICAgIHBvc0lkeCA9IGl0ZW1zLmZpbmRJbmRleChpID0+IGkuaWNvbiAmJiBpLmljb24gPT09IGkuaWNvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zSWR4IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaXRlbXNbcG9zSWR4XSA9IHtcbiAgICAgICAgICAgIC4uLml0ZW1zW3Bvc0lkeF0sXG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgdXBkYXRlZDogdHJ1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuYnJlYWRjcnVtYnMuc2V0KGl0ZW1zKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUJyZWFkY3J1bWJzKCkge1xuICAgICAgICBpZiAodGhpcy5icmVhZGNydW1ic1RyYW5zbGF0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1ic1RyYW5zbGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1ic1RyYW5zbGF0ZVN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5icmVhZGNydW1iSG9tZVRyYW5zbGF0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1iSG9tZVRyYW5zbGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1iSG9tZVRyYW5zbGF0ZVN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvb3RSb3V0ZSA9IHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnJvb3Q7XG5cbiAgICAgICAgY29uc3QgaG9tZUJyZWFkY3J1bWIgPSB0aGlzLmdlbmVyYXRlSG9tZUJyZWFkY3J1bWIocm9vdFJvdXRlKTtcbiAgICAgICAgaWYgKGhvbWVCcmVhZGNydW1iKSB7XG4gICAgICAgICAgICBpZiAoaG9tZUJyZWFkY3J1bWIubGFiZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJIb21lVHJhbnNsYXRlU3Vic2NyaXB0aW9uID0gdGhpcy50cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgLmdldChob21lQnJlYWRjcnVtYi5sYWJlbClcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGkxOG46IFRyYW5zbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBob21lQnJlYWRjcnVtYi5sYWJlbCA9IGkxOG47XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJIb21lLnNldChob21lQnJlYWRjcnVtYik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJIb21lLnNldChob21lQnJlYWRjcnVtYik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBicmVhZGNydW1iczogQ29tbW9uc01lbnVJdGVtW10gPSBbXTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUJyZWFkY3J1bWJzKHJvb3RSb3V0ZSwgW10sIGJyZWFkY3J1bWJzKTtcblxuICAgICAgICBicmVhZGNydW1icy5mb3JFYWNoKChiLCBpZHgpID0+IHtcbiAgICAgICAgICAgIGIucG9zaXRpb25JbmRleCA9IGlkeDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaTE4bktleXM6IEFycmF5PHN0cmluZz4gPSBicmVhZGNydW1icy5maWx0ZXIoYiA9PiB0eXBlb2YgYi5sYWJlbCA9PT0gJ3N0cmluZycpLm1hcChiID0+IGIubGFiZWwhKTtcbiAgICAgICAgaWYgKGkxOG5LZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYnNUcmFuc2xhdGVTdWJzY3JpcHRpb24gPSB0aGlzLnRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIC5nZXQoaTE4bktleXMpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoaTE4bjogU3RyaWN0VHJhbnNsYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29uc3RydWN0IHRoZSBicmVhZGNydW1iIGhpZXJhcmNoeVxuICAgICAgICAgICAgICAgICAgICBicmVhZGNydW1icy5mb3JFYWNoKGIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSBuYXJyb3dJMThuVG9UcmFuc2xhdGlvbihpMThuLCBiLmxhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIubGFiZWwgPSB0cmFuc2xhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCB0aGUgbmV3IGJyZWFkY3J1bWJzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYnMuc2V0KGJyZWFkY3J1bWJzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYnMuc2V0KGJyZWFkY3J1bWJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVIb21lQnJlYWRjcnVtYihyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGwpOiBDb21tb25zTWVudUl0ZW0gfCBudWxsIHtcbiAgICAgICAgaWYgKCFyb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3V0ZURhdGEgPSByb3V0ZS5kYXRhIGFzIENvbW1vbnNSb3V0ZURhdGE7XG4gICAgICAgIGNvbnN0IGJyZWFkY3J1bWJSb3V0ZURhdGEgPSByb3V0ZURhdGE/LmJyZWFkY3J1bWI7XG4gICAgICAgIGlmIChicmVhZGNydW1iUm91dGVEYXRhICYmIHR5cGVvZiBicmVhZGNydW1iUm91dGVEYXRhID09PSAnb2JqZWN0JyAmJiAnaXNIb21lJyBpbiBicmVhZGNydW1iUm91dGVEYXRhKSB7XG4gICAgICAgICAgICBpZiAoYnJlYWRjcnVtYlJvdXRlRGF0YS5pc0hvbWUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBicmVhZGNydW1iID0gdGhpcy5jcmVhdGVCcmVhZGNydW1iKCcvJywgYnJlYWRjcnVtYlJvdXRlRGF0YSwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAoYnJlYWRjcnVtYikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYnJlYWRjcnVtYi5pY29uID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBicmVhZGNydW1iLmljb24gPSAncGkgcGktaG9tZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBicmVhZGNydW1iO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVIb21lQnJlYWRjcnVtYihyb3V0ZS5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlQnJlYWRjcnVtYnMocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsLCBwYXJlbnRVcmxTZWdtZW50czogc3RyaW5nW10sIGJyZWFkY3J1bWJzOiBDb21tb25zTWVudUl0ZW1bXSkge1xuICAgICAgICBpZiAoIXJvdXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3V0ZURhdGEgPSByb3V0ZS5kYXRhIGFzIENvbW1vbnNSb3V0ZURhdGE7XG4gICAgICAgIGNvbnN0IHJvdXRlVXJsU2VnbWVudHMgPSBwYXJlbnRVcmxTZWdtZW50cy5jb25jYXQocm91dGUudXJsLm1hcCh1cmwgPT4gdXJsLnBhdGgpKTtcbiAgICAgICAgY29uc3Qgcm91dGVVcmwgPSBgLyR7cm91dGVVcmxTZWdtZW50cy5qb2luKCcvJyl9YDtcbiAgICAgICAgaWYgKHJvdXRlRGF0YT8uYnJlYWRjcnVtYikge1xuICAgICAgICAgICAgY29uc3QgYnJlYWRjcnVtYlJvdXRlRGF0YSA9IHJvdXRlRGF0YS5icmVhZGNydW1iO1xuXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShicmVhZGNydW1iUm91dGVEYXRhKSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYnJlYWRjcnVtYlJvdXRlRGF0YUl0ZW0gb2YgYnJlYWRjcnVtYlJvdXRlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBicmVhZGNydW1iID0gdGhpcy5jcmVhdGVCcmVhZGNydW1iKHJvdXRlVXJsLCBicmVhZGNydW1iUm91dGVEYXRhSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChicmVhZGNydW1iKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhZGNydW1icy5wdXNoKGJyZWFkY3J1bWIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYnJlYWRjcnVtYlJvdXRlRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGJyZWFkY3J1bWJzLnB1c2goLi4uYnJlYWRjcnVtYlJvdXRlRGF0YShyb3V0ZVVybCwgcm91dGUpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnJlYWRjcnVtYiA9IHRoaXMuY3JlYXRlQnJlYWRjcnVtYihyb3V0ZVVybCwgYnJlYWRjcnVtYlJvdXRlRGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKGJyZWFkY3J1bWIpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWRjcnVtYnMucHVzaChicmVhZGNydW1iKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZW5lcmF0ZUJyZWFkY3J1bWJzKHJvdXRlLmZpcnN0Q2hpbGQsIHJvdXRlVXJsU2VnbWVudHMsIGJyZWFkY3J1bWJzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUJyZWFkY3J1bWIocm91dGVVcmw6IHN0cmluZywgcm91dGVCcmVhZGNydW1iOiBzdHJpbmcgfCBCcmVhZGNydW1iTWVudUl0ZW0sIGluY2x1ZGVIb21lID0gZmFsc2UpOiBDb21tb25zTWVudUl0ZW0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdCcmVhZGNydW1iID0gdGhpcy5maW5kQnJlYWRjcnVtYkl0ZW0oe3JvdXRlckxpbms6IHJvdXRlVXJsfSk7XG4gICAgICAgIGlmIChleGlzdGluZ0JyZWFkY3J1bWI/LnVwZGF0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleGlzdGluZ0JyZWFkY3J1bWI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByb3V0ZUJyZWFkY3J1bWIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAvLyBjaGVjayBmb3IgdXBkYXRlZCBleGlzdGluZyBicmVhZGNydW1iXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkOiByb3V0ZVVybCxcbiAgICAgICAgICAgICAgICBsYWJlbDogcm91dGVCcmVhZGNydW1iLFxuICAgICAgICAgICAgICAgIHJvdXRlckxpbms6IHJvdXRlVXJsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFpbmNsdWRlSG9tZSAmJiB0eXBlb2Ygcm91dGVCcmVhZGNydW1iLmlzSG9tZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAvLyBob21lIHNob3VsZCBub3QgYmUgaW5jbHVkZWRcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygcm91dGVCcmVhZGNydW1iLnJvdXRlckxpbmsgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcm91dGVCcmVhZGNydW1iLnJvdXRlckxpbmsgPSByb3V0ZVVybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvdXRlQnJlYWRjcnVtYi5pZCA9IHJvdXRlVXJsO1xuICAgICAgICAgICAgcmV0dXJuIHJvdXRlQnJlYWRjcnVtYjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRJVExFIHNlY3Rpb25cblxuICAgIHB1YmxpYyBzZXRQYWdlVGl0bGUodGl0bGU/OiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IGN1cnJlbnRSb3V0ZSA9IHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnJvb3Q7XG4gICAgICAgIHdoaWxlIChjdXJyZW50Um91dGUuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgY3VycmVudFJvdXRlID0gY3VycmVudFJvdXRlLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3V0ZURhdGEgPSBjdXJyZW50Um91dGUuZGF0YSBhcyBDb21tb25zUm91dGVEYXRhO1xuICAgICAgICBjb25zdCBwYWdlVGl0bGUgPSB0aXRsZSA/PyByb3V0ZURhdGEucGFnZVRpdGxlO1xuXG4gICAgICAgIHRoaXMudGl0bGVTZXJ2aWNlLnNldFRpdGxlKHRoaXMuZm9ybWF0UGFnZVRpdGxlKHBhZ2VUaXRsZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9ybWF0UGFnZVRpdGxlKHRpdGxlUHJlZml4Pzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRpdGxlUGllY2VzID0gW107XG5cbiAgICAgICAgaWYgKHRpdGxlUHJlZml4KSB7XG4gICAgICAgICAgICB0aXRsZVBpZWNlcy5wdXNoKHRoaXMudHJhbnNsYXRlLmluc3RhbnQodGl0bGVQcmVmaXgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRpdGxlUGllY2VzLnB1c2godGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYXBwLm5hbWUnKSk7XG5cbiAgICAgICAgcmV0dXJuIHRpdGxlUGllY2VzLmpvaW4oJyAtICcpO1xuICAgIH1cbn1cbiJdfQ==","export var PermissionTypeEnum;\n(function (PermissionTypeEnum) {\n PermissionTypeEnum[\"All\"] = \"ALL\";\n PermissionTypeEnum[\"Any\"] = \"ANY\";\n PermissionTypeEnum[\"Rbac\"] = \"ROLE_BASED_ACCESS_CONTROL\";\n PermissionTypeEnum[\"Service\"] = \"SERVICE\";\n})(PermissionTypeEnum || (PermissionTypeEnum = {}));\nexport class APermissions {\n constructor(type) {\n this._authorizationType = type;\n }\n get authorizationType() {\n return this._authorizationType;\n }\n}\nexport var Permissions;\n(function (Permissions) {\n class All extends APermissions {\n constructor() {\n super(PermissionTypeEnum.All);\n this._permissions = [];\n }\n static of(...permissions) {\n const inst = new All();\n inst.and(...permissions);\n return inst;\n }\n get permissions() {\n return this._permissions;\n }\n and(...permissions) {\n this._permissions.push(...permissions);\n return this;\n }\n }\n Permissions.All = All;\n class Any extends APermissions {\n constructor() {\n super(PermissionTypeEnum.Any);\n this._permissions = [];\n }\n static of(...permissions) {\n const inst = new Any();\n inst.or(...permissions);\n return inst;\n }\n get permissions() {\n return this._permissions;\n }\n or(...permissions) {\n this._permissions.push(...permissions);\n return this;\n }\n }\n Permissions.Any = Any;\n class Roles extends APermissions {\n constructor() {\n super(PermissionTypeEnum.Rbac);\n this._roles = [];\n }\n static of(...roles) {\n const inst = new Roles();\n inst.or(...roles);\n return inst;\n }\n get roles() {\n return this._roles;\n }\n and(...roles) {\n if (this._roles.length === 0) {\n this._roles.push([]);\n }\n this._roles[this._roles.length - 1].push(...roles);\n return this;\n }\n or(...roles) {\n this._roles.push(...roles.map(s => [s]));\n return this;\n }\n }\n Permissions.Roles = Roles;\n class Service extends APermissions {\n constructor(service) {\n super(PermissionTypeEnum.Service);\n this.service = service;\n }\n static of(service) {\n return new Service(service);\n }\n }\n Permissions.Service = Service;\n})(Permissions || (Permissions = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9zZWN1cml0eS9wZXJtaXNzaW9ucy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxNQUFNLENBQU4sSUFBWSxrQkFLWDtBQUxELFdBQVksa0JBQWtCO0lBQzFCLGlDQUFXLENBQUE7SUFDWCxpQ0FBVyxDQUFBO0lBQ1gsd0RBQWtDLENBQUE7SUFDbEMseUNBQW1CLENBQUE7QUFDdkIsQ0FBQyxFQUxXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFLN0I7QUF5Q0QsTUFBTSxPQUFnQixZQUFZO0lBRzlCLFlBQVksSUFBd0I7UUFDaEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBVyxpQkFBaUI7UUFDeEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDbkMsQ0FBQztDQUNKO0FBRUQsTUFBTSxLQUFXLFdBQVcsQ0F1RjNCO0FBdkZELFdBQWlCLFdBQVc7SUFDeEIsTUFBYSxHQUFJLFNBQVEsWUFBWTtRQUdqQztZQUNJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUgxQixpQkFBWSxHQUF3QixFQUFFLENBQUM7UUFJL0MsQ0FBQztRQUVNLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFnQztZQUNoRCxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQztZQUN6QixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBRUQsSUFBVyxXQUFXO1lBQ2xCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztRQUM3QixDQUFDO1FBRU0sR0FBRyxDQUFDLEdBQUcsV0FBZ0M7WUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQztZQUN2QyxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0tBQ0o7SUFyQlksZUFBRyxNQXFCZixDQUFBO0lBRUQsTUFBYSxHQUFJLFNBQVEsWUFBWTtRQUdqQztZQUNJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUgxQixpQkFBWSxHQUF3QixFQUFFLENBQUM7UUFJL0MsQ0FBQztRQUVNLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFnQztZQUNoRCxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQztZQUN4QixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBRUQsSUFBVyxXQUFXO1lBQ2xCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztRQUM3QixDQUFDO1FBRU0sRUFBRSxDQUFDLEdBQUcsV0FBZ0M7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQztZQUN2QyxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0tBQ0o7SUFyQlksZUFBRyxNQXFCZixDQUFBO0lBRUQsTUFBYSxLQUFNLFNBQVEsWUFBWTtRQUduQztZQUNJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUgzQixXQUFNLEdBQXlCLEVBQUUsQ0FBQztRQUkxQyxDQUFDO1FBRU0sTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQW9CO1lBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxJQUFXLEtBQUs7WUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdkIsQ0FBQztRQUVNLEdBQUcsQ0FBQyxHQUFHLEtBQW9CO1lBQzlCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pCLENBQUM7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ25ELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFTSxFQUFFLENBQUMsR0FBRyxLQUFvQjtZQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QyxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0tBQ0o7SUE3QlksaUJBQUssUUE2QmpCLENBQUE7SUFFRCxNQUFhLE9BQVEsU0FBUSxZQUFZO1FBQ3JDLFlBQW9DLE9BQWlDO1lBQ2pFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQURGLFlBQU8sR0FBUCxPQUFPLENBQTBCO1FBRXJFLENBQUM7UUFFTSxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQWlDO1lBQzlDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsQ0FBQztLQUNKO0lBUlksbUJBQU8sVUFRbkIsQ0FBQTtBQUNMLENBQUMsRUF2RmdCLFdBQVcsS0FBWCxXQUFXLFFBdUYzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJvdXRlclN0YXRlU25hcHNob3R9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7QWN0aW9uUGFyYW1ldGVyc30gZnJvbSAnLi4vYWN0aW9uL2FjdGlvbi1wYXJhbWV0ZXJzLm1vZGVsJztcbmltcG9ydCB7SURhdGFQcm92aWRlcn0gZnJvbSAnLi4vZGF0YS1wcm92aWRlcnMvYmFzZS5kYXRhLXByb3ZpZGVyJztcbmltcG9ydCB7SUFjdGlvbkRlc2NyaXB0b3J9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL2FjdGlvbi5kZXNjcmlwdG9yJztcbmltcG9ydCB7Q29tbW9uc01lbnVJdGVtfSBmcm9tICcuLi9tb2RlbHMvbWVudS5tb2RlbCc7XG5cbmV4cG9ydCBlbnVtIFBlcm1pc3Npb25UeXBlRW51bSB7XG4gICAgQWxsID0gJ0FMTCcsXG4gICAgQW55ID0gJ0FOWScsXG4gICAgUmJhYyA9ICdST0xFX0JBU0VEX0FDQ0VTU19DT05UUk9MJyxcbiAgICBTZXJ2aWNlID0gJ1NFUlZJQ0UnXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFjdGlvbkNvbnRleHRWYWxpZGF0aW9uPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+IHtcbiAgICBkZXNjcmlwdG9yOiBJQWN0aW9uRGVzY3JpcHRvcjxJdGVtLCBTZXJ2aWNlPjtcbiAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+O1xuICAgIHNlcnZpY2VJbnN0YW5jZTogU2VydmljZTtcbiAgICBkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPEl0ZW0sIFNlcnZpY2U+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQZXJtaXNzaW9uU2VydmljZSB7XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgcm91dGUgY2FuIGJlIGFjdGl2YXRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWN0aXZhdGVkUm91dGVTbmFwc2hvdH0gcm91dGUgLSBUaGUgcm91dGUgc25hcHNob3Qgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY3VycmVudCByb3V0ZSBmb3IgYWN0aXZhdGlvbi5cbiAgICAgKiBAcGFyYW0ge1JvdXRlclN0YXRlU25hcHNob3R9IHN0YXRlIC0gVGhlIHJvdXRlciBzdGF0ZSBzbmFwc2hvdFxuICAgICAqXG4gICAgICogQHJldHVybnMge09ic2VydmFibGU8Ym9vbGVhbj59IC0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHJvdXRlIGNhbiBiZSBhY3RpdmF0ZWQuXG4gICAgICovXG4gICAgY2FuQWN0aXZhdGVSb3V0ZShyb3V0ZT86IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlPzogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbj47IC8vY2hlY2sgZ3VhcmRzXG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHRoZSB2aXNpYmlsaXR5IG9mIG1lbnUgaXRlbS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q29tbW9uc01lbnVJdGVtfSBtZW51SXRlbSAtIFRoZSBtZW51IGl0ZW0gdG8gY2hlY2suXG4gICAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxib29sZWFuPn0gLSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgYSBib29sZWFuIGluZGljYXRpbmdcbiAgICAgKiB3aGV0aGVyIHRoZSBtZW51IGl0ZW0gaXMgdmlzaWJsZSBvciBub3QuXG4gICAgICovXG4gICAgaXNNZW51aXRlbVZpc2libGUobWVudUl0ZW06IENvbW1vbnNNZW51SXRlbSk6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBzcGVjaWZpZWQgYWN0aW9uIGlzIHZpc2libGUgYmFzZWQgb24gdGhlIGFjdGlvbiBjb250ZXh0IGFuZCByb3V0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7SUFjdGlvbkNvbnRleHRWYWxpZGF0aW9uPGFueSwgYW55Pn0gW2FjdGlvbkN0eF0gLSBUaGUgYWN0aW9uIGNvbnRleHQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmb3IgdmFsaWRhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FjdGl2YXRlZFJvdXRlU25hcHNob3R9IFtyb3V0ZV0gLSBUaGUgY3VycmVudCByb3V0ZSBzbmFwc2hvdCBjb250YWluaW5nIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZm9yIHZhbGlkYXRpb24uXG4gICAgICogQHBhcmFtIHtSb3V0ZXJTdGF0ZVNuYXBzaG90fSBzdGF0ZSAtIFRoZSByb3V0ZXIgc3RhdGUgc25hcHNob3RcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge09ic2VydmFibGU8Ym9vbGVhbj59IC0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB2aXNpYmlsaXR5IHN0YXR1cyBvZiB0aGUgYWN0aW9uLlxuICAgICAqL1xuICAgIGlzQWN0aW9uVmlzaWJsZShhY3Rpb25DdHg/OiBJQWN0aW9uQ29udGV4dFZhbGlkYXRpb248YW55LCBhbnk+LCByb3V0ZT86IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlPzogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbj47XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBUGVybWlzc2lvbnMge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2F1dGhvcml6YXRpb25UeXBlOiBQZXJtaXNzaW9uVHlwZUVudW07XG5cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBQZXJtaXNzaW9uVHlwZUVudW0pIHtcbiAgICAgICAgdGhpcy5fYXV0aG9yaXphdGlvblR5cGUgPSB0eXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXV0aG9yaXphdGlvblR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRob3JpemF0aW9uVHlwZTtcbiAgICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUGVybWlzc2lvbnMge1xuICAgIGV4cG9ydCBjbGFzcyBBbGwgZXh0ZW5kcyBBUGVybWlzc2lvbnMge1xuICAgICAgICBwcml2YXRlIF9wZXJtaXNzaW9uczogQXJyYXk8QVBlcm1pc3Npb25zPiA9IFtdO1xuXG4gICAgICAgIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICBzdXBlcihQZXJtaXNzaW9uVHlwZUVudW0uQWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgb2YoLi4ucGVybWlzc2lvbnM6IEFycmF5PEFQZXJtaXNzaW9ucz4pOiBBbGwge1xuICAgICAgICAgICAgY29uc3QgaW5zdCA9IG5ldyBBbGwoKTtcbiAgICAgICAgICAgIGluc3QuYW5kKC4uLnBlcm1pc3Npb25zKTtcbiAgICAgICAgICAgIHJldHVybiBpbnN0O1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIGdldCBwZXJtaXNzaW9ucygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wZXJtaXNzaW9ucztcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBhbmQoLi4ucGVybWlzc2lvbnM6IEFycmF5PEFQZXJtaXNzaW9ucz4pOiB0aGlzIHtcbiAgICAgICAgICAgIHRoaXMuX3Blcm1pc3Npb25zLnB1c2goLi4ucGVybWlzc2lvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnQgY2xhc3MgQW55IGV4dGVuZHMgQVBlcm1pc3Npb25zIHtcbiAgICAgICAgcHJpdmF0ZSBfcGVybWlzc2lvbnM6IEFycmF5PEFQZXJtaXNzaW9ucz4gPSBbXTtcblxuICAgICAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgc3VwZXIoUGVybWlzc2lvblR5cGVFbnVtLkFueSk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIG9mKC4uLnBlcm1pc3Npb25zOiBBcnJheTxBUGVybWlzc2lvbnM+KTogQW55IHtcbiAgICAgICAgICAgIGNvbnN0IGluc3QgPSBuZXcgQW55KCk7XG4gICAgICAgICAgICBpbnN0Lm9yKC4uLnBlcm1pc3Npb25zKTtcbiAgICAgICAgICAgIHJldHVybiBpbnN0O1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIGdldCBwZXJtaXNzaW9ucygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wZXJtaXNzaW9ucztcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBvciguLi5wZXJtaXNzaW9uczogQXJyYXk8QVBlcm1pc3Npb25zPik6IHRoaXMge1xuICAgICAgICAgICAgdGhpcy5fcGVybWlzc2lvbnMucHVzaCguLi5wZXJtaXNzaW9ucyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cG9ydCBjbGFzcyBSb2xlcyBleHRlbmRzIEFQZXJtaXNzaW9ucyB7XG4gICAgICAgIHByaXZhdGUgX3JvbGVzOiBBcnJheTxBcnJheTxzdHJpbmc+PiA9IFtdO1xuXG4gICAgICAgIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICBzdXBlcihQZXJtaXNzaW9uVHlwZUVudW0uUmJhYyk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIG9mKC4uLnJvbGVzOiBBcnJheTxzdHJpbmc+KTogUm9sZXMge1xuICAgICAgICAgICAgY29uc3QgaW5zdCA9IG5ldyBSb2xlcygpO1xuICAgICAgICAgICAgaW5zdC5vciguLi5yb2xlcyk7XG4gICAgICAgICAgICByZXR1cm4gaW5zdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBnZXQgcm9sZXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm9sZXM7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgYW5kKC4uLnJvbGVzOiBBcnJheTxzdHJpbmc+KTogdGhpcyB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcm9sZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcm9sZXMucHVzaChbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9yb2xlc1t0aGlzLl9yb2xlcy5sZW5ndGggLSAxXS5wdXNoKC4uLnJvbGVzKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIG9yKC4uLnJvbGVzOiBBcnJheTxzdHJpbmc+KTogdGhpcyB7XG4gICAgICAgICAgICB0aGlzLl9yb2xlcy5wdXNoKC4uLnJvbGVzLm1hcChzID0+IFtzXSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnQgY2xhc3MgU2VydmljZSBleHRlbmRzIEFQZXJtaXNzaW9ucyB7XG4gICAgICAgIHByaXZhdGUgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHNlcnZpY2U6IFR5cGU8SVBlcm1pc3Npb25TZXJ2aWNlPikge1xuICAgICAgICAgICAgc3VwZXIoUGVybWlzc2lvblR5cGVFbnVtLlNlcnZpY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBvZihzZXJ2aWNlOiBUeXBlPElQZXJtaXNzaW9uU2VydmljZT4pOiBTZXJ2aWNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2VydmljZShzZXJ2aWNlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==","import { CommonsInternalError } from '../error/error.model';\nimport { PermissionTypeEnum } from './permissions.model';\nexport function isPermitted(permissions, userRoles) {\n switch (permissions.authorizationType) {\n case PermissionTypeEnum.Rbac:\n return isRbacPermitted(permissions, userRoles);\n default:\n throw new CommonsInternalError(`Permission type \"${permissions.authorizationType}\" not implemented`);\n }\n}\nexport function isRbacPermitted(permissions, userRoles) {\n return permissions.roles.some(prg => prg.every(pr => userRoles.indexOf(pr) > -1));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvc2VjdXJpdHkvcGVybWlzc2lvbi1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBZSxrQkFBa0IsRUFBYyxNQUFNLHFCQUFxQixDQUFDO0FBRWxGLE1BQU0sVUFBVSxXQUFXLENBQUMsV0FBeUIsRUFBRSxTQUF3QjtJQUMzRSxRQUFRLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3BDLEtBQUssa0JBQWtCLENBQUMsSUFBSTtZQUN4QixPQUFPLGVBQWUsQ0FBQyxXQUFnQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3hFO1lBQ0ksTUFBTSxJQUFJLG9CQUFvQixDQUFDLG9CQUFvQixXQUFXLENBQUMsaUJBQWlCLG1CQUFtQixDQUFDLENBQUM7SUFDN0csQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLFdBQThCLEVBQUUsU0FBd0I7SUFDcEYsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21tb25zSW50ZXJuYWxFcnJvcn0gZnJvbSAnLi4vZXJyb3IvZXJyb3IubW9kZWwnO1xuaW1wb3J0IHtBUGVybWlzc2lvbnMsIFBlcm1pc3Npb25UeXBlRW51bSwgUGVybWlzc2lvbnN9IGZyb20gJy4vcGVybWlzc2lvbnMubW9kZWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQZXJtaXR0ZWQocGVybWlzc2lvbnM6IEFQZXJtaXNzaW9ucywgdXNlclJvbGVzOiBBcnJheTxzdHJpbmc+KTogYm9vbGVhbiB7XG4gICAgc3dpdGNoIChwZXJtaXNzaW9ucy5hdXRob3JpemF0aW9uVHlwZSkge1xuICAgICAgICBjYXNlIFBlcm1pc3Npb25UeXBlRW51bS5SYmFjOlxuICAgICAgICAgICAgcmV0dXJuIGlzUmJhY1Blcm1pdHRlZChwZXJtaXNzaW9ucyBhcyBQZXJtaXNzaW9ucy5Sb2xlcywgdXNlclJvbGVzKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgUGVybWlzc2lvbiB0eXBlIFwiJHtwZXJtaXNzaW9ucy5hdXRob3JpemF0aW9uVHlwZX1cIiBub3QgaW1wbGVtZW50ZWRgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JiYWNQZXJtaXR0ZWQocGVybWlzc2lvbnM6IFBlcm1pc3Npb25zLlJvbGVzLCB1c2VyUm9sZXM6IEFycmF5PHN0cmluZz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGVybWlzc2lvbnMucm9sZXMuc29tZShwcmcgPT4gcHJnLmV2ZXJ5KHByID0+IHVzZXJSb2xlcy5pbmRleE9mKHByKSA+IC0xKSk7XG59XG4iXX0=","import { Injectable, Injector, inject } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { combineLatest, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { LoggerService } from '../log/logger.service';\nimport { CommonsService } from '../services/commons.service';\nimport { isPermitted } from './permission-helpers';\nimport { PermissionTypeEnum } from './permissions.model';\nimport * as i0 from \"@angular/core\";\nexport class PermissionService {\n constructor() {\n this.injector = inject(Injector);\n this.commons = inject(CommonsService);\n this.logger = inject(LoggerService).create('AuthorizationService');\n this.userRoles$ = toObservable(this.commons.userRoles);\n }\n canActivateRoute(permissions, route, state) {\n switch (permissions.authorizationType) {\n case PermissionTypeEnum.All:\n return this.canActivateRouteAll(permissions, route, state);\n case PermissionTypeEnum.Any:\n return this.canActivateRouteAny(permissions, route, state);\n case PermissionTypeEnum.Service:\n return this.canActivateRouteService(permissions, route, state);\n default:\n return this.userRoles$.pipe(map(ur => isPermitted(permissions, ur)));\n }\n }\n canActivateRouteAll(permission, route, state) {\n return combineLatest(permission.permissions.map(p => this.canActivateRoute(p, route, state))).pipe(map(res => res.every(ip => ip === true)));\n }\n canActivateRouteAny(permissions, route, state) {\n return combineLatest(permissions.permissions.map(p => this.canActivateRoute(p, route, state))).pipe(map(res => res.some(ip => ip === true)));\n }\n canActivateRouteService(permission, route, state) {\n const serviceInstance = this.injector.get(permission.service);\n if (!serviceInstance) {\n this.logger.debug(`WARNING: Service instance could not be retrieved for type ${permission.service}`);\n return of(false);\n }\n return serviceInstance.canActivateRoute(route, state);\n }\n isMenuItemVisible(permissions, menuItem) {\n switch (permissions.authorizationType) {\n case PermissionTypeEnum.All:\n return this.isMenuItemVisibleAll(permissions, menuItem);\n case PermissionTypeEnum.Any:\n return this.isMenuItemVisibleAny(permissions, menuItem);\n case PermissionTypeEnum.Service:\n return this.isMenuItemVisibleService(permissions, menuItem);\n default:\n return this.userRoles$.pipe(map(role => isPermitted(permissions, role)));\n }\n }\n isMenuItemVisibleAll(permission, menuItem) {\n return combineLatest(permission.permissions.map(p => this.isMenuItemVisible(p, menuItem))).pipe(map(res => res.every(ip => ip === true)));\n }\n isMenuItemVisibleAny(permission, menuItem) {\n return combineLatest(permission.permissions.map(p => this.isMenuItemVisible(p, menuItem))).pipe(map(res => res.some(ip => ip === true)));\n }\n isMenuItemVisibleService(permission, menuItem) {\n const serviceInstance = this.injector.get(permission.service);\n if (!serviceInstance) {\n this.logger.debug(`WARNING: Service instance could not be retreived for type ${permission.service}`);\n return of(false);\n }\n return serviceInstance.isMenuitemVisible(menuItem);\n }\n isActionVisible(permissions, actionCtx, route, state) {\n switch (permissions.authorizationType) {\n case PermissionTypeEnum.All:\n return this.isActionVisibleAll(permissions, actionCtx, route, state);\n case PermissionTypeEnum.Any:\n return this.isActionVisibleAny(permissions, actionCtx, route, state);\n case PermissionTypeEnum.Service:\n return this.isActionVisibleService(permissions, actionCtx, route, state);\n default:\n return this.userRoles$.pipe(map(ur => isPermitted(permissions, ur)));\n }\n }\n isActionVisibleAll(permission, actionCtx, route, state) {\n return combineLatest(permission.permissions.map(p => this.isActionVisible(p, actionCtx, route, state))).pipe(map(res => res.every(ip => ip === true)));\n }\n isActionVisibleAny(permission, actionCtx, route, state) {\n return combineLatest(permission.permissions.map(p => this.isActionVisible(p, actionCtx, route, state))).pipe(map(res => res.some(ip => ip === true)));\n }\n isActionVisibleService(permission, actionCtx, route, state) {\n const serviceInstance = this.injector.get(permission.service);\n if (!serviceInstance) {\n this.logger.debug(`WARNING: Service instance could not be retreived for type ${permission.service}`);\n return of(false);\n }\n return serviceInstance.isActionVisible(actionCtx, route, state);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: PermissionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: PermissionService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: PermissionService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvc2VjdXJpdHkvcGVybWlzc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFHeEQsT0FBTyxFQUFhLGFBQWEsRUFBRSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRW5DLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBeUMsa0JBQWtCLEVBQWMsTUFBTSxxQkFBcUIsQ0FBQzs7QUFHNUcsTUFBTSxPQUFPLGlCQUFpQjtJQUQ5QjtRQUVxQixhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLFlBQU8sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUV2RSxlQUFVLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7S0FnRzdEO0lBOUZVLGdCQUFnQixDQUFDLFdBQXlCLEVBQUUsS0FBOEIsRUFBRSxLQUEyQjtRQUMxRyxRQUFRLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BDLEtBQUssa0JBQWtCLENBQUMsR0FBRztnQkFDdkIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBOEIsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEYsS0FBSyxrQkFBa0IsQ0FBQyxHQUFHO2dCQUN2QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUE4QixFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsRixLQUFLLGtCQUFrQixDQUFDLE9BQU87Z0JBQzNCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQWtDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzFGO2dCQUNJLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0UsQ0FBQztJQUNMLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxVQUEyQixFQUFFLEtBQThCLEVBQUUsS0FBMkI7UUFDaEgsT0FBTyxhQUFhLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pKLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxXQUE0QixFQUFFLEtBQThCLEVBQUUsS0FBMkI7UUFDakgsT0FBTyxhQUFhLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pKLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxVQUErQixFQUFFLEtBQThCLEVBQUUsS0FBMkI7UUFDeEgsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw2REFBNkQsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDckcsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsQ0FBQztRQUNELE9BQU8sZUFBZSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU0saUJBQWlCLENBQUMsV0FBeUIsRUFBRSxRQUF5QjtRQUN6RSxRQUFRLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BDLEtBQUssa0JBQWtCLENBQUMsR0FBRztnQkFDdkIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBOEIsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMvRSxLQUFLLGtCQUFrQixDQUFDLEdBQUc7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQThCLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDL0UsS0FBSyxrQkFBa0IsQ0FBQyxPQUFPO2dCQUMzQixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFrQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZGO2dCQUNJLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakYsQ0FBQztJQUNMLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxVQUEyQixFQUFFLFFBQXlCO1FBQy9FLE9BQU8sYUFBYSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlJLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxVQUEyQixFQUFFLFFBQXlCO1FBQy9FLE9BQU8sYUFBYSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdJLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxVQUErQixFQUFFLFFBQXlCO1FBQ3ZGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkRBQTZELFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3JHLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxPQUFPLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU0sZUFBZSxDQUNsQixXQUF5QixFQUN6QixTQUE4QyxFQUM5QyxLQUE4QixFQUM5QixLQUEyQjtRQUUzQixRQUFRLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BDLEtBQUssa0JBQWtCLENBQUMsR0FBRztnQkFDdkIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBOEIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVGLEtBQUssa0JBQWtCLENBQUMsR0FBRztnQkFDdkIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBOEIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVGLEtBQUssa0JBQWtCLENBQUMsT0FBTztnQkFDM0IsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBa0MsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BHO2dCQUNJLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0UsQ0FBQztJQUNMLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxVQUEyQixFQUFFLFNBQXNELEVBQUUsS0FBOEIsRUFBRSxLQUEyQjtRQUN2SyxPQUFPLGFBQWEsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzSixDQUFDO0lBRU8sa0JBQWtCLENBQUMsVUFBMkIsRUFBRSxTQUE2QyxFQUFFLEtBQThCLEVBQUUsS0FBMkI7UUFDOUosT0FBTyxhQUFhLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUosQ0FBQztJQUVPLHNCQUFzQixDQUFDLFVBQStCLEVBQUUsU0FBNkMsRUFBRSxLQUE4QixFQUFFLEtBQTJCO1FBQ3RLLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkRBQTZELFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3JHLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxPQUFPLGVBQWUsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwRSxDQUFDOzhHQXBHUSxpQkFBaUI7a0hBQWpCLGlCQUFpQjs7MkZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0b3IsIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3RvT2JzZXJ2YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXJTdGF0ZVNuYXBzaG90fSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge09ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vbG9nL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7Q29tbW9uc01lbnVJdGVtfSBmcm9tICcuLi9tb2RlbHMvbWVudS5tb2RlbCc7XG5pbXBvcnQge0NvbW1vbnNTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9jb21tb25zLnNlcnZpY2UnO1xuaW1wb3J0IHtpc1Blcm1pdHRlZH0gZnJvbSAnLi9wZXJtaXNzaW9uLWhlbHBlcnMnO1xuaW1wb3J0IHtBUGVybWlzc2lvbnMsIElBY3Rpb25Db250ZXh0VmFsaWRhdGlvbiwgUGVybWlzc2lvblR5cGVFbnVtLCBQZXJtaXNzaW9uc30gZnJvbSAnLi9wZXJtaXNzaW9ucy5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21tb25zID0gaW5qZWN0KENvbW1vbnNTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IGluamVjdChMb2dnZXJTZXJ2aWNlKS5jcmVhdGUoJ0F1dGhvcml6YXRpb25TZXJ2aWNlJyk7XG5cbiAgICBwcml2YXRlIHVzZXJSb2xlcyQgPSB0b09ic2VydmFibGUodGhpcy5jb21tb25zLnVzZXJSb2xlcyk7XG5cbiAgICBwdWJsaWMgY2FuQWN0aXZhdGVSb3V0ZShwZXJtaXNzaW9uczogQVBlcm1pc3Npb25zLCByb3V0ZT86IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlPzogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBzd2l0Y2ggKHBlcm1pc3Npb25zLmF1dGhvcml6YXRpb25UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIFBlcm1pc3Npb25UeXBlRW51bS5BbGw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FuQWN0aXZhdGVSb3V0ZUFsbChwZXJtaXNzaW9ucyBhcyBQZXJtaXNzaW9ucy5BbGwsIHJvdXRlLCBzdGF0ZSk7XG4gICAgICAgICAgICBjYXNlIFBlcm1pc3Npb25UeXBlRW51bS5Bbnk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FuQWN0aXZhdGVSb3V0ZUFueShwZXJtaXNzaW9ucyBhcyBQZXJtaXNzaW9ucy5BbnksIHJvdXRlLCBzdGF0ZSk7XG4gICAgICAgICAgICBjYXNlIFBlcm1pc3Npb25UeXBlRW51bS5TZXJ2aWNlOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbkFjdGl2YXRlUm91dGVTZXJ2aWNlKHBlcm1pc3Npb25zIGFzIFBlcm1pc3Npb25zLlNlcnZpY2UsIHJvdXRlLCBzdGF0ZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVzZXJSb2xlcyQucGlwZShtYXAodXIgPT4gaXNQZXJtaXR0ZWQocGVybWlzc2lvbnMsIHVyKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5BY3RpdmF0ZVJvdXRlQWxsKHBlcm1pc3Npb246IFBlcm1pc3Npb25zLkFsbCwgcm91dGU/OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZT86IFJvdXRlclN0YXRlU25hcHNob3QpIHtcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QocGVybWlzc2lvbi5wZXJtaXNzaW9ucy5tYXAocCA9PiB0aGlzLmNhbkFjdGl2YXRlUm91dGUocCwgcm91dGUsIHN0YXRlKSkpLnBpcGUobWFwKHJlcyA9PiByZXMuZXZlcnkoaXAgPT4gaXAgPT09IHRydWUpKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5BY3RpdmF0ZVJvdXRlQW55KHBlcm1pc3Npb25zOiBQZXJtaXNzaW9ucy5BbnksIHJvdXRlPzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU/OiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KHBlcm1pc3Npb25zLnBlcm1pc3Npb25zLm1hcChwID0+IHRoaXMuY2FuQWN0aXZhdGVSb3V0ZShwLCByb3V0ZSwgc3RhdGUpKSkucGlwZShtYXAocmVzID0+IHJlcy5zb21lKGlwID0+IGlwID09PSB0cnVlKSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FuQWN0aXZhdGVSb3V0ZVNlcnZpY2UocGVybWlzc2lvbjogUGVybWlzc2lvbnMuU2VydmljZSwgcm91dGU/OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZT86IFJvdXRlclN0YXRlU25hcHNob3QpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZUluc3RhbmNlID0gdGhpcy5pbmplY3Rvci5nZXQocGVybWlzc2lvbi5zZXJ2aWNlKTtcbiAgICAgICAgaWYgKCFzZXJ2aWNlSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBXQVJOSU5HOiBTZXJ2aWNlIGluc3RhbmNlIGNvdWxkIG5vdCBiZSByZXRyaWV2ZWQgZm9yIHR5cGUgJHtwZXJtaXNzaW9uLnNlcnZpY2V9YCk7XG4gICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJ2aWNlSW5zdGFuY2UuY2FuQWN0aXZhdGVSb3V0ZShyb3V0ZSwgc3RhdGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc01lbnVJdGVtVmlzaWJsZShwZXJtaXNzaW9uczogQVBlcm1pc3Npb25zLCBtZW51SXRlbTogQ29tbW9uc01lbnVJdGVtKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHN3aXRjaCAocGVybWlzc2lvbnMuYXV0aG9yaXphdGlvblR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgUGVybWlzc2lvblR5cGVFbnVtLkFsbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc01lbnVJdGVtVmlzaWJsZUFsbChwZXJtaXNzaW9ucyBhcyBQZXJtaXNzaW9ucy5BbGwsIG1lbnVJdGVtKTtcbiAgICAgICAgICAgIGNhc2UgUGVybWlzc2lvblR5cGVFbnVtLkFueTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc01lbnVJdGVtVmlzaWJsZUFueShwZXJtaXNzaW9ucyBhcyBQZXJtaXNzaW9ucy5BbnksIG1lbnVJdGVtKTtcbiAgICAgICAgICAgIGNhc2UgUGVybWlzc2lvblR5cGVFbnVtLlNlcnZpY2U6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNNZW51SXRlbVZpc2libGVTZXJ2aWNlKHBlcm1pc3Npb25zIGFzIFBlcm1pc3Npb25zLlNlcnZpY2UsIG1lbnVJdGVtKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlclJvbGVzJC5waXBlKG1hcChyb2xlID0+IGlzUGVybWl0dGVkKHBlcm1pc3Npb25zLCByb2xlKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc01lbnVJdGVtVmlzaWJsZUFsbChwZXJtaXNzaW9uOiBQZXJtaXNzaW9ucy5BbGwsIG1lbnVJdGVtOiBDb21tb25zTWVudUl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QocGVybWlzc2lvbi5wZXJtaXNzaW9ucy5tYXAocCA9PiB0aGlzLmlzTWVudUl0ZW1WaXNpYmxlKHAsIG1lbnVJdGVtKSkpLnBpcGUobWFwKHJlcyA9PiByZXMuZXZlcnkoaXAgPT4gaXAgPT09IHRydWUpKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc01lbnVJdGVtVmlzaWJsZUFueShwZXJtaXNzaW9uOiBQZXJtaXNzaW9ucy5BbnksIG1lbnVJdGVtOiBDb21tb25zTWVudUl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QocGVybWlzc2lvbi5wZXJtaXNzaW9ucy5tYXAocCA9PiB0aGlzLmlzTWVudUl0ZW1WaXNpYmxlKHAsIG1lbnVJdGVtKSkpLnBpcGUobWFwKHJlcyA9PiByZXMuc29tZShpcCA9PiBpcCA9PT0gdHJ1ZSkpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTWVudUl0ZW1WaXNpYmxlU2VydmljZShwZXJtaXNzaW9uOiBQZXJtaXNzaW9ucy5TZXJ2aWNlLCBtZW51SXRlbTogQ29tbW9uc01lbnVJdGVtKSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VJbnN0YW5jZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KHBlcm1pc3Npb24uc2VydmljZSk7XG4gICAgICAgIGlmICghc2VydmljZUluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgV0FSTklORzogU2VydmljZSBpbnN0YW5jZSBjb3VsZCBub3QgYmUgcmV0cmVpdmVkIGZvciB0eXBlICR7cGVybWlzc2lvbi5zZXJ2aWNlfWApO1xuICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VydmljZUluc3RhbmNlLmlzTWVudWl0ZW1WaXNpYmxlKG1lbnVJdGVtKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBY3Rpb25WaXNpYmxlKFxuICAgICAgICBwZXJtaXNzaW9uczogQVBlcm1pc3Npb25zLFxuICAgICAgICBhY3Rpb25DdHg/OiBJQWN0aW9uQ29udGV4dFZhbGlkYXRpb248YW55LCBhbnk+LFxuICAgICAgICByb3V0ZT86IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgICAgIHN0YXRlPzogUm91dGVyU3RhdGVTbmFwc2hvdFxuICAgICk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBzd2l0Y2ggKHBlcm1pc3Npb25zLmF1dGhvcml6YXRpb25UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIFBlcm1pc3Npb25UeXBlRW51bS5BbGw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNBY3Rpb25WaXNpYmxlQWxsKHBlcm1pc3Npb25zIGFzIFBlcm1pc3Npb25zLkFsbCwgYWN0aW9uQ3R4LCByb3V0ZSwgc3RhdGUpO1xuICAgICAgICAgICAgY2FzZSBQZXJtaXNzaW9uVHlwZUVudW0uQW55OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlzQWN0aW9uVmlzaWJsZUFueShwZXJtaXNzaW9ucyBhcyBQZXJtaXNzaW9ucy5BbnksIGFjdGlvbkN0eCwgcm91dGUsIHN0YXRlKTtcbiAgICAgICAgICAgIGNhc2UgUGVybWlzc2lvblR5cGVFbnVtLlNlcnZpY2U6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNBY3Rpb25WaXNpYmxlU2VydmljZShwZXJtaXNzaW9ucyBhcyBQZXJtaXNzaW9ucy5TZXJ2aWNlLCBhY3Rpb25DdHgsIHJvdXRlLCBzdGF0ZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVzZXJSb2xlcyQucGlwZShtYXAodXIgPT4gaXNQZXJtaXR0ZWQocGVybWlzc2lvbnMsIHVyKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FjdGlvblZpc2libGVBbGwocGVybWlzc2lvbjogUGVybWlzc2lvbnMuQWxsLCBhY3Rpb25DdHg/OiBJQWN0aW9uQ29udGV4dFZhbGlkYXRpb248dW5rbm93biwgdW5rbm93bj4sIHJvdXRlPzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU/OiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KHBlcm1pc3Npb24ucGVybWlzc2lvbnMubWFwKHAgPT4gdGhpcy5pc0FjdGlvblZpc2libGUocCwgYWN0aW9uQ3R4LCByb3V0ZSwgc3RhdGUpKSkucGlwZShtYXAocmVzID0+IHJlcy5ldmVyeShpcCA9PiBpcCA9PT0gdHJ1ZSkpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQWN0aW9uVmlzaWJsZUFueShwZXJtaXNzaW9uOiBQZXJtaXNzaW9ucy5BbnksIGFjdGlvbkN0eD86IElBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjx1bmtub3duPiwgcm91dGU/OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZT86IFJvdXRlclN0YXRlU25hcHNob3QpIHtcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QocGVybWlzc2lvbi5wZXJtaXNzaW9ucy5tYXAocCA9PiB0aGlzLmlzQWN0aW9uVmlzaWJsZShwLCBhY3Rpb25DdHgsIHJvdXRlLCBzdGF0ZSkpKS5waXBlKG1hcChyZXMgPT4gcmVzLnNvbWUoaXAgPT4gaXAgPT09IHRydWUpKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FjdGlvblZpc2libGVTZXJ2aWNlKHBlcm1pc3Npb246IFBlcm1pc3Npb25zLlNlcnZpY2UsIGFjdGlvbkN0eD86IElBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjx1bmtub3duPiwgcm91dGU/OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZT86IFJvdXRlclN0YXRlU25hcHNob3QpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZUluc3RhbmNlID0gdGhpcy5pbmplY3Rvci5nZXQocGVybWlzc2lvbi5zZXJ2aWNlKTtcbiAgICAgICAgaWYgKCFzZXJ2aWNlSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBXQVJOSU5HOiBTZXJ2aWNlIGluc3RhbmNlIGNvdWxkIG5vdCBiZSByZXRyZWl2ZWQgZm9yIHR5cGUgJHtwZXJtaXNzaW9uLnNlcnZpY2V9YCk7XG4gICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJ2aWNlSW5zdGFuY2UuaXNBY3Rpb25WaXNpYmxlKGFjdGlvbkN0eCwgcm91dGUsIHN0YXRlKTtcbiAgICB9XG59XG4iXX0=","import { inject } from '@angular/core';\nimport { of } from 'rxjs';\nimport { first } from 'rxjs/operators';\nimport { PermissionService } from './permission.service';\nexport const permissionGuard = (route, state) => {\n const permission = inject(PermissionService);\n const data = route.data;\n if (data.permissions) {\n return permission.canActivateRoute(data.permissions, route, state).pipe(first());\n }\n else {\n return of(true);\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL3NlY3VyaXR5L3Blcm1pc3Npb24uZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUdyQyxPQUFPLEVBQWEsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWtCLENBQzFDLEtBQTZCLEVBQzdCLEtBQTBCLEVBQ29ELEVBQUU7SUFDaEYsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFN0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQXdCLENBQUM7SUFFNUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsT0FBTyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDckYsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZUZuLCBSb3V0ZXJTdGF0ZVNuYXBzaG90LCBVcmxUcmVlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge09ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Zmlyc3R9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtDb21tb25zUm91dGVEYXRhfSBmcm9tICcuLi9yb3V0ZXIvcm91dGVyLm1vZGVsJztcbmltcG9ydCB7UGVybWlzc2lvblNlcnZpY2V9IGZyb20gJy4vcGVybWlzc2lvbi5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IHBlcm1pc3Npb25HdWFyZDogQ2FuQWN0aXZhdGVGbiA9IChcbiAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdFxuKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgVXJsVHJlZT4gfCBQcm9taXNlPGJvb2xlYW4gfCBVcmxUcmVlPiB8IGJvb2xlYW4gfCBVcmxUcmVlID0+IHtcbiAgICBjb25zdCBwZXJtaXNzaW9uID0gaW5qZWN0KFBlcm1pc3Npb25TZXJ2aWNlKTtcblxuICAgIGNvbnN0IGRhdGEgPSByb3V0ZS5kYXRhIGFzIENvbW1vbnNSb3V0ZURhdGE7XG5cbiAgICBpZiAoZGF0YS5wZXJtaXNzaW9ucykge1xuICAgICAgICByZXR1cm4gcGVybWlzc2lvbi5jYW5BY3RpdmF0ZVJvdXRlKGRhdGEucGVybWlzc2lvbnMsIHJvdXRlLCBzdGF0ZSkucGlwZShmaXJzdCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgfVxufTtcbiJdfQ==","import { removeRouteEmptyPathSegments } from '../helpers/route';\nimport { permissionGuard } from '../security/permission.guard';\nexport class RouteBuilder {\n constructor(route) {\n this.routePath = [];\n this.routeData = { breadcrumb: null };\n this.children = [];\n this.menuItemChildren = [];\n this.menuItemChildrenAfter = []; // append after route children\n this.route = route;\n if (this.route.path && this.route.path.length > 0) {\n this.routePath = [this.route.path];\n }\n }\n /**\n * Sets the link to root Routes builder.\n *\n * @param {RoutesBuilder} routesBuilder - The routes builder to set as the root.\n */\n withRoot(routesBuilder) {\n this.root = routesBuilder;\n return this;\n }\n /**\n * Sets the link to parent Route builder.\n *\n * @param {RouteBuilder} parent - The parent route builder.\n */\n withParent(parent) {\n this.parent = parent;\n this.routePath = removeRouteEmptyPathSegments([...this.parent.routePath, this.route.path ?? '']);\n return this;\n }\n /**\n * Sets the breadcrumb.\n *\n * @param {BreadcrumbType} breadcrumb - Breadcrumb configuration.\n */\n withBreadcrumb(breadcrumb) {\n this.routeData.breadcrumb = breadcrumb;\n return this;\n }\n /**\n * Sets the page title for the current route.\n *\n * @param {string} pageTitle - The title of the page.\n */\n withPageTitle(pageTitle) {\n this.routeData.pageTitle = pageTitle;\n return this;\n }\n /**\n * Sets the page title and the breadcrumb.\n *\n * @param {string} title - The title of the page and breadcrumb.\n */\n withTitle(title) {\n this.withPageTitle(title);\n this.withBreadcrumb(title);\n return this;\n }\n /**\n * Adds a can activate guard to route.\n *\n * @param {CanActivateFn} fn - The CanActivate function to be added.\n */\n withCanActivate(fn) {\n if (!this.route.canActivate) {\n this.route.canActivate = [];\n }\n this.route.canActivate.push(fn);\n return this;\n }\n /**\n * Adds a can deactivate guard to route.\n *\n * @param {CanDeactivateFn} fn - The CanActivate function to be added.\n */\n withCanDeactivate(fn) {\n if (!this.route.canDeactivate) {\n this.route.canDeactivate = [];\n }\n this.route.canDeactivate.push(fn);\n return this;\n }\n /**\n * Adds a resolver to route.\n *\n * @param {string} name - Name of the resolver.\n * @param {CanDeactivateFn} fn - The CanActivate function to be added.\n */\n withResolver(name, fn) {\n if (!this.route.resolve) {\n this.route.resolve = {};\n }\n this.route.resolve[name] = fn;\n return this;\n }\n /**\n * Adds a provider to the route.\n *\n * @param {Provider | EnvironmentProviders} provider - The provider to add.\n */\n withProvider(provider) {\n if (!this.route.providers) {\n this.route.providers = [];\n }\n this.route.providers.push(provider);\n return this;\n }\n /**\n * Sets the data for the route.\n *\n * @param {CommonsRouteData} data - The data to set for the route.\n * @param {boolean} [merge=true] - If the data should be merged with current data setup (true by default) - page title and breadcrumb config are carried over.\n */\n withData(data, merge = true) {\n this.routeData = merge\n ? {\n ...this.routeData,\n ...data\n }\n : {\n breadcrumb: null,\n ...data\n };\n return this;\n }\n /**\n * Updates the menu item of route. Merging with current configuration (set with {withMenuItem}) takes place.\n *\n * @param {CommonsMenuItem} opts - The opts properties to be merged on existing menu item for route.\n */\n withMenuItemOpts(opts) {\n if (!this.menuItem) {\n this.menuItem = {};\n }\n this.menuItem = {\n ...this.menuItem,\n ...opts\n };\n return this;\n }\n /**\n * Sets the menu item (basic). For more options, see the {withMenuItemFromOpts}.\n *\n * @param {string} [icon] - The icon for the menu item.\n * @param {string} [label] - The label for the menu item.\n * @param {Array<string>} [routerLink] - The router link for the menu item.\n * @param {boolean} [breadcrumb=false] - Indicates whether to display breadcrumb for the menu item.\n */\n withMenuItem(icon, label, routerLink, breadcrumb = false) {\n this.menuItem = createMenuItem(icon, label, routerLink);\n if (breadcrumb && label) {\n this.withBreadcrumb({\n label: label\n });\n }\n return this;\n }\n /**\n * Adds menu item child to route's menu item. If no menu item is present, children will be appended directly to parent/root menu item.\n *\n * @param {string} [icon] - The icon for the menu item.\n * @param {string} [label] - The label for the menu item.\n * @param {Array<string>} [routerLink] - The router link for the menu item.\n * @param {boolean} [afterRouteChildren=false] If false, menu item child will be appended before route's children menu items, at the end otherwise.\n */\n withMenuItemChild(icon, label, routerLink, afterRouteChildren = false) {\n if (afterRouteChildren) {\n this.menuItemChildrenAfter.push(createMenuItem(icon, label, routerLink));\n }\n else {\n this.menuItemChildren.push(createMenuItem(icon, label, routerLink));\n }\n return this;\n }\n /**\n * Adds menu item child from opts to route's menu item. If no menu item is present, children will be appended directly to parent/root menu item.\n *\n * @param {CommonsMenuItem} opts - The opts properties to be merged on existing menu item for route.\n * @param {boolean} [afterRouteChildren=false] If false, menu item child will be appended before route's children menu items, at the end otherwise.\n */\n withMenuItemChildFromOpts(opts, afterRouteChildren = false) {\n if (afterRouteChildren) {\n this.menuItemChildrenAfter.push(opts);\n }\n else {\n this.menuItemChildren.push(opts);\n }\n return this;\n }\n /**\n * Sets the menu item's children to be generated lazily from route's lazy loaded routes after the chunk is loaded to runtime.\n */\n withMenuItemLazyChildren() {\n if (!this.menuItem) {\n this.menuItem = {};\n }\n this.menuItem.lazyChildren = true;\n return this;\n }\n /**\n * Sets the permissions on the route.\n *\n * @param {APermissions} permissions - The permissions to be set on the route.\n */\n withPermissions(permissions) {\n this.permissions = permissions;\n this.withCanActivate(permissionGuard);\n return this;\n }\n /**\n * Adds a child route to the current route.\n *\n * @param {string} path - The path of the child route.\n * @param {Type<any>} component - The component associated with the child route.\n * @param {RouteBuilderAdjustFnType} [adjustFn] - An optional function to adjust the child route builder.\n */\n addChild(path, component, adjustFn) {\n const childRouteBuilder = createRoute(path, component);\n adjustFn?.(childRouteBuilder);\n return this.addChildBuilder(childRouteBuilder);\n }\n /**\n * Adds a child builder to the current route.\n *\n * @param {RouteBuilder} builder - The child builder to be added.\n * @return {this} - The current builder with the added child builder.\n */\n addChildBuilder(builder) {\n builder.withParent(this);\n if (this.root) {\n builder.withRoot(this.root);\n }\n this.children.push(builder);\n return this;\n }\n /**\n * Builds an Angular route based on configurations.\n *\n * @returns {Route} The built Angular route.\n */\n build() {\n const angularRoute = {\n ...this.route\n };\n if (angularRoute.data) {\n angularRoute.data = {\n ...angularRoute.data,\n ...this.routeData\n };\n }\n else {\n angularRoute.data = { ...this.routeData };\n }\n // append permissions if not already in route data\n if (this.permissions && !angularRoute.data.permissions) {\n angularRoute.data.permissions = this.permissions;\n }\n const menu = this.buildMenu();\n if (menu.length > 0) {\n angularRoute.data.menuItems = menu;\n }\n if ((this.route.children?.length ?? 0) > 0 || this.children.length > 0) {\n // route has children\n angularRoute.children = [];\n if (this.route.children?.length) {\n angularRoute.children.push(...this.route.children);\n }\n if (this.children.length) {\n for (const childRoute of this.children) {\n angularRoute.children.push(childRoute.build());\n }\n }\n }\n if (this.route.canActivate) {\n angularRoute.canActivate = [...this.route.canActivate];\n }\n if (this.route.canActivateChild) {\n angularRoute.canActivateChild = [...this.route.canActivateChild];\n }\n if (this.route.canLoad) {\n angularRoute.canLoad = [...this.route.canLoad];\n }\n if (this.route.canDeactivate) {\n angularRoute.canDeactivate = [...this.route.canDeactivate];\n }\n if (this.route.resolve) {\n angularRoute.resolve = { ...this.route.resolve };\n }\n return angularRoute;\n }\n /**\n * Builds the menu items.\n *\n * @returns {Array<CommonsMenuItem>} - The built menu items.\n */\n buildMenu() {\n const menuItemBuild = this.menuItem ? { ...this.menuItem } : null;\n const routeChildrenMenuItems = this.children.flatMap(child => child.buildMenu());\n const menuItemChildren = [];\n const menuItemChildrenBuild = [];\n if (menuItemBuild?.items) {\n menuItemChildrenBuild.push(...menuItemBuild.items);\n }\n const processMenuItemChild = (child) => {\n const finalChild = { ...child };\n if (typeof finalChild.routerLink === 'undefined') {\n finalChild.routerLink = this.routePath;\n }\n if (typeof finalChild.routerLink === 'string') {\n finalChild.routerLink = [finalChild.routerLink];\n }\n if (finalChild.routerLink) {\n finalChild.routerLink = removeRouteEmptyPathSegments(finalChild.routerLink);\n }\n // Propagate permissions to children\n if (!finalChild.permissions && this.routeData.permissions) {\n finalChild.permissions = this.routeData.permissions;\n }\n if (!finalChild.permissions && this.permissions) {\n finalChild.permissions = this.permissions;\n }\n return finalChild;\n };\n this.menuItemChildren.forEach(child => menuItemChildren.push(processMenuItemChild(child)));\n const menuItemChildrenAfterBuild = this.menuItemChildrenAfter.map(child => processMenuItemChild(child));\n menuItemChildrenBuild.push(...menuItemChildren, ...routeChildrenMenuItems, ...menuItemChildrenAfterBuild);\n if (!menuItemBuild) {\n return menuItemChildrenBuild;\n }\n menuItemBuild.label = menuItemBuild.label ?? this.routeData.pageTitle;\n if (typeof menuItemBuild.routerLink === 'string') {\n menuItemBuild.routerLink = [menuItemBuild.routerLink];\n }\n menuItemBuild.routerLink = removeRouteEmptyPathSegments(menuItemBuild.routerLink ?? this.routePath);\n if (menuItemChildrenBuild.length > 0) {\n menuItemBuild.items = menuItemChildrenBuild;\n }\n if (!menuItemBuild.permissions) {\n menuItemBuild.permissions = this.findMenuItemPermissions();\n }\n return [menuItemBuild];\n }\n findMenuItemPermissions() {\n if (this.menuItem?.permissions) {\n return this.menuItem.permissions;\n }\n if (this.routeData.permissions) {\n // this is already built\n return this.routeData.permissions;\n }\n if (this.permissions) {\n return this.permissions;\n }\n return undefined;\n }\n}\nfunction createMenuItem(icon, label, routerLink) {\n const menuItem = {};\n if (icon) {\n menuItem.icon = icon;\n }\n if (label) {\n menuItem.label = label;\n }\n if (routerLink) {\n menuItem.routerLink = routerLink;\n }\n return menuItem;\n}\n/**\n * Creates a new instance of RouteBuilder with the given path and component.\n *\n * @param {string} path - The path for the route.\n * @param {Type<any>} component - The component for the route.\n * @return {RouteBuilder} - A new instance of RouteBuilder.\n */\nexport function createRoute(path, component) {\n return new RouteBuilder({\n path: path,\n component: component\n });\n}\n/**\n * Creates a redirect route for the given path.\n *\n * @param {string} path - The path to match against.\n * @param {string} redirectTo - The URL path to redirect to.\n * @param {'full' | 'prefix'} [pathMatch='prefix'] - The path matching strategy ('full' or 'prefix').\n * @return {RouteBuilder} - A new instance of the RouteBuilder class with the redirect route configuration.\n */\nexport function createRouteRedirect(path, redirectTo, pathMatch = 'prefix') {\n return new RouteBuilder({\n path: path,\n redirectTo: redirectTo,\n pathMatch: pathMatch\n });\n}\n/**\n * Creates a lazy route module (or routes).\n *\n * @param {string} path - The path for the route.\n * @param {LoadChildren} loadChildren - The function that loads the lazy module (or routes).\n * @param {Array<any>} [canMatch] - An optional array of objects that can match the route.\n * @returns {RouteBuilder} - A new instance of RouteBuilder class.\n */\nexport function createChildrenLazyRoute(path, loadChildren, canMatch) {\n const route = { path: path, loadChildren: loadChildren };\n if (canMatch?.length) {\n route.canMatch = canMatch;\n }\n return new RouteBuilder(route);\n}\n/**\n * Creates a lazy route component.\n *\n * @param {string} path - The path for the route.\n * @param {() => Type<unknown> | Observable<Type<unknown> | DefaultExport<Type<unknown>>> | Promise<Type<unknown> | DefaultExport<Type<unknown>>>} loadComponent - The function that loads the component for the route.\n * @param {Array<any>} [canMatch] - The array of values that determine if the route can match.\n * @returns {RouteBuilder} - An instance of RouteBuilder with the created route.\n */\nexport function createLazyRoute(path, loadComponent, canMatch) {\n const route = { path: path, loadComponent: loadComponent };\n if (canMatch?.length) {\n route.canMatch = canMatch;\n }\n return new RouteBuilder(route);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL3JvdXRlci9yb3V0ZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRTlELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQU83RCxNQUFNLE9BQU8sWUFBWTtJQWNyQixZQUFtQixLQUFZO1FBWnZCLGNBQVMsR0FBa0IsRUFBRSxDQUFDO1FBQzVCLGNBQVMsR0FBcUIsRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUM7UUFHbkQsYUFBUSxHQUF3QixFQUFFLENBQUM7UUFHbkMscUJBQWdCLEdBQTJCLEVBQUUsQ0FBQztRQUM5QywwQkFBcUIsR0FBMkIsRUFBRSxDQUFDLENBQUMsOEJBQThCO1FBS3RGLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFFBQVEsQ0FBQyxhQUE0QjtRQUN4QyxJQUFJLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFVBQVUsQ0FBQyxNQUFvQjtRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLDRCQUE0QixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFB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QU8sSUFBSSxZQUFZLENBQUM7UUFDcEIsSUFBSSxFQUFFLElBQUk7UUFDVixTQUFTLEVBQUUsU0FBUztLQUN2QixDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxJQUFZLEVBQUUsVUFBa0IsRUFBRSxZQUErQixRQUFRO0lBQ3pHLE9BQU8sSUFBSSxZQUFZLENBQUM7UUFDcEIsSUFBSSxFQUFFLElBQUk7UUFDVixVQUFVLEVBQUUsVUFBVTtRQUN0QixTQUFTLEVBQUUsU0FBUztLQUN2QixDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxJQUFZLEVBQUUsWUFBMEIsRUFBRSxRQUFxQjtJQUNuRyxNQUFNLEtBQUssR0FBVSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBQyxDQUFDO0lBQzlELElBQUksUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ25CLEtBQUssQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFDRCxPQUFPLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDM0IsSUFBWSxFQUNaLGFBQXFKLEVBQ3JKLFFBQXFCO0lBRXJCLE1BQU0sS0FBSyxHQUFVLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFDLENBQUM7SUFDaEUsSUFBSSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDbkIsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUNELE9BQU8sSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RW52aXJvbm1lbnRQcm92aWRlcnMsIFByb3ZpZGVyLCBUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q2FuQWN0aXZhdGVGbiwgQ2FuRGVhY3RpdmF0ZUZuLCBEZWZhdWx0RXhwb3J0LCBMb2FkQ2hpbGRyZW4sIFJlc29sdmVGbiwgUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7cmVtb3ZlUm91dGVFbXB0eVBhdGhTZWdtZW50c30gZnJvbSAnLi4vaGVscGVycy9yb3V0ZSc7XG5pbXBvcnQge0NvbW1vbnNNZW51SXRlbX0gZnJvbSAnLi4vbW9kZWxzL21lbnUubW9kZWwnO1xuaW1wb3J0IHtwZXJtaXNzaW9uR3VhcmR9IGZyb20gJy4uL3NlY3VyaXR5L3Blcm1pc3Npb24uZ3VhcmQnO1xuaW1wb3J0IHtBUGVybWlzc2lvbnN9IGZyb20gJy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zLm1vZGVsJztcbmltcG9ydCB7QnJlYWRjcnVtYlR5cGUsIENvbW1vbnNSb3V0ZURhdGF9IGZyb20gJy4vcm91dGVyLm1vZGVsJztcbmltcG9ydCB7Um91dGVzQnVpbGRlcn0gZnJvbSAnLi9yb3V0ZXMtYnVpbGRlcic7XG5cbmV4cG9ydCB0eXBlIFJvdXRlQnVpbGRlckFkanVzdEZuVHlwZSA9IChidWlsZGVyOiBSb3V0ZUJ1aWxkZXIpID0+IHZvaWQ7XG5cbmV4cG9ydCBjbGFzcyBSb3V0ZUJ1aWxkZXIge1xuICAgIHByb3RlY3RlZCByZWFkb25seSByb3V0ZTogUm91dGU7XG4gICAgcHJpdmF0ZSByb3V0ZVBhdGg6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBwcm90ZWN0ZWQgcm91dGVEYXRhOiBDb21tb25zUm91dGVEYXRhID0ge2JyZWFkY3J1bWI6IG51bGx9O1xuICAgIHByaXZhdGUgcm9vdD86IFJvdXRlc0J1aWxkZXI7XG4gICAgcHJpdmF0ZSBwYXJlbnQ/OiBSb3V0ZUJ1aWxkZXI7XG4gICAgcHJpdmF0ZSBjaGlsZHJlbjogQXJyYXk8Um91dGVCdWlsZGVyPiA9IFtdO1xuXG4gICAgcHJpdmF0ZSBtZW51SXRlbT86IENvbW1vbnNNZW51SXRlbTtcbiAgICBwcml2YXRlIG1lbnVJdGVtQ2hpbGRyZW46IEFycmF5PENvbW1vbnNNZW51SXRlbT4gPSBbXTtcbiAgICBwcml2YXRlIG1lbnVJdGVtQ2hpbGRyZW5BZnRlcjogQXJyYXk8Q29tbW9uc01lbnVJdGVtPiA9IFtdOyAvLyBhcHBlbmQgYWZ0ZXIgcm91dGUgY2hpbGRyZW5cblxuICAgIHByaXZhdGUgcGVybWlzc2lvbnM/OiBBUGVybWlzc2lvbnM7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3Iocm91dGU6IFJvdXRlKSB7XG4gICAgICAgIHRoaXMucm91dGUgPSByb3V0ZTtcbiAgICAgICAgaWYgKHRoaXMucm91dGUucGF0aCAmJiB0aGlzLnJvdXRlLnBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZVBhdGggPSBbdGhpcy5yb3V0ZS5wYXRoXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGxpbmsgdG8gcm9vdCBSb3V0ZXMgYnVpbGRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Um91dGVzQnVpbGRlcn0gcm91dGVzQnVpbGRlciAtIFRoZSByb3V0ZXMgYnVpbGRlciB0byBzZXQgYXMgdGhlIHJvb3QuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhSb290KHJvdXRlc0J1aWxkZXI6IFJvdXRlc0J1aWxkZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5yb290ID0gcm91dGVzQnVpbGRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbGluayB0byBwYXJlbnQgUm91dGUgYnVpbGRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Um91dGVCdWlsZGVyfSBwYXJlbnQgLSBUaGUgcGFyZW50IHJvdXRlIGJ1aWxkZXIuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhQYXJlbnQocGFyZW50OiBSb3V0ZUJ1aWxkZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMucm91dGVQYXRoID0gcmVtb3ZlUm91dGVFbXB0eVBhdGhTZWdtZW50cyhbLi4udGhpcy5wYXJlbnQucm91dGVQYXRoLCB0aGlzLnJvdXRlLnBhdGggPz8gJyddKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYnJlYWRjcnVtYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QnJlYWRjcnVtYlR5cGV9IGJyZWFkY3J1bWIgLSBCcmVhZGNydW1iIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgcHVibGljIHdpdGhCcmVhZGNydW1iKGJyZWFkY3J1bWI6IEJyZWFkY3J1bWJUeXBlKTogdGhpcyB7XG4gICAgICAgIHRoaXMucm91dGVEYXRhLmJyZWFkY3J1bWIgPSBicmVhZGNydW1iO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwYWdlIHRpdGxlIGZvciB0aGUgY3VycmVudCByb3V0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYWdlVGl0bGUgLSBUaGUgdGl0bGUgb2YgdGhlIHBhZ2UuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhQYWdlVGl0bGUocGFnZVRpdGxlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5yb3V0ZURhdGEucGFnZVRpdGxlID0gcGFnZVRpdGxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwYWdlIHRpdGxlIGFuZCB0aGUgYnJlYWRjcnVtYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIFRoZSB0aXRsZSBvZiB0aGUgcGFnZSBhbmQgYnJlYWRjcnVtYi5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFRpdGxlKHRpdGxlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy53aXRoUGFnZVRpdGxlKHRpdGxlKTtcbiAgICAgICAgdGhpcy53aXRoQnJlYWRjcnVtYih0aXRsZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBjYW4gYWN0aXZhdGUgZ3VhcmQgdG8gcm91dGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NhbkFjdGl2YXRlRm59IGZuIC0gVGhlIENhbkFjdGl2YXRlIGZ1bmN0aW9uIHRvIGJlIGFkZGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ2FuQWN0aXZhdGUoZm46IENhbkFjdGl2YXRlRm4pOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvdXRlLmNhbkFjdGl2YXRlKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlLmNhbkFjdGl2YXRlID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3V0ZS5jYW5BY3RpdmF0ZS5wdXNoKGZuKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNhbiBkZWFjdGl2YXRlIGd1YXJkIHRvIHJvdXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtDYW5EZWFjdGl2YXRlRm59IGZuIC0gVGhlIENhbkFjdGl2YXRlIGZ1bmN0aW9uIHRvIGJlIGFkZGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ2FuRGVhY3RpdmF0ZShmbjogQ2FuRGVhY3RpdmF0ZUZuPGFueT4pOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvdXRlLmNhbkRlYWN0aXZhdGUpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGUuY2FuRGVhY3RpdmF0ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm91dGUuY2FuRGVhY3RpdmF0ZS5wdXNoKGZuKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHJlc29sdmVyIHRvIHJvdXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSByZXNvbHZlci5cbiAgICAgKiBAcGFyYW0ge0NhbkRlYWN0aXZhdGVGbn0gZm4gLSBUaGUgQ2FuQWN0aXZhdGUgZnVuY3Rpb24gdG8gYmUgYWRkZWQuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhSZXNvbHZlcihuYW1lOiBzdHJpbmcsIGZuOiBSZXNvbHZlRm48YW55Pik6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMucm91dGUucmVzb2x2ZSkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZS5yZXNvbHZlID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3V0ZS5yZXNvbHZlW25hbWVdID0gZm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBwcm92aWRlciB0byB0aGUgcm91dGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3ZpZGVyIHwgRW52aXJvbm1lbnRQcm92aWRlcnN9IHByb3ZpZGVyIC0gVGhlIHByb3ZpZGVyIHRvIGFkZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFByb3ZpZGVyKHByb3ZpZGVyOiBQcm92aWRlciB8IEVudmlyb25tZW50UHJvdmlkZXJzKTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5yb3V0ZS5wcm92aWRlcnMpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGUucHJvdmlkZXJzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3V0ZS5wcm92aWRlcnMucHVzaChwcm92aWRlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGRhdGEgZm9yIHRoZSByb3V0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q29tbW9uc1JvdXRlRGF0YX0gZGF0YSAtIFRoZSBkYXRhIHRvIHNldCBmb3IgdGhlIHJvdXRlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW21lcmdlPXRydWVdIC0gSWYgdGhlIGRhdGEgc2hvdWxkIGJlIG1lcmdlZCB3aXRoIGN1cnJlbnQgZGF0YSBzZXR1cCAodHJ1ZSBieSBkZWZhdWx0KSAtIHBhZ2UgdGl0bGUgYW5kIGJyZWFkY3J1bWIgY29uZmlnIGFyZSBjYXJyaWVkIG92ZXIuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhEYXRhKGRhdGE6IENvbW1vbnNSb3V0ZURhdGEsIG1lcmdlID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLnJvdXRlRGF0YSA9IG1lcmdlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMucm91dGVEYXRhLFxuICAgICAgICAgICAgICAgICAgLi4uZGF0YVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIGJyZWFkY3J1bWI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAuLi5kYXRhXG4gICAgICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIG1lbnUgaXRlbSBvZiByb3V0ZS4gTWVyZ2luZyB3aXRoIGN1cnJlbnQgY29uZmlndXJhdGlvbiAoc2V0IHdpdGgge3dpdGhNZW51SXRlbX0pIHRha2VzIHBsYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtDb21tb25zTWVudUl0ZW19IG9wdHMgLSBUaGUgb3B0cyBwcm9wZXJ0aWVzIHRvIGJlIG1lcmdlZCBvbiBleGlzdGluZyBtZW51IGl0ZW0gZm9yIHJvdXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoTWVudUl0ZW1PcHRzKG9wdHM6IENvbW1vbnNNZW51SXRlbSk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMubWVudUl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1lbnVJdGVtID0ge1xuICAgICAgICAgICAgLi4udGhpcy5tZW51SXRlbSxcbiAgICAgICAgICAgIC4uLm9wdHNcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWVudSBpdGVtIChiYXNpYykuIEZvciBtb3JlIG9wdGlvbnMsIHNlZSB0aGUge3dpdGhNZW51SXRlbUZyb21PcHRzfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbaWNvbl0gLSBUaGUgaWNvbiBmb3IgdGhlIG1lbnUgaXRlbS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2xhYmVsXSAtIFRoZSBsYWJlbCBmb3IgdGhlIG1lbnUgaXRlbS5cbiAgICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IFtyb3V0ZXJMaW5rXSAtIFRoZSByb3V0ZXIgbGluayBmb3IgdGhlIG1lbnUgaXRlbS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFticmVhZGNydW1iPWZhbHNlXSAtIEluZGljYXRlcyB3aGV0aGVyIHRvIGRpc3BsYXkgYnJlYWRjcnVtYiBmb3IgdGhlIG1lbnUgaXRlbS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aE1lbnVJdGVtKGljb24/OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nLCByb3V0ZXJMaW5rPzogQXJyYXk8c3RyaW5nPiwgYnJlYWRjcnVtYiA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIHRoaXMubWVudUl0ZW0gPSBjcmVhdGVNZW51SXRlbShpY29uLCBsYWJlbCwgcm91dGVyTGluayk7XG4gICAgICAgIGlmIChicmVhZGNydW1iICYmIGxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLndpdGhCcmVhZGNydW1iKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgbWVudSBpdGVtIGNoaWxkIHRvIHJvdXRlJ3MgbWVudSBpdGVtLiBJZiBubyBtZW51IGl0ZW0gaXMgcHJlc2VudCwgY2hpbGRyZW4gd2lsbCBiZSBhcHBlbmRlZCBkaXJlY3RseSB0byBwYXJlbnQvcm9vdCBtZW51IGl0ZW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2ljb25dIC0gVGhlIGljb24gZm9yIHRoZSBtZW51IGl0ZW0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtsYWJlbF0gLSBUaGUgbGFiZWwgZm9yIHRoZSBtZW51IGl0ZW0uXG4gICAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBbcm91dGVyTGlua10gLSBUaGUgcm91dGVyIGxpbmsgZm9yIHRoZSBtZW51IGl0ZW0uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbYWZ0ZXJSb3V0ZUNoaWxkcmVuPWZhbHNlXSBJZiBmYWxzZSwgbWVudSBpdGVtIGNoaWxkIHdpbGwgYmUgYXBwZW5kZWQgYmVmb3JlIHJvdXRlJ3MgY2hpbGRyZW4gbWVudSBpdGVtcywgYXQgdGhlIGVuZCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhNZW51SXRlbUNoaWxkKGljb24/OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nLCByb3V0ZXJMaW5rPzogQXJyYXk8c3RyaW5nPiwgYWZ0ZXJSb3V0ZUNoaWxkcmVuID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgaWYgKGFmdGVyUm91dGVDaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbUNoaWxkcmVuQWZ0ZXIucHVzaChjcmVhdGVNZW51SXRlbShpY29uLCBsYWJlbCwgcm91dGVyTGluaykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbUNoaWxkcmVuLnB1c2goY3JlYXRlTWVudUl0ZW0oaWNvbiwgbGFiZWwsIHJvdXRlckxpbmspKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIG1lbnUgaXRlbSBjaGlsZCBmcm9tIG9wdHMgdG8gcm91dGUncyBtZW51IGl0ZW0uIElmIG5vIG1lbnUgaXRlbSBpcyBwcmVzZW50LCBjaGlsZHJlbiB3aWxsIGJlIGFwcGVuZGVkIGRpcmVjdGx5IHRvIHBhcmVudC9yb290IG1lbnUgaXRlbS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q29tbW9uc01lbnVJdGVtfSBvcHRzIC0gVGhlIG9wdHMgcHJvcGVydGllcyB0byBiZSBtZXJnZWQgb24gZXhpc3RpbmcgbWVudSBpdGVtIGZvciByb3V0ZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthZnRlclJvdXRlQ2hpbGRyZW49ZmFsc2VdIElmIGZhbHNlLCBtZW51IGl0ZW0gY2hpbGQgd2lsbCBiZSBhcHBlbmRlZCBiZWZvcmUgcm91dGUncyBjaGlsZHJlbiBtZW51IGl0ZW1zLCBhdCB0aGUgZW5kIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aE1lbnVJdGVtQ2hpbGRGcm9tT3B0cyhvcHRzOiBDb21tb25zTWVudUl0ZW0sIGFmdGVyUm91dGVDaGlsZHJlbiA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIGlmIChhZnRlclJvdXRlQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1DaGlsZHJlbkFmdGVyLnB1c2gob3B0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtQ2hpbGRyZW4ucHVzaChvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtZW51IGl0ZW0ncyBjaGlsZHJlbiB0byBiZSBnZW5lcmF0ZWQgbGF6aWx5IGZyb20gcm91dGUncyBsYXp5IGxvYWRlZCByb3V0ZXMgYWZ0ZXIgdGhlIGNodW5rIGlzIGxvYWRlZCB0byBydW50aW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoTWVudUl0ZW1MYXp5Q2hpbGRyZW4oKTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5tZW51SXRlbSkge1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVudUl0ZW0ubGF6eUNoaWxkcmVuID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGVybWlzc2lvbnMgb24gdGhlIHJvdXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBUGVybWlzc2lvbnN9IHBlcm1pc3Npb25zIC0gVGhlIHBlcm1pc3Npb25zIHRvIGJlIHNldCBvbiB0aGUgcm91dGUuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhQZXJtaXNzaW9ucyhwZXJtaXNzaW9uczogQVBlcm1pc3Npb25zKTogdGhpcyB7XG4gICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBwZXJtaXNzaW9ucztcbiAgICAgICAgdGhpcy53aXRoQ2FuQWN0aXZhdGUocGVybWlzc2lvbkd1YXJkKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNoaWxkIHJvdXRlIHRvIHRoZSBjdXJyZW50IHJvdXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgY2hpbGQgcm91dGUuXG4gICAgICogQHBhcmFtIHtUeXBlPGFueT59IGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGlsZCByb3V0ZS5cbiAgICAgKiBAcGFyYW0ge1JvdXRlQnVpbGRlckFkanVzdEZuVHlwZX0gW2FkanVzdEZuXSAtIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGFkanVzdCB0aGUgY2hpbGQgcm91dGUgYnVpbGRlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkQ2hpbGQocGF0aDogc3RyaW5nLCBjb21wb25lbnQ6IFR5cGU8YW55PiwgYWRqdXN0Rm4/OiBSb3V0ZUJ1aWxkZXJBZGp1c3RGblR5cGUpOiB0aGlzIHtcbiAgICAgICAgY29uc3QgY2hpbGRSb3V0ZUJ1aWxkZXIgPSBjcmVhdGVSb3V0ZShwYXRoLCBjb21wb25lbnQpO1xuICAgICAgICBhZGp1c3RGbj8uKGNoaWxkUm91dGVCdWlsZGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkQ2hpbGRCdWlsZGVyKGNoaWxkUm91dGVCdWlsZGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgY2hpbGQgYnVpbGRlciB0byB0aGUgY3VycmVudCByb3V0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Um91dGVCdWlsZGVyfSBidWlsZGVyIC0gVGhlIGNoaWxkIGJ1aWxkZXIgdG8gYmUgYWRkZWQuXG4gICAgICogQHJldHVybiB7dGhpc30gLSBUaGUgY3VycmVudCBidWlsZGVyIHdpdGggdGhlIGFkZGVkIGNoaWxkIGJ1aWxkZXIuXG4gICAgICovXG4gICAgcHVibGljIGFkZENoaWxkQnVpbGRlcihidWlsZGVyOiBSb3V0ZUJ1aWxkZXIpOiB0aGlzIHtcbiAgICAgICAgYnVpbGRlci53aXRoUGFyZW50KHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5yb290KSB7XG4gICAgICAgICAgICBidWlsZGVyLndpdGhSb290KHRoaXMucm9vdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGJ1aWxkZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZHMgYW4gQW5ndWxhciByb3V0ZSBiYXNlZCBvbiBjb25maWd1cmF0aW9ucy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtSb3V0ZX0gVGhlIGJ1aWx0IEFuZ3VsYXIgcm91dGUuXG4gICAgICovXG4gICAgcHVibGljIGJ1aWxkKCk6IFJvdXRlIHtcbiAgICAgICAgY29uc3QgYW5ndWxhclJvdXRlOiBSb3V0ZSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMucm91dGVcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoYW5ndWxhclJvdXRlLmRhdGEpIHtcbiAgICAgICAgICAgIGFuZ3VsYXJSb3V0ZS5kYXRhID0ge1xuICAgICAgICAgICAgICAgIC4uLmFuZ3VsYXJSb3V0ZS5kYXRhLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMucm91dGVEYXRhXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5ndWxhclJvdXRlLmRhdGEgPSB7Li4udGhpcy5yb3V0ZURhdGF9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYXBwZW5kIHBlcm1pc3Npb25zIGlmIG5vdCBhbHJlYWR5IGluIHJvdXRlIGRhdGFcbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnMgJiYgIShhbmd1bGFyUm91dGUuZGF0YSBhcyBDb21tb25zUm91dGVEYXRhKS5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgKGFuZ3VsYXJSb3V0ZS5kYXRhIGFzIENvbW1vbnNSb3V0ZURhdGEpLnBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9ucztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1lbnUgPSB0aGlzLmJ1aWxkTWVudSgpO1xuICAgICAgICBpZiAobWVudS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAoYW5ndWxhclJvdXRlLmRhdGEgYXMgQ29tbW9uc1JvdXRlRGF0YSkubWVudUl0ZW1zID0gbWVudTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgodGhpcy5yb3V0ZS5jaGlsZHJlbj8ubGVuZ3RoID8/IDApID4gMCB8fCB0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIHJvdXRlIGhhcyBjaGlsZHJlblxuICAgICAgICAgICAgYW5ndWxhclJvdXRlLmNoaWxkcmVuID0gW107XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYW5ndWxhclJvdXRlLmNoaWxkcmVuLnB1c2goLi4udGhpcy5yb3V0ZS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkUm91dGUgb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBhbmd1bGFyUm91dGUuY2hpbGRyZW4ucHVzaChjaGlsZFJvdXRlLmJ1aWxkKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnJvdXRlLmNhbkFjdGl2YXRlKSB7XG4gICAgICAgICAgICBhbmd1bGFyUm91dGUuY2FuQWN0aXZhdGUgPSBbLi4udGhpcy5yb3V0ZS5jYW5BY3RpdmF0ZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucm91dGUuY2FuQWN0aXZhdGVDaGlsZCkge1xuICAgICAgICAgICAgYW5ndWxhclJvdXRlLmNhbkFjdGl2YXRlQ2hpbGQgPSBbLi4udGhpcy5yb3V0ZS5jYW5BY3RpdmF0ZUNoaWxkXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yb3V0ZS5jYW5Mb2FkKSB7XG4gICAgICAgICAgICBhbmd1bGFyUm91dGUuY2FuTG9hZCA9IFsuLi50aGlzLnJvdXRlLmNhbkxvYWRdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJvdXRlLmNhbkRlYWN0aXZhdGUpIHtcbiAgICAgICAgICAgIGFuZ3VsYXJSb3V0ZS5jYW5EZWFjdGl2YXRlID0gWy4uLnRoaXMucm91dGUuY2FuRGVhY3RpdmF0ZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucm91dGUucmVzb2x2ZSkge1xuICAgICAgICAgICAgYW5ndWxhclJvdXRlLnJlc29sdmUgPSB7Li4udGhpcy5yb3V0ZS5yZXNvbHZlfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhbmd1bGFyUm91dGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIHRoZSBtZW51IGl0ZW1zLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0FycmF5PENvbW1vbnNNZW51SXRlbT59IC0gVGhlIGJ1aWx0IG1lbnUgaXRlbXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBidWlsZE1lbnUoKTogQXJyYXk8Q29tbW9uc01lbnVJdGVtPiB7XG4gICAgICAgIGNvbnN0IG1lbnVJdGVtQnVpbGQ6IENvbW1vbnNNZW51SXRlbSB8IG51bGwgPSB0aGlzLm1lbnVJdGVtID8gey4uLnRoaXMubWVudUl0ZW19IDogbnVsbDtcbiAgICAgICAgY29uc3Qgcm91dGVDaGlsZHJlbk1lbnVJdGVtczogQXJyYXk8Q29tbW9uc01lbnVJdGVtPiA9IHRoaXMuY2hpbGRyZW4uZmxhdE1hcChjaGlsZCA9PiBjaGlsZC5idWlsZE1lbnUoKSk7XG4gICAgICAgIGNvbnN0IG1lbnVJdGVtQ2hpbGRyZW46IEFycmF5PENvbW1vbnNNZW51SXRlbT4gPSBbXTtcbiAgICAgICAgY29uc3QgbWVudUl0ZW1DaGlsZHJlbkJ1aWxkOiBBcnJheTxDb21tb25zTWVudUl0ZW0+ID0gW107XG5cbiAgICAgICAgaWYgKG1lbnVJdGVtQnVpbGQ/Lml0ZW1zKSB7XG4gICAgICAgICAgICBtZW51SXRlbUNoaWxkcmVuQnVpbGQucHVzaCguLi5tZW51SXRlbUJ1aWxkLml0ZW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByb2Nlc3NNZW51SXRlbUNoaWxkID0gKGNoaWxkOiBDb21tb25zTWVudUl0ZW0pOiBDb21tb25zTWVudUl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgZmluYWxDaGlsZDogQ29tbW9uc01lbnVJdGVtID0gey4uLmNoaWxkfTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZmluYWxDaGlsZC5yb3V0ZXJMaW5rID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGZpbmFsQ2hpbGQucm91dGVyTGluayA9IHRoaXMucm91dGVQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmaW5hbENoaWxkLnJvdXRlckxpbmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZmluYWxDaGlsZC5yb3V0ZXJMaW5rID0gW2ZpbmFsQ2hpbGQucm91dGVyTGlua107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmluYWxDaGlsZC5yb3V0ZXJMaW5rKSB7XG4gICAgICAgICAgICAgICAgZmluYWxDaGlsZC5yb3V0ZXJMaW5rID0gcmVtb3ZlUm91dGVFbXB0eVBhdGhTZWdtZW50cyhmaW5hbENoaWxkLnJvdXRlckxpbmspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUHJvcGFnYXRlIHBlcm1pc3Npb25zIHRvIGNoaWxkcmVuXG4gICAgICAgICAgICBpZiAoIWZpbmFsQ2hpbGQucGVybWlzc2lvbnMgJiYgdGhpcy5yb3V0ZURhdGEucGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgICAgICBmaW5hbENoaWxkLnBlcm1pc3Npb25zID0gdGhpcy5yb3V0ZURhdGEucGVybWlzc2lvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWZpbmFsQ2hpbGQucGVybWlzc2lvbnMgJiYgdGhpcy5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgICAgIGZpbmFsQ2hpbGQucGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZpbmFsQ2hpbGQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5tZW51SXRlbUNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gbWVudUl0ZW1DaGlsZHJlbi5wdXNoKHByb2Nlc3NNZW51SXRlbUNoaWxkKGNoaWxkKSkpO1xuXG4gICAgICAgIGNvbnN0IG1lbnVJdGVtQ2hpbGRyZW5BZnRlckJ1aWxkOiBBcnJheTxDb21tb25zTWVudUl0ZW0+ID0gdGhpcy5tZW51SXRlbUNoaWxkcmVuQWZ0ZXIubWFwKGNoaWxkID0+IHByb2Nlc3NNZW51SXRlbUNoaWxkKGNoaWxkKSk7XG5cbiAgICAgICAgbWVudUl0ZW1DaGlsZHJlbkJ1aWxkLnB1c2goLi4ubWVudUl0ZW1DaGlsZHJlbiwgLi4ucm91dGVDaGlsZHJlbk1lbnVJdGVtcywgLi4ubWVudUl0ZW1DaGlsZHJlbkFmdGVyQnVpbGQpO1xuXG4gICAgICAgIGlmICghbWVudUl0ZW1CdWlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIG1lbnVJdGVtQ2hpbGRyZW5CdWlsZDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lbnVJdGVtQnVpbGQubGFiZWwgPSBtZW51SXRlbUJ1aWxkLmxhYmVsID8/IHRoaXMucm91dGVEYXRhLnBhZ2VUaXRsZTtcbiAgICAgICAgaWYgKHR5cGVvZiBtZW51SXRlbUJ1aWxkLnJvdXRlckxpbmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBtZW51SXRlbUJ1aWxkLnJvdXRlckxpbmsgPSBbbWVudUl0ZW1CdWlsZC5yb3V0ZXJMaW5rXTtcbiAgICAgICAgfVxuICAgICAgICBtZW51SXRlbUJ1aWxkLnJvdXRlckxpbmsgPSByZW1vdmVSb3V0ZUVtcHR5UGF0aFNlZ21lbnRzKG1lbnVJdGVtQnVpbGQucm91dGVyTGluayA/PyB0aGlzLnJvdXRlUGF0aCk7XG4gICAgICAgIGlmIChtZW51SXRlbUNoaWxkcmVuQnVpbGQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbWVudUl0ZW1CdWlsZC5pdGVtcyA9IG1lbnVJdGVtQ2hpbGRyZW5CdWlsZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbWVudUl0ZW1CdWlsZC5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgbWVudUl0ZW1CdWlsZC5wZXJtaXNzaW9ucyA9IHRoaXMuZmluZE1lbnVJdGVtUGVybWlzc2lvbnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbWVudUl0ZW1CdWlsZF07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZpbmRNZW51SXRlbVBlcm1pc3Npb25zKCkge1xuICAgICAgICBpZiAodGhpcy5tZW51SXRlbT8ucGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1lbnVJdGVtLnBlcm1pc3Npb25zO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJvdXRlRGF0YS5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBhbHJlYWR5IGJ1aWx0XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZURhdGEucGVybWlzc2lvbnM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVNZW51SXRlbShpY29uPzogc3RyaW5nLCBsYWJlbD86IHN0cmluZywgcm91dGVyTGluaz86IEFycmF5PHN0cmluZz4pIHtcbiAgICBjb25zdCBtZW51SXRlbTogQ29tbW9uc01lbnVJdGVtID0ge307XG4gICAgaWYgKGljb24pIHtcbiAgICAgICAgbWVudUl0ZW0uaWNvbiA9IGljb247XG4gICAgfVxuICAgIGlmIChsYWJlbCkge1xuICAgICAgICBtZW51SXRlbS5sYWJlbCA9IGxhYmVsO1xuICAgIH1cbiAgICBpZiAocm91dGVyTGluaykge1xuICAgICAgICBtZW51SXRlbS5yb3V0ZXJMaW5rID0gcm91dGVyTGluaztcbiAgICB9XG4gICAgcmV0dXJuIG1lbnVJdGVtO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgUm91dGVCdWlsZGVyIHdpdGggdGhlIGdpdmVuIHBhdGggYW5kIGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIGZvciB0aGUgcm91dGUuXG4gKiBAcGFyYW0ge1R5cGU8YW55Pn0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBmb3IgdGhlIHJvdXRlLlxuICogQHJldHVybiB7Um91dGVCdWlsZGVyfSAtIEEgbmV3IGluc3RhbmNlIG9mIFJvdXRlQnVpbGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJvdXRlKHBhdGg6IHN0cmluZywgY29tcG9uZW50OiBUeXBlPGFueT4pOiBSb3V0ZUJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgUm91dGVCdWlsZGVyKHtcbiAgICAgICAgcGF0aDogcGF0aCxcbiAgICAgICAgY29tcG9uZW50OiBjb21wb25lbnRcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVkaXJlY3Qgcm91dGUgZm9yIHRoZSBnaXZlbiBwYXRoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWRpcmVjdFRvIC0gVGhlIFVSTCBwYXRoIHRvIHJlZGlyZWN0IHRvLlxuICogQHBhcmFtIHsnZnVsbCcgfCAncHJlZml4J30gW3BhdGhNYXRjaD0ncHJlZml4J10gLSBUaGUgcGF0aCBtYXRjaGluZyBzdHJhdGVneSAoJ2Z1bGwnIG9yICdwcmVmaXgnKS5cbiAqIEByZXR1cm4ge1JvdXRlQnVpbGRlcn0gLSBBIG5ldyBpbnN0YW5jZSBvZiB0aGUgUm91dGVCdWlsZGVyIGNsYXNzIHdpdGggdGhlIHJlZGlyZWN0IHJvdXRlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSb3V0ZVJlZGlyZWN0KHBhdGg6IHN0cmluZywgcmVkaXJlY3RUbzogc3RyaW5nLCBwYXRoTWF0Y2g6ICdmdWxsJyB8ICdwcmVmaXgnID0gJ3ByZWZpeCcpOiBSb3V0ZUJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgUm91dGVCdWlsZGVyKHtcbiAgICAgICAgcGF0aDogcGF0aCxcbiAgICAgICAgcmVkaXJlY3RUbzogcmVkaXJlY3RUbyxcbiAgICAgICAgcGF0aE1hdGNoOiBwYXRoTWF0Y2hcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbGF6eSByb3V0ZSBtb2R1bGUgKG9yIHJvdXRlcykuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCBmb3IgdGhlIHJvdXRlLlxuICogQHBhcmFtIHtMb2FkQ2hpbGRyZW59IGxvYWRDaGlsZHJlbiAtIFRoZSBmdW5jdGlvbiB0aGF0IGxvYWRzIHRoZSBsYXp5IG1vZHVsZSAob3Igcm91dGVzKS5cbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gW2Nhbk1hdGNoXSAtIEFuIG9wdGlvbmFsIGFycmF5IG9mIG9iamVjdHMgdGhhdCBjYW4gbWF0Y2ggdGhlIHJvdXRlLlxuICogQHJldHVybnMge1JvdXRlQnVpbGRlcn0gLSBBIG5ldyBpbnN0YW5jZSBvZiBSb3V0ZUJ1aWxkZXIgY2xhc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGlsZHJlbkxhenlSb3V0ZShwYXRoOiBzdHJpbmcsIGxvYWRDaGlsZHJlbjogTG9hZENoaWxkcmVuLCBjYW5NYXRjaD86IEFycmF5PGFueT4pOiBSb3V0ZUJ1aWxkZXIge1xuICAgIGNvbnN0IHJvdXRlOiBSb3V0ZSA9IHtwYXRoOiBwYXRoLCBsb2FkQ2hpbGRyZW46IGxvYWRDaGlsZHJlbn07XG4gICAgaWYgKGNhbk1hdGNoPy5sZW5ndGgpIHtcbiAgICAgICAgcm91dGUuY2FuTWF0Y2ggPSBjYW5NYXRjaDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBSb3V0ZUJ1aWxkZXIocm91dGUpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBsYXp5IHJvdXRlIGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIGZvciB0aGUgcm91dGUuXG4gKiBAcGFyYW0geygpID0+IFR5cGU8dW5rbm93bj4gfCBPYnNlcnZhYmxlPFR5cGU8dW5rbm93bj4gfCBEZWZhdWx0RXhwb3J0PFR5cGU8dW5rbm93bj4+PiB8IFByb21pc2U8VHlwZTx1bmtub3duPiB8IERlZmF1bHRFeHBvcnQ8VHlwZTx1bmtub3duPj4+fSBsb2FkQ29tcG9uZW50IC0gVGhlIGZ1bmN0aW9uIHRoYXQgbG9hZHMgdGhlIGNvbXBvbmVudCBmb3IgdGhlIHJvdXRlLlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBbY2FuTWF0Y2hdIC0gVGhlIGFycmF5IG9mIHZhbHVlcyB0aGF0IGRldGVybWluZSBpZiB0aGUgcm91dGUgY2FuIG1hdGNoLlxuICogQHJldHVybnMge1JvdXRlQnVpbGRlcn0gLSBBbiBpbnN0YW5jZSBvZiBSb3V0ZUJ1aWxkZXIgd2l0aCB0aGUgY3JlYXRlZCByb3V0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxhenlSb3V0ZShcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgbG9hZENvbXBvbmVudDogKCkgPT4gVHlwZTx1bmtub3duPiB8IE9ic2VydmFibGU8VHlwZTx1bmtub3duPiB8IERlZmF1bHRFeHBvcnQ8VHlwZTx1bmtub3duPj4+IHwgUHJvbWlzZTxUeXBlPHVua25vd24+IHwgRGVmYXVsdEV4cG9ydDxUeXBlPHVua25vd24+Pj4sXG4gICAgY2FuTWF0Y2g/OiBBcnJheTxhbnk+XG4pOiBSb3V0ZUJ1aWxkZXIge1xuICAgIGNvbnN0IHJvdXRlOiBSb3V0ZSA9IHtwYXRoOiBwYXRoLCBsb2FkQ29tcG9uZW50OiBsb2FkQ29tcG9uZW50fTtcbiAgICBpZiAoY2FuTWF0Y2g/Lmxlbmd0aCkge1xuICAgICAgICByb3V0ZS5jYW5NYXRjaCA9IGNhbk1hdGNoO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFJvdXRlQnVpbGRlcihyb3V0ZSk7XG59XG4iXX0=","import { RouteBuilder } from './route-builder';\nexport class RoutesBuilder {\n constructor() {\n this.routes = [];\n }\n /**\n * Adds an Angular route to the current route configuration.\n *\n * @param {Route} route - The Angular route object to be added.\n * @param {RouteBuilderAdjustFnType} [builderAdjustFn] - Optional function to adjust the route builder before adding.\n */\n addFromNgRoute(route, builderAdjustFn) {\n const builder = new RouteBuilder(route);\n builderAdjustFn?.(builder);\n return this.add(builder);\n }\n /**\n * Adds a route redirect to the Angular route.\n *\n * @param {string} path - The path for the redirect.\n * @param {string} redirectTo - The target route to redirect.\n * @param {'full' | 'prefix'} pathMatch - The matching strategy for the redirect. Default is 'prefix'.\n */\n addRedirect(path, redirectTo, pathMatch = 'prefix') {\n return this.addFromNgRoute({\n path: path,\n redirectTo: redirectTo,\n pathMatch: pathMatch\n });\n }\n /**\n * Adds a route to the routes.\n *\n * @param {RouteBuilder} routeBuilder - The route builder object representing the route to be added.\n */\n add(routeBuilder) {\n this.routes.push(routeBuilder);\n return this;\n }\n build() {\n return this.routes.map(r => r.build());\n }\n}\n/**\n * Creates a new instance of the RoutesBuilder class.\n *\n * @return {RoutesBuilder} A new instance of the RoutesBuilder class.\n */\nexport function createRoutes() {\n return new RoutesBuilder();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9yb3V0ZXIvcm91dGVzLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLFlBQVksRUFBMkIsTUFBTSxpQkFBaUIsQ0FBQztBQUV2RSxNQUFNLE9BQU8sYUFBYTtJQUExQjtRQUNZLFdBQU0sR0FBd0IsRUFBRSxDQUFDO0lBMEM3QyxDQUFDO0lBeENHOzs7OztPQUtHO0lBQ0ksY0FBYyxDQUFDLEtBQVksRUFBRSxlQUEwQztRQUMxRSxNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxlQUFlLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFdBQVcsQ0FBQyxJQUFZLEVBQUUsVUFBa0IsRUFBRSxZQUErQixRQUFRO1FBQ3hGLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUN2QixJQUFJLEVBQUUsSUFBSTtZQUNWLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLFNBQVMsRUFBRSxTQUFTO1NBQ3ZCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksR0FBRyxDQUFDLFlBQTBCO1FBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxLQUFLO1FBQ1IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7Q0FDSjtBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsWUFBWTtJQUN4QixPQUFPLElBQUksYUFBYSxFQUFFLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Um91dGUsIFJvdXRlc30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtSb3V0ZUJ1aWxkZXIsIFJvdXRlQnVpbGRlckFkanVzdEZuVHlwZX0gZnJvbSAnLi9yb3V0ZS1idWlsZGVyJztcblxuZXhwb3J0IGNsYXNzIFJvdXRlc0J1aWxkZXIge1xuICAgIHByaXZhdGUgcm91dGVzOiBBcnJheTxSb3V0ZUJ1aWxkZXI+ID0gW107XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEFuZ3VsYXIgcm91dGUgdG8gdGhlIGN1cnJlbnQgcm91dGUgY29uZmlndXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Um91dGV9IHJvdXRlIC0gVGhlIEFuZ3VsYXIgcm91dGUgb2JqZWN0IHRvIGJlIGFkZGVkLlxuICAgICAqIEBwYXJhbSB7Um91dGVCdWlsZGVyQWRqdXN0Rm5UeXBlfSBbYnVpbGRlckFkanVzdEZuXSAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGFkanVzdCB0aGUgcm91dGUgYnVpbGRlciBiZWZvcmUgYWRkaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGcm9tTmdSb3V0ZShyb3V0ZTogUm91dGUsIGJ1aWxkZXJBZGp1c3RGbj86IFJvdXRlQnVpbGRlckFkanVzdEZuVHlwZSk6IHRoaXMge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gbmV3IFJvdXRlQnVpbGRlcihyb3V0ZSk7XG4gICAgICAgIGJ1aWxkZXJBZGp1c3RGbj8uKGJ1aWxkZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGQoYnVpbGRlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHJvdXRlIHJlZGlyZWN0IHRvIHRoZSBBbmd1bGFyIHJvdXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCBmb3IgdGhlIHJlZGlyZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWRpcmVjdFRvIC0gVGhlIHRhcmdldCByb3V0ZSB0byByZWRpcmVjdC5cbiAgICAgKiBAcGFyYW0geydmdWxsJyB8ICdwcmVmaXgnfSBwYXRoTWF0Y2ggLSBUaGUgbWF0Y2hpbmcgc3RyYXRlZ3kgZm9yIHRoZSByZWRpcmVjdC4gRGVmYXVsdCBpcyAncHJlZml4Jy5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkUmVkaXJlY3QocGF0aDogc3RyaW5nLCByZWRpcmVjdFRvOiBzdHJpbmcsIHBhdGhNYXRjaDogJ2Z1bGwnIHwgJ3ByZWZpeCcgPSAncHJlZml4Jyk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGcm9tTmdSb3V0ZSh7XG4gICAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgICAgcmVkaXJlY3RUbzogcmVkaXJlY3RUbyxcbiAgICAgICAgICAgIHBhdGhNYXRjaDogcGF0aE1hdGNoXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSByb3V0ZSB0byB0aGUgcm91dGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtSb3V0ZUJ1aWxkZXJ9IHJvdXRlQnVpbGRlciAtIFRoZSByb3V0ZSBidWlsZGVyIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJvdXRlIHRvIGJlIGFkZGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGQocm91dGVCdWlsZGVyOiBSb3V0ZUJ1aWxkZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5yb3V0ZXMucHVzaChyb3V0ZUJ1aWxkZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYnVpbGQoKTogUm91dGVzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm91dGVzLm1hcChyID0+IHIuYnVpbGQoKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFJvdXRlc0J1aWxkZXIgY2xhc3MuXG4gKlxuICogQHJldHVybiB7Um91dGVzQnVpbGRlcn0gQSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFJvdXRlc0J1aWxkZXIgY2xhc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSb3V0ZXMoKSB7XG4gICAgcmV0dXJuIG5ldyBSb3V0ZXNCdWlsZGVyKCk7XG59XG4iXX0=","import { Observable } from 'rxjs';\n/**\n * Maps an Observable of data with optional totalCount and data to a data list result object with provided defaults of empty array and count 0.\n */\nexport function mapToDataList() {\n return function (source) {\n return new Observable(subscriber => {\n return source.subscribe({\n next(value) {\n subscriber.next({\n data: value.data ?? [],\n totalCount: value.totalCount ?? value.data?.length ?? 0\n });\n },\n error: err => {\n subscriber.error(err);\n }\n });\n });\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWRhdGEtbGlzdC1yZXN1bHQtb3BlcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9yeGpzL21hcC1kYXRhLWxpc3QtcmVzdWx0LW9wZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQW1CLE1BQU0sTUFBTSxDQUFDO0FBSWxEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGFBQWE7SUFDekIsT0FBTyxVQUFnQixNQUF3RDtRQUMzRSxPQUFPLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQy9CLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLEtBQUs7b0JBQ04sVUFBVSxDQUFDLElBQUksQ0FBQzt3QkFDWixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFO3dCQUN0QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDO3FCQUMxRCxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztnQkFDRCxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ1QsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDMUIsQ0FBQzthQUNKLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T2JzZXJ2YWJsZSwgT3BlcmF0b3JGdW5jdGlvbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7RGF0YUxpc3RSZXN1bHR9IGZyb20gJy4uL2RhdGEtbGlzdC9kYXRhLWxpc3QubW9kZWwnO1xuXG4vKipcbiAqIE1hcHMgYW4gT2JzZXJ2YWJsZSBvZiBkYXRhIHdpdGggb3B0aW9uYWwgdG90YWxDb3VudCBhbmQgZGF0YSB0byBhIGRhdGEgbGlzdCByZXN1bHQgb2JqZWN0IHdpdGggcHJvdmlkZWQgZGVmYXVsdHMgb2YgZW1wdHkgYXJyYXkgYW5kIGNvdW50IDAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb0RhdGFMaXN0PEl0ZW0+KCk6IE9wZXJhdG9yRnVuY3Rpb248e2RhdGE/OiBJdGVtW107IHRvdGFsQ291bnQ/OiBudW1iZXJ9LCBEYXRhTGlzdFJlc3VsdDxJdGVtPj4ge1xuICAgIHJldHVybiBmdW5jdGlvbiA8SXRlbT4oc291cmNlOiBPYnNlcnZhYmxlPHtkYXRhPzogSXRlbVtdOyB0b3RhbENvdW50PzogbnVtYmVyfT4pOiBPYnNlcnZhYmxlPERhdGFMaXN0UmVzdWx0PEl0ZW0+PiB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmVyID0+IHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB2YWx1ZS5kYXRhID8/IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxDb3VudDogdmFsdWUudG90YWxDb3VudCA/PyB2YWx1ZS5kYXRhPy5sZW5ndGggPz8gMFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG59XG4iXX0=","export function commonsInitializerProvider(handler, commonsInit) {\n return () => commonsInit.initialize(handler);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy1pbml0LnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vY29yZS9zcmMvc2VydmljZXMvcHJvdmlkZXJzL2NvbW1vbnMtaW5pdC5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxNQUFNLFVBQVUsMEJBQTBCLENBQUMsT0FBb0IsRUFBRSxXQUErQjtJQUM1RixPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cEJhY2tlbmR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtDb21tb25zSW5pdFNlcnZpY2V9IGZyb20gJy4uL2NvbW1vbnMtaW5pdC5zZXJ2aWNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbW1vbnNJbml0aWFsaXplclByb3ZpZGVyKGhhbmRsZXI6IEh0dHBCYWNrZW5kLCBjb21tb25zSW5pdDogQ29tbW9uc0luaXRTZXJ2aWNlKTogKCkgPT4gT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuICgpID0+IGNvbW1vbnNJbml0LmluaXRpYWxpemUoaGFuZGxlcik7XG59XG4iXX0=","import { InjectionToken } from '@angular/core';\nexport const COMMONS_INITIALIZER_IT = new InjectionToken('COMMONS_INIZIALIZER');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy1pbml0LnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vY29yZS9zcmMvc2VydmljZXMvdG9rZW5zL2NvbW1vbnMtaW5pdC50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSTdDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksY0FBYyxDQUEyQyxxQkFBcUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3Rpb25Ub2tlbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjb25zdCBDT01NT05TX0lOSVRJQUxJWkVSX0lUID0gbmV3IEluamVjdGlvblRva2VuPFJlYWRvbmx5QXJyYXk8KCkgPT4gT2JzZXJ2YWJsZTx1bmtub3duPj4+KCdDT01NT05TX0lOSVpJQUxJWkVSJyk7XG4iXX0=","import { InjectionToken } from '@angular/core';\nexport const LOG_PUBLISHERS = new InjectionToken('LOG_PUBLISHERS');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLXB1Ymxpc2hlci50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvcmUvc3JjL3NlcnZpY2VzL3Rva2Vucy9sb2ctcHVibGlzaGVyLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJN0MsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUFrQixnQkFBZ0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3Rpb25Ub2tlbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7SUxvZ1B1Ymxpc2hlcn0gZnJvbSAnLi4vLi4vbG9nL2xvZy5tb2RlbCc7XG5cbmV4cG9ydCBjb25zdCBMT0dfUFVCTElTSEVSUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxJTG9nUHVibGlzaGVyW10+KCdMT0dfUFVCTElTSEVSUycpO1xuIl19","import { combineLatest, of, tap } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { throwError } from '../error/error-helpers';\nimport { objectDeepMerge } from '../helpers/object';\nexport class CommonsConfigurationService {\n static { this._instance = new CommonsConfigurationService(); }\n static get() {\n return CommonsConfigurationService._instance;\n }\n constructor() {\n this.jsonSources = [];\n this.objectSources = [];\n this.configuration = { ...this.projectEnvironment };\n /**\n * returns true if there is no jsonSources\n */\n this.skipJsonConfigsLoading = () => this.jsonSources === null || this.jsonSources.length === 0;\n /**\n * loads json sources or skips them returning true in both cases\n * used for `skipJsonSourceInit` configuration parameter\n */\n this.loadJsonConfigurations = () => (this.skipJsonConfigsLoading() ? of(true) : this.loadJsonSources());\n // empty, but needed for private constructor\n }\n init(httpClient, logger) {\n this.http = httpClient;\n this.logger = logger?.create('ConfigurationService');\n return this;\n }\n /**\n * Add commons module config.\n * @param config Module config.\n */\n addModuleConfigSource(config) {\n this.moduleConfig = config;\n this.mergeConfigs();\n this.logger?.debug(`Module configuration source added.`, this.moduleConfig);\n }\n /**\n * Add project environment source.\n * @param environment Environment.\n */\n addEnvironmentSource(environment) {\n this.projectEnvironment = environment;\n this.mergeConfigs();\n this.logger?.debug(`Environment configuration source added.`);\n }\n /**\n * Adds new config source from JSON file loaded from HTTP.\n * @param config Config for JSON file.\n * @param loadImmediately Load is by default triggered on app initialization. If immediate load is required, pass true.\n */\n addJsonSource(config = {}, loadImmediately = false) {\n if (!config) {\n config = {};\n }\n const url = config?.url ?? 'assets/config/env{{environment}}.json';\n const enableEnvProdReplace = config?.enableEnvProd ?? false;\n const sourceInfo = {\n url: url,\n isEnvironment: false,\n environmentEnableEnvProd: enableEnvProdReplace,\n isLoaded: false\n };\n this.jsonSources.push(sourceInfo);\n this.logger?.debug(`JSON configuration source added: ${url}.`);\n if (loadImmediately) {\n return this.loadJsonConfigurations();\n }\n else {\n return of(true);\n }\n }\n /**\n * Adds new config object from any object.\n * @param config Config object.\n */\n addObjectSource(config) {\n this.objectSources.push(config);\n this.logger?.debug(`Object configuration source added.`);\n this.mergeConfigs();\n }\n loadJsonSources() {\n if (!this.http) {\n this.logger?.warn('HTTP client was not initialized. Json source cannot be loaded');\n return of(false);\n }\n const httpClient = this.http;\n return combineLatest(this.jsonSources\n .filter(source => !source.isLoaded)\n .map(sourceInfo => {\n let url = sourceInfo.url;\n sourceInfo.environment = this.projectEnvironment?.name || (this.projectEnvironment?.production ? (sourceInfo.environmentEnableEnvProd ? 'prod' : null) : 'dev');\n sourceInfo.isEnvironment = !!sourceInfo.environment;\n if (sourceInfo.isEnvironment) {\n url = url.replace('{{environment}}', '.' + sourceInfo.environment);\n }\n else {\n // replace possible environment entry and change source info url\n url = url.replace('{{environment}}', '');\n sourceInfo.url = url;\n }\n this.logger?.debug(`Loading JSON configuration source from ${url}.`);\n return httpClient.get(url).pipe(catchError((err) => {\n if (sourceInfo.isEnvironment) {\n const noEnvUrl = sourceInfo.url.replace('{{environment}}', '');\n sourceInfo.environment = null;\n return httpClient.get(noEnvUrl);\n }\n else {\n this.logger?.warn(`Configuration file ${url} not loaded`, err);\n return of(false);\n }\n }), map(configuration => {\n if (typeof configuration !== 'object') {\n return false;\n }\n sourceInfo.configuration = configuration;\n sourceInfo.isLoaded = true;\n return true;\n }));\n })).pipe(map(sourceResults => sourceResults.every(sr => sr)), tap(() => this.mergeConfigs()));\n }\n /**\n * Get configuration.\n */\n getConfig() {\n return this.configuration;\n }\n /**\n * Get configuration value for key.\n * @param key Configuration key.\n */\n getConfigValue(key) {\n return this.configuration[key] ? this.configuration[key] : null;\n }\n /**\n * Gets the configuration value for the given key. If the value is not found,\n * it throws an error with a custom error message.\n *\n * @param {string} key - The configuration key.\n * @param {string} [errorMessage] - Custom error message to be thrown if the value is not found.\n *\n * @returns {T} - The configuration value.\n *\n * @throws {CommonsInternalError} - If the value is not found or a custom error message is provided.\n */\n getConfigValueOrThrow(key, errorMessage) {\n return this.getConfigValue(key) ?? throwError(errorMessage ?? `Missing configuration value for '${key}'!`, { name: 'CommonsMissingConfigError' });\n }\n /**\n * Has configuration for key.\n * @param key Configuration key.\n */\n hasConfigKey(key) {\n return Object.keys(this.configuration).some(k => k === key);\n }\n /**\n * Merges configuration from multiple sources with\n */\n mergeConfigs() {\n let config = {};\n // 1. object sources have highest priority\n if (this.objectSources.length) {\n for (const objConfig of this.objectSources) {\n config = objectDeepMerge(config, objConfig);\n }\n }\n // 2. JSON sources come next\n const jsonConfigs = this.jsonSources.filter(source => source.isLoaded && typeof source.configuration === 'object').map(source => source.configuration);\n if (jsonConfigs.length) {\n for (const jsonConfig of jsonConfigs) {\n if (jsonConfig) {\n config = objectDeepMerge(config, jsonConfig);\n }\n }\n }\n // 3. project env has the next priority\n if (this.projectEnvironment) {\n config = objectDeepMerge(config, this.projectEnvironment);\n }\n // 4. module config has the lowest priority\n if (this.moduleConfig) {\n config = objectDeepMerge(config, this.moduleConfig);\n }\n this.configuration = config;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy1jb25maWd1cmF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9zZXJ2aWNlcy9jb21tb25zLWNvbmZpZ3VyYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQWEsYUFBYSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDeEQsT0FBTyxFQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBSWxELE1BQU0sT0FBTywyQkFBMkI7YUFDckIsY0FBUyxHQUFnQyxJQUFJLDJCQUEyQixFQUFFLEFBQWpFLENBQWtFO0lBRW5GLE1BQU0sQ0FBQyxHQUFHO1FBQ2IsT0FBTywyQkFBMkIsQ0FBQyxTQUFTLENBQUM7SUFDakQsQ0FBQztJQVlEO1FBTFEsZ0JBQVcsR0FBOEIsRUFBRSxDQUFDO1FBQzVDLGtCQUFhLEdBQWUsRUFBRSxDQUFDO1FBRS9CLGtCQUFhLEdBQUcsRUFBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBQyxDQUFDO1FBdUVyRDs7V0FFRztRQUNLLDJCQUFzQixHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUVsRzs7O1dBR0c7UUFDSSwyQkFBc0IsR0FBRyxHQUF3QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQTdFM0gsNENBQTRDO0lB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QyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztJQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQge09ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QsIG9mLCB0YXB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHt0aHJvd0Vycm9yfSBmcm9tICcuLi9lcnJvci9lcnJvci1oZWxwZXJzJztcbmltcG9ydCB7b2JqZWN0RGVlcE1lcmdlfSBmcm9tICcuLi9oZWxwZXJzL29iamVjdCc7XG5pbXBvcnQge0lMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi9sb2cvbG9nLm1vZGVsJztcbmltcG9ydCB7Q29tbW9uc01vZHVsZUNvbmZpZ30gZnJvbSAnLi90b2tlbnMvbW9kdWxlLWNvbmZpZy50b2tlbic7XG5cbmV4cG9ydCBjbGFzcyBDb21tb25zQ29uZmlndXJhdGlvblNlcnZpY2Uge1xuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogQ29tbW9uc0NvbmZpZ3VyYXRpb25TZXJ2aWNlID0gbmV3IENvbW1vbnNDb25maWd1cmF0aW9uU2VydmljZSgpO1xuXG4gICAgcHVibGljIHN0YXRpYyBnZXQoKTogQ29tbW9uc0NvbmZpZ3VyYXRpb25TZXJ2aWNlIHtcbiAgICAgICAgcmV0dXJuIENvbW1vbnNDb25maWd1cmF0aW9uU2VydmljZS5faW5zdGFuY2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2dnZXI/OiBJTG9nZ2VyU2VydmljZTtcblxuICAgIHByaXZhdGUgaHR0cD86IEh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSBtb2R1bGVDb25maWc/OiBDb21tb25zTW9kdWxlQ29uZmlnO1xuICAgIHByaXZhdGUgcHJvamVjdEVudmlyb25tZW50PzogYW55O1xuICAgIHByaXZhdGUganNvblNvdXJjZXM6IEFycmF5PEpzb25Tb3VyY2VMb2FkSW5mbz4gPSBbXTtcbiAgICBwcml2YXRlIG9iamVjdFNvdXJjZXM6IEFycmF5PGFueT4gPSBbXTtcblxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvbiA9IHsuLi50aGlzLnByb2plY3RFbnZpcm9ubWVudH07XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvLyBlbXB0eSwgYnV0IG5lZWRlZCBmb3IgcHJpdmF0ZSBjb25zdHJ1Y3RvclxuICAgIH1cblxuICAgIHB1YmxpYyBpbml0KGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsIGxvZ2dlcj86IElMb2dnZXJTZXJ2aWNlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHBDbGllbnQ7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyPy5jcmVhdGUoJ0NvbmZpZ3VyYXRpb25TZXJ2aWNlJyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBjb21tb25zIG1vZHVsZSBjb25maWcuXG4gICAgICogQHBhcmFtIGNvbmZpZyBNb2R1bGUgY29uZmlnLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRNb2R1bGVDb25maWdTb3VyY2UoY29uZmlnPzogQ29tbW9uc01vZHVsZUNvbmZpZyk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vZHVsZUNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5tZXJnZUNvbmZpZ3MoKTtcbiAgICAgICAgdGhpcy5sb2dnZXI/LmRlYnVnKGBNb2R1bGUgY29uZmlndXJhdGlvbiBzb3VyY2UgYWRkZWQuYCwgdGhpcy5tb2R1bGVDb25maWcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBwcm9qZWN0IGVudmlyb25tZW50IHNvdXJjZS5cbiAgICAgKiBAcGFyYW0gZW52aXJvbm1lbnQgRW52aXJvbm1lbnQuXG4gICAgICovXG4gICAgcHVibGljIGFkZEVudmlyb25tZW50U291cmNlKGVudmlyb25tZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0RW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICAgICAgdGhpcy5tZXJnZUNvbmZpZ3MoKTtcbiAgICAgICAgdGhpcy5sb2dnZXI/LmRlYnVnKGBFbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIHNvdXJjZSBhZGRlZC5gKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIG5ldyBjb25maWcgc291cmNlIGZyb20gSlNPTiBmaWxlIGxvYWRlZCBmcm9tIEhUVFAuXG4gICAgICogQHBhcmFtIGNvbmZpZyBDb25maWcgZm9yIEpTT04gZmlsZS5cbiAgICAgKiBAcGFyYW0gbG9hZEltbWVkaWF0ZWx5IExvYWQgaXMgYnkgZGVmYXVsdCB0cmlnZ2VyZWQgb24gYXBwIGluaXRpYWxpemF0aW9uLiBJZiBpbW1lZGlhdGUgbG9hZCBpcyByZXF1aXJlZCwgcGFzcyB0cnVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRKc29uU291cmNlKGNvbmZpZzoge3VybD86IHN0cmluZzsgZW5hYmxlRW52UHJvZD86IGJvb2xlYW59ID0ge30sIGxvYWRJbW1lZGlhdGVseSA9IGZhbHNlKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgICAgICBjb25maWcgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmwgPSBjb25maWc/LnVybCA/PyAnYXNzZXRzL2NvbmZpZy9lbnZ7e2Vudmlyb25tZW50fX0uanNvbic7XG4gICAgICAgIGNvbnN0IGVuYWJsZUVudlByb2RSZXBsYWNlID0gY29uZmlnPy5lbmFibGVFbnZQcm9kID8/IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZUluZm86IEpzb25Tb3VyY2VMb2FkSW5mbyA9IHtcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgaXNFbnZpcm9ubWVudDogZmFsc2UsXG4gICAgICAgICAgICBlbnZpcm9ubWVudEVuYWJsZUVudlByb2Q6IGVuYWJsZUVudlByb2RSZXBsYWNlLFxuICAgICAgICAgICAgaXNMb2FkZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuanNvblNvdXJjZXMucHVzaChzb3VyY2VJbmZvKTtcblxuICAgICAgICB0aGlzLmxvZ2dlcj8uZGVidWcoYEpTT04gY29uZmlndXJhdGlvbiBzb3VyY2UgYWRkZWQ6ICR7dXJsfS5gKTtcblxuICAgICAgICBpZiAobG9hZEltbWVkaWF0ZWx5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkSnNvbkNvbmZpZ3VyYXRpb25zKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIG5ldyBjb25maWcgb2JqZWN0IGZyb20gYW55IG9iamVjdC5cbiAgICAgKiBAcGFyYW0gY29uZmlnIENvbmZpZyBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGFkZE9iamVjdFNvdXJjZShjb25maWc6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9iamVjdFNvdXJjZXMucHVzaChjb25maWcpO1xuICAgICAgICB0aGlzLmxvZ2dlcj8uZGVidWcoYE9iamVjdCBjb25maWd1cmF0aW9uIHNvdXJjZSBhZGRlZC5gKTtcbiAgICAgICAgdGhpcy5tZXJnZUNvbmZpZ3MoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgbm8ganNvblNvdXJjZXNcbiAgICAgKi9cbiAgICBwcml2YXRlIHNraXBKc29uQ29uZmlnc0xvYWRpbmcgPSAoKSA9PiB0aGlzLmpzb25Tb3VyY2VzID09PSBudWxsIHx8IHRoaXMuanNvblNvdXJjZXMubGVuZ3RoID09PSAwO1xuXG4gICAgLyoqXG4gICAgICogbG9hZHMganNvbiBzb3VyY2VzIG9yIHNraXBzIHRoZW0gcmV0dXJuaW5nIHRydWUgaW4gYm90aCBjYXNlc1xuICAgICAqIHVzZWQgZm9yIGBza2lwSnNvblNvdXJjZUluaXRgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyXG4gICAgICovXG4gICAgcHVibGljIGxvYWRKc29uQ29uZmlndXJhdGlvbnMgPSAoKTogT2JzZXJ2YWJsZTxib29sZWFuPiA9PiAodGhpcy5za2lwSnNvbkNvbmZpZ3NMb2FkaW5nKCkgPyBvZih0cnVlKSA6IHRoaXMubG9hZEpzb25Tb3VyY2VzKCkpO1xuXG4gICAgcHJpdmF0ZSBsb2FkSnNvblNvdXJjZXMoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIGlmICghdGhpcy5odHRwKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlcj8ud2FybignSFRUUCBjbGllbnQgd2FzIG5vdCBpbml0aWFsaXplZC4gSnNvbiBzb3VyY2UgY2Fubm90IGJlIGxvYWRlZCcpO1xuICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGh0dHBDbGllbnQgPSB0aGlzLmh0dHA7XG5cbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoXG4gICAgICAgICAgICB0aGlzLmpzb25Tb3VyY2VzXG4gICAgICAgICAgICAgICAgLmZpbHRlcihzb3VyY2UgPT4gIXNvdXJjZS5pc0xvYWRlZClcbiAgICAgICAgICAgICAgICAubWFwKHNvdXJjZUluZm8gPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gc291cmNlSW5mby51cmw7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUluZm8uZW52aXJvbm1lbnQgPSB0aGlzLnByb2plY3RFbnZpcm9ubWVudD8ubmFtZSB8fCAodGhpcy5wcm9qZWN0RW52aXJvbm1lbnQ/LnByb2R1Y3Rpb24gPyAoc291cmNlSW5mby5lbnZpcm9ubWVudEVuYWJsZUVudlByb2QgPyAncHJvZCcgOiBudWxsKSA6ICdkZXYnKTtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSW5mby5pc0Vudmlyb25tZW50ID0gISFzb3VyY2VJbmZvLmVudmlyb25tZW50O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VJbmZvLmlzRW52aXJvbm1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKCd7e2Vudmlyb25tZW50fX0nLCAnLicgKyBzb3VyY2VJbmZvLmVudmlyb25tZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UgcG9zc2libGUgZW52aXJvbm1lbnQgZW50cnkgYW5kIGNoYW5nZSBzb3VyY2UgaW5mbyB1cmxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKCd7e2Vudmlyb25tZW50fX0nLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VJbmZvLnVybCA9IHVybDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyPy5kZWJ1ZyhgTG9hZGluZyBKU09OIGNvbmZpZ3VyYXRpb24gc291cmNlIGZyb20gJHt1cmx9LmApO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBodHRwQ2xpZW50LmdldDxvYmplY3Q+KHVybCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlSW5mby5pc0Vudmlyb25tZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vRW52VXJsID0gc291cmNlSW5mby51cmwucmVwbGFjZSgne3tlbnZpcm9ubWVudH19JywgJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VJbmZvLmVudmlyb25tZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0dHBDbGllbnQuZ2V0PG9iamVjdD4obm9FbnZVcmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyPy53YXJuKGBDb25maWd1cmF0aW9uIGZpbGUgJHt1cmx9IG5vdCBsb2FkZWRgLCBlcnIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoY29uZmlndXJhdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWd1cmF0aW9uICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlSW5mby5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VJbmZvLmlzTG9hZGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApLnBpcGUoXG4gICAgICAgICAgICBtYXAoc291cmNlUmVzdWx0cyA9PiBzb3VyY2VSZXN1bHRzLmV2ZXJ5KHNyID0+IHNyKSksXG4gICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5tZXJnZUNvbmZpZ3MoKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY29uZmlndXJhdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29uZmlnKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBjb25maWd1cmF0aW9uIHZhbHVlIGZvciBrZXkuXG4gICAgICogQHBhcmFtIGtleSBDb25maWd1cmF0aW9uIGtleS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29uZmlnVmFsdWU8VCA9IGFueT4oa2V5OiBzdHJpbmcpOiBUIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb25ba2V5XSA/IHRoaXMuY29uZmlndXJhdGlvbltrZXldIDogbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb25maWd1cmF0aW9uIHZhbHVlIGZvciB0aGUgZ2l2ZW4ga2V5LiBJZiB0aGUgdmFsdWUgaXMgbm90IGZvdW5kLFxuICAgICAqIGl0IHRocm93cyBhbiBlcnJvciB3aXRoIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGNvbmZpZ3VyYXRpb24ga2V5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZXJyb3JNZXNzYWdlXSAtIEN1c3RvbSBlcnJvciBtZXNzYWdlIHRvIGJlIHRocm93biBpZiB0aGUgdmFsdWUgaXMgbm90IGZvdW5kLlxuICAgICAqXG4gICAgICogQHJldHVybnMge1R9IC0gVGhlIGNvbmZpZ3VyYXRpb24gdmFsdWUuXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIHtDb21tb25zSW50ZXJuYWxFcnJvcn0gLSBJZiB0aGUgdmFsdWUgaXMgbm90IGZvdW5kIG9yIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgaXMgcHJvdmlkZWQuXG4gICAgICovXG4gICAgcHVibGljIGdldENvbmZpZ1ZhbHVlT3JUaHJvdzxUID0gYW55PihrZXk6IHN0cmluZywgZXJyb3JNZXNzYWdlPzogc3RyaW5nKTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbmZpZ1ZhbHVlKGtleSkgPz8gdGhyb3dFcnJvcihlcnJvck1lc3NhZ2UgPz8gYE1pc3NpbmcgY29uZmlndXJhdGlvbiB2YWx1ZSBmb3IgJyR7a2V5fSchYCwge25hbWU6ICdDb21tb25zTWlzc2luZ0NvbmZpZ0Vycm9yJ30pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhcyBjb25maWd1cmF0aW9uIGZvciBrZXkuXG4gICAgICogQHBhcmFtIGtleSBDb25maWd1cmF0aW9uIGtleS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaGFzQ29uZmlnS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbmZpZ3VyYXRpb24pLnNvbWUoayA9PiBrID09PSBrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1lcmdlcyBjb25maWd1cmF0aW9uIGZyb20gbXVsdGlwbGUgc291cmNlcyB3aXRoXG4gICAgICovXG4gICAgcHJpdmF0ZSBtZXJnZUNvbmZpZ3MoKSB7XG4gICAgICAgIGxldCBjb25maWcgPSB7fTtcblxuICAgICAgICAvLyAxLiBvYmplY3Qgc291cmNlcyBoYXZlIGhpZ2hlc3QgcHJpb3JpdHlcbiAgICAgICAgaWYgKHRoaXMub2JqZWN0U291cmNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgb2JqQ29uZmlnIG9mIHRoaXMub2JqZWN0U291cmNlcykge1xuICAgICAgICAgICAgICAgIGNvbmZpZyA9IG9iamVjdERlZXBNZXJnZShjb25maWcsIG9iakNvbmZpZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBKU09OIHNvdXJjZXMgY29tZSBuZXh0XG4gICAgICAgIGNvbnN0IGpzb25Db25maWdzID0gdGhpcy5qc29uU291cmNlcy5maWx0ZXIoc291cmNlID0+IHNvdXJjZS5pc0xvYWRlZCAmJiB0eXBlb2Ygc291cmNlLmNvbmZpZ3VyYXRpb24gPT09ICdvYmplY3QnKS5tYXAoc291cmNlID0+IHNvdXJjZS5jb25maWd1cmF0aW9uKTtcbiAgICAgICAgaWYgKGpzb25Db25maWdzLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBqc29uQ29uZmlnIG9mIGpzb25Db25maWdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGpzb25Db25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnID0gb2JqZWN0RGVlcE1lcmdlKGNvbmZpZywganNvbkNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gcHJvamVjdCBlbnYgaGFzIHRoZSBuZXh0IHByaW9yaXR5XG4gICAgICAgIGlmICh0aGlzLnByb2plY3RFbnZpcm9ubWVudCkge1xuICAgICAgICAgICAgY29uZmlnID0gb2JqZWN0RGVlcE1lcmdlKGNvbmZpZywgdGhpcy5wcm9qZWN0RW52aXJvbm1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4gbW9kdWxlIGNvbmZpZyBoYXMgdGhlIGxvd2VzdCBwcmlvcml0eVxuICAgICAgICBpZiAodGhpcy5tb2R1bGVDb25maWcpIHtcbiAgICAgICAgICAgIGNvbmZpZyA9IG9iamVjdERlZXBNZXJnZShjb25maWcsIHRoaXMubW9kdWxlQ29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZztcbiAgICB9XG59XG5cbmludGVyZmFjZSBKc29uU291cmNlTG9hZEluZm8ge1xuICAgIHVybDogc3RyaW5nO1xuICAgIGlzTG9hZGVkOiBib29sZWFuO1xuICAgIGlzRW52aXJvbm1lbnQ6IGJvb2xlYW47XG4gICAgZW52aXJvbm1lbnQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIGVudmlyb25tZW50RW5hYmxlRW52UHJvZD86IGJvb2xlYW47XG4gICAgY29uZmlndXJhdGlvbj86IG9iamVjdDtcbn1cbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, RouteConfigLoadEnd, RouteConfigLoadStart, Router } from '@angular/router';\nimport { ReplaySubject } from 'rxjs';\nimport { first } from 'rxjs/operators';\nimport { LoggerService } from '../log/logger.service';\nimport * as i0 from \"@angular/core\";\nexport class CommonsRouterService {\n constructor() {\n this.router = inject(Router);\n this.logger = inject(LoggerService).create('CommonsRouterService');\n this.routesLoadedPropKey = '_loadedRoutes';\n this.currentNavigationModuleKeys = [];\n this.lazyLoadedRoutesConfig = {};\n this.router.events.pipe(takeUntilDestroyed()).subscribe(event => {\n if (event instanceof NavigationStart) {\n this.startNavigation(event.url);\n }\n else if (event instanceof RouteConfigLoadStart) {\n this.markNavigationConfigLoad(event.route);\n }\n else if (event instanceof RouteConfigLoadEnd) {\n this.markNavigationConfigLoad(event.route, true);\n }\n else if (event instanceof NavigationEnd || event instanceof NavigationCancel || event instanceof NavigationError) {\n this.finishNavigation();\n }\n });\n }\n getRouteLoadedChildren(path) {\n return this.getOrCreateRouteForModule(this.getModulePathFromRouterLink(path)).loadedRoutes;\n }\n getRouteLoadedChildren$(path) {\n return this.getOrCreateRouteForModule(this.getModulePathFromRouterLink(path)).loadedRoutesSubject.asObservable().pipe(first());\n }\n initialize() {\n this.logger.debug('Initialized.');\n }\n startNavigation(url) {\n this.currentNavigationPath = url.split('?')[0].split('#')[0];\n this.currentNavigationModuleKeys = [];\n }\n finishNavigation() {\n if (this.currentNavigationModuleKeys.length) {\n this.currentNavigationModuleKeys.forEach(k => this.getLoadedRoutesFromRoute(k, true));\n }\n this.currentNavigationPath = undefined;\n }\n markNavigationConfigLoad(route, isEnd = false) {\n const routePath = route.path ?? '';\n let moduleKey = routePath;\n const currentNavigationPathRoutePathIdx = this.currentNavigationPath?.indexOf(routePath) ?? -1;\n if (this.currentNavigationPath && currentNavigationPathRoutePathIdx >= 0) {\n moduleKey = this.currentNavigationPath.substring(0, currentNavigationPathRoutePathIdx + routePath.length);\n }\n else if (this.currentNavigationPath && routePath !== this.currentNavigationPath && !routePath.startsWith('/')) {\n // usually means that redirect to currentNavigationPath was done, additionally, route path was also triggered on lazy routes load\n moduleKey = `${this.currentNavigationPath}/${routePath}`;\n }\n if (!isEnd && this.currentNavigationModuleKeys.indexOf(moduleKey) < 0) {\n this.currentNavigationModuleKeys.push(moduleKey);\n }\n this.logger.trace(`Config load ${isEnd ? 'end' : 'start'} for ${moduleKey} (routePath: ${routePath}; navigationUrl: ${this.currentNavigationPath})`);\n const config = this.getOrCreateRouteForModule(moduleKey);\n config.route = route;\n config.isLoadEnd = isEnd;\n if (isEnd) {\n this.getLoadedRoutesFromRoute(moduleKey);\n }\n }\n getLoadedRoutesFromRoute(moduleKey, isFinish = false) {\n const moduleConfig = this.lazyLoadedRoutesConfig[moduleKey];\n if (!moduleConfig?.route || Array.isArray(moduleConfig.loadedRoutes)) {\n return;\n }\n moduleConfig.loadedRoutes = moduleConfig.route[this.routesLoadedPropKey];\n if (!Array.isArray(moduleConfig.loadedRoutes) && isFinish) {\n // if is called from finish and no lazy loaded routes are matched from router events, try finding in route config, it should be there!\n this.logger.trace(`Route loadedRoutes for ${moduleKey} not found, searching in router config now`);\n const route = this.findRouteInRouteConfig(moduleKey);\n if (route) {\n moduleConfig.route = route;\n moduleConfig.loadedRoutes = moduleConfig.route[this.routesLoadedPropKey];\n }\n else {\n this.logger.warn(`Route loadedRoutes for ${moduleKey} were not found in router config`);\n }\n }\n if (typeof moduleConfig.loadedRoutes !== 'undefined') {\n moduleConfig.loadedRoutesSubject.next(moduleConfig.loadedRoutes);\n moduleConfig.loadedRoutesSubject.complete();\n this.logger.trace(`Config load for ${moduleKey} is complete`, moduleConfig);\n }\n }\n /**\n * Search for route config by module path by recursive scanning of router config tree.\n * @param modulePath Path of module that is searched.\n * @param routes Routes to be scanned. If not provided, it starts on root router config.\n * @private\n */\n findRouteInRouteConfig(modulePath, routes = this.router.config) {\n if (modulePath.startsWith('/')) {\n modulePath = modulePath.substring(1);\n }\n for (const route of routes) {\n if (typeof route.path === 'undefined') {\n continue;\n }\n let routePath = route.path;\n if (routePath.startsWith('/')) {\n routePath = routePath.substring(1);\n }\n const longestPathMatch = this.findLongestPathMatch(modulePath, routePath);\n if (longestPathMatch === null) {\n continue;\n }\n // there is a partial or full match\n if (route.loadChildren && modulePath === longestPathMatch) {\n // it's a hit!\n return route;\n }\n else if (route.loadChildren && Array.isArray(route[this.routesLoadedPropKey])) {\n const result = this.findRouteInRouteConfig(modulePath.substring(longestPathMatch.length, modulePath.length), route[this.routesLoadedPropKey]);\n if (result) {\n return result;\n }\n }\n else if (route.children) {\n const result = this.findRouteInRouteConfig(modulePath.substring(longestPathMatch.length, modulePath.length), route.children);\n if (result) {\n return result;\n }\n }\n }\n return null;\n }\n /**\n * Finds longest path match of source to match string. If match is '', it is considered as a match in Angular routing.\n * @param source Source string from on which comparison is based.\n * @param match Match string to which the source is matched to.\n * @private\n */\n findLongestPathMatch(source, match) {\n const sourceSegments = source.split('/');\n const matchSegments = match.split('/');\n if (matchSegments.length === 1 && matchSegments[0] === '') {\n // it's a hit, because empty route must always be processed (kind of a \"abstract\" route)\n return '';\n }\n if (sourceSegments[0] === matchSegments[0]) {\n // there is a match, find how long it is\n for (let i = 1; i < sourceSegments.length; i++) {\n if (sourceSegments[i] !== matchSegments[i]) {\n // end of match\n return sourceSegments.slice(0, i).join('/');\n }\n }\n // there is full match\n return sourceSegments.join('/');\n }\n return null;\n }\n getOrCreateRouteForModule(moduleKey) {\n if (!this.lazyLoadedRoutesConfig[moduleKey]) {\n this.lazyLoadedRoutesConfig[moduleKey] = {\n loadedRoutesSubject: new ReplaySubject(1),\n isLoadEnd: false\n };\n }\n return this.lazyLoadedRoutesConfig[moduleKey];\n }\n getModulePathFromRouterLink(path) {\n return ('/' + (Array.isArray(path) ? path.join('/') : path)).replace(/\\/\\//g, '/');\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsRouterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsRouterService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsRouterService, decorators: [{\n type: Injectable\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy1yb3V0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL3NlcnZpY2VzL2NvbW1vbnMtcm91dGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFDLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFTLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBUyxNQUFNLGlCQUFpQixDQUFDO0FBRW5LLE9BQU8sRUFBYSxhQUFhLEVBQVUsTUFBTSxNQUFNLENBQUM7QUFDeEQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7QUFHcEQsTUFBTSxPQUFPLG9CQUFvQjtJQWlCN0I7UUFoQmlCLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUM5RCx3QkFBbUIsR0FBRyxlQUFlLENBQUM7UUFHL0MsZ0NBQTJCLEdBQWEsRUFBRSxDQUFDO1FBRTNDLDJCQUFzQixHQU8xQixFQUFFLENBQUM7UUFHSCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM1RCxJQUFJLEtBQUssWUFBWSxlQUFlLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEMs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LENBQUMsQ0FBQztnQkFDakQsU0FBUyxFQUFFLEtBQUs7YUFDbkIsQ0FBQztRQUNOLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU8sMkJBQTJCLENBQUMsSUFBNEI7UUFDNUQsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN2RixDQUFDOzhHQXZNUSxvQkFBb0I7a0hBQXBCLG9CQUFvQjs7MkZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge05hdmlnYXRpb25DYW5jZWwsIE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25FcnJvciwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZSwgUm91dGVDb25maWdMb2FkRW5kLCBSb3V0ZUNvbmZpZ0xvYWRTdGFydCwgUm91dGVyLCBSb3V0ZXN9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpcnN0fSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vbG9nL2xvZ2dlci5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbW1vbnNSb3V0ZXJTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gaW5qZWN0KExvZ2dlclNlcnZpY2UpLmNyZWF0ZSgnQ29tbW9uc1JvdXRlclNlcnZpY2UnKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlc0xvYWRlZFByb3BLZXkgPSAnX2xvYWRlZFJvdXRlcyc7XG5cbiAgICBwcml2YXRlIGN1cnJlbnROYXZpZ2F0aW9uUGF0aD86IHN0cmluZztcbiAgICBwcml2YXRlIGN1cnJlbnROYXZpZ2F0aW9uTW9kdWxlS2V5czogc3RyaW5nW10gPSBbXTtcblxuICAgIHByaXZhdGUgbGF6eUxvYWRlZFJvdXRlc0NvbmZpZzoge1xuICAgICAgICBbcGF0aDogc3RyaW5nXToge1xuICAgICAgICAgICAgcm91dGU/OiBSb3V0ZTtcbiAgICAgICAgICAgIGlzTG9hZEVuZDogYm9vbGVhbjtcbiAgICAgICAgICAgIGxvYWRlZFJvdXRlcz86IFJvdXRlcztcbiAgICAgICAgICAgIGxvYWRlZFJvdXRlc1N1YmplY3Q6IFN1YmplY3Q8Um91dGVzPjtcbiAgICAgICAgfTtcbiAgICB9ID0ge307XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0TmF2aWdhdGlvbihldmVudC51cmwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIFJvdXRlQ29uZmlnTG9hZFN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXJrTmF2aWdhdGlvbkNvbmZpZ0xvYWQoZXZlbnQucm91dGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIFJvdXRlQ29uZmlnTG9hZEVuZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFya05hdmlnYXRpb25Db25maWdMb2FkKGV2ZW50LnJvdXRlLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kIHx8IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkNhbmNlbCB8fCBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Um91dGVMb2FkZWRDaGlsZHJlbihwYXRoOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+KTogUm91dGVzIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JDcmVhdGVSb3V0ZUZvck1vZHVsZSh0aGlzLmdldE1vZHVsZVBhdGhGcm9tUm91dGVyTGluayhwYXRoKSkubG9hZGVkUm91dGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSb3V0ZUxvYWRlZENoaWxkcmVuJChwYXRoOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+KTogT2JzZXJ2YWJsZTxSb3V0ZXM+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JDcmVhdGVSb3V0ZUZvck1vZHVsZSh0aGlzLmdldE1vZHVsZVBhdGhGcm9tUm91dGVyTGluayhwYXRoKSkubG9hZGVkUm91dGVzU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGZpcnN0KCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbml0aWFsaXplKCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5pdGlhbGl6ZWQuJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydE5hdmlnYXRpb24odXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50TmF2aWdhdGlvblBhdGggPSB1cmwuc3BsaXQoJz8nKVswXS5zcGxpdCgnIycpWzBdO1xuICAgICAgICB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uTW9kdWxlS2V5cyA9IFtdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluaXNoTmF2aWdhdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudE5hdmlnYXRpb25Nb2R1bGVLZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50TmF2aWdhdGlvbk1vZHVsZUtleXMuZm9yRWFjaChrID0+IHRoaXMuZ2V0TG9hZGVkUm91dGVzRnJvbVJvdXRlKGssIHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uUGF0aCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1hcmtOYXZpZ2F0aW9uQ29uZmlnTG9hZChyb3V0ZTogUm91dGUsIGlzRW5kID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qgcm91dGVQYXRoID0gcm91dGUucGF0aCA/PyAnJztcblxuICAgICAgICBsZXQgbW9kdWxlS2V5ID0gcm91dGVQYXRoO1xuICAgICAgICBjb25zdCBjdXJyZW50TmF2aWdhdGlvblBhdGhSb3V0ZVBhdGhJZHggPSB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uUGF0aD8uaW5kZXhPZihyb3V0ZVBhdGgpID8/IC0xO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50TmF2aWdhdGlvblBhdGggJiYgY3VycmVudE5hdmlnYXRpb25QYXRoUm91dGVQYXRoSWR4ID49IDApIHtcbiAgICAgICAgICAgIG1vZHVsZUtleSA9IHRoaXMuY3VycmVudE5hdmlnYXRpb25QYXRoLnN1YnN0cmluZygwLCBjdXJyZW50TmF2aWdhdGlvblBhdGhSb3V0ZVBhdGhJZHggKyByb3V0ZVBhdGgubGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnROYXZpZ2F0aW9uUGF0aCAmJiByb3V0ZVBhdGggIT09IHRoaXMuY3VycmVudE5hdmlnYXRpb25QYXRoICYmICFyb3V0ZVBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAvLyB1c3VhbGx5IG1lYW5zIHRoYXQgcmVkaXJlY3QgdG8gY3VycmVudE5hdmlnYXRpb25QYXRoIHdhcyBkb25lLCBhZGRpdGlvbmFsbHksIHJvdXRlIHBhdGggd2FzIGFsc28gdHJpZ2dlcmVkIG9uIGxhenkgcm91dGVzIGxvYWRcbiAgICAgICAgICAgIG1vZHVsZUtleSA9IGAke3RoaXMuY3VycmVudE5hdmlnYXRpb25QYXRofS8ke3JvdXRlUGF0aH1gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0VuZCAmJiB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uTW9kdWxlS2V5cy5pbmRleE9mKG1vZHVsZUtleSkgPCAwKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uTW9kdWxlS2V5cy5wdXNoKG1vZHVsZUtleSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShgQ29uZmlnIGxvYWQgJHtpc0VuZCA/ICdlbmQnIDogJ3N0YXJ0J30gZm9yICR7bW9kdWxlS2V5fSAocm91dGVQYXRoOiAke3JvdXRlUGF0aH07IG5hdmlnYXRpb25Vcmw6ICR7dGhpcy5jdXJyZW50TmF2aWdhdGlvblBhdGh9KWApO1xuXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0T3JDcmVhdGVSb3V0ZUZvck1vZHVsZShtb2R1bGVLZXkpO1xuICAgICAgICBjb25maWcucm91dGUgPSByb3V0ZTtcbiAgICAgICAgY29uZmlnLmlzTG9hZEVuZCA9IGlzRW5kO1xuXG4gICAgICAgIGlmIChpc0VuZCkge1xuICAgICAgICAgICAgdGhpcy5nZXRMb2FkZWRSb3V0ZXNGcm9tUm91dGUobW9kdWxlS2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TG9hZGVkUm91dGVzRnJvbVJvdXRlKG1vZHVsZUtleTogc3RyaW5nLCBpc0ZpbmlzaCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZUNvbmZpZyA9IHRoaXMubGF6eUxvYWRlZFJvdXRlc0NvbmZpZ1ttb2R1bGVLZXldO1xuICAgICAgICBpZiAoIW1vZHVsZUNvbmZpZz8ucm91dGUgfHwgQXJyYXkuaXNBcnJheShtb2R1bGVDb25maWcubG9hZGVkUm91dGVzKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbW9kdWxlQ29uZmlnLmxvYWRlZFJvdXRlcyA9IG1vZHVsZUNvbmZpZy5yb3V0ZSFbdGhpcy5yb3V0ZXNMb2FkZWRQcm9wS2V5IGFzIGtleW9mIG9iamVjdF07XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1vZHVsZUNvbmZpZy5sb2FkZWRSb3V0ZXMpICYmIGlzRmluaXNoKSB7XG4gICAgICAgICAgICAvLyBpZiBpcyBjYWxsZWQgZnJvbSBmaW5pc2ggYW5kIG5vIGxhenkgbG9hZGVkIHJvdXRlcyBhcmUgbWF0Y2hlZCBmcm9tIHJvdXRlciBldmVudHMsIHRyeSBmaW5kaW5nIGluIHJvdXRlIGNvbmZpZywgaXQgc2hvdWxkIGJlIHRoZXJlIVxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYFJvdXRlIGxvYWRlZFJvdXRlcyBmb3IgJHttb2R1bGVLZXl9IG5vdCBmb3VuZCwgc2VhcmNoaW5nIGluIHJvdXRlciBjb25maWcgbm93YCk7XG4gICAgICAgICAgICBjb25zdCByb3V0ZSA9IHRoaXMuZmluZFJvdXRlSW5Sb3V0ZUNvbmZpZyhtb2R1bGVLZXkpO1xuICAgICAgICAgICAgaWYgKHJvdXRlKSB7XG4gICAgICAgICAgICAgICAgbW9kdWxlQ29uZmlnLnJvdXRlID0gcm91dGU7XG4gICAgICAgICAgICAgICAgbW9kdWxlQ29uZmlnLmxvYWRlZFJvdXRlcyA9IG1vZHVsZUNvbmZpZy5yb3V0ZSFbdGhpcy5yb3V0ZXNMb2FkZWRQcm9wS2V5IGFzIGtleW9mIG9iamVjdF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYFJvdXRlIGxvYWRlZFJvdXRlcyBmb3IgJHttb2R1bGVLZXl9IHdlcmUgbm90IGZvdW5kIGluIHJvdXRlciBjb25maWdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlQ29uZmlnLmxvYWRlZFJvdXRlcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIG1vZHVsZUNvbmZpZy5sb2FkZWRSb3V0ZXNTdWJqZWN0Lm5leHQobW9kdWxlQ29uZmlnLmxvYWRlZFJvdXRlcyEpO1xuICAgICAgICAgICAgbW9kdWxlQ29uZmlnLmxvYWRlZFJvdXRlc1N1YmplY3QuY29tcGxldGUoKTtcblxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYENvbmZpZyBsb2FkIGZvciAke21vZHVsZUtleX0gaXMgY29tcGxldGVgLCBtb2R1bGVDb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VhcmNoIGZvciByb3V0ZSBjb25maWcgYnkgbW9kdWxlIHBhdGggYnkgcmVjdXJzaXZlIHNjYW5uaW5nIG9mIHJvdXRlciBjb25maWcgdHJlZS5cbiAgICAgKiBAcGFyYW0gbW9kdWxlUGF0aCBQYXRoIG9mIG1vZHVsZSB0aGF0IGlzIHNlYXJjaGVkLlxuICAgICAqIEBwYXJhbSByb3V0ZXMgUm91dGVzIHRvIGJlIHNjYW5uZWQuIElmIG5vdCBwcm92aWRlZCwgaXQgc3RhcnRzIG9uIHJvb3Qgcm91dGVyIGNvbmZpZy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgZmluZFJvdXRlSW5Sb3V0ZUNvbmZpZyhtb2R1bGVQYXRoOiBzdHJpbmcsIHJvdXRlczogUm91dGVzID0gdGhpcy5yb3V0ZXIuY29uZmlnKTogUm91dGUgfCBudWxsIHtcbiAgICAgICAgaWYgKG1vZHVsZVBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICBtb2R1bGVQYXRoID0gbW9kdWxlUGF0aC5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByb3V0ZS5wYXRoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHJvdXRlUGF0aCA9IHJvdXRlLnBhdGg7XG4gICAgICAgICAgICBpZiAocm91dGVQYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIHJvdXRlUGF0aCA9IHJvdXRlUGF0aC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvbmdlc3RQYXRoTWF0Y2ggPSB0aGlzLmZpbmRMb25nZXN0UGF0aE1hdGNoKG1vZHVsZVBhdGgsIHJvdXRlUGF0aCk7XG4gICAgICAgICAgICBpZiAobG9uZ2VzdFBhdGhNYXRjaCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0aGVyZSBpcyBhIHBhcnRpYWwgb3IgZnVsbCBtYXRjaFxuICAgICAgICAgICAgaWYgKHJvdXRlLmxvYWRDaGlsZHJlbiAmJiBtb2R1bGVQYXRoID09PSBsb25nZXN0UGF0aE1hdGNoKSB7XG4gICAgICAgICAgICAgICAgLy8gaXQncyBhIGhpdCFcbiAgICAgICAgICAgICAgICByZXR1cm4gcm91dGU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJvdXRlLmxvYWRDaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KHJvdXRlW3RoaXMucm91dGVzTG9hZGVkUHJvcEtleSBhcyBrZXlvZiBvYmplY3RdKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZFJvdXRlSW5Sb3V0ZUNvbmZpZyhtb2R1bGVQYXRoLnN1YnN0cmluZyhsb25nZXN0UGF0aE1hdGNoLmxlbmd0aCwgbW9kdWxlUGF0aC5sZW5ndGgpLCByb3V0ZVt0aGlzLnJvdXRlc0xvYWRlZFByb3BLZXkgYXMga2V5b2Ygb2JqZWN0XSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocm91dGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZpbmRSb3V0ZUluUm91dGVDb25maWcobW9kdWxlUGF0aC5zdWJzdHJpbmcobG9uZ2VzdFBhdGhNYXRjaC5sZW5ndGgsIG1vZHVsZVBhdGgubGVuZ3RoKSwgcm91dGUuY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBsb25nZXN0IHBhdGggbWF0Y2ggb2Ygc291cmNlIHRvIG1hdGNoIHN0cmluZy4gSWYgbWF0Y2ggaXMgJycsIGl0IGlzIGNvbnNpZGVyZWQgYXMgYSBtYXRjaCBpbiBBbmd1bGFyIHJvdXRpbmcuXG4gICAgICogQHBhcmFtIHNvdXJjZSBTb3VyY2Ugc3RyaW5nIGZyb20gb24gd2hpY2ggY29tcGFyaXNvbiBpcyBiYXNlZC5cbiAgICAgKiBAcGFyYW0gbWF0Y2ggTWF0Y2ggc3RyaW5nIHRvIHdoaWNoIHRoZSBzb3VyY2UgaXMgbWF0Y2hlZCB0by5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgZmluZExvbmdlc3RQYXRoTWF0Y2goc291cmNlOiBzdHJpbmcsIG1hdGNoOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgY29uc3Qgc291cmNlU2VnbWVudHMgPSBzb3VyY2Uuc3BsaXQoJy8nKTtcbiAgICAgICAgY29uc3QgbWF0Y2hTZWdtZW50cyA9IG1hdGNoLnNwbGl0KCcvJyk7XG5cbiAgICAgICAgaWYgKG1hdGNoU2VnbWVudHMubGVuZ3RoID09PSAxICYmIG1hdGNoU2VnbWVudHNbMF0gPT09ICcnKSB7XG4gICAgICAgICAgICAvLyBpdCdzIGEgaGl0LCBiZWNhdXNlIGVtcHR5IHJvdXRlIG11c3QgYWx3YXlzIGJlIHByb2Nlc3NlZCAoa2luZCBvZiBhIFwiYWJzdHJhY3RcIiByb3V0ZSlcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzb3VyY2VTZWdtZW50c1swXSA9PT0gbWF0Y2hTZWdtZW50c1swXSkge1xuICAgICAgICAgICAgLy8gdGhlcmUgaXMgYSBtYXRjaCwgZmluZCBob3cgbG9uZyBpdCBpc1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBzb3VyY2VTZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2VTZWdtZW50c1tpXSAhPT0gbWF0Y2hTZWdtZW50c1tpXSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBlbmQgb2YgbWF0Y2hcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZVNlZ21lbnRzLnNsaWNlKDAsIGkpLmpvaW4oJy8nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHRoZXJlIGlzIGZ1bGwgbWF0Y2hcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2VTZWdtZW50cy5qb2luKCcvJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yQ3JlYXRlUm91dGVGb3JNb2R1bGUobW9kdWxlS2V5OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxhenlMb2FkZWRSb3V0ZXNDb25maWdbbW9kdWxlS2V5XSkge1xuICAgICAgICAgICAgdGhpcy5sYXp5TG9hZGVkUm91dGVzQ29uZmlnW21vZHVsZUtleV0gPSB7XG4gICAgICAgICAgICAgICAgbG9hZGVkUm91dGVzU3ViamVjdDogbmV3IFJlcGxheVN1YmplY3Q8Um91dGVzPigxKSxcbiAgICAgICAgICAgICAgICBpc0xvYWRFbmQ6IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubGF6eUxvYWRlZFJvdXRlc0NvbmZpZ1ttb2R1bGVLZXldO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TW9kdWxlUGF0aEZyb21Sb3V0ZXJMaW5rKHBhdGg6IHN0cmluZyB8IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgcmV0dXJuICgnLycgKyAoQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGguam9pbignLycpIDogcGF0aCkpLnJlcGxhY2UoL1xcL1xcLy9nLCAnLycpO1xuICAgIH1cbn1cbiJdfQ==","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { ReplaySubject, Subject, combineLatest, mergeMap, of, take, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { LoggerService } from '../log/logger.service';\nimport { CommonsConfigurationService } from './commons-configuration.service';\nimport { CommonsRouterService } from './commons-router.service';\nimport { CommonsService } from './commons.service';\nimport { COMMONS_INITIALIZER_IT } from './tokens/commons-init.token';\nimport { LOG_PUBLISHERS } from './tokens/log-publisher.token';\nimport { COMMONS_MODULE_CONFIG_IT } from './tokens/module-config.token';\nimport * as i0 from \"@angular/core\";\nexport var CommonsInitEventEnum;\n(function (CommonsInitEventEnum) {\n CommonsInitEventEnum[CommonsInitEventEnum[\"CommonsInitStart\"] = 0] = \"CommonsInitStart\";\n CommonsInitEventEnum[CommonsInitEventEnum[\"ConfigSourceModuleLoaded\"] = 1] = \"ConfigSourceModuleLoaded\";\n CommonsInitEventEnum[CommonsInitEventEnum[\"ConfigSourceProjectEnvLoaded\"] = 2] = \"ConfigSourceProjectEnvLoaded\";\n CommonsInitEventEnum[CommonsInitEventEnum[\"ConfigSourceJsonAdded\"] = 3] = \"ConfigSourceJsonAdded\";\n CommonsInitEventEnum[CommonsInitEventEnum[\"ConfigSourceJsonLoaded\"] = 4] = \"ConfigSourceJsonLoaded\";\n CommonsInitEventEnum[CommonsInitEventEnum[\"CommonsInitEnd\"] = 5] = \"CommonsInitEnd\";\n CommonsInitEventEnum[CommonsInitEventEnum[\"CommonsInitError\"] = 6] = \"CommonsInitError\";\n})(CommonsInitEventEnum || (CommonsInitEventEnum = {}));\nexport class CommonsInitService {\n constructor() {\n this.logger = inject(LoggerService);\n this.logPublishers = inject(LOG_PUBLISHERS, { optional: true });\n this.config = inject(CommonsConfigurationService);\n this.commons = inject(CommonsService);\n this.commonsRouter = inject(CommonsRouterService);\n this.moduleConfig = inject(COMMONS_MODULE_CONFIG_IT, { optional: true });\n this.commonsInitializers = inject(COMMONS_INITIALIZER_IT, { optional: true });\n this.isInitialized = false;\n this.isInitializedSubject = new ReplaySubject();\n this.commonsInitServiceEvents = new Subject();\n }\n get events$() {\n return this.commonsInitServiceEvents.asObservable();\n }\n get isInitialized$() {\n return this.isInitializedSubject.asObservable().pipe(take(1));\n }\n initialize(handler) {\n if (this.isInitialized) {\n return of(void 0);\n }\n this.isInitialized = true;\n LoggerService.configure({ timestampFormat: this.moduleConfig?.log?.timestampFormat });\n const ctxLogger = this.logger.create('CommonsInitService');\n ctxLogger.debug('Commons initialization is starting');\n this.commonsInitServiceEvents.next(CommonsInitEventEnum.CommonsInitStart);\n // init http client\n this.httpClient = new HttpClient(handler);\n // init router\n this.commonsRouter.initialize();\n // init configurations with settings from module config\n this.config.init(this.httpClient, this.logger);\n this.config.addModuleConfigSource(this.moduleConfig ?? undefined);\n this.commonsInitServiceEvents.next(CommonsInitEventEnum.ConfigSourceModuleLoaded);\n if (this.moduleConfig?.configuration?.projectEnvironment) {\n this.config.addEnvironmentSource(this.moduleConfig.configuration.projectEnvironment);\n this.commonsInitServiceEvents.next(CommonsInitEventEnum.ConfigSourceProjectEnvLoaded);\n }\n // init configurations with settings from module config for json source\n if (!(this.moduleConfig?.configuration?.skipJsonSourceInit ?? false)) {\n const jsonSourceEnableEnvProd = this.moduleConfig?.configuration?.jsonSourceEnableEnvProd ?? false;\n const jsonSource = this.moduleConfig?.configuration?.jsonSource;\n if (!jsonSource) {\n this.config.addJsonSource({ enableEnvProd: jsonSourceEnableEnvProd });\n }\n else if (Array.isArray(jsonSource)) {\n jsonSource.forEach(source => this.config.addJsonSource({ url: source, enableEnvProd: jsonSourceEnableEnvProd }));\n }\n else {\n this.config.addJsonSource({ url: jsonSource, enableEnvProd: jsonSourceEnableEnvProd });\n }\n this.commonsInitServiceEvents.next(CommonsInitEventEnum.ConfigSourceJsonAdded);\n }\n return this.config.loadJsonConfigurations().pipe(mergeMap(() => {\n if (!(this.moduleConfig?.configuration?.skipJsonSourceInit ?? false)) {\n this.commonsInitServiceEvents.next(CommonsInitEventEnum.ConfigSourceJsonLoaded);\n }\n // init logger\n LoggerService.init(this.config, this.logPublishers ?? []);\n if (this.commonsInitializers) {\n ctxLogger.debug('Project initializers are being initialized');\n return combineLatest(this.commonsInitializers.map(ci => ci())).pipe(map(res => res));\n }\n else {\n return of(true);\n }\n }), map(() => {\n ctxLogger.debug('Commons initialization is finished');\n this.commonsInitServiceEvents.next(CommonsInitEventEnum.CommonsInitEnd);\n this.commonsInitServiceEvents.complete();\n this.isInitializedSubject.next(true);\n return this.commons.initialize();\n }), catchError(err => {\n ctxLogger.warn('Commons initialization failed with error', err);\n this.commonsInitServiceEvents.next(CommonsInitEventEnum.CommonsInitError);\n this.commonsInitServiceEvents.complete();\n this.isInitializedSubject.next(false);\n return throwError(() => err);\n }));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsInitService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsInitService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsInitService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy1pbml0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9zZXJ2aWNlcy9jb21tb25zLWluaXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFhLGFBQWEsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN2RyxPQUFPLEVBQUMsVUFBVSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRS9DLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDOztBQUV0RSxNQUFNLENBQU4sSUFBWSxvQkFRWDtBQVJELFdBQVksb0JBQW9CO0lBQzVCLHVGQUFnQixDQUFBO0lBQ2hCLHVHQUF3QixDQUFBO0lBQ3hCLCtHQUE0QixDQUFBO0lBQzVCLGlHQUFxQixDQUFBO0lBQ3JCLG1HQUFzQixDQUFBO0lBQ3RCLG1GQUFjLENBQUE7SUFDZCx1RkFBZ0IsQ0FBQTtBQUNwQixDQUFDLEVBUlcsb0JBQW9CLEtBQXBCLG9CQUFvQixRQVEvQjtBQUdELE1BQU0sT0FBTyxrQkFBa0I7SUFEL0I7UUFFcUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvQixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxjQUFjLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUN6RCxXQUFNLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDN0MsWUFBTyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNqQyxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzdDLGlCQUFZLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFDbEUsd0JBQW1CLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFFaEYsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFJdEIseUJBQW9CLEdBQUcsSUFBSSxhQUFhLEVBQVcsQ0FBQztRQUNwRCw2QkFBd0IsR0FBRyxJQUFJLE9BQU8sRUFBd0IsQ0FBQztLQWtGMUU7SUFoRkcsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVELElBQVcsY0FBYztRQUNyQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVNLFVBQVUsQ0FBQyxPQUFvQjtRQUNsQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUUxQixhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBQyxDQUFDLENBQUM7UUFFcEYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUMzRCxTQUFTLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTFFLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTFDLGNBQWM7UUFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWhDLHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksU0FBUyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ2xGLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDckYsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQzFGLENBQUM7UUFFRCx1RUFBdUU7UUFDdkUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsa0JBQWtCLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuRSxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLHVCQUF1QixJQUFJLEtBQUssQ0FBQztZQUNuRyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUM7WUFDaEUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUMsYUFBYSxFQUFFLHVCQUF1QixFQUFDLENBQUMsQ0FBQztZQUN4RSxDQUFDO2lCQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSx1QkFBdUIsRUFBQyxDQUFDLENBQUMsQ0FBQztZQUNuSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSx1QkFBdUIsRUFBQyxDQUFDLENBQUM7WUFDekYsQ0FBQztZQUNELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNuRixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixFQUFFLENBQUMsSUFBSSxDQUM1QyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsa0JBQWtCLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDbkUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3BGLENBQUM7WUFDRCxjQUFjO1lBQ2QsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLENBQUM7WUFFMUQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDM0IsU0FBUyxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO2dCQUM5RCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3pGLENBQUM7aUJBQU0sQ0FBQztnQkFDSixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQixDQUFDO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNMLFNBQVMsQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNyQyxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDYixTQUFTLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUMxRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQzs4R0EvRlEsa0JBQWtCO2tIQUFsQixrQkFBa0I7OzJGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBCYWNrZW5kLCBIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0luamVjdGFibGUsIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWVyZ2VNYXAsIG9mLCB0YWtlLCB0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vbG9nL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7Q29tbW9uc0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuL2NvbW1vbnMtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7Q29tbW9uc1JvdXRlclNlcnZpY2V9IGZyb20gJy4vY29tbW9ucy1yb3V0ZXIuc2VydmljZSc7XG5pbXBvcnQge0NvbW1vbnNTZXJ2aWNlfSBmcm9tICcuL2NvbW1vbnMuc2VydmljZSc7XG5pbXBvcnQge0NPTU1PTlNfSU5JVElBTElaRVJfSVR9IGZyb20gJy4vdG9rZW5zL2NvbW1vbnMtaW5pdC50b2tlbic7XG5pbXBvcnQge0xPR19QVUJMSVNIRVJTfSBmcm9tICcuL3Rva2Vucy9sb2ctcHVibGlzaGVyLnRva2VuJztcbmltcG9ydCB7Q09NTU9OU19NT0RVTEVfQ09ORklHX0lUfSBmcm9tICcuL3Rva2Vucy9tb2R1bGUtY29uZmlnLnRva2VuJztcblxuZXhwb3J0IGVudW0gQ29tbW9uc0luaXRFdmVudEVudW0ge1xuICAgIENvbW1vbnNJbml0U3RhcnQsXG4gICAgQ29uZmlnU291cmNlTW9kdWxlTG9hZGVkLFxuICAgIENvbmZpZ1NvdXJjZVByb2plY3RFbnZMb2FkZWQsXG4gICAgQ29uZmlnU291cmNlSnNvbkFkZGVkLFxuICAgIENvbmZpZ1NvdXJjZUpzb25Mb2FkZWQsXG4gICAgQ29tbW9uc0luaXRFbmQsXG4gICAgQ29tbW9uc0luaXRFcnJvclxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29tbW9uc0luaXRTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IGluamVjdChMb2dnZXJTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ1B1Ymxpc2hlcnMgPSBpbmplY3QoTE9HX1BVQkxJU0hFUlMsIHtvcHRpb25hbDogdHJ1ZX0pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0KENvbW1vbnNDb25maWd1cmF0aW9uU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21tb25zID0gaW5qZWN0KENvbW1vbnNTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbW1vbnNSb3V0ZXIgPSBpbmplY3QoQ29tbW9uc1JvdXRlclNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbW9kdWxlQ29uZmlnID0gaW5qZWN0KENPTU1PTlNfTU9EVUxFX0NPTkZJR19JVCwge29wdGlvbmFsOiB0cnVlfSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21tb25zSW5pdGlhbGl6ZXJzID0gaW5qZWN0KENPTU1PTlNfSU5JVElBTElaRVJfSVQsIHtvcHRpb25hbDogdHJ1ZX0pO1xuXG4gICAgcHJpdmF0ZSBpc0luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGh0dHBDbGllbnQhOiBIdHRwQ2xpZW50O1xuXG4gICAgcHJpdmF0ZSBpc0luaXRpYWxpemVkU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcHJpdmF0ZSBjb21tb25zSW5pdFNlcnZpY2VFdmVudHMgPSBuZXcgU3ViamVjdDxDb21tb25zSW5pdEV2ZW50RW51bT4oKTtcblxuICAgIHB1YmxpYyBnZXQgZXZlbnRzJCgpOiBPYnNlcnZhYmxlPENvbW1vbnNJbml0RXZlbnRFbnVtPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbW1vbnNJbml0U2VydmljZUV2ZW50cy5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzSW5pdGlhbGl6ZWQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0luaXRpYWxpemVkU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKHRha2UoMSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbml0aWFsaXplKGhhbmRsZXI6IEh0dHBCYWNrZW5kKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBvZih2b2lkIDApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICAgICAgTG9nZ2VyU2VydmljZS5jb25maWd1cmUoe3RpbWVzdGFtcEZvcm1hdDogdGhpcy5tb2R1bGVDb25maWc/LmxvZz8udGltZXN0YW1wRm9ybWF0fSk7XG5cbiAgICAgICAgY29uc3QgY3R4TG9nZ2VyID0gdGhpcy5sb2dnZXIuY3JlYXRlKCdDb21tb25zSW5pdFNlcnZpY2UnKTtcbiAgICAgICAgY3R4TG9nZ2VyLmRlYnVnKCdDb21tb25zIGluaXRpYWxpemF0aW9uIGlzIHN0YXJ0aW5nJyk7XG4gICAgICAgIHRoaXMuY29tbW9uc0luaXRTZXJ2aWNlRXZlbnRzLm5leHQoQ29tbW9uc0luaXRFdmVudEVudW0uQ29tbW9uc0luaXRTdGFydCk7XG5cbiAgICAgICAgLy8gaW5pdCBodHRwIGNsaWVudFxuICAgICAgICB0aGlzLmh0dHBDbGllbnQgPSBuZXcgSHR0cENsaWVudChoYW5kbGVyKTtcblxuICAgICAgICAvLyBpbml0IHJvdXRlclxuICAgICAgICB0aGlzLmNvbW1vbnNSb3V0ZXIuaW5pdGlhbGl6ZSgpO1xuXG4gICAgICAgIC8vIGluaXQgY29uZmlndXJhdGlvbnMgd2l0aCBzZXR0aW5ncyBmcm9tIG1vZHVsZSBjb25maWdcbiAgICAgICAgdGhpcy5jb25maWcuaW5pdCh0aGlzLmh0dHBDbGllbnQsIHRoaXMubG9nZ2VyKTtcbiAgICAgICAgdGhpcy5jb25maWcuYWRkTW9kdWxlQ29uZmlnU291cmNlKHRoaXMubW9kdWxlQ29uZmlnID8/IHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuY29tbW9uc0luaXRTZXJ2aWNlRXZlbnRzLm5leHQoQ29tbW9uc0luaXRFdmVudEVudW0uQ29uZmlnU291cmNlTW9kdWxlTG9hZGVkKTtcbiAgICAgICAgaWYgKHRoaXMubW9kdWxlQ29uZmlnPy5jb25maWd1cmF0aW9uPy5wcm9qZWN0RW52aXJvbm1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmFkZEVudmlyb25tZW50U291cmNlKHRoaXMubW9kdWxlQ29uZmlnLmNvbmZpZ3VyYXRpb24ucHJvamVjdEVudmlyb25tZW50KTtcbiAgICAgICAgICAgIHRoaXMuY29tbW9uc0luaXRTZXJ2aWNlRXZlbnRzLm5leHQoQ29tbW9uc0luaXRFdmVudEVudW0uQ29uZmlnU291cmNlUHJvamVjdEVudkxvYWRlZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbml0IGNvbmZpZ3VyYXRpb25zIHdpdGggc2V0dGluZ3MgZnJvbSBtb2R1bGUgY29uZmlnIGZvciBqc29uIHNvdXJjZVxuICAgICAgICBpZiAoISh0aGlzLm1vZHVsZUNvbmZpZz8uY29uZmlndXJhdGlvbj8uc2tpcEpzb25Tb3VyY2VJbml0ID8/IGZhbHNlKSkge1xuICAgICAgICAgICAgY29uc3QganNvblNvdXJjZUVuYWJsZUVudlByb2QgPSB0aGlzLm1vZHVsZUNvbmZpZz8uY29uZmlndXJhdGlvbj8uanNvblNvdXJjZUVuYWJsZUVudlByb2QgPz8gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBqc29uU291cmNlID0gdGhpcy5tb2R1bGVDb25maWc/LmNvbmZpZ3VyYXRpb24/Lmpzb25Tb3VyY2U7XG4gICAgICAgICAgICBpZiAoIWpzb25Tb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5hZGRKc29uU291cmNlKHtlbmFibGVFbnZQcm9kOiBqc29uU291cmNlRW5hYmxlRW52UHJvZH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGpzb25Tb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAganNvblNvdXJjZS5mb3JFYWNoKHNvdXJjZSA9PiB0aGlzLmNvbmZpZy5hZGRKc29uU291cmNlKHt1cmw6IHNvdXJjZSwgZW5hYmxlRW52UHJvZDoganNvblNvdXJjZUVuYWJsZUVudlByb2R9KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmFkZEpzb25Tb3VyY2Uoe3VybDoganNvblNvdXJjZSwgZW5hYmxlRW52UHJvZDoganNvblNvdXJjZUVuYWJsZUVudlByb2R9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29tbW9uc0luaXRTZXJ2aWNlRXZlbnRzLm5leHQoQ29tbW9uc0luaXRFdmVudEVudW0uQ29uZmlnU291cmNlSnNvbkFkZGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5sb2FkSnNvbkNvbmZpZ3VyYXRpb25zKCkucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoISh0aGlzLm1vZHVsZUNvbmZpZz8uY29uZmlndXJhdGlvbj8uc2tpcEpzb25Tb3VyY2VJbml0ID8/IGZhbHNlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNJbml0U2VydmljZUV2ZW50cy5uZXh0KENvbW1vbnNJbml0RXZlbnRFbnVtLkNvbmZpZ1NvdXJjZUpzb25Mb2FkZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpbml0IGxvZ2dlclxuICAgICAgICAgICAgICAgIExvZ2dlclNlcnZpY2UuaW5pdCh0aGlzLmNvbmZpZywgdGhpcy5sb2dQdWJsaXNoZXJzID8/IFtdKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbW1vbnNJbml0aWFsaXplcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4TG9nZ2VyLmRlYnVnKCdQcm9qZWN0IGluaXRpYWxpemVycyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QodGhpcy5jb21tb25zSW5pdGlhbGl6ZXJzLm1hcChjaSA9PiBjaSgpKSkucGlwZShtYXAocmVzID0+IHJlcykpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY3R4TG9nZ2VyLmRlYnVnKCdDb21tb25zIGluaXRpYWxpemF0aW9uIGlzIGZpbmlzaGVkJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zSW5pdFNlcnZpY2VFdmVudHMubmV4dChDb21tb25zSW5pdEV2ZW50RW51bS5Db21tb25zSW5pdEVuZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zSW5pdFNlcnZpY2VFdmVudHMuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWRTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tbW9ucy5pbml0aWFsaXplKCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjdHhMb2dnZXIud2FybignQ29tbW9ucyBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCBlcnJvcicsIGVycik7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zSW5pdFNlcnZpY2VFdmVudHMubmV4dChDb21tb25zSW5pdEV2ZW50RW51bS5Db21tb25zSW5pdEVycm9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNJbml0U2VydmljZUV2ZW50cy5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZFN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19","import { Injectable, inject } from '@angular/core';\nimport { BROWSER_STORAGE_IT } from './tokens/browser-storage.token';\nimport * as i0 from \"@angular/core\";\nexport class CommonsStorageService {\n constructor() {\n this.localStorage = inject(BROWSER_STORAGE_IT);\n this._configKey = 'CommonsUserPrefs';\n }\n buildLocalStorageKey(type, key) {\n return `${this._configKey}_${type}_${key}`;\n }\n getItem(type, key) {\n const localstorageData = this.localStorage.getItem(this.buildLocalStorageKey(type, key));\n if (localstorageData) {\n return JSON.parse(localstorageData);\n }\n return undefined;\n }\n setItem(type, key, value) {\n this.localStorage.setItem(this.buildLocalStorageKey(type, key), JSON.stringify(value));\n }\n removeItem(type, key) {\n this.localStorage.removeItem(this.buildLocalStorageKey(type, key));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsStorageService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsStorageService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy1zdG9yYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9zZXJ2aWNlcy9jb21tb25zLXN0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFLbEUsTUFBTSxPQUFPLHFCQUFxQjtJQURsQztRQUVxQixpQkFBWSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFDLGVBQVUsR0FBRyxrQkFBa0IsQ0FBQztLQXFCcEQ7SUFuQlcsb0JBQW9CLENBQUMsSUFBWSxFQUFFLEdBQVc7UUFDbEQsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFTSxPQUFPLENBQWtDLElBQVksRUFBRSxHQUFXO1FBQ3JFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNuQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVNLE9BQU8sQ0FBa0MsSUFBWSxFQUFFLEdBQVcsRUFBRSxLQUFRO1FBQy9FLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFFTSxVQUFVLENBQUMsSUFBWSxFQUFFLEdBQVc7UUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7OEdBdEJRLHFCQUFxQjtrSEFBckIscUJBQXFCOzsyRkFBckIscUJBQXFCO2tCQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0JST1dTRVJfU1RPUkFHRV9JVH0gZnJvbSAnLi90b2tlbnMvYnJvd3Nlci1zdG9yYWdlLnRva2VuJztcblxuZXhwb3J0IHR5cGUgTG9jYWxzdG9yYWdlQ29uZmlnVmFsdWVUeXBlID0gc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSB8IG9iamVjdCB8IGJvb2xlYW47XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb21tb25zU3RvcmFnZVNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxTdG9yYWdlID0gaW5qZWN0KEJST1dTRVJfU1RPUkFHRV9JVCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlnS2V5ID0gJ0NvbW1vbnNVc2VyUHJlZnMnO1xuXG4gICAgcHJpdmF0ZSBidWlsZExvY2FsU3RvcmFnZUtleSh0eXBlOiBzdHJpbmcsIGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuX2NvbmZpZ0tleX1fJHt0eXBlfV8ke2tleX1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRJdGVtPFQgPSBMb2NhbHN0b3JhZ2VDb25maWdWYWx1ZVR5cGU+KHR5cGU6IHN0cmluZywga2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgbG9jYWxzdG9yYWdlRGF0YSA9IHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5idWlsZExvY2FsU3RvcmFnZUtleSh0eXBlLCBrZXkpKTtcbiAgICAgICAgaWYgKGxvY2Fsc3RvcmFnZURhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2Fsc3RvcmFnZURhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEl0ZW08VCA9IExvY2Fsc3RvcmFnZUNvbmZpZ1ZhbHVlVHlwZT4odHlwZTogc3RyaW5nLCBrZXk6IHN0cmluZywgdmFsdWU6IFQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmJ1aWxkTG9jYWxTdG9yYWdlS2V5KHR5cGUsIGtleSksIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUl0ZW0odHlwZTogc3RyaW5nLCBrZXk6IHN0cmluZykge1xuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuYnVpbGRMb2NhbFN0b3JhZ2VLZXkodHlwZSwga2V5KSk7XG4gICAgfVxufVxuIl19","export var StyleSizeEnum;\n(function (StyleSizeEnum) {\n StyleSizeEnum[StyleSizeEnum[\"ExtraSmall\"] = 0] = \"ExtraSmall\";\n StyleSizeEnum[StyleSizeEnum[\"Small\"] = 1] = \"Small\";\n StyleSizeEnum[StyleSizeEnum[\"Normal\"] = 2] = \"Normal\";\n StyleSizeEnum[StyleSizeEnum[\"Large\"] = 3] = \"Large\";\n StyleSizeEnum[StyleSizeEnum[\"ExtraLarge\"] = 4] = \"ExtraLarge\";\n})(StyleSizeEnum || (StyleSizeEnum = {}));\nexport var StyleLevelEnum;\n(function (StyleLevelEnum) {\n StyleLevelEnum[StyleLevelEnum[\"Default\"] = 0] = \"Default\";\n StyleLevelEnum[StyleLevelEnum[\"Primary\"] = 1] = \"Primary\";\n StyleLevelEnum[StyleLevelEnum[\"Secondary\"] = 2] = \"Secondary\";\n StyleLevelEnum[StyleLevelEnum[\"Info\"] = 3] = \"Info\";\n StyleLevelEnum[StyleLevelEnum[\"Help\"] = 4] = \"Help\";\n StyleLevelEnum[StyleLevelEnum[\"Success\"] = 5] = \"Success\";\n StyleLevelEnum[StyleLevelEnum[\"Warning\"] = 6] = \"Warning\";\n StyleLevelEnum[StyleLevelEnum[\"Danger\"] = 7] = \"Danger\";\n StyleLevelEnum[StyleLevelEnum[\"Contrast\"] = 8] = \"Contrast\";\n})(StyleLevelEnum || (StyleLevelEnum = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGUubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9zdHlsZXMvc3R5bGUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksYUFNWDtBQU5ELFdBQVksYUFBYTtJQUNyQiw2REFBVSxDQUFBO0lBQ1YsbURBQUssQ0FBQTtJQUNMLHFEQUFNLENBQUE7SUFDTixtREFBSyxDQUFBO0lBQ0wsNkRBQVUsQ0FBQTtBQUNkLENBQUMsRUFOVyxhQUFhLEtBQWIsYUFBYSxRQU14QjtBQUVELE1BQU0sQ0FBTixJQUFZLGNBVVg7QUFWRCxXQUFZLGNBQWM7SUFDdEIseURBQU8sQ0FBQTtJQUNQLHlEQUFPLENBQUE7SUFDUCw2REFBUyxDQUFBO0lBQ1QsbURBQUksQ0FBQTtJQUNKLG1EQUFJLENBQUE7SUFDSix5REFBTyxDQUFBO0lBQ1AseURBQU8sQ0FBQTtJQUNQLHVEQUFNLENBQUE7SUFDTiwyREFBUSxDQUFBO0FBQ1osQ0FBQyxFQVZXLGNBQWMsS0FBZCxjQUFjLFFBVXpCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gU3R5bGVTaXplRW51bSB7XG4gICAgRXh0cmFTbWFsbCxcbiAgICBTbWFsbCxcbiAgICBOb3JtYWwsXG4gICAgTGFyZ2UsXG4gICAgRXh0cmFMYXJnZVxufVxuXG5leHBvcnQgZW51bSBTdHlsZUxldmVsRW51bSB7XG4gICAgRGVmYXVsdCxcbiAgICBQcmltYXJ5LFxuICAgIFNlY29uZGFyeSxcbiAgICBJbmZvLFxuICAgIEhlbHAsXG4gICAgU3VjY2VzcyxcbiAgICBXYXJuaW5nLFxuICAgIERhbmdlcixcbiAgICBDb250cmFzdFxufVxuIl19","export class Styles {\n static { this.BUTTON_ROUNDED_WIDTH_XS = 28; }\n static { this.BUTTON_ROUNDED_WIDTH_SM = 31.5; }\n static { this.BUTTON_ROUNDED_WIDTH = 35; }\n static { this.BUTTON_ROUNDED_WIDTH_LG = 38.5; }\n static { this.BUTTON_ROUNDED_WIDTH_XL = 42; }\n static { this.ACTION_BUTTON_MARGIN_X = 2.1; }\n static { this.TABLE_CELL_PADDING_X_SM = 7; }\n static { this.TABLE_CELL_PADDING_X = 14; } // left and right paddings are same\n static { this.TABLE_CELL_PADDING_X_LG = 17.5; }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGUtY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvc3R5bGVzL3N0eWxlLWNvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sTUFBTTthQUNRLDRCQUF1QixHQUFHLEVBQUUsQ0FBQzthQUM3Qiw0QkFBdUIsR0FBRyxJQUFJLENBQUM7YUFDL0IseUJBQW9CLEdBQUcsRUFBRSxDQUFDO2FBQzFCLDRCQUF1QixHQUFHLElBQUksQ0FBQzthQUMvQiw0QkFBdUIsR0FBRyxFQUFFLENBQUM7YUFFN0IsMkJBQXNCLEdBQUcsR0FBRyxDQUFDO2FBRTdCLDRCQUF1QixHQUFHLENBQUMsQ0FBQzthQUM1Qix5QkFBb0IsR0FBRyxFQUFFLENBQUMsR0FBQyxtQ0FBbUM7YUFDOUQsNEJBQXVCLEdBQUcsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFN0eWxlcyB7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBCVVRUT05fUk9VTkRFRF9XSURUSF9YUyA9IDI4O1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQlVUVE9OX1JPVU5ERURfV0lEVEhfU00gPSAzMS41O1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQlVUVE9OX1JPVU5ERURfV0lEVEggPSAzNTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJVVFRPTl9ST1VOREVEX1dJRFRIX0xHID0gMzguNTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJVVFRPTl9ST1VOREVEX1dJRFRIX1hMID0gNDI7XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFDVElPTl9CVVRUT05fTUFSR0lOX1ggPSAyLjE7XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRBQkxFX0NFTExfUEFERElOR19YX1NNID0gNztcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRBQkxFX0NFTExfUEFERElOR19YID0gMTQ7IC8vIGxlZnQgYW5kIHJpZ2h0IHBhZGRpbmdzIGFyZSBzYW1lXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBUQUJMRV9DRUxMX1BBRERJTkdfWF9MRyA9IDE3LjU7XG59XG4iXX0=","import { HttpBackend } from '@angular/common/http';\nimport { ErrorHandler, inject, provideAppInitializer } from '@angular/core';\nimport { ConfirmationService, MessageService } from 'primeng/api';\nimport { DialogService } from 'primeng/dynamicdialog';\nimport { CommonsErrorHandler } from './error/error-handler';\nimport { LogPublisherConsoleService } from './log/log-publisher-console.service';\nimport { LoggerService } from './log/logger.service';\nimport { TypeRegistry } from './registry/type-registry';\nimport { PermissionService } from './security/permission.service';\nimport { CommonsConfigurationService } from './services/commons-configuration.service';\nimport { CommonsInitService } from './services/commons-init.service';\nimport { CommonsRouterService } from './services/commons-router.service';\nimport { CommonsStorageService } from './services/commons-storage.service';\nimport { CommonsService } from './services/commons.service';\nimport { commonsInitializerProvider } from './services/providers/commons-init.provider';\nimport { BROWSER_STORAGE_IT } from './services/tokens/browser-storage.token';\nimport { LOG_PUBLISHERS } from './services/tokens/log-publisher.token';\nimport { COMMONS_MODULE_CONFIG_IT } from './services/tokens/module-config.token';\nexport var CommonsFeatureTypeEnum;\n(function (CommonsFeatureTypeEnum) {\n CommonsFeatureTypeEnum[CommonsFeatureTypeEnum[\"Layout\"] = 0] = \"Layout\";\n CommonsFeatureTypeEnum[CommonsFeatureTypeEnum[\"Table\"] = 1] = \"Table\";\n CommonsFeatureTypeEnum[CommonsFeatureTypeEnum[\"Tableview\"] = 2] = \"Tableview\";\n CommonsFeatureTypeEnum[CommonsFeatureTypeEnum[\"DataApiAsClassV1\"] = 3] = \"DataApiAsClassV1\";\n})(CommonsFeatureTypeEnum || (CommonsFeatureTypeEnum = {}));\nexport function provideCommons(config, ...features) {\n const providers = [\n // primeng services\n DialogService,\n MessageService,\n ConfirmationService,\n // services\n CommonsInitService,\n CommonsService,\n CommonsRouterService,\n PermissionService,\n CommonsStorageService,\n {\n provide: COMMONS_MODULE_CONFIG_IT,\n useValue: config\n },\n {\n provide: TypeRegistry,\n useFactory: () => TypeRegistry.get()\n },\n {\n provide: CommonsConfigurationService,\n useFactory: () => CommonsConfigurationService.get()\n },\n provideAppInitializer(() => {\n const initializerFn = commonsInitializerProvider(inject(HttpBackend), inject(CommonsInitService));\n return initializerFn();\n }),\n {\n provide: LoggerService,\n useFactory: () => LoggerService.get()\n },\n {\n provide: LOG_PUBLISHERS,\n useClass: LogPublisherConsoleService,\n multi: true\n },\n {\n provide: BROWSER_STORAGE_IT,\n useFactory: () => localStorage\n },\n {\n provide: ErrorHandler,\n useClass: CommonsErrorHandler\n }\n ];\n features.forEach(f => {\n providers.push(...f.providers);\n });\n return providers;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvcmUvc3JjL3Byb3ZpZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBdUIsWUFBWSxFQUFZLE1BQU0sRUFBRSxxQkFBcUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUUxRyxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ2hFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0RixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDckUsT0FBTyxFQUFDLHdCQUF3QixFQUFzQixNQUFNLHVDQUF1QyxDQUFDO0FBRXBHLE1BQU0sQ0FBTixJQUFZLHNCQUtYO0FBTEQsV0FBWSxzQkFBc0I7SUFDOUIsdUVBQU0sQ0FBQTtJQUNOLHFFQUFLLENBQUE7SUFDTCw2RUFBUyxDQUFBO0lBQ1QsMkZBQWdCLENBQUE7QUFDcEIsQ0FBQyxFQUxXLHNCQUFzQixLQUF0QixzQkFBc0IsUUFLakM7QUFPRCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQTRCLEVBQUUsR0FBRyxRQUEwQjtJQUN0RixNQUFNLFNBQVMsR0FBd0M7UUFDbkQsbUJBQW1CO1FBQ25CLGFBQWE7UUFDYixjQUFjO1FBQ2QsbUJBQW1CO1FBRW5CLFdBQVc7UUFDWCxrQkFBa0I7UUFDbEIsY0FBYztRQUNkLG9CQUFvQjtRQUNwQixpQkFBaUI7UUFDakIscUJBQXFCO1FBRXJCO1lBQ0ksT0FBTyxFQUFFLHdCQUF3QjtZQUNqQyxRQUFRLEVBQUUsTUFBTTtTQUNuQjtRQUNEO1lBQ0ksT0FBTyxFQUFFLFlBQVk7WUFDckIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUU7U0FDdkM7UUFDRDtZQUNJLE9BQU8sRUFBRSwyQkFBMkI7WUFDcEMsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsRUFBRTtTQUN0RDtRQUNELHFCQUFxQixDQUFDLEdBQUcsRUFBRTtZQUN2QixNQUFNLGFBQWEsR0FBRywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztZQUNsRyxPQUFPLGFBQWEsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQztRQUNGO1lBQ0ksT0FBTyxFQUFFLGFBQWE7WUFDdEIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUU7U0FDeEM7UUFDRDtZQUNJLE9BQU8sRUFBRSxjQUFjO1lBQ3ZCLFFBQVEsRUFBRSwwQkFBMEI7WUFDcEMsS0FBSyxFQUFFLElBQUk7U0FDZDtRQUNEO1lBQ0ksT0FBTyxFQUFFLGtCQUFrQjtZQUMzQixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsWUFBWTtTQUNqQztRQUNEO1lBQ0ksT0FBTyxFQUFFLFlBQVk7WUFDckIsUUFBUSxFQUFFLG1CQUFtQjtTQUNoQztLQUNKLENBQUM7SUFFRixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ2pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwQmFja2VuZH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtFbnZpcm9ubWVudFByb3ZpZGVycywgRXJyb3JIYW5kbGVyLCBQcm92aWRlciwgaW5qZWN0LCBwcm92aWRlQXBwSW5pdGlhbGl6ZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0NvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5cbmltcG9ydCB7Q29tbW9uc0Vycm9ySGFuZGxlcn0gZnJvbSAnLi9lcnJvci9lcnJvci1oYW5kbGVyJztcbmltcG9ydCB7TG9nUHVibGlzaGVyQ29uc29sZVNlcnZpY2V9IGZyb20gJy4vbG9nL2xvZy1wdWJsaXNoZXItY29uc29sZS5zZXJ2aWNlJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi9sb2cvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtUeXBlUmVnaXN0cnl9IGZyb20gJy4vcmVnaXN0cnkvdHlwZS1yZWdpc3RyeSc7XG5pbXBvcnQge1Blcm1pc3Npb25TZXJ2aWNlfSBmcm9tICcuL3NlY3VyaXR5L3Blcm1pc3Npb24uc2VydmljZSc7XG5pbXBvcnQge0NvbW1vbnNDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlcy9jb21tb25zLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQge0NvbW1vbnNJbml0U2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlcy9jb21tb25zLWluaXQuc2VydmljZSc7XG5pbXBvcnQge0NvbW1vbnNSb3V0ZXJTZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2VzL2NvbW1vbnMtcm91dGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtDb21tb25zU3RvcmFnZVNlcnZpY2V9IGZyb20gJy4vc2VydmljZXMvY29tbW9ucy1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHtDb21tb25zU2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlcy9jb21tb25zLnNlcnZpY2UnO1xuaW1wb3J0IHtjb21tb25zSW5pdGlhbGl6ZXJQcm92aWRlcn0gZnJvbSAnLi9zZXJ2aWNlcy9wcm92aWRlcnMvY29tbW9ucy1pbml0LnByb3ZpZGVyJztcbmltcG9ydCB7QlJPV1NFUl9TVE9SQUdFX0lUfSBmcm9tICcuL3NlcnZpY2VzL3Rva2Vucy9icm93c2VyLXN0b3JhZ2UudG9rZW4nO1xuaW1wb3J0IHtMT0dfUFVCTElTSEVSU30gZnJvbSAnLi9zZXJ2aWNlcy90b2tlbnMvbG9nLXB1Ymxpc2hlci50b2tlbic7XG5pbXBvcnQge0NPTU1PTlNfTU9EVUxFX0NPTkZJR19JVCwgQ29tbW9uc01vZHVsZUNvbmZpZ30gZnJvbSAnLi9zZXJ2aWNlcy90b2tlbnMvbW9kdWxlLWNvbmZpZy50b2tlbic7XG5cbmV4cG9ydCBlbnVtIENvbW1vbnNGZWF0dXJlVHlwZUVudW0ge1xuICAgIExheW91dCxcbiAgICBUYWJsZSxcbiAgICBUYWJsZXZpZXcsXG4gICAgRGF0YUFwaUFzQ2xhc3NWMVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbnNGZWF0dXJlIHtcbiAgICB0eXBlOiBDb21tb25zRmVhdHVyZVR5cGVFbnVtO1xuICAgIHByb3ZpZGVyczogKFByb3ZpZGVyIHwgRW52aXJvbm1lbnRQcm92aWRlcnMpW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQ29tbW9ucyhjb25maWc/OiBDb21tb25zTW9kdWxlQ29uZmlnLCAuLi5mZWF0dXJlczogQ29tbW9uc0ZlYXR1cmVbXSk6IChQcm92aWRlciB8IEVudmlyb25tZW50UHJvdmlkZXJzKVtdIHtcbiAgICBjb25zdCBwcm92aWRlcnM6IChQcm92aWRlciB8IEVudmlyb25tZW50UHJvdmlkZXJzKVtdID0gW1xuICAgICAgICAvLyBwcmltZW5nIHNlcnZpY2VzXG4gICAgICAgIERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIE1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICBDb25maXJtYXRpb25TZXJ2aWNlLFxuXG4gICAgICAgIC8vIHNlcnZpY2VzXG4gICAgICAgIENvbW1vbnNJbml0U2VydmljZSxcbiAgICAgICAgQ29tbW9uc1NlcnZpY2UsXG4gICAgICAgIENvbW1vbnNSb3V0ZXJTZXJ2aWNlLFxuICAgICAgICBQZXJtaXNzaW9uU2VydmljZSxcbiAgICAgICAgQ29tbW9uc1N0b3JhZ2VTZXJ2aWNlLFxuXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IENPTU1PTlNfTU9EVUxFX0NPTkZJR19JVCxcbiAgICAgICAgICAgIHVzZVZhbHVlOiBjb25maWdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogVHlwZVJlZ2lzdHJ5LFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4gVHlwZVJlZ2lzdHJ5LmdldCgpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IENvbW1vbnNDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IENvbW1vbnNDb25maWd1cmF0aW9uU2VydmljZS5nZXQoKVxuICAgICAgICB9LFxuICAgICAgICBwcm92aWRlQXBwSW5pdGlhbGl6ZXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbGl6ZXJGbiA9IGNvbW1vbnNJbml0aWFsaXplclByb3ZpZGVyKGluamVjdChIdHRwQmFja2VuZCksIGluamVjdChDb21tb25zSW5pdFNlcnZpY2UpKTtcbiAgICAgICAgICAgIHJldHVybiBpbml0aWFsaXplckZuKCk7XG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4gTG9nZ2VyU2VydmljZS5nZXQoKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBMT0dfUFVCTElTSEVSUyxcbiAgICAgICAgICAgIHVzZUNsYXNzOiBMb2dQdWJsaXNoZXJDb25zb2xlU2VydmljZSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEJST1dTRVJfU1RPUkFHRV9JVCxcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IGxvY2FsU3RvcmFnZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBFcnJvckhhbmRsZXIsXG4gICAgICAgICAgICB1c2VDbGFzczogQ29tbW9uc0Vycm9ySGFuZGxlclxuICAgICAgICB9XG4gICAgXTtcblxuICAgIGZlYXR1cmVzLmZvckVhY2goZiA9PiB7XG4gICAgICAgIHByb3ZpZGVycy5wdXNoKC4uLmYucHJvdmlkZXJzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBwcm92aWRlcnM7XG59XG4iXX0=","// action\nexport * from './action/action-data.model';\nexport * from './action/action-parameters.model';\n// components\nexport * from './components/notification/notification-wrapper.component';\n// data-list\nexport * from './data-list/data-list.model';\nexport * from './data-list/data-list-params-helpers';\nexport * from './data-list/filter-match.model';\nexport * from './data-list/filter-metadata.model';\n// data-providers\nexport * from './data-providers/base.data-provider';\nexport * from './data-providers/lookup.data-provider';\n// descriptors\nexport * from './descriptors/action.descriptor';\nexport * from './descriptors/column.descriptor';\nexport * from './descriptors/editor.descriptor';\nexport * from './descriptors/enum.descriptor';\nexport * from './descriptors/filter.descriptor';\nexport * from './descriptors/lookup.descriptor';\nexport * from './descriptors/model.descriptor';\nexport * from './descriptors/table.descriptor';\nexport * from './descriptors/tableview.descriptor';\n// directives\nexport * from './directives/component.directive';\nexport * from './directives/rerender.directive';\nexport * from './directives/template.directive';\n// enums\nexport * from './enum/enum.model';\nexport * from './enum/enum-helpers';\n// error\nexport * from './error/error.model';\nexport * from './error/error-handler';\nexport * from './error/error-helpers';\n// helpers\nexport * from './helpers/coercion';\nexport * from './helpers/date';\nexport * from './helpers/notification';\nexport * from './helpers/number';\nexport * from './helpers/object';\nexport * from './helpers/route';\nexport * from './helpers/string';\nexport * from './helpers/type-helpers';\nexport * from './helpers/templates';\n// i18n\nexport * from './i18n/i18n-common';\nexport * from './i18n/i18n-error';\nexport * from './i18n/i18n-type';\n// log\nexport * from './log/log.model';\nexport * from './log/log-publisher-console.service';\nexport * from './log/logger.service';\n// models\nexport * from './models/class-attribute.model';\nexport * from './models/class-service.model';\nexport * from './models/getter.model';\nexport * from './models/i18n.model';\nexport * from './models/menu.model';\nexport * from './models/user.model';\nexport * from './models/version.model';\n// pipes\nexport * from './pipes/boolean.pipe';\nexport * from './pipes/class-map.pipe';\nexport * from './pipes/enum.pipe';\nexport * from './pipes/enumerate.pipe';\nexport * from './pipes/enumerate-async.pipe';\nexport * from './pipes/getter.pipe';\nexport * from './pipes/i18n-property.pipe';\nexport * from './pipes/json-path.pipe';\nexport * from './pipes/parametrize.pipe';\nexport * from './pipes/template.pipe';\n// reactivity\nexport * from './reactivity/effect';\n// reflect\nexport * from './reflect/type-enum-decorator';\nexport * from './reflect/type-enum-metadata';\n// registry\nexport * from './registry/registry.model';\nexport * from './registry/type-registry';\n// router\nexport * from './router/route-builder';\nexport * from './router/router.model';\nexport * from './router/routes-builder';\n// rxjs\nexport * from './rxjs/map-data-list-result-operator';\n// security\nexport * from './security/permission.guard';\nexport * from './security/permission.service';\nexport * from './security/permission-helpers';\nexport * from './security/permissions.model';\n// services\nexport * from './services/providers/commons-init.provider';\nexport * from './services/tokens/browser-storage.token';\nexport * from './services/tokens/commons-init.token';\nexport * from './services/tokens/log-publisher.token';\nexport * from './services/tokens/module-config.token';\nexport * from './services/commons.service';\nexport * from './services/commons-configuration.service';\nexport * from './services/commons-init.service';\nexport * from './services/commons-router.service';\nexport * from './services/commons-storage.service';\n// styles\nexport * from './styles/style.model';\nexport * from './styles/style-constants';\n// provide\nexport * from './provide';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb3JlL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTO0FBQ1QsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGtDQUFrQyxDQUFDO0FBRWpELGFBQWE7QUFDYixjQUFjLDBEQUEwRCxDQUFDO0FBRXpFLFlBQVk7QUFDWixjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLG1DQUFtQyxDQUFDO0FBRWxELGlCQUFpQjtBQUNqQixjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsdUNBQXVDLENBQUM7QUFFdEQsY0FBYztBQUNkLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLG9DQUFvQyxDQUFDO0FBRW5ELGFBQWE7QUFDYixjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUVoRCxRQUFRO0FBQ1IsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHFCQUFxQixDQUFDO0FBRXBDLFFBQVE7QUFDUixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx1QkFBdUIsQ0FBQztBQUV0QyxVQUFVO0FBQ1YsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMscUJBQXFCLENBQUM7QUFFcEMsT0FBTztBQUNQLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGtCQUFrQixDQUFDO0FBRWpDLE1BQU07QUFDTixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxzQkFBc0IsQ0FBQztBQUVyQyxTQUFTO0FBQ1QsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyx3QkFBd0IsQ0FBQztBQUV2QyxRQUFRO0FBQ1IsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyx1QkFBdUIsQ0FBQztBQUV0QyxhQUFhO0FBQ2IsY0FBYyxxQkFBcUIsQ0FBQztBQUVwQyxVQUFVO0FBQ1YsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhCQUE4QixDQUFDO0FBRTdDLFdBQVc7QUFDWCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMEJBQTBCLENBQUM7QUFFekMsU0FBUztBQUNULGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHlCQUF5QixDQUFDO0FBRXhDLE9BQU87QUFDUCxjQUFjLHNDQUFzQyxDQUFDO0FBRXJELFdBQVc7QUFDWCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhCQUE4QixDQUFDO0FBRTdDLFdBQVc7QUFDWCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLG9DQUFvQyxDQUFDO0FBRW5ELFNBQVM7QUFDVCxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsMEJBQTBCLENBQUM7QUFFekMsVUFBVTtBQUNWLGNBQWMsV0FBVyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gYWN0aW9uXG5leHBvcnQgKiBmcm9tICcuL2FjdGlvbi9hY3Rpb24tZGF0YS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2FjdGlvbi9hY3Rpb24tcGFyYW1ldGVycy5tb2RlbCc7XG5cbi8vIGNvbXBvbmVudHNcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLXdyYXBwZXIuY29tcG9uZW50JztcblxuLy8gZGF0YS1saXN0XG5leHBvcnQgKiBmcm9tICcuL2RhdGEtbGlzdC9kYXRhLWxpc3QubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhLWxpc3QvZGF0YS1saXN0LXBhcmFtcy1oZWxwZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YS1saXN0L2ZpbHRlci1tYXRjaC5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGEtbGlzdC9maWx0ZXItbWV0YWRhdGEubW9kZWwnO1xuXG4vLyBkYXRhLXByb3ZpZGVyc1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhLXByb3ZpZGVycy9iYXNlLmRhdGEtcHJvdmlkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhLXByb3ZpZGVycy9sb29rdXAuZGF0YS1wcm92aWRlcic7XG5cbi8vIGRlc2NyaXB0b3JzXG5leHBvcnQgKiBmcm9tICcuL2Rlc2NyaXB0b3JzL2FjdGlvbi5kZXNjcmlwdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vZGVzY3JpcHRvcnMvY29sdW1uLmRlc2NyaXB0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9kZXNjcmlwdG9ycy9lZGl0b3IuZGVzY3JpcHRvcic7XG5leHBvcnQgKiBmcm9tICcuL2Rlc2NyaXB0b3JzL2VudW0uZGVzY3JpcHRvcic7XG5leHBvcnQgKiBmcm9tICcuL2Rlc2NyaXB0b3JzL2ZpbHRlci5kZXNjcmlwdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vZGVzY3JpcHRvcnMvbG9va3VwLmRlc2NyaXB0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9kZXNjcmlwdG9ycy9tb2RlbC5kZXNjcmlwdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vZGVzY3JpcHRvcnMvdGFibGUuZGVzY3JpcHRvcic7XG5leHBvcnQgKiBmcm9tICcuL2Rlc2NyaXB0b3JzL3RhYmxldmlldy5kZXNjcmlwdG9yJztcblxuLy8gZGlyZWN0aXZlc1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL2NvbXBvbmVudC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL3JlcmVuZGVyLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvdGVtcGxhdGUuZGlyZWN0aXZlJztcblxuLy8gZW51bXNcbmV4cG9ydCAqIGZyb20gJy4vZW51bS9lbnVtLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vZW51bS9lbnVtLWhlbHBlcnMnO1xuXG4vLyBlcnJvclxuZXhwb3J0ICogZnJvbSAnLi9lcnJvci9lcnJvci5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9yL2Vycm9yLWhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9lcnJvci9lcnJvci1oZWxwZXJzJztcblxuLy8gaGVscGVyc1xuZXhwb3J0ICogZnJvbSAnLi9oZWxwZXJzL2NvZXJjaW9uJztcbmV4cG9ydCAqIGZyb20gJy4vaGVscGVycy9kYXRlJztcbmV4cG9ydCAqIGZyb20gJy4vaGVscGVycy9ub3RpZmljYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9oZWxwZXJzL251bWJlcic7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMvb2JqZWN0JztcbmV4cG9ydCAqIGZyb20gJy4vaGVscGVycy9yb3V0ZSc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMvc3RyaW5nJztcbmV4cG9ydCAqIGZyb20gJy4vaGVscGVycy90eXBlLWhlbHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9oZWxwZXJzL3RlbXBsYXRlcyc7XG5cbi8vIGkxOG5cbmV4cG9ydCAqIGZyb20gJy4vaTE4bi9pMThuLWNvbW1vbic7XG5leHBvcnQgKiBmcm9tICcuL2kxOG4vaTE4bi1lcnJvcic7XG5leHBvcnQgKiBmcm9tICcuL2kxOG4vaTE4bi10eXBlJztcblxuLy8gbG9nXG5leHBvcnQgKiBmcm9tICcuL2xvZy9sb2cubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2cvbG9nLXB1Ymxpc2hlci1jb25zb2xlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2cvbG9nZ2VyLnNlcnZpY2UnO1xuXG4vLyBtb2RlbHNcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL2NsYXNzLWF0dHJpYnV0ZS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscy9jbGFzcy1zZXJ2aWNlLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL2dldHRlci5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscy9pMThuLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL21lbnUubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMvdXNlci5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscy92ZXJzaW9uLm1vZGVsJztcblxuLy8gcGlwZXNcbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMvYm9vbGVhbi5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMvY2xhc3MtbWFwLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcy9lbnVtLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcy9lbnVtZXJhdGUucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVzL2VudW1lcmF0ZS1hc3luYy5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMvZ2V0dGVyLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcy9pMThuLXByb3BlcnR5LnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcy9qc29uLXBhdGgucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVzL3BhcmFtZXRyaXplLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcy90ZW1wbGF0ZS5waXBlJztcblxuLy8gcmVhY3Rpdml0eVxuZXhwb3J0ICogZnJvbSAnLi9yZWFjdGl2aXR5L2VmZmVjdCc7XG5cbi8vIHJlZmxlY3RcbmV4cG9ydCAqIGZyb20gJy4vcmVmbGVjdC90eXBlLWVudW0tZGVjb3JhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vcmVmbGVjdC90eXBlLWVudW0tbWV0YWRhdGEnO1xuXG4vLyByZWdpc3RyeVxuZXhwb3J0ICogZnJvbSAnLi9yZWdpc3RyeS9yZWdpc3RyeS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3JlZ2lzdHJ5L3R5cGUtcmVnaXN0cnknO1xuXG4vLyByb3V0ZXJcbmV4cG9ydCAqIGZyb20gJy4vcm91dGVyL3JvdXRlLWJ1aWxkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9yb3V0ZXIvcm91dGVyLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vcm91dGVyL3JvdXRlcy1idWlsZGVyJztcblxuLy8gcnhqc1xuZXhwb3J0ICogZnJvbSAnLi9yeGpzL21hcC1kYXRhLWxpc3QtcmVzdWx0LW9wZXJhdG9yJztcblxuLy8gc2VjdXJpdHlcbmV4cG9ydCAqIGZyb20gJy4vc2VjdXJpdHkvcGVybWlzc2lvbi5ndWFyZCc7XG5leHBvcnQgKiBmcm9tICcuL3NlY3VyaXR5L3Blcm1pc3Npb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlY3VyaXR5L3Blcm1pc3Npb24taGVscGVycyc7XG5leHBvcnQgKiBmcm9tICcuL3NlY3VyaXR5L3Blcm1pc3Npb25zLm1vZGVsJztcblxuLy8gc2VydmljZXNcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvcHJvdmlkZXJzL2NvbW1vbnMtaW5pdC5wcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL3Rva2Vucy9icm93c2VyLXN0b3JhZ2UudG9rZW4nO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy90b2tlbnMvY29tbW9ucy1pbml0LnRva2VuJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvdG9rZW5zL2xvZy1wdWJsaXNoZXIudG9rZW4nO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy90b2tlbnMvbW9kdWxlLWNvbmZpZy50b2tlbic7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2NvbW1vbnMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2NvbW1vbnMtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvY29tbW9ucy1pbml0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9jb21tb25zLXJvdXRlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvY29tbW9ucy1zdG9yYWdlLnNlcnZpY2UnO1xuXG4vLyBzdHlsZXNcbmV4cG9ydCAqIGZyb20gJy4vc3R5bGVzL3N0eWxlLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vc3R5bGVzL3N0eWxlLWNvbnN0YW50cyc7XG5cbi8vIHByb3ZpZGVcbmV4cG9ydCAqIGZyb20gJy4vcHJvdmlkZSc7XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaXVzaW5jLW1uZy1jb21tb25zLWNvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb3JlL3NyYy9tZWRpdXNpbmMtbW5nLWNvbW1vbnMtY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":["toObservable","throwError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mediusinc-mng-commons-core.mjs","sources":["../tmp-esm2022/core/components/notification/notification-wrapper.component.js","../tmp-esm2022/core/error/error.model.js","../tmp-esm2022/core/helpers/date.js","../tmp-esm2022/core/data-list/filter-match.model.js","../tmp-esm2022/core/data-list/data-list-params-helpers.js","../tmp-esm2022/core/data-providers/base.data-provider.js","../tmp-esm2022/core/reactivity/effect.js","../tmp-esm2022/core/directives/component.directive.js","../tmp-esm2022/core/directives/rerender.directive.js","../tmp-esm2022/core/directives/template.directive.js","../tmp-esm2022/core/enum/enum-helpers.js","../tmp-esm2022/core/log/log.model.js","../tmp-esm2022/core/log/logger.service.js","../tmp-esm2022/core/helpers/object.js","../tmp-esm2022/core/helpers/string.js","../tmp-esm2022/core/error/error-helpers.js","../tmp-esm2022/core/error/error-handler.js","../tmp-esm2022/core/helpers/coercion.js","../tmp-esm2022/core/helpers/notification.js","../tmp-esm2022/core/helpers/number.js","../tmp-esm2022/core/helpers/route.js","../tmp-esm2022/core/helpers/templates.js","../tmp-esm2022/core/i18n/i18n-common.js","../tmp-esm2022/core/i18n/i18n-error.js","../tmp-esm2022/core/i18n/i18n-type.js","../tmp-esm2022/core/log/log-publisher-console.service.js","../tmp-esm2022/core/pipes/boolean.pipe.js","../tmp-esm2022/core/pipes/class-map.pipe.js","../tmp-esm2022/core/reflect/type-enum-metadata.js","../tmp-esm2022/core/pipes/enum.pipe.js","../tmp-esm2022/core/pipes/json-path.pipe.js","../tmp-esm2022/core/pipes/enumerate.pipe.js","../tmp-esm2022/core/pipes/enumerate-async.pipe.js","../tmp-esm2022/core/pipes/getter.pipe.js","../tmp-esm2022/core/pipes/i18n-property.pipe.js","../tmp-esm2022/core/pipes/parametrize.pipe.js","../tmp-esm2022/core/pipes/template.pipe.js","../tmp-esm2022/core/reflect/type-enum-decorator.js","../tmp-esm2022/core/registry/type-registry.js","../tmp-esm2022/core/services/tokens/browser-storage.token.js","../tmp-esm2022/core/services/tokens/module-config.token.js","../tmp-esm2022/core/services/commons.service.js","../tmp-esm2022/core/security/permissions.model.js","../tmp-esm2022/core/security/permission-helpers.js","../tmp-esm2022/core/security/permission.service.js","../tmp-esm2022/core/security/permission.guard.js","../tmp-esm2022/core/router/route-builder.js","../tmp-esm2022/core/router/routes-builder.js","../tmp-esm2022/core/rxjs/map-data-list-result-operator.js","../tmp-esm2022/core/services/providers/commons-init.provider.js","../tmp-esm2022/core/services/tokens/commons-init.token.js","../tmp-esm2022/core/services/tokens/log-publisher.token.js","../tmp-esm2022/core/services/commons-configuration.service.js","../tmp-esm2022/core/services/commons-router.service.js","../tmp-esm2022/core/services/commons-init.service.js","../tmp-esm2022/core/services/commons-storage.service.js","../tmp-esm2022/core/styles/style.model.js","../tmp-esm2022/core/styles/style-constants.js","../tmp-esm2022/core/provide.js","../tmp-esm2022/core/index.js","../tmp-esm2022/core/mediusinc-mng-commons-core.js"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { Dialog } from 'primeng/dialog';\nimport { Toast } from 'primeng/toast';\nimport * as i0 from \"@angular/core\";\nexport class NotificationWrapperComponent {\n constructor() {\n this.notificationCutoff = 70;\n this.isDialogNotificationVisible = computed(() => this.dialogNotification() !== null, ...(ngDevMode ? [{ debugName: \"isDialogNotificationVisible\" }] : []));\n this.dialogNotification = signal(null, ...(ngDevMode ? [{ debugName: \"dialogNotification\" }] : []));\n this.dialogNotificationIconClass = computed(() => this.getMessageIcon(this.dialogNotification()), ...(ngDevMode ? [{ debugName: \"dialogNotificationIconClass\" }] : []));\n }\n getMessageIcon(message) {\n if (message?.icon)\n return message.icon;\n switch (message?.severity) {\n case 'info':\n return 'pi-info-circle';\n case 'warn':\n return 'pi-exclamation-triangle';\n case 'error':\n return 'pi-times-circle';\n case 'success':\n return 'pi-check';\n default:\n return '';\n }\n }\n onShowNotificationInDialog(message) {\n this.dialogNotification.set(message);\n }\n onDialogNotificationVisibilityChange(visible) {\n if (!visible) {\n this.dialogNotification.set(null);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: NotificationWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.7\", type: NotificationWrapperComponent, isStandalone: true, selector: \"mng-notification-wrapper\", ngImport: i0, template: \"<ng-content></ng-content>\\n<p-confirmDialog appendTo=\\\"body\\\" [baseZIndex]=\\\"50\\\"></p-confirmDialog>\\n\\n<p-toast [baseZIndex]=\\\"50\\\">\\n <ng-template #message let-message>\\n <span [class]=\\\"'p-toast-message-icon pi ' + getMessageIcon(message)\\\"></span>\\n <div class=\\\"p-toast-message-text\\\">\\n <div class=\\\"p-toast-summary\\\">{{ message.summary }}</div>\\n @if (message.detail) {\\n <div class=\\\"p-toast-detail\\\">{{ message.detail.slice(0, notificationCutoff) + (message.detail.length > notificationCutoff ? '...' : '') }}</div>\\n @if (message.detail.length > notificationCutoff) {\\n <div (click)=\\\"onShowNotificationInDialog(message)\\\" class=\\\"font-semibold text-sm mt-2 flex items-center\\\">\\n <i class=\\\"pi pi-chevron-down mr-1\\\"></i>{{ 'notification.details' | translate }}\\n </div>\\n }\\n }\\n </div>\\n </ng-template>\\n</p-toast>\\n\\n<p-dialog\\n [visible]=\\\"isDialogNotificationVisible()\\\"\\n (visibleChange)=\\\"onDialogNotificationVisibilityChange($event)\\\"\\n [styleClass]=\\\"'mng-dialog mng-dialog-xs mng-message-detail-dialog mng-message-detail-dialog-' + (dialogNotification()?.severity ?? '')\\\"\\n appendTo=\\\"body\\\"\\n draggable=\\\"false\\\"\\n modal=\\\"true\\\">\\n <ng-template #header>\\n <span class=\\\"p-dialog-title font-bold mng-dialog-success\\\">\\n <span [class]=\\\"'mr-2 pi ' + dialogNotificationIconClass()\\\"></span>\\n {{ dialogNotification()?.summary ?? '' }}\\n </span>\\n </ng-template>\\n <div class=\\\"mng-notification-details\\\">\\n {{ dialogNotification()?.detail ?? '' }}\\n </div>\\n</p-dialog>\\n\", styles: [\".mng-notification-details{white-space:pre-wrap;word-wrap:break-word}\\n\"], dependencies: [{ kind: \"component\", type: ConfirmDialog, selector: \"p-confirmDialog, p-confirmdialog, p-confirm-dialog\", inputs: [\"header\", \"icon\", \"message\", \"style\", \"styleClass\", \"maskStyleClass\", \"acceptIcon\", \"acceptLabel\", \"closeAriaLabel\", \"acceptAriaLabel\", \"acceptVisible\", \"rejectIcon\", \"rejectLabel\", \"rejectAriaLabel\", \"rejectVisible\", \"acceptButtonStyleClass\", \"rejectButtonStyleClass\", \"closeOnEscape\", \"dismissableMask\", \"blockScroll\", \"rtl\", \"closable\", \"appendTo\", \"key\", \"autoZIndex\", \"baseZIndex\", \"transitionOptions\", \"focusTrap\", \"defaultFocus\", \"breakpoints\", \"visible\", \"position\", \"draggable\"], outputs: [\"onHide\"] }, { kind: \"component\", type: Dialog, selector: \"p-dialog\", inputs: [\"header\", \"draggable\", \"resizable\", \"contentStyle\", \"contentStyleClass\", \"modal\", \"closeOnEscape\", \"dismissableMask\", \"rtl\", \"closable\", \"breakpoints\", \"styleClass\", \"maskStyleClass\", \"maskStyle\", \"showHeader\", \"blockScroll\", \"autoZIndex\", \"baseZIndex\", \"minX\", \"minY\", \"focusOnShow\", \"maximizable\", \"keepInViewport\", \"focusTrap\", \"transitionOptions\", \"closeIcon\", \"closeAriaLabel\", \"closeTabindex\", \"minimizeIcon\", \"maximizeIcon\", \"closeButtonProps\", \"maximizeButtonProps\", \"visible\", \"style\", \"position\", \"role\", \"appendTo\", \"content\", \"contentTemplate\", \"footerTemplate\", \"closeIconTemplate\", \"maximizeIconTemplate\", \"minimizeIconTemplate\", \"headlessTemplate\"], outputs: [\"onShow\", \"onHide\", \"visibleChange\", \"onResizeInit\", \"onResizeEnd\", \"onDragEnd\", \"onMaximize\"] }, { kind: \"component\", type: Toast, selector: \"p-toast\", inputs: [\"key\", \"autoZIndex\", \"baseZIndex\", \"life\", \"styleClass\", \"position\", \"preventOpenDuplicates\", \"preventDuplicates\", \"showTransformOptions\", \"hideTransformOptions\", \"showTransitionOptions\", \"hideTransitionOptions\", \"breakpoints\"], outputs: [\"onClose\"] }, { kind: \"pipe\", type: TranslatePipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: NotificationWrapperComponent, decorators: [{\n type: Component,\n args: [{ selector: 'mng-notification-wrapper', imports: [ConfirmDialog, TranslatePipe, Dialog, Toast], changeDetection: ChangeDetectionStrategy.OnPush, template: \"<ng-content></ng-content>\\n<p-confirmDialog appendTo=\\\"body\\\" [baseZIndex]=\\\"50\\\"></p-confirmDialog>\\n\\n<p-toast [baseZIndex]=\\\"50\\\">\\n <ng-template #message let-message>\\n <span [class]=\\\"'p-toast-message-icon pi ' + getMessageIcon(message)\\\"></span>\\n <div class=\\\"p-toast-message-text\\\">\\n <div class=\\\"p-toast-summary\\\">{{ message.summary }}</div>\\n @if (message.detail) {\\n <div class=\\\"p-toast-detail\\\">{{ message.detail.slice(0, notificationCutoff) + (message.detail.length > notificationCutoff ? '...' : '') }}</div>\\n @if (message.detail.length > notificationCutoff) {\\n <div (click)=\\\"onShowNotificationInDialog(message)\\\" class=\\\"font-semibold text-sm mt-2 flex items-center\\\">\\n <i class=\\\"pi pi-chevron-down mr-1\\\"></i>{{ 'notification.details' | translate }}\\n </div>\\n }\\n }\\n </div>\\n </ng-template>\\n</p-toast>\\n\\n<p-dialog\\n [visible]=\\\"isDialogNotificationVisible()\\\"\\n (visibleChange)=\\\"onDialogNotificationVisibilityChange($event)\\\"\\n [styleClass]=\\\"'mng-dialog mng-dialog-xs mng-message-detail-dialog mng-message-detail-dialog-' + (dialogNotification()?.severity ?? '')\\\"\\n appendTo=\\\"body\\\"\\n draggable=\\\"false\\\"\\n modal=\\\"true\\\">\\n <ng-template #header>\\n <span class=\\\"p-dialog-title font-bold mng-dialog-success\\\">\\n <span [class]=\\\"'mr-2 pi ' + dialogNotificationIconClass()\\\"></span>\\n {{ dialogNotification()?.summary ?? '' }}\\n </span>\\n </ng-template>\\n <div class=\\\"mng-notification-details\\\">\\n {{ dialogNotification()?.detail ?? '' }}\\n </div>\\n</p-dialog>\\n\", styles: [\".mng-notification-details{white-space:pre-wrap;word-wrap:break-word}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXdyYXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vY29yZS9zcmMvY29tcG9uZW50cy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLXdyYXBwZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vY29yZS9zcmMvY29tcG9uZW50cy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRW5GLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7O0FBV3BDLE1BQU0sT0FBTyw0QkFBNEI7SUFQekM7UUFRb0IsdUJBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLGdDQUEyQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxJQUFJLHVFQUFDLENBQUM7UUFDakYsdUJBQWtCLEdBQUcsTUFBTSxDQUE2QixJQUFJLDhEQUFDLENBQUM7UUFDOUQsZ0NBQTJCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsdUVBQUMsQ0FBQztLQTRCdkc7SUExQlUsY0FBYyxDQUFDLE9BQXNDO1FBQ3hELElBQUksT0FBTyxFQUFFLElBQUk7WUFBRSxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFFdkMsUUFBUSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDeEIsS0FBSyxNQUFNO2dCQUNQLE9BQU8sZ0JBQWdCLENBQUM7WUFDNUIsS0FBSyxNQUFNO2dCQUNQLE9BQU8seUJBQXlCLENBQUM7WUFDckMsS0FBSyxPQUFPO2dCQUNSLE9BQU8saUJBQWlCLENBQUM7WUFDN0IsS0FBSyxTQUFTO2dCQUNWLE9BQU8sVUFBVSxDQUFDO1lBQ3RCO2dCQUNJLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLENBQUM7SUFDTCxDQUFDO0lBRU0sMEJBQTBCLENBQUMsT0FBNEI7UUFDMUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU0sb0NBQW9DLENBQUMsT0FBZ0I7UUFDeEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0wsQ0FBQzs4R0EvQlEsNEJBQTRCO2tHQUE1Qiw0QkFBNEIsb0ZDakJ6Qyxxc0RBcUNBLGdJRHZCYyxhQUFhLHNtQkFBaUIsTUFBTSxpMEJBQUUsS0FBSyxtVEFBNUIsYUFBYTs7MkZBRzdCLDRCQUE0QjtrQkFQeEMsU0FBUzsrQkFDSSwwQkFBMEIsV0FHM0IsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsbUJBQ3JDLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBzaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVBpcGV9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtUb2FzdE1lc3NhZ2VPcHRpb25zfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0NvbmZpcm1EaWFsb2d9IGZyb20gJ3ByaW1lbmcvY29uZmlybWRpYWxvZyc7XG5pbXBvcnQge0RpYWxvZ30gZnJvbSAncHJpbWVuZy9kaWFsb2cnO1xuaW1wb3J0IHtUb2FzdH0gZnJvbSAncHJpbWVuZy90b2FzdCc7XG5cbmltcG9ydCB7TnVsbGFibGV9IGZyb20gJy4uLy4uL2hlbHBlcnMvdHlwZS1oZWxwZXJzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtbmctbm90aWZpY2F0aW9uLXdyYXBwZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnbm90aWZpY2F0aW9uLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydub3RpZmljYXRpb24td3JhcHBlci5jb21wb25lbnQuY3NzJ10sXG4gICAgaW1wb3J0czogW0NvbmZpcm1EaWFsb2csIFRyYW5zbGF0ZVBpcGUsIERpYWxvZywgVG9hc3RdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbldyYXBwZXJDb21wb25lbnQge1xuICAgIHB1YmxpYyByZWFkb25seSBub3RpZmljYXRpb25DdXRvZmYgPSA3MDtcbiAgICBwdWJsaWMgaXNEaWFsb2dOb3RpZmljYXRpb25WaXNpYmxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kaWFsb2dOb3RpZmljYXRpb24oKSAhPT0gbnVsbCk7XG4gICAgcHVibGljIGRpYWxvZ05vdGlmaWNhdGlvbiA9IHNpZ25hbDxUb2FzdE1lc3NhZ2VPcHRpb25zIHwgbnVsbD4obnVsbCk7XG4gICAgcHVibGljIGRpYWxvZ05vdGlmaWNhdGlvbkljb25DbGFzcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZ2V0TWVzc2FnZUljb24odGhpcy5kaWFsb2dOb3RpZmljYXRpb24oKSkpO1xuXG4gICAgcHVibGljIGdldE1lc3NhZ2VJY29uKG1lc3NhZ2U6IE51bGxhYmxlPFRvYXN0TWVzc2FnZU9wdGlvbnM+KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKG1lc3NhZ2U/Lmljb24pIHJldHVybiBtZXNzYWdlLmljb247XG5cbiAgICAgICAgc3dpdGNoIChtZXNzYWdlPy5zZXZlcml0eSkge1xuICAgICAgICAgICAgY2FzZSAnaW5mbyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwaS1pbmZvLWNpcmNsZSc7XG4gICAgICAgICAgICBjYXNlICd3YXJuJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJztcbiAgICAgICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BpLXRpbWVzLWNpcmNsZSc7XG4gICAgICAgICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BpLWNoZWNrJztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2hvd05vdGlmaWNhdGlvbkluRGlhbG9nKG1lc3NhZ2U6IFRvYXN0TWVzc2FnZU9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5kaWFsb2dOb3RpZmljYXRpb24uc2V0KG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRpYWxvZ05vdGlmaWNhdGlvblZpc2liaWxpdHlDaGFuZ2UodmlzaWJsZTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIXZpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nTm90aWZpY2F0aW9uLnNldChudWxsKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjxwLWNvbmZpcm1EaWFsb2cgYXBwZW5kVG89XCJib2R5XCIgW2Jhc2VaSW5kZXhdPVwiNTBcIj48L3AtY29uZmlybURpYWxvZz5cblxuPHAtdG9hc3QgW2Jhc2VaSW5kZXhdPVwiNTBcIj5cbiAgICA8bmctdGVtcGxhdGUgI21lc3NhZ2UgbGV0LW1lc3NhZ2U+XG4gICAgICAgIDxzcGFuIFtjbGFzc109XCIncC10b2FzdC1tZXNzYWdlLWljb24gcGkgJyArIGdldE1lc3NhZ2VJY29uKG1lc3NhZ2UpXCI+PC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicC10b2FzdC1tZXNzYWdlLXRleHRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLXRvYXN0LXN1bW1hcnlcIj57eyBtZXNzYWdlLnN1bW1hcnkgfX08L2Rpdj5cbiAgICAgICAgICAgIEBpZiAobWVzc2FnZS5kZXRhaWwpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC10b2FzdC1kZXRhaWxcIj57eyBtZXNzYWdlLmRldGFpbC5zbGljZSgwLCBub3RpZmljYXRpb25DdXRvZmYpICsgKG1lc3NhZ2UuZGV0YWlsLmxlbmd0aCA+IG5vdGlmaWNhdGlvbkN1dG9mZiA/ICcuLi4nIDogJycpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgQGlmIChtZXNzYWdlLmRldGFpbC5sZW5ndGggPiBub3RpZmljYXRpb25DdXRvZmYpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwib25TaG93Tm90aWZpY2F0aW9uSW5EaWFsb2cobWVzc2FnZSlcIiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1zbSBtdC0yIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWNoZXZyb24tZG93biBtci0xXCI+PC9pPnt7ICdub3RpZmljYXRpb24uZGV0YWlscycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9wLXRvYXN0PlxuXG48cC1kaWFsb2dcbiAgICBbdmlzaWJsZV09XCJpc0RpYWxvZ05vdGlmaWNhdGlvblZpc2libGUoKVwiXG4gICAgKHZpc2libGVDaGFuZ2UpPVwib25EaWFsb2dOb3RpZmljYXRpb25WaXNpYmlsaXR5Q2hhbmdlKCRldmVudClcIlxuICAgIFtzdHlsZUNsYXNzXT1cIidtbmctZGlhbG9nIG1uZy1kaWFsb2cteHMgbW5nLW1lc3NhZ2UtZGV0YWlsLWRpYWxvZyBtbmctbWVzc2FnZS1kZXRhaWwtZGlhbG9nLScgKyAoZGlhbG9nTm90aWZpY2F0aW9uKCk/LnNldmVyaXR5ID8/ICcnKVwiXG4gICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICBkcmFnZ2FibGU9XCJmYWxzZVwiXG4gICAgbW9kYWw9XCJ0cnVlXCI+XG4gICAgPG5nLXRlbXBsYXRlICNoZWFkZXI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicC1kaWFsb2ctdGl0bGUgZm9udC1ib2xkIG1uZy1kaWFsb2ctc3VjY2Vzc1wiPlxuICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIidtci0yIHBpICcgKyBkaWFsb2dOb3RpZmljYXRpb25JY29uQ2xhc3MoKVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIHt7IGRpYWxvZ05vdGlmaWNhdGlvbigpPy5zdW1tYXJ5ID8/ICcnIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJtbmctbm90aWZpY2F0aW9uLWRldGFpbHNcIj5cbiAgICAgICAge3sgZGlhbG9nTm90aWZpY2F0aW9uKCk/LmRldGFpbCA/PyAnJyB9fVxuICAgIDwvZGl2PlxuPC9wLWRpYWxvZz5cbiJdfQ==","export class ACommonsErrorBase extends Error {\n constructor(message, options) {\n super(message);\n this.name = options?.name ?? 'MngError';\n this.messageCode = options?.messageCode;\n this.location = options?.location ?? window?.location?.href;\n this.cause = options?.cause;\n this.stack = options?.stack ?? (options?.cause ? options.cause.stack : new Error(message).stack);\n this.details = options?.details;\n this.notification = options?.notification;\n }\n}\nexport class CommonsInternalError extends ACommonsErrorBase {\n constructor(message, options) {\n super(message, {\n name: 'CommonsInternalError',\n ...options\n });\n this.type = 'CommonsInternalError';\n }\n}\nexport class CommonsHttpError extends ACommonsErrorBase {\n constructor(message, httpError, options) {\n super(message, {\n name: 'CommonsHttpError_' + httpError.url,\n cause: httpError,\n ...options\n });\n this.type = 'CommonsHttpError';\n this.httpError = httpError;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9lcnJvci9lcnJvci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQ0EsTUFBTSxPQUFnQixpQkFBa0IsU0FBUSxLQUFLO0lBU2pELFlBQXNCLE9BQWUsRUFBRSxPQUFpQztRQUNwRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sRUFBRSxJQUFJLElBQUksVUFBVSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxFQUFFLFdBQVcsQ0FBQztRQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sRUFBRSxRQUFRLElBQUksTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUM7UUFDNUQsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLEVBQUUsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxFQUFFLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sRUFBRSxPQUFPLENBQUM7UUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLEVBQUUsWUFBWSxDQUFDO0lBQzlDLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxpQkFBaUI7SUFHdkQsWUFBWSxPQUFlLEVBQUUsT0FBaUM7UUFDMUQsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUNYLElBQUksRUFBRSxzQkFBc0I7WUFDNUIsR0FBRyxPQUFPO1NBQ2IsQ0FBQyxDQUFDO1FBTlMsU0FBSSxHQUFHLHNCQUFzQixDQUFDO0lBTzlDLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxpQkFBaUI7SUFLbkQsWUFBWSxPQUFlLEVBQUUsU0FBNEIsRUFBRSxPQUFpQztRQUN4RixLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ1gsSUFBSSxFQUFFLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxHQUFHO1lBQ3pDLEtBQUssRUFBRSxTQUFTO1lBQ2hCLEdBQUcsT0FBTztTQUNiLENBQUMsQ0FBQztRQVRTLFNBQUksR0FBRyxrQkFBa0IsQ0FBQztRQVV0QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUMvQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBFcnJvclJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7VG9hc3RNZXNzYWdlT3B0aW9uc30gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5pbXBvcnQge0FjdGlvblBhcmFtZXRlcnN9IGZyb20gJy4uL2FjdGlvbi9hY3Rpb24tcGFyYW1ldGVycy5tb2RlbCc7XG5cbmV4cG9ydCB0eXBlIEVycm9yVHlwZXMgPSAnQ29tbW9uc0ludGVybmFsRXJyb3InIHwgJ0NvbW1vbnNBY3Rpb25FcnJvcicgfCAnQ29tbW9uc0h0dHBFcnJvcic7XG5cbi8qKlxuICogTWFpbiB1c2UgZm9yIGNvbW1vbnMgZXJyb3IgZnJvbSBhY3Rpb24gZXhlY3V0aW9uLlxuICogSWYgaHR0cCBlcnJvciBpcyB0aHJvd24sIGFkZCBpdCBpbiBjYXVzZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29tbW9uc0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIHR5cGU6IEVycm9yVHlwZXM7XG4gICAgbWVzc2FnZUNvZGU/OiBudW1iZXIgfCBzdHJpbmc7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIGRldGFpbHM/OiBhbnk7XG4gICAgc3RhY2s/OiBzdHJpbmc7XG4gICAgY2F1c2U/OiBFcnJvciB8IHVua25vd247XG4gICAgbm90aWZpY2F0aW9uPzogVG9hc3RNZXNzYWdlT3B0aW9ucztcbiAgICBub3RpZmljYXRpb25FbWl0U291cmNlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbnNFcnJvckJhc2VPcHRpb25zIHtcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIG1lc3NhZ2VDb2RlPzogbnVtYmVyIHwgc3RyaW5nO1xuICAgIGRldGFpbHM/OiBhbnk7XG4gICAgY2F1c2U/OiBFcnJvcjtcbiAgICBzdGFjaz86IHN0cmluZztcbiAgICBsb2NhdGlvbj86IHN0cmluZztcbiAgICBub3RpZmljYXRpb24/OiBUb2FzdE1lc3NhZ2VPcHRpb25zO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQUNvbW1vbnNFcnJvckJhc2UgZXh0ZW5kcyBFcnJvciBpbXBsZW1lbnRzIElDb21tb25zRXJyb3Ige1xuICAgIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB0eXBlOiBFcnJvclR5cGVzO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IG1lc3NhZ2VDb2RlPzogbnVtYmVyIHwgc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSBsb2NhdGlvbj86IHN0cmluZztcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGV0YWlscz86IGFueTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbm90aWZpY2F0aW9uPzogVG9hc3RNZXNzYWdlT3B0aW9ucztcbiAgICBwdWJsaWMgcmVhZG9ubHkgbm90aWZpY2F0aW9uRW1pdFNvdXJjZT86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIG9wdGlvbnM/OiBDb21tb25zRXJyb3JCYXNlT3B0aW9ucykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcblxuICAgICAgICB0aGlzLm5hbWUgPSBvcHRpb25zPy5uYW1lID8/ICdNbmdFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZUNvZGUgPSBvcHRpb25zPy5tZXNzYWdlQ29kZTtcbiAgICAgICAgdGhpcy5sb2NhdGlvbiA9IG9wdGlvbnM/LmxvY2F0aW9uID8/IHdpbmRvdz8ubG9jYXRpb24/LmhyZWY7XG4gICAgICAgIHRoaXMuY2F1c2UgPSBvcHRpb25zPy5jYXVzZTtcbiAgICAgICAgdGhpcy5zdGFjayA9IG9wdGlvbnM/LnN0YWNrID8/IChvcHRpb25zPy5jYXVzZSA/IG9wdGlvbnMuY2F1c2Uuc3RhY2sgOiBuZXcgRXJyb3IobWVzc2FnZSkuc3RhY2spO1xuICAgICAgICB0aGlzLmRldGFpbHMgPSBvcHRpb25zPy5kZXRhaWxzO1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IG9wdGlvbnM/Lm5vdGlmaWNhdGlvbjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tb25zSW50ZXJuYWxFcnJvciBleHRlbmRzIEFDb21tb25zRXJyb3JCYXNlIGltcGxlbWVudHMgSUNvbW1vbnNFcnJvciB7XG4gICAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSAnQ29tbW9uc0ludGVybmFsRXJyb3InO1xuXG4gICAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBvcHRpb25zPzogQ29tbW9uc0Vycm9yQmFzZU9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSwge1xuICAgICAgICAgICAgbmFtZTogJ0NvbW1vbnNJbnRlcm5hbEVycm9yJyxcbiAgICAgICAgICAgIC4uLm9wdGlvbnNcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tbW9uc0h0dHBFcnJvciBleHRlbmRzIEFDb21tb25zRXJyb3JCYXNlIGltcGxlbWVudHMgSUNvbW1vbnNFcnJvciB7XG4gICAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSAnQ29tbW9uc0h0dHBFcnJvcic7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgaHR0cEVycm9yOiBIdHRwRXJyb3JSZXNwb25zZTtcblxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgaHR0cEVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSwgb3B0aW9ucz86IENvbW1vbnNFcnJvckJhc2VPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UsIHtcbiAgICAgICAgICAgIG5hbWU6ICdDb21tb25zSHR0cEVycm9yXycgKyBodHRwRXJyb3IudXJsLFxuICAgICAgICAgICAgY2F1c2U6IGh0dHBFcnJvcixcbiAgICAgICAgICAgIC4uLm9wdGlvbnNcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaHR0cEVycm9yID0gaHR0cEVycm9yO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29tbW9uc0FjdGlvbkVycm9yIGV4dGVuZHMgSUNvbW1vbnNFcnJvciB7XG4gICAgdHlwZTogJ0NvbW1vbnNBY3Rpb25FcnJvcic7XG4gICAgaHR0cEVycm9yPzogSHR0cEVycm9yUmVzcG9uc2U7XG4gICAgYWN0aW9uQ29udGV4dD86IElDb21tb25zQWN0aW9uRXJyb3JDb250ZXh0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb21tb25zQWN0aW9uRXJyb3JDb250ZXh0IHtcbiAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPGFueT47XG59XG4iXX0=","const ngPrimerFormatSupported = [/d{1,2}/g, /E{1,5}/g, /c{1,5}/g, /M{1,5}/g, /L{1,5}/g, /y{1,4}/g, /Y{1,4}/g];\nconst ngPrimeFormatOther = [/G{1,5}/g, /w{1,2}/g, /W/g, /a{1,5}/g, /B{1,5}/g, /b{1,5}/g, /h{1,2}/g, /H{1,2}/g, /m{1,2}/g, /s{1,2}/g, /S{1,3}/g, /z{1,4}/g, /Z{1,5}/g, /O{1,4}/g];\nconst ngPrimerFormatMap = {\n // days\n d: 'd',\n dd: 'dd',\n E: 'D',\n EE: 'D',\n EEE: 'D',\n EEEE: 'DD',\n EEEEE: 'D',\n EEEEEE: 'D',\n c: 'd',\n cc: 'dd',\n ccc: 'D',\n cccc: 'DD',\n ccccc: 'D',\n cccccc: 'D',\n // months\n M: 'm',\n MM: 'mm',\n MMM: 'M',\n MMMM: 'MM',\n MMMMM: 'M',\n L: 'm',\n LL: 'mm',\n LLL: 'M',\n LLLL: 'MM',\n LLLLL: 'M',\n // year\n y: 'y',\n yy: 'y',\n yyy: 'yy',\n yyyy: 'yy',\n Y: 'y',\n YY: 'y',\n YYY: 'yy',\n YYYY: 'yy'\n};\nfunction padNumber(num, size = 2) {\n let str = String(num);\n while (str.length < size) {\n str = '0' + str;\n }\n return str;\n}\nexport function dateToIsoString(value, type = 'date-time', dateTimeOpts = {}) {\n if (typeof value === 'string') {\n value = new Date(value);\n }\n if (typeof value === 'number') {\n value = new Date(value);\n }\n if (!(value instanceof Date)) {\n return null;\n }\n if (type === 'date') {\n // date only, no time part (and timezone, millis, utc does not matter ...)\n return value.getFullYear() + '-' + padNumber(value.getMonth() + 1) + '-' + padNumber(value.getDate());\n }\n if (dateTimeOpts.utc) {\n let str = value.toISOString();\n if (dateTimeOpts.noMillis) {\n const dotIdx = str.lastIndexOf('.');\n str = str.substring(0, dotIdx) + str.substring(dotIdx + 4, str.length);\n }\n if (dateTimeOpts.noTimezone) {\n str = str.substring(0, str.length - 1);\n }\n return str;\n }\n else {\n let base = value.getFullYear() +\n '-' +\n padNumber(value.getMonth() + 1) +\n '-' +\n padNumber(value.getDate()) +\n 'T' +\n padNumber(value.getHours()) +\n ':' +\n padNumber(value.getMinutes()) +\n ':' +\n padNumber(value.getSeconds());\n if (!dateTimeOpts.noMillis) {\n base += '.' + padNumber(value.getMilliseconds(), 3);\n }\n if (!dateTimeOpts.noTimezone) {\n const tzo = -value.getTimezoneOffset(), dif = tzo >= 0 ? '+' : '-';\n base = base + (dif + padNumber(Math.floor(Math.abs(tzo) / 60)) + ':' + padNumber(Math.abs(tzo) % 60));\n }\n return base;\n }\n}\nexport function fromAngularDateFormatToPrime(ngDateFormat) {\n let primeDateFormat = ngDateFormat;\n for (const regex of ngPrimeFormatOther) {\n primeDateFormat = primeDateFormat.replace(regex, ' ');\n }\n for (const regex of ngPrimerFormatSupported) {\n const matches = [...primeDateFormat.matchAll(regex)].reverse();\n for (const match of matches) {\n if (match.index) {\n const matchStr = match[0];\n const replacement = ngPrimerFormatMap[matchStr] ?? match[0];\n primeDateFormat = primeDateFormat.substring(0, match.index) + replacement + primeDateFormat.substring(match.index + matchStr.length);\n }\n }\n }\n primeDateFormat = primeDateFormat.replace(/\\s+\\W\\s+/g, ' ');\n primeDateFormat = primeDateFormat.replace(/\\s\\s+/g, ' ');\n return primeDateFormat.trim();\n}\nexport function angularDateFormatHasTime(ngDateFormat) {\n return /[hHmsS]/.test(ngDateFormat);\n}\nexport function angularDateFormatHasSeconds(ngDateFormat) {\n return /[sS]/.test(ngDateFormat);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL2hlbHBlcnMvZGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLHVCQUF1QixHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDOUcsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNqTCxNQUFNLGlCQUFpQixHQUFHO0lBQ3RCLE9BQU87SUFDUCxDQUFDLEVBQUUsR0FBRztJQUNOLEVBQUUsRUFBRSxJQUFJO0lBQ1IsQ0FBQyxFQUFFLEdBQUc7SUFDTixFQUFFLEVBQUUsR0FBRztJQUNQLEdBQUcsRUFBRSxHQUFHO0lBQ1IsSUFBSSxFQUFFLElBQUk7SUFDVixLQUFLLEVBQUUsR0FBRztJQUNWLE1BQU0sRUFBRSxHQUFHO0lBQ1gsQ0FBQyxFQUFFLEdBQUc7SUFDTixFQUFFLEVBQUUsSUFBSTtJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsSUFBSSxFQUFFLElBQUk7SUFDVixLQUFLLEVBQUUsR0FBRztJQUNWLE1BQU0sRUFBRSxHQUFHO0lBQ1gsU0FBUztJQUNULENBQUMsRUFBRSxHQUFHO0lBQ04sRUFBRSxFQUFFLElBQUk7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLElBQUksRUFBRSxJQUFJO0lBQ1YsS0FBSyxFQUFFLEdBQUc7SUFDVixDQUFDLEVBQUUsR0FBRztJQUNOLEVBQUUsRUFBRSxJQUFJO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixJQUFJLEVBQUUsSUFBSTtJ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QUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxRQUF3QixDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1RSxlQUFlLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLFdBQVcsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pJLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUNELGVBQWUsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM1RCxlQUFlLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFekQsT0FBTyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbEMsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxZQUFvQjtJQUN6RCxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxZQUFvQjtJQUM1RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDckMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIHRvSXNvU3RyaW5nVHlwZU9wdFR5cGUgPSAnZGF0ZScgfCAnZGF0ZS10aW1lJyB8ICdkYXRlVGltZSc7XG5leHBvcnQgdHlwZSB0b0lzb1N0cmluZ0RhdGVUaW1lT3B0c1R5cGUgPSB7dXRjPzogYm9vbGVhbjsgbm9UaW1lem9uZT86IGJvb2xlYW47IG5vTWlsbGlzPzogYm9vbGVhbn07XG5cbmNvbnN0IG5nUHJpbWVyRm9ybWF0U3VwcG9ydGVkID0gWy9kezEsMn0vZywgL0V7MSw1fS9nLCAvY3sxLDV9L2csIC9NezEsNX0vZywgL0x7MSw1fS9nLCAveXsxLDR9L2csIC9ZezEsNH0vZ107XG5jb25zdCBuZ1ByaW1lRm9ybWF0T3RoZXIgPSBbL0d7MSw1fS9nLCAvd3sxLDJ9L2csIC9XL2csIC9hezEsNX0vZywgL0J7MSw1fS9nLCAvYnsxLDV9L2csIC9oezEsMn0vZywgL0h7MSwyfS9nLCAvbXsxLDJ9L2csIC9zezEsMn0vZywgL1N7MSwzfS9nLCAvensxLDR9L2csIC9aezEsNX0vZywgL097MSw0fS9nXTtcbmNvbnN0IG5nUHJpbWVyRm9ybWF0TWFwID0ge1xuICAgIC8vIGRheXNcbiAgICBkOiAnZCcsXG4gICAgZGQ6ICdkZCcsXG4gICAgRTogJ0QnLFxuICAgIEVFOiAnRCcsXG4gICAgRUVFOiAnRCcsXG4gICAgRUVFRTogJ0REJyxcbiAgICBFRUVFRTogJ0QnLFxuICAgIEVFRUVFRTogJ0QnLFxuICAgIGM6ICdkJyxcbiAgICBjYzogJ2RkJyxcbiAgICBjY2M6ICdEJyxcbiAgICBjY2NjOiAnREQnLFxuICAgIGNjY2NjOiAnRCcsXG4gICAgY2NjY2NjOiAnRCcsXG4gICAgLy8gbW9udGhzXG4gICAgTTogJ20nLFxuICAgIE1NOiAnbW0nLFxuICAgIE1NTTogJ00nLFxuICAgIE1NTU06ICdNTScsXG4gICAgTU1NTU06ICdNJyxcbiAgICBMOiAnbScsXG4gICAgTEw6ICdtbScsXG4gICAgTExMOiAnTScsXG4gICAgTExMTDogJ01NJyxcbiAgICBMTExMTDogJ00nLFxuICAgIC8vIHllYXJcbiAgICB5OiAneScsXG4gICAgeXk6ICd5JyxcbiAgICB5eXk6ICd5eScsXG4gICAgeXl5eTogJ3l5JyxcbiAgICBZOiAneScsXG4gICAgWVk6ICd5JyxcbiAgICBZWVk6ICd5eScsXG4gICAgWVlZWTogJ3l5J1xufTtcblxuZnVuY3Rpb24gcGFkTnVtYmVyKG51bTogbnVtYmVyLCBzaXplID0gMikge1xuICAgIGxldCBzdHIgPSBTdHJpbmcobnVtKTtcbiAgICB3aGlsZSAoc3RyLmxlbmd0aCA8IHNpemUpIHtcbiAgICAgICAgc3RyID0gJzAnICsgc3RyO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGF0ZVRvSXNvU3RyaW5nKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlLCB0eXBlPzogJ2RhdGUnKTogc3RyaW5nO1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGVUb0lzb1N0cmluZyh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSwgdHlwZTogJ2RhdGUtdGltZScgfCAnZGF0ZVRpbWUnLCBkYXRlVGltZU9wdHM/OiB0b0lzb1N0cmluZ0RhdGVUaW1lT3B0c1R5cGUpOiBzdHJpbmc7XG5leHBvcnQgZnVuY3Rpb24gZGF0ZVRvSXNvU3RyaW5nKHZhbHVlOiB1bmRlZmluZWQgfCBudWxsIHwgdW5rbm93biwgdHlwZT86ICdkYXRlJyk6IG51bGw7XG5leHBvcnQgZnVuY3Rpb24gZGF0ZVRvSXNvU3RyaW5nKHZhbHVlOiB1bmRlZmluZWQgfCBudWxsIHwgdW5rbm93biwgdHlwZTogJ2RhdGUtdGltZScgfCAnZGF0ZVRpbWUnLCBkYXRlVGltZU9wdHM/OiB0b0lzb1N0cmluZ0RhdGVUaW1lT3B0c1R5cGUpOiBudWxsO1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGVUb0lzb1N0cmluZyh2YWx1ZTogdW5rbm93biwgdHlwZT86IHRvSXNvU3RyaW5nVHlwZU9wdFR5cGUsIGRhdGVUaW1lT3B0cz86IHRvSXNvU3RyaW5nRGF0ZVRpbWVPcHRzVHlwZSk6IHN0cmluZyB8IG51bGw7XG5leHBvcnQgZnVuY3Rpb24gZGF0ZVRvSXNvU3RyaW5nKHZhbHVlOiB1bmtub3duLCB0eXBlOiB0b0lzb1N0cmluZ1R5cGVPcHRUeXBlID0gJ2RhdGUtdGltZScsIGRhdGVUaW1lT3B0czogdG9Jc29TdHJpbmdEYXRlVGltZU9wdHNUeXBlID0ge30pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgfVxuICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgLy8gZGF0ZSBvbmx5LCBubyB0aW1lIHBhcnQgKGFuZCB0aW1lem9uZSwgbWlsbGlzLCB1dGMgZG9lcyBub3QgbWF0dGVyIC4uLilcbiAgICAgICAgcmV0dXJuIHZhbHVlLmdldEZ1bGxZZWFyKCkgKyAnLScgKyBwYWROdW1iZXIodmFsdWUuZ2V0TW9udGgoKSArIDEpICsgJy0nICsgcGFkTnVtYmVyKHZhbHVlLmdldERhdGUoKSk7XG4gICAgfVxuICAgIGlmIChkYXRlVGltZU9wdHMudXRjKSB7XG4gICAgICAgIGxldCBzdHIgPSB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgICAgICBpZiAoZGF0ZVRpbWVPcHRzLm5vTWlsbGlzKSB7XG4gICAgICAgICAgICBjb25zdCBkb3RJZHggPSBzdHIubGFzdEluZGV4T2YoJy4nKTtcbiAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgZG90SWR4KSArIHN0ci5zdWJzdHJpbmcoZG90SWR4ICsgNCwgc3RyLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGVUaW1lT3B0cy5ub1RpbWV6b25lKSB7XG4gICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIHN0ci5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBiYXNlID1cbiAgICAgICAgICAgIHZhbHVlLmdldEZ1bGxZZWFyKCkgK1xuICAgICAgICAgICAgJy0nICtcbiAgICAgICAgICAgIHBhZE51bWJlcih2YWx1ZS5nZXRNb250aCgpICsgMSkgK1xuICAgICAgICAgICAgJy0nICtcbiAgICAgICAgICAgIHBhZE51bWJlcih2YWx1ZS5nZXREYXRlKCkpICtcbiAgICAgICAgICAgICdUJyArXG4gICAgICAgICAgICBwYWROdW1iZXIodmFsdWUuZ2V0SG91cnMoKSkgK1xuICAgICAgICAgICAgJzonICtcbiAgICAgICAgICAgIHBhZE51bWJlcih2YWx1ZS5nZXRNaW51dGVzKCkpICtcbiAgICAgICAgICAgICc6JyArXG4gICAgICAgICAgICBwYWROdW1iZXIodmFsdWUuZ2V0U2Vjb25kcygpKTtcblxuICAgICAgICBpZiAoIWRhdGVUaW1lT3B0cy5ub01pbGxpcykge1xuICAgICAgICAgICAgYmFzZSArPSAnLicgKyBwYWROdW1iZXIodmFsdWUuZ2V0TWlsbGlzZWNvbmRzKCksIDMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGF0ZVRpbWVPcHRzLm5vVGltZXpvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHR6byA9IC12YWx1ZS5nZXRUaW1lem9uZU9mZnNldCgpLFxuICAgICAgICAgICAgICAgIGRpZiA9IHR6byA+PSAwID8gJysnIDogJy0nO1xuXG4gICAgICAgICAgICBiYXNlID0gYmFzZSArIChkaWYgKyBwYWROdW1iZXIoTWF0aC5mbG9vcihNYXRoLmFicyh0em8pIC8gNjApKSArICc6JyArIHBhZE51bWJlcihNYXRoLmFicyh0em8pICUgNjApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBiYXNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Bbmd1bGFyRGF0ZUZvcm1hdFRvUHJpbWUobmdEYXRlRm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBwcmltZURhdGVGb3JtYXQgPSBuZ0RhdGVGb3JtYXQ7XG4gICAgZm9yIChjb25zdCByZWdleCBvZiBuZ1ByaW1lRm9ybWF0T3RoZXIpIHtcbiAgICAgICAgcHJpbWVEYXRlRm9ybWF0ID0gcHJpbWVEYXRlRm9ybWF0LnJlcGxhY2UocmVnZXgsICcgJyk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcmVnZXggb2YgbmdQcmltZXJGb3JtYXRTdXBwb3J0ZWQpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IFsuLi5wcmltZURhdGVGb3JtYXQubWF0Y2hBbGwocmVnZXgpXS5yZXZlcnNlKCk7XG4gICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgbWF0Y2hlcykge1xuICAgICAgICAgICAgaWYgKG1hdGNoLmluZGV4KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hTdHIgPSBtYXRjaFswXTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXBsYWNlbWVudCA9IG5nUHJpbWVyRm9ybWF0TWFwW21hdGNoU3RyIGFzIGtleW9mIG9iamVjdF0gPz8gbWF0Y2hbMF07XG4gICAgICAgICAgICAgICAgcHJpbWVEYXRlRm9ybWF0ID0gcHJpbWVEYXRlRm9ybWF0LnN1YnN0cmluZygwLCBtYXRjaC5pbmRleCkgKyByZXBsYWNlbWVudCArIHByaW1lRGF0ZUZvcm1hdC5zdWJzdHJpbmcobWF0Y2guaW5kZXggKyBtYXRjaFN0ci5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHByaW1lRGF0ZUZvcm1hdCA9IHByaW1lRGF0ZUZvcm1hdC5yZXBsYWNlKC9cXHMrXFxXXFxzKy9nLCAnICcpO1xuICAgIHByaW1lRGF0ZUZvcm1hdCA9IHByaW1lRGF0ZUZvcm1hdC5yZXBsYWNlKC9cXHNcXHMrL2csICcgJyk7XG5cbiAgICByZXR1cm4gcHJpbWVEYXRlRm9ybWF0LnRyaW0oKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFuZ3VsYXJEYXRlRm9ybWF0SGFzVGltZShuZ0RhdGVGb3JtYXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvW2hIbXNTXS8udGVzdChuZ0RhdGVGb3JtYXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5ndWxhckRhdGVGb3JtYXRIYXNTZWNvbmRzKG5nRGF0ZUZvcm1hdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9bc1NdLy50ZXN0KG5nRGF0ZUZvcm1hdCk7XG59XG4iXX0=","export class FilterMatchMode {\n static { this.Equals = 'equals'; }\n static { this.EqualsAbbr = 'eq'; }\n static { this.NotEquals = 'notEquals'; }\n static { this.NotEqualsAbbr = 'ne'; }\n static { this.Contains = 'contains'; }\n static { this.ContainsAbbr = 'cn'; }\n static { this.NotContains = 'notContains'; }\n static { this.NotContainsAbbr = 'nc'; }\n static { this.In = 'in'; }\n static { this.InAbbr = 'in'; }\n static { this.NotIn = 'notIn'; }\n static { this.NotInAbbr = 'ni'; }\n static { this.StartsWith = 'startsWith'; }\n static { this.StartsWithAbbr = 'sw'; }\n static { this.EndsWith = 'endsWith'; }\n static { this.EndsWithAbbr = 'ew'; }\n static { this.LessThan = 'lessThan'; }\n static { this.LessThanAbbr = 'lt'; }\n static { this.LessThanOrEqualTo = 'lessThanOrEqualTo'; }\n static { this.LessThanOrEqualToAbbr = 'le'; }\n static { this.GreaterThan = 'greaterThan'; }\n static { this.GreaterThanAbbr = 'gt'; }\n static { this.GreaterThanOrEqualTo = 'greaterThanOrEqualTo'; }\n static { this.GreaterThanOrEqualToAbbr = 'ge'; }\n static { this.Between = 'between'; }\n static { this.BetweenAbbr = 'bt'; }\n static { this.Exists = 'exists'; }\n static { this.ExistsAbbr = 'ex'; }\n static { this.DoesNotExist = 'doesNotExist'; }\n static { this.DoesNotExistAbbr = 'nx'; }\n static getAbbreviation(mode) {\n switch (mode) {\n case FilterMatchMode.Equals:\n return FilterMatchMode.EqualsAbbr;\n case FilterMatchMode.NotEquals:\n return FilterMatchMode.NotEqualsAbbr;\n case FilterMatchMode.Contains:\n return FilterMatchMode.ContainsAbbr;\n case FilterMatchMode.NotContains:\n return FilterMatchMode.NotContainsAbbr;\n case FilterMatchMode.In:\n return FilterMatchMode.InAbbr;\n case FilterMatchMode.NotIn:\n return FilterMatchMode.NotInAbbr;\n case FilterMatchMode.StartsWith:\n return FilterMatchMode.StartsWithAbbr;\n case FilterMatchMode.EndsWith:\n return FilterMatchMode.EndsWithAbbr;\n case FilterMatchMode.LessThan:\n return FilterMatchMode.LessThanAbbr;\n case FilterMatchMode.LessThanOrEqualTo:\n return FilterMatchMode.LessThanOrEqualToAbbr;\n case FilterMatchMode.GreaterThan:\n return FilterMatchMode.GreaterThanAbbr;\n case FilterMatchMode.GreaterThanOrEqualTo:\n return FilterMatchMode.GreaterThanOrEqualToAbbr;\n case FilterMatchMode.Between:\n return FilterMatchMode.BetweenAbbr;\n case FilterMatchMode.Exists:\n return FilterMatchMode.ExistsAbbr;\n case FilterMatchMode.DoesNotExist:\n return FilterMatchMode.DoesNotExistAbbr;\n default:\n return null;\n }\n }\n static fromAbbreviation(abbr) {\n switch (abbr) {\n case FilterMatchMode.EqualsAbbr:\n return FilterMatchMode.Equals;\n case FilterMatchMode.NotEqualsAbbr:\n return FilterMatchMode.NotEquals;\n case FilterMatchMode.ContainsAbbr:\n return FilterMatchMode.Contains;\n case FilterMatchMode.NotContainsAbbr:\n return FilterMatchMode.NotContains;\n case FilterMatchMode.InAbbr:\n return FilterMatchMode.In;\n case FilterMatchMode.NotInAbbr:\n return FilterMatchMode.NotIn;\n case FilterMatchMode.StartsWithAbbr:\n return FilterMatchMode.StartsWith;\n case FilterMatchMode.EndsWithAbbr:\n return FilterMatchMode.EndsWith;\n case FilterMatchMode.LessThanAbbr:\n return FilterMatchMode.LessThan;\n case FilterMatchMode.LessThanOrEqualToAbbr:\n return FilterMatchMode.LessThanOrEqualTo;\n case FilterMatchMode.GreaterThanAbbr:\n return FilterMatchMode.GreaterThan;\n case FilterMatchMode.GreaterThanOrEqualToAbbr:\n return FilterMatchMode.GreaterThanOrEqualTo;\n case FilterMatchMode.BetweenAbbr:\n return FilterMatchMode.Between;\n case FilterMatchMode.ExistsAbbr:\n return FilterMatchMode.Exists;\n case FilterMatchMode.DoesNotExistAbbr:\n return FilterMatchMode.DoesNotExist;\n default:\n return null;\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLW1hdGNoLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvZGF0YS1saXN0L2ZpbHRlci1tYXRjaC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsTUFBTSxPQUFPLGVBQWU7YUFDVixXQUFNLEdBQXdCLFFBQVEsQ0FBQzthQUN2QyxlQUFVLEdBQUcsSUFBSSxDQUFDO2FBRWxCLGNBQVMsR0FBd0IsV0FBVyxDQUFDO2FBQzdDLGtCQUFhLEdBQUcsSUFBSSxDQUFDO2FBRXJCLGFBQVEsR0FBd0IsVUFBVSxDQUFDO2FBQzNDLGlCQUFZLEdBQUcsSUFBSSxDQUFDO2FBRXBCLGdCQUFXLEdBQXdCLGFBQWEsQ0FBQzthQUNqRCxvQkFBZSxHQUFHLElBQUksQ0FBQzthQUV2QixPQUFFLEdBQXdCLElBQUksQ0FBQzthQUMvQixXQUFNLEdBQUcsSUFBSSxDQUFDO2FBRWQsVUFBSyxHQUF3QixPQUFPLENBQUM7YUFDckMsY0FBUyxHQUFHLElBQUksQ0FBQzthQUVqQixlQUFVLEdBQXdCLFlBQVksQ0FBQzthQUMvQyxtQkFBYyxHQUFHLElBQUksQ0FBQzthQUV0QixhQUFRLEdBQXdCLFVBQVUsQ0FBQzthQUMzQyxpQkFBWSxHQUFHLElBQUksQ0FBQzthQUVwQixhQUFRLEdBQXdCLFVBQVUsQ0FBQzthQUMzQyxpQkFBWSxHQUFHLElBQUksQ0FBQzthQUVwQixzQkFBaUIsR0FBd0IsbUJBQW1CLENBQUM7YUFDN0QsMEJBQXFCLEdBQUcsSUFBSSxDQUFDO2FBRTdCLGdCQUFXLEdBQXdCLGFBQWEsQ0FBQzthQUNqRCxvQkFBZSxHQUFHLElBQUksQ0FBQzthQUV2Qix5QkFBb0IsR0FBd0Isc0JBQXNCLENBQUM7YUFDbkUsNkJBQXdCLEdBQUcsSUFBSSxDQUFDO2FBRWhDLFlBQU8sR0FBd0IsU0FBUyxDQUFDO2FBQ3pDLGdCQUFXLEdBQUcsSUFBSSxDQUFDO2FBRW5CLFdBQU0sR0FBd0IsUUFB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Z0JBQ3pDLE9BQU8sZUFBZSxDQUFDLG9CQUFvQixDQUFDO1lBQ2hELEtBQUssZUFBZSxDQUFDLFdBQVc7Z0JBQzVCLE9BQU8sZUFBZSxDQUFDLE9BQU8sQ0FBQztZQUNuQyxLQUFLLGVBQWUsQ0FBQyxVQUFVO2dCQUMzQixPQUFPLGVBQWUsQ0FBQyxNQUFNLENBQUM7WUFDbEMsS0FBSyxlQUFlLENBQUMsZ0JBQWdCO2dCQUNqQyxPQUFPLGVBQWUsQ0FBQyxZQUFZLENBQUM7WUFDeEM7Z0JBQ0ksT0FBTyxJQUFJLENBQUM7UUFDcEIsQ0FBQztJQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBGaWx0ZXJNYXRjaE1vZGVUeXBlID1cbiAgICB8ICdlcXVhbHMnXG4gICAgfCAnbm90RXF1YWxzJ1xuICAgIHwgJ2NvbnRhaW5zJ1xuICAgIHwgJ25vdENvbnRhaW5zJ1xuICAgIHwgJ2luJ1xuICAgIHwgJ25vdEluJ1xuICAgIHwgJ3N0YXJ0c1dpdGgnXG4gICAgfCAnZW5kc1dpdGgnXG4gICAgfCAnbGVzc1RoYW4nXG4gICAgfCAnbGVzc1RoYW5PckVxdWFsVG8nXG4gICAgfCAnZ3JlYXRlclRoYW4nXG4gICAgfCAnZ3JlYXRlclRoYW5PckVxdWFsVG8nXG4gICAgfCAnYmV0d2VlbidcbiAgICB8ICdleGlzdHMnXG4gICAgfCAnZG9lc05vdEV4aXN0JztcbmV4cG9ydCB0eXBlIEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZSA9IEZpbHRlck1hdGNoTW9kZVR5cGUgfCBzdHJpbmc7XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJNYXRjaE1vZGUge1xuICAgIHB1YmxpYyBzdGF0aWMgRXF1YWxzOiBGaWx0ZXJNYXRjaE1vZGVUeXBlID0gJ2VxdWFscyc7XG4gICAgcHVibGljIHN0YXRpYyBFcXVhbHNBYmJyID0gJ2VxJztcblxuICAgIHB1YmxpYyBzdGF0aWMgTm90RXF1YWxzOiBGaWx0ZXJNYXRjaE1vZGVUeXBlID0gJ25vdEVxdWFscyc7XG4gICAgcHVibGljIHN0YXRpYyBOb3RFcXVhbHNBYmJyID0gJ25lJztcblxuICAgIHB1YmxpYyBzdGF0aWMgQ29udGFpbnM6IEZpbHRlck1hdGNoTW9kZVR5cGUgPSAnY29udGFpbnMnO1xuICAgIHB1YmxpYyBzdGF0aWMgQ29udGFpbnNBYmJyID0gJ2NuJztcblxuICAgIHB1YmxpYyBzdGF0aWMgTm90Q29udGFpbnM6IEZpbHRlck1hdGNoTW9kZVR5cGUgPSAnbm90Q29udGFpbnMnO1xuICAgIHB1YmxpYyBzdGF0aWMgTm90Q29udGFpbnNBYmJyID0gJ25jJztcblxuICAgIHB1YmxpYyBzdGF0aWMgSW46IEZpbHRlck1hdGNoTW9kZVR5cGUgPSAnaW4nO1xuICAgIHB1YmxpYyBzdGF0aWMgSW5BYmJyID0gJ2luJztcblxuICAgIHB1YmxpYyBzdGF0aWMgTm90SW46IEZpbHRlck1hdGNoTW9kZVR5cGUgPSAnbm90SW4nO1xuICAgIHB1YmxpYyBzdGF0aWMgTm90SW5BYmJyID0gJ25pJztcblxuICAgIHB1YmxpYyBzdGF0aWMgU3RhcnRzV2l0aDogRmlsdGVyTWF0Y2hNb2RlVHlwZSA9ICdzdGFydHNXaXRoJztcbiAgICBwdWJsaWMgc3RhdGljIFN0YXJ0c1dpdGhBYmJyID0gJ3N3JztcblxuICAgIHB1YmxpYyBzdGF0aWMgRW5kc1dpdGg6IEZpbHRlck1hdGNoTW9kZVR5cGUgPSAnZW5kc1dpdGgnO1xuICAgIHB1YmxpYyBzdGF0aWMgRW5kc1dpdGhBYmJyID0gJ2V3JztcblxuICAgIHB1YmxpYyBzdGF0aWMgTGVzc1RoYW46IEZpbHRlck1hdGNoTW9kZVR5cGUgPSAnbGVzc1RoYW4nO1xuICAgIHB1YmxpYyBzdGF0aWMgTGVzc1RoYW5BYmJyID0gJ2x0JztcblxuICAgIHB1YmxpYyBzdGF0aWMgTGVzc1RoYW5PckVxdWFsVG86IEZpbHRlck1hdGNoTW9kZVR5cGUgPSAnbGVzc1RoYW5PckVxdWFsVG8nO1xuICAgIHB1YmxpYyBzdGF0aWMgTGVzc1RoYW5PckVxdWFsVG9BYmJyID0gJ2xlJztcblxuICAgIHB1YmxpYyBzdGF0aWMgR3JlYXRlclRoYW46IEZpbHRlck1hdGNoTW9kZVR5cGUgPSAnZ3JlYXRlclRoYW4nO1xuICAgIHB1YmxpYyBzdGF0aWMgR3JlYXRlclRoYW5BYmJyID0gJ2d0JztcblxuICAgIHB1YmxpYyBzdGF0aWMgR3JlYXRlclRoYW5PckVxdWFsVG86IEZpbHRlck1hdGNoTW9kZVR5cGUgPSAnZ3JlYXRlclRoYW5PckVxdWFsVG8nO1xuICAgIHB1YmxpYyBzdGF0aWMgR3JlYXRlclRoYW5PckVxdWFsVG9BYmJyID0gJ2dlJztcblxuICAgIHB1YmxpYyBzdGF0aWMgQmV0d2VlbjogRmlsdGVyTWF0Y2hNb2RlVHlwZSA9ICdiZXR3ZWVuJztcbiAgICBwdWJsaWMgc3RhdGljIEJldHdlZW5BYmJyID0gJ2J0JztcblxuICAgIHB1YmxpYyBzdGF0aWMgRXhpc3RzOiBGaWx0ZXJNYXRjaE1vZGVUeXBlID0gJ2V4aXN0cyc7XG4gICAgcHVibGljIHN0YXRpYyBFeGlzdHNBYmJyID0gJ2V4JztcblxuICAgIHB1YmxpYyBzdGF0aWMgRG9lc05vdEV4aXN0OiBGaWx0ZXJNYXRjaE1vZGVUeXBlID0gJ2RvZXNOb3RFeGlzdCc7XG4gICAgcHVibGljIHN0YXRpYyBEb2VzTm90RXhpc3RBYmJyID0gJ254JztcblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QWJicmV2aWF0aW9uKG1vZGU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkVxdWFsczpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLkVxdWFsc0FiYnI7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5Ob3RFcXVhbHM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5Ob3RFcXVhbHNBYmJyO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuQ29udGFpbnM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5Db250YWluc0FiYnI7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5Ob3RDb250YWluczpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLk5vdENvbnRhaW5zQWJicjtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkluOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJNYXRjaE1vZGUuSW5BYmJyO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTm90SW46XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5Ob3RJbkFiYnI7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5TdGFydHNXaXRoOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJNYXRjaE1vZGUuU3RhcnRzV2l0aEFiYnI7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5FbmRzV2l0aDpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLkVuZHNXaXRoQWJicjtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkxlc3NUaGFuOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJNYXRjaE1vZGUuTGVzc1RoYW5BYmJyO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTGVzc1RoYW5PckVxdWFsVG86XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5MZXNzVGhhbk9yRXF1YWxUb0FiYnI7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5HcmVhdGVyVGhhbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLkdyZWF0ZXJUaGFuQWJicjtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkdyZWF0ZXJUaGFuT3JFcXVhbFRvOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJNYXRjaE1vZGUuR3JlYXRlclRoYW5PckVxdWFsVG9BYmJyO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW5BYmJyO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzQWJicjtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdEFiYnI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tQWJicmV2aWF0aW9uKGFiYnI6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBzd2l0Y2ggKGFiYnIpIHtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkVxdWFsc0FiYnI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5FcXVhbHM7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5Ob3RFcXVhbHNBYmJyOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJNYXRjaE1vZGUuTm90RXF1YWxzO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuQ29udGFpbnNBYmJyOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJNYXRjaE1vZGUuQ29udGFpbnM7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5Ob3RDb250YWluc0FiYnI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5Ob3RDb250YWlucztcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkluQWJicjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLkluO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTm90SW5BYmJyOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJNYXRjaE1vZGUuTm90SW47XG4gICAgICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5TdGFydHNXaXRoQWJicjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLlN0YXJ0c1dpdGg7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5FbmRzV2l0aEFiYnI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5FbmRzV2l0aDtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkxlc3NUaGFuQWJicjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLkxlc3NUaGFuO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTGVzc1RoYW5PckVxdWFsVG9BYmJyOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJNYXRjaE1vZGUuTGVzc1RoYW5PckVxdWFsVG87XG4gICAgICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5HcmVhdGVyVGhhbkFiYnI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5HcmVhdGVyVGhhbjtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkdyZWF0ZXJUaGFuT3JFcXVhbFRvQWJicjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLkdyZWF0ZXJUaGFuT3JFcXVhbFRvO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbkFiYnI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzQWJicjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cztcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdEFiYnI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3Q7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19","import { CommonsInternalError } from '../error/error.model';\nimport { dateToIsoString } from '../helpers/date';\nimport { FilterMatchMode } from './filter-match.model';\n/**\n * Converts a TableLazyLoadEvent to DataListParams.\n *\n * @param {TableLazyLoadEvent} event - The event containing the data to convert.\n * @return {DataListParams} - The converted DataListParams object.\n */\nexport function fromTableLoadToDataListParams(event) {\n const params = {};\n if (event.first != null) {\n params.offset = event.first;\n }\n if (event.rows != null) {\n params.limit = event.rows;\n }\n if (typeof event.globalFilter === 'string') {\n params.search = event.globalFilter;\n }\n else if (Array.isArray(event.globalFilter) && event.globalFilter.length > 0) {\n params.search = event.globalFilter[0];\n }\n if (Array.isArray(event.multiSortMeta) && event.multiSortMeta.length > 0) {\n params.sort = event.multiSortMeta.map(m => ({ property: m.field, ascending: m.order >= 0 }));\n }\n if (event.filters) {\n params.filters = Object.keys(event.filters).reduce((acc, key) => {\n const filter = {};\n const eventFilter = event.filters?.[key];\n if (Array.isArray(eventFilter)) {\n filter.value = eventFilter[0].value;\n filter.matchMode = eventFilter[0].matchMode;\n filter.caseSensitive = eventFilter[0].caseSensitive;\n }\n else if (eventFilter !== undefined) {\n filter.value = eventFilter.value;\n filter.matchMode = eventFilter.matchMode;\n filter.caseSensitive = eventFilter.caseSensitive;\n }\n // handle search case sensitivity to be also written on searchCaseSensitive\n if (key === 'global' && typeof params.search === 'string' && filter.caseSensitive !== undefined) {\n params.searchCaseSensitive = filter.caseSensitive;\n return acc;\n }\n return { ...acc, [key]: filter };\n }, {});\n }\n return params;\n}\n/**\n * Converts the given parameters to URL query parameters.\n * Sorts are formatted in Medius data API sort query language: `asc:prop1,desc:prop2`, ...\n * Filter keys are \"flattened\" in the new object, values are formatted in Medius data API filter query language: `cs:eq:asd`, `in:asd,qwe`, `ex`, ...\n *\n * @param {DataListParams} params - The parameters to convert.\n * @param {DataListParams|null} defaults - The default parameters used if no matching property in params is available. Defaults to { limit: 25, offset: 0 } if not provided.\n * @param opts - Options in converting to url query:\n * - prependFilterName Prepends filter key with provided string\n * @returns {Params} - The URL query parameters object.\n */\nexport function dataListParamsToUrlQuery(params, defaults = {\n limit: 25,\n offset: 0\n}, opts) {\n const urlParams = {};\n if (params.limit && params.limit !== defaults?.limit) {\n urlParams['limit'] = params.limit;\n }\n else if (!opts?.skipPresetDefaultsLimit) {\n urlParams['limit'] = defaults?.limit;\n }\n if (params.offset && params.offset !== defaults?.offset) {\n urlParams['offset'] = params.offset;\n }\n if (params.search && params.search !== defaults?.search) {\n urlParams['q'] = `${params.searchCaseSensitive ? `cs:` : ''}${params.search}`;\n }\n if (params.sort && Array.isArray(params.sort) && params.sort.length > 0) {\n if (defaults?.sort == null ||\n !Array.isArray(defaults.sort) ||\n defaults.sort.length === 0 ||\n params.sort.length !== defaults.sort.length ||\n defaults.sort.some((ds, idx) => ds.property !== params.sort[idx].property || (ds.ascending ?? true) !== (params.sort[idx].ascending ?? true))) {\n urlParams['sort'] = dataListParamsSortToUrlQuery(params);\n }\n }\n if (params.filters) {\n Object.keys(params.filters).forEach(k => {\n // global search filter is already included in the 'q' parameter, no need to include it here\n if (k === 'global') {\n return;\n }\n const paramFilter = params.filters[k];\n const defaultFilter = defaults?.filters?.[k];\n if (defaultFilter &&\n ((Array.isArray(defaultFilter.value) &&\n Array.isArray(paramFilter.value) &&\n defaultFilter.value.length === paramFilter.value.length &&\n defaultFilter.value.every((v, idx) => {\n const value = paramFilter.value[idx];\n if (value instanceof Date && v instanceof Date)\n return value.getTime() === v.getTime();\n else\n return value === v;\n })) || // handle arrays\n defaultFilter.value === paramFilter.value) &&\n defaultFilter.matchMode === paramFilter.matchMode &&\n (defaultFilter.caseSensitive ?? false) === (paramFilter.caseSensitive ?? false)) {\n return;\n }\n if (paramFilter.value == null &&\n defaultFilter?.value == null &&\n paramFilter.matchMode !== FilterMatchMode.Exists &&\n paramFilter.matchMode !== FilterMatchMode.DoesNotExist) {\n return;\n }\n if (paramFilter.value == null &&\n defaultFilter?.value != null &&\n paramFilter.matchMode !== FilterMatchMode.Exists &&\n paramFilter.matchMode !== FilterMatchMode.DoesNotExist) {\n urlParams[`${opts?.prependFilterName ?? ''}${k}`] = 'null';\n return;\n }\n urlParams[`${opts?.prependFilterName ?? ''}${k}`] = dataListParamsFiltersToUrlQuery(params, k, true);\n });\n }\n if (defaults?.filters) {\n // add other defaults\n const paramFilterKeys = params.filters ? Object.keys(params.filters) : [];\n Object.keys(defaults.filters)\n .filter(k => paramFilterKeys.indexOf(k) < 0)\n .forEach(k => {\n urlParams[`${opts?.prependFilterName ?? ''}${k}`] = dataListParamsFiltersToUrlQuery(defaults, k);\n });\n }\n return urlParams;\n}\n/**\n * Merges the provided parameters with default values and returns the merged object.\n *\n * @param {DataListParams} params - The parameters to merge with defaults.\n * @param {DataListParams} defaults - The default values to merge with params (optional, default is { limit: 25, offset: 0 }).\n * @returns {DataListParams} - The merged parameters object.\n */\nexport function mergeDataListParamsWithDefaults(params, defaults = {\n limit: 25,\n offset: 0\n}) {\n const merged = {\n limit: params.limit ?? defaults.limit,\n offset: params.offset ?? defaults.offset,\n search: params.search ?? defaults.search,\n sort: (params.sort ?? defaults.sort)?.map(s => ({ ...s }))\n };\n if (params.filters) {\n merged.filters = {};\n Object.entries(params.filters).forEach(([key, value]) => (merged.filters[key] = { ...value }));\n }\n if (defaults.filters) {\n if (!merged.filters)\n merged.filters = {};\n Object.entries(defaults.filters).forEach(([key, value]) => {\n if (merged.filters[key] === undefined) {\n merged.filters[key] = { ...value };\n }\n });\n }\n return merged;\n}\n/**\n * Converts an object of parameters to a URL query string for sorting.\n * Sorts are formatted in Medius data API sort query language: `asc:prop1,desc:prop2`, ...\n *\n * @param {DataListParams} params - An optional object containing sort parameters.\n * @returns A string representing the URL query or undefined if no sort parameters are provided.\n */\nexport function dataListParamsSortToUrlQuery(params) {\n return params && Array.isArray(params.sort)\n ? params.sort.map(s => `${s.ascending === true || s.ascending === undefined ? 'asc' : 'desc'}:${String(s.property)}`).join(',')\n : undefined;\n}\n/**\n * Converts a specific filter parameter (by key) from DataListParams object to a URL query string.\n * Filter keys are \"flattened\" in the new object, values are formatted in Medius data API filter query language: `cs:eq:asd`, `in:asd,qwe`, `ex`, ...\n *\n * @param {DataListParams<any, Filters> | undefined} params - The DataListParams object containing the filters.\n * @param {Filters} key - The key of the filter to convert.\n * @param {boolean} [allowNull=false] - Indicates whether to allow null values in the query string.\n * @return {string | undefined} - The URL query string representing the specified filter, or undefined if the filter is not found.\n */\nexport function dataListParamsFiltersToUrlQuery(params, key, allowNull = false) {\n const paramFilter = params?.filters?.[key];\n return dataListParamsFilterToUrlQuery(paramFilter, allowNull);\n}\n/**\n * Converts a filter to a URL query string.\n * Filter keys are \"flattened\" in the new object, values are formatted in Medius data API filter query language: `cs:eq:asd`, `in:asd,qwe`, `ex`, ...\n *\n * @param {DataListFilter} paramFilter - The filter object to be converted.\n * @param {boolean} [allowNull=false] - Indicates whether to allow null values in the filter.\n * @returns {string|undefined} - The filter converted to a URL query string, or undefined if no filter is provided or the filter has empty or invalid values.\n * @throws {CommonsInternalError} - If the filter has invalid values.\n */\nexport function dataListParamsFilterToUrlQuery(paramFilter, allowNull = false) {\n const filterValueAsArray = Array.isArray(paramFilter?.value) ? paramFilter.value.filter(v => v !== undefined && (allowNull || v !== null)) : undefined;\n const matchMode = paramFilter?.matchMode ?? FilterMatchMode.Equals;\n if (paramFilter === undefined ||\n (!allowNull && matchMode !== 'exists' && matchMode !== 'doesNotExist' && paramFilter.value == null) ||\n (typeof paramFilter.value === 'string' && paramFilter.value.length === 0) ||\n (Array.isArray(filterValueAsArray) && filterValueAsArray.length === 0)) {\n // no need to include filters for empty values\n return undefined;\n }\n if (matchMode === FilterMatchMode.Between && !(Array.isArray(filterValueAsArray) && filterValueAsArray.length === 2)) {\n throw new CommonsInternalError(`Filter match mode between requires exactly 2 values: ${paramFilter.value}`);\n }\n if ((matchMode === FilterMatchMode.In || matchMode === FilterMatchMode.NotIn) && (!Array.isArray(filterValueAsArray) || filterValueAsArray.length === 0)) {\n throw new CommonsInternalError(`Filter match mode ${matchMode} requires non-empty array: ${paramFilter.value}`);\n }\n if ([FilterMatchMode.In, FilterMatchMode.NotIn, FilterMatchMode.Between].indexOf(matchMode) === -1 && Array.isArray(filterValueAsArray)) {\n throw new CommonsInternalError(`Filter match mode ${matchMode} must not be array: ${paramFilter.value}`);\n }\n const noVal = paramFilter.matchMode === FilterMatchMode.Exists || paramFilter.matchMode === FilterMatchMode.DoesNotExist;\n const urlValuePart = noVal ? '' : `:${dataListParamsFilterValueToUrlString(filterValueAsArray ?? paramFilter.value, allowNull)}`;\n return `${paramFilter.caseSensitive ? 'cs:' : paramFilter.caseSensitive === false ? 'ci:' : ''}${FilterMatchMode.getAbbreviation(matchMode) ?? matchMode}${urlValuePart}`;\n}\n/**\n * Converts URL query parameters to a DataListParams object.\n * Sorts are formatted from Medius data API sort query language: `asc:prop1,desc:prop2`, ...\n * Filter keys are all keys in Params object that are not matched elsewhere, values are formatted from Medius data API filter query language: `cs:eq:asd`, `in:asd,qwe`, `ex`, ...\n *\n * @param {Params} urlParams - The URL query parameters.\n * @param opts Additional options for conversion:\n * - searchAsGlobal - The URL query parameters.\n * - prependFilterName - Filter names are prepended with provided string.\n * @return {DataListParams} - The converted DataListParams object.\n */\nexport function fromUrlQueryToDataListParams(urlParams, opts) {\n const params = {};\n Object.entries(urlParams).forEach(([urlParamKey, urlParamValue]) => {\n if (urlParamKey === 'limit') {\n params.limit = +urlParamValue;\n if (isNaN(params.limit) || params.limit < 0) {\n delete params.limit;\n }\n }\n else if (urlParamKey === 'offset') {\n params.offset = +urlParamValue;\n if (isNaN(params.offset) || params.offset < 0) {\n delete params.offset;\n }\n }\n else if (urlParamKey === 'q') {\n if (typeof urlParamValue === 'string' && urlParamValue.length > 0) {\n const searchQuery = urlParamValue.startsWith('cs:') || urlParamValue.startsWith('ci:') ? urlParamValue.substring(3) : urlParamValue;\n const caseSensitive = urlParamValue.startsWith('cs:');\n params.search = searchQuery;\n params.searchCaseSensitive = caseSensitive;\n if (opts?.searchAsGlobal) {\n if (!params.filters) {\n params.filters = {};\n }\n params.filters['global'] = {\n value: searchQuery,\n matchMode: FilterMatchMode.Contains,\n caseSensitive: caseSensitive\n };\n }\n }\n }\n else if (urlParamKey === 'sort') {\n if (typeof urlParamValue === 'string') {\n params.sort = urlParamValue.split(',').map(s => {\n const [direction, property] = s.split(':');\n return { property: (property ?? direction), ascending: direction !== 'desc' };\n });\n }\n else {\n throw new CommonsInternalError(`String is expected as value for '${urlParamKey}' when converting from urlParams`);\n }\n }\n else if ((!opts?.prependFilterName || urlParamKey.startsWith(opts.prependFilterName)) && typeof urlParamValue === 'string') {\n if (urlParamValue.length === 0) {\n // empty string should be ignored\n return;\n }\n const filterKey = opts?.prependFilterName ? urlParamKey.substring(opts.prependFilterName.length) : urlParamKey;\n const filterParts = urlParamValue.split(':');\n let partIdx = 0;\n // removed default filter\n if (filterParts[partIdx] === 'null') {\n if (!params.filters) {\n params.filters = {};\n }\n params.filters[filterKey] = { value: null };\n return;\n }\n // case sensitive\n let caseSensitive = undefined;\n if (filterParts[partIdx] === 'cs' || filterParts[partIdx] === 'ci') {\n caseSensitive = filterParts[partIdx++] === 'cs';\n }\n // match mode\n const matchMode = filterParts[partIdx] ? (FilterMatchMode.fromAbbreviation(filterParts[partIdx]) ?? filterParts[partIdx]) : FilterMatchMode.Equals;\n partIdx++;\n const noVal = matchMode === FilterMatchMode.Exists || matchMode === FilterMatchMode.DoesNotExist;\n // value\n let value = undefined;\n if (!noVal) {\n if (filterParts.length < 2) {\n return;\n }\n if (partIdx === filterParts.length - 1) {\n value = filterParts[partIdx];\n }\n else if (partIdx < filterParts.length) {\n // array that should not be array, so join back together\n value = filterParts.slice(partIdx, filterParts.length).join(':');\n }\n if (value === undefined && matchMode !== FilterMatchMode.Exists && matchMode !== FilterMatchMode.DoesNotExist) {\n // if value undefined and match mode expects value, then skip\n return;\n }\n if (value === 'null') {\n value = null;\n }\n if ((matchMode === FilterMatchMode.In || matchMode === FilterMatchMode.NotIn || matchMode === FilterMatchMode.Between) && typeof value === 'string') {\n let arrayVal = [];\n // these match modes expect array\n if (value.indexOf('\"') >= 0) {\n const tokens = [];\n let currentToken = '';\n let explicitQuotes = false; //token is quoted, e.g. in:1,2,\"22\"\"\",\",123\"\"\"\n let quotesOpened = false; //token has started processing\n let quotesExplicitlyClosed = false; //token processing has finished, after single \" in quoted mode, or before , in not quoted\n for (let i = 0; i < value.length; i++) {\n const c = value[i];\n // reset the tokenizer when seeing the token separator\n // only if either:\n // the quotes have not been opened yet (when there are no characters between separators),\n // the token has been explicitly closed (when we actually have explicit opening i.e., quotes as the first character)\n // or we have implicit quotes (i.e., quotes are not the first character)\n if (c === ',' && (!quotesOpened || quotesExplicitlyClosed || !explicitQuotes)) {\n tokens.push(currentToken);\n currentToken = '';\n quotesOpened = false;\n quotesExplicitlyClosed = false;\n explicitQuotes = false;\n }\n else if (c == '\"') {\n // escaped double-quotes\n if (explicitQuotes && i + 1 < value.length && value[i + 1] === '\"') {\n currentToken += c; // Append one double-quote to the current token\n i++; // Skip the next double-quote\n }\n // we encounter quotes again after they were the first character => we close the token\n else if (explicitQuotes) {\n quotesExplicitlyClosed = true;\n }\n // implicit quotes\n else if (quotesOpened) {\n currentToken += c;\n }\n // quotes are the first character => explicitly open the token\n else {\n currentToken = '';\n quotesOpened = true;\n explicitQuotes = true;\n }\n }\n else {\n if (quotesExplicitlyClosed) {\n return;\n }\n quotesOpened = true;\n currentToken += c;\n }\n }\n if (quotesOpened && !quotesExplicitlyClosed && explicitQuotes) {\n return;\n }\n // Append the last token after the loop ends\n tokens.push(currentToken.toString());\n arrayVal = tokens;\n }\n else {\n arrayVal = value.split(',');\n }\n if (matchMode === FilterMatchMode.Between && arrayVal.length !== 2) {\n return;\n }\n value = arrayVal;\n }\n if ((typeof value === 'string' && value.length === 0) || (Array.isArray(value) && value.length === 0)) {\n // filter with empty value is to be ignored\n return;\n }\n }\n else {\n caseSensitive = undefined;\n }\n if (!params.filters) {\n params.filters = {};\n }\n params.filters[filterKey] = { value: value, matchMode: matchMode, caseSensitive: caseSensitive };\n }\n });\n return params;\n}\n/**\n * Makes a copy of the given DataListParams object.\n *\n * @param {DataListParams<Sorts, Filters>} params - The DataListParams object to be copied.\n * @returns {DataListParams<Sorts, Filters>} - Returns a new copy of the DataListParams object.\n */\nexport function copyDataListParams(params) {\n const copy = {\n offset: params.offset,\n limit: params.limit,\n search: params.search\n };\n if (params.sort) {\n copy.sort = params.sort?.map(s => ({ ...s }));\n }\n if (params.filters) {\n copy.filters = Object.entries(params.filters).reduce((acc, [key, value]) => {\n const filterValue = value;\n return {\n ...acc,\n [key]: {\n ...filterValue,\n value: Array.isArray(filterValue.value) ? [...filterValue.value] : filterValue.value\n }\n };\n }, {});\n }\n return copy;\n}\n/**\n * Converts a value to a URL query param string representation.\n *\n * @param {unknown} value - The value to be converted.\n * @param {boolean} [allowNull=false] - Indicates whether null values are allowed.\n * @returns {string} The URL parameter representation of the value.\n * @throws {CommonsInternalError} If an undefined value is passed without allowNull set to true.\n * @throws {CommonsInternalError} If the value is an object (excluding Date).\n */\nexport function dataListParamsFilterValueToUrlString(value, allowNull = false) {\n if (value === null && allowNull)\n return 'null';\n if (value == null)\n throw new CommonsInternalError('Undefined value cannot be converted to url param.'); // this should not happen, should be filtered out earlier\n if (Array.isArray(value))\n return value\n .map(v => dataListParamsFilterValueToUrlString(v, allowNull))\n .map(v => (v.indexOf(',') >= 0 || v.indexOf('\"') >= 0 ? `\"${v.replaceAll('\"', '\"\"')}\"` : v))\n .join(',');\n if (typeof value === 'object') {\n if (value instanceof Date)\n return dateToIsoString(value, 'dateTime', { utc: true });\n else {\n throw new CommonsInternalError('Filter value cannot be object');\n }\n }\n return String(value);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LXBhcmFtcy1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvZGF0YS1saXN0L2RhdGEtbGlzdC1wYXJhbXMtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBR3JEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUFDLEtBQXlCO0lBQ25FLE1BQU0sTUFBTSxHQUFtQixFQUFFLENBQUM7SUFFbEMsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxPQUFPLEtBQUssQ0FBQyxZQUFZLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDekMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO0lBQ3ZDLENBQUM7U0FBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFh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LE9BQU8sS0FBSzthQUNQLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLG9DQUFvQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQzthQUM1RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNGLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksS0FBSyxZQUFZLElBQUk7WUFBRSxPQUFPLGVBQWUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7YUFDN0UsQ0FBQztZQUNGLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGFyYW1zfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1RhYmxlTGF6eUxvYWRFdmVudH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5cbmltcG9ydCB7Q29tbW9uc0ludGVybmFsRXJyb3J9IGZyb20gJy4uL2Vycm9yL2Vycm9yLm1vZGVsJztcbmltcG9ydCB7ZGF0ZVRvSXNvU3RyaW5nfSBmcm9tICcuLi9oZWxwZXJzL2RhdGUnO1xuaW1wb3J0IHtEYXRhTGlzdEZpbHRlciwgRGF0YUxpc3RGaWx0ZXJWYWx1ZVR5cGUsIERhdGFMaXN0RmlsdGVyc1R5cGUsIERhdGFMaXN0UGFyYW1zfSBmcm9tICcuL2RhdGEtbGlzdC5tb2RlbCc7XG5pbXBvcnQge0ZpbHRlck1hdGNoTW9kZX0gZnJvbSAnLi9maWx0ZXItbWF0Y2gubW9kZWwnO1xuaW1wb3J0IHtGaWx0ZXJTdGF0ZX0gZnJvbSAnLi9maWx0ZXItc3RhdGUubW9kZWwnO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgVGFibGVMYXp5TG9hZEV2ZW50IHRvIERhdGFMaXN0UGFyYW1zLlxuICpcbiAqIEBwYXJhbSB7VGFibGVMYXp5TG9hZEV2ZW50fSBldmVudCAtIFRoZSBldmVudCBjb250YWluaW5nIHRoZSBkYXRhIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJuIHtEYXRhTGlzdFBhcmFtc30gLSBUaGUgY29udmVydGVkIERhdGFMaXN0UGFyYW1zIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21UYWJsZUxvYWRUb0RhdGFMaXN0UGFyYW1zKGV2ZW50OiBUYWJsZUxhenlMb2FkRXZlbnQpOiBEYXRhTGlzdFBhcmFtcyB7XG4gICAgY29uc3QgcGFyYW1zOiBEYXRhTGlzdFBhcmFtcyA9IHt9O1xuXG4gICAgaWYgKGV2ZW50LmZpcnN0ICE9IG51bGwpIHtcbiAgICAgICAgcGFyYW1zLm9mZnNldCA9IGV2ZW50LmZpcnN0O1xuICAgIH1cbiAgICBpZiAoZXZlbnQucm93cyAhPSBudWxsKSB7XG4gICAgICAgIHBhcmFtcy5saW1pdCA9IGV2ZW50LnJvd3M7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBldmVudC5nbG9iYWxGaWx0ZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHBhcmFtcy5zZWFyY2ggPSBldmVudC5nbG9iYWxGaWx0ZXI7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGV2ZW50Lmdsb2JhbEZpbHRlcikgJiYgZXZlbnQuZ2xvYmFsRmlsdGVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcGFyYW1zLnNlYXJjaCA9IGV2ZW50Lmdsb2JhbEZpbHRlclswXTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShldmVudC5tdWx0aVNvcnRNZXRhKSAmJiBldmVudC5tdWx0aVNvcnRNZXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcGFyYW1zLnNvcnQgPSBldmVudC5tdWx0aVNvcnRNZXRhLm1hcChtID0+ICh7cHJvcGVydHk6IG0uZmllbGQsIGFzY2VuZGluZzogbS5vcmRlciA+PSAwfSkpO1xuICAgIH1cblxuICAgIGlmIChldmVudC5maWx0ZXJzKSB7XG4gICAgICAgIHBhcmFtcy5maWx0ZXJzID0gT2JqZWN0LmtleXMoZXZlbnQuZmlsdGVycykucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyOiBEYXRhTGlzdEZpbHRlciA9IHt9O1xuICAgICAgICAgICAgY29uc3QgZXZlbnRGaWx0ZXI6IEZpbHRlclN0YXRlIHwgRmlsdGVyU3RhdGVbXSB8IHVuZGVmaW5lZCA9IGV2ZW50LmZpbHRlcnM/LltrZXkgYXMga2V5b2Ygb2JqZWN0XTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50RmlsdGVyKSkge1xuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IGV2ZW50RmlsdGVyWzBdLnZhbHVlO1xuICAgICAgICAgICAgICAgIGZpbHRlci5tYXRjaE1vZGUgPSBldmVudEZpbHRlclswXS5tYXRjaE1vZGU7XG4gICAgICAgICAgICAgICAgZmlsdGVyLmNhc2VTZW5zaXRpdmUgPSBldmVudEZpbHRlclswXS5jYXNlU2Vuc2l0aXZlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudEZpbHRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnZhbHVlID0gZXZlbnRGaWx0ZXIudmFsdWU7XG4gICAgICAgICAgICAgICAgZmlsdGVyLm1hdGNoTW9kZSA9IGV2ZW50RmlsdGVyLm1hdGNoTW9kZTtcbiAgICAgICAgICAgICAgICBmaWx0ZXIuY2FzZVNlbnNpdGl2ZSA9IGV2ZW50RmlsdGVyLmNhc2VTZW5zaXRpdmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBoYW5kbGUgc2VhcmNoIGNhc2Ugc2Vuc2l0aXZpdHkgdG8gYmUgYWxzbyB3cml0dGVuIG9uIHNlYXJjaENhc2VTZW5zaXRpdmVcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdnbG9iYWwnICYmIHR5cGVvZiBwYXJhbXMuc2VhcmNoID09PSAnc3RyaW5nJyAmJiBmaWx0ZXIuY2FzZVNlbnNpdGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnNlYXJjaENhc2VTZW5zaXRpdmUgPSBmaWx0ZXIuY2FzZVNlbnNpdGl2ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsuLi5hY2MsIFtrZXldOiBmaWx0ZXJ9O1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gcGFyYW1ldGVycyB0byBVUkwgcXVlcnkgcGFyYW1ldGVycy5cbiAqIFNvcnRzIGFyZSBmb3JtYXR0ZWQgaW4gTWVkaXVzIGRhdGEgQVBJIHNvcnQgcXVlcnkgbGFuZ3VhZ2U6IGBhc2M6cHJvcDEsZGVzYzpwcm9wMmAsIC4uLlxuICogRmlsdGVyIGtleXMgYXJlIFwiZmxhdHRlbmVkXCIgaW4gdGhlIG5ldyBvYmplY3QsIHZhbHVlcyBhcmUgZm9ybWF0dGVkIGluIE1lZGl1cyBkYXRhIEFQSSBmaWx0ZXIgcXVlcnkgbGFuZ3VhZ2U6IGBjczplcTphc2RgLCBgaW46YXNkLHF3ZWAsIGBleGAsIC4uLlxuICpcbiAqIEBwYXJhbSB7RGF0YUxpc3RQYXJhbXN9IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGNvbnZlcnQuXG4gKiBAcGFyYW0ge0RhdGFMaXN0UGFyYW1zfG51bGx9IGRlZmF1bHRzIC0gVGhlIGRlZmF1bHQgcGFyYW1ldGVycyB1c2VkIGlmIG5vIG1hdGNoaW5nIHByb3BlcnR5IGluIHBhcmFtcyBpcyBhdmFpbGFibGUuIERlZmF1bHRzIHRvIHsgbGltaXQ6IDI1LCBvZmZzZXQ6IDAgfSBpZiBub3QgcHJvdmlkZWQuXG4gKiBAcGFyYW0gb3B0cyAtIE9wdGlvbnMgaW4gY29udmVydGluZyB0byB1cmwgcXVlcnk6XG4gKiAgIC0gcHJlcGVuZEZpbHRlck5hbWUgUHJlcGVuZHMgZmlsdGVyIGtleSB3aXRoIHByb3ZpZGVkIHN0cmluZ1xuICogQHJldHVybnMge1BhcmFtc30gLSBUaGUgVVJMIHF1ZXJ5IHBhcmFtZXRlcnMgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGF0YUxpc3RQYXJhbXNUb1VybFF1ZXJ5KFxuICAgIHBhcmFtczogRGF0YUxpc3RQYXJhbXM8YW55LCBhbnk+LFxuICAgIGRlZmF1bHRzOiBEYXRhTGlzdFBhcmFtczxhbnksIGFueT4gfCBudWxsID0ge1xuICAgICAgICBsaW1pdDogMjUsXG4gICAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgb3B0cz86IHtcbiAgICAgICAgcHJlcGVuZEZpbHRlck5hbWU/OiBzdHJpbmc7XG4gICAgICAgIHNraXBQcmVzZXREZWZhdWx0c0xpbWl0PzogYm9vbGVhbjtcbiAgICB9XG4pOiBQYXJhbXMge1xuICAgIGNvbnN0IHVybFBhcmFtczogUGFyYW1zID0ge307XG5cbiAgICBpZiAocGFyYW1zLmxpbWl0ICYmIHBhcmFtcy5saW1pdCAhPT0gZGVmYXVsdHM/LmxpbWl0KSB7XG4gICAgICAgIHVybFBhcmFtc1snbGltaXQnXSA9IHBhcmFtcy5saW1pdDtcbiAgICB9IGVsc2UgaWYgKCFvcHRzPy5za2lwUHJlc2V0RGVmYXVsdHNMaW1pdCkge1xuICAgICAgICB1cmxQYXJhbXNbJ2xpbWl0J10gPSBkZWZhdWx0cz8ubGltaXQ7XG4gICAgfVxuICAgIGlmIChwYXJhbXMub2Zmc2V0ICYmIHBhcmFtcy5vZmZzZXQgIT09IGRlZmF1bHRzPy5vZmZzZXQpIHtcbiAgICAgICAgdXJsUGFyYW1zWydvZmZzZXQnXSA9IHBhcmFtcy5vZmZzZXQ7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuc2VhcmNoICYmIHBhcmFtcy5zZWFyY2ggIT09IGRlZmF1bHRzPy5zZWFyY2gpIHtcbiAgICAgICAgdXJsUGFyYW1zWydxJ10gPSBgJHtwYXJhbXMuc2VhcmNoQ2FzZVNlbnNpdGl2ZSA/IGBjczpgIDogJyd9JHtwYXJhbXMuc2VhcmNofWA7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuc29ydCAmJiBBcnJheS5pc0FycmF5KHBhcmFtcy5zb3J0KSAmJiBwYXJhbXMuc29ydC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGRlZmF1bHRzPy5zb3J0ID09IG51bGwgfHxcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGRlZmF1bHRzLnNvcnQpIHx8XG4gICAgICAgICAgICBkZWZhdWx0cy5zb3J0Lmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgcGFyYW1zLnNvcnQubGVuZ3RoICE9PSBkZWZhdWx0cy5zb3J0Lmxlbmd0aCB8fFxuICAgICAgICAgICAgZGVmYXVsdHMuc29ydC5zb21lKChkcywgaWR4KSA9PiBkcy5wcm9wZXJ0eSAhPT0gcGFyYW1zLnNvcnQhW2lkeF0ucHJvcGVydHkgfHwgKGRzLmFzY2VuZGluZyA/PyB0cnVlKSAhPT0gKHBhcmFtcy5zb3J0IVtpZHhdLmFzY2VuZGluZyA/PyB0cnVlKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB1cmxQYXJhbXNbJ3NvcnQnXSA9IGRhdGFMaXN0UGFyYW1zU29ydFRvVXJsUXVlcnkocGFyYW1zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocGFyYW1zLmZpbHRlcnMpIHtcbiAgICAgICAgT2JqZWN0LmtleXMocGFyYW1zLmZpbHRlcnMpLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAvLyBnbG9iYWwgc2VhcmNoIGZpbHRlciBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIHRoZSAncScgcGFyYW1ldGVyLCBubyBuZWVkIHRvIGluY2x1ZGUgaXQgaGVyZVxuICAgICAgICAgICAgaWYgKGsgPT09ICdnbG9iYWwnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFyYW1GaWx0ZXIgPSBwYXJhbXMuZmlsdGVycyFbayBhcyBrZXlvZiBvYmplY3RdITtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXIgPSBkZWZhdWx0cz8uZmlsdGVycz8uW2sgYXMga2V5b2Ygb2JqZWN0XTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVyICYmXG4gICAgICAgICAgICAgICAgKChBcnJheS5pc0FycmF5KGRlZmF1bHRGaWx0ZXIudmFsdWUpICYmXG4gICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocGFyYW1GaWx0ZXIudmFsdWUpICYmXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXIudmFsdWUubGVuZ3RoID09PSBwYXJhbUZpbHRlci52YWx1ZS5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlci52YWx1ZS5ldmVyeSgodiwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IChwYXJhbUZpbHRlci52YWx1ZSBhcyBBcnJheTxEYXRhTGlzdEZpbHRlclZhbHVlVHlwZT4pW2lkeF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmIHYgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gdmFsdWUuZ2V0VGltZSgpID09PSB2LmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIHZhbHVlID09PSB2O1xuICAgICAgICAgICAgICAgICAgICB9KSkgfHwgLy8gaGFuZGxlIGFycmF5c1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVyLnZhbHVlID09PSBwYXJhbUZpbHRlci52YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVyLm1hdGNoTW9kZSA9PT0gcGFyYW1GaWx0ZXIubWF0Y2hNb2RlICYmXG4gICAgICAgICAgICAgICAgKGRlZmF1bHRGaWx0ZXIuY2FzZVNlbnNpdGl2ZSA/PyBmYWxzZSkgPT09IChwYXJhbUZpbHRlci5jYXNlU2Vuc2l0aXZlID8/IGZhbHNlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcGFyYW1GaWx0ZXIudmFsdWUgPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXI/LnZhbHVlID09IG51bGwgJiZcbiAgICAgICAgICAgICAgICBwYXJhbUZpbHRlci5tYXRjaE1vZGUgIT09IEZpbHRlck1hdGNoTW9kZS5FeGlzdHMgJiZcbiAgICAgICAgICAgICAgICBwYXJhbUZpbHRlci5tYXRjaE1vZGUgIT09IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3RcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHBhcmFtRmlsdGVyLnZhbHVlID09IG51bGwgJiZcbiAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVyPy52YWx1ZSAhPSBudWxsICYmXG4gICAgICAgICAgICAgICAgcGFyYW1GaWx0ZXIubWF0Y2hNb2RlICE9PSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzICYmXG4gICAgICAgICAgICAgICAgcGFyYW1GaWx0ZXIubWF0Y2hNb2RlICE9PSBGaWx0ZXJNYXRjaE1vZGUuRG9lc05vdEV4aXN0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB1cmxQYXJhbXNbYCR7b3B0cz8ucHJlcGVuZEZpbHRlck5hbWUgPz8gJyd9JHtrfWBdID0gJ251bGwnO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdXJsUGFyYW1zW2Ake29wdHM/LnByZXBlbmRGaWx0ZXJOYW1lID8/ICcnfSR7a31gXSA9IGRhdGFMaXN0UGFyYW1zRmlsdGVyc1RvVXJsUXVlcnkocGFyYW1zLCBrLCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChkZWZhdWx0cz8uZmlsdGVycykge1xuICAgICAgICAvLyBhZGQgb3RoZXIgZGVmYXVsdHNcbiAgICAgICAgY29uc3QgcGFyYW1GaWx0ZXJLZXlzID0gcGFyYW1zLmZpbHRlcnMgPyBPYmplY3Qua2V5cyhwYXJhbXMuZmlsdGVycykgOiBbXTtcbiAgICAgICAgT2JqZWN0LmtleXMoZGVmYXVsdHMuZmlsdGVycylcbiAgICAgICAgICAgIC5maWx0ZXIoayA9PiBwYXJhbUZpbHRlcktleXMuaW5kZXhPZihrKSA8IDApXG4gICAgICAgICAgICAuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICB1cmxQYXJhbXNbYCR7b3B0cz8ucHJlcGVuZEZpbHRlck5hbWUgPz8gJyd9JHtrfWBdID0gZGF0YUxpc3RQYXJhbXNGaWx0ZXJzVG9VcmxRdWVyeShkZWZhdWx0cywgayk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsUGFyYW1zO1xufVxuXG4vKipcbiAqIE1lcmdlcyB0aGUgcHJvdmlkZWQgcGFyYW1ldGVycyB3aXRoIGRlZmF1bHQgdmFsdWVzIGFuZCByZXR1cm5zIHRoZSBtZXJnZWQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7RGF0YUxpc3RQYXJhbXN9IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIG1lcmdlIHdpdGggZGVmYXVsdHMuXG4gKiBAcGFyYW0ge0RhdGFMaXN0UGFyYW1zfSBkZWZhdWx0cyAtIFRoZSBkZWZhdWx0IHZhbHVlcyB0byBtZXJnZSB3aXRoIHBhcmFtcyAob3B0aW9uYWwsIGRlZmF1bHQgaXMgeyBsaW1pdDogMjUsIG9mZnNldDogMCB9KS5cbiAqIEByZXR1cm5zIHtEYXRhTGlzdFBhcmFtc30gLSBUaGUgbWVyZ2VkIHBhcmFtZXRlcnMgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEYXRhTGlzdFBhcmFtc1dpdGhEZWZhdWx0czxTb3J0cyA9IGFueSwgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGFueT4oXG4gICAgcGFyYW1zOiBEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz4sXG4gICAgZGVmYXVsdHM6IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPiA9IHtcbiAgICAgICAgbGltaXQ6IDI1LFxuICAgICAgICBvZmZzZXQ6IDBcbiAgICB9XG4pOiBEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz4ge1xuICAgIGNvbnN0IG1lcmdlZDogRGF0YUxpc3RQYXJhbXM8U29ydHMsIEZpbHRlcnM+ID0ge1xuICAgICAgICBsaW1pdDogcGFyYW1zLmxpbWl0ID8/IGRlZmF1bHRzLmxpbWl0LFxuICAgICAgICBvZmZzZXQ6IHBhcmFtcy5vZmZzZXQgPz8gZGVmYXVsdHMub2Zmc2V0LFxuICAgICAgICBzZWFyY2g6IHBhcmFtcy5zZWFyY2ggPz8gZGVmYXVsdHMuc2VhcmNoLFxuICAgICAgICBzb3J0OiAocGFyYW1zLnNvcnQgPz8gZGVmYXVsdHMuc29ydCk/Lm1hcChzID0+ICh7Li4uc30pKVxuICAgIH07XG5cbiAgICBpZiAocGFyYW1zLmZpbHRlcnMpIHtcbiAgICAgICAgbWVyZ2VkLmZpbHRlcnMgPSB7fSBhcyBEYXRhTGlzdEZpbHRlcnNUeXBlPEZpbHRlcnM+O1xuICAgICAgICBPYmplY3QuZW50cmllcyhwYXJhbXMuZmlsdGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiAobWVyZ2VkLmZpbHRlcnMhW2tleSBhcyBGaWx0ZXJzXSA9IHsuLi4odmFsdWUgYXMgRGF0YUxpc3RGaWx0ZXIpfSkpO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdHMuZmlsdGVycykge1xuICAgICAgICBpZiAoIW1lcmdlZC5maWx0ZXJzKSBtZXJnZWQuZmlsdGVycyA9IHt9IGFzIERhdGFMaXN0RmlsdGVyc1R5cGU8RmlsdGVycz47XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGRlZmF1bHRzLmZpbHRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgaWYgKG1lcmdlZC5maWx0ZXJzIVtrZXkgYXMgRmlsdGVyc10gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG1lcmdlZC5maWx0ZXJzIVtrZXkgYXMgRmlsdGVyc10gPSB7Li4uKHZhbHVlIGFzIERhdGFMaXN0RmlsdGVyKX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZWQ7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHBhcmFtZXRlcnMgdG8gYSBVUkwgcXVlcnkgc3RyaW5nIGZvciBzb3J0aW5nLlxuICogU29ydHMgYXJlIGZvcm1hdHRlZCBpbiBNZWRpdXMgZGF0YSBBUEkgc29ydCBxdWVyeSBsYW5ndWFnZTogYGFzYzpwcm9wMSxkZXNjOnByb3AyYCwgLi4uXG4gKlxuICogQHBhcmFtIHtEYXRhTGlzdFBhcmFtc30gcGFyYW1zIC0gQW4gb3B0aW9uYWwgb2JqZWN0IGNvbnRhaW5pbmcgc29ydCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBVUkwgcXVlcnkgb3IgdW5kZWZpbmVkIGlmIG5vIHNvcnQgcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRhTGlzdFBhcmFtc1NvcnRUb1VybFF1ZXJ5KHBhcmFtcz86IERhdGFMaXN0UGFyYW1zPGFueSwgYW55Pik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHBhcmFtcyAmJiBBcnJheS5pc0FycmF5KHBhcmFtcy5zb3J0KVxuICAgICAgICA/IHBhcmFtcy5zb3J0Lm1hcChzID0+IGAke3MuYXNjZW5kaW5nID09PSB0cnVlIHx8IHMuYXNjZW5kaW5nID09PSB1bmRlZmluZWQgPyAnYXNjJyA6ICdkZXNjJ306JHtTdHJpbmcocy5wcm9wZXJ0eSl9YCkuam9pbignLCcpXG4gICAgICAgIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3BlY2lmaWMgZmlsdGVyIHBhcmFtZXRlciAoYnkga2V5KSBmcm9tIERhdGFMaXN0UGFyYW1zIG9iamVjdCB0byBhIFVSTCBxdWVyeSBzdHJpbmcuXG4gKiBGaWx0ZXIga2V5cyBhcmUgXCJmbGF0dGVuZWRcIiBpbiB0aGUgbmV3IG9iamVjdCwgdmFsdWVzIGFyZSBmb3JtYXR0ZWQgaW4gTWVkaXVzIGRhdGEgQVBJIGZpbHRlciBxdWVyeSBsYW5ndWFnZTogYGNzOmVxOmFzZGAsIGBpbjphc2QscXdlYCwgYGV4YCwgLi4uXG4gKlxuICogQHBhcmFtIHtEYXRhTGlzdFBhcmFtczxhbnksIEZpbHRlcnM+IHwgdW5kZWZpbmVkfSBwYXJhbXMgLSBUaGUgRGF0YUxpc3RQYXJhbXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpbHRlcnMuXG4gKiBAcGFyYW0ge0ZpbHRlcnN9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGZpbHRlciB0byBjb252ZXJ0LlxuICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dOdWxsPWZhbHNlXSAtIEluZGljYXRlcyB3aGV0aGVyIHRvIGFsbG93IG51bGwgdmFsdWVzIGluIHRoZSBxdWVyeSBzdHJpbmcuXG4gKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gVGhlIFVSTCBxdWVyeSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzcGVjaWZpZWQgZmlsdGVyLCBvciB1bmRlZmluZWQgaWYgdGhlIGZpbHRlciBpcyBub3QgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRhTGlzdFBhcmFtc0ZpbHRlcnNUb1VybFF1ZXJ5PEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBzdHJpbmc+KFxuICAgIHBhcmFtczogRGF0YUxpc3RQYXJhbXM8YW55LCBGaWx0ZXJzPiB8IHVuZGVmaW5lZCxcbiAgICBrZXk6IEZpbHRlcnMsXG4gICAgYWxsb3dOdWxsID0gZmFsc2Vcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcGFyYW1GaWx0ZXIgPSBwYXJhbXM/LmZpbHRlcnM/LltrZXldO1xuICAgIHJldHVybiBkYXRhTGlzdFBhcmFtc0ZpbHRlclRvVXJsUXVlcnkocGFyYW1GaWx0ZXIsIGFsbG93TnVsbCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBmaWx0ZXIgdG8gYSBVUkwgcXVlcnkgc3RyaW5nLlxuICogRmlsdGVyIGtleXMgYXJlIFwiZmxhdHRlbmVkXCIgaW4gdGhlIG5ldyBvYmplY3QsIHZhbHVlcyBhcmUgZm9ybWF0dGVkIGluIE1lZGl1cyBkYXRhIEFQSSBmaWx0ZXIgcXVlcnkgbGFuZ3VhZ2U6IGBjczplcTphc2RgLCBgaW46YXNkLHF3ZWAsIGBleGAsIC4uLlxuICpcbiAqIEBwYXJhbSB7RGF0YUxpc3RGaWx0ZXJ9IHBhcmFtRmlsdGVyIC0gVGhlIGZpbHRlciBvYmplY3QgdG8gYmUgY29udmVydGVkLlxuICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dOdWxsPWZhbHNlXSAtIEluZGljYXRlcyB3aGV0aGVyIHRvIGFsbG93IG51bGwgdmFsdWVzIGluIHRoZSBmaWx0ZXIuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gLSBUaGUgZmlsdGVyIGNvbnZlcnRlZCB0byBhIFVSTCBxdWVyeSBzdHJpbmcsIG9yIHVuZGVmaW5lZCBpZiBubyBmaWx0ZXIgaXMgcHJvdmlkZWQgb3IgdGhlIGZpbHRlciBoYXMgZW1wdHkgb3IgaW52YWxpZCB2YWx1ZXMuXG4gKiBAdGhyb3dzIHtDb21tb25zSW50ZXJuYWxFcnJvcn0gLSBJZiB0aGUgZmlsdGVyIGhhcyBpbnZhbGlkIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGFMaXN0UGFyYW1zRmlsdGVyVG9VcmxRdWVyeShwYXJhbUZpbHRlcj86IERhdGFMaXN0RmlsdGVyLCBhbGxvd051bGwgPSBmYWxzZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmlsdGVyVmFsdWVBc0FycmF5ID0gQXJyYXkuaXNBcnJheShwYXJhbUZpbHRlcj8udmFsdWUpID8gcGFyYW1GaWx0ZXIhLnZhbHVlLmZpbHRlcih2ID0+IHYgIT09IHVuZGVmaW5lZCAmJiAoYWxsb3dOdWxsIHx8IHYgIT09IG51bGwpKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBtYXRjaE1vZGUgPSBwYXJhbUZpbHRlcj8ubWF0Y2hNb2RlID8/IEZpbHRlck1hdGNoTW9kZS5FcXVhbHM7XG4gICAgaWYgKFxuICAgICAgICBwYXJhbUZpbHRlciA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICghYWxsb3dOdWxsICYmIG1hdGNoTW9kZSAhPT0gJ2V4aXN0cycgJiYgbWF0Y2hNb2RlICE9PSAnZG9lc05vdEV4aXN0JyAmJiBwYXJhbUZpbHRlci52YWx1ZSA9PSBudWxsKSB8fFxuICAgICAgICAodHlwZW9mIHBhcmFtRmlsdGVyLnZhbHVlID09PSAnc3RyaW5nJyAmJiBwYXJhbUZpbHRlci52YWx1ZS5sZW5ndGggPT09IDApIHx8XG4gICAgICAgIChBcnJheS5pc0FycmF5KGZpbHRlclZhbHVlQXNBcnJheSkgJiYgZmlsdGVyVmFsdWVBc0FycmF5Lmxlbmd0aCA9PT0gMClcbiAgICApIHtcbiAgICAgICAgLy8gbm8gbmVlZCB0byBpbmNsdWRlIGZpbHRlcnMgZm9yIGVtcHR5IHZhbHVlc1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuICYmICEoQXJyYXkuaXNBcnJheShmaWx0ZXJWYWx1ZUFzQXJyYXkpICYmIGZpbHRlclZhbHVlQXNBcnJheS5sZW5ndGggPT09IDIpKSB7XG4gICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgRmlsdGVyIG1hdGNoIG1vZGUgYmV0d2VlbiByZXF1aXJlcyBleGFjdGx5IDIgdmFsdWVzOiAke3BhcmFtRmlsdGVyLnZhbHVlfWApO1xuICAgIH1cblxuICAgIGlmICgobWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuSW4gfHwgbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuTm90SW4pICYmICghQXJyYXkuaXNBcnJheShmaWx0ZXJWYWx1ZUFzQXJyYXkpIHx8IGZpbHRlclZhbHVlQXNBcnJheS5sZW5ndGggPT09IDApKSB7XG4gICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgRmlsdGVyIG1hdGNoIG1vZGUgJHttYXRjaE1vZGV9IHJlcXVpcmVzIG5vbi1lbXB0eSBhcnJheTogJHtwYXJhbUZpbHRlci52YWx1ZX1gKTtcbiAgICB9XG5cbiAgICBpZiAoKFtGaWx0ZXJNYXRjaE1vZGUuSW4sIEZpbHRlck1hdGNoTW9kZS5Ob3RJbiwgRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW5dIGFzIHN0cmluZ1tdKS5pbmRleE9mKG1hdGNoTW9kZSkgPT09IC0xICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyVmFsdWVBc0FycmF5KSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEZpbHRlciBtYXRjaCBtb2RlICR7bWF0Y2hNb2RlfSBtdXN0IG5vdCBiZSBhcnJheTogJHtwYXJhbUZpbHRlci52YWx1ZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBub1ZhbCA9IHBhcmFtRmlsdGVyLm1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cyB8fCBwYXJhbUZpbHRlci5tYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3Q7XG4gICAgY29uc3QgdXJsVmFsdWVQYXJ0ID0gbm9WYWwgPyAnJyA6IGA6JHtkYXRhTGlzdFBhcmFtc0ZpbHRlclZhbHVlVG9VcmxTdHJpbmcoZmlsdGVyVmFsdWVBc0FycmF5ID8/IHBhcmFtRmlsdGVyLnZhbHVlLCBhbGxvd051bGwpfWA7XG5cbiAgICByZXR1cm4gYCR7cGFyYW1GaWx0ZXIuY2FzZVNlbnNpdGl2ZSA/ICdjczonIDogcGFyYW1GaWx0ZXIuY2FzZVNlbnNpdGl2ZSA9PT0gZmFsc2UgPyAnY2k6JyA6ICcnfSR7RmlsdGVyTWF0Y2hNb2RlLmdldEFiYnJldmlhdGlvbihtYXRjaE1vZGUpID8/IG1hdGNoTW9kZX0ke3VybFZhbHVlUGFydH1gO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIFVSTCBxdWVyeSBwYXJhbWV0ZXJzIHRvIGEgRGF0YUxpc3RQYXJhbXMgb2JqZWN0LlxuICogU29ydHMgYXJlIGZvcm1hdHRlZCBmcm9tIE1lZGl1cyBkYXRhIEFQSSBzb3J0IHF1ZXJ5IGxhbmd1YWdlOiBgYXNjOnByb3AxLGRlc2M6cHJvcDJgLCAuLi5cbiAqIEZpbHRlciBrZXlzIGFyZSBhbGwga2V5cyBpbiBQYXJhbXMgb2JqZWN0IHRoYXQgYXJlIG5vdCBtYXRjaGVkIGVsc2V3aGVyZSwgdmFsdWVzIGFyZSBmb3JtYXR0ZWQgZnJvbSBNZWRpdXMgZGF0YSBBUEkgZmlsdGVyIHF1ZXJ5IGxhbmd1YWdlOiBgY3M6ZXE6YXNkYCwgYGluOmFzZCxxd2VgLCBgZXhgLCAuLi5cbiAqXG4gKiBAcGFyYW0ge1BhcmFtc30gdXJsUGFyYW1zIC0gVGhlIFVSTCBxdWVyeSBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIG9wdHMgQWRkaXRpb25hbCBvcHRpb25zIGZvciBjb252ZXJzaW9uOlxuICogIC0gc2VhcmNoQXNHbG9iYWwgLSBUaGUgVVJMIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gKiAgLSBwcmVwZW5kRmlsdGVyTmFtZSAtIEZpbHRlciBuYW1lcyBhcmUgcHJlcGVuZGVkIHdpdGggcHJvdmlkZWQgc3RyaW5nLlxuICogQHJldHVybiB7RGF0YUxpc3RQYXJhbXN9IC0gVGhlIGNvbnZlcnRlZCBEYXRhTGlzdFBhcmFtcyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVXJsUXVlcnlUb0RhdGFMaXN0UGFyYW1zKFxuICAgIHVybFBhcmFtczogUGFyYW1zLFxuICAgIG9wdHM/OiB7XG4gICAgICAgIHNlYXJjaEFzR2xvYmFsPzogYm9vbGVhbjtcbiAgICAgICAgcHJlcGVuZEZpbHRlck5hbWU/OiBzdHJpbmc7XG4gICAgfVxuKTogRGF0YUxpc3RQYXJhbXMge1xuICAgIGNvbnN0IHBhcmFtczogRGF0YUxpc3RQYXJhbXMgPSB7fTtcblxuICAgIE9iamVjdC5lbnRyaWVzKHVybFBhcmFtcykuZm9yRWFjaCgoW3VybFBhcmFtS2V5LCB1cmxQYXJhbVZhbHVlXSkgPT4ge1xuICAgICAgICBpZiAodXJsUGFyYW1LZXkgPT09ICdsaW1pdCcpIHtcbiAgICAgICAgICAgIHBhcmFtcy5saW1pdCA9ICt1cmxQYXJhbVZhbHVlO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHBhcmFtcy5saW1pdCkgfHwgcGFyYW1zLmxpbWl0IDwgMCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJhbXMubGltaXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodXJsUGFyYW1LZXkgPT09ICdvZmZzZXQnKSB7XG4gICAgICAgICAgICBwYXJhbXMub2Zmc2V0ID0gK3VybFBhcmFtVmFsdWU7XG4gICAgICAgICAgICBpZiAoaXNOYU4ocGFyYW1zLm9mZnNldCkgfHwgcGFyYW1zLm9mZnNldCA8IDApIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW1zLm9mZnNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh1cmxQYXJhbUtleSA9PT0gJ3EnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHVybFBhcmFtVmFsdWUgPT09ICdzdHJpbmcnICYmIHVybFBhcmFtVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaFF1ZXJ5ID0gdXJsUGFyYW1WYWx1ZS5zdGFydHNXaXRoKCdjczonKSB8fCB1cmxQYXJhbVZhbHVlLnN0YXJ0c1dpdGgoJ2NpOicpID8gdXJsUGFyYW1WYWx1ZS5zdWJzdHJpbmcoMykgOiB1cmxQYXJhbVZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhc2VTZW5zaXRpdmUgPSB1cmxQYXJhbVZhbHVlLnN0YXJ0c1dpdGgoJ2NzOicpO1xuXG4gICAgICAgICAgICAgICAgcGFyYW1zLnNlYXJjaCA9IHNlYXJjaFF1ZXJ5O1xuICAgICAgICAgICAgICAgIHBhcmFtcy5zZWFyY2hDYXNlU2Vuc2l0aXZlID0gY2FzZVNlbnNpdGl2ZTtcblxuICAgICAgICAgICAgICAgIGlmIChvcHRzPy5zZWFyY2hBc0dsb2JhbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmFtcy5maWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVycyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJzWydnbG9iYWwnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzZWFyY2hRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogRmlsdGVyTWF0Y2hNb2RlLkNvbnRhaW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZTogY2FzZVNlbnNpdGl2ZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh1cmxQYXJhbUtleSA9PT0gJ3NvcnQnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHVybFBhcmFtVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnNvcnQgPSB1cmxQYXJhbVZhbHVlLnNwbGl0KCcsJykubWFwKHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbZGlyZWN0aW9uLCBwcm9wZXJ0eV0gPSBzLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7cHJvcGVydHk6IChwcm9wZXJ0eSA/PyBkaXJlY3Rpb24pIGFzIGtleW9mIG9iamVjdCwgYXNjZW5kaW5nOiBkaXJlY3Rpb24gIT09ICdkZXNjJ307XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgU3RyaW5nIGlzIGV4cGVjdGVkIGFzIHZhbHVlIGZvciAnJHt1cmxQYXJhbUtleX0nIHdoZW4gY29udmVydGluZyBmcm9tIHVybFBhcmFtc2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCghb3B0cz8ucHJlcGVuZEZpbHRlck5hbWUgfHwgdXJsUGFyYW1LZXkuc3RhcnRzV2l0aChvcHRzLnByZXBlbmRGaWx0ZXJOYW1lKSkgJiYgdHlwZW9mIHVybFBhcmFtVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAodXJsUGFyYW1WYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBlbXB0eSBzdHJpbmcgc2hvdWxkIGJlIGlnbm9yZWRcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcktleSA9IG9wdHM/LnByZXBlbmRGaWx0ZXJOYW1lID8gdXJsUGFyYW1LZXkuc3Vic3RyaW5nKG9wdHMucHJlcGVuZEZpbHRlck5hbWUubGVuZ3RoKSA6IHVybFBhcmFtS2V5O1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyUGFydHMgPSB1cmxQYXJhbVZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICBsZXQgcGFydElkeCA9IDA7XG5cbiAgICAgICAgICAgIC8vIHJlbW92ZWQgZGVmYXVsdCBmaWx0ZXJcbiAgICAgICAgICAgIGlmIChmaWx0ZXJQYXJ0c1twYXJ0SWR4XSA9PT0gJ251bGwnKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJhbXMuZmlsdGVycykge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVycyA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyc1tmaWx0ZXJLZXkgYXMga2V5b2Ygb2JqZWN0XSA9IHt2YWx1ZTogbnVsbH07XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjYXNlIHNlbnNpdGl2ZVxuICAgICAgICAgICAgbGV0IGNhc2VTZW5zaXRpdmU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoZmlsdGVyUGFydHNbcGFydElkeF0gPT09ICdjcycgfHwgZmlsdGVyUGFydHNbcGFydElkeF0gPT09ICdjaScpIHtcbiAgICAgICAgICAgICAgICBjYXNlU2Vuc2l0aXZlID0gZmlsdGVyUGFydHNbcGFydElkeCsrXSA9PT0gJ2NzJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbWF0Y2ggbW9kZVxuICAgICAgICAgICAgY29uc3QgbWF0Y2hNb2RlID0gZmlsdGVyUGFydHNbcGFydElkeF0gPyAoRmlsdGVyTWF0Y2hNb2RlLmZyb21BYmJyZXZpYXRpb24oZmlsdGVyUGFydHNbcGFydElkeF0pID8/IGZpbHRlclBhcnRzW3BhcnRJZHhdKSA6IEZpbHRlck1hdGNoTW9kZS5FcXVhbHM7XG4gICAgICAgICAgICBwYXJ0SWR4Kys7XG5cbiAgICAgICAgICAgIGNvbnN0IG5vVmFsID0gbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzIHx8IG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdDtcblxuICAgICAgICAgICAgLy8gdmFsdWVcbiAgICAgICAgICAgIGxldCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQgfCBudWxsID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKCFub1ZhbCkge1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJQYXJ0cy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocGFydElkeCA9PT0gZmlsdGVyUGFydHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGZpbHRlclBhcnRzW3BhcnRJZHhdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydElkeCA8IGZpbHRlclBhcnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBhcnJheSB0aGF0IHNob3VsZCBub3QgYmUgYXJyYXksIHNvIGpvaW4gYmFjayB0b2dldGhlclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGZpbHRlclBhcnRzLnNsaWNlKHBhcnRJZHgsIGZpbHRlclBhcnRzLmxlbmd0aCkuam9pbignOicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIG1hdGNoTW9kZSAhPT0gRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cyAmJiBtYXRjaE1vZGUgIT09IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdmFsdWUgdW5kZWZpbmVkIGFuZCBtYXRjaCBtb2RlIGV4cGVjdHMgdmFsdWUsIHRoZW4gc2tpcFxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnbnVsbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgobWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuSW4gfHwgbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuTm90SW4gfHwgbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbikgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXlWYWw6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZXNlIG1hdGNoIG1vZGVzIGV4cGVjdCBhcnJheVxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuaW5kZXhPZignXCInKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2tlbnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudFRva2VuID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXhwbGljaXRRdW90ZXMgPSBmYWxzZTsgLy90b2tlbiBpcyBxdW90ZWQsIGUuZy4gaW46MSwyLFwiMjJcIlwiXCIsXCIsMTIzXCJcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcXVvdGVzT3BlbmVkID0gZmFsc2U7IC8vdG9rZW4gaGFzIHN0YXJ0ZWQgcHJvY2Vzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHF1b3Rlc0V4cGxpY2l0bHlDbG9zZWQgPSBmYWxzZTsgLy90b2tlbiBwcm9jZXNzaW5nIGhhcyBmaW5pc2hlZCwgYWZ0ZXIgc2luZ2xlIFwiIGluIHF1b3RlZCBtb2RlLCBvciBiZWZvcmUgLCBpbiBub3QgcXVvdGVkXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjID0gdmFsdWVbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNldCB0aGUgdG9rZW5pemVyIHdoZW4gc2VlaW5nIHRoZSB0b2tlbiBzZXBhcmF0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGlmIGVpdGhlcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcXVvdGVzIGhhdmUgbm90IGJlZW4gb3BlbmVkIHlldCAod2hlbiB0aGVyZSBhcmUgbm8gY2hhcmFjdGVycyBiZXR3ZWVuIHNlcGFyYXRvcnMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0b2tlbiBoYXMgYmVlbiBleHBsaWNpdGx5IGNsb3NlZCAod2hlbiB3ZSBhY3R1YWxseSBoYXZlIGV4cGxpY2l0IG9wZW5pbmcgaS5lLiwgcXVvdGVzIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3Igd2UgaGF2ZSBpbXBsaWNpdCBxdW90ZXMgKGkuZS4sIHF1b3RlcyBhcmUgbm90IHRoZSBmaXJzdCBjaGFyYWN0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICcsJyAmJiAoIXF1b3Rlc09wZW5lZCB8fCBxdW90ZXNFeHBsaWNpdGx5Q2xvc2VkIHx8ICFleHBsaWNpdFF1b3RlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2goY3VycmVudFRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFRva2VuID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3Rlc09wZW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZXNFeHBsaWNpdGx5Q2xvc2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxpY2l0UXVvdGVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICdcIicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNjYXBlZCBkb3VibGUtcXVvdGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHBsaWNpdFF1b3RlcyAmJiBpICsgMSA8IHZhbHVlLmxlbmd0aCAmJiB2YWx1ZVtpICsgMV0gPT09ICdcIicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbiArPSBjOyAvLyBBcHBlbmQgb25lIGRvdWJsZS1xdW90ZSB0byB0aGUgY3VycmVudCB0b2tlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrOyAvLyBTa2lwIHRoZSBuZXh0IGRvdWJsZS1xdW90ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGVuY291bnRlciBxdW90ZXMgYWdhaW4gYWZ0ZXIgdGhleSB3ZXJlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgPT4gd2UgY2xvc2UgdGhlIHRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV4cGxpY2l0UXVvdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZXNFeHBsaWNpdGx5Q2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbXBsaWNpdCBxdW90ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocXVvdGVzT3BlbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW4gKz0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBxdW90ZXMgYXJlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgPT4gZXhwbGljaXRseSBvcGVuIHRoZSB0b2tlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbiA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGVzT3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxpY2l0UXVvdGVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdW90ZXNFeHBsaWNpdGx5Q2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZXNPcGVuZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW4gKz0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdW90ZXNPcGVuZWQgJiYgIXF1b3Rlc0V4cGxpY2l0bHlDbG9zZWQgJiYgZXhwbGljaXRRdW90ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgbGFzdCB0b2tlbiBhZnRlciB0aGUgbG9vcCBlbmRzXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaChjdXJyZW50VG9rZW4udG9TdHJpbmcoKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5VmFsID0gdG9rZW5zO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlWYWwgPSB2YWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4gJiYgYXJyYXlWYWwubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFycmF5VmFsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHx8IChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZSEubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBmaWx0ZXIgd2l0aCBlbXB0eSB2YWx1ZSBpcyB0byBiZSBpZ25vcmVkXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhc2VTZW5zaXRpdmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghcGFyYW1zLmZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVycyA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwYXJhbXMuZmlsdGVyc1tmaWx0ZXJLZXkgYXMga2V5b2Ygb2JqZWN0XSA9IHt2YWx1ZTogdmFsdWUsIG1hdGNoTW9kZTogbWF0Y2hNb2RlLCBjYXNlU2Vuc2l0aXZlOiBjYXNlU2Vuc2l0aXZlfTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHBhcmFtcztcbn1cblxuLyoqXG4gKiBNYWtlcyBhIGNvcHkgb2YgdGhlIGdpdmVuIERhdGFMaXN0UGFyYW1zIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge0RhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPn0gcGFyYW1zIC0gVGhlIERhdGFMaXN0UGFyYW1zIG9iamVjdCB0byBiZSBjb3BpZWQuXG4gKiBAcmV0dXJucyB7RGF0YUxpc3RQYXJhbXM8U29ydHMsIEZpbHRlcnM+fSAtIFJldHVybnMgYSBuZXcgY29weSBvZiB0aGUgRGF0YUxpc3RQYXJhbXMgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weURhdGFMaXN0UGFyYW1zPFNvcnRzID0gc3RyaW5nLCBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0gc3RyaW5nPihwYXJhbXM6IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPik6IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPiB7XG4gICAgY29uc3QgY29weTogRGF0YUxpc3RQYXJhbXM8U29ydHMsIEZpbHRlcnM+ID0ge1xuICAgICAgICBvZmZzZXQ6IHBhcmFtcy5vZmZzZXQsXG4gICAgICAgIGxpbWl0OiBwYXJhbXMubGltaXQsXG4gICAgICAgIHNlYXJjaDogcGFyYW1zLnNlYXJjaFxuICAgIH07XG5cbiAgICBpZiAocGFyYW1zLnNvcnQpIHtcbiAgICAgICAgY29weS5zb3J0ID0gcGFyYW1zLnNvcnQ/Lm1hcChzID0+ICh7Li4uc30pKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5maWx0ZXJzKSB7XG4gICAgICAgIGNvcHkuZmlsdGVycyA9IE9iamVjdC5lbnRyaWVzKHBhcmFtcy5maWx0ZXJzKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHZhbHVlIGFzIERhdGFMaXN0RmlsdGVyO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICAgICAgW2tleV06IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZmlsdGVyVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBBcnJheS5pc0FycmF5KGZpbHRlclZhbHVlLnZhbHVlKSA/IFsuLi5maWx0ZXJWYWx1ZS52YWx1ZV0gOiBmaWx0ZXJWYWx1ZS52YWx1ZVxuICAgICAgICAgICAgICAgIH0gYXMgRGF0YUxpc3RGaWx0ZXJcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIHt9IGFzIERhdGFMaXN0RmlsdGVyc1R5cGU8RmlsdGVycz4pO1xuICAgIH1cblxuICAgIHJldHVybiBjb3B5O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgdmFsdWUgdG8gYSBVUkwgcXVlcnkgcGFyYW0gc3RyaW5nIHJlcHJlc2VudGF0aW9uLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgY29udmVydGVkLlxuICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dOdWxsPWZhbHNlXSAtIEluZGljYXRlcyB3aGV0aGVyIG51bGwgdmFsdWVzIGFyZSBhbGxvd2VkLlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIFVSTCBwYXJhbWV0ZXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlLlxuICogQHRocm93cyB7Q29tbW9uc0ludGVybmFsRXJyb3J9IElmIGFuIHVuZGVmaW5lZCB2YWx1ZSBpcyBwYXNzZWQgd2l0aG91dCBhbGxvd051bGwgc2V0IHRvIHRydWUuXG4gKiBAdGhyb3dzIHtDb21tb25zSW50ZXJuYWxFcnJvcn0gSWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCAoZXhjbHVkaW5nIERhdGUpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGF0YUxpc3RQYXJhbXNGaWx0ZXJWYWx1ZVRvVXJsU3RyaW5nKHZhbHVlOiB1bmtub3duLCBhbGxvd051bGwgPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsICYmIGFsbG93TnVsbCkgcmV0dXJuICdudWxsJztcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKCdVbmRlZmluZWQgdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRlZCB0byB1cmwgcGFyYW0uJyk7IC8vIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIHNob3VsZCBiZSBmaWx0ZXJlZCBvdXQgZWFybGllclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICAubWFwKHYgPT4gZGF0YUxpc3RQYXJhbXNGaWx0ZXJWYWx1ZVRvVXJsU3RyaW5nKHYsIGFsbG93TnVsbCkpXG4gICAgICAgICAgICAubWFwKHYgPT4gKHYuaW5kZXhPZignLCcpID49IDAgfHwgdi5pbmRleE9mKCdcIicpID49IDAgPyBgXCIke3YucmVwbGFjZUFsbCgnXCInLCAnXCJcIicpfVwiYCA6IHYpKVxuICAgICAgICAgICAgLmpvaW4oJywnKTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gZGF0ZVRvSXNvU3RyaW5nKHZhbHVlLCAnZGF0ZVRpbWUnLCB7dXRjOiB0cnVlfSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKCdGaWx0ZXIgdmFsdWUgY2Fubm90IGJlIG9iamVjdCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuIl19","/**\n * A base data provider class used for handling data operations.\n *\n * @tparam Model - The type of data this data provider will handle.\n * @tparam Service - The type of service used by this data provider (optional).\n * @tparam ServiceClass - The service type for the data provider (optional).\n */\nexport class DataProviderInst {\n constructor(serviceType) {\n this.serviceType = serviceType;\n }\n get isDataProvider() {\n return true;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5kYXRhLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvZGF0YS1wcm92aWRlcnMvYmFzZS5kYXRhLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUFDekIsWUFBbUMsV0FBeUI7UUFBekIsZ0JBQVcsR0FBWCxXQUFXLENBQWM7SUFBRyxDQUFDO0lBRWhFLElBQVcsY0FBYztRQUNyQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NlcnZpY2VDbGFzc09wdFR5cGV9IGZyb20gJy4uL21vZGVscy9jbGFzcy1zZXJ2aWNlLm1vZGVsJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZXhwb3J0IHR5cGUgSURhdGFQcm92aWRlcjxNb2RlbFR5cGUgPSBhbnksIFNlcnZpY2VUeXBlID0gYW55LCBTVCA9IFNlcnZpY2VDbGFzc09wdFR5cGU8U2VydmljZVR5cGU+PiA9IHtcbiAgICBzZXJ2aWNlVHlwZTogU1Q7XG4gICAgaXNEYXRhUHJvdmlkZXI6IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEEgYmFzZSBkYXRhIHByb3ZpZGVyIGNsYXNzIHVzZWQgZm9yIGhhbmRsaW5nIGRhdGEgb3BlcmF0aW9ucy5cbiAqXG4gKiBAdHBhcmFtIE1vZGVsIC0gVGhlIHR5cGUgb2YgZGF0YSB0aGlzIGRhdGEgcHJvdmlkZXIgd2lsbCBoYW5kbGUuXG4gKiBAdHBhcmFtIFNlcnZpY2UgLSBUaGUgdHlwZSBvZiBzZXJ2aWNlIHVzZWQgYnkgdGhpcyBkYXRhIHByb3ZpZGVyIChvcHRpb25hbCkuXG4gKiBAdHBhcmFtIFNlcnZpY2VDbGFzcyAtIFRoZSBzZXJ2aWNlIHR5cGUgZm9yIHRoZSBkYXRhIHByb3ZpZGVyICAob3B0aW9uYWwpLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YVByb3ZpZGVySW5zdDxNb2RlbCwgU2VydmljZSA9IGFueSwgU2VydmljZUNsYXNzID0gU2VydmljZUNsYXNzT3B0VHlwZTxTZXJ2aWNlPj4gaW1wbGVtZW50cyBJRGF0YVByb3ZpZGVyPE1vZGVsLCBTZXJ2aWNlLCBTZXJ2aWNlQ2xhc3M+IHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHNlcnZpY2VUeXBlOiBTZXJ2aWNlQ2xhc3MpIHt9XG5cbiAgICBwdWJsaWMgZ2V0IGlzRGF0YVByb3ZpZGVyKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG4iXX0=","import { effect, untracked } from '@angular/core';\n/**\n * Effect function with explicit declaration of dependencies. Dependencies will be tracked, whereas the main execution will not be.\n *\n * @param deps Array of dependencies to be tracked.\n * @param fn Function where dependencies will no longer be tracked.\n * @param opts Additional options:\n * - firstOnly Executes effect only once, then destroy it.\n */\nexport function effectWithDeps(deps, fn, opts) {\n let execCnt = 0;\n const ref = effect(() => {\n if (opts?.firstOnly) {\n if (execCnt > 0) {\n return;\n }\n ref.destroy();\n }\n const depsValues = deps.map(s => s());\n execCnt++;\n untracked(() => {\n fn(depsValues);\n });\n }, ...(ngDevMode ? [{ debugName: \"ref\" }] : []));\n return ref;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvcmVhY3Rpdml0eS9lZmZlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFZLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFNM0Q7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQzFCLElBQStDLEVBQy9DLEVBQTBCLEVBQzFCLElBQTRCO0lBRTVCLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNoQixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFO1FBQ3BCLElBQUksSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNkLE9BQU87WUFDWCxDQUFDO1lBQ0QsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QyxPQUFPLEVBQUUsQ0FBQztRQUNWLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWCxFQUFFLENBQUMsVUFBaUIsQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQywrQ0FBQyxDQUFDO0lBQ0gsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFZmZlY3RSZWYsIGVmZmVjdCwgdW50cmFja2VkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxudHlwZSBFZmZlY3RXaXRoRGVwc1ZhbHVlczxUPiA9IHtcbiAgICBbSyBpbiBrZXlvZiBUXTogKCkgPT4gVFtLXTtcbn07XG5cbi8qKlxuICogRWZmZWN0IGZ1bmN0aW9uIHdpdGggZXhwbGljaXQgZGVjbGFyYXRpb24gb2YgZGVwZW5kZW5jaWVzLiBEZXBlbmRlbmNpZXMgd2lsbCBiZSB0cmFja2VkLCB3aGVyZWFzIHRoZSBtYWluIGV4ZWN1dGlvbiB3aWxsIG5vdCBiZS5cbiAqXG4gKiBAcGFyYW0gZGVwcyBBcnJheSBvZiBkZXBlbmRlbmNpZXMgdG8gYmUgdHJhY2tlZC5cbiAqIEBwYXJhbSBmbiBGdW5jdGlvbiB3aGVyZSBkZXBlbmRlbmNpZXMgd2lsbCBubyBsb25nZXIgYmUgdHJhY2tlZC5cbiAqIEBwYXJhbSBvcHRzIEFkZGl0aW9uYWwgb3B0aW9uczpcbiAqICAgLSBmaXJzdE9ubHkgRXhlY3V0ZXMgZWZmZWN0IG9ubHkgb25jZSwgdGhlbiBkZXN0cm95IGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZWZmZWN0V2l0aERlcHM8SW5wdXQgZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10sIFBhcmFtcyA9IElucHV0PihcbiAgICBkZXBzOiByZWFkb25seSBbLi4uRWZmZWN0V2l0aERlcHNWYWx1ZXM8SW5wdXQ+XSxcbiAgICBmbjogKGRlcHM6IFBhcmFtcykgPT4gdm9pZCxcbiAgICBvcHRzPzoge2ZpcnN0T25seT86IGJvb2xlYW59XG4pOiBFZmZlY3RSZWYge1xuICAgIGxldCBleGVjQ250ID0gMDtcbiAgICBjb25zdCByZWYgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAob3B0cz8uZmlyc3RPbmx5KSB7XG4gICAgICAgICAgICBpZiAoZXhlY0NudCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWYuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlcHNWYWx1ZXMgPSBkZXBzLm1hcChzID0+IHMoKSk7XG4gICAgICAgIGV4ZWNDbnQrKztcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgIGZuKGRlcHNWYWx1ZXMgYXMgYW55KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlZjtcbn1cbiJdfQ==","import { ApplicationRef, Directive, ElementRef, EnvironmentInjector, Injector, ViewContainerRef, booleanAttribute, createComponent, inject, input, output } from '@angular/core';\nimport { CommonsInternalError } from '../error/error.model';\nimport { effectWithDeps } from '../reactivity/effect';\nimport * as i0 from \"@angular/core\";\nexport class ComponentDirective {\n constructor() {\n this.injector = inject(Injector);\n this.elementRef = inject(ElementRef);\n this.applicationRef = inject(ApplicationRef);\n this.viewContainerRef = inject(ViewContainerRef);\n this.component = input(undefined, ...(ngDevMode ? [{ debugName: \"component\", alias: 'mngComponent' }] : [{ alias: 'mngComponent' }]));\n this.componentIt = input(undefined, ...(ngDevMode ? [{ debugName: \"componentIt\", alias: 'injectionToken' }] : [{ alias: 'injectionToken' }]));\n this.inputs = input(...(ngDevMode ? [undefined, { debugName: \"inputs\" }] : []));\n this.attachToHost = input(false, ...(ngDevMode ? [{ debugName: \"attachToHost\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.parentInjector = input(...(ngDevMode ? [undefined, { debugName: \"parentInjector\" }] : []));\n this.instanceCreated = output();\n effectWithDeps([this.component, this.componentIt], ([componentInput, componentItInput]) => {\n let component = componentInput;\n const componentIt = componentItInput;\n if (!component && componentIt) {\n component = this.injector.get(componentIt, null, { optional: true }) ?? undefined;\n }\n if (!component) {\n throw new CommonsInternalError(`Component cannot be created, no component (${component}) or no or invalid injection token provided (${componentIt}).`);\n }\n const elementInjector = this.parentInjector() ?? this.injector;\n const environmentInjector = elementInjector.get(EnvironmentInjector, null, { optional: true }) ?? this.applicationRef.injector;\n if (this.attachToHost()) {\n this.componentRef = createComponent(component, {\n hostElement: this.elementRef.nativeElement,\n environmentInjector: environmentInjector,\n elementInjector: elementInjector\n });\n }\n else {\n this.viewContainerRef.clear();\n this.componentRef = this.viewContainerRef.createComponent(component, {\n environmentInjector: environmentInjector,\n injector: elementInjector\n });\n }\n const inputs = this.inputs();\n if (inputs) {\n for (const input in inputs) {\n this.componentRef.setInput(input, inputs[input]);\n }\n }\n if (this.attachToHost()) {\n this.applicationRef.attachView(this.componentRef.hostView);\n }\n if (this.componentRef) {\n this.instanceCreated.emit(this.componentRef.instance);\n }\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: ComponentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.1.7\", type: ComponentDirective, isStandalone: true, selector: \"[mngComponent]\", inputs: { component: { classPropertyName: \"component\", publicName: \"mngComponent\", isSignal: true, isRequired: false, transformFunction: null }, componentIt: { classPropertyName: \"componentIt\", publicName: \"injectionToken\", isSignal: true, isRequired: false, transformFunction: null }, inputs: { classPropertyName: \"inputs\", publicName: \"inputs\", isSignal: true, isRequired: false, transformFunction: null }, attachToHost: { classPropertyName: \"attachToHost\", publicName: \"attachToHost\", isSignal: true, isRequired: false, transformFunction: null }, parentInjector: { classPropertyName: \"parentInjector\", publicName: \"parentInjector\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { instanceCreated: \"instanceCreated\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: ComponentDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[mngComponent]'\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL2RpcmVjdGl2ZXMvY29tcG9uZW50LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsY0FBYyxFQUVkLFNBQVMsRUFDVCxVQUFVLEVBQ1YsbUJBQW1CLEVBRW5CLFFBQVEsRUFFUixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7O0FBS3BELE1BQU0sT0FBTyxrQkFBa0I7SUFnQjNCO1FBZmlCLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4QyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUU3QyxjQUFTLEdBQUcsS0FBSyxDQUFzQixTQUFTLDZDQUFHLEtBQUssRUFBRSxjQUFjLE9BQXRCLEVBQUMsS0FBSyxFQUFFLGNBQWMsRUFBQyxHQUFDLENBQUM7UUFDM0UsZ0JBQVcsR0FBRyxLQUFLLENBQTBCLFNBQVMsK0NBQUcsS0FBSyxFQUFFLGdCQUFnQixPQUF4QixFQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBQyxHQUFDLENBQUM7UUFDbkYsV0FBTSxHQUFHLEtBQUssNERBQW1DLENBQUM7UUFDbEQsaUJBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxnREFBRyxTQUFTLEVBQUUsZ0JBQWdCLE9BQTVCLEVBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFDLEdBQUMsQ0FBQztRQUMzRCxtQkFBYyxHQUFHLEtBQUssb0VBQXdCLENBQUM7UUFFL0Msb0JBQWUsR0FBRyxNQUFNLEVBQUssQ0FBQztRQUsxQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsY0FBYyxFQUFFLGdCQUFnQixDQUFDLEVBQUUsRUFBRTtZQUN0RixJQUFJLFNBQVMsR0FBRyxjQUFjLENBQUM7WUFDL0IsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7WUFDckMsSUFBSSxDQUFDLFNBQVMsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDNUIsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsSUFBSSxTQUFTLENBQUM7WUFDcEYsQ0FBQztZQUVELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDYixNQUFNLElBQUksb0JBQW9CLENBQUMsOENBQThDLFNBQVMsZ0RBQWdELFdBQVcsSUFBSSxDQUFDLENBQUM7WUFDM0osQ0FBQztZQUVELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQy9ELE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztZQUU3SCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUU7b0JBQzNDLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWE7b0JBQzFDLG1CQUFtQixFQUFFLG1CQUFtQjtvQkFDeEMsZUFBZSxFQUFFLGVBQWU7aUJBQ25DLENBQUMsQ0FBQztZQUNQLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBTSxTQUFTLEVBQUU7b0JBQ3RFLG1CQUFtQixFQUFFLG1CQUFtQjtvQkFDeEMsUUFBUSxFQUFFLGVBQWU7aUJBQzVCLENBQUMsQ0FBQztZQUNQLENBQUM7WUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0IsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDVCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUQsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0E1RFEsa0JBQWtCO2tHQUFsQixrQkFBa0I7OzJGQUFsQixrQkFBa0I7a0JBSDlCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdCQUFnQjtpQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFwcGxpY2F0aW9uUmVmLFxuICAgIENvbXBvbmVudFJlZixcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgIEluamVjdGlvblRva2VuLFxuICAgIEluamVjdG9yLFxuICAgIFR5cGUsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIGNyZWF0ZUNvbXBvbmVudCxcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG4gICAgb3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0NvbW1vbnNJbnRlcm5hbEVycm9yfSBmcm9tICcuLi9lcnJvci9lcnJvci5tb2RlbCc7XG5pbXBvcnQge2VmZmVjdFdpdGhEZXBzfSBmcm9tICcuLi9yZWFjdGl2aXR5L2VmZmVjdCc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW21uZ0NvbXBvbmVudF0nXG59KVxuZXhwb3J0IGNsYXNzIENvbXBvbmVudERpcmVjdGl2ZTxDPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwbGljYXRpb25SZWYgPSBpbmplY3QoQXBwbGljYXRpb25SZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcblxuICAgIHB1YmxpYyByZWFkb25seSBjb21wb25lbnQgPSBpbnB1dDxUeXBlPEM+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHthbGlhczogJ21uZ0NvbXBvbmVudCd9KTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50SXQgPSBpbnB1dDxJbmplY3Rpb25Ub2tlbjxUeXBlPEM+Pj4odW5kZWZpbmVkLCB7YWxpYXM6ICdpbmplY3Rpb25Ub2tlbid9KTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgaW5wdXRzID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZD4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgYXR0YWNoVG9Ib3N0ID0gaW5wdXQoZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcGFyZW50SW5qZWN0b3IgPSBpbnB1dDxJbmplY3RvciB8IHVuZGVmaW5lZD4oKTtcblxuICAgIHB1YmxpYyByZWFkb25seSBpbnN0YW5jZUNyZWF0ZWQgPSBvdXRwdXQ8Qz4oKTtcblxuICAgIHB1YmxpYyBjb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8Qz47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgZWZmZWN0V2l0aERlcHMoW3RoaXMuY29tcG9uZW50LCB0aGlzLmNvbXBvbmVudEl0XSwgKFtjb21wb25lbnRJbnB1dCwgY29tcG9uZW50SXRJbnB1dF0pID0+IHtcbiAgICAgICAgICAgIGxldCBjb21wb25lbnQgPSBjb21wb25lbnRJbnB1dDtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudEl0ID0gY29tcG9uZW50SXRJbnB1dDtcbiAgICAgICAgICAgIGlmICghY29tcG9uZW50ICYmIGNvbXBvbmVudEl0KSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gdGhpcy5pbmplY3Rvci5nZXQoY29tcG9uZW50SXQsIG51bGwsIHtvcHRpb25hbDogdHJ1ZX0pID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYENvbXBvbmVudCBjYW5ub3QgYmUgY3JlYXRlZCwgbm8gY29tcG9uZW50ICgke2NvbXBvbmVudH0pIG9yIG5vIG9yIGludmFsaWQgaW5qZWN0aW9uIHRva2VuIHByb3ZpZGVkICgke2NvbXBvbmVudEl0fSkuYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRJbmplY3RvciA9IHRoaXMucGFyZW50SW5qZWN0b3IoKSA/PyB0aGlzLmluamVjdG9yO1xuICAgICAgICAgICAgY29uc3QgZW52aXJvbm1lbnRJbmplY3RvciA9IGVsZW1lbnRJbmplY3Rvci5nZXQoRW52aXJvbm1lbnRJbmplY3RvciwgbnVsbCwge29wdGlvbmFsOiB0cnVlfSkgPz8gdGhpcy5hcHBsaWNhdGlvblJlZi5pbmplY3RvcjtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0YWNoVG9Ib3N0KCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IGNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgaG9zdEVsZW1lbnQ6IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudEluamVjdG9yOiBlbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50SW5qZWN0b3I6IGVsZW1lbnRJbmplY3RvclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQ8YW55Pihjb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogZW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0b3I6IGVsZW1lbnRJbmplY3RvclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpbnB1dHMgPSB0aGlzLmlucHV0cygpO1xuICAgICAgICAgICAgaWYgKGlucHV0cykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaW5wdXQgaW4gaW5wdXRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KGlucHV0LCBpbnB1dHNbaW5wdXRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaFRvSG9zdCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvblJlZi5hdHRhY2hWaWV3KHRoaXMuY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZUNyZWF0ZWQuZW1pdCh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==","import { Directive, TemplateRef, ViewContainerRef, inject, input } from '@angular/core';\nimport { effectWithDeps } from '../reactivity/effect';\nimport * as i0 from \"@angular/core\";\nexport class RerenderDirective {\n constructor() {\n this.templateRef = inject((TemplateRef));\n this.viewContainerRef = inject(ViewContainerRef);\n this.mngRerender = input.required(...(ngDevMode ? [{ debugName: \"mngRerender\" }] : []));\n effectWithDeps([this.mngRerender], () => {\n this.viewContainerRef.clear();\n this.viewContainerRef.createEmbeddedView(this.templateRef);\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RerenderDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.1.7\", type: RerenderDirective, isStandalone: true, selector: \"[mngRerender]\", inputs: { mngRerender: { classPropertyName: \"mngRerender\", publicName: \"mngRerender\", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RerenderDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[mngRerender]'\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVyZW5kZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvZGlyZWN0aXZlcy9yZXJlbmRlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV0RixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7O0FBS3BELE1BQU0sT0FBTyxpQkFBaUI7SUFNMUI7UUFMaUIsZ0JBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQSxXQUFvQixDQUFBLENBQUMsQ0FBQztRQUMzQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUU3QyxnQkFBVyxHQUFHLEtBQUssQ0FBQyxRQUFRLHNEQUFFLENBQUM7UUFHM0MsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsRUFBRTtZQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OEdBWFEsaUJBQWlCO2tHQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBSDdCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGVBQWU7aUJBQzVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmLCBpbmplY3QsIGlucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtlZmZlY3RXaXRoRGVwc30gZnJvbSAnLi4vcmVhY3Rpdml0eS9lZmZlY3QnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1ttbmdSZXJlbmRlcl0nXG59KVxuZXhwb3J0IGNsYXNzIFJlcmVuZGVyRGlyZWN0aXZlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmPHVua25vd24+KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgbW5nUmVyZW5kZXIgPSBpbnB1dC5yZXF1aXJlZCgpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGVmZmVjdFdpdGhEZXBzKFt0aGlzLm1uZ1JlcmVuZGVyXSwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=","import { Directive, TemplateRef, inject } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class TemplateDirective {\n constructor() {\n this.template = inject((TemplateRef));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.7\", type: TemplateDirective, isStandalone: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TemplateDirective, decorators: [{\n type: Directive\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvZGlyZWN0aXZlcy90ZW1wbGF0ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBZSxXQUFXLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQUcxRSxNQUFNLE9BQWdCLGlCQUFpQjtJQUR2QztRQUVvQixhQUFRLEdBQUcsTUFBTSxDQUFDLENBQUEsV0FBb0IsQ0FBQSxDQUFDLENBQUM7S0FHM0Q7OEdBSnFCLGlCQUFpQjtrR0FBakIsaUJBQWlCOzsyRkFBakIsaUJBQWlCO2tCQUR0QyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIElucHV0U2lnbmFsLCBUZW1wbGF0ZVJlZiwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVGVtcGxhdGVEaXJlY3RpdmU8TmFtZVR5cGUgPSBzdHJpbmcsIENvbnRleHQgPSBhbnk+IHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgdGVtcGxhdGUgPSBpbmplY3QoVGVtcGxhdGVSZWY8Q29udGV4dD4pO1xuXG4gICAgYWJzdHJhY3QgcmVhZG9ubHkgbmFtZTogSW5wdXRTaWduYWw8TmFtZVR5cGU+O1xufVxuIl19","/**\n * Returns array of names for constants in enum.\n * @param enumType Enum object.\n */\nexport function getEnumConstantNames(enumType) {\n return getEnumConstantNamesFromObject(enumType);\n}\n/**\n * Returns array of names for constants in enum.\n * @param enumObj Enum object.\n */\nexport function getEnumConstantNamesFromObject(enumObj) {\n // in number enum, the numbers are also represented in objects and should be filtered out\n return Object.keys(enumObj).filter(v => isNaN(+v));\n}\n/**\n * Returns array of values for constants in enum.\n * @param enumType Enum object.\n */\nexport function getEnumConstantValues(enumType) {\n return Object.keys(enumType)\n .filter(v => isNaN(+v))\n .map(v => enumType[v]);\n}\n/**\n * Returns array of string values for constants in enum.\n * @param enumType Enum object.\n */\nexport function getEnumConstantValuesAsString(enumType) {\n return Object.keys(enumType).map(v => enumType[v]);\n}\n/**\n * Returns array of number values for constants in enum.\n * @param enumType Enum object.\n */\nexport function getEnumConstantValuesAsNumber(enumType) {\n return Object.keys(enumType)\n .filter(v => !isNaN(+v))\n .map(v => +v);\n}\n/**\n * Returns array of type EnumValue for all constants in enum.\n * @param enumType Enum object.\n * @param nameAsValue If use name of constant as value (optional, default: false).\n * @param titlePath Base path for title to use as translation (optional).\n */\nexport function fromEnumConstantsAsValueArray(enumType, nameAsValue = false, titlePath) {\n return getEnumConstantNames(enumType).map(n => ({ name: n, title: `${titlePath ? `${titlePath}.` : ''}${n}`, value: nameAsValue ? n : enumType[n] }));\n}\n/**\n * Returns array of type EnumValue for provided values in enum.\n * @param enumType Enum object.\n * @param values Enum values (constants).\n * @param nameAsValue If use name of constant as value (optional, default: false).\n * @param titlePath Base path for title to use as translation (optional).\n */\nexport function fromEnumValuesAsValueArray(enumType, values, nameAsValue = false, titlePath) {\n return values.map(v => {\n const k = getEnumConstantName(enumType, v);\n return { name: k, title: `${titlePath ? `${titlePath}.` : ''}${k}`, value: nameAsValue ? k : v };\n });\n}\n/**\n * Gets constant name for value.\n * @param enumType Enum object.\n * @param value Value of enum constant.\n */\nexport function getEnumConstantName(enumType, value) {\n if (typeof value === 'string') {\n return getEnumConstantNames(enumType).find(c => enumType[c] === value) ?? null;\n }\n else {\n return typeof enumType[value] !== 'undefined' ? enumType[value] : null;\n }\n}\n/**\n * Gets constant name for value.\n * @param enumObj Enum object.\n * @param value Value of enum constant.\n */\nexport function getEnumConstantNameFromObject(enumObj, value) {\n const enumObjAny = enumObj;\n if (typeof value === 'string') {\n return getEnumConstantNamesFromObject(enumObj).find(c => enumObjAny[c] === value) ?? null;\n }\n else {\n return typeof enumObjAny[value] !== 'undefined' ? enumObjAny[value] : null;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvZW51bS9lbnVtLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0E7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFFBQWtCO0lBQ25ELE9BQU8sOEJBQThCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSw4QkFBOEIsQ0FBQyxPQUFlO0lBQzFELHlGQUF5RjtJQUN6RixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLFFBQWtCO0lBQ3BELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxRQUFrQjtJQUM1RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQWlCLENBQVcsQ0FBQyxDQUFDO0FBQ2pGLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsNkJBQTZCLENBQUMsUUFBa0I7SUFDNUQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUFDLFFBQWtCLEVBQUUsV0FBVyxHQUFHLEtBQUssRUFBRSxTQUFrQjtJQUNyRyxPQUFPLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQVcsRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUEsQ0FBQyxDQUFDO0FBQ2pLLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQWtDLFFBQWtCLEVBQUUsTUFBMkIsRUFBRSxXQUFXLEdBQUcsS0FBSyxFQUFFLFNBQWtCO0lBQ2hLLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNsQixNQUFNLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0MsT0FBTyxFQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQWMsQ0FBQztJQUNoSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFrQyxRQUFrQixFQUFFLEtBQW1CO0lBQ3hHLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUIsT0FBTyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ25GLENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxPQUFPLFFBQVEsQ0FBQyxLQUFxQixDQUFDLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBRSxRQUFRLENBQUMsS0FBcUIsQ0FBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdkgsQ0FBQztBQUNMLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUFrQyxPQUFlLEVBQUUsS0FBbUI7SUFDL0csTUFBTSxVQUFVLEdBQUcsT0FBYyxDQUFDO0lBQ2xDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUIsT0FBTyw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQzlGLENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFFLFVBQVUsQ0FBQyxLQUFLLENBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzNGLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFbnVtQ29uc3RhbnRUeXBlLCBFbnVtVHlwZX0gZnJvbSAnLi4vaGVscGVycy90eXBlLWhlbHBlcnMnO1xuaW1wb3J0IHtFbnVtVmFsdWV9IGZyb20gJy4vZW51bS5tb2RlbCc7XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiBuYW1lcyBmb3IgY29uc3RhbnRzIGluIGVudW0uXG4gKiBAcGFyYW0gZW51bVR5cGUgRW51bSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnVtQ29uc3RhbnROYW1lcyhlbnVtVHlwZTogRW51bVR5cGUpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50TmFtZXNGcm9tT2JqZWN0KGVudW1UeXBlKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFycmF5IG9mIG5hbWVzIGZvciBjb25zdGFudHMgaW4gZW51bS5cbiAqIEBwYXJhbSBlbnVtT2JqIEVudW0gb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bUNvbnN0YW50TmFtZXNGcm9tT2JqZWN0KGVudW1PYmo6IG9iamVjdCk6IEFycmF5PHN0cmluZz4ge1xuICAgIC8vIGluIG51bWJlciBlbnVtLCB0aGUgbnVtYmVycyBhcmUgYWxzbyByZXByZXNlbnRlZCBpbiBvYmplY3RzIGFuZCBzaG91bGQgYmUgZmlsdGVyZWQgb3V0XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGVudW1PYmopLmZpbHRlcih2ID0+IGlzTmFOKCt2KSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiB2YWx1ZXMgZm9yIGNvbnN0YW50cyBpbiBlbnVtLlxuICogQHBhcmFtIGVudW1UeXBlIEVudW0gb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bUNvbnN0YW50VmFsdWVzKGVudW1UeXBlOiBFbnVtVHlwZSk6IEFycmF5PEVudW1Db25zdGFudFR5cGU+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZW51bVR5cGUpXG4gICAgICAgIC5maWx0ZXIodiA9PiBpc05hTigrdikpXG4gICAgICAgIC5tYXAodiA9PiBlbnVtVHlwZVt2XSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiBzdHJpbmcgdmFsdWVzIGZvciBjb25zdGFudHMgaW4gZW51bS5cbiAqIEBwYXJhbSBlbnVtVHlwZSBFbnVtIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1Db25zdGFudFZhbHVlc0FzU3RyaW5nKGVudW1UeXBlOiBFbnVtVHlwZSk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhlbnVtVHlwZSkubWFwKHYgPT4gZW51bVR5cGVbdiBhcyBrZXlvZiBvYmplY3RdIGFzIHN0cmluZyk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiBudW1iZXIgdmFsdWVzIGZvciBjb25zdGFudHMgaW4gZW51bS5cbiAqIEBwYXJhbSBlbnVtVHlwZSBFbnVtIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1Db25zdGFudFZhbHVlc0FzTnVtYmVyKGVudW1UeXBlOiBFbnVtVHlwZSk6IEFycmF5PG51bWJlcj4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhlbnVtVHlwZSlcbiAgICAgICAgLmZpbHRlcih2ID0+ICFpc05hTigrdikpXG4gICAgICAgIC5tYXAodiA9PiArdik7XG59XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiB0eXBlIEVudW1WYWx1ZSBmb3IgYWxsIGNvbnN0YW50cyBpbiBlbnVtLlxuICogQHBhcmFtIGVudW1UeXBlIEVudW0gb2JqZWN0LlxuICogQHBhcmFtIG5hbWVBc1ZhbHVlIElmIHVzZSBuYW1lIG9mIGNvbnN0YW50IGFzIHZhbHVlIChvcHRpb25hbCwgZGVmYXVsdDogZmFsc2UpLlxuICogQHBhcmFtIHRpdGxlUGF0aCBCYXNlIHBhdGggZm9yIHRpdGxlIHRvIHVzZSBhcyB0cmFuc2xhdGlvbiAob3B0aW9uYWwpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUVudW1Db25zdGFudHNBc1ZhbHVlQXJyYXkoZW51bVR5cGU6IEVudW1UeXBlLCBuYW1lQXNWYWx1ZSA9IGZhbHNlLCB0aXRsZVBhdGg/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50TmFtZXMoZW51bVR5cGUpLm1hcChuID0+IDxFbnVtVmFsdWU+e25hbWU6IG4sIHRpdGxlOiBgJHt0aXRsZVBhdGggPyBgJHt0aXRsZVBhdGh9LmAgOiAnJ30ke259YCwgdmFsdWU6IG5hbWVBc1ZhbHVlID8gbiA6IGVudW1UeXBlW25dfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiB0eXBlIEVudW1WYWx1ZSBmb3IgcHJvdmlkZWQgdmFsdWVzIGluIGVudW0uXG4gKiBAcGFyYW0gZW51bVR5cGUgRW51bSBvYmplY3QuXG4gKiBAcGFyYW0gdmFsdWVzIEVudW0gdmFsdWVzIChjb25zdGFudHMpLlxuICogQHBhcmFtIG5hbWVBc1ZhbHVlIElmIHVzZSBuYW1lIG9mIGNvbnN0YW50IGFzIHZhbHVlIChvcHRpb25hbCwgZGVmYXVsdDogZmFsc2UpLlxuICogQHBhcmFtIHRpdGxlUGF0aCBCYXNlIHBhdGggZm9yIHRpdGxlIHRvIHVzZSBhcyB0cmFuc2xhdGlvbiAob3B0aW9uYWwpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUVudW1WYWx1ZXNBc1ZhbHVlQXJyYXk8RW51bUNvbnN0YW50ID0gRW51bUNvbnN0YW50VHlwZT4oZW51bVR5cGU6IEVudW1UeXBlLCB2YWx1ZXM6IEFycmF5PEVudW1Db25zdGFudD4sIG5hbWVBc1ZhbHVlID0gZmFsc2UsIHRpdGxlUGF0aD86IHN0cmluZykge1xuICAgIHJldHVybiB2YWx1ZXMubWFwKHYgPT4ge1xuICAgICAgICBjb25zdCBrID0gZ2V0RW51bUNvbnN0YW50TmFtZShlbnVtVHlwZSwgdik7XG4gICAgICAgIHJldHVybiB7bmFtZTogaywgdGl0bGU6IGAke3RpdGxlUGF0aCA/IGAke3RpdGxlUGF0aH0uYCA6ICcnfSR7a31gLCB2YWx1ZTogbmFtZUFzVmFsdWUgPyBrIDogdn0gYXMgRW51bVZhbHVlO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIEdldHMgY29uc3RhbnQgbmFtZSBmb3IgdmFsdWUuXG4gKiBAcGFyYW0gZW51bVR5cGUgRW51bSBvYmplY3QuXG4gKiBAcGFyYW0gdmFsdWUgVmFsdWUgb2YgZW51bSBjb25zdGFudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1Db25zdGFudE5hbWU8RW51bUNvbnN0YW50ID0gRW51bUNvbnN0YW50VHlwZT4oZW51bVR5cGU6IEVudW1UeXBlLCB2YWx1ZTogRW51bUNvbnN0YW50KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGdldEVudW1Db25zdGFudE5hbWVzKGVudW1UeXBlKS5maW5kKGMgPT4gZW51bVR5cGVbY10gPT09IHZhbHVlKSA/PyBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZW51bVR5cGVbdmFsdWUgYXMga2V5b2Ygb2JqZWN0XSAhPT0gJ3VuZGVmaW5lZCcgPyAoZW51bVR5cGVbdmFsdWUgYXMga2V5b2Ygb2JqZWN0XSBhcyBzdHJpbmcpIDogbnVsbDtcbiAgICB9XG59XG5cbi8qKlxuICogR2V0cyBjb25zdGFudCBuYW1lIGZvciB2YWx1ZS5cbiAqIEBwYXJhbSBlbnVtT2JqIEVudW0gb2JqZWN0LlxuICogQHBhcmFtIHZhbHVlIFZhbHVlIG9mIGVudW0gY29uc3RhbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnVtQ29uc3RhbnROYW1lRnJvbU9iamVjdDxFbnVtQ29uc3RhbnQgPSBFbnVtQ29uc3RhbnRUeXBlPihlbnVtT2JqOiBvYmplY3QsIHZhbHVlOiBFbnVtQ29uc3RhbnQpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBlbnVtT2JqQW55ID0gZW51bU9iaiBhcyBhbnk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGdldEVudW1Db25zdGFudE5hbWVzRnJvbU9iamVjdChlbnVtT2JqKS5maW5kKGMgPT4gZW51bU9iakFueVtjXSA9PT0gdmFsdWUpID8/IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBlbnVtT2JqQW55W3ZhbHVlXSAhPT0gJ3VuZGVmaW5lZCcgPyAoZW51bU9iakFueVt2YWx1ZV0gYXMgc3RyaW5nKSA6IG51bGw7XG4gICAgfVxufVxuIl19","export var LogLevelEnum;\n(function (LogLevelEnum) {\n LogLevelEnum[LogLevelEnum[\"Trace\"] = 0] = \"Trace\";\n LogLevelEnum[LogLevelEnum[\"Debug\"] = 1] = \"Debug\";\n LogLevelEnum[LogLevelEnum[\"Log\"] = 2] = \"Log\";\n LogLevelEnum[LogLevelEnum[\"Info\"] = 3] = \"Info\";\n LogLevelEnum[LogLevelEnum[\"Warning\"] = 4] = \"Warning\";\n LogLevelEnum[LogLevelEnum[\"Error\"] = 5] = \"Error\";\n})(LogLevelEnum || (LogLevelEnum = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvbG9nL2xvZy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSxZQU9YO0FBUEQsV0FBWSxZQUFZO0lBQ3BCLGlEQUFLLENBQUE7SUFDTCxpREFBSyxDQUFBO0lBQ0wsNkNBQUcsQ0FBQTtJQUNILCtDQUFJLENBQUE7SUFDSixxREFBTyxDQUFBO0lBQ1AsaURBQUssQ0FBQTtBQUNULENBQUMsRUFQVyxZQUFZLEtBQVosWUFBWSxRQU92QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIExvZ0xldmVsRW51bSB7XG4gICAgVHJhY2UsXG4gICAgRGVidWcsXG4gICAgTG9nLFxuICAgIEluZm8sXG4gICAgV2FybmluZyxcbiAgICBFcnJvclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ0VudHJ5IHtcbiAgICBsZXZlbDogTG9nTGV2ZWxFbnVtO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBtZXNzYWdlRGV0YWlscz86IHN0cmluZztcbiAgICB0aW1lc3RhbXA6IERhdGU7XG4gICAgdGltZXN0YW1wRm9ybWF0dGVkPzogc3RyaW5nO1xuICAgIGNhdGVnb3J5Pzogc3RyaW5nO1xuICAgIGVycm9yPzogRXJyb3I7XG4gICAgZGF0YT86IGFueVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ0NvbmZpZyB7XG4gICAgbGV2ZWw/OiBMb2dMZXZlbEVudW07XG4gICAgdGltZXN0YW1wRm9ybWF0Pzogc3RyaW5nO1xuICAgIGNhdGVnb3J5Pzoge1xuICAgICAgICBbY2F0ZWdvcnk6IHN0cmluZ106IHtcbiAgICAgICAgICAgIGxldmVsPzogTG9nTGV2ZWxFbnVtO1xuICAgICAgICB9O1xuICAgIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ2dlclNlcnZpY2Uge1xuICAgIGNyZWF0ZShjb250ZXh0OiBzdHJpbmcpOiBJTG9nZ2VyU2VydmljZTtcbiAgICB0cmFjZShtc2dPckVycm9yOiBzdHJpbmcgfCBFcnJvciwgLi4uZGF0YTogYW55W10pOiB2b2lkO1xuICAgIGRlYnVnKG1zZ09yRXJyb3I6IHN0cmluZyB8IEVycm9yLCAuLi5kYXRhOiBhbnlbXSk6IHZvaWQ7XG4gICAgbG9nKG1zZ09yRXJyb3I6IHN0cmluZyB8IEVycm9yLCBsb2dMZXZlbDogTG9nTGV2ZWxFbnVtLCBjYXRlZ29yeTogc3RyaW5nIHwgdW5kZWZpbmVkLCAuLi5kYXRhOiBhbnlbXSk6IHZvaWQ7XG4gICAgbG9nRW50cnkobG9nRW50cnk6IFBhcnRpYWw8TG9nRW50cnk+KTogdm9pZDtcbiAgICBpbmZvKG1zZ09yRXJyb3I6IHN0cmluZyB8IEVycm9yLCAuLi5kYXRhOiBhbnlbXSk6IHZvaWQ7XG4gICAgd2Fybihtc2dPckVycm9yOiBzdHJpbmcgfCBFcnJvciwgLi4uZGF0YTogYW55W10pOiB2b2lkO1xuICAgIGVycm9yKG1zZ09yRXJyb3I6IHN0cmluZyB8IEVycm9yLCAuLi5kYXRhOiBhbnlbXSk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ1B1Ymxpc2hlciB7XG4gICAgYWRkRW50cnkoZW50cnk6IExvZ0VudHJ5KTogdm9pZDtcbn1cbiJdfQ==","import { DatePipe } from '@angular/common';\nimport { CommonsInternalError } from '../error/error.model';\nimport { dateToIsoString } from '../helpers/date';\nimport { LogLevelEnum } from './log.model';\nexport class LoggerService {\n static { this._instance = new LoggerService(); }\n static { this._isInit = false; }\n static { this._publishers = []; }\n static { this._entriesBuffer = []; }\n static { this._categoryInstances = {}; }\n static { this._timestampFormat = 'yyyy-MM-dd HH:mm:ss.SSS'; }\n constructor() {\n // Temporary settings that cover logging calls before initialisation\n this.defaultLogLevel = LogLevelEnum.Info;\n this.datePipe = new DatePipe('en-US');\n // empty\n }\n static get() {\n return LoggerService._instance;\n }\n static configure(config) {\n if (config.timestampFormat) {\n LoggerService._timestampFormat = config.timestampFormat;\n }\n }\n static init(configurationService, publishers) {\n if (LoggerService._isInit) {\n return;\n }\n LoggerService._configurationService = configurationService;\n LoggerService._publishers = publishers;\n LoggerService._isInit = true;\n LoggerService._flushBuffer();\n }\n static _flushBuffer() {\n if (!LoggerService._isInit) {\n return;\n }\n LoggerService._entriesBuffer.forEach(e => this._instance._log(e));\n LoggerService._entriesBuffer = [];\n }\n static create(category) {\n return LoggerService._instance.create(category);\n }\n create(category) {\n if (this.category) {\n throw new CommonsInternalError(`Cannot create logger with category inside another category (${this.category}). Must create logger on root.`);\n }\n if (LoggerService._categoryInstances[category]) {\n return LoggerService._categoryInstances[category];\n }\n const logger = new LoggerService();\n logger.category = category;\n LoggerService._categoryInstances[category] = logger;\n return logger;\n }\n _processLog(msgOrError, logLevel, category = undefined, data) {\n const [timestamp, timestampFormatted] = [...this._getTimestamps()];\n const logEntry = {\n level: logLevel,\n message: typeof msgOrError === 'string' ? msgOrError : msgOrError.message,\n data: data,\n category: this.category ?? category,\n timestamp: timestamp,\n timestampFormatted: timestampFormatted ?? undefined\n };\n if (msgOrError instanceof Error) {\n // set error from message param\n logEntry.error = msgOrError;\n }\n else if (data?.length && data[0] instanceof Error) {\n // if first data is error, also consider as error\n logEntry.error = data[0];\n logEntry.data = data.splice(1);\n }\n this._log(logEntry);\n }\n _getTimestamps() {\n const timestamp = new Date();\n const timestampFormatted = this.datePipe.transform(timestamp, LoggerService._timestampFormat) ?? dateToIsoString(timestamp);\n return [timestamp, timestampFormatted];\n }\n _log(log) {\n if (!LoggerService._isInit) {\n // add to buffer\n LoggerService._entriesBuffer.push(log);\n return;\n }\n const logConfig = (LoggerService._configurationService?.getConfigValue)?.('log');\n if ((log.category && log.level < (logConfig?.category?.[log.category]?.level ?? logConfig?.level ?? this.defaultLogLevel)) ||\n (!log.category && log.level < (logConfig?.level ?? this.defaultLogLevel))) {\n return;\n }\n if (logConfig?.timestampFormat) {\n log.timestampFormatted = this.datePipe.transform(log.timestamp, logConfig.timestampFormat) ?? undefined;\n }\n LoggerService._publishers.forEach(p => p.addEntry(log));\n }\n trace(msgOrError, ...data) {\n this._processLog(msgOrError, LogLevelEnum.Trace, undefined, data);\n }\n debug(msgOrError, ...data) {\n this._processLog(msgOrError, LogLevelEnum.Debug, undefined, data);\n }\n log(msgOrError, logLevel = LogLevelEnum.Log, category = undefined, ...data) {\n this._processLog(msgOrError, logLevel, category, data);\n }\n logEntry(logEntry) {\n const [timestamp, timestampFormatted] = [...this._getTimestamps()];\n const logEntryFinal = {\n timestamp: timestamp,\n timestampFormatted: timestampFormatted ?? undefined,\n category: this.category ?? logEntry.category,\n message: '',\n messageDetails: logEntry.messageDetails,\n level: LogLevelEnum.Log,\n ...logEntry\n };\n this._log(logEntryFinal);\n }\n info(msgOrError, ...data) {\n this._processLog(msgOrError, LogLevelEnum.Info, undefined, data);\n }\n warn(msgOrError, ...data) {\n this._processLog(msgOrError, LogLevelEnum.Warning, undefined, data);\n }\n error(msgOrError, ...data) {\n this._processLog(msgOrError, LogLevelEnum.Error, undefined, data);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9sb2cvbG9nZ2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXpDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRCxPQUFPLEVBQXFELFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUU3RixNQUFNLE9BQU8sYUFBYTthQUNQLGNBQVMsR0FBa0IsSUFBSSxhQUFhLEVBQUUsQUFBckMsQ0FBc0M7YUFDL0MsWUFBTyxHQUFHLEtBQUssQUFBUixDQUFTO2FBRWhCLGdCQUFXLEdBQW9CLEVBQUUsQUFBdEIsQ0FBdUI7YUFDbEMsbUJBQWMsR0FBZSxFQUFFLEFBQWpCLENBQWtCO2FBQ2hDLHVCQUFrQixHQUFrQyxFQUFFLEFBQXBDLENBQXFDO2FBQ3ZELHFCQUFnQixHQUFHLHlCQUF5QixBQUE1QixDQUE2QjtJQVE1RDtRQUpBLG9FQUFvRTtRQUNuRCxvQkFBZSxHQUFpQixZQUFZLENBQUMsSUFBSSxDQUFDO1FBQzNELGFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUdyQyxRQUFRO0lBQ1osQ0FBQztJQUVNLE1BQU0sQ0FBQyxHQUFHO1FBQ2IsT0FBTyxhQUFhLENBQUMsU0FBUyxDQUFDO0lBQ25DLENBQUM7SUFFTSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQWtDO1FBQ3RELElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLGFBQWEsQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDO1FBQzVELENBQUM7SUFDTCxDQUFDO0lBRU0sTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBaUQsRUFB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WUFBWSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVNLElBQUksQ0FBQyxVQUEwQixFQUFFLEdBQUcsSUFBVztRQUNsRCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQTBCLEVBQUUsR0FBRyxJQUFXO1FBQ25ELElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RhdGVQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQge0NvbW1vbnNJbnRlcm5hbEVycm9yfSBmcm9tICcuLi9lcnJvci9lcnJvci5tb2RlbCc7XG5pbXBvcnQge2RhdGVUb0lzb1N0cmluZ30gZnJvbSAnLi4vaGVscGVycy9kYXRlJztcbmltcG9ydCB7Q29tbW9uc0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9jb21tb25zLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQge0lMb2dQdWJsaXNoZXIsIElMb2dnZXJTZXJ2aWNlLCBMb2dDb25maWcsIExvZ0VudHJ5LCBMb2dMZXZlbEVudW19IGZyb20gJy4vbG9nLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIExvZ2dlclNlcnZpY2UgaW1wbGVtZW50cyBJTG9nZ2VyU2VydmljZSB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBMb2dnZXJTZXJ2aWNlID0gbmV3IExvZ2dlclNlcnZpY2UoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBfaXNJbml0ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2NvbmZpZ3VyYXRpb25TZXJ2aWNlPzogQ29tbW9uc0NvbmZpZ3VyYXRpb25TZXJ2aWNlO1xuICAgIHByaXZhdGUgc3RhdGljIF9wdWJsaXNoZXJzOiBJTG9nUHVibGlzaGVyW10gPSBbXTtcbiAgICBwcml2YXRlIHN0YXRpYyBfZW50cmllc0J1ZmZlcjogTG9nRW50cnlbXSA9IFtdO1xuICAgIHByaXZhdGUgc3RhdGljIF9jYXRlZ29yeUluc3RhbmNlczogUmVjb3JkPHN0cmluZywgTG9nZ2VyU2VydmljZT4gPSB7fTtcbiAgICBwcml2YXRlIHN0YXRpYyBfdGltZXN0YW1wRm9ybWF0ID0gJ3l5eXktTU0tZGQgSEg6bW06c3MuU1NTJztcblxuICAgIHByaXZhdGUgY2F0ZWdvcnk/OiBzdHJpbmc7XG5cbiAgICAvLyBUZW1wb3Jhcnkgc2V0dGluZ3MgdGhhdCBjb3ZlciBsb2dnaW5nIGNhbGxzIGJlZm9yZSBpbml0aWFsaXNhdGlvblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdExvZ0xldmVsOiBMb2dMZXZlbEVudW0gPSBMb2dMZXZlbEVudW0uSW5mbztcbiAgICBwcml2YXRlIGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKCdlbi1VUycpO1xuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLy8gZW1wdHlcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIExvZ2dlclNlcnZpY2UuX2luc3RhbmNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY29uZmlndXJlKGNvbmZpZzoge3RpbWVzdGFtcEZvcm1hdD86IHN0cmluZ30pIHtcbiAgICAgICAgaWYgKGNvbmZpZy50aW1lc3RhbXBGb3JtYXQpIHtcbiAgICAgICAgICAgIExvZ2dlclNlcnZpY2UuX3RpbWVzdGFtcEZvcm1hdCA9IGNvbmZpZy50aW1lc3RhbXBGb3JtYXQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGluaXQoY29uZmlndXJhdGlvblNlcnZpY2U6IENvbW1vbnNDb25maWd1cmF0aW9uU2VydmljZSwgcHVibGlzaGVyczogSUxvZ1B1Ymxpc2hlcltdKSB7XG4gICAgICAgIGlmIChMb2dnZXJTZXJ2aWNlLl9pc0luaXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIExvZ2dlclNlcnZpY2UuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlID0gY29uZmlndXJhdGlvblNlcnZpY2U7XG4gICAgICAgIExvZ2dlclNlcnZpY2UuX3B1Ymxpc2hlcnMgPSBwdWJsaXNoZXJzO1xuXG4gICAgICAgIExvZ2dlclNlcnZpY2UuX2lzSW5pdCA9IHRydWU7XG4gICAgICAgIExvZ2dlclNlcnZpY2UuX2ZsdXNoQnVmZmVyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2ZsdXNoQnVmZmVyKCkge1xuICAgICAgICBpZiAoIUxvZ2dlclNlcnZpY2UuX2lzSW5pdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIExvZ2dlclNlcnZpY2UuX2VudHJpZXNCdWZmZXIuZm9yRWFjaChlID0+IHRoaXMuX2luc3RhbmNlLl9sb2coZSkpO1xuICAgICAgICBMb2dnZXJTZXJ2aWNlLl9lbnRyaWVzQnVmZmVyID0gW107XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGUoY2F0ZWdvcnk6IHN0cmluZyk6IExvZ2dlclNlcnZpY2Uge1xuICAgICAgICByZXR1cm4gTG9nZ2VyU2VydmljZS5faW5zdGFuY2UuY3JlYXRlKGNhdGVnb3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlKGNhdGVnb3J5OiBzdHJpbmcpOiBMb2dnZXJTZXJ2aWNlIHtcbiAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgQ2Fubm90IGNyZWF0ZSBsb2dnZXIgd2l0aCBjYXRlZ29yeSBpbnNpZGUgYW5vdGhlciBjYXRlZ29yeSAoJHt0aGlzLmNhdGVnb3J5fSkuIE11c3QgY3JlYXRlIGxvZ2dlciBvbiByb290LmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChMb2dnZXJTZXJ2aWNlLl9jYXRlZ29yeUluc3RhbmNlc1tjYXRlZ29yeV0pIHtcbiAgICAgICAgICAgIHJldHVybiBMb2dnZXJTZXJ2aWNlLl9jYXRlZ29yeUluc3RhbmNlc1tjYXRlZ29yeV07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyU2VydmljZSgpO1xuICAgICAgICBsb2dnZXIuY2F0ZWdvcnkgPSBjYXRlZ29yeTtcblxuICAgICAgICBMb2dnZXJTZXJ2aWNlLl9jYXRlZ29yeUluc3RhbmNlc1tjYXRlZ29yeV0gPSBsb2dnZXI7XG5cbiAgICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcm9jZXNzTG9nKG1zZ09yRXJyb3I6IHN0cmluZyB8IEVycm9yLCBsb2dMZXZlbDogTG9nTGV2ZWxFbnVtLCBjYXRlZ29yeTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLCBkYXRhPzogYW55W10pIHtcbiAgICAgICAgY29uc3QgW3RpbWVzdGFtcCwgdGltZXN0YW1wRm9ybWF0dGVkXSA9IFsuLi50aGlzLl9nZXRUaW1lc3RhbXBzKCldO1xuXG4gICAgICAgIGNvbnN0IGxvZ0VudHJ5ID0gPExvZ0VudHJ5PntcbiAgICAgICAgICAgIGxldmVsOiBsb2dMZXZlbCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHR5cGVvZiBtc2dPckVycm9yID09PSAnc3RyaW5nJyA/IG1zZ09yRXJyb3IgOiBtc2dPckVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IHRoaXMuY2F0ZWdvcnkgPz8gY2F0ZWdvcnksXG4gICAgICAgICAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgIHRpbWVzdGFtcEZvcm1hdHRlZDogdGltZXN0YW1wRm9ybWF0dGVkID8/IHVuZGVmaW5lZFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChtc2dPckVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIC8vIHNldCBlcnJvciBmcm9tIG1lc3NhZ2UgcGFyYW1cbiAgICAgICAgICAgIGxvZ0VudHJ5LmVycm9yID0gbXNnT3JFcnJvcjtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhPy5sZW5ndGggJiYgZGF0YVswXSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAvLyBpZiBmaXJzdCBkYXRhIGlzIGVycm9yLCBhbHNvIGNvbnNpZGVyIGFzIGVycm9yXG4gICAgICAgICAgICBsb2dFbnRyeS5lcnJvciA9IGRhdGFbMF07XG4gICAgICAgICAgICBsb2dFbnRyeS5kYXRhID0gZGF0YS5zcGxpY2UoMSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2cobG9nRW50cnkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFRpbWVzdGFtcHMoKTogW0RhdGUsIHN0cmluZyB8IG51bGxdIHtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoKTtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wRm9ybWF0dGVkID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGltZXN0YW1wLCBMb2dnZXJTZXJ2aWNlLl90aW1lc3RhbXBGb3JtYXQpID8/IGRhdGVUb0lzb1N0cmluZyh0aW1lc3RhbXApO1xuICAgICAgICByZXR1cm4gW3RpbWVzdGFtcCwgdGltZXN0YW1wRm9ybWF0dGVkXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9sb2cobG9nOiBMb2dFbnRyeSkge1xuICAgICAgICBpZiAoIUxvZ2dlclNlcnZpY2UuX2lzSW5pdCkge1xuICAgICAgICAgICAgLy8gYWRkIHRvIGJ1ZmZlclxuICAgICAgICAgICAgTG9nZ2VyU2VydmljZS5fZW50cmllc0J1ZmZlci5wdXNoKGxvZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2dDb25maWcgPSBMb2dnZXJTZXJ2aWNlLl9jb25maWd1cmF0aW9uU2VydmljZT8uZ2V0Q29uZmlnVmFsdWU8TG9nQ29uZmlnPj8uKCdsb2cnKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGxvZy5jYXRlZ29yeSAmJiBsb2cubGV2ZWwgPCAobG9nQ29uZmlnPy5jYXRlZ29yeT8uW2xvZy5jYXRlZ29yeV0/LmxldmVsID8/IGxvZ0NvbmZpZz8ubGV2ZWwgPz8gdGhpcy5kZWZhdWx0TG9nTGV2ZWwpKSB8fFxuICAgICAgICAgICAgKCFsb2cuY2F0ZWdvcnkgJiYgbG9nLmxldmVsIDwgKGxvZ0NvbmZpZz8ubGV2ZWwgPz8gdGhpcy5kZWZhdWx0TG9nTGV2ZWwpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2dDb25maWc/LnRpbWVzdGFtcEZvcm1hdCkge1xuICAgICAgICAgICAgbG9nLnRpbWVzdGFtcEZvcm1hdHRlZCA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGxvZy50aW1lc3RhbXAsIGxvZ0NvbmZpZy50aW1lc3RhbXBGb3JtYXQpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIExvZ2dlclNlcnZpY2UuX3B1Ymxpc2hlcnMuZm9yRWFjaChwID0+IHAuYWRkRW50cnkobG9nKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRyYWNlKG1zZ09yRXJyb3I6IHN0cmluZyB8IEVycm9yLCAuLi5kYXRhOiBhbnlbXSkge1xuICAgICAgICB0aGlzLl9wcm9jZXNzTG9nKG1zZ09yRXJyb3IsIExvZ0xldmVsRW51bS5UcmFjZSwgdW5kZWZpbmVkLCBkYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVidWcobXNnT3JFcnJvcjogc3RyaW5nIHwgRXJyb3IsIC4uLmRhdGE6IGFueVtdKSB7XG4gICAgICAgIHRoaXMuX3Byb2Nlc3NMb2cobXNnT3JFcnJvciwgTG9nTGV2ZWxFbnVtLkRlYnVnLCB1bmRlZmluZWQsIGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2cobXNnT3JFcnJvcjogc3RyaW5nIHwgRXJyb3IsIGxvZ0xldmVsOiBMb2dMZXZlbEVudW0gPSBMb2dMZXZlbEVudW0uTG9nLCBjYXRlZ29yeTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLCAuLi5kYXRhOiBhbnlbXSkge1xuICAgICAgICB0aGlzLl9wcm9jZXNzTG9nKG1zZ09yRXJyb3IsIGxvZ0xldmVsLCBjYXRlZ29yeSwgZGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIGxvZ0VudHJ5PEUgZXh0ZW5kcyBQYXJ0aWFsPExvZ0VudHJ5Pj4obG9nRW50cnk6IEUpIHtcbiAgICAgICAgY29uc3QgW3RpbWVzdGFtcCwgdGltZXN0YW1wRm9ybWF0dGVkXSA9IFsuLi50aGlzLl9nZXRUaW1lc3RhbXBzKCldO1xuICAgICAgICBjb25zdCBsb2dFbnRyeUZpbmFsOiBMb2dFbnRyeSA9IHtcbiAgICAgICAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLFxuICAgICAgICAgICAgdGltZXN0YW1wRm9ybWF0dGVkOiB0aW1lc3RhbXBGb3JtYXR0ZWQgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IHRoaXMuY2F0ZWdvcnkgPz8gbG9nRW50cnkuY2F0ZWdvcnksXG4gICAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICAgIG1lc3NhZ2VEZXRhaWxzOiBsb2dFbnRyeS5tZXNzYWdlRGV0YWlscyxcbiAgICAgICAgICAgIGxldmVsOiBMb2dMZXZlbEVudW0uTG9nLFxuICAgICAgICAgICAgLi4ubG9nRW50cnlcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fbG9nKGxvZ0VudHJ5RmluYWwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbmZvKG1zZ09yRXJyb3I6IHN0cmluZyB8IEVycm9yLCAuLi5kYXRhOiBhbnlbXSkge1xuICAgICAgICB0aGlzLl9wcm9jZXNzTG9nKG1zZ09yRXJyb3IsIExvZ0xldmVsRW51bS5JbmZvLCB1bmRlZmluZWQsIGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3YXJuKG1zZ09yRXJyb3I6IHN0cmluZyB8IEVycm9yLCAuLi5kYXRhOiBhbnlbXSkge1xuICAgICAgICB0aGlzLl9wcm9jZXNzTG9nKG1zZ09yRXJyb3IsIExvZ0xldmVsRW51bS5XYXJuaW5nLCB1bmRlZmluZWQsIGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlcnJvcihtc2dPckVycm9yOiBzdHJpbmcgfCBFcnJvciwgLi4uZGF0YTogYW55W10pIHtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0xvZyhtc2dPckVycm9yLCBMb2dMZXZlbEVudW0uRXJyb3IsIHVuZGVmaW5lZCwgZGF0YSk7XG4gICAgfVxufVxuIl19","export function objectDeepCopy(obj, options) {\n if (typeof obj !== 'object' || obj === null || Array.isArray(obj)) {\n return obj;\n }\n // copy known object types by directly creating\n if (obj instanceof Date) {\n return new Date(+obj);\n }\n else if (obj instanceof File) {\n return new File([obj], obj.name, {\n type: obj.type,\n lastModified: obj.lastModified\n });\n }\n let copy;\n if (options?.mapGettersToProperties) {\n copy = {};\n }\n else {\n copy = options?.objectPrototype ? Object.create(options.objectPrototype['prototype']) : Object.create(Object.getPrototypeOf(obj));\n Object.assign(copy, obj);\n }\n for (const key of getObjectProperties(obj)) {\n const prop = obj[key];\n copy[key] = handleProp(prop, { mapGettersToProperties: options?.mapGettersToProperties });\n }\n if (options?.mapGettersToProperties) {\n for (const getterKey of getObjectGetters(obj)) {\n const prop = obj[getterKey];\n copy[getterKey] = handleProp(prop, { mapGettersToProperties: options?.mapGettersToProperties });\n }\n }\n return copy;\n}\nexport function objectDeepMerge(target, source) {\n if (!isObject(source)) {\n return target;\n }\n for (const key of getObjectProperties(source)) {\n if (isObject(source[key])) {\n if (isObject(target[key])) {\n target[key] = objectDeepMerge(target[key], source[key]);\n }\n else {\n target[key] = objectDeepCopy(source[key]);\n }\n }\n else if (Array.isArray(source[key])) {\n if (!Array.isArray(target[key])) {\n target[key] = source[key].map(i => (isObject(i) ? objectDeepMerge({}, i) : i));\n }\n }\n else if (typeof target[key] === 'undefined') {\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction isObject(obj) {\n return typeof obj === 'object' && obj !== null && !Array.isArray(obj);\n}\nfunction handleProp(prop, options) {\n if (Array.isArray(prop)) {\n return prop.map(i => objectDeepCopy(i, options));\n }\n else if (typeof prop === 'object' && prop !== null) {\n return objectDeepCopy(prop, options);\n }\n else {\n return prop;\n }\n}\nexport function getObjectProperties(obj) {\n return Object.keys(obj);\n}\nexport function getObjectGetters(obj) {\n const getterSet = new Set();\n let currObj = obj;\n while (currObj) {\n const getters = Object.entries(Object.getOwnPropertyDescriptors(currObj))\n .filter(([, descriptor]) => typeof descriptor.get === 'function')\n .filter(([key]) => key !== '__proto__')\n .map(([key]) => key);\n for (const getter of getters) {\n getterSet.add(getter);\n }\n currObj = Object.getPrototypeOf(currObj);\n }\n return Array.from(getterSet);\n}\nexport function getObjectPropertyByPath(value, path) {\n if (path === '$') {\n // only return the root\n return value;\n }\n // Check for leading root object notation\n if (path.startsWith('$')) {\n path = path.substring(1);\n }\n // Check for leading .\n if (path.startsWith('.')) {\n path = path.substring(1);\n }\n if (path.indexOf('.') >= 0) {\n const pathSplit = path.split('.');\n let currValue = value;\n for (const p of pathSplit) {\n if (typeof currValue === 'undefined' || currValue === null) {\n return currValue;\n }\n if (!p.length) {\n // empty path, return current value\n return currValue;\n }\n const leftBracketIdx = p.indexOf('[');\n if (leftBracketIdx >= 0 && p.endsWith(']')) {\n // should be reference to array\n const arrayPath = p.substring(0, leftBracketIdx);\n const arrayIdx = +p.substring(leftBracketIdx + 1, p.length - 1);\n const array = currValue[arrayPath];\n if (Array.isArray(array)) {\n if (arrayIdx >= 0 && arrayIdx < array.length) {\n // valid index, continue on the path\n currValue = array[arrayIdx];\n continue;\n }\n }\n return undefined;\n }\n else if (typeof currValue === 'object') {\n currValue = currValue[p];\n }\n }\n return currValue;\n }\n else {\n return value[path];\n }\n}\nexport function flattenObjectKeys(objectModel) {\n const flatten = (object, parent) => {\n let results = [];\n for (const key in object) {\n const value = object[key];\n const thisKey = parent ? `${parent}.${key}` : `${key}`;\n results = results.concat(isObject(value) ? flatten(value, thisKey) : [[`${thisKey}`, value]]);\n }\n return results;\n };\n return flatten(objectModel);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvaGVscGVycy9vYmplY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0JBLE1BQU0sVUFBVSxjQUFjLENBQXlCLEdBQU0sRUFBRSxPQUE0QjtJQUN2RixJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNoRSxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRCwrQ0FBK0M7SUFDL0MsSUFBSSxHQUFHLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDdEIsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7U0FBTSxJQUFJLEdBQUcsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUM3QixPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRTtZQUM3QixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7WUFDZCxZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVk7U0FDakMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDO0lBQ1QsSUFBSSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2QsQ0FBQztTQUFNLENBQUM7UUFDSixJQUFJLEdBQUcsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLFdBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsSixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFB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QUFHLENBQUMsQ0FBQztZQUMxQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBRXZELE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDLENBQUM7SUFFRixPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDbGFzc1R5cGV9IGZyb20gJy4uL21vZGVscy9jbGFzcy1zZXJ2aWNlLm1vZGVsJztcblxuaW50ZXJmYWNlIERlZXBDb3B5UHJvcHNPcHRpb25zIHtcbiAgICBtYXBHZXR0ZXJzVG9Qcm9wZXJ0aWVzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWVwQ29weU9wdGlvbnM8UCA9IG9iamVjdD4gZXh0ZW5kcyBEZWVwQ29weVByb3BzT3B0aW9ucyB7XG4gICAgb2JqZWN0UHJvdG90eXBlPzogQ2xhc3NUeXBlPFA+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0RGVlcENvcHk8VCA9IG9iamVjdCwgUCA9IG9iamVjdD4ob2JqOiBULCBvcHRpb25zOiBEZWVwQ29weU9wdGlvbnM8UD4gJiB7bWFwR2V0dGVyc1RvUHJvcGVydGllczogdHJ1ZX0pOiBUIHwgUmVjb3JkPHN0cmluZywgYW55PjtcbmV4cG9ydCBmdW5jdGlvbiBvYmplY3REZWVwQ29weTxUID0gb2JqZWN0LCBQID0gb2JqZWN0PihvYmo6IFQsIG9wdGlvbnM6IERlZXBDb3B5T3B0aW9uczxQPiAmIHtvYmplY3RQcm90b3R5cGU6IENsYXNzVHlwZTxQPn0gJiB7bWFwR2V0dGVyc1RvUHJvcGVydGllcz86IGZhbHNlfSk6IFA7XG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0RGVlcENvcHk8VCA9IG9iamVjdCwgUCA9IG9iamVjdD4oXG4gICAgb2JqOiBULFxuICAgIG9wdGlvbnM6IERlZXBDb3B5T3B0aW9uczxQPiAmIHtvYmplY3RQcm90b3R5cGU6IENsYXNzVHlwZTxQPn0gJiB7bWFwR2V0dGVyc1RvUHJvcGVydGllczogdHJ1ZX1cbik6IFAgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdERlZXBDb3B5PFQgPSBvYmplY3QsIFAgPSBvYmplY3Q+KG9iajogVCwgb3B0aW9ucz86IERlZXBDb3B5T3B0aW9uczxQPik6IFQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3REZWVwQ29weTxUID0gb2JqZWN0LCBQID0gb2JqZWN0PihvYmo6IFQsIG9wdGlvbnM/OiBEZWVwQ29weU9wdGlvbnM8UD4pOiBUIHwgUCB8IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgLy8gY29weSBrbm93biBvYmplY3QgdHlwZXMgYnkgZGlyZWN0bHkgY3JlYXRpbmdcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoK29iaik7XG4gICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsZShbb2JqXSwgb2JqLm5hbWUsIHtcbiAgICAgICAgICAgIHR5cGU6IG9iai50eXBlLFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiBvYmoubGFzdE1vZGlmaWVkXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBjb3B5O1xuICAgIGlmIChvcHRpb25zPy5tYXBHZXR0ZXJzVG9Qcm9wZXJ0aWVzKSB7XG4gICAgICAgIGNvcHkgPSB7fTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb3B5ID0gb3B0aW9ucz8ub2JqZWN0UHJvdG90eXBlID8gT2JqZWN0LmNyZWF0ZShvcHRpb25zLm9iamVjdFByb3RvdHlwZVsncHJvdG90eXBlJyBhcyBrZXlvZiBvYmplY3RdKSA6IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikpO1xuICAgICAgICBPYmplY3QuYXNzaWduKGNvcHksIG9iaik7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgZ2V0T2JqZWN0UHJvcGVydGllcyhvYmopKSB7XG4gICAgICAgIGNvbnN0IHByb3AgPSBvYmpba2V5IGFzIGtleW9mIG9iamVjdF07XG4gICAgICAgIGNvcHlba2V5XSA9IGhhbmRsZVByb3AocHJvcCwge21hcEdldHRlcnNUb1Byb3BlcnRpZXM6IG9wdGlvbnM/Lm1hcEdldHRlcnNUb1Byb3BlcnRpZXN9KTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8ubWFwR2V0dGVyc1RvUHJvcGVydGllcykge1xuICAgICAgICBmb3IgKGNvbnN0IGdldHRlcktleSBvZiBnZXRPYmplY3RHZXR0ZXJzKG9iaikpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3AgPSBvYmpbZ2V0dGVyS2V5IGFzIGtleW9mIG9iamVjdF07XG4gICAgICAgICAgICBjb3B5W2dldHRlcktleV0gPSBoYW5kbGVQcm9wKHByb3AsIHttYXBHZXR0ZXJzVG9Qcm9wZXJ0aWVzOiBvcHRpb25zPy5tYXBHZXR0ZXJzVG9Qcm9wZXJ0aWVzfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29weTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdERlZXBNZXJnZSh0YXJnZXQ6IFJlY29yZDxzdHJpbmcsIGFueT4sIHNvdXJjZTogUmVjb3JkPHN0cmluZywgYW55Pik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGlmICghaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGdldE9iamVjdFByb3BlcnRpZXMoc291cmNlKSkge1xuICAgICAgICBpZiAoaXNPYmplY3Qoc291cmNlW2tleV0pKSB7XG4gICAgICAgICAgICBpZiAoaXNPYmplY3QodGFyZ2V0W2tleV0pKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBvYmplY3REZWVwTWVyZ2UodGFyZ2V0W2tleV0sIHNvdXJjZVtrZXldKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBvYmplY3REZWVwQ29weShzb3VyY2Vba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2Vba2V5XSkpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0YXJnZXRba2V5XSkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IChzb3VyY2Vba2V5XSBhcyBBcnJheTx1bmtub3duPikubWFwKGkgPT4gKGlzT2JqZWN0KGkpID8gb2JqZWN0RGVlcE1lcmdlKHt9LCBpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA6IGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGFyZ2V0W2tleV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3Qob2JqOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KG9iaik7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVByb3AocHJvcDogYW55LCBvcHRpb25zPzogRGVlcENvcHlQcm9wc09wdGlvbnMpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wKSkge1xuICAgICAgICByZXR1cm4gcHJvcC5tYXAoaSA9PiBvYmplY3REZWVwQ29weShpLCBvcHRpb25zKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcHJvcCA9PT0gJ29iamVjdCcgJiYgcHJvcCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gb2JqZWN0RGVlcENvcHkocHJvcCwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHByb3A7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T2JqZWN0UHJvcGVydGllcyhvYmo6IG9iamVjdCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T2JqZWN0R2V0dGVycyhvYmo6IGFueSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBnZXR0ZXJTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBsZXQgY3Vyck9iaiA9IG9iajtcblxuICAgIHdoaWxlIChjdXJyT2JqKSB7XG4gICAgICAgIGNvbnN0IGdldHRlcnMgPSBPYmplY3QuZW50cmllcyhPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjdXJyT2JqKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFssIGRlc2NyaXB0b3JdKSA9PiB0eXBlb2YgZGVzY3JpcHRvci5nZXQgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICAuZmlsdGVyKChba2V5XSkgPT4ga2V5ICE9PSAnX19wcm90b19fJylcbiAgICAgICAgICAgIC5tYXAoKFtrZXldKSA9PiBrZXkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZ2V0dGVyIG9mIGdldHRlcnMpIHtcbiAgICAgICAgICAgIGdldHRlclNldC5hZGQoZ2V0dGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJPYmogPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY3Vyck9iaik7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oZ2V0dGVyU2V0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9iamVjdFByb3BlcnR5QnlQYXRoKHZhbHVlOiBhbnksIHBhdGg6IHN0cmluZyk6IGFueSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHBhdGggPT09ICckJykge1xuICAgICAgICAvLyBvbmx5IHJldHVybiB0aGUgcm9vdFxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxlYWRpbmcgcm9vdCBvYmplY3Qgbm90YXRpb25cbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKCckJykpIHtcbiAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDEpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsZWFkaW5nIC5cbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDEpO1xuICAgIH1cblxuICAgIGlmIChwYXRoLmluZGV4T2YoJy4nKSA+PSAwKSB7XG4gICAgICAgIGNvbnN0IHBhdGhTcGxpdCA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICAgICAgbGV0IGN1cnJWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcGF0aFNwbGl0KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgY3VyclZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJWYWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFwLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8vIGVtcHR5IHBhdGgsIHJldHVybiBjdXJyZW50IHZhbHVlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJWYWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbGVmdEJyYWNrZXRJZHggPSBwLmluZGV4T2YoJ1snKTtcbiAgICAgICAgICAgIGlmIChsZWZ0QnJhY2tldElkeCA+PSAwICYmIHAuZW5kc1dpdGgoJ10nKSkge1xuICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSByZWZlcmVuY2UgdG8gYXJyYXlcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheVBhdGggPSBwLnN1YnN0cmluZygwLCBsZWZ0QnJhY2tldElkeCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyYXlJZHggPSArcC5zdWJzdHJpbmcobGVmdEJyYWNrZXRJZHggKyAxLCBwLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5ID0gY3VyclZhbHVlW2FycmF5UGF0aF07XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnJheUlkeCA+PSAwICYmIGFycmF5SWR4IDwgYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWxpZCBpbmRleCwgY29udGludWUgb24gdGhlIHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IGFycmF5W2FycmF5SWR4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGN1cnJWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBjdXJyVmFsdWVbcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnJWYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWVbcGF0aF07XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbk9iamVjdEtleXMob2JqZWN0TW9kZWw6IGFueSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBmbGF0dGVuID0gKG9iamVjdDogYW55LCBwYXJlbnQ/OiBhbnkpID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdHM6IGFueVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XTtcbiAgICAgICAgICAgIGNvbnN0IHRoaXNLZXkgPSBwYXJlbnQgPyBgJHtwYXJlbnR9LiR7a2V5fWAgOiBgJHtrZXl9YDtcblxuICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KGlzT2JqZWN0KHZhbHVlKSA/IGZsYXR0ZW4odmFsdWUsIHRoaXNLZXkpIDogW1tgJHt0aGlzS2V5fWAsIHZhbHVlXV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH07XG5cbiAgICByZXR1cm4gZmxhdHRlbihvYmplY3RNb2RlbCk7XG59XG4iXX0=","import { dateToIsoString } from './date';\nimport { objectDeepCopy } from './object';\nexport function escapeHtml(value) {\n return value.replace(/</g, '<').replace(/>/g, '>');\n}\nexport function escapeHtmlAny(value) {\n if (typeof value === 'string') {\n return escapeHtml(value);\n }\n else if (typeof value === 'object') {\n const escapedValue = objectDeepCopy(value, { mapGettersToProperties: true });\n for (const key in value) {\n if (typeof value[key] === 'string') {\n escapedValue[key] = escapeHtml(value[key]);\n }\n else if (typeof value[key] === 'object') {\n escapedValue[key] = escapeHtmlAny(value[key]);\n }\n else {\n escapedValue[key] = value[key];\n }\n }\n return escapedValue;\n }\n return value;\n}\n/**\n * Stringifies a value - primitives with toString, dates with dateUtil, objects with JSON.stringify.\n * @param value Any value.\n */\nexport function stringify(value) {\n if (value === null) {\n return 'null';\n }\n if (typeof value === 'undefined') {\n return 'undefined';\n }\n // eliminate functions, cause they could fall into objects\n if (typeof value === 'function') {\n return `Function ${value.name ?? 'anonymous'}()`;\n }\n if (typeof value === 'object') {\n // date is object, but would like it in ISO string representation\n if (value instanceof Date) {\n return dateToIsoString(value) ?? 'null';\n }\n try {\n return JSON.stringify(value);\n }\n catch {\n return value.toString();\n }\n }\n // only primitives should be left to be printed like this (string, number, boolean)\n return value.toString();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvaGVscGVycy9zdHJpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRXhDLE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBYTtJQUNwQyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBVztJQUNyQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7U0FBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ25DLE1BQU0sWUFBWSxHQUFRLGNBQWMsQ0FBQyxLQUFLLEVBQUUsRUFBQyxzQkFBc0IsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBRWhGLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDdEIsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDakMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMvQyxDQUFDO2lCQUFNLElBQUksT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3hDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbEQsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBVTtJQUNoQyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNqQixPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUMvQixPQUFPLFdBQVcsQ0FBQztJQUN2QixDQUFDO0lBQ0QsMERBQTBEO0lBQzFELElBQUksT0FBTyxLQUFLLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDOUIsT0FBTyxZQUFZLEtBQUssQ0FBQyxJQUFJLElBQUksV0FBVyxJQUFJLENBQUM7SUFDckQsQ0FBQztJQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUIsaUVBQWlFO1FBQ2pFLElBQUksS0FBSyxZQUFZLElBQUksRUFBRSxDQUFDO1lBQ3hCLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDTCxPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ0wsQ0FBQztJQUNELG1GQUFtRjtJQUNuRixPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUM1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkYXRlVG9Jc29TdHJpbmd9IGZyb20gJy4vZGF0ZSc7XG5pbXBvcnQge29iamVjdERlZXBDb3B5fSBmcm9tICcuL29iamVjdCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVIdG1sKHZhbHVlOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlSHRtbEFueSh2YWx1ZT86IGFueSk6IGFueSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGVzY2FwZUh0bWwodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCBlc2NhcGVkVmFsdWU6IGFueSA9IG9iamVjdERlZXBDb3B5KHZhbHVlLCB7bWFwR2V0dGVyc1RvUHJvcGVydGllczogdHJ1ZX0pO1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlW2tleV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZXNjYXBlZFZhbHVlW2tleV0gPSBlc2NhcGVIdG1sKHZhbHVlW2tleV0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWVba2V5XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkVmFsdWVba2V5XSA9IGVzY2FwZUh0bWxBbnkodmFsdWVba2V5XSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVzY2FwZWRWYWx1ZVtrZXldID0gdmFsdWVba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXNjYXBlZFZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBTdHJpbmdpZmllcyBhIHZhbHVlIC0gcHJpbWl0aXZlcyB3aXRoIHRvU3RyaW5nLCBkYXRlcyB3aXRoIGRhdGVVdGlsLCBvYmplY3RzIHdpdGggSlNPTi5zdHJpbmdpZnkuXG4gKiBAcGFyYW0gdmFsdWUgQW55IHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5KHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gICAgfVxuICAgIC8vIGVsaW1pbmF0ZSBmdW5jdGlvbnMsIGNhdXNlIHRoZXkgY291bGQgZmFsbCBpbnRvIG9iamVjdHNcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBgRnVuY3Rpb24gJHt2YWx1ZS5uYW1lID8/ICdhbm9ueW1vdXMnfSgpYDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gZGF0ZSBpcyBvYmplY3QsIGJ1dCB3b3VsZCBsaWtlIGl0IGluIElTTyBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGVUb0lzb1N0cmluZyh2YWx1ZSkgPz8gJ251bGwnO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIG9ubHkgcHJpbWl0aXZlcyBzaG91bGQgYmUgbGVmdCB0byBiZSBwcmludGVkIGxpa2UgdGhpcyAoc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4pXG4gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG59XG4iXX0=","import { HttpErrorResponse } from '@angular/common/http';\nimport { stringify } from '../helpers/string';\nimport { LogLevelEnum } from '../log/log.model';\nimport { ACommonsErrorBase, CommonsHttpError, CommonsInternalError } from './error.model';\n/**\n * Converts RxJS subscription error to CommonsError.\n * @param error Error.\n * @param name Optional name to write in commons error.\n * @param details Optional details of error.\n */\nexport function fromSubscribeError(error, name, details) {\n const opts = {\n name,\n details,\n location: window?.location?.href\n };\n if (error instanceof HttpErrorResponse) {\n return new CommonsHttpError(error.message ?? 'Http Error occurred', error, opts);\n }\n else {\n opts.cause = error;\n return new CommonsInternalError(error.message ?? 'Internal Error occurred', opts);\n }\n}\n/**\n * Checks if error is Http error (Angular or Commons).\n * @param error\n */\nexport function isHttpErrorResponse(error) {\n return error instanceof HttpErrorResponse || error instanceof CommonsHttpError || error?.httpError instanceof HttpErrorResponse;\n}\n/**\n * Gets HttpErrorResponse from error (Angular or Commons).\n * @param error Error.\n */\nexport function getHttpErrorResponse(error) {\n if (error instanceof HttpErrorResponse) {\n return error;\n }\n else if (error instanceof CommonsHttpError) {\n return error.httpError;\n }\n else if (error?.httpError instanceof HttpErrorResponse) {\n return error.httpError;\n }\n else {\n return null;\n }\n}\n/**\n * Gets HttpErrorResponse status from error (Angular or Commons).\n * @param error Error.\n */\nexport function getHttpErrorResponseStatus(error) {\n return getHttpErrorResponse(error)?.status ?? null;\n}\n/**\n * Gets HttpErrorResponse status text from error (Angular or Commons).\n * @param error Error.\n */\nexport function getHttpErrorResponseStatusText(error) {\n return getHttpErrorResponse(error)?.statusText ?? null;\n}\n/**\n * Get error log level. All is error, except if error is http error with status >=400 and <500.\n * @param error Error.\n */\nexport function getErrorLogLevel(error) {\n if (isHttpErrorResponse(error)) {\n const status = getHttpErrorResponseStatus(error);\n if (status && status >= 400 && status < 500) {\n return LogLevelEnum.Warning;\n }\n }\n return LogLevelEnum.Error;\n}\n/**\n * Get error name (prototype name or type from commons error if name is not provided).\n * @param error Error.\n */\nexport function getErrorName(error) {\n if (error instanceof ACommonsErrorBase) {\n return error.name ?? error.type;\n }\n else {\n return error.name;\n }\n}\n/**\n * Writes http error to string with all headers and body.\n * @param error Http response error.\n * @param opts Options for hiding parts of error:\n * - hideMessage Hides message of error (message include url, status and status text!).\n * - hideHeaders Hides headers.\n * - hideBody Hides JSON representation of body.\n */\nexport function httpErrorResponseToString(error, opts) {\n let str = opts?.hideMessage ? '' : `${error.message}\\n`; // message should already include url, status, etc.\n if (!opts?.hideHeaders) {\n str += `Http Response Headers: ${error.headers.keys().reduce((acc, key) => `${acc}[${key}: ${error.headers.get(key)}]`, '')}`;\n }\n if (!opts?.hideBody) {\n str += `\\nHttp Response Body: ${stringify(error.error)}`;\n }\n return str;\n}\n/**\n * Error to string.\n * @param error Error.\n * @param opts Options for hiding parts of error:\n * - hideMessage Hides message of error.\n * - hideName Hides error name.\n * - hideCause Hides cause of an error (if present, see @link(errorCauseToString) for other options).\n * - hideStack Hides stack of an error (if present).\n * - hideDetails Hides JSON detail's representation of error (if present).\n * - hideLocation Hides location (URL) where error was thrown.\n * - hideHttp Hides http error portion of error if http error response (see @link(httpErrorResponseToString) for other options).\n */\nexport function errorToString(error, opts) {\n if (error instanceof ACommonsErrorBase) {\n return commonsErrorToString(error, opts);\n }\n else if (error instanceof HttpErrorResponse) {\n return httpErrorResponseToString(error, opts);\n }\n const strBlocks = [];\n if (!opts?.hideMessage) {\n strBlocks.push(error.message);\n }\n if (error.name) {\n strBlocks.push(`Error name: ${error.name}`);\n }\n if (!opts?.hideCause) {\n strBlocks.push(errorCauseToString(error, opts));\n }\n if (!opts?.hideStack && error.stack) {\n strBlocks.push(`Stack trace:\\n${error.stack}`);\n }\n return strBlocks.filter(s => s.trim().length > 0).join('\\n');\n}\n/**\n * Commons error to string.\n * @param error Commons error.\n * @param opts Options for hiding parts of error:\n * - hideMessage Hides message of error.\n * - hideName Hides error name.\n * - hideCause Hides cause of an error (if present, see @link(errorCauseToString) for other options).\n * - hideStack Hides stack of an error (if present).\n * - hideDetails Hides JSON detail's representation of error (if present).\n * - hideLocation Hides location (URL) where error was thrown.\n * - hideHttp Hides http error portion of error if http error response (see @link(httpErrorResponseToString) for other options).\n * - hideItems Hides all item information (http body, action context data).\n * - hideActionData See @link(commonsActionErrorContextToString) for additional info.\n * - hideQueryParams See @link(commonsActionErrorContextToString) for additional info.\n */\nexport function commonsErrorToString(error, opts) {\n const strBlocks = [];\n if (!opts?.hideMessage) {\n strBlocks.push(`${error.message}${error.messageCode ? ` (code: ${error.messageCode})` : ''}`);\n }\n if (!opts?.hideName) {\n strBlocks.push(`Error name: ${error.name ?? error.type} ${error.name ? `(${error.type})` : ''}`);\n }\n if (!opts?.hideLocation && error.location) {\n strBlocks.push(`Location: ${error.location}`);\n }\n let isHttp = false;\n if (!opts?.hideHttp && error instanceof CommonsHttpError) {\n strBlocks.push(httpErrorResponseToString(error.httpError, {\n hideBody: opts?.hideItems || opts?.hideBody,\n hideHeaders: opts?.hideHeaders,\n hideMessage: error.message.indexOf(error.httpError.message) >= 0\n }));\n isHttp = true;\n }\n if (error.type === 'CommonsActionError') {\n const actionError = error;\n if (actionError.actionContext) {\n strBlocks.push(commonsActionErrorContextToString(actionError, opts));\n }\n if (!opts?.hideHttp && actionError.httpError instanceof HttpErrorResponse) {\n strBlocks.push(httpErrorResponseToString(actionError.httpError, {\n hideBody: opts?.hideItems || opts?.hideBody,\n hideHeaders: opts?.hideHeaders,\n hideMessage: error.message.indexOf(actionError.httpError.message) >= 0\n }));\n isHttp = true;\n }\n }\n if (!opts?.hideDetails && error.details) {\n strBlocks.push(`Details: ${stringify(error.details)}`);\n }\n if (!opts?.hideCause && (!isHttp || !(error.cause instanceof HttpErrorResponse))) {\n strBlocks.push(errorCauseToString(error, opts));\n }\n if (!opts?.hideStack && error.stack) {\n strBlocks.push(`Stack trace:\\n${error.stack}`);\n }\n return strBlocks.filter(s => s.trim().length > 0).join('\\n');\n}\n/**\n * Writes commons action error info from context as string.\n * @param error Commons action error.\n * @param opts Options for hiding parts of error:\n * - hideItems Hides all item related information (item, form item, submit item, ...).\n * - hideActionData Hides action data.\n * - hideQueryParams Hides query params.\n */\nexport function commonsActionErrorContextToString(error, opts) {\n let paramsMessage = '';\n if (error.actionContext?.parameters) {\n if (error.actionContext?.parameters.itemId) {\n paramsMessage += `[itemId: ${error.actionContext.parameters.itemId}]`;\n }\n if (!opts?.hideItems && error.actionContext?.parameters.item) {\n paramsMessage += `[item: ${stringify(error.actionContext.parameters.item)}]`;\n }\n if (!opts?.hideActionData && error.actionContext?.parameters.actionData) {\n paramsMessage += Object.entries(error.actionContext?.parameters.actionData).reduce((acc, [key, value]) => `${acc}[actionData ${key}: ${stringify(value)}]`, '');\n }\n if (!opts?.hideQueryParams && error.actionContext?.parameters.dataListParams) {\n paramsMessage += `[dataListParams: ${stringify(error.actionContext.parameters.dataListParams)}]`;\n }\n if (!opts?.hideItems && error.actionContext?.parameters.formItem) {\n paramsMessage += `[formItem: ${stringify(error.actionContext.parameters.formItem)}]`;\n }\n if (!opts?.hideItems && error.actionContext?.parameters.submitResult) {\n paramsMessage += `[formItem: ${stringify(error.actionContext.parameters.submitResult)}]`;\n }\n if (error.actionContext?.parameters.locale) {\n paramsMessage += `[locale: ${stringify(error.actionContext.parameters.locale)}]`;\n }\n }\n return paramsMessage;\n}\n/**\n * Writes cause of an error as string.\n * @param error Error.\n * @param opts Options for hiding parts of error:\n * - causeOnErrorOnly Prints only if cause is instance of error.\n * - causeAsJson Print error cause as a JSON (by default, if error only message and name will be printed).\n */\nexport function errorCauseToString(error, opts) {\n // if already logged as http error, check that cause is not also http error (cause it is usually duplicated)\n if (error.cause && (!opts?.causeOnErrorOnly || error.cause instanceof Error)) {\n const needsStringify = opts?.causeAsJson || !(error.cause instanceof Error);\n if (!opts?.causeOnErrorOnly || error.cause instanceof Error) {\n return ('Caused by: ' +\n (needsStringify ? stringify(error.cause) : `${error.cause.message}${error.cause.name ? ` (${error.cause.name})` : ''}`));\n }\n }\n return '';\n}\n/**\n * Throws an error with the provided error message.\n * The intended usage is for in-line throwing of an error with TS type narrowing.\n * <br>\n * <i>Example</i>:\n * <pre>\n * const value: string | null = getValue(\"\");\n * const nonNullValue: string = getValue(\"\") ?? throwError(\"value missing\");\n * </pre>\n *\n * @param {string} errorMessage - The error message to be thrown.\n * @param {CommonsErrorBaseOptions} [options] - Additional options for the thrown error.\n * @throws {Error} - The error object with the provided error message.\n * @returns {never} - This function does not return a value.\n * @see CommonsErrorBaseOptions\n */\nexport function throwError(errorMessage, options) {\n throw new CommonsInternalError(errorMessage, options);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL2Vycm9yL2Vycm9yLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFdkQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsaUJBQWlCLEVBQTJCLGdCQUFnQixFQUFFLG9CQUFvQixFQUFzQixNQUFNLGVBQWUsQ0FBQztBQUV0STs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFVLEVBQUUsSUFBYSxFQUFFLE9BQWE7SUFDdkUsTUFBTSxJQUFJLEdBQTRCO1FBQ2xDLElBQUk7UUFDSixPQUFPO1FBQ1AsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSTtLQUNuQyxDQUFDO0lBRUYsSUFBSSxLQUFLLFlBQVksaUJBQWlCLEVBQUUsQ0FBQztRQUNyQyxPQUFPLElBQUksZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckYsQ0FBQztTQUFNLENBQUM7UUFDSixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixPQUFPLElBQUksb0JBQW9CLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSx5QkFBeUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RixDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUFVO0lBQzFDLE9BQU8sS0FBSyxZQUFZLGlCQUFpQixJQUFJLEtBQUssWUFBWSxnQkFBZ0IsSUFBSyxLQUF5QyxFQUFFLFNBQVMsWUFBWSxpQkFBaUIsQ0FBQztBQUN6SyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEtBQVU7SUFDM0MsSUFBSSxLQUFLLFlBQVksaUJBQWlCLEVBQUUsQ0FBQztRQUNyQyxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO1NBQU0sSUFBSSxLQUFLLFlBQVksZ0JBQWdCLEVBQUUsQ0FBQztRQUMzQyxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDM0IsQ0FBQztTQUFNLElBQUssS0FBeUMsRUFBRSxTQUFTLFlBQVksaUJBQWlCLEVBQUUsQ0FBQztRQUM1RixPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDM0IsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxLQUFVO0lBQ2pELE9BQU8sb0JBQW9CLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQztBQUN2RCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLDhCQUE4QixDQUFDLEtBQVU7SUFDckQsT0FBTyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLElBQUksSUFBSSxDQUFDO0FBQzNELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsS0FBVTtJQUN2QyxJQUFJLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsSUFBSSxNQUFNLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDMUMsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDO1FBQ2hDLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDO0FBQzlCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQVU7SUFDbkMsSUFBSSxLQUFLLFlBQVksaUJBQWlCLEVBQUUsQ0FBQztRQUNyQyxPQUFPLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQztJQUNwQyxDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQztJQUN0QixDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQUMsS0FBd0IsRUFBRSxJQUEyQztJQUMzRyxJQUFJLEdBQUcsR0FBRyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsbURBQW1EO0lBQzVHLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDckIsR0FBRyxJQUFJLDBCQUEwQixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDbEksQ0FBQztJQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDbEIsR0FBRyxJQUFJLHlCQUF5QixTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDN0QsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFZLEVBQUUsSUFBK0I7SUFDdkUsSUFBSSxLQUFLLFlBQVksaUJBQWlCLEVBQUUsQ0FBQztRQUNyQyxPQUFPLG9CQUFvQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO1NBQU0sSUFBSSxLQUFLLFlBQVksaUJBQWlCLEVBQUUsQ0FBQztRQUM1QyxPQUFPLHlCQUF5QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQWEsRUFBRSxDQUFDO0lBQy9CLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDckIsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2IsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQ25CLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQyxTQUFTLENBQUMsSUFBSSxDQUFDLGlCQUFpQixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEtBQXdCLEVBQUUsSUFBK0I7SUFDMUYsTUFBTSxTQUFTLEdBQWEsRUFBRSxDQUFDO0lBQy9CLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDckIsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDbEIsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxZQUFZLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ25CLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxJQUFJLEtBQUssWUFBWSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3ZELFNBQVMsQ0FBQyxJQUFJLENBQ1YseUJBQXlCLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUN2QyxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsSUFBSSxJQUFJLEVBQUUsUUFBUTtZQUMzQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFdBQVc7WUFDOUIsV0FBVyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztTQUNuRSxDQUFDLENBQ0wsQ0FBQztRQUNGLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLEtBQXVDLENBQUM7UUFDNUQsSUFBSSxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDNUIsU0FBUyxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLElBQUksV0FBVyxDQUFDLFNBQVMsWUFBWSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3hFLFNBQVMsQ0FBQyxJQUFJLENBQ1YseUJBQXlCLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRTtnQkFDN0MsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLElBQUksSUFBSSxFQUFFLFFBQVE7Z0JBQzNDLFdBQVcsRUFBRSxJQUFJLEVBQUUsV0FBVztnQkFDOUIsV0FBVyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQzthQUN6RSxDQUFDLENBQ0wsQ0FBQztZQUNGLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbEIsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdEMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxZQUFZLGlCQUFpQixDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9FLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQyxTQUFTLENBQUMsSUFBSSxDQUFDLGlCQUFpQixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsaUNBQWlDLENBQUMsS0FBMEIsRUFBRSxJQUE0QztJQUN0SCxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDdkIsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ2xDLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekMsYUFBYSxJQUFJLFlBQVksS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDMUUsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNELGFBQWEsSUFBSSxVQUFVLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ2pGLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN0RSxhQUFhLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxlQUFlLEdBQUcsS0FBSyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwSyxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxlQUFlLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDM0UsYUFBYSxJQUFJLG9CQUFvQixTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQztRQUNyRyxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDL0QsYUFBYSxJQUFJLGNBQWMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDekYsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ25FLGFBQWEsSUFBSSxjQUFjLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDO1FBQzdGLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3pDLGFBQWEsSUFBSSxZQUFZLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ3JGLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxhQUFhLENBQUM7QUFDekIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFZLEVBQUUsSUFBb0M7SUFDakYsNEdBQTRHO0lBQzVHLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLGdCQUFnQixJQUFJLEtBQUssQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMzRSxNQUFNLGNBQWMsR0FBRyxJQUFJLEVBQUUsV0FBVyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLElBQUksS0FBSyxDQUFDLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztZQUMxRCxPQUFPLENBQ0gsYUFBYTtnQkFDYixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSSxLQUFLLENBQUMsS0FBZSxDQUFDLE9BQU8sR0FBSSxLQUFLLENBQUMsS0FBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBTSxLQUFLLENBQUMsS0FBZSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUMzSixDQUFDO1FBQ04sQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLFlBQW9CLEVBQUUsT0FBaUM7SUFDOUUsTUFBTSxJQUFJLG9CQUFvQixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQge3N0cmluZ2lmeX0gZnJvbSAnLi4vaGVscGVycy9zdHJpbmcnO1xuaW1wb3J0IHtMb2dMZXZlbEVudW19IGZyb20gJy4uL2xvZy9sb2cubW9kZWwnO1xuaW1wb3J0IHtBQ29tbW9uc0Vycm9yQmFzZSwgQ29tbW9uc0Vycm9yQmFzZU9wdGlvbnMsIENvbW1vbnNIdHRwRXJyb3IsIENvbW1vbnNJbnRlcm5hbEVycm9yLCBJQ29tbW9uc0FjdGlvbkVycm9yfSBmcm9tICcuL2Vycm9yLm1vZGVsJztcblxuLyoqXG4gKiBDb252ZXJ0cyBSeEpTIHN1YnNjcmlwdGlvbiBlcnJvciB0byBDb21tb25zRXJyb3IuXG4gKiBAcGFyYW0gZXJyb3IgRXJyb3IuXG4gKiBAcGFyYW0gbmFtZSBPcHRpb25hbCBuYW1lIHRvIHdyaXRlIGluIGNvbW1vbnMgZXJyb3IuXG4gKiBAcGFyYW0gZGV0YWlscyBPcHRpb25hbCBkZXRhaWxzIG9mIGVycm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbVN1YnNjcmliZUVycm9yKGVycm9yOiBhbnksIG5hbWU/OiBzdHJpbmcsIGRldGFpbHM/OiBhbnkpOiBBQ29tbW9uc0Vycm9yQmFzZSB7XG4gICAgY29uc3Qgb3B0czogQ29tbW9uc0Vycm9yQmFzZU9wdGlvbnMgPSB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRldGFpbHMsXG4gICAgICAgIGxvY2F0aW9uOiB3aW5kb3c/LmxvY2F0aW9uPy5ocmVmXG4gICAgfTtcblxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tbW9uc0h0dHBFcnJvcihlcnJvci5tZXNzYWdlID8/ICdIdHRwIEVycm9yIG9jY3VycmVkJywgZXJyb3IsIG9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdHMuY2F1c2UgPSBlcnJvcjtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihlcnJvci5tZXNzYWdlID8/ICdJbnRlcm5hbCBFcnJvciBvY2N1cnJlZCcsIG9wdHMpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgZXJyb3IgaXMgSHR0cCBlcnJvciAoQW5ndWxhciBvciBDb21tb25zKS5cbiAqIEBwYXJhbSBlcnJvclxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNIdHRwRXJyb3JSZXNwb25zZShlcnJvcjogYW55KSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgfHwgZXJyb3IgaW5zdGFuY2VvZiBDb21tb25zSHR0cEVycm9yIHx8IChlcnJvciBhcyBJQ29tbW9uc0FjdGlvbkVycm9yIHwgdW5kZWZpbmVkKT8uaHR0cEVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2U7XG59XG5cbi8qKlxuICogR2V0cyBIdHRwRXJyb3JSZXNwb25zZSBmcm9tIGVycm9yIChBbmd1bGFyIG9yIENvbW1vbnMpLlxuICogQHBhcmFtIGVycm9yIEVycm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SHR0cEVycm9yUmVzcG9uc2UoZXJyb3I6IGFueSk6IEh0dHBFcnJvclJlc3BvbnNlIHwgbnVsbCB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDb21tb25zSHR0cEVycm9yKSB7XG4gICAgICAgIHJldHVybiBlcnJvci5odHRwRXJyb3I7XG4gICAgfSBlbHNlIGlmICgoZXJyb3IgYXMgSUNvbW1vbnNBY3Rpb25FcnJvciB8IHVuZGVmaW5lZCk/Lmh0dHBFcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgIHJldHVybiBlcnJvci5odHRwRXJyb3I7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuXG4vKipcbiAqIEdldHMgSHR0cEVycm9yUmVzcG9uc2Ugc3RhdHVzIGZyb20gZXJyb3IgKEFuZ3VsYXIgb3IgQ29tbW9ucykuXG4gKiBAcGFyYW0gZXJyb3IgRXJyb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIdHRwRXJyb3JSZXNwb25zZVN0YXR1cyhlcnJvcjogYW55KTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIGdldEh0dHBFcnJvclJlc3BvbnNlKGVycm9yKT8uc3RhdHVzID8/IG51bGw7XG59XG5cbi8qKlxuICogR2V0cyBIdHRwRXJyb3JSZXNwb25zZSBzdGF0dXMgdGV4dCBmcm9tIGVycm9yIChBbmd1bGFyIG9yIENvbW1vbnMpLlxuICogQHBhcmFtIGVycm9yIEVycm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SHR0cEVycm9yUmVzcG9uc2VTdGF0dXNUZXh0KGVycm9yOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gZ2V0SHR0cEVycm9yUmVzcG9uc2UoZXJyb3IpPy5zdGF0dXNUZXh0ID8/IG51bGw7XG59XG5cbi8qKlxuICogR2V0IGVycm9yIGxvZyBsZXZlbC4gQWxsIGlzIGVycm9yLCBleGNlcHQgaWYgZXJyb3IgaXMgaHR0cCBlcnJvciB3aXRoIHN0YXR1cyA+PTQwMCBhbmQgPDUwMC5cbiAqIEBwYXJhbSBlcnJvciBFcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVycm9yTG9nTGV2ZWwoZXJyb3I6IGFueSk6IExvZ0xldmVsRW51bSB7XG4gICAgaWYgKGlzSHR0cEVycm9yUmVzcG9uc2UoZXJyb3IpKSB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGdldEh0dHBFcnJvclJlc3BvbnNlU3RhdHVzKGVycm9yKTtcbiAgICAgICAgaWYgKHN0YXR1cyAmJiBzdGF0dXMgPj0gNDAwICYmIHN0YXR1cyA8IDUwMCkge1xuICAgICAgICAgICAgcmV0dXJuIExvZ0xldmVsRW51bS5XYXJuaW5nO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBMb2dMZXZlbEVudW0uRXJyb3I7XG59XG5cbi8qKlxuICogR2V0IGVycm9yIG5hbWUgKHByb3RvdHlwZSBuYW1lIG9yIHR5cGUgZnJvbSBjb21tb25zIGVycm9yIGlmIG5hbWUgaXMgbm90IHByb3ZpZGVkKS5cbiAqIEBwYXJhbSBlcnJvciBFcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVycm9yTmFtZShlcnJvcjogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBQ29tbW9uc0Vycm9yQmFzZSkge1xuICAgICAgICByZXR1cm4gZXJyb3IubmFtZSA/PyBlcnJvci50eXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlcnJvci5uYW1lO1xuICAgIH1cbn1cblxuLyoqXG4gKiBXcml0ZXMgaHR0cCBlcnJvciB0byBzdHJpbmcgd2l0aCBhbGwgaGVhZGVycyBhbmQgYm9keS5cbiAqIEBwYXJhbSBlcnJvciBIdHRwIHJlc3BvbnNlIGVycm9yLlxuICogQHBhcmFtIG9wdHMgT3B0aW9ucyBmb3IgaGlkaW5nIHBhcnRzIG9mIGVycm9yOlxuICogIC0gaGlkZU1lc3NhZ2UgSGlkZXMgbWVzc2FnZSBvZiBlcnJvciAobWVzc2FnZSBpbmNsdWRlIHVybCwgc3RhdHVzIGFuZCBzdGF0dXMgdGV4dCEpLlxuICogIC0gaGlkZUhlYWRlcnMgSGlkZXMgaGVhZGVycy5cbiAqICAtIGhpZGVCb2R5IEhpZGVzIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYm9keS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh0dHBFcnJvclJlc3BvbnNlVG9TdHJpbmcoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlLCBvcHRzPzogSHR0cEVycm9yUmVzcG9uc2VUb1N0cmluZ09wdGlvbnNUeXBlKTogc3RyaW5nIHtcbiAgICBsZXQgc3RyID0gb3B0cz8uaGlkZU1lc3NhZ2UgPyAnJyA6IGAke2Vycm9yLm1lc3NhZ2V9XFxuYDsgLy8gbWVzc2FnZSBzaG91bGQgYWxyZWFkeSBpbmNsdWRlIHVybCwgc3RhdHVzLCBldGMuXG4gICAgaWYgKCFvcHRzPy5oaWRlSGVhZGVycykge1xuICAgICAgICBzdHIgKz0gYEh0dHAgUmVzcG9uc2UgSGVhZGVyczogJHtlcnJvci5oZWFkZXJzLmtleXMoKS5yZWR1Y2UoKGFjYywga2V5KSA9PiBgJHthY2N9WyR7a2V5fTogJHtlcnJvci5oZWFkZXJzLmdldChrZXkpfV1gLCAnJyl9YDtcbiAgICB9XG4gICAgaWYgKCFvcHRzPy5oaWRlQm9keSkge1xuICAgICAgICBzdHIgKz0gYFxcbkh0dHAgUmVzcG9uc2UgQm9keTogJHtzdHJpbmdpZnkoZXJyb3IuZXJyb3IpfWA7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogRXJyb3IgdG8gc3RyaW5nLlxuICogQHBhcmFtIGVycm9yIEVycm9yLlxuICogQHBhcmFtIG9wdHMgT3B0aW9ucyBmb3IgaGlkaW5nIHBhcnRzIG9mIGVycm9yOlxuICogLSBoaWRlTWVzc2FnZSBIaWRlcyBtZXNzYWdlIG9mIGVycm9yLlxuICogLSBoaWRlTmFtZSBIaWRlcyBlcnJvciBuYW1lLlxuICogLSBoaWRlQ2F1c2UgSGlkZXMgY2F1c2Ugb2YgYW4gZXJyb3IgKGlmIHByZXNlbnQsIHNlZSBAbGluayhlcnJvckNhdXNlVG9TdHJpbmcpIGZvciBvdGhlciBvcHRpb25zKS5cbiAqIC0gaGlkZVN0YWNrIEhpZGVzIHN0YWNrIG9mIGFuIGVycm9yIChpZiBwcmVzZW50KS5cbiAqIC0gaGlkZURldGFpbHMgSGlkZXMgSlNPTiBkZXRhaWwncyByZXByZXNlbnRhdGlvbiBvZiBlcnJvciAoaWYgcHJlc2VudCkuXG4gKiAtIGhpZGVMb2NhdGlvbiBIaWRlcyBsb2NhdGlvbiAoVVJMKSB3aGVyZSBlcnJvciB3YXMgdGhyb3duLlxuICogLSBoaWRlSHR0cCBIaWRlcyBodHRwIGVycm9yIHBvcnRpb24gb2YgZXJyb3IgaWYgaHR0cCBlcnJvciByZXNwb25zZSAoc2VlIEBsaW5rKGh0dHBFcnJvclJlc3BvbnNlVG9TdHJpbmcpIGZvciBvdGhlciBvcHRpb25zKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yVG9TdHJpbmcoZXJyb3I6IEVycm9yLCBvcHRzPzogRXJyb3JUb1N0cmluZ09wdGlvbnNUeXBlKTogc3RyaW5nIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBQ29tbW9uc0Vycm9yQmFzZSkge1xuICAgICAgICByZXR1cm4gY29tbW9uc0Vycm9yVG9TdHJpbmcoZXJyb3IsIG9wdHMpO1xuICAgIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICByZXR1cm4gaHR0cEVycm9yUmVzcG9uc2VUb1N0cmluZyhlcnJvciwgb3B0cyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyQmxvY2tzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICghb3B0cz8uaGlkZU1lc3NhZ2UpIHtcbiAgICAgICAgc3RyQmxvY2tzLnB1c2goZXJyb3IubWVzc2FnZSk7XG4gICAgfVxuICAgIGlmIChlcnJvci5uYW1lKSB7XG4gICAgICAgIHN0ckJsb2Nrcy5wdXNoKGBFcnJvciBuYW1lOiAke2Vycm9yLm5hbWV9YCk7XG4gICAgfVxuICAgIGlmICghb3B0cz8uaGlkZUNhdXNlKSB7XG4gICAgICAgIHN0ckJsb2Nrcy5wdXNoKGVycm9yQ2F1c2VUb1N0cmluZyhlcnJvciwgb3B0cykpO1xuICAgIH1cbiAgICBpZiAoIW9wdHM/LmhpZGVTdGFjayAmJiBlcnJvci5zdGFjaykge1xuICAgICAgICBzdHJCbG9ja3MucHVzaChgU3RhY2sgdHJhY2U6XFxuJHtlcnJvci5zdGFja31gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyQmxvY2tzLmZpbHRlcihzID0+IHMudHJpbSgpLmxlbmd0aCA+IDApLmpvaW4oJ1xcbicpO1xufVxuXG4vKipcbiAqIENvbW1vbnMgZXJyb3IgdG8gc3RyaW5nLlxuICogQHBhcmFtIGVycm9yIENvbW1vbnMgZXJyb3IuXG4gKiBAcGFyYW0gb3B0cyBPcHRpb25zIGZvciBoaWRpbmcgcGFydHMgb2YgZXJyb3I6XG4gKiAtIGhpZGVNZXNzYWdlIEhpZGVzIG1lc3NhZ2Ugb2YgZXJyb3IuXG4gKiAtIGhpZGVOYW1lIEhpZGVzIGVycm9yIG5hbWUuXG4gKiAtIGhpZGVDYXVzZSBIaWRlcyBjYXVzZSBvZiBhbiBlcnJvciAoaWYgcHJlc2VudCwgc2VlIEBsaW5rKGVycm9yQ2F1c2VUb1N0cmluZykgZm9yIG90aGVyIG9wdGlvbnMpLlxuICogLSBoaWRlU3RhY2sgSGlkZXMgc3RhY2sgb2YgYW4gZXJyb3IgKGlmIHByZXNlbnQpLlxuICogLSBoaWRlRGV0YWlscyBIaWRlcyBKU09OIGRldGFpbCdzIHJlcHJlc2VudGF0aW9uIG9mIGVycm9yIChpZiBwcmVzZW50KS5cbiAqIC0gaGlkZUxvY2F0aW9uIEhpZGVzIGxvY2F0aW9uIChVUkwpIHdoZXJlIGVycm9yIHdhcyB0aHJvd24uXG4gKiAtIGhpZGVIdHRwIEhpZGVzIGh0dHAgZXJyb3IgcG9ydGlvbiBvZiBlcnJvciBpZiBodHRwIGVycm9yIHJlc3BvbnNlIChzZWUgQGxpbmsoaHR0cEVycm9yUmVzcG9uc2VUb1N0cmluZykgZm9yIG90aGVyIG9wdGlvbnMpLlxuICogLSBoaWRlSXRlbXMgSGlkZXMgYWxsIGl0ZW0gaW5mb3JtYXRpb24gKGh0dHAgYm9keSwgYWN0aW9uIGNvbnRleHQgZGF0YSkuXG4gKiAtIGhpZGVBY3Rpb25EYXRhIFNlZSBAbGluayhjb21tb25zQWN0aW9uRXJyb3JDb250ZXh0VG9TdHJpbmcpIGZvciBhZGRpdGlvbmFsIGluZm8uXG4gKiAtIGhpZGVRdWVyeVBhcmFtcyBTZWUgQGxpbmsoY29tbW9uc0FjdGlvbkVycm9yQ29udGV4dFRvU3RyaW5nKSBmb3IgYWRkaXRpb25hbCBpbmZvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbW9uc0Vycm9yVG9TdHJpbmcoZXJyb3I6IEFDb21tb25zRXJyb3JCYXNlLCBvcHRzPzogRXJyb3JUb1N0cmluZ09wdGlvbnNUeXBlKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHJCbG9ja3M6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKCFvcHRzPy5oaWRlTWVzc2FnZSkge1xuICAgICAgICBzdHJCbG9ja3MucHVzaChgJHtlcnJvci5tZXNzYWdlfSR7ZXJyb3IubWVzc2FnZUNvZGUgPyBgIChjb2RlOiAke2Vycm9yLm1lc3NhZ2VDb2RlfSlgIDogJyd9YCk7XG4gICAgfVxuICAgIGlmICghb3B0cz8uaGlkZU5hbWUpIHtcbiAgICAgICAgc3RyQmxvY2tzLnB1c2goYEVycm9yIG5hbWU6ICR7ZXJyb3IubmFtZSA/PyBlcnJvci50eXBlfSAke2Vycm9yLm5hbWUgPyBgKCR7ZXJyb3IudHlwZX0pYCA6ICcnfWApO1xuICAgIH1cbiAgICBpZiAoIW9wdHM/LmhpZGVMb2NhdGlvbiAmJiBlcnJvci5sb2NhdGlvbikge1xuICAgICAgICBzdHJCbG9ja3MucHVzaChgTG9jYXRpb246ICR7ZXJyb3IubG9jYXRpb259YCk7XG4gICAgfVxuXG4gICAgbGV0IGlzSHR0cCA9IGZhbHNlO1xuICAgIGlmICghb3B0cz8uaGlkZUh0dHAgJiYgZXJyb3IgaW5zdGFuY2VvZiBDb21tb25zSHR0cEVycm9yKSB7XG4gICAgICAgIHN0ckJsb2Nrcy5wdXNoKFxuICAgICAgICAgICAgaHR0cEVycm9yUmVzcG9uc2VUb1N0cmluZyhlcnJvci5odHRwRXJyb3IsIHtcbiAgICAgICAgICAgICAgICBoaWRlQm9keTogb3B0cz8uaGlkZUl0ZW1zIHx8IG9wdHM/LmhpZGVCb2R5LFxuICAgICAgICAgICAgICAgIGhpZGVIZWFkZXJzOiBvcHRzPy5oaWRlSGVhZGVycyxcbiAgICAgICAgICAgICAgICBoaWRlTWVzc2FnZTogZXJyb3IubWVzc2FnZS5pbmRleE9mKGVycm9yLmh0dHBFcnJvci5tZXNzYWdlKSA+PSAwXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICBpc0h0dHAgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoZXJyb3IudHlwZSA9PT0gJ0NvbW1vbnNBY3Rpb25FcnJvcicpIHtcbiAgICAgICAgY29uc3QgYWN0aW9uRXJyb3IgPSBlcnJvciBhcyB1bmtub3duIGFzIElDb21tb25zQWN0aW9uRXJyb3I7XG4gICAgICAgIGlmIChhY3Rpb25FcnJvci5hY3Rpb25Db250ZXh0KSB7XG4gICAgICAgICAgICBzdHJCbG9ja3MucHVzaChjb21tb25zQWN0aW9uRXJyb3JDb250ZXh0VG9TdHJpbmcoYWN0aW9uRXJyb3IsIG9wdHMpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdHM/LmhpZGVIdHRwICYmIGFjdGlvbkVycm9yLmh0dHBFcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICBzdHJCbG9ja3MucHVzaChcbiAgICAgICAgICAgICAgICBodHRwRXJyb3JSZXNwb25zZVRvU3RyaW5nKGFjdGlvbkVycm9yLmh0dHBFcnJvciwge1xuICAgICAgICAgICAgICAgICAgICBoaWRlQm9keTogb3B0cz8uaGlkZUl0ZW1zIHx8IG9wdHM/LmhpZGVCb2R5LFxuICAgICAgICAgICAgICAgICAgICBoaWRlSGVhZGVyczogb3B0cz8uaGlkZUhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIGhpZGVNZXNzYWdlOiBlcnJvci5tZXNzYWdlLmluZGV4T2YoYWN0aW9uRXJyb3IuaHR0cEVycm9yLm1lc3NhZ2UpID49IDBcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlzSHR0cCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIW9wdHM/LmhpZGVEZXRhaWxzICYmIGVycm9yLmRldGFpbHMpIHtcbiAgICAgICAgc3RyQmxvY2tzLnB1c2goYERldGFpbHM6ICR7c3RyaW5naWZ5KGVycm9yLmRldGFpbHMpfWApO1xuICAgIH1cbiAgICBpZiAoIW9wdHM/LmhpZGVDYXVzZSAmJiAoIWlzSHR0cCB8fCAhKGVycm9yLmNhdXNlIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpKSkge1xuICAgICAgICBzdHJCbG9ja3MucHVzaChlcnJvckNhdXNlVG9TdHJpbmcoZXJyb3IsIG9wdHMpKTtcbiAgICB9XG4gICAgaWYgKCFvcHRzPy5oaWRlU3RhY2sgJiYgZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgc3RyQmxvY2tzLnB1c2goYFN0YWNrIHRyYWNlOlxcbiR7ZXJyb3Iuc3RhY2t9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0ckJsb2Nrcy5maWx0ZXIocyA9PiBzLnRyaW0oKS5sZW5ndGggPiAwKS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBXcml0ZXMgY29tbW9ucyBhY3Rpb24gZXJyb3IgaW5mbyBmcm9tIGNvbnRleHQgYXMgc3RyaW5nLlxuICogQHBhcmFtIGVycm9yIENvbW1vbnMgYWN0aW9uIGVycm9yLlxuICogQHBhcmFtIG9wdHMgT3B0aW9ucyBmb3IgaGlkaW5nIHBhcnRzIG9mIGVycm9yOlxuICogLSBoaWRlSXRlbXMgSGlkZXMgYWxsIGl0ZW0gcmVsYXRlZCBpbmZvcm1hdGlvbiAoaXRlbSwgZm9ybSBpdGVtLCBzdWJtaXQgaXRlbSwgLi4uKS5cbiAqIC0gaGlkZUFjdGlvbkRhdGEgSGlkZXMgYWN0aW9uIGRhdGEuXG4gKiAtIGhpZGVRdWVyeVBhcmFtcyBIaWRlcyBxdWVyeSBwYXJhbXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tb25zQWN0aW9uRXJyb3JDb250ZXh0VG9TdHJpbmcoZXJyb3I6IElDb21tb25zQWN0aW9uRXJyb3IsIG9wdHM/OiBBY3Rpb25FcnJvckNvbnRleHRUb1N0cmluZ09wdGlvbnNUeXBlKTogc3RyaW5nIHtcbiAgICBsZXQgcGFyYW1zTWVzc2FnZSA9ICcnO1xuICAgIGlmIChlcnJvci5hY3Rpb25Db250ZXh0Py5wYXJhbWV0ZXJzKSB7XG4gICAgICAgIGlmIChlcnJvci5hY3Rpb25Db250ZXh0Py5wYXJhbWV0ZXJzLml0ZW1JZCkge1xuICAgICAgICAgICAgcGFyYW1zTWVzc2FnZSArPSBgW2l0ZW1JZDogJHtlcnJvci5hY3Rpb25Db250ZXh0LnBhcmFtZXRlcnMuaXRlbUlkfV1gO1xuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0cz8uaGlkZUl0ZW1zICYmIGVycm9yLmFjdGlvbkNvbnRleHQ/LnBhcmFtZXRlcnMuaXRlbSkge1xuICAgICAgICAgICAgcGFyYW1zTWVzc2FnZSArPSBgW2l0ZW06ICR7c3RyaW5naWZ5KGVycm9yLmFjdGlvbkNvbnRleHQucGFyYW1ldGVycy5pdGVtKX1dYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdHM/LmhpZGVBY3Rpb25EYXRhICYmIGVycm9yLmFjdGlvbkNvbnRleHQ/LnBhcmFtZXRlcnMuYWN0aW9uRGF0YSkge1xuICAgICAgICAgICAgcGFyYW1zTWVzc2FnZSArPSBPYmplY3QuZW50cmllcyhlcnJvci5hY3Rpb25Db250ZXh0Py5wYXJhbWV0ZXJzLmFjdGlvbkRhdGEpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IGAke2FjY31bYWN0aW9uRGF0YSAke2tleX06ICR7c3RyaW5naWZ5KHZhbHVlKX1dYCwgJycpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0cz8uaGlkZVF1ZXJ5UGFyYW1zICYmIGVycm9yLmFjdGlvbkNvbnRleHQ/LnBhcmFtZXRlcnMuZGF0YUxpc3RQYXJhbXMpIHtcbiAgICAgICAgICAgIHBhcmFtc01lc3NhZ2UgKz0gYFtkYXRhTGlzdFBhcmFtczogJHtzdHJpbmdpZnkoZXJyb3IuYWN0aW9uQ29udGV4dC5wYXJhbWV0ZXJzLmRhdGFMaXN0UGFyYW1zKX1dYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdHM/LmhpZGVJdGVtcyAmJiBlcnJvci5hY3Rpb25Db250ZXh0Py5wYXJhbWV0ZXJzLmZvcm1JdGVtKSB7XG4gICAgICAgICAgICBwYXJhbXNNZXNzYWdlICs9IGBbZm9ybUl0ZW06ICR7c3RyaW5naWZ5KGVycm9yLmFjdGlvbkNvbnRleHQucGFyYW1ldGVycy5mb3JtSXRlbSl9XWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRzPy5oaWRlSXRlbXMgJiYgZXJyb3IuYWN0aW9uQ29udGV4dD8ucGFyYW1ldGVycy5zdWJtaXRSZXN1bHQpIHtcbiAgICAgICAgICAgIHBhcmFtc01lc3NhZ2UgKz0gYFtmb3JtSXRlbTogJHtzdHJpbmdpZnkoZXJyb3IuYWN0aW9uQ29udGV4dC5wYXJhbWV0ZXJzLnN1Ym1pdFJlc3VsdCl9XWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yLmFjdGlvbkNvbnRleHQ/LnBhcmFtZXRlcnMubG9jYWxlKSB7XG4gICAgICAgICAgICBwYXJhbXNNZXNzYWdlICs9IGBbbG9jYWxlOiAke3N0cmluZ2lmeShlcnJvci5hY3Rpb25Db250ZXh0LnBhcmFtZXRlcnMubG9jYWxlKX1dYDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXNNZXNzYWdlO1xufVxuXG4vKipcbiAqIFdyaXRlcyBjYXVzZSBvZiBhbiBlcnJvciBhcyBzdHJpbmcuXG4gKiBAcGFyYW0gZXJyb3IgRXJyb3IuXG4gKiBAcGFyYW0gb3B0cyBPcHRpb25zIGZvciBoaWRpbmcgcGFydHMgb2YgZXJyb3I6XG4gKiAtIGNhdXNlT25FcnJvck9ubHkgUHJpbnRzIG9ubHkgaWYgY2F1c2UgaXMgaW5zdGFuY2Ugb2YgZXJyb3IuXG4gKiAtIGNhdXNlQXNKc29uIFByaW50IGVycm9yIGNhdXNlIGFzIGEgSlNPTiAoYnkgZGVmYXVsdCwgaWYgZXJyb3Igb25seSBtZXNzYWdlIGFuZCBuYW1lIHdpbGwgYmUgcHJpbnRlZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlcnJvckNhdXNlVG9TdHJpbmcoZXJyb3I6IEVycm9yLCBvcHRzPzogRXJyb3JDYXVzZVRvU3RyaW5nT3B0aW9uc1R5cGUpOiBzdHJpbmcge1xuICAgIC8vIGlmIGFscmVhZHkgbG9nZ2VkIGFzIGh0dHAgZXJyb3IsIGNoZWNrIHRoYXQgY2F1c2UgaXMgbm90IGFsc28gaHR0cCBlcnJvciAoY2F1c2UgaXQgaXMgdXN1YWxseSBkdXBsaWNhdGVkKVxuICAgIGlmIChlcnJvci5jYXVzZSAmJiAoIW9wdHM/LmNhdXNlT25FcnJvck9ubHkgfHwgZXJyb3IuY2F1c2UgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgY29uc3QgbmVlZHNTdHJpbmdpZnkgPSBvcHRzPy5jYXVzZUFzSnNvbiB8fCAhKGVycm9yLmNhdXNlIGluc3RhbmNlb2YgRXJyb3IpO1xuICAgICAgICBpZiAoIW9wdHM/LmNhdXNlT25FcnJvck9ubHkgfHwgZXJyb3IuY2F1c2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAnQ2F1c2VkIGJ5OiAnICtcbiAgICAgICAgICAgICAgICAobmVlZHNTdHJpbmdpZnkgPyBzdHJpbmdpZnkoZXJyb3IuY2F1c2UpIDogYCR7KGVycm9yLmNhdXNlIGFzIEVycm9yKS5tZXNzYWdlfSR7KGVycm9yLmNhdXNlIGFzIEVycm9yKS5uYW1lID8gYCAoJHsoZXJyb3IuY2F1c2UgYXMgRXJyb3IpLm5hbWV9KWAgOiAnJ31gKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogVGhyb3dzIGFuIGVycm9yIHdpdGggdGhlIHByb3ZpZGVkIGVycm9yIG1lc3NhZ2UuXG4gKiBUaGUgaW50ZW5kZWQgdXNhZ2UgaXMgZm9yIGluLWxpbmUgdGhyb3dpbmcgb2YgYW4gZXJyb3Igd2l0aCBUUyB0eXBlIG5hcnJvd2luZy5cbiAqIDxicj5cbiAqIDxpPkV4YW1wbGU8L2k+OlxuICogPHByZT5cbiAqICAgY29uc3QgdmFsdWU6IHN0cmluZyB8IG51bGwgPSBnZXRWYWx1ZShcIlwiKTtcbiAqICAgY29uc3Qgbm9uTnVsbFZhbHVlOiBzdHJpbmcgPSBnZXRWYWx1ZShcIlwiKSA/PyB0aHJvd0Vycm9yKFwidmFsdWUgbWlzc2luZ1wiKTtcbiAqIDwvcHJlPlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBlcnJvck1lc3NhZ2UgLSBUaGUgZXJyb3IgbWVzc2FnZSB0byBiZSB0aHJvd24uXG4gKiBAcGFyYW0ge0NvbW1vbnNFcnJvckJhc2VPcHRpb25zfSBbb3B0aW9uc10gLSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSB0aHJvd24gZXJyb3IuXG4gKiBAdGhyb3dzIHtFcnJvcn0gLSBUaGUgZXJyb3Igb2JqZWN0IHdpdGggdGhlIHByb3ZpZGVkIGVycm9yIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7bmV2ZXJ9IC0gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS5cbiAqIEBzZWUgQ29tbW9uc0Vycm9yQmFzZU9wdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm93RXJyb3IoZXJyb3JNZXNzYWdlOiBzdHJpbmcsIG9wdGlvbnM/OiBDb21tb25zRXJyb3JCYXNlT3B0aW9ucyk6IG5ldmVyIHtcbiAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoZXJyb3JNZXNzYWdlLCBvcHRpb25zKTtcbn1cblxuZXhwb3J0IHR5cGUgRXJyb3JUb1N0cmluZ09wdGlvbnNUeXBlID0gRXJyb3JUb1N0cmluZ09wdGlvbnNCYXNlVHlwZSAmXG4gICAgSHR0cEVycm9yUmVzcG9uc2VUb1N0cmluZ09wdGlvbnNUeXBlICZcbiAgICBBY3Rpb25FcnJvckNvbnRleHRUb1N0cmluZ09wdGlvbnNUeXBlICZcbiAgICBFcnJvckNhdXNlVG9TdHJpbmdPcHRpb25zVHlwZSAmIHtcbiAgICAgICAgaGlkZURldGFpbHM/OiBib29sZWFuO1xuICAgICAgICBoaWRlTG9jYXRpb24/OiBib29sZWFuO1xuICAgIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JUb1N0cmluZ09wdGlvbnNCYXNlVHlwZSB7XG4gICAgaGlkZU5hbWU/OiBib29sZWFuO1xuICAgIGhpZGVTdGFjaz86IGJvb2xlYW47XG4gICAgaGlkZUNhdXNlPzogYm9vbGVhbjtcbiAgICBoaWRlSHR0cD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cEVycm9yUmVzcG9uc2VUb1N0cmluZ09wdGlvbnNUeXBlIHtcbiAgICBoaWRlTWVzc2FnZT86IGJvb2xlYW47XG4gICAgaGlkZUhlYWRlcnM/OiBib29sZWFuO1xuICAgIGhpZGVCb2R5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25FcnJvckNvbnRleHRUb1N0cmluZ09wdGlvbnNUeXBlIHtcbiAgICBoaWRlSXRlbXM/OiBib29sZWFuO1xuICAgIGhpZGVBY3Rpb25EYXRhPzogYm9vbGVhbjtcbiAgICBoaWRlUXVlcnlQYXJhbXM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yQ2F1c2VUb1N0cmluZ09wdGlvbnNUeXBlIHtcbiAgICBjYXVzZU9uRXJyb3JPbmx5PzogYm9vbGVhbjtcbiAgICBjYXVzZUFzSnNvbj86IGJvb2xlYW47XG59XG4iXX0=","import { HttpErrorResponse } from '@angular/common/http';\nimport { LoggerService } from '../log/logger.service';\nimport { getErrorLogLevel } from './error-helpers';\nimport { ACommonsErrorBase } from './error.model';\nexport class CommonsErrorHandler {\n constructor() {\n this.logger = LoggerService.get();\n }\n static { this.logCategory = 'ErrorHandler'; }\n handleError(error) {\n if (error instanceof ACommonsErrorBase || error instanceof HttpErrorResponse) {\n const logLevel = getErrorLogLevel(error);\n this.logger.log(error, logLevel);\n }\n else {\n this.logger.error('Unexpected error occurred', error);\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL2Vycm9yL2Vycm9yLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFHdkQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVoRCxNQUFNLE9BQU8sbUJBQW1CO0lBQWhDO1FBRXFCLFdBQU0sR0FBRyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUM7SUFVbEQsQ0FBQzthQVgyQixnQkFBVyxHQUFHLGNBQWMsQUFBakIsQ0FBa0I7SUFHckQsV0FBVyxDQUFDLEtBQVk7UUFDcEIsSUFBSSxLQUFLLFlBQVksaUJBQWlCLElBQUksS0FBSyxZQUFZLGlCQUFpQixFQUFFLENBQUM7WUFDM0UsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUQsQ0FBQztJQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBFcnJvclJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0Vycm9ySGFuZGxlcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vbG9nL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7Z2V0RXJyb3JMb2dMZXZlbH0gZnJvbSAnLi9lcnJvci1oZWxwZXJzJztcbmltcG9ydCB7QUNvbW1vbnNFcnJvckJhc2V9IGZyb20gJy4vZXJyb3IubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgQ29tbW9uc0Vycm9ySGFuZGxlciBpbXBsZW1lbnRzIEVycm9ySGFuZGxlciB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgbG9nQ2F0ZWdvcnkgPSAnRXJyb3JIYW5kbGVyJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IExvZ2dlclNlcnZpY2UuZ2V0KCk7XG5cbiAgICBoYW5kbGVFcnJvcihlcnJvcjogRXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQUNvbW1vbnNFcnJvckJhc2UgfHwgZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc3QgbG9nTGV2ZWwgPSBnZXRFcnJvckxvZ0xldmVsKGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhlcnJvciwgbG9nTGV2ZWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQnLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=","import { booleanAttribute, numberAttribute } from '@angular/core';\nimport { isObservable, of } from 'rxjs';\nimport { CommonsInternalError } from '../error/error.model';\nexport function boolean$Attribute(value) {\n return isObservable(value) ? value : of(booleanAttribute(value));\n}\nexport function booleanOrUndefinedAttribute(value) {\n return typeof value === 'boolean' ? value : value == null ? undefined : value !== 'false';\n}\nexport function number$Attribute(value) {\n return isObservable(value) ? value : of(numberAttribute(value));\n}\nexport const toObservable = (value) => {\n return isObservable(value) ? value : of(value);\n};\nexport const itemIdToNumber = (value) => {\n if (typeof value === 'number') {\n return value;\n }\n else if (typeof value === 'string') {\n const num = +value;\n if (!isNaN(num)) {\n return num;\n }\n throw new CommonsInternalError(`ItemId is a string, but could not be transformed to number: ${value}`);\n }\n else {\n throw new CommonsInternalError(`ItemId is not a number: ${value}`);\n }\n};\nexport const itemIdToString = (value) => {\n if (typeof value === 'string') {\n return value;\n }\n else {\n throw new CommonsInternalError(`ItemId is not a string: ${value}`);\n }\n};\nexport const itemIdToDefined = (value) => {\n if (typeof value === 'undefined') {\n throw new CommonsInternalError(`ItemId is not defined: ${value}`);\n }\n else {\n return value;\n }\n};\nexport const valueToDefined = (value) => {\n if (typeof value === 'undefined' || value === null) {\n throw new CommonsInternalError(`Value is null or not defined: ${value}`);\n }\n else {\n return value;\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lcmNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9oZWxwZXJzL2NvZXJjaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxlQUFlLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFaEUsT0FBTyxFQUFhLFlBQVksRUFBRSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFbEQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFHMUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQWM7SUFDNUMsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFFLEtBQTZCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzlGLENBQUM7QUFFRCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsS0FBYztJQUN0RCxPQUFPLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUM7QUFDOUYsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFjO0lBQzNDLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBRSxLQUE0QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDNUYsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFJLEtBQXdCLEVBQWlCLEVBQUU7SUFDdkUsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFFLEtBQXVCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0RSxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFjLEVBQVUsRUFBRTtJQUNyRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7U0FBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ25DLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNkLE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sSUFBSSxvQkFBb0IsQ0FBQywrREFBK0QsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzRyxDQUFDO1NBQU0sQ0FBQztRQUNKLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQywyQkFBMkIsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN2RSxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBYyxFQUFVLEVBQUU7SUFDckQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM1QixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO1NBQU0sQ0FBQztRQUNKLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQywyQkFBMkIsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN2RSxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBYyxFQUFVLEVBQUU7SUFDdEQsSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUMvQixNQUFNLElBQUksb0JBQW9CLENBQUMsMEJBQTBCLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUksS0FBa0IsRUFBSyxFQUFFO0lBQ3ZELElBQUksT0FBTyxLQUFLLEtBQUssV0FBVyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNqRCxNQUFNLElBQUksb0JBQW9CLENBQUMsaUNBQWlDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDN0UsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtib29sZWFuQXR0cmlidXRlLCBudW1iZXJBdHRyaWJ1dGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge09ic2VydmFibGUsIGlzT2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0NvbW1vbnNJbnRlcm5hbEVycm9yfSBmcm9tICcuLi9lcnJvci9lcnJvci5tb2RlbCc7XG5pbXBvcnQge0lkVHlwZSwgTnVsbGFibGV9IGZyb20gJy4vdHlwZS1oZWxwZXJzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGJvb2xlYW4kQXR0cmlidXRlKHZhbHVlOiB1bmtub3duKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGlzT2JzZXJ2YWJsZSh2YWx1ZSkgPyAodmFsdWUgYXMgT2JzZXJ2YWJsZTxib29sZWFuPikgOiBvZihib29sZWFuQXR0cmlidXRlKHZhbHVlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBib29sZWFuT3JVbmRlZmluZWRBdHRyaWJ1dGUodmFsdWU6IHVua25vd24pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgPyB2YWx1ZSA6IHZhbHVlID09IG51bGwgPyB1bmRlZmluZWQgOiB2YWx1ZSAhPT0gJ2ZhbHNlJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlciRBdHRyaWJ1dGUodmFsdWU6IHVua25vd24pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiBpc09ic2VydmFibGUodmFsdWUpID8gKHZhbHVlIGFzIE9ic2VydmFibGU8bnVtYmVyPikgOiBvZihudW1iZXJBdHRyaWJ1dGUodmFsdWUpKTtcbn1cblxuZXhwb3J0IGNvbnN0IHRvT2JzZXJ2YWJsZSA9IDxUPih2YWx1ZTogVCB8IE9ic2VydmFibGU8VD4pOiBPYnNlcnZhYmxlPFQ+ID0+IHtcbiAgICByZXR1cm4gaXNPYnNlcnZhYmxlKHZhbHVlKSA/ICh2YWx1ZSBhcyBPYnNlcnZhYmxlPFQ+KSA6IG9mKHZhbHVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpdGVtSWRUb051bWJlciA9ICh2YWx1ZT86IElkVHlwZSk6IG51bWJlciA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBudW0gPSArdmFsdWU7XG4gICAgICAgIGlmICghaXNOYU4obnVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEl0ZW1JZCBpcyBhIHN0cmluZywgYnV0IGNvdWxkIG5vdCBiZSB0cmFuc2Zvcm1lZCB0byBudW1iZXI6ICR7dmFsdWV9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBJdGVtSWQgaXMgbm90IGEgbnVtYmVyOiAke3ZhbHVlfWApO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpdGVtSWRUb1N0cmluZyA9ICh2YWx1ZT86IElkVHlwZSk6IHN0cmluZyA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgSXRlbUlkIGlzIG5vdCBhIHN0cmluZzogJHt2YWx1ZX1gKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXRlbUlkVG9EZWZpbmVkID0gKHZhbHVlPzogSWRUeXBlKTogSWRUeXBlID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEl0ZW1JZCBpcyBub3QgZGVmaW5lZDogJHt2YWx1ZX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHZhbHVlVG9EZWZpbmVkID0gPFQ+KHZhbHVlOiBOdWxsYWJsZTxUPik6IFQgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgVmFsdWUgaXMgbnVsbCBvciBub3QgZGVmaW5lZDogJHt2YWx1ZX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufTtcbiJdfQ==","/**\n * Displays a toast notification message with a specified severity level and optional customization. Presets the life of message and requires message.\n *\n * @param {string} message - The content of the toast message to be displayed.\n * @param {'success' | 'warn' | 'warning' | 'error'} [severity='success'] - The severity level of the message.\n * @param {ToastMessageOptsType} [opts] - Optional configuration for the toast message, which can include a title, icon, and message service for displaying the notification. If message service is provided, the message will be automatically added.\n * @return {Message} - The notification message object created for the toast.\n */\nexport function toastMessage(message, severity = 'success', opts) {\n switch (severity) {\n case 'warning':\n // primeng does not support 'warning', must be 'warn'\n severity = 'warn';\n break;\n }\n const notification = { severity: severity, summary: opts?.title, detail: message, life: severity === 'error' ? 10_000 : 5000, icon: opts?.icon };\n // it will only be added if message service is provided, otherwise provide manually\n opts?.messageService?.add(notification);\n return notification;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvaGVscGVycy9ub3RpZmljYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUE7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsT0FBZSxFQUFFLFdBQXFELFNBQVMsRUFBRSxJQUEyQjtJQUNySSxRQUFRLFFBQVEsRUFBRSxDQUFDO1FBQ2YsS0FBSyxTQUFTO1lBQ1YscURBQXFEO1lBQ3JELFFBQVEsR0FBRyxNQUFNLENBQUM7WUFDbEIsTUFBTTtJQUNkLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBd0IsRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFDcEssbUZBQW1GO0lBQ25GLElBQUksRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sWUFBWSxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01lc3NhZ2VTZXJ2aWNlLCBUb2FzdE1lc3NhZ2VPcHRpb25zfSBmcm9tICdwcmltZW5nL2FwaSc7XG5cbnR5cGUgVG9hc3RNZXNzYWdlT3B0c1R5cGUgPSB7XG4gICAgbWVzc2FnZVNlcnZpY2U/OiBNZXNzYWdlU2VydmljZTtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICBzdGlja3k/OiBib29sZWFuO1xuICAgIGNsb3NhYmxlPzogYm9vbGVhbjtcbiAgICBpY29uPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBEaXNwbGF5cyBhIHRvYXN0IG5vdGlmaWNhdGlvbiBtZXNzYWdlIHdpdGggYSBzcGVjaWZpZWQgc2V2ZXJpdHkgbGV2ZWwgYW5kIG9wdGlvbmFsIGN1c3RvbWl6YXRpb24uIFByZXNldHMgdGhlIGxpZmUgb2YgbWVzc2FnZSBhbmQgcmVxdWlyZXMgbWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBjb250ZW50IG9mIHRoZSB0b2FzdCBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZC5cbiAqIEBwYXJhbSB7J3N1Y2Nlc3MnIHwgJ3dhcm4nIHwgJ3dhcm5pbmcnIHwgJ2Vycm9yJ30gW3NldmVyaXR5PSdzdWNjZXNzJ10gLSBUaGUgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge1RvYXN0TWVzc2FnZU9wdHNUeXBlfSBbb3B0c10gLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgdG9hc3QgbWVzc2FnZSwgd2hpY2ggY2FuIGluY2x1ZGUgYSB0aXRsZSwgaWNvbiwgYW5kIG1lc3NhZ2Ugc2VydmljZSBmb3IgZGlzcGxheWluZyB0aGUgbm90aWZpY2F0aW9uLiBJZiBtZXNzYWdlIHNlcnZpY2UgaXMgcHJvdmlkZWQsIHRoZSBtZXNzYWdlIHdpbGwgYmUgYXV0b21hdGljYWxseSBhZGRlZC5cbiAqIEByZXR1cm4ge01lc3NhZ2V9IC0gVGhlIG5vdGlmaWNhdGlvbiBtZXNzYWdlIG9iamVjdCBjcmVhdGVkIGZvciB0aGUgdG9hc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2FzdE1lc3NhZ2UobWVzc2FnZTogc3RyaW5nLCBzZXZlcml0eTogJ3N1Y2Nlc3MnIHwgJ3dhcm4nIHwgJ3dhcm5pbmcnIHwgJ2Vycm9yJyA9ICdzdWNjZXNzJywgb3B0cz86IFRvYXN0TWVzc2FnZU9wdHNUeXBlKTogVG9hc3RNZXNzYWdlT3B0aW9ucyB7XG4gICAgc3dpdGNoIChzZXZlcml0eSkge1xuICAgICAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgICAgICAgIC8vIHByaW1lbmcgZG9lcyBub3Qgc3VwcG9ydCAnd2FybmluZycsIG11c3QgYmUgJ3dhcm4nXG4gICAgICAgICAgICBzZXZlcml0eSA9ICd3YXJuJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbjogVG9hc3RNZXNzYWdlT3B0aW9ucyA9IHtzZXZlcml0eTogc2V2ZXJpdHksIHN1bW1hcnk6IG9wdHM/LnRpdGxlLCBkZXRhaWw6IG1lc3NhZ2UsIGxpZmU6IHNldmVyaXR5ID09PSAnZXJyb3InID8gMTBfMDAwIDogNTAwMCwgaWNvbjogb3B0cz8uaWNvbn07XG4gICAgLy8gaXQgd2lsbCBvbmx5IGJlIGFkZGVkIGlmIG1lc3NhZ2Ugc2VydmljZSBpcyBwcm92aWRlZCwgb3RoZXJ3aXNlIHByb3ZpZGUgbWFudWFsbHlcbiAgICBvcHRzPy5tZXNzYWdlU2VydmljZT8uYWRkKG5vdGlmaWNhdGlvbik7XG4gICAgcmV0dXJuIG5vdGlmaWNhdGlvbjtcbn1cbiJdfQ==","export function fromAngularNumberFormatToFractions(format) {\n const hasDot = format.indexOf('.') >= 0;\n const hasDash = format.indexOf('-') >= 0;\n const [intPart, decPart] = format.split('.');\n let int = hasDot || (!hasDot && !hasDash) ? +intPart : 1;\n if (!int || isNaN(int))\n int = 1;\n let [fractionsMin, fractionsMax] = !hasDot && !hasDash ? [0, 0] : (hasDot ? decPart : intPart).split('-').map(f => +f);\n if (isNaN(fractionsMin))\n fractionsMin = 0;\n if (fractionsMax == null || isNaN(fractionsMax))\n fractionsMax = fractionsMin;\n return {\n integer: int,\n fractionsMin: fractionsMin,\n fractionsMax: fractionsMax\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvaGVscGVycy9udW1iZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLGtDQUFrQyxDQUFDLE1BQWM7SUFLN0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLElBQUksR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekQsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNoQyxJQUFJLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkgsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQUUsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUMxQyxJQUFJLFlBQVksSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQztRQUFFLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDN0UsT0FBTztRQUNILE9BQU8sRUFBRSxHQUFHO1FBQ1osWUFBWSxFQUFFLFlBQVk7UUFDMUIsWUFBWSxFQUFFLFlBQVk7S0FDN0IsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZnJvbUFuZ3VsYXJOdW1iZXJGb3JtYXRUb0ZyYWN0aW9ucyhmb3JtYXQ6IHN0cmluZyk6IHtcbiAgICBpbnRlZ2VyOiBudW1iZXI7XG4gICAgZnJhY3Rpb25zTWluOiBudW1iZXI7XG4gICAgZnJhY3Rpb25zTWF4OiBudW1iZXI7XG59IHtcbiAgICBjb25zdCBoYXNEb3QgPSBmb3JtYXQuaW5kZXhPZignLicpID49IDA7XG4gICAgY29uc3QgaGFzRGFzaCA9IGZvcm1hdC5pbmRleE9mKCctJykgPj0gMDtcbiAgICBjb25zdCBbaW50UGFydCwgZGVjUGFydF0gPSBmb3JtYXQuc3BsaXQoJy4nKTtcbiAgICBsZXQgaW50ID0gaGFzRG90IHx8ICghaGFzRG90ICYmICFoYXNEYXNoKSA/ICtpbnRQYXJ0IDogMTtcbiAgICBpZiAoIWludCB8fCBpc05hTihpbnQpKSBpbnQgPSAxO1xuICAgIGxldCBbZnJhY3Rpb25zTWluLCBmcmFjdGlvbnNNYXhdID0gIWhhc0RvdCAmJiAhaGFzRGFzaCA/IFswLCAwXSA6IChoYXNEb3QgPyBkZWNQYXJ0IDogaW50UGFydCkuc3BsaXQoJy0nKS5tYXAoZiA9PiArZik7XG4gICAgaWYgKGlzTmFOKGZyYWN0aW9uc01pbikpIGZyYWN0aW9uc01pbiA9IDA7XG4gICAgaWYgKGZyYWN0aW9uc01heCA9PSBudWxsIHx8IGlzTmFOKGZyYWN0aW9uc01heCkpIGZyYWN0aW9uc01heCA9IGZyYWN0aW9uc01pbjtcbiAgICByZXR1cm4ge1xuICAgICAgICBpbnRlZ2VyOiBpbnQsXG4gICAgICAgIGZyYWN0aW9uc01pbjogZnJhY3Rpb25zTWluLFxuICAgICAgICBmcmFjdGlvbnNNYXg6IGZyYWN0aW9uc01heFxuICAgIH07XG59XG4iXX0=","import { CommonsInternalError } from '../error/error.model';\nexport function removeRouteEmptyPathSegments(path) {\n const filteredPath = path.filter(ps => typeof ps === 'string' && ps.length > 0);\n return filteredPath.length > 0 ? filteredPath : [''];\n}\nexport function appendRoutePathToBasePath(basePath, path) {\n if (path.length > 0) {\n if (path[0].startsWith('/')) {\n return path;\n }\n else if (path[0].startsWith('../')) {\n throw new CommonsInternalError('Not implemented', { name: 'RouteUtilsError' });\n }\n else {\n return removeRouteEmptyPathSegments([...basePath, ...path]);\n }\n }\n else {\n return basePath;\n }\n}\nexport function doesUrlMatchRouterLink(link, url) {\n if (typeof url === 'string' && url.startsWith('/')) {\n url = url.substring(1);\n }\n else if (Array.isArray(url) && url.length > 0 && url[0].startsWith('/')) {\n url[0] = url[0].substring(1);\n }\n const routeSegments = Array.isArray(link) ? link : link.split('/');\n const urlSegments = Array.isArray(url) ? url : url.split('#')[0].split('?')[0].split('/');\n if (routeSegments.length > 0 && urlSegments.length > 0) {\n for (let i = 0; i < routeSegments.length; i++) {\n if (i < urlSegments.length) {\n if (routeSegments[i] !== urlSegments[i]) {\n return false;\n }\n }\n else {\n break;\n }\n }\n return true;\n }\n return false;\n}\nexport function adjustRouteMenuLazyChildrenRouterLinks(rootMenuItem, lazyChildren) {\n return lazyChildren.map(i => {\n const childMenuItem = { ...i };\n if (childMenuItem.routerLink) {\n childMenuItem.routerLink = appendRoutePathToBasePath(rootMenuItem.routerLink, typeof childMenuItem.routerLink === 'string' ? [childMenuItem.routerLink] : childMenuItem.routerLink);\n }\n if (Array.isArray(childMenuItem.items)) {\n childMenuItem.items = adjustRouteMenuLazyChildrenRouterLinks(rootMenuItem, childMenuItem.items);\n }\n return childMenuItem;\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9oZWxwZXJzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRzFELE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxJQUFtQjtJQUM1RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssUUFBUSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEYsT0FBTyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCLENBQUMsUUFBdUIsRUFBRSxJQUFtQjtJQUNsRixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxpQkFBaUIsRUFBRSxFQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBQyxDQUFDLENBQUM7UUFDakYsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLDRCQUE0QixDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7SUFDTCxDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLElBQTRCLEVBQUUsR0FBMkI7SUFDNUYsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2pELEdBQUcsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7U0FBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3hFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkUsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFMUYsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3JELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN6QixJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDdEMsT0FBTyxLQUFLLENBQUM7Z0JBQ2pCLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osTUFBTTtZQUNWLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxNQUFNLFVBQVUsc0NBQXNDLENBQUMsWUFBcUQsRUFBRSxZQUFvQztJQUM5SSxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDeEIsTUFBTSxhQUFhLEdBQUcsRUFBQyxHQUFHLENBQUMsRUFBQyxDQUFDO1FBQzdCLElBQUksYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNCLGFBQWEsQ0FBQyxVQUFVLEdBQUcseUJBQXlCLENBQ2hELFlBQVksQ0FBQyxVQUFVLEVBQ3ZCLE9BQU8sYUFBYSxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUN2RyxDQUFDO1FBQ04sQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxhQUFhLENBQUMsS0FBSyxHQUFHLHNDQUFzQyxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEcsQ0FBQztRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TWVudUl0ZW0gYXMgUHJpbWVNZW51SXRlbX0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5pbXBvcnQge0NvbW1vbnNJbnRlcm5hbEVycm9yfSBmcm9tICcuLi9lcnJvci9lcnJvci5tb2RlbCc7XG5pbXBvcnQge0NvbW1vbnNNZW51SXRlbSwgSW50ZXJuYWxDb21tb25zTWVudUl0ZW19IGZyb20gJy4uL21vZGVscy9tZW51Lm1vZGVsJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVJvdXRlRW1wdHlQYXRoU2VnbWVudHMocGF0aDogQXJyYXk8c3RyaW5nPikge1xuICAgIGNvbnN0IGZpbHRlcmVkUGF0aCA9IHBhdGguZmlsdGVyKHBzID0+IHR5cGVvZiBwcyA9PT0gJ3N0cmluZycgJiYgcHMubGVuZ3RoID4gMCk7XG4gICAgcmV0dXJuIGZpbHRlcmVkUGF0aC5sZW5ndGggPiAwID8gZmlsdGVyZWRQYXRoIDogWycnXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZFJvdXRlUGF0aFRvQmFzZVBhdGgoYmFzZVBhdGg6IEFycmF5PHN0cmluZz4sIHBhdGg6IEFycmF5PHN0cmluZz4pIHtcbiAgICBpZiAocGF0aC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChwYXRoWzBdLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICAgIH0gZWxzZSBpZiAocGF0aFswXS5zdGFydHNXaXRoKCcuLi8nKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnLCB7bmFtZTogJ1JvdXRlVXRpbHNFcnJvcid9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZW1vdmVSb3V0ZUVtcHR5UGF0aFNlZ21lbnRzKFsuLi5iYXNlUGF0aCwgLi4ucGF0aF0pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJhc2VQYXRoO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvZXNVcmxNYXRjaFJvdXRlckxpbmsobGluazogQXJyYXk8c3RyaW5nPiB8IHN0cmluZywgdXJsOiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnICYmIHVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgdXJsID0gdXJsLnN1YnN0cmluZygxKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodXJsKSAmJiB1cmwubGVuZ3RoID4gMCAmJiB1cmxbMF0uc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIHVybFswXSA9IHVybFswXS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm91dGVTZWdtZW50cyA9IEFycmF5LmlzQXJyYXkobGluaykgPyBsaW5rIDogbGluay5zcGxpdCgnLycpO1xuICAgIGNvbnN0IHVybFNlZ21lbnRzID0gQXJyYXkuaXNBcnJheSh1cmwpID8gdXJsIDogdXJsLnNwbGl0KCcjJylbMF0uc3BsaXQoJz8nKVswXS5zcGxpdCgnLycpO1xuXG4gICAgaWYgKHJvdXRlU2VnbWVudHMubGVuZ3RoID4gMCAmJiB1cmxTZWdtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm91dGVTZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgPCB1cmxTZWdtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAocm91dGVTZWdtZW50c1tpXSAhPT0gdXJsU2VnbWVudHNbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkanVzdFJvdXRlTWVudUxhenlDaGlsZHJlblJvdXRlckxpbmtzKHJvb3RNZW51SXRlbTogUHJpbWVNZW51SXRlbSB8IEludGVybmFsQ29tbW9uc01lbnVJdGVtLCBsYXp5Q2hpbGRyZW46IEFycmF5PENvbW1vbnNNZW51SXRlbT4pIHtcbiAgICByZXR1cm4gbGF6eUNoaWxkcmVuLm1hcChpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGRNZW51SXRlbSA9IHsuLi5pfTtcbiAgICAgICAgaWYgKGNoaWxkTWVudUl0ZW0ucm91dGVyTGluaykge1xuICAgICAgICAgICAgY2hpbGRNZW51SXRlbS5yb3V0ZXJMaW5rID0gYXBwZW5kUm91dGVQYXRoVG9CYXNlUGF0aChcbiAgICAgICAgICAgICAgICByb290TWVudUl0ZW0ucm91dGVyTGluayxcbiAgICAgICAgICAgICAgICB0eXBlb2YgY2hpbGRNZW51SXRlbS5yb3V0ZXJMaW5rID09PSAnc3RyaW5nJyA/IFtjaGlsZE1lbnVJdGVtLnJvdXRlckxpbmtdIDogY2hpbGRNZW51SXRlbS5yb3V0ZXJMaW5rXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkTWVudUl0ZW0uaXRlbXMpKSB7XG4gICAgICAgICAgICBjaGlsZE1lbnVJdGVtLml0ZW1zID0gYWRqdXN0Um91dGVNZW51TGF6eUNoaWxkcmVuUm91dGVyTGlua3Mocm9vdE1lbnVJdGVtLCBjaGlsZE1lbnVJdGVtLml0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hpbGRNZW51SXRlbTtcbiAgICB9KTtcbn1cbiJdfQ==","export function findTemplateByName(templates, name) {\n return templates.find(t => t.name() === name)?.template ?? null;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvaGVscGVycy90ZW1wbGF0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxVQUFVLGtCQUFrQixDQUFvQixTQUF3QyxFQUFFLElBQWM7SUFDMUcsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUM7QUFDcEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VGVtcGxhdGVSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1RlbXBsYXRlRGlyZWN0aXZlfSBmcm9tICcuLi9kaXJlY3RpdmVzL3RlbXBsYXRlLmRpcmVjdGl2ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVGVtcGxhdGVCeU5hbWU8TmFtZVR5cGUgPSBzdHJpbmc+KHRlbXBsYXRlczogVGVtcGxhdGVEaXJlY3RpdmU8TmFtZVR5cGU+W10sIG5hbWU6IE5hbWVUeXBlKTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwge1xuICAgIHJldHVybiB0ZW1wbGF0ZXMuZmluZCh0ID0+IHQubmFtZSgpID09PSBuYW1lKT8udGVtcGxhdGUgPz8gbnVsbDtcbn1cbiJdfQ==","import { map } from 'rxjs/operators';\nexport function getI18nAsync(translate, params, ...keys) {\n return translate.stream(keys, params).pipe(map((i18n) => selectI18n(keys, i18n)));\n}\nexport function getI18n(translate, params, ...keys) {\n const i18n = translate.instant(keys, params);\n return selectI18n(keys, i18n);\n}\nexport function populateI18nParams(item, params = {}) {\n const paramsRes = { ...params };\n if (item) {\n paramsRes.item = item;\n }\n return paramsRes;\n}\nexport function selectI18n(keys, i18n) {\n for (const key of keys) {\n const i18nForKey = narrowI18nToTranslation(i18n, key);\n if (key !== i18nForKey) {\n return i18nForKey ?? null;\n }\n }\n return null;\n}\nexport function narrowI18nToTranslation(i18n, keyOrIdx) {\n if (i18n == null) {\n return undefined;\n }\n else if (Array.isArray(i18n)) {\n return typeof keyOrIdx === 'number' ? narrowI18nToTranslation(i18n[keyOrIdx]) : undefined;\n }\n else if (typeof i18n === 'object') {\n return keyOrIdx != null ? narrowI18nToTranslation(i18n[keyOrIdx]) : undefined;\n }\n else {\n return i18n;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi1jb21tb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9pMThuL2kxOG4tY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuQyxNQUFNLFVBQVUsWUFBWSxDQUFDLFNBQTJCLEVBQUUsTUFBWSxFQUFFLEdBQUcsSUFBbUI7SUFDMUYsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBdUIsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekcsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsU0FBMkIsRUFBRSxNQUFZLEVBQUUsR0FBRyxJQUFtQjtJQUNyRixNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM3QyxPQUFPLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxJQUFVLEVBQUUsU0FBYyxFQUFFO0lBQzNELE1BQU0sU0FBUyxHQUFHLEVBQUMsR0FBRyxNQUFNLEVBQUMsQ0FBQztJQUM5QixJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1AsU0FBUyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFDLElBQWMsRUFBRSxJQUFpQjtJQUN4RCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3JCLE1BQU0sVUFBVSxHQUFHLHVCQUF1QixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0RCxJQUFJLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNyQixPQUFPLFVBQVUsSUFBSSxJQUFJLENBQUM7UUFDOUIsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxVQUFVLHVCQUF1QixDQUFDLElBQXVCLEVBQUUsUUFBMEI7SUFDdkYsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDZixPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO1NBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDN0IsT0FBTyxPQUFPLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDOUYsQ0FBQztTQUFNLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbEMsT0FBTyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2xGLENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1N0cmljdFRyYW5zbGF0aW9uLCBUcmFuc2xhdGVTZXJ2aWNlLCBUcmFuc2xhdGlvbiwgVHJhbnNsYXRpb25PYmplY3R9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJMThuQXN5bmModHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBwYXJhbXM/OiBhbnksIC4uLmtleXM6IEFycmF5PHN0cmluZz4pOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gdHJhbnNsYXRlLnN0cmVhbShrZXlzLCBwYXJhbXMpLnBpcGUobWFwKChpMThuOiBUcmFuc2xhdGlvbk9iamVjdCkgPT4gc2VsZWN0STE4bihrZXlzLCBpMThuKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4bih0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHBhcmFtcz86IGFueSwgLi4ua2V5czogQXJyYXk8c3RyaW5nPik6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGkxOG4gPSB0cmFuc2xhdGUuaW5zdGFudChrZXlzLCBwYXJhbXMpO1xuICAgIHJldHVybiBzZWxlY3RJMThuKGtleXMsIGkxOG4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wdWxhdGVJMThuUGFyYW1zKGl0ZW0/OiBhbnksIHBhcmFtczogYW55ID0ge30pIHtcbiAgICBjb25zdCBwYXJhbXNSZXMgPSB7Li4ucGFyYW1zfTtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgICBwYXJhbXNSZXMuaXRlbSA9IGl0ZW07XG4gICAgfVxuICAgIHJldHVybiBwYXJhbXNSZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RJMThuKGtleXM6IHN0cmluZ1tdLCBpMThuOiBUcmFuc2xhdGlvbik6IHN0cmluZyB8IG51bGwge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgY29uc3QgaTE4bkZvcktleSA9IG5hcnJvd0kxOG5Ub1RyYW5zbGF0aW9uKGkxOG4sIGtleSk7XG4gICAgICAgIGlmIChrZXkgIT09IGkxOG5Gb3JLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBpMThuRm9yS2V5ID8/IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYXJyb3dJMThuVG9UcmFuc2xhdGlvbihpMThuOiBTdHJpY3RUcmFuc2xhdGlvbiwga2V5T3JJZHg/OiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmIChpMThuID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaTE4bikpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBrZXlPcklkeCA9PT0gJ251bWJlcicgPyBuYXJyb3dJMThuVG9UcmFuc2xhdGlvbihpMThuW2tleU9ySWR4XSkgOiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaTE4biA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGtleU9ySWR4ICE9IG51bGwgPyBuYXJyb3dJMThuVG9UcmFuc2xhdGlvbihpMThuW2tleU9ySWR4XSkgOiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGkxOG47XG4gICAgfVxufVxuIl19","import { getHttpErrorResponse, isHttpErrorResponse } from '../error/error-helpers';\nimport { getI18n } from './i18n-common';\nexport function getI18nForError(translate, error, params = {}) {\n const i18nParams = getI18nErrorParams(error, params);\n // try to get message code from code or http status\n const messageCode = error['messageCode'] ?? i18nParams.httpStatus;\n if (messageCode) {\n const keys = [`errors.${messageCode}`, `messages.${messageCode}`];\n const i18n = getI18n(translate, i18nParams, ...keys);\n if (i18n) {\n return i18n;\n }\n }\n return getI18n(translate, i18nParams, error.message);\n}\nexport function getI18nErrorParams(error, params = {}) {\n const paramsRes = { ...params };\n if (isHttpErrorResponse(error)) {\n const httpError = getHttpErrorResponse(error);\n paramsRes.httpUrl = httpError?.url;\n paramsRes.httpStatus = httpError?.status;\n paramsRes.httpMessage = httpError?.message;\n paramsRes.httpStatusText = httpError?.statusText;\n }\n paramsRes.message = error.message;\n paramsRes.error = error;\n return paramsRes;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi1lcnJvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL2kxOG4vaTE4bi1lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXRDLE1BQU0sVUFBVSxlQUFlLENBQUMsU0FBMkIsRUFBRSxLQUFZLEVBQUUsU0FBYyxFQUFFO0lBQ3ZGLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyRCxtREFBbUQ7SUFDbkQsTUFBTSxXQUFXLEdBQUksS0FBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUM7SUFDM0UsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNkLE1BQU0sSUFBSSxHQUFHLENBQUMsVUFBVSxXQUFXLEVBQUUsRUFBRSxZQUFZLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDbEUsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNyRCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1AsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQVksRUFBRSxTQUFjLEVBQUU7SUFDN0QsTUFBTSxTQUFTLEdBQUcsRUFBQyxHQUFHLE1BQU0sRUFBQyxDQUFDO0lBRTlCLElBQUksbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM3QixNQUFNLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxTQUFTLENBQUMsT0FBTyxHQUFHLFNBQVMsRUFBRSxHQUFHLENBQUM7UUFDbkMsU0FBUyxDQUFDLFVBQVUsR0FBRyxTQUFTLEVBQUUsTUFBTSxDQUFDO1FBQ3pDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsU0FBUyxFQUFFLE9BQU8sQ0FBQztRQUMzQyxTQUFTLENBQUMsY0FBYyxHQUFHLFNBQVMsRUFBRSxVQUFVLENBQUM7SUFDckQsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUNsQyxTQUFTLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUN4QixPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW1wb3J0IHtnZXRIdHRwRXJyb3JSZXNwb25zZSwgaXNIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSAnLi4vZXJyb3IvZXJyb3ItaGVscGVycyc7XG5pbXBvcnQge2dldEkxOG59IGZyb20gJy4vaTE4bi1jb21tb24nO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4bkZvckVycm9yKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgZXJyb3I6IEVycm9yLCBwYXJhbXM6IGFueSA9IHt9KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgaTE4blBhcmFtcyA9IGdldEkxOG5FcnJvclBhcmFtcyhlcnJvciwgcGFyYW1zKTtcbiAgICAvLyB0cnkgdG8gZ2V0IG1lc3NhZ2UgY29kZSBmcm9tIGNvZGUgb3IgaHR0cCBzdGF0dXNcbiAgICBjb25zdCBtZXNzYWdlQ29kZSA9IChlcnJvciBhcyBhbnkpWydtZXNzYWdlQ29kZSddID8/IGkxOG5QYXJhbXMuaHR0cFN0YXR1cztcbiAgICBpZiAobWVzc2FnZUNvZGUpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IFtgZXJyb3JzLiR7bWVzc2FnZUNvZGV9YCwgYG1lc3NhZ2VzLiR7bWVzc2FnZUNvZGV9YF07XG4gICAgICAgIGNvbnN0IGkxOG4gPSBnZXRJMThuKHRyYW5zbGF0ZSwgaTE4blBhcmFtcywgLi4ua2V5cyk7XG4gICAgICAgIGlmIChpMThuKSB7XG4gICAgICAgICAgICByZXR1cm4gaTE4bjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZ2V0STE4bih0cmFuc2xhdGUsIGkxOG5QYXJhbXMsIGVycm9yLm1lc3NhZ2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4bkVycm9yUGFyYW1zKGVycm9yOiBFcnJvciwgcGFyYW1zOiBhbnkgPSB7fSkge1xuICAgIGNvbnN0IHBhcmFtc1JlcyA9IHsuLi5wYXJhbXN9O1xuXG4gICAgaWYgKGlzSHR0cEVycm9yUmVzcG9uc2UoZXJyb3IpKSB7XG4gICAgICAgIGNvbnN0IGh0dHBFcnJvciA9IGdldEh0dHBFcnJvclJlc3BvbnNlKGVycm9yKTtcbiAgICAgICAgcGFyYW1zUmVzLmh0dHBVcmwgPSBodHRwRXJyb3I/LnVybDtcbiAgICAgICAgcGFyYW1zUmVzLmh0dHBTdGF0dXMgPSBodHRwRXJyb3I/LnN0YXR1cztcbiAgICAgICAgcGFyYW1zUmVzLmh0dHBNZXNzYWdlID0gaHR0cEVycm9yPy5tZXNzYWdlO1xuICAgICAgICBwYXJhbXNSZXMuaHR0cFN0YXR1c1RleHQgPSBodHRwRXJyb3I/LnN0YXR1c1RleHQ7XG4gICAgfVxuXG4gICAgcGFyYW1zUmVzLm1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgIHBhcmFtc1Jlcy5lcnJvciA9IGVycm9yO1xuICAgIHJldHVybiBwYXJhbXNSZXM7XG59XG4iXX0=","import { of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { getI18n, getI18nAsync, populateI18nParams } from './i18n-common';\nexport function getI18nTypeNameAsync(translate, typeName, singular) {\n const keys = getI18nTypeNameKeys(typeName, singular);\n return getI18nAsync(translate, undefined, ...keys);\n}\nexport function getI18nTypeName(translate, typeName, singular) {\n const keys = getI18nTypeNameKeys(typeName, singular);\n return getI18n(translate, undefined, ...keys);\n}\nexport function getI18nTypeTabKey(typeName, tab) {\n return getI18nTypeKeyBasePath(typeName, 'tabs', tab);\n}\nexport function getI18nTypeGroupKey(typeName, group) {\n return getI18nTypeKeyBasePath(typeName, 'groups', group);\n}\nexport function getI18nTypePropertyKey(typeName, property) {\n return getI18nTypeKeyBasePath(typeName, 'properties', property);\n}\nexport function getI18nTypeKeyBasePath(typeName, ...path) {\n return `${typeName.length ? `${typeName}.` : ''}${path.join('.')}`;\n}\nexport function getI18nTypeParams(translate, typeName, item, params = {}) {\n const i18nTypeName = typeName ? getI18nTypeName(translate, typeName, true) : null;\n return populateI18nTypeParams(i18nTypeName ?? undefined, item, params);\n}\nexport function getI18nTypeParamsAsync(translate, typeName, item, params = {}) {\n return (typeName ? getI18nTypeNameAsync(translate, typeName, true) : of(null)).pipe(map(i18nTypeName => populateI18nTypeParams(i18nTypeName ?? undefined, item, params)));\n}\nexport function populateI18nTypeParams(i18nTypeName, item, params = {}) {\n const paramsRes = { ...params };\n if (i18nTypeName) {\n paramsRes.typeName = i18nTypeName;\n }\n return populateI18nParams(item, paramsRes);\n}\nfunction getI18nTypeNameKeys(typeName, singular) {\n const keys = [];\n if (typeof singular !== 'undefined') {\n keys.push(singular ? `${typeName}.nameSingular` : `${typeName}.namePlural`);\n }\n keys.push(`${typeName.length ? `${typeName}.` : ''}name`);\n return keys;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi10eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvaTE4bi9pMThuLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFhLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsT0FBTyxFQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFeEUsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFNBQTJCLEVBQUUsUUFBZ0IsRUFBRSxRQUFrQjtJQUNsRyxNQUFNLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckQsT0FBTyxZQUFZLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLFNBQTJCLEVBQUUsUUFBZ0IsRUFBRSxRQUFrQjtJQUM3RixNQUFNLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckQsT0FBTyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBZ0IsRUFBRSxHQUFXO0lBQzNELE9BQU8sc0JBQXNCLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLFFBQWdCLEVBQUUsS0FBYTtJQUMvRCxPQUFPLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxRQUFnQixFQUFFLFFBQWdCO0lBQ3JFLE9BQU8sc0JBQXNCLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFFBQWdCLEVBQUUsR0FBRyxJQUFtQjtJQUMzRSxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUN2RSxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFNBQTJCLEVBQUUsUUFBaUIsRUFBRSxJQUFVLEVBQUUsU0FBYyxFQUFFO0lBQzFHLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNsRixPQUFPLHNCQUFzQixDQUFDLFlBQVksSUFBSSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsU0FBMkIsRUFBRSxRQUFpQixFQUFFLElBQVUsRUFBRSxTQUFjLEVBQUU7SUFDL0csT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLHNCQUFzQixDQUFDLFlBQVksSUFBSSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5SyxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFlBQXFCLEVBQUUsSUFBVSxFQUFFLFNBQWMsRUFBRTtJQUN0RixNQUFNLFNBQVMsR0FBRyxFQUFDLEdBQUcsTUFBTSxFQUFDLENBQUM7SUFDOUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNmLFNBQVMsQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDO0lBQ3RDLENBQUM7SUFDRCxPQUFPLGtCQUFrQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxRQUFnQixFQUFFLFFBQWtCO0lBQzdELE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNoQixJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsYUFBYSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUNELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBvZn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge2dldEkxOG4sIGdldEkxOG5Bc3luYywgcG9wdWxhdGVJMThuUGFyYW1zfSBmcm9tICcuL2kxOG4tY29tbW9uJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEkxOG5UeXBlTmFtZUFzeW5jKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgdHlwZU5hbWU6IHN0cmluZywgc2luZ3VsYXI/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3Qga2V5cyA9IGdldEkxOG5UeXBlTmFtZUtleXModHlwZU5hbWUsIHNpbmd1bGFyKTtcbiAgICByZXR1cm4gZ2V0STE4bkFzeW5jKHRyYW5zbGF0ZSwgdW5kZWZpbmVkLCAuLi5rZXlzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEkxOG5UeXBlTmFtZSh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHR5cGVOYW1lOiBzdHJpbmcsIHNpbmd1bGFyPzogYm9vbGVhbik6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGtleXMgPSBnZXRJMThuVHlwZU5hbWVLZXlzKHR5cGVOYW1lLCBzaW5ndWxhcik7XG4gICAgcmV0dXJuIGdldEkxOG4odHJhbnNsYXRlLCB1bmRlZmluZWQsIC4uLmtleXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4blR5cGVUYWJLZXkodHlwZU5hbWU6IHN0cmluZywgdGFiOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXRJMThuVHlwZUtleUJhc2VQYXRoKHR5cGVOYW1lLCAndGFicycsIHRhYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJMThuVHlwZUdyb3VwS2V5KHR5cGVOYW1lOiBzdHJpbmcsIGdyb3VwOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXRJMThuVHlwZUtleUJhc2VQYXRoKHR5cGVOYW1lLCAnZ3JvdXBzJywgZ3JvdXApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4blR5cGVQcm9wZXJ0eUtleSh0eXBlTmFtZTogc3RyaW5nLCBwcm9wZXJ0eTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0STE4blR5cGVLZXlCYXNlUGF0aCh0eXBlTmFtZSwgJ3Byb3BlcnRpZXMnLCBwcm9wZXJ0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJMThuVHlwZUtleUJhc2VQYXRoKHR5cGVOYW1lOiBzdHJpbmcsIC4uLnBhdGg6IEFycmF5PHN0cmluZz4pOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0eXBlTmFtZS5sZW5ndGggPyBgJHt0eXBlTmFtZX0uYCA6ICcnfSR7cGF0aC5qb2luKCcuJyl9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEkxOG5UeXBlUGFyYW1zKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgdHlwZU5hbWU/OiBzdHJpbmcsIGl0ZW0/OiBhbnksIHBhcmFtczogYW55ID0ge30pOiBhbnkge1xuICAgIGNvbnN0IGkxOG5UeXBlTmFtZSA9IHR5cGVOYW1lID8gZ2V0STE4blR5cGVOYW1lKHRyYW5zbGF0ZSwgdHlwZU5hbWUsIHRydWUpIDogbnVsbDtcbiAgICByZXR1cm4gcG9wdWxhdGVJMThuVHlwZVBhcmFtcyhpMThuVHlwZU5hbWUgPz8gdW5kZWZpbmVkLCBpdGVtLCBwYXJhbXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4blR5cGVQYXJhbXNBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHR5cGVOYW1lPzogc3RyaW5nLCBpdGVtPzogYW55LCBwYXJhbXM6IGFueSA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gKHR5cGVOYW1lID8gZ2V0STE4blR5cGVOYW1lQXN5bmModHJhbnNsYXRlLCB0eXBlTmFtZSwgdHJ1ZSkgOiBvZihudWxsKSkucGlwZShtYXAoaTE4blR5cGVOYW1lID0+IHBvcHVsYXRlSTE4blR5cGVQYXJhbXMoaTE4blR5cGVOYW1lID8/IHVuZGVmaW5lZCwgaXRlbSwgcGFyYW1zKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wdWxhdGVJMThuVHlwZVBhcmFtcyhpMThuVHlwZU5hbWU/OiBzdHJpbmcsIGl0ZW0/OiBhbnksIHBhcmFtczogYW55ID0ge30pOiBhbnkge1xuICAgIGNvbnN0IHBhcmFtc1JlcyA9IHsuLi5wYXJhbXN9O1xuICAgIGlmIChpMThuVHlwZU5hbWUpIHtcbiAgICAgICAgcGFyYW1zUmVzLnR5cGVOYW1lID0gaTE4blR5cGVOYW1lO1xuICAgIH1cbiAgICByZXR1cm4gcG9wdWxhdGVJMThuUGFyYW1zKGl0ZW0sIHBhcmFtc1Jlcyk7XG59XG5cbmZ1bmN0aW9uIGdldEkxOG5UeXBlTmFtZUtleXModHlwZU5hbWU6IHN0cmluZywgc2luZ3VsYXI/OiBib29sZWFuKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgY29uc3Qga2V5cyA9IFtdO1xuICAgIGlmICh0eXBlb2Ygc2luZ3VsYXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGtleXMucHVzaChzaW5ndWxhciA/IGAke3R5cGVOYW1lfS5uYW1lU2luZ3VsYXJgIDogYCR7dHlwZU5hbWV9Lm5hbWVQbHVyYWxgKTtcbiAgICB9XG4gICAga2V5cy5wdXNoKGAke3R5cGVOYW1lLmxlbmd0aCA/IGAke3R5cGVOYW1lfS5gIDogJyd9bmFtZWApO1xuICAgIHJldHVybiBrZXlzO1xufVxuIl19","/* eslint-disable no-console */\nimport { getErrorName } from '../error/error-helpers';\nimport { LogLevelEnum } from './log.model';\nexport class LogPublisherConsoleService {\n addEntry(entry) {\n let prefix = `${entry.timestampFormatted}`;\n if (entry.category)\n prefix += ` [${entry.category}]`;\n prefix += ':';\n const message = `${entry.message}${entry.messageDetails ? `\\n${entry.messageDetails}` : ''}`;\n const logParams = [prefix, message];\n if (entry.error) {\n logParams.push(`\\n${getErrorName(entry.error)}:`, entry.error);\n }\n if (entry.data?.length) {\n logParams.push(`\\nData:\\n`, ...entry.data);\n }\n switch (entry.level) {\n case LogLevelEnum.Trace:\n console.trace(...logParams);\n break;\n case LogLevelEnum.Debug:\n console.debug(...logParams);\n break;\n case LogLevelEnum.Log:\n console.log(...logParams);\n break;\n case LogLevelEnum.Info:\n console.info(...logParams);\n break;\n case LogLevelEnum.Warning:\n console.warn(...logParams);\n break;\n case LogLevelEnum.Error:\n console.error(...logParams);\n break;\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLXB1Ymxpc2hlci1jb25zb2xlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9sb2cvbG9nLXB1Ymxpc2hlci1jb25zb2xlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQTBCLFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUVsRSxNQUFNLE9BQU8sMEJBQTBCO0lBQ25DLFFBQVEsQ0FBQyxLQUFlO1FBQ3BCLElBQUksTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0MsSUFBSSxLQUFLLENBQUMsUUFBUTtZQUFFLE1BQU0sSUFBSSxLQUFLLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQztRQUNyRCxNQUFNLElBQUksR0FBRyxDQUFDO1FBRWQsTUFBTSxPQUFPLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM3RixNQUFNLFNBQVMsR0FBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNkLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDckIsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUVELFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xCLEtBQUssWUFBWSxDQUFDLEtBQUs7Z0JBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztnQkFDNUIsTUFBTTtZQUNWLEtBQUssWUFBWSxDQUFDLEtBQUs7Z0JBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztnQkFDNUIsTUFBTTtZQUNWLEtBQUssWUFBWSxDQUFDLEdBQUc7Z0JBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztnQkFDMUIsTUFBTTtZQUNWLEtBQUssWUFBWSxDQUFDLElBQUk7Z0JBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztnQkFDM0IsTUFBTTtZQUNWLEtBQUssWUFBWSxDQUFDLE9BQU87Z0JBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztnQkFDM0IsTUFBTTtZQUNWLEtBQUssWUFBWSxDQUFDLEtBQUs7Z0JBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztnQkFDNUIsTUFBTTtRQUNkLENBQUM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQge2dldEVycm9yTmFtZX0gZnJvbSAnLi4vZXJyb3IvZXJyb3ItaGVscGVycyc7XG5pbXBvcnQge0lMb2dQdWJsaXNoZXIsIExvZ0VudHJ5LCBMb2dMZXZlbEVudW19IGZyb20gJy4vbG9nLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIExvZ1B1Ymxpc2hlckNvbnNvbGVTZXJ2aWNlIGltcGxlbWVudHMgSUxvZ1B1Ymxpc2hlciB7XG4gICAgYWRkRW50cnkoZW50cnk6IExvZ0VudHJ5KTogdm9pZCB7XG4gICAgICAgIGxldCBwcmVmaXggPSBgJHtlbnRyeS50aW1lc3RhbXBGb3JtYXR0ZWR9YDtcbiAgICAgICAgaWYgKGVudHJ5LmNhdGVnb3J5KSBwcmVmaXggKz0gYCBbJHtlbnRyeS5jYXRlZ29yeX1dYDtcbiAgICAgICAgcHJlZml4ICs9ICc6JztcblxuICAgICAgICBjb25zdCBtZXNzYWdlID0gYCR7ZW50cnkubWVzc2FnZX0ke2VudHJ5Lm1lc3NhZ2VEZXRhaWxzID8gYFxcbiR7ZW50cnkubWVzc2FnZURldGFpbHN9YCA6ICcnfWA7XG4gICAgICAgIGNvbnN0IGxvZ1BhcmFtczogYW55W10gPSBbcHJlZml4LCBtZXNzYWdlXTtcbiAgICAgICAgaWYgKGVudHJ5LmVycm9yKSB7XG4gICAgICAgICAgICBsb2dQYXJhbXMucHVzaChgXFxuJHtnZXRFcnJvck5hbWUoZW50cnkuZXJyb3IpfTpgLCBlbnRyeS5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudHJ5LmRhdGE/Lmxlbmd0aCkge1xuICAgICAgICAgICAgbG9nUGFyYW1zLnB1c2goYFxcbkRhdGE6XFxuYCwgLi4uZW50cnkuZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGVudHJ5LmxldmVsKSB7XG4gICAgICAgICAgICBjYXNlIExvZ0xldmVsRW51bS5UcmFjZTpcbiAgICAgICAgICAgICAgICBjb25zb2xlLnRyYWNlKC4uLmxvZ1BhcmFtcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIExvZ0xldmVsRW51bS5EZWJ1ZzpcbiAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKC4uLmxvZ1BhcmFtcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIExvZ0xldmVsRW51bS5Mb2c6XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coLi4ubG9nUGFyYW1zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTG9nTGV2ZWxFbnVtLkluZm86XG4gICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKC4uLmxvZ1BhcmFtcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIExvZ0xldmVsRW51bS5XYXJuaW5nOlxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiguLi5sb2dQYXJhbXMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbEVudW0uRXJyb3I6XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciguLi5sb2dQYXJhbXMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19","import { Pipe } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class BooleanPipe {\n transform(value, yes, no, icon = false) {\n if (typeof value === 'string') {\n value = value.toLowerCase() === 'true';\n }\n else if (typeof value === 'number') {\n value = value === 1;\n }\n if (typeof value === 'boolean') {\n if (icon) {\n return value ? (yes ?? 'pi pi-check') : (no ?? 'pi pi-times');\n }\n else {\n return value ? (yes ?? 'general.yes') : (no ?? 'general.no');\n }\n }\n else {\n return value;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BooleanPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: BooleanPipe, isStandalone: true, name: \"mngBoolean\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BooleanPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngBoolean',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbi5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvcGlwZXMvYm9vbGVhbi5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQWdCLE1BQU0sZUFBZSxDQUFDOztBQU1sRCxNQUFNLE9BQU8sV0FBVztJQUNwQixTQUFTLENBQUMsS0FBVSxFQUFFLEdBQVksRUFBRSxFQUFXLEVBQUUsSUFBSSxHQUFHLEtBQUs7UUFDekQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM1QixLQUFLLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sQ0FBQztRQUMzQyxDQUFDO2FBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNuQyxLQUFLLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUN4QixDQUFDO1FBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM3QixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNQLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksYUFBYSxDQUFDLENBQUM7WUFDbEUsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksWUFBWSxDQUFDLENBQUM7WUFDakUsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztJQUNMLENBQUM7OEdBaEJRLFdBQVc7NEdBQVgsV0FBVzs7MkZBQVgsV0FBVztrQkFKdkIsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsWUFBWTtvQkFDbEIsSUFBSSxFQUFFLElBQUk7aUJBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BpcGUsIFBpcGVUcmFuc2Zvcm19IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ21uZ0Jvb2xlYW4nLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgQm9vbGVhblBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICB0cmFuc2Zvcm0odmFsdWU6IGFueSwgeWVzPzogc3RyaW5nLCBubz86IHN0cmluZywgaWNvbiA9IGZhbHNlKTogYW55IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgPT09IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBpZiAoaWNvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA/ICh5ZXMgPz8gJ3BpIHBpLWNoZWNrJykgOiAobm8gPz8gJ3BpIHBpLXRpbWVzJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA/ICh5ZXMgPz8gJ2dlbmVyYWwueWVzJykgOiAobm8gPz8gJ2dlbmVyYWwubm8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==","import { Pipe } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class ClassMapPipe {\n transform(className, classNameMapFn, item) {\n if (classNameMapFn && typeof classNameMapFn === 'function') {\n return classNameMapFn(className, item);\n }\n else {\n return className ?? '';\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: ClassMapPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: ClassMapPipe, isStandalone: true, name: \"mngClassMap\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: ClassMapPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngClassMap',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3MtbWFwLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9waXBlcy9jbGFzcy1tYXAucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsSUFBSSxFQUFnQixNQUFNLGVBQWUsQ0FBQzs7QUFNbEQsTUFBTSxPQUFPLFlBQVk7SUFDckIsU0FBUyxDQUFDLFNBQWtCLEVBQUUsY0FBeUQsRUFBRSxJQUFRO1FBQzdGLElBQUksY0FBYyxJQUFJLE9BQU8sY0FBYyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3pELE9BQU8sY0FBYyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzQyxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBQ0wsQ0FBQzs4R0FQUSxZQUFZOzRHQUFaLFlBQVk7OzJGQUFaLFlBQVk7a0JBSnhCLElBQUk7bUJBQUM7b0JBQ0YsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLElBQUksRUFBRSxJQUFJO2lCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoe1xuICAgIG5hbWU6ICdtbmdDbGFzc01hcCcsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDbGFzc01hcFBpcGU8VD4gaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICB0cmFuc2Zvcm0oY2xhc3NOYW1lPzogc3RyaW5nLCBjbGFzc05hbWVNYXBGbj86IChjbGFzc05hbWU/OiBzdHJpbmcsIGl0ZW0/OiBUKSA9PiBzdHJpbmcsIGl0ZW0/OiBUKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGNsYXNzTmFtZU1hcEZuICYmIHR5cGVvZiBjbGFzc05hbWVNYXBGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZU1hcEZuKGNsYXNzTmFtZSwgaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lID8/ICcnO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19","import 'reflect-metadata';\nimport { LoggerService } from '../log/logger.service';\nexport const reflectTypeNameKey = 'typeName';\nexport const reflectEnumNameKey = 'enumName';\n/**\n * Defines type name decorator.\n * @param targetType class.\n * @param typeName Name of the type.\n */\nexport function defineReflectTypeName(targetType, typeName) {\n if (!Reflect.hasOwnMetadata(reflectTypeNameKey, targetType)) {\n Reflect.defineMetadata(reflectTypeNameKey, typeName, targetType);\n }\n}\n/**\n * Defines enum name decorator.\n * @param targetType enum object.\n * @param enumName Name of the enum.\n */\nexport function defineReflectEnumName(targetType, enumName) {\n if (!Reflect.hasOwnMetadata(reflectEnumNameKey, targetType)) {\n Reflect.defineMetadata(reflectEnumNameKey, enumName, targetType);\n }\n}\n/**\n * Gets type name from reflect metadata.\n * @param type Class.\n */\nexport function findReflectTypeName(type) {\n if (!type) {\n return null;\n }\n const typeName = Reflect.getMetadata(reflectTypeNameKey, type);\n if (typeName) {\n return typeName;\n }\n LoggerService.get().debug('WARNING: Reflect metadata could not be found for type, you might experience some issues in production build.', type?.name);\n return type.name;\n}\n/**\n * Gets type name from either decorator or reflect metadata.\n * @param type Class.\n */\nexport function reflectTypeNameExists(type) {\n return Reflect.hasOwnMetadata(reflectTypeNameKey, type);\n}\n/**\n * Gets enum name from either decorator or reflect metadata.\n * @param enumType Class.\n */\nexport function findReflectEnumName(enumType) {\n const enumName = Reflect.getMetadata(reflectEnumNameKey, enumType);\n if (enumName) {\n return enumName;\n }\n LoggerService.get().debug(`WARNING: Reflect metadata could not be found for enum ${typeof enumType === 'object' ? Object.keys(enumType) : enumType}`, {\n name: 'TypeUtilsError',\n enumType: enumType\n });\n return null;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1lbnVtLW1ldGFkYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvcmVmbGVjdC90eXBlLWVudW0tbWV0YWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxrQkFBa0IsQ0FBQztBQUcxQixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHcEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLFVBQVUsQ0FBQztBQUU3Qzs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLFVBQTBCLEVBQUUsUUFBZ0I7SUFDOUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUMxRCxPQUFPLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNyRSxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsVUFBb0IsRUFBRSxRQUFnQjtJQUN4RSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzFELE9BQU8sQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7QUFDTCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFJLElBQW1CO0lBQ3RELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNSLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9ELElBQUksUUFBUSxFQUFFLENBQUM7UUFDWCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBQ0QsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyw4R0FBOEcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEosT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsSUFBb0I7SUFDdEQsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzVELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsUUFBa0I7SUFDbEQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNuRSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ1gsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUNELGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMseURBQXlELE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDbEosSUFBSSxFQUFFLGdCQUFnQjtRQUN0QixRQUFRLEVBQUUsUUFBUTtLQUNyQixDQUFDLENBQUM7SUFDSCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdyZWZsZWN0LW1ldGFkYXRhJztcblxuaW1wb3J0IHtFbnVtVHlwZX0gZnJvbSAnLi4vaGVscGVycy90eXBlLWhlbHBlcnMnO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi9sb2cvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtDbGFzc1R5cGV9IGZyb20gJy4uL21vZGVscy9jbGFzcy1zZXJ2aWNlLm1vZGVsJztcblxuZXhwb3J0IGNvbnN0IHJlZmxlY3RUeXBlTmFtZUtleSA9ICd0eXBlTmFtZSc7XG5leHBvcnQgY29uc3QgcmVmbGVjdEVudW1OYW1lS2V5ID0gJ2VudW1OYW1lJztcblxuLyoqXG4gKiBEZWZpbmVzIHR5cGUgbmFtZSBkZWNvcmF0b3IuXG4gKiBAcGFyYW0gdGFyZ2V0VHlwZSBjbGFzcy5cbiAqIEBwYXJhbSB0eXBlTmFtZSBOYW1lIG9mIHRoZSB0eXBlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lUmVmbGVjdFR5cGVOYW1lKHRhcmdldFR5cGU6IENsYXNzVHlwZTxhbnk+LCB0eXBlTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCFSZWZsZWN0Lmhhc093bk1ldGFkYXRhKHJlZmxlY3RUeXBlTmFtZUtleSwgdGFyZ2V0VHlwZSkpIHtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShyZWZsZWN0VHlwZU5hbWVLZXksIHR5cGVOYW1lLCB0YXJnZXRUeXBlKTtcbiAgICB9XG59XG5cbi8qKlxuICogRGVmaW5lcyBlbnVtIG5hbWUgZGVjb3JhdG9yLlxuICogQHBhcmFtIHRhcmdldFR5cGUgZW51bSBvYmplY3QuXG4gKiBAcGFyYW0gZW51bU5hbWUgTmFtZSBvZiB0aGUgZW51bS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVJlZmxlY3RFbnVtTmFtZSh0YXJnZXRUeXBlOiBFbnVtVHlwZSwgZW51bU5hbWU6IHN0cmluZykge1xuICAgIGlmICghUmVmbGVjdC5oYXNPd25NZXRhZGF0YShyZWZsZWN0RW51bU5hbWVLZXksIHRhcmdldFR5cGUpKSB7XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEocmVmbGVjdEVudW1OYW1lS2V5LCBlbnVtTmFtZSwgdGFyZ2V0VHlwZSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEdldHMgdHlwZSBuYW1lIGZyb20gcmVmbGVjdCBtZXRhZGF0YS5cbiAqIEBwYXJhbSB0eXBlIENsYXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFJlZmxlY3RUeXBlTmFtZTxUPih0eXBlPzogQ2xhc3NUeXBlPFQ+KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCF0eXBlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB0eXBlTmFtZSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEocmVmbGVjdFR5cGVOYW1lS2V5LCB0eXBlKTtcbiAgICBpZiAodHlwZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVOYW1lO1xuICAgIH1cbiAgICBMb2dnZXJTZXJ2aWNlLmdldCgpLmRlYnVnKCdXQVJOSU5HOiBSZWZsZWN0IG1ldGFkYXRhIGNvdWxkIG5vdCBiZSBmb3VuZCBmb3IgdHlwZSwgeW91IG1pZ2h0IGV4cGVyaWVuY2Ugc29tZSBpc3N1ZXMgaW4gcHJvZHVjdGlvbiBidWlsZC4nLCB0eXBlPy5uYW1lKTtcbiAgICByZXR1cm4gdHlwZS5uYW1lO1xufVxuXG4vKipcbiAqIEdldHMgdHlwZSBuYW1lIGZyb20gZWl0aGVyIGRlY29yYXRvciBvciByZWZsZWN0IG1ldGFkYXRhLlxuICogQHBhcmFtIHR5cGUgQ2xhc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZsZWN0VHlwZU5hbWVFeGlzdHModHlwZTogQ2xhc3NUeXBlPGFueT4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gUmVmbGVjdC5oYXNPd25NZXRhZGF0YShyZWZsZWN0VHlwZU5hbWVLZXksIHR5cGUpO1xufVxuXG4vKipcbiAqIEdldHMgZW51bSBuYW1lIGZyb20gZWl0aGVyIGRlY29yYXRvciBvciByZWZsZWN0IG1ldGFkYXRhLlxuICogQHBhcmFtIGVudW1UeXBlIENsYXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFJlZmxlY3RFbnVtTmFtZShlbnVtVHlwZTogRW51bVR5cGUpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBlbnVtTmFtZSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEocmVmbGVjdEVudW1OYW1lS2V5LCBlbnVtVHlwZSk7XG4gICAgaWYgKGVudW1OYW1lKSB7XG4gICAgICAgIHJldHVybiBlbnVtTmFtZTtcbiAgICB9XG4gICAgTG9nZ2VyU2VydmljZS5nZXQoKS5kZWJ1ZyhgV0FSTklORzogUmVmbGVjdCBtZXRhZGF0YSBjb3VsZCBub3QgYmUgZm91bmQgZm9yIGVudW0gJHt0eXBlb2YgZW51bVR5cGUgPT09ICdvYmplY3QnID8gT2JqZWN0LmtleXMoZW51bVR5cGUpIDogZW51bVR5cGV9YCwge1xuICAgICAgICBuYW1lOiAnVHlwZVV0aWxzRXJyb3InLFxuICAgICAgICBlbnVtVHlwZTogZW51bVR5cGVcbiAgICB9KTtcbiAgICByZXR1cm4gbnVsbDtcbn1cbiJdfQ==","import { Pipe } from '@angular/core';\nimport { getEnumConstantNameFromObject, getEnumConstantValues } from '../enum/enum-helpers';\nimport { findReflectEnumName } from '../reflect/type-enum-metadata';\nimport * as i0 from \"@angular/core\";\nexport class EnumPipe {\n transform(value, enumDesc, i18nPath) {\n if (value == null || (typeof value !== 'number' && typeof value !== 'string') || !enumDesc) {\n return value;\n }\n const enumValue = enumDesc.nameAsValue ? value : getEnumConstantNameFromObject(enumDesc.type, value);\n if (enumValue == null) {\n // no constant name found (probably not enum), return value\n return value;\n }\n if (enumDesc.nameAsValue) {\n // check if value exists in enum if nameAsValue is used\n const enumValueCheck = getEnumConstantValues(enumDesc.type).find(v => v === enumValue);\n if (enumValueCheck == null) {\n return value;\n }\n }\n if (typeof i18nPath === 'undefined' && enumDesc) {\n i18nPath = enumDesc.i18nBaseKey ?? findReflectEnumName(enumDesc.type);\n }\n return i18nPath ? `${i18nPath}.${enumValue}` : enumValue;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: EnumPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: EnumPipe, isStandalone: true, name: \"mngEnum\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: EnumPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngEnum',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvcGlwZXMvZW51bS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBR2xELE9BQU8sRUFBQyw2QkFBNkIsRUFBRSxxQkFBcUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRTFGLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLCtCQUErQixDQUFDOztBQU1sRSxNQUFNLE9BQU8sUUFBUTtJQUNqQixTQUFTLENBQUMsS0FBYyxFQUFFLFFBQTBCLEVBQUUsUUFBd0I7UUFDMUUsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekYsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRyxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNwQiwyREFBMkQ7WUFDM0QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZCLHVEQUF1RDtZQUN2RCxNQUFNLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZGLElBQUksY0FBYyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN6QixPQUFPLEtBQUssQ0FBQztZQUNqQixDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzlDLFFBQVEsR0FBRyxRQUFRLENBQUMsV0FBVyxJQUFJLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxJQUFnQixDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzdELENBQUM7OEdBdEJRLFFBQVE7NEdBQVIsUUFBUTs7MkZBQVIsUUFBUTtrQkFKcEIsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsU0FBUztvQkFDZixJQUFJLEVBQUUsSUFBSTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7SUVudW1EZXNjcmlwdG9yfSBmcm9tICcuLi9kZXNjcmlwdG9ycy9lbnVtLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtnZXRFbnVtQ29uc3RhbnROYW1lRnJvbU9iamVjdCwgZ2V0RW51bUNvbnN0YW50VmFsdWVzfSBmcm9tICcuLi9lbnVtL2VudW0taGVscGVycyc7XG5pbXBvcnQge0VudW1UeXBlfSBmcm9tICcuLi9oZWxwZXJzL3R5cGUtaGVscGVycyc7XG5pbXBvcnQge2ZpbmRSZWZsZWN0RW51bU5hbWV9IGZyb20gJy4uL3JlZmxlY3QvdHlwZS1lbnVtLW1ldGFkYXRhJztcblxuQFBpcGUoe1xuICAgIG5hbWU6ICdtbmdFbnVtJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEVudW1QaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKHZhbHVlOiB1bmtub3duLCBlbnVtRGVzYz86IElFbnVtRGVzY3JpcHRvciwgaTE4blBhdGg/OiBzdHJpbmcgfCBudWxsKTogYW55IHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykgfHwgIWVudW1EZXNjKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbnVtVmFsdWUgPSBlbnVtRGVzYy5uYW1lQXNWYWx1ZSA/IHZhbHVlIDogZ2V0RW51bUNvbnN0YW50TmFtZUZyb21PYmplY3QoZW51bURlc2MudHlwZSwgdmFsdWUpO1xuICAgICAgICBpZiAoZW51bVZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIG5vIGNvbnN0YW50IG5hbWUgZm91bmQgKHByb2JhYmx5IG5vdCBlbnVtKSwgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudW1EZXNjLm5hbWVBc1ZhbHVlKSB7XG4gICAgICAgICAgICAvLyBjaGVjayBpZiB2YWx1ZSBleGlzdHMgaW4gZW51bSBpZiBuYW1lQXNWYWx1ZSBpcyB1c2VkXG4gICAgICAgICAgICBjb25zdCBlbnVtVmFsdWVDaGVjayA9IGdldEVudW1Db25zdGFudFZhbHVlcyhlbnVtRGVzYy50eXBlKS5maW5kKHYgPT4gdiA9PT0gZW51bVZhbHVlKTtcbiAgICAgICAgICAgIGlmIChlbnVtVmFsdWVDaGVjayA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgaTE4blBhdGggPT09ICd1bmRlZmluZWQnICYmIGVudW1EZXNjKSB7XG4gICAgICAgICAgICBpMThuUGF0aCA9IGVudW1EZXNjLmkxOG5CYXNlS2V5ID8/IGZpbmRSZWZsZWN0RW51bU5hbWUoZW51bURlc2MudHlwZSBhcyBFbnVtVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGkxOG5QYXRoID8gYCR7aTE4blBhdGh9LiR7ZW51bVZhbHVlfWAgOiBlbnVtVmFsdWU7XG4gICAgfVxufVxuIl19","import { Pipe } from '@angular/core';\nimport { getObjectPropertyByPath } from '../helpers/object';\nimport * as i0 from \"@angular/core\";\n/**\n * Imitation of JSONPath Syntax. Supports:\n * - Root object notation with '$'\n * - Dot notation (e.g.: $.foo.bar), no bracket notation for properties\n * - Array notation (e.g.: [0])\n */\nexport class JsonPathPipe {\n transform(value, path = '') {\n return getObjectPropertyByPath(value, path);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: JsonPathPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: JsonPathPipe, isStandalone: true, name: \"mngJsonPath\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: JsonPathPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngJsonPath',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1wYXRoLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9waXBlcy9qc29uLXBhdGgucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsSUFBSSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFMUQ7Ozs7O0dBS0c7QUFLSCxNQUFNLE9BQU8sWUFBWTtJQUNyQixTQUFTLENBQUMsS0FBVSxFQUFFLElBQUksR0FBRyxFQUFFO1FBQzNCLE9BQU8sdUJBQXVCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7OEdBSFEsWUFBWTs0R0FBWixZQUFZOzsyRkFBWixZQUFZO2tCQUp4QixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxhQUFhO29CQUNuQixJQUFJLEVBQUUsSUFBSTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7Z2V0T2JqZWN0UHJvcGVydHlCeVBhdGh9IGZyb20gJy4uL2hlbHBlcnMvb2JqZWN0JztcblxuLyoqXG4gKiBJbWl0YXRpb24gb2YgSlNPTlBhdGggU3ludGF4LiBTdXBwb3J0czpcbiAqICAtIFJvb3Qgb2JqZWN0IG5vdGF0aW9uIHdpdGggJyQnXG4gKiAgLSBEb3Qgbm90YXRpb24gKGUuZy46ICQuZm9vLmJhciksIG5vIGJyYWNrZXQgbm90YXRpb24gZm9yIHByb3BlcnRpZXNcbiAqICAtIEFycmF5IG5vdGF0aW9uIChlLmcuOiBbMF0pXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnbW5nSnNvblBhdGgnLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSnNvblBhdGhQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIHBhdGggPSAnJyk6IGFueSB7XG4gICAgICAgIHJldHVybiBnZXRPYmplY3RQcm9wZXJ0eUJ5UGF0aCh2YWx1ZSwgcGF0aCk7XG4gICAgfVxufVxuIl19","import { Pipe, inject } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { JsonPathPipe } from './json-path.pipe';\nimport * as i0 from \"@angular/core\";\nexport class EnumeratePipe {\n constructor() {\n this.translate = inject(TranslateService);\n }\n transform(value, jsonPath = '$', valueSeparator = ', ', emptyValueReturn = '/', i18nBaseKey = '') {\n if (!value) {\n return emptyValueReturn;\n }\n i18nBaseKey = getEnumerationI18nBaseKey(i18nBaseKey);\n return Array.from(value)\n .map(i => {\n const itemEnumerate = toEnumerationI18nEnumerate(i, jsonPath, i18nBaseKey);\n itemEnumerate.i18n = this.translate.instant(itemEnumerate.i18nKey);\n // return i18n only if used and transl. was found\n return selectEnumerationI18n(itemEnumerate, i18nBaseKey);\n })\n .join(valueSeparator);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: EnumeratePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: EnumeratePipe, isStandalone: true, name: \"mngEnumerate\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: EnumeratePipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngEnumerate',\n pure: true\n }]\n }] });\nexport function getEnumerationI18nBaseKey(baseKey) {\n return baseKey.endsWith('.') ? baseKey?.substring(0, baseKey.length - 1) : baseKey;\n}\nexport function selectEnumerationI18n(value, baseKey) {\n return baseKey && value.i18nKey === value.i18n ? value.value : value.i18n;\n}\nexport function toEnumerationI18nEnumerate(value, jsonPath, baseKey) {\n const valueTrans = new JsonPathPipe().transform(value, jsonPath);\n const valueAsString = valueTrans.toString();\n return {\n value: valueAsString,\n i18nKey: baseKey ? `${baseKey}.${valueAsString}` : valueAsString,\n i18n: valueAsString\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bWVyYXRlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9waXBlcy9lbnVtZXJhdGUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsSUFBSSxFQUFpQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFMUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDOztBQU05QyxNQUFNLE9BQU8sYUFBYTtJQUoxQjtRQUtxQixjQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FnQnpEO0lBZEcsU0FBUyxDQUFJLEtBQXdCLEVBQUUsUUFBUSxHQUFHLEdBQUcsRUFBRSxjQUFjLEdBQUcsSUFBSSxFQUFFLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxXQUFXLEdBQUcsRUFBRTtRQUNsSCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDVCxPQUFPLGdCQUFnQixDQUFDO1FBQzVCLENBQUM7UUFDRCxXQUFXLEdBQUcseUJBQXlCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzthQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTCxNQUFNLGFBQWEsR0FBRywwQkFBMEIsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzNFLGFBQWEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25FLGlEQUFpRDtZQUNqRCxPQUFPLHFCQUFxQixDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUIsQ0FBQzs4R0FoQlEsYUFBYTs0R0FBYixhQUFhOzsyRkFBYixhQUFhO2tCQUp6QixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxjQUFjO29CQUNwQixJQUFJLEVBQUUsSUFBSTtpQkFDYjs7QUFvQkQsTUFBTSxVQUFVLHlCQUF5QixDQUFDLE9BQWU7SUFDckQsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDdkYsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUFnQyxFQUFFLE9BQWU7SUFDbkYsT0FBTyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzlFLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsS0FBYyxFQUFFLFFBQWdCLEVBQUUsT0FBZTtJQUN4RixNQUFNLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakUsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVDLE9BQWtDO1FBQzlCLEtBQUssRUFBRSxhQUFhO1FBQ3BCLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxJQUFJLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhO1FBQ2hFLElBQUksRUFBRSxhQUFhO0tBQ3RCLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQaXBlLCBQaXBlVHJhbnNmb3JtLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQge0pzb25QYXRoUGlwZX0gZnJvbSAnLi9qc29uLXBhdGgucGlwZSc7XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAnbW5nRW51bWVyYXRlJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEVudW1lcmF0ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICAgIHRyYW5zZm9ybTxUPih2YWx1ZTogQXJyYXk8VD4gfCBTZXQ8VD4sIGpzb25QYXRoID0gJyQnLCB2YWx1ZVNlcGFyYXRvciA9ICcsICcsIGVtcHR5VmFsdWVSZXR1cm4gPSAnLycsIGkxOG5CYXNlS2V5ID0gJycpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZW1wdHlWYWx1ZVJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpMThuQmFzZUtleSA9IGdldEVudW1lcmF0aW9uSTE4bkJhc2VLZXkoaTE4bkJhc2VLZXkpO1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh2YWx1ZSlcbiAgICAgICAgICAgIC5tYXAoaSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUVudW1lcmF0ZSA9IHRvRW51bWVyYXRpb25JMThuRW51bWVyYXRlKGksIGpzb25QYXRoLCBpMThuQmFzZUtleSk7XG4gICAgICAgICAgICAgICAgaXRlbUVudW1lcmF0ZS5pMThuID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChpdGVtRW51bWVyYXRlLmkxOG5LZXkpO1xuICAgICAgICAgICAgICAgIC8vIHJldHVybiBpMThuIG9ubHkgaWYgdXNlZCBhbmQgdHJhbnNsLiB3YXMgZm91bmRcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0RW51bWVyYXRpb25JMThuKGl0ZW1FbnVtZXJhdGUsIGkxOG5CYXNlS2V5KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbih2YWx1ZVNlcGFyYXRvcik7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bWVyYXRpb25JMThuQmFzZUtleShiYXNlS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBiYXNlS2V5LmVuZHNXaXRoKCcuJykgPyBiYXNlS2V5Py5zdWJzdHJpbmcoMCwgYmFzZUtleS5sZW5ndGggLSAxKSA6IGJhc2VLZXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RFbnVtZXJhdGlvbkkxOG4odmFsdWU6IEVudW1lcmF0ZVBpcGVJMThuSW50ZXJuYWwsIGJhc2VLZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGJhc2VLZXkgJiYgdmFsdWUuaTE4bktleSA9PT0gdmFsdWUuaTE4biA/IHZhbHVlLnZhbHVlIDogdmFsdWUuaTE4bjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvRW51bWVyYXRpb25JMThuRW51bWVyYXRlKHZhbHVlOiB1bmtub3duLCBqc29uUGF0aDogc3RyaW5nLCBiYXNlS2V5OiBzdHJpbmcpOiBFbnVtZXJhdGVQaXBlSTE4bkludGVybmFsIHtcbiAgICBjb25zdCB2YWx1ZVRyYW5zID0gbmV3IEpzb25QYXRoUGlwZSgpLnRyYW5zZm9ybSh2YWx1ZSwganNvblBhdGgpO1xuICAgIGNvbnN0IHZhbHVlQXNTdHJpbmcgPSB2YWx1ZVRyYW5zLnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIDxFbnVtZXJhdGVQaXBlSTE4bkludGVybmFsPntcbiAgICAgICAgdmFsdWU6IHZhbHVlQXNTdHJpbmcsXG4gICAgICAgIGkxOG5LZXk6IGJhc2VLZXkgPyBgJHtiYXNlS2V5fS4ke3ZhbHVlQXNTdHJpbmd9YCA6IHZhbHVlQXNTdHJpbmcsXG4gICAgICAgIGkxOG46IHZhbHVlQXNTdHJpbmdcbiAgICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudW1lcmF0ZVBpcGVJMThuSW50ZXJuYWwge1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgaTE4bktleTogc3RyaW5nO1xuICAgIGkxOG46IHN0cmluZztcbn1cbiJdfQ==","import { Pipe, inject } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { combineLatest, mergeMap, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { getEnumerationI18nBaseKey, selectEnumerationI18n, toEnumerationI18nEnumerate } from './enumerate.pipe';\nimport * as i0 from \"@angular/core\";\nexport class EnumerateAsyncPipe {\n constructor() {\n this.translate = inject(TranslateService);\n }\n transform(value, jsonPath = '$', valueSeparator = ', ', emptyValueReturn = '/', i18nBaseKey = '') {\n i18nBaseKey = getEnumerationI18nBaseKey(i18nBaseKey);\n return value.pipe(mergeMap(v => {\n if (!v) {\n return of([emptyValueReturn]);\n }\n return combineLatest(Array.from(v)\n .map(ai => toEnumerationI18nEnumerate(ai, jsonPath, i18nBaseKey))\n .map(i => this.translate.stream(i.i18nKey).pipe(map((i18n) => {\n i.i18n = i18n;\n return selectEnumerationI18n(i, i18nBaseKey);\n }))));\n }), map(i => i.join(valueSeparator)));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: EnumerateAsyncPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: EnumerateAsyncPipe, isStandalone: true, name: \"mngEnumerateAsync\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: EnumerateAsyncPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngEnumerateAsync',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bWVyYXRlLWFzeW5jLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9waXBlcy9lbnVtZXJhdGUtYXN5bmMucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsSUFBSSxFQUFpQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFMUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFhLGFBQWEsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuQyxPQUFPLEVBQUMseUJBQXlCLEVBQUUscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQzs7QUFNOUcsTUFBTSxPQUFPLGtCQUFrQjtJQUovQjtRQUtxQixjQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0F5QnpEO0lBdkJHLFNBQVMsQ0FBQyxLQUFnRCxFQUFFLFFBQVEsR0FBRyxHQUFHLEVBQUUsY0FBYyxHQUFHLElBQUksRUFBRSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsV0FBVyxHQUFHLEVBQUU7UUFDdkksV0FBVyxHQUFHLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FDYixRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDVCxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ0wsT0FBTyxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDbEMsQ0FBQztZQUNELE9BQU8sYUFBYSxDQUNoQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDUixHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2lCQUNoRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDTCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUNqQyxHQUFHLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRTtnQkFDakIsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ2QsT0FBTyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQ0wsQ0FDSixDQUNSLENBQUM7UUFDTixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQ25DLENBQUM7SUFDTixDQUFDOzhHQXpCUSxrQkFBa0I7NEdBQWxCLGtCQUFrQjs7MkZBQWxCLGtCQUFrQjtrQkFKOUIsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsbUJBQW1CO29CQUN6QixJQUFJLEVBQUUsSUFBSTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGlwZSwgUGlwZVRyYW5zZm9ybSwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgY29tYmluZUxhdGVzdCwgbWVyZ2VNYXAsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7Z2V0RW51bWVyYXRpb25JMThuQmFzZUtleSwgc2VsZWN0RW51bWVyYXRpb25JMThuLCB0b0VudW1lcmF0aW9uSTE4bkVudW1lcmF0ZX0gZnJvbSAnLi9lbnVtZXJhdGUucGlwZSc7XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAnbW5nRW51bWVyYXRlQXN5bmMnLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRW51bWVyYXRlQXN5bmNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgICB0cmFuc2Zvcm0odmFsdWU6IE9ic2VydmFibGU8QXJyYXk8dW5rbm93bj4gfCBTZXQ8dW5rbm93bj4+LCBqc29uUGF0aCA9ICckJywgdmFsdWVTZXBhcmF0b3IgPSAnLCAnLCBlbXB0eVZhbHVlUmV0dXJuID0gJy8nLCBpMThuQmFzZUtleSA9ICcnKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgaTE4bkJhc2VLZXkgPSBnZXRFbnVtZXJhdGlvbkkxOG5CYXNlS2V5KGkxOG5CYXNlS2V5KTtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnBpcGUoXG4gICAgICAgICAgICBtZXJnZU1hcCh2ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtlbXB0eVZhbHVlUmV0dXJuXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFxuICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHYpXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKGFpID0+IHRvRW51bWVyYXRpb25JMThuRW51bWVyYXRlKGFpLCBqc29uUGF0aCwgaTE4bkJhc2VLZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUuc3RyZWFtKGkuaTE4bktleSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChpMThuOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkuaTE4biA9IGkxOG47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0RW51bWVyYXRpb25JMThuKGksIGkxOG5CYXNlS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKGkgPT4gaS5qb2luKHZhbHVlU2VwYXJhdG9yKSlcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=","import { Pipe } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class GetterPipe {\n transform(value, getterFn, item) {\n if (typeof getterFn === 'function') {\n return getterFn(value, item);\n }\n return value;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: GetterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: GetterPipe, isStandalone: true, name: \"mngGetter\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: GetterPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngGetter',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0dGVyLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9waXBlcy9nZXR0ZXIucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsSUFBSSxFQUFnQixNQUFNLGVBQWUsQ0FBQzs7QUFRbEQsTUFBTSxPQUFPLFVBQVU7SUFDbkIsU0FBUyxDQUFDLEtBQWMsRUFBRSxRQUFtQixFQUFFLElBQWM7UUFDekQsSUFBSSxPQUFPLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNqQyxPQUFPLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7OEdBUFEsVUFBVTs0R0FBVixVQUFVOzsyRkFBVixVQUFVO2tCQUp0QixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxXQUFXO29CQUNqQixJQUFJLEVBQUUsSUFBSTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7R2V0dGVyRm59IGZyb20gJy4uL21vZGVscy9nZXR0ZXIubW9kZWwnO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ21uZ0dldHRlcicsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBHZXR0ZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKHZhbHVlOiB1bmtub3duLCBnZXR0ZXJGbj86IEdldHRlckZuLCBpdGVtPzogdW5rbm93bik6IGFueSB7XG4gICAgICAgIGlmICh0eXBlb2YgZ2V0dGVyRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXR0ZXJGbih2YWx1ZSwgaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufVxuIl19","import { Pipe } from '@angular/core';\nimport { getI18nTypePropertyKey } from '../i18n/i18n-type';\nimport * as i0 from \"@angular/core\";\nexport class I18nPropertyPipe {\n transform(property, model) {\n return getI18nTypePropertyKey(model.i18nBaseKey, property);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: I18nPropertyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: I18nPropertyPipe, isStandalone: true, name: \"mngI18nProperty\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: I18nPropertyPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngI18nProperty',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi1wcm9wZXJ0eS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvcGlwZXMvaTE4bi1wcm9wZXJ0eS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBR2xELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDOztBQU16RCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ3pCLFNBQVMsQ0FBQyxRQUFnQixFQUFFLEtBQTRCO1FBQ3BELE9BQU8sc0JBQXNCLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMvRCxDQUFDOzhHQUhRLGdCQUFnQjs0R0FBaEIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQUo1QixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxpQkFBaUI7b0JBQ3ZCLElBQUksRUFBRSxJQUFJO2lCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtJTW9kZWxEZXNjcmlwdG9yfSBmcm9tICcuLi9kZXNjcmlwdG9ycy9tb2RlbC5kZXNjcmlwdG9yJztcbmltcG9ydCB7Z2V0STE4blR5cGVQcm9wZXJ0eUtleX0gZnJvbSAnLi4vaTE4bi9pMThuLXR5cGUnO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ21uZ0kxOG5Qcm9wZXJ0eScsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJMThuUHJvcGVydHlQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKHByb3BlcnR5OiBzdHJpbmcsIG1vZGVsOiBJTW9kZWxEZXNjcmlwdG9yPGFueT4pOiBhbnkge1xuICAgICAgICByZXR1cm4gZ2V0STE4blR5cGVQcm9wZXJ0eUtleShtb2RlbC5pMThuQmFzZUtleSwgcHJvcGVydHkpO1xuICAgIH1cbn1cbiJdfQ==","import { Pipe } from '@angular/core';\nimport { escapeHtmlAny } from '../helpers/string';\nimport { JsonPathPipe } from './json-path.pipe';\nimport * as i0 from \"@angular/core\";\nexport class ParametrizePipe {\n constructor() {\n this.jsonPath = new JsonPathPipe();\n }\n transform(value, itemId, item, data, opts) {\n let params = {};\n if (data) {\n params = {\n ...params,\n ...data\n };\n }\n if (item) {\n params = {\n ...params,\n item: escapeHtmlAny(item)\n };\n }\n if (itemId) {\n params = {\n ...params,\n itemId: itemId\n };\n }\n if (typeof value === 'string') {\n return this.transformString(value, params, opts);\n }\n else if (Array.isArray(value) && value.length > 0 && typeof value[0] === 'string') {\n return value.map((s) => this.transformString(s, params, opts));\n }\n else if (typeof value === 'object') {\n // process only first level citizens\n const obj = { ...value };\n for (const key in obj) {\n const objProp = obj[key];\n if (typeof objProp === 'string') {\n obj[key] = this.transformString(objProp, params, opts);\n }\n }\n return obj;\n }\n else {\n return value;\n }\n }\n transformString(s, params, opts) {\n if ((s.indexOf('/') >= 0 && s.indexOf(':') >= 0 && !s.startsWith('http://') && !s.startsWith('https://')) || s.startsWith(':')) {\n // this is router link\n return s\n .split('/')\n .map(s => this.parametrizeStringAsRouterLink(s, params))\n .join('/');\n }\n else {\n // parametrize normally\n return this.parametrizeString(s, params, opts);\n }\n }\n parametrizeStringAsRouterLink(s, params) {\n if (s.startsWith(':')) {\n const itemProperty = s.substring(1);\n return encodeURIComponent(this.jsonPath.transform(params, itemProperty) ?? '');\n }\n else {\n return s;\n }\n }\n parametrizeString(s, params, opts) {\n return s.replace(/{{\\s?([^{}\\s]*)\\s?}}/g, (subs, key) => {\n let value = this.jsonPath.transform(params, key);\n if (value != null && opts?.encodeParams) {\n value = encodeURIComponent(value);\n }\n return value ?? subs;\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: ParametrizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: ParametrizePipe, isStandalone: true, name: \"mngParametrize\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: ParametrizePipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngParametrize',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldHJpemUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL3BpcGVzL3BhcmFtZXRyaXplLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLElBQUksRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWhELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQzs7QUFVOUMsTUFBTSxPQUFPLGVBQWU7SUFKNUI7UUFLWSxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztLQXlFekM7SUF2RUcsU0FBUyxDQUFDLEtBQWMsRUFBRSxNQUFlLEVBQUUsSUFBVSxFQUFFLElBQTBCLEVBQUUsSUFBd0I7UUFDdkcsSUFBSSxNQUFNLEdBQVEsRUFBRSxDQUFDO1FBQ3JCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxNQUFNLEdBQUc7Z0JBQ0wsR0FBRyxNQUFNO2dCQUNULEdBQUcsSUFBSTthQUNWLENBQUM7UUFDTixDQUFDO1FBQ0QsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNQLE1BQU0sR0FBRztnQkFDTCxHQUFHLE1BQU07Z0JBQ1QsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUM7YUFDNUIsQ0FBQztRQUNOLENBQUM7UUFDRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1QsTUFBTSxHQUFHO2dCQUNMLEdBQUcsTUFBTTtnQkFDVCxNQUFNLEVBQUUsTUFBTTthQUNqQixDQUFDO1FBQ04sQ0FBQztRQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDNUIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckQsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxL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SUFBSSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0F6RVEsZUFBZTs0R0FBZixlQUFlOzsyRkFBZixlQUFlO2tCQUozQixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxnQkFBZ0I7b0JBQ3RCLElBQUksRUFBRSxJQUFJO2lCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtlc2NhcGVIdG1sQW55fSBmcm9tICcuLi9oZWxwZXJzL3N0cmluZyc7XG5pbXBvcnQge0lkVHlwZX0gZnJvbSAnLi4vaGVscGVycy90eXBlLWhlbHBlcnMnO1xuaW1wb3J0IHtKc29uUGF0aFBpcGV9IGZyb20gJy4vanNvbi1wYXRoLnBpcGUnO1xuXG50eXBlIFRyYW5zZm9ybU9wdHNUeXBlID0ge1xuICAgIGVuY29kZVBhcmFtcz86IGJvb2xlYW47XG59O1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ21uZ1BhcmFtZXRyaXplJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFBhcmFtZXRyaXplUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHByaXZhdGUganNvblBhdGggPSBuZXcgSnNvblBhdGhQaXBlKCk7XG5cbiAgICB0cmFuc2Zvcm0odmFsdWU6IHVua25vd24sIGl0ZW1JZD86IElkVHlwZSwgaXRlbT86IGFueSwgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4sIG9wdHM/OiBUcmFuc2Zvcm1PcHRzVHlwZSk6IGFueSB7XG4gICAgICAgIGxldCBwYXJhbXM6IGFueSA9IHt9O1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgcGFyYW1zID0ge1xuICAgICAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgICAgICAuLi5kYXRhXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICAgICAgICAgIGl0ZW06IGVzY2FwZUh0bWxBbnkoaXRlbSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW1JZCkge1xuICAgICAgICAgICAgcGFyYW1zID0ge1xuICAgICAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgICAgICBpdGVtSWQ6IGl0ZW1JZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1TdHJpbmcodmFsdWUsIHBhcmFtcywgb3B0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMCAmJiB0eXBlb2YgdmFsdWVbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKChzOiBzdHJpbmcpID0+IHRoaXMudHJhbnNmb3JtU3RyaW5nKHMsIHBhcmFtcywgb3B0cykpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIC8vIHByb2Nlc3Mgb25seSBmaXJzdCBsZXZlbCBjaXRpemVuc1xuICAgICAgICAgICAgY29uc3Qgb2JqOiBhbnkgPSB7Li4udmFsdWV9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqUHJvcCA9IG9ialtrZXldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqUHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSB0aGlzLnRyYW5zZm9ybVN0cmluZyhvYmpQcm9wLCBwYXJhbXMsIG9wdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRyYW5zZm9ybVN0cmluZyhzOiBzdHJpbmcsIHBhcmFtczogYW55LCBvcHRzPzogVHJhbnNmb3JtT3B0c1R5cGUpIHtcbiAgICAgICAgaWYgKChzLmluZGV4T2YoJy8nKSA+PSAwICYmIHMuaW5kZXhPZignOicpID49IDAgJiYgIXMuc3RhcnRzV2l0aCgnaHR0cDovLycpICYmICFzLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHx8IHMuc3RhcnRzV2l0aCgnOicpKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHJvdXRlciBsaW5rXG4gICAgICAgICAgICByZXR1cm4gc1xuICAgICAgICAgICAgICAgIC5zcGxpdCgnLycpXG4gICAgICAgICAgICAgICAgLm1hcChzID0+IHRoaXMucGFyYW1ldHJpemVTdHJpbmdBc1JvdXRlckxpbmsocywgcGFyYW1zKSlcbiAgICAgICAgICAgICAgICAuam9pbignLycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcGFyYW1ldHJpemUgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmFtZXRyaXplU3RyaW5nKHMsIHBhcmFtcywgb3B0cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcmFtZXRyaXplU3RyaW5nQXNSb3V0ZXJMaW5rKHM6IHN0cmluZywgcGFyYW1zOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAocy5zdGFydHNXaXRoKCc6JykpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1Qcm9wZXJ0eSA9IHMuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmpzb25QYXRoLnRyYW5zZm9ybShwYXJhbXMsIGl0ZW1Qcm9wZXJ0eSkgPz8gJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcmFtZXRyaXplU3RyaW5nKHM6IHN0cmluZywgcGFyYW1zOiBhbnksIG9wdHM/OiBUcmFuc2Zvcm1PcHRzVHlwZSk6IGFueSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoL3t7XFxzPyhbXnt9XFxzXSopXFxzP319L2csIChzdWJzOiBzdHJpbmcsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmpzb25QYXRoLnRyYW5zZm9ybShwYXJhbXMsIGtleSk7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiBvcHRzPy5lbmNvZGVQYXJhbXMpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPz8gc3VicztcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19","import { Pipe } from '@angular/core';\nimport { ParametrizePipe } from './parametrize.pipe';\nimport * as i0 from \"@angular/core\";\nexport class TemplatePipe {\n constructor() {\n this.parametrizePipe = new ParametrizePipe();\n }\n transform(value, template) {\n if (typeof template === 'string') {\n return this.parametrizePipe.transform(template, undefined, value);\n }\n return value;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TemplatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: TemplatePipe, isStandalone: true, name: \"template\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TemplatePipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'template',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL3BpcGVzL3RlbXBsYXRlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLElBQUksRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDOztBQU1uRCxNQUFNLE9BQU8sWUFBWTtJQUp6QjtRQUtZLG9CQUFlLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztLQVNuRDtJQVBHLFNBQVMsQ0FBQyxLQUFjLEVBQUUsUUFBaUI7UUFDdkMsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMvQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7OEdBVFEsWUFBWTs0R0FBWixZQUFZOzsyRkFBWixZQUFZO2tCQUp4QixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxVQUFVO29CQUNoQixJQUFJLEVBQUUsSUFBSTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7UGFyYW1ldHJpemVQaXBlfSBmcm9tICcuL3BhcmFtZXRyaXplLnBpcGUnO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ3RlbXBsYXRlJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHByaXZhdGUgcGFyYW1ldHJpemVQaXBlID0gbmV3IFBhcmFtZXRyaXplUGlwZSgpO1xuXG4gICAgdHJhbnNmb3JtKHZhbHVlOiB1bmtub3duLCB0ZW1wbGF0ZT86IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGVtcGxhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJhbWV0cml6ZVBpcGUudHJhbnNmb3JtKHRlbXBsYXRlLCB1bmRlZmluZWQsIHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG4iXX0=","import { defineReflectEnumName, defineReflectTypeName } from './type-enum-metadata';\nexport function TypeName(typeName) {\n return function (target) {\n defineReflectTypeName(target, typeName);\n };\n}\nexport function EnumName(typeName) {\n return function (target) {\n defineReflectEnumName(target, typeName);\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1lbnVtLWRlY29yYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL3JlZmxlY3QvdHlwZS1lbnVtLWRlY29yYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMscUJBQXFCLEVBQUUscUJBQXFCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRixNQUFNLFVBQVUsUUFBUSxDQUFDLFFBQWdCO0lBQ3JDLE9BQU8sVUFBVSxNQUFXO1FBQ3hCLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxRQUFnQjtJQUNyQyxPQUFPLFVBQVUsTUFBVztRQUN4QixxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZGVmaW5lUmVmbGVjdEVudW1OYW1lLCBkZWZpbmVSZWZsZWN0VHlwZU5hbWV9IGZyb20gJy4vdHlwZS1lbnVtLW1ldGFkYXRhJztcblxuZXhwb3J0IGZ1bmN0aW9uIFR5cGVOYW1lKHR5cGVOYW1lOiBzdHJpbmcpOiBDbGFzc0RlY29yYXRvciB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IGFueSkge1xuICAgICAgICBkZWZpbmVSZWZsZWN0VHlwZU5hbWUodGFyZ2V0LCB0eXBlTmFtZSk7XG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVudW1OYW1lKHR5cGVOYW1lOiBzdHJpbmcpOiBDbGFzc0RlY29yYXRvciB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IGFueSkge1xuICAgICAgICBkZWZpbmVSZWZsZWN0RW51bU5hbWUodGFyZ2V0LCB0eXBlTmFtZSk7XG4gICAgfTtcbn1cbiJdfQ==","import { LogLevelEnum } from '../log/log.model';\nimport { LoggerService } from '../log/logger.service';\nimport { defineReflectEnumName, defineReflectTypeName, findReflectTypeName, reflectTypeNameExists } from '../reflect/type-enum-metadata';\nexport class TypeRegistry {\n constructor() {\n this._logCategory = 'TypeRegistry';\n this._typeMap = {};\n this._enumMap = {};\n }\n static { this._instance = new TypeRegistry(); }\n get typeMap() {\n return this._typeMap;\n }\n get enumMap() {\n return this._enumMap;\n }\n /**\n * Only use one instance of object (out of Angular context)\n */\n static get() {\n return TypeRegistry._instance;\n }\n findAttributeDefinitionByClassType(type, attributeName) {\n const typeName = findReflectTypeName(type);\n return typeName ? this.findAttributeDefinition(typeName, attributeName) : null;\n }\n findAttributeDefinition(typeName, attributeName) {\n const attributeDefs = this.findAttributesDefinition(typeName);\n if (!attributeDefs) {\n return null;\n }\n for (const attribute of attributeDefs) {\n if (attribute.name === attributeName) {\n return attribute;\n }\n }\n return null;\n }\n findAttributesDefinitionByClassType(type) {\n const typeName = findReflectTypeName(type);\n return typeName ? this.findAttributesDefinition(typeName) : null;\n }\n findAttributesDefinition(typeName) {\n const typeDef = this.findType(typeName);\n if (!typeDef || typeof typeDef.getAttributeTypeMap !== 'function') {\n return null;\n }\n return typeDef.getAttributeTypeMap();\n }\n findByClassType(type) {\n const typeName = findReflectTypeName(type);\n return typeName ? this.findType(typeName) : null;\n }\n findType(typeName) {\n return this._typeMap[typeName];\n }\n findEnum(enumName) {\n return this._enumMap[enumName];\n }\n registerTypes(types) {\n for (const key in types) {\n this.registerType(types[key], key);\n }\n }\n registerType(type, optTypeName) {\n // try to find name from metadata\n let typeName;\n if (reflectTypeNameExists(type)) {\n // defined name from optional type name\n typeName = findReflectTypeName(type) ?? undefined;\n }\n else if (optTypeName) {\n typeName = optTypeName;\n // register metadata\n defineReflectTypeName(type, typeName);\n }\n if (!typeName) {\n // this._logger.debug(`WARNING: registering type ${type} failed, because typeName could not be determined and optional name was not provided.`);\n LoggerService.get().log(`WARNING: registering type ${type} failed, because typeName could not be determined and optional name was not provided.`, LogLevelEnum.Debug, this._logCategory);\n return;\n }\n if (typeof this._typeMap[typeName] !== 'undefined') {\n // this._logger.debug(`WARNING: registering type ${type} under key ${typeName} skipped, because type already exists for this key.`);\n LoggerService.get().log(`WARNING: registering type ${type} under key ${typeName} skipped, because type already exists for this key.`, LogLevelEnum.Debug, this._logCategory);\n }\n else {\n this._typeMap[typeName] = type;\n }\n }\n registerEnums(enums) {\n for (const key in enums) {\n this.registerEnum(enums[key], key);\n }\n }\n registerEnum(enumType, enumName) {\n // try to find name from decorator\n defineReflectEnumName(enumType, enumName);\n if (typeof this._enumMap[enumName] !== 'undefined') {\n LoggerService.get().log(`Registering enum ${enumName} skipped, because enum already exists.`, LogLevelEnum.Debug, this._logCategory);\n }\n else {\n this._enumMap[enumName] = enumType;\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1yZWdpc3RyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL3JlZ2lzdHJ5L3R5cGUtcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUdwRCxPQUFPLEVBQUMscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUd2SSxNQUFNLE9BQU8sWUFBWTtJQUF6QjtRQUVxQixpQkFBWSxHQUFHLGNBQWMsQ0FBQztRQUM5QixhQUFRLEdBQW9CLEVBQUUsQ0FBQztRQUMvQixhQUFRLEdBQW9CLEVBQUUsQ0FBQztJQW1IcEQsQ0FBQzthQXRIa0IsY0FBUyxHQUFpQixJQUFJLFlBQVksRUFBRSxBQUFuQyxDQUFvQztJQUs1RCxJQUFXLE9BQU87UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVELElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsR0FBRztRQUNiLE9BQU8sWUFBWSxDQUFDLFNBQVMsQ0FBQztJQUNsQyxDQUFDO0lBRU0sa0NBQWtDLENBQUMsSUFBb0IsRUFBRSxhQUFxQjtRQUNqRixNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ25GLENBQUM7SUFFTSx1QkFBdUIsQ0FBQyxRQUFnQixFQUFFLGFBQXFCO1FBQ2xFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDakIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELEtBQUssTUFBTSxTQUFTLElBQUksYUFBYSxFQUFFLENBQUM7WUFDcEMsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLGFBQWEsRUFBRSxDQUFDO2dCQUNuQyxPQUFPLFNBQVMsQ0FBQztZQUNyQixDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxtQ0FBbUMsQ0FBQyxJQUFvQjtRQUMzRCxNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDckUsQ0FBQztJQUVNLHdCQUF3QixDQUFDLFFBQWdCO1FBQzVDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLE9BQU8sQ0FBQyxtQkFBbUIsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNoRSxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUMsbUJBQW1CLEVBQThCLENBQUM7SUFDckUsQ0FBQztJQUVNLGVBQWUsQ0FBQyxJQUFvQjtRQUN2QyxNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3JELENBQUM7SUFFTSxRQUFRLENBQUMsUUFBZ0I7UUFDNUIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTSxRQUFRLENBQUMsUUFBZ0I7UUFDNUIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTSxhQUFhLENBQUMsS0FBc0I7UUFDdkMsS0FBSyxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFlBQVksQ0FBQyxJQUFvQixFQUFFLFdBQW9CO1FBQzFELGlDQUFpQztRQUNqQyxJQUFJLFFBQTRCLENBQUM7UUFDakMsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzlCLHVDQUF1QztZQUN2QyxRQUFRLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDO1FBQ3RELENBQUM7YUFBTSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLFFBQVEsR0FBRyxXQUFXLENBQUM7WUFDdkIsb0JBQW9CO1lBQ3BCLHFCQUFxQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ1osZ0pBQWdKO1lBQ2hKLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQ25CLDZCQUE2QixJQUFJLHVGQUF1RixFQUN4SCxZQUFZLENBQUMsS0FBSyxFQUNsQixJQUFJLENBQUMsWUFBWSxDQUNwQixDQUFDO1lBQ0YsT0FBTztRQUNYLENBQUM7UUFDRCxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNqRCxvSUFBb0k7WUFDcEksYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FDbkIsNkJBQTZCLElBQUksY0FBYyxRQUFRLHFEQUFxRCxFQUM1RyxZQUFZLENBQUMsS0FBSyxFQUNsQixJQUFJLENBQUMsWUFBWSxDQUNwQixDQUFDO1FBQ04sQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNuQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGFBQWEsQ0FBQyxLQUFzQjtRQUN2QyxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0lBRU0sWUFBWSxDQUFDLFFBQWtCLEVBQUUsUUFBZ0I7UUFDcEQsa0NBQWtDO1FBQ2xDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMxQyxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNqRCxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLG9CQUFvQixRQUFRLHdDQUF3QyxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pJLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDdkMsQ0FBQztJQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0VudW1UeXBlfSBmcm9tICcuLi9oZWxwZXJzL3R5cGUtaGVscGVycyc7XG5pbXBvcnQge0xvZ0xldmVsRW51bX0gZnJvbSAnLi4vbG9nL2xvZy5tb2RlbCc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uL2xvZy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge0NsYXNzQXR0cmlidXRlRGVmfSBmcm9tICcuLi9tb2RlbHMvY2xhc3MtYXR0cmlidXRlLm1vZGVsJztcbmltcG9ydCB7Q2xhc3NUeXBlfSBmcm9tICcuLi9tb2RlbHMvY2xhc3Mtc2VydmljZS5tb2RlbCc7XG5pbXBvcnQge2RlZmluZVJlZmxlY3RFbnVtTmFtZSwgZGVmaW5lUmVmbGVjdFR5cGVOYW1lLCBmaW5kUmVmbGVjdFR5cGVOYW1lLCByZWZsZWN0VHlwZU5hbWVFeGlzdHN9IGZyb20gJy4uL3JlZmxlY3QvdHlwZS1lbnVtLW1ldGFkYXRhJztcbmltcG9ydCB7UmVnaXN0cnlFbnVtTWFwLCBSZWdpc3RyeVR5cGVNYXB9IGZyb20gJy4vcmVnaXN0cnkubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgVHlwZVJlZ2lzdHJ5IHtcbiAgICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IFR5cGVSZWdpc3RyeSA9IG5ldyBUeXBlUmVnaXN0cnkoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9sb2dDYXRlZ29yeSA9ICdUeXBlUmVnaXN0cnknO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3R5cGVNYXA6IFJlZ2lzdHJ5VHlwZU1hcCA9IHt9O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VudW1NYXA6IFJlZ2lzdHJ5RW51bU1hcCA9IHt9O1xuXG4gICAgcHVibGljIGdldCB0eXBlTWFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZU1hcDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVudW1NYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnVtTWFwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9ubHkgdXNlIG9uZSBpbnN0YW5jZSBvZiBvYmplY3QgKG91dCBvZiBBbmd1bGFyIGNvbnRleHQpXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXQoKTogVHlwZVJlZ2lzdHJ5IHtcbiAgICAgICAgcmV0dXJuIFR5cGVSZWdpc3RyeS5faW5zdGFuY2U7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRBdHRyaWJ1dGVEZWZpbml0aW9uQnlDbGFzc1R5cGUodHlwZTogQ2xhc3NUeXBlPGFueT4sIGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IENsYXNzQXR0cmlidXRlRGVmIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHR5cGVOYW1lID0gZmluZFJlZmxlY3RUeXBlTmFtZSh0eXBlKTtcbiAgICAgICAgcmV0dXJuIHR5cGVOYW1lID8gdGhpcy5maW5kQXR0cmlidXRlRGVmaW5pdGlvbih0eXBlTmFtZSwgYXR0cmlidXRlTmFtZSkgOiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kQXR0cmlidXRlRGVmaW5pdGlvbih0eXBlTmFtZTogc3RyaW5nLCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiBDbGFzc0F0dHJpYnV0ZURlZiB8IG51bGwge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVEZWZzID0gdGhpcy5maW5kQXR0cmlidXRlc0RlZmluaXRpb24odHlwZU5hbWUpO1xuICAgICAgICBpZiAoIWF0dHJpYnV0ZURlZnMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZURlZnMpIHtcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUubmFtZSA9PT0gYXR0cmlidXRlTmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRBdHRyaWJ1dGVzRGVmaW5pdGlvbkJ5Q2xhc3NUeXBlKHR5cGU6IENsYXNzVHlwZTxhbnk+KTogQXJyYXk8Q2xhc3NBdHRyaWJ1dGVEZWY+IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHR5cGVOYW1lID0gZmluZFJlZmxlY3RUeXBlTmFtZSh0eXBlKTtcbiAgICAgICAgcmV0dXJuIHR5cGVOYW1lID8gdGhpcy5maW5kQXR0cmlidXRlc0RlZmluaXRpb24odHlwZU5hbWUpIDogbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZEF0dHJpYnV0ZXNEZWZpbml0aW9uKHR5cGVOYW1lOiBzdHJpbmcpOiBBcnJheTxDbGFzc0F0dHJpYnV0ZURlZj4gfCBudWxsIHtcbiAgICAgICAgY29uc3QgdHlwZURlZiA9IHRoaXMuZmluZFR5cGUodHlwZU5hbWUpO1xuICAgICAgICBpZiAoIXR5cGVEZWYgfHwgdHlwZW9mIHR5cGVEZWYuZ2V0QXR0cmlidXRlVHlwZU1hcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGVEZWYuZ2V0QXR0cmlidXRlVHlwZU1hcCgpIGFzIEFycmF5PENsYXNzQXR0cmlidXRlRGVmPjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZEJ5Q2xhc3NUeXBlKHR5cGU6IENsYXNzVHlwZTxhbnk+KTogYW55IHtcbiAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBmaW5kUmVmbGVjdFR5cGVOYW1lKHR5cGUpO1xuICAgICAgICByZXR1cm4gdHlwZU5hbWUgPyB0aGlzLmZpbmRUeXBlKHR5cGVOYW1lKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRUeXBlKHR5cGVOYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZU1hcFt0eXBlTmFtZV07XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRFbnVtKGVudW1OYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW51bU1hcFtlbnVtTmFtZV07XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyVHlwZXModHlwZXM6IFJlZ2lzdHJ5VHlwZU1hcCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0eXBlcykge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlclR5cGUodHlwZXNba2V5XSwga2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlclR5cGUodHlwZTogQ2xhc3NUeXBlPGFueT4sIG9wdFR5cGVOYW1lPzogc3RyaW5nKSB7XG4gICAgICAgIC8vIHRyeSB0byBmaW5kIG5hbWUgZnJvbSBtZXRhZGF0YVxuICAgICAgICBsZXQgdHlwZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHJlZmxlY3RUeXBlTmFtZUV4aXN0cyh0eXBlKSkge1xuICAgICAgICAgICAgLy8gZGVmaW5lZCBuYW1lIGZyb20gb3B0aW9uYWwgdHlwZSBuYW1lXG4gICAgICAgICAgICB0eXBlTmFtZSA9IGZpbmRSZWZsZWN0VHlwZU5hbWUodHlwZSkgPz8gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdFR5cGVOYW1lKSB7XG4gICAgICAgICAgICB0eXBlTmFtZSA9IG9wdFR5cGVOYW1lO1xuICAgICAgICAgICAgLy8gcmVnaXN0ZXIgbWV0YWRhdGFcbiAgICAgICAgICAgIGRlZmluZVJlZmxlY3RUeXBlTmFtZSh0eXBlLCB0eXBlTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXR5cGVOYW1lKSB7XG4gICAgICAgICAgICAvLyB0aGlzLl9sb2dnZXIuZGVidWcoYFdBUk5JTkc6IHJlZ2lzdGVyaW5nIHR5cGUgJHt0eXBlfSBmYWlsZWQsIGJlY2F1c2UgdHlwZU5hbWUgY291bGQgbm90IGJlIGRldGVybWluZWQgYW5kIG9wdGlvbmFsIG5hbWUgd2FzIG5vdCBwcm92aWRlZC5gKTtcbiAgICAgICAgICAgIExvZ2dlclNlcnZpY2UuZ2V0KCkubG9nKFxuICAgICAgICAgICAgICAgIGBXQVJOSU5HOiByZWdpc3RlcmluZyB0eXBlICR7dHlwZX0gZmFpbGVkLCBiZWNhdXNlIHR5cGVOYW1lIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkIGFuZCBvcHRpb25hbCBuYW1lIHdhcyBub3QgcHJvdmlkZWQuYCxcbiAgICAgICAgICAgICAgICBMb2dMZXZlbEVudW0uRGVidWcsXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nQ2F0ZWdvcnlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl90eXBlTWFwW3R5cGVOYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIC8vIHRoaXMuX2xvZ2dlci5kZWJ1ZyhgV0FSTklORzogcmVnaXN0ZXJpbmcgdHlwZSAke3R5cGV9IHVuZGVyIGtleSAke3R5cGVOYW1lfSBza2lwcGVkLCBiZWNhdXNlIHR5cGUgYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMga2V5LmApO1xuICAgICAgICAgICAgTG9nZ2VyU2VydmljZS5nZXQoKS5sb2coXG4gICAgICAgICAgICAgICAgYFdBUk5JTkc6IHJlZ2lzdGVyaW5nIHR5cGUgJHt0eXBlfSB1bmRlciBrZXkgJHt0eXBlTmFtZX0gc2tpcHBlZCwgYmVjYXVzZSB0eXBlIGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIGtleS5gLFxuICAgICAgICAgICAgICAgIExvZ0xldmVsRW51bS5EZWJ1ZyxcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dDYXRlZ29yeVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3R5cGVNYXBbdHlwZU5hbWVdID0gdHlwZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlckVudW1zKGVudW1zOiBSZWdpc3RyeUVudW1NYXApIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZW51bXMpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJFbnVtKGVudW1zW2tleV0sIGtleSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJFbnVtKGVudW1UeXBlOiBFbnVtVHlwZSwgZW51bU5hbWU6IHN0cmluZykge1xuICAgICAgICAvLyB0cnkgdG8gZmluZCBuYW1lIGZyb20gZGVjb3JhdG9yXG4gICAgICAgIGRlZmluZVJlZmxlY3RFbnVtTmFtZShlbnVtVHlwZSwgZW51bU5hbWUpO1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2VudW1NYXBbZW51bU5hbWVdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgTG9nZ2VyU2VydmljZS5nZXQoKS5sb2coYFJlZ2lzdGVyaW5nIGVudW0gJHtlbnVtTmFtZX0gc2tpcHBlZCwgYmVjYXVzZSBlbnVtIGFscmVhZHkgZXhpc3RzLmAsIExvZ0xldmVsRW51bS5EZWJ1ZywgdGhpcy5fbG9nQ2F0ZWdvcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZW51bU1hcFtlbnVtTmFtZV0gPSBlbnVtVHlwZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==","import { InjectionToken } from '@angular/core';\nexport const BROWSER_STORAGE_IT = new InjectionToken('BROWSER_STORAGE');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1zdG9yYWdlLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vY29yZS9zcmMvc2VydmljZXMvdG9rZW5zL2Jyb3dzZXItc3RvcmFnZS50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUFVLGlCQUFpQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGlvblRva2VufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNvbnN0IEJST1dTRVJfU1RPUkFHRV9JVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTdG9yYWdlPignQlJPV1NFUl9TVE9SQUdFJyk7XG4iXX0=","import { InjectionToken } from '@angular/core';\nexport const COMMONS_MODULE_CONFIG_IT = new InjectionToken('COMMONS_MODULE_CONFIG');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLWNvbmZpZy50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvcmUvc3JjL3NlcnZpY2VzL3Rva2Vucy9tb2R1bGUtY29uZmlnLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFnQzdDLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUFzQix1QkFBdUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3Rpb25Ub2tlbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7TG9nQ29uZmlnfSBmcm9tICcuLi8uLi9sb2cvbG9nLm1vZGVsJztcbmltcG9ydCB7VmVyc2lvbkNvbmZpZ1R5cGV9IGZyb20gJy4uLy4uL21vZGVscy92ZXJzaW9uLm1vZGVsJztcblxuZXhwb3J0IHR5cGUgQ29sb3JTY2hlbWUgPSAnbGlnaHQnIHwgJ2RhcmsnIHwgJ2F1dG8nO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbnNNb2R1bGVDb25maWcge1xuICAgIGFwcD86IHtcbiAgICAgICAgbmFtZT86IHN0cmluZztcbiAgICAgICAgb3duZXI/OiBzdHJpbmc7XG4gICAgICAgIGxvY2FsZXM/OiBzdHJpbmdbXTtcbiAgICAgICAgZGF0YUxvY2FsZXM/OiBzdHJpbmdbXTtcbiAgICAgICAgdmVyc2lvbj86IFZlcnNpb25Db25maWdUeXBlO1xuICAgIH07XG4gICAgY29uZmlndXJhdGlvbj86IHtcbiAgICAgICAgcHJvamVjdEVudmlyb25tZW50PzogYW55O1xuICAgICAgICBqc29uU291cmNlPzogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPjtcbiAgICAgICAgc2tpcEpzb25Tb3VyY2VJbml0PzogYm9vbGVhbjtcbiAgICAgICAganNvblNvdXJjZUVuYWJsZUVudlByb2Q/OiBib29sZWFuO1xuICAgIH07XG4gICAgc2VyaWFsaXphdGlvbj86IENvbW1vbnNTZXJpYWxpemF0aW9uQ29uZmlnO1xuICAgIGxvZz86IExvZ0NvbmZpZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tb25zU2VyaWFsaXphdGlvbkNvbmZpZyB7XG4gICAgZGF0ZVRpbWVJblV0Yz86IGJvb2xlYW47XG4gICAgZGF0ZVRpbWVXaXRoVGltZXpvbmU/OiBib29sZWFuO1xuICAgIGRhdGVUaW1lV2l0aE1pbGxpcz86IGJvb2xlYW47XG4gICAgZmlsdGVyc0RhdGVPbmx5RGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQ09NTU9OU19NT0RVTEVfQ09ORklHX0lUID0gbmV3IEluamVjdGlvblRva2VuPENvbW1vbnNNb2R1bGVDb25maWc+KCdDT01NT05TX01PRFVMRV9DT05GSUcnKTtcbiJdfQ==","import { DestroyRef, Injectable, computed, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Title } from '@angular/platform-browser';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { PrimeNG } from 'primeng/config';\nimport { filter } from 'rxjs/operators';\nimport { narrowI18nToTranslation } from '../i18n/i18n-common';\nimport { LoggerService } from '../log/logger.service';\nimport { effectWithDeps } from '../reactivity/effect';\nimport { BROWSER_STORAGE_IT } from './tokens/browser-storage.token';\nimport { COMMONS_MODULE_CONFIG_IT } from './tokens/module-config.token';\nimport * as i0 from \"@angular/core\";\nexport class CommonsService {\n getDefaultLocale() {\n const browserLang = this.translate.getBrowserLang();\n if (browserLang && this.appLocales().some(l => l === browserLang)) {\n return browserLang;\n }\n return this.appLocales()?.length > 0 ? this.appLocales()[0] : 'en';\n }\n initAppLocale() {\n const lsLang = this.localStorage.getItem('lang');\n if (lsLang && this.appLocales().some(l => l === lsLang)) {\n return lsLang;\n }\n return this.getDefaultLocale();\n }\n setAppLocale(language) {\n if (this.appLocales().some(l => l === language)) {\n this.translate.use(language);\n this._appLocale.set(language);\n if (language !== this.getDefaultLocale())\n this.localStorage.setItem('lang', language);\n else\n this.localStorage.removeItem('lang');\n }\n }\n clearAppLocale() {\n this.localStorage.removeItem('lang');\n this._appLocale.set(this.getDefaultLocale());\n }\n initAppDataLocale() {\n const dataLang = this.localStorage.getItem('dataLang');\n if (dataLang && this.appDataLocales().some(dl => dl === dataLang)) {\n return dataLang;\n }\n return this.appDataLocales()?.length > 0 ? this.getDefaultLocale() : 'en';\n }\n setAppDataLocale(dataLocale) {\n if (this.appDataLocales().some(dl => dl === dataLocale)) {\n this._appDataLocale.set(dataLocale);\n if (dataLocale !== this.getDefaultLocale())\n this.localStorage.setItem('dataLang', dataLocale);\n else\n this.localStorage.removeItem('dataLang');\n }\n }\n clearAppDataLocale() {\n this.localStorage.removeItem('lang');\n this._appDataLocale.set(this.getDefaultLocale());\n }\n constructor() {\n // internal\n this.logger = inject(LoggerService).create('CommonsService');\n this.router = inject(Router);\n this.primengConfig = inject(PrimeNG);\n this.translate = inject(TranslateService);\n this.titleService = inject(Title);\n this.moduleConfig = inject(COMMONS_MODULE_CONFIG_IT, { optional: true });\n this.localStorage = inject(BROWSER_STORAGE_IT);\n this.destroyRef = inject(DestroyRef);\n // breadcrumbs\n this.breadcrumbHome = signal({\n icon: 'pi pi-home',\n routerLink: '/'\n }, ...(ngDevMode ? [{ debugName: \"breadcrumbHome\" }] : []));\n this.breadcrumbs = signal([], ...(ngDevMode ? [{ debugName: \"breadcrumbs\" }] : []));\n // user\n this.user = signal(undefined, ...(ngDevMode ? [{ debugName: \"user\" }] : []));\n this.userRoles = signal([], ...(ngDevMode ? [{ debugName: \"userRoles\" }] : []));\n // APP section\n this.appName = signal(this.moduleConfig?.app?.name ?? 'app.name', ...(ngDevMode ? [{ debugName: \"appName\" }] : []));\n this.appOwner = signal(this.moduleConfig?.app?.owner ?? 'app.owner', ...(ngDevMode ? [{ debugName: \"appOwner\" }] : []));\n this.appLocales = signal(this.moduleConfig?.app?.locales ?? ['en'], ...(ngDevMode ? [{ debugName: \"appLocales\" }] : []));\n this._appLocale = signal(this.initAppLocale(), ...(ngDevMode ? [{ debugName: \"_appLocale\" }] : []));\n this.appLocale = computed(() => this._appLocale(), ...(ngDevMode ? [{ debugName: \"appLocale\" }] : []));\n this.appDataLocales = signal(this.moduleConfig?.app?.dataLocales ?? ['en'], ...(ngDevMode ? [{ debugName: \"appDataLocales\" }] : []));\n this._appDataLocale = signal(this.initAppDataLocale(), ...(ngDevMode ? [{ debugName: \"_appDataLocale\" }] : []));\n this.appDataLocale = computed(() => this._appDataLocale(), ...(ngDevMode ? [{ debugName: \"appDataLocale\" }] : []));\n this.appVersion = signal(this.moduleConfig?.app?.version, ...(ngDevMode ? [{ debugName: \"appVersion\" }] : []));\n // ripple\n this.primengConfig.ripple.set(true);\n effectWithDeps([this.appLocales, this.appDataLocales], ([appLocales, appDataLocales]) => {\n if (appLocales) {\n this.setAppLocale(this.initAppLocale());\n this.translate.addLangs(appLocales);\n this.translate.setFallbackLang(appLocales[0]);\n }\n if (appDataLocales)\n this.setAppDataLocale(this.initAppDataLocale());\n });\n this.router.events\n .pipe(\n // Filter the NavigationEnd events as the breadcrumb is updated only when the route reaches its end\n filter(event => event instanceof NavigationEnd), takeUntilDestroyed())\n .subscribe(() => {\n this.updateBreadcrumbs();\n this.setPageTitle();\n });\n this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe(() => {\n this.updateBreadcrumbs();\n this.setPageTitle();\n });\n this.translate\n .stream('mngPrime')\n .pipe(takeUntilDestroyed())\n .subscribe((value) => this.primengConfig.setTranslation(value));\n }\n initialize() {\n this.logger.debug('Initialize');\n }\n // BREADCRUMB actions\n findBreadcrumbItem(item) {\n const items = this.breadcrumbs();\n if (item.id) {\n return items.find(i => i.id && i.id === item.id) ?? null;\n }\n else if (item.routerLink) {\n const routerLinkStr = Array.isArray(item.routerLink) ? item.routerLink.join('/') : item.routerLink;\n return items.find(i => i.routerLink && (Array.isArray(i.routerLink) ? i.routerLink.join('/') : i.routerLink) === routerLinkStr) ?? null;\n }\n else if (item.positionIndex) {\n return items.find(i => i.positionIndex && i.positionIndex === i.positionIndex) ?? null;\n }\n else if (item.label) {\n return items.find(i => i.label && i.label === i.label) ?? null;\n }\n else if (item.icon) {\n return items.find(i => i.icon && i.icon === i.icon) ?? null;\n }\n return null;\n }\n updateBreadcrumbItem(item) {\n const items = [...this.breadcrumbs()];\n let posIdx = -1;\n if (item.id) {\n posIdx = items.findIndex(i => i.id && i.id === item.id);\n }\n else if (item.routerLink) {\n const routerLinkStr = Array.isArray(item.routerLink) ? item.routerLink.join('/') : item.routerLink;\n posIdx = items.findIndex(i => i.routerLink && (Array.isArray(i.routerLink) ? i.routerLink.join('/') : i.routerLink) === routerLinkStr);\n }\n else if (item.positionIndex) {\n posIdx = items.findIndex(i => i.positionIndex && i.positionIndex === i.positionIndex);\n }\n else if (item.label) {\n posIdx = items.findIndex(i => i.label && i.label === i.label);\n }\n else if (item.icon) {\n posIdx = items.findIndex(i => i.icon && i.icon === i.icon);\n }\n if (posIdx < 0) {\n return false;\n }\n items[posIdx] = {\n ...items[posIdx],\n ...item,\n updated: true\n };\n this.breadcrumbs.set(items);\n return true;\n }\n updateBreadcrumbs() {\n if (this.breadcrumbsTranslateSubscription) {\n this.breadcrumbsTranslateSubscription.unsubscribe();\n this.breadcrumbsTranslateSubscription = undefined;\n }\n if (this.breadcrumbHomeTranslateSubscription) {\n this.breadcrumbHomeTranslateSubscription.unsubscribe();\n this.breadcrumbHomeTranslateSubscription = undefined;\n }\n const rootRoute = this.router.routerState.snapshot.root;\n const homeBreadcrumb = this.generateHomeBreadcrumb(rootRoute);\n if (homeBreadcrumb) {\n if (homeBreadcrumb.label) {\n this.breadcrumbHomeTranslateSubscription = this.translate\n .get(homeBreadcrumb.label)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((i18n) => {\n homeBreadcrumb.label = i18n;\n this.breadcrumbHome.set(homeBreadcrumb);\n });\n }\n else {\n this.breadcrumbHome.set(homeBreadcrumb);\n }\n }\n const breadcrumbs = [];\n this.generateBreadcrumbs(rootRoute, [], breadcrumbs);\n breadcrumbs.forEach((b, idx) => {\n b.positionIndex = idx;\n });\n const i18nKeys = breadcrumbs.filter(b => typeof b.label === 'string').map(b => b.label);\n if (i18nKeys.length > 0) {\n this.breadcrumbsTranslateSubscription = this.translate\n .get(i18nKeys)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((i18n) => {\n // Construct the breadcrumb hierarchy\n breadcrumbs.forEach(b => {\n const translation = narrowI18nToTranslation(i18n, b.label);\n if (translation) {\n b.label = translation;\n }\n });\n // Emit the new breadcrumbs\n this.breadcrumbs.set(breadcrumbs);\n });\n }\n else {\n this.breadcrumbs.set(breadcrumbs);\n }\n }\n generateHomeBreadcrumb(route) {\n if (!route) {\n return null;\n }\n const routeData = route.data;\n const breadcrumbRouteData = routeData?.breadcrumb;\n if (breadcrumbRouteData && typeof breadcrumbRouteData === 'object' && 'isHome' in breadcrumbRouteData) {\n if (breadcrumbRouteData.isHome === false) {\n return null;\n }\n const breadcrumb = this.createBreadcrumb('/', breadcrumbRouteData, true);\n if (breadcrumb) {\n if (typeof breadcrumb.icon === 'undefined') {\n breadcrumb.icon = 'pi pi-home';\n }\n return breadcrumb;\n }\n }\n else {\n return this.generateHomeBreadcrumb(route.firstChild);\n }\n return null;\n }\n generateBreadcrumbs(route, parentUrlSegments, breadcrumbs) {\n if (!route) {\n return;\n }\n const routeData = route.data;\n const routeUrlSegments = parentUrlSegments.concat(route.url.map(url => url.path));\n const routeUrl = `/${routeUrlSegments.join('/')}`;\n if (routeData?.breadcrumb) {\n const breadcrumbRouteData = routeData.breadcrumb;\n if (Array.isArray(breadcrumbRouteData)) {\n for (const breadcrumbRouteDataItem of breadcrumbRouteData) {\n const breadcrumb = this.createBreadcrumb(routeUrl, breadcrumbRouteDataItem);\n if (breadcrumb) {\n breadcrumbs.push(breadcrumb);\n }\n }\n }\n else if (typeof breadcrumbRouteData === 'function') {\n breadcrumbs.push(...breadcrumbRouteData(routeUrl, route));\n }\n else {\n const breadcrumb = this.createBreadcrumb(routeUrl, breadcrumbRouteData);\n if (breadcrumb) {\n breadcrumbs.push(breadcrumb);\n }\n }\n }\n this.generateBreadcrumbs(route.firstChild, routeUrlSegments, breadcrumbs);\n }\n createBreadcrumb(routeUrl, routeBreadcrumb, includeHome = false) {\n const existingBreadcrumb = this.findBreadcrumbItem({ routerLink: routeUrl });\n if (existingBreadcrumb?.updated) {\n return existingBreadcrumb;\n }\n if (typeof routeBreadcrumb === 'string') {\n // check for updated existing breadcrumb\n return {\n id: routeUrl,\n label: routeBreadcrumb,\n routerLink: routeUrl\n };\n }\n else {\n if (!includeHome && typeof routeBreadcrumb.isHome !== 'undefined') {\n // home should not be included\n return null;\n }\n if (typeof routeBreadcrumb.routerLink === 'undefined') {\n routeBreadcrumb.routerLink = routeUrl;\n }\n routeBreadcrumb.id = routeUrl;\n return routeBreadcrumb;\n }\n }\n // TITLE section\n setPageTitle(title) {\n let currentRoute = this.router.routerState.snapshot.root;\n while (currentRoute.firstChild) {\n currentRoute = currentRoute.firstChild;\n }\n const routeData = currentRoute.data;\n const pageTitle = title ?? routeData.pageTitle;\n this.titleService.setTitle(this.formatPageTitle(pageTitle));\n }\n formatPageTitle(titlePrefix) {\n const titlePieces = [];\n if (titlePrefix) {\n titlePieces.push(this.translate.instant(titlePrefix));\n }\n titlePieces.push(this.translate.instant('app.name'));\n return titlePieces.join(' - ');\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsService, decorators: [{\n type: Injectable\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvc2VydmljZXMvY29tbW9ucy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRCxPQUFPLEVBQXlCLGFBQWEsRUFBRSxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU5RSxPQUFPLEVBQW9CLGdCQUFnQixFQUFpQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3hHLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR3BELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQzs7QUFHdEUsTUFBTSxPQUFPLGNBQWM7SUE0QmhCLGdCQUFnQjtRQUNuQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BELElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssV0FB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QyxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUVELFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUVyRCxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQzs4R0FqVlEsY0FBYztrSEFBZCxjQUFjOzsyRkFBZCxjQUFjO2tCQUQxQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEZXN0cm95UmVmLCBJbmplY3RhYmxlLCBjb21wdXRlZCwgaW5qZWN0LCBzaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7VGl0bGV9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7U3RyaWN0VHJhbnNsYXRpb24sIFRyYW5zbGF0ZVNlcnZpY2UsIFRyYW5zbGF0aW9uLCBUcmFuc2xhdGlvbk9iamVjdH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1ByaW1lTkd9IGZyb20gJ3ByaW1lbmcvY29uZmlnJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmlsdGVyfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7bmFycm93STE4blRvVHJhbnNsYXRpb259IGZyb20gJy4uL2kxOG4vaTE4bi1jb21tb24nO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi9sb2cvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtDb21tb25zTWVudUl0ZW19IGZyb20gJy4uL21vZGVscy9tZW51Lm1vZGVsJztcbmltcG9ydCB7SVVzZXJ9IGZyb20gJy4uL21vZGVscy91c2VyLm1vZGVsJztcbmltcG9ydCB7ZWZmZWN0V2l0aERlcHN9IGZyb20gJy4uL3JlYWN0aXZpdHkvZWZmZWN0JztcbmltcG9ydCB7QnJlYWRjcnVtYk1lbnVJdGVtLCBDb21tb25zUm91dGVEYXRhfSBmcm9tICcuLi9yb3V0ZXIvcm91dGVyLm1vZGVsJztcbmltcG9ydCB7QlJPV1NFUl9TVE9SQUdFX0lUfSBmcm9tICcuL3Rva2Vucy9icm93c2VyLXN0b3JhZ2UudG9rZW4nO1xuaW1wb3J0IHtDT01NT05TX01PRFVMRV9DT05GSUdfSVR9IGZyb20gJy4vdG9rZW5zL21vZHVsZS1jb25maWcudG9rZW4nO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29tbW9uc1NlcnZpY2Uge1xuICAgIC8vIGludGVybmFsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBpbmplY3QoTG9nZ2VyU2VydmljZSkuY3JlYXRlKCdDb21tb25zU2VydmljZScpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmltZW5nQ29uZmlnID0gaW5qZWN0KFByaW1lTkcpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdGl0bGVTZXJ2aWNlID0gaW5qZWN0KFRpdGxlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1vZHVsZUNvbmZpZyA9IGluamVjdChDT01NT05TX01PRFVMRV9DT05GSUdfSVQsIHtvcHRpb25hbDogdHJ1ZX0pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxTdG9yYWdlID0gaW5qZWN0KEJST1dTRVJfU1RPUkFHRV9JVCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLy8gYnJlYWRjcnVtYnNcbiAgICBwdWJsaWMgcmVhZG9ubHkgYnJlYWRjcnVtYkhvbWUgPSBzaWduYWw8Q29tbW9uc01lbnVJdGVtIHwgbnVsbD4oe1xuICAgICAgICBpY29uOiAncGkgcGktaG9tZScsXG4gICAgICAgIHJvdXRlckxpbms6ICcvJ1xuICAgIH0pO1xuICAgIHB1YmxpYyByZWFkb25seSBicmVhZGNydW1icyA9IHNpZ25hbDxDb21tb25zTWVudUl0ZW1bXT4oW10pO1xuICAgIHByaXZhdGUgYnJlYWRjcnVtYnNUcmFuc2xhdGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBicmVhZGNydW1iSG9tZVRyYW5zbGF0ZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIC8vIHVzZXJcbiAgICBwdWJsaWMgdXNlciA9IHNpZ25hbDxJVXNlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwdWJsaWMgdXNlclJvbGVzID0gc2lnbmFsPEFycmF5PHN0cmluZz4+KFtdKTtcblxuICAgIC8vIEFQUCBzZWN0aW9uXG4gICAgcHVibGljIGFwcE5hbWUgPSBzaWduYWwodGhpcy5tb2R1bGVDb25maWc/LmFwcD8ubmFtZSA/PyAnYXBwLm5hbWUnKTtcbiAgICBwdWJsaWMgYXBwT3duZXIgPSBzaWduYWwodGhpcy5tb2R1bGVDb25maWc/LmFwcD8ub3duZXIgPz8gJ2FwcC5vd25lcicpO1xuXG4gICAgcHVibGljIGdldERlZmF1bHRMb2NhbGUoKSB7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJMYW5nID0gdGhpcy50cmFuc2xhdGUuZ2V0QnJvd3NlckxhbmcoKTtcbiAgICAgICAgaWYgKGJyb3dzZXJMYW5nICYmIHRoaXMuYXBwTG9jYWxlcygpLnNvbWUobCA9PiBsID09PSBicm93c2VyTGFuZykpIHtcbiAgICAgICAgICAgIHJldHVybiBicm93c2VyTGFuZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hcHBMb2NhbGVzKCk/Lmxlbmd0aCA+IDAgPyB0aGlzLmFwcExvY2FsZXMoKVswXSA6ICdlbic7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcExvY2FsZXMgPSBzaWduYWwodGhpcy5tb2R1bGVDb25maWc/LmFwcD8ubG9jYWxlcyA/PyBbJ2VuJ10pO1xuICAgIHByaXZhdGUgX2FwcExvY2FsZSA9IHNpZ25hbDxzdHJpbmc+KHRoaXMuaW5pdEFwcExvY2FsZSgpKTtcbiAgICBwdWJsaWMgYXBwTG9jYWxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fYXBwTG9jYWxlKCkpO1xuXG4gICAgcHJpdmF0ZSBpbml0QXBwTG9jYWxlKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGxzTGFuZyA9IHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmcnKTtcbiAgICAgICAgaWYgKGxzTGFuZyAmJiB0aGlzLmFwcExvY2FsZXMoKS5zb21lKGwgPT4gbCA9PT0gbHNMYW5nKSkge1xuICAgICAgICAgICAgcmV0dXJuIGxzTGFuZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXREZWZhdWx0TG9jYWxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEFwcExvY2FsZShsYW5ndWFnZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmFwcExvY2FsZXMoKS5zb21lKGwgPT4gbCA9PT0gbGFuZ3VhZ2UpKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS51c2UobGFuZ3VhZ2UpO1xuICAgICAgICAgICAgdGhpcy5fYXBwTG9jYWxlLnNldChsYW5ndWFnZSk7XG4gICAgICAgICAgICBpZiAobGFuZ3VhZ2UgIT09IHRoaXMuZ2V0RGVmYXVsdExvY2FsZSgpKSB0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdsYW5nJywgbGFuZ3VhZ2UpO1xuICAgICAgICAgICAgZWxzZSB0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdsYW5nJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJBcHBMb2NhbGUoKSB7XG4gICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2xhbmcnKTtcbiAgICAgICAgdGhpcy5fYXBwTG9jYWxlLnNldCh0aGlzLmdldERlZmF1bHRMb2NhbGUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcERhdGFMb2NhbGVzID0gc2lnbmFsKHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/LmRhdGFMb2NhbGVzID8/IFsnZW4nXSk7XG4gICAgcHJpdmF0ZSBfYXBwRGF0YUxvY2FsZSA9IHNpZ25hbDxzdHJpbmc+KHRoaXMuaW5pdEFwcERhdGFMb2NhbGUoKSk7XG4gICAgcHVibGljIGFwcERhdGFMb2NhbGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9hcHBEYXRhTG9jYWxlKCkpO1xuXG4gICAgcHJpdmF0ZSBpbml0QXBwRGF0YUxvY2FsZSgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBkYXRhTGFuZyA9IHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RhdGFMYW5nJyk7XG4gICAgICAgIGlmIChkYXRhTGFuZyAmJiB0aGlzLmFwcERhdGFMb2NhbGVzKCkuc29tZShkbCA9PiBkbCA9PT0gZGF0YUxhbmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YUxhbmc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwRGF0YUxvY2FsZXMoKT8ubGVuZ3RoID4gMCA/IHRoaXMuZ2V0RGVmYXVsdExvY2FsZSgpIDogJ2VuJztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QXBwRGF0YUxvY2FsZShkYXRhTG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuYXBwRGF0YUxvY2FsZXMoKS5zb21lKGRsID0+IGRsID09PSBkYXRhTG9jYWxlKSkge1xuICAgICAgICAgICAgdGhpcy5fYXBwRGF0YUxvY2FsZS5zZXQoZGF0YUxvY2FsZSk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhTG9jYWxlICE9PSB0aGlzLmdldERlZmF1bHRMb2NhbGUoKSkgdGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZGF0YUxhbmcnLCBkYXRhTG9jYWxlKTtcbiAgICAgICAgICAgIGVsc2UgdGhpcy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnZGF0YUxhbmcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhckFwcERhdGFMb2NhbGUoKSB7XG4gICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2xhbmcnKTtcbiAgICAgICAgdGhpcy5fYXBwRGF0YUxvY2FsZS5zZXQodGhpcy5nZXREZWZhdWx0TG9jYWxlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhcHBWZXJzaW9uID0gc2lnbmFsKHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/LnZlcnNpb24pO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8vIHJpcHBsZVxuICAgICAgICB0aGlzLnByaW1lbmdDb25maWcucmlwcGxlLnNldCh0cnVlKTtcblxuICAgICAgICBlZmZlY3RXaXRoRGVwcyhbdGhpcy5hcHBMb2NhbGVzLCB0aGlzLmFwcERhdGFMb2NhbGVzXSwgKFthcHBMb2NhbGVzLCBhcHBEYXRhTG9jYWxlc10pID0+IHtcbiAgICAgICAgICAgIGlmIChhcHBMb2NhbGVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBcHBMb2NhbGUodGhpcy5pbml0QXBwTG9jYWxlKCkpO1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLmFkZExhbmdzKGFwcExvY2FsZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLnNldEZhbGxiYWNrTGFuZyhhcHBMb2NhbGVzWzBdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGFwcERhdGFMb2NhbGVzKSB0aGlzLnNldEFwcERhdGFMb2NhbGUodGhpcy5pbml0QXBwRGF0YUxvY2FsZSgpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAvLyBGaWx0ZXIgdGhlIE5hdmlnYXRpb25FbmQgZXZlbnRzIGFzIHRoZSBicmVhZGNydW1iIGlzIHVwZGF0ZWQgb25seSB3aGVuIHRoZSByb3V0ZSByZWFjaGVzIGl0cyBlbmRcbiAgICAgICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVCcmVhZGNydW1icygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UGFnZVRpdGxlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJyZWFkY3J1bWJzKCk7XG4gICAgICAgICAgICB0aGlzLnNldFBhZ2VUaXRsZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVxuICAgICAgICAgICAgLnN0cmVhbSgnbW5nUHJpbWUnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogVHJhbnNsYXRpb25PYmplY3QpID0+IHRoaXMucHJpbWVuZ0NvbmZpZy5zZXRUcmFuc2xhdGlvbih2YWx1ZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbml0aWFsaXplKCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5pdGlhbGl6ZScpO1xuICAgIH1cblxuICAgIC8vIEJSRUFEQ1JVTUIgYWN0aW9uc1xuICAgIHB1YmxpYyBmaW5kQnJlYWRjcnVtYkl0ZW0oaXRlbTogQ29tbW9uc01lbnVJdGVtKTogQ29tbW9uc01lbnVJdGVtIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5icmVhZGNydW1icygpO1xuICAgICAgICBpZiAoaXRlbS5pZCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbmQoaSA9PiBpLmlkICYmIGkuaWQgPT09IGl0ZW0uaWQpID8/IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5yb3V0ZXJMaW5rKSB7XG4gICAgICAgICAgICBjb25zdCByb3V0ZXJMaW5rU3RyID0gQXJyYXkuaXNBcnJheShpdGVtLnJvdXRlckxpbmspID8gaXRlbS5yb3V0ZXJMaW5rLmpvaW4oJy8nKSA6IGl0ZW0ucm91dGVyTGluaztcbiAgICAgICAgICAgIHJldHVybiBpdGVtcy5maW5kKGkgPT4gaS5yb3V0ZXJMaW5rICYmIChBcnJheS5pc0FycmF5KGkucm91dGVyTGluaykgPyBpLnJvdXRlckxpbmsuam9pbignLycpIDogaS5yb3V0ZXJMaW5rKSA9PT0gcm91dGVyTGlua1N0cikgPz8gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnBvc2l0aW9uSW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtcy5maW5kKGkgPT4gaS5wb3NpdGlvbkluZGV4ICYmIGkucG9zaXRpb25JbmRleCA9PT0gaS5wb3NpdGlvbkluZGV4KSA/PyBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ubGFiZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtcy5maW5kKGkgPT4gaS5sYWJlbCAmJiBpLmxhYmVsID09PSBpLmxhYmVsKSA/PyBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWNvbikge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbmQoaSA9PiBpLmljb24gJiYgaS5pY29uID09PSBpLmljb24pID8/IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUJyZWFkY3J1bWJJdGVtKGl0ZW06IENvbW1vbnNNZW51SXRlbSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmJyZWFkY3J1bWJzKCldO1xuICAgICAgICBsZXQgcG9zSWR4ID0gLTE7XG4gICAgICAgIGlmIChpdGVtLmlkKSB7XG4gICAgICAgICAgICBwb3NJZHggPSBpdGVtcy5maW5kSW5kZXgoaSA9PiBpLmlkICYmIGkuaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ucm91dGVyTGluaykge1xuICAgICAgICAgICAgY29uc3Qgcm91dGVyTGlua1N0ciA9IEFycmF5LmlzQXJyYXkoaXRlbS5yb3V0ZXJMaW5rKSA/IGl0ZW0ucm91dGVyTGluay5qb2luKCcvJykgOiBpdGVtLnJvdXRlckxpbms7XG4gICAgICAgICAgICBwb3NJZHggPSBpdGVtcy5maW5kSW5kZXgoaSA9PiBpLnJvdXRlckxpbmsgJiYgKEFycmF5LmlzQXJyYXkoaS5yb3V0ZXJMaW5rKSA/IGkucm91dGVyTGluay5qb2luKCcvJykgOiBpLnJvdXRlckxpbmspID09PSByb3V0ZXJMaW5rU3RyKTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnBvc2l0aW9uSW5kZXgpIHtcbiAgICAgICAgICAgIHBvc0lkeCA9IGl0ZW1zLmZpbmRJbmRleChpID0+IGkucG9zaXRpb25JbmRleCAmJiBpLnBvc2l0aW9uSW5kZXggPT09IGkucG9zaXRpb25JbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5sYWJlbCkge1xuICAgICAgICAgICAgcG9zSWR4ID0gaXRlbXMuZmluZEluZGV4KGkgPT4gaS5sYWJlbCAmJiBpLmxhYmVsID09PSBpLmxhYmVsKTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLmljb24pIHtcbiAgICAgICAgICAgIHBvc0lkeCA9IGl0ZW1zLmZpbmRJbmRleChpID0+IGkuaWNvbiAmJiBpLmljb24gPT09IGkuaWNvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zSWR4IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaXRlbXNbcG9zSWR4XSA9IHtcbiAgICAgICAgICAgIC4uLml0ZW1zW3Bvc0lkeF0sXG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgdXBkYXRlZDogdHJ1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuYnJlYWRjcnVtYnMuc2V0KGl0ZW1zKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUJyZWFkY3J1bWJzKCkge1xuICAgICAgICBpZiAodGhpcy5icmVhZGNydW1ic1RyYW5zbGF0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1ic1RyYW5zbGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1ic1RyYW5zbGF0ZVN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5icmVhZGNydW1iSG9tZVRyYW5zbGF0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1iSG9tZVRyYW5zbGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1iSG9tZVRyYW5zbGF0ZVN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvb3RSb3V0ZSA9IHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnJvb3Q7XG5cbiAgICAgICAgY29uc3QgaG9tZUJyZWFkY3J1bWIgPSB0aGlzLmdlbmVyYXRlSG9tZUJyZWFkY3J1bWIocm9vdFJvdXRlKTtcbiAgICAgICAgaWYgKGhvbWVCcmVhZGNydW1iKSB7XG4gICAgICAgICAgICBpZiAoaG9tZUJyZWFkY3J1bWIubGFiZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJIb21lVHJhbnNsYXRlU3Vic2NyaXB0aW9uID0gdGhpcy50cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgLmdldChob21lQnJlYWRjcnVtYi5sYWJlbClcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGkxOG46IFRyYW5zbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBob21lQnJlYWRjcnVtYi5sYWJlbCA9IGkxOG47XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJIb21lLnNldChob21lQnJlYWRjcnVtYik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJIb21lLnNldChob21lQnJlYWRjcnVtYik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBicmVhZGNydW1iczogQ29tbW9uc01lbnVJdGVtW10gPSBbXTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUJyZWFkY3J1bWJzKHJvb3RSb3V0ZSwgW10sIGJyZWFkY3J1bWJzKTtcblxuICAgICAgICBicmVhZGNydW1icy5mb3JFYWNoKChiLCBpZHgpID0+IHtcbiAgICAgICAgICAgIGIucG9zaXRpb25JbmRleCA9IGlkeDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaTE4bktleXM6IEFycmF5PHN0cmluZz4gPSBicmVhZGNydW1icy5maWx0ZXIoYiA9PiB0eXBlb2YgYi5sYWJlbCA9PT0gJ3N0cmluZycpLm1hcChiID0+IGIubGFiZWwhKTtcbiAgICAgICAgaWYgKGkxOG5LZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYnNUcmFuc2xhdGVTdWJzY3JpcHRpb24gPSB0aGlzLnRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIC5nZXQoaTE4bktleXMpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoaTE4bjogU3RyaWN0VHJhbnNsYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29uc3RydWN0IHRoZSBicmVhZGNydW1iIGhpZXJhcmNoeVxuICAgICAgICAgICAgICAgICAgICBicmVhZGNydW1icy5mb3JFYWNoKGIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSBuYXJyb3dJMThuVG9UcmFuc2xhdGlvbihpMThuLCBiLmxhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIubGFiZWwgPSB0cmFuc2xhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCB0aGUgbmV3IGJyZWFkY3J1bWJzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYnMuc2V0KGJyZWFkY3J1bWJzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYnMuc2V0KGJyZWFkY3J1bWJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVIb21lQnJlYWRjcnVtYihyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGwpOiBDb21tb25zTWVudUl0ZW0gfCBudWxsIHtcbiAgICAgICAgaWYgKCFyb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3V0ZURhdGEgPSByb3V0ZS5kYXRhIGFzIENvbW1vbnNSb3V0ZURhdGE7XG4gICAgICAgIGNvbnN0IGJyZWFkY3J1bWJSb3V0ZURhdGEgPSByb3V0ZURhdGE/LmJyZWFkY3J1bWI7XG4gICAgICAgIGlmIChicmVhZGNydW1iUm91dGVEYXRhICYmIHR5cGVvZiBicmVhZGNydW1iUm91dGVEYXRhID09PSAnb2JqZWN0JyAmJiAnaXNIb21lJyBpbiBicmVhZGNydW1iUm91dGVEYXRhKSB7XG4gICAgICAgICAgICBpZiAoYnJlYWRjcnVtYlJvdXRlRGF0YS5pc0hvbWUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBicmVhZGNydW1iID0gdGhpcy5jcmVhdGVCcmVhZGNydW1iKCcvJywgYnJlYWRjcnVtYlJvdXRlRGF0YSwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAoYnJlYWRjcnVtYikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYnJlYWRjcnVtYi5pY29uID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBicmVhZGNydW1iLmljb24gPSAncGkgcGktaG9tZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBicmVhZGNydW1iO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVIb21lQnJlYWRjcnVtYihyb3V0ZS5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlQnJlYWRjcnVtYnMocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsLCBwYXJlbnRVcmxTZWdtZW50czogc3RyaW5nW10sIGJyZWFkY3J1bWJzOiBDb21tb25zTWVudUl0ZW1bXSkge1xuICAgICAgICBpZiAoIXJvdXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3V0ZURhdGEgPSByb3V0ZS5kYXRhIGFzIENvbW1vbnNSb3V0ZURhdGE7XG4gICAgICAgIGNvbnN0IHJvdXRlVXJsU2VnbWVudHMgPSBwYXJlbnRVcmxTZWdtZW50cy5jb25jYXQocm91dGUudXJsLm1hcCh1cmwgPT4gdXJsLnBhdGgpKTtcbiAgICAgICAgY29uc3Qgcm91dGVVcmwgPSBgLyR7cm91dGVVcmxTZWdtZW50cy5qb2luKCcvJyl9YDtcbiAgICAgICAgaWYgKHJvdXRlRGF0YT8uYnJlYWRjcnVtYikge1xuICAgICAgICAgICAgY29uc3QgYnJlYWRjcnVtYlJvdXRlRGF0YSA9IHJvdXRlRGF0YS5icmVhZGNydW1iO1xuXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShicmVhZGNydW1iUm91dGVEYXRhKSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYnJlYWRjcnVtYlJvdXRlRGF0YUl0ZW0gb2YgYnJlYWRjcnVtYlJvdXRlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBicmVhZGNydW1iID0gdGhpcy5jcmVhdGVCcmVhZGNydW1iKHJvdXRlVXJsLCBicmVhZGNydW1iUm91dGVEYXRhSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChicmVhZGNydW1iKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhZGNydW1icy5wdXNoKGJyZWFkY3J1bWIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYnJlYWRjcnVtYlJvdXRlRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGJyZWFkY3J1bWJzLnB1c2goLi4uYnJlYWRjcnVtYlJvdXRlRGF0YShyb3V0ZVVybCwgcm91dGUpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnJlYWRjcnVtYiA9IHRoaXMuY3JlYXRlQnJlYWRjcnVtYihyb3V0ZVVybCwgYnJlYWRjcnVtYlJvdXRlRGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKGJyZWFkY3J1bWIpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWRjcnVtYnMucHVzaChicmVhZGNydW1iKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZW5lcmF0ZUJyZWFkY3J1bWJzKHJvdXRlLmZpcnN0Q2hpbGQsIHJvdXRlVXJsU2VnbWVudHMsIGJyZWFkY3J1bWJzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUJyZWFkY3J1bWIocm91dGVVcmw6IHN0cmluZywgcm91dGVCcmVhZGNydW1iOiBzdHJpbmcgfCBCcmVhZGNydW1iTWVudUl0ZW0sIGluY2x1ZGVIb21lID0gZmFsc2UpOiBDb21tb25zTWVudUl0ZW0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdCcmVhZGNydW1iID0gdGhpcy5maW5kQnJlYWRjcnVtYkl0ZW0oe3JvdXRlckxpbms6IHJvdXRlVXJsfSk7XG4gICAgICAgIGlmIChleGlzdGluZ0JyZWFkY3J1bWI/LnVwZGF0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleGlzdGluZ0JyZWFkY3J1bWI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByb3V0ZUJyZWFkY3J1bWIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAvLyBjaGVjayBmb3IgdXBkYXRlZCBleGlzdGluZyBicmVhZGNydW1iXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkOiByb3V0ZVVybCxcbiAgICAgICAgICAgICAgICBsYWJlbDogcm91dGVCcmVhZGNydW1iLFxuICAgICAgICAgICAgICAgIHJvdXRlckxpbms6IHJvdXRlVXJsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFpbmNsdWRlSG9tZSAmJiB0eXBlb2Ygcm91dGVCcmVhZGNydW1iLmlzSG9tZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAvLyBob21lIHNob3VsZCBub3QgYmUgaW5jbHVkZWRcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygcm91dGVCcmVhZGNydW1iLnJvdXRlckxpbmsgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcm91dGVCcmVhZGNydW1iLnJvdXRlckxpbmsgPSByb3V0ZVVybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvdXRlQnJlYWRjcnVtYi5pZCA9IHJvdXRlVXJsO1xuICAgICAgICAgICAgcmV0dXJuIHJvdXRlQnJlYWRjcnVtYjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRJVExFIHNlY3Rpb25cblxuICAgIHB1YmxpYyBzZXRQYWdlVGl0bGUodGl0bGU/OiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IGN1cnJlbnRSb3V0ZSA9IHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnJvb3Q7XG4gICAgICAgIHdoaWxlIChjdXJyZW50Um91dGUuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgY3VycmVudFJvdXRlID0gY3VycmVudFJvdXRlLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3V0ZURhdGEgPSBjdXJyZW50Um91dGUuZGF0YSBhcyBDb21tb25zUm91dGVEYXRhO1xuICAgICAgICBjb25zdCBwYWdlVGl0bGUgPSB0aXRsZSA/PyByb3V0ZURhdGEucGFnZVRpdGxlO1xuXG4gICAgICAgIHRoaXMudGl0bGVTZXJ2aWNlLnNldFRpdGxlKHRoaXMuZm9ybWF0UGFnZVRpdGxlKHBhZ2VUaXRsZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9ybWF0UGFnZVRpdGxlKHRpdGxlUHJlZml4Pzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRpdGxlUGllY2VzID0gW107XG5cbiAgICAgICAgaWYgKHRpdGxlUHJlZml4KSB7XG4gICAgICAgICAgICB0aXRsZVBpZWNlcy5wdXNoKHRoaXMudHJhbnNsYXRlLmluc3RhbnQodGl0bGVQcmVmaXgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRpdGxlUGllY2VzLnB1c2godGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYXBwLm5hbWUnKSk7XG5cbiAgICAgICAgcmV0dXJuIHRpdGxlUGllY2VzLmpvaW4oJyAtICcpO1xuICAgIH1cbn1cbiJdfQ==","export var PermissionTypeEnum;\n(function (PermissionTypeEnum) {\n PermissionTypeEnum[\"All\"] = \"ALL\";\n PermissionTypeEnum[\"Any\"] = \"ANY\";\n PermissionTypeEnum[\"Rbac\"] = \"ROLE_BASED_ACCESS_CONTROL\";\n PermissionTypeEnum[\"Service\"] = \"SERVICE\";\n})(PermissionTypeEnum || (PermissionTypeEnum = {}));\nexport class APermissions {\n constructor(type) {\n this._authorizationType = type;\n }\n get authorizationType() {\n return this._authorizationType;\n }\n}\nexport var Permissions;\n(function (Permissions) {\n class All extends APermissions {\n constructor() {\n super(PermissionTypeEnum.All);\n this._permissions = [];\n }\n static of(...permissions) {\n const inst = new All();\n inst.and(...permissions);\n return inst;\n }\n get permissions() {\n return this._permissions;\n }\n and(...permissions) {\n this._permissions.push(...permissions);\n return this;\n }\n }\n Permissions.All = All;\n class Any extends APermissions {\n constructor() {\n super(PermissionTypeEnum.Any);\n this._permissions = [];\n }\n static of(...permissions) {\n const inst = new Any();\n inst.or(...permissions);\n return inst;\n }\n get permissions() {\n return this._permissions;\n }\n or(...permissions) {\n this._permissions.push(...permissions);\n return this;\n }\n }\n Permissions.Any = Any;\n class Roles extends APermissions {\n constructor() {\n super(PermissionTypeEnum.Rbac);\n this._roles = [];\n }\n static of(...roles) {\n const inst = new Roles();\n inst.or(...roles);\n return inst;\n }\n get roles() {\n return this._roles;\n }\n and(...roles) {\n if (this._roles.length === 0) {\n this._roles.push([]);\n }\n this._roles[this._roles.length - 1].push(...roles);\n return this;\n }\n or(...roles) {\n this._roles.push(...roles.map(s => [s]));\n return this;\n }\n }\n Permissions.Roles = Roles;\n class Service extends APermissions {\n constructor(service) {\n super(PermissionTypeEnum.Service);\n this.service = service;\n }\n static of(service) {\n return new Service(service);\n }\n }\n Permissions.Service = Service;\n})(Permissions || (Permissions = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9zZWN1cml0eS9wZXJtaXNzaW9ucy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxNQUFNLENBQU4sSUFBWSxrQkFLWDtBQUxELFdBQVksa0JBQWtCO0lBQzFCLGlDQUFXLENBQUE7SUFDWCxpQ0FBVyxDQUFBO0lBQ1gsd0RBQWtDLENBQUE7SUFDbEMseUNBQW1CLENBQUE7QUFDdkIsQ0FBQyxFQUxXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFLN0I7QUF5Q0QsTUFBTSxPQUFnQixZQUFZO0lBRzlCLFlBQVksSUFBd0I7UUFDaEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBVyxpQkFBaUI7UUFDeEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDbkMsQ0FBQztDQUNKO0FBRUQsTUFBTSxLQUFXLFdBQVcsQ0F1RjNCO0FBdkZELFdBQWlCLFdBQVc7SUFDeEIsTUFBYSxHQUFJLFNBQVEsWUFBWTtRQUdqQztZQUNJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUgxQixpQkFBWSxHQUF3QixFQUFFLENBQUM7UUFJL0MsQ0FBQztRQUVNLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFnQztZQUNoRCxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQztZQUN6QixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBRUQsSUFBVyxXQUFXO1lBQ2xCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztRQUM3QixDQUFDO1FBRU0sR0FBRyxDQUFDLEdBQUcsV0FBZ0M7WUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQztZQUN2QyxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0tBQ0o7SUFyQlksZUFBRyxNQXFCZixDQUFBO0lBRUQsTUFBYSxHQUFJLFNBQVEsWUFBWTtRQUdqQztZQUNJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUgxQixpQkFBWSxHQUF3QixFQUFFLENBQUM7UUFJL0MsQ0FBQztRQUVNLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFnQztZQUNoRCxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQztZQUN4QixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBRUQsSUFBVyxXQUFXO1lBQ2xCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztRQUM3QixDQUFDO1FBRU0sRUFBRSxDQUFDLEdBQUcsV0FBZ0M7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQztZQUN2QyxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0tBQ0o7SUFyQlksZUFBRyxNQXFCZixDQUFBO0lBRUQsTUFBYSxLQUFNLFNBQVEsWUFBWTtRQUduQztZQUNJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUgzQixXQUFNLEdBQXlCLEVBQUUsQ0FBQztRQUkxQyxDQUFDO1FBRU0sTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQW9CO1lBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxJQUFXLEtBQUs7WUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdkIsQ0FBQztRQUVNLEdBQUcsQ0FBQyxHQUFHLEtBQW9CO1lBQzlCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pCLENBQUM7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ25ELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFTSxFQUFFLENBQUMsR0FBRyxLQUFvQjtZQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QyxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0tBQ0o7SUE3QlksaUJBQUssUUE2QmpCLENBQUE7SUFFRCxNQUFhLE9BQVEsU0FBUSxZQUFZO1FBQ3JDLFlBQW9DLE9BQWlDO1lBQ2pFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQURGLFlBQU8sR0FBUCxPQUFPLENBQTBCO1FBRXJFLENBQUM7UUFFTSxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQWlDO1lBQzlDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsQ0FBQztLQUNKO0lBUlksbUJBQU8sVUFRbkIsQ0FBQTtBQUNMLENBQUMsRUF2RmdCLFdBQVcsS0FBWCxXQUFXLFFBdUYzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJvdXRlclN0YXRlU25hcHNob3R9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7QWN0aW9uUGFyYW1ldGVyc30gZnJvbSAnLi4vYWN0aW9uL2FjdGlvbi1wYXJhbWV0ZXJzLm1vZGVsJztcbmltcG9ydCB7SURhdGFQcm92aWRlcn0gZnJvbSAnLi4vZGF0YS1wcm92aWRlcnMvYmFzZS5kYXRhLXByb3ZpZGVyJztcbmltcG9ydCB7SUFjdGlvbkRlc2NyaXB0b3J9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL2FjdGlvbi5kZXNjcmlwdG9yJztcbmltcG9ydCB7Q29tbW9uc01lbnVJdGVtfSBmcm9tICcuLi9tb2RlbHMvbWVudS5tb2RlbCc7XG5cbmV4cG9ydCBlbnVtIFBlcm1pc3Npb25UeXBlRW51bSB7XG4gICAgQWxsID0gJ0FMTCcsXG4gICAgQW55ID0gJ0FOWScsXG4gICAgUmJhYyA9ICdST0xFX0JBU0VEX0FDQ0VTU19DT05UUk9MJyxcbiAgICBTZXJ2aWNlID0gJ1NFUlZJQ0UnXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFjdGlvbkNvbnRleHRWYWxpZGF0aW9uPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+IHtcbiAgICBkZXNjcmlwdG9yOiBJQWN0aW9uRGVzY3JpcHRvcjxJdGVtLCBTZXJ2aWNlPjtcbiAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+O1xuICAgIHNlcnZpY2VJbnN0YW5jZTogU2VydmljZTtcbiAgICBkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPEl0ZW0sIFNlcnZpY2U+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQZXJtaXNzaW9uU2VydmljZSB7XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgcm91dGUgY2FuIGJlIGFjdGl2YXRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWN0aXZhdGVkUm91dGVTbmFwc2hvdH0gcm91dGUgLSBUaGUgcm91dGUgc25hcHNob3Qgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY3VycmVudCByb3V0ZSBmb3IgYWN0aXZhdGlvbi5cbiAgICAgKiBAcGFyYW0ge1JvdXRlclN0YXRlU25hcHNob3R9IHN0YXRlIC0gVGhlIHJvdXRlciBzdGF0ZSBzbmFwc2hvdFxuICAgICAqXG4gICAgICogQHJldHVybnMge09ic2VydmFibGU8Ym9vbGVhbj59IC0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHJvdXRlIGNhbiBiZSBhY3RpdmF0ZWQuXG4gICAgICovXG4gICAgY2FuQWN0aXZhdGVSb3V0ZShyb3V0ZT86IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlPzogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbj47IC8vY2hlY2sgZ3VhcmRzXG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHRoZSB2aXNpYmlsaXR5IG9mIG1lbnUgaXRlbS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q29tbW9uc01lbnVJdGVtfSBtZW51SXRlbSAtIFRoZSBtZW51IGl0ZW0gdG8gY2hlY2suXG4gICAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxib29sZWFuPn0gLSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgYSBib29sZWFuIGluZGljYXRpbmdcbiAgICAgKiB3aGV0aGVyIHRoZSBtZW51IGl0ZW0gaXMgdmlzaWJsZSBvciBub3QuXG4gICAgICovXG4gICAgaXNNZW51aXRlbVZpc2libGUobWVudUl0ZW06IENvbW1vbnNNZW51SXRlbSk6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBzcGVjaWZpZWQgYWN0aW9uIGlzIHZpc2libGUgYmFzZWQgb24gdGhlIGFjdGlvbiBjb250ZXh0IGFuZCByb3V0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7SUFjdGlvbkNvbnRleHRWYWxpZGF0aW9uPGFueSwgYW55Pn0gW2FjdGlvbkN0eF0gLSBUaGUgYWN0aW9uIGNvbnRleHQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmb3IgdmFsaWRhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FjdGl2YXRlZFJvdXRlU25hcHNob3R9IFtyb3V0ZV0gLSBUaGUgY3VycmVudCByb3V0ZSBzbmFwc2hvdCBjb250YWluaW5nIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZm9yIHZhbGlkYXRpb24uXG4gICAgICogQHBhcmFtIHtSb3V0ZXJTdGF0ZVNuYXBzaG90fSBzdGF0ZSAtIFRoZSByb3V0ZXIgc3RhdGUgc25hcHNob3RcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge09ic2VydmFibGU8Ym9vbGVhbj59IC0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB2aXNpYmlsaXR5IHN0YXR1cyBvZiB0aGUgYWN0aW9uLlxuICAgICAqL1xuICAgIGlzQWN0aW9uVmlzaWJsZShhY3Rpb25DdHg/OiBJQWN0aW9uQ29udGV4dFZhbGlkYXRpb248YW55LCBhbnk+LCByb3V0ZT86IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlPzogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbj47XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBUGVybWlzc2lvbnMge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2F1dGhvcml6YXRpb25UeXBlOiBQZXJtaXNzaW9uVHlwZUVudW07XG5cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBQZXJtaXNzaW9uVHlwZUVudW0pIHtcbiAgICAgICAgdGhpcy5fYXV0aG9yaXphdGlvblR5cGUgPSB0eXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXV0aG9yaXphdGlvblR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRob3JpemF0aW9uVHlwZTtcbiAgICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUGVybWlzc2lvbnMge1xuICAgIGV4cG9ydCBjbGFzcyBBbGwgZXh0ZW5kcyBBUGVybWlzc2lvbnMge1xuICAgICAgICBwcml2YXRlIF9wZXJtaXNzaW9uczogQXJyYXk8QVBlcm1pc3Npb25zPiA9IFtdO1xuXG4gICAgICAgIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICBzdXBlcihQZXJtaXNzaW9uVHlwZUVudW0uQWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgb2YoLi4ucGVybWlzc2lvbnM6IEFycmF5PEFQZXJtaXNzaW9ucz4pOiBBbGwge1xuICAgICAgICAgICAgY29uc3QgaW5zdCA9IG5ldyBBbGwoKTtcbiAgICAgICAgICAgIGluc3QuYW5kKC4uLnBlcm1pc3Npb25zKTtcbiAgICAgICAgICAgIHJldHVybiBpbnN0O1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIGdldCBwZXJtaXNzaW9ucygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wZXJtaXNzaW9ucztcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBhbmQoLi4ucGVybWlzc2lvbnM6IEFycmF5PEFQZXJtaXNzaW9ucz4pOiB0aGlzIHtcbiAgICAgICAgICAgIHRoaXMuX3Blcm1pc3Npb25zLnB1c2goLi4ucGVybWlzc2lvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnQgY2xhc3MgQW55IGV4dGVuZHMgQVBlcm1pc3Npb25zIHtcbiAgICAgICAgcHJpdmF0ZSBfcGVybWlzc2lvbnM6IEFycmF5PEFQZXJtaXNzaW9ucz4gPSBbXTtcblxuICAgICAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgc3VwZXIoUGVybWlzc2lvblR5cGVFbnVtLkFueSk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIG9mKC4uLnBlcm1pc3Npb25zOiBBcnJheTxBUGVybWlzc2lvbnM+KTogQW55IHtcbiAgICAgICAgICAgIGNvbnN0IGluc3QgPSBuZXcgQW55KCk7XG4gICAgICAgICAgICBpbnN0Lm9yKC4uLnBlcm1pc3Npb25zKTtcbiAgICAgICAgICAgIHJldHVybiBpbnN0O1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIGdldCBwZXJtaXNzaW9ucygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wZXJtaXNzaW9ucztcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBvciguLi5wZXJtaXNzaW9uczogQXJyYXk8QVBlcm1pc3Npb25zPik6IHRoaXMge1xuICAgICAgICAgICAgdGhpcy5fcGVybWlzc2lvbnMucHVzaCguLi5wZXJtaXNzaW9ucyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cG9ydCBjbGFzcyBSb2xlcyBleHRlbmRzIEFQZXJtaXNzaW9ucyB7XG4gICAgICAgIHByaXZhdGUgX3JvbGVzOiBBcnJheTxBcnJheTxzdHJpbmc+PiA9IFtdO1xuXG4gICAgICAgIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICBzdXBlcihQZXJtaXNzaW9uVHlwZUVudW0uUmJhYyk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIG9mKC4uLnJvbGVzOiBBcnJheTxzdHJpbmc+KTogUm9sZXMge1xuICAgICAgICAgICAgY29uc3QgaW5zdCA9IG5ldyBSb2xlcygpO1xuICAgICAgICAgICAgaW5zdC5vciguLi5yb2xlcyk7XG4gICAgICAgICAgICByZXR1cm4gaW5zdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBnZXQgcm9sZXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm9sZXM7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgYW5kKC4uLnJvbGVzOiBBcnJheTxzdHJpbmc+KTogdGhpcyB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcm9sZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcm9sZXMucHVzaChbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9yb2xlc1t0aGlzLl9yb2xlcy5sZW5ndGggLSAxXS5wdXNoKC4uLnJvbGVzKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIG9yKC4uLnJvbGVzOiBBcnJheTxzdHJpbmc+KTogdGhpcyB7XG4gICAgICAgICAgICB0aGlzLl9yb2xlcy5wdXNoKC4uLnJvbGVzLm1hcChzID0+IFtzXSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnQgY2xhc3MgU2VydmljZSBleHRlbmRzIEFQZXJtaXNzaW9ucyB7XG4gICAgICAgIHByaXZhdGUgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHNlcnZpY2U6IFR5cGU8SVBlcm1pc3Npb25TZXJ2aWNlPikge1xuICAgICAgICAgICAgc3VwZXIoUGVybWlzc2lvblR5cGVFbnVtLlNlcnZpY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBvZihzZXJ2aWNlOiBUeXBlPElQZXJtaXNzaW9uU2VydmljZT4pOiBTZXJ2aWNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2VydmljZShzZXJ2aWNlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==","import { CommonsInternalError } from '../error/error.model';\nimport { PermissionTypeEnum } from './permissions.model';\nexport function isPermitted(permissions, userRoles) {\n switch (permissions.authorizationType) {\n case PermissionTypeEnum.Rbac:\n return isRbacPermitted(permissions, userRoles);\n default:\n throw new CommonsInternalError(`Permission type \"${permissions.authorizationType}\" not implemented`);\n }\n}\nexport function isRbacPermitted(permissions, userRoles) {\n return permissions.roles.some(prg => prg.every(pr => userRoles.indexOf(pr) > -1));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvc2VjdXJpdHkvcGVybWlzc2lvbi1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBZSxrQkFBa0IsRUFBYyxNQUFNLHFCQUFxQixDQUFDO0FBRWxGLE1BQU0sVUFBVSxXQUFXLENBQUMsV0FBeUIsRUFBRSxTQUF3QjtJQUMzRSxRQUFRLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3BDLEtBQUssa0JBQWtCLENBQUMsSUFBSTtZQUN4QixPQUFPLGVBQWUsQ0FBQyxXQUFnQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3hFO1lBQ0ksTUFBTSxJQUFJLG9CQUFvQixDQUFDLG9CQUFvQixXQUFXLENBQUMsaUJBQWlCLG1CQUFtQixDQUFDLENBQUM7SUFDN0csQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLFdBQThCLEVBQUUsU0FBd0I7SUFDcEYsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21tb25zSW50ZXJuYWxFcnJvcn0gZnJvbSAnLi4vZXJyb3IvZXJyb3IubW9kZWwnO1xuaW1wb3J0IHtBUGVybWlzc2lvbnMsIFBlcm1pc3Npb25UeXBlRW51bSwgUGVybWlzc2lvbnN9IGZyb20gJy4vcGVybWlzc2lvbnMubW9kZWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQZXJtaXR0ZWQocGVybWlzc2lvbnM6IEFQZXJtaXNzaW9ucywgdXNlclJvbGVzOiBBcnJheTxzdHJpbmc+KTogYm9vbGVhbiB7XG4gICAgc3dpdGNoIChwZXJtaXNzaW9ucy5hdXRob3JpemF0aW9uVHlwZSkge1xuICAgICAgICBjYXNlIFBlcm1pc3Npb25UeXBlRW51bS5SYmFjOlxuICAgICAgICAgICAgcmV0dXJuIGlzUmJhY1Blcm1pdHRlZChwZXJtaXNzaW9ucyBhcyBQZXJtaXNzaW9ucy5Sb2xlcywgdXNlclJvbGVzKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgUGVybWlzc2lvbiB0eXBlIFwiJHtwZXJtaXNzaW9ucy5hdXRob3JpemF0aW9uVHlwZX1cIiBub3QgaW1wbGVtZW50ZWRgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JiYWNQZXJtaXR0ZWQocGVybWlzc2lvbnM6IFBlcm1pc3Npb25zLlJvbGVzLCB1c2VyUm9sZXM6IEFycmF5PHN0cmluZz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGVybWlzc2lvbnMucm9sZXMuc29tZShwcmcgPT4gcHJnLmV2ZXJ5KHByID0+IHVzZXJSb2xlcy5pbmRleE9mKHByKSA+IC0xKSk7XG59XG4iXX0=","import { Injectable, Injector, inject } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { combineLatest, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { LoggerService } from '../log/logger.service';\nimport { CommonsService } from '../services/commons.service';\nimport { isPermitted } from './permission-helpers';\nimport { PermissionTypeEnum } from './permissions.model';\nimport * as i0 from \"@angular/core\";\nexport class PermissionService {\n constructor() {\n this.injector = inject(Injector);\n this.commons = inject(CommonsService);\n this.logger = inject(LoggerService).create('AuthorizationService');\n this.userRoles$ = toObservable(this.commons.userRoles);\n }\n canActivateRoute(permissions, route, state) {\n switch (permissions.authorizationType) {\n case PermissionTypeEnum.All:\n return this.canActivateRouteAll(permissions, route, state);\n case PermissionTypeEnum.Any:\n return this.canActivateRouteAny(permissions, route, state);\n case PermissionTypeEnum.Service:\n return this.canActivateRouteService(permissions, route, state);\n default:\n return this.userRoles$.pipe(map(ur => isPermitted(permissions, ur)));\n }\n }\n canActivateRouteAll(permission, route, state) {\n return combineLatest(permission.permissions.map(p => this.canActivateRoute(p, route, state))).pipe(map(res => res.every(ip => ip === true)));\n }\n canActivateRouteAny(permissions, route, state) {\n return combineLatest(permissions.permissions.map(p => this.canActivateRoute(p, route, state))).pipe(map(res => res.some(ip => ip === true)));\n }\n canActivateRouteService(permission, route, state) {\n const serviceInstance = this.injector.get(permission.service);\n if (!serviceInstance) {\n this.logger.debug(`WARNING: Service instance could not be retrieved for type ${permission.service}`);\n return of(false);\n }\n return serviceInstance.canActivateRoute(route, state);\n }\n isMenuItemVisible(permissions, menuItem) {\n switch (permissions.authorizationType) {\n case PermissionTypeEnum.All:\n return this.isMenuItemVisibleAll(permissions, menuItem);\n case PermissionTypeEnum.Any:\n return this.isMenuItemVisibleAny(permissions, menuItem);\n case PermissionTypeEnum.Service:\n return this.isMenuItemVisibleService(permissions, menuItem);\n default:\n return this.userRoles$.pipe(map(role => isPermitted(permissions, role)));\n }\n }\n isMenuItemVisibleAll(permission, menuItem) {\n return combineLatest(permission.permissions.map(p => this.isMenuItemVisible(p, menuItem))).pipe(map(res => res.every(ip => ip === true)));\n }\n isMenuItemVisibleAny(permission, menuItem) {\n return combineLatest(permission.permissions.map(p => this.isMenuItemVisible(p, menuItem))).pipe(map(res => res.some(ip => ip === true)));\n }\n isMenuItemVisibleService(permission, menuItem) {\n const serviceInstance = this.injector.get(permission.service);\n if (!serviceInstance) {\n this.logger.debug(`WARNING: Service instance could not be retreived for type ${permission.service}`);\n return of(false);\n }\n return serviceInstance.isMenuitemVisible(menuItem);\n }\n isActionVisible(permissions, actionCtx, route, state) {\n switch (permissions.authorizationType) {\n case PermissionTypeEnum.All:\n return this.isActionVisibleAll(permissions, actionCtx, route, state);\n case PermissionTypeEnum.Any:\n return this.isActionVisibleAny(permissions, actionCtx, route, state);\n case PermissionTypeEnum.Service:\n return this.isActionVisibleService(permissions, actionCtx, route, state);\n default:\n return this.userRoles$.pipe(map(ur => isPermitted(permissions, ur)));\n }\n }\n isActionVisibleAll(permission, actionCtx, route, state) {\n return combineLatest(permission.permissions.map(p => this.isActionVisible(p, actionCtx, route, state))).pipe(map(res => res.every(ip => ip === true)));\n }\n isActionVisibleAny(permission, actionCtx, route, state) {\n return combineLatest(permission.permissions.map(p => this.isActionVisible(p, actionCtx, route, state))).pipe(map(res => res.some(ip => ip === true)));\n }\n isActionVisibleService(permission, actionCtx, route, state) {\n const serviceInstance = this.injector.get(permission.service);\n if (!serviceInstance) {\n this.logger.debug(`WARNING: Service instance could not be retreived for type ${permission.service}`);\n return of(false);\n }\n return serviceInstance.isActionVisible(actionCtx, route, state);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: PermissionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: PermissionService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: PermissionService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvc2VjdXJpdHkvcGVybWlzc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFHeEQsT0FBTyxFQUFhLGFBQWEsRUFBRSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRW5DLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBeUMsa0JBQWtCLEVBQWMsTUFBTSxxQkFBcUIsQ0FBQzs7QUFHNUcsTUFBTSxPQUFPLGlCQUFpQjtJQUQ5QjtRQUVxQixhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLFlBQU8sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUV2RSxlQUFVLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7S0FnRzdEO0lBOUZVLGdCQUFnQixDQUFDLFdBQXlCLEVBQUUsS0FBOEIsRUFBRSxLQUEyQjtRQUMxRyxRQUFRLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BDLEtBQUssa0JBQWtCLENBQUMsR0FBRztnQkFDdkIsT0FBTyxJQUFJLENB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QztJQUMzSixDQUFDO0lBRU8sa0JBQWtCLENBQUMsVUFBMkIsRUFBRSxTQUE2QyxFQUFFLEtBQThCLEVBQUUsS0FBMkI7UUFDOUosT0FBTyxhQUFhLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUosQ0FBQztJQUVPLHNCQUFzQixDQUFDLFVBQStCLEVBQUUsU0FBNkMsRUFBRSxLQUE4QixFQUFFLEtBQTJCO1FBQ3RLLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkRBQTZELFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3JHLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxPQUFPLGVBQWUsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwRSxDQUFDOzhHQXBHUSxpQkFBaUI7a0hBQWpCLGlCQUFpQjs7MkZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0b3IsIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3RvT2JzZXJ2YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXJTdGF0ZVNuYXBzaG90fSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge09ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vbG9nL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7Q29tbW9uc01lbnVJdGVtfSBmcm9tICcuLi9tb2RlbHMvbWVudS5tb2RlbCc7XG5pbXBvcnQge0NvbW1vbnNTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9jb21tb25zLnNlcnZpY2UnO1xuaW1wb3J0IHtpc1Blcm1pdHRlZH0gZnJvbSAnLi9wZXJtaXNzaW9uLWhlbHBlcnMnO1xuaW1wb3J0IHtBUGVybWlzc2lvbnMsIElBY3Rpb25Db250ZXh0VmFsaWRhdGlvbiwgUGVybWlzc2lvblR5cGVFbnVtLCBQZXJtaXNzaW9uc30gZnJvbSAnLi9wZXJtaXNzaW9ucy5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21tb25zID0gaW5qZWN0KENvbW1vbnNTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IGluamVjdChMb2dnZXJTZXJ2aWNlKS5jcmVhdGUoJ0F1dGhvcml6YXRpb25TZXJ2aWNlJyk7XG5cbiAgICBwcml2YXRlIHVzZXJSb2xlcyQgPSB0b09ic2VydmFibGUodGhpcy5jb21tb25zLnVzZXJSb2xlcyk7XG5cbiAgICBwdWJsaWMgY2FuQWN0aXZhdGVSb3V0ZShwZXJtaXNzaW9uczogQVBlcm1pc3Npb25zLCByb3V0ZT86IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlPzogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBzd2l0Y2ggKHBlcm1pc3Npb25zLmF1dGhvcml6YXRpb25UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIFBlcm1pc3Npb25UeXBlRW51bS5BbGw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FuQWN0aXZhdGVSb3V0ZUFsbChwZXJtaXNzaW9ucyBhcyBQZXJtaXNzaW9ucy5BbGwsIHJvdXRlLCBzdGF0ZSk7XG4gICAgICAgICAgICBjYXNlIFBlcm1pc3Npb25UeXBlRW51bS5Bbnk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FuQWN0aXZhdGVSb3V0ZUFueShwZXJtaXNzaW9ucyBhcyBQZXJtaXNzaW9ucy5BbnksIHJvdXRlLCBzdGF0ZSk7XG4gICAgICAgICAgICBjYXNlIFBlcm1pc3Npb25UeXBlRW51bS5TZXJ2aWNlOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbkFjdGl2YXRlUm91dGVTZXJ2aWNlKHBlcm1pc3Npb25zIGFzIFBlcm1pc3Npb25zLlNlcnZpY2UsIHJvdXRlLCBzdGF0ZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVzZXJSb2xlcyQucGlwZShtYXAodXIgPT4gaXNQZXJtaXR0ZWQocGVybWlzc2lvbnMsIHVyKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5BY3RpdmF0ZVJvdXRlQWxsKHBlcm1pc3Npb246IFBlcm1pc3Npb25zLkFsbCwgcm91dGU/OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZT86IFJvdXRlclN0YXRlU25hcHNob3QpIHtcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QocGVybWlzc2lvbi5wZXJtaXNzaW9ucy5tYXAocCA9PiB0aGlzLmNhbkFjdGl2YXRlUm91dGUocCwgcm91dGUsIHN0YXRlKSkpLnBpcGUobWFwKHJlcyA9PiByZXMuZXZlcnkoaXAgPT4gaXAgPT09IHRydWUpKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5BY3RpdmF0ZVJvdXRlQW55KHBlcm1pc3Npb25zOiBQZXJtaXNzaW9ucy5BbnksIHJvdXRlPzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU/OiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KHBlcm1pc3Npb25zLnBlcm1pc3Npb25zLm1hcChwID0+IHRoaXMuY2FuQWN0aXZhdGVSb3V0ZShwLCByb3V0ZSwgc3RhdGUpKSkucGlwZShtYXAocmVzID0+IHJlcy5zb21lKGlwID0+IGlwID09PSB0cnVlKSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FuQWN0aXZhdGVSb3V0ZVNlcnZpY2UocGVybWlzc2lvbjogUGVybWlzc2lvbnMuU2VydmljZSwgcm91dGU/OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZT86IFJvdXRlclN0YXRlU25hcHNob3QpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZUluc3RhbmNlID0gdGhpcy5pbmplY3Rvci5nZXQocGVybWlzc2lvbi5zZXJ2aWNlKTtcbiAgICAgICAgaWYgKCFzZXJ2aWNlSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBXQVJOSU5HOiBTZXJ2aWNlIGluc3RhbmNlIGNvdWxkIG5vdCBiZSByZXRyaWV2ZWQgZm9yIHR5cGUgJHtwZXJtaXNzaW9uLnNlcnZpY2V9YCk7XG4gICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJ2aWNlSW5zdGFuY2UuY2FuQWN0aXZhdGVSb3V0ZShyb3V0ZSwgc3RhdGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc01lbnVJdGVtVmlzaWJsZShwZXJtaXNzaW9uczogQVBlcm1pc3Npb25zLCBtZW51SXRlbTogQ29tbW9uc01lbnVJdGVtKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHN3aXRjaCAocGVybWlzc2lvbnMuYXV0aG9yaXphdGlvblR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgUGVybWlzc2lvblR5cGVFbnVtLkFsbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc01lbnVJdGVtVmlzaWJsZUFsbChwZXJtaXNzaW9ucyBhcyBQZXJtaXNzaW9ucy5BbGwsIG1lbnVJdGVtKTtcbiAgICAgICAgICAgIGNhc2UgUGVybWlzc2lvblR5cGVFbnVtLkFueTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc01lbnVJdGVtVmlzaWJsZUFueShwZXJtaXNzaW9ucyBhcyBQZXJtaXNzaW9ucy5BbnksIG1lbnVJdGVtKTtcbiAgICAgICAgICAgIGNhc2UgUGVybWlzc2lvblR5cGVFbnVtLlNlcnZpY2U6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNNZW51SXRlbVZpc2libGVTZXJ2aWNlKHBlcm1pc3Npb25zIGFzIFBlcm1pc3Npb25zLlNlcnZpY2UsIG1lbnVJdGVtKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlclJvbGVzJC5waXBlKG1hcChyb2xlID0+IGlzUGVybWl0dGVkKHBlcm1pc3Npb25zLCByb2xlKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc01lbnVJdGVtVmlzaWJsZUFsbChwZXJtaXNzaW9uOiBQZXJtaXNzaW9ucy5BbGwsIG1lbnVJdGVtOiBDb21tb25zTWVudUl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QocGVybWlzc2lvbi5wZXJtaXNzaW9ucy5tYXAocCA9PiB0aGlzLmlzTWVudUl0ZW1WaXNpYmxlKHAsIG1lbnVJdGVtKSkpLnBpcGUobWFwKHJlcyA9PiByZXMuZXZlcnkoaXAgPT4gaXAgPT09IHRydWUpKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc01lbnVJdGVtVmlzaWJsZUFueShwZXJtaXNzaW9uOiBQZXJtaXNzaW9ucy5BbnksIG1lbnVJdGVtOiBDb21tb25zTWVudUl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QocGVybWlzc2lvbi5wZXJtaXNzaW9ucy5tYXAocCA9PiB0aGlzLmlzTWVudUl0ZW1WaXNpYmxlKHAsIG1lbnVJdGVtKSkpLnBpcGUobWFwKHJlcyA9PiByZXMuc29tZShpcCA9PiBpcCA9PT0gdHJ1ZSkpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTWVudUl0ZW1WaXNpYmxlU2VydmljZShwZXJtaXNzaW9uOiBQZXJtaXNzaW9ucy5TZXJ2aWNlLCBtZW51SXRlbTogQ29tbW9uc01lbnVJdGVtKSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VJbnN0YW5jZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KHBlcm1pc3Npb24uc2VydmljZSk7XG4gICAgICAgIGlmICghc2VydmljZUluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgV0FSTklORzogU2VydmljZSBpbnN0YW5jZSBjb3VsZCBub3QgYmUgcmV0cmVpdmVkIGZvciB0eXBlICR7cGVybWlzc2lvbi5zZXJ2aWNlfWApO1xuICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VydmljZUluc3RhbmNlLmlzTWVudWl0ZW1WaXNpYmxlKG1lbnVJdGVtKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBY3Rpb25WaXNpYmxlKFxuICAgICAgICBwZXJtaXNzaW9uczogQVBlcm1pc3Npb25zLFxuICAgICAgICBhY3Rpb25DdHg/OiBJQWN0aW9uQ29udGV4dFZhbGlkYXRpb248YW55LCBhbnk+LFxuICAgICAgICByb3V0ZT86IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgICAgIHN0YXRlPzogUm91dGVyU3RhdGVTbmFwc2hvdFxuICAgICk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBzd2l0Y2ggKHBlcm1pc3Npb25zLmF1dGhvcml6YXRpb25UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIFBlcm1pc3Npb25UeXBlRW51bS5BbGw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNBY3Rpb25WaXNpYmxlQWxsKHBlcm1pc3Npb25zIGFzIFBlcm1pc3Npb25zLkFsbCwgYWN0aW9uQ3R4LCByb3V0ZSwgc3RhdGUpO1xuICAgICAgICAgICAgY2FzZSBQZXJtaXNzaW9uVHlwZUVudW0uQW55OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlzQWN0aW9uVmlzaWJsZUFueShwZXJtaXNzaW9ucyBhcyBQZXJtaXNzaW9ucy5BbnksIGFjdGlvbkN0eCwgcm91dGUsIHN0YXRlKTtcbiAgICAgICAgICAgIGNhc2UgUGVybWlzc2lvblR5cGVFbnVtLlNlcnZpY2U6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNBY3Rpb25WaXNpYmxlU2VydmljZShwZXJtaXNzaW9ucyBhcyBQZXJtaXNzaW9ucy5TZXJ2aWNlLCBhY3Rpb25DdHgsIHJvdXRlLCBzdGF0ZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVzZXJSb2xlcyQucGlwZShtYXAodXIgPT4gaXNQZXJtaXR0ZWQocGVybWlzc2lvbnMsIHVyKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FjdGlvblZpc2libGVBbGwocGVybWlzc2lvbjogUGVybWlzc2lvbnMuQWxsLCBhY3Rpb25DdHg/OiBJQWN0aW9uQ29udGV4dFZhbGlkYXRpb248dW5rbm93biwgdW5rbm93bj4sIHJvdXRlPzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU/OiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KHBlcm1pc3Npb24ucGVybWlzc2lvbnMubWFwKHAgPT4gdGhpcy5pc0FjdGlvblZpc2libGUocCwgYWN0aW9uQ3R4LCByb3V0ZSwgc3RhdGUpKSkucGlwZShtYXAocmVzID0+IHJlcy5ldmVyeShpcCA9PiBpcCA9PT0gdHJ1ZSkpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQWN0aW9uVmlzaWJsZUFueShwZXJtaXNzaW9uOiBQZXJtaXNzaW9ucy5BbnksIGFjdGlvbkN0eD86IElBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjx1bmtub3duPiwgcm91dGU/OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZT86IFJvdXRlclN0YXRlU25hcHNob3QpIHtcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QocGVybWlzc2lvbi5wZXJtaXNzaW9ucy5tYXAocCA9PiB0aGlzLmlzQWN0aW9uVmlzaWJsZShwLCBhY3Rpb25DdHgsIHJvdXRlLCBzdGF0ZSkpKS5waXBlKG1hcChyZXMgPT4gcmVzLnNvbWUoaXAgPT4gaXAgPT09IHRydWUpKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FjdGlvblZpc2libGVTZXJ2aWNlKHBlcm1pc3Npb246IFBlcm1pc3Npb25zLlNlcnZpY2UsIGFjdGlvbkN0eD86IElBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjx1bmtub3duPiwgcm91dGU/OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZT86IFJvdXRlclN0YXRlU25hcHNob3QpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZUluc3RhbmNlID0gdGhpcy5pbmplY3Rvci5nZXQocGVybWlzc2lvbi5zZXJ2aWNlKTtcbiAgICAgICAgaWYgKCFzZXJ2aWNlSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBXQVJOSU5HOiBTZXJ2aWNlIGluc3RhbmNlIGNvdWxkIG5vdCBiZSByZXRyZWl2ZWQgZm9yIHR5cGUgJHtwZXJtaXNzaW9uLnNlcnZpY2V9YCk7XG4gICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJ2aWNlSW5zdGFuY2UuaXNBY3Rpb25WaXNpYmxlKGFjdGlvbkN0eCwgcm91dGUsIHN0YXRlKTtcbiAgICB9XG59XG4iXX0=","import { inject } from '@angular/core';\nimport { of } from 'rxjs';\nimport { first } from 'rxjs/operators';\nimport { PermissionService } from './permission.service';\nexport const permissionGuard = (route, state) => {\n const permission = inject(PermissionService);\n const data = route.data;\n if (data.permissions) {\n return permission.canActivateRoute(data.permissions, route, state).pipe(first());\n }\n else {\n return of(true);\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL3NlY3VyaXR5L3Blcm1pc3Npb24uZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUdyQyxPQUFPLEVBQWEsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWtCLENBQzFDLEtBQTZCLEVBQzdCLEtBQTBCLEVBQ29ELEVBQUU7SUFDaEYsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFN0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQXdCLENBQUM7SUFFNUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsT0FBTyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDckYsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZUZuLCBSb3V0ZXJTdGF0ZVNuYXBzaG90LCBVcmxUcmVlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge09ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Zmlyc3R9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtDb21tb25zUm91dGVEYXRhfSBmcm9tICcuLi9yb3V0ZXIvcm91dGVyLm1vZGVsJztcbmltcG9ydCB7UGVybWlzc2lvblNlcnZpY2V9IGZyb20gJy4vcGVybWlzc2lvbi5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IHBlcm1pc3Npb25HdWFyZDogQ2FuQWN0aXZhdGVGbiA9IChcbiAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdFxuKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgVXJsVHJlZT4gfCBQcm9taXNlPGJvb2xlYW4gfCBVcmxUcmVlPiB8IGJvb2xlYW4gfCBVcmxUcmVlID0+IHtcbiAgICBjb25zdCBwZXJtaXNzaW9uID0gaW5qZWN0KFBlcm1pc3Npb25TZXJ2aWNlKTtcblxuICAgIGNvbnN0IGRhdGEgPSByb3V0ZS5kYXRhIGFzIENvbW1vbnNSb3V0ZURhdGE7XG5cbiAgICBpZiAoZGF0YS5wZXJtaXNzaW9ucykge1xuICAgICAgICByZXR1cm4gcGVybWlzc2lvbi5jYW5BY3RpdmF0ZVJvdXRlKGRhdGEucGVybWlzc2lvbnMsIHJvdXRlLCBzdGF0ZSkucGlwZShmaXJzdCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgfVxufTtcbiJdfQ==","import { removeRouteEmptyPathSegments } from '../helpers/route';\nimport { permissionGuard } from '../security/permission.guard';\nexport class RouteBuilder {\n constructor(route) {\n this.routePath = [];\n this.routeData = { breadcrumb: null };\n this.children = [];\n this.menuItemChildren = [];\n this.menuItemChildrenAfter = []; // append after route children\n this.route = route;\n if (this.route.path && this.route.path.length > 0) {\n this.routePath = [this.route.path];\n }\n }\n /**\n * Sets the link to root Routes builder.\n *\n * @param {RoutesBuilder} routesBuilder - The routes builder to set as the root.\n */\n withRoot(routesBuilder) {\n this.root = routesBuilder;\n return this;\n }\n /**\n * Sets the link to parent Route builder.\n *\n * @param {RouteBuilder} parent - The parent route builder.\n */\n withParent(parent) {\n this.parent = parent;\n this.routePath = removeRouteEmptyPathSegments([...this.parent.routePath, this.route.path ?? '']);\n return this;\n }\n /**\n * Sets the breadcrumb.\n *\n * @param {BreadcrumbType} breadcrumb - Breadcrumb configuration.\n */\n withBreadcrumb(breadcrumb) {\n this.routeData.breadcrumb = breadcrumb;\n return this;\n }\n /**\n * Sets the page title for the current route.\n *\n * @param {string} pageTitle - The title of the page.\n */\n withPageTitle(pageTitle) {\n this.routeData.pageTitle = pageTitle;\n return this;\n }\n /**\n * Sets the page title and the breadcrumb.\n *\n * @param {string} title - The title of the page and breadcrumb.\n */\n withTitle(title) {\n this.withPageTitle(title);\n this.withBreadcrumb(title);\n return this;\n }\n /**\n * Adds a can activate guard to route.\n *\n * @param {CanActivateFn} fn - The CanActivate function to be added.\n */\n withCanActivate(fn) {\n if (!this.route.canActivate) {\n this.route.canActivate = [];\n }\n this.route.canActivate.push(fn);\n return this;\n }\n /**\n * Adds a can deactivate guard to route.\n *\n * @param {CanDeactivateFn} fn - The CanActivate function to be added.\n */\n withCanDeactivate(fn) {\n if (!this.route.canDeactivate) {\n this.route.canDeactivate = [];\n }\n this.route.canDeactivate.push(fn);\n return this;\n }\n /**\n * Adds a resolver to route.\n *\n * @param {string} name - Name of the resolver.\n * @param {CanDeactivateFn} fn - The CanActivate function to be added.\n */\n withResolver(name, fn) {\n if (!this.route.resolve) {\n this.route.resolve = {};\n }\n this.route.resolve[name] = fn;\n return this;\n }\n /**\n * Adds a provider to the route.\n *\n * @param {Provider | EnvironmentProviders} provider - The provider to add.\n */\n withProvider(provider) {\n if (!this.route.providers) {\n this.route.providers = [];\n }\n this.route.providers.push(provider);\n return this;\n }\n /**\n * Sets the data for the route.\n *\n * @param {CommonsRouteData} data - The data to set for the route.\n * @param {boolean} [merge=true] - If the data should be merged with current data setup (true by default) - page title and breadcrumb config are carried over.\n */\n withData(data, merge = true) {\n this.routeData = merge\n ? {\n ...this.routeData,\n ...data\n }\n : {\n breadcrumb: null,\n ...data\n };\n return this;\n }\n /**\n * Updates the menu item of route. Merging with current configuration (set with {withMenuItem}) takes place.\n *\n * @param {CommonsMenuItem} opts - The opts properties to be merged on existing menu item for route.\n */\n withMenuItemOpts(opts) {\n if (!this.menuItem) {\n this.menuItem = {};\n }\n this.menuItem = {\n ...this.menuItem,\n ...opts\n };\n return this;\n }\n /**\n * Sets the menu item (basic). For more options, see the {withMenuItemFromOpts}.\n *\n * @param {string} [icon] - The icon for the menu item.\n * @param {string} [label] - The label for the menu item.\n * @param {Array<string>} [routerLink] - The router link for the menu item.\n * @param {boolean} [breadcrumb=false] - Indicates whether to display breadcrumb for the menu item.\n */\n withMenuItem(icon, label, routerLink, breadcrumb = false) {\n this.menuItem = createMenuItem(icon, label, routerLink);\n if (breadcrumb && label) {\n this.withBreadcrumb({\n label: label\n });\n }\n return this;\n }\n /**\n * Adds menu item child to route's menu item. If no menu item is present, children will be appended directly to parent/root menu item.\n *\n * @param {string} [icon] - The icon for the menu item.\n * @param {string} [label] - The label for the menu item.\n * @param {Array<string>} [routerLink] - The router link for the menu item.\n * @param {boolean} [afterRouteChildren=false] If false, menu item child will be appended before route's children menu items, at the end otherwise.\n */\n withMenuItemChild(icon, label, routerLink, afterRouteChildren = false) {\n if (afterRouteChildren) {\n this.menuItemChildrenAfter.push(createMenuItem(icon, label, routerLink));\n }\n else {\n this.menuItemChildren.push(createMenuItem(icon, label, routerLink));\n }\n return this;\n }\n /**\n * Adds menu item child from opts to route's menu item. If no menu item is present, children will be appended directly to parent/root menu item.\n *\n * @param {CommonsMenuItem} opts - The opts properties to be merged on existing menu item for route.\n * @param {boolean} [afterRouteChildren=false] If false, menu item child will be appended before route's children menu items, at the end otherwise.\n */\n withMenuItemChildFromOpts(opts, afterRouteChildren = false) {\n if (afterRouteChildren) {\n this.menuItemChildrenAfter.push(opts);\n }\n else {\n this.menuItemChildren.push(opts);\n }\n return this;\n }\n /**\n * Sets the menu item's children to be generated lazily from route's lazy loaded routes after the chunk is loaded to runtime.\n */\n withMenuItemLazyChildren() {\n if (!this.menuItem) {\n this.menuItem = {};\n }\n this.menuItem.lazyChildren = true;\n return this;\n }\n /**\n * Sets the permissions on the route.\n *\n * @param {APermissions} permissions - The permissions to be set on the route.\n */\n withPermissions(permissions) {\n this.permissions = permissions;\n this.withCanActivate(permissionGuard);\n return this;\n }\n /**\n * Adds a child route to the current route.\n *\n * @param {string} path - The path of the child route.\n * @param {Type<any>} component - The component associated with the child route.\n * @param {RouteBuilderAdjustFnType} [adjustFn] - An optional function to adjust the child route builder.\n */\n addChild(path, component, adjustFn) {\n const childRouteBuilder = createRoute(path, component);\n adjustFn?.(childRouteBuilder);\n return this.addChildBuilder(childRouteBuilder);\n }\n /**\n * Adds a child builder to the current route.\n *\n * @param {RouteBuilder} builder - The child builder to be added.\n * @return {this} - The current builder with the added child builder.\n */\n addChildBuilder(builder) {\n builder.withParent(this);\n if (this.root) {\n builder.withRoot(this.root);\n }\n this.children.push(builder);\n return this;\n }\n /**\n * Builds an Angular route based on configurations.\n *\n * @returns {Route} The built Angular route.\n */\n build() {\n const angularRoute = {\n ...this.route\n };\n if (angularRoute.data) {\n angularRoute.data = {\n ...angularRoute.data,\n ...this.routeData\n };\n }\n else {\n angularRoute.data = { ...this.routeData };\n }\n // append permissions if not already in route data\n if (this.permissions && !angularRoute.data.permissions) {\n angularRoute.data.permissions = this.permissions;\n }\n const menu = this.buildMenu();\n if (menu.length > 0) {\n angularRoute.data.menuItems = menu;\n }\n if ((this.route.children?.length ?? 0) > 0 || this.children.length > 0) {\n // route has children\n angularRoute.children = [];\n if (this.route.children?.length) {\n angularRoute.children.push(...this.route.children);\n }\n if (this.children.length) {\n for (const childRoute of this.children) {\n angularRoute.children.push(childRoute.build());\n }\n }\n }\n if (this.route.canActivate) {\n angularRoute.canActivate = [...this.route.canActivate];\n }\n if (this.route.canActivateChild) {\n angularRoute.canActivateChild = [...this.route.canActivateChild];\n }\n if (this.route.canLoad) {\n angularRoute.canLoad = [...this.route.canLoad];\n }\n if (this.route.canDeactivate) {\n angularRoute.canDeactivate = [...this.route.canDeactivate];\n }\n if (this.route.resolve) {\n angularRoute.resolve = { ...this.route.resolve };\n }\n return angularRoute;\n }\n /**\n * Builds the menu items.\n *\n * @returns {Array<CommonsMenuItem>} - The built menu items.\n */\n buildMenu() {\n const menuItemBuild = this.menuItem ? { ...this.menuItem } : null;\n const routeChildrenMenuItems = this.children.flatMap(child => child.buildMenu());\n const menuItemChildren = [];\n const menuItemChildrenBuild = [];\n if (menuItemBuild?.items) {\n menuItemChildrenBuild.push(...menuItemBuild.items);\n }\n const processMenuItemChild = (child) => {\n const finalChild = { ...child };\n if (typeof finalChild.routerLink === 'undefined') {\n finalChild.routerLink = this.routePath;\n }\n if (typeof finalChild.routerLink === 'string') {\n finalChild.routerLink = [finalChild.routerLink];\n }\n if (finalChild.routerLink) {\n finalChild.routerLink = removeRouteEmptyPathSegments(finalChild.routerLink);\n }\n // Propagate permissions to children\n if (!finalChild.permissions && this.routeData.permissions) {\n finalChild.permissions = this.routeData.permissions;\n }\n if (!finalChild.permissions && this.permissions) {\n finalChild.permissions = this.permissions;\n }\n return finalChild;\n };\n this.menuItemChildren.forEach(child => menuItemChildren.push(processMenuItemChild(child)));\n const menuItemChildrenAfterBuild = this.menuItemChildrenAfter.map(child => processMenuItemChild(child));\n menuItemChildrenBuild.push(...menuItemChildren, ...routeChildrenMenuItems, ...menuItemChildrenAfterBuild);\n if (!menuItemBuild) {\n return menuItemChildrenBuild;\n }\n menuItemBuild.label = menuItemBuild.label ?? this.routeData.pageTitle;\n if (typeof menuItemBuild.routerLink === 'string') {\n menuItemBuild.routerLink = [menuItemBuild.routerLink];\n }\n menuItemBuild.routerLink = removeRouteEmptyPathSegments(menuItemBuild.routerLink ?? this.routePath);\n if (menuItemChildrenBuild.length > 0) {\n menuItemBuild.items = menuItemChildrenBuild;\n }\n if (!menuItemBuild.permissions) {\n menuItemBuild.permissions = this.findMenuItemPermissions();\n }\n return [menuItemBuild];\n }\n findMenuItemPermissions() {\n if (this.menuItem?.permissions) {\n return this.menuItem.permissions;\n }\n if (this.routeData.permissions) {\n // this is already built\n return this.routeData.permissions;\n }\n if (this.permissions) {\n return this.permissions;\n }\n return undefined;\n }\n}\nfunction createMenuItem(icon, label, routerLink) {\n const menuItem = {};\n if (icon) {\n menuItem.icon = icon;\n }\n if (label) {\n menuItem.label = label;\n }\n if (routerLink) {\n menuItem.routerLink = routerLink;\n }\n return menuItem;\n}\n/**\n * Creates a new instance of RouteBuilder with the given path and component.\n *\n * @param {string} path - The path for the route.\n * @param {Type<any>} component - The component for the route.\n * @return {RouteBuilder} - A new instance of RouteBuilder.\n */\nexport function createRoute(path, component) {\n return new RouteBuilder({\n path: path,\n component: component\n });\n}\n/**\n * Creates a redirect route for the given path.\n *\n * @param {string} path - The path to match against.\n * @param {string} redirectTo - The URL path to redirect to.\n * @param {'full' | 'prefix'} [pathMatch='prefix'] - The path matching strategy ('full' or 'prefix').\n * @return {RouteBuilder} - A new instance of the RouteBuilder class with the redirect route configuration.\n */\nexport function createRouteRedirect(path, redirectTo, pathMatch = 'prefix') {\n return new RouteBuilder({\n path: path,\n redirectTo: redirectTo,\n pathMatch: pathMatch\n });\n}\n/**\n * Creates a lazy route module (or routes).\n *\n * @param {string} path - The path for the route.\n * @param {LoadChildren} loadChildren - The function that loads the lazy module (or routes).\n * @param {Array<any>} [canMatch] - An optional array of objects that can match the route.\n * @returns {RouteBuilder} - A new instance of RouteBuilder class.\n */\nexport function createChildrenLazyRoute(path, loadChildren, canMatch) {\n const route = { path: path, loadChildren: loadChildren };\n if (canMatch?.length) {\n route.canMatch = canMatch;\n }\n return new RouteBuilder(route);\n}\n/**\n * Creates a lazy route component.\n *\n * @param {string} path - The path for the route.\n * @param {() => Type<unknown> | Observable<Type<unknown> | DefaultExport<Type<unknown>>> | Promise<Type<unknown> | DefaultExport<Type<unknown>>>} loadComponent - The function that loads the component for the route.\n * @param {Array<any>} [canMatch] - The array of values that determine if the route can match.\n * @returns {RouteBuilder} - An instance of RouteBuilder with the created route.\n */\nexport function createLazyRoute(path, loadComponent, canMatch) {\n const route = { path: path, loadComponent: loadComponent };\n if (canMatch?.length) {\n route.canMatch = canMatch;\n }\n return new RouteBuilder(route);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL3JvdXRlci9yb3V0ZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRTlELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQU83RCxNQUFNLE9BQU8sWUFBWTtJQWNyQixZQUFtQixLQUFZO1FBWnZCLGNBQVMsR0FBa0IsRUFBRSxDQUFDO1FBQzVCLGNBQVMsR0FBcUIsRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUM7UUFHbkQsYUFBUSxHQUF3QixFQUFFLENBQUM7UUFHbkMscUJBQWdCLEdBQTJCLEVBQUUsQ0FBQztRQUM5QywwQkFBcUIsR0FBMkIsRUFBRSxDQUFDLENBQUMsOEJBQThCO1FBS3RGLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFFBQVEsQ0FBQyxhQUE0QjtRQUN4QyxJQUFJLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFVBQVUsQ0FBQyxNQUFvQjtRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLDRCQUE0QixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFB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QU8sSUFBSSxZQUFZLENBQUM7UUFDcEIsSUFBSSxFQUFFLElBQUk7UUFDVixTQUFTLEVBQUUsU0FBUztLQUN2QixDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxJQUFZLEVBQUUsVUFBa0IsRUFBRSxZQUErQixRQUFRO0lBQ3pHLE9BQU8sSUFBSSxZQUFZLENBQUM7UUFDcEIsSUFBSSxFQUFFLElBQUk7UUFDVixVQUFVLEVBQUUsVUFBVTtRQUN0QixTQUFTLEVBQUUsU0FBUztLQUN2QixDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxJQUFZLEVBQUUsWUFBMEIsRUFBRSxRQUFxQjtJQUNuRyxNQUFNLEtBQUssR0FBVSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBQyxDQUFDO0lBQzlELElBQUksUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ25CLEtBQUssQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFDRCxPQUFPLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDM0IsSUFBWSxFQUNaLGFBQXFKLEVBQ3JKLFFBQXFCO0lBRXJCLE1BQU0sS0FBSyxHQUFVLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFDLENBQUM7SUFDaEUsSUFBSSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDbkIsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUNELE9BQU8sSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RW52aXJvbm1lbnRQcm92aWRlcnMsIFByb3ZpZGVyLCBUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q2FuQWN0aXZhdGVGbiwgQ2FuRGVhY3RpdmF0ZUZuLCBEZWZhdWx0RXhwb3J0LCBMb2FkQ2hpbGRyZW4sIFJlc29sdmVGbiwgUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7cmVtb3ZlUm91dGVFbXB0eVBhdGhTZWdtZW50c30gZnJvbSAnLi4vaGVscGVycy9yb3V0ZSc7XG5pbXBvcnQge0NvbW1vbnNNZW51SXRlbX0gZnJvbSAnLi4vbW9kZWxzL21lbnUubW9kZWwnO1xuaW1wb3J0IHtwZXJtaXNzaW9uR3VhcmR9IGZyb20gJy4uL3NlY3VyaXR5L3Blcm1pc3Npb24uZ3VhcmQnO1xuaW1wb3J0IHtBUGVybWlzc2lvbnN9IGZyb20gJy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zLm1vZGVsJztcbmltcG9ydCB7QnJlYWRjcnVtYlR5cGUsIENvbW1vbnNSb3V0ZURhdGF9IGZyb20gJy4vcm91dGVyLm1vZGVsJztcbmltcG9ydCB7Um91dGVzQnVpbGRlcn0gZnJvbSAnLi9yb3V0ZXMtYnVpbGRlcic7XG5cbmV4cG9ydCB0eXBlIFJvdXRlQnVpbGRlckFkanVzdEZuVHlwZSA9IChidWlsZGVyOiBSb3V0ZUJ1aWxkZXIpID0+IHZvaWQ7XG5cbmV4cG9ydCBjbGFzcyBSb3V0ZUJ1aWxkZXIge1xuICAgIHByb3RlY3RlZCByZWFkb25seSByb3V0ZTogUm91dGU7XG4gICAgcHJpdmF0ZSByb3V0ZVBhdGg6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBwcm90ZWN0ZWQgcm91dGVEYXRhOiBDb21tb25zUm91dGVEYXRhID0ge2JyZWFkY3J1bWI6IG51bGx9O1xuICAgIHByaXZhdGUgcm9vdD86IFJvdXRlc0J1aWxkZXI7XG4gICAgcHJpdmF0ZSBwYXJlbnQ/OiBSb3V0ZUJ1aWxkZXI7XG4gICAgcHJpdmF0ZSBjaGlsZHJlbjogQXJyYXk8Um91dGVCdWlsZGVyPiA9IFtdO1xuXG4gICAgcHJpdmF0ZSBtZW51SXRlbT86IENvbW1vbnNNZW51SXRlbTtcbiAgICBwcml2YXRlIG1lbnVJdGVtQ2hpbGRyZW46IEFycmF5PENvbW1vbnNNZW51SXRlbT4gPSBbXTtcbiAgICBwcml2YXRlIG1lbnVJdGVtQ2hpbGRyZW5BZnRlcjogQXJyYXk8Q29tbW9uc01lbnVJdGVtPiA9IFtdOyAvLyBhcHBlbmQgYWZ0ZXIgcm91dGUgY2hpbGRyZW5cblxuICAgIHByaXZhdGUgcGVybWlzc2lvbnM/OiBBUGVybWlzc2lvbnM7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3Iocm91dGU6IFJvdXRlKSB7XG4gICAgICAgIHRoaXMucm91dGUgPSByb3V0ZTtcbiAgICAgICAgaWYgKHRoaXMucm91dGUucGF0aCAmJiB0aGlzLnJvdXRlLnBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZVBhdGggPSBbdGhpcy5yb3V0ZS5wYXRoXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGxpbmsgdG8gcm9vdCBSb3V0ZXMgYnVpbGRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Um91dGVzQnVpbGRlcn0gcm91dGVzQnVpbGRlciAtIFRoZSByb3V0ZXMgYnVpbGRlciB0byBzZXQgYXMgdGhlIHJvb3QuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhSb290KHJvdXRlc0J1aWxkZXI6IFJvdXRlc0J1aWxkZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5yb290ID0gcm91dGVzQnVpbGRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbGluayB0byBwYXJlbnQgUm91dGUgYnVpbGRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Um91dGVCdWlsZGVyfSBwYXJlbnQgLSBUaGUgcGFyZW50IHJvdXRlIGJ1aWxkZXIuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhQYXJlbnQocGFyZW50OiBSb3V0ZUJ1aWxkZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMucm91dGVQYXRoID0gcmVtb3ZlUm91dGVFbXB0eVBhdGhTZWdtZW50cyhbLi4udGhpcy5wYXJlbnQucm91dGVQYXRoLCB0aGlzLnJvdXRlLnBhdGggPz8gJyddKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYnJlYWRjcnVtYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QnJlYWRjcnVtYlR5cGV9IGJyZWFkY3J1bWIgLSBCcmVhZGNydW1iIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgcHVibGljIHdpdGhCcmVhZGNydW1iKGJyZWFkY3J1bWI6IEJyZWFkY3J1bWJUeXBlKTogdGhpcyB7XG4gICAgICAgIHRoaXMucm91dGVEYXRhLmJyZWFkY3J1bWIgPSBicmVhZGNydW1iO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwYWdlIHRpdGxlIGZvciB0aGUgY3VycmVudCByb3V0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYWdlVGl0bGUgLSBUaGUgdGl0bGUgb2YgdGhlIHBhZ2UuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhQYWdlVGl0bGUocGFnZVRpdGxlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5yb3V0ZURhdGEucGFnZVRpdGxlID0gcGFnZVRpdGxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwYWdlIHRpdGxlIGFuZCB0aGUgYnJlYWRjcnVtYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIFRoZSB0aXRsZSBvZiB0aGUgcGFnZSBhbmQgYnJlYWRjcnVtYi5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFRpdGxlKHRpdGxlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy53aXRoUGFnZVRpdGxlKHRpdGxlKTtcbiAgICAgICAgdGhpcy53aXRoQnJlYWRjcnVtYih0aXRsZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBjYW4gYWN0aXZhdGUgZ3VhcmQgdG8gcm91dGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NhbkFjdGl2YXRlRm59IGZuIC0gVGhlIENhbkFjdGl2YXRlIGZ1bmN0aW9uIHRvIGJlIGFkZGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ2FuQWN0aXZhdGUoZm46IENhbkFjdGl2YXRlRm4pOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvdXRlLmNhbkFjdGl2YXRlKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlLmNhbkFjdGl2YXRlID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3V0ZS5jYW5BY3RpdmF0ZS5wdXNoKGZuKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNhbiBkZWFjdGl2YXRlIGd1YXJkIHRvIHJvdXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtDYW5EZWFjdGl2YXRlRm59IGZuIC0gVGhlIENhbkFjdGl2YXRlIGZ1bmN0aW9uIHRvIGJlIGFkZGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ2FuRGVhY3RpdmF0ZShmbjogQ2FuRGVhY3RpdmF0ZUZuPGFueT4pOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvdXRlLmNhbkRlYWN0aXZhdGUpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGUuY2FuRGVhY3RpdmF0ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm91dGUuY2FuRGVhY3RpdmF0ZS5wdXNoKGZuKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHJlc29sdmVyIHRvIHJvdXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSByZXNvbHZlci5cbiAgICAgKiBAcGFyYW0ge0NhbkRlYWN0aXZhdGVGbn0gZm4gLSBUaGUgQ2FuQWN0aXZhdGUgZnVuY3Rpb24gdG8gYmUgYWRkZWQuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhSZXNvbHZlcihuYW1lOiBzdHJpbmcsIGZuOiBSZXNvbHZlRm48YW55Pik6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMucm91dGUucmVzb2x2ZSkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZS5yZXNvbHZlID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3V0ZS5yZXNvbHZlW25hbWVdID0gZm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBwcm92aWRlciB0byB0aGUgcm91dGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3ZpZGVyIHwgRW52aXJvbm1lbnRQcm92aWRlcnN9IHByb3ZpZGVyIC0gVGhlIHByb3ZpZGVyIHRvIGFkZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFByb3ZpZGVyKHByb3ZpZGVyOiBQcm92aWRlciB8IEVudmlyb25tZW50UHJvdmlkZXJzKTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5yb3V0ZS5wcm92aWRlcnMpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGUucHJvdmlkZXJzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3V0ZS5wcm92aWRlcnMucHVzaChwcm92aWRlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGRhdGEgZm9yIHRoZSByb3V0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q29tbW9uc1JvdXRlRGF0YX0gZGF0YSAtIFRoZSBkYXRhIHRvIHNldCBmb3IgdGhlIHJvdXRlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW21lcmdlPXRydWVdIC0gSWYgdGhlIGRhdGEgc2hvdWxkIGJlIG1lcmdlZCB3aXRoIGN1cnJlbnQgZGF0YSBzZXR1cCAodHJ1ZSBieSBkZWZhdWx0KSAtIHBhZ2UgdGl0bGUgYW5kIGJyZWFkY3J1bWIgY29uZmlnIGFyZSBjYXJyaWVkIG92ZXIuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhEYXRhKGRhdGE6IENvbW1vbnNSb3V0ZURhdGEsIG1lcmdlID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLnJvdXRlRGF0YSA9IG1lcmdlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMucm91dGVEYXRhLFxuICAgICAgICAgICAgICAgICAgLi4uZGF0YVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIGJyZWFkY3J1bWI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAuLi5kYXRhXG4gICAgICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIG1lbnUgaXRlbSBvZiByb3V0ZS4gTWVyZ2luZyB3aXRoIGN1cnJlbnQgY29uZmlndXJhdGlvbiAoc2V0IHdpdGgge3dpdGhNZW51SXRlbX0pIHRha2VzIHBsYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtDb21tb25zTWVudUl0ZW19IG9wdHMgLSBUaGUgb3B0cyBwcm9wZXJ0aWVzIHRvIGJlIG1lcmdlZCBvbiBleGlzdGluZyBtZW51IGl0ZW0gZm9yIHJvdXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoTWVudUl0ZW1PcHRzKG9wdHM6IENvbW1vbnNNZW51SXRlbSk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMubWVudUl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1lbnVJdGVtID0ge1xuICAgICAgICAgICAgLi4udGhpcy5tZW51SXRlbSxcbiAgICAgICAgICAgIC4uLm9wdHNcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWVudSBpdGVtIChiYXNpYykuIEZvciBtb3JlIG9wdGlvbnMsIHNlZSB0aGUge3dpdGhNZW51SXRlbUZyb21PcHRzfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbaWNvbl0gLSBUaGUgaWNvbiBmb3IgdGhlIG1lbnUgaXRlbS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2xhYmVsXSAtIFRoZSBsYWJlbCBmb3IgdGhlIG1lbnUgaXRlbS5cbiAgICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IFtyb3V0ZXJMaW5rXSAtIFRoZSByb3V0ZXIgbGluayBmb3IgdGhlIG1lbnUgaXRlbS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFticmVhZGNydW1iPWZhbHNlXSAtIEluZGljYXRlcyB3aGV0aGVyIHRvIGRpc3BsYXkgYnJlYWRjcnVtYiBmb3IgdGhlIG1lbnUgaXRlbS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aE1lbnVJdGVtKGljb24/OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nLCByb3V0ZXJMaW5rPzogQXJyYXk8c3RyaW5nPiwgYnJlYWRjcnVtYiA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIHRoaXMubWVudUl0ZW0gPSBjcmVhdGVNZW51SXRlbShpY29uLCBsYWJlbCwgcm91dGVyTGluayk7XG4gICAgICAgIGlmIChicmVhZGNydW1iICYmIGxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLndpdGhCcmVhZGNydW1iKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgbWVudSBpdGVtIGNoaWxkIHRvIHJvdXRlJ3MgbWVudSBpdGVtLiBJZiBubyBtZW51IGl0ZW0gaXMgcHJlc2VudCwgY2hpbGRyZW4gd2lsbCBiZSBhcHBlbmRlZCBkaXJlY3RseSB0byBwYXJlbnQvcm9vdCBtZW51IGl0ZW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2ljb25dIC0gVGhlIGljb24gZm9yIHRoZSBtZW51IGl0ZW0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtsYWJlbF0gLSBUaGUgbGFiZWwgZm9yIHRoZSBtZW51IGl0ZW0uXG4gICAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBbcm91dGVyTGlua10gLSBUaGUgcm91dGVyIGxpbmsgZm9yIHRoZSBtZW51IGl0ZW0uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbYWZ0ZXJSb3V0ZUNoaWxkcmVuPWZhbHNlXSBJZiBmYWxzZSwgbWVudSBpdGVtIGNoaWxkIHdpbGwgYmUgYXBwZW5kZWQgYmVmb3JlIHJvdXRlJ3MgY2hpbGRyZW4gbWVudSBpdGVtcywgYXQgdGhlIGVuZCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhNZW51SXRlbUNoaWxkKGljb24/OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nLCByb3V0ZXJMaW5rPzogQXJyYXk8c3RyaW5nPiwgYWZ0ZXJSb3V0ZUNoaWxkcmVuID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgaWYgKGFmdGVyUm91dGVDaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbUNoaWxkcmVuQWZ0ZXIucHVzaChjcmVhdGVNZW51SXRlbShpY29uLCBsYWJlbCwgcm91dGVyTGluaykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbUNoaWxkcmVuLnB1c2goY3JlYXRlTWVudUl0ZW0oaWNvbiwgbGFiZWwsIHJvdXRlckxpbmspKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIG1lbnUgaXRlbSBjaGlsZCBmcm9tIG9wdHMgdG8gcm91dGUncyBtZW51IGl0ZW0uIElmIG5vIG1lbnUgaXRlbSBpcyBwcmVzZW50LCBjaGlsZHJlbiB3aWxsIGJlIGFwcGVuZGVkIGRpcmVjdGx5IHRvIHBhcmVudC9yb290IG1lbnUgaXRlbS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q29tbW9uc01lbnVJdGVtfSBvcHRzIC0gVGhlIG9wdHMgcHJvcGVydGllcyB0byBiZSBtZXJnZWQgb24gZXhpc3RpbmcgbWVudSBpdGVtIGZvciByb3V0ZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthZnRlclJvdXRlQ2hpbGRyZW49ZmFsc2VdIElmIGZhbHNlLCBtZW51IGl0ZW0gY2hpbGQgd2lsbCBiZSBhcHBlbmRlZCBiZWZvcmUgcm91dGUncyBjaGlsZHJlbiBtZW51IGl0ZW1zLCBhdCB0aGUgZW5kIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aE1lbnVJdGVtQ2hpbGRGcm9tT3B0cyhvcHRzOiBDb21tb25zTWVudUl0ZW0sIGFmdGVyUm91dGVDaGlsZHJlbiA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIGlmIChhZnRlclJvdXRlQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1DaGlsZHJlbkFmdGVyLnB1c2gob3B0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtQ2hpbGRyZW4ucHVzaChvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtZW51IGl0ZW0ncyBjaGlsZHJlbiB0byBiZSBnZW5lcmF0ZWQgbGF6aWx5IGZyb20gcm91dGUncyBsYXp5IGxvYWRlZCByb3V0ZXMgYWZ0ZXIgdGhlIGNodW5rIGlzIGxvYWRlZCB0byBydW50aW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoTWVudUl0ZW1MYXp5Q2hpbGRyZW4oKTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5tZW51SXRlbSkge1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVudUl0ZW0ubGF6eUNoaWxkcmVuID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGVybWlzc2lvbnMgb24gdGhlIHJvdXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBUGVybWlzc2lvbnN9IHBlcm1pc3Npb25zIC0gVGhlIHBlcm1pc3Npb25zIHRvIGJlIHNldCBvbiB0aGUgcm91dGUuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhQZXJtaXNzaW9ucyhwZXJtaXNzaW9uczogQVBlcm1pc3Npb25zKTogdGhpcyB7XG4gICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBwZXJtaXNzaW9ucztcbiAgICAgICAgdGhpcy53aXRoQ2FuQWN0aXZhdGUocGVybWlzc2lvbkd1YXJkKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNoaWxkIHJvdXRlIHRvIHRoZSBjdXJyZW50IHJvdXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgY2hpbGQgcm91dGUuXG4gICAgICogQHBhcmFtIHtUeXBlPGFueT59IGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGlsZCByb3V0ZS5cbiAgICAgKiBAcGFyYW0ge1JvdXRlQnVpbGRlckFkanVzdEZuVHlwZX0gW2FkanVzdEZuXSAtIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGFkanVzdCB0aGUgY2hpbGQgcm91dGUgYnVpbGRlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkQ2hpbGQocGF0aDogc3RyaW5nLCBjb21wb25lbnQ6IFR5cGU8YW55PiwgYWRqdXN0Rm4/OiBSb3V0ZUJ1aWxkZXJBZGp1c3RGblR5cGUpOiB0aGlzIHtcbiAgICAgICAgY29uc3QgY2hpbGRSb3V0ZUJ1aWxkZXIgPSBjcmVhdGVSb3V0ZShwYXRoLCBjb21wb25lbnQpO1xuICAgICAgICBhZGp1c3RGbj8uKGNoaWxkUm91dGVCdWlsZGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkQ2hpbGRCdWlsZGVyKGNoaWxkUm91dGVCdWlsZGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgY2hpbGQgYnVpbGRlciB0byB0aGUgY3VycmVudCByb3V0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Um91dGVCdWlsZGVyfSBidWlsZGVyIC0gVGhlIGNoaWxkIGJ1aWxkZXIgdG8gYmUgYWRkZWQuXG4gICAgICogQHJldHVybiB7dGhpc30gLSBUaGUgY3VycmVudCBidWlsZGVyIHdpdGggdGhlIGFkZGVkIGNoaWxkIGJ1aWxkZXIuXG4gICAgICovXG4gICAgcHVibGljIGFkZENoaWxkQnVpbGRlcihidWlsZGVyOiBSb3V0ZUJ1aWxkZXIpOiB0aGlzIHtcbiAgICAgICAgYnVpbGRlci53aXRoUGFyZW50KHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5yb290KSB7XG4gICAgICAgICAgICBidWlsZGVyLndpdGhSb290KHRoaXMucm9vdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGJ1aWxkZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZHMgYW4gQW5ndWxhciByb3V0ZSBiYXNlZCBvbiBjb25maWd1cmF0aW9ucy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtSb3V0ZX0gVGhlIGJ1aWx0IEFuZ3VsYXIgcm91dGUuXG4gICAgICovXG4gICAgcHVibGljIGJ1aWxkKCk6IFJvdXRlIHtcbiAgICAgICAgY29uc3QgYW5ndWxhclJvdXRlOiBSb3V0ZSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMucm91dGVcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoYW5ndWxhclJvdXRlLmRhdGEpIHtcbiAgICAgICAgICAgIGFuZ3VsYXJSb3V0ZS5kYXRhID0ge1xuICAgICAgICAgICAgICAgIC4uLmFuZ3VsYXJSb3V0ZS5kYXRhLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMucm91dGVEYXRhXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5ndWxhclJvdXRlLmRhdGEgPSB7Li4udGhpcy5yb3V0ZURhdGF9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYXBwZW5kIHBlcm1pc3Npb25zIGlmIG5vdCBhbHJlYWR5IGluIHJvdXRlIGRhdGFcbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnMgJiYgIShhbmd1bGFyUm91dGUuZGF0YSBhcyBDb21tb25zUm91dGVEYXRhKS5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgKGFuZ3VsYXJSb3V0ZS5kYXRhIGFzIENvbW1vbnNSb3V0ZURhdGEpLnBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9ucztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1lbnUgPSB0aGlzLmJ1aWxkTWVudSgpO1xuICAgICAgICBpZiAobWVudS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAoYW5ndWxhclJvdXRlLmRhdGEgYXMgQ29tbW9uc1JvdXRlRGF0YSkubWVudUl0ZW1zID0gbWVudTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgodGhpcy5yb3V0ZS5jaGlsZHJlbj8ubGVuZ3RoID8/IDApID4gMCB8fCB0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIHJvdXRlIGhhcyBjaGlsZHJlblxuICAgICAgICAgICAgYW5ndWxhclJvdXRlLmNoaWxkcmVuID0gW107XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYW5ndWxhclJvdXRlLmNoaWxkcmVuLnB1c2goLi4udGhpcy5yb3V0ZS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkUm91dGUgb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBhbmd1bGFyUm91dGUuY2hpbGRyZW4ucHVzaChjaGlsZFJvdXRlLmJ1aWxkKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnJvdXRlLmNhbkFjdGl2YXRlKSB7XG4gICAgICAgICAgICBhbmd1bGFyUm91dGUuY2FuQWN0aXZhdGUgPSBbLi4udGhpcy5yb3V0ZS5jYW5BY3RpdmF0ZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucm91dGUuY2FuQWN0aXZhdGVDaGlsZCkge1xuICAgICAgICAgICAgYW5ndWxhclJvdXRlLmNhbkFjdGl2YXRlQ2hpbGQgPSBbLi4udGhpcy5yb3V0ZS5jYW5BY3RpdmF0ZUNoaWxkXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yb3V0ZS5jYW5Mb2FkKSB7XG4gICAgICAgICAgICBhbmd1bGFyUm91dGUuY2FuTG9hZCA9IFsuLi50aGlzLnJvdXRlLmNhbkxvYWRdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJvdXRlLmNhbkRlYWN0aXZhdGUpIHtcbiAgICAgICAgICAgIGFuZ3VsYXJSb3V0ZS5jYW5EZWFjdGl2YXRlID0gWy4uLnRoaXMucm91dGUuY2FuRGVhY3RpdmF0ZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucm91dGUucmVzb2x2ZSkge1xuICAgICAgICAgICAgYW5ndWxhclJvdXRlLnJlc29sdmUgPSB7Li4udGhpcy5yb3V0ZS5yZXNvbHZlfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhbmd1bGFyUm91dGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIHRoZSBtZW51IGl0ZW1zLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0FycmF5PENvbW1vbnNNZW51SXRlbT59IC0gVGhlIGJ1aWx0IG1lbnUgaXRlbXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBidWlsZE1lbnUoKTogQXJyYXk8Q29tbW9uc01lbnVJdGVtPiB7XG4gICAgICAgIGNvbnN0IG1lbnVJdGVtQnVpbGQ6IENvbW1vbnNNZW51SXRlbSB8IG51bGwgPSB0aGlzLm1lbnVJdGVtID8gey4uLnRoaXMubWVudUl0ZW19IDogbnVsbDtcbiAgICAgICAgY29uc3Qgcm91dGVDaGlsZHJlbk1lbnVJdGVtczogQXJyYXk8Q29tbW9uc01lbnVJdGVtPiA9IHRoaXMuY2hpbGRyZW4uZmxhdE1hcChjaGlsZCA9PiBjaGlsZC5idWlsZE1lbnUoKSk7XG4gICAgICAgIGNvbnN0IG1lbnVJdGVtQ2hpbGRyZW46IEFycmF5PENvbW1vbnNNZW51SXRlbT4gPSBbXTtcbiAgICAgICAgY29uc3QgbWVudUl0ZW1DaGlsZHJlbkJ1aWxkOiBBcnJheTxDb21tb25zTWVudUl0ZW0+ID0gW107XG5cbiAgICAgICAgaWYgKG1lbnVJdGVtQnVpbGQ/Lml0ZW1zKSB7XG4gICAgICAgICAgICBtZW51SXRlbUNoaWxkcmVuQnVpbGQucHVzaCguLi5tZW51SXRlbUJ1aWxkLml0ZW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByb2Nlc3NNZW51SXRlbUNoaWxkID0gKGNoaWxkOiBDb21tb25zTWVudUl0ZW0pOiBDb21tb25zTWVudUl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgZmluYWxDaGlsZDogQ29tbW9uc01lbnVJdGVtID0gey4uLmNoaWxkfTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZmluYWxDaGlsZC5yb3V0ZXJMaW5rID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGZpbmFsQ2hpbGQucm91dGVyTGluayA9IHRoaXMucm91dGVQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmaW5hbENoaWxkLnJvdXRlckxpbmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZmluYWxDaGlsZC5yb3V0ZXJMaW5rID0gW2ZpbmFsQ2hpbGQucm91dGVyTGlua107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmluYWxDaGlsZC5yb3V0ZXJMaW5rKSB7XG4gICAgICAgICAgICAgICAgZmluYWxDaGlsZC5yb3V0ZXJMaW5rID0gcmVtb3ZlUm91dGVFbXB0eVBhdGhTZWdtZW50cyhmaW5hbENoaWxkLnJvdXRlckxpbmspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUHJvcGFnYXRlIHBlcm1pc3Npb25zIHRvIGNoaWxkcmVuXG4gICAgICAgICAgICBpZiAoIWZpbmFsQ2hpbGQucGVybWlzc2lvbnMgJiYgdGhpcy5yb3V0ZURhdGEucGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgICAgICBmaW5hbENoaWxkLnBlcm1pc3Npb25zID0gdGhpcy5yb3V0ZURhdGEucGVybWlzc2lvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWZpbmFsQ2hpbGQucGVybWlzc2lvbnMgJiYgdGhpcy5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgICAgIGZpbmFsQ2hpbGQucGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZpbmFsQ2hpbGQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5tZW51SXRlbUNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gbWVudUl0ZW1DaGlsZHJlbi5wdXNoKHByb2Nlc3NNZW51SXRlbUNoaWxkKGNoaWxkKSkpO1xuXG4gICAgICAgIGNvbnN0IG1lbnVJdGVtQ2hpbGRyZW5BZnRlckJ1aWxkOiBBcnJheTxDb21tb25zTWVudUl0ZW0+ID0gdGhpcy5tZW51SXRlbUNoaWxkcmVuQWZ0ZXIubWFwKGNoaWxkID0+IHByb2Nlc3NNZW51SXRlbUNoaWxkKGNoaWxkKSk7XG5cbiAgICAgICAgbWVudUl0ZW1DaGlsZHJlbkJ1aWxkLnB1c2goLi4ubWVudUl0ZW1DaGlsZHJlbiwgLi4ucm91dGVDaGlsZHJlbk1lbnVJdGVtcywgLi4ubWVudUl0ZW1DaGlsZHJlbkFmdGVyQnVpbGQpO1xuXG4gICAgICAgIGlmICghbWVudUl0ZW1CdWlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIG1lbnVJdGVtQ2hpbGRyZW5CdWlsZDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lbnVJdGVtQnVpbGQubGFiZWwgPSBtZW51SXRlbUJ1aWxkLmxhYmVsID8/IHRoaXMucm91dGVEYXRhLnBhZ2VUaXRsZTtcbiAgICAgICAgaWYgKHR5cGVvZiBtZW51SXRlbUJ1aWxkLnJvdXRlckxpbmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBtZW51SXRlbUJ1aWxkLnJvdXRlckxpbmsgPSBbbWVudUl0ZW1CdWlsZC5yb3V0ZXJMaW5rXTtcbiAgICAgICAgfVxuICAgICAgICBtZW51SXRlbUJ1aWxkLnJvdXRlckxpbmsgPSByZW1vdmVSb3V0ZUVtcHR5UGF0aFNlZ21lbnRzKG1lbnVJdGVtQnVpbGQucm91dGVyTGluayA/PyB0aGlzLnJvdXRlUGF0aCk7XG4gICAgICAgIGlmIChtZW51SXRlbUNoaWxkcmVuQnVpbGQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbWVudUl0ZW1CdWlsZC5pdGVtcyA9IG1lbnVJdGVtQ2hpbGRyZW5CdWlsZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbWVudUl0ZW1CdWlsZC5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgbWVudUl0ZW1CdWlsZC5wZXJtaXNzaW9ucyA9IHRoaXMuZmluZE1lbnVJdGVtUGVybWlzc2lvbnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbWVudUl0ZW1CdWlsZF07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZpbmRNZW51SXRlbVBlcm1pc3Npb25zKCkge1xuICAgICAgICBpZiAodGhpcy5tZW51SXRlbT8ucGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1lbnVJdGVtLnBlcm1pc3Npb25zO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJvdXRlRGF0YS5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBhbHJlYWR5IGJ1aWx0XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZURhdGEucGVybWlzc2lvbnM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVNZW51SXRlbShpY29uPzogc3RyaW5nLCBsYWJlbD86IHN0cmluZywgcm91dGVyTGluaz86IEFycmF5PHN0cmluZz4pIHtcbiAgICBjb25zdCBtZW51SXRlbTogQ29tbW9uc01lbnVJdGVtID0ge307XG4gICAgaWYgKGljb24pIHtcbiAgICAgICAgbWVudUl0ZW0uaWNvbiA9IGljb247XG4gICAgfVxuICAgIGlmIChsYWJlbCkge1xuICAgICAgICBtZW51SXRlbS5sYWJlbCA9IGxhYmVsO1xuICAgIH1cbiAgICBpZiAocm91dGVyTGluaykge1xuICAgICAgICBtZW51SXRlbS5yb3V0ZXJMaW5rID0gcm91dGVyTGluaztcbiAgICB9XG4gICAgcmV0dXJuIG1lbnVJdGVtO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgUm91dGVCdWlsZGVyIHdpdGggdGhlIGdpdmVuIHBhdGggYW5kIGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIGZvciB0aGUgcm91dGUuXG4gKiBAcGFyYW0ge1R5cGU8YW55Pn0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBmb3IgdGhlIHJvdXRlLlxuICogQHJldHVybiB7Um91dGVCdWlsZGVyfSAtIEEgbmV3IGluc3RhbmNlIG9mIFJvdXRlQnVpbGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJvdXRlKHBhdGg6IHN0cmluZywgY29tcG9uZW50OiBUeXBlPGFueT4pOiBSb3V0ZUJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgUm91dGVCdWlsZGVyKHtcbiAgICAgICAgcGF0aDogcGF0aCxcbiAgICAgICAgY29tcG9uZW50OiBjb21wb25lbnRcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVkaXJlY3Qgcm91dGUgZm9yIHRoZSBnaXZlbiBwYXRoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWRpcmVjdFRvIC0gVGhlIFVSTCBwYXRoIHRvIHJlZGlyZWN0IHRvLlxuICogQHBhcmFtIHsnZnVsbCcgfCAncHJlZml4J30gW3BhdGhNYXRjaD0ncHJlZml4J10gLSBUaGUgcGF0aCBtYXRjaGluZyBzdHJhdGVneSAoJ2Z1bGwnIG9yICdwcmVmaXgnKS5cbiAqIEByZXR1cm4ge1JvdXRlQnVpbGRlcn0gLSBBIG5ldyBpbnN0YW5jZSBvZiB0aGUgUm91dGVCdWlsZGVyIGNsYXNzIHdpdGggdGhlIHJlZGlyZWN0IHJvdXRlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSb3V0ZVJlZGlyZWN0KHBhdGg6IHN0cmluZywgcmVkaXJlY3RUbzogc3RyaW5nLCBwYXRoTWF0Y2g6ICdmdWxsJyB8ICdwcmVmaXgnID0gJ3ByZWZpeCcpOiBSb3V0ZUJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgUm91dGVCdWlsZGVyKHtcbiAgICAgICAgcGF0aDogcGF0aCxcbiAgICAgICAgcmVkaXJlY3RUbzogcmVkaXJlY3RUbyxcbiAgICAgICAgcGF0aE1hdGNoOiBwYXRoTWF0Y2hcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbGF6eSByb3V0ZSBtb2R1bGUgKG9yIHJvdXRlcykuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCBmb3IgdGhlIHJvdXRlLlxuICogQHBhcmFtIHtMb2FkQ2hpbGRyZW59IGxvYWRDaGlsZHJlbiAtIFRoZSBmdW5jdGlvbiB0aGF0IGxvYWRzIHRoZSBsYXp5IG1vZHVsZSAob3Igcm91dGVzKS5cbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gW2Nhbk1hdGNoXSAtIEFuIG9wdGlvbmFsIGFycmF5IG9mIG9iamVjdHMgdGhhdCBjYW4gbWF0Y2ggdGhlIHJvdXRlLlxuICogQHJldHVybnMge1JvdXRlQnVpbGRlcn0gLSBBIG5ldyBpbnN0YW5jZSBvZiBSb3V0ZUJ1aWxkZXIgY2xhc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGlsZHJlbkxhenlSb3V0ZShwYXRoOiBzdHJpbmcsIGxvYWRDaGlsZHJlbjogTG9hZENoaWxkcmVuLCBjYW5NYXRjaD86IEFycmF5PGFueT4pOiBSb3V0ZUJ1aWxkZXIge1xuICAgIGNvbnN0IHJvdXRlOiBSb3V0ZSA9IHtwYXRoOiBwYXRoLCBsb2FkQ2hpbGRyZW46IGxvYWRDaGlsZHJlbn07XG4gICAgaWYgKGNhbk1hdGNoPy5sZW5ndGgpIHtcbiAgICAgICAgcm91dGUuY2FuTWF0Y2ggPSBjYW5NYXRjaDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBSb3V0ZUJ1aWxkZXIocm91dGUpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBsYXp5IHJvdXRlIGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIGZvciB0aGUgcm91dGUuXG4gKiBAcGFyYW0geygpID0+IFR5cGU8dW5rbm93bj4gfCBPYnNlcnZhYmxlPFR5cGU8dW5rbm93bj4gfCBEZWZhdWx0RXhwb3J0PFR5cGU8dW5rbm93bj4+PiB8IFByb21pc2U8VHlwZTx1bmtub3duPiB8IERlZmF1bHRFeHBvcnQ8VHlwZTx1bmtub3duPj4+fSBsb2FkQ29tcG9uZW50IC0gVGhlIGZ1bmN0aW9uIHRoYXQgbG9hZHMgdGhlIGNvbXBvbmVudCBmb3IgdGhlIHJvdXRlLlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBbY2FuTWF0Y2hdIC0gVGhlIGFycmF5IG9mIHZhbHVlcyB0aGF0IGRldGVybWluZSBpZiB0aGUgcm91dGUgY2FuIG1hdGNoLlxuICogQHJldHVybnMge1JvdXRlQnVpbGRlcn0gLSBBbiBpbnN0YW5jZSBvZiBSb3V0ZUJ1aWxkZXIgd2l0aCB0aGUgY3JlYXRlZCByb3V0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxhenlSb3V0ZShcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgbG9hZENvbXBvbmVudDogKCkgPT4gVHlwZTx1bmtub3duPiB8IE9ic2VydmFibGU8VHlwZTx1bmtub3duPiB8IERlZmF1bHRFeHBvcnQ8VHlwZTx1bmtub3duPj4+IHwgUHJvbWlzZTxUeXBlPHVua25vd24+IHwgRGVmYXVsdEV4cG9ydDxUeXBlPHVua25vd24+Pj4sXG4gICAgY2FuTWF0Y2g/OiBBcnJheTxhbnk+XG4pOiBSb3V0ZUJ1aWxkZXIge1xuICAgIGNvbnN0IHJvdXRlOiBSb3V0ZSA9IHtwYXRoOiBwYXRoLCBsb2FkQ29tcG9uZW50OiBsb2FkQ29tcG9uZW50fTtcbiAgICBpZiAoY2FuTWF0Y2g/Lmxlbmd0aCkge1xuICAgICAgICByb3V0ZS5jYW5NYXRjaCA9IGNhbk1hdGNoO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFJvdXRlQnVpbGRlcihyb3V0ZSk7XG59XG4iXX0=","import { RouteBuilder } from './route-builder';\nexport class RoutesBuilder {\n constructor() {\n this.routes = [];\n }\n /**\n * Adds an Angular route to the current route configuration.\n *\n * @param {Route} route - The Angular route object to be added.\n * @param {RouteBuilderAdjustFnType} [builderAdjustFn] - Optional function to adjust the route builder before adding.\n */\n addFromNgRoute(route, builderAdjustFn) {\n const builder = new RouteBuilder(route);\n builderAdjustFn?.(builder);\n return this.add(builder);\n }\n /**\n * Adds a route redirect to the Angular route.\n *\n * @param {string} path - The path for the redirect.\n * @param {string} redirectTo - The target route to redirect.\n * @param {'full' | 'prefix'} pathMatch - The matching strategy for the redirect. Default is 'prefix'.\n */\n addRedirect(path, redirectTo, pathMatch = 'prefix') {\n return this.addFromNgRoute({\n path: path,\n redirectTo: redirectTo,\n pathMatch: pathMatch\n });\n }\n /**\n * Adds a route to the routes.\n *\n * @param {RouteBuilder} routeBuilder - The route builder object representing the route to be added.\n */\n add(routeBuilder) {\n this.routes.push(routeBuilder);\n return this;\n }\n build() {\n return this.routes.map(r => r.build());\n }\n}\n/**\n * Creates a new instance of the RoutesBuilder class.\n *\n * @return {RoutesBuilder} A new instance of the RoutesBuilder class.\n */\nexport function createRoutes() {\n return new RoutesBuilder();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9yb3V0ZXIvcm91dGVzLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLFlBQVksRUFBMkIsTUFBTSxpQkFBaUIsQ0FBQztBQUV2RSxNQUFNLE9BQU8sYUFBYTtJQUExQjtRQUNZLFdBQU0sR0FBd0IsRUFBRSxDQUFDO0lBMEM3QyxDQUFDO0lBeENHOzs7OztPQUtHO0lBQ0ksY0FBYyxDQUFDLEtBQVksRUFBRSxlQUEwQztRQUMxRSxNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxlQUFlLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFdBQVcsQ0FBQyxJQUFZLEVBQUUsVUFBa0IsRUFBRSxZQUErQixRQUFRO1FBQ3hGLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUN2QixJQUFJLEVBQUUsSUFBSTtZQUNWLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLFNBQVMsRUFBRSxTQUFTO1NBQ3ZCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksR0FBRyxDQUFDLFlBQTBCO1FBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxLQUFLO1FBQ1IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7Q0FDSjtBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsWUFBWTtJQUN4QixPQUFPLElBQUksYUFBYSxFQUFFLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Um91dGUsIFJvdXRlc30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtSb3V0ZUJ1aWxkZXIsIFJvdXRlQnVpbGRlckFkanVzdEZuVHlwZX0gZnJvbSAnLi9yb3V0ZS1idWlsZGVyJztcblxuZXhwb3J0IGNsYXNzIFJvdXRlc0J1aWxkZXIge1xuICAgIHByaXZhdGUgcm91dGVzOiBBcnJheTxSb3V0ZUJ1aWxkZXI+ID0gW107XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEFuZ3VsYXIgcm91dGUgdG8gdGhlIGN1cnJlbnQgcm91dGUgY29uZmlndXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Um91dGV9IHJvdXRlIC0gVGhlIEFuZ3VsYXIgcm91dGUgb2JqZWN0IHRvIGJlIGFkZGVkLlxuICAgICAqIEBwYXJhbSB7Um91dGVCdWlsZGVyQWRqdXN0Rm5UeXBlfSBbYnVpbGRlckFkanVzdEZuXSAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGFkanVzdCB0aGUgcm91dGUgYnVpbGRlciBiZWZvcmUgYWRkaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGcm9tTmdSb3V0ZShyb3V0ZTogUm91dGUsIGJ1aWxkZXJBZGp1c3RGbj86IFJvdXRlQnVpbGRlckFkanVzdEZuVHlwZSk6IHRoaXMge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gbmV3IFJvdXRlQnVpbGRlcihyb3V0ZSk7XG4gICAgICAgIGJ1aWxkZXJBZGp1c3RGbj8uKGJ1aWxkZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGQoYnVpbGRlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHJvdXRlIHJlZGlyZWN0IHRvIHRoZSBBbmd1bGFyIHJvdXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCBmb3IgdGhlIHJlZGlyZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWRpcmVjdFRvIC0gVGhlIHRhcmdldCByb3V0ZSB0byByZWRpcmVjdC5cbiAgICAgKiBAcGFyYW0geydmdWxsJyB8ICdwcmVmaXgnfSBwYXRoTWF0Y2ggLSBUaGUgbWF0Y2hpbmcgc3RyYXRlZ3kgZm9yIHRoZSByZWRpcmVjdC4gRGVmYXVsdCBpcyAncHJlZml4Jy5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkUmVkaXJlY3QocGF0aDogc3RyaW5nLCByZWRpcmVjdFRvOiBzdHJpbmcsIHBhdGhNYXRjaDogJ2Z1bGwnIHwgJ3ByZWZpeCcgPSAncHJlZml4Jyk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGcm9tTmdSb3V0ZSh7XG4gICAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgICAgcmVkaXJlY3RUbzogcmVkaXJlY3RUbyxcbiAgICAgICAgICAgIHBhdGhNYXRjaDogcGF0aE1hdGNoXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSByb3V0ZSB0byB0aGUgcm91dGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtSb3V0ZUJ1aWxkZXJ9IHJvdXRlQnVpbGRlciAtIFRoZSByb3V0ZSBidWlsZGVyIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJvdXRlIHRvIGJlIGFkZGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGQocm91dGVCdWlsZGVyOiBSb3V0ZUJ1aWxkZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5yb3V0ZXMucHVzaChyb3V0ZUJ1aWxkZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYnVpbGQoKTogUm91dGVzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm91dGVzLm1hcChyID0+IHIuYnVpbGQoKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFJvdXRlc0J1aWxkZXIgY2xhc3MuXG4gKlxuICogQHJldHVybiB7Um91dGVzQnVpbGRlcn0gQSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFJvdXRlc0J1aWxkZXIgY2xhc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSb3V0ZXMoKSB7XG4gICAgcmV0dXJuIG5ldyBSb3V0ZXNCdWlsZGVyKCk7XG59XG4iXX0=","import { Observable } from 'rxjs';\n/**\n * Maps an Observable of data with optional totalCount and data to a data list result object with provided defaults of empty array and count 0.\n */\nexport function mapToDataList() {\n return function (source) {\n return new Observable(subscriber => {\n return source.subscribe({\n next(value) {\n subscriber.next({\n data: value.data ?? [],\n totalCount: value.totalCount ?? value.data?.length ?? 0\n });\n },\n error: err => {\n subscriber.error(err);\n }\n });\n });\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWRhdGEtbGlzdC1yZXN1bHQtb3BlcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9yeGpzL21hcC1kYXRhLWxpc3QtcmVzdWx0LW9wZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQW1CLE1BQU0sTUFBTSxDQUFDO0FBSWxEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGFBQWE7SUFDekIsT0FBTyxVQUFnQixNQUF3RDtRQUMzRSxPQUFPLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQy9CLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLEtBQUs7b0JBQ04sVUFBVSxDQUFDLElBQUksQ0FBQzt3QkFDWixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFO3dCQUN0QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDO3FCQUMxRCxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztnQkFDRCxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ1QsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDMUIsQ0FBQzthQUNKLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T2JzZXJ2YWJsZSwgT3BlcmF0b3JGdW5jdGlvbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7RGF0YUxpc3RSZXN1bHR9IGZyb20gJy4uL2RhdGEtbGlzdC9kYXRhLWxpc3QubW9kZWwnO1xuXG4vKipcbiAqIE1hcHMgYW4gT2JzZXJ2YWJsZSBvZiBkYXRhIHdpdGggb3B0aW9uYWwgdG90YWxDb3VudCBhbmQgZGF0YSB0byBhIGRhdGEgbGlzdCByZXN1bHQgb2JqZWN0IHdpdGggcHJvdmlkZWQgZGVmYXVsdHMgb2YgZW1wdHkgYXJyYXkgYW5kIGNvdW50IDAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb0RhdGFMaXN0PEl0ZW0+KCk6IE9wZXJhdG9yRnVuY3Rpb248e2RhdGE/OiBJdGVtW107IHRvdGFsQ291bnQ/OiBudW1iZXJ9LCBEYXRhTGlzdFJlc3VsdDxJdGVtPj4ge1xuICAgIHJldHVybiBmdW5jdGlvbiA8SXRlbT4oc291cmNlOiBPYnNlcnZhYmxlPHtkYXRhPzogSXRlbVtdOyB0b3RhbENvdW50PzogbnVtYmVyfT4pOiBPYnNlcnZhYmxlPERhdGFMaXN0UmVzdWx0PEl0ZW0+PiB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmVyID0+IHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB2YWx1ZS5kYXRhID8/IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxDb3VudDogdmFsdWUudG90YWxDb3VudCA/PyB2YWx1ZS5kYXRhPy5sZW5ndGggPz8gMFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG59XG4iXX0=","export function commonsInitializerProvider(handler, commonsInit) {\n return () => commonsInit.initialize(handler);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy1pbml0LnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vY29yZS9zcmMvc2VydmljZXMvcHJvdmlkZXJzL2NvbW1vbnMtaW5pdC5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxNQUFNLFVBQVUsMEJBQTBCLENBQUMsT0FBb0IsRUFBRSxXQUErQjtJQUM1RixPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cEJhY2tlbmR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtDb21tb25zSW5pdFNlcnZpY2V9IGZyb20gJy4uL2NvbW1vbnMtaW5pdC5zZXJ2aWNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbW1vbnNJbml0aWFsaXplclByb3ZpZGVyKGhhbmRsZXI6IEh0dHBCYWNrZW5kLCBjb21tb25zSW5pdDogQ29tbW9uc0luaXRTZXJ2aWNlKTogKCkgPT4gT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuICgpID0+IGNvbW1vbnNJbml0LmluaXRpYWxpemUoaGFuZGxlcik7XG59XG4iXX0=","import { InjectionToken } from '@angular/core';\nexport const COMMONS_INITIALIZER_IT = new InjectionToken('COMMONS_INIZIALIZER');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy1pbml0LnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vY29yZS9zcmMvc2VydmljZXMvdG9rZW5zL2NvbW1vbnMtaW5pdC50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSTdDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksY0FBYyxDQUEyQyxxQkFBcUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3Rpb25Ub2tlbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjb25zdCBDT01NT05TX0lOSVRJQUxJWkVSX0lUID0gbmV3IEluamVjdGlvblRva2VuPFJlYWRvbmx5QXJyYXk8KCkgPT4gT2JzZXJ2YWJsZTx1bmtub3duPj4+KCdDT01NT05TX0lOSVpJQUxJWkVSJyk7XG4iXX0=","import { InjectionToken } from '@angular/core';\nexport const LOG_PUBLISHERS = new InjectionToken('LOG_PUBLISHERS');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLXB1Ymxpc2hlci50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvcmUvc3JjL3NlcnZpY2VzL3Rva2Vucy9sb2ctcHVibGlzaGVyLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJN0MsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUFrQixnQkFBZ0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3Rpb25Ub2tlbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7SUxvZ1B1Ymxpc2hlcn0gZnJvbSAnLi4vLi4vbG9nL2xvZy5tb2RlbCc7XG5cbmV4cG9ydCBjb25zdCBMT0dfUFVCTElTSEVSUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxJTG9nUHVibGlzaGVyW10+KCdMT0dfUFVCTElTSEVSUycpO1xuIl19","import { combineLatest, of, tap } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { throwError } from '../error/error-helpers';\nimport { objectDeepMerge } from '../helpers/object';\nexport class CommonsConfigurationService {\n static { this._instance = new CommonsConfigurationService(); }\n static get() {\n return CommonsConfigurationService._instance;\n }\n constructor() {\n this.jsonSources = [];\n this.objectSources = [];\n this.configuration = { ...this.projectEnvironment };\n /**\n * returns true if there is no jsonSources\n */\n this.skipJsonConfigsLoading = () => this.jsonSources === null || this.jsonSources.length === 0;\n /**\n * loads json sources or skips them returning true in both cases\n * used for `skipJsonSourceInit` configuration parameter\n */\n this.loadJsonConfigurations = () => (this.skipJsonConfigsLoading() ? of(true) : this.loadJsonSources());\n // empty, but needed for private constructor\n }\n init(httpClient, logger) {\n this.http = httpClient;\n this.logger = logger?.create('ConfigurationService');\n return this;\n }\n /**\n * Add commons module config.\n * @param config Module config.\n */\n addModuleConfigSource(config) {\n this.moduleConfig = config;\n this.mergeConfigs();\n this.logger?.debug(`Module configuration source added.`, this.moduleConfig);\n }\n /**\n * Add project environment source.\n * @param environment Environment.\n */\n addEnvironmentSource(environment) {\n this.projectEnvironment = environment;\n this.mergeConfigs();\n this.logger?.debug(`Environment configuration source added.`);\n }\n /**\n * Adds new config source from JSON file loaded from HTTP.\n * @param config Config for JSON file.\n * @param loadImmediately Load is by default triggered on app initialization. If immediate load is required, pass true.\n */\n addJsonSource(config = {}, loadImmediately = false) {\n if (!config) {\n config = {};\n }\n const url = config?.url ?? 'assets/config/env{{environment}}.json';\n const enableEnvProdReplace = config?.enableEnvProd ?? false;\n const sourceInfo = {\n url: url,\n isEnvironment: false,\n environmentEnableEnvProd: enableEnvProdReplace,\n isLoaded: false\n };\n this.jsonSources.push(sourceInfo);\n this.logger?.debug(`JSON configuration source added: ${url}.`);\n if (loadImmediately) {\n return this.loadJsonConfigurations();\n }\n else {\n return of(true);\n }\n }\n /**\n * Adds new config object from any object.\n * @param config Config object.\n */\n addObjectSource(config) {\n this.objectSources.push(config);\n this.logger?.debug(`Object configuration source added.`);\n this.mergeConfigs();\n }\n loadJsonSources() {\n if (!this.http) {\n this.logger?.warn('HTTP client was not initialized. Json source cannot be loaded');\n return of(false);\n }\n const httpClient = this.http;\n return combineLatest(this.jsonSources\n .filter(source => !source.isLoaded)\n .map(sourceInfo => {\n let url = sourceInfo.url;\n sourceInfo.environment = this.projectEnvironment?.name || (this.projectEnvironment?.production ? (sourceInfo.environmentEnableEnvProd ? 'prod' : null) : 'dev');\n sourceInfo.isEnvironment = !!sourceInfo.environment;\n if (sourceInfo.isEnvironment) {\n url = url.replace('{{environment}}', '.' + sourceInfo.environment);\n }\n else {\n // replace possible environment entry and change source info url\n url = url.replace('{{environment}}', '');\n sourceInfo.url = url;\n }\n this.logger?.debug(`Loading JSON configuration source from ${url}.`);\n return httpClient.get(url).pipe(catchError((err) => {\n if (sourceInfo.isEnvironment) {\n const noEnvUrl = sourceInfo.url.replace('{{environment}}', '');\n sourceInfo.environment = null;\n return httpClient.get(noEnvUrl);\n }\n else {\n this.logger?.warn(`Configuration file ${url} not loaded`, err);\n return of(false);\n }\n }), map(configuration => {\n if (typeof configuration !== 'object') {\n return false;\n }\n sourceInfo.configuration = configuration;\n sourceInfo.isLoaded = true;\n return true;\n }));\n })).pipe(map(sourceResults => sourceResults.every(sr => sr)), tap(() => this.mergeConfigs()));\n }\n /**\n * Get configuration.\n */\n getConfig() {\n return this.configuration;\n }\n /**\n * Get configuration value for key.\n * @param key Configuration key.\n */\n getConfigValue(key) {\n return this.configuration[key] ? this.configuration[key] : null;\n }\n /**\n * Gets the configuration value for the given key. If the value is not found,\n * it throws an error with a custom error message.\n *\n * @param {string} key - The configuration key.\n * @param {string} [errorMessage] - Custom error message to be thrown if the value is not found.\n *\n * @returns {T} - The configuration value.\n *\n * @throws {CommonsInternalError} - If the value is not found or a custom error message is provided.\n */\n getConfigValueOrThrow(key, errorMessage) {\n return this.getConfigValue(key) ?? throwError(errorMessage ?? `Missing configuration value for '${key}'!`, { name: 'CommonsMissingConfigError' });\n }\n /**\n * Has configuration for key.\n * @param key Configuration key.\n */\n hasConfigKey(key) {\n return Object.keys(this.configuration).some(k => k === key);\n }\n /**\n * Merges configuration from multiple sources with\n */\n mergeConfigs() {\n let config = {};\n // 1. object sources have highest priority\n if (this.objectSources.length) {\n for (const objConfig of this.objectSources) {\n config = objectDeepMerge(config, objConfig);\n }\n }\n // 2. JSON sources come next\n const jsonConfigs = this.jsonSources.filter(source => source.isLoaded && typeof source.configuration === 'object').map(source => source.configuration);\n if (jsonConfigs.length) {\n for (const jsonConfig of jsonConfigs) {\n if (jsonConfig) {\n config = objectDeepMerge(config, jsonConfig);\n }\n }\n }\n // 3. project env has the next priority\n if (this.projectEnvironment) {\n config = objectDeepMerge(config, this.projectEnvironment);\n }\n // 4. module config has the lowest priority\n if (this.moduleConfig) {\n config = objectDeepMerge(config, this.moduleConfig);\n }\n this.configuration = config;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy1jb25maWd1cmF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9zZXJ2aWNlcy9jb21tb25zLWNvbmZpZ3VyYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQWEsYUFBYSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDeEQsT0FBTyxFQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBSWxELE1BQU0sT0FBTywyQkFBMkI7YUFDckIsY0FBUyxHQUFnQyxJQUFJLDJCQUEyQixFQUFFLEFBQWpFLENBQWtFO0lBRW5GLE1BQU0sQ0FBQyxHQUFHO1FBQ2IsT0FBTywyQkFBMkIsQ0FBQyxTQUFTLENBQUM7SUFDakQsQ0FBQztJQVlEO1FBTFEsZ0JBQVcsR0FBOEIsRUFBRSxDQUFDO1FBQzVDLGtCQUFhLEdBQWUsRUFBRSxDQUFDO1FBRS9CLGtCQUFhLEdBQUcsRUFBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBQyxDQUFDO1FBdUVyRDs7V0FFRztRQUNLLDJCQUFzQixHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUVsRzs7O1dBR0c7UUFDSSwyQkFBc0IsR0FBRyxHQUF3QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQTdFM0gsNENBQTRDO0lB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QyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztJQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQge09ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QsIG9mLCB0YXB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHt0aHJvd0Vycm9yfSBmcm9tICcuLi9lcnJvci9lcnJvci1oZWxwZXJzJztcbmltcG9ydCB7b2JqZWN0RGVlcE1lcmdlfSBmcm9tICcuLi9oZWxwZXJzL29iamVjdCc7XG5pbXBvcnQge0lMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi9sb2cvbG9nLm1vZGVsJztcbmltcG9ydCB7Q29tbW9uc01vZHVsZUNvbmZpZ30gZnJvbSAnLi90b2tlbnMvbW9kdWxlLWNvbmZpZy50b2tlbic7XG5cbmV4cG9ydCBjbGFzcyBDb21tb25zQ29uZmlndXJhdGlvblNlcnZpY2Uge1xuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogQ29tbW9uc0NvbmZpZ3VyYXRpb25TZXJ2aWNlID0gbmV3IENvbW1vbnNDb25maWd1cmF0aW9uU2VydmljZSgpO1xuXG4gICAgcHVibGljIHN0YXRpYyBnZXQoKTogQ29tbW9uc0NvbmZpZ3VyYXRpb25TZXJ2aWNlIHtcbiAgICAgICAgcmV0dXJuIENvbW1vbnNDb25maWd1cmF0aW9uU2VydmljZS5faW5zdGFuY2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2dnZXI/OiBJTG9nZ2VyU2VydmljZTtcblxuICAgIHByaXZhdGUgaHR0cD86IEh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSBtb2R1bGVDb25maWc/OiBDb21tb25zTW9kdWxlQ29uZmlnO1xuICAgIHByaXZhdGUgcHJvamVjdEVudmlyb25tZW50PzogYW55O1xuICAgIHByaXZhdGUganNvblNvdXJjZXM6IEFycmF5PEpzb25Tb3VyY2VMb2FkSW5mbz4gPSBbXTtcbiAgICBwcml2YXRlIG9iamVjdFNvdXJjZXM6IEFycmF5PGFueT4gPSBbXTtcblxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvbiA9IHsuLi50aGlzLnByb2plY3RFbnZpcm9ubWVudH07XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvLyBlbXB0eSwgYnV0IG5lZWRlZCBmb3IgcHJpdmF0ZSBjb25zdHJ1Y3RvclxuICAgIH1cblxuICAgIHB1YmxpYyBpbml0KGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsIGxvZ2dlcj86IElMb2dnZXJTZXJ2aWNlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHBDbGllbnQ7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyPy5jcmVhdGUoJ0NvbmZpZ3VyYXRpb25TZXJ2aWNlJyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBjb21tb25zIG1vZHVsZSBjb25maWcuXG4gICAgICogQHBhcmFtIGNvbmZpZyBNb2R1bGUgY29uZmlnLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRNb2R1bGVDb25maWdTb3VyY2UoY29uZmlnPzogQ29tbW9uc01vZHVsZUNvbmZpZyk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vZHVsZUNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5tZXJnZUNvbmZpZ3MoKTtcbiAgICAgICAgdGhpcy5sb2dnZXI/LmRlYnVnKGBNb2R1bGUgY29uZmlndXJhdGlvbiBzb3VyY2UgYWRkZWQuYCwgdGhpcy5tb2R1bGVDb25maWcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBwcm9qZWN0IGVudmlyb25tZW50IHNvdXJjZS5cbiAgICAgKiBAcGFyYW0gZW52aXJvbm1lbnQgRW52aXJvbm1lbnQuXG4gICAgICovXG4gICAgcHVibGljIGFkZEVudmlyb25tZW50U291cmNlKGVudmlyb25tZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0RW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICAgICAgdGhpcy5tZXJnZUNvbmZpZ3MoKTtcbiAgICAgICAgdGhpcy5sb2dnZXI/LmRlYnVnKGBFbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIHNvdXJjZSBhZGRlZC5gKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIG5ldyBjb25maWcgc291cmNlIGZyb20gSlNPTiBmaWxlIGxvYWRlZCBmcm9tIEhUVFAuXG4gICAgICogQHBhcmFtIGNvbmZpZyBDb25maWcgZm9yIEpTT04gZmlsZS5cbiAgICAgKiBAcGFyYW0gbG9hZEltbWVkaWF0ZWx5IExvYWQgaXMgYnkgZGVmYXVsdCB0cmlnZ2VyZWQgb24gYXBwIGluaXRpYWxpemF0aW9uLiBJZiBpbW1lZGlhdGUgbG9hZCBpcyByZXF1aXJlZCwgcGFzcyB0cnVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRKc29uU291cmNlKGNvbmZpZzoge3VybD86IHN0cmluZzsgZW5hYmxlRW52UHJvZD86IGJvb2xlYW59ID0ge30sIGxvYWRJbW1lZGlhdGVseSA9IGZhbHNlKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgICAgICBjb25maWcgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmwgPSBjb25maWc/LnVybCA/PyAnYXNzZXRzL2NvbmZpZy9lbnZ7e2Vudmlyb25tZW50fX0uanNvbic7XG4gICAgICAgIGNvbnN0IGVuYWJsZUVudlByb2RSZXBsYWNlID0gY29uZmlnPy5lbmFibGVFbnZQcm9kID8/IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZUluZm86IEpzb25Tb3VyY2VMb2FkSW5mbyA9IHtcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgaXNFbnZpcm9ubWVudDogZmFsc2UsXG4gICAgICAgICAgICBlbnZpcm9ubWVudEVuYWJsZUVudlByb2Q6IGVuYWJsZUVudlByb2RSZXBsYWNlLFxuICAgICAgICAgICAgaXNMb2FkZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuanNvblNvdXJjZXMucHVzaChzb3VyY2VJbmZvKTtcblxuICAgICAgICB0aGlzLmxvZ2dlcj8uZGVidWcoYEpTT04gY29uZmlndXJhdGlvbiBzb3VyY2UgYWRkZWQ6ICR7dXJsfS5gKTtcblxuICAgICAgICBpZiAobG9hZEltbWVkaWF0ZWx5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkSnNvbkNvbmZpZ3VyYXRpb25zKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIG5ldyBjb25maWcgb2JqZWN0IGZyb20gYW55IG9iamVjdC5cbiAgICAgKiBAcGFyYW0gY29uZmlnIENvbmZpZyBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGFkZE9iamVjdFNvdXJjZShjb25maWc6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9iamVjdFNvdXJjZXMucHVzaChjb25maWcpO1xuICAgICAgICB0aGlzLmxvZ2dlcj8uZGVidWcoYE9iamVjdCBjb25maWd1cmF0aW9uIHNvdXJjZSBhZGRlZC5gKTtcbiAgICAgICAgdGhpcy5tZXJnZUNvbmZpZ3MoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgbm8ganNvblNvdXJjZXNcbiAgICAgKi9cbiAgICBwcml2YXRlIHNraXBKc29uQ29uZmlnc0xvYWRpbmcgPSAoKSA9PiB0aGlzLmpzb25Tb3VyY2VzID09PSBudWxsIHx8IHRoaXMuanNvblNvdXJjZXMubGVuZ3RoID09PSAwO1xuXG4gICAgLyoqXG4gICAgICogbG9hZHMganNvbiBzb3VyY2VzIG9yIHNraXBzIHRoZW0gcmV0dXJuaW5nIHRydWUgaW4gYm90aCBjYXNlc1xuICAgICAqIHVzZWQgZm9yIGBza2lwSnNvblNvdXJjZUluaXRgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyXG4gICAgICovXG4gICAgcHVibGljIGxvYWRKc29uQ29uZmlndXJhdGlvbnMgPSAoKTogT2JzZXJ2YWJsZTxib29sZWFuPiA9PiAodGhpcy5za2lwSnNvbkNvbmZpZ3NMb2FkaW5nKCkgPyBvZih0cnVlKSA6IHRoaXMubG9hZEpzb25Tb3VyY2VzKCkpO1xuXG4gICAgcHJpdmF0ZSBsb2FkSnNvblNvdXJjZXMoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIGlmICghdGhpcy5odHRwKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlcj8ud2FybignSFRUUCBjbGllbnQgd2FzIG5vdCBpbml0aWFsaXplZC4gSnNvbiBzb3VyY2UgY2Fubm90IGJlIGxvYWRlZCcpO1xuICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGh0dHBDbGllbnQgPSB0aGlzLmh0dHA7XG5cbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoXG4gICAgICAgICAgICB0aGlzLmpzb25Tb3VyY2VzXG4gICAgICAgICAgICAgICAgLmZpbHRlcihzb3VyY2UgPT4gIXNvdXJjZS5pc0xvYWRlZClcbiAgICAgICAgICAgICAgICAubWFwKHNvdXJjZUluZm8gPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gc291cmNlSW5mby51cmw7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUluZm8uZW52aXJvbm1lbnQgPSB0aGlzLnByb2plY3RFbnZpcm9ubWVudD8ubmFtZSB8fCAodGhpcy5wcm9qZWN0RW52aXJvbm1lbnQ/LnByb2R1Y3Rpb24gPyAoc291cmNlSW5mby5lbnZpcm9ubWVudEVuYWJsZUVudlByb2QgPyAncHJvZCcgOiBudWxsKSA6ICdkZXYnKTtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSW5mby5pc0Vudmlyb25tZW50ID0gISFzb3VyY2VJbmZvLmVudmlyb25tZW50O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VJbmZvLmlzRW52aXJvbm1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKCd7e2Vudmlyb25tZW50fX0nLCAnLicgKyBzb3VyY2VJbmZvLmVudmlyb25tZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UgcG9zc2libGUgZW52aXJvbm1lbnQgZW50cnkgYW5kIGNoYW5nZSBzb3VyY2UgaW5mbyB1cmxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKCd7e2Vudmlyb25tZW50fX0nLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VJbmZvLnVybCA9IHVybDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyPy5kZWJ1ZyhgTG9hZGluZyBKU09OIGNvbmZpZ3VyYXRpb24gc291cmNlIGZyb20gJHt1cmx9LmApO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBodHRwQ2xpZW50LmdldDxvYmplY3Q+KHVybCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlSW5mby5pc0Vudmlyb25tZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vRW52VXJsID0gc291cmNlSW5mby51cmwucmVwbGFjZSgne3tlbnZpcm9ubWVudH19JywgJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VJbmZvLmVudmlyb25tZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0dHBDbGllbnQuZ2V0PG9iamVjdD4obm9FbnZVcmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyPy53YXJuKGBDb25maWd1cmF0aW9uIGZpbGUgJHt1cmx9IG5vdCBsb2FkZWRgLCBlcnIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoY29uZmlndXJhdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWd1cmF0aW9uICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlSW5mby5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VJbmZvLmlzTG9hZGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApLnBpcGUoXG4gICAgICAgICAgICBtYXAoc291cmNlUmVzdWx0cyA9PiBzb3VyY2VSZXN1bHRzLmV2ZXJ5KHNyID0+IHNyKSksXG4gICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5tZXJnZUNvbmZpZ3MoKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY29uZmlndXJhdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29uZmlnKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBjb25maWd1cmF0aW9uIHZhbHVlIGZvciBrZXkuXG4gICAgICogQHBhcmFtIGtleSBDb25maWd1cmF0aW9uIGtleS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29uZmlnVmFsdWU8VCA9IGFueT4oa2V5OiBzdHJpbmcpOiBUIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb25ba2V5XSA/IHRoaXMuY29uZmlndXJhdGlvbltrZXldIDogbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb25maWd1cmF0aW9uIHZhbHVlIGZvciB0aGUgZ2l2ZW4ga2V5LiBJZiB0aGUgdmFsdWUgaXMgbm90IGZvdW5kLFxuICAgICAqIGl0IHRocm93cyBhbiBlcnJvciB3aXRoIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGNvbmZpZ3VyYXRpb24ga2V5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZXJyb3JNZXNzYWdlXSAtIEN1c3RvbSBlcnJvciBtZXNzYWdlIHRvIGJlIHRocm93biBpZiB0aGUgdmFsdWUgaXMgbm90IGZvdW5kLlxuICAgICAqXG4gICAgICogQHJldHVybnMge1R9IC0gVGhlIGNvbmZpZ3VyYXRpb24gdmFsdWUuXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIHtDb21tb25zSW50ZXJuYWxFcnJvcn0gLSBJZiB0aGUgdmFsdWUgaXMgbm90IGZvdW5kIG9yIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgaXMgcHJvdmlkZWQuXG4gICAgICovXG4gICAgcHVibGljIGdldENvbmZpZ1ZhbHVlT3JUaHJvdzxUID0gYW55PihrZXk6IHN0cmluZywgZXJyb3JNZXNzYWdlPzogc3RyaW5nKTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbmZpZ1ZhbHVlKGtleSkgPz8gdGhyb3dFcnJvcihlcnJvck1lc3NhZ2UgPz8gYE1pc3NpbmcgY29uZmlndXJhdGlvbiB2YWx1ZSBmb3IgJyR7a2V5fSchYCwge25hbWU6ICdDb21tb25zTWlzc2luZ0NvbmZpZ0Vycm9yJ30pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhcyBjb25maWd1cmF0aW9uIGZvciBrZXkuXG4gICAgICogQHBhcmFtIGtleSBDb25maWd1cmF0aW9uIGtleS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaGFzQ29uZmlnS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbmZpZ3VyYXRpb24pLnNvbWUoayA9PiBrID09PSBrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1lcmdlcyBjb25maWd1cmF0aW9uIGZyb20gbXVsdGlwbGUgc291cmNlcyB3aXRoXG4gICAgICovXG4gICAgcHJpdmF0ZSBtZXJnZUNvbmZpZ3MoKSB7XG4gICAgICAgIGxldCBjb25maWcgPSB7fTtcblxuICAgICAgICAvLyAxLiBvYmplY3Qgc291cmNlcyBoYXZlIGhpZ2hlc3QgcHJpb3JpdHlcbiAgICAgICAgaWYgKHRoaXMub2JqZWN0U291cmNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgb2JqQ29uZmlnIG9mIHRoaXMub2JqZWN0U291cmNlcykge1xuICAgICAgICAgICAgICAgIGNvbmZpZyA9IG9iamVjdERlZXBNZXJnZShjb25maWcsIG9iakNvbmZpZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBKU09OIHNvdXJjZXMgY29tZSBuZXh0XG4gICAgICAgIGNvbnN0IGpzb25Db25maWdzID0gdGhpcy5qc29uU291cmNlcy5maWx0ZXIoc291cmNlID0+IHNvdXJjZS5pc0xvYWRlZCAmJiB0eXBlb2Ygc291cmNlLmNvbmZpZ3VyYXRpb24gPT09ICdvYmplY3QnKS5tYXAoc291cmNlID0+IHNvdXJjZS5jb25maWd1cmF0aW9uKTtcbiAgICAgICAgaWYgKGpzb25Db25maWdzLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBqc29uQ29uZmlnIG9mIGpzb25Db25maWdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGpzb25Db25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnID0gb2JqZWN0RGVlcE1lcmdlKGNvbmZpZywganNvbkNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gcHJvamVjdCBlbnYgaGFzIHRoZSBuZXh0IHByaW9yaXR5XG4gICAgICAgIGlmICh0aGlzLnByb2plY3RFbnZpcm9ubWVudCkge1xuICAgICAgICAgICAgY29uZmlnID0gb2JqZWN0RGVlcE1lcmdlKGNvbmZpZywgdGhpcy5wcm9qZWN0RW52aXJvbm1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4gbW9kdWxlIGNvbmZpZyBoYXMgdGhlIGxvd2VzdCBwcmlvcml0eVxuICAgICAgICBpZiAodGhpcy5tb2R1bGVDb25maWcpIHtcbiAgICAgICAgICAgIGNvbmZpZyA9IG9iamVjdERlZXBNZXJnZShjb25maWcsIHRoaXMubW9kdWxlQ29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZztcbiAgICB9XG59XG5cbmludGVyZmFjZSBKc29uU291cmNlTG9hZEluZm8ge1xuICAgIHVybDogc3RyaW5nO1xuICAgIGlzTG9hZGVkOiBib29sZWFuO1xuICAgIGlzRW52aXJvbm1lbnQ6IGJvb2xlYW47XG4gICAgZW52aXJvbm1lbnQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIGVudmlyb25tZW50RW5hYmxlRW52UHJvZD86IGJvb2xlYW47XG4gICAgY29uZmlndXJhdGlvbj86IG9iamVjdDtcbn1cbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, RouteConfigLoadEnd, RouteConfigLoadStart, Router } from '@angular/router';\nimport { ReplaySubject } from 'rxjs';\nimport { first } from 'rxjs/operators';\nimport { LoggerService } from '../log/logger.service';\nimport * as i0 from \"@angular/core\";\nexport class CommonsRouterService {\n constructor() {\n this.router = inject(Router);\n this.logger = inject(LoggerService).create('CommonsRouterService');\n this.routesLoadedPropKey = '_loadedRoutes';\n this.currentNavigationModuleKeys = [];\n this.lazyLoadedRoutesConfig = {};\n this.router.events.pipe(takeUntilDestroyed()).subscribe(event => {\n if (event instanceof NavigationStart) {\n this.startNavigation(event.url);\n }\n else if (event instanceof RouteConfigLoadStart) {\n this.markNavigationConfigLoad(event.route);\n }\n else if (event instanceof RouteConfigLoadEnd) {\n this.markNavigationConfigLoad(event.route, true);\n }\n else if (event instanceof NavigationEnd || event instanceof NavigationCancel || event instanceof NavigationError) {\n this.finishNavigation();\n }\n });\n }\n getRouteLoadedChildren(path) {\n return this.getOrCreateRouteForModule(this.getModulePathFromRouterLink(path)).loadedRoutes;\n }\n getRouteLoadedChildren$(path) {\n return this.getOrCreateRouteForModule(this.getModulePathFromRouterLink(path)).loadedRoutesSubject.asObservable().pipe(first());\n }\n initialize() {\n this.logger.debug('Initialized.');\n }\n startNavigation(url) {\n this.currentNavigationPath = url.split('?')[0].split('#')[0];\n this.currentNavigationModuleKeys = [];\n }\n finishNavigation() {\n if (this.currentNavigationModuleKeys.length) {\n this.currentNavigationModuleKeys.forEach(k => this.getLoadedRoutesFromRoute(k, true));\n }\n this.currentNavigationPath = undefined;\n }\n markNavigationConfigLoad(route, isEnd = false) {\n const routePath = route.path ?? '';\n let moduleKey = routePath;\n const currentNavigationPathRoutePathIdx = this.currentNavigationPath?.indexOf(routePath) ?? -1;\n if (this.currentNavigationPath && currentNavigationPathRoutePathIdx >= 0) {\n moduleKey = this.currentNavigationPath.substring(0, currentNavigationPathRoutePathIdx + routePath.length);\n }\n else if (this.currentNavigationPath && routePath !== this.currentNavigationPath && !routePath.startsWith('/')) {\n // usually means that redirect to currentNavigationPath was done, additionally, route path was also triggered on lazy routes load\n moduleKey = `${this.currentNavigationPath}/${routePath}`;\n }\n if (!isEnd && this.currentNavigationModuleKeys.indexOf(moduleKey) < 0) {\n this.currentNavigationModuleKeys.push(moduleKey);\n }\n this.logger.trace(`Config load ${isEnd ? 'end' : 'start'} for ${moduleKey} (routePath: ${routePath}; navigationUrl: ${this.currentNavigationPath})`);\n const config = this.getOrCreateRouteForModule(moduleKey);\n config.route = route;\n config.isLoadEnd = isEnd;\n if (isEnd) {\n this.getLoadedRoutesFromRoute(moduleKey);\n }\n }\n getLoadedRoutesFromRoute(moduleKey, isFinish = false) {\n const moduleConfig = this.lazyLoadedRoutesConfig[moduleKey];\n if (!moduleConfig?.route || Array.isArray(moduleConfig.loadedRoutes)) {\n return;\n }\n moduleConfig.loadedRoutes = moduleConfig.route[this.routesLoadedPropKey];\n if (!Array.isArray(moduleConfig.loadedRoutes) && isFinish) {\n // if is called from finish and no lazy loaded routes are matched from router events, try finding in route config, it should be there!\n this.logger.trace(`Route loadedRoutes for ${moduleKey} not found, searching in router config now`);\n const route = this.findRouteInRouteConfig(moduleKey);\n if (route) {\n moduleConfig.route = route;\n moduleConfig.loadedRoutes = moduleConfig.route[this.routesLoadedPropKey];\n }\n else {\n this.logger.warn(`Route loadedRoutes for ${moduleKey} were not found in router config`);\n }\n }\n if (typeof moduleConfig.loadedRoutes !== 'undefined') {\n moduleConfig.loadedRoutesSubject.next(moduleConfig.loadedRoutes);\n moduleConfig.loadedRoutesSubject.complete();\n this.logger.trace(`Config load for ${moduleKey} is complete`, moduleConfig);\n }\n }\n /**\n * Search for route config by module path by recursive scanning of router config tree.\n * @param modulePath Path of module that is searched.\n * @param routes Routes to be scanned. If not provided, it starts on root router config.\n * @private\n */\n findRouteInRouteConfig(modulePath, routes = this.router.config) {\n if (modulePath.startsWith('/')) {\n modulePath = modulePath.substring(1);\n }\n for (const route of routes) {\n if (typeof route.path === 'undefined') {\n continue;\n }\n let routePath = route.path;\n if (routePath.startsWith('/')) {\n routePath = routePath.substring(1);\n }\n const longestPathMatch = this.findLongestPathMatch(modulePath, routePath);\n if (longestPathMatch === null) {\n continue;\n }\n // there is a partial or full match\n if (route.loadChildren && modulePath === longestPathMatch) {\n // it's a hit!\n return route;\n }\n else if (route.loadChildren && Array.isArray(route[this.routesLoadedPropKey])) {\n const result = this.findRouteInRouteConfig(modulePath.substring(longestPathMatch.length, modulePath.length), route[this.routesLoadedPropKey]);\n if (result) {\n return result;\n }\n }\n else if (route.children) {\n const result = this.findRouteInRouteConfig(modulePath.substring(longestPathMatch.length, modulePath.length), route.children);\n if (result) {\n return result;\n }\n }\n }\n return null;\n }\n /**\n * Finds longest path match of source to match string. If match is '', it is considered as a match in Angular routing.\n * @param source Source string from on which comparison is based.\n * @param match Match string to which the source is matched to.\n * @private\n */\n findLongestPathMatch(source, match) {\n const sourceSegments = source.split('/');\n const matchSegments = match.split('/');\n if (matchSegments.length === 1 && matchSegments[0] === '') {\n // it's a hit, because empty route must always be processed (kind of a \"abstract\" route)\n return '';\n }\n if (sourceSegments[0] === matchSegments[0]) {\n // there is a match, find how long it is\n for (let i = 1; i < sourceSegments.length; i++) {\n if (sourceSegments[i] !== matchSegments[i]) {\n // end of match\n return sourceSegments.slice(0, i).join('/');\n }\n }\n // there is full match\n return sourceSegments.join('/');\n }\n return null;\n }\n getOrCreateRouteForModule(moduleKey) {\n if (!this.lazyLoadedRoutesConfig[moduleKey]) {\n this.lazyLoadedRoutesConfig[moduleKey] = {\n loadedRoutesSubject: new ReplaySubject(1),\n isLoadEnd: false\n };\n }\n return this.lazyLoadedRoutesConfig[moduleKey];\n }\n getModulePathFromRouterLink(path) {\n return ('/' + (Array.isArray(path) ? path.join('/') : path)).replace(/\\/\\//g, '/');\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsRouterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsRouterService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsRouterService, decorators: [{\n type: Injectable\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy1yb3V0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL3NlcnZpY2VzL2NvbW1vbnMtcm91dGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFDLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFTLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBUyxNQUFNLGlCQUFpQixDQUFDO0FBRW5LLE9BQU8sRUFBYSxhQUFhLEVBQVUsTUFBTSxNQUFNLENBQUM7QUFDeEQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7QUFHcEQsTUFBTSxPQUFPLG9CQUFvQjtJQWlCN0I7UUFoQmlCLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUM5RCx3QkFBbUIsR0FBRyxlQUFlLENBQUM7UUFHL0MsZ0NBQTJCLEdBQWEsRUFBRSxDQUFDO1FBRTNDLDJCQUFzQixHQU8xQixFQUFFLENBQUM7UUFHSCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM1RCxJQUFJLEtBQUssWUFBWSxlQUFlLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEMs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LENBQUMsQ0FBQztnQkFDakQsU0FBUyxFQUFFLEtBQUs7YUFDbkIsQ0FBQztRQUNOLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU8sMkJBQTJCLENBQUMsSUFBNEI7UUFDNUQsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN2RixDQUFDOzhHQXZNUSxvQkFBb0I7a0hBQXBCLG9CQUFvQjs7MkZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge05hdmlnYXRpb25DYW5jZWwsIE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25FcnJvciwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZSwgUm91dGVDb25maWdMb2FkRW5kLCBSb3V0ZUNvbmZpZ0xvYWRTdGFydCwgUm91dGVyLCBSb3V0ZXN9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpcnN0fSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vbG9nL2xvZ2dlci5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbW1vbnNSb3V0ZXJTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gaW5qZWN0KExvZ2dlclNlcnZpY2UpLmNyZWF0ZSgnQ29tbW9uc1JvdXRlclNlcnZpY2UnKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlc0xvYWRlZFByb3BLZXkgPSAnX2xvYWRlZFJvdXRlcyc7XG5cbiAgICBwcml2YXRlIGN1cnJlbnROYXZpZ2F0aW9uUGF0aD86IHN0cmluZztcbiAgICBwcml2YXRlIGN1cnJlbnROYXZpZ2F0aW9uTW9kdWxlS2V5czogc3RyaW5nW10gPSBbXTtcblxuICAgIHByaXZhdGUgbGF6eUxvYWRlZFJvdXRlc0NvbmZpZzoge1xuICAgICAgICBbcGF0aDogc3RyaW5nXToge1xuICAgICAgICAgICAgcm91dGU/OiBSb3V0ZTtcbiAgICAgICAgICAgIGlzTG9hZEVuZDogYm9vbGVhbjtcbiAgICAgICAgICAgIGxvYWRlZFJvdXRlcz86IFJvdXRlcztcbiAgICAgICAgICAgIGxvYWRlZFJvdXRlc1N1YmplY3Q6IFN1YmplY3Q8Um91dGVzPjtcbiAgICAgICAgfTtcbiAgICB9ID0ge307XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0TmF2aWdhdGlvbihldmVudC51cmwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIFJvdXRlQ29uZmlnTG9hZFN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXJrTmF2aWdhdGlvbkNvbmZpZ0xvYWQoZXZlbnQucm91dGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIFJvdXRlQ29uZmlnTG9hZEVuZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFya05hdmlnYXRpb25Db25maWdMb2FkKGV2ZW50LnJvdXRlLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kIHx8IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkNhbmNlbCB8fCBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Um91dGVMb2FkZWRDaGlsZHJlbihwYXRoOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+KTogUm91dGVzIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JDcmVhdGVSb3V0ZUZvck1vZHVsZSh0aGlzLmdldE1vZHVsZVBhdGhGcm9tUm91dGVyTGluayhwYXRoKSkubG9hZGVkUm91dGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSb3V0ZUxvYWRlZENoaWxkcmVuJChwYXRoOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+KTogT2JzZXJ2YWJsZTxSb3V0ZXM+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JDcmVhdGVSb3V0ZUZvck1vZHVsZSh0aGlzLmdldE1vZHVsZVBhdGhGcm9tUm91dGVyTGluayhwYXRoKSkubG9hZGVkUm91dGVzU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGZpcnN0KCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbml0aWFsaXplKCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5pdGlhbGl6ZWQuJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydE5hdmlnYXRpb24odXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50TmF2aWdhdGlvblBhdGggPSB1cmwuc3BsaXQoJz8nKVswXS5zcGxpdCgnIycpWzBdO1xuICAgICAgICB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uTW9kdWxlS2V5cyA9IFtdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluaXNoTmF2aWdhdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudE5hdmlnYXRpb25Nb2R1bGVLZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50TmF2aWdhdGlvbk1vZHVsZUtleXMuZm9yRWFjaChrID0+IHRoaXMuZ2V0TG9hZGVkUm91dGVzRnJvbVJvdXRlKGssIHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uUGF0aCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1hcmtOYXZpZ2F0aW9uQ29uZmlnTG9hZChyb3V0ZTogUm91dGUsIGlzRW5kID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qgcm91dGVQYXRoID0gcm91dGUucGF0aCA/PyAnJztcblxuICAgICAgICBsZXQgbW9kdWxlS2V5ID0gcm91dGVQYXRoO1xuICAgICAgICBjb25zdCBjdXJyZW50TmF2aWdhdGlvblBhdGhSb3V0ZVBhdGhJZHggPSB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uUGF0aD8uaW5kZXhPZihyb3V0ZVBhdGgpID8/IC0xO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50TmF2aWdhdGlvblBhdGggJiYgY3VycmVudE5hdmlnYXRpb25QYXRoUm91dGVQYXRoSWR4ID49IDApIHtcbiAgICAgICAgICAgIG1vZHVsZUtleSA9IHRoaXMuY3VycmVudE5hdmlnYXRpb25QYXRoLnN1YnN0cmluZygwLCBjdXJyZW50TmF2aWdhdGlvblBhdGhSb3V0ZVBhdGhJZHggKyByb3V0ZVBhdGgubGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnROYXZpZ2F0aW9uUGF0aCAmJiByb3V0ZVBhdGggIT09IHRoaXMuY3VycmVudE5hdmlnYXRpb25QYXRoICYmICFyb3V0ZVBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAvLyB1c3VhbGx5IG1lYW5zIHRoYXQgcmVkaXJlY3QgdG8gY3VycmVudE5hdmlnYXRpb25QYXRoIHdhcyBkb25lLCBhZGRpdGlvbmFsbHksIHJvdXRlIHBhdGggd2FzIGFsc28gdHJpZ2dlcmVkIG9uIGxhenkgcm91dGVzIGxvYWRcbiAgICAgICAgICAgIG1vZHVsZUtleSA9IGAke3RoaXMuY3VycmVudE5hdmlnYXRpb25QYXRofS8ke3JvdXRlUGF0aH1gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0VuZCAmJiB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uTW9kdWxlS2V5cy5pbmRleE9mKG1vZHVsZUtleSkgPCAwKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uTW9kdWxlS2V5cy5wdXNoKG1vZHVsZUtleSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShgQ29uZmlnIGxvYWQgJHtpc0VuZCA/ICdlbmQnIDogJ3N0YXJ0J30gZm9yICR7bW9kdWxlS2V5fSAocm91dGVQYXRoOiAke3JvdXRlUGF0aH07IG5hdmlnYXRpb25Vcmw6ICR7dGhpcy5jdXJyZW50TmF2aWdhdGlvblBhdGh9KWApO1xuXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0T3JDcmVhdGVSb3V0ZUZvck1vZHVsZShtb2R1bGVLZXkpO1xuICAgICAgICBjb25maWcucm91dGUgPSByb3V0ZTtcbiAgICAgICAgY29uZmlnLmlzTG9hZEVuZCA9IGlzRW5kO1xuXG4gICAgICAgIGlmIChpc0VuZCkge1xuICAgICAgICAgICAgdGhpcy5nZXRMb2FkZWRSb3V0ZXNGcm9tUm91dGUobW9kdWxlS2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TG9hZGVkUm91dGVzRnJvbVJvdXRlKG1vZHVsZUtleTogc3RyaW5nLCBpc0ZpbmlzaCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZUNvbmZpZyA9IHRoaXMubGF6eUxvYWRlZFJvdXRlc0NvbmZpZ1ttb2R1bGVLZXldO1xuICAgICAgICBpZiAoIW1vZHVsZUNvbmZpZz8ucm91dGUgfHwgQXJyYXkuaXNBcnJheShtb2R1bGVDb25maWcubG9hZGVkUm91dGVzKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbW9kdWxlQ29uZmlnLmxvYWRlZFJvdXRlcyA9IG1vZHVsZUNvbmZpZy5yb3V0ZSFbdGhpcy5yb3V0ZXNMb2FkZWRQcm9wS2V5IGFzIGtleW9mIG9iamVjdF07XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1vZHVsZUNvbmZpZy5sb2FkZWRSb3V0ZXMpICYmIGlzRmluaXNoKSB7XG4gICAgICAgICAgICAvLyBpZiBpcyBjYWxsZWQgZnJvbSBmaW5pc2ggYW5kIG5vIGxhenkgbG9hZGVkIHJvdXRlcyBhcmUgbWF0Y2hlZCBmcm9tIHJvdXRlciBldmVudHMsIHRyeSBmaW5kaW5nIGluIHJvdXRlIGNvbmZpZywgaXQgc2hvdWxkIGJlIHRoZXJlIVxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYFJvdXRlIGxvYWRlZFJvdXRlcyBmb3IgJHttb2R1bGVLZXl9IG5vdCBmb3VuZCwgc2VhcmNoaW5nIGluIHJvdXRlciBjb25maWcgbm93YCk7XG4gICAgICAgICAgICBjb25zdCByb3V0ZSA9IHRoaXMuZmluZFJvdXRlSW5Sb3V0ZUNvbmZpZyhtb2R1bGVLZXkpO1xuICAgICAgICAgICAgaWYgKHJvdXRlKSB7XG4gICAgICAgICAgICAgICAgbW9kdWxlQ29uZmlnLnJvdXRlID0gcm91dGU7XG4gICAgICAgICAgICAgICAgbW9kdWxlQ29uZmlnLmxvYWRlZFJvdXRlcyA9IG1vZHVsZUNvbmZpZy5yb3V0ZSFbdGhpcy5yb3V0ZXNMb2FkZWRQcm9wS2V5IGFzIGtleW9mIG9iamVjdF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYFJvdXRlIGxvYWRlZFJvdXRlcyBmb3IgJHttb2R1bGVLZXl9IHdlcmUgbm90IGZvdW5kIGluIHJvdXRlciBjb25maWdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlQ29uZmlnLmxvYWRlZFJvdXRlcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIG1vZHVsZUNvbmZpZy5sb2FkZWRSb3V0ZXNTdWJqZWN0Lm5leHQobW9kdWxlQ29uZmlnLmxvYWRlZFJvdXRlcyEpO1xuICAgICAgICAgICAgbW9kdWxlQ29uZmlnLmxvYWRlZFJvdXRlc1N1YmplY3QuY29tcGxldGUoKTtcblxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYENvbmZpZyBsb2FkIGZvciAke21vZHVsZUtleX0gaXMgY29tcGxldGVgLCBtb2R1bGVDb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VhcmNoIGZvciByb3V0ZSBjb25maWcgYnkgbW9kdWxlIHBhdGggYnkgcmVjdXJzaXZlIHNjYW5uaW5nIG9mIHJvdXRlciBjb25maWcgdHJlZS5cbiAgICAgKiBAcGFyYW0gbW9kdWxlUGF0aCBQYXRoIG9mIG1vZHVsZSB0aGF0IGlzIHNlYXJjaGVkLlxuICAgICAqIEBwYXJhbSByb3V0ZXMgUm91dGVzIHRvIGJlIHNjYW5uZWQuIElmIG5vdCBwcm92aWRlZCwgaXQgc3RhcnRzIG9uIHJvb3Qgcm91dGVyIGNvbmZpZy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgZmluZFJvdXRlSW5Sb3V0ZUNvbmZpZyhtb2R1bGVQYXRoOiBzdHJpbmcsIHJvdXRlczogUm91dGVzID0gdGhpcy5yb3V0ZXIuY29uZmlnKTogUm91dGUgfCBudWxsIHtcbiAgICAgICAgaWYgKG1vZHVsZVBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICBtb2R1bGVQYXRoID0gbW9kdWxlUGF0aC5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByb3V0ZS5wYXRoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHJvdXRlUGF0aCA9IHJvdXRlLnBhdGg7XG4gICAgICAgICAgICBpZiAocm91dGVQYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIHJvdXRlUGF0aCA9IHJvdXRlUGF0aC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvbmdlc3RQYXRoTWF0Y2ggPSB0aGlzLmZpbmRMb25nZXN0UGF0aE1hdGNoKG1vZHVsZVBhdGgsIHJvdXRlUGF0aCk7XG4gICAgICAgICAgICBpZiAobG9uZ2VzdFBhdGhNYXRjaCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0aGVyZSBpcyBhIHBhcnRpYWwgb3IgZnVsbCBtYXRjaFxuICAgICAgICAgICAgaWYgKHJvdXRlLmxvYWRDaGlsZHJlbiAmJiBtb2R1bGVQYXRoID09PSBsb25nZXN0UGF0aE1hdGNoKSB7XG4gICAgICAgICAgICAgICAgLy8gaXQncyBhIGhpdCFcbiAgICAgICAgICAgICAgICByZXR1cm4gcm91dGU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJvdXRlLmxvYWRDaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KHJvdXRlW3RoaXMucm91dGVzTG9hZGVkUHJvcEtleSBhcyBrZXlvZiBvYmplY3RdKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZFJvdXRlSW5Sb3V0ZUNvbmZpZyhtb2R1bGVQYXRoLnN1YnN0cmluZyhsb25nZXN0UGF0aE1hdGNoLmxlbmd0aCwgbW9kdWxlUGF0aC5sZW5ndGgpLCByb3V0ZVt0aGlzLnJvdXRlc0xvYWRlZFByb3BLZXkgYXMga2V5b2Ygb2JqZWN0XSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocm91dGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZpbmRSb3V0ZUluUm91dGVDb25maWcobW9kdWxlUGF0aC5zdWJzdHJpbmcobG9uZ2VzdFBhdGhNYXRjaC5sZW5ndGgsIG1vZHVsZVBhdGgubGVuZ3RoKSwgcm91dGUuY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBsb25nZXN0IHBhdGggbWF0Y2ggb2Ygc291cmNlIHRvIG1hdGNoIHN0cmluZy4gSWYgbWF0Y2ggaXMgJycsIGl0IGlzIGNvbnNpZGVyZWQgYXMgYSBtYXRjaCBpbiBBbmd1bGFyIHJvdXRpbmcuXG4gICAgICogQHBhcmFtIHNvdXJjZSBTb3VyY2Ugc3RyaW5nIGZyb20gb24gd2hpY2ggY29tcGFyaXNvbiBpcyBiYXNlZC5cbiAgICAgKiBAcGFyYW0gbWF0Y2ggTWF0Y2ggc3RyaW5nIHRvIHdoaWNoIHRoZSBzb3VyY2UgaXMgbWF0Y2hlZCB0by5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgZmluZExvbmdlc3RQYXRoTWF0Y2goc291cmNlOiBzdHJpbmcsIG1hdGNoOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgY29uc3Qgc291cmNlU2VnbWVudHMgPSBzb3VyY2Uuc3BsaXQoJy8nKTtcbiAgICAgICAgY29uc3QgbWF0Y2hTZWdtZW50cyA9IG1hdGNoLnNwbGl0KCcvJyk7XG5cbiAgICAgICAgaWYgKG1hdGNoU2VnbWVudHMubGVuZ3RoID09PSAxICYmIG1hdGNoU2VnbWVudHNbMF0gPT09ICcnKSB7XG4gICAgICAgICAgICAvLyBpdCdzIGEgaGl0LCBiZWNhdXNlIGVtcHR5IHJvdXRlIG11c3QgYWx3YXlzIGJlIHByb2Nlc3NlZCAoa2luZCBvZiBhIFwiYWJzdHJhY3RcIiByb3V0ZSlcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzb3VyY2VTZWdtZW50c1swXSA9PT0gbWF0Y2hTZWdtZW50c1swXSkge1xuICAgICAgICAgICAgLy8gdGhlcmUgaXMgYSBtYXRjaCwgZmluZCBob3cgbG9uZyBpdCBpc1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBzb3VyY2VTZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2VTZWdtZW50c1tpXSAhPT0gbWF0Y2hTZWdtZW50c1tpXSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBlbmQgb2YgbWF0Y2hcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZVNlZ21lbnRzLnNsaWNlKDAsIGkpLmpvaW4oJy8nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHRoZXJlIGlzIGZ1bGwgbWF0Y2hcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2VTZWdtZW50cy5qb2luKCcvJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yQ3JlYXRlUm91dGVGb3JNb2R1bGUobW9kdWxlS2V5OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxhenlMb2FkZWRSb3V0ZXNDb25maWdbbW9kdWxlS2V5XSkge1xuICAgICAgICAgICAgdGhpcy5sYXp5TG9hZGVkUm91dGVzQ29uZmlnW21vZHVsZUtleV0gPSB7XG4gICAgICAgICAgICAgICAgbG9hZGVkUm91dGVzU3ViamVjdDogbmV3IFJlcGxheVN1YmplY3Q8Um91dGVzPigxKSxcbiAgICAgICAgICAgICAgICBpc0xvYWRFbmQ6IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubGF6eUxvYWRlZFJvdXRlc0NvbmZpZ1ttb2R1bGVLZXldO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TW9kdWxlUGF0aEZyb21Sb3V0ZXJMaW5rKHBhdGg6IHN0cmluZyB8IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgcmV0dXJuICgnLycgKyAoQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGguam9pbignLycpIDogcGF0aCkpLnJlcGxhY2UoL1xcL1xcLy9nLCAnLycpO1xuICAgIH1cbn1cbiJdfQ==","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { ReplaySubject, Subject, combineLatest, mergeMap, of, take, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { LoggerService } from '../log/logger.service';\nimport { CommonsConfigurationService } from './commons-configuration.service';\nimport { CommonsRouterService } from './commons-router.service';\nimport { CommonsService } from './commons.service';\nimport { COMMONS_INITIALIZER_IT } from './tokens/commons-init.token';\nimport { LOG_PUBLISHERS } from './tokens/log-publisher.token';\nimport { COMMONS_MODULE_CONFIG_IT } from './tokens/module-config.token';\nimport * as i0 from \"@angular/core\";\nexport var CommonsInitEventEnum;\n(function (CommonsInitEventEnum) {\n CommonsInitEventEnum[CommonsInitEventEnum[\"CommonsInitStart\"] = 0] = \"CommonsInitStart\";\n CommonsInitEventEnum[CommonsInitEventEnum[\"ConfigSourceModuleLoaded\"] = 1] = \"ConfigSourceModuleLoaded\";\n CommonsInitEventEnum[CommonsInitEventEnum[\"ConfigSourceProjectEnvLoaded\"] = 2] = \"ConfigSourceProjectEnvLoaded\";\n CommonsInitEventEnum[CommonsInitEventEnum[\"ConfigSourceJsonAdded\"] = 3] = \"ConfigSourceJsonAdded\";\n CommonsInitEventEnum[CommonsInitEventEnum[\"ConfigSourceJsonLoaded\"] = 4] = \"ConfigSourceJsonLoaded\";\n CommonsInitEventEnum[CommonsInitEventEnum[\"CommonsInitEnd\"] = 5] = \"CommonsInitEnd\";\n CommonsInitEventEnum[CommonsInitEventEnum[\"CommonsInitError\"] = 6] = \"CommonsInitError\";\n})(CommonsInitEventEnum || (CommonsInitEventEnum = {}));\nexport class CommonsInitService {\n constructor() {\n this.logger = inject(LoggerService);\n this.logPublishers = inject(LOG_PUBLISHERS, { optional: true });\n this.config = inject(CommonsConfigurationService);\n this.commons = inject(CommonsService);\n this.commonsRouter = inject(CommonsRouterService);\n this.moduleConfig = inject(COMMONS_MODULE_CONFIG_IT, { optional: true });\n this.commonsInitializers = inject(COMMONS_INITIALIZER_IT, { optional: true });\n this.isInitialized = false;\n this.isInitializedSubject = new ReplaySubject();\n this.commonsInitServiceEvents = new Subject();\n }\n get events$() {\n return this.commonsInitServiceEvents.asObservable();\n }\n get isInitialized$() {\n return this.isInitializedSubject.asObservable().pipe(take(1));\n }\n initialize(handler) {\n if (this.isInitialized) {\n return of(void 0);\n }\n this.isInitialized = true;\n LoggerService.configure({ timestampFormat: this.moduleConfig?.log?.timestampFormat });\n const ctxLogger = this.logger.create('CommonsInitService');\n ctxLogger.debug('Commons initialization is starting');\n this.commonsInitServiceEvents.next(CommonsInitEventEnum.CommonsInitStart);\n // init http client\n this.httpClient = new HttpClient(handler);\n // init router\n this.commonsRouter.initialize();\n // init configurations with settings from module config\n this.config.init(this.httpClient, this.logger);\n this.config.addModuleConfigSource(this.moduleConfig ?? undefined);\n this.commonsInitServiceEvents.next(CommonsInitEventEnum.ConfigSourceModuleLoaded);\n if (this.moduleConfig?.configuration?.projectEnvironment) {\n this.config.addEnvironmentSource(this.moduleConfig.configuration.projectEnvironment);\n this.commonsInitServiceEvents.next(CommonsInitEventEnum.ConfigSourceProjectEnvLoaded);\n }\n // init configurations with settings from module config for json source\n if (!(this.moduleConfig?.configuration?.skipJsonSourceInit ?? false)) {\n const jsonSourceEnableEnvProd = this.moduleConfig?.configuration?.jsonSourceEnableEnvProd ?? false;\n const jsonSource = this.moduleConfig?.configuration?.jsonSource;\n if (!jsonSource) {\n this.config.addJsonSource({ enableEnvProd: jsonSourceEnableEnvProd });\n }\n else if (Array.isArray(jsonSource)) {\n jsonSource.forEach(source => this.config.addJsonSource({ url: source, enableEnvProd: jsonSourceEnableEnvProd }));\n }\n else {\n this.config.addJsonSource({ url: jsonSource, enableEnvProd: jsonSourceEnableEnvProd });\n }\n this.commonsInitServiceEvents.next(CommonsInitEventEnum.ConfigSourceJsonAdded);\n }\n return this.config.loadJsonConfigurations().pipe(mergeMap(() => {\n if (!(this.moduleConfig?.configuration?.skipJsonSourceInit ?? false)) {\n this.commonsInitServiceEvents.next(CommonsInitEventEnum.ConfigSourceJsonLoaded);\n }\n // init logger\n LoggerService.init(this.config, this.logPublishers ?? []);\n if (this.commonsInitializers) {\n ctxLogger.debug('Project initializers are being initialized');\n return combineLatest(this.commonsInitializers.map(ci => ci())).pipe(map(res => res));\n }\n else {\n return of(true);\n }\n }), map(() => {\n ctxLogger.debug('Commons initialization is finished');\n this.commonsInitServiceEvents.next(CommonsInitEventEnum.CommonsInitEnd);\n this.commonsInitServiceEvents.complete();\n this.isInitializedSubject.next(true);\n return this.commons.initialize();\n }), catchError(err => {\n ctxLogger.warn('Commons initialization failed with error', err);\n this.commonsInitServiceEvents.next(CommonsInitEventEnum.CommonsInitError);\n this.commonsInitServiceEvents.complete();\n this.isInitializedSubject.next(false);\n return throwError(() => err);\n }));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsInitService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsInitService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsInitService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy1pbml0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9zZXJ2aWNlcy9jb21tb25zLWluaXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFhLGFBQWEsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN2RyxPQUFPLEVBQUMsVUFBVSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRS9DLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDOztBQUV0RSxNQUFNLENBQU4sSUFBWSxvQkFRWDtBQVJELFdBQVksb0JBQW9CO0lBQzVCLHVGQUFnQixDQUFBO0lBQ2hCLHVHQUF3QixDQUFBO0lBQ3hCLCtHQUE0QixDQUFBO0lBQzVCLGlHQUFxQixDQUFBO0lBQ3JCLG1HQUFzQixDQUFBO0lBQ3RCLG1GQUFjLENBQUE7SUFDZCx1RkFBZ0IsQ0FBQTtBQUNwQixDQUFDLEVBUlcsb0JBQW9C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WUFDekMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQzs4R0EvRlEsa0JBQWtCO2tIQUFsQixrQkFBa0I7OzJGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBCYWNrZW5kLCBIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0luamVjdGFibGUsIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWVyZ2VNYXAsIG9mLCB0YWtlLCB0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vbG9nL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7Q29tbW9uc0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuL2NvbW1vbnMtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7Q29tbW9uc1JvdXRlclNlcnZpY2V9IGZyb20gJy4vY29tbW9ucy1yb3V0ZXIuc2VydmljZSc7XG5pbXBvcnQge0NvbW1vbnNTZXJ2aWNlfSBmcm9tICcuL2NvbW1vbnMuc2VydmljZSc7XG5pbXBvcnQge0NPTU1PTlNfSU5JVElBTElaRVJfSVR9IGZyb20gJy4vdG9rZW5zL2NvbW1vbnMtaW5pdC50b2tlbic7XG5pbXBvcnQge0xPR19QVUJMSVNIRVJTfSBmcm9tICcuL3Rva2Vucy9sb2ctcHVibGlzaGVyLnRva2VuJztcbmltcG9ydCB7Q09NTU9OU19NT0RVTEVfQ09ORklHX0lUfSBmcm9tICcuL3Rva2Vucy9tb2R1bGUtY29uZmlnLnRva2VuJztcblxuZXhwb3J0IGVudW0gQ29tbW9uc0luaXRFdmVudEVudW0ge1xuICAgIENvbW1vbnNJbml0U3RhcnQsXG4gICAgQ29uZmlnU291cmNlTW9kdWxlTG9hZGVkLFxuICAgIENvbmZpZ1NvdXJjZVByb2plY3RFbnZMb2FkZWQsXG4gICAgQ29uZmlnU291cmNlSnNvbkFkZGVkLFxuICAgIENvbmZpZ1NvdXJjZUpzb25Mb2FkZWQsXG4gICAgQ29tbW9uc0luaXRFbmQsXG4gICAgQ29tbW9uc0luaXRFcnJvclxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29tbW9uc0luaXRTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IGluamVjdChMb2dnZXJTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ1B1Ymxpc2hlcnMgPSBpbmplY3QoTE9HX1BVQkxJU0hFUlMsIHtvcHRpb25hbDogdHJ1ZX0pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0KENvbW1vbnNDb25maWd1cmF0aW9uU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21tb25zID0gaW5qZWN0KENvbW1vbnNTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbW1vbnNSb3V0ZXIgPSBpbmplY3QoQ29tbW9uc1JvdXRlclNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbW9kdWxlQ29uZmlnID0gaW5qZWN0KENPTU1PTlNfTU9EVUxFX0NPTkZJR19JVCwge29wdGlvbmFsOiB0cnVlfSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21tb25zSW5pdGlhbGl6ZXJzID0gaW5qZWN0KENPTU1PTlNfSU5JVElBTElaRVJfSVQsIHtvcHRpb25hbDogdHJ1ZX0pO1xuXG4gICAgcHJpdmF0ZSBpc0luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGh0dHBDbGllbnQhOiBIdHRwQ2xpZW50O1xuXG4gICAgcHJpdmF0ZSBpc0luaXRpYWxpemVkU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcHJpdmF0ZSBjb21tb25zSW5pdFNlcnZpY2VFdmVudHMgPSBuZXcgU3ViamVjdDxDb21tb25zSW5pdEV2ZW50RW51bT4oKTtcblxuICAgIHB1YmxpYyBnZXQgZXZlbnRzJCgpOiBPYnNlcnZhYmxlPENvbW1vbnNJbml0RXZlbnRFbnVtPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbW1vbnNJbml0U2VydmljZUV2ZW50cy5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzSW5pdGlhbGl6ZWQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0luaXRpYWxpemVkU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKHRha2UoMSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbml0aWFsaXplKGhhbmRsZXI6IEh0dHBCYWNrZW5kKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBvZih2b2lkIDApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICAgICAgTG9nZ2VyU2VydmljZS5jb25maWd1cmUoe3RpbWVzdGFtcEZvcm1hdDogdGhpcy5tb2R1bGVDb25maWc/LmxvZz8udGltZXN0YW1wRm9ybWF0fSk7XG5cbiAgICAgICAgY29uc3QgY3R4TG9nZ2VyID0gdGhpcy5sb2dnZXIuY3JlYXRlKCdDb21tb25zSW5pdFNlcnZpY2UnKTtcbiAgICAgICAgY3R4TG9nZ2VyLmRlYnVnKCdDb21tb25zIGluaXRpYWxpemF0aW9uIGlzIHN0YXJ0aW5nJyk7XG4gICAgICAgIHRoaXMuY29tbW9uc0luaXRTZXJ2aWNlRXZlbnRzLm5leHQoQ29tbW9uc0luaXRFdmVudEVudW0uQ29tbW9uc0luaXRTdGFydCk7XG5cbiAgICAgICAgLy8gaW5pdCBodHRwIGNsaWVudFxuICAgICAgICB0aGlzLmh0dHBDbGllbnQgPSBuZXcgSHR0cENsaWVudChoYW5kbGVyKTtcblxuICAgICAgICAvLyBpbml0IHJvdXRlclxuICAgICAgICB0aGlzLmNvbW1vbnNSb3V0ZXIuaW5pdGlhbGl6ZSgpO1xuXG4gICAgICAgIC8vIGluaXQgY29uZmlndXJhdGlvbnMgd2l0aCBzZXR0aW5ncyBmcm9tIG1vZHVsZSBjb25maWdcbiAgICAgICAgdGhpcy5jb25maWcuaW5pdCh0aGlzLmh0dHBDbGllbnQsIHRoaXMubG9nZ2VyKTtcbiAgICAgICAgdGhpcy5jb25maWcuYWRkTW9kdWxlQ29uZmlnU291cmNlKHRoaXMubW9kdWxlQ29uZmlnID8/IHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuY29tbW9uc0luaXRTZXJ2aWNlRXZlbnRzLm5leHQoQ29tbW9uc0luaXRFdmVudEVudW0uQ29uZmlnU291cmNlTW9kdWxlTG9hZGVkKTtcbiAgICAgICAgaWYgKHRoaXMubW9kdWxlQ29uZmlnPy5jb25maWd1cmF0aW9uPy5wcm9qZWN0RW52aXJvbm1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmFkZEVudmlyb25tZW50U291cmNlKHRoaXMubW9kdWxlQ29uZmlnLmNvbmZpZ3VyYXRpb24ucHJvamVjdEVudmlyb25tZW50KTtcbiAgICAgICAgICAgIHRoaXMuY29tbW9uc0luaXRTZXJ2aWNlRXZlbnRzLm5leHQoQ29tbW9uc0luaXRFdmVudEVudW0uQ29uZmlnU291cmNlUHJvamVjdEVudkxvYWRlZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbml0IGNvbmZpZ3VyYXRpb25zIHdpdGggc2V0dGluZ3MgZnJvbSBtb2R1bGUgY29uZmlnIGZvciBqc29uIHNvdXJjZVxuICAgICAgICBpZiAoISh0aGlzLm1vZHVsZUNvbmZpZz8uY29uZmlndXJhdGlvbj8uc2tpcEpzb25Tb3VyY2VJbml0ID8/IGZhbHNlKSkge1xuICAgICAgICAgICAgY29uc3QganNvblNvdXJjZUVuYWJsZUVudlByb2QgPSB0aGlzLm1vZHVsZUNvbmZpZz8uY29uZmlndXJhdGlvbj8uanNvblNvdXJjZUVuYWJsZUVudlByb2QgPz8gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBqc29uU291cmNlID0gdGhpcy5tb2R1bGVDb25maWc/LmNvbmZpZ3VyYXRpb24/Lmpzb25Tb3VyY2U7XG4gICAgICAgICAgICBpZiAoIWpzb25Tb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5hZGRKc29uU291cmNlKHtlbmFibGVFbnZQcm9kOiBqc29uU291cmNlRW5hYmxlRW52UHJvZH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGpzb25Tb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAganNvblNvdXJjZS5mb3JFYWNoKHNvdXJjZSA9PiB0aGlzLmNvbmZpZy5hZGRKc29uU291cmNlKHt1cmw6IHNvdXJjZSwgZW5hYmxlRW52UHJvZDoganNvblNvdXJjZUVuYWJsZUVudlByb2R9KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmFkZEpzb25Tb3VyY2Uoe3VybDoganNvblNvdXJjZSwgZW5hYmxlRW52UHJvZDoganNvblNvdXJjZUVuYWJsZUVudlByb2R9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29tbW9uc0luaXRTZXJ2aWNlRXZlbnRzLm5leHQoQ29tbW9uc0luaXRFdmVudEVudW0uQ29uZmlnU291cmNlSnNvbkFkZGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5sb2FkSnNvbkNvbmZpZ3VyYXRpb25zKCkucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoISh0aGlzLm1vZHVsZUNvbmZpZz8uY29uZmlndXJhdGlvbj8uc2tpcEpzb25Tb3VyY2VJbml0ID8/IGZhbHNlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNJbml0U2VydmljZUV2ZW50cy5uZXh0KENvbW1vbnNJbml0RXZlbnRFbnVtLkNvbmZpZ1NvdXJjZUpzb25Mb2FkZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpbml0IGxvZ2dlclxuICAgICAgICAgICAgICAgIExvZ2dlclNlcnZpY2UuaW5pdCh0aGlzLmNvbmZpZywgdGhpcy5sb2dQdWJsaXNoZXJzID8/IFtdKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbW1vbnNJbml0aWFsaXplcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4TG9nZ2VyLmRlYnVnKCdQcm9qZWN0IGluaXRpYWxpemVycyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QodGhpcy5jb21tb25zSW5pdGlhbGl6ZXJzLm1hcChjaSA9PiBjaSgpKSkucGlwZShtYXAocmVzID0+IHJlcykpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY3R4TG9nZ2VyLmRlYnVnKCdDb21tb25zIGluaXRpYWxpemF0aW9uIGlzIGZpbmlzaGVkJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zSW5pdFNlcnZpY2VFdmVudHMubmV4dChDb21tb25zSW5pdEV2ZW50RW51bS5Db21tb25zSW5pdEVuZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zSW5pdFNlcnZpY2VFdmVudHMuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWRTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tbW9ucy5pbml0aWFsaXplKCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjdHhMb2dnZXIud2FybignQ29tbW9ucyBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCBlcnJvcicsIGVycik7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zSW5pdFNlcnZpY2VFdmVudHMubmV4dChDb21tb25zSW5pdEV2ZW50RW51bS5Db21tb25zSW5pdEVycm9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNJbml0U2VydmljZUV2ZW50cy5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZFN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19","import { Injectable, inject } from '@angular/core';\nimport { BROWSER_STORAGE_IT } from './tokens/browser-storage.token';\nimport * as i0 from \"@angular/core\";\nexport class CommonsStorageService {\n constructor() {\n this.localStorage = inject(BROWSER_STORAGE_IT);\n this._configKey = 'CommonsUserPrefs';\n }\n buildLocalStorageKey(type, key) {\n return `${this._configKey}_${type}_${key}`;\n }\n getItem(type, key) {\n const localstorageData = this.localStorage.getItem(this.buildLocalStorageKey(type, key));\n if (localstorageData) {\n return JSON.parse(localstorageData);\n }\n return undefined;\n }\n setItem(type, key, value) {\n this.localStorage.setItem(this.buildLocalStorageKey(type, key), JSON.stringify(value));\n }\n removeItem(type, key) {\n this.localStorage.removeItem(this.buildLocalStorageKey(type, key));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsStorageService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: CommonsStorageService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy1zdG9yYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9zZXJ2aWNlcy9jb21tb25zLXN0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFLbEUsTUFBTSxPQUFPLHFCQUFxQjtJQURsQztRQUVxQixpQkFBWSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFDLGVBQVUsR0FBRyxrQkFBa0IsQ0FBQztLQXFCcEQ7SUFuQlcsb0JBQW9CLENBQUMsSUFBWSxFQUFFLEdBQVc7UUFDbEQsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFTSxPQUFPLENBQWtDLElBQVksRUFBRSxHQUFXO1FBQ3JFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNuQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVNLE9BQU8sQ0FBa0MsSUFBWSxFQUFFLEdBQVcsRUFBRSxLQUFRO1FBQy9FLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFFTSxVQUFVLENBQUMsSUFBWSxFQUFFLEdBQVc7UUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7OEdBdEJRLHFCQUFxQjtrSEFBckIscUJBQXFCOzsyRkFBckIscUJBQXFCO2tCQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0JST1dTRVJfU1RPUkFHRV9JVH0gZnJvbSAnLi90b2tlbnMvYnJvd3Nlci1zdG9yYWdlLnRva2VuJztcblxuZXhwb3J0IHR5cGUgTG9jYWxzdG9yYWdlQ29uZmlnVmFsdWVUeXBlID0gc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSB8IG9iamVjdCB8IGJvb2xlYW47XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb21tb25zU3RvcmFnZVNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxTdG9yYWdlID0gaW5qZWN0KEJST1dTRVJfU1RPUkFHRV9JVCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlnS2V5ID0gJ0NvbW1vbnNVc2VyUHJlZnMnO1xuXG4gICAgcHJpdmF0ZSBidWlsZExvY2FsU3RvcmFnZUtleSh0eXBlOiBzdHJpbmcsIGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuX2NvbmZpZ0tleX1fJHt0eXBlfV8ke2tleX1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRJdGVtPFQgPSBMb2NhbHN0b3JhZ2VDb25maWdWYWx1ZVR5cGU+KHR5cGU6IHN0cmluZywga2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgbG9jYWxzdG9yYWdlRGF0YSA9IHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5idWlsZExvY2FsU3RvcmFnZUtleSh0eXBlLCBrZXkpKTtcbiAgICAgICAgaWYgKGxvY2Fsc3RvcmFnZURhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2Fsc3RvcmFnZURhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEl0ZW08VCA9IExvY2Fsc3RvcmFnZUNvbmZpZ1ZhbHVlVHlwZT4odHlwZTogc3RyaW5nLCBrZXk6IHN0cmluZywgdmFsdWU6IFQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmJ1aWxkTG9jYWxTdG9yYWdlS2V5KHR5cGUsIGtleSksIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUl0ZW0odHlwZTogc3RyaW5nLCBrZXk6IHN0cmluZykge1xuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuYnVpbGRMb2NhbFN0b3JhZ2VLZXkodHlwZSwga2V5KSk7XG4gICAgfVxufVxuIl19","export var StyleSizeEnum;\n(function (StyleSizeEnum) {\n StyleSizeEnum[StyleSizeEnum[\"ExtraSmall\"] = 0] = \"ExtraSmall\";\n StyleSizeEnum[StyleSizeEnum[\"Small\"] = 1] = \"Small\";\n StyleSizeEnum[StyleSizeEnum[\"Normal\"] = 2] = \"Normal\";\n StyleSizeEnum[StyleSizeEnum[\"Large\"] = 3] = \"Large\";\n StyleSizeEnum[StyleSizeEnum[\"ExtraLarge\"] = 4] = \"ExtraLarge\";\n})(StyleSizeEnum || (StyleSizeEnum = {}));\nexport var StyleLevelEnum;\n(function (StyleLevelEnum) {\n StyleLevelEnum[StyleLevelEnum[\"Default\"] = 0] = \"Default\";\n StyleLevelEnum[StyleLevelEnum[\"Primary\"] = 1] = \"Primary\";\n StyleLevelEnum[StyleLevelEnum[\"Secondary\"] = 2] = \"Secondary\";\n StyleLevelEnum[StyleLevelEnum[\"Info\"] = 3] = \"Info\";\n StyleLevelEnum[StyleLevelEnum[\"Help\"] = 4] = \"Help\";\n StyleLevelEnum[StyleLevelEnum[\"Success\"] = 5] = \"Success\";\n StyleLevelEnum[StyleLevelEnum[\"Warning\"] = 6] = \"Warning\";\n StyleLevelEnum[StyleLevelEnum[\"Danger\"] = 7] = \"Danger\";\n StyleLevelEnum[StyleLevelEnum[\"Contrast\"] = 8] = \"Contrast\";\n})(StyleLevelEnum || (StyleLevelEnum = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGUubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3NyYy9zdHlsZXMvc3R5bGUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksYUFNWDtBQU5ELFdBQVksYUFBYTtJQUNyQiw2REFBVSxDQUFBO0lBQ1YsbURBQUssQ0FBQTtJQUNMLHFEQUFNLENBQUE7SUFDTixtREFBSyxDQUFBO0lBQ0wsNkRBQVUsQ0FBQTtBQUNkLENBQUMsRUFOVyxhQUFhLEtBQWIsYUFBYSxRQU14QjtBQUVELE1BQU0sQ0FBTixJQUFZLGNBVVg7QUFWRCxXQUFZLGNBQWM7SUFDdEIseURBQU8sQ0FBQTtJQUNQLHlEQUFPLENBQUE7SUFDUCw2REFBUyxDQUFBO0lBQ1QsbURBQUksQ0FBQTtJQUNKLG1EQUFJLENBQUE7SUFDSix5REFBTyxDQUFBO0lBQ1AseURBQU8sQ0FBQTtJQUNQLHVEQUFNLENBQUE7SUFDTiwyREFBUSxDQUFBO0FBQ1osQ0FBQyxFQVZXLGNBQWMsS0FBZCxjQUFjLFFBVXpCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gU3R5bGVTaXplRW51bSB7XG4gICAgRXh0cmFTbWFsbCxcbiAgICBTbWFsbCxcbiAgICBOb3JtYWwsXG4gICAgTGFyZ2UsXG4gICAgRXh0cmFMYXJnZVxufVxuXG5leHBvcnQgZW51bSBTdHlsZUxldmVsRW51bSB7XG4gICAgRGVmYXVsdCxcbiAgICBQcmltYXJ5LFxuICAgIFNlY29uZGFyeSxcbiAgICBJbmZvLFxuICAgIEhlbHAsXG4gICAgU3VjY2VzcyxcbiAgICBXYXJuaW5nLFxuICAgIERhbmdlcixcbiAgICBDb250cmFzdFxufVxuIl19","export class Styles {\n static { this.BUTTON_ROUNDED_WIDTH_XS = 28; }\n static { this.BUTTON_ROUNDED_WIDTH_SM = 31.5; }\n static { this.BUTTON_ROUNDED_WIDTH = 35; }\n static { this.BUTTON_ROUNDED_WIDTH_LG = 38.5; }\n static { this.BUTTON_ROUNDED_WIDTH_XL = 42; }\n static { this.ACTION_BUTTON_MARGIN_X = 2.1; }\n static { this.TABLE_CELL_PADDING_X_SM = 7; }\n static { this.TABLE_CELL_PADDING_X = 14; } // left and right paddings are same\n static { this.TABLE_CELL_PADDING_X_LG = 17.5; }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGUtY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvc3R5bGVzL3N0eWxlLWNvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sTUFBTTthQUNRLDRCQUF1QixHQUFHLEVBQUUsQ0FBQzthQUM3Qiw0QkFBdUIsR0FBRyxJQUFJLENBQUM7YUFDL0IseUJBQW9CLEdBQUcsRUFBRSxDQUFDO2FBQzFCLDRCQUF1QixHQUFHLElBQUksQ0FBQzthQUMvQiw0QkFBdUIsR0FBRyxFQUFFLENBQUM7YUFFN0IsMkJBQXNCLEdBQUcsR0FBRyxDQUFDO2FBRTdCLDRCQUF1QixHQUFHLENBQUMsQ0FBQzthQUM1Qix5QkFBb0IsR0FBRyxFQUFFLENBQUMsR0FBQyxtQ0FBbUM7YUFDOUQsNEJBQXVCLEdBQUcsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFN0eWxlcyB7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBCVVRUT05fUk9VTkRFRF9XSURUSF9YUyA9IDI4O1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQlVUVE9OX1JPVU5ERURfV0lEVEhfU00gPSAzMS41O1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQlVUVE9OX1JPVU5ERURfV0lEVEggPSAzNTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJVVFRPTl9ST1VOREVEX1dJRFRIX0xHID0gMzguNTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJVVFRPTl9ST1VOREVEX1dJRFRIX1hMID0gNDI7XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFDVElPTl9CVVRUT05fTUFSR0lOX1ggPSAyLjE7XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRBQkxFX0NFTExfUEFERElOR19YX1NNID0gNztcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRBQkxFX0NFTExfUEFERElOR19YID0gMTQ7IC8vIGxlZnQgYW5kIHJpZ2h0IHBhZGRpbmdzIGFyZSBzYW1lXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBUQUJMRV9DRUxMX1BBRERJTkdfWF9MRyA9IDE3LjU7XG59XG4iXX0=","import { HttpBackend } from '@angular/common/http';\nimport { ErrorHandler, inject, provideAppInitializer } from '@angular/core';\nimport { ConfirmationService, MessageService } from 'primeng/api';\nimport { DialogService } from 'primeng/dynamicdialog';\nimport { CommonsErrorHandler } from './error/error-handler';\nimport { LogPublisherConsoleService } from './log/log-publisher-console.service';\nimport { LoggerService } from './log/logger.service';\nimport { TypeRegistry } from './registry/type-registry';\nimport { PermissionService } from './security/permission.service';\nimport { CommonsConfigurationService } from './services/commons-configuration.service';\nimport { CommonsInitService } from './services/commons-init.service';\nimport { CommonsRouterService } from './services/commons-router.service';\nimport { CommonsStorageService } from './services/commons-storage.service';\nimport { CommonsService } from './services/commons.service';\nimport { commonsInitializerProvider } from './services/providers/commons-init.provider';\nimport { BROWSER_STORAGE_IT } from './services/tokens/browser-storage.token';\nimport { LOG_PUBLISHERS } from './services/tokens/log-publisher.token';\nimport { COMMONS_MODULE_CONFIG_IT } from './services/tokens/module-config.token';\nexport var CommonsFeatureTypeEnum;\n(function (CommonsFeatureTypeEnum) {\n CommonsFeatureTypeEnum[CommonsFeatureTypeEnum[\"Layout\"] = 0] = \"Layout\";\n CommonsFeatureTypeEnum[CommonsFeatureTypeEnum[\"Table\"] = 1] = \"Table\";\n CommonsFeatureTypeEnum[CommonsFeatureTypeEnum[\"Tableview\"] = 2] = \"Tableview\";\n CommonsFeatureTypeEnum[CommonsFeatureTypeEnum[\"DataApiAsClassV1\"] = 3] = \"DataApiAsClassV1\";\n})(CommonsFeatureTypeEnum || (CommonsFeatureTypeEnum = {}));\nexport function provideCommons(config, ...features) {\n const providers = [\n // primeng services\n DialogService,\n MessageService,\n ConfirmationService,\n // services\n CommonsInitService,\n CommonsService,\n CommonsRouterService,\n PermissionService,\n CommonsStorageService,\n {\n provide: COMMONS_MODULE_CONFIG_IT,\n useValue: config\n },\n {\n provide: TypeRegistry,\n useFactory: () => TypeRegistry.get()\n },\n {\n provide: CommonsConfigurationService,\n useFactory: () => CommonsConfigurationService.get()\n },\n provideAppInitializer(() => {\n const initializerFn = commonsInitializerProvider(inject(HttpBackend), inject(CommonsInitService));\n return initializerFn();\n }),\n {\n provide: LoggerService,\n useFactory: () => LoggerService.get()\n },\n {\n provide: LOG_PUBLISHERS,\n useClass: LogPublisherConsoleService,\n multi: true\n },\n {\n provide: BROWSER_STORAGE_IT,\n useFactory: () => localStorage\n },\n {\n provide: ErrorHandler,\n useClass: CommonsErrorHandler\n }\n ];\n features.forEach(f => {\n providers.push(...f.providers);\n });\n return providers;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvcmUvc3JjL3Byb3ZpZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBdUIsWUFBWSxFQUFZLE1BQU0sRUFBRSxxQkFBcUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUUxRyxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ2hFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0RixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDckUsT0FBTyxFQUFDLHdCQUF3QixFQUFzQixNQUFNLHVDQUF1QyxDQUFDO0FBRXBHLE1BQU0sQ0FBTixJQUFZLHNCQUtYO0FBTEQsV0FBWSxzQkFBc0I7SUFDOUIsdUVBQU0sQ0FBQTtJQUNOLHFFQUFLLENBQUE7SUFDTCw2RUFBUyxDQUFBO0lBQ1QsMkZBQWdCLENBQUE7QUFDcEIsQ0FBQyxFQUxXLHNCQUFzQixLQUF0QixzQkFBc0IsUUFLakM7QUFPRCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQTRCLEVBQUUsR0FBRyxRQUEwQjtJQUN0RixNQUFNLFNBQVMsR0FBd0M7UUFDbkQsbUJBQW1CO1FBQ25CLGFBQWE7UUFDYixjQUFjO1FBQ2QsbUJBQW1CO1FBRW5CLFdBQVc7UUFDWCxrQkFBa0I7UUFDbEIsY0FBYztRQUNkLG9CQUFvQjtRQUNwQixpQkFBaUI7UUFDakIscUJBQXFCO1FBRXJCO1lBQ0ksT0FBTyxFQUFFLHdCQUF3QjtZQUNqQyxRQUFRLEVBQUUsTUFBTTtTQUNuQjtRQUNEO1lBQ0ksT0FBTyxFQUFFLFlBQVk7WUFDckIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUU7U0FDdkM7UUFDRDtZQUNJLE9BQU8sRUFBRSwyQkFBMkI7WUFDcEMsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsRUFBRTtTQUN0RDtRQUNELHFCQUFxQixDQUFDLEdBQUcsRUFBRTtZQUN2QixNQUFNLGFBQWEsR0FBRywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztZQUNsRyxPQUFPLGFBQWEsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQztRQUNGO1lBQ0ksT0FBTyxFQUFFLGFBQWE7WUFDdEIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUU7U0FDeEM7UUFDRDtZQUNJLE9BQU8sRUFBRSxjQUFjO1lBQ3ZCLFFBQVEsRUFBRSwwQkFBMEI7WUFDcEMsS0FBSyxFQUFFLElBQUk7U0FDZDtRQUNEO1lBQ0ksT0FBTyxFQUFFLGtCQUFrQjtZQUMzQixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsWUFBWTtTQUNqQztRQUNEO1lBQ0ksT0FBTyxFQUFFLFlBQVk7WUFDckIsUUFBUSxFQUFFLG1CQUFtQjtTQUNoQztLQUNKLENBQUM7SUFFRixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ2pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwQmFja2VuZH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtFbnZpcm9ubWVudFByb3ZpZGVycywgRXJyb3JIYW5kbGVyLCBQcm92aWRlciwgaW5qZWN0LCBwcm92aWRlQXBwSW5pdGlhbGl6ZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0NvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5cbmltcG9ydCB7Q29tbW9uc0Vycm9ySGFuZGxlcn0gZnJvbSAnLi9lcnJvci9lcnJvci1oYW5kbGVyJztcbmltcG9ydCB7TG9nUHVibGlzaGVyQ29uc29sZVNlcnZpY2V9IGZyb20gJy4vbG9nL2xvZy1wdWJsaXNoZXItY29uc29sZS5zZXJ2aWNlJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi9sb2cvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtUeXBlUmVnaXN0cnl9IGZyb20gJy4vcmVnaXN0cnkvdHlwZS1yZWdpc3RyeSc7XG5pbXBvcnQge1Blcm1pc3Npb25TZXJ2aWNlfSBmcm9tICcuL3NlY3VyaXR5L3Blcm1pc3Npb24uc2VydmljZSc7XG5pbXBvcnQge0NvbW1vbnNDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlcy9jb21tb25zLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQge0NvbW1vbnNJbml0U2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlcy9jb21tb25zLWluaXQuc2VydmljZSc7XG5pbXBvcnQge0NvbW1vbnNSb3V0ZXJTZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2VzL2NvbW1vbnMtcm91dGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtDb21tb25zU3RvcmFnZVNlcnZpY2V9IGZyb20gJy4vc2VydmljZXMvY29tbW9ucy1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHtDb21tb25zU2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlcy9jb21tb25zLnNlcnZpY2UnO1xuaW1wb3J0IHtjb21tb25zSW5pdGlhbGl6ZXJQcm92aWRlcn0gZnJvbSAnLi9zZXJ2aWNlcy9wcm92aWRlcnMvY29tbW9ucy1pbml0LnByb3ZpZGVyJztcbmltcG9ydCB7QlJPV1NFUl9TVE9SQUdFX0lUfSBmcm9tICcuL3NlcnZpY2VzL3Rva2Vucy9icm93c2VyLXN0b3JhZ2UudG9rZW4nO1xuaW1wb3J0IHtMT0dfUFVCTElTSEVSU30gZnJvbSAnLi9zZXJ2aWNlcy90b2tlbnMvbG9nLXB1Ymxpc2hlci50b2tlbic7XG5pbXBvcnQge0NPTU1PTlNfTU9EVUxFX0NPTkZJR19JVCwgQ29tbW9uc01vZHVsZUNvbmZpZ30gZnJvbSAnLi9zZXJ2aWNlcy90b2tlbnMvbW9kdWxlLWNvbmZpZy50b2tlbic7XG5cbmV4cG9ydCBlbnVtIENvbW1vbnNGZWF0dXJlVHlwZUVudW0ge1xuICAgIExheW91dCxcbiAgICBUYWJsZSxcbiAgICBUYWJsZXZpZXcsXG4gICAgRGF0YUFwaUFzQ2xhc3NWMVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbnNGZWF0dXJlIHtcbiAgICB0eXBlOiBDb21tb25zRmVhdHVyZVR5cGVFbnVtO1xuICAgIHByb3ZpZGVyczogKFByb3ZpZGVyIHwgRW52aXJvbm1lbnRQcm92aWRlcnMpW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQ29tbW9ucyhjb25maWc/OiBDb21tb25zTW9kdWxlQ29uZmlnLCAuLi5mZWF0dXJlczogQ29tbW9uc0ZlYXR1cmVbXSk6IChQcm92aWRlciB8IEVudmlyb25tZW50UHJvdmlkZXJzKVtdIHtcbiAgICBjb25zdCBwcm92aWRlcnM6IChQcm92aWRlciB8IEVudmlyb25tZW50UHJvdmlkZXJzKVtdID0gW1xuICAgICAgICAvLyBwcmltZW5nIHNlcnZpY2VzXG4gICAgICAgIERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIE1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICBDb25maXJtYXRpb25TZXJ2aWNlLFxuXG4gICAgICAgIC8vIHNlcnZpY2VzXG4gICAgICAgIENvbW1vbnNJbml0U2VydmljZSxcbiAgICAgICAgQ29tbW9uc1NlcnZpY2UsXG4gICAgICAgIENvbW1vbnNSb3V0ZXJTZXJ2aWNlLFxuICAgICAgICBQZXJtaXNzaW9uU2VydmljZSxcbiAgICAgICAgQ29tbW9uc1N0b3JhZ2VTZXJ2aWNlLFxuXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IENPTU1PTlNfTU9EVUxFX0NPTkZJR19JVCxcbiAgICAgICAgICAgIHVzZVZhbHVlOiBjb25maWdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogVHlwZVJlZ2lzdHJ5LFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4gVHlwZVJlZ2lzdHJ5LmdldCgpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IENvbW1vbnNDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IENvbW1vbnNDb25maWd1cmF0aW9uU2VydmljZS5nZXQoKVxuICAgICAgICB9LFxuICAgICAgICBwcm92aWRlQXBwSW5pdGlhbGl6ZXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbGl6ZXJGbiA9IGNvbW1vbnNJbml0aWFsaXplclByb3ZpZGVyKGluamVjdChIdHRwQmFja2VuZCksIGluamVjdChDb21tb25zSW5pdFNlcnZpY2UpKTtcbiAgICAgICAgICAgIHJldHVybiBpbml0aWFsaXplckZuKCk7XG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4gTG9nZ2VyU2VydmljZS5nZXQoKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBMT0dfUFVCTElTSEVSUyxcbiAgICAgICAgICAgIHVzZUNsYXNzOiBMb2dQdWJsaXNoZXJDb25zb2xlU2VydmljZSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEJST1dTRVJfU1RPUkFHRV9JVCxcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IGxvY2FsU3RvcmFnZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBFcnJvckhhbmRsZXIsXG4gICAgICAgICAgICB1c2VDbGFzczogQ29tbW9uc0Vycm9ySGFuZGxlclxuICAgICAgICB9XG4gICAgXTtcblxuICAgIGZlYXR1cmVzLmZvckVhY2goZiA9PiB7XG4gICAgICAgIHByb3ZpZGVycy5wdXNoKC4uLmYucHJvdmlkZXJzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBwcm92aWRlcnM7XG59XG4iXX0=","// action\nexport * from './action/action-data.model';\nexport * from './action/action-parameters.model';\n// components\nexport * from './components/notification/notification-wrapper.component';\n// data-list\nexport * from './data-list/data-list.model';\nexport * from './data-list/data-list-params-helpers';\nexport * from './data-list/filter-match.model';\nexport * from './data-list/filter-state.model';\n// data-providers\nexport * from './data-providers/base.data-provider';\nexport * from './data-providers/lookup.data-provider';\n// descriptors\nexport * from './descriptors/action.descriptor';\nexport * from './descriptors/column.descriptor';\nexport * from './descriptors/editor.descriptor';\nexport * from './descriptors/enum.descriptor';\nexport * from './descriptors/filter.descriptor';\nexport * from './descriptors/lookup.descriptor';\nexport * from './descriptors/model.descriptor';\nexport * from './descriptors/table.descriptor';\nexport * from './descriptors/tableview.descriptor';\n// directives\nexport * from './directives/component.directive';\nexport * from './directives/rerender.directive';\nexport * from './directives/template.directive';\n// enums\nexport * from './enum/enum.model';\nexport * from './enum/enum-helpers';\n// error\nexport * from './error/error.model';\nexport * from './error/error-handler';\nexport * from './error/error-helpers';\n// helpers\nexport * from './helpers/coercion';\nexport * from './helpers/date';\nexport * from './helpers/notification';\nexport * from './helpers/number';\nexport * from './helpers/object';\nexport * from './helpers/route';\nexport * from './helpers/string';\nexport * from './helpers/type-helpers';\nexport * from './helpers/templates';\n// i18n\nexport * from './i18n/i18n-common';\nexport * from './i18n/i18n-error';\nexport * from './i18n/i18n-type';\n// log\nexport * from './log/log.model';\nexport * from './log/log-publisher-console.service';\nexport * from './log/logger.service';\n// models\nexport * from './models/class-attribute.model';\nexport * from './models/class-service.model';\nexport * from './models/getter.model';\nexport * from './models/i18n.model';\nexport * from './models/menu.model';\nexport * from './models/user.model';\nexport * from './models/version.model';\n// pipes\nexport * from './pipes/boolean.pipe';\nexport * from './pipes/class-map.pipe';\nexport * from './pipes/enum.pipe';\nexport * from './pipes/enumerate.pipe';\nexport * from './pipes/enumerate-async.pipe';\nexport * from './pipes/getter.pipe';\nexport * from './pipes/i18n-property.pipe';\nexport * from './pipes/json-path.pipe';\nexport * from './pipes/parametrize.pipe';\nexport * from './pipes/template.pipe';\n// reactivity\nexport * from './reactivity/effect';\n// reflect\nexport * from './reflect/type-enum-decorator';\nexport * from './reflect/type-enum-metadata';\n// registry\nexport * from './registry/registry.model';\nexport * from './registry/type-registry';\n// router\nexport * from './router/route-builder';\nexport * from './router/router.model';\nexport * from './router/routes-builder';\n// rxjs\nexport * from './rxjs/map-data-list-result-operator';\n// security\nexport * from './security/permission.guard';\nexport * from './security/permission.service';\nexport * from './security/permission-helpers';\nexport * from './security/permissions.model';\n// services\nexport * from './services/providers/commons-init.provider';\nexport * from './services/tokens/browser-storage.token';\nexport * from './services/tokens/commons-init.token';\nexport * from './services/tokens/log-publisher.token';\nexport * from './services/tokens/module-config.token';\nexport * from './services/commons.service';\nexport * from './services/commons-configuration.service';\nexport * from './services/commons-init.service';\nexport * from './services/commons-router.service';\nexport * from './services/commons-storage.service';\n// styles\nexport * from './styles/style.model';\nexport * from './styles/style-constants';\n// provide\nexport * from './provide';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb3JlL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTO0FBQ1QsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGtDQUFrQyxDQUFDO0FBRWpELGFBQWE7QUFDYixjQUFjLDBEQUEwRCxDQUFDO0FBRXpFLFlBQVk7QUFDWixjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLGdDQUFnQyxDQUFDO0FBRS9DLGlCQUFpQjtBQUNqQixjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsdUNBQXVDLENBQUM7QUFFdEQsY0FBYztBQUNkLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLG9DQUFvQyxDQUFDO0FBRW5ELGFBQWE7QUFDYixjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUVoRCxRQUFRO0FBQ1IsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHFCQUFxQixDQUFDO0FBRXBDLFFBQVE7QUFDUixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx1QkFBdUIsQ0FBQztBQUV0QyxVQUFVO0FBQ1YsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMscUJBQXFCLENBQUM7QUFFcEMsT0FBTztBQUNQLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGtCQUFrQixDQUFDO0FBRWpDLE1BQU07QUFDTixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxzQkFBc0IsQ0FBQztBQUVyQyxTQUFTO0FBQ1QsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyx3QkFBd0IsQ0FBQztBQUV2QyxRQUFRO0FBQ1IsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyx1QkFBdUIsQ0FBQztBQUV0QyxhQUFhO0FBQ2IsY0FBYyxxQkFBcUIsQ0FBQztBQUVwQyxVQUFVO0FBQ1YsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhCQUE4QixDQUFDO0FBRTdDLFdBQVc7QUFDWCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMEJBQTBCLENBQUM7QUFFekMsU0FBUztBQUNULGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHlCQUF5QixDQUFDO0FBRXhDLE9BQU87QUFDUCxjQUFjLHNDQUFzQyxDQUFDO0FBRXJELFdBQVc7QUFDWCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhCQUE4QixDQUFDO0FBRTdDLFdBQVc7QUFDWCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLG9DQUFvQyxDQUFDO0FBRW5ELFNBQVM7QUFDVCxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsMEJBQTBCLENBQUM7QUFFekMsVUFBVTtBQUNWLGNBQWMsV0FBVyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gYWN0aW9uXG5leHBvcnQgKiBmcm9tICcuL2FjdGlvbi9hY3Rpb24tZGF0YS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2FjdGlvbi9hY3Rpb24tcGFyYW1ldGVycy5tb2RlbCc7XG5cbi8vIGNvbXBvbmVudHNcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLXdyYXBwZXIuY29tcG9uZW50JztcblxuLy8gZGF0YS1saXN0XG5leHBvcnQgKiBmcm9tICcuL2RhdGEtbGlzdC9kYXRhLWxpc3QubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhLWxpc3QvZGF0YS1saXN0LXBhcmFtcy1oZWxwZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YS1saXN0L2ZpbHRlci1tYXRjaC5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGEtbGlzdC9maWx0ZXItc3RhdGUubW9kZWwnO1xuXG4vLyBkYXRhLXByb3ZpZGVyc1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhLXByb3ZpZGVycy9iYXNlLmRhdGEtcHJvdmlkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhLXByb3ZpZGVycy9sb29rdXAuZGF0YS1wcm92aWRlcic7XG5cbi8vIGRlc2NyaXB0b3JzXG5leHBvcnQgKiBmcm9tICcuL2Rlc2NyaXB0b3JzL2FjdGlvbi5kZXNjcmlwdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vZGVzY3JpcHRvcnMvY29sdW1uLmRlc2NyaXB0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9kZXNjcmlwdG9ycy9lZGl0b3IuZGVzY3JpcHRvcic7XG5leHBvcnQgKiBmcm9tICcuL2Rlc2NyaXB0b3JzL2VudW0uZGVzY3JpcHRvcic7XG5leHBvcnQgKiBmcm9tICcuL2Rlc2NyaXB0b3JzL2ZpbHRlci5kZXNjcmlwdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vZGVzY3JpcHRvcnMvbG9va3VwLmRlc2NyaXB0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9kZXNjcmlwdG9ycy9tb2RlbC5kZXNjcmlwdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vZGVzY3JpcHRvcnMvdGFibGUuZGVzY3JpcHRvcic7XG5leHBvcnQgKiBmcm9tICcuL2Rlc2NyaXB0b3JzL3RhYmxldmlldy5kZXNjcmlwdG9yJztcblxuLy8gZGlyZWN0aXZlc1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL2NvbXBvbmVudC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL3JlcmVuZGVyLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvdGVtcGxhdGUuZGlyZWN0aXZlJztcblxuLy8gZW51bXNcbmV4cG9ydCAqIGZyb20gJy4vZW51bS9lbnVtLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vZW51bS9lbnVtLWhlbHBlcnMnO1xuXG4vLyBlcnJvclxuZXhwb3J0ICogZnJvbSAnLi9lcnJvci9lcnJvci5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9yL2Vycm9yLWhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9lcnJvci9lcnJvci1oZWxwZXJzJztcblxuLy8gaGVscGVyc1xuZXhwb3J0ICogZnJvbSAnLi9oZWxwZXJzL2NvZXJjaW9uJztcbmV4cG9ydCAqIGZyb20gJy4vaGVscGVycy9kYXRlJztcbmV4cG9ydCAqIGZyb20gJy4vaGVscGVycy9ub3RpZmljYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9oZWxwZXJzL251bWJlcic7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMvb2JqZWN0JztcbmV4cG9ydCAqIGZyb20gJy4vaGVscGVycy9yb3V0ZSc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMvc3RyaW5nJztcbmV4cG9ydCAqIGZyb20gJy4vaGVscGVycy90eXBlLWhlbHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9oZWxwZXJzL3RlbXBsYXRlcyc7XG5cbi8vIGkxOG5cbmV4cG9ydCAqIGZyb20gJy4vaTE4bi9pMThuLWNvbW1vbic7XG5leHBvcnQgKiBmcm9tICcuL2kxOG4vaTE4bi1lcnJvcic7XG5leHBvcnQgKiBmcm9tICcuL2kxOG4vaTE4bi10eXBlJztcblxuLy8gbG9nXG5leHBvcnQgKiBmcm9tICcuL2xvZy9sb2cubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2cvbG9nLXB1Ymxpc2hlci1jb25zb2xlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2cvbG9nZ2VyLnNlcnZpY2UnO1xuXG4vLyBtb2RlbHNcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL2NsYXNzLWF0dHJpYnV0ZS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscy9jbGFzcy1zZXJ2aWNlLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL2dldHRlci5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscy9pMThuLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL21lbnUubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMvdXNlci5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscy92ZXJzaW9uLm1vZGVsJztcblxuLy8gcGlwZXNcbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMvYm9vbGVhbi5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMvY2xhc3MtbWFwLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcy9lbnVtLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcy9lbnVtZXJhdGUucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVzL2VudW1lcmF0ZS1hc3luYy5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMvZ2V0dGVyLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcy9pMThuLXByb3BlcnR5LnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcy9qc29uLXBhdGgucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVzL3BhcmFtZXRyaXplLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcy90ZW1wbGF0ZS5waXBlJztcblxuLy8gcmVhY3Rpdml0eVxuZXhwb3J0ICogZnJvbSAnLi9yZWFjdGl2aXR5L2VmZmVjdCc7XG5cbi8vIHJlZmxlY3RcbmV4cG9ydCAqIGZyb20gJy4vcmVmbGVjdC90eXBlLWVudW0tZGVjb3JhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vcmVmbGVjdC90eXBlLWVudW0tbWV0YWRhdGEnO1xuXG4vLyByZWdpc3RyeVxuZXhwb3J0ICogZnJvbSAnLi9yZWdpc3RyeS9yZWdpc3RyeS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3JlZ2lzdHJ5L3R5cGUtcmVnaXN0cnknO1xuXG4vLyByb3V0ZXJcbmV4cG9ydCAqIGZyb20gJy4vcm91dGVyL3JvdXRlLWJ1aWxkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9yb3V0ZXIvcm91dGVyLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vcm91dGVyL3JvdXRlcy1idWlsZGVyJztcblxuLy8gcnhqc1xuZXhwb3J0ICogZnJvbSAnLi9yeGpzL21hcC1kYXRhLWxpc3QtcmVzdWx0LW9wZXJhdG9yJztcblxuLy8gc2VjdXJpdHlcbmV4cG9ydCAqIGZyb20gJy4vc2VjdXJpdHkvcGVybWlzc2lvbi5ndWFyZCc7XG5leHBvcnQgKiBmcm9tICcuL3NlY3VyaXR5L3Blcm1pc3Npb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlY3VyaXR5L3Blcm1pc3Npb24taGVscGVycyc7XG5leHBvcnQgKiBmcm9tICcuL3NlY3VyaXR5L3Blcm1pc3Npb25zLm1vZGVsJztcblxuLy8gc2VydmljZXNcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvcHJvdmlkZXJzL2NvbW1vbnMtaW5pdC5wcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL3Rva2Vucy9icm93c2VyLXN0b3JhZ2UudG9rZW4nO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy90b2tlbnMvY29tbW9ucy1pbml0LnRva2VuJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvdG9rZW5zL2xvZy1wdWJsaXNoZXIudG9rZW4nO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy90b2tlbnMvbW9kdWxlLWNvbmZpZy50b2tlbic7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2NvbW1vbnMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2NvbW1vbnMtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvY29tbW9ucy1pbml0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9jb21tb25zLXJvdXRlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvY29tbW9ucy1zdG9yYWdlLnNlcnZpY2UnO1xuXG4vLyBzdHlsZXNcbmV4cG9ydCAqIGZyb20gJy4vc3R5bGVzL3N0eWxlLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vc3R5bGVzL3N0eWxlLWNvbnN0YW50cyc7XG5cbi8vIHByb3ZpZGVcbmV4cG9ydCAqIGZyb20gJy4vcHJvdmlkZSc7XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaXVzaW5jLW1uZy1jb21tb25zLWNvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb3JlL3NyYy9tZWRpdXNpbmMtbW5nLWNvbW1vbnMtY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":["toObservable","throwError"],"mappings":"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"}
|