UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

213 lines 29 kB
import { __decorate, __metadata } from "tslib"; import { ChangeDetectionStrategy, Component, ContentChild, Directive, EventEmitter, Input, Output, QueryList, TemplateRef, ViewChildren, } from '@angular/core'; import { ValueHook } from '../../core/utils/public-api'; import { ConnectionStatus } from '../constants'; import { TerminalComponent } from '../terminal/component'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@alauda/ui"; import * as i3 from "../../widget/text-ellipsis/component"; import * as i4 from "../terminal/component"; import * as i5 from "../../translate/translate.pipe"; const _c0 = (a0, a1) => [a0, a1]; const _c1 = a0 => ({ index: a0 }); function TerminalGroupComponent_aui_tab_group_0_aui_tab_1_div_1_aui_icon_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "aui-icon", 12); i0.ɵɵpipe(1, "translate"); } if (rf & 2) { i0.ɵɵproperty("auiTooltip", i0.ɵɵpipeBind1(1, 1, "exec_connecting")); } } function TerminalGroupComponent_aui_tab_group_0_aui_tab_1_div_1_aui_icon_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "aui-icon", 13); } if (rf & 2) { const i_r4 = i0.ɵɵnextContext(2).index; i0.ɵɵnextContext(2); const disconnectedTip_r5 = i0.ɵɵreference(2); i0.ɵɵproperty("auiTooltip", disconnectedTip_r5)("auiTooltipContext", i0.ɵɵpureFunction1(2, _c1, i_r4)); } } function TerminalGroupComponent_aui_tab_group_0_aui_tab_1_div_1_aui_icon_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "aui-icon", 14); } if (rf & 2) { const option_r6 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵproperty("icon", option_r6.icon); } } function TerminalGroupComponent_aui_tab_group_0_aui_tab_1_div_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 7); i0.ɵɵtemplate(1, TerminalGroupComponent_aui_tab_group_0_aui_tab_1_div_1_aui_icon_1_Template, 2, 3, "aui-icon", 8)(2, TerminalGroupComponent_aui_tab_group_0_aui_tab_1_div_1_aui_icon_2_Template, 1, 4, "aui-icon", 9)(3, TerminalGroupComponent_aui_tab_group_0_aui_tab_1_div_1_aui_icon_3_Template, 1, 1, "aui-icon", 10); i0.ɵɵelement(4, "acl-text-ellipsis", 11); i0.ɵɵelementEnd(); } if (rf & 2) { const option_r6 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", i0.ɵɵpureFunction2(5, _c0, ctx_r1.ConnectionStatus.Connecting, ctx_r1.ConnectionStatus.ReConnecting).includes(ctx_r1.statusMap.get(option_r6))); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", i0.ɵɵpureFunction2(8, _c0, ctx_r1.ConnectionStatus.Disconnected, ctx_r1.ConnectionStatus.NoPermission).includes(ctx_r1.statusMap.get(option_r6))); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", ctx_r1.statusMap.get(option_r6) === ctx_r1.ConnectionStatus.Connected && option_r6.icon); i0.ɵɵadvance(); i0.ɵɵproperty("text", option_r6.label || option_r6.pod)("tailLength", 6); } } function TerminalGroupComponent_aui_tab_group_0_aui_tab_1_Template(rf, ctx) { if (rf & 1) { const _r3 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "aui-tab", 4); i0.ɵɵlistener("close", function TerminalGroupComponent_aui_tab_group_0_aui_tab_1_Template_aui_tab_close_0_listener() { const i_r4 = i0.ɵɵrestoreView(_r3).index; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.removeTerminal(i_r4)); }); i0.ɵɵtemplate(1, TerminalGroupComponent_aui_tab_group_0_aui_tab_1_div_1_Template, 5, 11, "div", 5); i0.ɵɵelementStart(2, "acl-terminal", 6); i0.ɵɵlistener("connectionStatusChange", function TerminalGroupComponent_aui_tab_group_0_aui_tab_1_Template_acl_terminal_connectionStatusChange_2_listener($event) { const option_r6 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.handleConnectionStatusChange(option_r6, $event)); })("socketReady", function TerminalGroupComponent_aui_tab_group_0_aui_tab_1_Template_acl_terminal_socketReady_2_listener($event) { const ctx_r6 = i0.ɵɵrestoreView(_r3); const option_r6 = ctx_r6.$implicit; const i_r4 = ctx_r6.index; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.socketReady.emit({ option: option_r6, socket: $event, index: i_r4 })); })("fallbackShell", function TerminalGroupComponent_aui_tab_group_0_aui_tab_1_Template_acl_terminal_fallbackShell_2_listener($event) { const option_r6 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.fallbackShell.emit({ option: option_r6, shell: $event })); }); i0.ɵɵelementEnd()(); } if (rf & 2) { const option_r6 = ctx.$implicit; const i_r4 = ctx.index; const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵproperty("closeable", true); i0.ɵɵadvance(2); i0.ɵɵproperty("option", option_r6)("index", i_r4)("extraButton", (ctx_r1.terminalExtraButton == null ? null : ctx_r1.terminalExtraButton.enable) ? ctx_r1.terminalExtraButtonRef : null)("extraContent", ctx_r1.terminalExtraContentRef); } } function TerminalGroupComponent_aui_tab_group_0_Template(rf, ctx) { if (rf & 1) { const _r1 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "aui-tab-group", 2); i0.ɵɵlistener("selectedIndexChange", function TerminalGroupComponent_aui_tab_group_0_Template_aui_tab_group_selectedIndexChange_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.selectedIndexChange.emit($event)); }); i0.ɵɵtemplate(1, TerminalGroupComponent_aui_tab_group_0_aui_tab_1_Template, 3, 5, "aui-tab", 3); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵproperty("lazy", true)("selectedIndex", ctx_r1.selectedIndex); i0.ɵɵadvance(); i0.ɵɵproperty("ngForOf", ctx_r1.terminalOptions)("ngForTrackBy", ctx_r1.trackByOption); } } function TerminalGroupComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) { const _r8 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1); i0.ɵɵpipe(2, "translate"); i0.ɵɵelementEnd(); i0.ɵɵelementStart(3, "button", 15); i0.ɵɵlistener("click", function TerminalGroupComponent_ng_template_1_Template_button_click_3_listener() { const i_r9 = i0.ɵɵrestoreView(_r8).index; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.reconnect(i_r9)); }); i0.ɵɵtext(4); i0.ɵɵpipe(5, "translate"); i0.ɵɵelementEnd(); } if (rf & 2) { i0.ɵɵadvance(); i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 2, "exec_disconnected_tip")); i0.ɵɵadvance(3); i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(5, 4, "reconnect"), " "); } } export class TerminalExtraButtonDirective { constructor() { this.enable = true; } static { this.ɵfac = function TerminalExtraButtonDirective_Factory(t) { return new (t || TerminalExtraButtonDirective)(); }; } static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: TerminalExtraButtonDirective, selectors: [["", "aclTerminalExtraButton", ""]], inputs: { enable: [0, "aclTerminalExtraButton", "enable"] } }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TerminalExtraButtonDirective, [{ type: Directive, args: [{ selector: '[aclTerminalExtraButton]', }] }], null, { enable: [{ type: Input, args: ['aclTerminalExtraButton'] }] }); })(); export class TerminalExtraContentDirective { static { this.ɵfac = function TerminalExtraContentDirective_Factory(t) { return new (t || TerminalExtraContentDirective)(); }; } static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: TerminalExtraContentDirective, selectors: [["", "aclTerminalExtraContent", ""]] }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TerminalExtraContentDirective, [{ type: Directive, args: [{ selector: '[aclTerminalExtraContent]', }] }], null, null); })(); export class TerminalGroupComponent { constructor() { this.ConnectionStatus = ConnectionStatus; this.hasActivatedMap = new Map(); this.selectedIndex = 0; this.terminalOptions = []; this.selectedIndexChange = new EventEmitter(); this.terminalOptionsChange = new EventEmitter(); this.socketReady = new EventEmitter(); this.fallbackShell = new EventEmitter(); this.statusMap = new Map(); } removeTerminal(index) { this.terminalOptionsChange.emit([ ...this.terminalOptions.slice(0, index), ...this.terminalOptions.slice(index + 1), ]); } trackByOption(_, option) { return option; } handleConnectionStatusChange(option, status) { this.statusMap.set(option, status); } reconnect(index) { this.terminals.get(index).reconnect(); } static { this.ɵfac = function TerminalGroupComponent_Factory(t) { return new (t || TerminalGroupComponent)(); }; } static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TerminalGroupComponent, selectors: [["acl-terminal-group"]], contentQueries: function TerminalGroupComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) { i0.ɵɵcontentQuery(dirIndex, TerminalExtraButtonDirective, 5); i0.ɵɵcontentQuery(dirIndex, TerminalExtraButtonDirective, 5, TemplateRef); i0.ɵɵcontentQuery(dirIndex, TerminalExtraContentDirective, 5, TemplateRef); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.terminalExtraButton = _t.first); i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.terminalExtraButtonRef = _t.first); i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.terminalExtraContentRef = _t.first); } }, viewQuery: function TerminalGroupComponent_Query(rf, ctx) { if (rf & 1) { i0.ɵɵviewQuery(TerminalComponent, 5); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.terminals = _t); } }, inputs: { selectedIndex: "selectedIndex", terminalOptions: "terminalOptions" }, outputs: { selectedIndexChange: "selectedIndexChange", terminalOptionsChange: "terminalOptionsChange", socketReady: "socketReady", fallbackShell: "fallbackShell" }, decls: 3, vars: 1, consts: [["disconnectedTip", ""], ["type", "card", 3, "lazy", "selectedIndex", "selectedIndexChange", 4, "ngIf"], ["type", "card", 3, "selectedIndexChange", "lazy", "selectedIndex"], [3, "closeable", "close", 4, "ngFor", "ngForOf", "ngForTrackBy"], [3, "close", "closeable"], ["class", "tw-flex", 4, "auiTabLabel"], [3, "connectionStatusChange", "socketReady", "fallbackShell", "option", "index", "extraButton", "extraContent"], [1, "tw-flex"], ["class", "tw-mr-4 tw-icon-l tw-text-primary", "icon", "spinner", 3, "auiTooltip", 4, "ngIf"], ["class", "tw-mr-4 tw-icon-l tw-text-red", "icon", "exclamation_triangle_s", "background", "triangle", 3, "auiTooltip", "auiTooltipContext", 4, "ngIf"], ["class", "tw-mr-4 tw-icon-l", 3, "icon", 4, "ngIf"], [3, "text", "tailLength"], ["icon", "spinner", 1, "tw-mr-4", "tw-icon-l", "tw-text-primary", 3, "auiTooltip"], ["icon", "exclamation_triangle_s", "background", "triangle", 1, "tw-mr-4", "tw-icon-l", "tw-text-red", 3, "auiTooltip", "auiTooltipContext"], [1, "tw-mr-4", "tw-icon-l", 3, "icon"], ["aui-button", "text", "size", "mini", 3, "click"]], template: function TerminalGroupComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtemplate(0, TerminalGroupComponent_aui_tab_group_0_Template, 2, 4, "aui-tab-group", 1)(1, TerminalGroupComponent_ng_template_1_Template, 6, 6, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor); } if (rf & 2) { i0.ɵɵproperty("ngIf", ctx.terminalOptions == null ? null : ctx.terminalOptions.length); } }, dependencies: [i1.NgForOf, i1.NgIf, i2.ButtonComponent, i2.IconComponent, i2.TabGroupComponent, i2.TabComponent, i2.TabLabelDirective, i2.TooltipDirective, i3.TextEllipsisComponent, i4.TerminalComponent, i5.TranslatePipe], styles: ["[_nghost-%COMP%] aui-tab-body, [_nghost-%COMP%] .aui-tab-body{display:block;width:100%;min-height:100%;height:100%}[_nghost-%COMP%] >aui-tab-group>.aui-tab-group{height:100%}[_nghost-%COMP%] >aui-tab-group>.aui-tab-group .aui-tab-group__body-wrapper{display:flex;flex:1 1 0;height:0}[_nghost-%COMP%] .aui-tab-body{display:flex}[_nghost-%COMP%] .aui-tab-body__content{display:flex;flex-direction:column;flex:1;width:100%}[_nghost-%COMP%] acl-terminal[_ngcontent-%COMP%]{flex:1;height:0}"], changeDetection: 0 }); } } __decorate([ ValueHook(function (index) { this.terminals?.get(index)?.focus(); if (this.terminals?.get(index) && !this.hasActivatedMap.get(index)) { this.hasActivatedMap.set(index, true); this.terminals.get(index)?.activateTerminal(); } }), __metadata("design:type", Object) ], TerminalGroupComponent.prototype, "selectedIndex", void 0); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TerminalGroupComponent, [{ type: Component, args: [{ selector: 'acl-terminal-group', changeDetection: ChangeDetectionStrategy.OnPush, template: "<aui-tab-group\n *ngIf=\"terminalOptions?.length\"\n type=\"card\"\n [lazy]=\"true\"\n [selectedIndex]=\"selectedIndex\"\n (selectedIndexChange)=\"selectedIndexChange.emit($event)\"\n>\n <aui-tab\n *ngFor=\"\n let option of terminalOptions;\n let i = index;\n trackBy: trackByOption\n \"\n [closeable]=\"true\"\n (close)=\"removeTerminal(i)\"\n >\n <div\n *auiTabLabel\n class=\"tw-flex\"\n >\n <aui-icon\n *ngIf=\"\n [ConnectionStatus.Connecting, ConnectionStatus.ReConnecting].includes(\n statusMap.get(option)\n )\n \"\n class=\"tw-mr-4 tw-icon-l tw-text-primary\"\n icon=\"spinner\"\n [auiTooltip]=\"'exec_connecting' | translate\"\n ></aui-icon>\n <aui-icon\n *ngIf=\"\n [\n ConnectionStatus.Disconnected,\n ConnectionStatus.NoPermission,\n ].includes(statusMap.get(option))\n \"\n class=\"tw-mr-4 tw-icon-l tw-text-red\"\n icon=\"exclamation_triangle_s\"\n background=\"triangle\"\n [auiTooltip]=\"disconnectedTip\"\n [auiTooltipContext]=\"{ index: i }\"\n ></aui-icon>\n <aui-icon\n *ngIf=\"\n statusMap.get(option) === ConnectionStatus.Connected && option.icon\n \"\n [icon]=\"option.icon\"\n class=\"tw-mr-4 tw-icon-l\"\n ></aui-icon>\n <acl-text-ellipsis\n [text]=\"option.label || option.pod\"\n [tailLength]=\"6\"\n ></acl-text-ellipsis>\n </div>\n <acl-terminal\n [option]=\"option\"\n [index]=\"i\"\n [extraButton]=\"\n terminalExtraButton?.enable ? terminalExtraButtonRef : null\n \"\n [extraContent]=\"terminalExtraContentRef\"\n (connectionStatusChange)=\"handleConnectionStatusChange(option, $event)\"\n (socketReady)=\"\n socketReady.emit({\n option,\n socket: $event,\n index: i,\n })\n \"\n (fallbackShell)=\"\n fallbackShell.emit({\n option,\n shell: $event,\n })\n \"\n ></acl-terminal>\n </aui-tab>\n</aui-tab-group>\n\n<ng-template\n #disconnectedTip\n let-i=\"index\"\n>\n <span>{{ 'exec_disconnected_tip' | translate }}</span>\n <button\n aui-button=\"text\"\n size=\"mini\"\n (click)=\"reconnect(i)\"\n >\n {{ 'reconnect' | translate }}\n </button>\n</ng-template>\n", styles: [":host ::ng-deep aui-tab-body,:host ::ng-deep .aui-tab-body{display:block;width:100%;min-height:100%;height:100%}:host ::ng-deep>aui-tab-group>.aui-tab-group{height:100%}:host ::ng-deep>aui-tab-group>.aui-tab-group .aui-tab-group__body-wrapper{display:flex;flex:1 1 0;height:0}:host ::ng-deep .aui-tab-body{display:flex}:host ::ng-deep .aui-tab-body__content{display:flex;flex-direction:column;flex:1;width:100%}:host acl-terminal{flex:1;height:0}\n"] }] }], null, { selectedIndex: [{ type: Input }], terminalOptions: [{ type: Input }], terminalExtraButton: [{ type: ContentChild, args: [TerminalExtraButtonDirective] }], terminalExtraButtonRef: [{ type: ContentChild, args: [TerminalExtraButtonDirective, { read: TemplateRef, }] }], terminalExtraContentRef: [{ type: ContentChild, args: [TerminalExtraContentDirective, { read: TemplateRef, }] }], selectedIndexChange: [{ type: Output }], terminalOptionsChange: [{ type: Output }], socketReady: [{ type: Output }], fallbackShell: [{ type: Output }], terminals: [{ type: ViewChildren, args: [TerminalComponent] }] }); })(); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TerminalGroupComponent, { className: "TerminalGroupComponent" }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2V4ZWMvdGVybWluYWwtZ3JvdXAvY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2V4ZWMvdGVybWluYWwtZ3JvdXAvdGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUNYLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7O0lDS3BELCtCQVNZOzs7SUFEVixvRUFBNEM7OztJQUU5QywrQkFZWTs7Ozs7SUFEVixBQURBLCtDQUE4Qix1REFDSTs7O0lBRXBDLCtCQU1ZOzs7SUFGVixxQ0FBb0I7OztJQS9CeEIsOEJBR0M7SUF3QkMsQUFiQSxBQVZBLGlIQVNDLG9HQWFBLHFHQU9BO0lBQ0Qsd0NBR3FCO0lBQ3ZCLGlCQUFNOzs7O0lBakNELGNBS1Q7SUFMUyxxS0FLVDtJQUtTLGNBTVQ7SUFOUyx1S0FNVDtJQU9TLGNBR1Q7SUFIUyw4R0FHVDtJQUlRLGNBQW1DO0lBQ25DLEFBREEsdURBQW1DLGlCQUNuQjs7OztJQTdDdEIsa0NBUUM7SUFEQywyTkFBUywyQkFBaUIsS0FBQztJQUUzQixrR0FHQztJQW9DRCx1Q0FxQkM7SUFOQyxBQVBBLEFBREEsaVJBQTBCLHNEQUE0QyxLQUFDLGdTQUU1RCx3QkFDVixrREFJQSxDQUNQLEtBRE8sa1BB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QyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUM7UUFDaEQsQ0FBQztJQUNILENBQUMsQ0FBQzs7NkRBRWdCO2lGQWJQLHNCQUFzQjtjQU5sQyxTQUFTOzJCQUNFLG9CQUFvQixtQkFHYix1QkFBdUIsQ0FBQyxNQUFNO2dCQWUvQyxhQUFhO2tCQURaLEtBQUs7WUFJTixlQUFlO2tCQURkLEtBQUs7WUFJTixtQkFBbUI7a0JBRGxCLFlBQVk7bUJBQUMsNEJBQTRCO1lBTTFDLHNCQUFzQjtrQkFIckIsWUFBWTttQkFBQyw0QkFBNEIsRUFBRTtvQkFDMUMsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO1lBTUQsdUJBQXVCO2tCQUh0QixZQUFZO21CQUFDLDZCQUE2QixFQUFFO29CQUMzQyxJQUFJLEVBQUUsV0FBVztpQkFDbEI7WUFJUSxtQkFBbUI7a0JBRDNCLE1BQU07WUFJRSxxQkFBcUI7a0JBRDdCLE1BQU07WUFJRSxXQUFXO2tCQURuQixNQUFNO1lBUUUsYUFBYTtrQkFEckIsTUFBTTtZQU9QLFNBQVM7a0JBRFIsWUFBWTttQkFBQyxpQkFBaUI7O2tGQWxEcEIsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBEaXJlY3RpdmUsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgVmFsdWVIb29rIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9wdWJsaWMtYXBpJztcbmltcG9ydCB7IENvbm5lY3Rpb25TdGF0dXMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgVGVybWluYWxDb21wb25lbnQgfSBmcm9tICcuLi90ZXJtaW5hbC9jb21wb25lbnQnO1xuaW1wb3J0IHsgVGVybWluYWxPcHRpb24gfSBmcm9tICcuLi90eXBlcyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1thY2xUZXJtaW5hbEV4dHJhQnV0dG9uXScsXG59KVxuZXhwb3J0IGNsYXNzIFRlcm1pbmFsRXh0cmFCdXR0b25EaXJlY3RpdmUge1xuICBASW5wdXQoJ2FjbFRlcm1pbmFsRXh0cmFCdXR0b24nKVxuICBlbmFibGU6IGJvb2xlYW4gfCAnJyA9IHRydWU7XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1thY2xUZXJtaW5hbEV4dHJhQ29udGVudF0nLFxufSlcbmV4cG9ydCBjbGFzcyBUZXJtaW5hbEV4dHJhQ29udGVudERpcmVjdGl2ZSB7fVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhY2wtdGVybWluYWwtZ3JvdXAnLFxuICB0ZW1wbGF0ZVVybDogJ3RlbXBsYXRlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnc3R5bGUuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGVybWluYWxHcm91cENvbXBvbmVudCB7XG4gIENvbm5lY3Rpb25TdGF0dXMgPSBDb25uZWN0aW9uU3RhdHVzO1xuXG4gIHByaXZhdGUgaGFzQWN0aXZhdGVkTWFwID0gbmV3IE1hcDxudW1iZXIsIGJvb2xlYW4+KCk7XG5cbiAgQFZhbHVlSG9vayhmdW5jdGlvbiAodGhpczogVGVybWluYWxHcm91cENvbXBvbmVudCwgaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMudGVybWluYWxzPy5nZXQoaW5kZXgpPy5mb2N1cygpO1xuICAgIGlmICh0aGlzLnRlcm1pbmFscz8uZ2V0KGluZGV4KSAmJiAhdGhpcy5oYXNBY3RpdmF0ZWRNYXAuZ2V0KGluZGV4KSkge1xuICAgICAgdGhpcy5oYXNBY3RpdmF0ZWRNYXAuc2V0KGluZGV4LCB0cnVlKTtcbiAgICAgIHRoaXMudGVybWluYWxzLmdldChpbmRleCk/LmFjdGl2YXRlVGVybWluYWwoKTtcbiAgICB9XG4gIH0pXG4gIEBJbnB1dCgpXG4gIHNlbGVjdGVkSW5kZXggPSAwO1xuXG4gIEBJbnB1dCgpXG4gIHRlcm1pbmFsT3B0aW9uczogVGVybWluYWxPcHRpb25bXSA9IFtdO1xuXG4gIEBDb250ZW50Q2hpbGQoVGVybWluYWxFeHRyYUJ1dHRvbkRpcmVjdGl2ZSlcbiAgdGVybWluYWxFeHRyYUJ1dHRvbjogVGVybWluYWxFeHRyYUJ1dHRvbkRpcmVjdGl2ZTtcblxuICBAQ29udGVudENoaWxkKFRlcm1pbmFsRXh0cmFCdXR0b25EaXJlY3RpdmUsIHtcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgfSlcbiAgdGVybWluYWxFeHRyYUJ1dHRvblJlZjogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQENvbnRlbnRDaGlsZChUZXJtaW5hbEV4dHJhQ29udGVudERpcmVjdGl2ZSwge1xuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICB9KVxuICB0ZXJtaW5hbEV4dHJhQ29udGVudFJlZjogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IHNlbGVjdGVkSW5kZXhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgdGVybWluYWxPcHRpb25zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUZXJtaW5hbE9wdGlvbltdPigpO1xuXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBzb2NrZXRSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIG9wdGlvbjogVGVybWluYWxPcHRpb247XG4gICAgc29ja2V0OiBXZWJTb2NrZXQ7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgfT4oKTtcblxuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgZmFsbGJhY2tTaGVsbCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIG9wdGlvbjogVGVybWluYWxPcHRpb247XG4gICAgc2hlbGw6IHN0cmluZztcbiAgfT4oKTtcblxuICBAVmlld0NoaWxkcmVuKFRlcm1pbmFsQ29tcG9uZW50KVxuICB0ZXJtaW5hbHM6IFF1ZXJ5TGlzdDxUZXJtaW5hbENvbXBvbmVudD47XG5cbiAgc3RhdHVzTWFwID0gbmV3IE1hcDxUZXJtaW5hbE9wdGlvbiwgQ29ubmVjdGlvblN0YXR1cz4oKTtcblxuICByZW1vdmVUZXJtaW5hbChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy50ZXJtaW5hbE9wdGlvbnNDaGFuZ2UuZW1pdChbXG4gICAgICAuLi50aGlzLnRlcm1pbmFsT3B0aW9ucy5zbGljZSgwLCBpbmRleCksXG4gICAgICAuLi50aGlzLnRlcm1pbmFsT3B0aW9ucy5zbGljZShpbmRleCArIDEpLFxuICAgIF0pO1xuICB9XG5cbiAgdHJhY2tCeU9wdGlvbihfOiBudW1iZXIsIG9wdGlvbjogVGVybWluYWxPcHRpb24pIHtcbiAgICByZXR1cm4gb3B0aW9uO1xuICB9XG5cbiAgaGFuZGxlQ29ubmVjdGlvblN0YXR1c0NoYW5nZShcbiAgICBvcHRpb246IFRlcm1pbmFsT3B0aW9uLFxuICAgIHN0YXR1czogQ29ubmVjdGlvblN0YXR1cyxcbiAgKSB7XG4gICAgdGhpcy5zdGF0dXNNYXAuc2V0KG9wdGlvbiwgc3RhdHVzKTtcbiAgfVxuXG4gIHJlY29ubmVjdChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy50ZXJtaW5hbHMuZ2V0KGluZGV4KS5yZWNvbm5lY3QoKTtcbiAgfVxufVxuIiwiPGF1aS10YWItZ3JvdXBcbiAgKm5nSWY9XCJ0ZXJtaW5hbE9wdGlvbnM/Lmxlbmd0aFwiXG4gIHR5cGU9XCJjYXJkXCJcbiAgW2xhenldPVwidHJ1ZVwiXG4gIFtzZWxlY3RlZEluZGV4XT1cInNlbGVjdGVkSW5kZXhcIlxuICAoc2VsZWN0ZWRJbmRleENoYW5nZSk9XCJzZWxlY3RlZEluZGV4Q2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4+XG4gIDxhdWktdGFiXG4gICAgKm5nRm9yPVwiXG4gICAgICBsZXQgb3B0aW9uIG9mIHRlcm1pbmFsT3B0aW9ucztcbiAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICB0cmFja0J5OiB0cmFja0J5T3B0aW9uXG4gICAgXCJcbiAgICBbY2xvc2VhYmxlXT1cInRydWVcIlxuICAgIChjbG9zZSk9XCJyZW1vdmVUZXJtaW5hbChpKVwiXG4gID5cbiAgICA8ZGl2XG4gICAgICAqYXVpVGFiTGFiZWxcbiAgICAgIGNsYXNzPVwidHctZmxleFwiXG4gICAgPlxuICAgICAgPGF1aS1pY29uXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgW0Nvbm5lY3Rpb25TdGF0dXMuQ29ubmVjdGluZywgQ29ubmVjdGlvblN0YXR1cy5SZUNvbm5lY3RpbmddLmluY2x1ZGVzKFxuICAgICAgICAgICAgc3RhdHVzTWFwLmdldChvcHRpb24pXG4gICAgICAgICAgKVxuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cInR3LW1yLTQgdHctaWNvbi1sIHR3LXRleHQtcHJpbWFyeVwiXG4gICAgICAgIGljb249XCJzcGlubmVyXCJcbiAgICAgICAgW2F1aVRvb2x0aXBdPVwiJ2V4ZWNfY29ubmVjdGluZycgfCB0cmFuc2xhdGVcIlxuICAgICAgPjwvYXVpLWljb24+XG4gICAgICA8YXVpLWljb25cbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBbXG4gICAgICAgICAgICBDb25uZWN0aW9uU3RhdHVzLkRpc2Nvbm5lY3RlZCxcbiAgICAgICAgICAgIENvbm5lY3Rpb25TdGF0dXMuTm9QZXJtaXNzaW9uLFxuICAgICAgICAgIF0uaW5jbHVkZXMoc3RhdHVzTWFwLmdldChvcHRpb24pKVxuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cInR3LW1yLTQgdHctaWNvbi1sIHR3LXRleHQtcmVkXCJcbiAgICAgICAgaWNvbj1cImV4Y2xhbWF0aW9uX3RyaWFuZ2xlX3NcIlxuICAgICAgICBiYWNrZ3JvdW5kPVwidHJpYW5nbGVcIlxuICAgICAgICBbYXVpVG9vbHRpcF09XCJkaXNjb25uZWN0ZWRUaXBcIlxuICAgICAgICBbYXVpVG9vbHRpcENvbnRleHRdPVwieyBpbmRleDogaSB9XCJcbiAgICAgID48L2F1aS1pY29uPlxuICAgICAgPGF1aS1pY29uXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgc3RhdHVzTWFwLmdldChvcHRpb24pID09PSBDb25uZWN0aW9uU3RhdHVzLkNvbm5lY3RlZCAmJiBvcHRpb24uaWNvblxuICAgICAgICBcIlxuICAgICAgICBbaWNvbl09XCJvcHRpb24uaWNvblwiXG4gICAgICAgIGNsYXNzPVwidHctbXItNCB0dy1pY29uLWxcIlxuICAgICAgPjwvYXVpLWljb24+XG4gICAgICA8YWNsLXRleHQtZWxsaXBzaXNcbiAgICAgICAgW3RleHRdPVwib3B0aW9uLmxhYmVsIHx8IG9wdGlvbi5wb2RcIlxuICAgICAgICBbdGFpbExlbmd0aF09XCI2XCJcbiAgICAgID48L2FjbC10ZXh0LWVsbGlwc2lzPlxuICAgIDwvZGl2PlxuICAgIDxhY2wtdGVybWluYWxcbiAgICAgIFtvcHRpb25dPVwib3B0aW9uXCJcbiAgICAgIFtpbmRleF09XCJpXCJcbiAgICAgIFtleHRyYUJ1dHRvbl09XCJcbiAgICAgICAgdGVybWluYWxFeHRyYUJ1dHRvbj8uZW5hYmxlID8gdGVybWluYWxFeHRyYUJ1dHRvblJlZiA6IG51bGxcbiAgICAgIFwiXG4gICAgICBbZXh0cmFDb250ZW50XT1cInRlcm1pbmFsRXh0cmFDb250ZW50UmVmXCJcbiAgICAgIChjb25uZWN0aW9uU3RhdHVzQ2hhbmdlKT1cImhhbmRsZUNvbm5lY3Rpb25TdGF0dXNDaGFuZ2Uob3B0aW9uLCAkZXZlbnQpXCJcbiAgICAgIChzb2NrZXRSZWFkeSk9XCJcbiAgICAgICAgc29ja2V0UmVhZHkuZW1pdCh7XG4gICAgICAgICAgb3B0aW9uLFxuICAgICAgICAgIHNvY2tldDogJGV2ZW50LFxuICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICB9KVxuICAgICAgXCJcbiAgICAgIChmYWxsYmFja1NoZWxsKT1cIlxuICAgICAgICBmYWxsYmFja1NoZWxsLmVtaXQoe1xuICAgICAgICAgIG9wdGlvbixcbiAgICAgICAgICBzaGVsbDogJGV2ZW50LFxuICAgICAgICB9KVxuICAgICAgXCJcbiAgICA+PC9hY2wtdGVybWluYWw+XG4gIDwvYXVpLXRhYj5cbjwvYXVpLXRhYi1ncm91cD5cblxuPG5nLXRlbXBsYXRlXG4gICNkaXNjb25uZWN0ZWRUaXBcbiAgbGV0LWk9XCJpbmRleFwiXG4+XG4gIDxzcGFuPnt7ICdleGVjX2Rpc2Nvbm5lY3RlZF90aXAnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICA8YnV0dG9uXG4gICAgYXVpLWJ1dHRvbj1cInRleHRcIlxuICAgIHNpemU9XCJtaW5pXCJcbiAgICAoY2xpY2spPVwicmVjb25uZWN0KGkpXCJcbiAgPlxuICAgIHt7ICdyZWNvbm5lY3QnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==