@alauda-fe/common
Version:
Alauda frontend team common codes.
196 lines • 25.8 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { rgbColor } from '@alauda/ui';
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
import { combineLatest, Observable, map } from 'rxjs';
import { ObservableInput } from '../../core/public-api';
import * as i0 from "@angular/core";
const _c0 = a0 => ({ "font-size": a0 });
const _c1 = a0 => ({ backgroundColor: a0 });
function DonutStatusChartComponent_ng_template_6_span_8_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "span", 10);
i0.ɵɵtext(1);
i0.ɵɵpipe(2, "translate");
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext(2);
i0.ɵɵadvance();
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 1, ctx_r1.unit || "unit_ge"));
} }
function DonutStatusChartComponent_ng_template_6_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 5)(1, "div", 6)(2, "span", 7);
i0.ɵɵtext(3);
i0.ɵɵpipe(4, "async");
i0.ɵɵpipe(5, "number");
i0.ɵɵpipe(6, "async");
i0.ɵɵpipe(7, "aclFieldNotAvailable");
i0.ɵɵelementEnd();
i0.ɵɵtemplate(8, DonutStatusChartComponent_ng_template_6_span_8_Template, 3, 3, "span", 8);
i0.ɵɵelementEnd();
i0.ɵɵelementStart(9, "div", 9);
i0.ɵɵtext(10);
i0.ɵɵpipe(11, "translate");
i0.ɵɵelementEnd()();
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext();
i0.ɵɵadvance(2);
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction1(15, _c0, ctx_r1.customTextSize ? ctx_r1.customTextSize : "38px"));
i0.ɵɵadvance();
i0.ɵɵtextInterpolate(ctx_r1.customText ? ctx_r1.customText : i0.ɵɵpipeBind1(7, 11, ctx_r1.decimal ? i0.ɵɵpipeBind2(5, 6, i0.ɵɵpipeBind1(4, 4, ctx_r1.total$), "1.2-2") : i0.ɵɵpipeBind1(6, 9, ctx_r1.total$)));
i0.ɵɵadvance(5);
i0.ɵɵproperty("ngIf", !ctx_r1.hideUnit);
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(11, 13, ctx_r1.guideLabel || "total_num"), " ");
} }
function DonutStatusChartComponent_ul_8_li_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "li");
i0.ɵɵelement(1, "i", 13);
i0.ɵɵpipe(2, "pure");
i0.ɵɵelementStart(3, "div", 14);
i0.ɵɵpipe(4, "translate");
i0.ɵɵelementStart(5, "label");
i0.ɵɵtext(6);
i0.ɵɵpipe(7, "translate");
i0.ɵɵelementEnd()();
i0.ɵɵelementStart(8, "span");
i0.ɵɵtext(9);
i0.ɵɵpipe(10, "aclFieldNotAvailable");
i0.ɵɵelementEnd()();
} if (rf & 2) {
const item_r3 = ctx.$implicit;
const ctx_r1 = i0.ɵɵnextContext(2);
i0.ɵɵadvance();
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction1(13, _c1, i0.ɵɵpipeBind2(2, 4, item_r3, ctx_r1.color)));
i0.ɵɵadvance(2);
i0.ɵɵproperty("title", i0.ɵɵpipeBind1(4, 7, item_r3.name));
i0.ɵɵadvance(3);
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(7, 9, item_r3.name));
i0.ɵɵadvance(3);
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(10, 11, item_r3.value));
} }
function DonutStatusChartComponent_ul_8_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "ul", 11);
i0.ɵɵtemplate(1, DonutStatusChartComponent_ul_8_li_1_Template, 11, 15, "li", 12);
i0.ɵɵpipe(2, "async");
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext();
i0.ɵɵadvance();
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(2, 1, ctx_r1.data$));
} }
const EMPTY_COLOR = rgbColor('n-6');
export const CHART_COLORS = {
running: rgbColor('green'),
partial_running: rgbColor('yellow'),
pending: rgbColor('blue'),
failed: rgbColor('red'),
fail_or_abnormal: rgbColor('red'),
stopped: rgbColor('n-4'),
empty: rgbColor('n-6'),
error: rgbColor('red'),
no_workload: EMPTY_COLOR,
nil: 'rgba(242, 242, 242, 0.85)',
completed: '#1ba4b3',
done: '#1ba4b3',
};
export class DonutStatusChartComponent {
constructor() {
this.layout = 'row';
this.size = 145;
this.hideLegend = false;
this.decimal = false;
this.width = 10;
this.tooltipHideTitle = true;
this.tooltipTranslation = true;
this.refresh = new EventEmitter();
this.status$ = combineLatest([this.loading$, this.failed$]).pipe(map(([loading, failed]) => ({ loading, failed })));
this.pieData$ = this.data$.pipe(map(data => data?.map(d => ({
...d,
color: d.color ||
CHART_COLORS[(d.type || d.name)],
}))));
this.total$ = this.data$.pipe(map(data => data?.reduce((sum, { value }) => sum + value, 0)));
this.CHART_COLORS = CHART_COLORS;
}
get layoutColumn() {
return this.layout === 'column';
}
color(item) {
return (item.color ||
CHART_COLORS[(item.type || item.name)]);
}
static { this.ɵfac = function DonutStatusChartComponent_Factory(t) { return new (t || DonutStatusChartComponent)(); }; }
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DonutStatusChartComponent, selectors: [["acl-donut-status-chart"]], inputs: { data: "data", loading: "loading", failed: "failed", pieLabelText: "pieLabelText", layout: "layout", size: "size", customText: "customText", customTextSize: "customTextSize", unit: "unit", hideUnit: "hideUnit", hideLegend: "hideLegend", decimal: "decimal", width: "width", guideLabel: "guideLabel", tooltipTrigger: "tooltipTrigger", tooltipHideTitle: "tooltipHideTitle", tooltipTranslation: "tooltipTranslation", tooltipPointFormat: "tooltipPointFormat" }, outputs: { refresh: "refresh" }, decls: 9, vars: 19, consts: [["totalTemplate", ""], [1, "donut"], [1, "donut_pie"], ["chartType", "pie", 3, "refreshEvent", "chartStatus", "series", "pieLabelText", "hideHeader", "pieOuterRadius", "pieInnerDisc", "tooltipTrigger", "tooltipHideTitle", "tooltipTranslation", "tooltipPointFormat"], ["class", "labels", 4, "ngIf"], [1, "guide"], [1, "guide_value"], [1, "guide_value_text", 3, "ngStyle"], ["class", "guide_unit", 4, "ngIf"], [1, "guide_label"], [1, "guide_unit"], [1, "labels"], [4, "ngFor", "ngForOf"], [3, "ngStyle"], [1, "label", 3, "title"]], template: function DonutStatusChartComponent_Template(rf, ctx) { if (rf & 1) {
const _r1 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "acl-view-chart", 3);
i0.ɵɵpipe(3, "async");
i0.ɵɵpipe(4, "async");
i0.ɵɵpipe(5, "async");
i0.ɵɵlistener("refreshEvent", function DonutStatusChartComponent_Template_acl_view_chart_refreshEvent_2_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.refresh.next(null)); });
i0.ɵɵelementEnd()();
i0.ɵɵtemplate(6, DonutStatusChartComponent_ng_template_6_Template, 12, 17, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor)(8, DonutStatusChartComponent_ul_8_Template, 3, 3, "ul", 4);
i0.ɵɵelementEnd();
} if (rf & 2) {
const totalTemplate_r4 = i0.ɵɵreference(7);
i0.ɵɵclassProp("donut_column", ctx.layoutColumn);
i0.ɵɵadvance(2);
i0.ɵɵproperty("chartStatus", i0.ɵɵpipeBind1(3, 13, ctx.status$))("series", i0.ɵɵpipeBind1(4, 15, ctx.pieData$))("pieLabelText", i0.ɵɵpipeBind1(5, 17, ctx.status$).loading ? "" : ctx.pieLabelText || totalTemplate_r4)("hideHeader", true)("pieOuterRadius", ctx.size / 2 - 10)("pieInnerDisc", true)("tooltipTrigger", ctx.tooltipTrigger)("tooltipHideTitle", ctx.tooltipHideTitle)("tooltipTranslation", ctx.tooltipTranslation)("tooltipPointFormat", ctx.tooltipPointFormat);
i0.ɵɵadvance(6);
i0.ɵɵproperty("ngIf", !ctx.hideLegend);
} }, styles: [".donut[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-evenly;flex-direction:row;width:100%;height:100%}.donut_pie[_ngcontent-%COMP%]{flex:1;height:100%;min-width:135px}.donut_column[_ngcontent-%COMP%]{flex-direction:column}.donut_column[_ngcontent-%COMP%] .labels[_ngcontent-%COMP%]{flex-flow:row wrap;margin-top:45px}.donut_column[_ngcontent-%COMP%] .labels[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{flex:0 0 25%}.donut_column[_ngcontent-%COMP%] .labels[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:nth-child(odd){margin-right:65px}.labels[_ngcontent-%COMP%]{width:40%;max-width:180px;display:flex;flex:1;flex-direction:column;justify-content:center;padding-left:20px;font-size:12px;color:rgb(var(--aui-color-secondary-text));word-break:keep-all}.labels[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{margin:2px 0;display:flex;align-items:center}.labels[_ngcontent-%COMP%] .label[_ngcontent-%COMP%]{flex:1;margin-right:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.labels[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{display:inline-flex;width:6px;height:6px;border-radius:50%;margin-right:4px}.guide[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center}.guide_value[_ngcontent-%COMP%]{color:rgb(var(--aui-color-n-1));display:flex;align-items:flex-end}.guide_value_text[_ngcontent-%COMP%]{text-align:center;line-height:40px}.guide_unit[_ngcontent-%COMP%]{font-size:14px}.guide_label[_ngcontent-%COMP%]{font-size:14px;color:rgb(var(--aui-color-n-2))}.center-text__main[_ngcontent-%COMP%]{font-size:48px;font-weight:500;fill:rgb(var(--aui-color-main-text))}.center-text__sub[_ngcontent-%COMP%]{font-size:14px;fill:rgb(var(--aui-color-secondary-text))}"], changeDetection: 0 }); }
}
__decorate([
ObservableInput(),
__metadata("design:type", Observable)
], DonutStatusChartComponent.prototype, "data$", void 0);
__decorate([
ObservableInput(),
__metadata("design:type", Observable)
], DonutStatusChartComponent.prototype, "loading$", void 0);
__decorate([
ObservableInput(),
__metadata("design:type", Observable)
], DonutStatusChartComponent.prototype, "failed$", void 0);
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DonutStatusChartComponent, [{
type: Component,
args: [{ selector: 'acl-donut-status-chart', preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"donut\"\n [class.donut_column]=\"layoutColumn\"\n>\n <div class=\"donut_pie\">\n <acl-view-chart\n chartType=\"pie\"\n [chartStatus]=\"status$ | async\"\n [series]=\"pieData$ | async\"\n [pieLabelText]=\"\n (status$ | async).loading ? '' : pieLabelText || totalTemplate\n \"\n [hideHeader]=\"true\"\n [pieOuterRadius]=\"size / 2 - 10\"\n [pieInnerDisc]=\"true\"\n [tooltipTrigger]=\"tooltipTrigger\"\n [tooltipHideTitle]=\"tooltipHideTitle\"\n [tooltipTranslation]=\"tooltipTranslation\"\n [tooltipPointFormat]=\"tooltipPointFormat\"\n (refreshEvent)=\"refresh.next(null)\"\n >\n </acl-view-chart>\n </div>\n\n <ng-template #totalTemplate>\n <div class=\"guide\">\n <div class=\"guide_value\">\n <span\n [ngStyle]=\"{ 'font-size': customTextSize ? customTextSize : '38px' }\"\n class=\"guide_value_text\"\n >{{\n customText\n ? customText\n : ((decimal\n ? (total$ | async | number: '1.2-2')\n : (total$ | async)\n ) | aclFieldNotAvailable)\n }}</span\n >\n <span\n *ngIf=\"!hideUnit\"\n class=\"guide_unit\"\n >{{ unit || 'unit_ge' | translate }}</span\n >\n </div>\n <div class=\"guide_label\">\n {{ guideLabel || 'total_num' | translate }}\n </div>\n </div>\n </ng-template>\n\n <ul\n *ngIf=\"!hideLegend\"\n class=\"labels\"\n >\n <li *ngFor=\"let item of data$ | async\">\n <i [ngStyle]=\"{ backgroundColor: item | pure: color }\"></i>\n <div\n class=\"label\"\n [title]=\"item.name | translate\"\n >\n <label>{{ item.name | translate }}</label>\n </div>\n <span>{{ item.value | aclFieldNotAvailable }}</span>\n </li>\n </ul>\n</div>\n", styles: [".donut{display:flex;align-items:center;justify-content:space-evenly;flex-direction:row;width:100%;height:100%}.donut_pie{flex:1;height:100%;min-width:135px}.donut_column{flex-direction:column}.donut_column .labels{flex-flow:row wrap;margin-top:45px}.donut_column .labels li{flex:0 0 25%}.donut_column .labels li:nth-child(odd){margin-right:65px}.labels{width:40%;max-width:180px;display:flex;flex:1;flex-direction:column;justify-content:center;padding-left:20px;font-size:12px;color:rgb(var(--aui-color-secondary-text));word-break:keep-all}.labels li{margin:2px 0;display:flex;align-items:center}.labels .label{flex:1;margin-right:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.labels i{display:inline-flex;width:6px;height:6px;border-radius:50%;margin-right:4px}.guide{display:flex;flex-direction:column;align-items:center}.guide_value{color:rgb(var(--aui-color-n-1));display:flex;align-items:flex-end}.guide_value_text{text-align:center;line-height:40px}.guide_unit{font-size:14px}.guide_label{font-size:14px;color:rgb(var(--aui-color-n-2))}.center-text__main{font-size:48px;font-weight:500;fill:rgb(var(--aui-color-main-text))}.center-text__sub{font-size:14px;fill:rgb(var(--aui-color-secondary-text))}\n"] }]
}], null, { data: [{
type: Input
}], data$: [], loading: [{
type: Input
}], loading$: [], failed: [{
type: Input
}], pieLabelText: [{
type: Input
}], failed$: [], layout: [{
type: Input
}], size: [{
type: Input
}], customText: [{
type: Input
}], customTextSize: [{
type: Input
}], unit: [{
type: Input
}], hideUnit: [{
type: Input
}], hideLegend: [{
type: Input
}], decimal: [{
type: Input
}], width: [{
type: Input
}], guideLabel: [{
type: Input
}], tooltipTrigger: [{
type: Input
}], tooltipHideTitle: [{
type: Input
}], tooltipTranslation: [{
type: Input
}], tooltipPointFormat: [{
type: Input
}], refresh: [{
type: Output
}] }); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DonutStatusChartComponent, { className: "DonutStatusChartComponent" }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL3BpZS1kZXJpdmF0aXZlLWNoYXJ0L2RvbnV0LXN0YXR1cy9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvcGllLWRlcml2YXRpdmUtY2hhcnQvZG9udXQtc3RhdHVzL3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdEMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7SUMyQmhELGdDQUdHO0lBQUEsWUFBbUM7O0lBQUEsaUJBQ3JDOzs7SUFERSxjQUFtQztJQUFuQyxvRUFBbUM7OztJQWZ0QyxBQURGLEFBREYsOEJBQW1CLGFBQ1EsY0FJcEI7SUFBQSxZQU9DOzs7OztJQUFBLGlCQUNIO0lBQ0QsMEZBR0c7SUFFTCxpQkFBTTtJQUNOLDhCQUF5QjtJQUN2QixhQUNGOztJQUNGLEFBREUsaUJBQU0sRUFDRjs7O0lBcEJBLGVBQXFFO0lBQXJFLDZHQUFxRTtJQUVwRSxjQU9DO0lBUEQsOE1BT0M7SUFHRCxlQUFlO0lBQWYsdUNBQWU7SUFNbEIsZUFDRjtJQURFLHlGQUNGOzs7SUFRRiwwQkFBdUM7SUFDckMsd0JBQTJEOztJQUMzRCwrQkFHQzs7SUFDQyw2QkFBTztJQUFBLFlBQTJCOztJQUNwQyxBQURvQyxpQkFBUSxFQUN0QztJQUNOLDRCQUFNO0lBQUEsWUFBdUM7O0lBQy9DLEFBRCtDLGlCQUFPLEVB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QkFBa0I7a0JBQTFCLEtBQUs7WUFFSSxPQUFPO2tCQUFoQixNQUFNOztrRkF4REkseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmdiQ29sb3IgfSBmcm9tICdAYWxhdWRhL3VpJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgbWFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENvbnRleHRJdGVtIH0gZnJvbSAnLi4vLi4vY2hhcnQvY29tbW9uL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZUlucHV0IH0gZnJvbSAnLi4vLi4vY29yZS9wdWJsaWMtYXBpJztcblxuY29uc3QgRU1QVFlfQ09MT1IgPSByZ2JDb2xvcignbi02Jyk7XG5leHBvcnQgY29uc3QgQ0hBUlRfQ09MT1JTID0ge1xuICBydW5uaW5nOiByZ2JDb2xvcignZ3JlZW4nKSxcbiAgcGFydGlhbF9ydW5uaW5nOiByZ2JDb2xvcigneWVsbG93JyksXG4gIHBlbmRpbmc6IHJnYkNvbG9yKCdibHVlJyksXG4gIGZhaWxlZDogcmdiQ29sb3IoJ3JlZCcpLFxuICBmYWlsX29yX2Fibm9ybWFsOiByZ2JDb2xvcigncmVkJyksXG4gIHN0b3BwZWQ6IHJnYkNvbG9yKCduLTQnKSxcbiAgZW1wdHk6IHJnYkNvbG9yKCduLTYnKSxcbiAgZXJyb3I6IHJnYkNvbG9yKCdyZWQnKSxcbiAgbm9fd29ya2xvYWQ6IEVNUFRZX0NPTE9SLFxuICBuaWw6ICdyZ2JhKDI0MiwgMjQyLCAyNDIsIDAuODUpJyxcbiAgY29tcGxldGVkOiAnIzFiYTRiMycsXG4gIGRvbmU6ICcjMWJhNGIzJyxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9udXRTdGF0dXNJdGVtIHtcbiAgbmFtZTogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xuICBjb2xvcj86IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbiAgaW5kZXg/OiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FjbC1kb251dC1zdGF0dXMtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJ3RlbXBsYXRlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnc3R5bGVzLnNjc3MnXSxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEb251dFN0YXR1c0NoYXJ0Q29tcG9uZW50IHtcbiAgQElucHV0KClcbiAgZGF0YTogRG9udXRTdGF0dXNJdGVtW107XG5cbiAgQE9ic2VydmFibGVJbnB1dCgpXG4gIGRhdGEkITogT2JzZXJ2YWJsZTxEb251dFN0YXR1c0l0ZW1bXT47XG5cbiAgQElucHV0KClcbiAgbG9hZGluZzogYm9vbGVhbjtcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgbG9hZGluZyQhOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIEBJbnB1dCgpIGZhaWxlZDogYm9vbGVhbjtcblxuICBASW5wdXQoKSBwaWVMYWJlbFRleHQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICBmYWlsZWQkITogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICBASW5wdXQoKSBsYXlvdXQ6ICdyb3cnIHwgJ2NvbHVtbicgPSAncm93JztcblxuICBASW5wdXQoKVxuICBzaXplID0gMTQ1O1xuXG4gIEBJbnB1dCgpXG4gIGN1c3RvbVRleHQ6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBjdXN0b21UZXh0U2l6ZTogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHVuaXQ6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBoaWRlVW5pdDogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBoaWRlTGVnZW5kID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZGVjaW1hbCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHdpZHRoID0gMTA7XG5cbiAgQElucHV0KCkgZ3VpZGVMYWJlbDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHRvb2x0aXBUcmlnZ2VyOiAnYXhpcycgfCAnaXRlbScgfCAnbm9uZSc7XG5cbiAgQElucHV0KCkgdG9vbHRpcEhpZGVUaXRsZSA9IHRydWU7XG5cbiAgQElucHV0KCkgdG9vbHRpcFRyYW5zbGF0aW9uID0gdHJ1ZTtcblxuICBASW5wdXQoKSB0b29sdGlwUG9pbnRGb3JtYXQ6IChkOiBDb250ZXh0SXRlbSkgPT4gbnVtYmVyIHwgc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSByZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGdldCBsYXlvdXRDb2x1bW4oKSB7XG4gICAgcmV0dXJuIHRoaXMubGF5b3V0ID09PSAnY29sdW1uJztcbiAgfVxuXG4gIHN0YXR1cyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmxvYWRpbmckLCB0aGlzLmZhaWxlZCRdKS5waXBlKFxuICAgIG1hcCgoW2xvYWRpbmcsIGZhaWxlZF0pID0+ICh7IGxvYWRpbmcsIGZhaWxlZCB9KSksXG4gICk7XG5cbiAgcGllRGF0YSQgPSB0aGlzLmRhdGEkLnBpcGUoXG4gICAgbWFwKGRhdGEgPT5cbiAgICAgIGRhdGE/Lm1hcChkID0+ICh7XG4gICAgICAgIC4uLmQsXG4gICAgICAgIGNvbG9yOlxuICAgICAgICAgIGQuY29sb3IgfHxcbiAgICAgICAgICBDSEFSVF9DT0xPUlNbKGQudHlwZSB8fCBkLm5hbWUpIGFzIGtleW9mIHR5cGVvZiBDSEFSVF9DT0xPUlNdLFxuICAgICAgfSkpLFxuICAgICksXG4gICk7XG5cbiAgdG90YWwkID0gdGhpcy5kYXRhJC5waXBlKFxuICAgIG1hcChkYXRhID0+IGRhdGE/LnJlZHVjZSgoc3VtLCB7IHZhbHVlIH0pID0+IHN1bSArIHZhbHVlLCAwKSksXG4gICk7XG5cbiAgQ0hBUlRfQ09MT1JTID0gQ0hBUlRfQ09MT1JTO1xuXG4gIGNvbG9yKGl0ZW06IERvbnV0U3RhdHVzSXRlbSkge1xuICAgIHJldHVybiAoXG4gICAgICBpdGVtLmNvbG9yIHx8XG4gICAgICBDSEFSVF9DT0xPUlNbKGl0ZW0udHlwZSB8fCBpdGVtLm5hbWUpIGFzIGtleW9mIHR5cGVvZiBDSEFSVF9DT0xPUlNdXG4gICAgKTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImRvbnV0XCJcbiAgW2NsYXNzLmRvbnV0X2NvbHVtbl09XCJsYXlvdXRDb2x1bW5cIlxuPlxuICA8ZGl2IGNsYXNzPVwiZG9udXRfcGllXCI+XG4gICAgPGFjbC12aWV3LWNoYXJ0XG4gICAgICBjaGFydFR5cGU9XCJwaWVcIlxuICAgICAgW2NoYXJ0U3RhdHVzXT1cInN0YXR1cyQgfCBhc3luY1wiXG4gICAgICBbc2VyaWVzXT1cInBpZURhdGEkIHwgYXN5bmNcIlxuICAgICAgW3BpZUxhYmVsVGV4dF09XCJcbiAgICAgICAgKHN0YXR1cyQgfCBhc3luYykubG9hZGluZyA/ICcnIDogcGllTGFiZWxUZXh0IHx8IHRvdGFsVGVtcGxhdGVcbiAgICAgIFwiXG4gICAgICBbaGlkZUhlYWRlcl09XCJ0cnVlXCJcbiAgICAgIFtwaWVPdXRlclJhZGl1c109XCJzaXplIC8gMiAtIDEwXCJcbiAgICAgIFtwaWVJbm5lckRpc2NdPVwidHJ1ZVwiXG4gICAgICBbdG9vbHRpcFRyaWdnZXJdPVwidG9vbHRpcFRyaWdnZXJcIlxuICAgICAgW3Rvb2x0aXBIaWRlVGl0bGVdPVwidG9vbHRpcEhpZGVUaXRsZVwiXG4gICAgICBbdG9vbHRpcFRyYW5zbGF0aW9uXT1cInRvb2x0aXBUcmFuc2xhdGlvblwiXG4gICAgICBbdG9vbHRpcFBvaW50Rm9ybWF0XT1cInRvb2x0aXBQb2ludEZvcm1hdFwiXG4gICAgICAocmVmcmVzaEV2ZW50KT1cInJlZnJlc2gubmV4dChudWxsKVwiXG4gICAgPlxuICAgIDwvYWNsLXZpZXctY2hhcnQ+XG4gIDwvZGl2PlxuXG4gIDxuZy10ZW1wbGF0ZSAjdG90YWxUZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwiZ3VpZGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJndWlkZV92YWx1ZVwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJ2ZvbnQtc2l6ZSc6IGN1c3RvbVRleHRTaXplID8gY3VzdG9tVGV4dFNpemUgOiAnMzhweCcgfVwiXG4gICAgICAgICAgY2xhc3M9XCJndWlkZV92YWx1ZV90ZXh0XCJcbiAgICAgICAgICA+e3tcbiAgICAgICAgICAgIGN1c3RvbVRleHRcbiAgICAgICAgICAgICAgPyBjdXN0b21UZXh0XG4gICAgICAgICAgICAgIDogKChkZWNpbWFsXG4gICAgICAgICAgICAgICAgICA/ICh0b3RhbCQgfCBhc3luYyB8IG51bWJlcjogJzEuMi0yJylcbiAgICAgICAgICAgICAgICAgIDogKHRvdGFsJCB8IGFzeW5jKVxuICAgICAgICAgICAgICAgICkgfCBhY2xGaWVsZE5vdEF2YWlsYWJsZSlcbiAgICAgICAgICB9fTwvc3BhblxuICAgICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCIhaGlkZVVuaXRcIlxuICAgICAgICAgIGNsYXNzPVwiZ3VpZGVfdW5pdFwiXG4gICAgICAgICAgPnt7IHVuaXQgfHwgJ3VuaXRfZ2UnIHwgdHJhbnNsYXRlIH19PC9zcGFuXG4gICAgICAgID5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImd1aWRlX2xhYmVsXCI+XG4gICAgICAgIHt7IGd1aWRlTGFiZWwgfHwgJ3RvdGFsX251bScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDx1bFxuICAgICpuZ0lmPVwiIWhpZGVMZWdlbmRcIlxuICAgIGNsYXNzPVwibGFiZWxzXCJcbiAgPlxuICAgIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhJCB8IGFzeW5jXCI+XG4gICAgICA8aSBbbmdTdHlsZV09XCJ7IGJhY2tncm91bmRDb2xvcjogaXRlbSB8IHB1cmU6IGNvbG9yIH1cIj48L2k+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibGFiZWxcIlxuICAgICAgICBbdGl0bGVdPVwiaXRlbS5uYW1lIHwgdHJhbnNsYXRlXCJcbiAgICAgID5cbiAgICAgICAgPGxhYmVsPnt7IGl0ZW0ubmFtZSB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuPnt7IGl0ZW0udmFsdWUgfCBhY2xGaWVsZE5vdEF2YWlsYWJsZSB9fTwvc3Bhbj5cbiAgICA8L2xpPlxuICA8L3VsPlxuPC9kaXY+XG4iXX0=