@bizdoc/core 1.11.0-next.5 → 1.11.0-next.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/app.component.mjs +11 -4
- package/esm2020/lib/compose/form.component.mjs +19 -21
- package/esm2020/lib/compose/trace/trace.component.mjs +2 -2
- package/esm2020/lib/compose/trace/trace.pane.component.mjs +2 -2
- package/esm2020/lib/core/component-factory-resolver.mjs +9 -2
- package/esm2020/lib/core/controls/combination-picker-body.mjs +1 -1
- package/esm2020/lib/core/controls/file.input.mjs +44 -15
- package/esm2020/lib/core/functions.mjs +1 -1
- package/esm2020/lib/core/info/attachment-info.service.mjs +2 -2
- package/esm2020/lib/core/mailbox.service.mjs +4 -4
- package/esm2020/lib/core/tagging/edit-input.component.mjs +3 -3
- package/esm2020/lib/cube/cube-info.service.mjs +3 -3
- package/esm2020/lib/cube/cube.service.mjs +5 -2
- package/esm2020/lib/cube/grid/spreadsheet.component.mjs +3 -2
- package/esm2020/lib/cube/matrix/matrix.base.mjs +1 -1
- package/esm2020/lib/cube/matrix/matrix.mobile.component.mjs +4 -4
- package/esm2020/lib/cube/matrix/matrix.pane.component.mjs +5 -4
- package/esm2020/lib/cube/matrix/popup.component.mjs +6 -5
- package/esm2020/lib/cube/matrix/table.component.mjs +64 -11
- package/esm2020/lib/cube/pivot/pivot.component.mjs +15 -1
- package/esm2020/lib/dashboard/score/activity.widget.mjs +2 -5
- package/esm2020/lib/views/cube/matrix.component.mjs +19 -20
- package/fesm2015/bizdoc-core.mjs +194 -88
- package/fesm2015/bizdoc-core.mjs.map +1 -1
- package/fesm2020/bizdoc-core.mjs +194 -88
- package/fesm2020/bizdoc-core.mjs.map +1 -1
- package/lib/app.component.d.ts +3 -1
- package/lib/core/controls/combination-picker-body.d.ts +2 -0
- package/lib/core/controls/file.input.d.ts +1 -0
- package/lib/core/functions.d.ts +3 -1
- package/lib/core/mailbox.service.d.ts +5 -1
- package/lib/cube/cube-info.service.d.ts +2 -2
- package/lib/cube/cube.service.d.ts +1 -3
- package/lib/cube/matrix/matrix.base.d.ts +2 -1
- package/lib/cube/matrix/table.component.d.ts +7 -3
- package/lib/cube/pivot/pivot.component.d.ts +3 -0
- package/lib/views/cube/matrix.component.d.ts +1 -3
- package/package.json +1 -1
@@ -43,7 +43,8 @@ export class CubeMatrixPaneComponent extends CubeMatrixBase {
|
|
43
43
|
this.aggregation = d['aggregate'];
|
44
44
|
this.sum = d['sum'];
|
45
45
|
this.selection = d['filters'];
|
46
|
-
this.
|
46
|
+
this.xAxisTotalLabel = d['xAxisTotalLabel'];
|
47
|
+
this.seriesTotalLabel = d['seriesTotalLabel'];
|
47
48
|
});
|
48
49
|
this._pane.queryParamsChange.subscribe(p => this.originalAxes = this.axes = p);
|
49
50
|
}
|
@@ -60,11 +61,11 @@ export class CubeMatrixPaneComponent extends CubeMatrixBase {
|
|
60
61
|
}
|
61
62
|
}
|
62
63
|
CubeMatrixPaneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: CubeMatrixPaneComponent, deps: [{ token: i1.PaneRef }, { token: i2.PanesRouter }, { token: i3.TranslateService }, { token: i4.CubeService }, { token: i5.DatasourceService }, { token: i6.SessionService }], target: i0.ɵɵFactoryTarget.Component });
|
63
|
-
CubeMatrixPaneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: CubeMatrixPaneComponent, selector: "ng-component", host: { classAttribute: "pane" }, usesInheritance: true, ngImport: i0, template: "<mat-toolbar class=\"nav-toolbar\">\r\n <button mat-icon-button (click)=\"table.refresh()\" [bizdocTooltip]=\"'Refresh' | translate\"><mat-icon matAnimate=\"rotate\">autorenew</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"patterns && patterns.length\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #options xPosition=\"before\">\r\n <!-- patterns -->\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"aggregate(p)\">{{p.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"reset()\" [disabled]=\"!pattern\" [bizdocTooltip]=\"'Clear' | translate\">\r\n <mat-icon>clear_all</mat-icon>\r\n </button>\r\n <!-- filters -->\r\n <ng-container *ngFor=\"let f of filters\">\r\n <button mat-button [matMenuTriggerFor]=\"fmenu\">{{values[f.name]| typeValue : f.dataType | async}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #fmenu xPosition=\"before\">\r\n <button mat-menu-item *ngFor=\"let kv of sources[f.name] | async\"\r\n (click)=\"filter(f.name, kv.key, kv.value)\">\r\n {{kv.value}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n</mat-toolbar>\r\n<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<bizdoc-cube-matrix [cube]=\"cube\" [xAxis]=\"xAxis\" [series]=\"series\" [indices]=\"indices\" [sum]=sum\r\n [filters]=\"axes\" [
|
64
|
+
CubeMatrixPaneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: CubeMatrixPaneComponent, selector: "ng-component", host: { classAttribute: "pane" }, usesInheritance: true, ngImport: i0, template: "<mat-toolbar class=\"nav-toolbar\">\r\n <button mat-icon-button (click)=\"table.refresh()\" [bizdocTooltip]=\"'Refresh' | translate\"><mat-icon matAnimate=\"rotate\">autorenew</mat-icon></button>\r\n <button mat-icon-button [bizdocTooltip]=\"'Download' | translate\"\r\n data-help=\"download\" (click)=\"matrix.export()\">\r\n <mat-icon>save_alt</mat-icon>\r\n </button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"patterns && patterns.length\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #options xPosition=\"before\">\r\n <!-- patterns -->\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"aggregate(p)\">{{p.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"reset()\" [disabled]=\"!pattern\" [bizdocTooltip]=\"'Clear' | translate\">\r\n <mat-icon>clear_all</mat-icon>\r\n </button>\r\n <!-- filters -->\r\n <ng-container *ngFor=\"let f of filters\">\r\n <button mat-button [matMenuTriggerFor]=\"fmenu\">{{values[f.name]| typeValue : f.dataType | async}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #fmenu xPosition=\"before\">\r\n <button mat-menu-item *ngFor=\"let kv of sources[f.name] | async\"\r\n (click)=\"filter(f.name, kv.key, kv.value)\">\r\n {{kv.value}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n</mat-toolbar>\r\n<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<bizdoc-cube-matrix [cube]=\"cube\" [xAxis]=\"xAxis\" [series]=\"series\" [indices]=\"indices\" [sum]=sum\r\n [filters]=\"axes\" #matrix\r\n [xAxisTotalLabel]=\"xAxisTotalLabel\"\r\n [seriesTotalLabel]=\"seriesTotalLabel\"\r\n (loadingChange)=\"loading = $event\" (explore)='explore($event)'></bizdoc-cube-matrix>\r\n", styles: [":host{min-width:450px}:host ::ng-deep .cube-table thead{position:sticky;top:0}\n"], components: [{ type: i7.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i8.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i10.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i10.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i11.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i12.CubeMatrixComponent, selector: "bizdoc-cube-matrix", inputs: ["seriesTotalLabel", "xAxisTotalLabel", "cube", "xAxis", "series", "indices", "scope", "sum", "filters", "loading", "interactive"], outputs: ["explore", "loadingChange"] }], directives: [{ type: i13.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: i14.MatIconAnimate, selector: "[matAnimate]" }, { type: i15.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i15.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "translate": i16.TranslatePipe, "async": i15.AsyncPipe, "typeValue": i17.TypeValuePipe } });
|
64
65
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: CubeMatrixPaneComponent, decorators: [{
|
65
66
|
type: Component,
|
66
67
|
args: [{ host: {
|
67
68
|
class: 'pane'
|
68
|
-
}, template: "<mat-toolbar class=\"nav-toolbar\">\r\n <button mat-icon-button (click)=\"table.refresh()\" [bizdocTooltip]=\"'Refresh' | translate\"><mat-icon matAnimate=\"rotate\">autorenew</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"patterns && patterns.length\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #options xPosition=\"before\">\r\n <!-- patterns -->\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"aggregate(p)\">{{p.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"reset()\" [disabled]=\"!pattern\" [bizdocTooltip]=\"'Clear' | translate\">\r\n <mat-icon>clear_all</mat-icon>\r\n </button>\r\n <!-- filters -->\r\n <ng-container *ngFor=\"let f of filters\">\r\n <button mat-button [matMenuTriggerFor]=\"fmenu\">{{values[f.name]| typeValue : f.dataType | async}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #fmenu xPosition=\"before\">\r\n <button mat-menu-item *ngFor=\"let kv of sources[f.name] | async\"\r\n (click)=\"filter(f.name, kv.key, kv.value)\">\r\n {{kv.value}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n</mat-toolbar>\r\n<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<bizdoc-cube-matrix [cube]=\"cube\" [xAxis]=\"xAxis\" [series]=\"series\" [indices]=\"indices\" [sum]=sum\r\n [filters]=\"axes\" [
|
69
|
+
}, template: "<mat-toolbar class=\"nav-toolbar\">\r\n <button mat-icon-button (click)=\"table.refresh()\" [bizdocTooltip]=\"'Refresh' | translate\"><mat-icon matAnimate=\"rotate\">autorenew</mat-icon></button>\r\n <button mat-icon-button [bizdocTooltip]=\"'Download' | translate\"\r\n data-help=\"download\" (click)=\"matrix.export()\">\r\n <mat-icon>save_alt</mat-icon>\r\n </button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"patterns && patterns.length\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #options xPosition=\"before\">\r\n <!-- patterns -->\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"aggregate(p)\">{{p.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"reset()\" [disabled]=\"!pattern\" [bizdocTooltip]=\"'Clear' | translate\">\r\n <mat-icon>clear_all</mat-icon>\r\n </button>\r\n <!-- filters -->\r\n <ng-container *ngFor=\"let f of filters\">\r\n <button mat-button [matMenuTriggerFor]=\"fmenu\">{{values[f.name]| typeValue : f.dataType | async}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #fmenu xPosition=\"before\">\r\n <button mat-menu-item *ngFor=\"let kv of sources[f.name] | async\"\r\n (click)=\"filter(f.name, kv.key, kv.value)\">\r\n {{kv.value}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n</mat-toolbar>\r\n<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<bizdoc-cube-matrix [cube]=\"cube\" [xAxis]=\"xAxis\" [series]=\"series\" [indices]=\"indices\" [sum]=sum\r\n [filters]=\"axes\" #matrix\r\n [xAxisTotalLabel]=\"xAxisTotalLabel\"\r\n [seriesTotalLabel]=\"seriesTotalLabel\"\r\n (loadingChange)=\"loading = $event\" (explore)='explore($event)'></bizdoc-cube-matrix>\r\n", styles: [":host{min-width:450px}:host ::ng-deep .cube-table thead{position:sticky;top:0}\n"] }]
|
69
70
|
}], ctorParameters: function () { return [{ type: i1.PaneRef }, { type: i2.PanesRouter }, { type: i3.TranslateService }, { type: i4.CubeService }, { type: i5.DatasourceService }, { type: i6.SessionService }]; } });
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0cml4LnBhbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jdWJlL21hdHJpeC9tYXRyaXgucGFuZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2N1YmUvbWF0cml4L21hdHJpeC5wYW5lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFPbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVdEQsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGNBQWM7SUFDekQscUJBQXFCO0lBQ3JCLFlBQ1UsS0FBdUMsRUFDdkMsT0FBb0IsRUFDcEIsVUFBNEIsRUFDcEMsT0FBb0IsRUFDcEIsRUFBcUIsRUFDckIsT0FBdUI7UUFDdkIsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFOcEIsVUFBSyxHQUFMLEtBQUssQ0FBa0M7UUFDdkMsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQUNwQixlQUFVLEdBQVYsVUFBVSxDQUFrQjtJQUt0QyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztZQUM1QyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSTtnQkFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDNUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUIsTUFBTTtZQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDekMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FDbEMsQ0FBQztJQUNKLENBQUM7SUFDRCxRQUFRLENBQUMsV0FBb0I7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFO1lBQ3hCLFdBQVcsRUFBRSxNQUFNLEVBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2YsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU87U0FDeEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sQ0FBQyxXQUFvQjtRQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQ3BELFdBQVc7U0FDWixDQUFDLENBQUM7SUFFTCxDQUFDOztvSEEvQ1UsdUJBQXVCO3dHQUF2Qix1QkFBdUIsNkdDbEJwQyxvN0RBZ0NBOzJGRGRhLHVCQUF1QjtrQkFQbkMsU0FBUzsyQkFHRjt3QkFDSixLQUFLLEVBQUUsTUFBTTtxQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRhc291cmNlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvZGF0YXNvdXJjZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3ViZVNlcnZpY2UgfSBmcm9tICcuLi9jdWJlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYW5lc1JvdXRlciB9IGZyb20gJy4uLy4uL2NvcmUvc2xvdHMvcm91dGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYW5lUmVmIH0gZnJvbSAnLi4vLi4vY29yZS9zbG90cy9wYW5lLXJlZic7XHJcbmltcG9ydCB7IEF4ZXNNYXAgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscyc7XHJcbmltcG9ydCB7IEN1YmVNYXRyaXhCYXNlIH0gZnJvbSAnLi9tYXRyaXguYmFzZSc7XHJcbmltcG9ydCB7IE9wZW5Qb2xpY3kgfSBmcm9tICcuLi8uLi9jb3JlL2NvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS90cmFuc2xhdGUuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZVVybDogJy4vbWF0cml4LnBhbmUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21hdHJpeC5wYW5lLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgaG9zdDoge1xyXG4gICAgY2xhc3M6ICdwYW5lJ1xyXG4gIH1cclxufSlcclxuZXhwb3J0IGNsYXNzIEN1YmVNYXRyaXhQYW5lQ29tcG9uZW50IGV4dGVuZHMgQ3ViZU1hdHJpeEJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8qKiBjdWJlLWluZm8gY3RvciAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfcGFuZTogUGFuZVJlZjxDdWJlTWF0cml4UGFuZUNvbXBvbmVudD4sXHJcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFBhbmVzUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgc2VydmljZTogQ3ViZVNlcnZpY2UsXHJcbiAgICBkczogRGF0YXNvdXJjZVNlcnZpY2UsXHJcbiAgICBzZXNzaW9uOiBTZXNzaW9uU2VydmljZSkge1xyXG4gICAgc3VwZXIoc2VydmljZSwgZHMsIHNlc3Npb24pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wYW5lLnBhcmFtc0NoYW5nZS5zdWJzY3JpYmUocCA9PiB7XHJcbiAgICAgIHRoaXMuY3ViZSA9IHBbJ2N1YmUnXTtcclxuICAgICAgdGhpcy5fcGFuZS50aXRsZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ01hdHJpeCcpO1xyXG4gICAgICB0aGlzLl9wYW5lLmdyb3VwID0gdGhpcy5jb25maWd1cmF0aW9uLnRpdGxlO1xyXG4gICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmljb24pXHJcbiAgICAgICAgdGhpcy5fcGFuZS5pY29uID0gdGhpcy5jb25maWd1cmF0aW9uLmljb247XHJcbiAgICAgIHRoaXMueEF4aXMgPSBwWyd4QXhpcyddO1xyXG4gICAgICB0aGlzLnNlcmllcyA9IHBbJ3NlcmllcyddO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9wYW5lLmRhdGFDaGFuZ2Uuc3Vic2NyaWJlKGQgPT4ge1xyXG4gICAgICB0aGlzLmluZGljZXMgPSBkWydpbmRpY2VzJ107XHJcbiAgICAgIC8qKiAqL1xyXG4gICAgICB0aGlzLmFnZ3JlZ2F0aW9uID0gZFsnYWdncmVnYXRlJ107XHJcbiAgICAgIHRoaXMuc3VtID0gZFsnc3VtJ107XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uID0gZFsnZmlsdGVycyddO1xyXG4gICAgICB0aGlzLnhBeGlzVG90YWxMYWJlbCA9IGRbJ3hBeGlzVG90YWxMYWJlbCddO1xyXG4gICAgICB0aGlzLnNlcmllc1RvdGFsTGFiZWwgPSBkWydzZXJpZXNUb3RhbExhYmVsJ107XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3BhbmUucXVlcnlQYXJhbXNDaGFuZ2Uuc3Vic2NyaWJlKHAgPT5cclxuICAgICAgdGhpcy5vcmlnaW5hbEF4ZXMgPSB0aGlzLmF4ZXMgPSBwXHJcbiAgICApO1xyXG4gIH1cclxuICBvbkZpbHRlcihxdWVyeVBhcmFtczogQXhlc01hcCkge1xyXG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zLCBwb2xpY3k6XHJcbiAgICAgICAgdGhpcy5fcGFuZS5tb2RlID9cclxuICAgICAgICAgIE9wZW5Qb2xpY3kuVGFiIDogT3BlblBvbGljeS5SZXBsYWNlXHJcbiAgICB9KTtcclxuICB9XHJcbiAgZXhwbG9yZShxdWVyeVBhcmFtczogQXhlc01hcCkge1xyXG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFsnY3ViZScsIHRoaXMuY3ViZSwgJ2V4cGxvcmUnXSwge1xyXG4gICAgICBxdWVyeVBhcmFtc1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxufVxyXG4iLCI8bWF0LXRvb2xiYXIgY2xhc3M9XCJuYXYtdG9vbGJhclwiPlxyXG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJ0YWJsZS5yZWZyZXNoKClcIiBbYml6ZG9jVG9vbHRpcF09XCInUmVmcmVzaCcgfCB0cmFuc2xhdGVcIj48bWF0LWljb24gbWF0QW5pbWF0ZT1cInJvdGF0ZVwiPmF1dG9yZW5ldzwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW2JpemRvY1Rvb2x0aXBdPVwiJ0Rvd25sb2FkJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICBkYXRhLWhlbHA9XCJkb3dubG9hZFwiIChjbGljayk9XCJtYXRyaXguZXhwb3J0KClcIj5cclxuICAgIDxtYXQtaWNvbj5zYXZlX2FsdDwvbWF0LWljb24+XHJcbiAgPC9idXR0b24+XHJcbiAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJvcHRpb25zXCIgKm5nSWY9XCJwYXR0ZXJucyAmJiBwYXR0ZXJucy5sZW5ndGhcIj48bWF0LWljb24gW2NsYXNzLmZpbGxlZF09XCJwYXR0ZXJuXCI+ZmlsdGVyX2FsdDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgPG1hdC1tZW51ICNvcHRpb25zIHhQb3NpdGlvbj1cImJlZm9yZVwiPlxyXG4gICAgPCEtLSBwYXR0ZXJucyAtLT5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdGb3I9XCJsZXQgcCBvZiBwYXR0ZXJuc1wiIChjbGljayk9XCJhZ2dyZWdhdGUocClcIj57e3AudGl0bGV9fTwvYnV0dG9uPlxyXG4gIDwvbWF0LW1lbnU+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInJlc2V0KClcIiBbZGlzYWJsZWRdPVwiIXBhdHRlcm5cIiBbYml6ZG9jVG9vbHRpcF09XCInQ2xlYXInIHwgdHJhbnNsYXRlXCI+XHJcbiAgICA8bWF0LWljb24+Y2xlYXJfYWxsPC9tYXQtaWNvbj5cclxuICA8L2J1dHRvbj5cclxuICA8IS0tIGZpbHRlcnMgLS0+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZiBvZiBmaWx0ZXJzXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImZtZW51XCI+e3t2YWx1ZXNbZi5uYW1lXXwgdHlwZVZhbHVlIDogZi5kYXRhVHlwZSB8IGFzeW5jfX0gPG1hdC1pY29uPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICA8bWF0LW1lbnUgI2ZtZW51IHhQb3NpdGlvbj1cImJlZm9yZVwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nRm9yPVwibGV0IGt2IG9mIHNvdXJjZXNbZi5uYW1lXSB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyKGYubmFtZSwga3Yua2V5LCBrdi52YWx1ZSlcIj5cclxuICAgICAgICB7e2t2LnZhbHVlfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1tZW51PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L21hdC10b29sYmFyPlxyXG48bWF0LXByb2dyZXNzLWJhciBtb2RlPVwicXVlcnlcIiBbc3R5bGUudmlzaWJpbGl0eV09XCJsb2FkaW5nID8gJ3Zpc2libGUnOidoaWRkZW4nXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxyXG48Yml6ZG9jLWN1YmUtbWF0cml4IFtjdWJlXT1cImN1YmVcIiBbeEF4aXNdPVwieEF4aXNcIiBbc2VyaWVzXT1cInNlcmllc1wiIFtpbmRpY2VzXT1cImluZGljZXNcIiBbc3VtXT1zdW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcnNdPVwiYXhlc1wiICNtYXRyaXhcclxuICAgICAgICAgICAgICAgICAgICBbeEF4aXNUb3RhbExhYmVsXT1cInhBeGlzVG90YWxMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Nlcmllc1RvdGFsTGFiZWxdPVwic2VyaWVzVG90YWxMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChsb2FkaW5nQ2hhbmdlKT1cImxvYWRpbmcgPSAkZXZlbnRcIiAoZXhwbG9yZSk9J2V4cGxvcmUoJGV2ZW50KSc+PC9iaXpkb2MtY3ViZS1tYXRyaXg+XHJcbiJdfQ==
|
@@ -30,7 +30,7 @@ export class CubeMatrixPopupComponent extends CubeMatrixBase {
|
|
30
30
|
this.preloading = true;
|
31
31
|
if (!data.options)
|
32
32
|
throw 'no data options';
|
33
|
-
const { axes: base, options: {
|
33
|
+
const { axes: base, options: { seriesTotalLabel, indices, xAxis, series, filters, cube, sum } } = data;
|
34
34
|
this.cube = cube;
|
35
35
|
this.series = series;
|
36
36
|
this.xAxis = xAxis;
|
@@ -38,7 +38,8 @@ export class CubeMatrixPopupComponent extends CubeMatrixBase {
|
|
38
38
|
this.indices = indices;
|
39
39
|
this.selection = filters;
|
40
40
|
this.axes = base;
|
41
|
-
this.
|
41
|
+
this.xAxisTotalLabel = seriesTotalLabel;
|
42
|
+
this.seriesTotalLabel = seriesTotalLabel;
|
42
43
|
this.originalAxes = base;
|
43
44
|
}
|
44
45
|
ngOnInit() {
|
@@ -50,10 +51,10 @@ export class CubeMatrixPopupComponent extends CubeMatrixBase {
|
|
50
51
|
}
|
51
52
|
}
|
52
53
|
CubeMatrixPopupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: CubeMatrixPopupComponent, deps: [{ token: PopupRef }, { token: POPUP_DATA }, { token: i1.CubeService }, { token: i2.DatasourceService }, { token: i3.SessionService }, { token: i4.PromptService }], target: i0.ɵɵFactoryTarget.Component });
|
53
|
-
CubeMatrixPopupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: CubeMatrixPopupComponent, selector: "ng-component", viewQueries: [{ propertyName: "table", first: true, predicate: CubeMatrixComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<div class=\"container\">\r\n <div class=\"row\" *ngIf=\"!preloading\">\r\n <span class=\"divider\"></span>\r\n <!-- title -->\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"patterns && patterns.length\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #options xPosition=\"before\">\r\n <!-- patterns -->\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"aggregate(p)\">{{p.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"reset()\" [disabled]=\"!pattern\" [bizdocTooltip]=\"'Clear' | translate\">\r\n <mat-icon>clear_all</mat-icon>\r\n </button>\r\n <!-- filters -->\r\n <ng-container *ngFor=\"let f of filters\">\r\n <button mat-button [matMenuTriggerFor]=\"fmenu\">{{values[f.name]| typeValue : f.dataType | async}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #fmenu xPosition=\"before\">\r\n <button mat-menu-item *ngFor=\"let kv of sources[f.name] | async\"\r\n (click)=\"filter(f.name, kv.key, kv.value)\">\r\n {{kv.value}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n <bizdoc-cube-matrix [cube]=\"cube\" [xAxis]=\"xAxis\" [series]=\"series\" [indices]=\"indices\"\r\n [sum]=sum [interactive]=\"false\"\r\n [
|
54
|
+
CubeMatrixPopupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: CubeMatrixPopupComponent, selector: "ng-component", viewQueries: [{ propertyName: "table", first: true, predicate: CubeMatrixComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<div class=\"container\">\r\n <div class=\"row\" *ngIf=\"!preloading\">\r\n <span class=\"divider\"></span>\r\n <!-- title -->\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"patterns && patterns.length\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #options xPosition=\"before\">\r\n <!-- patterns -->\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"aggregate(p)\">{{p.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"reset()\" [disabled]=\"!pattern\" [bizdocTooltip]=\"'Clear' | translate\">\r\n <mat-icon>clear_all</mat-icon>\r\n </button>\r\n <!-- filters -->\r\n <ng-container *ngFor=\"let f of filters\">\r\n <button mat-button [matMenuTriggerFor]=\"fmenu\">{{values[f.name]| typeValue : f.dataType | async}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #fmenu xPosition=\"before\">\r\n <button mat-menu-item *ngFor=\"let kv of sources[f.name] | async\"\r\n (click)=\"filter(f.name, kv.key, kv.value)\">\r\n {{kv.value}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n <bizdoc-cube-matrix [cube]=\"cube\" [xAxis]=\"xAxis\" [series]=\"series\" [indices]=\"indices\"\r\n [sum]=sum [interactive]=\"false\"\r\n [xAxisTotalLabel]=\"xAxisTotalLabel\"\r\n [seriesTotalLabel]=\"seriesTotalLabel\"\r\n [filters]=\"axes\" (loadingChange)=\"loading=$event\"></bizdoc-cube-matrix>\r\n</div>\r\n", styles: [".container{padding:8px}::ng-deep .cube-table{width:100%;display:inline-table}\n"], components: [{ type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i9.CubeMatrixComponent, selector: "bizdoc-cube-matrix", inputs: ["seriesTotalLabel", "xAxisTotalLabel", "cube", "xAxis", "series", "indices", "scope", "sum", "filters", "loading", "interactive"], outputs: ["explore", "loadingChange"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }], pipes: { "translate": i12.TranslatePipe, "async": i10.AsyncPipe, "typeValue": i13.TypeValuePipe } });
|
54
55
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: CubeMatrixPopupComponent, decorators: [{
|
55
56
|
type: Component,
|
56
|
-
args: [{ template: "<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<div class=\"container\">\r\n <div class=\"row\" *ngIf=\"!preloading\">\r\n <span class=\"divider\"></span>\r\n <!-- title -->\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"patterns && patterns.length\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #options xPosition=\"before\">\r\n <!-- patterns -->\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"aggregate(p)\">{{p.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"reset()\" [disabled]=\"!pattern\" [bizdocTooltip]=\"'Clear' | translate\">\r\n <mat-icon>clear_all</mat-icon>\r\n </button>\r\n <!-- filters -->\r\n <ng-container *ngFor=\"let f of filters\">\r\n <button mat-button [matMenuTriggerFor]=\"fmenu\">{{values[f.name]| typeValue : f.dataType | async}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #fmenu xPosition=\"before\">\r\n <button mat-menu-item *ngFor=\"let kv of sources[f.name] | async\"\r\n (click)=\"filter(f.name, kv.key, kv.value)\">\r\n {{kv.value}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n <bizdoc-cube-matrix [cube]=\"cube\" [xAxis]=\"xAxis\" [series]=\"series\" [indices]=\"indices\"\r\n [sum]=sum [interactive]=\"false\"\r\n [
|
57
|
+
args: [{ template: "<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<div class=\"container\">\r\n <div class=\"row\" *ngIf=\"!preloading\">\r\n <span class=\"divider\"></span>\r\n <!-- title -->\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"patterns && patterns.length\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #options xPosition=\"before\">\r\n <!-- patterns -->\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"aggregate(p)\">{{p.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"reset()\" [disabled]=\"!pattern\" [bizdocTooltip]=\"'Clear' | translate\">\r\n <mat-icon>clear_all</mat-icon>\r\n </button>\r\n <!-- filters -->\r\n <ng-container *ngFor=\"let f of filters\">\r\n <button mat-button [matMenuTriggerFor]=\"fmenu\">{{values[f.name]| typeValue : f.dataType | async}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #fmenu xPosition=\"before\">\r\n <button mat-menu-item *ngFor=\"let kv of sources[f.name] | async\"\r\n (click)=\"filter(f.name, kv.key, kv.value)\">\r\n {{kv.value}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n <bizdoc-cube-matrix [cube]=\"cube\" [xAxis]=\"xAxis\" [series]=\"series\" [indices]=\"indices\"\r\n [sum]=sum [interactive]=\"false\"\r\n [xAxisTotalLabel]=\"xAxisTotalLabel\"\r\n [seriesTotalLabel]=\"seriesTotalLabel\"\r\n [filters]=\"axes\" (loadingChange)=\"loading=$event\"></bizdoc-cube-matrix>\r\n</div>\r\n", styles: [".container{padding:8px}::ng-deep .cube-table{width:100%;display:inline-table}\n"] }]
|
57
58
|
}], ctorParameters: function () { return [{ type: i14.PopupRef, decorators: [{
|
58
59
|
type: Inject,
|
59
60
|
args: [PopupRef]
|
@@ -64,4 +65,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
64
65
|
type: ViewChild,
|
65
66
|
args: [CubeMatrixComponent, { static: true }]
|
66
67
|
}] } });
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jdWJlL21hdHJpeC9wb3B1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2N1YmUvbWF0cml4L3BvcHVwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU1yQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFL0MsMkJBQTJCO0FBSzNCLE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxjQUFjO0lBRzFELGNBQWM7SUFFZCxxQkFBcUI7SUFDckIsWUFDNEIsSUFBYyxFQUNwQixJQUFjLEVBQ2xDLE9BQW9CLEVBQ3BCLEVBQXFCLEVBQ3JCLE9BQXVCLEVBQ2YsR0FBa0I7UUFDMUIsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFORixTQUFJLEdBQUosSUFBSSxDQUFVO1FBS2hDLFFBQUcsR0FBSCxHQUFHLENBQWU7UUFWNUIsZUFBVSxHQUFZLElBQUksQ0FBQztRQVl6QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFDZixNQUFNLGlCQUFpQixDQUFDO1FBQzFCLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDdkcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsZUFBZSxHQUFHLGdCQUFnQixDQUFDO1FBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUN6QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztJQUMzQixDQUFDO0lBQ0QsUUFBUTtRQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUN2RSxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssRUFBRSxDQUFDLENBQW9CLEVBQUUsRUFBRTtZQUNoRCxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssR0FBRztnQkFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O3FIQW5DVSx3QkFBd0Isa0JBT3pCLFFBQVEsYUFDUixVQUFVO3lHQVJULHdCQUF3QiwyRkFDeEIsbUJBQW1CLHFGQ25CaEMsbXJEQThCQTsyRkRaYSx3QkFBd0I7a0JBSnBDLFNBQVM7OzswQkFXTCxNQUFNOzJCQUFDLFFBQVE7OzBCQUNmLE1BQU07MkJBQUMsVUFBVTsrSkFQOEIsS0FBSztzQkFBdEQsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5qZWN0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IGZpbHRlciwgZmlyc3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ3ViZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jdWJlL2N1YmUuc2VydmljZSc7XHJcbmltcG9ydCB7IEN1YmVEYXRhIH0gZnJvbSAnLi4vY3ViZS1pbmZvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YXNvdXJjZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2RhdGFzb3VyY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFByb21wdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3Byb21wdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3ViZU1hdHJpeENvbXBvbmVudCB9IGZyb20gJy4vdGFibGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUE9QVVBfREFUQSB9IGZyb20gJy4uLy4uL2NvcmUvcG9wdXAvcG9wdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUG9wdXBSZWYgfSBmcm9tIFwiLi4vLi4vY29yZS9wb3B1cC9wb3B1cC1yZWZcIjtcclxuaW1wb3J0IHsgQ3ViZU1hdHJpeEJhc2UgfSBmcm9tICcuL21hdHJpeC5iYXNlJztcclxuXHJcbi8qKiBjdWJlIG1hdHJpeCBjb21wb25lbnQqL1xyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZVVybDogJy4vcG9wdXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3BvcHVwLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEN1YmVNYXRyaXhQb3B1cENvbXBvbmVudCBleHRlbmRzIEN1YmVNYXRyaXhCYXNlIGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKEN1YmVNYXRyaXhDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIHRhYmxlOiBDdWJlTWF0cml4Q29tcG9uZW50O1xyXG4gIHByZWxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIC8qKiBmaWx0ZXJzICovXHJcblxyXG4gIC8qKiBjdWJlLWluZm8gY3RvciAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChQb3B1cFJlZikgcHJpdmF0ZSBfcmVmOiBQb3B1cFJlZixcclxuICAgIEBJbmplY3QoUE9QVVBfREFUQSkgZGF0YTogQ3ViZURhdGEsXHJcbiAgICBzZXJ2aWNlOiBDdWJlU2VydmljZSxcclxuICAgIGRzOiBEYXRhc291cmNlU2VydmljZSxcclxuICAgIHNlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2I6IFByb21wdFNlcnZpY2UpIHtcclxuICAgIHN1cGVyKHNlcnZpY2UsIGRzLCBzZXNzaW9uKTtcclxuICAgIGlmICghZGF0YS5vcHRpb25zKVxyXG4gICAgICB0aHJvdyAnbm8gZGF0YSBvcHRpb25zJztcclxuICAgIGNvbnN0IHsgYXhlczogYmFzZSwgb3B0aW9uczogeyBzZXJpZXNUb3RhbExhYmVsLCBpbmRpY2VzLCB4QXhpcywgc2VyaWVzLCBmaWx0ZXJzLCBjdWJlLCBzdW0gfSB9ID0gZGF0YTtcclxuICAgIHRoaXMuY3ViZSA9IGN1YmU7XHJcbiAgICB0aGlzLnNlcmllcyA9IHNlcmllcztcclxuICAgIHRoaXMueEF4aXMgPSB4QXhpcztcclxuICAgIHRoaXMuc3VtID0gc3VtO1xyXG4gICAgdGhpcy5pbmRpY2VzID0gaW5kaWNlcztcclxuICAgIHRoaXMuc2VsZWN0aW9uID0gZmlsdGVycztcclxuICAgIHRoaXMuYXhlcyA9IGJhc2U7XHJcbiAgICB0aGlzLnhBeGlzVG90YWxMYWJlbCA9IHNlcmllc1RvdGFsTGFiZWw7XHJcbiAgICB0aGlzLnNlcmllc1RvdGFsTGFiZWwgPSBzZXJpZXNUb3RhbExhYmVsO1xyXG4gICAgdGhpcy5vcmlnaW5hbEF4ZXMgPSBiYXNlO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudGFibGUubG9hZGluZ0NoYW5nZS5waXBlKGZpbHRlcihvayA9PiAhb2spLCBmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT5cclxuICAgICAgdGhpcy5wcmVsb2FkaW5nID0gZmFsc2UsIChlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmIChlLnN0YXR1cyA9PT0gNDAxKVxyXG4gICAgICAgICAgdGhpcy5fcmVmLmNsb3NlKCk7XHJcbiAgICAgICAgdGhpcy5fc2IuZXJyb3IoZS5zdGF0dXMgPT09IDQwMSA/ICdVbmF1dGhvcml6ZWQnIDogbnVsbCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8bWF0LXByb2dyZXNzLWJhciBtb2RlPVwicXVlcnlcIiBbc3R5bGUudmlzaWJpbGl0eV09XCJsb2FkaW5nID8gJ3Zpc2libGUnOidoaWRkZW4nXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxyXG48ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XHJcbiAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiIXByZWxvYWRpbmdcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDwhLS0gdGl0bGUgLS0+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwib3B0aW9uc1wiICpuZ0lmPVwicGF0dGVybnMgJiYgcGF0dGVybnMubGVuZ3RoXCI+PG1hdC1pY29uIFtjbGFzcy5maWxsZWRdPVwicGF0dGVyblwiPmZpbHRlcl9hbHQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPG1hdC1tZW51ICNvcHRpb25zIHhQb3NpdGlvbj1cImJlZm9yZVwiPlxyXG4gICAgICA8IS0tIHBhdHRlcm5zIC0tPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nRm9yPVwibGV0IHAgb2YgcGF0dGVybnNcIiAoY2xpY2spPVwiYWdncmVnYXRlKHApXCI+e3twLnRpdGxlfX08L2J1dHRvbj5cclxuICAgIDwvbWF0LW1lbnU+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwicmVzZXQoKVwiIFtkaXNhYmxlZF09XCIhcGF0dGVyblwiIFtiaXpkb2NUb29sdGlwXT1cIidDbGVhcicgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgPG1hdC1pY29uPmNsZWFyX2FsbDwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDwhLS0gZmlsdGVycyAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGYgb2YgZmlsdGVyc1wiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImZtZW51XCI+e3t2YWx1ZXNbZi5uYW1lXXwgdHlwZVZhbHVlIDogZi5kYXRhVHlwZSB8IGFzeW5jfX0gPG1hdC1pY29uPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDxtYXQtbWVudSAjZm1lbnUgeFBvc2l0aW9uPVwiYmVmb3JlXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBrdiBvZiBzb3VyY2VzW2YubmFtZV0gfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyKGYubmFtZSwga3Yua2V5LCBrdi52YWx1ZSlcIj5cclxuICAgICAgICAgIHt7a3YudmFsdWV9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1tZW51PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbiAgPGJpemRvYy1jdWJlLW1hdHJpeCBbY3ViZV09XCJjdWJlXCIgW3hBeGlzXT1cInhBeGlzXCIgW3Nlcmllc109XCJzZXJpZXNcIiBbaW5kaWNlc109XCJpbmRpY2VzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzdW1dPXN1bSBbaW50ZXJhY3RpdmVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt4QXhpc1RvdGFsTGFiZWxdPVwieEF4aXNUb3RhbExhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzZXJpZXNUb3RhbExhYmVsXT1cInNlcmllc1RvdGFsTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcnNdPVwiYXhlc1wiIChsb2FkaW5nQ2hhbmdlKT1cImxvYWRpbmc9JGV2ZW50XCI+PC9iaXpkb2MtY3ViZS1tYXRyaXg+XHJcbjwvZGl2PlxyXG4iXX0=
|
@@ -1,25 +1,27 @@
|
|
1
1
|
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
2
|
+
import { formatCurrency, formatPercent, formatNumber, getCurrencySymbol } from '@angular/common';
|
2
3
|
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
4
|
+
import { Workbook } from '@syncfusion/ej2-excel-export';
|
3
5
|
import { forkJoin, first } from 'rxjs';
|
4
6
|
import { tap } from 'rxjs/operators';
|
5
7
|
import { isArray, isFunction } from '../../core/functions';
|
6
8
|
import { modelize } from '../cube.service';
|
7
9
|
import { matrixAnimation } from '../../core/animations';
|
8
|
-
import { formatPercent, formatNumber, getCurrencySymbol } from '@angular/common';
|
9
|
-
import { formatCurrency } from '@angular/common';
|
10
10
|
import * as i0 from "@angular/core";
|
11
11
|
import * as i1 from "../../core/prompt.service";
|
12
12
|
import * as i2 from "../cube.service";
|
13
13
|
import * as i3 from "../../core/session.service";
|
14
|
-
import * as i4 from "../../core/
|
15
|
-
import * as i5 from "
|
14
|
+
import * as i4 from "../../core/translate.service";
|
15
|
+
import * as i5 from "../../core/datasource.service";
|
16
|
+
import * as i6 from "@angular/common";
|
16
17
|
const LOADING_DELAY = 200, SUM_PREFIX = '_sum';
|
17
18
|
/** cube matrix component*/
|
18
19
|
export class CubeMatrixComponent {
|
19
|
-
constructor(_sb, _service, _session, _ds) {
|
20
|
+
constructor(_sb, _service, _session, _translate, _ds) {
|
20
21
|
this._sb = _sb;
|
21
22
|
this._service = _service;
|
22
23
|
this._session = _session;
|
24
|
+
this._translate = _translate;
|
23
25
|
this._ds = _ds;
|
24
26
|
this.PRECISION = this._service.digitsInfo;
|
25
27
|
this.LANGUAGE = this._session.language;
|
@@ -347,6 +349,55 @@ export class CubeMatrixComponent {
|
|
347
349
|
axes[this.series.name] = series;
|
348
350
|
this.onExplore.emit(axes);
|
349
351
|
}
|
352
|
+
export() {
|
353
|
+
const numberFormat = this._service.numberFormat, cells = [], rows = [{ index: 1, cells }];
|
354
|
+
this.columns.forEach((c, j) => cells.push({
|
355
|
+
index: j + 2,
|
356
|
+
value: c.value, style: { bold: true }
|
357
|
+
}));
|
358
|
+
let i = 1;
|
359
|
+
this.indices && this.indices.forEach(x => {
|
360
|
+
const data = this._data[x.name];
|
361
|
+
const cells = [{ index: 1, value: x.title, style: { bold: true } }];
|
362
|
+
this.columns.forEach((c, j) => cells.push({
|
363
|
+
index: j + 2,
|
364
|
+
value: data[c.key] !== undefined ? data[c.key] : 0
|
365
|
+
}));
|
366
|
+
rows.push({
|
367
|
+
index: i + 1,
|
368
|
+
cells
|
369
|
+
});
|
370
|
+
i++;
|
371
|
+
});
|
372
|
+
this.rows.forEach(r => {
|
373
|
+
const data = this._data[r.key], cells = [{ index: 1, value: r.value }];
|
374
|
+
this.columns.forEach((c, j) => cells.push({
|
375
|
+
type: 'number',
|
376
|
+
index: j + 1,
|
377
|
+
value: data[c.key] !== undefined ? data[c.key] : 0,
|
378
|
+
style: {
|
379
|
+
numberFormat,
|
380
|
+
hAlign: 'right',
|
381
|
+
}
|
382
|
+
}));
|
383
|
+
rows.push({
|
384
|
+
index: i + 2,
|
385
|
+
cells
|
386
|
+
});
|
387
|
+
i++;
|
388
|
+
});
|
389
|
+
const book = new Workbook({
|
390
|
+
worksheets: [
|
391
|
+
{
|
392
|
+
enableRtl: this._session.inverse,
|
393
|
+
name: this._translate.get('SheetN', 1),
|
394
|
+
columns: this.columns.map((_, i) => ({ index: i + 1, width: 150 })),
|
395
|
+
rows,
|
396
|
+
},
|
397
|
+
],
|
398
|
+
}, 'xlsx');
|
399
|
+
this._service.nameOf(this.filters, this.cube.name).subscribe(n => book.save(`${n}.xlsx`));
|
400
|
+
}
|
350
401
|
move(x, y) {
|
351
402
|
let rowIndex = 0;
|
352
403
|
for (let b = 0; b < this.tableElement.nativeElement.tBodies.length; b++) {
|
@@ -377,15 +428,17 @@ export class CubeMatrixComponent {
|
|
377
428
|
}
|
378
429
|
}
|
379
430
|
}
|
380
|
-
CubeMatrixComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: CubeMatrixComponent, deps: [{ token: i1.PromptService }, { token: i2.CubeService }, { token: i3.SessionService }, { token: i4.DatasourceService }], target: i0.ɵɵFactoryTarget.Component });
|
381
|
-
CubeMatrixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: CubeMatrixComponent, selector: "bizdoc-cube-matrix", inputs: {
|
431
|
+
CubeMatrixComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: CubeMatrixComponent, deps: [{ token: i1.PromptService }, { token: i2.CubeService }, { token: i3.SessionService }, { token: i4.TranslateService }, { token: i5.DatasourceService }], target: i0.ɵɵFactoryTarget.Component });
|
432
|
+
CubeMatrixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: CubeMatrixComponent, selector: "bizdoc-cube-matrix", inputs: { seriesTotalLabel: "seriesTotalLabel", xAxisTotalLabel: "xAxisTotalLabel", _cube: ["cube", "_cube"], _xAxis: ["xAxis", "_xAxis"], _series: ["series", "_series"], _indices: ["indices", "_indices"], scope: "scope", sum: "sum", filters: "filters", loading: "loading", interactive: "interactive" }, outputs: { onExplore: "explore", loadingChange: "loadingChange" }, viewQueries: [{ propertyName: "tableElement", first: true, predicate: ["table"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<table #table class=\"mat-table cube-table\" (mouseleave)=\"move(-1, -1)\" *ngIf=\"data\">\r\n <thead>\r\n <!-- headers -->\r\n <tr class=\"mat-row\">\r\n <th></th>\r\n <th *ngFor=\"let column of columns; let x = index\" (mouseenter)=\"move(x + 1, -2)\" class=\"mat-header-cell\">\r\n {{ column.value }}\r\n </th>\r\n <th class=\"mat-header-cell\">{{xAxisTotalLabel}}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <!-- indices -->\r\n <tr class=\"mat-row cube-index\" *ngFor=\"let index of indices; let y = index\">\r\n <th class=\"mat-header-cell\" (mouseenter)=\"move(0, y)\">{{index.title}}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, y)\">\r\n {{ data[index.name][column.key] }}\r\n </td>\r\n <th class=\"mat-cell figure\" (mouseenter)=\"move(0, y)\">\r\n {{ data[index.name]['_total'] }}\r\n </th>\r\n </tr>\r\n </tbody>\r\n <tbody>\r\n <!-- rows -->\r\n <tr *ngFor=\"let row of rows; let y = index\" class=\"mat-row\">\r\n <th class=\"mat-header-cell\" (mouseenter)=\"move(-2, y + indices.length)\">{{ row.value }}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, y + indices.length)\">\r\n <span [class.clickable]=\"interactive && column.explorable !== false && row.explorable !== false\" (click)=\"explore(column, row)\">\r\n {{ data[row.key][column.key] }}\r\n </span>\r\n </td>\r\n <th class=\"mat-cell figure\" (mouseenter)=\"move(-1, y + indices.length)\">\r\n <ng-container *ngIf=\"data[row.key]['_total'] !== undefined\">\r\n {{ data[row.key]['_total'] }}\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </tbody>\r\n <tfoot>\r\n <!-- footer -->\r\n <tr class=\"mat-row\">\r\n <th class=\"mat-header-cell\">{{seriesTotalLabel}}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, -2)\"\r\n [class.negative-figure]=\"totals[column.key].startsWith('-')\">\r\n <ng-container *ngIf=\"totals[column.key] !== undefined\">\r\n {{ totals[column.key] }}\r\n </ng-container>\r\n </td>\r\n <th class=\"mat-cell figure\">{{ totals['_grand'] }}</th>\r\n </tr>\r\n </tfoot>\r\n</table>\r\n", styles: [".clickable{cursor:pointer}.cube-table{width:100%;border-collapse:collapse;table-layout:fixed}.cube-table th{cursor:default}.cube-table th.figure{font-weight:500}.cube-table td{padding-right:4px}\n"], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], animations: [matrixAnimation] });
|
382
433
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: CubeMatrixComponent, decorators: [{
|
383
434
|
type: Component,
|
384
|
-
args: [{ selector: 'bizdoc-cube-matrix', animations: [matrixAnimation], template: "<table #table class=\"mat-table cube-table\" (mouseleave)=\"move(-1, -1)\" *ngIf=\"data\">\r\n <thead>\r\n <!-- headers -->\r\n <tr class=\"mat-row\">\r\n <th></th>\r\n <th *ngFor=\"let column of columns; let x = index\" (mouseenter)=\"move(x + 1, -2)\" class=\"mat-header-cell\">\r\n {{ column.value }}\r\n </th>\r\n <th
|
385
|
-
}], ctorParameters: function () { return [{ type: i1.PromptService }, { type: i2.CubeService }, { type: i3.SessionService }, { type: i4.DatasourceService }]; }, propDecorators: { tableElement: [{
|
435
|
+
args: [{ selector: 'bizdoc-cube-matrix', animations: [matrixAnimation], template: "<table #table class=\"mat-table cube-table\" (mouseleave)=\"move(-1, -1)\" *ngIf=\"data\">\r\n <thead>\r\n <!-- headers -->\r\n <tr class=\"mat-row\">\r\n <th></th>\r\n <th *ngFor=\"let column of columns; let x = index\" (mouseenter)=\"move(x + 1, -2)\" class=\"mat-header-cell\">\r\n {{ column.value }}\r\n </th>\r\n <th class=\"mat-header-cell\">{{xAxisTotalLabel}}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <!-- indices -->\r\n <tr class=\"mat-row cube-index\" *ngFor=\"let index of indices; let y = index\">\r\n <th class=\"mat-header-cell\" (mouseenter)=\"move(0, y)\">{{index.title}}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, y)\">\r\n {{ data[index.name][column.key] }}\r\n </td>\r\n <th class=\"mat-cell figure\" (mouseenter)=\"move(0, y)\">\r\n {{ data[index.name]['_total'] }}\r\n </th>\r\n </tr>\r\n </tbody>\r\n <tbody>\r\n <!-- rows -->\r\n <tr *ngFor=\"let row of rows; let y = index\" class=\"mat-row\">\r\n <th class=\"mat-header-cell\" (mouseenter)=\"move(-2, y + indices.length)\">{{ row.value }}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, y + indices.length)\">\r\n <span [class.clickable]=\"interactive && column.explorable !== false && row.explorable !== false\" (click)=\"explore(column, row)\">\r\n {{ data[row.key][column.key] }}\r\n </span>\r\n </td>\r\n <th class=\"mat-cell figure\" (mouseenter)=\"move(-1, y + indices.length)\">\r\n <ng-container *ngIf=\"data[row.key]['_total'] !== undefined\">\r\n {{ data[row.key]['_total'] }}\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </tbody>\r\n <tfoot>\r\n <!-- footer -->\r\n <tr class=\"mat-row\">\r\n <th class=\"mat-header-cell\">{{seriesTotalLabel}}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, -2)\"\r\n [class.negative-figure]=\"totals[column.key].startsWith('-')\">\r\n <ng-container *ngIf=\"totals[column.key] !== undefined\">\r\n {{ totals[column.key] }}\r\n </ng-container>\r\n </td>\r\n <th class=\"mat-cell figure\">{{ totals['_grand'] }}</th>\r\n </tr>\r\n </tfoot>\r\n</table>\r\n", styles: [".clickable{cursor:pointer}.cube-table{width:100%;border-collapse:collapse;table-layout:fixed}.cube-table th{cursor:default}.cube-table th.figure{font-weight:500}.cube-table td{padding-right:4px}\n"] }]
|
436
|
+
}], ctorParameters: function () { return [{ type: i1.PromptService }, { type: i2.CubeService }, { type: i3.SessionService }, { type: i4.TranslateService }, { type: i5.DatasourceService }]; }, propDecorators: { tableElement: [{
|
386
437
|
type: ViewChild,
|
387
438
|
args: ['table']
|
388
|
-
}],
|
439
|
+
}], seriesTotalLabel: [{
|
440
|
+
type: Input
|
441
|
+
}], xAxisTotalLabel: [{
|
389
442
|
type: Input
|
390
443
|
}], _cube: [{
|
391
444
|
type: Input,
|
@@ -415,4 +468,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
415
468
|
}], loadingChange: [{
|
416
469
|
type: Output
|
417
470
|
}] } });
|
418
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jdWJlL21hdHJpeC90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2N1YmUvbWF0cml4L3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4SCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQWUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFLeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7O0FBR2pELE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRSxVQUFVLEdBQUcsTUFBTSxDQUFDO0FBRS9DLDJCQUEyQjtBQU8zQixNQUFNLE9BQU8sbUJBQW1CO0lBNEQ5QixZQUNVLEdBQWtCLEVBQ2xCLFFBQXFCLEVBQ3JCLFFBQXdCLEVBQ3hCLEdBQXNCO1FBSHRCLFFBQUcsR0FBSCxHQUFHLENBQWU7UUFDbEIsYUFBUSxHQUFSLFFB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O3NCQUFyQixLQUFLO3VCQUFDLE9BQU87Z0JBQ0csT0FBTztzQkFBdkIsS0FBSzt1QkFBQyxRQUFRO2dCQUVQLFFBQVE7c0JBRGYsS0FBSzt1QkFBQyxTQUFTO2dCQUVQLEtBQUs7c0JBQWIsS0FBSztnQkFFTyxHQUFHO3NCQUFmLEtBQUs7Z0JBd0JHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0ssV0FBVztzQkFEckIsS0FBSztnQkFJc0IsU0FBUztzQkFBcEMsTUFBTTt1QkFBQyxTQUFTO2dCQUNFLGFBQWE7c0JBQS9CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBmaXJzdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IGlzQXJyYXksIGlzRnVuY3Rpb24gfSBmcm9tICcuLi8uLi9jb3JlL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IEN1YmVTZXJ2aWNlLCBtb2RlbGl6ZSB9IGZyb20gJy4uL2N1YmUuc2VydmljZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRhc291cmNlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvZGF0YXNvdXJjZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvbXB0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvcHJvbXB0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBeGVzTWFwLCBBeGlzVHlwZSwgQ3ViZSwgQ3ViZUF4aXMsIEN1YmVJbmRleCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzJztcclxuaW1wb3J0IHsgbWF0cml4QW5pbWF0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgZm9ybWF0UGVyY2VudCwgZm9ybWF0TnVtYmVyLCBnZXRDdXJyZW5jeVN5bWJvbCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IGZvcm1hdEN1cnJlbmN5IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgU2NvcGVUeXBlIH0gZnJvbSAnLi4vLi4vY29yZS9jb25maWd1cmF0aW9uJztcclxuXHJcbmNvbnN0IExPQURJTkdfREVMQVkgPSAyMDAsIFNVTV9QUkVGSVggPSAnX3N1bSc7XHJcblxyXG4vKiogY3ViZSBtYXRyaXggY29tcG9uZW50Ki9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtY3ViZS1tYXRyaXgnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbbWF0cml4QW5pbWF0aW9uXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3ViZU1hdHJpeENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgcmVhZG9ubHkgUFJFQ0lTSU9OID0gdGhpcy5fc2VydmljZS5kaWdpdHNJbmZvO1xyXG4gIHJlYWRvbmx5IExBTkdVQUdFID0gdGhpcy5fc2Vzc2lvbi5sYW5ndWFnZTtcclxuICBDVVJSRU5DWTogc3RyaW5nO1xyXG4gIFNZTUJPTDogc3RyaW5nO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJykgdGFibGVFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxUYWJsZUVsZW1lbnQ+O1xyXG4gIEBJbnB1dCgpIGF2YWlsYWJsZUxhYmVsOiBzdHJpbmc7XHJcbiAgQElucHV0KCdjdWJlJykgX2N1YmU/OiBzdHJpbmc7XHJcbiAgQElucHV0KCd4QXhpcycpIF94QXhpcyE6IHN0cmluZztcclxuICBASW5wdXQoJ3NlcmllcycpIF9zZXJpZXMhOiBzdHJpbmc7XHJcbiAgQElucHV0KCdpbmRpY2VzJylcclxuICBwcml2YXRlIF9pbmRpY2VzPzogc3RyaW5nW10gfCBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2NvcGU6IFNjb3BlVHlwZTtcclxuICBwcml2YXRlIF9zdW06IFN1bVNldHRpbmdzW107XHJcbiAgQElucHV0KCkgc2V0IHN1bSh2YWw6IFN1bVNldHRpbmdzIHwgU3VtU2V0dGluZ3NbXSkge1xyXG4gICAgaWYgKHZhbCkgdGhpcy5fc3VtID0gKGlzQXJyYXkodmFsKSA/IHZhbCA6IFt2YWxdKS5cclxuICAgICAgbWFwKHN1bSA9PiB7XHJcbiAgICAgICAgbGV0IHZhbHVlO1xyXG4gICAgICAgIGlmIChzdW0udmFsdWUpXHJcbiAgICAgICAgICB2YWx1ZSA9IHN1bS52YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgIGVsc2UgaWYgKHN1bS5jYWxjdWxhdGUpXHJcbiAgICAgICAgICBzd2l0Y2ggKHN1bS5jYWxjdWxhdGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxyXG4gICAgICAgICAgICAgIHZhbHVlID0gJ00nICsgKCcwJyArIChuZXcgRGF0ZSgpLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpKS5zbGljZSgtMik7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxyXG4gICAgICAgICAgICAgIHZhbHVlID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxyXG4gICAgICAgICAgICAgIHZhbHVlID0gTWF0aC5jZWlsKChuZXcgRGF0ZSgpLmdldE1vbnRoKCkgKyAxKSAvIDMpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLnN1bSxcclxuICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGZpbHRlcnM6IEF4ZXNNYXA7XHJcbiAgcHJpdmF0ZSBfaW50ZXJhY3RpdmU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW47XHJcbiAgcHVibGljIGdldCBpbnRlcmFjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pbnRlcmFjdGl2ZTtcclxuICB9XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGludGVyYWN0aXZlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pbnRlcmFjdGl2ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIEBPdXRwdXQoJ2V4cGxvcmUnKSByZWFkb25seSBvbkV4cGxvcmUgPSBuZXcgRXZlbnRFbWl0dGVyPEF4ZXNNYXA+KCk7XHJcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGxvYWRpbmdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgcm93czogSGVhZGVySW5mb1tdO1xyXG4gIGNvbHVtbnM6IEhlYWRlckluZm9bXTtcclxuICBpbmRpY2VzOiBDdWJlSW5kZXhbXSA9IFtdO1xyXG4gIGRhdGE6IHsgW3Nlcmllczogc3RyaW5nXTogeyBbeEF4aXM6IHN0cmluZ106IHN0cmluZzsgfTsgfTtcclxuICB0b3RhbHM6IHsgW3hBeGlzOiBzdHJpbmddOiBudW1iZXIgfTtcclxuICBjdWJlOiBDdWJlO1xyXG4gIHhBeGlzOiBDdWJlQXhpcztcclxuICBzZXJpZXM6IEN1YmVBeGlzO1xyXG4gIHByaXZhdGUgX2RhdGE6IERhdGFNYXA7XHJcbiAgcHJpdmF0ZSBfcHJlcGFyZTogUHJvbWlzZTxhbnk+O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfc2I6IFByb21wdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXJ2aWNlOiBDdWJlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZHM6IERhdGFzb3VyY2VTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1snX2N1YmUnXSkge1xyXG4gICAgICB0aGlzLmN1YmUgPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuY3ViZXMuZmluZChjID0+IGMubmFtZSA9PT0gdGhpcy5fY3ViZSk7XHJcbiAgICAgIHRoaXMuQ1VSUkVOQ1kgPSB0aGlzLmN1YmUuY3VycmVuY3lDb2RlIC8qfHwgdGhpcy5fc2VydmljZS5jdXJyZW5jeUNvZGUqLztcclxuICAgICAgdGhpcy5TWU1CT0wgPSBnZXRDdXJyZW5jeVN5bWJvbCh0aGlzLkNVUlJFTkNZLCAnbmFycm93Jyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuY3ViZSkge1xyXG4gICAgICB0aGlzLmN1YmUgPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuY3ViZXNbMF07XHJcbiAgICAgIHRoaXMuQ1VSUkVOQ1kgPSB0aGlzLmN1YmUuY3VycmVuY3lDb2RlIC8qfHwgdGhpcy5fc2VydmljZS5jdXJyZW5jeUNvZGUqLztcclxuICAgICAgdGhpcy5TWU1CT0wgPSBnZXRDdXJyZW5jeVN5bWJvbCh0aGlzLkNVUlJFTkNZLCAnbmFycm93Jyk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snX2luZGljZXMnXSlcclxuICAgICAgdGhpcy5pbmRpY2VzID0gdGhpcy5jdWJlLmluZGljZXMuZmlsdGVyKGkgPT4gaXNBcnJheSh0aGlzLl9pbmRpY2VzKSA/IHRoaXMuX2luZGljZXMuaW5kZXhPZihpLm5hbWUpID4gLTEgOiB0aGlzLl9pbmRpY2VzID09PSBpLm5hbWUpO1xyXG4gICAgaWYgKGNoYW5nZXNbJ194QXhpcyddIHx8IGNoYW5nZXNbJ19zZXJpZXMnXSkge1xyXG4gICAgICB0aGlzLnhBeGlzID0gdGhpcy5jdWJlLmF4ZXMuZmluZChhID0+IGEubmFtZSA9PT0gdGhpcy5feEF4aXMpO1xyXG4gICAgICB0aGlzLnNlcmllcyA9IHRoaXMuY3ViZS5heGVzLmZpbmQoYSA9PiBhLm5hbWUgPT09IHRoaXMuX3Nlcmllcyk7XHJcbiAgICAgIHRoaXMuZGF0YSA9IG51bGw7XHJcbiAgICAgIHRoaXMuX3ByZXBhcmUgPSBmb3JrSm9pbih0aGlzLl9kcy5hbGwodGhpcy5zZXJpZXMuZGF0YVR5cGUpLnBpcGUodGFwKHIgPT5cclxuICAgICAgICB0aGlzLnJvd3MgPSByXHJcbiAgICAgICkpLFxyXG4gICAgICAgIHRoaXMuX2RzLmFsbCh0aGlzLnhBeGlzLmRhdGFUeXBlKS5waXBlKHRhcChjID0+XHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnMgPSBjXHJcbiAgICAgICAgKSkpLnRvUHJvbWlzZSgpLnRoZW4oXHJcbiAgICAgICAgICAoKSA9PlxyXG4gICAgICAgICAgICB0aGlzLl9zdW0gJiYgdGhpcy5fYWRkc3VtaGVhZGVycygpKTtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjaGFuZ2VzWydmaWx0ZXJzJ10pXHJcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gIH1cclxuICBwcml2YXRlIF9hZGRzdW1oZWFkZXJzKCkge1xyXG4gICAgdGhpcy5fc3VtLmZvckVhY2goKHMsIGkpID0+IHtcclxuICAgICAgbGV0IHsgdmFsdWUsIGF4aXMgfSA9IHM7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB7XHJcbiAgICAgICAga2V5OiBTVU1fUFJFRklYICsgaSxcclxuICAgICAgICB2YWx1ZTogcy50aXRsZSxcclxuICAgICAgICBleHBsb3JhYmxlOiAhaXNGdW5jdGlvbihzLmNhbGN1bGF0ZSksXHJcbiAgICAgICAgYWNjdW11bGF0ZTogcy5hY2N1bXVsYXRlLFxyXG4gICAgICAgIHByZWNpc2lvbjogcy5wcmVjaXNpb24gfHwgdGhpcy5QUkVDSVNJT04sXHJcbiAgICAgICAgZm9ybWF0OiBzLmZvcm1hdCxcclxuICAgICAgICBpbmRleDogaVxyXG4gICAgICB9IGFzIEhlYWRlckluZm87XHJcbiAgICAgIGxldCBqID0gMDtcclxuICAgICAgaWYgKGF4aXMgPT09ICd4QXhpcycpIHtcclxuICAgICAgICB3aGlsZSAoaiA8IHRoaXMuY29sdW1ucy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmNvbHVtbnNbal0ua2V5ID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMuc3BsaWNlKGogKyAxLCAwLCBlbGVtZW50KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBqKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChqID09PSB0aGlzLmNvbHVtbnMubGVuZ3RoKVxyXG4gICAgICAgICAgdGhpcy5jb2x1bW5zLnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgd2hpbGUgKGogPCB0aGlzLnJvd3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5yb3dzW2pdLmtleSA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3dzLnNwbGljZShqICsgMSwgMCwgZWxlbWVudCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaisrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaiA9PT0gdGhpcy5yb3dzLmxlbmd0aClcclxuICAgICAgICAgIHRoaXMucm93cy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2goKSB7XHJcbiAgICBjb25zdCBwcm9ncmVzc1Rhc2sgPSBzZXRUaW1lb3V0KCgpID0+XHJcbiAgICAgIHRoaXMubG9hZGluZ0NoYW5nZS5uZXh0KHRoaXMubG9hZGluZyA9IHRydWUpXHJcbiAgICAgICwgTE9BRElOR19ERUxBWSk7XHJcbiAgICB0aGlzLl9wcmVwYXJlLnRoZW4oKCkgPT4gdGhpcy5fc2VydmljZS5zZXJpZXModGhpcy5jdWJlLm5hbWUsIHRoaXMuX3hBeGlzLCB7XHJcbiAgICAgIHNlcmllczogdGhpcy5fc2VyaWVzLFxyXG4gICAgICBpbmRpY2VzOiB0aGlzLl9pbmRpY2VzLFxyXG4gICAgICBmaWx0ZXJzOiB0aGlzLmZpbHRlcnMsXHJcbiAgICAgIHNjb3BlOiB0aGlzLnNjb3BlXHJcbiAgICB9IGFzIGFueSkucGlwZShcclxuICAgICAgbW9kZWxpemUoKSwgZmlyc3QoKSkuc3Vic2NyaWJlKGQgPT4ge1xyXG4gICAgICAgIHRoaXMuX2RhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGQpKTtcclxuICAgICAgICB0aGlzLl90b3RhbHMoZCk7XHJcbiAgICAgICAgdGhpcy5fc3VtICYmIHRoaXMuX2NhbGN1bGF0ZXN1bShkKTtcclxuICAgICAgICB0aGlzLl9zdHJpbmdmeShkKTtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkIGFzIGFueTtcclxuICAgICAgfSxcclxuICAgICAgICAoZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3NiLmVycm9yKGUuc3RhdHVzID09PSA0MDEgPyAnVW5hdXRob3JpemVkJyA6IG51bGwpO1xyXG4gICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgIGNsZWFyVGltZW91dChwcm9ncmVzc1Rhc2spO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nQ2hhbmdlLm5leHQodGhpcy5sb2FkaW5nID0gZmFsc2UpO1xyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICBwcml2YXRlIF9zdHJpbmdmeShkYXRhOiBEYXRhTWFwKSB7XHJcbiAgICBjb25zdCBmbXQgPSAoeEF4aXMsIHNlcmllcykgPT5cclxuICAgICAgZGF0YVt4QXhpc11bc2VyaWVzXSA9IGZvcm1hdE51bWJlcihkYXRhW3hBeGlzXVtzZXJpZXNdIHx8IDAsIHRoaXMuTEFOR1VBR0UsIHRoaXMuUFJFQ0lTSU9OKSBhcyBhbnk7XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjID0+IHtcclxuICAgICAgaWYgKGMuaW5kZXggIT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG4gICAgICB0aGlzLmluZGljZXMgJiYgdGhpcy5pbmRpY2VzLmZvckVhY2goaSA9PlxyXG4gICAgICAgIGZtdChpLm5hbWUsIGMua2V5KVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnJvd3MuZm9yRWFjaChyID0+IHtcclxuICAgICAgICByLmluZGV4ID09PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgIGZtdChyLmtleSwgYy5rZXkpXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3RvdGFscyhkYXRhOiBEYXRhTWFwKSB7XHJcbiAgICBsZXQgZ3JhbmQgPSAwO1xyXG4gICAgdGhpcy5pbmRpY2VzICYmIHRoaXMuaW5kaWNlcy5mb3JFYWNoKGkgPT4ge1xyXG4gICAgICBsZXQgcm93ID0gZGF0YVtpLm5hbWVdO1xyXG4gICAgICBpZiAoIXJvdykgcm93ID0gZGF0YVtpLm5hbWVdID0ge307XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCBzdW0gPSAwO1xyXG4gICAgICAgIGZvciAobGV0IHggaW4gcm93KVxyXG4gICAgICAgICAgc3VtICs9IHJvd1t4XTtcclxuICAgICAgICByb3dbJ190b3RhbCddID0gdGhpcy5fZm9ybWF0KHN1bSk7XHJcbiAgICAgICAgZ3JhbmQgKz0gc3VtO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMucm93cy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICBpZiAoci5hY2N1bXVsYXRlID09PSBmYWxzZSkgcmV0dXJuO1xyXG4gICAgICBsZXQgcm93ID0gZGF0YVtyLmtleV07XHJcbiAgICAgIGlmICghcm93KSByb3cgPSBkYXRhW3Iua2V5XSA9IHtcclxuICAgICAgICAnX3RvdGFsJzogJzAnIGFzIGFueVxyXG4gICAgICB9O1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZXQgc3VtID0gMDtcclxuICAgICAgICBmb3IgKGxldCB4IGluIHJvdylcclxuICAgICAgICAgIHN1bSArPSByb3dbeF07XHJcbiAgICAgICAgcm93WydfdG90YWwnXSA9IHRoaXMuX2Zvcm1hdChzdW0sIHIpO1xyXG4gICAgICAgIGdyYW5kICs9IHN1bSAqIC0xO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHRvdGFscyA9IGRhdGFbJ190b3RhbCddID0gdGhpcy50b3RhbHMgPSB7fTtcclxuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICBpZiAoYy5hY2N1bXVsYXRlID09PSBmYWxzZSkgcmV0dXJuO1xyXG4gICAgICBsZXQgc3VtID0gMDtcclxuICAgICAgZm9yIChsZXQga2V5IGluIGRhdGEpIHtcclxuICAgICAgICBjb25zdCB2YWwgPSBkYXRhW2tleV1bYy5rZXldO1xyXG4gICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgIHN1bSArPSB0aGlzLl9pbmRpY2VzICYmIHRoaXMuX2luZGljZXMuaW5kZXhPZihrZXkpID4gLTEgPyB2YWwgOiAtdmFsO1xyXG4gICAgICB9XHJcbiAgICAgIHRvdGFsc1tjLmtleV0gPSB0aGlzLl9mb3JtYXQoc3VtLCBjKTtcclxuICAgIH0pO1xyXG4gICAgdG90YWxzWydfZ3JhbmQnXSA9IHRoaXMuX2Zvcm1hdChncmFuZCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NhbGN1bGF0ZXN1bShkYXRhOiBEYXRhTWFwKSB7XHJcbiAgICB0aGlzLl9zdW0uZm9yRWFjaCgocywgaSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGF4aXMsIHZhbHVlLCBjYWxjdWxhdGUsIGFjY3VtdWxhdGUgfSA9IHM7XHJcbiAgICAgIGNvbnN0IG5hbWUgPSBTVU1fUFJFRklYICsgaTtcclxuICAgICAgaWYgKGF4aXMgPT09ICd4QXhpcycpIHtcclxuICAgICAgICBsZXQgdG90YWwgPSAwO1xyXG4gICAgICAgIHRoaXMucm93cy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICAgICAgaWYgKHIuYWNjdW11bGF0ZSA9PT0gZmFsc2UpIHJldHVybjtcclxuICAgICAgICAgIGNvbnN0IHJvdyA9IGRhdGFbci5rZXldO1xyXG4gICAgICAgICAgaWYgKCFyb3cpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIGxldCBzdW0gPSAwLCBqID0gMDtcclxuICAgICAgICAgIHdoaWxlIChqIDwgdGhpcy5jb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBsZXQgY29sdW1uID0gdGhpcy5jb2x1bW5zW2pdLCBrZXkgPSBjb2x1bW4ua2V5O1xyXG4gICAgICAgICAgICBpZiAoY29sdW1uLmluZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihjYWxjdWxhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsID0gKGNhbGN1bGF0ZSBhcyBDYWxjdWxhdGVGbikoci5rZXksIHRoaXMuX2RhdGEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICBzdW0gKz0gdmFsO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWwgPSByb3dba2V5XTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgc3VtICs9IHZhbDtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaisrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcm93W25hbWVdID0gdGhpcy5fZm9ybWF0KHN1bSwgcyk7XHJcbiAgICAgICAgICB0b3RhbCArPSBzdW07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGFjY3VtdWxhdGUgIT09IGZhbHNlKVxyXG4gICAgICAgICAgZGF0YVsnX3RvdGFsJ11bbmFtZV0gPSB0aGlzLl9mb3JtYXQodG90YWwpO1xyXG4gICAgICAgIHRoaXMuaW5kaWNlcyAmJiB0aGlzLmluZGljZXMuZm9yRWFjaChpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJvdyA9IGRhdGFbaS5uYW1lXTtcclxuICAgICAgICAgIGlmICghcm93KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICBsZXQgc3VtID0gMCwgaiA9IDA7XHJcbiAgICAgICAgICB3aGlsZSAoaiA8IHRoaXMuY29sdW1ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IGtleSA9IHRoaXMuY29sdW1uc1tqXS5rZXk7XHJcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGN1bGF0ZSkpIHtcclxuICAgICAgICAgICAgICBsZXQgdmFsID0gKGNhbGN1bGF0ZSBhcyBDYWxjdWxhdGVGbikoaS5uYW1lLCB0aGlzLl9kYXRhKTtcclxuICAgICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICBzdW0gKz0gdmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGxldCB2YWwgPSByb3dba2V5XTtcclxuICAgICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICBzdW0gKz0gdmFsO1xyXG4gICAgICAgICAgICAgIGlmIChrZXkgPT09IHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaisrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcm93W25hbWVdID0gdGhpcy5fZm9ybWF0KHN1bSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZGF0YVtuYW1lXSA9IHt9O1xyXG4gICAgICAgIGxldCB0b3RhbCA9IDA7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICBpZiAoYy5leHBsb3JhYmxlID09PSBmYWxzZSkgcmV0dXJuO1xyXG4gICAgICAgICAgbGV0IHN1bSA9IDAsIGogPSAwO1xyXG4gICAgICAgICAgd2hpbGUgKGogPCB0aGlzLnJvd3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGxldCByb3cgPSB0aGlzLnJvd3Nbal0sIGtleSA9IHJvdy5rZXk7XHJcbiAgICAgICAgICAgIGlmIChyb3cuaW5kZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGN1bGF0ZSkpIHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWwgPSAoY2FsY3VsYXRlIGFzIENhbGN1bGF0ZUZuKShjLmtleSwgdGhpcy5fZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgIHN1bSArPSB2YWw7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRyb3cgPSBkYXRhW2tleV07XHJcbiAgICAgICAgICAgICAgICBpZiAoZHJvdykge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgdmFsID0gZHJvd1tjLmtleV07XHJcbiAgICAgICAgICAgICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgICBzdW0gKz0gdmFsO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSB2YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaisrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGF0YVtuYW1lXVtjLmtleV0gPSB0aGlzLl9mb3JtYXQoc3VtLCBzKTtcclxuICAgICAgICAgIGlmIChjLmluZGV4ID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHRvdGFsICs9IHN1bTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoYWNjdW11bGF0ZSAhPT0gZmFsc2UpXHJcbiAgICAgICAgICBkYXRhW25hbWVdWydfdG90YWwnXSA9IHRoaXMuX2Zvcm1hdCh0b3RhbCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIF9mb3JtYXQodmFsLCBvcHRpb25zPzogeyBmb3JtYXQ/OiBzdHJpbmcsIHByZWNpc2lvbj86IHN0cmluZyB9KTogYW55IHtcclxuICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgIGlmIChvcHRpb25zLmZvcm1hdCA9PT0gJ3BlcmNlbnQnKVxyXG4gICAgICAgIHJldHVybiBmb3JtYXRQZXJjZW50KHZhbCwgdGhpcy5MQU5HVUFHRSwgb3B0aW9ucy5wcmVjaXNpb24pO1xyXG4gICAgICBlbHNlIGlmIChvcHRpb25zLmZvcm1hdCA9PT0gJ2N1cnJlbmN5JylcclxuICAgICAgICByZXR1cm4gZm9ybWF0Q3VycmVuY3kodmFsLCB0aGlzLkxBTkdVQUdFLCB0aGlzLlNZTUJPTCwgdGhpcy5DVVJSRU5DWSwgb3B0aW9ucy5wcmVjaXNpb24pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuQ1VSUkVOQ1kpXHJcbiAgICAgIHJldHVybiBmb3JtYXRDdXJyZW5jeSh2YWwsIHRoaXMuTEFOR1VBR0UsIHRoaXMuU1lNQk9MLCB0aGlzLkNVUlJFTkNZLCB0aGlzLlBSRUNJU0lPTik7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiBmb3JtYXROdW1iZXIodmFsLCB0aGlzLkxBTkdVQUdFLCB0aGlzLlBSRUNJU0lPTik7XHJcbiAgfVxyXG4gIGV4cGxvcmUoY29sdW1uOiBIZWFkZXJJbmZvLCByb3c6IEhlYWRlckluZm8pIHtcclxuICAgIGlmICghdGhpcy5pbnRlcmFjdGl2ZSkgcmV0dXJuO1xyXG4gICAgbGV0IHg6IEF4aXNUeXBlLCBzZXJpZXM6IEF4aXNUeXBlO1xyXG4gICAgY29uc3QgYXhlcyA9IHsgLi4udGhpcy5maWx0ZXJzIH0gYXMgQXhlc01hcDtcclxuICAgIGlmIChjb2x1bW4uaW5kZXggPT09IHVuZGVmaW5lZClcclxuICAgICAgeCA9IGNvbHVtbi5rZXk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IHsgdmFsdWUsIGNhbGN1bGF0ZSB9ID0gdGhpcy5fc3VtW2NvbHVtbi5pbmRleF07XHJcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGN1bGF0ZSkpIHJldHVybjtcclxuICAgICAgeCA9IFtdIGFzIHN0cmluZ1tdO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbaV07XHJcbiAgICAgICAgaWYgKGNvbHVtbi5pbmRleCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgbGV0IGtleSA9IGNvbHVtbi5rZXk7XHJcbiAgICAgICAgeC5wdXNoKGtleSk7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gdmFsdWUpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHJvdy5pbmRleCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICBzZXJpZXMgPSByb3cua2V5O1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCB7IHZhbHVlLCBjYWxjdWxhdGUgfSA9IHRoaXMuX3N1bVtyb3cuaW5kZXhdO1xyXG4gICAgICBpZiAoaXNGdW5jdGlvbihjYWxjdWxhdGUpKSByZXR1cm47XHJcbiAgICAgIHNlcmllcyA9IFtdIGFzIHN0cmluZ1tdO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCByb3cgPSB0aGlzLnJvd3NbaV07XHJcbiAgICAgICAgaWYgKHJvdy5pbmRleCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgbGV0IGtleSA9IHJvdy5rZXk7XHJcbiAgICAgICAgc2VyaWVzLnB1c2goa2V5KTtcclxuICAgICAgICBpZiAoa2V5ID09PSB2YWx1ZSlcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBheGVzW3RoaXMueEF4aXMubmFtZV0gPSB4O1xyXG4gICAgYXhlc1t0aGlzLnNlcmllcy5uYW1lXSA9IHNlcmllcztcclxuICAgIHRoaXMub25FeHBsb3JlLmVtaXQoYXhlcyk7XHJcbiAgfVxyXG4gIG1vdmUoeCwgeSkge1xyXG4gICAgbGV0IHJvd0luZGV4ID0gMDtcclxuICAgIGZvciAobGV0IGIgPSAwOyBiIDwgdGhpcy50YWJsZUVsZW1lbnQubmF0aXZlRWxlbWVudC50Qm9kaWVzLmxlbmd0aDsgYisrKSB7XHJcbiAgICAgIGxldCB0Qm9keSA9IHRoaXMudGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudEJvZGllcy5pdGVtKGIpO1xyXG4gICAgICBmb3IgKGxldCByID0gMDsgciA8IHRCb2R5LnJvd3MubGVuZ3RoOyByKyspIHtcclxuICAgICAgICBsZXQgcm93ID0gdEJvZHkucm93cy5pdGVtKHIpO1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgcm93LmNlbGxzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICBsZXQgY2VsbCA9IHJvdy5jZWxscy5pdGVtKGMpO1xyXG4gICAgICAgICAgaWYgKGMgPT09IHgpXHJcbiAgICAgICAgICAgIGNlbGwuY2xhc3NMaXN0LmFkZCgnY2VsbC14Jyk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGNlbGwuY2xhc3NMaXN0LnJlbW92ZSgnY2VsbC14Jyk7XHJcbiAgICAgICAgICBpZiAocm93SW5kZXggPT09IHkpXHJcbiAgICAgICAgICAgIGNlbGwuY2xhc3NMaXN0LmFkZCgnY2VsbC15Jyk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGNlbGwuY2xhc3NMaXN0LnJlbW92ZSgnY2VsbC15Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJvd0luZGV4Kys7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHRGb290ID0gdGhpcy50YWJsZUVsZW1lbnQubmF0aXZlRWxlbWVudC50Rm9vdCwgcm93ID0gdEZvb3Qucm93c1swXTtcclxuICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCByb3cuY2VsbHMubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICBsZXQgY2VsbCA9IHJvdy5jZWxscy5pdGVtKGMpO1xyXG4gICAgICAgIGlmIChjID09PSB4KVxyXG4gICAgICAgICAgY2VsbC5jbGFzc0xpc3QuYWRkKCdjZWxsLXgnKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5yZW1vdmUoJ2NlbGwteCcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbnR5cGUgRGF0YU1hcCA9IHsgW3Nlcmllczogc3RyaW5nXTogeyBbeEF4aXM6IHN0cmluZ106IG51bWJlcjsgfTsgfTtcclxuXHJcbmV4cG9ydCB0eXBlIFN1bVNldHRpbmdzID0ge1xyXG4gIHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIGF4aXM6ICdzZXJpZXMnIHwgJ3hBeGlzJztcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIGZvcm1hdD86ICdwZXJjZW50JyB8ICdjdXJyZW5jeScgfCAnbnVtYmVyJztcclxuICBwcmVjaXNpb24/OiBzdHJpbmc7XHJcbiAgYWNjdW11bGF0ZT86IGJvb2xlYW47XHJcbiAgY2FsY3VsYXRlPzogJ3F1YXJ0ZXInIHwgJ3llYXInIHwgJ21vbnRoJyB8IENhbGN1bGF0ZUZuO1xyXG59XHJcblxyXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ2FsY3VsYXRlRm4ge1xyXG4gICh2YWx1ZTogc3RyaW5nLCBkYXRhOiB7IFtzZXJpZXM6IHN0cmluZ106IHsgW3hBeGlzOiBzdHJpbmddOiBudW1iZXI7IH07IH0pOiBudW1iZXI7XHJcbn1cclxuXHJcbnR5cGUgSGVhZGVySW5mbyA9IHtcclxuICBrZXk6IHN0cmluZztcclxuICB2YWx1ZTogYW55O1xyXG4gIGZvcm1hdD86ICdwZXJjZW50JyB8ICdjdXJyZW5jeScgfCAnbnVtYmVyJztcclxuICBwcmVjaXNpb24/OiBzdHJpbmc7XHJcbiAgYWNjdW11bGF0ZT86IGJvb2xlYW47XHJcbiAgZXhwbG9yYWJsZT86IGJvb2xlYW47XHJcbiAgaW5kZXg/OiBudW1iZXI7XHJcbn07XHJcbiIsIjx0YWJsZSAjdGFibGUgY2xhc3M9XCJtYXQtdGFibGUgY3ViZS10YWJsZVwiIChtb3VzZWxlYXZlKT1cIm1vdmUoLTEsIC0xKVwiICpuZ0lmPVwiZGF0YVwiPlxyXG4gIDx0aGVhZD5cclxuICAgIDwhLS0gaGVhZGVycyAtLT5cclxuICAgIDx0ciBjbGFzcz1cIm1hdC1yb3dcIj5cclxuICAgICAgPHRoPjwvdGg+XHJcbiAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IGxldCB4ID0gaW5kZXhcIiAobW91c2VlbnRlcik9XCJtb3ZlKHggKyAxLCAtMilcIiBjbGFzcz1cIm1hdC1oZWFkZXItY2VsbFwiPlxyXG4gICAgICAgIHt7IGNvbHVtbi52YWx1ZSB9fVxyXG4gICAgICA8L3RoPlxyXG4gICAgICA8dGg+PC90aD5cclxuICAgIDwvdHI+XHJcbiAgPC90aGVhZD5cclxuICA8dGJvZHk+XHJcbiAgICA8IS0tIGluZGljZXMgLS0+XHJcbiAgICA8dHIgY2xhc3M9XCJtYXQtcm93IGN1YmUtaW5kZXhcIiAqbmdGb3I9XCJsZXQgaW5kZXggb2YgaW5kaWNlczsgbGV0IHkgPSBpbmRleFwiPlxyXG4gICAgICA8dGggY2xhc3M9XCJtYXQtaGVhZGVyLWNlbGxcIiAobW91c2VlbnRlcik9XCJtb3ZlKDAsIHkpXCI+e3tpbmRleC50aXRsZX19PC90aD5cclxuICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IHggPSBpbmRleFwiIGNsYXNzPVwibWF0LWNlbGwgZmlndXJlXCIgKG1vdXNlZW50ZXIpPVwibW92ZSh4ICsgMSwgeSlcIj5cclxuICAgICAgICB7eyBkYXRhW2luZGV4Lm5hbWVdW2NvbHVtbi5rZXldIH19XHJcbiAgICAgIDwvdGQ+XHJcbiAgICAgIDx0aCBjbGFzcz1cIm1hdC1jZWxsIGZpZ3VyZVwiIChtb3VzZWVudGVyKT1cIm1vdmUoMCwgeSlcIj5cclxuICAgICAgICB7eyBkYXRhW2luZGV4Lm5hbWVdWydfdG90YWwnXSB9fVxyXG4gICAgICA8L3RoPlxyXG4gICAgPC90cj5cclxuICA8L3Rib2R5PlxyXG4gIDx0Ym9keT5cclxuICAgIDwhLS0gcm93cyAtLT5cclxuICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIHJvd3M7IGxldCB5ID0gaW5kZXhcIiBjbGFzcz1cIm1hdC1yb3dcIj5cclxuICAgICAgPHRoIGNsYXNzPVwibWF0LWhlYWRlci1jZWxsXCIgKG1vdXNlZW50ZXIpPVwibW92ZSgtMiwgeSArIGluZGljZXMubGVuZ3RoKVwiPnt7IHJvdy52YWx1ZSB9fTwvdGg+XHJcbiAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IGxldCB4ID0gaW5kZXhcIiBjbGFzcz1cIm1hdC1jZWxsIGZpZ3VyZVwiIChtb3VzZWVudGVyKT1cIm1vdmUoeCArIDEsIHkgKyBpbmRpY2VzLmxlbmd0aClcIj5cclxuICAgICAgICA8c3BhbiBbY2xhc3MuY2xpY2thYmxlXT1cImludGVyYWN0aXZlICYmIGNvbHVtbi5leHBsb3JhYmxlICE9PSBmYWxzZSAmJiByb3cuZXhwbG9yYWJsZSAhPT0gZmFsc2VcIiAoY2xpY2spPVwiZXhwbG9yZShjb2x1bW4sIHJvdylcIj5cclxuICAgICAgICAgIHt7IGRhdGFbcm93LmtleV1bY29sdW1uLmtleV0gfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICAgIDx0aCBjbGFzcz1cIm1hdC1jZWxsIGZpZ3VyZVwiIChtb3VzZWVudGVyKT1cIm1vdmUoLTEsIHkgKyBpbmRpY2VzLmxlbmd0aClcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YVtyb3cua2V5XVsnX3RvdGFsJ10gIT09IHVuZGVmaW5lZFwiPlxyXG4gICAgICAgICAge3sgZGF0YVtyb3cua2V5XVsnX3RvdGFsJ10gfX1cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC90aD5cclxuICAgIDwvdHI+XHJcbiAgPC90Ym9keT5cclxuICA8dGZvb3Q+XHJcbiAgICA8IS0tIGZvb3RlciAtLT5cclxuICAgIDx0ciBjbGFzcz1cIm1hdC1yb3dcIj5cclxuICAgICAgPHRoIGNsYXNzPVwibWF0LWhlYWRlci1jZWxsXCI+e3thdmFpbGFibGVMYWJlbH19PC90aD5cclxuICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IHggPSBpbmRleFwiIGNsYXNzPVwibWF0LWNlbGwgZmlndXJlXCIgKG1vdXNlZW50ZXIpPVwibW92ZSh4ICsgMSwgLTIpXCJcclxuICAgICAgICAgIFtjbGFzcy5uZWdhdGl2ZS1maWd1cmVdPVwidG90YWxzW2NvbHVtbi5rZXldLnN0YXJ0c1dpdGgoJy0nKVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0b3RhbHNbY29sdW1uLmtleV0gIT09IHVuZGVmaW5lZFwiPlxyXG4gICAgICAgICAge3sgdG90YWxzW2NvbHVtbi5rZXldIH19XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICAgIDx0aCBjbGFzcz1cIm1hdC1jZWxsIGZpZ3VyZVwiPnt7IHRvdGFsc1snX2dyYW5kJ10gfX08L3RoPlxyXG4gICAgPC90cj5cclxuICA8L3Rmb290PlxyXG48L3RhYmxlPlxyXG4iXX0=
|
471
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jdWJlL21hdHJpeC90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2N1YmUvbWF0cml4L3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVqRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFJeEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFlLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBS3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7QUFJeEQsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFLFVBQVUsR0FBRyxNQUFNLENBQUM7QUFFL0MsMkJBQTJCO0FBTzNCLE1BQU0sT0FBTyxtQkFBbUI7SUE2RDlCLFlBQ1UsR0FBa0IsRUFDbEIsUUFBcUIsRUFDckIsUUFBd0IsRUFDeEIsVUFBNEIsRUFDNUIsR0FBc0I7UUFKdEIsUUFBRyxHQUFILEdBQUcs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QUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pDLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDO29CQUNULElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDOztvQkFFN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDbkM7U0FDRjtJQUNILENBQUM7O2dIQWhjVSxtQkFBbUI7b0dBQW5CLG1CQUFtQix5aUJDN0JoQyw4MkVBcURBLHlhRDFCYyxDQUFDLGVBQWUsQ0FBQzsyRkFFbEIsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLG9CQUFvQixjQUdsQixDQUFDLGVBQWUsQ0FBQzswTkFPVCxZQUFZO3NCQUEvQixTQUFTO3VCQUFDLE9BQU87Z0JBQ1QsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ1MsS0FBSztzQkFBbkIsS0FBSzt1QkFBQyxNQUFNO2dCQUNHLE1BQU07c0JBQXJCLEtBQUs7dUJBQUMsT0FBTztnQkFDRyxPQUFPO3NCQUF2QixLQUFLO3VCQUFDLFFBQVE7Z0JBRVAsUUFBUTtzQkFEZixLQUFLO3VCQUFDLFNBQVM7Z0JBRVAsS0FBSztzQkFBYixLQUFLO2dCQUVPLEdBQUc7c0JBQWYsS0FBSztnQkF3QkcsT0FBTztzQkFBZixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFLSyxXQUFXO3NCQURyQixLQUFLO2dCQUlzQixTQUFTO3NCQUFwQyxNQUFNO3VCQUFDLFNBQVM7Z0JBQ0UsYUFBYTtzQkFBL0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBmb3JtYXRDdXJyZW5jeSwgZm9ybWF0UGVyY2VudCwgZm9ybWF0TnVtYmVyLCBnZXRDdXJyZW5jeVN5bWJvbCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xyXG5pbXBvcnQgeyBXb3JrYm9vayB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1leGNlbC1leHBvcnQnO1xyXG5pbXBvcnQgeyBXb3Jrc2hlZXQgfSBmcm9tICdAc3luY2Z1c2lvbi9lajItZXhjZWwtZXhwb3J0L3NyYy93b3Jrc2hlZXQnO1xyXG5pbXBvcnQgeyBSb3cgfSBmcm9tICdAc3luY2Z1c2lvbi9lajItZXhjZWwtZXhwb3J0L3NyYy9yb3cnO1xyXG5pbXBvcnQgeyBDb2x1bW4gfSBmcm9tICdAc3luY2Z1c2lvbi9lajItZXhjZWwtZXhwb3J0L3NyYy9jb2x1bW4nO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgZmlyc3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBpc0FycmF5LCBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBDdWJlU2VydmljZSwgbW9kZWxpemUgfSBmcm9tICcuLi9jdWJlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YXNvdXJjZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2RhdGFzb3VyY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFByb21wdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3Byb21wdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXhlc01hcCwgQXhpc1R5cGUsIEN1YmUsIEN1YmVBeGlzLCBDdWJlSW5kZXggfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscyc7XHJcbmltcG9ydCB7IG1hdHJpeEFuaW1hdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IFNjb3BlVHlwZSB9IGZyb20gJy4uLy4uL2NvcmUvY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuXHJcbmNvbnN0IExPQURJTkdfREVMQVkgPSAyMDAsIFNVTV9QUkVGSVggPSAnX3N1bSc7XHJcblxyXG4vKiogY3ViZSBtYXRyaXggY29tcG9uZW50Ki9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtY3ViZS1tYXRyaXgnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbbWF0cml4QW5pbWF0aW9uXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3ViZU1hdHJpeENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgcmVhZG9ubHkgUFJFQ0lTSU9OID0gdGhpcy5fc2VydmljZS5kaWdpdHNJbmZvO1xyXG4gIHJlYWRvbmx5IExBTkdVQUdFID0gdGhpcy5fc2Vzc2lvbi5sYW5ndWFnZTtcclxuICBDVVJSRU5DWTogc3RyaW5nO1xyXG4gIFNZTUJPTDogc3RyaW5nO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJykgdGFibGVFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxUYWJsZUVsZW1lbnQ+O1xyXG4gIEBJbnB1dCgpIHNlcmllc1RvdGFsTGFiZWw6IHN0cmluZztcclxuICBASW5wdXQoKSB4QXhpc1RvdGFsTGFiZWw6IHN0cmluZztcclxuICBASW5wdXQoJ2N1YmUnKSBfY3ViZT86IHN0cmluZztcclxuICBASW5wdXQoJ3hBeGlzJykgX3hBeGlzITogc3RyaW5nO1xyXG4gIEBJbnB1dCgnc2VyaWVzJykgX3NlcmllcyE6IHN0cmluZztcclxuICBASW5wdXQoJ2luZGljZXMnKVxyXG4gIHByaXZhdGUgX2luZGljZXM/OiBzdHJpbmdbXSB8IHN0cmluZztcclxuICBASW5wdXQoKSBzY29wZTogU2NvcGVUeXBlO1xyXG4gIHByaXZhdGUgX3N1bTogU3VtU2V0dGluZ3NbXTtcclxuICBASW5wdXQoKSBzZXQgc3VtKHZhbDogU3VtU2V0dGluZ3MgfCBTdW1TZXR0aW5nc1tdKSB7XHJcbiAgICBpZiAodmFsKSB0aGlzLl9zdW0gPSAoaXNBcnJheSh2YWwpID8gdmFsIDogW3ZhbF0pLlxyXG4gICAgICBtYXAoc3VtID0+IHtcclxuICAgICAgICBsZXQgdmFsdWU7XHJcbiAgICAgICAgaWYgKHN1bS52YWx1ZSlcclxuICAgICAgICAgIHZhbHVlID0gc3VtLnZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgZWxzZSBpZiAoc3VtLmNhbGN1bGF0ZSlcclxuICAgICAgICAgIHN3aXRjaCAoc3VtLmNhbGN1bGF0ZSkge1xyXG4gICAgICAgICAgICBjYXNlICdtb250aCc6XHJcbiAgICAgICAgICAgICAgdmFsdWUgPSAnTScgKyAoJzAnICsgKG5ldyBEYXRlKCkuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCkpLnNsaWNlKC0yKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAneWVhcic6XHJcbiAgICAgICAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XHJcbiAgICAgICAgICAgICAgdmFsdWUgPSBNYXRoLmNlaWwoKG5ldyBEYXRlKCkuZ2V0TW9udGgoKSArIDEpIC8gMykudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uc3VtLFxyXG4gICAgICAgICAgdmFsdWVcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgQElucHV0KCkgZmlsdGVyczogQXhlc01hcDtcclxuICBwcml2YXRlIF9pbnRlcmFjdGl2ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbjtcclxuICBwdWJsaWMgZ2V0IGludGVyYWN0aXZlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ludGVyYWN0aXZlO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgaW50ZXJhY3RpdmUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2ludGVyYWN0aXZlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgQE91dHB1dCgnZXhwbG9yZScpIHJlYWRvbmx5IG9uRXhwbG9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXhlc01hcD4oKTtcclxuICBAT3V0cHV0KCkgcmVhZG9ubHkgbG9hZGluZ0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICByb3dzOiBIZWFkZXJJbmZvW107XHJcbiAgY29sdW1uczogSGVhZGVySW5mb1tdO1xyXG4gIGluZGljZXM6IEN1YmVJbmRleFtdID0gW107XHJcbiAgZGF0YTogeyBbc2VyaWVzOiBzdHJpbmddOiB7IFt4QXhpczogc3RyaW5nXTogc3RyaW5nOyB9OyB9O1xyXG4gIHRvdGFsczogeyBbeEF4aXM6IHN0cmluZ106IG51bWJlciB9O1xyXG4gIGN1YmU6IEN1YmU7XHJcbiAgeEF4aXM6IEN1YmVBeGlzO1xyXG4gIHNlcmllczogQ3ViZUF4aXM7XHJcbiAgcHJpdmF0ZSBfZGF0YTogRGF0YU1hcDtcclxuICBwcml2YXRlIF9wcmVwYXJlOiBQcm9taXNlPGFueT47XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9zYjogUHJvbXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgX3NlcnZpY2U6IEN1YmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kczogRGF0YXNvdXJjZVNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydfY3ViZSddKSB7XHJcbiAgICAgIHRoaXMuY3ViZSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5jdWJlcy5maW5kKGMgPT4gYy5uYW1lID09PSB0aGlzLl9jdWJlKTtcclxuICAgICAgdGhpcy5DVVJSRU5DWSA9IHRoaXMuY3ViZS5jdXJyZW5jeUNvZGUgLyp8fCB0aGlzLl9zZXJ2aWNlLmN1cnJlbmN5Q29kZSovO1xyXG4gICAgICB0aGlzLlNZTUJPTCA9IGdldEN1cnJlbmN5U3ltYm9sKHRoaXMuQ1VSUkVOQ1ksICduYXJyb3cnKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5jdWJlKSB7XHJcbiAgICAgIHRoaXMuY3ViZSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5jdWJlc1swXTtcclxuICAgICAgdGhpcy5DVVJSRU5DWSA9IHRoaXMuY3ViZS5jdXJyZW5jeUNvZGUgLyp8fCB0aGlzLl9zZXJ2aWNlLmN1cnJlbmN5Q29kZSovO1xyXG4gICAgICB0aGlzLlNZTUJPTCA9IGdldEN1cnJlbmN5U3ltYm9sKHRoaXMuQ1VSUkVOQ1ksICduYXJyb3cnKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydfaW5kaWNlcyddKVxyXG4gICAgICB0aGlzLmluZGljZXMgPSB0aGlzLmN1YmUuaW5kaWNlcy5maWx0ZXIoaSA9PiBpc0FycmF5KHRoaXMuX2luZGljZXMpID8gdGhpcy5faW5kaWNlcy5pbmRleE9mKGkubmFtZSkgPiAtMSA6IHRoaXMuX2luZGljZXMgPT09IGkubmFtZSk7XHJcbiAgICBpZiAoY2hhbmdlc1snX3hBeGlzJ10gfHwgY2hhbmdlc1snX3NlcmllcyddKSB7XHJcbiAgICAgIHRoaXMueEF4aXMgPSB0aGlzLmN1YmUuYXhlcy5maW5kKGEgPT4gYS5uYW1lID09PSB0aGlzLl94QXhpcyk7XHJcbiAgICAgIHRoaXMuc2VyaWVzID0gdGhpcy5jdWJlLmF4ZXMuZmluZChhID0+IGEubmFtZSA9PT0gdGhpcy5fc2VyaWVzKTtcclxuICAgICAgdGhpcy5kYXRhID0gbnVsbDtcclxuICAgICAgdGhpcy5fcHJlcGFyZSA9IGZvcmtKb2luKHRoaXMuX2RzLmFsbCh0aGlzLnNlcmllcy5kYXRhVHlwZSkucGlwZSh0YXAociA9PlxyXG4gICAgICAgIHRoaXMucm93cyA9IHJcclxuICAgICAgKSksXHJcbiAgICAgICAgdGhpcy5fZHMuYWxsKHRoaXMueEF4aXMuZGF0YVR5cGUpLnBpcGUodGFwKGMgPT5cclxuICAgICAgICAgIHRoaXMuY29sdW1ucyA9IGNcclxuICAgICAgICApKSkudG9Qcm9taXNlKCkudGhlbihcclxuICAgICAgICAgICgpID0+XHJcbiAgICAgICAgICAgIHRoaXMuX3N1bSAmJiB0aGlzLl9hZGRzdW1oZWFkZXJzKCkpO1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNoYW5nZXNbJ2ZpbHRlcnMnXSlcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2FkZHN1bWhlYWRlcnMoKSB7XHJcbiAgICB0aGlzLl9zdW0uZm9yRWFjaCgocywgaSkgPT4ge1xyXG4gICAgICBsZXQgeyB2YWx1ZSwgYXhpcyB9ID0gcztcclxuICAgICAgY29uc3QgZWxlbWVudCA9IHtcclxuICAgICAgICBrZXk6IFNVTV9QUkVGSVggKyBpLFxyXG4gICAgICAgIHZhbHVlOiBzLnRpdGxlLFxyXG4gICAgICAgIGV4cGxvcmFibGU6ICFpc0Z1bmN0aW9uKHMuY2FsY3VsYXRlKSxcclxuICAgICAgICBhY2N1bXVsYXRlOiBzLmFjY3VtdWxhdGUsXHJcbiAgICAgICAgcHJlY2lzaW9uOiBzLnByZWNpc2lvbiB8fCB0aGlzLlBSRUNJU0lPTixcclxuICAgICAgICBmb3JtYXQ6IHMuZm9ybWF0LFxyXG4gICAgICAgIGluZGV4OiBpXHJcbiAgICAgIH0gYXMgSGVhZGVySW5mbztcclxuICAgICAgbGV0IGogPSAwO1xyXG4gICAgICBpZiAoYXhpcyA9PT0gJ3hBeGlzJykge1xyXG4gICAgICAgIHdoaWxlIChqIDwgdGhpcy5jb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29sdW1uc1tqXS5rZXkgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucy5zcGxpY2UoaiArIDEsIDAsIGVsZW1lbnQpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGorKztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGogPT09IHRoaXMuY29sdW1ucy5sZW5ndGgpXHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnMucHVzaChlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB3aGlsZSAoaiA8IHRoaXMucm93cy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnJvd3Nbal0ua2V5ID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvd3Muc3BsaWNlKGogKyAxLCAwLCBlbGVtZW50KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBqKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChqID09PSB0aGlzLnJvd3MubGVuZ3RoKVxyXG4gICAgICAgICAgdGhpcy5yb3dzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIGNvbnN0IHByb2dyZXNzVGFzayA9IHNldFRpbWVvdXQoKCkgPT5cclxuICAgICAgdGhpcy5sb2FkaW5nQ2hhbmdlLm5leHQodGhpcy5sb2FkaW5nID0gdHJ1ZSlcclxuICAgICAgLCBMT0FESU5HX0RFTEFZKTtcclxuICAgIHRoaXMuX3ByZXBhcmUudGhlbigoKSA9PiB0aGlzLl9zZXJ2aWNlLnNlcmllcyh0aGlzLmN1YmUubmFtZSwgdGhpcy5feEF4aXMsIHtcclxuICAgICAgc2VyaWVzOiB0aGlzLl9zZXJpZXMsXHJcbiAgICAgIGluZGljZXM6IHRoaXMuX2luZGljZXMsXHJcbiAgICAgIGZpbHRlcnM6IHRoaXMuZmlsdGVycyxcclxuICAgICAgc2NvcGU6IHRoaXMuc2NvcGVcclxuICAgIH0gYXMgYW55KS5waXBlKFxyXG4gICAgICBtb2RlbGl6ZSgpLCBmaXJzdCgpKS5zdWJzY3JpYmUoZCA9PiB7XHJcbiAgICAgICAgdGhpcy5fZGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZCkpO1xyXG4gICAgICAgIHRoaXMuX3RvdGFscyhkKTtcclxuICAgICAgICB0aGlzLl9zdW0gJiYgdGhpcy5fY2FsY3VsYXRlc3VtKGQpO1xyXG4gICAgICAgIHRoaXMuX3N0cmluZ2Z5KGQpO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGQgYXMgYW55O1xyXG4gICAgICB9LFxyXG4gICAgICAgIChlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fc2IuZXJyb3IoZS5zdGF0dXMgPT09IDQwMSA/ICdVbmF1dGhvcml6ZWQnIDogbnVsbCk7XHJcbiAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHByb2dyZXNzVGFzayk7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdDaGFuZ2UubmV4dCh0aGlzLmxvYWRpbmcgPSBmYWxzZSk7XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3N0cmluZ2Z5KGRhdGE6IERhdGFNYXApIHtcclxuICAgIGNvbnN0IGZtdCA9ICh4QXhpcywgc2VyaWVzKSA9PlxyXG4gICAgICBkYXRhW3hBeGlzXVtzZXJpZXNdID0gZm9ybWF0TnVtYmVyKGRhdGFbeEF4aXNdW3Nlcmllc10gfHwgMCwgdGhpcy5MQU5HVUFHRSwgdGhpcy5QUkVDSVNJT04pIGFzIGFueTtcclxuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICBpZiAoYy5pbmRleCAhPT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICAgIHRoaXMuaW5kaWNlcyAmJiB0aGlzLmluZGljZXMuZm9yRWFjaChpID0+XHJcbiAgICAgICAgZm10KGkubmFtZSwgYy5rZXkpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucm93cy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICAgIHIuaW5kZXggPT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgZm10KHIua2V5LCBjLmtleSlcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfdG90YWxzKGRhdGE6IERhdGFNYXApIHtcclxuICAgIGxldCBncmFuZCA9IDA7XHJcbiAgICB0aGlzLmluZGljZXMgJiYgdGhpcy5pbmRpY2VzLmZvckVhY2goaSA9PiB7XHJcbiAgICAgIGxldCByb3cgPSBkYXRhW2kubmFtZV07XHJcbiAgICAgIGlmICghcm93KSByb3cgPSBkYXRhW2kubmFtZV0gPSB7fTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbGV0IHN1bSA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgeCBpbiByb3cpXHJcbiAgICAgICAgICBzdW0gKz0gcm93W3hdO1xyXG4gICAgICAgIHJvd1snX3RvdGFsJ10gPSB0aGlzLl9mb3JtYXQoc3VtKTtcclxuICAgICAgICBncmFuZCArPSBzdW07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5yb3dzLmZvckVhY2gociA9PiB7XHJcbiAgICAgIGlmIChyLmFjY3VtdWxhdGUgPT09IGZhbHNlKSByZXR1cm47XHJcbiAgICAgIGxldCByb3cgPSBkYXRhW3Iua2V5XTtcclxuICAgICAgaWYgKCFyb3cpIHJvdyA9IGRhdGFbci5rZXldID0ge1xyXG4gICAgICAgICdfdG90YWwnOiAnMCcgYXMgYW55XHJcbiAgICAgIH07XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCBzdW0gPSAwO1xyXG4gICAgICAgIGZvciAobGV0IHggaW4gcm93KVxyXG4gICAgICAgICAgc3VtICs9IHJvd1t4XTtcclxuICAgICAgICByb3dbJ190b3RhbCddID0gdGhpcy5fZm9ybWF0KHN1bSwgcik7XHJcbiAgICAgICAgZ3JhbmQgKz0gc3VtICogLTE7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgY29uc3QgdG90YWxzID0gZGF0YVsnX3RvdGFsJ10gPSB0aGlzLnRvdGFscyA9IHt9O1xyXG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goYyA9PiB7XHJcbiAgICAgIGlmIChjLmFjY3VtdWxhdGUgPT09IGZhbHNlKSByZXR1cm47XHJcbiAgICAgIGxldCBzdW0gPSAwO1xyXG4gICAgICBmb3IgKGxldCBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IGRhdGFba2V5XVtjLmtleV07XHJcbiAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgc3VtICs9IHRoaXMuX2luZGljZXMgJiYgdGhpcy5faW5kaWNlcy5pbmRleE9mKGtleSkgPiAtMSA/IHZhbCA6IC12YWw7XHJcbiAgICAgIH1cclxuICAgICAgdG90YWxzW2Mua2V5XSA9IHRoaXMuX2Zvcm1hdChzdW0sIGMpO1xyXG4gICAgfSk7XHJcbiAgICB0b3RhbHNbJ19ncmFuZCddID0gdGhpcy5fZm9ybWF0KGdyYW5kKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY2FsY3VsYXRlc3VtKGRhdGE6IERhdGFNYXApIHtcclxuICAgIHRoaXMuX3N1bS5mb3JFYWNoKChzLCBpKSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgYXhpcywgdmFsdWUsIGNhbGN1bGF0ZSwgYWNjdW11bGF0ZSB9ID0gcztcclxuICAgICAgY29uc3QgbmFtZSA9IFNVTV9QUkVGSVggKyBpO1xyXG4gICAgICBpZiAoYXhpcyA9PT0gJ3hBeGlzJykge1xyXG4gICAgICAgIGxldCB0b3RhbCA9IDA7XHJcbiAgICAgICAgdGhpcy5yb3dzLmZvckVhY2gociA9PiB7XHJcbiAgICAgICAgICBpZiAoci5hY2N1bXVsYXRlID09PSBmYWxzZSkgcmV0dXJuO1xyXG4gICAgICAgICAgY29uc3Qgcm93ID0gZGF0YVtyLmtleV07XHJcbiAgICAgICAgICBpZiAoIXJvdylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgbGV0IHN1bSA9IDAsIGogPSAwO1xyXG4gICAgICAgICAgd2hpbGUgKGogPCB0aGlzLmNvbHVtbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGxldCBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbal0sIGtleSA9IGNvbHVtbi5rZXk7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4uaW5kZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGN1bGF0ZSkpIHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWwgPSAoY2FsY3VsYXRlIGFzIENhbGN1bGF0ZUZuKShyLmtleSwgdGhpcy5fZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgIHN1bSArPSB2YWw7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbCA9IHJvd1trZXldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICBzdW0gKz0gdmFsO1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gdmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBqKys7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByb3dbbmFtZV0gPSB0aGlzLl9mb3JtYXQoc3VtLCBzKTtcclxuICAgICAgICAgIHRvdGFsICs9IHN1bTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoYWNjdW11bGF0ZSAhPT0gZmFsc2UpXHJcbiAgICAgICAgICBkYXRhWydfdG90YWwnXVtuYW1lXSA9IHRoaXMuX2Zvcm1hdCh0b3RhbCk7XHJcbiAgICAgICAgdGhpcy5pbmRpY2VzICYmIHRoaXMuaW5kaWNlcy5mb3JFYWNoKGkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgcm93ID0gZGF0YVtpLm5hbWVdO1xyXG4gICAgICAgICAgaWYgKCFyb3cpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIGxldCBzdW0gPSAwLCBqID0gMDtcclxuICAgICAgICAgIHdoaWxlIChqIDwgdGhpcy5jb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBsZXQga2V5ID0gdGhpcy5jb2x1bW5zW2pdLmtleTtcclxuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsY3VsYXRlKSkge1xyXG4gICAgICAgICAgICAgIGxldCB2YWwgPSAoY2FsY3VsYXRlIGFzIENhbGN1bGF0ZUZuKShpLm5hbWUsIHRoaXMuX2RhdGEpO1xyXG4gICAgICAgICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgIHN1bSArPSB2YWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbCA9IHJvd1trZXldO1xyXG4gICAgICAgICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgIHN1bSArPSB2YWw7XHJcbiAgICAgICAgICAgICAgaWYgKGtleSA9PT0gdmFsdWUpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBqKys7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByb3dbbmFtZV0gPSB0aGlzLl9mb3JtYXQoc3VtKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBkYXRhW25hbWVdID0ge307XHJcbiAgICAgICAgbGV0IHRvdGFsID0gMDtcclxuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgIGlmIChjLmV4cGxvcmFibGUgPT09IGZhbHNlKSByZXR1cm47XHJcbiAgICAgICAgICBsZXQgc3VtID0gMCwgaiA9IDA7XHJcbiAgICAgICAgICB3aGlsZSAoaiA8IHRoaXMucm93cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IHJvdyA9IHRoaXMucm93c1tqXSwga2V5ID0gcm93LmtleTtcclxuICAgICAgICAgICAgaWYgKHJvdy5pbmRleCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsY3VsYXRlKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbCA9IChjYWxjdWxhdGUgYXMgQ2FsY3VsYXRlRm4pKGMua2V5LCB0aGlzLl9kYXRhKTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgc3VtICs9IHZhbDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZHJvdyA9IGRhdGFba2V5XTtcclxuICAgICAgICAgICAgICAgIGlmIChkcm93KSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSBkcm93W2Mua2V5XTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgIHN1bSArPSB2YWw7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBqKys7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkYXRhW25hbWVdW2Mua2V5XSA9IHRoaXMuX2Zvcm1hdChzdW0sIHMpO1xyXG4gICAgICAgICAgaWYgKGMuaW5kZXggPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgdG90YWwgKz0gc3VtO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChhY2N1bXVsYXRlICE9PSBmYWxzZSlcclxuICAgICAgICAgIGRhdGFbbmFtZV1bJ190b3RhbCddID0gdGhpcy5fZm9ybWF0KHRvdGFsKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2Zvcm1hdCh2YWwsIG9wdGlvbnM/OiB7IGZvcm1hdD86IHN0cmluZywgcHJlY2lzaW9uPzogc3RyaW5nIH0pOiBhbnkge1xyXG4gICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAncGVyY2VudCcpXHJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFBlcmNlbnQodmFsLCB0aGlzLkxBTkdVQUdFLCBvcHRpb25zLnByZWNpc2lvbik7XHJcbiAgICAgIGVsc2UgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAnY3VycmVuY3knKVxyXG4gICAgICAgIHJldHVybiBmb3JtYXRDdXJyZW5jeSh2YWwsIHRoaXMuTEFOR1VBR0UsIHRoaXMuU1lNQk9MLCB0aGlzLkNVUlJFTkNZLCBvcHRpb25zLnByZWNpc2lvbik7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5DVVJSRU5DWSlcclxuICAgICAgcmV0dXJuIGZvcm1hdEN1cnJlbmN5KHZhbCwgdGhpcy5MQU5HVUFHRSwgdGhpcy5TWU1CT0wsIHRoaXMuQ1VSUkVOQ1ksIHRoaXMuUFJFQ0lTSU9OKTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIGZvcm1hdE51bWJlcih2YWwsIHRoaXMuTEFOR1VBR0UsIHRoaXMuUFJFQ0lTSU9OKTtcclxuICB9XHJcbiAgZXhwbG9yZShjb2x1bW46IEhlYWRlckluZm8sIHJvdzogSGVhZGVySW5mbykge1xyXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aXZlKSByZXR1cm47XHJcbiAgICBsZXQgeDogQXhpc1R5cGUsIHNlcmllczogQXhpc1R5cGU7XHJcbiAgICBjb25zdCBheGVzID0geyAuLi50aGlzLmZpbHRlcnMgfSBhcyBBeGVzTWFwO1xyXG4gICAgaWYgKGNvbHVtbi5pbmRleCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICB4ID0gY29sdW1uLmtleTtcclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgeyB2YWx1ZSwgY2FsY3VsYXRlIH0gPSB0aGlzLl9zdW1bY29sdW1uLmluZGV4XTtcclxuICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsY3VsYXRlKSkgcmV0dXJuO1xyXG4gICAgICB4ID0gW10gYXMgc3RyaW5nW107XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGNvbHVtbiA9IHRoaXMuY29sdW1uc1tpXTtcclxuICAgICAgICBpZiAoY29sdW1uLmluZGV4ICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICBsZXQga2V5ID0gY29sdW1uLmtleTtcclxuICAgICAgICB4LnB1c2goa2V5KTtcclxuICAgICAgICBpZiAoa2V5ID09PSB2YWx1ZSlcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocm93LmluZGV4ID09PSB1bmRlZmluZWQpXHJcbiAgICAgIHNlcmllcyA9IHJvdy5rZXk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IHsgdmFsdWUsIGNhbGN1bGF0ZSB9ID0gdGhpcy5fc3VtW3Jvdy5pbmRleF07XHJcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGN1bGF0ZSkpIHJldHVybjtcclxuICAgICAgc2VyaWVzID0gW10gYXMgc3RyaW5nW107XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHJvdyA9IHRoaXMucm93c1tpXTtcclxuICAgICAgICBpZiAocm93LmluZGV4ICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICBsZXQga2V5ID0gcm93LmtleTtcclxuICAgICAgICBzZXJpZXMucHVzaChrZXkpO1xyXG4gICAgICAgIGlmIChrZXkgPT09IHZhbHVlKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGF4ZXNbdGhpcy54QXhpcy5uYW1lXSA9IHg7XHJcbiAgICBheGVzW3RoaXMuc2VyaWVzLm5hbWVdID0gc2VyaWVzO1xyXG4gICAgdGhpcy5vbkV4cGxvcmUuZW1pdChheGVzKTtcclxuICB9XHJcbiAgZXhwb3J0KCkge1xyXG4gICAgY29uc3QgbnVtYmVyRm9ybWF0ID0gdGhpcy5fc2VydmljZS5udW1iZXJGb3JtYXQsXHJcbiAgICAgIGNlbGxzID0gW10gYXMgQ2VsbFtdLFxyXG4gICAgICByb3dzID0gW3sgaW5kZXg6IDEsIGNlbGxzIH1dO1xyXG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGMsIGopID0+IGNlbGxzLnB1c2goe1xyXG4gICAgICBpbmRleDogaiArIDIsXHJcbiAgICAgIHZhbHVlOiBjLnZhbHVlLCBzdHlsZTogeyBib2xkOiB0cnVlIH1cclxuICAgIH0pKTtcclxuXHJcbiAgICBsZXQgaSA9IDE7XHJcbiAgICB0aGlzLmluZGljZXMgJiYgdGhpcy5pbmRpY2VzLmZvckVhY2goeCA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhW3gubmFtZV07XHJcbiAgICAgIGNvbnN0IGNlbGxzID0gW3sgaW5kZXg6IDEsIHZhbHVlOiB4LnRpdGxlLCBzdHlsZTogeyBib2xkOiB0cnVlIH0gfV0gYXMgQ2VsbFtdO1xyXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoYywgaikgPT4gY2VsbHMucHVzaCh7XHJcbiAgICAgICAgaW5kZXg6IGogKyAyLFxyXG4gICAgICAgIHZhbHVlOiBkYXRhW2Mua2V5XSAhPT0gdW5kZWZpbmVkID8gZGF0YVtjLmtleV0gOiAwXHJcbiAgICAgIH0pKTtcclxuICAgICAgcm93cy5wdXNoKHtcclxuICAgICAgICBpbmRleDogaSArIDEsXHJcbiAgICAgICAgY2VsbHNcclxuICAgICAgfSk7XHJcbiAgICAgIGkrKztcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yb3dzLmZvckVhY2gociA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhW3Iua2V5XSxcclxuICAgICAgICBjZWxscyA9IFt7IGluZGV4OiAxLCB2YWx1ZTogci52YWx1ZSB9XSBhcyBDZWxsW107XHJcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjLCBqKSA9PiBjZWxscy5wdXNoKHtcclxuICAgICAgICB0eXBlOiAnbnVtYmVyJyxcclxuICAgICAgICBpbmRleDogaiArIDEsXHJcbiAgICAgICAgdmFsdWU6IGRhdGFbYy5rZXldICE9PSB1bmRlZmluZWQgPyBkYXRhW2Mua2V5XSA6IDAsXHJcbiAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgIG51bWJlckZvcm1hdCxcclxuICAgICAgICAgIGhBbGlnbjogJ3JpZ2h0JyxcclxuICAgICAgICB9XHJcbiAgICAgIH0gYXMgQ2VsbCkpO1xyXG4gICAgICByb3dzLnB1c2goe1xyXG4gICAgICAgIGluZGV4OiBpICsgMixcclxuICAgICAgICBjZWxsc1xyXG4gICAgICB9IGFzIFJvdyk7XHJcbiAgICAgIGkrKztcclxuICAgIH0pO1xyXG4gICAgY29uc3QgYm9vayA9IG5ldyBXb3JrYm9vayhcclxuICAgICAge1xyXG4gICAgICAgIHdvcmtzaGVldHM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZW5hYmxlUnRsOiB0aGlzLl9zZXNzaW9uLmludmVyc2UsXHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1NoZWV0TicsIDEpLFxyXG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnMubWFwKChfLCBpKSA9PiAoeyBpbmRleDogaSArIDEsIHdpZHRoOiAxNTAgfSBhcyBDb2x1bW4pKSxcclxuICAgICAgICAgICAgcm93cyxcclxuICAgICAgICAgIH0gYXMgV29ya3NoZWV0LFxyXG4gICAgICAgIF0sXHJcbiAgICAgIH0sXHJcbiAgICAgICd4bHN4J1xyXG4gICAgKTtcclxuICAgIHRoaXMuX3NlcnZpY2UubmFtZU9mKHRoaXMuZmlsdGVycywgdGhpcy5jdWJlLm5hbWUpLnN1YnNjcmliZShuID0+XHJcbiAgICAgIGJvb2suc2F2ZShgJHtufS54bHN4YCkpO1xyXG4gIH1cclxuICBtb3ZlKHgsIHkpIHtcclxuICAgIGxldCByb3dJbmRleCA9IDA7XHJcbiAgICBmb3IgKGxldCBiID0gMDsgYiA8IHRoaXMudGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudEJvZGllcy5sZW5ndGg7IGIrKykge1xyXG4gICAgICBsZXQgdEJvZHkgPSB0aGlzLnRhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50LnRCb2RpZXMuaXRlbShiKTtcclxuICAgICAgZm9yIChsZXQgciA9IDA7IHIgPCB0Qm9keS5yb3dzLmxlbmd0aDsgcisrKSB7XHJcbiAgICAgICAgbGV0IHJvdyA9IHRCb2R5LnJvd3MuaXRlbShyKTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHJvdy5jZWxscy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgbGV0IGNlbGwgPSByb3cuY2VsbHMuaXRlbShjKTtcclxuICAgICAgICAgIGlmIChjID09PSB4KVxyXG4gICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5hZGQoJ2NlbGwteCcpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5yZW1vdmUoJ2NlbGwteCcpO1xyXG4gICAgICAgICAgaWYgKHJvd0luZGV4ID09PSB5KVxyXG4gICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5hZGQoJ2NlbGwteScpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5yZW1vdmUoJ2NlbGwteScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb3dJbmRleCsrO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCB0Rm9vdCA9IHRoaXMudGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudEZvb3QsIHJvdyA9IHRGb290LnJvd3NbMF07XHJcbiAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgcm93LmNlbGxzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgbGV0IGNlbGwgPSByb3cuY2VsbHMuaXRlbShjKTtcclxuICAgICAgICBpZiAoYyA9PT0geClcclxuICAgICAgICAgIGNlbGwuY2xhc3NMaXN0LmFkZCgnY2VsbC14Jyk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgY2VsbC5jbGFzc0xpc3QucmVtb3ZlKCdjZWxsLXgnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG50eXBlIERhdGFNYXAgPSB7IFtzZXJpZXM6IHN0cmluZ106IHsgW3hBeGlzOiBzdHJpbmddOiBudW1iZXI7IH07IH07XHJcblxyXG5leHBvcnQgdHlwZSBTdW1TZXR0aW5ncyA9IHtcclxuICB2YWx1ZT86IHN0cmluZyB8IG51bWJlcjtcclxuICBheGlzOiAnc2VyaWVzJyB8ICd4QXhpcyc7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBmb3JtYXQ/OiAncGVyY2VudCcgfCAnY3VycmVuY3knIHwgJ251bWJlcic7XHJcbiAgcHJlY2lzaW9uPzogc3RyaW5nO1xyXG4gIGFjY3VtdWxhdGU/OiBib29sZWFuO1xyXG4gIGNhbGN1bGF0ZT86ICdxdWFydGVyJyB8ICd5ZWFyJyB8ICdtb250aCcgfCBDYWxjdWxhdGVGbjtcclxufVxyXG5cclxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIENhbGN1bGF0ZUZuIHtcclxuICAodmFsdWU6IHN0cmluZywgZGF0YTogeyBbc2VyaWVzOiBzdHJpbmddOiB7IFt4QXhpczogc3RyaW5nXTogbnVtYmVyOyB9OyB9KTogbnVtYmVyO1xyXG59XHJcblxyXG50eXBlIEhlYWRlckluZm8gPSB7XHJcbiAga2V5OiBzdHJpbmc7XHJcbiAgdmFsdWU6IGFueTtcclxuICBmb3JtYXQ/OiAncGVyY2VudCcgfCAnY3VycmVuY3knIHwgJ251bWJlcic7XHJcbiAgcHJlY2lzaW9uPzogc3RyaW5nO1xyXG4gIGFjY3VtdWxhdGU/OiBib29sZWFuO1xyXG4gIGV4cGxvcmFibGU/OiBib29sZWFuO1xyXG4gIGluZGV4PzogbnVtYmVyO1xyXG59O1xyXG5pbnRlcmZhY2UgQ2VsbCB7IH1cclxuIiwiPHRhYmxlICN0YWJsZSBjbGFzcz1cIm1hdC10YWJsZSBjdWJlLXRhYmxlXCIgKG1vdXNlbGVhdmUpPVwibW92ZSgtMSwgLTEpXCIgKm5nSWY9XCJkYXRhXCI+XHJcbiAgPHRoZWFkPlxyXG4gICAgPCEtLSBoZWFkZXJzIC0tPlxyXG4gICAgPHRyIGNsYXNzPVwibWF0LXJvd1wiPlxyXG4gICAgICA8dGg+PC90aD5cclxuICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IHggPSBpbmRleFwiIChtb3VzZWVudGVyKT1cIm1vdmUoeCArIDEsIC0yKVwiIGNsYXNzPVwibWF0LWhlYWRlci1jZWxsXCI+XHJcbiAgICAgICAge3sgY29sdW1uLnZhbHVlIH19XHJcbiAgICAgIDwvdGg+XHJcbiAgICAgIDx0aCBjbGFzcz1cIm1hdC1oZWFkZXItY2VsbFwiPnt7eEF4aXNUb3RhbExhYmVsfX08L3RoPlxyXG4gICAgPC90cj5cclxuICA8L3RoZWFkPlxyXG4gIDx0Ym9keT5cclxuICAgIDwhLS0gaW5kaWNlcyAtLT5cclxuICAgIDx0ciBjbGFzcz1cIm1hdC1yb3cgY3ViZS1pbmRleFwiICpuZ0Zvcj1cImxldCBpbmRleCBvZiBpbmRpY2VzOyBsZXQgeSA9IGluZGV4XCI+XHJcbiAgICAgIDx0aCBjbGFzcz1cIm1hdC1oZWFkZXItY2VsbFwiIChtb3VzZWVudGVyKT1cIm1vdmUoMCwgeSlcIj57e2luZGV4LnRpdGxlfX08L3RoPlxyXG4gICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyBsZXQgeCA9IGluZGV4XCIgY2xhc3M9XCJtYXQtY2VsbCBmaWd1cmVcIiAobW91c2VlbnRlcik9XCJtb3ZlKHggKyAxLCB5KVwiPlxyXG4gICAgICAgIHt7IGRhdGFbaW5kZXgubmFtZV1bY29sdW1uLmtleV0gfX1cclxuICAgICAgPC90ZD5cclxuICAgICAgPHRoIGNsYXNzPVwibWF0LWNlbGwgZmlndXJlXCIgKG1vdXNlZW50ZXIpPVwibW92ZSgwLCB5KVwiPlxyXG4gICAgICAgIHt7IGRhdGFbaW5kZXgubmFtZV1bJ190b3RhbCddIH19XHJcbiAgICAgIDwvdGg+XHJcbiAgICA8L3RyPlxyXG4gIDwvdGJvZHk+XHJcbiAgPHRib2R5PlxyXG4gICAgPCEtLSByb3dzIC0tPlxyXG4gICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2Ygcm93czsgbGV0IHkgPSBpbmRleFwiIGNsYXNzPVwibWF0LXJvd1wiPlxyXG4gICAgICA8dGggY2xhc3M9XCJtYXQtaGVhZGVyLWNlbGxcIiAobW91c2VlbnRlcik9XCJtb3ZlKC0yLCB5ICsgaW5kaWNlcy5sZW5ndGgpXCI+e3sgcm93LnZhbHVlIH19PC90aD5cclxuICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IHggPSBpbmRleFwiIGNsYXNzPVwibWF0LWNlbGwgZmlndXJlXCIgKG1vdXNlZW50ZXIpPVwibW92ZSh4ICsgMSwgeSArIGluZGljZXMubGVuZ3RoKVwiPlxyXG4gICAgICAgIDxzcGFuIFtjbGFzcy5jbGlja2FibGVdPVwiaW50ZXJhY3RpdmUgJiYgY29sdW1uLmV4cGxvcmFibGUgIT09IGZhbHNlICYmIHJvdy5leHBsb3JhYmxlICE9PSBmYWxzZVwiIChjbGljayk9XCJleHBsb3JlKGNvbHVtbiwgcm93KVwiPlxyXG4gICAgICAgICAge3sgZGF0YVtyb3cua2V5XVtjb2x1bW4ua2V5XSB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC90ZD5cclxuICAgICAgPHRoIGNsYXNzPVwibWF0LWNlbGwgZmlndXJlXCIgKG1vdXNlZW50ZXIpPVwibW92ZSgtMSwgeSArIGluZGljZXMubGVuZ3RoKVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhW3Jvdy5rZXldWydfdG90YWwnXSAhPT0gdW5kZWZpbmVkXCI+XHJcbiAgICAgICAgICB7eyBkYXRhW3Jvdy5rZXldWydfdG90YWwnXSB9fVxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L3RoPlxyXG4gICAgPC90cj5cclxuICA8L3Rib2R5PlxyXG4gIDx0Zm9vdD5cclxuICAgIDwhLS0gZm9vdGVyIC0tPlxyXG4gICAgPHRyIGNsYXNzPVwibWF0LXJvd1wiPlxyXG4gICAgICA8dGggY2xhc3M9XCJtYXQtaGVhZGVyLWNlbGxcIj57e3Nlcmllc1RvdGFsTGFiZWx9fTwvdGg+XHJcbiAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IGxldCB4ID0gaW5kZXhcIiBjbGFzcz1cIm1hdC1jZWxsIGZpZ3VyZVwiIChtb3VzZWVudGVyKT1cIm1vdmUoeCArIDEsIC0yKVwiXHJcbiAgICAgICAgICBbY2xhc3MubmVnYXRpdmUtZmlndXJlXT1cInRvdGFsc1tjb2x1bW4ua2V5XS5zdGFydHNXaXRoKCctJylcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidG90YWxzW2NvbHVtbi5rZXldICE9PSB1bmRlZmluZWRcIj5cclxuICAgICAgICAgIHt7IHRvdGFsc1tjb2x1bW4ua2V5XSB9fVxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L3RkPlxyXG4gICAgICA8dGggY2xhc3M9XCJtYXQtY2VsbCBmaWd1cmVcIj57eyB0b3RhbHNbJ19ncmFuZCddIH19PC90aD5cclxuICAgIDwvdHI+XHJcbiAgPC90Zm9vdD5cclxuPC90YWJsZT5cclxuIl19
|