Repository URL to install this package:
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ViewChild } from '@angular/core';
import { NGXLogger } from 'web-console-core';
import { WCNotificationCenter, NotificationType } from 'web-console-ui-kit';
import { saveAs } from '@progress/kendo-file-saver';
import { faFileImport, faDownload } from '@fortawesome/free-solid-svg-icons';
import { CountersService } from '@wa-motif-open-api/counters-thresholds-service';
import { WCSubscriptionHandler } from '../../../../components/Commons/wc-subscription-handler';
import { CounterInfosPaneComponent } from './panes/counter-infos-panes/counter-infos-pane-component';
import { ThresholdsPaneComponent } from './panes/thresholds-panes/thresholds-pane-component';
/** @type {?} */
const LOG_TAG = '[CounterInfosDashboard]';
/**
* @record
*/
export function SelectionEvent() { }
if (false) {
/** @type {?} */
SelectionEvent.prototype.counterInfoName;
/** @type {?} */
SelectionEvent.prototype.data;
}
export class CounterInfosDashboardComponent {
/**
* @param {?} logger
* @param {?} notificationCenter
* @param {?} countersService
*/
constructor(logger, notificationCenter, countersService) {
this.logger = logger;
this.notificationCenter = notificationCenter;
this.countersService = countersService;
this.faDownload = faDownload;
this.faFileImport = faFileImport;
this._subHandler = new WCSubscriptionHandler();
}
/**
* @return {?}
*/
ngOnInit() {
}
/**
* @return {?}
*/
ngOnDestroy() {
this.logger.debug(LOG_TAG, 'ngOnDestroy ');
this.freeMem();
}
/**
* @return {?}
*/
freeMem() {
this._subHandler.unsubscribe();
}
/**
* @param {?} selectionEvent
* @return {?}
*/
onCounterInfoSelectionChange(selectionEvent) {
this.selectedCounterInfo = selectionEvent.counterInfoName;
}
/**
* @return {?}
*/
onExportClicked() {
this.notificationCenter.post({
name: 'CTExport',
title: 'Counters & Thresholds Export',
message: 'Exporting Counters & Thresholds...',
type: NotificationType.Info
});
this._subHandler.add(this.countersService.downloadXml().subscribe((/**
* @param {?} data
* @return {?}
*/
(data) => {
this.logger.debug(LOG_TAG, 'Export done.', data);
/** @type {?} */
const blob = new Blob([data], { type: 'application/zip' });
/** @type {?} */
const fileName = 'counters_thresholds_' + new Date().getTime() + '.xml';
this.logger.debug(LOG_TAG, 'Saving to: ', blob);
saveAs(blob, fileName);
// FileSaver.saveAs(blob, fileName);
this.logger.debug(LOG_TAG, 'Log saved: ', fileName);
this.notificationCenter.post({
name: 'CTExport',
title: 'Counters & Thresholds Export',
message: 'Counter & Thresholds Exported.',
type: NotificationType.Success
});
}), (/**
* @param {?} error
* @return {?}
*/
(error) => {
this.logger.error(LOG_TAG, 'Counters & Thresholds export error:', error);
this.notificationCenter.post({
name: 'CTExportError',
title: 'Counters & Thresholds Export',
message: 'Error exporting Counters & Thresholds:',
type: NotificationType.Error,
error: error,
closable: true
});
})));
}
/**
* @param {?} error
* @return {?}
*/
onUploadCTError(error) {
this.notificationCenter.post({
name: 'ImportCTError',
title: 'Import Counters & Thresholds Error',
message: 'Error importing Counters & Thresholds:',
type: NotificationType.Error,
error: error,
closable: true
});
}
/**
* @param {?} event
* @return {?}
*/
uploadCT(event) {
this.logger.debug(LOG_TAG, 'uploadAssetBundle : ', event);
this.notificationCenter.post({
name: 'ImportCTProgress',
title: 'Import Counters & Thresholds',
message: 'Importing Counters & Thresholds...',
type: NotificationType.Info
});
this._subHandler.add(this.countersService.uploadXml(event.file).subscribe((/**
* @param {?} result
* @return {?}
*/
(result) => {
this._countersPane.onRefreshClicked();
this.logger.debug(LOG_TAG, 'Bundle uploaded successfully: ', result);
this.notificationCenter.post({
name: 'UploadBundleSuccess',
title: 'Upload Bundle',
message: 'The bundle has been successfully uploaded.',
type: NotificationType.Success
});
}), (/**
* @param {?} error
* @return {?}
*/
(error) => {
this.logger.error(LOG_TAG, 'Error uploading bundle: ', error);
this.notificationCenter.post({
name: 'UploadBundleError',
title: 'Upload Bundle',
message: 'Error uploading bundle:',
type: NotificationType.Error,
error: error,
closable: true
});
})));
}
}
CounterInfosDashboardComponent.decorators = [
{ type: Component, args: [{
// tslint:disable-next-line:component-selector
selector: 'wa-counter-infos-dashboard-component',
template: "<div class=\"row spread\" title=\"\">\n <div class=\"flex-toolbar\" style=\"display:flex;align-items: center;\">\n <kendo-buttongroup look=\"flat\">\n <button\n kendoButton\n motif-acl=\"com.vipera.osgi.bss.countersthresholds.api.rest.CountersThresholdsApi:UPDATE:uploadXml\"\n [toggleable]=\"false\"\n (click)=\"onExportClicked()\"\n >\n <fa-icon [icon]=\"faDownload\"></fa-icon>Export\n </button>\n <button\n kendoButton\n motif-acl=\"com.vipera.osgi.bss.countersthresholds.api.rest.CountersThresholdsApi:READ:downloadXml\"\n kendofileselect\n tyle=\"file\"\n [toggleable]=\"false\"\n (click)=\"uploadSlideDownPanelEx.toggle()\">\n <fa-icon [icon]=\"faFileImport\"></fa-icon>Import\n </button>\n </kendo-buttongroup>\n </div>\n </div>\n\n<div class=\"row\">\n <wc-upload-panel #uploadSlideDownPanelEx (upload)=\"uploadCT($event)\" (uploadError)=\"onUploadCTError($event)\"></wc-upload-panel>\n</div>\n\n<div class=\"row fill\">\n <kendo-splitter orientation=\"vertical\" style=\"border: none;\">\n \n <kendo-splitter-pane [scrollable]=\"false\" style=\"display:flex;\">\n <wa-counter-infos-pane-component #countersPane [(ngModel)]=\"selectedCounterInfo\" style=\"flex:1;\"></wa-counter-infos-pane-component>\n </kendo-splitter-pane>\n \n <kendo-splitter-pane [scrollable]=\"false\" style=\"display:flex;\">\n <wa-thresholds-pane-component #thresholdsPane [counterInfo]=\"selectedCounterInfo\" style=\"flex:1;\"></wa-thresholds-pane-component>\n </kendo-splitter-pane>\n\n </kendo-splitter>\n\n</div>",
styles: [".tab-sub-section-label{margin-top:10px;padding-top:10px;padding-bottom:10px}"]
}] }
];
/** @nocollapse */
CounterInfosDashboardComponent.ctorParameters = () => [
{ type: NGXLogger },
{ type: WCNotificationCenter },
{ type: CountersService }
];
CounterInfosDashboardComponent.propDecorators = {
_countersPane: [{ type: ViewChild, args: ['countersPane',] }],
_thresholdsPane: [{ type: ViewChild, args: ['thresholdsPane',] }]
};
if (false) {
/** @type {?} */
CounterInfosDashboardComponent.prototype._countersPane;
/** @type {?} */
CounterInfosDashboardComponent.prototype._thresholdsPane;
/** @type {?} */
CounterInfosDashboardComponent.prototype.faDownload;
/** @type {?} */
CounterInfosDashboardComponent.prototype.faFileImport;
/**
* @type {?}
* @private
*/
CounterInfosDashboardComponent.prototype._subHandler;
/** @type {?} */
CounterInfosDashboardComponent.prototype.selectedCounterInfo;
/**
* @type {?}
* @private
*/
CounterInfosDashboardComponent.prototype.logger;
/**
* @type {?}
* @private
*/
CounterInfosDashboardComponent.prototype.notificationCenter;
/**
* @type {?}
* @private
*/
CounterInfosDashboardComponent.prototype.countersService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRlci1pbmZvcy1kYXNoYm9hcmQtY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbW90aWYtd2ViLWFkbWluLWNvcmUvIiwic291cmNlcyI6WyJsaWIvc2VjdGlvbnMvQ291bnRlcnNBbmRUaHJlc2hvbGRzL2NvbXBvbmVudHMvY291bnRlci1pbmZvcy1kYXNoYm9hcmQvY291bnRlci1pbmZvcy1kYXNoYm9hcmQtY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFzQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzVFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzdFLE9BQU8sRUFBcUIsZUFBZSxFQUEyQyxNQUFNLGdEQUFnRCxDQUFDO0FBQzdJLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOztNQUV2RixPQUFPLEdBQUcseUJBQXlCOzs7O0FBRXpDLG9DQUdDOzs7SUFGRyx5Q0FBd0I7O0lBQ3hCLDhCQUFTOztBQVNiLE1BQU0sT0FBTyw4QkFBOEI7Ozs7OztJQVl2QyxZQUNZLE1BQWlCLEVBQ2pCLGtCQUF3QyxFQUN4QyxlQUFnQztRQUZoQyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBc0I7UUFDeEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FB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Z0JBQWdCLENBQUMsS0FBSztnQkFDNUIsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osUUFBUSxFQUFFLElBQUk7YUFDakIsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7OztZQS9ISixTQUFTLFNBQUM7O2dCQUVQLFFBQVEsRUFBRSxzQ0FBc0M7Z0JBRWhELHdyREFBdUQ7O2FBQzFEOzs7O1lBeEJRLFNBQVM7WUFDVCxvQkFBb0I7WUFNRCxlQUFlOzs7NEJBb0J0QyxTQUFTLFNBQUMsY0FBYzs4QkFDeEIsU0FBUyxTQUFDLGdCQUFnQjs7OztJQUQzQix1REFBb0U7O0lBQ3BFLHlEQUFzRTs7SUFFdEUsb0RBQXdCOztJQUN4QixzREFBNEI7Ozs7O0lBRTVCLHFEQUF5RTs7SUFFekUsNkRBQXlCOzs7OztJQUdyQixnREFBeUI7Ozs7O0lBQ3pCLDREQUFnRDs7Ozs7SUFDaEQseURBQXdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdYTG9nZ2VyfSBmcm9tICd3ZWItY29uc29sZS1jb3JlJztcbmltcG9ydCB7IFdDTm90aWZpY2F0aW9uQ2VudGVyLCBOb3RpZmljYXRpb25UeXBlIH0gZnJvbSAnd2ViLWNvbnNvbGUtdWkta2l0JztcbmltcG9ydCB7IFNlcnZpY2VDYXRhbG9nU2VsZWN0b3JEaWFsb2dDb21wb25lbnQsIFNlbGVjdGlvbkV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tcG9uZW50cy9VSS9zZWxlY3RvcnMvc2VydmljZS1jYXRhbG9nLXNlbGVjdG9yL3NlcnZpY2UtY2F0YWxvZy1zZWxlY3Rvci1kaWFsb2cnO1xuaW1wb3J0IHsgU2VsZWN0aW9uRXZlbnQgYXMgQ291bnRlckluZm9TZWxlY3Rpb25FdmVudCB9IGZyb20gJy4uL2NvdW50ZXItaW5mb3MvY291bnRlci1pbmZvcy1jb21wb25lbnQnXG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBXQ1VwbG9hZFBhbmVsRXZlbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21wb25lbnRzL1VJL3djLXVwbG9hZC1wYW5lbC1jb21wb25lbnQnO1xuaW1wb3J0IHsgZmFGaWxlSW1wb3J0LCBmYURvd25sb2FkIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcbmltcG9ydCB7IENvdW50ZXJJbmZvRW50aXR5LCBDb3VudGVyc1NlcnZpY2UsIENvdW50ZXJJbmZvLCBDb3VudGVySW5mb1VwZGF0YWJsZUZpZWxkcyB9IGZyb20gJ0B3YS1tb3RpZi1vcGVuLWFwaS9jb3VudGVycy10aHJlc2hvbGRzLXNlcnZpY2UnO1xuaW1wb3J0IHsgV0NTdWJzY3JpcHRpb25IYW5kbGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tcG9uZW50cy9Db21tb25zL3djLXN1YnNjcmlwdGlvbi1oYW5kbGVyJztcbmltcG9ydCB7IENvdW50ZXJJbmZvc1BhbmVDb21wb25lbnQgfSBmcm9tICcuL3BhbmVzL2NvdW50ZXItaW5mb3MtcGFuZXMvY291bnRlci1pbmZvcy1wYW5lLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaHJlc2hvbGRzUGFuZUNvbXBvbmVudCB9IGZyb20gJy4vcGFuZXMvdGhyZXNob2xkcy1wYW5lcy90aHJlc2hvbGRzLXBhbmUtY29tcG9uZW50JztcblxuY29uc3QgTE9HX1RBRyA9ICdbQ291bnRlckluZm9zRGFzaGJvYXJkXSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0aW9uRXZlbnQge1xuICAgIGNvdW50ZXJJbmZvTmFtZTogc3RyaW5nO1xuICAgIGRhdGE6IGFueVxufVxuXG5AQ29tcG9uZW50KHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICd3YS1jb3VudGVyLWluZm9zLWRhc2hib2FyZC1jb21wb25lbnQnLFxuICAgIHN0eWxlVXJsczogWycuL2NvdW50ZXItaW5mb3MtZGFzaGJvYXJkLWNvbXBvbmVudC5zY3NzJ10sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvdW50ZXItaW5mb3MtZGFzaGJvYXJkLWNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBDb3VudGVySW5mb3NEYXNoYm9hcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICBAVmlld0NoaWxkKCdjb3VudGVyc1BhbmUnKSBfY291bnRlcnNQYW5lOiBDb3VudGVySW5mb3NQYW5lQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ3RocmVzaG9sZHNQYW5lJykgX3RocmVzaG9sZHNQYW5lOiBUaHJlc2hvbGRzUGFuZUNvbXBvbmVudDtcblxuICAgIGZhRG93bmxvYWQgPSBmYURvd25sb2FkO1xuICAgIGZhRmlsZUltcG9ydCA9IGZhRmlsZUltcG9ydDtcblxuICAgIHByaXZhdGUgX3N1YkhhbmRsZXI6IFdDU3Vic2NyaXB0aW9uSGFuZGxlciA9IG5ldyBXQ1N1YnNjcmlwdGlvbkhhbmRsZXIoKTtcblxuICAgIHNlbGVjdGVkQ291bnRlckluZm86IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGxvZ2dlcjogTkdYTG9nZ2VyLFxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvbkNlbnRlcjogV0NOb3RpZmljYXRpb25DZW50ZXIsXG4gICAgICAgIHByaXZhdGUgY291bnRlcnNTZXJ2aWNlOiBDb3VudGVyc1NlcnZpY2VcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoTE9HX1RBRyAsICduZ09uRGVzdHJveSAnKTtcbiAgICAgICAgdGhpcy5mcmVlTWVtKCk7XG4gICAgfVxuXG4gICAgZnJlZU1lbSgpIHtcbiAgICAgICAgdGhpcy5fc3ViSGFuZGxlci51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIG9uQ291bnRlckluZm9TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uRXZlbnQ6IENvdW50ZXJJbmZvU2VsZWN0aW9uRXZlbnQpe1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ291bnRlckluZm8gPSBzZWxlY3Rpb25FdmVudC5jb3VudGVySW5mb05hbWU7XG4gICAgfVxuXG4gICAgb25FeHBvcnRDbGlja2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNlbnRlci5wb3N0KHtcbiAgICAgICAgICAgIG5hbWU6ICdDVEV4cG9ydCcsXG4gICAgICAgICAgICB0aXRsZTogJ0NvdW50ZXJzICYgVGhyZXNob2xkcyBFeHBvcnQnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0V4cG9ydGluZyBDb3VudGVycyAmIFRocmVzaG9sZHMuLi4nLFxuICAgICAgICAgICAgdHlwZTogTm90aWZpY2F0aW9uVHlwZS5JbmZvXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3N1YkhhbmRsZXIuYWRkKHRoaXMuY291bnRlcnNTZXJ2aWNlLmRvd25sb2FkWG1sKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHICwgJ0V4cG9ydCBkb25lLicsIGRhdGEpO1xuXG4gICAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2RhdGFdLCB7dHlwZTogJ2FwcGxpY2F0aW9uL3ppcCd9KTtcblxuICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSAnY291bnRlcnNfdGhyZXNob2xkc18nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkgKyAnLnhtbCc7XG5cbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcgLCAnU2F2aW5nIHRvOiAnLCBibG9iKTtcblxuICAgICAgICAgICAgc2F2ZUFzKGJsb2IsIGZpbGVOYW1lKTtcbiAgICAgICAgICAgIC8vIEZpbGVTYXZlci5zYXZlQXMoYmxvYiwgZmlsZU5hbWUpO1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoTE9HX1RBRyAsICdMb2cgc2F2ZWQ6ICcsIGZpbGVOYW1lKTtcblxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25DZW50ZXIucG9zdCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0NURXhwb3J0JyxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0NvdW50ZXJzICYgVGhyZXNob2xkcyBFeHBvcnQnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdDb3VudGVyICYgVGhyZXNob2xkcyBFeHBvcnRlZC4nLFxuICAgICAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuU3VjY2Vzc1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihMT0dfVEFHICwgJ0NvdW50ZXJzICYgVGhyZXNob2xkcyBleHBvcnQgZXJyb3I6JywgZXJyb3IpO1xuXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNlbnRlci5wb3N0KHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQ1RFeHBvcnRFcnJvcicsXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdDb3VudGVycyAmIFRocmVzaG9sZHMgRXhwb3J0JyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRXJyb3IgZXhwb3J0aW5nIENvdW50ZXJzICYgVGhyZXNob2xkczonLFxuICAgICAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuRXJyb3IsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIGNsb3NhYmxlOiB0cnVlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgb25VcGxvYWRDVEVycm9yKGVycm9yKXtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25DZW50ZXIucG9zdCh7XG4gICAgICAgICAgICBuYW1lOiAnSW1wb3J0Q1RFcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0ltcG9ydCBDb3VudGVycyAmIFRocmVzaG9sZHMgRXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0Vycm9yIGltcG9ydGluZyBDb3VudGVycyAmIFRocmVzaG9sZHM6JyxcbiAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuRXJyb3IsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgICAgICBjbG9zYWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB1cGxvYWRDVChldmVudDogV0NVcGxvYWRQYW5lbEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcsICd1cGxvYWRBc3NldEJ1bmRsZSA6ICcsIGV2ZW50KTtcblxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNlbnRlci5wb3N0KHtcbiAgICAgICAgICAgIG5hbWU6ICdJbXBvcnRDVFByb2dyZXNzJyxcbiAgICAgICAgICAgIHRpdGxlOiAnSW1wb3J0IENvdW50ZXJzICYgVGhyZXNob2xkcycsXG4gICAgICAgICAgICBtZXNzYWdlOiAnSW1wb3J0aW5nIENvdW50ZXJzICYgVGhyZXNob2xkcy4uLicsXG4gICAgICAgICAgICB0eXBlOiBOb3RpZmljYXRpb25UeXBlLkluZm9cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc3ViSGFuZGxlci5hZGQodGhpcy5jb3VudGVyc1NlcnZpY2UudXBsb2FkWG1sKGV2ZW50LmZpbGUpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jb3VudGVyc1BhbmUub25SZWZyZXNoQ2xpY2tlZCgpO1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoTE9HX1RBRywgJ0J1bmRsZSB1cGxvYWRlZCBzdWNjZXNzZnVsbHk6ICcsIHJlc3VsdCk7XG5cbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uQ2VudGVyLnBvc3Qoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdVcGxvYWRCdW5kbGVTdWNjZXNzJyxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ1VwbG9hZCBCdW5kbGUnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdUaGUgYnVuZGxlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZC4nLFxuICAgICAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuU3VjY2Vzc1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihMT0dfVEFHLCAnRXJyb3IgdXBsb2FkaW5nIGJ1bmRsZTogJywgZXJyb3IpO1xuXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNlbnRlci5wb3N0KHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnVXBsb2FkQnVuZGxlRXJyb3InLFxuICAgICAgICAgICAgICAgIHRpdGxlOiAnVXBsb2FkIEJ1bmRsZScsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Vycm9yIHVwbG9hZGluZyBidW5kbGU6JyxcbiAgICAgICAgICAgICAgICB0eXBlOiBOb3RpZmljYXRpb25UeXBlLkVycm9yLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICAgICAgICBjbG9zYWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pKTtcbiAgICB9XG59XG4iXX0=