@alauda-fe/common
Version:
Alauda frontend team common codes.
157 lines • 24.1 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, } from '@angular/core';
import { Observable, merge, map, tap } from 'rxjs';
import { ObservableInput, publishRef } from '../../../core/public-api';
import { ContextChartService } from '../../chart.service';
import { Orientation } from '../../types';
import * as i0 from "@angular/core";
import * as i1 from "../../chart.service";
import * as i2 from "@angular/common";
import * as i3 from "../../../core/pipes/pure.pipe";
const _c0 = ["aclBarPath", ""];
function BarPathComponent__svg_ng_container_1__svg_rect_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵnamespaceSVG();
i0.ɵɵelement(0, "rect", 3);
i0.ɵɵpipe(1, "pure");
i0.ɵɵpipe(2, "pure");
i0.ɵɵpipe(3, "pure");
i0.ɵɵpipe(4, "pure");
i0.ɵɵpipe(5, "pure");
} if (rf & 2) {
const item_r1 = ctx.$implicit;
const i_r2 = ctx.index;
const ctx_r2 = i0.ɵɵnextContext(2);
i0.ɵɵattribute("width", ctx_r2.innerBandWidth)("x", i0.ɵɵpipeBind2(1, 6, item_r1.x, ctx_r2.getRectX) || 0)("y", i0.ɵɵpipeBind3(2, 9, i_r2, ctx_r2.getRectY, item_r1.y) || 0)("height", item_r1.y ? i0.ɵɵpipeBind2(3, 13, 0, ctx_r2.context.y) - i0.ɵɵpipeBind2(4, 16, item_r1.y, ctx_r2.context.y) : 0)("fill", item_r1.color)("opacity", i0.ɵɵpipeBind3(5, 19, item_r1.x, ctx_r2.handleOpacity, ctx_r2.activateLegend));
} }
function BarPathComponent__svg_ng_container_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵnamespaceSVG();
i0.ɵɵelementContainerStart(0);
i0.ɵɵtemplate(1, BarPathComponent__svg_ng_container_1__svg_rect_1_Template, 6, 23, "rect", 2);
i0.ɵɵpipe(2, "async");
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r2 = i0.ɵɵnextContext();
i0.ɵɵadvance();
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(2, 1, ctx_r2.barData$));
} }
function BarPathComponent__svg_ng_template_2__svg_rect_0_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵnamespaceSVG();
i0.ɵɵelement(0, "rect", 3);
i0.ɵɵpipe(1, "pure");
i0.ɵɵpipe(2, "pure");
i0.ɵɵpipe(3, "pure");
i0.ɵɵpipe(4, "pure");
} if (rf & 2) {
const item_r4 = ctx.$implicit;
const i_r5 = ctx.index;
const ctx_r2 = i0.ɵɵnextContext(2);
i0.ɵɵattribute("height", ctx_r2.innerBandWidth)("y", i0.ɵɵpipeBind2(1, 6, item_r4.x, ctx_r2.getRectX) || 0)("x", i0.ɵɵpipeBind2(2, 9, i_r5, ctx_r2.getStackedRectY) || 0)("width", item_r4.y ? i0.ɵɵpipeBind2(3, 12, item_r4.y, ctx_r2.context.y) : 0)("fill", item_r4.color)("opacity", i0.ɵɵpipeBind3(4, 15, item_r4.x, ctx_r2.handleOpacity, ctx_r2.activateLegend));
} }
function BarPathComponent__svg_ng_template_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, BarPathComponent__svg_ng_template_2__svg_rect_0_Template, 5, 19, "rect", 2);
i0.ɵɵpipe(1, "async");
} if (rf & 2) {
const ctx_r2 = i0.ɵɵnextContext();
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(1, 1, ctx_r2.barData$));
} }
export class BarPathComponent {
get isStacked() {
return this.type === 'stacked';
}
get innerBandWidth() {
return ((this.adaptiveBandWidth
? this.isStacked
? this.context.x.bandwidth()
: this.context.barInnerScale(this.barPadding).bandwidth()
: this.bandWidth) || 0);
}
constructor(context, cdr) {
this.context = context;
this.cdr = cdr;
this.barPadding = 8;
this.type = 'standard';
this.orientation = Orientation;
this.preValue = 0;
this.barData = [];
this.barData$ = merge(this.data$, this.context.legendChange$$, this.context.seriesData$).pipe(map(() => {
this.preValue = 0;
return this.data
.map((item, index) => ({
...item,
color: item.color || this.context.getChartDefaultColor(index),
}))
.filter(item => !this.context.disabledLegend.has(item.x));
}), tap(res => {
this.barData = res;
}), publishRef());
this.getRectX = (x) => this.isStacked
? 0
: this.context.barInnerScale(this.barPadding)(x);
this.getRectY = (index, y) => {
if (!this.isStacked) {
return this.context.y(y);
}
const previous = this.context.y(this.barData[index - 1 > 0 ? index - 1 : 0].y);
const diffH = Math.abs(this.context.y(0) - this.context.y(y));
const res = index === 0 ? previous : this.preValue - diffH;
this.preValue = res;
return res;
};
this.getStackedRectY = (index) => {
if (!this.isStacked) {
return 0;
}
const previous = this.context.y(this.barData[index - 1 > 0 ? index - 1 : 0].y);
const diffH = Math.abs(this.context.y(0) - previous);
const res = index === 0 ? 0 : index === 1 ? previous : this.preValue + diffH;
this.preValue = res;
return res;
};
this.handleVisibility = (name) => this.context.disabledLegend.has(name) ? 'hidden' : '';
this.handleOpacity = (name, activateLegend) => activateLegend ? (activateLegend === name ? 1 : 0.2) : 1;
}
ngOnInit() {
this.context.legendActivate$$.subscribe(legend => {
this.activateLegend = legend;
this.cdr.detectChanges();
});
this.context.update$$.subscribe(() => {
this.cdr.detectChanges();
});
}
static { this.ɵfac = function BarPathComponent_Factory(t) { return new (t || BarPathComponent)(i0.ɵɵdirectiveInject(i1.ContextChartService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: BarPathComponent, selectors: [["g", "aclBarPath", ""]], inputs: { stroke: "stroke", data: "data", barPadding: "barPadding", groupName: "groupName", type: "type", bandWidth: "bandWidth", adaptiveBandWidth: "adaptiveBandWidth" }, attrs: _c0, decls: 4, vars: 2, consts: [["elseTemplate", ""], [4, "ngIf", "ngIfElse"], ["class", "rect", 4, "ngFor", "ngForOf"], [1, "rect"]], template: function BarPathComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵnamespaceSVG();
i0.ɵɵelementStart(0, "g");
i0.ɵɵtemplate(1, BarPathComponent__svg_ng_container_1_Template, 3, 3, "ng-container", 1)(2, BarPathComponent__svg_ng_template_2_Template, 2, 3, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
i0.ɵɵelementEnd();
} if (rf & 2) {
const elseTemplate_r6 = i0.ɵɵreference(3);
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", ctx.context.barOptions.orientation === ctx.orientation.VERTICAL)("ngIfElse", elseTemplate_r6);
} }, dependencies: [i2.NgForOf, i2.NgIf, i2.AsyncPipe, i3.PurePipe], styles: [".tooltipClass{pointer-events:none;max-width:800px!important}.tooltip-content[_ngcontent-%COMP%]{color:rgb(var(--aui-color-n-6))}.tooltip-content[_ngcontent-%COMP%] .title[_ngcontent-%COMP%]{margin-bottom:8px}.tooltip-content[_ngcontent-%COMP%] .context[_ngcontent-%COMP%] ul[_ngcontent-%COMP%], .tooltip-content[_ngcontent-%COMP%] .context[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{padding:0;margin:0;list-style:none}.tooltip-content[_ngcontent-%COMP%] .context[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]:not(:last-child), .tooltip-content[_ngcontent-%COMP%] .context[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:not(:last-child){margin-bottom:6px}.tooltip-content[_ngcontent-%COMP%] .context-list[_ngcontent-%COMP%]{display:flex;flex-direction:column}.tooltip-content[_ngcontent-%COMP%] .context-list[_ngcontent-%COMP%] .active[_ngcontent-%COMP%]{color:rgb(var(--aui-color-n-10))}.tooltip-content[_ngcontent-%COMP%] .context-item[_ngcontent-%COMP%]{display:flex}.tooltip-content[_ngcontent-%COMP%] .context[_ngcontent-%COMP%] .left[_ngcontent-%COMP%]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tooltip-content[_ngcontent-%COMP%] .context[_ngcontent-%COMP%] .right[_ngcontent-%COMP%]{text-align:right;white-space:nowrap}.tooltip-content[_ngcontent-%COMP%] .context[_ngcontent-%COMP%] .column-layout[_ngcontent-%COMP%] .right[_ngcontent-%COMP%]{flex:1 1 auto;text-align:right}.tooltip-content[_ngcontent-%COMP%] .context[_ngcontent-%COMP%] .column-layout[_ngcontent-%COMP%] .left[_ngcontent-%COMP%]{margin-right:8px}.tooltip-content[_ngcontent-%COMP%] .context[_ngcontent-%COMP%] .item-icon[_ngcontent-%COMP%]{margin-right:4px;width:6px;border-radius:50%;height:6px;background-color:rgb(var(--aui-color-n-10));display:inline-block;font-size:6px}"], changeDetection: 0 }); }
}
__decorate([
ObservableInput(true, []),
__metadata("design:type", Observable)
], BarPathComponent.prototype, "data$", void 0);
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BarPathComponent, [{
type: Component,
args: [{ selector: 'g[aclBarPath]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<svg:g>\n <ng-container\n *ngIf=\"\n context.barOptions.orientation === orientation.VERTICAL;\n else elseTemplate\n \"\n >\n <rect\n *ngFor=\"let item of barData$ | async; let i = index\"\n class=\"rect\"\n [attr.width]=\"innerBandWidth\"\n [attr.x]=\"(item.x | pure: getRectX) || 0\"\n [attr.y]=\"(i | pure: getRectY:item.y) || 0\"\n [attr.height]=\"\n item.y ? (0 | pure: context.y) - (item.y | pure: context.y) : 0\n \"\n [attr.fill]=\"item.color\"\n [attr.opacity]=\"item.x | pure: handleOpacity:activateLegend\"\n ></rect>\n </ng-container>\n <ng-template #elseTemplate>\n <rect\n *ngFor=\"let item of barData$ | async; let i = index\"\n class=\"rect\"\n [attr.height]=\"innerBandWidth\"\n [attr.y]=\"(item.x | pure: getRectX) || 0\"\n [attr.x]=\"(i | pure: getStackedRectY) || 0\"\n [attr.width]=\"item.y ? (item.y | pure: context.y) : 0\"\n [attr.fill]=\"item.color\"\n [attr.opacity]=\"item.x | pure: handleOpacity:activateLegend\"\n ></rect>\n </ng-template>\n</svg:g>\n", styles: ["::ng-deep .tooltipClass{pointer-events:none;max-width:800px!important}.tooltip-content{color:rgb(var(--aui-color-n-6))}.tooltip-content .title{margin-bottom:8px}.tooltip-content .context ul,.tooltip-content .context li{padding:0;margin:0;list-style:none}.tooltip-content .context ul:not(:last-child),.tooltip-content .context li:not(:last-child){margin-bottom:6px}.tooltip-content .context-list{display:flex;flex-direction:column}.tooltip-content .context-list .active{color:rgb(var(--aui-color-n-10))}.tooltip-content .context-item{display:flex}.tooltip-content .context .left{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tooltip-content .context .right{text-align:right;white-space:nowrap}.tooltip-content .context .column-layout .right{flex:1 1 auto;text-align:right}.tooltip-content .context .column-layout .left{margin-right:8px}.tooltip-content .context .item-icon{margin-right:4px;width:6px;border-radius:50%;height:6px;background-color:rgb(var(--aui-color-n-10));display:inline-block;font-size:6px}\n"] }]
}], () => [{ type: i1.ContextChartService }, { type: i0.ChangeDetectorRef }], { stroke: [{
type: Input
}], data: [{
type: Input
}], data$: [], barPadding: [{
type: Input
}], groupName: [{
type: Input
}], type: [{
type: Input
}], bandWidth: [{
type: Input
}], adaptiveBandWidth: [{
type: Input
}] }); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(BarPathComponent, { className: "BarPathComponent" }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyLXBhdGguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2NoYXJ0L2NvbW1vbi9zZXJpZXMvYmFyLXBhdGguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2NoYXJ0L2NvbW1vbi9zZXJpZXMvYmFyLXBhdGguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEdBRU4sTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7Ozs7O0lDTnRDLDBCQVdROzs7Ozs7Ozs7Ozs7OztJQWpCViw2QkFLQztJQUNDLDZGQVdDOzs7OztJQVZrQixjQUFxQjtJQUFyQiwrREFBcUI7Ozs7SUFheEMsMEJBU1E7Ozs7Ozs7Ozs7OztJQVRSLDRGQVNDOzs7O0lBUmtCLCtEQUFxQjs7QURBNUMsTUFBTSxPQUFPLGdCQUFnQjtJQXlCM0IsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQztJQUNqQyxDQUFDO0lBc0JELElBQUksY0FBYztRQUNoQixPQUFPLENBQ0wsQ0FBQyxJQUFJLENBQUMsaUJBQWlCO1lBQ3JCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUztnQkFDZCxDQUFDLENBQXFCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FB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QztJQU9KLFFBQVE7UUFDTixJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMvQyxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztZQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztpRkE3RVUsZ0JBQWdCO29FQUFoQixnQkFBZ0I7O1lDdEI3Qix5QkFBTztZQW9CTCxBQW5CQSx3RkFLQywwR0FjMEI7WUFZN0IsaUJBQVE7OztZQTlCSCxjQUVRO1lBQUEsQUFGUixzRkFFUSw2QkFFYjs7O0FEcUJFO0lBREMsZUFBZSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7OEJBQ2xCLFVBQVU7K0NBRWhCO2lGQVBTLGdCQUFnQjtjQVA1QixTQUFTOzJCQUVFLGVBQWUsbUJBR1IsdUJBQXVCLENBQUMsTUFBTTtvRkFHdEMsTUFBTTtrQkFBZCxLQUFLO1lBQ0csSUFBSTtrQkFBWixLQUFLO1lBR04sS0FBSyxNQUlJLFVBQVU7a0JBQWxCLEtBQUs7WUFFRyxTQUFTO2tCQUFqQixLQUFLO1lBRUcsSUFBSTtrQkFBWixLQUFLO1lBRUcsU0FBUztrQkFBakIsS0FBSztZQUVHLGlCQUFpQjtrQkFBekIsS0FBSzs7a0ZBakJLLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNjYWxlQmFuZCB9IGZyb20gJ2QzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG1lcmdlLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlSW5wdXQsIHB1Ymxpc2hSZWYgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgQ2hhcnREYXRhSXRlbSB9IGZyb20gJy4uLy4uLy4uL3ZpZXctY2hhcnQvdHlwZXMnO1xuaW1wb3J0IHsgQ29udGV4dENoYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uL2NoYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgT3JpZW50YXRpb24gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2dbYWNsQmFyUGF0aF0nLFxuICB0ZW1wbGF0ZVVybDogJy4vYmFyLXBhdGguY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi4vdG9vbHRpcC90b29sdGlwLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBCYXJQYXRoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgc3Ryb2tlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRhdGE6IEFycmF5PENoYXJ0RGF0YUl0ZW08eyB4OiBzdHJpbmc7IHk6IG51bWJlcjsgY29sb3I/OiBzdHJpbmcgfT4+O1xuXG4gIEBPYnNlcnZhYmxlSW5wdXQodHJ1ZSwgW10pXG4gIGRhdGEkITogT2JzZXJ2YWJsZTxcbiAgICBBcnJheTxDaGFydERhdGFJdGVtPHsgeDogc3RyaW5nOyB5OiBudW1iZXI7IGNvbG9yPzogc3RyaW5nIH0+PlxuICA+O1xuXG4gIEBJbnB1dCgpIGJhclBhZGRpbmcgPSA4O1xuXG4gIEBJbnB1dCgpIGdyb3VwTmFtZTogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHR5cGU6ICdzdGFuZGFyZCcgfCAnc3RhY2tlZCcgPSAnc3RhbmRhcmQnO1xuXG4gIEBJbnB1dCgpIGJhbmRXaWR0aDogbnVtYmVyO1xuXG4gIEBJbnB1dCgpIGFkYXB0aXZlQmFuZFdpZHRoOiBib29sZWFuO1xuXG4gIHBhdGg6IHN0cmluZztcbiAgb3JpZW50YXRpb24gPSBPcmllbnRhdGlvbjtcbiAgcHJlVmFsdWUgPSAwO1xuICBiYXJEYXRhOiBDaGFydERhdGFJdGVtW10gPSBbXTtcbiAgYWN0aXZhdGVMZWdlbmQ6IHN0cmluZztcblxuICBnZXQgaXNTdGFja2VkKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdzdGFja2VkJztcbiAgfVxuXG4gIGJhckRhdGEkID0gbWVyZ2UoXG4gICAgdGhpcy5kYXRhJCxcbiAgICB0aGlzLmNvbnRleHQubGVnZW5kQ2hhbmdlJCQsXG4gICAgdGhpcy5jb250ZXh0LnNlcmllc0RhdGEkLFxuICApLnBpcGUoXG4gICAgbWFwKCgpID0+IHtcbiAgICAgIHRoaXMucHJlVmFsdWUgPSAwO1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgICAgICAubWFwKChpdGVtLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgIGNvbG9yOiBpdGVtLmNvbG9yIHx8IHRoaXMuY29udGV4dC5nZXRDaGFydERlZmF1bHRDb2xvcihpbmRleCksXG4gICAgICAgIH0pKVxuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gIXRoaXMuY29udGV4dC5kaXNhYmxlZExlZ2VuZC5oYXMoaXRlbS54IGFzIHN0cmluZykpO1xuICAgIH0pLFxuICAgIHRhcChyZXMgPT4ge1xuICAgICAgdGhpcy5iYXJEYXRhID0gcmVzO1xuICAgIH0pLFxuICAgIHB1Ymxpc2hSZWYoKSxcbiAgKTtcblxuICBnZXQgaW5uZXJCYW5kV2lkdGgoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLmFkYXB0aXZlQmFuZFdpZHRoXG4gICAgICAgID8gdGhpcy5pc1N0YWNrZWRcbiAgICAgICAgICA/ICg8U2NhbGVCYW5kPHN0cmluZz4+dGhpcy5jb250ZXh0LngpLmJhbmR3aWR0aCgpXG4gICAgICAgICAgOiB0aGlzLmNvbnRleHQuYmFySW5uZXJTY2FsZSh0aGlzLmJhclBhZGRpbmcpLmJhbmR3aWR0aCgpXG4gICAgICAgIDogdGhpcy5iYW5kV2lkdGgpIHx8IDBcbiAgICApO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbnRleHQ6IENvbnRleHRDaGFydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHt9XG5cbiAgZ2V0UmVjdFggPSAoeDogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSkgPT5cbiAgICB0aGlzLmlzU3RhY2tlZFxuICAgICAgPyAwXG4gICAgICA6IHRoaXMuY29udGV4dC5iYXJJbm5lclNjYWxlKHRoaXMuYmFyUGFkZGluZykoeCBhcyBzdHJpbmcpO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29udGV4dC5sZWdlbmRBY3RpdmF0ZSQkLnN1YnNjcmliZShsZWdlbmQgPT4ge1xuICAgICAgdGhpcy5hY3RpdmF0ZUxlZ2VuZCA9IGxlZ2VuZDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgICB0aGlzLmNvbnRleHQudXBkYXRlJCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFJlY3RZID0gKGluZGV4OiBudW1iZXIsIHk6IG51bWJlcikgPT4ge1xuICAgIGlmICghdGhpcy5pc1N0YWNrZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRleHQueSh5KTtcbiAgICB9XG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLmNvbnRleHQueShcbiAgICAgIHRoaXMuYmFyRGF0YVtpbmRleCAtIDEgPiAwID8gaW5kZXggLSAxIDogMF0ueSxcbiAgICApO1xuICAgIGNvbnN0IGRpZmZIID0gTWF0aC5hYnModGhpcy5jb250ZXh0LnkoMCkgLSB0aGlzLmNvbnRleHQueSh5KSk7XG4gICAgY29uc3QgcmVzID0gaW5kZXggPT09IDAgPyBwcmV2aW91cyA6IHRoaXMucHJlVmFsdWUgLSBkaWZmSDtcbiAgICB0aGlzLnByZVZhbHVlID0gcmVzO1xuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgZ2V0U3RhY2tlZFJlY3RZID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBpZiAoIXRoaXMuaXNTdGFja2VkKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLmNvbnRleHQueShcbiAgICAgIHRoaXMuYmFyRGF0YVtpbmRleCAtIDEgPiAwID8gaW5kZXggLSAxIDogMF0ueSxcbiAgICApO1xuICAgIGNvbnN0IGRpZmZIID0gTWF0aC5hYnModGhpcy5jb250ZXh0LnkoMCkgLSBwcmV2aW91cyk7XG4gICAgY29uc3QgcmVzID1cbiAgICAgIGluZGV4ID09PSAwID8gMCA6IGluZGV4ID09PSAxID8gcHJldmlvdXMgOiB0aGlzLnByZVZhbHVlICsgZGlmZkg7XG4gICAgdGhpcy5wcmVWYWx1ZSA9IHJlcztcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIGhhbmRsZVZpc2liaWxpdHkgPSAobmFtZTogc3RyaW5nKSA9PlxuICAgIHRoaXMuY29udGV4dC5kaXNhYmxlZExlZ2VuZC5oYXMobmFtZSkgPyAnaGlkZGVuJyA6ICcnO1xuXG4gIGhhbmRsZU9wYWNpdHkgPSAobmFtZTogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSwgYWN0aXZhdGVMZWdlbmQ6IHN0cmluZykgPT5cbiAgICBhY3RpdmF0ZUxlZ2VuZCA/IChhY3RpdmF0ZUxlZ2VuZCA9PT0gbmFtZSA/IDEgOiAwLjIpIDogMTtcbn1cbiIsIjxzdmc6Zz5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiXG4gICAgICBjb250ZXh0LmJhck9wdGlvbnMub3JpZW50YXRpb24gPT09IG9yaWVudGF0aW9uLlZFUlRJQ0FMO1xuICAgICAgZWxzZSBlbHNlVGVtcGxhdGVcbiAgICBcIlxuICA+XG4gICAgPHJlY3RcbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGJhckRhdGEkIHwgYXN5bmM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgY2xhc3M9XCJyZWN0XCJcbiAgICAgIFthdHRyLndpZHRoXT1cImlubmVyQmFuZFdpZHRoXCJcbiAgICAgIFthdHRyLnhdPVwiKGl0ZW0ueCB8IHB1cmU6IGdldFJlY3RYKSB8fCAwXCJcbiAgICAgIFthdHRyLnldPVwiKGkgfCBwdXJlOiBnZXRSZWN0WTppdGVtLnkpIHx8IDBcIlxuICAgICAgW2F0dHIuaGVpZ2h0XT1cIlxuICAgICAgICBpdGVtLnkgPyAoMCB8IHB1cmU6IGNvbnRleHQueSkgLSAoaXRlbS55IHwgcHVyZTogY29udGV4dC55KSA6IDBcbiAgICAgIFwiXG4gICAgICBbYXR0ci5maWxsXT1cIml0ZW0uY29sb3JcIlxuICAgICAgW2F0dHIub3BhY2l0eV09XCJpdGVtLnggfCBwdXJlOiBoYW5kbGVPcGFjaXR5OmFjdGl2YXRlTGVnZW5kXCJcbiAgICA+PC9yZWN0PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLXRlbXBsYXRlICNlbHNlVGVtcGxhdGU+XG4gICAgPHJlY3RcbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGJhckRhdGEkIHwgYXN5bmM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgY2xhc3M9XCJyZWN0XCJcbiAgICAgIFthdHRyLmhlaWdodF09XCJpbm5lckJhbmRXaWR0aFwiXG4gICAgICBbYXR0ci55XT1cIihpdGVtLnggfCBwdXJlOiBnZXRSZWN0WCkgfHwgMFwiXG4gICAgICBbYXR0ci54XT1cIihpIHwgcHVyZTogZ2V0U3RhY2tlZFJlY3RZKSB8fCAwXCJcbiAgICAgIFthdHRyLndpZHRoXT1cIml0ZW0ueSA/IChpdGVtLnkgfCBwdXJlOiBjb250ZXh0LnkpIDogMFwiXG4gICAgICBbYXR0ci5maWxsXT1cIml0ZW0uY29sb3JcIlxuICAgICAgW2F0dHIub3BhY2l0eV09XCJpdGVtLnggfCBwdXJlOiBoYW5kbGVPcGFjaXR5OmFjdGl2YXRlTGVnZW5kXCJcbiAgICA+PC9yZWN0PlxuICA8L25nLXRlbXBsYXRlPlxuPC9zdmc6Zz5cbiJdfQ==