UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

80 lines 17.3 kB
import { Component, HostListener } from '@angular/core'; import { AlertService, GainsightService, gettext } from '@c8y/ngx-components'; import { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service'; import { BULK_OPERATION_EVENT } from '@c8y/ngx-components/operations/product-experience'; import { BsModalRef } from 'ngx-bootstrap/modal'; import { Subject } from 'rxjs'; import * as i0 from "@angular/core"; import * as i1 from "ngx-bootstrap/modal"; import * as i2 from "@c8y/ngx-components/operations/bulk-operations-service"; import * as i3 from "@c8y/ngx-components"; import * as i4 from "@angular/forms"; import * as i5 from "@c8y/ngx-components/operations/operation-summary"; import * as i6 from "@c8y/ngx-components/operations/bulk-operation-scheduler"; export class BulkOperationsRescheduleModalComponent { constructor(bsModalRef, bulkOperationsService, alert, gainsightService) { this.bsModalRef = bsModalRef; this.bulkOperationsService = bulkOperationsService; this.alert = alert; this.gainsightService = gainsightService; this.BULK_OPERATION_EVENT = BULK_OPERATION_EVENT; this.closeSubject = new Subject(); this.CARRIAGE_RETURN_CODE = 'Escape'; } onKeyUp(event) { if (event.code === this.CARRIAGE_RETURN_CODE) { this.gainsightService.triggerEvent('modalDialog', { title: this.modalTitle, result: 'Cancel' }); } } ngOnInit() { this.modalTitle = this.getTitle(); } onDateAndDelaySelect($event) { this.dateAndDelay = $event; } getTitle() { return this.isRetryOperation ? gettext('Retry operation') : gettext('Edit schedule'); } onCancel() { this.bsModalRef.hide(); } async onSave() { let newBulkOperation; this.bulkOperation.startDate = this.dateAndDelay.scheduledDate.toISOString(); this.bulkOperation.creationRamp = this.dateAndDelay.delayInSeconds; if (this.isRetryOperation) { try { newBulkOperation = await this.bulkOperationsService.createBulkOperation(this.bulkOperation); this.alert.success(gettext('Successfully rescheduled for a retry.')); } catch (er) { this.alert.addServerFailure(er); } } else { try { newBulkOperation = await this.bulkOperationsService.updateBulkOperation(this.bulkOperation); this.alert.success(gettext('Successfully rescheduled.')); } catch (er) { this.alert.addServerFailure(er); } } // send back to component from which modal was called this.closeSubject.next(newBulkOperation.data); this.bsModalRef.hide(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BulkOperationsRescheduleModalComponent, deps: [{ token: i1.BsModalRef }, { token: i2.BulkOperationsService }, { token: i3.AlertService }, { token: i3.GainsightService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BulkOperationsRescheduleModalComponent, selector: "c8y-bulk-operations-reschedule-modal", host: { listeners: { "window:keyup": "onKeyUp($event)" } }, ngImport: i0, template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"c8y-energy\"></i>\n <h4 id=\"modal-title\">{{ modalTitle | translate }}</h4>\n </div>\n <div class=\"modal-inner-scroll\" id=\"modal-body\">\n <div class=\"modal-body\">\n <div class=\"text-center\">\n <c8y-operation-summary\n [description]=\"bulkOperation.operationPrototype.description\"\n ></c8y-operation-summary>\n </div>\n <div class=\"p-t-16 center-block\" style=\"max-width: 300px\">\n <c8y-operation-scheduler\n [(ngModel)]=\"dateAndDelay\"\n #scheduler=\"ngModel\"\n ></c8y-operation-scheduler>\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n (click)=\"onCancel()\"\n type=\"button\"\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n [actionData]=\"{ title: modalTitle, result: 'Cancel' }\"\n >\n <span translate>Cancel</span>\n </button>\n <button\n id=\"save-btn\"\n (click)=\"onSave()\"\n type=\"button\"\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n [disabled]=\"scheduler?.control?.errors\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n [actionData]=\"{ title: modalTitle, result: 'Save' }\"\n >\n <span translate>Save</span>\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: i5.OperationSummaryComponent, selector: "c8y-operation-summary", inputs: ["name", "description", "deviceQueryString"] }, { kind: "component", type: i6.OperationSchedulerComponent, selector: "c8y-operation-scheduler", inputs: ["minutesAhead"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BulkOperationsRescheduleModalComponent, decorators: [{ type: Component, args: [{ selector: 'c8y-bulk-operations-reschedule-modal', template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"c8y-energy\"></i>\n <h4 id=\"modal-title\">{{ modalTitle | translate }}</h4>\n </div>\n <div class=\"modal-inner-scroll\" id=\"modal-body\">\n <div class=\"modal-body\">\n <div class=\"text-center\">\n <c8y-operation-summary\n [description]=\"bulkOperation.operationPrototype.description\"\n ></c8y-operation-summary>\n </div>\n <div class=\"p-t-16 center-block\" style=\"max-width: 300px\">\n <c8y-operation-scheduler\n [(ngModel)]=\"dateAndDelay\"\n #scheduler=\"ngModel\"\n ></c8y-operation-scheduler>\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n (click)=\"onCancel()\"\n type=\"button\"\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n [actionData]=\"{ title: modalTitle, result: 'Cancel' }\"\n >\n <span translate>Cancel</span>\n </button>\n <button\n id=\"save-btn\"\n (click)=\"onSave()\"\n type=\"button\"\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n [disabled]=\"scheduler?.control?.errors\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n [actionData]=\"{ title: modalTitle, result: 'Save' }\"\n >\n <span translate>Save</span>\n </button>\n </div>\n</div>\n" }] }], ctorParameters: () => [{ type: i1.BsModalRef }, { type: i2.BulkOperationsService }, { type: i3.AlertService }, { type: i3.GainsightService }], propDecorators: { onKeyUp: [{ type: HostListener, args: ['window:keyup', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVsay1vcGVyYXRpb25zLXJlc2NoZWR1bGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vb3BlcmF0aW9ucy9idWxrLW9wZXJhdGlvbi1saXN0LWl0ZW0vbW9kYWxzL2J1bGstb3BlcmF0aW9ucy1yZXNjaGVkdWxlLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL29wZXJhdGlvbnMvYnVsay1vcGVyYXRpb24tbGlzdC1pdGVtL21vZGFscy9idWxrLW9wZXJhdGlvbnMtcmVzY2hlZHVsZS1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTlFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQUsvQixNQUFNLE9BQU8sc0NBQXNDO0lBVWpELFlBQ1MsVUFBc0IsRUFDckIscUJBQTRDLEVBQzVDLEtBQW1CLEVBQ25CLGdCQUFrQztRQUhuQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3JCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFDNUMsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNuQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBYjVDLHlCQUFvQixHQUFHLG9CQUFvQixDQUFDO1FBQzVDLGlCQUFZLEdBQTRCLElBQUksT0FBTyxFQUFFLENBQUM7UUFNckMseUJBQW9CLEdBQUcsUUFBUSxDQUFDO0lBTzlDLENBQUM7SUFHSixPQUFPLENBQUMsS0FBb0I7UUFDMUIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFO2dCQUNoRCxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0JBQ3RCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxNQUFNO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO0lBQzdCLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTTtRQUNWLElBQUksZ0JBQWdCLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0UsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUM7UUFFbkUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUM7Z0JBQ0gsZ0JBQWdCLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUM1RixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsdUNBQXVDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7WUFBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO2dCQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDO2dCQUNILGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDNUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQztZQUMzRCxDQUFDO1lBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDWixJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7UUFDSCxDQUFDO1FBRUQscURBQXFEO1FBQ3JELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQzsrR0FuRVUsc0NBQXNDO21HQUF0QyxzQ0FBc0Msd0lDWm5ELHErQ0ErQ0E7OzRGRG5DYSxzQ0FBc0M7a0JBSmxELFNBQVM7K0JBQ0Usc0NBQXNDOzZLQXFCaEQsT0FBTztzQkFETixZQUFZO3VCQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElPcGVyYXRpb25CdWxrIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBHYWluc2lnaHRTZXJ2aWNlLCBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBPcGVyYXRpb25TY2hlZHVsZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvb3BlcmF0aW9ucy9idWxrLW9wZXJhdGlvbi1zY2hlZHVsZXInO1xuaW1wb3J0IHsgQnVsa09wZXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9vcGVyYXRpb25zL2J1bGstb3BlcmF0aW9ucy1zZXJ2aWNlJztcbmltcG9ydCB7IEJVTEtfT1BFUkFUSU9OX0VWRU5UIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9vcGVyYXRpb25zL3Byb2R1Y3QtZXhwZXJpZW5jZSc7XG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYnVsay1vcGVyYXRpb25zLXJlc2NoZWR1bGUtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJ2J1bGstb3BlcmF0aW9ucy1yZXNjaGVkdWxlLW1vZGFsLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBCdWxrT3BlcmF0aW9uc1Jlc2NoZWR1bGVNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEJVTEtfT1BFUkFUSU9OX0VWRU5UID0gQlVMS19PUEVSQVRJT05fRVZFTlQ7XG4gIGNsb3NlU3ViamVjdDogU3ViamVjdDxJT3BlcmF0aW9uQnVsaz4gPSBuZXcgU3ViamVjdCgpO1xuICBkYXRlQW5kRGVsYXk6IE9wZXJhdGlvblNjaGVkdWxlO1xuICBidWxrT3BlcmF0aW9uOiBQYXJ0aWFsPElPcGVyYXRpb25CdWxrPjtcbiAgaXNSZXRyeU9wZXJhdGlvbjogYm9vbGVhbjtcbiAgbW9kYWxUaXRsZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgQ0FSUklBR0VfUkVUVVJOX0NPREUgPSAnRXNjYXBlJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgYnNNb2RhbFJlZjogQnNNb2RhbFJlZixcbiAgICBwcml2YXRlIGJ1bGtPcGVyYXRpb25zU2VydmljZTogQnVsa09wZXJhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7fVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXl1cCcsIFsnJGV2ZW50J10pXG4gIG9uS2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gdGhpcy5DQVJSSUFHRV9SRVRVUk5fQ09ERSkge1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudCgnbW9kYWxEaWFsb2cnLCB7XG4gICAgICAgIHRpdGxlOiB0aGlzLm1vZGFsVGl0bGUsXG4gICAgICAgIHJlc3VsdDogJ0NhbmNlbCdcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubW9kYWxUaXRsZSA9IHRoaXMuZ2V0VGl0bGUoKTtcbiAgfVxuXG4gIG9uRGF0ZUFuZERlbGF5U2VsZWN0KCRldmVudCkge1xuICAgIHRoaXMuZGF0ZUFuZERlbGF5ID0gJGV2ZW50O1xuICB9XG5cbiAgZ2V0VGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZXRyeU9wZXJhdGlvbiA/IGdldHRleHQoJ1JldHJ5IG9wZXJhdGlvbicpIDogZ2V0dGV4dCgnRWRpdCBzY2hlZHVsZScpO1xuICB9XG5cbiAgb25DYW5jZWwoKSB7XG4gICAgdGhpcy5ic01vZGFsUmVmLmhpZGUoKTtcbiAgfVxuXG4gIGFzeW5jIG9uU2F2ZSgpIHtcbiAgICBsZXQgbmV3QnVsa09wZXJhdGlvbjtcbiAgICB0aGlzLmJ1bGtPcGVyYXRpb24uc3RhcnREYXRlID0gdGhpcy5kYXRlQW5kRGVsYXkuc2NoZWR1bGVkRGF0ZS50b0lTT1N0cmluZygpO1xuICAgIHRoaXMuYnVsa09wZXJhdGlvbi5jcmVhdGlvblJhbXAgPSB0aGlzLmRhdGVBbmREZWxheS5kZWxheUluU2Vjb25kcztcblxuICAgIGlmICh0aGlzLmlzUmV0cnlPcGVyYXRpb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ld0J1bGtPcGVyYXRpb24gPSBhd2FpdCB0aGlzLmJ1bGtPcGVyYXRpb25zU2VydmljZS5jcmVhdGVCdWxrT3BlcmF0aW9uKHRoaXMuYnVsa09wZXJhdGlvbik7XG4gICAgICAgIHRoaXMuYWxlcnQuc3VjY2VzcyhnZXR0ZXh0KCdTdWNjZXNzZnVsbHkgcmVzY2hlZHVsZWQgZm9yIGEgcmV0cnkuJykpO1xuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGVyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3QnVsa09wZXJhdGlvbiA9IGF3YWl0IHRoaXMuYnVsa09wZXJhdGlvbnNTZXJ2aWNlLnVwZGF0ZUJ1bGtPcGVyYXRpb24odGhpcy5idWxrT3BlcmF0aW9uKTtcbiAgICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKGdldHRleHQoJ1N1Y2Nlc3NmdWxseSByZXNjaGVkdWxlZC4nKSk7XG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNlbmQgYmFjayB0byBjb21wb25lbnQgZnJvbSB3aGljaCBtb2RhbCB3YXMgY2FsbGVkXG4gICAgdGhpcy5jbG9zZVN1YmplY3QubmV4dChuZXdCdWxrT3BlcmF0aW9uLmRhdGEpO1xuICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ2aWV3cG9ydC1tb2RhbFwiPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIGRpYWxvZy1oZWFkZXJcIj5cbiAgICA8aSBjOHlJY29uPVwiYzh5LWVuZXJneVwiPjwvaT5cbiAgICA8aDQgaWQ9XCJtb2RhbC10aXRsZVwiPnt7IG1vZGFsVGl0bGUgfCB0cmFuc2xhdGUgfX08L2g0PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWlubmVyLXNjcm9sbFwiIGlkPVwibW9kYWwtYm9keVwiPlxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGM4eS1vcGVyYXRpb24tc3VtbWFyeVxuICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCJidWxrT3BlcmF0aW9uLm9wZXJhdGlvblByb3RvdHlwZS5kZXNjcmlwdGlvblwiXG4gICAgICAgID48L2M4eS1vcGVyYXRpb24tc3VtbWFyeT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInAtdC0xNiBjZW50ZXItYmxvY2tcIiBzdHlsZT1cIm1heC13aWR0aDogMzAwcHhcIj5cbiAgICAgICAgPGM4eS1vcGVyYXRpb24tc2NoZWR1bGVyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRlQW5kRGVsYXlcIlxuICAgICAgICAgICNzY2hlZHVsZXI9XCJuZ01vZGVsXCJcbiAgICAgICAgPjwvYzh5LW9wZXJhdGlvbi1zY2hlZHVsZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICA8YnV0dG9uXG4gICAgICAoY2xpY2spPVwib25DYW5jZWwoKVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgIHRpdGxlPVwie3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgIFthY3Rpb25OYW1lXT1cIkJVTEtfT1BFUkFUSU9OX0VWRU5UXCJcbiAgICAgIFthY3Rpb25EYXRhXT1cInsgdGl0bGU6IG1vZGFsVGl0bGUsIHJlc3VsdDogJ0NhbmNlbCcgfVwiXG4gICAgPlxuICAgICAgPHNwYW4gdHJhbnNsYXRlPkNhbmNlbDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBpZD1cInNhdmUtYnRuXCJcbiAgICAgIChjbGljayk9XCJvblNhdmUoKVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgIHRpdGxlPVwie3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIFtkaXNhYmxlZF09XCJzY2hlZHVsZXI/LmNvbnRyb2w/LmVycm9yc1wiXG4gICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgW2FjdGlvbk5hbWVdPVwiQlVMS19PUEVSQVRJT05fRVZFTlRcIlxuICAgICAgW2FjdGlvbkRhdGFdPVwieyB0aXRsZTogbW9kYWxUaXRsZSwgcmVzdWx0OiAnU2F2ZScgfVwiXG4gICAgPlxuICAgICAgPHNwYW4gdHJhbnNsYXRlPlNhdmU8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=