@tuki-io/tuki-widgets 0.0.180 → 0.0.182
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/contact-center/cc-script-editor/components/wxcc-flowchart/wxcc-flowchart.component.d.ts +3 -1
- package/contact-center/cc-script-editor/services/cystoscape-viewport.service.d.ts +21 -0
- package/esm2020/contact-center/cc-script-editor/components/wxcc-flowchart/wxcc-flowchart.component.mjs +21 -21
- package/esm2020/contact-center/cc-script-editor/services/cystoscape-viewport.service.mjs +65 -0
- package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs +77 -12
- package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs +74 -12
- package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
- package/package.json +1 -1
package/contact-center/cc-script-editor/components/wxcc-flowchart/wxcc-flowchart.component.d.ts
CHANGED
|
@@ -8,9 +8,11 @@ import { LinkNodeData } from "../dialogs/link-node-dialog/link-node-dialog.compo
|
|
|
8
8
|
import { MatDialog } from "@angular/material/dialog";
|
|
9
9
|
import { ReadonlyExtendedActivity } from "../../types/extended-activity";
|
|
10
10
|
import { WxCCActivityCreationService } from "../../services/wxcc-activity-creation.service";
|
|
11
|
+
import { CytoscapeViewportService } from "../../services/cystoscape-viewport.service";
|
|
11
12
|
import * as i0 from "@angular/core";
|
|
12
13
|
export declare class WxCCFlowchartComponent implements AfterViewInit, OnChanges, OnDestroy {
|
|
13
14
|
private readonly wxcc2graph;
|
|
15
|
+
private readonly cytoscapeViewportService;
|
|
14
16
|
private readonly dialog;
|
|
15
17
|
private readonly wxccActivityCreationService;
|
|
16
18
|
private cdr;
|
|
@@ -32,7 +34,7 @@ export declare class WxCCFlowchartComponent implements AfterViewInit, OnChanges,
|
|
|
32
34
|
x: number;
|
|
33
35
|
y: number;
|
|
34
36
|
} | null;
|
|
35
|
-
constructor(wxcc2graph: WxCC2GraphService, dialog: MatDialog, wxccActivityCreationService: WxCCActivityCreationService, cdr: ChangeDetectorRef);
|
|
37
|
+
constructor(wxcc2graph: WxCC2GraphService, cytoscapeViewportService: CytoscapeViewportService, dialog: MatDialog, wxccActivityCreationService: WxCCActivityCreationService, cdr: ChangeDetectorRef);
|
|
36
38
|
ngAfterViewInit(): void;
|
|
37
39
|
ngOnChanges(changes: SimpleChanges): void;
|
|
38
40
|
ngOnDestroy(): void;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { CollectionReturnValue, Core, Css } from "cytoscape";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
type ViewportConfig = Readonly<{
|
|
4
|
+
minZoomLevel: number;
|
|
5
|
+
maxZoomLevel: number;
|
|
6
|
+
animateOptions: {
|
|
7
|
+
duration: number;
|
|
8
|
+
easing: Css.TransitionTimingFunction;
|
|
9
|
+
};
|
|
10
|
+
}>;
|
|
11
|
+
export declare class CytoscapeViewportService {
|
|
12
|
+
readonly config: ViewportConfig;
|
|
13
|
+
zoomIn(cy: Core): void;
|
|
14
|
+
zoomOut(cy: Core): void;
|
|
15
|
+
resetView(cy: Core, eles: CollectionReturnValue): void;
|
|
16
|
+
private handleZoomChange;
|
|
17
|
+
private fitToView;
|
|
18
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CytoscapeViewportService, never>;
|
|
19
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<CytoscapeViewportService>;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
@@ -8,21 +8,21 @@ import { AddNodeDialogComponent } from "../dialogs/add-node-dialog/add-node-dial
|
|
|
8
8
|
import { LinkNodeDialogComponent } from "../dialogs/link-node-dialog/link-node-dialog.component";
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
import * as i1 from "../../services/wxcc2graph.service";
|
|
11
|
-
import * as i2 from "
|
|
12
|
-
import * as i3 from "
|
|
13
|
-
import * as i4 from "
|
|
14
|
-
import * as i5 from "@angular/
|
|
15
|
-
import * as i6 from "
|
|
16
|
-
import * as i7 from "../
|
|
17
|
-
import * as i8 from "../node-
|
|
18
|
-
import * as i9 from "../node-
|
|
11
|
+
import * as i2 from "../../services/cystoscape-viewport.service";
|
|
12
|
+
import * as i3 from "@angular/material/dialog";
|
|
13
|
+
import * as i4 from "../../services/wxcc-activity-creation.service";
|
|
14
|
+
import * as i5 from "@angular/common";
|
|
15
|
+
import * as i6 from "@angular/material/tooltip";
|
|
16
|
+
import * as i7 from "../floating-toolbar/floating-toolbar.component";
|
|
17
|
+
import * as i8 from "../node-details-sidebar/node-details-sidebar.component";
|
|
18
|
+
import * as i9 from "../node-action-toolbar/node-action-toolbar.component";
|
|
19
|
+
import * as i10 from "../node-search-panel/node-search-panel.component";
|
|
19
20
|
cytoscape.use(dagre);
|
|
20
21
|
cytoscape.use(nodeHtmlLabel);
|
|
21
22
|
export class WxCCFlowchartComponent {
|
|
22
|
-
constructor(wxcc2graph,
|
|
23
|
-
// private readonly cytoscapeViewportService: CytoscapeViewportService,
|
|
24
|
-
dialog, wxccActivityCreationService, cdr) {
|
|
23
|
+
constructor(wxcc2graph, cytoscapeViewportService, dialog, wxccActivityCreationService, cdr) {
|
|
25
24
|
this.wxcc2graph = wxcc2graph;
|
|
25
|
+
this.cytoscapeViewportService = cytoscapeViewportService;
|
|
26
26
|
this.dialog = dialog;
|
|
27
27
|
this.wxccActivityCreationService = wxccActivityCreationService;
|
|
28
28
|
this.cdr = cdr;
|
|
@@ -99,7 +99,7 @@ export class WxCCFlowchartComponent {
|
|
|
99
99
|
...this.layoutOptions,
|
|
100
100
|
}).run();
|
|
101
101
|
layout.on("layoutstop", () => {
|
|
102
|
-
|
|
102
|
+
this.cytoscapeViewportService.resetView(this.cy, this.cy?.elements());
|
|
103
103
|
});
|
|
104
104
|
this.setupEventListeners();
|
|
105
105
|
}
|
|
@@ -353,13 +353,13 @@ export class WxCCFlowchartComponent {
|
|
|
353
353
|
}
|
|
354
354
|
}
|
|
355
355
|
zoomIn() {
|
|
356
|
-
|
|
356
|
+
this.cytoscapeViewportService.zoomIn(this.cy);
|
|
357
357
|
}
|
|
358
358
|
zoomOut() {
|
|
359
|
-
|
|
359
|
+
this.cytoscapeViewportService.zoomOut(this.cy);
|
|
360
360
|
}
|
|
361
361
|
resetView() {
|
|
362
|
-
|
|
362
|
+
this.cytoscapeViewportService.resetView(this.cy, this.cy?.elements());
|
|
363
363
|
}
|
|
364
364
|
runLayout() {
|
|
365
365
|
if (!this.cy)
|
|
@@ -368,7 +368,7 @@ export class WxCCFlowchartComponent {
|
|
|
368
368
|
...this.layoutOptions,
|
|
369
369
|
}).run();
|
|
370
370
|
layout.on("layoutstop", () => {
|
|
371
|
-
|
|
371
|
+
this.cytoscapeViewportService.resetView(this.cy, this.cy?.elements());
|
|
372
372
|
});
|
|
373
373
|
}
|
|
374
374
|
canCreateOutgoingLink(sourceNodeId) {
|
|
@@ -420,15 +420,15 @@ export class WxCCFlowchartComponent {
|
|
|
420
420
|
};
|
|
421
421
|
}
|
|
422
422
|
}
|
|
423
|
-
WxCCFlowchartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WxCCFlowchartComponent, deps: [{ token: i1.WxCC2GraphService }, { token: i2.
|
|
424
|
-
WxCCFlowchartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: WxCCFlowchartComponent, selector: "wxcc-flowchart", inputs: { flowchart: "flowchart" }, viewQueries: [{ propertyName: "flowchartContainer", first: true, predicate: ["flowchartContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"wxcc-flowchart-container\">\r\n <div #flowchartContainer class=\"flowchart-canvas\"></div>\r\n\r\n <!-- Floating toolbar for viewport controls -->\r\n <graph-floating-toolbar\r\n [visibility]=\"{ export: false }\"\r\n (resetViewChange)=\"resetView()\"\r\n (zoomInChange)=\"zoomIn()\"\r\n (zoomOutChange)=\"zoomOut()\">\r\n </graph-floating-toolbar>\r\n\r\n <!-- Graph Acts -->\r\n <div class=\"graph-actions-wrapper\">\r\n <button\r\n class=\"add-node-btn\"\r\n matTooltip=\"Search workflow\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"toggleSearchPanel()\"\r\n >\r\n <img src=\"assets/wxcc/search.svg\" width=\"28\" height=\"28\" alt=\"\" />\r\n </button>\r\n <button\r\n class=\"add-node-btn\"\r\n matTooltip=\"Add New Node\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"openAddNodeDialog()\"\r\n >\r\n <svg\r\n width=\"28\"\r\n height=\"28\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n >\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line>\r\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <button\r\n *ngIf=\"selectedEdgeId && selectedEdgeDeleteButtonPosition\"\r\n class=\"edge-delete-btn\"\r\n matTooltip=\"Delete this edge\"\r\n matTooltipPosition=\"above\"\r\n [style.left.px]=\"selectedEdgeDeleteButtonPosition.x\"\r\n [style.top.px]=\"selectedEdgeDeleteButtonPosition.y\"\r\n (click)=\"onDeleteSelectedEdge()\"\r\n type=\"button\"\r\n aria-label=\"Delete selected edge\"\r\n >\r\n \u00D7\r\n </button>\r\n\r\n <node-search-panel\r\n class=\"fade-in-search-panel\"\r\n [class.visible]=\"isSearchPanelVisible\"\r\n [nodes]=\"activities\"\r\n (selectNodeChange)=\"onNodeSelectChange($event)\"\r\n (searchChange)=\"openAddNodeDialog()\"\r\n >\r\n </node-search-panel>\r\n\r\n <!-- Node action toolbar (floating near selected node) -->\r\n <node-action-toolbar\r\n [isVisible]=\"isNodeToolbarVisible\"\r\n [position]=\"nodeToolbarPosition\"\r\n (deleteNode)=\"onDeleteNode()\"\r\n (linkNode)=\"onLinkNodeRequest()\"\r\n >\r\n </node-action-toolbar>\r\n\r\n <!-- Node details sidebar -->\r\n <node-details-sidebar\r\n [isOpen]=\"isSidebarOpen\"\r\n [nodeData]=\"selectedNodeData\"\r\n (close)=\"onCloseSidebar()\"\r\n (descriptionChange)=\"onDescriptionChange($event)\"\r\n (activityTypeChange)=\"onActivityTypeChange($event)\"\r\n >\r\n </node-details-sidebar>\r\n</div>\r\n", styles: [".fade-in-search-panel{position:absolute;top:0;left:0;right:0;margin:0 auto;z-index:1000;opacity:0;pointer-events:none;transform:translateY(-40px);transition:opacity .4s cubic-bezier(.4,0,.2,1),transform .4s cubic-bezier(.4,0,.2,1)}.fade-in-search-panel.visible{opacity:1;pointer-events:auto;transform:translateY(0)}.close-search-panel{position:absolute;top:10px;right:16px;background:transparent;border:none;font-size:2rem;color:#333;cursor:pointer;z-index:1100}:host ::ng-deep .node-content.highlighted{border-radius:10px;z-index:10}:host ::ng-deep .node-content.highlighted{position:relative;z-index:10}:host ::ng-deep .node-content.highlighted:after{content:\"\";position:absolute;inset:-14px;border:4px solid rgba(110,110,110,.4705882353);border-radius:13px;pointer-events:none;opacity:1}:host ::ng-deep .node-content:not(.highlighted):after{opacity:0}:host{display:block;overflow:hidden;width:100%;height:100
|
|
423
|
+
WxCCFlowchartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WxCCFlowchartComponent, deps: [{ token: i1.WxCC2GraphService }, { token: i2.CytoscapeViewportService }, { token: i3.MatDialog }, { token: i4.WxCCActivityCreationService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
424
|
+
WxCCFlowchartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: WxCCFlowchartComponent, selector: "wxcc-flowchart", inputs: { flowchart: "flowchart" }, viewQueries: [{ propertyName: "flowchartContainer", first: true, predicate: ["flowchartContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"wxcc-flowchart-container\">\r\n <div #flowchartContainer class=\"flowchart-canvas\"></div>\r\n\r\n <!-- Floating toolbar for viewport controls -->\r\n <graph-floating-toolbar\r\n [visibility]=\"{ export: false }\"\r\n (resetViewChange)=\"resetView()\"\r\n (zoomInChange)=\"zoomIn()\"\r\n (zoomOutChange)=\"zoomOut()\">\r\n </graph-floating-toolbar>\r\n\r\n <!-- Graph Acts -->\r\n <div class=\"graph-actions-wrapper\">\r\n <button\r\n class=\"add-node-btn\"\r\n matTooltip=\"Search workflow\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"toggleSearchPanel()\"\r\n >\r\n <img src=\"assets/wxcc/search.svg\" width=\"28\" height=\"28\" alt=\"\" />\r\n </button>\r\n <button\r\n class=\"add-node-btn\"\r\n matTooltip=\"Add New Node\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"openAddNodeDialog()\"\r\n >\r\n <svg\r\n width=\"28\"\r\n height=\"28\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n >\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line>\r\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <button\r\n *ngIf=\"selectedEdgeId && selectedEdgeDeleteButtonPosition\"\r\n class=\"edge-delete-btn\"\r\n matTooltip=\"Delete this edge\"\r\n matTooltipPosition=\"above\"\r\n [style.left.px]=\"selectedEdgeDeleteButtonPosition.x\"\r\n [style.top.px]=\"selectedEdgeDeleteButtonPosition.y\"\r\n (click)=\"onDeleteSelectedEdge()\"\r\n type=\"button\"\r\n aria-label=\"Delete selected edge\"\r\n >\r\n \u00D7\r\n </button>\r\n\r\n <node-search-panel\r\n class=\"fade-in-search-panel\"\r\n [class.visible]=\"isSearchPanelVisible\"\r\n [nodes]=\"activities\"\r\n (selectNodeChange)=\"onNodeSelectChange($event)\"\r\n (searchChange)=\"openAddNodeDialog()\"\r\n >\r\n </node-search-panel>\r\n\r\n <!-- Node action toolbar (floating near selected node) -->\r\n <node-action-toolbar\r\n [isVisible]=\"isNodeToolbarVisible\"\r\n [position]=\"nodeToolbarPosition\"\r\n (deleteNode)=\"onDeleteNode()\"\r\n (linkNode)=\"onLinkNodeRequest()\"\r\n >\r\n </node-action-toolbar>\r\n\r\n <!-- Node details sidebar -->\r\n <node-details-sidebar\r\n [isOpen]=\"isSidebarOpen\"\r\n [nodeData]=\"selectedNodeData\"\r\n (close)=\"onCloseSidebar()\"\r\n (descriptionChange)=\"onDescriptionChange($event)\"\r\n (activityTypeChange)=\"onActivityTypeChange($event)\"\r\n >\r\n </node-details-sidebar>\r\n</div>\r\n", styles: [".fade-in-search-panel{position:absolute;top:0;left:0;right:0;margin:0 auto;z-index:1000;opacity:0;pointer-events:none;transform:translateY(-40px);transition:opacity .4s cubic-bezier(.4,0,.2,1),transform .4s cubic-bezier(.4,0,.2,1)}.fade-in-search-panel.visible{opacity:1;pointer-events:auto;transform:translateY(0)}.close-search-panel{position:absolute;top:10px;right:16px;background:transparent;border:none;font-size:2rem;color:#333;cursor:pointer;z-index:1100}:host ::ng-deep .node-content.highlighted{border-radius:10px;z-index:10}:host ::ng-deep .node-content.highlighted{position:relative;z-index:10}:host ::ng-deep .node-content.highlighted:after{content:\"\";position:absolute;inset:-14px;border:4px solid rgba(110,110,110,.4705882353);border-radius:13px;pointer-events:none;opacity:1}:host ::ng-deep .node-content:not(.highlighted):after{opacity:0}:host{display:block;overflow:hidden;width:100%;height:100%}.wxcc-flowchart-container{display:flex;flex-direction:column;position:relative;background-color:#f8f9fa;border-radius:.5rem;border:1px solid #e1e4e8;box-sizing:border-box;height:100%;min-height:600px}.wxcc-flowchart-container .flowchart-canvas{height:100%;min-height:600px;background:linear-gradient(90deg,rgba(200,200,200,.1) 1px,transparent 1px),linear-gradient(rgba(200,200,200,.1) 1px,transparent 1px);background-size:20px 20px}.wxcc-flowchart-container .add-node-btn{outline:none;border:none;border-radius:.5rem;background-color:#f6f6f6;padding:.5rem;cursor:pointer;font-size:1rem;display:flex;align-items:center;justify-content:center;width:40px;height:40px;transition:all .2s ease}.wxcc-flowchart-container .add-node-btn:hover{background-color:#eefff8;transform:scale(1.05)}.wxcc-flowchart-container .add-node-btn:active{transform:scale(.95)}.edge-delete-btn{position:absolute;z-index:1100;transform:translate(-50%,-50%);width:24px;height:24px;border-radius:50%;border:1px solid #cc3d36;background:#fff;color:#cc3d36;font-size:16px;font-weight:700;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px #0000002e}.edge-delete-btn:hover{background:#fff1f0;transform:translate(-50%,-50%) scale(1.08)}.edge-delete-btn:active{transform:translate(-50%,-50%) scale(.95)}:host ::ng-deep .node-content{cursor:pointer;display:flex;justify-content:center;flex-direction:column;gap:.5rem;padding:.5rem;background:white;border-radius:6px;border:1px solid #d8d8d8;border-left:4px solid;min-width:200px;transition:all .2s ease}:host ::ng-deep .node-content header{display:flex;align-items:center;gap:.5rem}:host ::ng-deep .node-content img{width:18px;height:18px}:host ::ng-deep .node-content .node-icon{font-size:24px;display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:.5rem;flex-shrink:0}:host ::ng-deep .node-content .node-info{flex:1;min-width:0}:host ::ng-deep .node-content .node-info .node-label{font-size:16px;letter-spacing:.5px;opacity:.7;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}:host ::ng-deep .node-content .node-info .node-activity-name{font-size:12px;color:#99a5b1;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}:host ::ng-deep .node-content .node-details{font-size:12px;color:#000;padding:0 .25rem;display:flex;flex-direction:column;gap:.25rem}:host ::ng-deep .node-content .node-details .node-details-item{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px}:host ::ng-deep .node-content .node-details .review-red{background-color:#ffe6e6;border-left-color:#f44336;color:#f44336;padding:.1rem .25rem;border-radius:.25rem;font-size:10px}:host ::ng-deep .node-content .node-details .review-green{background-color:#e6ffe6;border-left-color:#4caf50;color:#4caf50;padding:.1rem .25rem;border-radius:.25rem;font-size:10px}:host ::ng-deep .node-content .node-details .review-yellow{background-color:#fff9e6;border-left-color:#ff9800;color:#ff9800;padding:.1rem .25rem;border-radius:.25rem;font-size:10px}:host ::ng-deep .node-content.node-start{border-left-color:#4caf50}:host ::ng-deep .node-content.node-start .node-icon{background-color:#4caf501a;color:#4caf50}:host ::ng-deep .node-content.node-start .node-label{color:#4caf50}:host ::ng-deep .node-content.node-end{border-left-color:#f44336}:host ::ng-deep .node-content.node-end .node-icon{background-color:#f443361a;color:#f44336}:host ::ng-deep .node-content.node-end .node-label{color:#f44336}:host ::ng-deep .node-content.node-gateway{border-left-color:#ff9800}:host ::ng-deep .node-content.node-gateway .node-icon{background-color:#ff98001a;color:#ff9800}:host ::ng-deep .node-content.node-gateway .node-label{color:#ff9800}:host ::ng-deep .node-content.node-action{border-left-color:#9c27b0}:host ::ng-deep .node-content.node-action .node-icon{background-color:#9c27b01a;color:#9c27b0}:host ::ng-deep .node-content.node-action .node-label{color:#9c27b0}:host ::ng-deep .node-content.node-default{border-left-color:#607d8b}:host ::ng-deep .node-content.node-default .node-icon{background-color:#607d8b1a;color:#607d8b}:host ::ng-deep .node-content.node-default .node-label{color:#607d8b}.graph-actions-wrapper{position:absolute;right:1rem;top:1rem;display:flex;align-items:center;gap:.5rem;box-shadow:2px 4px 15px #0000002d;padding:8px;background-color:#ffffffac;border-radius:1rem;z-index:999}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i7.FloatingToolBarComponent, selector: "graph-floating-toolbar", inputs: ["visibility"], outputs: ["resetViewChange", "zoomInChange", "zoomOutChange", "exportImageChange"] }, { kind: "component", type: i8.NodeDetailsSidebarComponent, selector: "node-details-sidebar", inputs: ["isOpen", "nodeData"], outputs: ["close", "activityTypeChange", "descriptionChange"] }, { kind: "component", type: i9.NodeActionToolbarComponent, selector: "node-action-toolbar", inputs: ["isVisible", "position"], outputs: ["deleteNode", "linkNode"] }, { kind: "component", type: i10.NodeSearchPanelComponent, selector: "node-search-panel", inputs: ["nodes"], outputs: ["searchChange", "selectNodeChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
425
425
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WxCCFlowchartComponent, decorators: [{
|
|
426
426
|
type: Component,
|
|
427
|
-
args: [{ selector: "wxcc-flowchart", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"wxcc-flowchart-container\">\r\n <div #flowchartContainer class=\"flowchart-canvas\"></div>\r\n\r\n <!-- Floating toolbar for viewport controls -->\r\n <graph-floating-toolbar\r\n [visibility]=\"{ export: false }\"\r\n (resetViewChange)=\"resetView()\"\r\n (zoomInChange)=\"zoomIn()\"\r\n (zoomOutChange)=\"zoomOut()\">\r\n </graph-floating-toolbar>\r\n\r\n <!-- Graph Acts -->\r\n <div class=\"graph-actions-wrapper\">\r\n <button\r\n class=\"add-node-btn\"\r\n matTooltip=\"Search workflow\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"toggleSearchPanel()\"\r\n >\r\n <img src=\"assets/wxcc/search.svg\" width=\"28\" height=\"28\" alt=\"\" />\r\n </button>\r\n <button\r\n class=\"add-node-btn\"\r\n matTooltip=\"Add New Node\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"openAddNodeDialog()\"\r\n >\r\n <svg\r\n width=\"28\"\r\n height=\"28\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n >\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line>\r\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <button\r\n *ngIf=\"selectedEdgeId && selectedEdgeDeleteButtonPosition\"\r\n class=\"edge-delete-btn\"\r\n matTooltip=\"Delete this edge\"\r\n matTooltipPosition=\"above\"\r\n [style.left.px]=\"selectedEdgeDeleteButtonPosition.x\"\r\n [style.top.px]=\"selectedEdgeDeleteButtonPosition.y\"\r\n (click)=\"onDeleteSelectedEdge()\"\r\n type=\"button\"\r\n aria-label=\"Delete selected edge\"\r\n >\r\n \u00D7\r\n </button>\r\n\r\n <node-search-panel\r\n class=\"fade-in-search-panel\"\r\n [class.visible]=\"isSearchPanelVisible\"\r\n [nodes]=\"activities\"\r\n (selectNodeChange)=\"onNodeSelectChange($event)\"\r\n (searchChange)=\"openAddNodeDialog()\"\r\n >\r\n </node-search-panel>\r\n\r\n <!-- Node action toolbar (floating near selected node) -->\r\n <node-action-toolbar\r\n [isVisible]=\"isNodeToolbarVisible\"\r\n [position]=\"nodeToolbarPosition\"\r\n (deleteNode)=\"onDeleteNode()\"\r\n (linkNode)=\"onLinkNodeRequest()\"\r\n >\r\n </node-action-toolbar>\r\n\r\n <!-- Node details sidebar -->\r\n <node-details-sidebar\r\n [isOpen]=\"isSidebarOpen\"\r\n [nodeData]=\"selectedNodeData\"\r\n (close)=\"onCloseSidebar()\"\r\n (descriptionChange)=\"onDescriptionChange($event)\"\r\n (activityTypeChange)=\"onActivityTypeChange($event)\"\r\n >\r\n </node-details-sidebar>\r\n</div>\r\n", styles: [".fade-in-search-panel{position:absolute;top:0;left:0;right:0;margin:0 auto;z-index:1000;opacity:0;pointer-events:none;transform:translateY(-40px);transition:opacity .4s cubic-bezier(.4,0,.2,1),transform .4s cubic-bezier(.4,0,.2,1)}.fade-in-search-panel.visible{opacity:1;pointer-events:auto;transform:translateY(0)}.close-search-panel{position:absolute;top:10px;right:16px;background:transparent;border:none;font-size:2rem;color:#333;cursor:pointer;z-index:1100}:host ::ng-deep .node-content.highlighted{border-radius:10px;z-index:10}:host ::ng-deep .node-content.highlighted{position:relative;z-index:10}:host ::ng-deep .node-content.highlighted:after{content:\"\";position:absolute;inset:-14px;border:4px solid rgba(110,110,110,.4705882353);border-radius:13px;pointer-events:none;opacity:1}:host ::ng-deep .node-content:not(.highlighted):after{opacity:0}:host{display:block;overflow:hidden;width:100%;height:100
|
|
428
|
-
}], ctorParameters: function () { return [{ type: i1.WxCC2GraphService }, { type: i2.
|
|
427
|
+
args: [{ selector: "wxcc-flowchart", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"wxcc-flowchart-container\">\r\n <div #flowchartContainer class=\"flowchart-canvas\"></div>\r\n\r\n <!-- Floating toolbar for viewport controls -->\r\n <graph-floating-toolbar\r\n [visibility]=\"{ export: false }\"\r\n (resetViewChange)=\"resetView()\"\r\n (zoomInChange)=\"zoomIn()\"\r\n (zoomOutChange)=\"zoomOut()\">\r\n </graph-floating-toolbar>\r\n\r\n <!-- Graph Acts -->\r\n <div class=\"graph-actions-wrapper\">\r\n <button\r\n class=\"add-node-btn\"\r\n matTooltip=\"Search workflow\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"toggleSearchPanel()\"\r\n >\r\n <img src=\"assets/wxcc/search.svg\" width=\"28\" height=\"28\" alt=\"\" />\r\n </button>\r\n <button\r\n class=\"add-node-btn\"\r\n matTooltip=\"Add New Node\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"openAddNodeDialog()\"\r\n >\r\n <svg\r\n width=\"28\"\r\n height=\"28\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n >\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line>\r\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <button\r\n *ngIf=\"selectedEdgeId && selectedEdgeDeleteButtonPosition\"\r\n class=\"edge-delete-btn\"\r\n matTooltip=\"Delete this edge\"\r\n matTooltipPosition=\"above\"\r\n [style.left.px]=\"selectedEdgeDeleteButtonPosition.x\"\r\n [style.top.px]=\"selectedEdgeDeleteButtonPosition.y\"\r\n (click)=\"onDeleteSelectedEdge()\"\r\n type=\"button\"\r\n aria-label=\"Delete selected edge\"\r\n >\r\n \u00D7\r\n </button>\r\n\r\n <node-search-panel\r\n class=\"fade-in-search-panel\"\r\n [class.visible]=\"isSearchPanelVisible\"\r\n [nodes]=\"activities\"\r\n (selectNodeChange)=\"onNodeSelectChange($event)\"\r\n (searchChange)=\"openAddNodeDialog()\"\r\n >\r\n </node-search-panel>\r\n\r\n <!-- Node action toolbar (floating near selected node) -->\r\n <node-action-toolbar\r\n [isVisible]=\"isNodeToolbarVisible\"\r\n [position]=\"nodeToolbarPosition\"\r\n (deleteNode)=\"onDeleteNode()\"\r\n (linkNode)=\"onLinkNodeRequest()\"\r\n >\r\n </node-action-toolbar>\r\n\r\n <!-- Node details sidebar -->\r\n <node-details-sidebar\r\n [isOpen]=\"isSidebarOpen\"\r\n [nodeData]=\"selectedNodeData\"\r\n (close)=\"onCloseSidebar()\"\r\n (descriptionChange)=\"onDescriptionChange($event)\"\r\n (activityTypeChange)=\"onActivityTypeChange($event)\"\r\n >\r\n </node-details-sidebar>\r\n</div>\r\n", styles: [".fade-in-search-panel{position:absolute;top:0;left:0;right:0;margin:0 auto;z-index:1000;opacity:0;pointer-events:none;transform:translateY(-40px);transition:opacity .4s cubic-bezier(.4,0,.2,1),transform .4s cubic-bezier(.4,0,.2,1)}.fade-in-search-panel.visible{opacity:1;pointer-events:auto;transform:translateY(0)}.close-search-panel{position:absolute;top:10px;right:16px;background:transparent;border:none;font-size:2rem;color:#333;cursor:pointer;z-index:1100}:host ::ng-deep .node-content.highlighted{border-radius:10px;z-index:10}:host ::ng-deep .node-content.highlighted{position:relative;z-index:10}:host ::ng-deep .node-content.highlighted:after{content:\"\";position:absolute;inset:-14px;border:4px solid rgba(110,110,110,.4705882353);border-radius:13px;pointer-events:none;opacity:1}:host ::ng-deep .node-content:not(.highlighted):after{opacity:0}:host{display:block;overflow:hidden;width:100%;height:100%}.wxcc-flowchart-container{display:flex;flex-direction:column;position:relative;background-color:#f8f9fa;border-radius:.5rem;border:1px solid #e1e4e8;box-sizing:border-box;height:100%;min-height:600px}.wxcc-flowchart-container .flowchart-canvas{height:100%;min-height:600px;background:linear-gradient(90deg,rgba(200,200,200,.1) 1px,transparent 1px),linear-gradient(rgba(200,200,200,.1) 1px,transparent 1px);background-size:20px 20px}.wxcc-flowchart-container .add-node-btn{outline:none;border:none;border-radius:.5rem;background-color:#f6f6f6;padding:.5rem;cursor:pointer;font-size:1rem;display:flex;align-items:center;justify-content:center;width:40px;height:40px;transition:all .2s ease}.wxcc-flowchart-container .add-node-btn:hover{background-color:#eefff8;transform:scale(1.05)}.wxcc-flowchart-container .add-node-btn:active{transform:scale(.95)}.edge-delete-btn{position:absolute;z-index:1100;transform:translate(-50%,-50%);width:24px;height:24px;border-radius:50%;border:1px solid #cc3d36;background:#fff;color:#cc3d36;font-size:16px;font-weight:700;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px #0000002e}.edge-delete-btn:hover{background:#fff1f0;transform:translate(-50%,-50%) scale(1.08)}.edge-delete-btn:active{transform:translate(-50%,-50%) scale(.95)}:host ::ng-deep .node-content{cursor:pointer;display:flex;justify-content:center;flex-direction:column;gap:.5rem;padding:.5rem;background:white;border-radius:6px;border:1px solid #d8d8d8;border-left:4px solid;min-width:200px;transition:all .2s ease}:host ::ng-deep .node-content header{display:flex;align-items:center;gap:.5rem}:host ::ng-deep .node-content img{width:18px;height:18px}:host ::ng-deep .node-content .node-icon{font-size:24px;display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:.5rem;flex-shrink:0}:host ::ng-deep .node-content .node-info{flex:1;min-width:0}:host ::ng-deep .node-content .node-info .node-label{font-size:16px;letter-spacing:.5px;opacity:.7;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}:host ::ng-deep .node-content .node-info .node-activity-name{font-size:12px;color:#99a5b1;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}:host ::ng-deep .node-content .node-details{font-size:12px;color:#000;padding:0 .25rem;display:flex;flex-direction:column;gap:.25rem}:host ::ng-deep .node-content .node-details .node-details-item{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px}:host ::ng-deep .node-content .node-details .review-red{background-color:#ffe6e6;border-left-color:#f44336;color:#f44336;padding:.1rem .25rem;border-radius:.25rem;font-size:10px}:host ::ng-deep .node-content .node-details .review-green{background-color:#e6ffe6;border-left-color:#4caf50;color:#4caf50;padding:.1rem .25rem;border-radius:.25rem;font-size:10px}:host ::ng-deep .node-content .node-details .review-yellow{background-color:#fff9e6;border-left-color:#ff9800;color:#ff9800;padding:.1rem .25rem;border-radius:.25rem;font-size:10px}:host ::ng-deep .node-content.node-start{border-left-color:#4caf50}:host ::ng-deep .node-content.node-start .node-icon{background-color:#4caf501a;color:#4caf50}:host ::ng-deep .node-content.node-start .node-label{color:#4caf50}:host ::ng-deep .node-content.node-end{border-left-color:#f44336}:host ::ng-deep .node-content.node-end .node-icon{background-color:#f443361a;color:#f44336}:host ::ng-deep .node-content.node-end .node-label{color:#f44336}:host ::ng-deep .node-content.node-gateway{border-left-color:#ff9800}:host ::ng-deep .node-content.node-gateway .node-icon{background-color:#ff98001a;color:#ff9800}:host ::ng-deep .node-content.node-gateway .node-label{color:#ff9800}:host ::ng-deep .node-content.node-action{border-left-color:#9c27b0}:host ::ng-deep .node-content.node-action .node-icon{background-color:#9c27b01a;color:#9c27b0}:host ::ng-deep .node-content.node-action .node-label{color:#9c27b0}:host ::ng-deep .node-content.node-default{border-left-color:#607d8b}:host ::ng-deep .node-content.node-default .node-icon{background-color:#607d8b1a;color:#607d8b}:host ::ng-deep .node-content.node-default .node-label{color:#607d8b}.graph-actions-wrapper{position:absolute;right:1rem;top:1rem;display:flex;align-items:center;gap:.5rem;box-shadow:2px 4px 15px #0000002d;padding:8px;background-color:#ffffffac;border-radius:1rem;z-index:999}\n"] }]
|
|
428
|
+
}], ctorParameters: function () { return [{ type: i1.WxCC2GraphService }, { type: i2.CytoscapeViewportService }, { type: i3.MatDialog }, { type: i4.WxCCActivityCreationService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { flowchart: [{
|
|
429
429
|
type: Input
|
|
430
430
|
}], flowchartContainer: [{
|
|
431
431
|
type: ViewChild,
|
|
432
432
|
args: ["flowchartContainer"]
|
|
433
433
|
}] } });
|
|
434
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3hjYy1mbG93Y2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL2NvbnRhY3QtY2VudGVyL2NjLXNjcmlwdC1lZGl0b3IvY29tcG9uZW50cy93eGNjLWZsb3djaGFydC93eGNjLWZsb3djaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvY29udGFjdC1jZW50ZXIvY2Mtc2NyaXB0LWVkaXRvci9jb21wb25lbnRzL3d4Y2MtZmxvd2NoYXJ0L3d4Y2MtZmxvd2NoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTix1QkFBdUIsRUFFdkIsU0FBUyxFQUVULEtBQUssRUFJTCxTQUFTLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxTQUlOLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sS0FBSyxNQUFNLGlCQUFpQixDQUFDO0FBQ3BDLE9BQU8sYUFBYSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUtyRSxPQUFPLEVBQ04sc0JBQXNCLEVBRXRCLE1BQU0sc0RBQXNELENBQUM7QUFDOUQsT0FBTyxFQUVOLHVCQUF1QixFQUN2QixNQUFNLHdEQUF3RCxDQUFDOzs7Ozs7Ozs7OztBQUtoRSxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JCLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBb0IsQ0FBQyxDQUFDO0FBUXBDLE1BQU0sT0FBTyxzQkFBc0I7SUFxQ2xDLFlBQ2tCLFVBQTZCO0lBQzlDLHVFQUF1RTtJQUN0RCxNQUFpQixFQUNqQiwyQkFBd0QsRUFDakUs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QUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFO1lBQ2xCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUU7U0FDbEIsQ0FBQztJQUNILENBQUM7O29IQXRmVyxzQkFBc0I7d0dBQXRCLHNCQUFzQix5T0MvQ25DLDBsRkFtRkE7NEZEcENhLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDQyxnQkFBZ0IsbUJBR1QsdUJBQXVCLENBQUMsTUFBTTswTUFHdEMsU0FBUztzQkFBakIsS0FBSztnQkFDMkIsa0JBQWtCO3NCQUFsRCxTQUFTO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0QWZ0ZXJWaWV3SW5pdCxcclxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuXHRDaGFuZ2VEZXRlY3RvclJlZixcclxuXHRDb21wb25lbnQsXHJcblx0RWxlbWVudFJlZixcclxuXHRJbnB1dCxcclxuXHRPbkNoYW5nZXMsXHJcblx0T25EZXN0cm95LFxyXG5cdFNpbXBsZUNoYW5nZXMsXHJcblx0Vmlld0NoaWxkXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgSVd4Q0NGbG93Y2hhcnQgfSBmcm9tIFwiLi4vLi4vdHlwZXMvd3hjY1wiO1xyXG5pbXBvcnQgY3l0b3NjYXBlLCB7XHJcblx0RWxlbWVudERlZmluaXRpb24sXHJcblx0RWRnZVNpbmd1bGFyLFxyXG5cdE5vZGVTaW5ndWxhclxyXG59IGZyb20gXCJjeXRvc2NhcGVcIjtcclxuaW1wb3J0IGRhZ3JlIGZyb20gXCJjeXRvc2NhcGUtZGFncmVcIjtcclxuaW1wb3J0IG5vZGVIdG1sTGFiZWwgZnJvbSBcImN5dG9zY2FwZS1ub2RlLWh0bWwtbGFiZWxcIjtcclxuaW1wb3J0IHsgU3R5bGVDb25maWcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL2N5dG9zY2FwZS5jb25maWdcIjtcclxuaW1wb3J0IHsgZ2V0Tm9kZUh0bWxUZW1wbGF0ZSB9IGZyb20gXCIuLi8uLi91dGlscy9ub2RlLWh0bWwtdGVtcGxhdGVcIjtcclxuaW1wb3J0IHsgQWN0aXZpdHlEaXNwbGF5VHlwZSB9IGZyb20gXCIuLi8uLi91dGlscy9ub2RlLW1hcHBpbmdzXCI7XHJcbmltcG9ydCB7IFd4Q0MyR3JhcGhTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3d4Y2MyZ3JhcGguc2VydmljZVwiO1xyXG4vLyBpbXBvcnQgeyBDeXRvc2NhcGVWaWV3cG9ydFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2N5dG9zY2FwZS9jeXN0b3NjYXBlLXZpZXdwb3J0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTm9kZVRvb2xiYXJQb3NpdGlvbiB9IGZyb20gXCIuLi9ub2RlLWFjdGlvbi10b29sYmFyL25vZGUtYWN0aW9uLXRvb2xiYXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7XHJcblx0QWRkTm9kZURpYWxvZ0NvbXBvbmVudCxcclxuXHROZXdOb2RlRGF0YVxyXG59IGZyb20gXCIuLi9kaWFsb2dzL2FkZC1ub2RlLWRpYWxvZy9hZGQtbm9kZS1kaWFsb2cuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7XHJcblx0TGlua05vZGVEYXRhLFxyXG5cdExpbmtOb2RlRGlhbG9nQ29tcG9uZW50XHJcbn0gZnJvbSBcIi4uL2RpYWxvZ3MvbGluay1ub2RlLWRpYWxvZy9saW5rLW5vZGUtZGlhbG9nLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IFJlYWRvbmx5RXh0ZW5kZWRBY3Rpdml0eSB9IGZyb20gXCIuLi8uLi90eXBlcy9leHRlbmRlZC1hY3Rpdml0eVwiO1xyXG5pbXBvcnQgeyBXeENDQWN0aXZpdHlDcmVhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvd3hjYy1hY3Rpdml0eS1jcmVhdGlvbi5zZXJ2aWNlXCI7XHJcblxyXG5jeXRvc2NhcGUudXNlKGRhZ3JlKTtcclxuY3l0b3NjYXBlLnVzZShub2RlSHRtbExhYmVsIGFzIGFueSk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogXCJ3eGNjLWZsb3djaGFydFwiLFxyXG5cdHRlbXBsYXRlVXJsOiBcIi4vd3hjYy1mbG93Y2hhcnQuY29tcG9uZW50Lmh0bWxcIixcclxuXHRzdHlsZVVybHM6IFtcIi4vd3hjYy1mbG93Y2hhcnQuY29tcG9uZW50LnNjc3NcIl0sXHJcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXeENDRmxvd2NoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cdEBJbnB1dCgpIGZsb3djaGFydCE6IElXeENDRmxvd2NoYXJ0O1xyXG5cdEBWaWV3Q2hpbGQoXCJmbG93Y2hhcnRDb250YWluZXJcIikgZmxvd2NoYXJ0Q29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG5cdHByaXZhdGUgY3k/OiBjeXRvc2NhcGUuQ29yZTtcclxuXHRwcml2YXRlIHZpZXdSZWFkeSA9IGZhbHNlO1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgbGF5b3V0T3B0aW9uczogZGFncmUuRGFncmVMYXlvdXRPcHRpb25zID0ge1xyXG5cdFx0bmFtZTogXCJkYWdyZVwiLFxyXG5cdFx0cmFua0RpcjogXCJMUlwiLFxyXG5cdFx0bm9kZVNlcDogMTgwLFxyXG5cdFx0ZWRnZVNlcDogNjAsXHJcblx0XHRyYW5rU2VwOiAxNTAsXHJcblx0XHRhbmltYXRlOiB0cnVlLFxyXG5cdFx0YW5pbWF0aW9uRHVyYXRpb246IDUwMCxcclxuXHRcdGZpdDogdHJ1ZVxyXG5cdH07XHJcblxyXG5cdC8vIFNpZGViYXIgc3RhdGVcclxuXHRpc1NpZGViYXJPcGVuID0gZmFsc2U7XHJcblx0c2VsZWN0ZWROb2RlRGF0YTogUmVhZG9ubHlFeHRlbmRlZEFjdGl2aXR5IHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdC8vIFNlYXJjaCBwYW5lbCBzdGF0ZVxyXG5cdGlzU2VhcmNoUGFuZWxWaXNpYmxlID0gZmFsc2U7XHJcblx0c2VhcmNoUGFuZWxWaXNpYmxlID0gZmFsc2U7XHJcblxyXG5cdC8vIE5vZGUgYWN0aW9uIHRvb2xiYXIgc3RhdGVcclxuXHRpc05vZGVUb29sYmFyVmlzaWJsZSA9IGZhbHNlO1xyXG5cdG5vZGVUb29sYmFyUG9zaXRpb246IE5vZGVUb29sYmFyUG9zaXRpb24gPSB7IHg6IDAsIHk6IDAgfTtcclxuXHJcblx0Ly8gQWRkIG5vZGUgZGlhbG9nIHN0YXRlXHJcblx0YXZhaWxhYmxlTm9kZXM6IFJlYWRvbmx5RXh0ZW5kZWRBY3Rpdml0eVtdID0gW107XHJcblxyXG5cdC8vIExpbmsgbm9kZSBkaWFsb2cgc3RhdGVcclxuXHRpc0xpbmtEaWFsb2dPcGVuID0gZmFsc2U7XHJcblx0c2VsZWN0ZWRFZGdlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cdHNlbGVjdGVkRWRnZURlbGV0ZUJ1dHRvblBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIHJlYWRvbmx5IHd4Y2MyZ3JhcGg6IFd4Q0MyR3JhcGhTZXJ2aWNlLFxyXG5cdFx0Ly8gcHJpdmF0ZSByZWFkb25seSBjeXRvc2NhcGVWaWV3cG9ydFNlcnZpY2U6IEN5dG9zY2FwZVZpZXdwb3J0U2VydmljZSxcclxuXHRcdHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nOiBNYXREaWFsb2csXHJcblx0XHRwcml2YXRlIHJlYWRvbmx5IHd4Y2NBY3Rpdml0eUNyZWF0aW9uU2VydmljZTogV3hDQ0FjdGl2aXR5Q3JlYXRpb25TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG5cdCkgeyB9XHJcblxyXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMudmlld1JlYWR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMudHJ5SW5pdCgpO1xyXG5cdH1cclxuXHJcblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG5cdFx0aWYgKGNoYW5nZXNbXCJmbG93Y2hhcnRcIl0pIHtcclxuXHRcdFx0dGhpcy50cnlJbml0KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuY3k/LmRlc3Ryb3koKTtcclxuXHRcdHRoaXMuY3kgPSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHRyeUluaXQoKTogdm9pZCB7XHJcblx0XHRpZiAoIXRoaXMudmlld1JlYWR5IHx8ICF0aGlzLmZsb3djaGFydENvbnRhaW5lciB8fCAhdGhpcy5mbG93Y2hhcnQpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuaW5pdCgpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBpbml0KCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgY29udGFpbmVyID0gdGhpcy5mbG93Y2hhcnRDb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuXHJcblx0XHR0aGlzLmN5Py5kZXN0cm95KCk7XHJcblx0XHR0aGlzLmN5ID0gdW5kZWZpbmVkO1xyXG5cclxuXHRcdGNvbnN0IGVsZW1lbnRzOiBFbGVtZW50RGVmaW5pdGlvbltdID0gW1xyXG5cdFx0XHQuLi50aGlzLmZsb3djaGFydC5ub2RlcyxcclxuXHRcdFx0Li4udGhpcy5mbG93Y2hhcnQuZWRnZXMsXHJcblx0XHRdO1xyXG5cclxuXHRcdHRoaXMuY3kgPSBjeXRvc2NhcGUoe1xyXG5cdFx0XHRjb250YWluZXI6IGNvbnRhaW5lcixcclxuXHRcdFx0ZWxlbWVudHM6IGVsZW1lbnRzLFxyXG5cdFx0XHRzdHlsZTogdGhpcy5nZXRTdHlsZXNoZWV0KCksXHJcblx0XHR9KTtcclxuXHJcblx0XHQodGhpcy5jeSBhcyBhbnkpLm5vZGVIdG1sTGFiZWwoW1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0cXVlcnk6IFwibm9kZVwiLFxyXG5cdFx0XHRcdGhhbGlnbjogXCJjZW50ZXJcIixcclxuXHRcdFx0XHR2YWxpZ246IFwiY2VudGVyXCIsXHJcblx0XHRcdFx0aGFsaWduQm94OiBcImNlbnRlclwiLFxyXG5cdFx0XHRcdHZhbGlnbkJveDogXCJjZW50ZXJcIixcclxuXHRcdFx0XHR0cGw6IChkYXRhOiBSZWFkb25seUV4dGVuZGVkQWN0aXZpdHkpID0+IGdldE5vZGVIdG1sVGVtcGxhdGUoZGF0YSksXHJcblx0XHRcdH0sXHJcblx0XHRdKTtcclxuXHJcblx0XHRjb25zdCBsYXlvdXQgPSB0aGlzLmN5Py5sYXlvdXQoe1xyXG5cdFx0XHQuLi50aGlzLmxheW91dE9wdGlvbnMsXHJcblx0XHR9KS5ydW4oKTtcclxuXHJcblx0XHRsYXlvdXQub24oXCJsYXlvdXRzdG9wXCIsICgpID0+IHtcclxuXHRcdFx0Ly8gdGhpcy5jeXRvc2NhcGVWaWV3cG9ydFNlcnZpY2UucmVzZXRWaWV3KHRoaXMuY3ksIHRoaXMuY3k/LmVsZW1lbnRzKCkpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKCk7XHJcblx0fVxyXG5cclxuXHRnZXQgYWN0aXZpdGllcygpIHsgcmV0dXJuIHRoaXMud3hjYzJncmFwaC5nZXRBbGxBY3Rpdml0aWVzKCk7IH1cclxuXHJcblx0Ly8gVG9nZ2xlIHNlYXJjaCBwYW5lbCB2aXNpYmlsaXR5XHJcblx0dG9nZ2xlU2VhcmNoUGFuZWwoKTogdm9pZCB7XHJcblx0XHR0aGlzLmlzU2VhcmNoUGFuZWxWaXNpYmxlID0gIXRoaXMuaXNTZWFyY2hQYW5lbFZpc2libGU7XHJcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc2V0dXBFdmVudExpc3RlbmVycygpOiB2b2lkIHtcclxuXHRcdC8vIFNpbmdsZSB0YXAgb24gbm9kZSAtIHNob3cgb25seSB0aGUgdG9vbGJhciAocXVpY2sgYWN0aW9ucylcclxuXHRcdHRoaXMuY3k/Lm9uKFwibW91c2VvdmVyXCIsIFwibm9kZVwiLCAoZXZlbnQpID0+IHtcclxuXHRcdFx0Y29uc3Qgbm9kZSA9IGV2ZW50LnRhcmdldCBhcyBOb2RlU2luZ3VsYXI7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWROb2RlRGF0YSA9IG5vZGUuZGF0YSgpIGFzIFJlYWRvbmx5RXh0ZW5kZWRBY3Rpdml0eTtcclxuXHJcblx0XHRcdC8vIENhbGN1bGF0ZSB0b29sYmFyIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBjb250YWluZXJcclxuXHRcdFx0dGhpcy51cGRhdGVUb29sYmFyUG9zaXRpb24obm9kZSk7XHJcblx0XHRcdHRoaXMuaXNOb2RlVG9vbGJhclZpc2libGUgPSB0cnVlO1xyXG5cclxuXHRcdFx0dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5jeT8ub24oXCJ0YXBcIiwgXCJub2RlXCIsIChldmVudCkgPT4ge1xyXG5cdFx0XHRjb25zdCBub2RlID0gZXZlbnQudGFyZ2V0IGFzIE5vZGVTaW5ndWxhcjtcclxuXHRcdFx0dGhpcy5jbGVhclNlbGVjdGVkRWRnZSgpO1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkTm9kZURhdGEgPSBub2RlLmRhdGEoKSBhcyBSZWFkb25seUV4dGVuZGVkQWN0aXZpdHk7XHJcblx0XHRcdHRoaXMuaXNTaWRlYmFyT3BlbiA9IHRydWU7XHJcblxyXG5cdFx0XHQvLyBIaWRlIHRvb2xiYXIgd2hlbiBzaWRlYmFyIG9wZW5zXHJcblx0XHRcdHRoaXMuaXNOb2RlVG9vbGJhclZpc2libGUgPSBmYWxzZTtcclxuXHJcblx0XHRcdHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdHRoaXMuY3k/Lm9uKFwibW91c2Vtb3ZlXCIsIFwibm9kZVwiLCAoZXZlbnQpID0+IHtcclxuXHRcdFx0Y29uc3Qgbm9kZSA9IGV2ZW50LnRhcmdldCBhcyBOb2RlU2luZ3VsYXI7XHJcblx0XHRcdHRoaXMudXBkYXRlVG9vbGJhclBvc2l0aW9uKG5vZGUpO1xyXG5cclxuXHRcdFx0dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gRWRnZSB0YXAgLSBzZWxlY3QgZWRnZSBmb3IgZXhwbGljaXQgZGVsZXRpb24gYWN0aW9uXHJcblx0XHR0aGlzLmN5Py5vbihcInRhcFwiLCBcImVkZ2VcIiwgKGV2ZW50KSA9PiB7XHJcblx0XHRcdGNvbnN0IGVkZ2UgPSBldmVudC50YXJnZXQgYXMgRWRnZVNpbmd1bGFyO1xyXG5cclxuXHRcdFx0dGhpcy5pc1NpZGViYXJPcGVuID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuaGlkZU5vZGVUb29sYmFyKCk7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWROb2RlRGF0YSA9IG51bGw7XHJcblxyXG5cdFx0XHR0aGlzLnNlbGVjdGVkRWRnZUlkID0gZWRnZS5pZCgpO1xyXG5cdFx0XHRlZGdlLnNlbGVjdCgpO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZVNlbGVjdGVkRWRnZURlbGV0ZUJ1dHRvblBvc2l0aW9uKCk7XHJcblx0XHRcdHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIENhbnZhcyB0YXAgLSBoaWRlIHRvb2xiYXIgYW5kIGRlc2VsZWN0XHJcblx0XHR0aGlzLmN5Py5vbihcInRhcFwiLCAoZXZlbnQpID0+IHtcclxuXHRcdFx0aWYgKGV2ZW50LnRhcmdldCA9PT0gdGhpcy5jeSkge1xyXG5cdFx0XHRcdHRoaXMuY2xlYXJTZWxlY3RlZEVkZ2UoKTtcclxuXHRcdFx0XHR0aGlzLmlzU2lkZWJhck9wZW4gPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLmhpZGVOb2RlVG9vbGJhcigpO1xyXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWROb2RlRGF0YSA9IG51bGw7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIFBhbi96b29tIGV2ZW50cyAtIHVwZGF0ZSB0b29sYmFyIHBvc2l0aW9uXHJcblx0XHR0aGlzLmN5Py5vbihcInBhbiB6b29tXCIsICgpID0+IHtcclxuXHRcdFx0aWYgKHRoaXMuaXNOb2RlVG9vbGJhclZpc2libGUgJiYgdGhpcy5zZWxlY3RlZE5vZGVEYXRhKSB7XHJcblx0XHRcdFx0Y29uc3Qgbm9kZSA9IHRoaXMuY3k/LmdldEVsZW1lbnRCeUlkKHRoaXMuc2VsZWN0ZWROb2RlRGF0YS5pZCk7XHJcblx0XHRcdFx0aWYgKG5vZGU/Lmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVUb29sYmFyUG9zaXRpb24obm9kZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAodGhpcy5zZWxlY3RlZEVkZ2VJZCkge1xyXG5cdFx0XHRcdHRoaXMudXBkYXRlU2VsZWN0ZWRFZGdlRGVsZXRlQnV0dG9uUG9zaXRpb24oKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHVwZGF0ZVRvb2xiYXJQb3NpdGlvbihub2RlOiBOb2RlU2luZ3VsYXIpOiB2b2lkIHtcclxuXHRcdGNvbnN0IHJlbmRlcmVkUG9zaXRpb24gPSBub2RlLnJlbmRlcmVkUG9zaXRpb24oKTtcclxuXHRcdGNvbnN0IHJlbmRlcmVkV2lkdGggPSBub2RlLnJlbmRlcmVkV2lkdGgoKTtcclxuXHRcdGNvbnN0IHJlbmRlcmVkSGVpZ2h0ID0gbm9kZS5yZW5kZXJlZEhlaWdodCgpO1xyXG5cclxuXHRcdC8vIFBvc2l0aW9uIHRvb2xiYXIgYWJvdmUgdGhlIG5vZGUsIGNlbnRlcmVkXHJcblx0XHR0aGlzLm5vZGVUb29sYmFyUG9zaXRpb24gPSB7XHJcblx0XHRcdHg6IHJlbmRlcmVkUG9zaXRpb24ueCAtIDMwLCAvLyBDZW50ZXIgdGhlIHRvb2xiYXIgKGFwcHJveCBoYWxmIHRvb2xiYXIgd2lkdGgpXHJcblx0XHRcdHk6IHJlbmRlcmVkUG9zaXRpb24ueSAtIHJlbmRlcmVkSGVpZ2h0IC8gMiAtIDQwLCAvLyBBYm92ZSB0aGUgbm9kZVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaGlkZU5vZGVUb29sYmFyKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5pc05vZGVUb29sYmFyVmlzaWJsZSA9IGZhbHNlO1xyXG5cdFx0dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRTdHlsZXNoZWV0KCk6IGN5dG9zY2FwZS5TdHlsZXNoZWV0U3R5bGVbXSB7XHJcblx0XHRyZXR1cm4gU3R5bGVDb25maWc7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09PT09PT09PT09PT09PSBTaWRlYmFyIEV2ZW50cyA9PT09PT09PT09PT09PT09PT09PVxyXG5cclxuXHRvbkNsb3NlU2lkZWJhcigpOiB2b2lkIHtcclxuXHRcdHRoaXMuaXNTaWRlYmFyT3BlbiA9IGZhbHNlO1xyXG5cdFx0dGhpcy5oaWRlTm9kZVRvb2xiYXIoKTtcclxuXHRcdHRoaXMuc2VsZWN0ZWROb2RlRGF0YSA9IG51bGw7XHJcblx0XHQvLyB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0fVxyXG5cclxuXHRvbkRlc2NyaXB0aW9uQ2hhbmdlKGRlc2NyaXB0aW9uOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy5zZWxlY3RlZE5vZGVEYXRhIHx8ICF0aGlzLmN5KSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3Qgbm9kZSA9IHRoaXMuY3k/LmdldEVsZW1lbnRCeUlkKHRoaXMuc2VsZWN0ZWROb2RlRGF0YS5pZCk7XHJcblx0XHRpZiAobm9kZSkge1xyXG5cdFx0XHRjb25zdCB1cGRhdGVkRGF0YTogUmVhZG9ubHlFeHRlbmRlZEFjdGl2aXR5ID0ge1xyXG5cdFx0XHRcdC4uLnRoaXMuc2VsZWN0ZWROb2RlRGF0YSxcclxuXHRcdFx0XHRzdWdnZXN0ZWRQcm9wZXJ0aWVzOiB7XHJcblx0XHRcdFx0XHQuLi50aGlzLnNlbGVjdGVkTm9kZURhdGEuc3VnZ2VzdGVkUHJvcGVydGllcyxcclxuXHRcdFx0XHRcdHVjY3hEZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdHRoaXMud3hjYzJncmFwaC51cGRhdGVBY3Rpdml0eURhdGEodXBkYXRlZERhdGEpO1xyXG5cdFx0XHRub2RlLmRhdGEodXBkYXRlZERhdGEpO1xyXG5cclxuXHRcdFx0dGhpcy5zZWxlY3RlZE5vZGVEYXRhID0gdXBkYXRlZERhdGE7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRvbkFjdGl2aXR5VHlwZUNoYW5nZShhY3Rpdml0eVR5cGU6IEFjdGl2aXR5RGlzcGxheVR5cGUpOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy5zZWxlY3RlZE5vZGVEYXRhIHx8ICF0aGlzLmN5KSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3Qgbm9kZSA9IHRoaXMuY3k/LmdldEVsZW1lbnRCeUlkKHRoaXMuc2VsZWN0ZWROb2RlRGF0YS5pZCk7XHJcblx0XHRpZiAobm9kZSkge1xyXG5cdFx0XHRjb25zdCB1cGRhdGVkRGF0YTogUmVhZG9ubHlFeHRlbmRlZEFjdGl2aXR5ID0ge1xyXG5cdFx0XHRcdC4uLnRoaXMuc2VsZWN0ZWROb2RlRGF0YSxcclxuXHRcdFx0XHR3eGNjQWN0aXZpdHlOYW1lOiBhY3Rpdml0eVR5cGUuYWN0aXZpdHlOYW1lLFxyXG5cdFx0XHRcdHd4Y2NHcm91cDogYWN0aXZpdHlUeXBlLmdyb3VwLFxyXG5cdFx0XHRcdGljb25Vcmw6IGFjdGl2aXR5VHlwZS5pY29uXHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHR0aGlzLnd4Y2MyZ3JhcGgudXBkYXRlQWN0aXZpdHlEYXRhKHVwZGF0ZWREYXRhKTtcclxuXHRcdFx0bm9kZS5kYXRhKHVwZGF0ZWREYXRhKTtcclxuXHJcblx0XHRcdHRoaXMuc2VsZWN0ZWROb2RlRGF0YSA9IHVwZGF0ZWREYXRhO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PT09PT09PT09PT09PT0gTm9kZSBUb29sYmFyIEV2ZW50cyA9PT09PT09PT09PT09PT09PT09PVxyXG5cclxuXHRvbkRlbGV0ZU5vZGUoKTogdm9pZCB7XHJcblx0XHRpZiAoIXRoaXMuc2VsZWN0ZWROb2RlRGF0YSB8fCAhdGhpcy5jeSkgcmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IG5vZGVJZCA9IHRoaXMuc2VsZWN0ZWROb2RlRGF0YS5pZDtcclxuXHJcblx0XHQvLyBSZW1vdmUgZnJvbSBzZXJ2aWNlIGFuZCBnZXQgYWZmZWN0ZWQgbGluayBJRHNcclxuXHRcdGNvbnN0IHsgcmVtb3ZlZExpbmtJZHMgfSA9IHRoaXMud3hjYzJncmFwaC5yZW1vdmVBY3Rpdml0eShub2RlSWQpO1xyXG5cclxuXHRcdC8vIFJlbW92ZSBlZGdlcyBmcm9tIGN5dG9zY2FwZVxyXG5cdFx0cmVtb3ZlZExpbmtJZHMuZm9yRWFjaCgobGlua0lkKSA9PiB7XHJcblx0XHRcdHRoaXMuY3k/LmdldEVsZW1lbnRCeUlkKGxpbmtJZCkucmVtb3ZlKCk7XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBSZW1vdmUgbm9kZSBmcm9tIGN5dG9zY2FwZVxyXG5cdFx0dGhpcy5jeT8uZ2V0RWxlbWVudEJ5SWQobm9kZUlkKS5yZW1vdmUoKTtcclxuXHJcblx0XHQvLyBDbG9zZSBzaWRlYmFyIGFuZCB0b29sYmFyXHJcblx0XHR0aGlzLm9uQ2xvc2VTaWRlYmFyKCk7XHJcblxyXG5cdFx0Ly8gUmUtcnVuIGxheW91dFxyXG5cdFx0dGhpcy5ydW5MYXlvdXQoKTtcclxuXHR9XHJcblxyXG5cdG9uRGVsZXRlU2VsZWN0ZWRFZGdlKCk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aGlzLnNlbGVjdGVkRWRnZUlkIHx8ICF0aGlzLmN5KSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgZWRnZUlkID0gdGhpcy5zZWxlY3RlZEVkZ2VJZDtcclxuXHRcdGNvbnN0IHJlbW92ZWQgPSB0aGlzLnd4Y2MyZ3JhcGgucmVtb3ZlTGluayhlZGdlSWQpO1xyXG5cdFx0aWYgKCFyZW1vdmVkKSByZXR1cm47XHJcblxyXG5cdFx0dGhpcy5jeT8uZ2V0RWxlbWVudEJ5SWQoZWRnZUlkKS5yZW1vdmUoKTtcclxuXHRcdHRoaXMuc2VsZWN0ZWRFZGdlSWQgPSBudWxsO1xyXG5cdFx0dGhpcy5zZWxlY3RlZEVkZ2VEZWxldGVCdXR0b25Qb3NpdGlvbiA9IG51bGw7XHJcblx0XHR0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0fVxyXG5cclxuXHRvbkxpbmtOb2RlUmVxdWVzdCgpOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy5zZWxlY3RlZE5vZGVEYXRhIHx8ICF0aGlzLmN5KSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3Qgc291cmNlTm9kZSA9IHRoaXMuc2VsZWN0ZWROb2RlRGF0YTtcclxuXHJcblx0XHRpZiAoIXRoaXMuY2FuQ3JlYXRlT3V0Z29pbmdMaW5rKHNvdXJjZU5vZGUuaWQpKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBHZXQgdGhlIGN5dG9zY2FwZSBub2RlIHRvIGluc3BlY3QgZXhpc3RpbmcgY29ubmVjdGlvbnNcclxuXHRcdGNvbnN0IGN5Tm9kZSA9IHRoaXMuY3k/LmdldEVsZW1lbnRCeUlkKHNvdXJjZU5vZGUuaWQpO1xyXG5cclxuXHRcdC8vIENvbGxlY3QgSURzIG9mIG5vZGVzIGFscmVhZHkgY29ubmVjdGVkIGFzIHRhcmdldHMgZnJvbSB0aGlzIHNvdXJjZVxyXG5cdFx0Y29uc3QgZXhpc3RpbmdUYXJnZXRJZHMgPSBuZXcgU2V0PHN0cmluZz4oXHJcblx0XHRcdGN5Tm9kZS5vdXRnb2Vycygnbm9kZScpLm1hcCgobjogTm9kZVNpbmd1bGFyKSA9PiBuLmlkKCkpXHJcblx0XHQpO1xyXG5cclxuXHRcdC8vIEJ1aWxkIHRoZSBmaWx0ZXJlZCBsaXN0IG9mIGxpbmthYmxlIHRhcmdldHM6XHJcblx0XHQvLyAgLSBOZXZlciBhbGxvdyB0aGUgc3RhcnQgbm9kZSAoTmV3UGhvbmVDb250YWN0KSBhcyBhIHRhcmdldFxyXG5cdFx0Ly8gIC0gRXhjbHVkZSB0aGUgc291cmNlIG5vZGUgaXRzZWxmXHJcblx0XHQvLyAgLSBFeGNsdWRlIG5vZGVzIGFscmVhZHkgbGlua2VkIGFzIHRhcmdldHMgZnJvbSB0aGlzIHNvdXJjZVxyXG5cdFx0dGhpcy5hdmFpbGFibGVOb2RlcyA9IHRoaXMud3hjYzJncmFwaC5nZXRBbGxBY3Rpdml0aWVzKCkuZmlsdGVyKGFjdCA9PlxyXG5cdFx0XHRhY3QuaWQgIT09IHNvdXJjZU5vZGUuaWQgJiZcclxuXHRcdFx0YWN0Lnd4Y2NBY3Rpdml0eU5hbWUgIT09ICdOZXdQaG9uZUNvbnRhY3QnICYmXHJcblx0XHRcdCFleGlzdGluZ1RhcmdldElkcy5oYXMoYWN0LmlkKVxyXG5cdFx0KTtcclxuXHJcblx0XHRjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKExpbmtOb2RlRGlhbG9nQ29tcG9uZW50LCB7XHJcblx0XHRcdHBhbmVsQ2xhc3M6IFwibm8tcGFkZGluZy1tb2RhbFwiLFxyXG5cdFx0XHR3aWR0aDogXCI1NTBweFwiLFxyXG5cdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0YXZhaWxhYmxlTm9kZXM6IHRoaXMuYXZhaWxhYmxlTm9kZXMsXHJcblx0XHRcdFx0c291cmNlTm9kZTogdGhpcy5zZWxlY3RlZE5vZGVEYXRhLFxyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdFx0ZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG5cdFx0XHRpZiAocmVzdWx0KSB7XHJcblx0XHRcdFx0dGhpcy5vbkxpbmtOb2RlcyhyZXN1bHQpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8vID09PT09PT09PT09PT09PT09PT09IExpbmsgRGlhbG9nIEV2ZW50cyA9PT09PT09PT09PT09PT09PT09PVxyXG5cclxuXHRvbkxpbmtOb2RlcyhsaW5rRGF0YTogTGlua05vZGVEYXRhKTogdm9pZCB7XHJcblx0XHRpZiAoIXRoaXMuY3kpIHJldHVybjtcclxuXHJcblx0XHRpZiAoIXRoaXMuY2FuQ3JlYXRlT3V0Z29pbmdMaW5rKGxpbmtEYXRhLnNvdXJjZU5vZGVJZCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLnd4Y2MyZ3JhcGgubGlua0V4aXN0cyhsaW5rRGF0YS5zb3VyY2VOb2RlSWQsIGxpbmtEYXRhLnRhcmdldE5vZGVJZCkpIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKFwiTGluayBhbHJlYWR5IGV4aXN0cyBiZXR3ZWVuIHRoZXNlIG5vZGVzXCIpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgZWRnZSA9IHRoaXMud3hjYzJncmFwaC5hZGRMaW5rKFxyXG5cdFx0XHRsaW5rRGF0YS5zb3VyY2VOb2RlSWQsXHJcblx0XHRcdGxpbmtEYXRhLnRhcmdldE5vZGVJZCxcclxuXHRcdFx0bGlua0RhdGEubGFiZWwsXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuY3k/LmFkZChlZGdlKTtcclxuXHRcdHRoaXMucnVuTGF5b3V0KCk7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09PT09PT09PT09PT09PSBBZGQgTm9kZSBEaWFsb2cgRXZlbnRzID09PT09PT09PT09PT09PT09PT09XHJcblxyXG5cdG9wZW5BZGROb2RlRGlhbG9nKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5hdmFpbGFibGVOb2RlcyA9IHRoaXMud3hjYzJncmFwaC5nZXRBbGxBY3Rpdml0aWVzKCk7XHJcblxyXG5cdFx0Y29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihBZGROb2RlRGlhbG9nQ29tcG9uZW50LCB7XHJcblx0XHRcdHBhbmVsQ2xhc3M6IFwibm8tcGFkZGluZy1tb2RhbFwiLFxyXG5cdFx0XHR3aWR0aDogJzQ1MHB4JyxcclxuXHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdGF2YWlsYWJsZU5vZGVzOiB0aGlzLmF2YWlsYWJsZU5vZGVzLFxyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdFx0ZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG5cdFx0XHRpZiAocmVzdWx0KSB7XHJcblx0XHRcdFx0dGhpcy5hZGRBY3Rpdml0eShyZXN1bHQpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGFkZEFjdGl2aXR5KG5ld05vZGVEYXRhOiBOZXdOb2RlRGF0YSk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aGlzLmN5KSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3Qgbm9kZSA9IHRoaXMud3hjY0FjdGl2aXR5Q3JlYXRpb25TZXJ2aWNlLmNyZWF0ZUFuZFN5bmMoe1xyXG5cdFx0XHRhY3Rpdml0eVR5cGVOYW1lOiBuZXdOb2RlRGF0YS5hY3Rpdml0eVR5cGVOYW1lLFxyXG5cdFx0XHRuYW1lOiBuZXdOb2RlRGF0YS5uYW1lXHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBBZGQgbm9kZSB0byBjeXRvc2NhcGVcclxuXHRcdHRoaXMuY3k/LmFkZCh7XHJcblx0XHRcdGdyb3VwOiBcIm5vZGVzXCIsXHJcblx0XHRcdGRhdGE6IG5vZGUuZGF0YVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gUmUtcnVuIGxheW91dCB0byBwb3NpdGlvbiB0aGUgbmV3IG5vZGVcclxuXHRcdHRoaXMucnVuTGF5b3V0KCk7XHJcblx0fVxyXG5cclxuXHRvbk5vZGVTZWxlY3RDaGFuZ2UoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0Y29uc3Qgbm9kZSA9IHRoaXMuY3k/LmdldEVsZW1lbnRCeUlkKGlkKSBhcyBOb2RlU2luZ3VsYXI7XHJcblx0XHRpZiAobm9kZSkge1xyXG5cdFx0XHR0aGlzLmN5Py5jZW50ZXIobm9kZSk7XHJcblxyXG5cdFx0XHQvLyBTZXQgaGlnaGxpZ2h0ZWQgcHJvcGVydHkgaW4gbm9kZSBkYXRhXHJcblx0XHRcdGNvbnN0IG9yaWdpbmFsRGF0YSA9IG5vZGUuZGF0YSgpO1xyXG5cdFx0XHRub2RlLmRhdGEoeyAuLi5vcmlnaW5hbERhdGEsIGhpZ2hsaWdodGVkOiB0cnVlIH0pO1xyXG5cdFx0XHRub2RlLmVtaXQoJ2RhdGEnKTtcclxuXHJcblx0XHRcdC8vIFJlbW92ZSBoaWdobGlnaHQgYWZ0ZXIgMXNcclxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgY3VycmVudERhdGEgPSBub2RlLmRhdGEoKTtcclxuXHRcdFx0XHRpZiAoY3VycmVudERhdGEuaGlnaGxpZ2h0ZWQpIHtcclxuXHRcdFx0XHRcdC8vIFJlbW92ZSB0aGUgcHJvcGVydHkgY29tcGxldGVseVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGN1cnJlbnREYXRhLmhpZ2hsaWdodGVkO1xyXG5cdFx0XHRcdFx0bm9kZS5kYXRhKGN1cnJlbnREYXRhKTtcclxuXHRcdFx0XHRcdG5vZGUuZW1pdCgnZGF0YScpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSwgMTAwMCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR6b29tSW4oKTogdm9pZCB7XHJcblx0XHQvLyB0aGlzLmN5dG9zY2FwZVZpZXdwb3J0U2VydmljZS56b29tSW4odGhpcy5jeSk7XHJcblx0fVxyXG5cclxuXHR6b29tT3V0KCk6IHZvaWQge1xyXG5cdFx0Ly8gdGhpcy5jeXRvc2NhcGVWaWV3cG9ydFNlcnZpY2Uuem9vbU91dCh0aGlzLmN5KTtcclxuXHR9XHJcblxyXG5cdHJlc2V0VmlldygpOiB2b2lkIHtcclxuXHRcdC8vIHRoaXMuY3l0b3NjYXBlVmlld3BvcnRTZXJ2aWNlLnJlc2V0Vmlldyh0aGlzLmN5LCB0aGlzLmN5Py5lbGVtZW50cygpKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcnVuTGF5b3V0KCk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aGlzLmN5KSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgbGF5b3V0ID0gdGhpcy5jeT8ubGF5b3V0KHtcclxuXHRcdFx0Li4udGhpcy5sYXlvdXRPcHRpb25zLFxyXG5cdFx0fSkucnVuKCk7XHJcblxyXG5cdFx0bGF5b3V0Lm9uKFwibGF5b3V0c3RvcFwiLCAoKSA9PiB7XHJcblx0XHRcdC8vIHRoaXMuY3l0b3NjYXBlVmlld3BvcnRTZXJ2aWNlLnJlc2V0Vmlldyh0aGlzLmN5LCB0aGlzLmN5Py5lbGVtZW50cygpKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjYW5DcmVhdGVPdXRnb2luZ0xpbmsoc291cmNlTm9kZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHRcdGlmICghdGhpcy5jeSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGNvbnN0IGN5Tm9kZSA9IHRoaXMuY3k/LmdldEVsZW1lbnRCeUlkKHNvdXJjZU5vZGVJZCk7XHJcblx0XHRpZiAoIWN5Tm9kZSB8fCBjeU5vZGUubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Y29uc3Qgc291cmNlQWN0aXZpdHkgPSAoY3lOb2RlLmRhdGEoKSBhcyBSZWFkb25seUV4dGVuZGVkQWN0aXZpdHkpLnd4Y2NBY3Rpdml0eU5hbWU7XHJcblx0XHRjb25zdCBvdXRnb2luZ0VkZ2VDb3VudCA9IGN5Tm9kZS5vdXRnb2VycygnZWRnZScpLmxlbmd0aDtcclxuXHJcblx0XHQvLyBFbmQtdHlwZSBub2RlcyBjYW5ub3QgaGF2ZSBvdXRnb2luZyBsaW5rcy5cclxuXHRcdGNvbnN0IEVORF9OT0RFX1RZUEVTOiBzdHJpbmdbXSA9IFsnZW5kJywgJ2Rpc2Nvbm5lY3QtY29udGFjdCcsICdibGluZC10cmFuc2ZlciddO1xyXG5cdFx0aWYgKEVORF9OT0RFX1RZUEVTLmluY2x1ZGVzKHNvdXJjZUFjdGl2aXR5IGFzIHN0cmluZykpIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHQvLyBTdGFydCBub2RlIGNhbiBvbmx5IGhhdmUgb25lIG91dHB1dC5cclxuXHRcdGlmIChzb3VyY2VBY3Rpdml0eSA9PT0gJ05ld1Bob25lQ29udGFjdCcgJiYgb3V0Z29pbmdFZGdlQ291bnQgPj0gMSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdC8vIENvbmRpdGlvbiBub2RlIGNhbiBvbmx5IGhhdmUgdHJ1ZS9mYWxzZSBvdXRwdXRzLlxyXG5cdFx0aWYgKHNvdXJjZUFjdGl2aXR5ID09PSAnY29uZGl0aW9uLWFjdGl2aXR5JyAmJiBvdXRnb2luZ0VkZ2VDb3VudCA+PSAyKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNsZWFyU2VsZWN0ZWRFZGdlKCk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aGlzLnNlbGVjdGVkRWRnZUlkIHx8ICF0aGlzLmN5KSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgZWRnZSA9IHRoaXMuY3k/LmdldEVsZW1lbnRCeUlkKHRoaXMuc2VsZWN0ZWRFZGdlSWQpO1xyXG5cdFx0aWYgKGVkZ2UgJiYgZWRnZS5sZW5ndGgpIHtcclxuXHRcdFx0ZWRnZS51bnNlbGVjdCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc2VsZWN0ZWRFZGdlSWQgPSBudWxsO1xyXG5cdFx0dGhpcy5zZWxlY3RlZEVkZ2VEZWxldGVCdXR0b25Qb3NpdGlvbiA9IG51bGw7XHJcblx0XHR0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHVwZGF0ZVNlbGVjdGVkRWRnZURlbGV0ZUJ1dHRvblBvc2l0aW9uKCk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aGlzLmN5IHx8ICF0aGlzLnNlbGVjdGVkRWRnZUlkKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWRFZGdlRGVsZXRlQnV0dG9uUG9zaXRpb24gPSBudWxsO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgZWRnZSA9IHRoaXMuY3k/LmdldEVsZW1lbnRCeUlkKHRoaXMuc2VsZWN0ZWRFZGdlSWQpO1xyXG5cdFx0aWYgKCFlZGdlIHx8IGVkZ2UubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWRFZGdlRGVsZXRlQnV0dG9uUG9zaXRpb24gPSBudWxsO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgbWlkcG9pbnQgPSAoZWRnZSBhcyBFZGdlU2luZ3VsYXIpLnJlbmRlcmVkTWlkcG9pbnQoKTtcclxuXHJcblx0XHQvLyBTbGlnaHQgb2Zmc2V0IHNvIHRoZSBpY29uIGRvZXMgbm90IHNpdCBleGFjdGx5IG9uIHRvcCBvZiB0aGUgZWRnZSBsaW5lLlxyXG5cdFx0dGhpcy5zZWxlY3RlZEVkZ2VEZWxldGVCdXR0b25Qb3NpdGlvbiA9IHtcclxuXHRcdFx0eDogbWlkcG9pbnQueCArIDEyLFxyXG5cdFx0XHR5OiBtaWRwb2ludC55IC0gMTIsXHJcblx0XHR9O1xyXG5cdH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwid3hjYy1mbG93Y2hhcnQtY29udGFpbmVyXCI+XHJcbiAgPGRpdiAjZmxvd2NoYXJ0Q29udGFpbmVyIGNsYXNzPVwiZmxvd2NoYXJ0LWNhbnZhc1wiPjwvZGl2PlxyXG5cclxuICA8IS0tIEZsb2F0aW5nIHRvb2xiYXIgZm9yIHZpZXdwb3J0IGNvbnRyb2xzIC0tPlxyXG4gIDxncmFwaC1mbG9hdGluZy10b29sYmFyXHJcbiAgICBbdmlzaWJpbGl0eV09XCJ7IGV4cG9ydDogZmFsc2UgfVwiXHJcbiAgICAocmVzZXRWaWV3Q2hhbmdlKT1cInJlc2V0VmlldygpXCJcclxuICAgICh6b29tSW5DaGFuZ2UpPVwiem9vbUluKClcIlxyXG4gICAgKHpvb21PdXRDaGFuZ2UpPVwiem9vbU91dCgpXCI+XHJcbiAgPC9ncmFwaC1mbG9hdGluZy10b29sYmFyPlxyXG5cclxuICA8IS0tIEdyYXBoIEFjdHMgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImdyYXBoLWFjdGlvbnMtd3JhcHBlclwiPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBjbGFzcz1cImFkZC1ub2RlLWJ0blwiXHJcbiAgICAgIG1hdFRvb2x0aXA9XCJTZWFyY2ggd29ya2Zsb3dcIlxyXG4gICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXHJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVTZWFyY2hQYW5lbCgpXCJcclxuICAgID5cclxuICAgICAgPGltZyBzcmM9XCJhc3NldHMvd3hjYy9zZWFyY2guc3ZnXCIgd2lkdGg9XCIyOFwiIGhlaWdodD1cIjI4XCIgYWx0PVwiXCIgLz5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBjbGFzcz1cImFkZC1ub2RlLWJ0blwiXHJcbiAgICAgIG1hdFRvb2x0aXA9XCJBZGQgTmV3IE5vZGVcIlxyXG4gICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXHJcbiAgICAgIChjbGljayk9XCJvcGVuQWRkTm9kZURpYWxvZygpXCJcclxuICAgID5cclxuICAgICAgPHN2Z1xyXG4gICAgICAgIHdpZHRoPVwiMjhcIlxyXG4gICAgICAgIGhlaWdodD1cIjI4XCJcclxuICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcclxuICAgICAgICBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcclxuICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxsaW5lIHgxPVwiMTJcIiB5MT1cIjVcIiB4Mj1cIjEyXCIgeTI9XCIxOVwiPjwvbGluZT5cclxuICAgICAgICA8bGluZSB4MT1cIjVcIiB5MT1cIjEyXCIgeDI9XCIxOVwiIHkyPVwiMTJcIj48L2xpbmU+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxidXR0b25cclxuICAgICpuZ0lmPVwic2VsZWN0ZWRFZGdlSWQgJiYgc2VsZWN0ZWRFZGdlRGVsZXRlQnV0dG9uUG9zaXRpb25cIlxyXG4gICAgY2xhc3M9XCJlZGdlLWRlbGV0ZS1idG5cIlxyXG4gICAgbWF0VG9vbHRpcD1cIkRlbGV0ZSB0aGlzIGVkZ2VcIlxyXG4gICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gICAgW3N0eWxlLmxlZnQucHhdPVwic2VsZWN0ZWRFZGdlRGVsZXRlQnV0dG9uUG9zaXRpb24ueFwiXHJcbiAgICBbc3R5bGUudG9wLnB4XT1cInNlbGVjdGVkRWRnZURlbGV0ZUJ1dHRvblBvc2l0aW9uLnlcIlxyXG4gICAgKGNsaWNrKT1cIm9uRGVsZXRlU2VsZWN0ZWRFZGdlKClcIlxyXG4gICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICBhcmlhLWxhYmVsPVwiRGVsZXRlIHNlbGVjdGVkIGVkZ2VcIlxyXG4gID5cclxuICAgIMOXXHJcbiAgPC9idXR0b24+XHJcblxyXG4gIDxub2RlLXNlYXJjaC1wYW5lbFxyXG4gICAgY2xhc3M9XCJmYWRlLWluLXNlYXJjaC1wYW5lbFwiXHJcbiAgICBbY2xhc3MudmlzaWJsZV09XCJpc1NlYXJjaFBhbmVsVmlzaWJsZVwiXHJcbiAgICBbbm9kZXNdPVwiYWN0aXZpdGllc1wiXHJcbiAgICAoc2VsZWN0Tm9kZUNoYW5nZSk9XCJvbk5vZGVTZWxlY3RDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAoc2VhcmNoQ2hhbmdlKT1cIm9wZW5BZGROb2RlRGlhbG9nKClcIlxyXG4gID5cclxuICA8L25vZGUtc2VhcmNoLXBhbmVsPlxyXG5cclxuICA8IS0tIE5vZGUgYWN0aW9uIHRvb2xiYXIgKGZsb2F0aW5nIG5lYXIgc2VsZWN0ZWQgbm9kZSkgLS0+XHJcbiAgPG5vZGUtYWN0aW9uLXRvb2xiYXJcclxuICAgIFtpc1Zpc2libGVdPVwiaXNOb2RlVG9vbGJhclZpc2libGVcIlxyXG4gICAgW3Bvc2l0aW9uXT1cIm5vZGVUb29sYmFyUG9zaXRpb25cIlxyXG4gICAgKGRlbGV0ZU5vZGUpPVwib25EZWxldGVOb2RlKClcIlxyXG4gICAgKGxpbmtOb2RlKT1cIm9uTGlua05vZGVSZXF1ZXN0KClcIlxyXG4gID5cclxuICA8L25vZGUtYWN0aW9uLXRvb2xiYXI+XHJcblxyXG4gIDwhLS0gTm9kZSBkZXRhaWxzIHNpZGViYXIgLS0+XHJcbiAgPG5vZGUtZGV0YWlscy1zaWRlYmFyXHJcbiAgICBbaXNPcGVuXT1cImlzU2lkZWJhck9wZW5cIlxyXG4gICAgW25vZGVEYXRhXT1cInNlbGVjdGVkTm9kZURhdGFcIlxyXG4gICAgKGNsb3NlKT1cIm9uQ2xvc2VTaWRlYmFyKClcIlxyXG4gICAgKGRlc2NyaXB0aW9uQ2hhbmdlKT1cIm9uRGVzY3JpcHRpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAoYWN0aXZpdHlUeXBlQ2hhbmdlKT1cIm9uQWN0aXZpdHlUeXBlQ2hhbmdlKCRldmVudClcIlxyXG4gID5cclxuICA8L25vZGUtZGV0YWlscy1zaWRlYmFyPlxyXG48L2Rpdj5cclxuIl19
|
|
434
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3hjYy1mbG93Y2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL2NvbnRhY3QtY2VudGVyL2NjLXNjcmlwdC1lZGl0b3IvY29tcG9uZW50cy93eGNjLWZsb3djaGFydC93eGNjLWZsb3djaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvY29udGFjdC1jZW50ZXIvY2Mtc2NyaXB0LWVkaXRvci9jb21wb25lbnRzL3d4Y2MtZmxvd2NoYXJ0L3d4Y2MtZmxvd2NoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTix1QkFBdUIsRUFFdkIsU0FBUyxFQUVULEtBQUssRUFJTCxTQUFTLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxTQUlOLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sS0FBSyxNQUFNLGlCQUFpQixDQUFDO0FBQ3BDLE9BQU8sYUFBYSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUlyRSxPQUFPLEVBQ04sc0JBQXNCLEVBRXRCLE1BQU0sc0RBQXNELENBQUM7QUFDOUQsT0FBTyxFQUVOLHVCQUF1QixFQUN2QixNQUFNLHdEQUF3RCxDQUFDOzs7Ozs7Ozs7Ozs7QUFNaEUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyQixTQUFTLENBQUMsR0FBRyxDQUFDLGFBQW9CLENBQUMsQ0FBQztBQVFwQyxNQUFNLE9BQU8sc0JBQXNCO0lBcUNsQyxZQUNrQixVQUE2QixFQUM3Qix3QkFBa0QsRUFDbEQsTUFBaUIsRUFDakIsMkJBQXdELEVBQ2pFLEdBQXNCO1FBSmIsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFDN0IsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLGdDQUEyQixHQUEzQiwyQkFBMkIsQ0FBNkI7UUFDakUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFyQ3ZCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDVCxrQkFBYSxHQUE2QjtZQUMxRCxJQUFJLEVBQUUsT0FBTztZQUNiLE9BQU8sRUFBRSxJQUFJO1lBQ2IsT0FBTyxFQUFFLEdBQUc7WUFDWixPQUFPLEVBQUUsRUFBRTtZQUNYLE9BQU8sRUFBRSxHQUFHO1lBQ1osT0FBTyxFQUFFLElBQUk7WUFDYixpQkFBaUIsRUFBRSxHQUFHO1lBQ3RCLEdBQUcsRUFBRSxJQUFJO1NBQ1QsQ0FBQztRQUVGLGdCQUFnQjtRQUNoQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixxQkFBZ0IsR0FBb0MsSUFBSSxDQUFDO1FBRXpELHFCQUFxQjtRQUNyQix5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDN0IsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRTNCLDRCQUE0QjtRQUM1Qix5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDN0Isd0JBQW1CLEdBQXdCLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFFMUQsd0JBQXdCO1FBQ3hCLG1CQUFjLEdBQStCLEVBQUUsQ0FBQztRQUVoRCx5QkFBeUI7UUFDekIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUNyQyxxQ0FBZ0MsR0FBb0MsSUFBSSxDQUFDO0lBUXJFLENBQUM7SUFFTCxlQUFlO1FBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDakMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDekIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2Y7SUFDRixDQUFDO0lBRUQsV0FBVztRQUNWLElBQUksQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVPLE9BQU87UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbkUsT0FBTztTQUNQO1FBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2IsQ0FBQztJQUVPLElBQUk7UUFDWCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDO1FBRXhELElBQUksQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUM7UUFFcEIsTUFBTSxRQUFRLEdBQXdCO1lBQ3JDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO1lBQ3ZCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO1NBQ3ZCLENBQUM7UUFFRixJQUFJLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQztZQUNuQixTQUFTLEVBQUUsU0FBUztZQUNwQixRQUFRLEVBQUUsUUFBUTtZQUNsQixLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRTtTQUMzQixDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsRUFBVSxDQUFDLGFBQWEsQ0FBQztZQUM5QjtnQkFDQyxLQUFLLEVBQUUsTUFBTTtnQkFDYixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLFNBQVMsRUFBRSxRQUFRO2dCQUNuQixTQUFTLEVBQUUsUUFBUTtnQkFDbkIsR0FBRyxFQUFFLENBQUMsSUFBOEIsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO2FBQ2xFO1NBQ0QsQ0FBQyxDQUFDO1FBRUgsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7WUFDOUIsR0FBRyxJQUFJLENBQUMsYUFBYTtTQUNyQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFVCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7WUFDNUIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFTLENBQUMsQ0FBQztRQUNyRixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLFVBQVUsS0FBSyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFL0QsaUNBQWlDO0lBQ2pDLGlCQUFpQjtRQUNoQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDdkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8sbUJBQW1CO1FBQzFCLDZEQUE2RDtRQUM3RCxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDMUMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQXNCLENBQUM7WUFDMUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLEVBQThCLENBQUM7WUFFaEUsdURBQXVEO1lBQ3ZELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1lBRWpDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQXNCLENBQUM7WUFDMUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLEVBQThCLENBQUM7WUFDaEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFFMUIsa0NBQWtDO1lBQ2xDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7WUFFbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMxQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsTUFBc0IsQ0FBQztZQUMxQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUVILHNEQUFzRDtRQUN0RCxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQXNCLENBQUM7WUFFMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7WUFFN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUVILHlDQUF5QztRQUN6QyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM1QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7YUFDN0I7UUFDRixDQUFDLENBQUMsQ0FBQztRQUVILDRDQUE0QztRQUM1QyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO1lBQzVCLElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDdkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRCxJQUFJLElBQUksRUFBRSxNQUFNLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDakM7YUFDRDtZQUVELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLENBQUM7YUFDOUM7WUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVPLHFCQUFxQixDQUFDLElBQWtCO1FBQy9DLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDakQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUU3Qyw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHO1lBQzFCLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsRUFBRTtZQUMxQixDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLGNBQWMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLGlCQUFpQjtTQUNsRSxDQUFDO0lBQ0gsQ0FBQztJQUVPLGVBQWU7UUFDdEIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztRQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxhQUFhO1FBQ3BCLE9BQU8sV0FBVyxDQUFDO0lBQ3BCLENBQUM7SUFFRCwyREFBMkQ7SUFFM0QsY0FBYztRQUNiLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLDRCQUE0QjtJQUM3QixDQUFDO0lBRUQsbUJBQW1CLENBQUMsV0FBbUI7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQUUsT0FBTztRQUUvQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0QsSUFBSSxJQUFJLEVBQUU7WUFDVCxNQUFNLFdBQVcsR0FBNkI7Z0JBQzdDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQjtnQkFDeEIsbUJBQW1CLEVBQUU7b0JBQ3BCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQjtvQkFDNUMsZUFBZSxFQUFFLFdBQVc7aUJBQzVCO2FBQ0QsQ0FBQztZQUVGLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUV2QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDO1NBQ3BDO0lBQ0YsQ0FBQztJQUVELG9CQUFvQixDQUFDLFlBQWlDO1FBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU87UUFFL0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELElBQUksSUFBSSxFQUFFO1lBQ1QsTUFBTSxXQUFXLEdBQTZCO2dCQUM3QyxHQUFHLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ3hCLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxZQUFZO2dCQUMzQyxTQUFTLEVBQUUsWUFBWSxDQUFDLEtBQUs7Z0JBQzdCLE9BQU8sRUFBRSxZQUFZLENBQUMsSUFBSTthQUMxQixDQUFDO1lBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRXZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7U0FDcEM7SUFDRixDQUFDO0lBRUQsZ0VBQWdFO0lBRWhFLFlBQVk7UUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFPO1FBRS9DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7UUFFeEMsZ0RBQWdEO1FBQ2hELE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVsRSw4QkFBOEI7UUFDOUIsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRXpDLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsb0JBQW9CO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFPO1FBRTdDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRXJCLElBQUksQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxJQUFJLENBQUM7UUFDN0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsaUJBQWlCO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU87UUFFL0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBRXpDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQy9DLE9BQU87U0FDUDtRQUVELHlEQUF5RDtRQUN6RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdEQscUVBQXFFO1FBQ3JFLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLENBQ2hDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDeEQsQ0FBQztRQUVGLCtDQUErQztRQUMvQyw4REFBOEQ7UUFDOUQsb0NBQW9DO1FBQ3BDLDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDckUsR0FBRyxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsRUFBRTtZQUN4QixHQUFHLENBQUMsZ0JBQWdCLEtBQUssaUJBQWlCO1lBQzFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FDOUIsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFO1lBQzNELFVBQVUsRUFBRSxrQkFBa0I7WUFDOUIsS0FBSyxFQUFFLE9BQU87WUFDZCxJQUFJLEVBQUU7Z0JBQ0wsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO2dCQUNuQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjthQUNqQztTQUNELENBQUMsQ0FBQztRQUVILFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUNqRCxJQUFJLE1BQU0sRUFBRTtnQkFDWCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3pCO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsK0RBQStEO0lBRS9ELFdBQVcsQ0FBQyxRQUFzQjtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFPO1FBRXJCLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ3ZELE9BQU87U0FDUDtRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDN0UsT0FBTyxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1lBQ3hELE9BQU87U0FDUDtRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUNuQyxRQUFRLENBQUMsWUFBWSxFQUNyQixRQUFRLENBQUMsWUFBWSxFQUNyQixRQUFRLENBQUMsS0FBSyxDQUNkLENBQUM7UUFFRixJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELG1FQUFtRTtJQUVuRSxpQkFBaUI7UUFDaEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFekQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDMUQsVUFBVSxFQUFFLGtCQUFrQjtZQUM5QixLQUFLLEVBQUUsT0FBTztZQUNkLElBQUksRUFBRTtnQkFDTCxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7YUFDbkM7U0FDRCxDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7WUFDakQsSUFBSSxNQUFNLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN6QjtRQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVcsQ0FBQyxXQUF3QjtRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFPO1FBRXJCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxhQUFhLENBQUM7WUFDM0QsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLGdCQUFnQjtZQUM5QyxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUk7U0FDdEIsQ0FBQyxDQUFDO1FBRUgsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDO1lBQ1osS0FBSyxFQUFFLE9BQU87WUFDZCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDZixDQUFDLENBQUM7UUFFSCx5Q0FBeUM7UUFDekMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxFQUFVO1FBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBaUIsQ0FBQztRQUN6RCxJQUFJLElBQUksRUFBRTtZQUNULElBQUksQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXRCLHdDQUF3QztZQUN4QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsWUFBWSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFbEIsNEJBQTRCO1lBQzVCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2YsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoQyxJQUFJLFdBQVcsQ0FBQyxXQUFXLEVBQUU7b0JBQzVCLGlDQUFpQztvQkFDakMsT0FBTyxXQUFXLENBQUMsV0FBVyxDQUFDO29CQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNsQjtZQUNGLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNUO0lBQ0YsQ0FBQztJQUVELE1BQU07UUFDTCxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsT0FBTztRQUNOLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQVMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxTQUFTO1FBQ1IsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFTLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRU8sU0FBUztRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFPO1FBRXJCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDO1lBQzlCLEdBQUcsSUFBSSxDQUFDLGFBQWE7U0FDckIsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRVQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO1lBQzVCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBUyxDQUFDLENBQUM7UUFDckYsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8scUJBQXFCLENBQUMsWUFBb0I7UUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUVqRCxNQUFNLGNBQWMsR0FBSSxNQUFNLENBQUMsSUFBSSxFQUErQixDQUFDLGdCQUFnQixDQUFDO1FBQ3BGLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFekQsNkNBQTZDO1FBQzdDLE1BQU0sY0FBYyxHQUFhLENBQUMsS0FBSyxFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDakYsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLGNBQXdCLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUVwRSx1Q0FBdUM7UUFDdkMsSUFBSSxjQUFjLEtBQUssaUJBQWlCLElBQUksaUJBQWlCLElBQUksQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRWpGLG1EQUFtRDtRQUNuRCxJQUFJLGNBQWMsS0FBSyxvQkFBb0IsSUFBSSxpQkFBaUIsSUFBSSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFcEYsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRU8saUJBQWlCO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFPO1FBRTdDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxRCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNoQjtRQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxJQUFJLENBQUM7UUFDN0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sc0NBQXNDO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQyxJQUFJLENBQUMsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDO1lBQzdDLE9BQU87U0FDUDtRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQy9CLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxJQUFJLENBQUM7WUFDN0MsT0FBTztTQUNQO1FBRUQsTUFBTSxRQUFRLEdBQUksSUFBcUIsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRTNELDBFQUEwRTtRQUMxRSxJQUFJLENBQUMsZ0NBQWdDLEdBQUc7WUFDdkMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRTtZQUNsQixDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFO1NBQ2xCLENBQUM7SUFDSCxDQUFDOztvSEF0Zlcsc0JBQXNCO3dHQUF0QixzQkFBc0IseU9DL0NuQywwbEZBbUZBOzRGRHBDYSxzQkFBc0I7a0JBTmxDLFNBQVM7K0JBQ0MsZ0JBQWdCLG1CQUdULHVCQUF1QixDQUFDLE1BQU07aVBBR3RDLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQzJCLGtCQUFrQjtzQkFBbEQsU0FBUzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG5cdEFmdGVyVmlld0luaXQsXHJcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXHJcblx0Q29tcG9uZW50LFxyXG5cdEVsZW1lbnRSZWYsXHJcblx0SW5wdXQsXHJcblx0T25DaGFuZ2VzLFxyXG5cdE9uRGVzdHJveSxcclxuXHRTaW1wbGVDaGFuZ2VzLFxyXG5cdFZpZXdDaGlsZFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IElXeENDRmxvd2NoYXJ0IH0gZnJvbSBcIi4uLy4uL3R5cGVzL3d4Y2NcIjtcclxuaW1wb3J0IGN5dG9zY2FwZSwge1xyXG5cdEVsZW1lbnREZWZpbml0aW9uLFxyXG5cdEVkZ2VTaW5ndWxhcixcclxuXHROb2RlU2luZ3VsYXJcclxufSBmcm9tIFwiY3l0b3NjYXBlXCI7XHJcbmltcG9ydCBkYWdyZSBmcm9tIFwiY3l0b3NjYXBlLWRhZ3JlXCI7XHJcbmltcG9ydCBub2RlSHRtbExhYmVsIGZyb20gXCJjeXRvc2NhcGUtbm9kZS1odG1sLWxhYmVsXCI7XHJcbmltcG9ydCB7IFN0eWxlQ29uZmlnIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy9jeXRvc2NhcGUuY29uZmlnXCI7XHJcbmltcG9ydCB7IGdldE5vZGVIdG1sVGVtcGxhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvbm9kZS1odG1sLXRlbXBsYXRlXCI7XHJcbmltcG9ydCB7IEFjdGl2aXR5RGlzcGxheVR5cGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvbm9kZS1tYXBwaW5nc1wiO1xyXG5pbXBvcnQgeyBXeENDMkdyYXBoU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy93eGNjMmdyYXBoLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTm9kZVRvb2xiYXJQb3NpdGlvbiB9IGZyb20gXCIuLi9ub2RlLWFjdGlvbi10b29sYmFyL25vZGUtYWN0aW9uLXRvb2xiYXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7XHJcblx0QWRkTm9kZURpYWxvZ0NvbXBvbmVudCxcclxuXHROZXdOb2RlRGF0YVxyXG59IGZyb20gXCIuLi9kaWFsb2dzL2FkZC1ub2RlLWRpYWxvZy9hZGQtbm9kZS1kaWFsb2cuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7XHJcblx0TGlua05vZGVEYXRhLFxyXG5cdExpbmtOb2RlRGlhbG9nQ29tcG9uZW50XHJcbn0gZnJvbSBcIi4uL2RpYWxvZ3MvbGluay1ub2RlLWRpYWxvZy9saW5rLW5vZGUtZGlhbG9nLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IFJlYWRvbmx5RXh0ZW5kZWRBY3Rpdml0eSB9IGZyb20gXCIuLi8uLi90eXBlcy9leHRlbmRlZC1hY3Rpdml0eVwiO1xyXG5pbXBvcnQgeyBXeENDQWN0aXZpdHlDcmVhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvd3hjYy1hY3Rpdml0eS1jcmVhdGlvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEN5dG9zY2FwZVZpZXdwb3J0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9jeXN0b3NjYXBlLXZpZXdwb3J0LnNlcnZpY2VcIjtcclxuXHJcbmN5dG9zY2FwZS51c2UoZGFncmUpO1xyXG5jeXRvc2NhcGUudXNlKG5vZGVIdG1sTGFiZWwgYXMgYW55KTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiBcInd4Y2MtZmxvd2NoYXJ0XCIsXHJcblx0dGVtcGxhdGVVcmw6IFwiLi93eGNjLWZsb3djaGFydC5jb21wb25lbnQuaHRtbFwiLFxyXG5cdHN0eWxlVXJsczogW1wiLi93eGNjLWZsb3djaGFydC5jb21wb25lbnQuc2Nzc1wiXSxcclxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFd4Q0NGbG93Y2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcblx0QElucHV0KCkgZmxvd2NoYXJ0ITogSVd4Q0NGbG93Y2hhcnQ7XHJcblx0QFZpZXdDaGlsZChcImZsb3djaGFydENvbnRhaW5lclwiKSBmbG93Y2hhcnRDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcblx0cHJpdmF0ZSBjeT86IGN5dG9zY2FwZS5Db3JlO1xyXG5cdHByaXZhdGUgdmlld1JlYWR5ID0gZmFsc2U7XHJcblx0cHJpdmF0ZSByZWFkb25seSBsYXlvdXRPcHRpb25zOiBkYWdyZS5EYWdyZUxheW91dE9wdGlvbnMgPSB7XHJcblx0XHRuYW1lOiBcImRhZ3JlXCIsXHJcblx0XHRyYW5rRGlyOiBcIkxSXCIsXHJcblx0XHRub2RlU2VwOiAxODAsXHJcblx0XHRlZGdlU2VwOiA2MCxcclxuXHRcdHJhbmtTZXA6IDE1MCxcclxuXHRcdGFuaW1hdGU6IHRydWUsXHJcblx0XHRhbmltYXRpb25EdXJhdGlvbjogNTAwLFxyXG5cdFx0Zml0OiB0cnVlXHJcblx0fTtcclxuXHJcblx0Ly8gU2lkZWJhciBzdGF0ZVxyXG5cdGlzU2lkZWJhck9wZW4gPSBmYWxzZTtcclxuXHRzZWxlY3RlZE5vZGVEYXRhOiBSZWFkb25seUV4dGVuZGVkQWN0aXZpdHkgfCBudWxsID0gbnVsbDtcclxuXHJcblx0Ly8gU2VhcmNoIHBhbmVsIHN0YXRlXHJcblx0aXNTZWFyY2hQYW5lbFZpc2libGUgPSBmYWxzZTtcclxuXHRzZWFyY2hQYW5lbFZpc2libGUgPSBmYWxzZTtcclxuXHJcblx0Ly8gTm9kZSBhY3Rpb24gdG9vbGJhciBzdGF0ZVxyXG5cdGlzTm9kZVRvb2xiYXJWaXNpYmxlID0gZmFsc2U7XHJcblx0bm9kZVRvb2xiYXJQb3NpdGlvbjogTm9kZVRvb2xiYXJQb3NpdGlvbiA9IHsgeDogMCwgeTogMCB9O1xyXG5cclxuXHQvLyBBZGQgbm9kZSBkaWFsb2cgc3RhdGVcclxuXHRhdmFpbGFibGVOb2RlczogUmVhZG9ubHlFeHRlbmRlZEFjdGl2aXR5W10gPSBbXTtcclxuXHJcblx0Ly8gTGluayBub2RlIGRpYWxvZyBzdGF0ZVxyXG5cdGlzTGlua0RpYWxvZ09wZW4gPSBmYWxzZTtcclxuXHRzZWxlY3RlZEVkZ2VJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblx0c2VsZWN0ZWRFZGdlRGVsZXRlQnV0dG9uUG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgcmVhZG9ubHkgd3hjYzJncmFwaDogV3hDQzJHcmFwaFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHJlYWRvbmx5IGN5dG9zY2FwZVZpZXdwb3J0U2VydmljZTogQ3l0b3NjYXBlVmlld3BvcnRTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IE1hdERpYWxvZyxcclxuXHRcdHByaXZhdGUgcmVhZG9ubHkgd3hjY0FjdGl2aXR5Q3JlYXRpb25TZXJ2aWNlOiBXeENDQWN0aXZpdHlDcmVhdGlvblNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcblx0KSB7IH1cclxuXHJcblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy52aWV3UmVhZHkgPSB0cnVlO1xyXG5cdFx0dGhpcy50cnlJbml0KCk7XHJcblx0fVxyXG5cclxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcblx0XHRpZiAoY2hhbmdlc1tcImZsb3djaGFydFwiXSkge1xyXG5cdFx0XHR0aGlzLnRyeUluaXQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5jeT8uZGVzdHJveSgpO1xyXG5cdFx0dGhpcy5jeSA9IHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgdHJ5SW5pdCgpOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy52aWV3UmVhZHkgfHwgIXRoaXMuZmxvd2NoYXJ0Q29udGFpbmVyIHx8ICF0aGlzLmZsb3djaGFydCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5pbml0KCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGluaXQoKTogdm9pZCB7XHJcblx0XHRjb25zdCBjb250YWluZXIgPSB0aGlzLmZsb3djaGFydENvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xyXG5cclxuXHRcdHRoaXMuY3k/LmRlc3Ryb3koKTtcclxuXHRcdHRoaXMuY3kgPSB1bmRlZmluZWQ7XHJcblxyXG5cdFx0Y29uc3QgZWxlbWVudHM6IEVsZW1lbnREZWZpbml0aW9uW10gPSBbXHJcblx0XHRcdC4uLnRoaXMuZmxvd2NoYXJ0Lm5vZGVzLFxyXG5cdFx0XHQuLi50aGlzLmZsb3djaGFydC5lZGdlcyxcclxuXHRcdF07XHJcblxyXG5cdFx0dGhpcy5jeSA9IGN5dG9zY2FwZSh7XHJcblx0XHRcdGNvbnRhaW5lcjogY29udGFpbmVyLFxyXG5cdFx0XHRlbGVtZW50czogZWxlbWVudHMsXHJcblx0XHRcdHN0eWxlOiB0aGlzLmdldFN0eWxlc2hlZXQoKSxcclxuXHRcdH0pO1xyXG5cclxuXHRcdCh0aGlzLmN5IGFzIGFueSkubm9kZUh0bWxMYWJlbChbXHJcblx0XHRcdHtcclxuXHRcdFx0XHRxdWVyeTogXCJub2RlXCIsXHJcblx0XHRcdFx0aGFsaWduOiBcImNlbnRlclwiLFxyXG5cdFx0XHRcdHZhbGlnbjogXCJjZW50ZXJcIixcclxuXHRcdFx0XHRoYWxpZ25Cb3g6IFwiY2VudGVyXCIsXHJcblx0XHRcdFx0dmFsaWduQm94OiBcImNlbnRlclwiLFxyXG5cdFx0XHRcdHRwbDogKGRhdGE6IFJlYWRvbmx5RXh0ZW5kZWRBY3Rpdml0eSkgPT4gZ2V0Tm9kZUh0bWxUZW1wbGF0ZShkYXRhKSxcclxuXHRcdFx0fSxcclxuXHRcdF0pO1xyXG5cclxuXHRcdGNvbnN0IGxheW91dCA9IHRoaXMuY3k/LmxheW91dCh7XHJcblx0XHRcdC4uLnRoaXMubGF5b3V0T3B0aW9ucyxcclxuXHRcdH0pLnJ1bigpO1xyXG5cclxuXHRcdGxheW91dC5vbihcImxheW91dHN0b3BcIiwgKCkgPT4ge1xyXG5cdFx0XHR0aGlzLmN5dG9zY2FwZVZpZXdwb3J0U2VydmljZS5yZXNldFZpZXcodGhpcy5jeSBhcyBhbnksIHRoaXMuY3k/LmVsZW1lbnRzKCkgYXMgYW55KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdHRoaXMuc2V0dXBFdmVudExpc3RlbmVycygpO1xyXG5cdH1cclxuXHJcblx0Z2V0IGFjdGl2aXRpZXMoKSB7IHJldHVybiB0aGlzLnd4Y2MyZ3JhcGguZ2V0QWxsQWN0aXZpdGllcygpOyB9XHJcblxyXG5cdC8vIFRvZ2dsZSBzZWFyY2ggcGFuZWwgdmlzaWJpbGl0eVxyXG5cdHRvZ2dsZVNlYXJjaFBhbmVsKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5pc1NlYXJjaFBhbmVsVmlzaWJsZSA9ICF0aGlzLmlzU2VhcmNoUGFuZWxWaXNpYmxlO1xyXG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldHVwRXZlbnRMaXN0ZW5lcnMoKTogdm9pZCB7XHJcblx0XHQvLyBTaW5nbGUgdGFwIG9uIG5vZGUgLSBzaG93IG9ubHkgdGhlIHRvb2xiYXIgKHF1aWNrIGFjdGlvbnMpXHJcblx0XHR0aGlzLmN5Py5vbihcIm1vdXNlb3ZlclwiLCBcIm5vZGVcIiwgKGV2ZW50KSA9PiB7XHJcblx0XHRcdGNvbnN0IG5vZGUgPSBldmVudC50YXJnZXQgYXMgTm9kZVNpbmd1bGFyO1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkTm9kZURhdGEgPSBub2RlLmRhdGEoKSBhcyBSZWFkb25seUV4dGVuZGVkQWN0aXZpdHk7XHJcblxyXG5cdFx0XHQvLyBDYWxjdWxhdGUgdG9vbGJhciBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyXHJcblx0XHRcdHRoaXMudXBkYXRlVG9vbGJhclBvc2l0aW9uKG5vZGUpO1xyXG5cdFx0XHR0aGlzLmlzTm9kZVRvb2xiYXJWaXNpYmxlID0gdHJ1ZTtcclxuXHJcblx0XHRcdHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdHRoaXMuY3k/Lm9uKFwidGFwXCIsIFwibm9kZVwiLCAoZXZlbnQpID0+IHtcclxuXHRcdFx0Y29uc3Qgbm9kZSA9IGV2ZW50LnRhcmdldCBhcyBOb2RlU2luZ3VsYXI7XHJcblx0XHRcdHRoaXMuY2xlYXJTZWxlY3RlZEVkZ2UoKTtcclxuXHRcdFx0dGhpcy5zZWxlY3RlZE5vZGVEYXRhID0gbm9kZS5kYXRhKCkgYXMgUmVhZG9ubHlFeHRlbmRlZEFjdGl2aXR5O1xyXG5cdFx0XHR0aGlzLmlzU2lkZWJhck9wZW4gPSB0cnVlO1xyXG5cclxuXHRcdFx0Ly8gSGlkZSB0b29sYmFyIHdoZW4gc2lkZWJhciBvcGVuc1xyXG5cdFx0XHR0aGlzLmlzTm9kZVRvb2xiYXJWaXNpYmxlID0gZmFsc2U7XHJcblxyXG5cdFx0XHR0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHR9KTtcclxuXHJcblx0XHR0aGlzLmN5Py5vbihcIm1vdXNlbW92ZVwiLCBcIm5vZGVcIiwgKGV2ZW50KSA9PiB7XHJcblx0XHRcdGNvbnN0IG5vZGUgPSBldmVudC50YXJnZXQgYXMgTm9kZVNpbmd1bGFyO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZVRvb2xiYXJQb3NpdGlvbihub2RlKTtcclxuXHJcblx0XHRcdHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIEVkZ2UgdGFwIC0gc2VsZWN0IGVkZ2UgZm9yIGV4cGxpY2l0IGRlbGV0aW9uIGFjdGlvblxyXG5cdFx0dGhpcy5jeT8ub24oXCJ0YXBcIiwgXCJlZGdlXCIsIChldmVudCkgPT4ge1xyXG5cdFx0XHRjb25zdCBlZGdlID0gZXZlbnQudGFyZ2V0IGFzIEVkZ2VTaW5ndWxhcjtcclxuXHJcblx0XHRcdHRoaXMuaXNTaWRlYmFyT3BlbiA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLmhpZGVOb2RlVG9vbGJhcigpO1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkTm9kZURhdGEgPSBudWxsO1xyXG5cclxuXHRcdFx0dGhpcy5zZWxlY3RlZEVkZ2VJZCA9IGVkZ2UuaWQoKTtcclxuXHRcdFx0ZWRnZS5zZWxlY3QoKTtcclxuXHRcdFx0dGhpcy51cGRhdGVTZWxlY3RlZEVkZ2VEZWxldGVCdXR0b25Qb3NpdGlvbigpO1xyXG5cdFx0XHR0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBDYW52YXMgdGFwIC0gaGlkZSB0b29sYmFyIGFuZCBkZXNlbGVjdFxyXG5cdFx0dGhpcy5jeT8ub24oXCJ0YXBcIiwgKGV2ZW50KSA9PiB7XHJcblx0XHRcdGlmIChldmVudC50YXJnZXQgPT09IHRoaXMuY3kpIHtcclxuXHRcdFx0XHR0aGlzLmNsZWFyU2VsZWN0ZWRFZGdlKCk7XHJcblx0XHRcdFx0dGhpcy5pc1NpZGViYXJPcGVuID0gZmFsc2U7XHJcblx0XHRcdFx0dGhpcy5oaWRlTm9kZVRvb2xiYXIoKTtcclxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkTm9kZURhdGEgPSBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBQYW4vem9vbSBldmVudHMgLSB1cGRhdGUgdG9vbGJhciBwb3NpdGlvblxyXG5cdFx0dGhpcy5jeT8ub24oXCJwYW4gem9vbVwiLCAoKSA9PiB7XHJcblx0XHRcdGlmICh0aGlzLmlzTm9kZVRvb2xiYXJWaXNpYmxlICYmIHRoaXMuc2VsZWN0ZWROb2RlRGF0YSkge1xyXG5cdFx0XHRcdGNvbnN0IG5vZGUgPSB0aGlzLmN5Py5nZXRFbGVtZW50QnlJZCh0aGlzLnNlbGVjdGVkTm9kZURhdGEuaWQpO1xyXG5cdFx0XHRcdGlmIChub2RlPy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdHRoaXMudXBkYXRlVG9vbGJhclBvc2l0aW9uKG5vZGUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWRFZGdlSWQpIHtcclxuXHRcdFx0XHR0aGlzLnVwZGF0ZVNlbGVjdGVkRWRnZURlbGV0ZUJ1dHRvblBvc2l0aW9uKCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB1cGRhdGVUb29sYmFyUG9zaXRpb24obm9kZTogTm9kZVNpbmd1bGFyKTogdm9pZCB7XHJcblx0XHRjb25zdCByZW5kZXJlZFBvc2l0aW9uID0gbm9kZS5yZW5kZXJlZFBvc2l0aW9uKCk7XHJcblx0XHRjb25zdCByZW5kZXJlZFdpZHRoID0gbm9kZS5yZW5kZXJlZFdpZHRoKCk7XHJcblx0XHRjb25zdCByZW5kZXJlZEhlaWdodCA9IG5vZGUucmVuZGVyZWRIZWlnaHQoKTtcclxuXHJcblx0XHQvLyBQb3NpdGlvbiB0b29sYmFyIGFib3ZlIHRoZSBub2RlLCBjZW50ZXJlZFxyXG5cdFx0dGhpcy5ub2RlVG9vbGJhclBvc2l0aW9uID0ge1xyXG5cdFx0XHR4OiByZW5kZXJlZFBvc2l0aW9uLnggLSAzMCwgLy8gQ2VudGVyIHRoZSB0b29sYmFyIChhcHByb3ggaGFsZiB0b29sYmFyIHdpZHRoKVxyXG5cdFx0XHR5OiByZW5kZXJlZFBvc2l0aW9uLnkgLSByZW5kZXJlZEhlaWdodCAvIDIgLSA0MCwgLy8gQWJvdmUgdGhlIG5vZGVcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGhpZGVOb2RlVG9vbGJhcigpOiB2b2lkIHtcclxuXHRcdHRoaXMuaXNOb2RlVG9vbGJhclZpc2libGUgPSBmYWxzZTtcclxuXHRcdHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0U3R5bGVzaGVldCgpOiBjeXRvc2NhcGUuU3R5bGVzaGVldFN0eWxlW10ge1xyXG5cdFx0cmV0dXJuIFN0eWxlQ29uZmlnO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PT09PT09PT09PT09PT0gU2lkZWJhciBFdmVudHMgPT09PT09PT09PT09PT09PT09PT1cclxuXHJcblx0b25DbG9zZVNpZGViYXIoKTogdm9pZCB7XHJcblx0XHR0aGlzLmlzU2lkZWJhck9wZW4gPSBmYWxzZTtcclxuXHRcdHRoaXMuaGlkZU5vZGVUb29sYmFyKCk7XHJcblx0XHR0aGlzLnNlbGVjdGVkTm9kZURhdGEgPSBudWxsO1xyXG5cdFx0Ly8gdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdH1cclxuXHJcblx0b25EZXNjcmlwdGlvbkNoYW5nZShkZXNjcmlwdGlvbjogc3RyaW5nKTogdm9pZCB7XHJcblx0XHRpZiAoIXRoaXMuc2VsZWN0ZWROb2RlRGF0YSB8fCAhdGhpcy5jeSkgcmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IG5vZGUgPSB0aGlzLmN5Py5nZXRFbGVtZW50QnlJZCh0aGlzLnNlbGVjdGVkTm9kZURhdGEuaWQpO1xyXG5cdFx0aWYgKG5vZGUpIHtcclxuXHRcdFx0Y29uc3QgdXBkYXRlZERhdGE6IFJlYWRvbmx5RXh0ZW5kZWRBY3Rpdml0eSA9IHtcclxuXHRcdFx0XHQuLi50aGlzLnNlbGVjdGVkTm9kZURhdGEsXHJcblx0XHRcdFx0c3VnZ2VzdGVkUHJvcGVydGllczoge1xyXG5cdFx0XHRcdFx0Li4udGhpcy5zZWxlY3RlZE5vZGVEYXRhLnN1Z2dlc3RlZFByb3BlcnRpZXMsXHJcblx0XHRcdFx0XHR1Y2N4RGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHR0aGlzLnd4Y2MyZ3JhcGgudXBkYXRlQWN0aXZpdHlEYXRhKHVwZGF0ZWREYXRhKTtcclxuXHRcdFx0bm9kZS5kYXRhKHVwZGF0ZWREYXRhKTtcclxuXHJcblx0XHRcdHRoaXMuc2VsZWN0ZWROb2RlRGF0YSA9IHVwZGF0ZWREYXRhO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0b25BY3Rpdml0eVR5cGVDaGFuZ2UoYWN0aXZpdHlUeXBlOiBBY3Rpdml0eURpc3BsYXlUeXBlKTogdm9pZCB7XHJcblx0XHRpZiAoIXRoaXMuc2VsZWN0ZWROb2RlRGF0YSB8fCAhdGhpcy5jeSkgcmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IG5vZGUgPSB0aGlzLmN5Py5nZXRFbGVtZW50QnlJZCh0aGlzLnNlbGVjdGVkTm9kZURhdGEuaWQpO1xyXG5cdFx0aWYgKG5vZGUpIHtcclxuXHRcdFx0Y29uc3QgdXBkYXRlZERhdGE6IFJlYWRvbmx5RXh0ZW5kZWRBY3Rpdml0eSA9IHtcclxuXHRcdFx0XHQuLi50aGlzLnNlbGVjdGVkTm9kZURhdGEsXHJcblx0XHRcdFx0d3hjY0FjdGl2aXR5TmFtZTogYWN0aXZpdHlUeXBlLmFjdGl2aXR5TmFtZSxcclxuXHRcdFx0XHR3eGNjR3JvdXA6IGFjdGl2aXR5VHlwZS5ncm91cCxcclxuXHRcdFx0XHRpY29uVXJsOiBhY3Rpdml0eVR5cGUuaWNvblxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0dGhpcy53eGNjMmdyYXBoLnVwZGF0ZUFjdGl2aXR5RGF0YSh1cGRhdGVkRGF0YSk7XHJcblx0XHRcdG5vZGUuZGF0YSh1cGRhdGVkRGF0YSk7XHJcblxyXG5cdFx0XHR0aGlzLnNlbGVjdGVkTm9kZURhdGEgPSB1cGRhdGVkRGF0YTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vID09PT09PT09PT09PT09PT09PT09IE5vZGUgVG9vbGJhciBFdmVudHMgPT09PT09PT09PT09PT09PT09PT1cclxuXHJcblx0b25EZWxldGVOb2RlKCk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aGlzLnNlbGVjdGVkTm9kZURhdGEgfHwgIXRoaXMuY3kpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBub2RlSWQgPSB0aGlzLnNlbGVjdGVkTm9kZURhdGEuaWQ7XHJcblxyXG5cdFx0Ly8gUmVtb3ZlIGZyb20gc2VydmljZSBhbmQgZ2V0IGFmZmVjdGVkIGxpbmsgSURzXHJcblx0XHRjb25zdCB7IHJlbW92ZWRMaW5rSWRzIH0gPSB0aGlzLnd4Y2MyZ3JhcGgucmVtb3ZlQWN0aXZpdHkobm9kZUlkKTtcclxuXHJcblx0XHQvLyBSZW1vdmUgZWRnZXMgZnJvbSBjeXRvc2NhcGVcclxuXHRcdHJlbW92ZWRMaW5rSWRzLmZvckVhY2goKGxpbmtJZCkgPT4ge1xyXG5cdFx0XHR0aGlzLmN5Py5nZXRFbGVtZW50QnlJZChsaW5rSWQpLnJlbW92ZSgpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gUmVtb3ZlIG5vZGUgZnJvbSBjeXRvc2NhcGVcclxuXHRcdHRoaXMuY3k/LmdldEVsZW1lbnRCeUlkKG5vZGVJZCkucmVtb3ZlKCk7XHJcblxyXG5cdFx0Ly8gQ2xvc2Ugc2lkZWJhciBhbmQgdG9vbGJhclxyXG5cdFx0dGhpcy5vbkNsb3NlU2lkZWJhcigpO1xyXG5cclxuXHRcdC8vIFJlLXJ1biBsYXlvdXRcclxuXHRcdHRoaXMucnVuTGF5b3V0KCk7XHJcblx0fVxyXG5cclxuXHRvbkRlbGV0ZVNlbGVjdGVkRWRnZSgpOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy5zZWxlY3RlZEVkZ2VJZCB8fCAhdGhpcy5jeSkgcmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IGVkZ2VJZCA9IHRoaXMuc2VsZWN0ZWRFZGdlSWQ7XHJcblx0XHRjb25zdCByZW1vdmVkID0gdGhpcy53eGNjMmdyYXBoLnJlbW92ZUxpbmsoZWRnZUlkKTtcclxuXHRcdGlmICghcmVtb3ZlZCkgcmV0dXJuO1xyXG5cclxuXHRcdHRoaXMuY3k/LmdldEVsZW1lbnRCeUlkKGVkZ2VJZCkucmVtb3ZlKCk7XHJcblx0XHR0aGlzLnNlbGVjdGVkRWRnZUlkID0gbnVsbDtcclxuXHRcdHRoaXMuc2VsZWN0ZWRFZGdlRGVsZXRlQnV0dG9uUG9zaXRpb24gPSBudWxsO1xyXG5cdFx0dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdH1cclxuXHJcblx0b25MaW5rTm9kZVJlcXVlc3QoKTogdm9pZCB7XHJcblx0XHRpZiAoIXRoaXMuc2VsZWN0ZWROb2RlRGF0YSB8fCAhdGhpcy5jeSkgcmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IHNvdXJjZU5vZGUgPSB0aGlzLnNlbGVjdGVkTm9kZURhdGE7XHJcblxyXG5cdFx0aWYgKCF0aGlzLmNhbkNyZWF0ZU91dGdvaW5nTGluayhzb3VyY2VOb2RlLmlkKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gR2V0IHRoZSBjeXRvc2NhcGUgbm9kZSB0byBpbnNwZWN0IGV4aXN0aW5nIGNvbm5lY3Rpb25zXHJcblx0XHRjb25zdCBjeU5vZGUgPSB0aGlzLmN5Py5nZXRFbGVtZW50QnlJZChzb3VyY2VOb2RlLmlkKTtcclxuXHJcblx0XHQvLyBDb2xsZWN0IElEcyBvZiBub2RlcyBhbHJlYWR5IGNvbm5lY3RlZCBhcyB0YXJnZXRzIGZyb20gdGhpcyBzb3VyY2VcclxuXHRcdGNvbnN0IGV4aXN0aW5nVGFyZ2V0SWRzID0gbmV3IFNldDxzdHJpbmc+KFxyXG5cdFx0XHRjeU5vZGUub3V0Z29lcnMoJ25vZGUnKS5tYXAoKG46IE5vZGVTaW5ndWxhcikgPT4gbi5pZCgpKVxyXG5cdFx0KTtcclxuXHJcblx0XHQvLyBCdWlsZCB0aGUgZmlsdGVyZWQgbGlzdCBvZiBsaW5rYWJsZSB0YXJnZXRzOlxyXG5cdFx0Ly8gIC0gTmV2ZXIgYWxsb3cgdGhlIHN0YXJ0IG5vZGUgKE5ld1Bob25lQ29udGFjdCkgYXMgYSB0YXJnZXRcclxuXHRcdC8vICAtIEV4Y2x1ZGUgdGhlIHNvdXJjZSBub2RlIGl0c2VsZlxyXG5cdFx0Ly8gIC0gRXhjbHVkZSBub2RlcyBhbHJlYWR5IGxpbmtlZCBhcyB0YXJnZXRzIGZyb20gdGhpcyBzb3VyY2VcclxuXHRcdHRoaXMuYXZhaWxhYmxlTm9kZXMgPSB0aGlzLnd4Y2MyZ3JhcGguZ2V0QWxsQWN0aXZpdGllcygpLmZpbHRlcihhY3QgPT5cclxuXHRcdFx0YWN0LmlkICE9PSBzb3VyY2VOb2RlLmlkICYmXHJcblx0XHRcdGFjdC53eGNjQWN0aXZpdHlOYW1lICE9PSAnTmV3UGhvbmVDb250YWN0JyAmJlxyXG5cdFx0XHQhZXhpc3RpbmdUYXJnZXRJZHMuaGFzKGFjdC5pZClcclxuXHRcdCk7XHJcblxyXG5cdFx0Y29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihMaW5rTm9kZURpYWxvZ0NvbXBvbmVudCwge1xyXG5cdFx0XHRwYW5lbENsYXNzOiBcIm5vLXBhZGRpbmctbW9kYWxcIixcclxuXHRcdFx0d2lkdGg6IFwiNTUwcHhcIixcclxuXHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdGF2YWlsYWJsZU5vZGVzOiB0aGlzLmF2YWlsYWJsZU5vZGVzLFxyXG5cdFx0XHRcdHNvdXJjZU5vZGU6IHRoaXMuc2VsZWN0ZWROb2RlRGF0YSxcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHRcdGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuXHRcdFx0aWYgKHJlc3VsdCkge1xyXG5cdFx0XHRcdHRoaXMub25MaW5rTm9kZXMocmVzdWx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvLyA9PT09PT09PT09PT09PT09PT09PSBMaW5rIERpYWxvZyBFdmVudHMgPT09PT09PT09PT09PT09PT09PT1cclxuXHJcblx0b25MaW5rTm9kZXMobGlua0RhdGE6IExpbmtOb2RlRGF0YSk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aGlzLmN5KSByZXR1cm47XHJcblxyXG5cdFx0aWYgKCF0aGlzLmNhbkNyZWF0ZU91dGdvaW5nTGluayhsaW5rRGF0YS5zb3VyY2VOb2RlSWQpKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy53eGNjMmdyYXBoLmxpbmtFeGlzdHMobGlua0RhdGEuc291cmNlTm9kZUlkLCBsaW5rRGF0YS50YXJnZXROb2RlSWQpKSB7XHJcblx0XHRcdGNvbnNvbGUud2FybihcIkxpbmsgYWxyZWFkeSBleGlzdHMgYmV0d2VlbiB0aGVzZSBub2Rlc1wiKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGVkZ2UgPSB0aGlzLnd4Y2MyZ3JhcGguYWRkTGluayhcclxuXHRcdFx0bGlua0RhdGEuc291cmNlTm9kZUlkLFxyXG5cdFx0XHRsaW5rRGF0YS50YXJnZXROb2RlSWQsXHJcblx0XHRcdGxpbmtEYXRhLmxhYmVsLFxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLmN5Py5hZGQoZWRnZSk7XHJcblx0XHR0aGlzLnJ1bkxheW91dCgpO1xyXG5cdH1cclxuXHJcblx0Ly8gPT09PT09PT09PT09PT09PT09PT0gQWRkIE5vZGUgRGlhbG9nIEV2ZW50cyA9PT09PT09PT09PT09PT09PT09PVxyXG5cclxuXHRvcGVuQWRkTm9kZURpYWxvZygpOiB2b2lkIHtcclxuXHRcdHRoaXMuYXZhaWxhYmxlTm9kZXMgPSB0aGlzLnd4Y2MyZ3JhcGguZ2V0QWxsQWN0aXZpdGllcygpO1xyXG5cclxuXHRcdGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQWRkTm9kZURpYWxvZ0NvbXBvbmVudCwge1xyXG5cdFx0XHRwYW5lbENsYXNzOiBcIm5vLXBhZGRpbmctbW9kYWxcIixcclxuXHRcdFx0d2lkdGg6ICc0NTBweCcsXHJcblx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRhdmFpbGFibGVOb2RlczogdGhpcy5hdmFpbGFibGVOb2RlcyxcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHRcdGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuXHRcdFx0aWYgKHJlc3VsdCkge1xyXG5cdFx0XHRcdHRoaXMuYWRkQWN0aXZpdHkocmVzdWx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRhZGRBY3Rpdml0eShuZXdOb2RlRGF0YTogTmV3Tm9kZURhdGEpOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy5jeSkgcmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IG5vZGUgPSB0aGlzLnd4Y2NBY3Rpdml0eUNyZWF0aW9uU2VydmljZS5jcmVhdGVBbmRTeW5jKHtcclxuXHRcdFx0YWN0aXZpdHlUeXBlTmFtZTogbmV3Tm9kZURhdGEuYWN0aXZpdHlUeXBlTmFtZSxcclxuXHRcdFx0bmFtZTogbmV3Tm9kZURhdGEubmFtZVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gQWRkIG5vZGUgdG8gY3l0b3NjYXBlXHJcblx0XHR0aGlzLmN5Py5hZGQoe1xyXG5cdFx0XHRncm91cDogXCJub2Rlc1wiLFxyXG5cdFx0XHRkYXRhOiBub2RlLmRhdGFcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIFJlLXJ1biBsYXlvdXQgdG8gcG9zaXRpb24gdGhlIG5ldyBub2RlXHJcblx0XHR0aGlzLnJ1bkxheW91dCgpO1xyXG5cdH1cclxuXHJcblx0b25Ob2RlU2VsZWN0Q2hhbmdlKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdGNvbnN0IG5vZGUgPSB0aGlzLmN5Py5nZXRFbGVtZW50QnlJZChpZCkgYXMgTm9kZVNpbmd1bGFyO1xyXG5cdFx0aWYgKG5vZGUpIHtcclxuXHRcdFx0dGhpcy5jeT8uY2VudGVyKG5vZGUpO1xyXG5cclxuXHRcdFx0Ly8gU2V0IGhpZ2hsaWdodGVkIHByb3BlcnR5IGluIG5vZGUgZGF0YVxyXG5cdFx0XHRjb25zdCBvcmlnaW5hbERhdGEgPSBub2RlLmRhdGEoKTtcclxuXHRcdFx0bm9kZS5kYXRhKHsgLi4ub3JpZ2luYWxEYXRhLCBoaWdobGlnaHRlZDogdHJ1ZSB9KTtcclxuXHRcdFx0bm9kZS5lbWl0KCdkYXRhJyk7XHJcblxyXG5cdFx0XHQvLyBSZW1vdmUgaGlnaGxpZ2h0IGFmdGVyIDFzXHJcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGN1cnJlbnREYXRhID0gbm9kZS5kYXRhKCk7XHJcblx0XHRcdFx0aWYgKGN1cnJlbnREYXRhLmhpZ2hsaWdodGVkKSB7XHJcblx0XHRcdFx0XHQvLyBSZW1vdmUgdGhlIHByb3BlcnR5IGNvbXBsZXRlbHlcclxuXHRcdFx0XHRcdGRlbGV0ZSBjdXJyZW50RGF0YS5oaWdobGlnaHRlZDtcclxuXHRcdFx0XHRcdG5vZGUuZGF0YShjdXJyZW50RGF0YSk7XHJcblx0XHRcdFx0XHRub2RlLmVtaXQoJ2RhdGEnKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sIDEwMDApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0em9vbUluKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5jeXRvc2NhcGVWaWV3cG9ydFNlcnZpY2Uuem9vbUluKHRoaXMuY3kgYXMgYW55KTtcclxuXHR9XHJcblxyXG5cdHpvb21PdXQoKTogdm9pZCB7XHJcblx0XHR0aGlzLmN5dG9zY2FwZVZpZXdwb3J0U2VydmljZS56b29tT3V0KHRoaXMuY3kgYXMgYW55KTtcclxuXHR9XHJcblxyXG5cdHJlc2V0VmlldygpOiB2b2lkIHtcclxuXHRcdHRoaXMuY3l0b3NjYXBlVmlld3BvcnRTZXJ2aWNlLnJlc2V0Vmlldyh0aGlzLmN5IGFzIGFueSwgdGhpcy5jeT8uZWxlbWVudHMoKSBhcyBhbnkpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBydW5MYXlvdXQoKTogdm9pZCB7XHJcblx0XHRpZiAoIXRoaXMuY3kpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBsYXlvdXQgPSB0aGlzLmN5Py5sYXlvdXQoe1xyXG5cdFx0XHQuLi50aGlzLmxheW91dE9wdGlvbnMsXHJcblx0XHR9KS5ydW4oKTtcclxuXHJcblx0XHRsYXlvdXQub24oXCJsYXlvdXRzdG9wXCIsICgpID0+IHtcclxuXHRcdFx0dGhpcy5jeXRvc2NhcGVWaWV3cG9ydFNlcnZpY2UucmVzZXRWaWV3KHRoaXMuY3kgYXMgYW55LCB0aGlzLmN5Py5lbGVtZW50cygpIGFzIGFueSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2FuQ3JlYXRlT3V0Z29pbmdMaW5rKHNvdXJjZU5vZGVJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIXRoaXMuY3kpIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRjb25zdCBjeU5vZGUgPSB0aGlzLmN5Py5nZXRFbGVtZW50QnlJZChzb3VyY2VOb2RlSWQpO1xyXG5cdFx0aWYgKCFjeU5vZGUgfHwgY3lOb2RlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGNvbnN0IHNvdXJjZUFjdGl2aXR5ID0gKGN5Tm9kZS5kYXRhKCkgYXMgUmVhZG9ubHlFeHRlbmRlZEFjdGl2aXR5KS53eGNjQWN0aXZpdHlOYW1lO1xyXG5cdFx0Y29uc3Qgb3V0Z29pbmdFZGdlQ291bnQgPSBjeU5vZGUub3V0Z29lcnMoJ2VkZ2UnKS5sZW5ndGg7XHJcblxyXG5cdFx0Ly8gRW5kLXR5cGUgbm9kZXMgY2Fubm90IGhhdmUgb3V0Z29pbmcgbGlua3MuXHJcblx0XHRjb25zdCBFTkRfTk9ERV9UWVBFUzogc3RyaW5nW10gPSBbJ2VuZCcsICdkaXNjb25uZWN0LWNvbnRhY3QnLCAnYmxpbmQtdHJhbnNmZXInXTtcclxuXHRcdGlmIChFTkRfTk9ERV9UWVBFUy5pbmNsdWRlcyhzb3VyY2VBY3Rpdml0eSBhcyBzdHJpbmcpKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Ly8gU3RhcnQgbm9kZSBjYW4gb25seSBoYXZlIG9uZSBvdXRwdXQuXHJcblx0XHRpZiAoc291cmNlQWN0aXZpdHkgPT09ICdOZXdQaG9uZUNvbnRhY3QnICYmIG91dGdvaW5nRWRnZUNvdW50ID49IDEpIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHQvLyBDb25kaXRpb24gbm9kZSBjYW4gb25seSBoYXZlIHRydWUvZmFsc2Ugb3V0cHV0cy5cclxuXHRcdGlmIChzb3VyY2VBY3Rpdml0eSA9PT0gJ2NvbmRpdGlvbi1hY3Rpdml0eScgJiYgb3V0Z29pbmdFZGdlQ291bnQgPj0gMikgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjbGVhclNlbGVjdGVkRWRnZSgpOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy5zZWxlY3RlZEVkZ2VJZCB8fCAhdGhpcy5jeSkgcmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IGVkZ2UgPSB0aGlzLmN5Py5nZXRFbGVtZW50QnlJZCh0aGlzLnNlbGVjdGVkRWRnZUlkKTtcclxuXHRcdGlmIChlZGdlICYmIGVkZ2UubGVuZ3RoKSB7XHJcblx0XHRcdGVkZ2UudW5zZWxlY3QoKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnNlbGVjdGVkRWRnZUlkID0gbnVsbDtcclxuXHRcdHRoaXMuc2VsZWN0ZWRFZGdlRGVsZXRlQnV0dG9uUG9zaXRpb24gPSBudWxsO1xyXG5cdFx0dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB1cGRhdGVTZWxlY3RlZEVkZ2VEZWxldGVCdXR0b25Qb3NpdGlvbigpOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy5jeSB8fCAhdGhpcy5zZWxlY3RlZEVkZ2VJZCkge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkRWRnZURlbGV0ZUJ1dHRvblBvc2l0aW9uID0gbnVsbDtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGVkZ2UgPSB0aGlzLmN5Py5nZXRFbGVtZW50QnlJZCh0aGlzLnNlbGVjdGVkRWRnZUlkKTtcclxuXHRcdGlmICghZWRnZSB8fCBlZGdlLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkRWRnZURlbGV0ZUJ1dHRvblBvc2l0aW9uID0gbnVsbDtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IG1pZHBvaW50ID0gKGVkZ2UgYXMgRWRnZVNpbmd1bGFyKS5yZW5kZXJlZE1pZHBvaW50KCk7XHJcblxyXG5cdFx0Ly8gU2xpZ2h0IG9mZnNldCBzbyB0aGUgaWNvbiBkb2VzIG5vdCBzaXQgZXhhY3RseSBvbiB0b3Agb2YgdGhlIGVkZ2UgbGluZS5cclxuXHRcdHRoaXMuc2VsZWN0ZWRFZGdlRGVsZXRlQnV0dG9uUG9zaXRpb24gPSB7XHJcblx0XHRcdHg6IG1pZHBvaW50LnggKyAxMixcclxuXHRcdFx0eTogbWlkcG9pbnQueSAtIDEyLFxyXG5cdFx0fTtcclxuXHR9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInd4Y2MtZmxvd2NoYXJ0LWNvbnRhaW5lclwiPlxyXG4gIDxkaXYgI2Zsb3djaGFydENvbnRhaW5lciBjbGFzcz1cImZsb3djaGFydC1jYW52YXNcIj48L2Rpdj5cclxuXHJcbiAgPCEtLSBGbG9hdGluZyB0b29sYmFyIGZvciB2aWV3cG9ydCBjb250cm9scyAtLT5cclxuICA8Z3JhcGgtZmxvYXRpbmctdG9vbGJhclxyXG4gICAgW3Zpc2liaWxpdHldPVwieyBleHBvcnQ6IGZhbHNlIH1cIlxyXG4gICAgKHJlc2V0Vmlld0NoYW5nZSk9XCJyZXNldFZpZXcoKVwiXHJcbiAgICAoem9vbUluQ2hhbmdlKT1cInpvb21JbigpXCJcclxuICAgICh6b29tT3V0Q2hhbmdlKT1cInpvb21PdXQoKVwiPlxyXG4gIDwvZ3JhcGgtZmxvYXRpbmctdG9vbGJhcj5cclxuXHJcbiAgPCEtLSBHcmFwaCBBY3RzIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJncmFwaC1hY3Rpb25zLXdyYXBwZXJcIj5cclxuICAgIDxidXR0b25cclxuICAgICAgY2xhc3M9XCJhZGQtbm9kZS1idG5cIlxyXG4gICAgICBtYXRUb29sdGlwPVwiU2VhcmNoIHdvcmtmbG93XCJcclxuICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gICAgICAoY2xpY2spPVwidG9nZ2xlU2VhcmNoUGFuZWwoKVwiXHJcbiAgICA+XHJcbiAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL3d4Y2Mvc2VhcmNoLnN2Z1wiIHdpZHRoPVwiMjhcIiBoZWlnaHQ9XCIyOFwiIGFsdD1cIlwiIC8+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b25cclxuICAgICAgY2xhc3M9XCJhZGQtbm9kZS1idG5cIlxyXG4gICAgICBtYXRUb29sdGlwPVwiQWRkIE5ldyBOb2RlXCJcclxuICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gICAgICAoY2xpY2spPVwib3BlbkFkZE5vZGVEaWFsb2coKVwiXHJcbiAgICA+XHJcbiAgICAgIDxzdmdcclxuICAgICAgICB3aWR0aD1cIjI4XCJcclxuICAgICAgICBoZWlnaHQ9XCIyOFwiXHJcbiAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXHJcbiAgICAgICAgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgID5cclxuICAgICAgICA8bGluZSB4MT1cIjEyXCIgeTE9XCI1XCIgeDI9XCIxMlwiIHkyPVwiMTlcIj48L2xpbmU+XHJcbiAgICAgICAgPGxpbmUgeDE9XCI1XCIgeTE9XCIxMlwiIHgyPVwiMTlcIiB5Mj1cIjEyXCI+PC9saW5lPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8YnV0dG9uXHJcbiAgICAqbmdJZj1cInNlbGVjdGVkRWRnZUlkICYmIHNlbGVjdGVkRWRnZURlbGV0ZUJ1dHRvblBvc2l0aW9uXCJcclxuICAgIGNsYXNzPVwiZWRnZS1kZWxldGUtYnRuXCJcclxuICAgIG1hdFRvb2x0aXA9XCJEZWxldGUgdGhpcyBlZGdlXCJcclxuICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcclxuICAgIFtzdHlsZS5sZWZ0LnB4XT1cInNlbGVjdGVkRWRnZURlbGV0ZUJ1dHRvblBvc2l0aW9uLnhcIlxyXG4gICAgW3N0eWxlLnRvcC5weF09XCJzZWxlY3RlZEVkZ2VEZWxldGVCdXR0b25Qb3NpdGlvbi55XCJcclxuICAgIChjbGljayk9XCJvbkRlbGV0ZVNlbGVjdGVkRWRnZSgpXCJcclxuICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgYXJpYS1sYWJlbD1cIkRlbGV0ZSBzZWxlY3RlZCBlZGdlXCJcclxuICA+XHJcbiAgICDDl1xyXG4gIDwvYnV0dG9uPlxyXG5cclxuICA8bm9kZS1zZWFyY2gtcGFuZWxcclxuICAgIGNsYXNzPVwiZmFkZS1pbi1zZWFyY2gtcGFuZWxcIlxyXG4gICAgW2NsYXNzLnZpc2libGVdPVwiaXNTZWFyY2hQYW5lbFZpc2libGVcIlxyXG4gICAgW25vZGVzXT1cImFjdGl2aXRpZXNcIlxyXG4gICAgKHNlbGVjdE5vZGVDaGFuZ2UpPVwib25Ob2RlU2VsZWN0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgKHNlYXJjaENoYW5nZSk9XCJvcGVuQWRkTm9kZURpYWxvZygpXCJcclxuICA+XHJcbiAgPC9ub2RlLXNlYXJjaC1wYW5lbD5cclxuXHJcbiAgPCEtLSBOb2RlIGFjdGlvbiB0b29sYmFyIChmbG9hdGluZyBuZWFyIHNlbGVjdGVkIG5vZGUpIC0tPlxyXG4gIDxub2RlLWFjdGlvbi10b29sYmFyXHJcbiAgICBbaXNWaXNpYmxlXT1cImlzTm9kZVRvb2xiYXJWaXNpYmxlXCJcclxuICAgIFtwb3NpdGlvbl09XCJub2RlVG9vbGJhclBvc2l0aW9uXCJcclxuICAgIChkZWxldGVOb2RlKT1cIm9uRGVsZXRlTm9kZSgpXCJcclxuICAgIChsaW5rTm9kZSk9XCJvbkxpbmtOb2RlUmVxdWVzdCgpXCJcclxuICA+XHJcbiAgPC9ub2RlLWFjdGlvbi10b29sYmFyPlxyXG5cclxuICA8IS0tIE5vZGUgZGV0YWlscyBzaWRlYmFyIC0tPlxyXG4gIDxub2RlLWRldGFpbHMtc2lkZWJhclxyXG4gICAgW2lzT3Blbl09XCJpc1NpZGViYXJPcGVuXCJcclxuICAgIFtub2RlRGF0YV09XCJzZWxlY3RlZE5vZGVEYXRhXCJcclxuICAgIChjbG9zZSk9XCJvbkNsb3NlU2lkZWJhcigpXCJcclxuICAgIChkZXNjcmlwdGlvbkNoYW5nZSk9XCJvbkRlc2NyaXB0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgKGFjdGl2aXR5VHlwZUNoYW5nZSk9XCJvbkFjdGl2aXR5VHlwZUNoYW5nZSgkZXZlbnQpXCJcclxuICA+XHJcbiAgPC9ub2RlLWRldGFpbHMtc2lkZWJhcj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class CytoscapeViewportService {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.config = {
|
|
6
|
+
minZoomLevel: 0.8,
|
|
7
|
+
maxZoomLevel: 1.2,
|
|
8
|
+
animateOptions: {
|
|
9
|
+
duration: 400,
|
|
10
|
+
easing: 'ease-in-out-cubic'
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
zoomIn(cy) {
|
|
15
|
+
this.handleZoomChange(cy, this.config.maxZoomLevel);
|
|
16
|
+
}
|
|
17
|
+
zoomOut(cy) {
|
|
18
|
+
this.handleZoomChange(cy, this.config.minZoomLevel);
|
|
19
|
+
}
|
|
20
|
+
resetView(cy, eles) {
|
|
21
|
+
this.fitToView(cy, eles);
|
|
22
|
+
}
|
|
23
|
+
handleZoomChange(cy, zoomLevel) {
|
|
24
|
+
if (cy) {
|
|
25
|
+
const currentZoom = cy.zoom();
|
|
26
|
+
const newZoom = currentZoom * zoomLevel;
|
|
27
|
+
const zoomDelta = newZoom / currentZoom;
|
|
28
|
+
const pan = cy.pan();
|
|
29
|
+
const containerWidth = cy.width();
|
|
30
|
+
const containerHeight = cy.height();
|
|
31
|
+
const centerX = containerWidth / 2;
|
|
32
|
+
const centerY = containerHeight / 2;
|
|
33
|
+
// Adjust pan to zoom toward center
|
|
34
|
+
const newPan = {
|
|
35
|
+
x: centerX - (centerX - pan.x) * zoomDelta,
|
|
36
|
+
y: centerY - (centerY - pan.y) * zoomDelta
|
|
37
|
+
};
|
|
38
|
+
cy.viewport({
|
|
39
|
+
zoom: newZoom,
|
|
40
|
+
pan: newPan
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
fitToView(cy, eles, padding = 60) {
|
|
45
|
+
if (cy && eles) {
|
|
46
|
+
cy.animate({
|
|
47
|
+
fit: {
|
|
48
|
+
eles: eles,
|
|
49
|
+
padding: padding
|
|
50
|
+
},
|
|
51
|
+
duration: this.config.animateOptions.duration,
|
|
52
|
+
easing: this.config.animateOptions.easing
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
CytoscapeViewportService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CytoscapeViewportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
58
|
+
CytoscapeViewportService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CytoscapeViewportService, providedIn: 'root' });
|
|
59
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CytoscapeViewportService, decorators: [{
|
|
60
|
+
type: Injectable,
|
|
61
|
+
args: [{
|
|
62
|
+
providedIn: 'root'
|
|
63
|
+
}]
|
|
64
|
+
}] });
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3lzdG9zY2FwZS12aWV3cG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL2NvbnRhY3QtY2VudGVyL2NjLXNjcmlwdC1lZGl0b3Ivc2VydmljZXMvY3lzdG9zY2FwZS12aWV3cG9ydC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBZTNDLE1BQU0sT0FBTyx3QkFBd0I7SUFIckM7UUFLYSxXQUFNLEdBQW1CO1lBQzlCLFlBQVksRUFBRSxHQUFHO1lBQ2pCLFlBQVksRUFBRSxHQUFHO1lBQ2pCLGNBQWMsRUFBRTtnQkFDWixRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsbUJBQW1CO2FBQzlCO1NBQ0osQ0FBQztLQW9ETDtJQWxERyxNQUFNLENBQUMsRUFBUTtRQUNYLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsT0FBTyxDQUFDLEVBQVE7UUFDWixJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELFNBQVMsQ0FBQyxFQUFRLEVBQUUsSUFBMkI7UUFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEVBQVEsRUFBRSxTQUFpQjtRQUNoRCxJQUFJLEVBQUUsRUFBRTtZQUNKLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM5QixNQUFNLE9BQU8sR0FBRyxXQUFXLEdBQUcsU0FBUyxDQUFDO1lBQ3hDLE1BQU0sU0FBUyxHQUFHLE9BQU8sR0FBRyxXQUFXLENBQUM7WUFFeEMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsQyxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFFcEMsTUFBTSxPQUFPLEdBQUcsY0FBYyxHQUFHLENBQUMsQ0FBQztZQUNuQyxNQUFNLE9BQU8sR0FBRyxlQUFlLEdBQUcsQ0FBQyxDQUFDO1lBRXBDLG1DQUFtQztZQUNuQyxNQUFNLE1BQU0sR0FBRztnQkFDWCxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTO2dCQUMxQyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTO2FBQzdDLENBQUM7WUFFRixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUNSLElBQUksRUFBRSxPQUFPO2dCQUNiLEdBQUcsRUFBRSxNQUFNO2FBQ2QsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRU8sU0FBUyxDQUFDLEVBQVEsRUFBRSxJQUEyQixFQUFFLE9BQU8sR0FBRyxFQUFFO1FBQ2pFLElBQUksRUFBRSxJQUFJLElBQUksRUFBRTtZQUNaLEVBQUUsQ0FBQyxPQUFPLENBQUM7Z0JBQ1AsR0FBRyxFQUFFO29CQUNELElBQUksRUFBRSxJQUFJO29CQUNWLE9BQU8sRUFBRSxPQUFPO2lCQUNuQjtnQkFDRCxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUTtnQkFDN0MsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU07YUFDNUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDOztzSEE1RFEsd0JBQXdCOzBIQUF4Qix3QkFBd0IsY0FGckIsTUFBTTs0RkFFVCx3QkFBd0I7a0JBSHBDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25SZXR1cm5WYWx1ZSwgQ29yZSwgQ3NzIH0gZnJvbSBcImN5dG9zY2FwZVwiO1xyXG5cclxudHlwZSBWaWV3cG9ydENvbmZpZyA9IFJlYWRvbmx5PHtcclxuICAgIG1pblpvb21MZXZlbDogbnVtYmVyLFxyXG4gICAgbWF4Wm9vbUxldmVsOiBudW1iZXIsXHJcbiAgICBhbmltYXRlT3B0aW9uczoge1xyXG4gICAgICAgIGR1cmF0aW9uOiBudW1iZXIsXHJcbiAgICAgICAgZWFzaW5nOiBDc3MuVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uXHJcbiAgICB9XHJcbn0+O1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDeXRvc2NhcGVWaWV3cG9ydFNlcnZpY2Uge1xyXG4gICAgXHJcbiAgICByZWFkb25seSBjb25maWc6IFZpZXdwb3J0Q29uZmlnID0ge1xyXG4gICAgICAgIG1pblpvb21MZXZlbDogMC44LFxyXG4gICAgICAgIG1heFpvb21MZXZlbDogMS4yLFxyXG4gICAgICAgIGFuaW1hdGVPcHRpb25zOiB7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiA0MDAsXHJcbiAgICAgICAgICAgIGVhc2luZzogJ2Vhc2UtaW4tb3V0LWN1YmljJ1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgem9vbUluKGN5OiBDb3JlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVab29tQ2hhbmdlKGN5LCB0aGlzLmNvbmZpZy5tYXhab29tTGV2ZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHpvb21PdXQoY3k6IENvcmUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmhhbmRsZVpvb21DaGFuZ2UoY3ksIHRoaXMuY29uZmlnLm1pblpvb21MZXZlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRWaWV3KGN5OiBDb3JlLCBlbGVzOiBDb2xsZWN0aW9uUmV0dXJuVmFsdWUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZpdFRvVmlldyhjeSwgZWxlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVab29tQ2hhbmdlKGN5OiBDb3JlLCB6b29tTGV2ZWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmIChjeSkge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Wm9vbSA9IGN5Lnpvb20oKTtcclxuICAgICAgICAgICAgY29uc3QgbmV3Wm9vbSA9IGN1cnJlbnRab29tICogem9vbUxldmVsO1xyXG4gICAgICAgICAgICBjb25zdCB6b29tRGVsdGEgPSBuZXdab29tIC8gY3VycmVudFpvb207XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwYW4gPSBjeS5wYW4oKTtcclxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBjeS53aWR0aCgpO1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSBjeS5oZWlnaHQoKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlclggPSBjb250YWluZXJXaWR0aCAvIDI7XHJcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlclkgPSBjb250YWluZXJIZWlnaHQgLyAyO1xyXG5cclxuICAgICAgICAgICAgLy8gQWRqdXN0IHBhbiB0byB6b29tIHRvd2FyZCBjZW50ZXJcclxuICAgICAgICAgICAgY29uc3QgbmV3UGFuID0ge1xyXG4gICAgICAgICAgICAgICAgeDogY2VudGVyWCAtIChjZW50ZXJYIC0gcGFuLngpICogem9vbURlbHRhLFxyXG4gICAgICAgICAgICAgICAgeTogY2VudGVyWSAtIChjZW50ZXJZIC0gcGFuLnkpICogem9vbURlbHRhXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjeS52aWV3cG9ydCh7XHJcbiAgICAgICAgICAgICAgICB6b29tOiBuZXdab29tLFxyXG4gICAgICAgICAgICAgICAgcGFuOiBuZXdQYW5cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZml0VG9WaWV3KGN5OiBDb3JlLCBlbGVzOiBDb2xsZWN0aW9uUmV0dXJuVmFsdWUsIHBhZGRpbmcgPSA2MCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChjeSAmJiBlbGVzKSB7XHJcbiAgICAgICAgICAgIGN5LmFuaW1hdGUoe1xyXG4gICAgICAgICAgICAgICAgZml0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlczogZWxlcyxcclxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBwYWRkaW5nXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZHVyYXRpb246IHRoaXMuY29uZmlnLmFuaW1hdGVPcHRpb25zLmR1cmF0aW9uLFxyXG4gICAgICAgICAgICAgICAgZWFzaW5nOiB0aGlzLmNvbmZpZy5hbmltYXRlT3B0aW9ucy5lYXNpbmdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
|