UNPKG

@versatiledatakit/data-pipelines

Version:

Data Pipelines help Data Engineers develop, deploy, run, and manage data processing workloads (called 'Data Job')

105 lines 17.9 kB
/* * Copyright 2023-2025 Broadcom * SPDX-License-Identifier: Apache-2.0 */ import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@versatiledatakit/shared"; import * as i2 from "@clr/angular"; function DataJobsFailedWidgetComponent_clr_dg_row_7_Template(rf, ctx) { if (rf & 1) { const _r3 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "clr-dg-row", 4)(1, "clr-dg-cell", 5)(2, "a", 6); i0.ɵɵlistener("click", function DataJobsFailedWidgetComponent_clr_dg_row_7_Template_a_click_2_listener() { const restoredCtx = i0.ɵɵrestoreView(_r3); const dataJob_r1 = restoredCtx.$implicit; const ctx_r2 = i0.ɵɵnextContext(); return ctx_r2.navigateToJobDetails(dataJob_r1); }); i0.ɵɵtext(3); i0.ɵɵelementEnd()(); i0.ɵɵelementStart(4, "clr-dg-cell", 7)(5, "span", 8); i0.ɵɵtext(6); i0.ɵɵelementEnd()()(); } if (rf & 2) { const dataJob_r1 = ctx.$implicit; i0.ɵɵproperty("clrDgItem", dataJob_r1); i0.ɵɵadvance(3); i0.ɵɵtextInterpolate1(" ", dataJob_r1.jobName, " "); i0.ɵɵadvance(3); i0.ɵɵtextInterpolate(dataJob_r1.failedTotal); } } export class DataJobsFailedWidgetComponent { constructor(navigationService) { this.navigationService = navigationService; this.jobExecutions = []; this.uuid = 'DataJobsFailedWidgetComponent'; this.loading = true; this.dataJobs = []; } /** * ** NgFor elements tracking function. */ trackByFn(index, dataJob) { return `${index}|${dataJob?.jobName}`; } /** * @inheritDoc */ ngOnChanges(changes) { if (changes['jobExecutions'] !== undefined) { this.dataJobs = []; changes['jobExecutions'].currentValue.forEach((element) => { const temp = this.dataJobs.find((i) => i.jobName === element.jobName); if (!temp) { this.dataJobs.push({ jobName: element.jobName, failedTotal: 1 }); } else { temp.failedTotal++; } }); this.loading = false; } } navigateToJobDetails(job) { const dataJob = this.allJobs.find((el) => el.jobName === job.jobName); let link = this.manageLink; link = link.replace('{team}', dataJob.config?.team); link = link.replace('{data-job}', job.jobName); link = link + '/details'; if (dataJob) { // eslint-disable-next-line @typescript-eslint/no-floating-promises this.navigationService.navigate(link); } } } DataJobsFailedWidgetComponent.ɵfac = function DataJobsFailedWidgetComponent_Factory(t) { return new (t || DataJobsFailedWidgetComponent)(i0.ɵɵdirectiveInject(i1.NavigationService)); }; DataJobsFailedWidgetComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DataJobsFailedWidgetComponent, selectors: [["lib-data-jobs-failed-widget"]], inputs: { manageLink: "manageLink", allJobs: "allJobs", jobExecutions: "jobExecutions" }, features: [i0.ɵɵNgOnChangesFeature], decls: 8, vars: 5, consts: [["data-cy", "data-pipelines-job-failed-widget-datagrid", 1, "datagrid-failed-executions-widget", 3, "clrDgLoading"], ["data-cy", "data-pipelines-job-failed-widget-job-name", 1, "header-title", 3, "clrDgSortBy"], ["data-cy", "data-pipelines-job-failed-widget-failed-executions", 1, "label-column", 3, "clrDgSortBy"], [3, "clrDgItem", 4, "clrDgItems", "clrDgItemsOf", "clrDgItemsTrackBy"], [3, "clrDgItem"], [1, "no-padding", "job-name-column"], ["alt", "Navigate to Manage Data jobs", "data-cy", "dp-failed-data-jobs-widget-job-name-link", 1, "btn", "btn-link", "job-name-column", 3, "click"], [1, "center"], [1, "label", "label-danger", "custom-label"]], template: function DataJobsFailedWidgetComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "clr-datagrid", 0)(1, "clr-dg-placeholder"); i0.ɵɵtext(2, "We couldn't find any failed jobs!"); i0.ɵɵelementEnd(); i0.ɵɵelementStart(3, "clr-dg-column", 1); i0.ɵɵtext(4, "Jobs with Failing executions - Last 24h "); i0.ɵɵelementEnd(); i0.ɵɵelementStart(5, "clr-dg-column", 2); i0.ɵɵtext(6, "Failed executions "); i0.ɵɵelementEnd(); i0.ɵɵtemplate(7, DataJobsFailedWidgetComponent_clr_dg_row_7_Template, 7, 3, "clr-dg-row", 3); i0.ɵɵelementEnd(); } if (rf & 2) { i0.ɵɵproperty("clrDgLoading", ctx.loading); i0.ɵɵadvance(3); i0.ɵɵproperty("clrDgSortBy", "jobName"); i0.ɵɵadvance(2); i0.ɵɵproperty("clrDgSortBy", "failedTotal"); i0.ɵɵadvance(2); i0.ɵɵproperty("clrDgItemsOf", ctx.dataJobs)("clrDgItemsTrackBy", ctx.trackByFn); } }, directives: [i2.ClrDatagrid, i2.ÇlrDatagridMainRenderer, i2.ÇlrDatagridWillyWonka, i2.ÇlrActionableOompaLoompa, i2.ÇlrExpandableOompaLoompa, i2.ClrDatagridPlaceholder, i2.ClrDatagridColumn, i2.ÇlrDatagridHeaderRenderer, i2.ClrDatagridItems, i2.ClrDatagridRow, i2.ÇlrDatagridRowRenderer, i2.ClrDatagridCell, i2.ÇlrDatagridCellRenderer], styles: [".datagrid-failed-executions-widget[_ngcontent-%COMP%]{height:300px}.datagrid-failed-executions-widget[_ngcontent-%COMP%] .datagrid-table{width:100%}.datagrid-failed-executions-widget[_ngcontent-%COMP%] .datagrid-table .header-title .datagrid-column-separator{display:none}.datagrid-failed-executions-widget[_ngcontent-%COMP%] .datagrid-table .datagrid-row-scrollable{width:100%}.datagrid-failed-executions-widget[_ngcontent-%COMP%] .datagrid-table .job-name-column{width:70%!important}.datagrid-failed-executions-widget[_ngcontent-%COMP%] .datagrid-table .center{width:30%!important;text-align:center}.datagrid-failed-executions-widget[_ngcontent-%COMP%] .datagrid-table clr-dg-cell .btn{width:100%!important;text-align:left}clr-dg-cell[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%]{margin:0!important;text-transform:none!important;padding:.3rem}.no-padding[_ngcontent-%COMP%]{padding-bottom:0;padding-top:0}.custom-label[_ngcontent-%COMP%]{width:50px}.label-column[_ngcontent-%COMP%]{display:none}"], changeDetection: 0 }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DataJobsFailedWidgetComponent, [{ type: Component, args: [{ selector: 'lib-data-jobs-failed-widget', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2023-2025 Broadcom\n ~ SPDX-License-Identifier: Apache-2.0\n -->\n\n<clr-datagrid\n class=\"datagrid-failed-executions-widget\"\n data-cy=\"data-pipelines-job-failed-widget-datagrid\"\n [clrDgLoading]=\"loading\"\n>\n <clr-dg-placeholder>We couldn't find any failed jobs!</clr-dg-placeholder>\n\n <clr-dg-column\n class=\"header-title\"\n data-cy=\"data-pipelines-job-failed-widget-job-name\"\n [clrDgSortBy]=\"'jobName'\"\n >Jobs with Failing executions - Last 24h\n </clr-dg-column>\n\n <clr-dg-column\n data-cy=\"data-pipelines-job-failed-widget-failed-executions\"\n class=\"label-column\"\n [clrDgSortBy]=\"'failedTotal'\"\n >Failed executions\n </clr-dg-column>\n\n <clr-dg-row\n *clrDgItems=\"let dataJob of dataJobs; trackBy: trackByFn\"\n [clrDgItem]=\"dataJob\"\n >\n <clr-dg-cell class=\"no-padding job-name-column\">\n <a\n class=\"btn btn-link job-name-column\"\n alt=\"Navigate to Manage Data jobs\"\n data-cy=\"dp-failed-data-jobs-widget-job-name-link\"\n (click)=\"navigateToJobDetails(dataJob)\"\n >\n {{ dataJob.jobName }}\n </a>\n </clr-dg-cell>\n\n <clr-dg-cell class=\"center\">\n <span class=\"label label-danger custom-label\"\n >{{ dataJob.failedTotal }}</span\n >\n </clr-dg-cell>\n </clr-dg-row>\n</clr-datagrid>\n", styles: ["/*!\n * Copyright 2023-2025 Broadcom\n * SPDX-License-Identifier: Apache-2.0\n */.datagrid-failed-executions-widget{height:300px}.datagrid-failed-executions-widget ::ng-deep .datagrid-table{width:100%}.datagrid-failed-executions-widget ::ng-deep .datagrid-table .header-title .datagrid-column-separator{display:none}.datagrid-failed-executions-widget ::ng-deep .datagrid-table .datagrid-row-scrollable{width:100%}.datagrid-failed-executions-widget ::ng-deep .datagrid-table .job-name-column{width:70%!important}.datagrid-failed-executions-widget ::ng-deep .datagrid-table .center{width:30%!important;text-align:center}.datagrid-failed-executions-widget ::ng-deep .datagrid-table clr-dg-cell .btn{width:100%!important;text-align:left}clr-dg-cell .btn{margin:0!important;text-transform:none!important;padding:.3rem}.no-padding{padding-bottom:0;padding-top:0}.custom-label{width:50px}.label-column{display:none}\n"] }] }], function () { return [{ type: i1.NavigationService }]; }, { manageLink: [{ type: Input }], allJobs: [{ type: Input }], jobExecutions: [{ type: Input }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1qb2JzLWZhaWxlZC13aWRnZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1waXBlbGluZXMvc3JjL2xpYi9jb21wb25lbnRzL3dpZGdldHMvZGF0YS1qb2JzLWZhaWxlZC13aWRnZXQvZGF0YS1qb2JzLWZhaWxlZC13aWRnZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1waXBlbGluZXMvc3JjL2xpYi9jb21wb25lbnRzL3dpZGdldHMvZGF0YS1qb2JzLWZhaWxlZC13aWRnZXQvZGF0YS1qb2JzLWZhaWxlZC13aWRnZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQTRCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7SUNxQmhHLHFDQUdDLHFCQUFBLFdBQUE7SUFNVywwT0FBUyx1Q0FBNkIsSUFBQztJQUV2QyxZQUNKO0lBQUEsaUJBQUksRUFBQTtJQUdSLHNDQUE0QixjQUFBO0lBRW5CLFlBQXlCO0lBQUEsaUJBQzdCLEVBQUEsRUFBQTs7O0lBaEJMLHNDQUFxQjtJQVNiLGVBQ0o7SUFESSxtREFDSjtJQUtLLGVBQXlCO0lBQXpCLDRDQUF5Qjs7QURwQjFDLE1BQU0sT0FBTyw2QkFBNkI7SUFVdEMsWUFBNkIsaUJBQW9DO1FBQXBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFQeEQsa0JBQWEsR0FBMkIsRUFBRSxDQUFDO1FBRTNDLFNBQUksR0FBRywrQkFBK0IsQ0FBQztRQUVoRCxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsYUFBUSxHQUFrQixFQUFFLENBQUM7SUFFdUMsQ0FBQztJQUVyRTs7T0FFRztJQUNILFNBQVMsQ0FBQyxLQUFhLEVBQUUsT0FBZ0I7UUFDckMsT0FBTyxHQUFHLEtBQUssSUFBSSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLFNBQVMsRUFBRTtZQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNsQixPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsWUFBa0MsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDN0UsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN0RSxJQUFJLENBQUMsSUFBSSxFQUFFO29CQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO3dCQUNmLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTzt3QkFDeEIsV0FBVyxFQUFFLENBQUM7cUJBQ0YsQ0FBQyxDQUFDO2lCQUNyQjtxQkFBTTtvQkFDSCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7aUJBQ3RCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztTQUN4QjtJQUNMLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxHQUFhO1FBQzlCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxLQUFLLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0RSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzNCLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BELElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsSUFBSSxHQUFHLElBQUksR0FBRyxVQUFVLENBQUM7UUFFekIsSUFBSSxPQUFPLEVBQUU7WUFDVCxtRUFBbUU7WUFDbkUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN6QztJQUNMLENBQUM7OzBHQW5EUSw2QkFBNkI7Z0ZBQTdCLDZCQUE2QjtRQ2xCMUMsdUNBSUMseUJBQUE7UUFDdUIsaURBQWlDO1FBQUEsaUJBQXFCO1FBRTFFLHdDQUlLO1FBQUEsd0RBQ0w7UUFBQSxpQkFBZ0I7UUFFaEIsd0NBSUs7UUFBQSxrQ0FDTDtRQUFBLGlCQUFnQjtRQUVoQiw0RkFvQmE7UUFDakIsaUJBQWU7O1FBdkNYLDBDQUF3QjtRQU9wQixlQUF5QjtRQUF6Qix1Q0FBeUI7UUFPekIsZUFBNkI7UUFBN0IsMkNBQTZCO1FBS0osZUFBYTtRQUFiLDJDQUFhLG9DQUFBOzt1RkRKakMsNkJBQTZCO2NBTnpDLFNBQVM7MkJBQ0ksNkJBQTZCLG1CQUd0Qix1QkFBdUIsQ0FBQyxNQUFNO29FQUd0QyxVQUFVO2tCQUFsQixLQUFLO1lBQ0csT0FBTztrQkFBZixLQUFLO1lBQ0csYUFBYTtrQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAyMy0yMDI1IEJyb2FkY29tXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICdAdmVyc2F0aWxlZGF0YWtpdC9zaGFyZWQnO1xuXG5pbXBvcnQgeyBEYXRhSm9iLCBEYXRhSm9iRXhlY3V0aW9ucyB9IGZyb20gJy4uLy4uLy4uL21vZGVsJztcblxuaW1wb3J0IHsgR3JpZERhdGFKb2JFeGVjdXRpb24gfSBmcm9tICcuLi8uLi9kYXRhLWpvYi9wYWdlcy9leGVjdXRpb25zJztcblxuaW50ZXJmYWNlIERhdGFKb2JHcmlkIGV4dGVuZHMgRGF0YUpvYiB7XG4gICAgZmFpbGVkVG90YWw/OiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLWRhdGEtam9icy1mYWlsZWQtd2lkZ2V0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0YS1qb2JzLWZhaWxlZC13aWRnZXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2RhdGEtam9icy1mYWlsZWQtd2lkZ2V0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRGF0YUpvYnNGYWlsZWRXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpIG1hbmFnZUxpbms6IHN0cmluZztcbiAgICBASW5wdXQoKSBhbGxKb2JzOiBEYXRhSm9iW107XG4gICAgQElucHV0KCkgam9iRXhlY3V0aW9uczogR3JpZERhdGFKb2JFeGVjdXRpb25bXSA9IFtdO1xuXG4gICAgcmVhZG9ubHkgdXVpZCA9ICdEYXRhSm9ic0ZhaWxlZFdpZGdldENvbXBvbmVudCc7XG5cbiAgICBsb2FkaW5nID0gdHJ1ZTtcbiAgICBkYXRhSm9iczogRGF0YUpvYkdyaWRbXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UpIHt9XG5cbiAgICAvKipcbiAgICAgKiAqKiBOZ0ZvciBlbGVtZW50cyB0cmFja2luZyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgZGF0YUpvYjogRGF0YUpvYik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtpbmRleH18JHtkYXRhSm9iPy5qb2JOYW1lfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzWydqb2JFeGVjdXRpb25zJ10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kYXRhSm9icyA9IFtdO1xuICAgICAgICAgICAgKGNoYW5nZXNbJ2pvYkV4ZWN1dGlvbnMnXS5jdXJyZW50VmFsdWUgYXMgRGF0YUpvYkV4ZWN1dGlvbnMpLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wID0gdGhpcy5kYXRhSm9icy5maW5kKChpKSA9PiBpLmpvYk5hbWUgPT09IGVsZW1lbnQuam9iTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCF0ZW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUpvYnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBqb2JOYW1lOiBlbGVtZW50LmpvYk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlsZWRUb3RhbDogMVxuICAgICAgICAgICAgICAgICAgICB9IGFzIERhdGFKb2JHcmlkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wLmZhaWxlZFRvdGFsKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5hdmlnYXRlVG9Kb2JEZXRhaWxzKGpvYj86IERhdGFKb2IpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGF0YUpvYiA9IHRoaXMuYWxsSm9icy5maW5kKChlbCkgPT4gZWwuam9iTmFtZSA9PT0gam9iLmpvYk5hbWUpO1xuICAgICAgICBsZXQgbGluayA9IHRoaXMubWFuYWdlTGluaztcbiAgICAgICAgbGluayA9IGxpbmsucmVwbGFjZSgne3RlYW19JywgZGF0YUpvYi5jb25maWc/LnRlYW0pO1xuICAgICAgICBsaW5rID0gbGluay5yZXBsYWNlKCd7ZGF0YS1qb2J9Jywgam9iLmpvYk5hbWUpO1xuICAgICAgICBsaW5rID0gbGluayArICcvZGV0YWlscyc7XG5cbiAgICAgICAgaWYgKGRhdGFKb2IpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UubmF2aWdhdGUobGluayk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8IS0tXG4gICB+IENvcHlyaWdodCAyMDIzLTIwMjUgQnJvYWRjb21cbiAgIH4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAgLS0+XG5cbjxjbHItZGF0YWdyaWRcbiAgICBjbGFzcz1cImRhdGFncmlkLWZhaWxlZC1leGVjdXRpb25zLXdpZGdldFwiXG4gICAgZGF0YS1jeT1cImRhdGEtcGlwZWxpbmVzLWpvYi1mYWlsZWQtd2lkZ2V0LWRhdGFncmlkXCJcbiAgICBbY2xyRGdMb2FkaW5nXT1cImxvYWRpbmdcIlxuPlxuICAgIDxjbHItZGctcGxhY2Vob2xkZXI+V2UgY291bGRuJ3QgZmluZCBhbnkgZmFpbGVkIGpvYnMhPC9jbHItZGctcGxhY2Vob2xkZXI+XG5cbiAgICA8Y2xyLWRnLWNvbHVtblxuICAgICAgICBjbGFzcz1cImhlYWRlci10aXRsZVwiXG4gICAgICAgIGRhdGEtY3k9XCJkYXRhLXBpcGVsaW5lcy1qb2ItZmFpbGVkLXdpZGdldC1qb2ItbmFtZVwiXG4gICAgICAgIFtjbHJEZ1NvcnRCeV09XCInam9iTmFtZSdcIlxuICAgICAgICA+Sm9icyB3aXRoIEZhaWxpbmcgZXhlY3V0aW9ucyAtIExhc3QgMjRoXG4gICAgPC9jbHItZGctY29sdW1uPlxuXG4gICAgPGNsci1kZy1jb2x1bW5cbiAgICAgICAgZGF0YS1jeT1cImRhdGEtcGlwZWxpbmVzLWpvYi1mYWlsZWQtd2lkZ2V0LWZhaWxlZC1leGVjdXRpb25zXCJcbiAgICAgICAgY2xhc3M9XCJsYWJlbC1jb2x1bW5cIlxuICAgICAgICBbY2xyRGdTb3J0QnldPVwiJ2ZhaWxlZFRvdGFsJ1wiXG4gICAgICAgID5GYWlsZWQgZXhlY3V0aW9uc1xuICAgIDwvY2xyLWRnLWNvbHVtbj5cblxuICAgIDxjbHItZGctcm93XG4gICAgICAgICpjbHJEZ0l0ZW1zPVwibGV0IGRhdGFKb2Igb2YgZGF0YUpvYnM7IHRyYWNrQnk6IHRyYWNrQnlGblwiXG4gICAgICAgIFtjbHJEZ0l0ZW1dPVwiZGF0YUpvYlwiXG4gICAgPlxuICAgICAgICA8Y2xyLWRnLWNlbGwgY2xhc3M9XCJuby1wYWRkaW5nIGpvYi1uYW1lLWNvbHVtblwiPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGluayBqb2ItbmFtZS1jb2x1bW5cIlxuICAgICAgICAgICAgICAgIGFsdD1cIk5hdmlnYXRlIHRvIE1hbmFnZSBEYXRhIGpvYnNcIlxuICAgICAgICAgICAgICAgIGRhdGEtY3k9XCJkcC1mYWlsZWQtZGF0YS1qb2JzLXdpZGdldC1qb2ItbmFtZS1saW5rXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVUb0pvYkRldGFpbHMoZGF0YUpvYilcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGRhdGFKb2Iuam9iTmFtZSB9fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICA8L2Nsci1kZy1jZWxsPlxuXG4gICAgICAgIDxjbHItZGctY2VsbCBjbGFzcz1cImNlbnRlclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbCBsYWJlbC1kYW5nZXIgY3VzdG9tLWxhYmVsXCJcbiAgICAgICAgICAgICAgICA+e3sgZGF0YUpvYi5mYWlsZWRUb3RhbCB9fTwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICA8L2Nsci1kZy1jZWxsPlxuICAgIDwvY2xyLWRnLXJvdz5cbjwvY2xyLWRhdGFncmlkPlxuIl19