tnx-shared 5.2.24 → 5.2.25
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/classes/public-function.d.ts +70 -17
- package/classes/public-function.d.ts.map +1 -1
- package/esm2020/classes/public-function.mjs +2 -72
- package/esm2020/components/add-news/add-news.component.mjs +3 -3
- package/esm2020/components/autocomplete-datasource/autocomplete-datasource.component.mjs +1 -1
- package/esm2020/components/autocomplete-picker/autocomplete-picker.component.mjs +1 -1
- package/esm2020/components/avatar-uploader/avatar-uploader.component.mjs +1 -1
- package/esm2020/components/chat/chat-box/chat-box.component.mjs +1 -1
- package/esm2020/components/chat/chat-send-message-box/chat-send-message-box.component.mjs +1 -1
- package/esm2020/components/check-box-list/check-box-list.component.mjs +1 -1
- package/esm2020/components/cocautochuc/cocautochuc-picker/cocautochuc-picker.component.mjs +1 -1
- package/esm2020/components/common-app-component/app-topbar-v1/app-topbar-v1.component.mjs +1 -1
- package/esm2020/components/common-app-component/app-topbar-v2/app-topbar-v2.component.mjs +1 -1
- package/esm2020/components/common-app-component/app.menu.component.mjs +2 -2
- package/esm2020/components/common-app-component/app.topbar.component.mjs +1 -1
- package/esm2020/components/common-app-component/common-app-component.mjs +1 -1
- package/esm2020/components/common-app-component/default-setting-form/default-data-settings.component.mjs +1 -1
- package/esm2020/components/crud/advance-search/advance-search.component.mjs +1 -1
- package/esm2020/components/crud/crud-form/crud-form.component.mjs +1 -1
- package/esm2020/components/crud/crud-list/crud-list.component.mjs +1 -1
- package/esm2020/components/crud/table-detail-form/table-detail-form.component.mjs +1 -1
- package/esm2020/components/crud/tree-table/tree-table.component.mjs +1 -1
- package/esm2020/components/datetime-picker/datetime-picker.component.mjs +1 -1
- package/esm2020/components/dropdown/dropdown-setting-form/dropdown-setting-form.component.mjs +1 -1
- package/esm2020/components/dropdown/dropdown.component.mjs +4 -4
- package/esm2020/components/dropdown/quick-add-form/quick-add-form.component.mjs +1 -1
- package/esm2020/components/entity-permission/entity-permission.component.mjs +1 -1
- package/esm2020/components/entity-picker/entity-picker-dialog/components/entity-picker-data/entity-picker-data.component.mjs +1 -1
- package/esm2020/components/entity-picker/entity-picker-dialog/components/entity-picker-selected/entity-picker-selected.component.mjs +1 -1
- package/esm2020/components/entity-picker/entity-picker-dialog/components/entity-picker-tree-data/entity-picker-tree-data.component.mjs +1 -1
- package/esm2020/components/entity-picker/entity-picker-dialog/components/entity-picker-tree-selected/entity-picker-tree-selected.component.mjs +1 -1
- package/esm2020/components/entity-picker/entity-picker-dialog/entity-picker-dialog.component.mjs +1 -1
- package/esm2020/components/entity-picker/entity-picker.component.mjs +1 -1
- package/esm2020/components/file-explorer/file-explorer.component.mjs +1 -1
- package/esm2020/components/file-explorer/file-form/file-form.component.mjs +1 -1
- package/esm2020/components/file-explorer/file-ky-so-sim/file-ky-so-sim.component.mjs +1 -1
- package/esm2020/components/file-explorer/file-manager/file-manager.component.mjs +1 -1
- package/esm2020/components/file-explorer/file-picker-dialog/file-picker-dialog.component.mjs +1 -1
- package/esm2020/components/file-explorer/file-tai-lieu/file-tai-lieu.component.mjs +1 -1
- package/esm2020/components/file-explorer/file-version-list/file-version-list.component.mjs +1 -1
- package/esm2020/components/file-explorer/file-viewer/file-viewer.component.mjs +1 -1
- package/esm2020/components/file-explorer/folder-form/folder-form.component.mjs +1 -1
- package/esm2020/components/file-explorer/ky-so-sim-danh-sach-chu-ky/ky-so-sim-danh-sach-chu-ky.component.mjs +1 -1
- package/esm2020/components/file-explorer/signature-detail/signature-detail.component.mjs +1 -1
- package/esm2020/components/file-upload/file-upload.component.mjs +1 -1
- package/esm2020/components/image-uploader/image-uploader.component.mjs +1 -1
- package/esm2020/components/paging-next-back-only/paging-next-back-only.component.mjs +1 -1
- package/esm2020/components/permission-utils/permission-utils.component.mjs +1 -1
- package/esm2020/components/qr-code-generator/qr-code-generator.component.mjs +1 -1
- package/esm2020/components/query-builders/query-builder/query-builder.component.mjs +1 -1
- package/esm2020/components/query-builders/query-builder-group/query-builder-group.component.mjs +2 -2
- package/esm2020/components/query-builders/query-builder-rule/query-builder-rule.component.mjs +3 -3
- package/esm2020/components/radio-button-list/radio-button-list.component.mjs +1 -1
- package/esm2020/components/report-queue/report-queue.component.mjs +1 -1
- package/esm2020/components/service-file-upload/service-file-upload.component.mjs +1 -1
- package/esm2020/components/settings/settings-row/settings-row.component.mjs +1 -1
- package/esm2020/components/settings/settings-workflow/settings-workflow.component.mjs +1 -1
- package/esm2020/components/settings/settings.component.mjs +1 -1
- package/esm2020/components/share-link-by-permission/share-link-by-permission.component.mjs +1 -1
- package/esm2020/components/statemachines/state/state.component.mjs +1 -1
- package/esm2020/components/statemachines/state-metadata/state-metadata.component.mjs +1 -1
- package/esm2020/components/statemachines/statemachines-connection-metadata/statemachines-connection-metadata.component.mjs +1 -1
- package/esm2020/components/statemachines/statemachines-designer/statemachines-designer.component.mjs +1 -1
- package/esm2020/components/tn-app-help/helper-current-page/helper-current-page.component.mjs +1 -1
- package/esm2020/components/tn-app-help/tn-app-help.component.mjs +1 -1
- package/esm2020/components/tn-app-notification/tn-app-notification.component.mjs +1 -1
- package/esm2020/components/tn-checkbox/tn-checkbox.component.mjs +1 -1
- package/esm2020/components/tn-color-picker/tn-color-picker.component.mjs +1 -1
- package/esm2020/components/tn-dialog/tn-dialog.component.mjs +1 -1
- package/esm2020/components/tn-tabview/tn-tabview.component.mjs +1 -1
- package/esm2020/components/tn-template/tn-template.component.mjs +1 -1
- package/esm2020/components/tn-tinymce/tn-tinymce.component.mjs +1 -1
- package/esm2020/components/tn-tree/tn-tree.component.mjs +1 -1
- package/esm2020/components/user-picker/user-picker-box/user-picker-box.component.mjs +1 -1
- package/esm2020/components/user-picker/user-picker.component.mjs +1 -1
- package/esm2020/components/usmart/chuoi-phan-tiet/chuoi-phan-tiet.component.mjs +1 -1
- package/esm2020/components/vanban-picker/vanban-den-picker/vanban-den-picker.component.mjs +2 -2
- package/esm2020/components/vanban-picker/vanban-di-picker/vanban-di-picker.component.mjs +2 -2
- package/esm2020/components/vanban-picker/vanban-picker-dialog/vanban-picker-dialog.component.mjs +1 -1
- package/esm2020/components/vanban-picker/vanban-picker.component.mjs +1 -1
- package/esm2020/components/workflow/cho-y-kien-form/cho-y-kien-form.component.mjs +1 -1
- package/esm2020/components/workflow/permission-sharing/permission-sharing.component.mjs +1 -1
- package/esm2020/components/workflow/process-workflow-form/process-workflow-form.component.mjs +1 -1
- package/esm2020/components/workflow/start-workflow/start-workflow.component.mjs +1 -1
- package/esm2020/components/workflow/workflow-history-new/workflow-history-new.component.mjs +1 -1
- package/esm2020/components/workflow/workflow-permission-form/workflow-permission-form.component.mjs +1 -1
- package/esm2020/components/workflow/workflow-picker/workflow-picker.component.mjs +1 -1
- package/esm2020/components/workflow/workflow-setting-new/workflow-setting-new.component.mjs +1 -1
- package/esm2020/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.mjs +1 -1
- package/esm2020/congviec/congviec/congviec-form/congviec-form.component.mjs +1 -1
- package/esm2020/congviec/congviec/congviec.component.mjs +2 -2
- package/esm2020/congviec/dm-linhvuc-congviec/dm-linhvuc-congviec-form/dm-linhvuc-congviec-form.component.mjs +1 -1
- package/esm2020/congviec/dm-loai-congviec/dm-loai-congviec-form/dm-loai-congviec-form.component.mjs +1 -1
- package/esm2020/congviec/dm-priority/dm-priority-form/dm-priority-form.component.mjs +1 -1
- package/esm2020/tnx-shared.module.mjs +1 -1
- package/fesm2015/tnx-shared.mjs +104 -171
- package/fesm2015/tnx-shared.mjs.map +1 -1
- package/fesm2020/tnx-shared.mjs +104 -171
- package/fesm2020/tnx-shared.mjs.map +1 -1
- package/package.json +3 -3
- package/tnx-shared.module.d.ts +2 -1
- package/tnx-shared.module.d.ts.map +1 -1
|
@@ -157,7 +157,7 @@ export class WorkflowPickerComponent extends DataFormBase {
|
|
|
157
157
|
}
|
|
158
158
|
}
|
|
159
159
|
WorkflowPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: WorkflowPickerComponent, deps: [{ token: i0.Injector }, { token: i1.WorkflowSettingsService }, { token: i2.StateMachinesService }], target: i0.ɵɵFactoryTarget.Component });
|
|
160
|
-
WorkflowPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: WorkflowPickerComponent, selector: "workflow-picker", inputs: { parentSetting: "parentSetting", data: "data", showButtonSave: "showButtonSave" }, outputs: { onSaved: "onSaved", onCancel: "onCancel", onSaveSetting: "onSaveSetting" }, providers: [ComponentContextService], usesInheritance: true, ngImport: i0, template: "<crud-form *ngIf=\"readyCrudForm\" #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\"\r\n [styleClass]=\"'workflow-setting'\" [disableCaching]=\"true\" (onFormReady)=\"_handleFormReady($event)\">\r\n <ng-template #designer>\r\n <div *ngFor=\"let wfCode of model.data._workflowCodes\">\r\n <div class=\"title-workflow\">\r\n Quy tr\u00ECnh {{dicMachinesData[wfCode].ten}} ({{wfCode}})\r\n <span *ngIf=\"wfCode == model.data.workflowCode\" class=\"pi pi-star\" pTooltip=\"\u0110\u00E2y l\u00E0 quy tr\u00ECnh ch\u00EDnh\"\r\n tooltipPosition=\"top\"></span>\r\n </div>\r\n <div class=\"state-machines-container\">\r\n <statemachines-designer #designer [data]=\"dicMachinesData[wfCode]\" [viewOnly]=\"true\">\r\n </statemachines-designer>\r\n </div>\r\n </div>\r\n </ng-template>\r\n</crud-form>\r\n<div *ngIf=\"showButtonSave\" class=\"container-button-workflow\">\r\n <button type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\" [label]=\"'L\u01B0u c\u1EA5u h\u00ECnh' | translate\"\r\n (click)=\"_handleSave($event)\"></button>\r\n</div>", styles: [".title-workflow{padding:1em 0 .5em;font-weight:700;font-size:.9em}.title-workflow .pi-star{color:orange}.state-machines-container{border:1px solid #ced4da;border-radius:3px}.container-button-workflow{position:sticky;bottom:0;border-top:1px solid #dddddd;background:white;padding:.5em;text-align:right;z-index:10}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "label", "icon"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "tooltipZIndex", "escape", "
|
|
160
|
+
WorkflowPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: WorkflowPickerComponent, selector: "workflow-picker", inputs: { parentSetting: "parentSetting", data: "data", showButtonSave: "showButtonSave" }, outputs: { onSaved: "onSaved", onCancel: "onCancel", onSaveSetting: "onSaveSetting" }, providers: [ComponentContextService], usesInheritance: true, ngImport: i0, template: "<crud-form *ngIf=\"readyCrudForm\" #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\"\r\n [styleClass]=\"'workflow-setting'\" [disableCaching]=\"true\" (onFormReady)=\"_handleFormReady($event)\">\r\n <ng-template #designer>\r\n <div *ngFor=\"let wfCode of model.data._workflowCodes\">\r\n <div class=\"title-workflow\">\r\n Quy tr\u00ECnh {{dicMachinesData[wfCode].ten}} ({{wfCode}})\r\n <span *ngIf=\"wfCode == model.data.workflowCode\" class=\"pi pi-star\" pTooltip=\"\u0110\u00E2y l\u00E0 quy tr\u00ECnh ch\u00EDnh\"\r\n tooltipPosition=\"top\"></span>\r\n </div>\r\n <div class=\"state-machines-container\">\r\n <statemachines-designer #designer [data]=\"dicMachinesData[wfCode]\" [viewOnly]=\"true\">\r\n </statemachines-designer>\r\n </div>\r\n </div>\r\n </ng-template>\r\n</crud-form>\r\n<div *ngIf=\"showButtonSave\" class=\"container-button-workflow\">\r\n <button type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\" [label]=\"'L\u01B0u c\u1EA5u h\u00ECnh' | translate\"\r\n (click)=\"_handleSave($event)\"></button>\r\n</div>", styles: [".title-workflow{padding:1em 0 .5em;font-weight:700;font-size:.9em}.title-workflow .pi-star{color:orange}.state-machines-container{border:1px solid #ced4da;border-radius:3px}.container-button-workflow{position:sticky;bottom:0;border-top:1px solid #dddddd;background:white;padding:.5em;text-align:right;z-index:10}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i6.CrudFormComponent, selector: "crud-form", inputs: ["setting", "context", "filesUploaded", "isViewMode", "disableKeypressControl", "disableCaching", "styleClass", "useGridTemplate", "formId", "formClass", "autoFocus", "trapFocus", "data", "formState"], outputs: ["onFormReady", "onControlReady", "onAllControlReady", "onModelChanged", "dataChange", "onChange", "onAfterTrinhKy"] }, { kind: "component", type: i7.StateMachinesDesignerComponent, selector: "statemachines-designer", inputs: ["useScrollBar", "viewOnly", "data", "currentConnection", "containerId", "jsPlumbOption"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
|
|
161
161
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: WorkflowPickerComponent, decorators: [{
|
|
162
162
|
type: Component,
|
|
163
163
|
args: [{ selector: 'workflow-picker', providers: [ComponentContextService], template: "<crud-form *ngIf=\"readyCrudForm\" #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\"\r\n [styleClass]=\"'workflow-setting'\" [disableCaching]=\"true\" (onFormReady)=\"_handleFormReady($event)\">\r\n <ng-template #designer>\r\n <div *ngFor=\"let wfCode of model.data._workflowCodes\">\r\n <div class=\"title-workflow\">\r\n Quy tr\u00ECnh {{dicMachinesData[wfCode].ten}} ({{wfCode}})\r\n <span *ngIf=\"wfCode == model.data.workflowCode\" class=\"pi pi-star\" pTooltip=\"\u0110\u00E2y l\u00E0 quy tr\u00ECnh ch\u00EDnh\"\r\n tooltipPosition=\"top\"></span>\r\n </div>\r\n <div class=\"state-machines-container\">\r\n <statemachines-designer #designer [data]=\"dicMachinesData[wfCode]\" [viewOnly]=\"true\">\r\n </statemachines-designer>\r\n </div>\r\n </div>\r\n </ng-template>\r\n</crud-form>\r\n<div *ngIf=\"showButtonSave\" class=\"container-button-workflow\">\r\n <button type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\" [label]=\"'L\u01B0u c\u1EA5u h\u00ECnh' | translate\"\r\n (click)=\"_handleSave($event)\"></button>\r\n</div>", styles: [".title-workflow{padding:1em 0 .5em;font-weight:700;font-size:.9em}.title-workflow .pi-star{color:orange}.state-machines-container{border:1px solid #ced4da;border-radius:3px}.container-button-workflow{position:sticky;bottom:0;border-top:1px solid #dddddd;background:white;padding:.5em;text-align:right;z-index:10}\n"] }]
|
|
@@ -186,7 +186,7 @@ export class WorkflowSettingNewComponent extends DataFormBase {
|
|
|
186
186
|
}
|
|
187
187
|
}
|
|
188
188
|
WorkflowSettingNewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: WorkflowSettingNewComponent, deps: [{ token: i0.Injector }, { token: i1.WorkflowSettingsService }, { token: i2.DmLoaiCongViecService }], target: i0.ɵɵFactoryTarget.Component });
|
|
189
|
-
WorkflowSettingNewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: WorkflowSettingNewComponent, selector: "workflow-setting-new", inputs: { parentSetting: "parentSetting" }, outputs: { onInit: "onInit", onSaved: "onSaved", onCancel: "onCancel", onSaveSetting: "onSaveSetting" }, providers: [ComponentContextService], viewQueries: [{ propertyName: "workflowPickerComp", first: true, predicate: WorkflowPickerComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<crud-form *ngIf=\"readyCrudForm\" #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\"\r\n [styleClass]=\"'workflow-setting'\" [disableCaching]=\"true\" (onFormReady)=\"_handleFormReady($event)\">\r\n <ng-template #workflowPicker>\r\n <workflow-picker [data]=\"model.data\"></workflow-picker>\r\n </ng-template>\r\n</crud-form>\r\n<ng-template #buttonTemplate>\r\n <div class=\"footer-workflow-setting\">\r\n <button type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\" [label]=\"'FORM.SAVE' | translate\"\r\n (click)=\"_handleSave($event)\"></button>\r\n <button *ngIf=\"model.data.id\" type=\"button\" pButton icon=\"pi pi-trash\" class=\"p-button-danger p-button-text\"\r\n [label]=\"'H\u1EE7y quy tr\u00ECnh' | translate\" (click)=\"handleCancelWorkflow($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n </div>\r\n</ng-template>", styles: [".title-workflow{padding:1em 0 .5em;font-weight:700;font-size:.9em}.title-workflow .pi-star{color:orange}.container-button-workflow{position:sticky;bottom:0;border-top:1px solid #dddddd;background:white;padding:.5em;text-align:right;z-index:10}::ng-deep workflow-setting-new .crud-form-control div[role=checkbox-alone].taskInsideBusinessForm{margin-top:12px!important}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "label", "icon"] }, { kind: "component", type: i5.CrudFormComponent, selector: "crud-form", inputs: ["setting", "context", "filesUploaded", "isViewMode", "disableKeypressControl", "disableCaching", "styleClass", "useGridTemplate", "formId", "formClass", "autoFocus", "trapFocus", "data", "formState"], outputs: ["onFormReady", "onControlReady", "onAllControlReady", "onModelChanged", "dataChange", "onChange", "onAfterTrinhKy"] }, { kind: "component", type: i6.WorkflowPickerComponent, selector: "workflow-picker", inputs: ["parentSetting", "data", "showButtonSave"], outputs: ["onSaved", "onCancel", "onSaveSetting"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
|
|
189
|
+
WorkflowSettingNewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: WorkflowSettingNewComponent, selector: "workflow-setting-new", inputs: { parentSetting: "parentSetting" }, outputs: { onInit: "onInit", onSaved: "onSaved", onCancel: "onCancel", onSaveSetting: "onSaveSetting" }, providers: [ComponentContextService], viewQueries: [{ propertyName: "workflowPickerComp", first: true, predicate: WorkflowPickerComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<crud-form *ngIf=\"readyCrudForm\" #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\"\r\n [styleClass]=\"'workflow-setting'\" [disableCaching]=\"true\" (onFormReady)=\"_handleFormReady($event)\">\r\n <ng-template #workflowPicker>\r\n <workflow-picker [data]=\"model.data\"></workflow-picker>\r\n </ng-template>\r\n</crud-form>\r\n<ng-template #buttonTemplate>\r\n <div class=\"footer-workflow-setting\">\r\n <button type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\" [label]=\"'FORM.SAVE' | translate\"\r\n (click)=\"_handleSave($event)\"></button>\r\n <button *ngIf=\"model.data.id\" type=\"button\" pButton icon=\"pi pi-trash\" class=\"p-button-danger p-button-text\"\r\n [label]=\"'H\u1EE7y quy tr\u00ECnh' | translate\" (click)=\"handleCancelWorkflow($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n </div>\r\n</ng-template>", styles: [".title-workflow{padding:1em 0 .5em;font-weight:700;font-size:.9em}.title-workflow .pi-star{color:orange}.container-button-workflow{position:sticky;bottom:0;border-top:1px solid #dddddd;background:white;padding:.5em;text-align:right;z-index:10}::ng-deep workflow-setting-new .crud-form-control div[role=checkbox-alone].taskInsideBusinessForm{margin-top:12px!important}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i5.CrudFormComponent, selector: "crud-form", inputs: ["setting", "context", "filesUploaded", "isViewMode", "disableKeypressControl", "disableCaching", "styleClass", "useGridTemplate", "formId", "formClass", "autoFocus", "trapFocus", "data", "formState"], outputs: ["onFormReady", "onControlReady", "onAllControlReady", "onModelChanged", "dataChange", "onChange", "onAfterTrinhKy"] }, { kind: "component", type: i6.WorkflowPickerComponent, selector: "workflow-picker", inputs: ["parentSetting", "data", "showButtonSave"], outputs: ["onSaved", "onCancel", "onSaveSetting"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
|
|
190
190
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: WorkflowSettingNewComponent, decorators: [{
|
|
191
191
|
type: Component,
|
|
192
192
|
args: [{ selector: 'workflow-setting-new', providers: [ComponentContextService], template: "<crud-form *ngIf=\"readyCrudForm\" #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\"\r\n [styleClass]=\"'workflow-setting'\" [disableCaching]=\"true\" (onFormReady)=\"_handleFormReady($event)\">\r\n <ng-template #workflowPicker>\r\n <workflow-picker [data]=\"model.data\"></workflow-picker>\r\n </ng-template>\r\n</crud-form>\r\n<ng-template #buttonTemplate>\r\n <div class=\"footer-workflow-setting\">\r\n <button type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\" [label]=\"'FORM.SAVE' | translate\"\r\n (click)=\"_handleSave($event)\"></button>\r\n <button *ngIf=\"model.data.id\" type=\"button\" pButton icon=\"pi pi-trash\" class=\"p-button-danger p-button-text\"\r\n [label]=\"'H\u1EE7y quy tr\u00ECnh' | translate\" (click)=\"handleCancelWorkflow($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n </div>\r\n</ng-template>", styles: [".title-workflow{padding:1em 0 .5em;font-weight:700;font-size:.9em}.title-workflow .pi-star{color:orange}.container-button-workflow{position:sticky;bottom:0;border-top:1px solid #dddddd;background:white;padding:.5em;text-align:right;z-index:10}::ng-deep workflow-setting-new .crud-form-control div[role=checkbox-alone].taskInsideBusinessForm{margin-top:12px!important}\n"] }]
|
|
@@ -252,7 +252,7 @@ export class BaseCongviecDinhkemComponent extends DataListBase {
|
|
|
252
252
|
}
|
|
253
253
|
}
|
|
254
254
|
BaseCongviecDinhkemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: BaseCongviecDinhkemComponent, deps: [{ token: i0.Injector }, { token: i1.CongViecDinhKemService }, { token: i2.FileDataService }], target: i0.ɵɵFactoryTarget.Component });
|
|
255
|
-
BaseCongviecDinhkemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: BaseCongviecDinhkemComponent, selector: "base-congviec-dinhkem", inputs: { formState: "formState", taskId: "taskId" }, host: { listeners: { "window:message": "onMessage($event)" } }, providers: [ComponentContextService], usesInheritance: true, ngImport: i0, template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"true\"\r\n [hiddenEdit]=\"true\" [hiddenDelete]=\"true\" (onReload)=\"_triggerProcessData($event)\" (onView)=\"viewLinkItem($event)\"\r\n (onDelete)=\"deleteLinkItem($event)\" (onDeleteMultiple)=\"deleteLinkItemMultiple($event)\"\r\n (onReloaded)=\"_handleReloaded($event)\">\r\n <ng-template #tieuDe let-rowData=\"rowData\">\r\n [{{rowData.tenHienThiDoiTuong}}] {{rowData.tieuDe}}\r\n </ng-template>\r\n <ng-template #buttonAfterToolbar>\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\" class=\"p-button-text p-button-primary\" (click)=\"themDinhKem()\"></button>\r\n <button type=\"button\"\r\n *ngIf=\"(formState == enumFormState.EDIT || formState == enumFormState.ADD) && model.selectedItems.length > 0\"\r\n pButton pRipple label=\"X\u00F3a\" icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\"\r\n (click)=\"deleteLinkItemMultiple($event)\"></button>\r\n </ng-template>\r\n <ng-template #function let-rowData=\"rowData\">\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\" pTooltip=\"H\u1EE7y \u0111\u00EDnh k\u00E8m\"\r\n tooltipPosition=\"top\" [disabled]=\"!rowData.allowEdit\" (click)=\"deleteLinkItem(rowData)\"></button>\r\n </ng-template>\r\n <ng-template #fileDinhKem let-rowData=\"rowData\">\r\n <file-manager [fileDataService]=\"fileDataService\" [readonly]=\"true\" [serviceCode]=\"rowData.serviceCode\"\r\n [entity]=\"rowData.entity\" [entityKey]=\"rowData.entityKey\" [layout]=\"layoutFile.SIMPLE\">\r\n </file-manager>\r\n\r\n </ng-template>\r\n</crud-list>\r\n\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" (onHide)=\"showDetailForm = false\">\r\n <base-congviec-dinhkem-form #formBase [taskId]=\"taskId\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [model]=\"formModel\" (onSaved)=\"showDetailForm = false;crudList.reload()\" (onCancel)=\"_handleCancel($event)\"\r\n (onAfterSaved)=\"onAfterSaved($event)\">\r\n </base-congviec-dinhkem-form>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showAttachLinkBox\" #dialog2 [maximizable]=\"false\" [header]=\"'Nh\u1EADp li\u00EAn k\u1EBFt' | translate\"\r\n [popupSize]=\"{ width: 600, height: 50}\" (onHide)=\"showAttachLinkBox = false; typedLink=''\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-grid\">\r\n <div class=\"p-md-10\">\r\n <input #input type=\"text\" placeholder=\"Nh\u1EADp li\u00EAn k\u1EBFt sao ch\u00E9p t\u1EEB ph\u00E2n h\u1EC7 kh\u00E1c...\" pInputText\r\n class=\"p-col-12\" [(ngModel)]=\"typedLink\" (keyup.enter)=\"addAttachLink()\" />\r\n </div>\r\n <div class=\"p-md-2\">\r\n <button type=\"button\" pButton class=\"p-button-primary p-col-12\" label=\"Ok\"\r\n [disabled]=\"typedLink != ''? null : true\" (click)=\"addAttachLink()\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <after-view-checked (loaded)=\"focusInput(input)\"></after-view-checked>\r\n</tn-dialog>\r\n\r\n<!-- <tn-dialog *ngIf=\"modelView.showEditForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"modelView.header | translate\" [popupSize]=\"modelView.popupSize\" [useDefaultScrollBar]=\"true\"\r\n (onHide)=\"modelView.showEditForm = false\">\r\n <div>123</div>\r\n <iframe style=\"border: none; width: 100%; height: calc(100% - 0.5rem);\"\r\n [src]=\"modelView.data.link | safeUrl\"></iframe>\r\n</tn-dialog> -->\r\n<!-- <div *ngIf=\"modelView.showEditForm\">\r\n <iframe #ifr style=\"border: none; width: 100%; height: calc(100% - 0.5rem);\"\r\n [src]=\"modelView.data.link | safeUrl\"></iframe>\r\n</div> -->", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "label", "icon"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "tooltipZIndex", "escape", "
|
|
255
|
+
BaseCongviecDinhkemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: BaseCongviecDinhkemComponent, selector: "base-congviec-dinhkem", inputs: { formState: "formState", taskId: "taskId" }, host: { listeners: { "window:message": "onMessage($event)" } }, providers: [ComponentContextService], usesInheritance: true, ngImport: i0, template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"true\"\r\n [hiddenEdit]=\"true\" [hiddenDelete]=\"true\" (onReload)=\"_triggerProcessData($event)\" (onView)=\"viewLinkItem($event)\"\r\n (onDelete)=\"deleteLinkItem($event)\" (onDeleteMultiple)=\"deleteLinkItemMultiple($event)\"\r\n (onReloaded)=\"_handleReloaded($event)\">\r\n <ng-template #tieuDe let-rowData=\"rowData\">\r\n [{{rowData.tenHienThiDoiTuong}}] {{rowData.tieuDe}}\r\n </ng-template>\r\n <ng-template #buttonAfterToolbar>\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\" class=\"p-button-text p-button-primary\" (click)=\"themDinhKem()\"></button>\r\n <button type=\"button\"\r\n *ngIf=\"(formState == enumFormState.EDIT || formState == enumFormState.ADD) && model.selectedItems.length > 0\"\r\n pButton pRipple label=\"X\u00F3a\" icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\"\r\n (click)=\"deleteLinkItemMultiple($event)\"></button>\r\n </ng-template>\r\n <ng-template #function let-rowData=\"rowData\">\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\" pTooltip=\"H\u1EE7y \u0111\u00EDnh k\u00E8m\"\r\n tooltipPosition=\"top\" [disabled]=\"!rowData.allowEdit\" (click)=\"deleteLinkItem(rowData)\"></button>\r\n </ng-template>\r\n <ng-template #fileDinhKem let-rowData=\"rowData\">\r\n <file-manager [fileDataService]=\"fileDataService\" [readonly]=\"true\" [serviceCode]=\"rowData.serviceCode\"\r\n [entity]=\"rowData.entity\" [entityKey]=\"rowData.entityKey\" [layout]=\"layoutFile.SIMPLE\">\r\n </file-manager>\r\n\r\n </ng-template>\r\n</crud-list>\r\n\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" (onHide)=\"showDetailForm = false\">\r\n <base-congviec-dinhkem-form #formBase [taskId]=\"taskId\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [model]=\"formModel\" (onSaved)=\"showDetailForm = false;crudList.reload()\" (onCancel)=\"_handleCancel($event)\"\r\n (onAfterSaved)=\"onAfterSaved($event)\">\r\n </base-congviec-dinhkem-form>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showAttachLinkBox\" #dialog2 [maximizable]=\"false\" [header]=\"'Nh\u1EADp li\u00EAn k\u1EBFt' | translate\"\r\n [popupSize]=\"{ width: 600, height: 50}\" (onHide)=\"showAttachLinkBox = false; typedLink=''\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-grid\">\r\n <div class=\"p-md-10\">\r\n <input #input type=\"text\" placeholder=\"Nh\u1EADp li\u00EAn k\u1EBFt sao ch\u00E9p t\u1EEB ph\u00E2n h\u1EC7 kh\u00E1c...\" pInputText\r\n class=\"p-col-12\" [(ngModel)]=\"typedLink\" (keyup.enter)=\"addAttachLink()\" />\r\n </div>\r\n <div class=\"p-md-2\">\r\n <button type=\"button\" pButton class=\"p-button-primary p-col-12\" label=\"Ok\"\r\n [disabled]=\"typedLink != ''? null : true\" (click)=\"addAttachLink()\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <after-view-checked (loaded)=\"focusInput(input)\"></after-view-checked>\r\n</tn-dialog>\r\n\r\n<!-- <tn-dialog *ngIf=\"modelView.showEditForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"modelView.header | translate\" [popupSize]=\"modelView.popupSize\" [useDefaultScrollBar]=\"true\"\r\n (onHide)=\"modelView.showEditForm = false\">\r\n <div>123</div>\r\n <iframe style=\"border: none; width: 100%; height: calc(100% - 0.5rem);\"\r\n [src]=\"modelView.data.link | safeUrl\"></iframe>\r\n</tn-dialog> -->\r\n<!-- <div *ngIf=\"modelView.showEditForm\">\r\n <iframe #ifr style=\"border: none; width: 100%; height: calc(100% - 0.5rem);\"\r\n [src]=\"modelView.data.link | safeUrl\"></iframe>\r\n</div> -->", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.InputText, selector: "[pInputText]" }, { kind: "component", type: i8.AfterViewCheckedComponent, selector: "after-view-checked", inputs: ["renderKey"], outputs: ["loaded", "loading", "unloading", "reRender"] }, { kind: "component", type: i9.CrudListComponent, selector: "crud-list" }, { kind: "component", type: i10.BaseCongviecDinhkemFormComponent, selector: "base-congviec-dinhkem-form", inputs: ["model", "taskId"] }, { kind: "component", type: i11.TnDialogComponent, selector: "tn-dialog", inputs: ["maskClass", "styleClass", "scrollBarStyleClass", "useDefaultScrollBar", "visible", "disabledButton", "modal", "header", "popupSize", "closeOnEscape", "showFooter", "positionTop", "minY", "hiddenSave", "maximizable"], outputs: ["onSave", "onCancel", "onShow", "onHide"] }, { kind: "component", type: i12.FileManagerComponent, selector: "file-manager", inputs: ["control", "fileDataService", "layout", "hiddenCreateFolder", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageSummary", "invalidFileLimitMessageDetail", "dataType", "rootFolderName", "serviceCode", "entity", "entityKey", "readonly", "inTaiLieu", "inTaiLieuChung", "copyToFolderId", "value", "multipleCheckWhenClickRow"], outputs: ["onInit", "onReady", "entityKeyChange", "closePopup", "valueChange", "onChanged", "onSelected"] }, { kind: "pipe", type: i13.TranslatePipe, name: "translate" }] });
|
|
256
256
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: BaseCongviecDinhkemComponent, decorators: [{
|
|
257
257
|
type: Component,
|
|
258
258
|
args: [{ selector: 'base-congviec-dinhkem', providers: [ComponentContextService], template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"true\"\r\n [hiddenEdit]=\"true\" [hiddenDelete]=\"true\" (onReload)=\"_triggerProcessData($event)\" (onView)=\"viewLinkItem($event)\"\r\n (onDelete)=\"deleteLinkItem($event)\" (onDeleteMultiple)=\"deleteLinkItemMultiple($event)\"\r\n (onReloaded)=\"_handleReloaded($event)\">\r\n <ng-template #tieuDe let-rowData=\"rowData\">\r\n [{{rowData.tenHienThiDoiTuong}}] {{rowData.tieuDe}}\r\n </ng-template>\r\n <ng-template #buttonAfterToolbar>\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\" class=\"p-button-text p-button-primary\" (click)=\"themDinhKem()\"></button>\r\n <button type=\"button\"\r\n *ngIf=\"(formState == enumFormState.EDIT || formState == enumFormState.ADD) && model.selectedItems.length > 0\"\r\n pButton pRipple label=\"X\u00F3a\" icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\"\r\n (click)=\"deleteLinkItemMultiple($event)\"></button>\r\n </ng-template>\r\n <ng-template #function let-rowData=\"rowData\">\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\" pTooltip=\"H\u1EE7y \u0111\u00EDnh k\u00E8m\"\r\n tooltipPosition=\"top\" [disabled]=\"!rowData.allowEdit\" (click)=\"deleteLinkItem(rowData)\"></button>\r\n </ng-template>\r\n <ng-template #fileDinhKem let-rowData=\"rowData\">\r\n <file-manager [fileDataService]=\"fileDataService\" [readonly]=\"true\" [serviceCode]=\"rowData.serviceCode\"\r\n [entity]=\"rowData.entity\" [entityKey]=\"rowData.entityKey\" [layout]=\"layoutFile.SIMPLE\">\r\n </file-manager>\r\n\r\n </ng-template>\r\n</crud-list>\r\n\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" (onHide)=\"showDetailForm = false\">\r\n <base-congviec-dinhkem-form #formBase [taskId]=\"taskId\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [model]=\"formModel\" (onSaved)=\"showDetailForm = false;crudList.reload()\" (onCancel)=\"_handleCancel($event)\"\r\n (onAfterSaved)=\"onAfterSaved($event)\">\r\n </base-congviec-dinhkem-form>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showAttachLinkBox\" #dialog2 [maximizable]=\"false\" [header]=\"'Nh\u1EADp li\u00EAn k\u1EBFt' | translate\"\r\n [popupSize]=\"{ width: 600, height: 50}\" (onHide)=\"showAttachLinkBox = false; typedLink=''\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-grid\">\r\n <div class=\"p-md-10\">\r\n <input #input type=\"text\" placeholder=\"Nh\u1EADp li\u00EAn k\u1EBFt sao ch\u00E9p t\u1EEB ph\u00E2n h\u1EC7 kh\u00E1c...\" pInputText\r\n class=\"p-col-12\" [(ngModel)]=\"typedLink\" (keyup.enter)=\"addAttachLink()\" />\r\n </div>\r\n <div class=\"p-md-2\">\r\n <button type=\"button\" pButton class=\"p-button-primary p-col-12\" label=\"Ok\"\r\n [disabled]=\"typedLink != ''? null : true\" (click)=\"addAttachLink()\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <after-view-checked (loaded)=\"focusInput(input)\"></after-view-checked>\r\n</tn-dialog>\r\n\r\n<!-- <tn-dialog *ngIf=\"modelView.showEditForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"modelView.header | translate\" [popupSize]=\"modelView.popupSize\" [useDefaultScrollBar]=\"true\"\r\n (onHide)=\"modelView.showEditForm = false\">\r\n <div>123</div>\r\n <iframe style=\"border: none; width: 100%; height: calc(100% - 0.5rem);\"\r\n [src]=\"modelView.data.link | safeUrl\"></iframe>\r\n</tn-dialog> -->\r\n<!-- <div *ngIf=\"modelView.showEditForm\">\r\n <iframe #ifr style=\"border: none; width: 100%; height: calc(100% - 0.5rem);\"\r\n [src]=\"modelView.data.link | safeUrl\"></iframe>\r\n</div> -->" }]
|
|
@@ -269,7 +269,7 @@ export class BaseCongViecFormComponent extends DataFormBase {
|
|
|
269
269
|
}
|
|
270
270
|
}
|
|
271
271
|
BaseCongViecFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: BaseCongViecFormComponent, deps: [{ token: i0.Injector }, { token: i1.ComponentService }, { token: i2.CongViecService }, { token: i3.DmLoaiCongViecService }, { token: i4.DmLinhVucCongViecService }, { token: i5.DmPriorityService }, { token: i6.WorkflowPermissionDetailService }], target: i0.ɵɵFactoryTarget.Component });
|
|
272
|
-
BaseCongViecFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: BaseCongViecFormComponent, selector: "base-congviec-form", inputs: { itemId: "itemId", crudList: "crudList", control: "control", tenCongViec: "tenCongViec" }, outputs: { onInit: "onInit", onAfterInserted: "onAfterInserted" }, providers: [ComponentContextService], viewQueries: [{ propertyName: "formNextFirstStep", first: true, predicate: CongViecNextFirstStepComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"contentTask\"></ng-container>\r\n<ng-template #contentTask>\r\n <tn-custom-scrollbar>\r\n <div *ngIf=\"idLoaiCongViec === 'f51ca5f6-d266-4521-a633-e2f9f8528aaf'\" class=\"note\"\r\n style=\"padding: 0.5rem 1rem;\">\r\n <b>Ghi ch\u00FA</b>: Vui l\u00F2ng chuy\u1EC3n sang ph\u00E2n h\u1EC7 V\u0103n b\u1EA3n \u0111\u1EC3 t\u1EA1o D\u1EF1 th\u1EA3o v\u0103n b\u1EA3n \u0111i. Link:\r\n <a href=\"https://usmart.utc.edu.vn/vanban/vanbandi/du-thao\" target=\"_blank\">\r\n https://usmart.utc.edu.vn/vanban/vanbandi/du-thao</a>\r\n </div>\r\n\r\n <crud-form #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\"\r\n [autoFocus]=\"autoFocus\" (onFormReady)=\"_handleFormReady($event)\">\r\n </crud-form>\r\n <base-congviec-dinhkem [loadDetailFromQueryParam]=\"false\" [formState]=\"model.formState\"\r\n [taskId]=\"model.data.id\">\r\n </base-congviec-dinhkem>\r\n <div class=\"tab-child\">\r\n <tn-tabview [data]=\"tabDataChild\" (onTabChange)=\"onTabChange($event)\">\r\n <ng-template #fileDinhKem>\r\n <file-manager [loadDetailFromQueryParam]=\"false\" [serviceCode]=\"setting.baseService.serviceCode\"\r\n [entity]=\"setting.baseService.entityName\" [entityKey]=\"model.data.id\"\r\n [readonly]=\"model.formState == enumFormState.VIEW\">\r\n </file-manager>\r\n </ng-template>\r\n <ng-template #taskChild>\r\n <ng-container *ngTemplateOutlet=\"customTemplate['listCongViecCon']; context: {\r\n formState: model.formState, loaiDanhSach: enumLoaiDanhSachCongViec.CongViecCon, idCongViec: model.data.id\r\n }\"></ng-container>\r\n </ng-template>\r\n <ng-template #taskLienQuan>\r\n <ng-container *ngTemplateOutlet=\"customTemplate['listCongViecCon']; context: {\r\n formState: model.formState, loaiDanhSach: enumLoaiDanhSachCongViec.CongViecLienQuan, idCongViec: model.data.id\r\n }\"></ng-container>\r\n </ng-template>\r\n <!-- <ng-template #traoDoiCongViec>\r\n <div style=\"height: 350px;\">\r\n <chat-box [showSendMessageBox]=\"false\" [serviceCode]=\"'congviec'\" [entity]=\"'congviec'\"\r\n [taskId]=\"model.data.id\" [parentModel]=\"model\" [parentContext]=\"context\" [users]=\"users\"></chat-box>\r\n </div>\r\n <chat-send-message-box [parentContext]=\"context\">\r\n </chat-send-message-box>\r\n </ng-template> -->\r\n </tn-tabview>\r\n </div>\r\n </tn-custom-scrollbar>\r\n</ng-template>\r\n<ng-template #buttonTemplate>\r\n <button *ngFor=\"let butt of this.buttons\" pButton [icon]=\"butt.icon\" [label]=\"butt.label\" class=\"p-button-text\"\r\n (click)=\"butt.command()\">\r\n </button>\r\n <button *ngIf=\"!model.data.__disableEdit && !__isFormView\" type=\"button\" pButton icon=\"pi pi-save\"\r\n class=\"p-button-text\" [label]=\"'FORM.SAVE' | translate\" (click)=\"_handleSave($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n</ng-template>", styles: [".tab-child{padding:1em}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i8.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "label", "icon"] }, { kind: "component", type: i9.CrudFormComponent, selector: "crud-form", inputs: ["setting", "context", "filesUploaded", "isViewMode", "disableKeypressControl", "disableCaching", "styleClass", "useGridTemplate", "formId", "formClass", "autoFocus", "trapFocus", "data", "formState"], outputs: ["onFormReady", "onControlReady", "onAllControlReady", "onModelChanged", "dataChange", "onChange", "onAfterTrinhKy"] }, { kind: "component", type: i10.BaseCongviecDinhkemComponent, selector: "base-congviec-dinhkem", inputs: ["formState", "taskId"] }, { kind: "component", type: i11.TnCustomScrollbarComponent, selector: "tn-custom-scrollbar", inputs: ["style", "useDefaultScrollBar", "autoMode", "class", "config", "whiteBackGround", "showScrollHorizontal"], outputs: ["scrollY", "scrollUp", "scrollDown", "scrollLeft", "scrollRight", "scrollYReachEnd", "scrollYReachStart", "scrollXReachEnd", "scrollXReachStart"] }, { kind: "component", type: i12.TnTabViewComponent, selector: "tn-tabview", inputs: ["vertical", "data", "allowViewAll", "activeCode", "isDynamicHeight"], outputs: ["activeCodeChange", "tabContentChange"] }, { kind: "component", type: i13.FileManagerComponent, selector: "file-manager", inputs: ["control", "fileDataService", "layout", "hiddenCreateFolder", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageSummary", "invalidFileLimitMessageDetail", "dataType", "rootFolderName", "serviceCode", "entity", "entityKey", "readonly", "inTaiLieu", "inTaiLieuChung", "copyToFolderId", "value", "multipleCheckWhenClickRow"], outputs: ["onInit", "onReady", "entityKeyChange", "closePopup", "valueChange", "onChanged", "onSelected"] }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] });
|
|
272
|
+
BaseCongViecFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: BaseCongViecFormComponent, selector: "base-congviec-form", inputs: { itemId: "itemId", crudList: "crudList", control: "control", tenCongViec: "tenCongViec" }, outputs: { onInit: "onInit", onAfterInserted: "onAfterInserted" }, providers: [ComponentContextService], viewQueries: [{ propertyName: "formNextFirstStep", first: true, predicate: CongViecNextFirstStepComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"contentTask\"></ng-container>\r\n<ng-template #contentTask>\r\n <tn-custom-scrollbar>\r\n <div *ngIf=\"idLoaiCongViec === 'f51ca5f6-d266-4521-a633-e2f9f8528aaf'\" class=\"note\"\r\n style=\"padding: 0.5rem 1rem;\">\r\n <b>Ghi ch\u00FA</b>: Vui l\u00F2ng chuy\u1EC3n sang ph\u00E2n h\u1EC7 V\u0103n b\u1EA3n \u0111\u1EC3 t\u1EA1o D\u1EF1 th\u1EA3o v\u0103n b\u1EA3n \u0111i. Link:\r\n <a href=\"https://usmart.utc.edu.vn/vanban/vanbandi/du-thao\" target=\"_blank\">\r\n https://usmart.utc.edu.vn/vanban/vanbandi/du-thao</a>\r\n </div>\r\n\r\n <crud-form #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\"\r\n [autoFocus]=\"autoFocus\" (onFormReady)=\"_handleFormReady($event)\">\r\n </crud-form>\r\n <base-congviec-dinhkem [loadDetailFromQueryParam]=\"false\" [formState]=\"model.formState\"\r\n [taskId]=\"model.data.id\">\r\n </base-congviec-dinhkem>\r\n <div class=\"tab-child\">\r\n <tn-tabview [data]=\"tabDataChild\" (onTabChange)=\"onTabChange($event)\">\r\n <ng-template #fileDinhKem>\r\n <file-manager [loadDetailFromQueryParam]=\"false\" [serviceCode]=\"setting.baseService.serviceCode\"\r\n [entity]=\"setting.baseService.entityName\" [entityKey]=\"model.data.id\"\r\n [readonly]=\"model.formState == enumFormState.VIEW\">\r\n </file-manager>\r\n </ng-template>\r\n <ng-template #taskChild>\r\n <ng-container *ngTemplateOutlet=\"customTemplate['listCongViecCon']; context: {\r\n formState: model.formState, loaiDanhSach: enumLoaiDanhSachCongViec.CongViecCon, idCongViec: model.data.id\r\n }\"></ng-container>\r\n </ng-template>\r\n <ng-template #taskLienQuan>\r\n <ng-container *ngTemplateOutlet=\"customTemplate['listCongViecCon']; context: {\r\n formState: model.formState, loaiDanhSach: enumLoaiDanhSachCongViec.CongViecLienQuan, idCongViec: model.data.id\r\n }\"></ng-container>\r\n </ng-template>\r\n <!-- <ng-template #traoDoiCongViec>\r\n <div style=\"height: 350px;\">\r\n <chat-box [showSendMessageBox]=\"false\" [serviceCode]=\"'congviec'\" [entity]=\"'congviec'\"\r\n [taskId]=\"model.data.id\" [parentModel]=\"model\" [parentContext]=\"context\" [users]=\"users\"></chat-box>\r\n </div>\r\n <chat-send-message-box [parentContext]=\"context\">\r\n </chat-send-message-box>\r\n </ng-template> -->\r\n </tn-tabview>\r\n </div>\r\n </tn-custom-scrollbar>\r\n</ng-template>\r\n<ng-template #buttonTemplate>\r\n <button *ngFor=\"let butt of this.buttons\" pButton [icon]=\"butt.icon\" [label]=\"butt.label\" class=\"p-button-text\"\r\n (click)=\"butt.command()\">\r\n </button>\r\n <button *ngIf=\"!model.data.__disableEdit && !__isFormView\" type=\"button\" pButton icon=\"pi pi-save\"\r\n class=\"p-button-text\" [label]=\"'FORM.SAVE' | translate\" (click)=\"_handleSave($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n</ng-template>", styles: [".tab-child{padding:1em}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i8.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i9.CrudFormComponent, selector: "crud-form", inputs: ["setting", "context", "filesUploaded", "isViewMode", "disableKeypressControl", "disableCaching", "styleClass", "useGridTemplate", "formId", "formClass", "autoFocus", "trapFocus", "data", "formState"], outputs: ["onFormReady", "onControlReady", "onAllControlReady", "onModelChanged", "dataChange", "onChange", "onAfterTrinhKy"] }, { kind: "component", type: i10.BaseCongviecDinhkemComponent, selector: "base-congviec-dinhkem", inputs: ["formState", "taskId"] }, { kind: "component", type: i11.TnCustomScrollbarComponent, selector: "tn-custom-scrollbar", inputs: ["style", "useDefaultScrollBar", "autoMode", "class", "config", "whiteBackGround", "showScrollHorizontal"], outputs: ["scrollY", "scrollUp", "scrollDown", "scrollLeft", "scrollRight", "scrollYReachEnd", "scrollYReachStart", "scrollXReachEnd", "scrollXReachStart"] }, { kind: "component", type: i12.TnTabViewComponent, selector: "tn-tabview", inputs: ["vertical", "data", "allowViewAll", "activeCode", "isDynamicHeight"], outputs: ["activeCodeChange", "tabContentChange"] }, { kind: "component", type: i13.FileManagerComponent, selector: "file-manager", inputs: ["control", "fileDataService", "layout", "hiddenCreateFolder", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageSummary", "invalidFileLimitMessageDetail", "dataType", "rootFolderName", "serviceCode", "entity", "entityKey", "readonly", "inTaiLieu", "inTaiLieuChung", "copyToFolderId", "value", "multipleCheckWhenClickRow"], outputs: ["onInit", "onReady", "entityKeyChange", "closePopup", "valueChange", "onChanged", "onSelected"] }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] });
|
|
273
273
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: BaseCongViecFormComponent, decorators: [{
|
|
274
274
|
type: Component,
|
|
275
275
|
args: [{ selector: 'base-congviec-form', providers: [ComponentContextService], template: "<ng-container *ngTemplateOutlet=\"contentTask\"></ng-container>\r\n<ng-template #contentTask>\r\n <tn-custom-scrollbar>\r\n <div *ngIf=\"idLoaiCongViec === 'f51ca5f6-d266-4521-a633-e2f9f8528aaf'\" class=\"note\"\r\n style=\"padding: 0.5rem 1rem;\">\r\n <b>Ghi ch\u00FA</b>: Vui l\u00F2ng chuy\u1EC3n sang ph\u00E2n h\u1EC7 V\u0103n b\u1EA3n \u0111\u1EC3 t\u1EA1o D\u1EF1 th\u1EA3o v\u0103n b\u1EA3n \u0111i. Link:\r\n <a href=\"https://usmart.utc.edu.vn/vanban/vanbandi/du-thao\" target=\"_blank\">\r\n https://usmart.utc.edu.vn/vanban/vanbandi/du-thao</a>\r\n </div>\r\n\r\n <crud-form #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\"\r\n [autoFocus]=\"autoFocus\" (onFormReady)=\"_handleFormReady($event)\">\r\n </crud-form>\r\n <base-congviec-dinhkem [loadDetailFromQueryParam]=\"false\" [formState]=\"model.formState\"\r\n [taskId]=\"model.data.id\">\r\n </base-congviec-dinhkem>\r\n <div class=\"tab-child\">\r\n <tn-tabview [data]=\"tabDataChild\" (onTabChange)=\"onTabChange($event)\">\r\n <ng-template #fileDinhKem>\r\n <file-manager [loadDetailFromQueryParam]=\"false\" [serviceCode]=\"setting.baseService.serviceCode\"\r\n [entity]=\"setting.baseService.entityName\" [entityKey]=\"model.data.id\"\r\n [readonly]=\"model.formState == enumFormState.VIEW\">\r\n </file-manager>\r\n </ng-template>\r\n <ng-template #taskChild>\r\n <ng-container *ngTemplateOutlet=\"customTemplate['listCongViecCon']; context: {\r\n formState: model.formState, loaiDanhSach: enumLoaiDanhSachCongViec.CongViecCon, idCongViec: model.data.id\r\n }\"></ng-container>\r\n </ng-template>\r\n <ng-template #taskLienQuan>\r\n <ng-container *ngTemplateOutlet=\"customTemplate['listCongViecCon']; context: {\r\n formState: model.formState, loaiDanhSach: enumLoaiDanhSachCongViec.CongViecLienQuan, idCongViec: model.data.id\r\n }\"></ng-container>\r\n </ng-template>\r\n <!-- <ng-template #traoDoiCongViec>\r\n <div style=\"height: 350px;\">\r\n <chat-box [showSendMessageBox]=\"false\" [serviceCode]=\"'congviec'\" [entity]=\"'congviec'\"\r\n [taskId]=\"model.data.id\" [parentModel]=\"model\" [parentContext]=\"context\" [users]=\"users\"></chat-box>\r\n </div>\r\n <chat-send-message-box [parentContext]=\"context\">\r\n </chat-send-message-box>\r\n </ng-template> -->\r\n </tn-tabview>\r\n </div>\r\n </tn-custom-scrollbar>\r\n</ng-template>\r\n<ng-template #buttonTemplate>\r\n <button *ngFor=\"let butt of this.buttons\" pButton [icon]=\"butt.icon\" [label]=\"butt.label\" class=\"p-button-text\"\r\n (click)=\"butt.command()\">\r\n </button>\r\n <button *ngIf=\"!model.data.__disableEdit && !__isFormView\" type=\"button\" pButton icon=\"pi pi-save\"\r\n class=\"p-button-text\" [label]=\"'FORM.SAVE' | translate\" (click)=\"_handleSave($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n</ng-template>", styles: [".tab-child{padding:1em}\n"] }]
|
|
@@ -435,7 +435,7 @@ export class BaseCongViecComponent extends DataListBase {
|
|
|
435
435
|
}
|
|
436
436
|
}
|
|
437
437
|
BaseCongViecComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: BaseCongViecComponent, deps: [{ token: i0.Injector }, { token: i1.EnvironmentService }, { token: i2.CongViecService }, { token: i3.DmLoaiCongViecService }, { token: i4.DmLinhVucCongViecService }, { token: i5.DmPriorityService }, { token: i6.CauHinhWorkflowService }, { token: i7.CongViecLienQuanService }, { token: i8.CongViecDinhKemService }, { token: i9.CongViecThayDoiService }], target: i0.ɵɵFactoryTarget.Component });
|
|
438
|
-
BaseCongViecComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: BaseCongViecComponent, selector: "base-congviec", inputs: { itemId: "itemId", serviceCode: "serviceCode", entity: "entity", itemIdAttach: "itemIdAttach", stateCode: "stateCode", isPicker: "isPicker", loaiDanhSach: "loaiDanhSach", idCongViec: "idCongViec", ids: "ids", isFromDashboard: "isFromDashboard", formState: "formState", isChildView: "isChildView" }, outputs: { idsChange: "idsChange" }, providers: [ComponentContextService], viewQueries: [{ propertyName: "congViecForm", first: true, predicate: ["formBase"], descendants: true }, { propertyName: "congViecPicker", first: true, predicate: ["congViecPicker"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"hiddenAdd\"\r\n [hiddenEdit]=\"hiddenEdit\" [hiddenDelete]=\"hiddenDelete\" [hiddenCopyLink]=\"true\" [hiddenAdd]=\"isFromDashboard\"\r\n [showScrollHorizontal]=\"true\" [menuButtons]=\"getMenuButtons\" (onCopyLink)=\"_copyLink($event)\"\r\n (onCopyLinkMultiple)=\"_copyLinkMultiple()\" (onReload)=\"_triggerProcessData($event)\" (onAdd)=\"addCongViec($event)\"\r\n (onEdit)=\"_edit($event)\" (onView)=\"_edit($event)\" (onDelete)=\"_delete($event)\"\r\n (onDeleteMultiple)=\"_deleteMultiple($event)\" (onReloaded)=\"_unmarkLoading()\"\r\n (onChangedStatusWorkflow)=\"handleChangedStatusWorkflow($event)\">\r\n <ng-template #buttonAfterToolbar>\r\n <button *ngIf=\"loaiDanhSach > 0 && !isPicker\" type=\"button\" pButton pRipple label=\"Ch\u1ECDn c\u00F4ng vi\u1EC7c\"\r\n icon=\"pi pi-plus\" class=\"p-button-text p-button-success\" (click)=\"onChonCongViec()\"></button>\r\n <button type=\"button\" pButton style=\"display: none\" icon=\"pi pi-replay\" label=\"\u0110\u1ED3ng b\u1ED9 quy\u1EC1n\"\r\n class=\"p-button-text\" (click)=\"triggerSyncPermission()\"></button>\r\n </ng-template>\r\n <ng-template #congViecInfo let-rowData=\"rowData\">\r\n <div class=\"container-task-info\">\r\n <div class=\"cell-task-info\">\r\n {{rowData.ten}}\r\n </div>\r\n <div class=\"percent-done\">\r\n <div class=\"detail transition-width\" [ngStyle]=\"{\r\n width: rowData.percentWidth\r\n }\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #idPriority let-rowData=\"rowData\">\r\n <div class=\"priority\">\r\n <span [ngStyle]=\"{\r\n color: rowData.priorityColor,\r\n background: rowData.priorityBackground\r\n }\">{{rowData.stridPriority}}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template *ngIf=\"loaiDanhSach > 0\" #function let-rowData=\"rowData\" let-crudList=\"crudList\">\r\n <button type=\"button\" pButton pRipple pTooltip=\"{{'FORM.DELETE' | translate}}\" tooltipPosition=\"top\"\r\n class=\"p-button-rounded p-button-text p-button-danger link-or-action\" icon=\"pi pi-trash\"\r\n (click)=\"deleteCongViecTheoLoaiDanhSach(rowData)\"></button>\r\n </ng-template>\r\n</crud-list>\r\n\r\n<tn-dialog *ngIf=\"loaiCongViecModel.showEditForm\" [styleClass]=\"'tn-form-dialog'\"\r\n [header]=\"loaiCongViecModel.header | translate\" [popupSize]=\"loaiCongViecModel.popupSize\"\r\n (onHide)=\"loaiCongViecModel.showEditForm = false\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-grid\">\r\n <div class=\"p-md-10 tn-dropdown p-fluid\">\r\n <dropdown [control]=\"searchSchema.loaiCongViec\" [(value)]=\"searchData.loaiCongViec\"></dropdown>\r\n </div>\r\n <div class=\"p-md-2\">\r\n <button type=\"button\" pButton class=\"p-button-primary p-col-12\" label=\"Ok\"\r\n (click)=\"showFormAddTask($event)\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" [useDefaultScrollBar]=\"true\"\r\n (onHide)=\"showDetailForm = false\">\r\n <base-congviec-form #formBase [parentModel]=\"model\" [parentSetting]=\"setting\" [parentContext]=\"context\"\r\n [model]=\"formModel\" [crudList]=\"crudList\" [itemId]=\"itemId\" (onSaved)=\"handleSaved($event)\"\r\n (onCancel)=\"_handleCancel($event)\" (onAfterInserted)=\"handleAfterInserted($event)\">\r\n </base-congviec-form>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showPickerForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"'Ch\u1ECDn c\u00F4ng vi\u1EC7c' | translate\" [popupSize]=\"setting.popupSize\" [showFooter]=\"true\"\r\n [useDefaultScrollBar]=\"true\" (onHide)=\"showPickerForm = false\">\r\n <base-congviec #congViecPicker [isPicker]=\"true\" [formState]=\"formState\" [loaiDanhSach]=\"loaiDanhSach\"\r\n [idCongViec]=\"idCongViec\">\r\n </base-congviec>\r\n <ng-template #footer>\r\n <button type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\" [label]=\"'Ch\u1ECDn' | translate\"\r\n (click)=\"onSelectCongViec()\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"showPickerForm=false\"></button>\r\n </ng-template>\r\n</tn-dialog>", styles: [".container-task-info .percent-done{position:relative;border-radius:2px;background-color:#f0f0f0;height:5px;margin-top:5px;overflow:hidden}.container-task-info .percent-done .detail{position:absolute;left:0;top:0;height:5px;border-radius:2px;font-size:13px;text-align:center;background:#3eb839}.priority{text-align:center}.priority>span{padding:3px 7px;border-radius:3px;font-size:.8em}\n"], dependencies: [{ kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i11.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "label", "icon"] }, { kind: "directive", type: i12.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "tooltipZIndex", "escape", "
|
|
438
|
+
BaseCongViecComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: BaseCongViecComponent, selector: "base-congviec", inputs: { itemId: "itemId", serviceCode: "serviceCode", entity: "entity", itemIdAttach: "itemIdAttach", stateCode: "stateCode", isPicker: "isPicker", loaiDanhSach: "loaiDanhSach", idCongViec: "idCongViec", ids: "ids", isFromDashboard: "isFromDashboard", formState: "formState", isChildView: "isChildView" }, outputs: { idsChange: "idsChange" }, providers: [ComponentContextService], viewQueries: [{ propertyName: "congViecForm", first: true, predicate: ["formBase"], descendants: true }, { propertyName: "congViecPicker", first: true, predicate: ["congViecPicker"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"hiddenAdd\"\r\n [hiddenEdit]=\"hiddenEdit\" [hiddenDelete]=\"hiddenDelete\" [hiddenCopyLink]=\"true\" [hiddenAdd]=\"isFromDashboard\"\r\n [showScrollHorizontal]=\"true\" [menuButtons]=\"getMenuButtons\" (onCopyLink)=\"_copyLink($event)\"\r\n (onCopyLinkMultiple)=\"_copyLinkMultiple()\" (onReload)=\"_triggerProcessData($event)\" (onAdd)=\"addCongViec($event)\"\r\n (onEdit)=\"_edit($event)\" (onView)=\"_edit($event)\" (onDelete)=\"_delete($event)\"\r\n (onDeleteMultiple)=\"_deleteMultiple($event)\" (onReloaded)=\"_unmarkLoading()\"\r\n (onChangedStatusWorkflow)=\"handleChangedStatusWorkflow($event)\">\r\n <ng-template #buttonAfterToolbar>\r\n <button *ngIf=\"loaiDanhSach > 0 && !isPicker\" type=\"button\" pButton pRipple label=\"Ch\u1ECDn c\u00F4ng vi\u1EC7c\"\r\n icon=\"pi pi-plus\" class=\"p-button-text p-button-success\" (click)=\"onChonCongViec()\"></button>\r\n <button type=\"button\" pButton style=\"display: none\" icon=\"pi pi-replay\" label=\"\u0110\u1ED3ng b\u1ED9 quy\u1EC1n\"\r\n class=\"p-button-text\" (click)=\"triggerSyncPermission()\"></button>\r\n </ng-template>\r\n <ng-template #congViecInfo let-rowData=\"rowData\">\r\n <div class=\"container-task-info\">\r\n <div class=\"cell-task-info\">\r\n {{rowData.ten}}\r\n </div>\r\n <div class=\"percent-done\">\r\n <div class=\"detail transition-width\" [ngStyle]=\"{\r\n width: rowData.percentWidth\r\n }\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #idPriority let-rowData=\"rowData\">\r\n <div class=\"priority\">\r\n <span [ngStyle]=\"{\r\n color: rowData.priorityColor,\r\n background: rowData.priorityBackground\r\n }\">{{rowData.stridPriority}}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template *ngIf=\"loaiDanhSach > 0\" #function let-rowData=\"rowData\" let-crudList=\"crudList\">\r\n <button type=\"button\" pButton pRipple pTooltip=\"{{'FORM.DELETE' | translate}}\" tooltipPosition=\"top\"\r\n class=\"p-button-rounded p-button-text p-button-danger link-or-action\" icon=\"pi pi-trash\"\r\n (click)=\"deleteCongViecTheoLoaiDanhSach(rowData)\"></button>\r\n </ng-template>\r\n</crud-list>\r\n\r\n<tn-dialog *ngIf=\"loaiCongViecModel.showEditForm\" [styleClass]=\"'tn-form-dialog'\"\r\n [header]=\"loaiCongViecModel.header | translate\" [popupSize]=\"loaiCongViecModel.popupSize\"\r\n (onHide)=\"loaiCongViecModel.showEditForm = false\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-grid\">\r\n <div class=\"p-md-10 tn-dropdown p-fluid\">\r\n <dropdown [control]=\"searchSchema.loaiCongViec\" [(value)]=\"searchData.loaiCongViec\"></dropdown>\r\n </div>\r\n <div class=\"p-md-2\">\r\n <button type=\"button\" pButton class=\"p-button-primary p-col-12\" label=\"Ok\"\r\n (click)=\"showFormAddTask($event)\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" [useDefaultScrollBar]=\"true\"\r\n (onHide)=\"showDetailForm = false\">\r\n <base-congviec-form #formBase [parentModel]=\"model\" [parentSetting]=\"setting\" [parentContext]=\"context\"\r\n [model]=\"formModel\" [crudList]=\"crudList\" [itemId]=\"itemId\" (onSaved)=\"handleSaved($event)\"\r\n (onCancel)=\"_handleCancel($event)\" (onAfterInserted)=\"handleAfterInserted($event)\">\r\n </base-congviec-form>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showPickerForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"'Ch\u1ECDn c\u00F4ng vi\u1EC7c' | translate\" [popupSize]=\"setting.popupSize\" [showFooter]=\"true\"\r\n [useDefaultScrollBar]=\"true\" (onHide)=\"showPickerForm = false\">\r\n <base-congviec #congViecPicker [isPicker]=\"true\" [formState]=\"formState\" [loaiDanhSach]=\"loaiDanhSach\"\r\n [idCongViec]=\"idCongViec\">\r\n </base-congviec>\r\n <ng-template #footer>\r\n <button type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\" [label]=\"'Ch\u1ECDn' | translate\"\r\n (click)=\"onSelectCongViec()\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"showPickerForm=false\"></button>\r\n </ng-template>\r\n</tn-dialog>", styles: [".container-task-info .percent-done{position:relative;border-radius:2px;background-color:#f0f0f0;height:5px;margin-top:5px;overflow:hidden}.container-task-info .percent-done .detail{position:absolute;left:0;top:0;height:5px;border-radius:2px;font-size:13px;text-align:center;background:#3eb839}.priority{text-align:center}.priority>span{padding:3px 7px;border-radius:3px;font-size:.8em}\n"], dependencies: [{ kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i11.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i12.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i13.CrudListComponent, selector: "crud-list" }, { kind: "component", type: BaseCongViecComponent, selector: "base-congviec", inputs: ["itemId", "serviceCode", "entity", "itemIdAttach", "stateCode", "isPicker", "loaiDanhSach", "idCongViec", "ids", "isFromDashboard", "formState", "isChildView"], outputs: ["idsChange"] }, { kind: "component", type: i14.BaseCongViecFormComponent, selector: "base-congviec-form", inputs: ["itemId", "crudList", "control", "tenCongViec"], outputs: ["onInit", "onAfterInserted"] }, { kind: "component", type: i15.DropdownComponent, selector: "dropdown", inputs: ["showClear", "disableDisplayFieldServerSearch", "filter", "control", "defaultLabel", "appendTo", "dataSource", "value", "itemSelectedStyleClass"], outputs: ["onInit", "onChanged", "onCollapse", "onExpand", "onDropdownClick", "onShow", "onShowSmartEvent", "onHide", "onHideSmartEvent", "onFocus", "onBlur", "onReady", "onDataSourceLoaded", "valueChange", "adjustValue"] }, { kind: "component", type: i16.TnDialogComponent, selector: "tn-dialog", inputs: ["maskClass", "styleClass", "scrollBarStyleClass", "useDefaultScrollBar", "visible", "disabledButton", "modal", "header", "popupSize", "closeOnEscape", "showFooter", "positionTop", "minY", "hiddenSave", "maximizable"], outputs: ["onSave", "onCancel", "onShow", "onHide"] }, { kind: "pipe", type: i17.TranslatePipe, name: "translate" }] });
|
|
439
439
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: BaseCongViecComponent, decorators: [{
|
|
440
440
|
type: Component,
|
|
441
441
|
args: [{ selector: 'base-congviec', providers: [ComponentContextService], template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"hiddenAdd\"\r\n [hiddenEdit]=\"hiddenEdit\" [hiddenDelete]=\"hiddenDelete\" [hiddenCopyLink]=\"true\" [hiddenAdd]=\"isFromDashboard\"\r\n [showScrollHorizontal]=\"true\" [menuButtons]=\"getMenuButtons\" (onCopyLink)=\"_copyLink($event)\"\r\n (onCopyLinkMultiple)=\"_copyLinkMultiple()\" (onReload)=\"_triggerProcessData($event)\" (onAdd)=\"addCongViec($event)\"\r\n (onEdit)=\"_edit($event)\" (onView)=\"_edit($event)\" (onDelete)=\"_delete($event)\"\r\n (onDeleteMultiple)=\"_deleteMultiple($event)\" (onReloaded)=\"_unmarkLoading()\"\r\n (onChangedStatusWorkflow)=\"handleChangedStatusWorkflow($event)\">\r\n <ng-template #buttonAfterToolbar>\r\n <button *ngIf=\"loaiDanhSach > 0 && !isPicker\" type=\"button\" pButton pRipple label=\"Ch\u1ECDn c\u00F4ng vi\u1EC7c\"\r\n icon=\"pi pi-plus\" class=\"p-button-text p-button-success\" (click)=\"onChonCongViec()\"></button>\r\n <button type=\"button\" pButton style=\"display: none\" icon=\"pi pi-replay\" label=\"\u0110\u1ED3ng b\u1ED9 quy\u1EC1n\"\r\n class=\"p-button-text\" (click)=\"triggerSyncPermission()\"></button>\r\n </ng-template>\r\n <ng-template #congViecInfo let-rowData=\"rowData\">\r\n <div class=\"container-task-info\">\r\n <div class=\"cell-task-info\">\r\n {{rowData.ten}}\r\n </div>\r\n <div class=\"percent-done\">\r\n <div class=\"detail transition-width\" [ngStyle]=\"{\r\n width: rowData.percentWidth\r\n }\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #idPriority let-rowData=\"rowData\">\r\n <div class=\"priority\">\r\n <span [ngStyle]=\"{\r\n color: rowData.priorityColor,\r\n background: rowData.priorityBackground\r\n }\">{{rowData.stridPriority}}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template *ngIf=\"loaiDanhSach > 0\" #function let-rowData=\"rowData\" let-crudList=\"crudList\">\r\n <button type=\"button\" pButton pRipple pTooltip=\"{{'FORM.DELETE' | translate}}\" tooltipPosition=\"top\"\r\n class=\"p-button-rounded p-button-text p-button-danger link-or-action\" icon=\"pi pi-trash\"\r\n (click)=\"deleteCongViecTheoLoaiDanhSach(rowData)\"></button>\r\n </ng-template>\r\n</crud-list>\r\n\r\n<tn-dialog *ngIf=\"loaiCongViecModel.showEditForm\" [styleClass]=\"'tn-form-dialog'\"\r\n [header]=\"loaiCongViecModel.header | translate\" [popupSize]=\"loaiCongViecModel.popupSize\"\r\n (onHide)=\"loaiCongViecModel.showEditForm = false\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-grid\">\r\n <div class=\"p-md-10 tn-dropdown p-fluid\">\r\n <dropdown [control]=\"searchSchema.loaiCongViec\" [(value)]=\"searchData.loaiCongViec\"></dropdown>\r\n </div>\r\n <div class=\"p-md-2\">\r\n <button type=\"button\" pButton class=\"p-button-primary p-col-12\" label=\"Ok\"\r\n (click)=\"showFormAddTask($event)\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" [useDefaultScrollBar]=\"true\"\r\n (onHide)=\"showDetailForm = false\">\r\n <base-congviec-form #formBase [parentModel]=\"model\" [parentSetting]=\"setting\" [parentContext]=\"context\"\r\n [model]=\"formModel\" [crudList]=\"crudList\" [itemId]=\"itemId\" (onSaved)=\"handleSaved($event)\"\r\n (onCancel)=\"_handleCancel($event)\" (onAfterInserted)=\"handleAfterInserted($event)\">\r\n </base-congviec-form>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showPickerForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"'Ch\u1ECDn c\u00F4ng vi\u1EC7c' | translate\" [popupSize]=\"setting.popupSize\" [showFooter]=\"true\"\r\n [useDefaultScrollBar]=\"true\" (onHide)=\"showPickerForm = false\">\r\n <base-congviec #congViecPicker [isPicker]=\"true\" [formState]=\"formState\" [loaiDanhSach]=\"loaiDanhSach\"\r\n [idCongViec]=\"idCongViec\">\r\n </base-congviec>\r\n <ng-template #footer>\r\n <button type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\" [label]=\"'Ch\u1ECDn' | translate\"\r\n (click)=\"onSelectCongViec()\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"showPickerForm=false\"></button>\r\n </ng-template>\r\n</tn-dialog>", styles: [".container-task-info .percent-done{position:relative;border-radius:2px;background-color:#f0f0f0;height:5px;margin-top:5px;overflow:hidden}.container-task-info .percent-done .detail{position:absolute;left:0;top:0;height:5px;border-radius:2px;font-size:13px;text-align:center;background:#3eb839}.priority{text-align:center}.priority>span{padding:3px 7px;border-radius:3px;font-size:.8em}\n"] }]
|
|
@@ -472,4 +472,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
|
|
|
472
472
|
}], idsChange: [{
|
|
473
473
|
type: Output
|
|
474
474
|
}] } });
|
|
475
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZ3ZpZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvY29uZ3ZpZWMvY29uZ3ZpZWMvY29uZ3ZpZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvY29uZ3ZpZWMvY29uZ3ZpZWMvY29uZ3ZpZWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFZLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5SCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixXQUFXLEVBQ1gsU0FBUyxFQUNaLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekYsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQVExRCxPQUFPLEVBQUUsd0JBQXdCLEVBQTJCLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFhcEYsTUFBTSxPQUFPLHFCQUFzQixTQUFRLFlBQVk7SUE0Q25ELFlBQ2MsU0FBbUIsRUFDbkIsbUJBQXVDLEVBQ3ZDLGdCQUFpQyxFQUNqQyxzQkFBNkMsRUFDN0MseUJBQW1ELEVBQ25ELGtCQUFxQyxFQUNyQyx1QkFBK0MsRUFDakQsd0JBQWlELEVBQ2pELHVCQUErQyxFQUMvQyx1QkFB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SztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRU8sR0FBRztzQkFBZixLQUFLO2dCQVNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YUxpc3RCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2RhdGEtbGlzdC1iYXNlJztcclxuaW1wb3J0IHsgRm9ybVN0YXRlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xyXG5pbXBvcnQge1xyXG4gICAgQ29sdW1uU2NoZW1hQmFzZSxcclxuICAgIERpYWxvZ01vZGVsLFxyXG4gICAgRHJvcGRvd25Db250cm9sU2NoZW1hLFxyXG4gICAgTW9kZWxTY2hlbWEsXHJcbiAgICBQb3B1cFNpemVcclxufSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgS2V5RmlsdGVyU3RhdGVCeU1lbnVDb25nVmllYywgVG9waWNSZWxvYWRDb25nVmllY1Y1IH0gZnJvbSAnLi4vLi4vY29uc3QvY29tbW9uJztcclxuaW1wb3J0IHsgSGVpZ2h0VHlwZSwgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9lbnVtcy9jb21tb24nO1xyXG5pbXBvcnQgeyBJQ29uZ1ZpZWNGb3JtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9pLWNvbmd2aWVjLWZvcm0nO1xyXG5pbXBvcnQgeyBHcmlkSW5mbyB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnZpcm9ubWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2F1SGluaFdvcmtmbG93U2VydmljZSB9IGZyb20gJy4uL2NhdWhpbmgtd29ya2Zsb3cvc2VydmljZXMvY2F1aGluaC13b3JrZmxvdy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRG1MaW5oVnVjQ29uZ1ZpZWNTZXJ2aWNlIH0gZnJvbSAnLi4vZG0tbGluaHZ1Yy1jb25ndmllYy9zZXJ2aWNlcy9kbS1saW5odnVjLWNvbmd2aWVjLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEbUxvYWlDb25nVmllY1NlcnZpY2UgfSBmcm9tICcuLi9kbS1sb2FpLWNvbmd2aWVjL3NlcnZpY2VzL2RtLWxvYWktY29uZ3ZpZWMuc2VydmljZSc7XHJcbmltcG9ydCB7IERtUHJpb3JpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vZG0tcHJpb3JpdHkvc2VydmljZXMvZG0tcHJpb3JpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudW1Mb2FpRGFuaFNhY2hDb25nVmllYywgRW51bVN0YXRlQnlNZW51Q29uZ1ZpZWMgfSBmcm9tICcuLi9tb2RlbHMvZW51bXMnO1xyXG5pbXBvcnQgeyBDb25nVmllY0RpbmhLZW1TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jb25ndmllYy1kaW5oa2VtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25nVmllY1RoYXlEb2lTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jb25ndmllYy10aGF5ZG9pLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25nVmllY1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2Nvbmd2aWVjLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25nVmllY0xpZW5RdWFuU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY29uZ3ZpZWNsaWVucXVhbi5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmFzZS1jb25ndmllYycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29uZ3ZpZWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY29uZ3ZpZWMuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW0NvbXBvbmVudENvbnRleHRTZXJ2aWNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEJhc2VDb25nVmllY0NvbXBvbmVudCBleHRlbmRzIERhdGFMaXN0QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuICAgIEBWaWV3Q2hpbGQoJ2Zvcm1CYXNlJywgeyBzdGF0aWM6IGZhbHNlIH0pIGNvbmdWaWVjRm9ybTogSUNvbmdWaWVjRm9ybTtcclxuICAgIEBWaWV3Q2hpbGQoJ2NvbmdWaWVjUGlja2VyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGNvbmdWaWVjUGlja2VyOiBCYXNlQ29uZ1ZpZWNDb21wb25lbnQ7XHJcbiAgICBASW5wdXQoKSBpdGVtSWQ6IHN0cmluZzsgLy8gSWQgY+G7p2EgYuG6o24gZ2hpIG3DoCBjw7RuZyB2aeG7h2MgZ+G6r24gdsOgbyAodHLGsOG7nW5nIGl0ZW1JZCBj4bunYSBjw7RuZyB2aeG7h2MpXHJcbiAgICBASW5wdXQoKSBzZXJ2aWNlQ29kZTogc3RyaW5nOyAvLyBzZXJ2aWNlIGNvZGUgY+G7p2EgYuG6o24gZ2hpIHRyb25nIGPDtG5nIHZp4buHYyDEkcOtbmgga8OobVxyXG4gICAgQElucHV0KCkgZW50aXR5OiBzdHJpbmc7IC8vIGLhuqNuZyBj4bunYSBi4bqjbiBnaGkgdHJvbmcgY8O0bmcgdmnhu4djIMSRw61uaCBrw6htXHJcbiAgICBASW5wdXQoKSBpdGVtSWRBdHRhY2g6IHN0cmluZzsgLy8gSWQgY+G7p2EgYuG6o24gZ2hpIHRyb25nIGPDtG5nIHZp4buHYyDEkcOtbmgga8OobVxyXG4gICAgQElucHV0KCkgc3RhdGVDb2RlOiBFbnVtU3RhdGVCeU1lbnVDb25nVmllYztcclxuICAgIEBJbnB1dCgpIGlzUGlja2VyOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgbG9haURhbmhTYWNoOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBpZENvbmdWaWVjOiBzdHJpbmc7XHJcbiAgICBfaWRzOiBzdHJpbmdbXVxyXG4gICAgQElucHV0KCkgc2V0IGlkcyh2YWx1ZTogc3RyaW5nW10pIHtcclxuICAgICAgICB0aGlzLl9pZHMgPSB2YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5iYXNlUmVhZHkpIHtcclxuICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IGlkcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faWRzO1xyXG4gICAgfVxyXG4gICAgQElucHV0KCkgaXNGcm9tRGFzaGJvYXJkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBmb3JtU3RhdGUgPSBGb3JtU3RhdGUuVklFVztcclxuICAgIEBJbnB1dCgpIGlzQ2hpbGRWaWV3ID0gZmFsc2U7XHJcblxyXG4gICAgQE91dHB1dCgpIGlkc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XHJcblxyXG4gICAgc2VhcmNoU2NoZW1hOiBhbnkgPSB7fTtcclxuICAgIHNlYXJjaERhdGE6IGFueSA9IHt9O1xyXG4gICAgZGljV29ya2Zsb3dCeUxvYWlDb25nVmllYyA9IHt9O1xyXG4gICAgZGljTG9haUNvbmdWaWVjID0ge307XHJcbiAgICBjb25nVmllY1ZpZXdNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XHJcbiAgICAgICAgaGVhZGVyOiAnWGVtIGNoaSB0aeG6v3QgY8O0bmcgdmnhu4djJ1xyXG4gICAgfSk7XHJcbiAgICBsb2FpQ29uZ1ZpZWNNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XHJcbiAgICAgICAgaGVhZGVyOiAnQ2jhu41uIGxv4bqhaSBjw7RuZyB2aeG7h2MnLFxyXG4gICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7IHdpZHRoOiA2MDAsIGhlaWdodDogMTIwIH0pXHJcbiAgICB9KTtcclxuICAgIHNob3dQaWNrZXJGb3JtOiBib29sZWFuO1xyXG4gICAgaGlkZGVuQWRkOiBib29sZWFuO1xyXG4gICAgaGlkZGVuRWRpdDogYm9vbGVhbjtcclxuICAgIGhpZGRlbkRlbGV0ZTogYm9vbGVhbjtcclxuICAgIHR5cGVkTGluazogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByb3RlY3RlZCBfZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9jb25nVmllY1NlcnZpY2U6IENvbmdWaWVjU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX2RtTG9haUNvbmdWaWVjU2VydmljZTogRG1Mb2FpQ29uZ1ZpZWNTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfZG1MaW5oVnVjQ29uZ1ZpZWNTZXJ2aWNlOiBEbUxpbmhWdWNDb25nVmllY1NlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9kbVByaW9yaXR5U2VydmljZTogRG1Qcmlvcml0eVNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9jYXVIaW5oV29ya2Zsb3dTZXJ2aWNlOiBDYXVIaW5oV29ya2Zsb3dTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2NvbmdWaWVjTGllblF1YW5TZXJ2aWNlOiBDb25nVmllY0xpZW5RdWFuU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9jb25nVmllY0RpbmhLZW1TZXJ2aWNlOiBDb25nVmllY0RpbmhLZW1TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2NvbmdWaWVjVGhheURvaVNlcnZpY2U6IENvbmdWaWVjVGhheURvaVNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XHJcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LmRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZUNvZGUgPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5kYXRhLnN0YXRlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcucG9wdXBTaXplLndpZHRoID0gMTM2MDtcclxuICAgICAgICB0aGlzLnNldHRpbmcucG9wdXBTaXplLmhlaWdodCA9IDc2MDtcclxuICAgICAgICB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UgPSB0aGlzLl9jb25nVmllY1NlcnZpY2U7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLm9iamVjdE5hbWUgPSAnY8O0bmcgdmnhu4djJztcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZ1dvcmtmbG93ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuaXNXb3JrZmxvd1RyZWUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2NvbmdWaWVjU2VydmljZS5hZGp1c3RTZXR0aW5nV29ya2Zsb3dGb3JDcnVkTGlzdCh0aGlzLnNldHRpbmcpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRnJvbURhc2hib2FyZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuUGFnZVRpdGxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlbkZ1bmN0aW9uQ29sdW1uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmxvYWlEYW5oU2FjaCA+IDApIHsgLy8gRGFuaCBzw6FjaCBjdiBjb24sIGN2IGxpw6puIHF1YW5cclxuICAgICAgICAgICAgdGhpcy5oaWRkZW5FZGl0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblBhZ2VUaXRsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nUGVybWlzc2lvbiA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNQaWNrZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZGVuQWRkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5GdW5jdGlvbkNvbHVtbiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuQWR2YW5jZVNlYXJjaCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbUlkQXR0YWNoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5DaGVja2JveCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZGVuQWRkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5oaWRkZW5FZGl0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5oaWRkZW5EZWxldGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc0NoaWxkVmlldykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtU3RhdGUgPT0gRm9ybVN0YXRlLlZJRVcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5Ub29sYmFyID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuaGVpZ2h0VHlwZSA9IEhlaWdodFR5cGUuZHluYW1pYztcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpeEhlaWdodFR5cGVJbkRpYWxvZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0ID0gWyd0ZW4nLCAnbW9UYSddO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5tb2RlbFNjaGVtYXMgPSBbXHJcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7IGZpZWxkOiAndGVuJywgbmFtZTogJ1TDqm4nLCBmdWxsTmFtZTogJ1TDqm4nLCBkZXNjcmlwdGlvbjogJ1TDqm4nIH0pLFxyXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoeyBmaWVsZDogJ21vVGEnLCBuYW1lOiAnTcO0IHThuqMnLCBmdWxsTmFtZTogJ03DtCB04bqjJywgZGVzY3JpcHRpb246ICdNw7QgdOG6oycgfSksXHJcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7IGZpZWxkOiAnbmdheUJhdERhdScsIGRhdGFUeXBlOiAnZGF0ZScsIG5hbWU6ICdOZ8OgeSBi4bqvdCDEkeG6p3UnLCBmdWxsTmFtZTogJ05nw6B5IGLhuq90IMSR4bqndScsIGRlc2NyaXB0aW9uOiAnTmfDoHkgYuG6r3QgxJHhuqd1JyB9KSxcclxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHsgZmllbGQ6ICduZ2F5S2V0VGh1YycsIGRhdGFUeXBlOiAnZGF0ZScsIG5hbWU6ICdOZ8OgeSBr4bq/dCB0aMO6YycsIGZ1bGxOYW1lOiAnTmfDoHkga+G6v3QgdGjDumMnLCBkZXNjcmlwdGlvbjogJ05nw6B5IGvhur90IHRow7pjJyB9KSxcclxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHsgZmllbGQ6ICdpZFByaW9yaXR5JywgbmFtZTogJ8SQ4buZIMawdSB0acOqbicsIGZ1bGxOYW1lOiAnxJDhu5kgxrB1IHRpw6puJywgZGVzY3JpcHRpb246ICfEkOG7mSDGsHUgdGnDqm4nIH0pLFxyXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoeyBmaWVsZDogJ2lkTG9haUNvbmdWaWVjJywgbmFtZTogJ0xv4bqhaSBjw7RuZyB2aeG7h2MnLCBmdWxsTmFtZTogJ0xv4bqhaSBjw7RuZyB2aeG7h2MnLCBkZXNjcmlwdGlvbjogJ0xv4bqhaSBjw7RuZyB2aeG7h2MnIH0pLFxyXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoeyBmaWVsZDogJ2lkTGluaFZ1YycsIG5hbWU6ICdMxKluaCB24buxYycsIGZ1bGxOYW1lOiAnTMSpbmggduG7sWMnLCBkZXNjcmlwdGlvbjogJ0zEqW5oIHbhu7FjJyB9KSxcclxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHsgZmllbGQ6ICdwaGFuVHJhbScsIGRhdGFUeXBlOiAnaW50JywgbmFtZTogJ1Bo4bqnbiB0csSDbScsIGZ1bGxOYW1lOiAnUGjhuqduIHRyxINtJywgZGVzY3JpcHRpb246ICdQaOG6p24gdHLEg20nIH0pXHJcbiAgICAgICAgXTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuY29scyA9IFtcclxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICd0ZW4nLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdjb25nVmllY0luZm8nLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxOHJlbSdcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnbmdheUJhdERhdScsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJzExMHB4JyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnbmdheUtldFRodWMnLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMTVweCcsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkTG9haUNvbmdWaWVjJyxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwcHgnLFxyXG4gICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMuX2RtTG9haUNvbmdWaWVjU2VydmljZSxcclxuICAgICAgICAgICAgICAgIGlzVHJlZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGZpZWxkVHJlZTogJ2lkUGFyZW50JyxcclxuICAgICAgICAgICAgICAgIHNlbGVjdERlc2NlbmRhbnQ6IHRydWVcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnaWRMaW5oVnVjJyxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwcHgnLFxyXG4gICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMuX2RtTGluaFZ1Y0NvbmdWaWVjU2VydmljZVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZFByaW9yaXR5JyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnaWRQcmlvcml0eScsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZVJlZkZpZWxkOiAnaWRQcmlvcml0eScsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJzgwcHgnLFxyXG4gICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMuX2RtUHJpb3JpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgZmllbGRQbHVzOiAnYmFja2dyb3VuZCxjb2xvcicsXHJcbiAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3c6IChyb3dJdGVtLCBkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93SXRlbS5wcmlvcml0eUNvbG9yID0gZGF0YS5jb2xvcjtcclxuICAgICAgICAgICAgICAgICAgICByb3dJdGVtLnByaW9yaXR5QmFja2dyb3VuZCA9IGRhdGEuYmFja2dyb3VuZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMucm9vdENvbnRleHQuc3Vic2NyaWJlKFRvcGljUmVsb2FkQ29uZ1ZpZWNWNSwgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVTY2hlbWFTZWFyY2goKTtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVNjaGVtYVNlYXJjaCgpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFNjaGVtYS5sb2FpQ29uZ1ZpZWMgPSBuZXcgRHJvcGRvd25Db250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdDaOG7jW4gbG/huqFpIGPDtG5nIHZp4buHYycsXHJcbiAgICAgICAgICAgIGJhc2VTZXJ2aWNlOiB0aGlzLl9kbUxvYWlDb25nVmllY1NlcnZpY2UsXHJcbiAgICAgICAgICAgIGxvYWRPbkluaXQ6IHRydWUsXHJcbiAgICAgICAgICAgIGlzVHJlZTogdHJ1ZSxcclxuICAgICAgICAgICAgZmllbGRUcmVlOiAnaWRQYXJlbnQnLFxyXG4gICAgICAgICAgICB2YWx1ZVBhcmVudFJvb3Q6IG51bGwsXHJcbiAgICAgICAgICAgIHNvcnRzOiBbeyBmaWVsZDogJ21hUGhhbkNhcCcsIGRpcjogMSB9XSxcclxuICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnM6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdoaWVuVGhpVHJvbmdDb25nVmllYycsIE9wZXJhdG9yLmVxdWFsLCB0cnVlKVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC51blN1YnNjcmliZShUb3BpY1JlbG9hZENvbmdWaWVjVjUpO1xyXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbW9kaWZ5R3JpZEluZm8oZ3JpZEluZm8/OiBHcmlkSW5mbykge1xyXG4gICAgICAgIGlmICh0aGlzLmlkcyAmJiAhdGhpcy5pZHMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFncmlkSW5mby5zb3J0cyB8fCAhZ3JpZEluZm8uc29ydHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGdyaWRJbmZvLnNvcnRzID0gW3sgZmllbGQ6ICdjcmVhdGVkJywgZGlyOiAtMSB9XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbUlkKSB7XHJcbiAgICAgICAgICAgIGdyaWRJbmZvLmZpbHRlcnMudW5zaGlmdCh0aGlzLm5ld0ZpbHRlcignaXRlbUlkJywgT3BlcmF0b3IuZXF1YWwsIHRoaXMuaXRlbUlkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaXRlbUlkQXR0YWNoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxzdElkID0gYXdhaXQgdGhpcy5nZXRJZHNDb25nVmllY0J5SXRlbUlkQXR0YWNoKCk7XHJcbiAgICAgICAgICAgIGlmICghbHN0SWQubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGdyaWRJbmZvLmZpbHRlcnMucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdpZCcsIE9wZXJhdG9yLmluLCBsc3RJZClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzRnJvbURhc2hib2FyZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZUNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGdyaWRJbmZvLmZpbHRlcnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcihLZXlGaWx0ZXJTdGF0ZUJ5TWVudUNvbmdWaWVjLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5zdGF0ZUNvZGUpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pZHMpIHtcclxuICAgICAgICAgICAgZ3JpZEluZm8uZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKCdpZCcsIE9wZXJhdG9yLmluLCB0aGlzLmlkcykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubG9haURhbmhTYWNoID09IEVudW1Mb2FpRGFuaFNhY2hDb25nVmllYy5Db25nVmllY0xpZW5RdWFuKSB7XHJcbiAgICAgICAgICAgIGdyaWRJbmZvLmZpbHRlcnMgPSBbXTtcclxuICAgICAgICAgICAgLy8gQ8O0bmcgdmnhu4djIGxpw6puIHF1YW5cclxuICAgICAgICAgICAgY29uc3QgaWRzQ29uZ1ZpZWNMaWVuUXVhbiA9IGF3YWl0IHRoaXMuZ2V0SWRzQ29uZ1ZpZWNMaWVuUXVhbigpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1BpY2tlcikge1xyXG4gICAgICAgICAgICAgICAgZ3JpZEluZm8uZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKCdpZCcsIE9wZXJhdG9yLm5vdEVxdWFsLCB0aGlzLmlkQ29uZ1ZpZWMpKTtcclxuICAgICAgICAgICAgICAgIGlmIChpZHNDb25nVmllY0xpZW5RdWFuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBncmlkSW5mby5maWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIoJ2lkJywgT3BlcmF0b3Iubm90SW4sIGlkc0NvbmdWaWVjTGllblF1YW4pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpZHNDb25nVmllY0xpZW5RdWFuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBncmlkSW5mby5maWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIoJ2lkJywgT3BlcmF0b3IuaW4sIGlkc0NvbmdWaWVjTGllblF1YW4pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmxvYWlEYW5oU2FjaCA9PSBFbnVtTG9haURhbmhTYWNoQ29uZ1ZpZWMuQ29uZ1ZpZWNDb24pIHtcclxuICAgICAgICAgICAgZ3JpZEluZm8uZmlsdGVycyA9IFtdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1BpY2tlcikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IFtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignaWRDaGEnLCBPcGVyYXRvci5pc051bGwsIHRydWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdpZCcsIE9wZXJhdG9yLm5vdEVxdWFsLCB0aGlzLmlkQ29uZ1ZpZWMpXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybVN0YXRlICE9PSBGb3JtU3RhdGUuQUREKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcnMgPSBhd2FpdCB0aGlzLl9jb25nVmllY1NlcnZpY2UuZ2V0RGV0YWlsKHRoaXMuaWRDb25nVmllYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFycy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJzLmRhdGEuaWRDaGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcignaWQnLCBPcGVyYXRvci5ub3RFcXVhbCwgcnMuZGF0YS5pZENoYSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZ3JpZEluZm8uZmlsdGVycy5wdXNoKC4uLmZpbHRlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZ3JpZEluZm8uZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKCdpZENoYScsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLmlkQ29uZ1ZpZWMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRJZHNDb25nVmllY0J5SXRlbUlkQXR0YWNoKCkge1xyXG4gICAgICAgIGNvbnN0IGxzdERpbmhLZW0gPSAoYXdhaXQgdGhpcy5fY29uZ1ZpZWNEaW5oS2VtU2VydmljZS5nZXRBbGwoW1xyXG4gICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignc2VydmljZUNvZGUnLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5zZXJ2aWNlQ29kZSksXHJcbiAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdlbnRpdHknLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5lbnRpdHkpLFxyXG4gICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignZW50aXR5S2V5JywgT3BlcmF0b3IuZXF1YWwsIHRoaXMuaXRlbUlkQXR0YWNoKSxcclxuICAgICAgICBdLCAnaWRDb25nVmllYycpKS5kYXRhO1xyXG4gICAgICAgIHJldHVybiBsc3REaW5oS2VtLm1hcChxID0+IHEuaWRDb25nVmllYyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYmVmb3JlUmVuZGVyRGF0YVNvdXJjZShkYXRhU291cmNlKSB7XHJcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWl0ZW0ucGhhblRyYW0pIGl0ZW0ucGhhblRyYW0gPSA1O1xyXG4gICAgICAgICAgICBpdGVtLnBlcmNlbnRXaWR0aCA9IGAke2l0ZW0ucGhhblRyYW19JWA7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvbWlzZUdldERhdGEoZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNGcm9tRGFzaGJvYXJkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSB7XHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLnBhcmVudE1vZGVsLnNlbGVjdGVkSXRlbS5maWx0ZXIsXHJcbiAgICAgICAgICAgICAgICBzdGF0ZUNvZGU6IHRoaXMucGFyZW50TW9kZWwuc2VsZWN0ZWRJdGVtLnN0YXRlQ29kZSxcclxuICAgICAgICAgICAgICAgIHN0YXRlQ29kZUJ5Vmlld0RvblZpOiB0aGlzLnBhcmVudE1vZGVsLnNlbGVjdGVkSXRlbS5zdGF0ZUNvZGVCeVZpZXdEb25WaSxcclxuICAgICAgICAgICAgICAgIGdyaWRJbmZvXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb25nVmllY1NlcnZpY2UuZ2V0TGlzdFRhc2tzRGFzaGJvYXJkKGZpbHRlcnMpO1xyXG4gICAgICAgICAgICAvLyBncmlkSW5mby5maWx0ZXJzLnB1c2goXHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLm5ld0ZpbHRlcihLZXlGaWx0ZXJTdGF0ZUJ5TWVudUNvbmdWaWVjLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5wYXJlbnRNb2RlbC5zZWxlY3RlZEl0ZW0uc3RhdGVDb2RlKVxyXG4gICAgICAgICAgICAvLyApO1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gc3VwZXIuZ2V0UHJvbWlzZUdldERhdGEoZ3JpZEluZm8pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldFByb21pc2VHZXREYXRhKGdyaWRJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0SWRzQ29uZ1ZpZWNMaWVuUXVhbigpIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJzID0gW3RoaXMubmV3RmlsdGVyQ29udGFpbmVyKCdvcicsXHJcbiAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdpZENvbmdWaWVjJywgT3BlcmF0b3IuZXF1YWwsIHRoaXMuaWRDb25nVmllYyksXHJcbiAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdpZENvbmdWaWVjTGllblF1YW4nLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5pZENvbmdWaWVjKSldO1xyXG4gICAgICAgIGNvbnN0IHJzID0gYXdhaXQgdGhpcy5fY29uZ1ZpZWNMaWVuUXVhblNlcnZpY2UuZ2V0QWxsKGZpbHRlcnMsICdpZENvbmdWaWVjLGlkQ29uZ1ZpZWNMaWVuUXVhbicpO1xyXG4gICAgICAgIGNvbnN0IGlkc0NvbmdWaWVjTGllblF1YW4gPSBbXTtcclxuICAgICAgICBpZiAocnMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICBycy5kYXRhLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pZENvbmdWaWVjID09IGVsZW1lbnQuaWRDb25nVmllYykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkc0NvbmdWaWVjTGllblF1YW4ucHVzaChlbGVtZW50LmlkQ29uZ1ZpZWNMaWVuUXVhbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmlkQ29uZ1ZpZWMgPT0gZWxlbWVudC5pZENvbmdWaWVjTGllblF1YW4pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZHNDb25nVmllY0xpZW5RdWFuLnB1c2goZWxlbWVudC5pZENvbmdWaWVjKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpZHNDb25nVmllY0xpZW5RdWFuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGjDqm0gY8O0bmcgdmnhu4djXHJcbiAgICAgKiBT4bq9IG3hu58gbMOqbiBmb3JtIMSR4buDIGNo4buNbiBsb+G6oWkgY8O0bmcgdmnhu4djIHRyxrDhu5tjIHLhu5NpIG3hu5tpIG3hu58gZm9ybSB0aMOqbSBt4bubaSBjw7RuZyB2aeG7h2NcclxuICAgICAqL1xyXG4gICAgYWRkQ29uZ1ZpZWMoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hEYXRhLmxvYWlDb25nVmllYyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5sb2FpQ29uZ1ZpZWNNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dGb3JtQWRkVGFzayhldnQpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hEYXRhLmxvYWlDb25nVmllYyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0LhuqFuIHBo4bqjaSBjaOG7jW4gbG/huqFpIGPDtG5nIHZp4buHYycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvYWlDb25nVmllY01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2FkZChldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGJlZm9yZUFkZCgpIHtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5kYXRhLmlkTG9haUNvbmdWaWVjID0gdGhpcy5zZWFyY2hEYXRhLmxvYWlDb25nVmllYztcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVDaGFuZ2VkU3RhdHVzV29ya2Zsb3coaXRlbUlkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29uZ1ZpZWNGb3JtXHJcbiAgICAgICAgICAgICYmIHRoaXMuZm9ybU1vZGVsLmRhdGFcclxuICAgICAgICAgICAgJiYgdGhpcy5mb3JtTW9kZWwuZGF0YS5pZCA9PSBpdGVtSWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5jb25nVmllY0Zvcm0uY2xlYXJXb3JrZmxvd0J1dHRvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5jb25nVmllY0Zvcm0uX3RyaWdnZXJHZXREZXRhaWwoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DaG9uQ29uZ1ZpZWMoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93UGlja2VyRm9ybSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdHJpZ2dlclN5bmNQZXJtaXNzaW9uKCkge1xyXG4gICAgICAgIHRoaXMuX2NvbmdWaWVjVGhheURvaVNlcnZpY2UudHJpZ2dlclN5bmNUYXNrUGVybWlzc2lvbigpXHJcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlcywgJ8SQ4buTbmcgYuG7mSB0aMOgbmggY8O0bmcnKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlU2F2ZWQoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSBmYWxzZTtcclxuICAgICAgICAvLyBMw6AgZm9ybSB0cnV54buBbiBpZCB04burIGLDqm4gbmdvw6BpIHbDoG9cclxuICAgICAgICAvLyBT4bq9IGPhuqduIHVwZGF0ZSBuZ8aw4bujYyBs4bqhaSBpZHMgbuG6v3UgbMOgIGNhc2UgdGjDqm0gbeG7m2kgYuG6o24gZ2hpXHJcbiAgICAgICAgLy8gdsOgIHJlbG9hZFxyXG4gICAgICAgIGlmICh0aGlzLmlkcyAmJiBkYXRhLmluc2VydCkge1xyXG4gICAgICAgICAgICB0aGlzLmlkcy5wdXNoKGRhdGEuaWQpO1xyXG4gICAgICAgICAgICB0aGlzLmlkc0NoYW5nZS5lbWl0KHRoaXMuaWRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jcnVkTGlzdC5yZWxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVBZnRlckluc2VydGVkKGlkOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5sb2FpRGFuaFNhY2ggPT0gRW51bUxvYWlEYW5oU2FjaENvbmdWaWVjLkNvbmdWaWVjTGllblF1YW4pIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBbe1xyXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpLFxyXG4gICAgICAgICAgICAgICAgaWRDb25nVmllYzogdGhpcy5pZENvbmdWaWVjLFxyXG4gICAgICAgICAgICAgICAgaWRDb25nVmllY0xpZW5RdWFuOiBpZFxyXG4gICAgICAgICAgICB9XTtcclxuICAgICAgICAgICAgdGhpcy5pbnNlcnRDb25nVmllY0xpZW5RdWFuKGl0ZW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5sb2FpRGFuaFNhY2ggPT0gRW51bUxvYWlEYW5oU2FjaENvbmdWaWVjLkNvbmdWaWVjQ29uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsID0ge1xyXG4gICAgICAgICAgICAgICAgaWRDaGE6IHRoaXMuaWRDb25nVmllYyxcclxuICAgICAgICAgICAgICAgIGlkc0NvbmdWaWVjOiBbaWRdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0Q29uZ1ZpZWNDb24obW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBiZWZvcmVSZWxvYWRBZnRlckRlbGV0ZShpZHM6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaWRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0lkcyA9IHRoaXMuaWRzLmZpbHRlcihxID0+IGlkcy5zb21lKHggPT4geCA9PSBxKSk7XHJcbiAgICAgICAgICAgIHRoaXMuaWRzID0gbmV3SWRzO1xyXG4gICAgICAgICAgICB0aGlzLmlkc0NoYW5nZS5lbWl0KHRoaXMuaWRzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvY2Vzc0RlbGV0ZShpZHMgPSBbXSkge1xyXG4gICAgICAgIGlmICh0aGlzLmxvYWlEYW5oU2FjaCA9PSBFbnVtTG9haURhbmhTYWNoQ29uZ1ZpZWMuQ29uZ1ZpZWNMaWVuUXVhbikge1xyXG4gICAgICAgICAgICBjb25zdCBtb2RlbCA9IHtcclxuICAgICAgICAgICAgICAgIGlkQ29uZ1ZpZWM6IHRoaXMuaWRDb25nVmllYyxcclxuICAgICAgICAgICAgICAgIGlkc0NvbmdWaWVjOiBpZHNcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5fY29uZ1ZpZWNMaWVuUXVhblNlcnZpY2UuZGVsZXRlQnVsa0NvbmdWaWVjTGllblF1YW4obW9kZWwpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVEYXRhU3VjY2VzcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nQnlSZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YUVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5sb2FpRGFuaFNhY2ggPT0gRW51bUxvYWlEYW5oU2FjaENvbmdWaWVjLkNvbmdWaWVjQ29uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbmdWaWVjU2VydmljZS5kZWxldGVCdWxrQ29uZ1ZpZWNDb24oaWRzKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YVN1Y2Nlc3MoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZURhdGFFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZGVsZXRlQ29uZ1ZpZWNUaGVvTG9haURhbmhTYWNoKHJvd0RhdGEpIHtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZUNvbmZpcm0oKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgaWYgKCFycykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RlbGV0ZShbcm93RGF0YS5pZF0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgb25TZWxlY3RDb25nVmllYygpIHtcclxuICAgICAgICBpZiAodGhpcy5jb25nVmllY1BpY2tlci5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubG9haURhbmhTYWNoID09IEVudW1Mb2FpRGFuaFNhY2hDb25nVmllYy5Db25nVmllY0xpZW5RdWFuKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuY29uZ1ZpZWNQaWNrZXIubW9kZWwuc2VsZWN0ZWRJdGVtcy5tYXAoKGl0ZW0pID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkQ29uZ1ZpZWM6IHRoaXMuaWRDb25nVmllYyxcclxuICAgICAgICAgICAgICAgICAgICBpZENvbmdWaWVjTGllblF1YW46IGl0ZW0uaWRcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0Q29uZ1ZpZWNMaWVuUXVhbihpdGVtcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5sb2FpRGFuaFNhY2ggPT0gRW51bUxvYWlEYW5oU2FjaENvbmdWaWVjLkNvbmdWaWVjQ29uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2RlbCA9IHtcclxuICAgICAgICAgICAgICAgICAgICBpZENoYTogdGhpcy5pZENvbmdWaWVjLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkc0NvbmdWaWVjOiB0aGlzLmNvbmdWaWVjUGlja2VyLm1vZGVsLnNlbGVjdGVkSXRlbXMubWFwKHggPT4geC5pZClcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluc2VydENvbmdWaWVjQ29uKG1vZGVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNob3dQaWNrZXJGb3JtID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaW5zZXJ0Q29uZ1ZpZWNMaWVuUXVhbihpdGVtcyA9IFtdKSB7XHJcbiAgICAgICAgdGhpcy5fY29uZ1ZpZWNMaWVuUXVhblNlcnZpY2UuaW5zZXJ0QnVsa0FzeW5jKGl0ZW1zKS50aGVuKHJlc3BvbnNlID0+IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzcG9uc2UsICcnLCBmID0+IHRoaXMucmVsb2FkKCkpKTtcclxuICAgIH1cclxuXHJcbiAgICBpbnNlcnRDb25nVmllY0Nvbihtb2RlbCkge1xyXG4gICAgICAgIHRoaXMuX2NvbmdWaWVjU2VydmljZS51cGRhdGVCdWxrSWRDaGEobW9kZWwpLnRoZW4ocmVzcG9uc2UgPT4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXNwb25zZSwgJycsIGYgPT4gdGhpcy5yZWxvYWQoKSkpO1xyXG4gICAgfVxyXG59XHJcblxyXG4iLCI8Y3J1ZC1saXN0ICNjcnVkTGlzdCBbbW9kZWxdPVwibW9kZWxcIiBbc2V0dGluZ109XCJzZXR0aW5nXCIgW2RhdGFTb3VyY2VdPVwibW9kZWwuZGF0YVNvdXJjZVwiIFtoaWRkZW5BZGRdPVwiaGlkZGVuQWRkXCJcclxuICAgIFtoaWRkZW5FZGl0XT1cImhpZGRlbkVkaXRcIiBbaGlkZGVuRGVsZXRlXT1cImhpZGRlbkRlbGV0ZVwiIFtoaWRkZW5Db3B5TGlua109XCJ0cnVlXCIgW2hpZGRlbkFkZF09XCJpc0Zyb21EYXNoYm9hcmRcIlxyXG4gICAgW3Nob3dTY3JvbGxIb3Jpem9udGFsXT1cInRydWVcIiBbbWVudUJ1dHRvbnNdPVwiZ2V0TWVudUJ1dHRvbnNcIiAob25Db3B5TGluayk9XCJfY29weUxpbmsoJGV2ZW50KVwiXHJcbiAgICAob25Db3B5TGlua011bHRpcGxlKT1cIl9jb3B5TGlua011bHRpcGxlKClcIiAob25SZWxvYWQpPVwiX3RyaWdnZXJQcm9jZXNzRGF0YSgkZXZlbnQpXCIgKG9uQWRkKT1cImFkZENvbmdWaWVjKCRldmVudClcIlxyXG4gICAgKG9uRWRpdCk9XCJfZWRpdCgkZXZlbnQpXCIgKG9uVmlldyk9XCJfZWRpdCgkZXZlbnQpXCIgKG9uRGVsZXRlKT1cIl9kZWxldGUoJGV2ZW50KVwiXHJcbiAgICAob25EZWxldGVNdWx0aXBsZSk9XCJfZGVsZXRlTXVsdGlwbGUoJGV2ZW50KVwiIChvblJlbG9hZGVkKT1cIl91bm1hcmtMb2FkaW5nKClcIlxyXG4gICAgKG9uQ2hhbmdlZFN0YXR1c1dvcmtmbG93KT1cImhhbmRsZUNoYW5nZWRTdGF0dXNXb3JrZmxvdygkZXZlbnQpXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgI2J1dHRvbkFmdGVyVG9vbGJhcj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwibG9haURhbmhTYWNoID4gMCAmJiAhaXNQaWNrZXJcIiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBwUmlwcGxlIGxhYmVsPVwiQ2jhu41uIGPDtG5nIHZp4buHY1wiXHJcbiAgICAgICAgICAgIGljb249XCJwaSBwaS1wbHVzXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXN1Y2Nlc3NcIiAoY2xpY2spPVwib25DaG9uQ29uZ1ZpZWMoKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgaWNvbj1cInBpIHBpLXJlcGxheVwiIGxhYmVsPVwixJDhu5NuZyBi4buZIHF1eeG7gW5cIlxyXG4gICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXRleHRcIiAoY2xpY2spPVwidHJpZ2dlclN5bmNQZXJtaXNzaW9uKClcIj48L2J1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2NvbmdWaWVjSW5mbyBsZXQtcm93RGF0YT1cInJvd0RhdGFcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLXRhc2staW5mb1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VsbC10YXNrLWluZm9cIj5cclxuICAgICAgICAgICAgICAgIHt7cm93RGF0YS50ZW59fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcmNlbnQtZG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbCB0cmFuc2l0aW9uLXdpZHRoXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiByb3dEYXRhLnBlcmNlbnRXaWR0aFxyXG4gICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaWRQcmlvcml0eSBsZXQtcm93RGF0YT1cInJvd0RhdGFcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJpb3JpdHlcIj5cclxuICAgICAgICAgICAgPHNwYW4gW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IHJvd0RhdGEucHJpb3JpdHlDb2xvcixcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHJvd0RhdGEucHJpb3JpdHlCYWNrZ3JvdW5kXHJcbiAgICAgICAgICAgIH1cIj57e3Jvd0RhdGEuc3RyaWRQcmlvcml0eX19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImxvYWlEYW5oU2FjaCA+IDBcIiAjZnVuY3Rpb24gbGV0LXJvd0RhdGE9XCJyb3dEYXRhXCIgbGV0LWNydWRMaXN0PVwiY3J1ZExpc3RcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIHBSaXBwbGUgcFRvb2x0aXA9XCJ7eydGT1JNLkRFTEVURScgfCB0cmFuc2xhdGV9fVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlciBsaW5rLW9yLWFjdGlvblwiIGljb249XCJwaSBwaS10cmFzaFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVDb25nVmllY1RoZW9Mb2FpRGFuaFNhY2gocm93RGF0YSlcIj48L2J1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbjwvY3J1ZC1saXN0PlxyXG5cclxuPHRuLWRpYWxvZyAqbmdJZj1cImxvYWlDb25nVmllY01vZGVsLnNob3dFZGl0Rm9ybVwiIFtzdHlsZUNsYXNzXT1cIid0bi1mb3JtLWRpYWxvZydcIlxyXG4gICAgW2hlYWRlcl09XCJsb2FpQ29uZ1ZpZWNNb2RlbC5oZWFkZXIgfCB0cmFuc2xhdGVcIiBbcG9wdXBTaXplXT1cImxvYWlDb25nVmllY01vZGVsLnBvcHVwU2l6ZVwiXHJcbiAgICAob25IaWRlKT1cImxvYWlDb25nVmllY01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicC1jb2wtMTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicC1ncmlkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLW1kLTEwIHRuLWRyb3Bkb3duIHAtZmx1aWRcIj5cclxuICAgICAgICAgICAgICAgIDxkcm9wZG93biBbY29udHJvbF09XCJzZWFyY2hTY2hlbWEubG9haUNvbmdWaWVjXCIgWyh2YWx1ZSldPVwic2VhcmNoRGF0YS5sb2FpQ29uZ1ZpZWNcIj48L2Ryb3Bkb3duPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtbWQtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBjbGFzcz1cInAtYnV0dG9uLXByaW1hcnkgcC1jb2wtMTJcIiBsYWJlbD1cIk9rXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0Zvcm1BZGRUYXNrKCRldmVudClcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC90bi1kaWFsb2c+XHJcblxyXG48dG4tZGlhbG9nICpuZ0lmPVwic2hvd0RldGFpbEZvcm1cIiAjZGlhbG9nIFtzdHlsZUNsYXNzXT1cIidjb25ndmllYy1mb3JtIHRuLWZvcm0tZGlhbG9nJ1wiXHJcbiAgICBbaGVhZGVyXT1cInNldHRpbmcucG9wdXBIZWFkZXIgfCB0cmFuc2xhdGVcIiBbcG9wdXBTaXplXT1cInNldHRpbmcucG9wdXBTaXplXCIgW3VzZURlZmF1bHRTY3JvbGxCYXJdPVwidHJ1ZVwiXHJcbiAgICAob25IaWRlKT1cInNob3dEZXRhaWxGb3JtID0gZmFsc2VcIj5cclxuICAgIDxiYXNlLWNvbmd2aWVjLWZvcm0gI2Zvcm1CYXNlIFtwYXJlbnRNb2RlbF09XCJtb2RlbFwiIFtwYXJlbnRTZXR0aW5nXT1cInNldHRpbmdcIiBbcGFyZW50Q29udGV4dF09XCJjb250ZXh0XCJcclxuICAgICAgICBbbW9kZWxdPVwiZm9ybU1vZGVsXCIgW2NydWRMaXN0XT1cImNydWRMaXN0XCIgW2l0ZW1JZF09XCJpdGVtSWRcIiAob25TYXZlZCk9XCJoYW5kbGVTYXZlZCgkZXZlbnQpXCJcclxuICAgICAgICAob25DYW5jZWwpPVwiX2hhbmRsZUNhbmNlbCgkZXZlbnQpXCIgKG9uQWZ0ZXJJbnNlcnRlZCk9XCJoYW5kbGVBZnRlckluc2VydGVkKCRldmVudClcIj5cclxuICAgIDwvYmFzZS1jb25ndmllYy1mb3JtPlxyXG48L3RuLWRpYWxvZz5cclxuXHJcbjx0bi1kaWFsb2cgKm5nSWY9XCJzaG93UGlja2VyRm9ybVwiICNkaWFsb2cgW3N0eWxlQ2xhc3NdPVwiJ2Nvbmd2aWVjLWZvcm0gdG4tZm9ybS1kaWFsb2cnXCJcclxuICAgIFtoZWFkZXJdPVwiJ0No4buNbiBjw7RuZyB2aeG7h2MnIHwgdHJhbnNsYXRlXCIgW3BvcHVwU2l6ZV09XCJzZXR0aW5nLnBvcHVwU2l6ZVwiIFtzaG93Rm9vdGVyXT1cInRydWVcIlxyXG4gICAgW3VzZURlZmF1bHRTY3JvbGxCYXJdPVwidHJ1ZVwiIChvbkhpZGUpPVwic2hvd1BpY2tlckZvcm0gPSBmYWxzZVwiPlxyXG4gICAgPGJhc2UtY29uZ3ZpZWMgI2NvbmdWaWVjUGlja2VyIFtpc1BpY2tlcl09XCJ0cnVlXCIgW2Zvcm1TdGF0ZV09XCJmb3JtU3RhdGVcIiBbbG9haURhbmhTYWNoXT1cImxvYWlEYW5oU2FjaFwiXHJcbiAgICAgICAgW2lkQ29uZ1ZpZWNdPVwiaWRDb25nVmllY1wiPlxyXG4gICAgPC9iYXNlLWNvbmd2aWVjPlxyXG4gICAgPG5nLXRlbXBsYXRlICNmb290ZXI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBpY29uPVwicGkgcGktc2F2ZVwiIGNsYXNzPVwicC1idXR0b24tdGV4dFwiIFtsYWJlbF09XCInQ2jhu41uJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvblNlbGVjdENvbmdWaWVjKClcIj48L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGljb249XCJwaSBwaS1yZXBsYXlcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tc2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgW2xhYmVsXT1cIidGT1JNLkNBTkNFTCcgfCB0cmFuc2xhdGVcIiBwcmV2ZW50VGFiIChjbGljayk9XCJzaG93UGlja2VyRm9ybT1mYWxzZVwiPjwvYnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC90bi1kaWFsb2c+Il19
|
|
475
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZ3ZpZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvY29uZ3ZpZWMvY29uZ3ZpZWMvY29uZ3ZpZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvY29uZ3ZpZWMvY29uZ3ZpZWMvY29uZ3ZpZWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFZLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5SCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixXQUFXLEVBQ1gsU0FBUyxFQUNaLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekYsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQVExRCxPQUFPLEVBQUUsd0JBQXdCLEVBQTJCLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFhcEYsTUFBTSxPQUFPLHFCQUFzQixTQUFRLFlBQVk7SUE0Q25ELFlBQ2MsU0FBbUIsRUFDbkIsbUJBQXVDLEVBQ3ZDLGdCQUFpQyxFQUNqQyxzQkFBNkMsRUFDN0MseUJBQW1ELEVBQ25ELGtCQUFxQyxFQUNyQyx1QkFBK0MsRUFDakQsd0JBQWlELEVBQ2pELHVCQUErQyxFQUMvQyx1QkFBK0M7UUFFdkQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBWFAsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQW9CO1FBQ3ZDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFDakMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF1QjtRQUM3Qyw4QkFBeUIsR0FBekIseUJBQXlCLENBQTBCO1FBQ25ELHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFDckMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF3QjtRQUNqRCw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQXlCO1FBQ2pELDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBd0I7UUFDL0MsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF3QjtRQWpDbEQsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFDakMsY0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDM0IsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFbkIsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFFbkQsaUJBQVksR0FBUSxFQUFFLENBQUM7UUFDdkIsZUFBVSxHQUFRLEVBQUUsQ0FBQztRQUNyQiw4QkFBeUIsR0FBRyxFQUFFLENBQUM7UUFDL0Isb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDckIsc0JBQWlCLEdBQUcsSUFBSSxXQUFXLENBQUM7WUFDaEMsTUFBTSxFQUFFLHdCQUF3QjtTQUNuQyxDQUFDLENBQUM7UUFDSCxzQkFBaUIsR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUNoQyxNQUFNLEVBQUUscUJBQXFCO1lBQzdCLFNBQVMsRUFBRSxJQUFJLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO1NBQ3hELENBQUMsQ0FBQztRQW9CQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTtZQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDN0Q7SUFDTCxDQUFDO0lBaERELElBQWEsR0FBRyxDQUFDLEtBQWU7UUFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUN0QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUM5QjtJQUNMLENBQUM7SUFDRCxJQUFJLEdBQUc7UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQTBDRCxRQUFRO1FBQ0osSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7UUFDdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ25DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckUsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztTQUM1QztRQUVELElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQUUsRUFBRSxpQ0FBaUM7WUFDMUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO1lBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO2FBQzVDO2lCQUNJO2dCQUNELElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO2FBQzNDO1NBQ0o7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFO2dCQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7YUFDckM7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1NBQzlDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUc7WUFDeEIsSUFBSSxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDbkYsSUFBSSxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDMUYsSUFBSSxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsQ0FBQztZQUN2SSxJQUFJLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxDQUFDO1lBQzNJLElBQUksV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxDQUFDO1lBQy9HLElBQUksV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLENBQUM7WUFDL0gsSUFBSSxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDeEcsSUFBSSxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQztTQUM5SCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUc7WUFDaEIsSUFBSSxnQkFBZ0IsQ0FBQztnQkFDakIsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLEtBQUssRUFBRSxPQUFPO2FBQ2pCLENBQUM7WUFDRixJQUFJLGdCQUFnQixDQUFDO2dCQUNqQixLQUFLLEVBQUUsWUFBWTtnQkFDbkIsS0FBSyxFQUFFLE9BQU87YUFDakIsQ0FBQztZQUNGLElBQUksZ0JBQWdCLENBQUM7Z0JBQ2pCLEtBQUssRUFBRSxhQUFhO2dCQUNwQixLQUFLLEVBQUUsT0FBTzthQUNqQixDQUFDO1lBQ0YsSUFBSSxnQkFBZ0IsQ0FBQztnQkFDakIsS0FBSyxFQUFFLGdCQUFnQjtnQkFDdkIsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsV0FBVyxFQUFFLElBQUksQ0FBQyxzQkFBc0I7Z0JBQ3hDLE1BQU0sRUFBRSxJQUFJO2dCQUNaLFNBQVMsRUFBRSxVQUFVO2dCQUNyQixnQkFBZ0IsRUFBRSxJQUFJO2FBQ3pCLENBQUM7WUFDRixJQUFJLGdCQUFnQixDQUFDO2dCQUNqQixLQUFLLEVBQUUsV0FBVztnQkFDbEIsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsV0FBVyxFQUFFLElBQUksQ0FBQyx5QkFBeUI7YUFDOUMsQ0FBQztZQUNGLElBQUksZ0JBQWdCLENBQUM7Z0JBQ2pCLEtBQUssRUFBRSxZQUFZO2dCQUNuQixRQUFRLEVBQUUsWUFBWTtnQkFDdEIsZ0JBQWdCLEVBQUUsWUFBWTtnQkFDOUIsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsV0FBVyxFQUFFLElBQUksQ0FBQyxrQkFBa0I7Z0JBQ3BDLFNBQVMsRUFBRSxrQkFBa0I7Z0JBQzdCLGVBQWUsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRTtvQkFDL0IsT0FBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUNuQyxPQUFPLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDakQsQ0FBQzthQUNKLENBQUM7U0FDTCxDQUFDO1FBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDckQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrQkFBa0I7UUFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksR0FBRyxJQUFJLHFCQUFxQixDQUFDO1lBQ3ZELFdBQVcsRUFBRSxxQkFBcUI7WUFDbEMsV0FBVyxFQUFFLElBQUksQ0FBQyxzQkFBc0I7WUFDeEMsVUFBVSxFQUFFLElBQUk7WUFDaEIsTUFBTSxFQUFFLElBQUk7WUFDWixTQUFTLEVBQUUsVUFBVTtZQUNyQixlQUFlLEVBQUUsSUFBSTtZQUNyQixLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLGNBQWMsRUFBRTtnQkFDWixJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO2FBQy9EO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3BELEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUFtQjtRQUNwQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU07WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQzNDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNwRDtRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDbkY7YUFDSSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDeEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDaEMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQzNDLENBQUM7U0FDTDtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3ZCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDaEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsNEJBQTRCLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQy9FLENBQUM7YUFDTDtTQUNKO1FBRUQsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1YsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN0RTtRQUVELElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSx3QkFBd0IsQ0FBQyxnQkFBZ0IsRUFBRTtZQUNoRSxRQUFRLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUN0QixzQkFBc0I7WUFDdEIsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ2hFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDZixRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUNoRixJQUFJLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ2hDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO2lCQUNwRjthQUNKO2lCQUNJO2dCQUNELElBQUksbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDaEMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7aUJBQ2pGO3FCQUNJO29CQUNELE9BQU8sS0FBSyxDQUFDO2lCQUNoQjthQUNKO1NBQ0o7YUFDSSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksd0JBQXdCLENBQUMsV0FBVyxFQUFFO1lBQ2hFLFFBQVEsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDZixNQUFNLE9BQU8sR0FBRztvQkFDWixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztvQkFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUMzRCxDQUFDO2dCQUNGLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUNsQyxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNsRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUU7d0JBQ1osSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUU7NEJBQ1YsT0FBTyxLQUFLLENBQUM7eUJBQ2hCO3dCQUNELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7NEJBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzt5QkFDeEU7cUJBQ0o7eUJBQ0k7d0JBQ0QsT0FBTyxLQUFLLENBQUM7cUJBQ2hCO2lCQUNKO2dCQUNELFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7YUFDckM7aUJBQ0k7Z0JBQ0QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzthQUNuRjtTQUNKO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyw0QkFBNEI7UUFDOUIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUM7WUFDMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQy9ELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDakUsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2QixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVO1FBQ25DLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO2dCQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsUUFBa0I7UUFDaEMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3RCLE1BQU0sT0FBTyxHQUFHO2dCQUNaLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTTtnQkFDdkMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFNBQVM7Z0JBQ2xELG9CQUFvQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLG9CQUFvQjtnQkFDeEUsUUFBUTthQUNYLENBQUM7WUFDRixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1RCx5QkFBeUI7WUFDekIsNEdBQTRHO1lBQzVHLEtBQUs7WUFDTCw0Q0FBNEM7U0FDL0M7YUFDSTtZQUNELE9BQU8sS0FBSyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzVDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxzQkFBc0I7UUFDeEIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsRUFDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO1FBQ2hHLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQy9CLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRTtZQUNaLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUN0QixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRTtvQkFDdkMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2lCQUN4RDtxQkFDSSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLGtCQUFrQixFQUFFO29CQUNwRCxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUNoRDtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxPQUFPLG1CQUFtQixDQUFDO0lBQy9CLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsR0FBRztRQUNYLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztJQUMvQyxDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQUc7UUFDZixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxJQUFJLElBQUksRUFBRTtZQUN0QyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsOEJBQThCLENBQUMsQ0FBQztTQUM1RTtRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTO1FBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO0lBQ3RFLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxNQUFNO1FBQzlCLElBQUksSUFBSSxDQUFDLFlBQVk7ZUFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUk7ZUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLE1BQU0sRUFDckM7WUFDRSxJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQ3pDO0lBQ0wsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQscUJBQXFCO1FBQ2pCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyx5QkFBeUIsRUFBRTthQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFJO1FBQ1osSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIscUNBQXFDO1FBQ3JDLDJEQUEyRDtRQUMzRCxZQUFZO1FBQ1osSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNqQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELG1CQUFtQixDQUFDLEVBQVU7UUFDMUIsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLHdCQUF3QixDQUFDLGdCQUFnQixFQUFFO1lBQ2hFLE1BQU0sS0FBSyxHQUFHLENBQUM7b0JBQ1gsRUFBRSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFO29CQUM5QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7b0JBQzNCLGtCQUFrQixFQUFFLEVBQUU7aUJBQ3pCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0QzthQUNJLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSx3QkFBd0IsQ0FBQyxXQUFXLEVBQUU7WUFDaEUsTUFBTSxLQUFLLEdBQUc7Z0JBQ1YsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUN0QixXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7YUFDcEIsQ0FBQztZQUNGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNqQztJQUNMLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxHQUFhO1FBQ2pDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNWLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNqQztJQUNMLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBRyxHQUFHLEVBQUU7UUFDbEIsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLHdCQUF3QixDQUFDLGdCQUFnQixFQUFFO1lBQ2hFLE1BQU0sS0FBSyxHQUFHO2dCQUNWLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtnQkFDM0IsV0FBVyxFQUFFLEdBQUc7YUFDbkIsQ0FBQztZQUNGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUM7aUJBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDYixJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO29CQUM5QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7aUJBQ2pCO3FCQUNJO29CQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDekQ7WUFDTCxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDaEQsQ0FBQyxDQUFDLENBQUM7U0FDVjthQUNJLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSx3QkFBd0IsQ0FBQyxXQUFXLEVBQUU7WUFDaEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQztpQkFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNiLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRTtvQkFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixFQUFFLENBQUM7b0JBQzlDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztpQkFDakI7cUJBQ0k7b0JBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUN6RDtZQUNMLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDUCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUNoRCxDQUFDLENBQUMsQ0FBQztTQUNWO0lBQ0wsQ0FBQztJQUNELDhCQUE4QixDQUFDLE9BQU87UUFDbEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ2hELElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ0wsT0FBTzthQUNWO1lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNELGdCQUFnQjtRQUNaLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDcEQsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLHdCQUF3QixDQUFDLGdCQUFnQixFQUFFO2dCQUNoRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNqRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUU7b0JBQzlCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtvQkFDM0Isa0JBQWtCLEVBQUUsSUFBSSxDQUFDLEVBQUU7aUJBQzlCLENBQUMsQ0FBQyxDQUFDO2dCQUNKLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN0QztpQkFDSSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksd0JBQXdCLENBQUMsV0FBVyxFQUFFO2dCQUNoRSxNQUFNLEtBQUssR0FBRztvQkFDVixLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVU7b0JBQ3RCLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDdEUsQ0FBQztnQkFDRixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDakM7U0FDSjtRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxLQUFLLEdBQUcsRUFBRTtRQUM3QixJQUFJLENBQUMsd0JBQXdCLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakksQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQUs7UUFDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pILENBQUM7O2tIQXZjUSxxQkFBcUI7c0dBQXJCLHFCQUFxQixpWUFGbkIsQ0FBQyx1QkFBdUIsQ0FBQyw4UEMvQnhDLDB4SkE4RVksd29DRDdDQyxxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFOakMsU0FBUzsrQkFDSSxlQUFlLGFBR2QsQ0FBQyx1QkFBdUIsQ0FBQzs4WkFHTSxZQUFZO3NCQUFyRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ1EsY0FBYztzQkFBN0QsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ3JDLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRU8sR0FBRztzQkFBZixLQUFLO2dCQVNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YUxpc3RCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2RhdGEtbGlzdC1iYXNlJztcclxuaW1wb3J0IHsgRm9ybVN0YXRlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xyXG5pbXBvcnQge1xyXG4gICAgQ29sdW1uU2NoZW1hQmFzZSxcclxuICAgIERpYWxvZ01vZGVsLFxyXG4gICAgRHJvcGRvd25Db250cm9sU2NoZW1hLFxyXG4gICAgTW9kZWxTY2hlbWEsXHJcbiAgICBQb3B1cFNpemVcclxufSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgS2V5RmlsdGVyU3RhdGVCeU1lbnVDb25nVmllYywgVG9waWNSZWxvYWRDb25nVmllY1Y1IH0gZnJvbSAnLi4vLi4vY29uc3QvY29tbW9uJztcclxuaW1wb3J0IHsgSGVpZ2h0VHlwZSwgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9lbnVtcy9jb21tb24nO1xyXG5pbXBvcnQgeyBJQ29uZ1ZpZWNGb3JtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9pLWNvbmd2aWVjLWZvcm0nO1xyXG5pbXBvcnQgeyBHcmlkSW5mbyB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnZpcm9ubWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2F1SGluaFdvcmtmbG93U2VydmljZSB9IGZyb20gJy4uL2NhdWhpbmgtd29ya2Zsb3cvc2VydmljZXMvY2F1aGluaC13b3JrZmxvdy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRG1MaW5oVnVjQ29uZ1ZpZWNTZXJ2aWNlIH0gZnJvbSAnLi4vZG0tbGluaHZ1Yy1jb25ndmllYy9zZXJ2aWNlcy9kbS1saW5odnVjLWNvbmd2aWVjLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEbUxvYWlDb25nVmllY1NlcnZpY2UgfSBmcm9tICcuLi9kbS1sb2FpLWNvbmd2aWVjL3NlcnZpY2VzL2RtLWxvYWktY29uZ3ZpZWMuc2VydmljZSc7XHJcbmltcG9ydCB7IERtUHJpb3JpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vZG0tcHJpb3JpdHkvc2VydmljZXMvZG0tcHJpb3JpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudW1Mb2FpRGFuaFNhY2hDb25nVmllYywgRW51bVN0YXRlQnlNZW51Q29uZ1ZpZWMgfSBmcm9tICcuLi9tb2RlbHMvZW51bXMnO1xyXG5pbXBvcnQgeyBDb25nVmllY0RpbmhLZW1TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jb25ndmllYy1kaW5oa2VtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25nVmllY1RoYXlEb2lTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jb25ndmllYy10aGF5ZG9pLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25nVmllY1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2Nvbmd2aWVjLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25nVmllY0xpZW5RdWFuU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY29uZ3ZpZWNsaWVucXVhbi5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmFzZS1jb25ndmllYycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29uZ3ZpZWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY29uZ3ZpZWMuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW0NvbXBvbmVudENvbnRleHRTZXJ2aWNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEJhc2VDb25nVmllY0NvbXBvbmVudCBleHRlbmRzIERhdGFMaXN0QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuICAgIEBWaWV3Q2hpbGQoJ2Zvcm1CYXNlJywgeyBzdGF0aWM6IGZhbHNlIH0pIGNvbmdWaWVjRm9ybTogSUNvbmdWaWVjRm9ybTtcclxuICAgIEBWaWV3Q2hpbGQoJ2NvbmdWaWVjUGlja2VyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGNvbmdWaWVjUGlja2VyOiBCYXNlQ29uZ1ZpZWNDb21wb25lbnQ7XHJcbiAgICBASW5wdXQoKSBpdGVtSWQ6IHN0cmluZzsgLy8gSWQgY+G7p2EgYuG6o24gZ2hpIG3DoCBjw7RuZyB2aeG7h2MgZ+G6r24gdsOgbyAodHLGsOG7nW5nIGl0ZW1JZCBj4bunYSBjw7RuZyB2aeG7h2MpXHJcbiAgICBASW5wdXQoKSBzZXJ2aWNlQ29kZTogc3RyaW5nOyAvLyBzZXJ2aWNlIGNvZGUgY+G7p2EgYuG6o24gZ2hpIHRyb25nIGPDtG5nIHZp4buHYyDEkcOtbmgga8OobVxyXG4gICAgQElucHV0KCkgZW50aXR5OiBzdHJpbmc7IC8vIGLhuqNuZyBj4bunYSBi4bqjbiBnaGkgdHJvbmcgY8O0bmcgdmnhu4djIMSRw61uaCBrw6htXHJcbiAgICBASW5wdXQoKSBpdGVtSWRBdHRhY2g6IHN0cmluZzsgLy8gSWQgY+G7p2EgYuG6o24gZ2hpIHRyb25nIGPDtG5nIHZp4buHYyDEkcOtbmgga8OobVxyXG4gICAgQElucHV0KCkgc3RhdGVDb2RlOiBFbnVtU3RhdGVCeU1lbnVDb25nVmllYztcclxuICAgIEBJbnB1dCgpIGlzUGlja2VyOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgbG9haURhbmhTYWNoOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBpZENvbmdWaWVjOiBzdHJpbmc7XHJcbiAgICBfaWRzOiBzdHJpbmdbXVxyXG4gICAgQElucHV0KCkgc2V0IGlkcyh2YWx1ZTogc3RyaW5nW10pIHtcclxuICAgICAgICB0aGlzLl9pZHMgPSB2YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5iYXNlUmVhZHkpIHtcclxuICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IGlkcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faWRzO1xyXG4gICAgfVxyXG4gICAgQElucHV0KCkgaXNGcm9tRGFzaGJvYXJkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBmb3JtU3RhdGUgPSBGb3JtU3RhdGUuVklFVztcclxuICAgIEBJbnB1dCgpIGlzQ2hpbGRWaWV3ID0gZmFsc2U7XHJcblxyXG4gICAgQE91dHB1dCgpIGlkc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XHJcblxyXG4gICAgc2VhcmNoU2NoZW1hOiBhbnkgPSB7fTtcclxuICAgIHNlYXJjaERhdGE6IGFueSA9IHt9O1xyXG4gICAgZGljV29ya2Zsb3dCeUxvYWlDb25nVmllYyA9IHt9O1xyXG4gICAgZGljTG9haUNvbmdWaWVjID0ge307XHJcbiAgICBjb25nVmllY1ZpZXdNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XHJcbiAgICAgICAgaGVhZGVyOiAnWGVtIGNoaSB0aeG6v3QgY8O0bmcgdmnhu4djJ1xyXG4gICAgfSk7XHJcbiAgICBsb2FpQ29uZ1ZpZWNNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XHJcbiAgICAgICAgaGVhZGVyOiAnQ2jhu41uIGxv4bqhaSBjw7RuZyB2aeG7h2MnLFxyXG4gICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7IHdpZHRoOiA2MDAsIGhlaWdodDogMTIwIH0pXHJcbiAgICB9KTtcclxuICAgIHNob3dQaWNrZXJGb3JtOiBib29sZWFuO1xyXG4gICAgaGlkZGVuQWRkOiBib29sZWFuO1xyXG4gICAgaGlkZGVuRWRpdDogYm9vbGVhbjtcclxuICAgIGhpZGRlbkRlbGV0ZTogYm9vbGVhbjtcclxuICAgIHR5cGVkTGluazogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByb3RlY3RlZCBfZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9jb25nVmllY1NlcnZpY2U6IENvbmdWaWVjU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX2RtTG9haUNvbmdWaWVjU2VydmljZTogRG1Mb2FpQ29uZ1ZpZWNTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfZG1MaW5oVnVjQ29uZ1ZpZWNTZXJ2aWNlOiBEbUxpbmhWdWNDb25nVmllY1NlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9kbVByaW9yaXR5U2VydmljZTogRG1Qcmlvcml0eVNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9jYXVIaW5oV29ya2Zsb3dTZXJ2aWNlOiBDYXVIaW5oV29ya2Zsb3dTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2NvbmdWaWVjTGllblF1YW5TZXJ2aWNlOiBDb25nVmllY0xpZW5RdWFuU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9jb25nVmllY0RpbmhLZW1TZXJ2aWNlOiBDb25nVmllY0RpbmhLZW1TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2NvbmdWaWVjVGhheURvaVNlcnZpY2U6IENvbmdWaWVjVGhheURvaVNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XHJcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LmRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZUNvZGUgPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5kYXRhLnN0YXRlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcucG9wdXBTaXplLndpZHRoID0gMTM2MDtcclxuICAgICAgICB0aGlzLnNldHRpbmcucG9wdXBTaXplLmhlaWdodCA9IDc2MDtcclxuICAgICAgICB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UgPSB0aGlzLl9jb25nVmllY1NlcnZpY2U7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLm9iamVjdE5hbWUgPSAnY8O0bmcgdmnhu4djJztcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZ1dvcmtmbG93ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuaXNXb3JrZmxvd1RyZWUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2NvbmdWaWVjU2VydmljZS5hZGp1c3RTZXR0aW5nV29ya2Zsb3dGb3JDcnVkTGlzdCh0aGlzLnNldHRpbmcpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRnJvbURhc2hib2FyZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuUGFnZVRpdGxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlbkZ1bmN0aW9uQ29sdW1uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmxvYWlEYW5oU2FjaCA+IDApIHsgLy8gRGFuaCBzw6FjaCBjdiBjb24sIGN2IGxpw6puIHF1YW5cclxuICAgICAgICAgICAgdGhpcy5oaWRkZW5FZGl0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblBhZ2VUaXRsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nUGVybWlzc2lvbiA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNQaWNrZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZGVuQWRkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5GdW5jdGlvbkNvbHVtbiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuQWR2YW5jZVNlYXJjaCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbUlkQXR0YWNoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5DaGVja2JveCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZGVuQWRkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5oaWRkZW5FZGl0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5oaWRkZW5EZWxldGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc0NoaWxkVmlldykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtU3RhdGUgPT0gRm9ybVN0YXRlLlZJRVcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5Ub29sYmFyID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuaGVpZ2h0VHlwZSA9IEhlaWdodFR5cGUuZHluYW1pYztcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpeEhlaWdodFR5cGVJbkRpYWxvZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0ID0gWyd0ZW4nLCAnbW9UYSddO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5tb2RlbFNjaGVtYXMgPSBbXHJcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7IGZpZWxkOiAndGVuJywgbmFtZTogJ1TDqm4nLCBmdWxsTmFtZTogJ1TDqm4nLCBkZXNjcmlwdGlvbjogJ1TDqm4nIH0pLFxyXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoeyBmaWVsZDogJ21vVGEnLCBuYW1lOiAnTcO0IHThuqMnLCBmdWxsTmFtZTogJ03DtCB04bqjJywgZGVzY3JpcHRpb246ICdNw7QgdOG6oycgfSksXHJcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7IGZpZWxkOiAnbmdheUJhdERhdScsIGRhdGFUeXBlOiAnZGF0ZScsIG5hbWU6ICdOZ8OgeSBi4bqvdCDEkeG6p3UnLCBmdWxsTmFtZTogJ05nw6B5IGLhuq90IMSR4bqndScsIGRlc2NyaXB0aW9uOiAnTmfDoHkgYuG6r3QgxJHhuqd1JyB9KSxcclxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHsgZmllbGQ6ICduZ2F5S2V0VGh1YycsIGRhdGFUeXBlOiAnZGF0ZScsIG5hbWU6ICdOZ8OgeSBr4bq/dCB0aMO6YycsIGZ1bGxOYW1lOiAnTmfDoHkga+G6v3QgdGjDumMnLCBkZXNjcmlwdGlvbjogJ05nw6B5IGvhur90IHRow7pjJyB9KSxcclxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHsgZmllbGQ6ICdpZFByaW9yaXR5JywgbmFtZTogJ8SQ4buZIMawdSB0acOqbicsIGZ1bGxOYW1lOiAnxJDhu5kgxrB1IHRpw6puJywgZGVzY3JpcHRpb246ICfEkOG7mSDGsHUgdGnDqm4nIH0pLFxyXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoeyBmaWVsZDogJ2lkTG9haUNvbmdWaWVjJywgbmFtZTogJ0xv4bqhaSBjw7RuZyB2aeG7h2MnLCBmdWxsTmFtZTogJ0xv4bqhaSBjw7RuZyB2aeG7h2MnLCBkZXNjcmlwdGlvbjogJ0xv4bqhaSBjw7RuZyB2aeG7h2MnIH0pLFxyXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoeyBmaWVsZDogJ2lkTGluaFZ1YycsIG5hbWU6ICdMxKluaCB24buxYycsIGZ1bGxOYW1lOiAnTMSpbmggduG7sWMnLCBkZXNjcmlwdGlvbjogJ0zEqW5oIHbhu7FjJyB9KSxcclxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHsgZmllbGQ6ICdwaGFuVHJhbScsIGRhdGFUeXBlOiAnaW50JywgbmFtZTogJ1Bo4bqnbiB0csSDbScsIGZ1bGxOYW1lOiAnUGjhuqduIHRyxINtJywgZGVzY3JpcHRpb246ICdQaOG6p24gdHLEg20nIH0pXHJcbiAgICAgICAgXTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuY29scyA9IFtcclxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICd0ZW4nLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdjb25nVmllY0luZm8nLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxOHJlbSdcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnbmdheUJhdERhdScsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJzExMHB4JyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnbmdheUtldFRodWMnLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMTVweCcsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkTG9haUNvbmdWaWVjJyxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwcHgnLFxyXG4gICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMuX2RtTG9haUNvbmdWaWVjU2VydmljZSxcclxuICAgICAgICAgICAgICAgIGlzVHJlZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGZpZWxkVHJlZTogJ2lkUGFyZW50JyxcclxuICAgICAgICAgICAgICAgIHNlbGVjdERlc2NlbmRhbnQ6IHRydWVcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnaWRMaW5oVnVjJyxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwcHgnLFxyXG4gICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMuX2RtTGluaFZ1Y0NvbmdWaWVjU2VydmljZVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZFByaW9yaXR5JyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnaWRQcmlvcml0eScsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZVJlZkZpZWxkOiAnaWRQcmlvcml0eScsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJzgwcHgnLFxyXG4gICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMuX2RtUHJpb3JpdHlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgZmllbGRQbHVzOiAnYmFja2dyb3VuZCxjb2xvcicsXHJcbiAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3c6IChyb3dJdGVtLCBkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93SXRlbS5wcmlvcml0eUNvbG9yID0gZGF0YS5jb2xvcjtcclxuICAgICAgICAgICAgICAgICAgICByb3dJdGVtLnByaW9yaXR5QmFja2dyb3VuZCA9IGRhdGEuYmFja2dyb3VuZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMucm9vdENvbnRleHQuc3Vic2NyaWJlKFRvcGljUmVsb2FkQ29uZ1ZpZWNWNSwgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVTY2hlbWFTZWFyY2goKTtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVNjaGVtYVNlYXJjaCgpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFNjaGVtYS5sb2FpQ29uZ1ZpZWMgPSBuZXcgRHJvcGRvd25Db250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdDaOG7jW4gbG/huqFpIGPDtG5nIHZp4buHYycsXHJcbiAgICAgICAgICAgIGJhc2VTZXJ2aWNlOiB0aGlzLl9kbUxvYWlDb25nVmllY1NlcnZpY2UsXHJcbiAgICAgICAgICAgIGxvYWRPbkluaXQ6IHRydWUsXHJcbiAgICAgICAgICAgIGlzVHJlZTogdHJ1ZSxcclxuICAgICAgICAgICAgZmllbGRUcmVlOiAnaWRQYXJlbnQnLFxyXG4gICAgICAgICAgICB2YWx1ZVBhcmVudFJvb3Q6IG51bGwsXHJcbiAgICAgICAgICAgIHNvcnRzOiBbeyBmaWVsZDogJ21hUGhhbkNhcCcsIGRpcjogMSB9XSxcclxuICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnM6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdoaWVuVGhpVHJvbmdDb25nVmllYycsIE9wZXJhdG9yLmVxdWFsLCB0cnVlKVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC51blN1YnNjcmliZShUb3BpY1JlbG9hZENvbmdWaWVjVjUpO1xyXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbW9kaWZ5R3JpZEluZm8oZ3JpZEluZm8/OiBHcmlkSW5mbykge1xyXG4gICAgICAgIGlmICh0aGlzLmlkcyAmJiAhdGhpcy5pZHMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFncmlkSW5mby5zb3J0cyB8fCAhZ3JpZEluZm8uc29ydHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGdyaWRJbmZvLnNvcnRzID0gW3sgZmllbGQ6ICdjcmVhdGVkJywgZGlyOiAtMSB9XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbUlkKSB7XHJcbiAgICAgICAgICAgIGdyaWRJbmZvLmZpbHRlcnMudW5zaGlmdCh0aGlzLm5ld0ZpbHRlcignaXRlbUlkJywgT3BlcmF0b3IuZXF1YWwsIHRoaXMuaXRlbUlkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaXRlbUlkQXR0YWNoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxzdElkID0gYXdhaXQgdGhpcy5nZXRJZHNDb25nVmllY0J5SXRlbUlkQXR0YWNoKCk7XHJcbiAgICAgICAgICAgIGlmICghbHN0SWQubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGdyaWRJbmZvLmZpbHRlcnMucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdpZCcsIE9wZXJhdG9yLmluLCBsc3RJZClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzRnJvbURhc2hib2FyZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZUNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGdyaWRJbmZvLmZpbHRlcnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcihLZXlGaWx0ZXJTdGF0ZUJ5TWVudUNvbmdWaWVjLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5zdGF0ZUNvZGUpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pZHMpIHtcclxuICAgICAgICAgICAgZ3JpZEluZm8uZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKCdpZCcsIE9wZXJhdG9yLmluLCB0aGlzLmlkcykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubG9haURhbmhTYWNoID09IEVudW1Mb2FpRGFuaFNhY2hDb25nVmllYy5Db25nVmllY0xpZW5RdWFuKSB7XHJcbiAgICAgICAgICAgIGdyaWRJbmZvLmZpbHRlcnMgPSBbXTtcclxuICAgICAgICAgICAgLy8gQ8O0bmcgdmnhu4djIGxpw6puIHF1YW5cclxuICAgICAgICAgICAgY29uc3QgaWRzQ29uZ1ZpZWNMaWVuUXVhbiA9IGF3YWl0IHRoaXMuZ2V0SWRzQ29uZ1ZpZWNMaWVuUXVhbigpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1BpY2tlcikge1xyXG4gICAgICAgICAgICAgICAgZ3JpZEluZm8uZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKCdpZCcsIE9wZXJhdG9yLm5vdEVxdWFsLCB0aGlzLmlkQ29uZ1ZpZWMpKTtcclxuICAgICAgICAgICAgICAgIGlmIChpZHNDb25nVmllY0xpZW5RdWFuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBncmlkSW5mby5maWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIoJ2lkJywgT3BlcmF0b3Iubm90SW4sIGlkc0NvbmdWaWVjTGllblF1YW4pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpZHNDb25nVmllY0xpZW5RdWFuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBncmlkSW5mby5maWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIoJ2lkJywgT3BlcmF0b3IuaW4sIGlkc0NvbmdWaWVjTGllblF1YW4pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmxvYWlEYW5oU2FjaCA9PSBFbnVtTG9haURhbmhTYWNoQ29uZ1ZpZWMuQ29uZ1ZpZWNDb24pIHtcclxuICAgICAgICAgICAgZ3JpZEluZm8uZmlsdGVycyA9IFtdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1BpY2tlcikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IFtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignaWRDaGEnLCBPcGVyYXRvci5pc051bGwsIHRydWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdpZCcsIE9wZXJhdG9yLm5vdEVxdWFsLCB0aGlzLmlkQ29uZ1ZpZWMpXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybVN0YXRlICE9PSBGb3JtU3RhdGUuQUREKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcnMgPSBhd2FpdCB0aGlzLl9jb25nVmllY1NlcnZpY2UuZ2V0RGV0YWlsKHRoaXMuaWRDb25nVmllYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFycy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJzLmRhdGEuaWRDaGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcignaWQnLCBPcGVyYXRvci5ub3RFcXVhbCwgcnMuZGF0YS5pZENoYSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZ3JpZEluZm8uZmlsdGVycy5wdXNoKC4uLmZpbHRlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZ3JpZEluZm8uZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKCdpZENoYScsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLmlkQ29uZ1ZpZWMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRJZHNDb25nVmllY0J5SXRlbUlkQXR0YWNoKCkge1xyXG4gICAgICAgIGNvbnN0IGxzdERpbmhLZW0gPSAoYXdhaXQgdGhpcy5fY29uZ1ZpZWNEaW5oS2VtU2VydmljZS5nZXRBbGwoW1xyXG4gICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignc2VydmljZUNvZGUnLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5zZXJ2aWNlQ29kZSksXHJcbiAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdlbnRpdHknLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5lbnRpdHkpLFxyXG4gICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignZW50aXR5S2V5JywgT3BlcmF0b3IuZXF1YWwsIHRoaXMuaXRlbUlkQXR0YWNoKSxcclxuICAgICAgICBdLCAnaWRDb25nVmllYycpKS5kYXRhO1xyXG4gICAgICAgIHJldHVybiBsc3REaW5oS2VtLm1hcChxID0+IHEuaWRDb25nVmllYyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYmVmb3JlUmVuZGVyRGF0YVNvdXJjZShkYXRhU291cmNlKSB7XHJcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWl0ZW0ucGhhblRyYW0pIGl0ZW0ucGhhblRyYW0gPSA1O1xyXG4gICAgICAgICAgICBpdGVtLnBlcmNlbnRXaWR0aCA9IGAke2l0ZW0ucGhhblRyYW19JWA7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvbWlzZUdldERhdGEoZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNGcm9tRGFzaGJvYXJkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSB7XHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLnBhcmVudE1vZGVsLnNlbGVjdGVkSXRlbS5maWx0ZXIsXHJcbiAgICAgICAgICAgICAgICBzdGF0ZUNvZGU6IHRoaXMucGFyZW50TW9kZWwuc2VsZWN0ZWRJdGVtLnN0YXRlQ29kZSxcclxuICAgICAgICAgICAgICAgIHN0YXRlQ29kZUJ5Vmlld0RvblZpOiB0aGlzLnBhcmVudE1vZGVsLnNlbGVjdGVkSXRlbS5zdGF0ZUNvZGVCeVZpZXdEb25WaSxcclxuICAgICAgICAgICAgICAgIGdyaWRJbmZvXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb25nVmllY1NlcnZpY2UuZ2V0TGlzdFRhc2tzRGFzaGJvYXJkKGZpbHRlcnMpO1xyXG4gICAgICAgICAgICAvLyBncmlkSW5mby5maWx0ZXJzLnB1c2goXHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLm5ld0ZpbHRlcihLZXlGaWx0ZXJTdGF0ZUJ5TWVudUNvbmdWaWVjLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5wYXJlbnRNb2RlbC5zZWxlY3RlZEl0ZW0uc3RhdGVDb2RlKVxyXG4gICAgICAgICAgICAvLyApO1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gc3VwZXIuZ2V0UHJvbWlzZUdldERhdGEoZ3JpZEluZm8pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldFByb21pc2VHZXREYXRhKGdyaWRJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0SWRzQ29uZ1ZpZWNMaWVuUXVhbigpIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJzID0gW3RoaXMubmV3RmlsdGVyQ29udGFpbmVyKCdvcicsXHJcbiAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdpZENvbmdWaWVjJywgT3BlcmF0b3IuZXF1YWwsIHRoaXMuaWRDb25nVmllYyksXHJcbiAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdpZENvbmdWaWVjTGllblF1YW4nLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5pZENvbmdWaWVjKSldO1xyXG4gICAgICAgIGNvbnN0IHJzID0gYXdhaXQgdGhpcy5fY29uZ1ZpZWNMaWVuUXVhblNlcnZpY2UuZ2V0QWxsKGZpbHRlcnMsICdpZENvbmdWaWVjLGlkQ29uZ1ZpZWNMaWVuUXVhbicpO1xyXG4gICAgICAgIGNvbnN0IGlkc0NvbmdWaWVjTGllblF1YW4gPSBbXTtcclxuICAgICAgICBpZiAocnMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICBycy5kYXRhLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pZENvbmdWaWVjID09IGVsZW1lbnQuaWRDb25nVmllYykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkc0NvbmdWaWVjTGllblF1YW4ucHVzaChlbGVtZW50LmlkQ29uZ1ZpZWNMaWVuUXVhbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmlkQ29uZ1ZpZWMgPT0gZWxlbWVudC5pZENvbmdWaWVjTGllblF1YW4pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZHNDb25nVmllY0xpZW5RdWFuLnB1c2goZWxlbWVudC5pZENvbmdWaWVjKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpZHNDb25nVmllY0xpZW5RdWFuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGjDqm0gY8O0bmcgdmnhu4djXHJcbiAgICAgKiBT4bq9IG3hu58gbMOqbiBmb3JtIMSR4buDIGNo4buNbiBsb+G6oWkgY8O0bmcgdmnhu4djIHRyxrDhu5tjIHLhu5NpIG3hu5tpIG3hu58gZm9ybSB0aMOqbSBt4bubaSBjw7RuZyB2aeG7h2NcclxuICAgICAqL1xyXG4gICAgYWRkQ29uZ1ZpZWMoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hEYXRhLmxvYWlDb25nVmllYyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5sb2FpQ29uZ1ZpZWNNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dGb3JtQWRkVGFzayhldnQpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hEYXRhLmxvYWlDb25nVmllYyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0LhuqFuIHBo4bqjaSBjaOG7jW4gbG/huqFpIGPDtG5nIHZp4buHYycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvYWlDb25nVmllY01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2FkZChldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGJlZm9yZUFkZCgpIHtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5kYXRhLmlkTG9haUNvbmdWaWVjID0gdGhpcy5zZWFyY2hEYXRhLmxvYWlDb25nVmllYztcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVDaGFuZ2VkU3RhdHVzV29ya2Zsb3coaXRlbUlkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29uZ1ZpZWNGb3JtXHJcbiAgICAgICAgICAgICYmIHRoaXMuZm9ybU1vZGVsLmRhdGFcclxuICAgICAgICAgICAgJiYgdGhpcy5mb3JtTW9kZWwuZGF0YS5pZCA9PSBpdGVtSWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5jb25nVmllY0Zvcm0uY2xlYXJXb3JrZmxvd0J1dHRvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5jb25nVmllY0Zvcm0uX3RyaWdnZXJHZXREZXRhaWwoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DaG9uQ29uZ1ZpZWMoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93UGlja2VyRm9ybSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdHJpZ2dlclN5bmNQZXJtaXNzaW9uKCkge1xyXG4gICAgICAgIHRoaXMuX2NvbmdWaWVjVGhheURvaVNlcnZpY2UudHJpZ2dlclN5bmNUYXNrUGVybWlzc2lvbigpXHJcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlcywgJ8SQ4buTbmcgYuG7mSB0aMOgbmggY8O0bmcnKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlU2F2ZWQoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSBmYWxzZTtcclxuICAgICAgICAvLyBMw6AgZm9ybSB0cnV54buBbiBpZCB04burIGLDqm4gbmdvw6BpIHbDoG9cclxuICAgICAgICAvLyBT4bq9IGPhuqduIHVwZGF0ZSBuZ8aw4bujYyBs4bqhaSBpZHMgbuG6v3UgbMOgIGNhc2UgdGjDqm0gbeG7m2kgYuG6o24gZ2hpXHJcbiAgICAgICAgLy8gdsOgIHJlbG9hZFxyXG4gICAgICAgIGlmICh0aGlzLmlkcyAmJiBkYXRhLmluc2VydCkge1xyXG4gICAgICAgICAgICB0aGlzLmlkcy5wdXNoKGRhdGEuaWQpO1xyXG4gICAgICAgICAgICB0aGlzLmlkc0NoYW5nZS5lbWl0KHRoaXMuaWRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jcnVkTGlzdC5yZWxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVBZnRlckluc2VydGVkKGlkOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5sb2FpRGFuaFNhY2ggPT0gRW51bUxvYWlEYW5oU2FjaENvbmdWaWVjLkNvbmdWaWVjTGllblF1YW4pIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBbe1xyXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpLFxyXG4gICAgICAgICAgICAgICAgaWRDb25nVmllYzogdGhpcy5pZENvbmdWaWVjLFxyXG4gICAgICAgICAgICAgICAgaWRDb25nVmllY0xpZW5RdWFuOiBpZFxyXG4gICAgICAgICAgICB9XTtcclxuICAgICAgICAgICAgdGhpcy5pbnNlcnRDb25nVmllY0xpZW5RdWFuKGl0ZW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5sb2FpRGFuaFNhY2ggPT0gRW51bUxvYWlEYW5oU2FjaENvbmdWaWVjLkNvbmdWaWVjQ29uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsID0ge1xyXG4gICAgICAgICAgICAgICAgaWRDaGE6IHRoaXMuaWRDb25nVmllYyxcclxuICAgICAgICAgICAgICAgIGlkc0NvbmdWaWVjOiBbaWRdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0Q29uZ1ZpZWNDb24obW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBiZWZvcmVSZWxvYWRBZnRlckRlbGV0ZShpZHM6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaWRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0lkcyA9IHRoaXMuaWRzLmZpbHRlcihxID0+IGlkcy5zb21lKHggPT4geCA9PSBxKSk7XHJcbiAgICAgICAgICAgIHRoaXMuaWRzID0gbmV3SWRzO1xyXG4gICAgICAgICAgICB0aGlzLmlkc0NoYW5nZS5lbWl0KHRoaXMuaWRzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvY2Vzc0RlbGV0ZShpZHMgPSBbXSkge1xyXG4gICAgICAgIGlmICh0aGlzLmxvYWlEYW5oU2FjaCA9PSBFbnVtTG9haURhbmhTYWNoQ29uZ1ZpZWMuQ29uZ1ZpZWNMaWVuUXVhbikge1xyXG4gICAgICAgICAgICBjb25zdCBtb2RlbCA9IHtcclxuICAgICAgICAgICAgICAgIGlkQ29uZ1ZpZWM6IHRoaXMuaWRDb25nVmllYyxcclxuICAgICAgICAgICAgICAgIGlkc0NvbmdWaWVjOiBpZHNcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5fY29uZ1ZpZWNMaWVuUXVhblNlcnZpY2UuZGVsZXRlQnVsa0NvbmdWaWVjTGllblF1YW4obW9kZWwpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVEYXRhU3VjY2VzcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nQnlSZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YUVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5sb2FpRGFuaFNhY2ggPT0gRW51bUxvYWlEYW5oU2FjaENvbmdWaWVjLkNvbmdWaWVjQ29uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbmdWaWVjU2VydmljZS5kZWxldGVCdWxrQ29uZ1ZpZWNDb24oaWRzKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YVN1Y2Nlc3MoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZURhdGFFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZGVsZXRlQ29uZ1ZpZWNUaGVvTG9haURhbmhTYWNoKHJvd0RhdGEpIHtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZUNvbmZpcm0oKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgaWYgKCFycykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RlbGV0ZShbcm93RGF0YS5pZF0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgb25TZWxlY3RDb25nVmllYygpIHtcclxuICAgICAgICBpZiAodGhpcy5jb25nVmllY1BpY2tlci5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubG9haURhbmhTYWNoID09IEVudW1Mb2FpRGFuaFNhY2hDb25nVmllYy5Db25nVmllY0xpZW5RdWFuKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuY29uZ1ZpZWNQaWNrZXIubW9kZWwuc2VsZWN0ZWRJdGVtcy5tYXAoKGl0ZW0pID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkQ29uZ1ZpZWM6IHRoaXMuaWRDb25nVmllYyxcclxuICAgICAgICAgICAgICAgICAgICBpZENvbmdWaWVjTGllblF1YW46IGl0ZW0uaWRcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0Q29uZ1ZpZWNMaWVuUXVhbihpdGVtcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5sb2FpRGFuaFNhY2ggPT0gRW51bUxvYWlEYW5oU2FjaENvbmdWaWVjLkNvbmdWaWVjQ29uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2RlbCA9IHtcclxuICAgICAgICAgICAgICAgICAgICBpZENoYTogdGhpcy5pZENvbmdWaWVjLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkc0NvbmdWaWVjOiB0aGlzLmNvbmdWaWVjUGlja2VyLm1vZGVsLnNlbGVjdGVkSXRlbXMubWFwKHggPT4geC5pZClcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluc2VydENvbmdWaWVjQ29uKG1vZGVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNob3dQaWNrZXJGb3JtID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaW5zZXJ0Q29uZ1ZpZWNMaWVuUXVhbihpdGVtcyA9IFtdKSB7XHJcbiAgICAgICAgdGhpcy5fY29uZ1ZpZWNMaWVuUXVhblNlcnZpY2UuaW5zZXJ0QnVsa0FzeW5jKGl0ZW1zKS50aGVuKHJlc3BvbnNlID0+IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzcG9uc2UsICcnLCBmID0+IHRoaXMucmVsb2FkKCkpKTtcclxuICAgIH1cclxuXHJcbiAgICBpbnNlcnRDb25nVmllY0Nvbihtb2RlbCkge1xyXG4gICAgICAgIHRoaXMuX2NvbmdWaWVjU2VydmljZS51cGRhdGVCdWxrSWRDaGEobW9kZWwpLnRoZW4ocmVzcG9uc2UgPT4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXNwb25zZSwgJycsIGYgPT4gdGhpcy5yZWxvYWQoKSkpO1xyXG4gICAgfVxyXG59XHJcblxyXG4iLCI8Y3J1ZC1saXN0ICNjcnVkTGlzdCBbbW9kZWxdPVwibW9kZWxcIiBbc2V0dGluZ109XCJzZXR0aW5nXCIgW2RhdGFTb3VyY2VdPVwibW9kZWwuZGF0YVNvdXJjZVwiIFtoaWRkZW5BZGRdPVwiaGlkZGVuQWRkXCJcclxuICAgIFtoaWRkZW5FZGl0XT1cImhpZGRlbkVkaXRcIiBbaGlkZGVuRGVsZXRlXT1cImhpZGRlbkRlbGV0ZVwiIFtoaWRkZW5Db3B5TGlua109XCJ0cnVlXCIgW2hpZGRlbkFkZF09XCJpc0Zyb21EYXNoYm9hcmRcIlxyXG4gICAgW3Nob3dTY3JvbGxIb3Jpem9udGFsXT1cInRydWVcIiBbbWVudUJ1dHRvbnNdPVwiZ2V0TWVudUJ1dHRvbnNcIiAob25Db3B5TGluayk9XCJfY29weUxpbmsoJGV2ZW50KVwiXHJcbiAgICAob25Db3B5TGlua011bHRpcGxlKT1cIl9jb3B5TGlua011bHRpcGxlKClcIiAob25SZWxvYWQpPVwiX3RyaWdnZXJQcm9jZXNzRGF0YSgkZXZlbnQpXCIgKG9uQWRkKT1cImFkZENvbmdWaWVjKCRldmVudClcIlxyXG4gICAgKG9uRWRpdCk9XCJfZWRpdCgkZXZlbnQpXCIgKG9uVmlldyk9XCJfZWRpdCgkZXZlbnQpXCIgKG9uRGVsZXRlKT1cIl9kZWxldGUoJGV2ZW50KVwiXHJcbiAgICAob25EZWxldGVNdWx0aXBsZSk9XCJfZGVsZXRlTXVsdGlwbGUoJGV2ZW50KVwiIChvblJlbG9hZGVkKT1cIl91bm1hcmtMb2FkaW5nKClcIlxyXG4gICAgKG9uQ2hhbmdlZFN0YXR1c1dvcmtmbG93KT1cImhhbmRsZUNoYW5nZWRTdGF0dXNXb3JrZmxvdygkZXZlbnQpXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgI2J1dHRvbkFmdGVyVG9vbGJhcj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwibG9haURhbmhTYWNoID4gMCAmJiAhaXNQaWNrZXJcIiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBwUmlwcGxlIGxhYmVsPVwiQ2jhu41uIGPDtG5nIHZp4buHY1wiXHJcbiAgICAgICAgICAgIGljb249XCJwaSBwaS1wbHVzXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXN1Y2Nlc3NcIiAoY2xpY2spPVwib25DaG9uQ29uZ1ZpZWMoKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgaWNvbj1cInBpIHBpLXJlcGxheVwiIGxhYmVsPVwixJDhu5NuZyBi4buZIHF1eeG7gW5cIlxyXG4gICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXRleHRcIiAoY2xpY2spPVwidHJpZ2dlclN5bmNQZXJtaXNzaW9uKClcIj48L2J1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2NvbmdWaWVjSW5mbyBsZXQtcm93RGF0YT1cInJvd0RhdGFcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLXRhc2staW5mb1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VsbC10YXNrLWluZm9cIj5cclxuICAgICAgICAgICAgICAgIHt7cm93RGF0YS50ZW59fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcmNlbnQtZG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbCB0cmFuc2l0aW9uLXdpZHRoXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiByb3dEYXRhLnBlcmNlbnRXaWR0aFxyXG4gICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaWRQcmlvcml0eSBsZXQtcm93RGF0YT1cInJvd0RhdGFcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJpb3JpdHlcIj5cclxuICAgICAgICAgICAgPHNwYW4gW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IHJvd0RhdGEucHJpb3JpdHlDb2xvcixcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHJvd0RhdGEucHJpb3JpdHlCYWNrZ3JvdW5kXHJcbiAgICAgICAgICAgIH1cIj57e3Jvd0RhdGEuc3RyaWRQcmlvcml0eX19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImxvYWlEYW5oU2FjaCA+IDBcIiAjZnVuY3Rpb24gbGV0LXJvd0RhdGE9XCJyb3dEYXRhXCIgbGV0LWNydWRMaXN0PVwiY3J1ZExpc3RcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIHBSaXBwbGUgcFRvb2x0aXA9XCJ7eydGT1JNLkRFTEVURScgfCB0cmFuc2xhdGV9fVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlciBsaW5rLW9yLWFjdGlvblwiIGljb249XCJwaSBwaS10cmFzaFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVDb25nVmllY1RoZW9Mb2FpRGFuaFNhY2gocm93RGF0YSlcIj48L2J1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbjwvY3J1ZC1saXN0PlxyXG5cclxuPHRuLWRpYWxvZyAqbmdJZj1cImxvYWlDb25nVmllY01vZGVsLnNob3dFZGl0Rm9ybVwiIFtzdHlsZUNsYXNzXT1cIid0bi1mb3JtLWRpYWxvZydcIlxyXG4gICAgW2hlYWRlcl09XCJsb2FpQ29uZ1ZpZWNNb2RlbC5oZWFkZXIgfCB0cmFuc2xhdGVcIiBbcG9wdXBTaXplXT1cImxvYWlDb25nVmllY01vZGVsLnBvcHVwU2l6ZVwiXHJcbiAgICAob25IaWRlKT1cImxvYWlDb25nVmllY01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicC1jb2wtMTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicC1ncmlkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLW1kLTEwIHRuLWRyb3Bkb3duIHAtZmx1aWRcIj5cclxuICAgICAgICAgICAgICAgIDxkcm9wZG93biBbY29udHJvbF09XCJzZWFyY2hTY2hlbWEubG9haUNvbmdWaWVjXCIgWyh2YWx1ZSldPVwic2VhcmNoRGF0YS5sb2FpQ29uZ1ZpZWNcIj48L2Ryb3Bkb3duPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtbWQtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBjbGFzcz1cInAtYnV0dG9uLXByaW1hcnkgcC1jb2wtMTJcIiBsYWJlbD1cIk9rXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0Zvcm1BZGRUYXNrKCRldmVudClcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC90bi1kaWFsb2c+XHJcblxyXG48dG4tZGlhbG9nICpuZ0lmPVwic2hvd0RldGFpbEZvcm1cIiAjZGlhbG9nIFtzdHlsZUNsYXNzXT1cIidjb25ndmllYy1mb3JtIHRuLWZvcm0tZGlhbG9nJ1wiXHJcbiAgICBbaGVhZGVyXT1cInNldHRpbmcucG9wdXBIZWFkZXIgfCB0cmFuc2xhdGVcIiBbcG9wdXBTaXplXT1cInNldHRpbmcucG9wdXBTaXplXCIgW3VzZURlZmF1bHRTY3JvbGxCYXJdPVwidHJ1ZVwiXHJcbiAgICAob25IaWRlKT1cInNob3dEZXRhaWxGb3JtID0gZmFsc2VcIj5cclxuICAgIDxiYXNlLWNvbmd2aWVjLWZvcm0gI2Zvcm1CYXNlIFtwYXJlbnRNb2RlbF09XCJtb2RlbFwiIFtwYXJlbnRTZXR0aW5nXT1cInNldHRpbmdcIiBbcGFyZW50Q29udGV4dF09XCJjb250ZXh0XCJcclxuICAgICAgICBbbW9kZWxdPVwiZm9ybU1vZGVsXCIgW2NydWRMaXN0XT1cImNydWRMaXN0XCIgW2l0ZW1JZF09XCJpdGVtSWRcIiAob25TYXZlZCk9XCJoYW5kbGVTYXZlZCgkZXZlbnQpXCJcclxuICAgICAgICAob25DYW5jZWwpPVwiX2hhbmRsZUNhbmNlbCgkZXZlbnQpXCIgKG9uQWZ0ZXJJbnNlcnRlZCk9XCJoYW5kbGVBZnRlckluc2VydGVkKCRldmVudClcIj5cclxuICAgIDwvYmFzZS1jb25ndmllYy1mb3JtPlxyXG48L3RuLWRpYWxvZz5cclxuXHJcbjx0bi1kaWFsb2cgKm5nSWY9XCJzaG93UGlja2VyRm9ybVwiICNkaWFsb2cgW3N0eWxlQ2xhc3NdPVwiJ2Nvbmd2aWVjLWZvcm0gdG4tZm9ybS1kaWFsb2cnXCJcclxuICAgIFtoZWFkZXJdPVwiJ0No4buNbiBjw7RuZyB2aeG7h2MnIHwgdHJhbnNsYXRlXCIgW3BvcHVwU2l6ZV09XCJzZXR0aW5nLnBvcHVwU2l6ZVwiIFtzaG93Rm9vdGVyXT1cInRydWVcIlxyXG4gICAgW3VzZURlZmF1bHRTY3JvbGxCYXJdPVwidHJ1ZVwiIChvbkhpZGUpPVwic2hvd1BpY2tlckZvcm0gPSBmYWxzZVwiPlxyXG4gICAgPGJhc2UtY29uZ3ZpZWMgI2NvbmdWaWVjUGlja2VyIFtpc1BpY2tlcl09XCJ0cnVlXCIgW2Zvcm1TdGF0ZV09XCJmb3JtU3RhdGVcIiBbbG9haURhbmhTYWNoXT1cImxvYWlEYW5oU2FjaFwiXHJcbiAgICAgICAgW2lkQ29uZ1ZpZWNdPVwiaWRDb25nVmllY1wiPlxyXG4gICAgPC9iYXNlLWNvbmd2aWVjPlxyXG4gICAgPG5nLXRlbXBsYXRlICNmb290ZXI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBpY29uPVwicGkgcGktc2F2ZVwiIGNsYXNzPVwicC1idXR0b24tdGV4dFwiIFtsYWJlbF09XCInQ2jhu41uJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvblNlbGVjdENvbmdWaWVjKClcIj48L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGljb249XCJwaSBwaS1yZXBsYXlcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tc2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgW2xhYmVsXT1cIidGT1JNLkNBTkNFTCcgfCB0cmFuc2xhdGVcIiBwcmV2ZW50VGFiIChjbGljayk9XCJzaG93UGlja2VyRm9ybT1mYWxzZVwiPjwvYnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC90bi1kaWFsb2c+Il19
|
|
@@ -45,7 +45,7 @@ export class BaseDmLinhVucCongViecFormComponent extends DataFormBase {
|
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
BaseDmLinhVucCongViecFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: BaseDmLinhVucCongViecFormComponent, deps: [{ token: i0.Injector }, { token: i1.DmLinhVucCongViecService }], target: i0.ɵɵFactoryTarget.Component });
|
|
48
|
-
BaseDmLinhVucCongViecFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: BaseDmLinhVucCongViecFormComponent, selector: "base-dm-linhvuc-congviec-form", providers: [ComponentContextService], usesInheritance: true, ngImport: i0, template: "<crud-form #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\"\r\n (onFormReady)=\"_handleFormReady($event)\">\r\n</crud-form>\r\n<ng-template #buttonTemplate>\r\n <button *ngIf=\"!model.data.__disableEdit && !__isFormView\" type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\"\r\n [label]=\"'FORM.SAVE' | translate\" (click)=\"_handleSave($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n</ng-template>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "label", "icon"] }, { kind: "component", type: i4.CrudFormComponent, selector: "crud-form", inputs: ["setting", "context", "filesUploaded", "isViewMode", "disableKeypressControl", "disableCaching", "styleClass", "useGridTemplate", "formId", "formClass", "autoFocus", "trapFocus", "data", "formState"], outputs: ["onFormReady", "onControlReady", "onAllControlReady", "onModelChanged", "dataChange", "onChange", "onAfterTrinhKy"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] });
|
|
48
|
+
BaseDmLinhVucCongViecFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: BaseDmLinhVucCongViecFormComponent, selector: "base-dm-linhvuc-congviec-form", providers: [ComponentContextService], usesInheritance: true, ngImport: i0, template: "<crud-form #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\"\r\n (onFormReady)=\"_handleFormReady($event)\">\r\n</crud-form>\r\n<ng-template #buttonTemplate>\r\n <button *ngIf=\"!model.data.__disableEdit && !__isFormView\" type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\"\r\n [label]=\"'FORM.SAVE' | translate\" (click)=\"_handleSave($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n</ng-template>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i4.CrudFormComponent, selector: "crud-form", inputs: ["setting", "context", "filesUploaded", "isViewMode", "disableKeypressControl", "disableCaching", "styleClass", "useGridTemplate", "formId", "formClass", "autoFocus", "trapFocus", "data", "formState"], outputs: ["onFormReady", "onControlReady", "onAllControlReady", "onModelChanged", "dataChange", "onChange", "onAfterTrinhKy"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] });
|
|
49
49
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: BaseDmLinhVucCongViecFormComponent, decorators: [{
|
|
50
50
|
type: Component,
|
|
51
51
|
args: [{ selector: 'base-dm-linhvuc-congviec-form', providers: [ComponentContextService], template: "<crud-form #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\"\r\n (onFormReady)=\"_handleFormReady($event)\">\r\n</crud-form>\r\n<ng-template #buttonTemplate>\r\n <button *ngIf=\"!model.data.__disableEdit && !__isFormView\" type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\"\r\n [label]=\"'FORM.SAVE' | translate\" (click)=\"_handleSave($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n</ng-template>\r\n" }]
|
package/esm2020/congviec/dm-loai-congviec/dm-loai-congviec-form/dm-loai-congviec-form.component.mjs
CHANGED
|
@@ -73,7 +73,7 @@ export class BaseDmLoaiCongViecFormComponent extends DataFormBase {
|
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
BaseDmLoaiCongViecFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: BaseDmLoaiCongViecFormComponent, deps: [{ token: i0.Injector }, { token: i1.DmLoaiCongViecService }], target: i0.ɵɵFactoryTarget.Component });
|
|
76
|
-
BaseDmLoaiCongViecFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: BaseDmLoaiCongViecFormComponent, selector: "base-dm-loai-congviec-form", providers: [ComponentContextService], usesInheritance: true, ngImport: i0, template: "<crud-form #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\"\r\n (onFormReady)=\"_handleFormReady($event)\">\r\n</crud-form>\r\n<ng-template #buttonTemplate>\r\n <button *ngIf=\"!model.data.__disableEdit && !__isFormView\" type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\"\r\n [label]=\"'FORM.SAVE' | translate\" (click)=\"_handleSave($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n</ng-template>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "label", "icon"] }, { kind: "component", type: i4.CrudFormComponent, selector: "crud-form", inputs: ["setting", "context", "filesUploaded", "isViewMode", "disableKeypressControl", "disableCaching", "styleClass", "useGridTemplate", "formId", "formClass", "autoFocus", "trapFocus", "data", "formState"], outputs: ["onFormReady", "onControlReady", "onAllControlReady", "onModelChanged", "dataChange", "onChange", "onAfterTrinhKy"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] });
|
|
76
|
+
BaseDmLoaiCongViecFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: BaseDmLoaiCongViecFormComponent, selector: "base-dm-loai-congviec-form", providers: [ComponentContextService], usesInheritance: true, ngImport: i0, template: "<crud-form #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\"\r\n (onFormReady)=\"_handleFormReady($event)\">\r\n</crud-form>\r\n<ng-template #buttonTemplate>\r\n <button *ngIf=\"!model.data.__disableEdit && !__isFormView\" type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\"\r\n [label]=\"'FORM.SAVE' | translate\" (click)=\"_handleSave($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n</ng-template>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i4.CrudFormComponent, selector: "crud-form", inputs: ["setting", "context", "filesUploaded", "isViewMode", "disableKeypressControl", "disableCaching", "styleClass", "useGridTemplate", "formId", "formClass", "autoFocus", "trapFocus", "data", "formState"], outputs: ["onFormReady", "onControlReady", "onAllControlReady", "onModelChanged", "dataChange", "onChange", "onAfterTrinhKy"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] });
|
|
77
77
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: BaseDmLoaiCongViecFormComponent, decorators: [{
|
|
78
78
|
type: Component,
|
|
79
79
|
args: [{ selector: 'base-dm-loai-congviec-form', providers: [ComponentContextService], template: "<crud-form #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\"\r\n (onFormReady)=\"_handleFormReady($event)\">\r\n</crud-form>\r\n<ng-template #buttonTemplate>\r\n <button *ngIf=\"!model.data.__disableEdit && !__isFormView\" type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\"\r\n [label]=\"'FORM.SAVE' | translate\" (click)=\"_handleSave($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n</ng-template>\r\n" }]
|