@seniorsistemas/angular-components 17.30.0 → 17.31.0
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/bundles/seniorsistemas-angular-components.umd.js +69 -41
- package/bundles/seniorsistemas-angular-components.umd.js.map +1 -1
- package/bundles/seniorsistemas-angular-components.umd.min.js +1 -1
- package/bundles/seniorsistemas-angular-components.umd.min.js.map +1 -1
- package/components/accordion/accordion.component.d.ts +13 -11
- package/components/utils/utils.d.ts +1 -0
- package/esm2015/components/accordion/accordion.component.js +41 -31
- package/esm2015/components/table/table-column/table-columns.component.js +8 -8
- package/esm2015/components/table/table-paging/table-paging.component.js +4 -4
- package/esm2015/components/utils/utils.js +8 -3
- package/esm5/components/accordion/accordion.component.js +55 -33
- package/esm5/components/table/table-column/table-columns.component.js +8 -8
- package/esm5/components/table/table-paging/table-paging.component.js +4 -4
- package/esm5/components/utils/utils.js +8 -3
- package/fesm2015/seniorsistemas-angular-components.js +56 -41
- package/fesm2015/seniorsistemas-angular-components.js.map +1 -1
- package/fesm5/seniorsistemas-angular-components.js +70 -43
- package/fesm5/seniorsistemas-angular-components.js.map +1 -1
- package/package.json +1 -1
- package/seniorsistemas-angular-components.metadata.json +1 -1
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
import { AfterContentInit, OnChanges, QueryList, SimpleChanges, OnDestroy } from "@angular/core";
|
|
1
|
+
import { AfterContentInit, OnChanges, QueryList, SimpleChanges, OnDestroy, OnInit } from "@angular/core";
|
|
2
2
|
import { AccordionPanelComponent } from "./components/accordion-panel/accordion-panel.component";
|
|
3
|
-
export declare class AccordionComponent implements AfterContentInit, OnChanges, OnDestroy {
|
|
4
|
-
activeIndex: number;
|
|
3
|
+
export declare class AccordionComponent implements AfterContentInit, OnInit, OnChanges, OnDestroy {
|
|
4
|
+
activeIndex: number | number[];
|
|
5
5
|
multiple: boolean;
|
|
6
6
|
panelsComponents: QueryList<AccordionPanelComponent>;
|
|
7
|
-
private
|
|
8
|
-
private
|
|
9
|
-
private
|
|
7
|
+
private unsubscribe$;
|
|
8
|
+
private panels;
|
|
9
|
+
private openSubs;
|
|
10
|
+
ngOnInit(): void;
|
|
10
11
|
ngAfterContentInit(): void;
|
|
11
12
|
ngOnChanges(changes: SimpleChanges): void;
|
|
12
13
|
ngOnDestroy(): void;
|
|
13
|
-
private
|
|
14
|
-
private
|
|
15
|
-
private
|
|
16
|
-
private
|
|
17
|
-
private
|
|
14
|
+
private validateInputs;
|
|
15
|
+
private setupTabs;
|
|
16
|
+
private closeOtherTabs;
|
|
17
|
+
private setBehavior;
|
|
18
|
+
private enableSinglePanelBehavior;
|
|
19
|
+
private enableMultiplePanelBehavior;
|
|
18
20
|
}
|
|
@@ -22,3 +22,4 @@ export declare const isMousePositionOutsideOfElement: (event: MouseEvent | Point
|
|
|
22
22
|
}) => boolean;
|
|
23
23
|
export declare const getElementPositionInfo: (element: HTMLElement) => ElementPosition;
|
|
24
24
|
export declare const getElementLeftoverContentAvailable: (element: HTMLElement) => ElementLeftoverPosition;
|
|
25
|
+
export declare const deepClone: <T>(obj: T) => T;
|
|
@@ -6,66 +6,76 @@ import { takeUntil } from "rxjs/operators";
|
|
|
6
6
|
let AccordionComponent = class AccordionComponent {
|
|
7
7
|
constructor() {
|
|
8
8
|
this.multiple = false;
|
|
9
|
-
this.
|
|
10
|
-
this.
|
|
9
|
+
this.unsubscribe$ = new Subject();
|
|
10
|
+
this.panels = [];
|
|
11
|
+
}
|
|
12
|
+
ngOnInit() {
|
|
13
|
+
this.validateInputs();
|
|
11
14
|
}
|
|
12
15
|
ngAfterContentInit() {
|
|
13
|
-
this.
|
|
14
|
-
this.
|
|
15
|
-
this.
|
|
16
|
-
this.
|
|
16
|
+
this.panels = this.panelsComponents.toArray();
|
|
17
|
+
this.openSubs = new Array(this.panels.length);
|
|
18
|
+
this.setBehavior(this.multiple);
|
|
19
|
+
this.setupTabs();
|
|
17
20
|
}
|
|
18
21
|
ngOnChanges(changes) {
|
|
19
22
|
if (changes.multiple) {
|
|
20
|
-
this.
|
|
23
|
+
this.setBehavior(changes.multiple.currentValue);
|
|
21
24
|
}
|
|
22
25
|
}
|
|
23
26
|
ngOnDestroy() {
|
|
24
|
-
this.
|
|
25
|
-
this.
|
|
27
|
+
this.unsubscribe$.next();
|
|
28
|
+
this.unsubscribe$.complete();
|
|
29
|
+
}
|
|
30
|
+
validateInputs() {
|
|
31
|
+
if (!this.multiple && Array.isArray(this.activeIndex)) {
|
|
32
|
+
throw new Error("The activeIndex should not be an array when multiple is set to false.");
|
|
33
|
+
}
|
|
26
34
|
}
|
|
27
|
-
|
|
35
|
+
setupTabs() {
|
|
28
36
|
var _a;
|
|
29
|
-
if ((_a = this.
|
|
37
|
+
if ((_a = this.panels) === null || _a === void 0 ? void 0 : _a.length) {
|
|
30
38
|
if (this.activeIndex !== undefined && this.activeIndex !== null) {
|
|
31
|
-
const
|
|
32
|
-
|
|
39
|
+
const activeTabs = Array.isArray(this.activeIndex)
|
|
40
|
+
? this.panels.filter((_, index) => this.activeIndex.includes(index))
|
|
41
|
+
: [this.panels[this.activeIndex]];
|
|
42
|
+
if (activeTabs.length === 0) {
|
|
33
43
|
throw new Error("activeIndex does not represent any panel.");
|
|
34
44
|
}
|
|
35
|
-
|
|
36
|
-
|
|
45
|
+
for (const activeTab of activeTabs) {
|
|
46
|
+
if (!activeTab.disabled) {
|
|
47
|
+
activeTab.isOpen = true;
|
|
48
|
+
}
|
|
37
49
|
}
|
|
38
50
|
}
|
|
39
51
|
}
|
|
40
52
|
}
|
|
41
|
-
|
|
42
|
-
this.
|
|
53
|
+
closeOtherTabs(exception) {
|
|
54
|
+
this.panels.forEach((panel, index) => {
|
|
43
55
|
if (index !== exception) {
|
|
44
56
|
panel.isOpen = false;
|
|
45
57
|
}
|
|
46
58
|
});
|
|
47
59
|
}
|
|
48
|
-
|
|
60
|
+
setBehavior(multiple) {
|
|
49
61
|
if (multiple) {
|
|
50
|
-
this.
|
|
62
|
+
this.enableMultiplePanelBehavior();
|
|
51
63
|
}
|
|
52
64
|
else {
|
|
53
|
-
this.
|
|
65
|
+
this.enableSinglePanelBehavior();
|
|
54
66
|
}
|
|
55
67
|
}
|
|
56
|
-
|
|
57
|
-
this.
|
|
58
|
-
this.
|
|
59
|
-
.
|
|
60
|
-
.subscribe(() => {
|
|
61
|
-
this._closeOtherTabs(index);
|
|
68
|
+
enableSinglePanelBehavior() {
|
|
69
|
+
this.panels.forEach((panel, index) => {
|
|
70
|
+
this.openSubs[index] = panel.panelOpened.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
|
|
71
|
+
this.closeOtherTabs(index);
|
|
62
72
|
});
|
|
63
73
|
});
|
|
64
74
|
}
|
|
65
|
-
|
|
66
|
-
this.
|
|
67
|
-
if (this.
|
|
68
|
-
this.
|
|
75
|
+
enableMultiplePanelBehavior() {
|
|
76
|
+
this.panels.forEach((_, index) => {
|
|
77
|
+
if (this.openSubs[index]) {
|
|
78
|
+
this.openSubs[index].unsubscribe();
|
|
69
79
|
}
|
|
70
80
|
});
|
|
71
81
|
}
|
|
@@ -87,4 +97,4 @@ AccordionComponent = __decorate([
|
|
|
87
97
|
})
|
|
88
98
|
], AccordionComponent);
|
|
89
99
|
export { AccordionComponent };
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2FjY29yZGlvbi9hY2NvcmRpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQStCLFNBQVMsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUErQyxNQUFNLGVBQWUsQ0FBQztBQUU1SSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPM0MsSUFBYSxrQkFBa0IsR0FBL0IsTUFBYSxrQkFBa0I7SUFBL0I7UUFLVyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBS2hCLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNuQyxXQUFNLEdBQThCLEVBQUUsQ0FBQztJQW1GbkQsQ0FBQztJQWhGRyxRQUFRO1FBQ0osSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTSxrQkFBa0I7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTlDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU0sV0FBVyxDQUFDLE9BQXNCO1FBQ3JDLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FB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dEM7SUFEQyxLQUFLLEVBQUU7b0RBQ2dCO0FBR3hCO0lBREMsZUFBZSxDQUFDLHVCQUF1QixDQUFDOzREQUNtQjtBQVJuRCxrQkFBa0I7SUFMOUIsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLGFBQWE7UUFDdkIsNEVBQXlDOztLQUU1QyxDQUFDO0dBQ1csa0JBQWtCLENBOEY5QjtTQTlGWSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMsIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBJbnB1dCwgUXVlcnlMaXN0LCBTaW1wbGVDaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmltcG9ydCB7IEFjY29yZGlvblBhbmVsQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9hY2NvcmRpb24tcGFuZWwvYWNjb3JkaW9uLXBhbmVsLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJzLWFjY29yZGlvblwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vYWNjb3JkaW9uLmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCIuL2FjY29yZGlvbi5jb21wb25lbnQuc2Nzc1wiXSxcbn0pXG5leHBvcnQgY2xhc3MgQWNjb3JkaW9uQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYWN0aXZlSW5kZXg6IG51bWJlciB8IG51bWJlcltdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbXVsdGlwbGUgPSBmYWxzZTtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oQWNjb3JkaW9uUGFuZWxDb21wb25lbnQpXG4gICAgcHVibGljIHBhbmVsc0NvbXBvbmVudHM6IFF1ZXJ5TGlzdDxBY2NvcmRpb25QYW5lbENvbXBvbmVudD47XG5cbiAgICBwcml2YXRlIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBwYW5lbHM6IEFjY29yZGlvblBhbmVsQ29tcG9uZW50W10gPSBbXTtcbiAgICBwcml2YXRlIG9wZW5TdWJzOiBTdWJzY3JpcHRpb25bXTtcblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXRzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYW5lbHMgPSB0aGlzLnBhbmVsc0NvbXBvbmVudHMudG9BcnJheSgpO1xuICAgICAgICB0aGlzLm9wZW5TdWJzID0gbmV3IEFycmF5KHRoaXMucGFuZWxzLmxlbmd0aCk7XG5cbiAgICAgICAgdGhpcy5zZXRCZWhhdmlvcih0aGlzLm11bHRpcGxlKTtcbiAgICAgICAgdGhpcy5zZXR1cFRhYnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRCZWhhdmlvcihjaGFuZ2VzLm11bHRpcGxlLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlSW5wdXRzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmFjdGl2ZUluZGV4KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGFjdGl2ZUluZGV4IHNob3VsZCBub3QgYmUgYW4gYXJyYXkgd2hlbiBtdWx0aXBsZSBpcyBzZXQgdG8gZmFsc2UuXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cFRhYnMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBhbmVscz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVJbmRleCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYWN0aXZlSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVUYWJzID0gQXJyYXkuaXNBcnJheSh0aGlzLmFjdGl2ZUluZGV4KVxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucGFuZWxzLmZpbHRlcigoXywgaW5kZXgpID0+ICh0aGlzLmFjdGl2ZUluZGV4IGFzIG51bWJlcltdKS5pbmNsdWRlcyhpbmRleCkpXG4gICAgICAgICAgICAgICAgICAgIDogW3RoaXMucGFuZWxzW3RoaXMuYWN0aXZlSW5kZXhdXTtcblxuICAgICAgICAgICAgICAgIGlmIChhY3RpdmVUYWJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhY3RpdmVJbmRleCBkb2VzIG5vdCByZXByZXNlbnQgYW55IHBhbmVsLlwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFjdGl2ZVRhYiBvZiBhY3RpdmVUYWJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYWN0aXZlVGFiLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVUYWIuaXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VPdGhlclRhYnMoZXhjZXB0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5wYW5lbHMuZm9yRWFjaCgocGFuZWwsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IGV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgIHBhbmVsLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEJlaGF2aW9yKG11bHRpcGxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5lbmFibGVNdWx0aXBsZVBhbmVsQmVoYXZpb3IoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlU2luZ2xlUGFuZWxCZWhhdmlvcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbmFibGVTaW5nbGVQYW5lbEJlaGF2aW9yKCkge1xuICAgICAgICB0aGlzLnBhbmVscy5mb3JFYWNoKChwYW5lbCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3BlblN1YnNbaW5kZXhdID0gcGFuZWwucGFuZWxPcGVuZWQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VPdGhlclRhYnMoaW5kZXgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW5hYmxlTXVsdGlwbGVQYW5lbEJlaGF2aW9yKCkge1xuICAgICAgICB0aGlzLnBhbmVscy5mb3JFYWNoKChfLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub3BlblN1YnNbaW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuU3Vic1tpbmRleF0udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -8,7 +8,7 @@ import { HostProjectConfigsInjectionToken } from "../../../angular-components.mo
|
|
|
8
8
|
import { LocaleService } from "../../locale/locale.service";
|
|
9
9
|
import { NumericService } from "../../locale/services/numeric.service";
|
|
10
10
|
import { convertToMomentDateFormat } from "../../utils/locale-utils";
|
|
11
|
-
import { isNullOrUndefined } from "../../utils/utils";
|
|
11
|
+
import { deepClone, isNullOrUndefined } from "../../utils/utils";
|
|
12
12
|
import { EnumColumnFieldType } from "./models";
|
|
13
13
|
const moment = moment_;
|
|
14
14
|
let TableColumnsComponent = class TableColumnsComponent {
|
|
@@ -60,11 +60,11 @@ let TableColumnsComponent = class TableColumnsComponent {
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
createColumnsTemplate(changes) {
|
|
63
|
-
var _a, _b, _c;
|
|
63
|
+
var _a, _b, _c, _d;
|
|
64
64
|
this.viewContainerRef.clear();
|
|
65
65
|
const columns = ((_a = changes.columns) === null || _a === void 0 ? void 0 : _a.currentValue) || this.columns;
|
|
66
|
-
const rowValue = ((_b = changes.rowValue) === null || _b === void 0 ? void 0 : _b.currentValue)
|
|
67
|
-
const locale = ((
|
|
66
|
+
const rowValue = deepClone((_c = (_b = changes.rowValue) === null || _b === void 0 ? void 0 : _b.currentValue) !== null && _c !== void 0 ? _c : this.rowValue);
|
|
67
|
+
const locale = ((_d = changes.locale) === null || _d === void 0 ? void 0 : _d.currentValue) || this.locale;
|
|
68
68
|
this.formattedColumns = columns.map((column) => this.getColumnValue(column, rowValue, locale));
|
|
69
69
|
this.cellsData = this.formattedColumns.map((column) => this.getCellData(column));
|
|
70
70
|
this.viewContainerRef.createEmbeddedView(this.columnsTemplate);
|
|
@@ -194,14 +194,14 @@ let TableColumnsComponent = class TableColumnsComponent {
|
|
|
194
194
|
}
|
|
195
195
|
getColumnScale(scale) {
|
|
196
196
|
if (typeof scale === "function") {
|
|
197
|
-
return scale(this.rowValue);
|
|
197
|
+
return scale(deepClone(this.rowValue));
|
|
198
198
|
}
|
|
199
199
|
return scale;
|
|
200
200
|
}
|
|
201
201
|
getColumnInfoSign(infoSign) {
|
|
202
202
|
if (infoSign !== undefined && infoSign !== null) {
|
|
203
203
|
if (typeof infoSign === "function") {
|
|
204
|
-
return infoSign(this.rowValue);
|
|
204
|
+
return infoSign(deepClone(this.rowValue));
|
|
205
205
|
}
|
|
206
206
|
return infoSign;
|
|
207
207
|
}
|
|
@@ -210,7 +210,7 @@ let TableColumnsComponent = class TableColumnsComponent {
|
|
|
210
210
|
getColumnTooltip(tooltip) {
|
|
211
211
|
if (tooltip !== undefined && tooltip !== null) {
|
|
212
212
|
if (typeof tooltip === "function") {
|
|
213
|
-
return tooltip(this.rowValue);
|
|
213
|
+
return tooltip(deepClone(this.rowValue));
|
|
214
214
|
}
|
|
215
215
|
return tooltip;
|
|
216
216
|
}
|
|
@@ -282,4 +282,4 @@ TableColumnsComponent = __decorate([
|
|
|
282
282
|
__param(4, Inject(HostProjectConfigsInjectionToken))
|
|
283
283
|
], TableColumnsComponent);
|
|
284
284
|
export { TableColumnsComponent };
|
|
285
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy90YWJsZS90YWJsZS1jb2x1bW4vdGFibGUtY29sdW1ucy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxhQUFhLEVBQ2IsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEdBQ25CLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBYyxTQUFTLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRSxPQUFPLFNBQVMsTUFBTSxjQUFjLENBQUM7QUFDckMsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFFbEMsT0FBTyxFQUFzQixnQ0FBZ0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzFHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFdkUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUF3QixtQkFBbUIsRUFBNEIsTUFBTSxVQUFVLENBQUM7QUFFL0YsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBT3ZCLElBQWEscUJBQXFCLEdBQWxDLE1BQWEscUJBQXFCO0lBMkI5QixZQUNxQixhQUE0QixFQUM1QixnQkFBa0MsRUFDbEMsU0FBMkIsRUFDM0IsY0FBOEIsRUFDWSxrQkFBc0M7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SyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLEtBQUssTUFBSyxJQUFJLElBQUksQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsS0FBSyxNQUFLLFNBQVMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xILENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxPQUFpQjtRQUMzQyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzRCxDQUFDO0NBQ0osQ0FBQTs7WUExU3VDLGFBQWE7WUFDVixnQkFBZ0I7WUFDdkIsZ0JBQWdCO1lBQ1gsY0FBYzs0Q0FDOUMsTUFBTSxTQUFDLGdDQUFnQzs7QUEvQkk7SUFBL0MsU0FBUyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDOzhEQUFtQztBQUdsRjtJQURDLEtBQUssRUFBRTtzREFDa0I7QUFHMUI7SUFEQyxLQUFLLEVBQUU7dURBQ2M7QUFHdEI7SUFEQyxLQUFLLEVBQUU7cURBVU47QUFNc0I7SUFBdkIsWUFBWSxDQUFDLFFBQVEsQ0FBQzs0REFBc0M7QUF6QnBELHFCQUFxQjtJQUxqQyxTQUFTLENBQUM7UUFDUCw0dkdBQTZDO1FBRTdDLFFBQVEsRUFBRSxpQkFBaUI7O0tBQzlCLENBQUM7SUFpQ08sV0FBQSxNQUFNLENBQUMsZ0NBQWdDLENBQUMsQ0FBQTtHQWhDcEMscUJBQXFCLENBc1VqQztTQXRVWSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IE1hc2tDb25maWcsIGFwcGx5TWFzayB9IGZyb20gXCJAc2VuaW9yc2lzdGVtYXMvbmcyLWN1cnJlbmN5LW1hc2tcIjtcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSBcImJpZ251bWJlci5qc1wiO1xuaW1wb3J0ICogYXMgbW9tZW50XyBmcm9tIFwibW9tZW50XCI7XG5cbmltcG9ydCB7IEhvc3RQcm9qZWN0Q29uZmlncywgSG9zdFByb2plY3RDb25maWdzSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vYW5ndWxhci1jb21wb25lbnRzLm1vZHVsZVwiO1xuaW1wb3J0IHsgTG9jYWxlU2VydmljZSB9IGZyb20gXCIuLi8uLi9sb2NhbGUvbG9jYWxlLnNlcnZpY2VcIjtcbmltcG9ydCB7IE51bWVyaWNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2xvY2FsZS9zZXJ2aWNlcy9udW1lcmljLnNlcnZpY2VcIjtcbmltcG9ydCB7IElUb2tlbiB9IGZyb20gXCIuLi8uLi90b2tlbi1saXN0XCI7XG5pbXBvcnQgeyBjb252ZXJ0VG9Nb21lbnREYXRlRm9ybWF0IH0gZnJvbSBcIi4uLy4uL3V0aWxzL2xvY2FsZS11dGlsc1wiO1xuaW1wb3J0IHsgaXNOdWxsT3JVbmRlZmluZWQgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IENvbHVtbiwgQ29sdW1uVmFsdWVzLCBFbnVtQ29sdW1uRmllbGRUeXBlLCBUYWJsZUNvbHVtbkxvY2FsZU9wdGlvbnMgfSBmcm9tIFwiLi9tb2RlbHNcIjtcblxuY29uc3QgbW9tZW50ID0gbW9tZW50XztcblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGVVcmw6IFwiLi90YWJsZS1jb2x1bW5zLmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCIuL3RhYmxlLWNvbHVtbnMuY29tcG9uZW50LnNjc3NcIl0sXG4gICAgc2VsZWN0b3I6IFwicy10YWJsZS1jb2x1bW5zXCIsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29sdW1uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gICAgQFZpZXdDaGlsZChcImNvbHVtbnNUZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb2x1bW5zVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjb2x1bW5zITogQ29sdW1uW107XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByb3dWYWx1ZSE6IGFueTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvY2FsZTogVGFibGVDb2x1bW5Mb2NhbGVPcHRpb25zID0ge1xuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgLi4udGhpcy5sb2NhbGVTZXJ2aWNlLmdldExvY2FsZU9wdGlvbnMoKS5jYWxlbmRhcixcbiAgICAgICAgICAgIGRhdGVGb3JtYXQ6IGNvbnZlcnRUb01vbWVudERhdGVGb3JtYXQodGhpcy5sb2NhbGVTZXJ2aWNlLmdldExvY2FsZU9wdGlvbnMoKS5jYWxlbmRhci5kYXRlRm9ybWF0KSxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyOiB7XG4gICAgICAgICAgICAuLi50aGlzLmxvY2FsZVNlcnZpY2UuZ2V0TG9jYWxlT3B0aW9ucygpLm51bWJlcixcbiAgICAgICAgICAgIHNjYWxlOiAwLFxuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjZWxsc0RhdGE6IENlbGxEYXRhW10gPSBbXTtcblxuICAgIGZvcm1hdHRlZENvbHVtbnM6IENvbHVtblZhbHVlc1tdID0gW107XG5cbiAgICBAVmlld0NoaWxkcmVuKFwiY29sdW1uXCIpIHRlc3RlRWxlbWVudHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsZVNlcnZpY2U6IExvY2FsZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbnVtZXJpY1NlcnZpY2U6IE51bWVyaWNTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KEhvc3RQcm9qZWN0Q29uZmlnc0luamVjdGlvblRva2VuKSBwcml2YXRlIHJlYWRvbmx5IGhvc3RQcm9qZWN0Q29uZmlnczogSG9zdFByb2plY3RDb25maWdzXG4gICAgKSB7fVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbGlkYXRlQ29tcG9uZW50QXR0cmlidXRlcyhjaGFuZ2VzKTtcblxuICAgICAgICBpZiAoY2hhbmdlcy5jb2x1bW5zICYmIGNoYW5nZXMuY29sdW1ucy5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuY29sdW1ucy5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLnNvcnRDb2x1bW5zQnlTZXF1ZW5jZShjaGFuZ2VzLmNvbHVtbnMuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3JlYXRlQ29sdW1uc1RlbXBsYXRlKGNoYW5nZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0FycmF5KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q2VsbERhdGEoY29sdW1uOiBDb2x1bW5WYWx1ZXMpOiBDZWxsRGF0YSB7XG4gICAgICAgIGNvbnN0IHsgY29sdW1uVmFsdWUsIHNlcGFyYXRvciwgdW5pbmZvcm1lZCB9ID0gY29sdW1uO1xuXG4gICAgICAgIGlmICh0eXBlb2YgY29sdW1uVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0dGVkU3RyaW5nID0gY29sdW1uVmFsdWUuc3BsaXQoc2VwYXJhdG9yKTtcblxuICAgICAgICAgICAgcmV0dXJuIHNwbGl0dGVkU3RyaW5nLm1hcCgoc3RyaW5nLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTGFzdEluZGV4ID0gc3BsaXR0ZWRTdHJpbmcubGVuZ3RoIC0gMSA9PT0gaW5kZXg7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICBpc1VuaW5mb3JtZWQ6IHN0cmluZyA9PT0gdW5pbmZvcm1lZCxcbiAgICAgICAgICAgICAgICAgICAgc2VwYXJhdG9yOiAhaXNMYXN0SW5kZXggPyBzZXBhcmF0b3IgOiBudWxsLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVDb21wb25lbnRBdHRyaWJ1dGVzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbHVtbnMgJiYgIWNoYW5nZXMuY29sdW1ucz8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgJ2NvbHVtbnMnIGF0dHJpYnV0ZSBtdXN0IGJlIGluZm9ybWVkIVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMucm93VmFsdWUgJiYgIWNoYW5nZXMucm93VmFsdWU/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlICdyb3dWYWx1ZScgYXR0cmlidXRlIG11c3QgYmUgaW5mb3JtZWQhXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVDb2x1bW5zVGVtcGxhdGUoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcblxuICAgICAgICBjb25zdCBjb2x1bW5zOiBDb2x1bW5bXSA9IGNoYW5nZXMuY29sdW1ucz8uY3VycmVudFZhbHVlIHx8IHRoaXMuY29sdW1ucztcbiAgICAgICAgY29uc3Qgcm93VmFsdWU6IG9iamVjdCA9IGNoYW5nZXMucm93VmFsdWU/LmN1cnJlbnRWYWx1ZSB8fCB0aGlzLnJvd1ZhbHVlO1xuICAgICAgICBjb25zdCBsb2NhbGU6IFRhYmxlQ29sdW1uTG9jYWxlT3B0aW9ucyA9IGNoYW5nZXMubG9jYWxlPy5jdXJyZW50VmFsdWUgfHwgdGhpcy5sb2NhbGU7XG5cbiAgICAgICAgdGhpcy5mb3JtYXR0ZWRDb2x1bW5zID0gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gdGhpcy5nZXRDb2x1bW5WYWx1ZShjb2x1bW4sIHJvd1ZhbHVlLCBsb2NhbGUpKTtcblxuICAgICAgICB0aGlzLmNlbGxzRGF0YSA9IHRoaXMuZm9ybWF0dGVkQ29sdW1ucy5tYXAoKGNvbHVtbikgPT4gdGhpcy5nZXRDZWxsRGF0YShjb2x1bW4pKTtcblxuICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuY29sdW1uc1RlbXBsYXRlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtblNlcGFyYXRvcihjb2x1bW46IENvbHVtbikge1xuICAgICAgICByZXR1cm4gY29sdW1uLnNlcGFyYXRvciA/IGNvbHVtbi5zZXBhcmF0b3IgOiBcIiAtIFwiO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VHJhbnNsYXRpb25QcmVmaXgoY29sdW1uOiBDb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5wcmVmaXggPyBjb2x1bW4ucHJlZml4IDogYCR7dGhpcy5ob3N0UHJvamVjdENvbmZpZ3MuZG9tYWlufS4ke3RoaXMuaG9zdFByb2plY3RDb25maWdzLnNlcnZpY2V9LmA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0F0dHJpYnV0ZVZhbHVlSW52YWxpZChhdHRyaWJ1dGVWYWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgKGF0dHJpYnV0ZVZhbHVlPy5vcHRpb25zPy5udW1iZXJGb3JtYXRPcHRpb25zICYmIGlzTnVsbE9yVW5kZWZpbmVkKGF0dHJpYnV0ZVZhbHVlPy52YWx1ZSkpIHx8XG4gICAgICAgICAgICAodGhpcy5pc0FycmF5KGF0dHJpYnV0ZVZhbHVlKSAmJiAhYXR0cmlidXRlVmFsdWUubGVuZ3RoKSB8fFxuICAgICAgICAgICAgKHR5cGVvZiBhdHRyaWJ1dGVWYWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiBhdHRyaWJ1dGVWYWx1ZS50cmltKCkgPT09IFwiXCIpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JtYXR0ZWRDb2x1bW5WYWx1ZShcbiAgICAgICAgY29sdW1uOiBDb2x1bW4sXG4gICAgICAgIGNvbHVtblZhbHVlOiBhbnlbXSxcbiAgICAgICAgdW5pZmllZENvbHVtblZhbHVlczogc3RyaW5nLFxuICAgICAgICB1bmluZm9ybWVkVGV4dDogc3RyaW5nLFxuICAgICAgICB1bmluZm9ybWVkTnVtYmVyOiBudW1iZXJcbiAgICApIHtcbiAgICAgICAgaWYgKHVuaW5mb3JtZWROdW1iZXIgPT09IGNvbHVtbi5hdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuaW5mb3JtZWRUZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFbnVtQ29sdW1uRmllbGRUeXBlLlRPS0VOUykge1xuICAgICAgICAgICAgcmV0dXJuIFtdLmNvbmNhdC5hcHBseShcbiAgICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgICAgICBjb2x1bW5WYWx1ZS5maWx0ZXIoKHZhbHVlcykgPT4gdmFsdWVzICE9PSB1bmluZm9ybWVkVGV4dClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5pZmllZENvbHVtblZhbHVlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0ZTogc3RyaW5nLCByb3dWYWx1ZTogYW55KSB7XG4gICAgICAgIGxldCBhdHRyaWJ1dGVWYWx1ZSE6IGFueTtcblxuICAgICAgICBhdHRyaWJ1dGUuc3BsaXQoXCIvXCIpLmZvckVhY2goKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGlmICghYXR0cmlidXRlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5zcGxpdChcIi5cIikuZm9yRWFjaCgodmFsOiBzdHJpbmcsIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyb3dWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlID0gcm93VmFsdWVbdmFsXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlID0gYXR0cmlidXRlVmFsdWVbdmFsXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYXR0cmlidXRlVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXROdW1iZXJDb25maWdzKGNvbHVtbjogQ29sdW1uKTogTWFza0NvbmZpZyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi50aGlzLmxvY2FsZS5udW1iZXIsXG4gICAgICAgICAgICBzY2FsZTogY29sdW1uLnNjYWxlICE9PSBudWxsICYmIGNvbHVtbi5zY2FsZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5nZXRDb2x1bW5TY2FsZShjb2x1bW4uc2NhbGUpIDogdGhpcy5sb2NhbGUubnVtYmVyLnNjYWxlLFxuICAgICAgICAgICAgcHJlZml4OiBgJHt0aGlzLmxvY2FsZS5udW1iZXIuY3VycmVuY3lTeW1ib2x9IGAsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREYXRlRm9ybWF0KGNvbHVtbjogQ29sdW1uLCBsb2NhbGU6IFRhYmxlQ29sdW1uTG9jYWxlT3B0aW9ucykge1xuICAgICAgICByZXR1cm4gY29sdW1uLmRhdGVGb3JtYXQgPyBjb2x1bW4uZGF0ZUZvcm1hdCA6IGxvY2FsZS5jYWxlbmRhci5kYXRlRm9ybWF0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29sdW1uVmFsdWUoY29sdW1uOiBDb2x1bW4sIHJvd1ZhbHVlOiBhbnksIGxvY2FsZTogVGFibGVDb2x1bW5Mb2NhbGVPcHRpb25zKTogQ29sdW1uVmFsdWVzIHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gdGhpcy5nZXRUcmFuc2xhdGlvblByZWZpeChjb2x1bW4pO1xuICAgICAgICBjb25zdCBzZXBhcmF0b3IgPSB0aGlzLmdldENvbHVtblNlcGFyYXRvcihjb2x1bW4pO1xuICAgICAgICBjb25zdCB1bmluZm9ybWVkID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChwcmVmaXggKyBcImVtcHR5X2xhYmVsXCIpO1xuICAgICAgICBjb25zdCBzdHlsZSA9IGNvbHVtbi5zdHlsZTtcblxuICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZSA9IGNvbHVtbi5hdHRyaWJ1dGVzLm1hcCgoYXR0cmlidXRlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZVZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGUsIHJvd1ZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNBdHRyaWJ1dGVWYWx1ZUludmFsaWQoYXR0cmlidXRlVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuaW5mb3JtZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG51bWJlckNvbmZpZ3MgPSB0aGlzLmdldE51bWJlckNvbmZpZ3MoY29sdW1uKTtcblxuICAgICAgICAgICAgc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgRW51bUNvbHVtbkZpZWxkVHlwZS5FTlVNOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChjb2x1bW4uZW51bVByZWZpeCArIGF0dHJpYnV0ZVZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgICAgICAgICBjYXNlIEVudW1Db2x1bW5GaWVsZFR5cGUuQ1VSUkVOQ1k6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyRm9ybWF0T3B0aW9ucyA9IGF0dHJpYnV0ZVZhbHVlPy5vcHRpb25zPy5udW1iZXJGb3JtYXRPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGF0dHJpYnV0ZVZhbHVlLm9wdGlvbnMubnVtYmVyRm9ybWF0T3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgOiB0eXBlb2YgY29sdW1uLm51bWJlckZvcm1hdE9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi5udW1iZXJGb3JtYXRPcHRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93RGF0YTogcm93VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4ubnVtYmVyRm9ybWF0T3B0aW9ucztcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyRm9ybWF0T3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLm51bWVyaWNTZXJ2aWNlLmluc3RhbnQoYXR0cmlidXRlVmFsdWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlckZvcm1hdE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGFwcGx5TWFzayhhdHRyaWJ1dGVWYWx1ZSwgbnVtYmVyQ29uZmlncywgdGhpcy5pc051bWJlcihhdHRyaWJ1dGVWYWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhc2UgRW51bUNvbHVtbkZpZWxkVHlwZS5EQVRFOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlRm9ybWF0ID0gdGhpcy5nZXREYXRlRm9ybWF0KGNvbHVtbiwgbG9jYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbWVudChhdHRyaWJ1dGVWYWx1ZSkuZm9ybWF0KGRhdGVGb3JtYXQpO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBFbnVtQ29sdW1uRmllbGRUeXBlLkJPT0xFQU46XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXR0cmlidXRlVmFsdWUgPyBcInllc1wiIDogXCJub1wiO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChwcmVmaXggKyB2YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICBjYXNlIEVudW1Db2x1bW5GaWVsZFR5cGUuTlVNQkVSOiB7XG4gICAgICAgICAgICAgICAgICAgIG51bWJlckNvbmZpZ3MucHJlZml4ID0gXCJcIjtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBudW1iZXJGb3JtYXRPcHRpb25zID0gYXR0cmlidXRlVmFsdWU/Lm9wdGlvbnM/Lm51bWJlckZvcm1hdE9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYXR0cmlidXRlVmFsdWUub3B0aW9ucy5udW1iZXJGb3JtYXRPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHR5cGVvZiBjb2x1bW4ubnVtYmVyRm9ybWF0T3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uLm51bWJlckZvcm1hdE9wdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhOiByb3dWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvbHVtbi5udW1iZXJGb3JtYXRPcHRpb25zO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJGb3JtYXRPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMubnVtZXJpY1NlcnZpY2UuaW5zdGFudChhdHRyaWJ1dGVWYWx1ZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyRm9ybWF0T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYXBwbHlNYXNrKGF0dHJpYnV0ZVZhbHVlLCBudW1iZXJDb25maWdzLCB0aGlzLmlzTnVtYmVyKGF0dHJpYnV0ZVZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgRW51bUNvbHVtbkZpZWxkVHlwZS5UT0tFTlM6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRva2VucyhhdHRyaWJ1dGVWYWx1ZSk7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHVuaWZpZWRDb2x1bW5WYWx1ZXMgPSBjb2x1bW5WYWx1ZS5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgIGNvbnN0IHVuaW5mb3JtZWROdW1iZXIgPSB1bmlmaWVkQ29sdW1uVmFsdWVzLnNwbGl0KHNlcGFyYXRvcikuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHVuaW5mb3JtZWQpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkQ29sdW1uVmFsdWUgPSB0aGlzLmdldEZvcm1hdHRlZENvbHVtblZhbHVlKGNvbHVtbiwgY29sdW1uVmFsdWUsIHVuaWZpZWRDb2x1bW5WYWx1ZXMsIHVuaW5mb3JtZWQsIHVuaW5mb3JtZWROdW1iZXIpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIGNvbHVtblZhbHVlOiBmb3JtYXR0ZWRDb2x1bW5WYWx1ZSxcbiAgICAgICAgICAgIHNlcGFyYXRvcixcbiAgICAgICAgICAgIHVuaW5mb3JtZWQsXG4gICAgICAgICAgICBiYWRnZUNvbmZpZ3M6IGNvbHVtbj8uYmFkZ2VDb25maWdzPy5maW5kKFxuICAgICAgICAgICAgICAgIChiYWRnZUNvbmZpZykgPT4gYmFkZ2VDb25maWcuZW51bVZhbHVlID09PSByb3dWYWx1ZVtjb2x1bW4uYXR0cmlidXRlc1swXSA/PyBjb2x1bW4uZmllbGRdXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgY29sb3I6IGNvbHVtbi5jb2xvcj8uKHJvd1ZhbHVlKSxcbiAgICAgICAgICAgIHR5cGU6IGNvbHVtbi50eXBlLFxuICAgICAgICAgICAgdG9vbHRpcDogdGhpcy5nZXRDb2x1bW5Ub29sdGlwKGNvbHVtbi50b29sdGlwKSxcbiAgICAgICAgICAgIGluZm9TaWduOiB0aGlzLmdldENvbHVtbkluZm9TaWduKGNvbHVtbi5pbmZvU2lnbiksXG4gICAgICAgICAgICBvbkxpbmtDbGljazogY29sdW1uLm9uTGlua0NsaWNrLFxuICAgICAgICAgICAgb25Db2x1bW5DbGljazogY29sdW1uLm9uQ29sdW1uQ2xpY2ssXG4gICAgICAgICAgICBjb21wYWN0OiBjb2x1bW4uY29tcGFjdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtblNjYWxlKHNjYWxlOiBudW1iZXIgfCAoKHJvd1ZhbHVlOiBhbnkpID0+IG51bWJlcikpOiBudW1iZXIge1xuICAgICAgICBpZiAodHlwZW9mIHNjYWxlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2FsZSh0aGlzLnJvd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NhbGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb2x1bW5JbmZvU2lnbihpbmZvU2lnbjogc3RyaW5nIHwgKChyb3dWYWx1ZTogYW55KSA9PiBzdHJpbmcpKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGluZm9TaWduICE9PSB1bmRlZmluZWQgJiYgaW5mb1NpZ24gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5mb1NpZ24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbmZvU2lnbih0aGlzLnJvd1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpbmZvU2lnbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtblRvb2x0aXAodG9vbHRpcDogc3RyaW5nIHwgKChyb3dWYWx1ZTogYW55KSA9PiBzdHJpbmcpKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRvb2x0aXAgIT09IHVuZGVmaW5lZCAmJiB0b29sdGlwICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRvb2x0aXAgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b29sdGlwKHRoaXMucm93VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRvb2x0aXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc051bWJlcih2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhbmV3IEJpZ051bWJlcih2YWx1ZSkuaXNOYU4oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRva2Vucyh2YWx1ZXM6IGFueSk6IElUb2tlbltdIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQXJyYXkodmFsdWVzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVG8gdXNlIHRva2VucyBhbiBhcnJheSBtdXN0IGJlIGluZm9ybWVkXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRUb2tlbkFycmF5KHZhbHVlcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdCBhIHZhbGlkIHRva2VuIGFycmF5LiBNdXN0IGJlIGEgcHJpbWl0aXZlIHZhbHVlcyBhcnJheSBvciBhbiBvYmplY3RzIHdpdGggbGFiZWwgYXR0cmlidXRlIGFycmF5XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNMYWJlbE9iamVjdEFycmF5KHZhbHVlcykpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWVzXG4gICAgICAgICAgICAuZmlsdGVyKCh2YWx1ZTogYW55KSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKVxuICAgICAgICAgICAgLm1hcCgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdHlwZW9mIHZhbHVlID09PSBcInN5bWJvbFwiID8gdmFsdWUudG9TdHJpbmcoKSA6IGAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWYWxpZFRva2VuQXJyYXkodmFsdWVzOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ByaW1pdGl2ZVZhbHVlc0FycmF5KHZhbHVlcykgfHwgdGhpcy5pc0xhYmVsT2JqZWN0QXJyYXkodmFsdWVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzUHJpbWl0aXZlVmFsdWVzQXJyYXkodmFsdWVzOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdmFsdWVzLmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSBPYmplY3QodmFsdWUpKS5sZW5ndGggPT09IHZhbHVlcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0xhYmVsT2JqZWN0QXJyYXkodmFsdWVzOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdmFsdWVzLmZpbHRlcigodmFsdWUpID0+IHZhbHVlPy5sYWJlbCAhPT0gbnVsbCAmJiB2YWx1ZT8ubGFiZWwgIT09IHVuZGVmaW5lZCkubGVuZ3RoID09PSB2YWx1ZXMubGVuZ3RoO1xuICAgIH1cblxuICAgIHByaXZhdGUgc29ydENvbHVtbnNCeVNlcXVlbmNlKGNvbHVtbnM6IENvbHVtbltdKTogQ29sdW1uW10ge1xuICAgICAgICByZXR1cm4gY29sdW1ucy5zb3J0KChhLCBiKSA9PiBhLnNlcXVlbmNlIC0gYi5zZXF1ZW5jZSk7XG4gICAgfVxufVxuXG50eXBlIENlbGxEYXRhID0geyB2YWx1ZTogc3RyaW5nOyBpc1VuaW5mb3JtZWQ6IGJvb2xlYW47IHNlcGFyYXRvcjogc3RyaW5nIH1bXTtcbiJdfQ==
|
|
285
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy90YWJsZS90YWJsZS1jb2x1bW4vdGFibGUtY29sdW1ucy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxhQUFhLEVBQ2IsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEdBQ25CLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBYyxTQUFTLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRSxPQUFPLFNBQVMsTUFBTSxjQUFjLENBQUM7QUFDckMsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFFbEMsT0FBTyxFQUFzQixnQ0FBZ0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzFHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFdkUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pFLE9BQU8sRUFBd0IsbUJBQW1CLEVBQTRCLE1BQU0sVUFBVSxDQUFDO0FBRS9GLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQztBQU92QixJQUFhLHFCQUFxQixHQUFsQyxNQUFhLHFCQUFxQjtJQTJCOUIsWUFDcUIsYUFBNEIsRUFDNUIsZ0JBQWtDLEVBQ2xDLFNBQTJCLEVBQzNCLGNBQThCLEVB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YTtRQUNwQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLEtBQUssTUFBSyxJQUFJLElBQUksQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsS0FBSyxNQUFLLFNBQVMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xILENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxPQUFpQjtRQUMzQyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzRCxDQUFDO0NBQ0osQ0FBQTs7WUExU3VDLGFBQWE7WUFDVixnQkFBZ0I7WUFDdkIsZ0JBQWdCO1lBQ1gsY0FBYzs0Q0FDOUMsTUFBTSxTQUFDLGdDQUFnQzs7QUEvQkk7SUFBL0MsU0FBUyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDOzhEQUFtQztBQUdsRjtJQURDLEtBQUssRUFBRTtzREFDa0I7QUFHMUI7SUFEQyxLQUFLLEVBQUU7dURBQ2M7QUFHdEI7SUFEQyxLQUFLLEVBQUU7cURBVU47QUFNc0I7SUFBdkIsWUFBWSxDQUFDLFFBQVEsQ0FBQzs0REFBc0M7QUF6QnBELHFCQUFxQjtJQUxqQyxTQUFTLENBQUM7UUFDUCw0dkdBQTZDO1FBRTdDLFFBQVEsRUFBRSxpQkFBaUI7O0tBQzlCLENBQUM7SUFpQ08sV0FBQSxNQUFNLENBQUMsZ0NBQWdDLENBQUMsQ0FBQTtHQWhDcEMscUJBQXFCLENBc1VqQztTQXRVWSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IE1hc2tDb25maWcsIGFwcGx5TWFzayB9IGZyb20gXCJAc2VuaW9yc2lzdGVtYXMvbmcyLWN1cnJlbmN5LW1hc2tcIjtcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSBcImJpZ251bWJlci5qc1wiO1xuaW1wb3J0ICogYXMgbW9tZW50XyBmcm9tIFwibW9tZW50XCI7XG5cbmltcG9ydCB7IEhvc3RQcm9qZWN0Q29uZmlncywgSG9zdFByb2plY3RDb25maWdzSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vYW5ndWxhci1jb21wb25lbnRzLm1vZHVsZVwiO1xuaW1wb3J0IHsgTG9jYWxlU2VydmljZSB9IGZyb20gXCIuLi8uLi9sb2NhbGUvbG9jYWxlLnNlcnZpY2VcIjtcbmltcG9ydCB7IE51bWVyaWNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2xvY2FsZS9zZXJ2aWNlcy9udW1lcmljLnNlcnZpY2VcIjtcbmltcG9ydCB7IElUb2tlbiB9IGZyb20gXCIuLi8uLi90b2tlbi1saXN0XCI7XG5pbXBvcnQgeyBjb252ZXJ0VG9Nb21lbnREYXRlRm9ybWF0IH0gZnJvbSBcIi4uLy4uL3V0aWxzL2xvY2FsZS11dGlsc1wiO1xuaW1wb3J0IHsgZGVlcENsb25lLCBpc051bGxPclVuZGVmaW5lZCB9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgQ29sdW1uLCBDb2x1bW5WYWx1ZXMsIEVudW1Db2x1bW5GaWVsZFR5cGUsIFRhYmxlQ29sdW1uTG9jYWxlT3B0aW9ucyB9IGZyb20gXCIuL21vZGVsc1wiO1xuXG5jb25zdCBtb21lbnQgPSBtb21lbnRfO1xuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3RhYmxlLWNvbHVtbnMuY29tcG9uZW50Lmh0bWxcIixcbiAgICBzdHlsZVVybHM6IFtcIi4vdGFibGUtY29sdW1ucy5jb21wb25lbnQuc2Nzc1wiXSxcbiAgICBzZWxlY3RvcjogXCJzLXRhYmxlLWNvbHVtbnNcIixcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb2x1bW5zQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgICBAVmlld0NoaWxkKFwiY29sdW1uc1RlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pIGNvbHVtbnNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbHVtbnMhOiBDb2x1bW5bXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJvd1ZhbHVlITogYW55O1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbG9jYWxlOiBUYWJsZUNvbHVtbkxvY2FsZU9wdGlvbnMgPSB7XG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICAuLi50aGlzLmxvY2FsZVNlcnZpY2UuZ2V0TG9jYWxlT3B0aW9ucygpLmNhbGVuZGFyLFxuICAgICAgICAgICAgZGF0ZUZvcm1hdDogY29udmVydFRvTW9tZW50RGF0ZUZvcm1hdCh0aGlzLmxvY2FsZVNlcnZpY2UuZ2V0TG9jYWxlT3B0aW9ucygpLmNhbGVuZGFyLmRhdGVGb3JtYXQpLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXI6IHtcbiAgICAgICAgICAgIC4uLnRoaXMubG9jYWxlU2VydmljZS5nZXRMb2NhbGVPcHRpb25zKCkubnVtYmVyLFxuICAgICAgICAgICAgc2NhbGU6IDAsXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNlbGxzRGF0YTogQ2VsbERhdGFbXSA9IFtdO1xuXG4gICAgZm9ybWF0dGVkQ29sdW1uczogQ29sdW1uVmFsdWVzW10gPSBbXTtcblxuICAgIEBWaWV3Q2hpbGRyZW4oXCJjb2x1bW5cIikgdGVzdGVFbGVtZW50czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxlU2VydmljZTogTG9jYWxlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBudW1lcmljU2VydmljZTogTnVtZXJpY1NlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoSG9zdFByb2plY3RDb25maWdzSW5qZWN0aW9uVG9rZW4pIHByaXZhdGUgcmVhZG9ubHkgaG9zdFByb2plY3RDb25maWdzOiBIb3N0UHJvamVjdENvbmZpZ3NcbiAgICApIHt9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVDb21wb25lbnRBdHRyaWJ1dGVzKGNoYW5nZXMpO1xuXG4gICAgICAgIGlmIChjaGFuZ2VzLmNvbHVtbnMgJiYgY2hhbmdlcy5jb2x1bW5zLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5jb2x1bW5zLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuc29ydENvbHVtbnNCeVNlcXVlbmNlKGNoYW5nZXMuY29sdW1ucy5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jcmVhdGVDb2x1bW5zVGVtcGxhdGUoY2hhbmdlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQXJyYXkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDZWxsRGF0YShjb2x1bW46IENvbHVtblZhbHVlcyk6IENlbGxEYXRhIHtcbiAgICAgICAgY29uc3QgeyBjb2x1bW5WYWx1ZSwgc2VwYXJhdG9yLCB1bmluZm9ybWVkIH0gPSBjb2x1bW47XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb2x1bW5WYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29uc3Qgc3BsaXR0ZWRTdHJpbmcgPSBjb2x1bW5WYWx1ZS5zcGxpdChzZXBhcmF0b3IpO1xuXG4gICAgICAgICAgICByZXR1cm4gc3BsaXR0ZWRTdHJpbmcubWFwKChzdHJpbmcsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNMYXN0SW5kZXggPSBzcGxpdHRlZFN0cmluZy5sZW5ndGggLSAxID09PSBpbmRleDtcblxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgIGlzVW5pbmZvcm1lZDogc3RyaW5nID09PSB1bmluZm9ybWVkLFxuICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3I6ICFpc0xhc3RJbmRleCA/IHNlcGFyYXRvciA6IG51bGwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUNvbXBvbmVudEF0dHJpYnV0ZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29sdW1ucyAmJiAhY2hhbmdlcy5jb2x1bW5zPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSAnY29sdW1ucycgYXR0cmlidXRlIG11c3QgYmUgaW5mb3JtZWQhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5yb3dWYWx1ZSAmJiAhY2hhbmdlcy5yb3dWYWx1ZT8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgJ3Jvd1ZhbHVlJyBhdHRyaWJ1dGUgbXVzdCBiZSBpbmZvcm1lZCFcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNvbHVtbnNUZW1wbGF0ZShjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuXG4gICAgICAgIGNvbnN0IGNvbHVtbnM6IENvbHVtbltdID0gY2hhbmdlcy5jb2x1bW5zPy5jdXJyZW50VmFsdWUgfHwgdGhpcy5jb2x1bW5zO1xuICAgICAgICBjb25zdCByb3dWYWx1ZTogb2JqZWN0ID0gZGVlcENsb25lKGNoYW5nZXMucm93VmFsdWU/LmN1cnJlbnRWYWx1ZSA/PyB0aGlzLnJvd1ZhbHVlKTtcbiAgICAgICAgY29uc3QgbG9jYWxlOiBUYWJsZUNvbHVtbkxvY2FsZU9wdGlvbnMgPSBjaGFuZ2VzLmxvY2FsZT8uY3VycmVudFZhbHVlIHx8IHRoaXMubG9jYWxlO1xuXG4gICAgICAgIHRoaXMuZm9ybWF0dGVkQ29sdW1ucyA9IGNvbHVtbnMubWFwKChjb2x1bW4pID0+IHRoaXMuZ2V0Q29sdW1uVmFsdWUoY29sdW1uLCByb3dWYWx1ZSwgbG9jYWxlKSk7XG5cbiAgICAgICAgdGhpcy5jZWxsc0RhdGEgPSB0aGlzLmZvcm1hdHRlZENvbHVtbnMubWFwKChjb2x1bW4pID0+IHRoaXMuZ2V0Q2VsbERhdGEoY29sdW1uKSk7XG5cbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLmNvbHVtbnNUZW1wbGF0ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb2x1bW5TZXBhcmF0b3IoY29sdW1uOiBDb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5zZXBhcmF0b3IgPyBjb2x1bW4uc2VwYXJhdG9yIDogXCIgLSBcIjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRyYW5zbGF0aW9uUHJlZml4KGNvbHVtbjogQ29sdW1uKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4ucHJlZml4ID8gY29sdW1uLnByZWZpeCA6IGAke3RoaXMuaG9zdFByb2plY3RDb25maWdzLmRvbWFpbn0uJHt0aGlzLmhvc3RQcm9qZWN0Q29uZmlncy5zZXJ2aWNlfS5gO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBdHRyaWJ1dGVWYWx1ZUludmFsaWQoYXR0cmlidXRlVmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPT09IG51bGwgfHxcbiAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIChhdHRyaWJ1dGVWYWx1ZT8ub3B0aW9ucz8ubnVtYmVyRm9ybWF0T3B0aW9ucyAmJiBpc051bGxPclVuZGVmaW5lZChhdHRyaWJ1dGVWYWx1ZT8udmFsdWUpKSB8fFxuICAgICAgICAgICAgKHRoaXMuaXNBcnJheShhdHRyaWJ1dGVWYWx1ZSkgJiYgIWF0dHJpYnV0ZVZhbHVlLmxlbmd0aCkgfHxcbiAgICAgICAgICAgICh0eXBlb2YgYXR0cmlidXRlVmFsdWUgPT09IFwic3RyaW5nXCIgJiYgYXR0cmlidXRlVmFsdWUudHJpbSgpID09PSBcIlwiKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9ybWF0dGVkQ29sdW1uVmFsdWUoXG4gICAgICAgIGNvbHVtbjogQ29sdW1uLFxuICAgICAgICBjb2x1bW5WYWx1ZTogYW55W10sXG4gICAgICAgIHVuaWZpZWRDb2x1bW5WYWx1ZXM6IHN0cmluZyxcbiAgICAgICAgdW5pbmZvcm1lZFRleHQ6IHN0cmluZyxcbiAgICAgICAgdW5pbmZvcm1lZE51bWJlcjogbnVtYmVyXG4gICAgKSB7XG4gICAgICAgIGlmICh1bmluZm9ybWVkTnVtYmVyID09PSBjb2x1bW4uYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmluZm9ybWVkVGV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRW51bUNvbHVtbkZpZWxkVHlwZS5UT0tFTlMpIHtcbiAgICAgICAgICAgIHJldHVybiBbXS5jb25jYXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgICAgY29sdW1uVmFsdWUuZmlsdGVyKCh2YWx1ZXMpID0+IHZhbHVlcyAhPT0gdW5pbmZvcm1lZFRleHQpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuaWZpZWRDb2x1bW5WYWx1ZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGU6IHN0cmluZywgcm93VmFsdWU6IGFueSkge1xuICAgICAgICBsZXQgYXR0cmlidXRlVmFsdWUhOiBhbnk7XG5cbiAgICAgICAgYXR0cmlidXRlLnNwbGl0KFwiL1wiKS5mb3JFYWNoKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuc3BsaXQoXCIuXCIpLmZvckVhY2goKHZhbDogc3RyaW5nLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcm93VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9IHJvd1ZhbHVlW3ZhbF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9IGF0dHJpYnV0ZVZhbHVlW3ZhbF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TnVtYmVyQ29uZmlncyhjb2x1bW46IENvbHVtbik6IE1hc2tDb25maWcge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udGhpcy5sb2NhbGUubnVtYmVyLFxuICAgICAgICAgICAgc2NhbGU6IGNvbHVtbi5zY2FsZSAhPT0gbnVsbCAmJiBjb2x1bW4uc2NhbGUgIT09IHVuZGVmaW5lZCA/IHRoaXMuZ2V0Q29sdW1uU2NhbGUoY29sdW1uLnNjYWxlKSA6IHRoaXMubG9jYWxlLm51bWJlci5zY2FsZSxcbiAgICAgICAgICAgIHByZWZpeDogYCR7dGhpcy5sb2NhbGUubnVtYmVyLmN1cnJlbmN5U3ltYm9sfSBgLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGF0ZUZvcm1hdChjb2x1bW46IENvbHVtbiwgbG9jYWxlOiBUYWJsZUNvbHVtbkxvY2FsZU9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5kYXRlRm9ybWF0ID8gY29sdW1uLmRhdGVGb3JtYXQgOiBsb2NhbGUuY2FsZW5kYXIuZGF0ZUZvcm1hdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtblZhbHVlKGNvbHVtbjogQ29sdW1uLCByb3dWYWx1ZTogYW55LCBsb2NhbGU6IFRhYmxlQ29sdW1uTG9jYWxlT3B0aW9ucyk6IENvbHVtblZhbHVlcyB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuZ2V0VHJhbnNsYXRpb25QcmVmaXgoY29sdW1uKTtcbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy5nZXRDb2x1bW5TZXBhcmF0b3IoY29sdW1uKTtcbiAgICAgICAgY29uc3QgdW5pbmZvcm1lZCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQocHJlZml4ICsgXCJlbXB0eV9sYWJlbFwiKTtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBjb2x1bW4uc3R5bGU7XG5cbiAgICAgICAgY29uc3QgY29sdW1uVmFsdWUgPSBjb2x1bW4uYXR0cmlidXRlcy5tYXAoKGF0dHJpYnV0ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVWYWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlVmFsdWUoYXR0cmlidXRlLCByb3dWYWx1ZSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzQXR0cmlidXRlVmFsdWVJbnZhbGlkKGF0dHJpYnV0ZVZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmluZm9ybWVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBudW1iZXJDb25maWdzID0gdGhpcy5nZXROdW1iZXJDb25maWdzKGNvbHVtbik7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEVudW1Db2x1bW5GaWVsZFR5cGUuRU5VTTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoY29sdW1uLmVudW1QcmVmaXggKyBhdHRyaWJ1dGVWYWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBFbnVtQ29sdW1uRmllbGRUeXBlLkNVUlJFTkNZOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlckZvcm1hdE9wdGlvbnMgPSBhdHRyaWJ1dGVWYWx1ZT8ub3B0aW9ucz8ubnVtYmVyRm9ybWF0T3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBhdHRyaWJ1dGVWYWx1ZS5vcHRpb25zLm51bWJlckZvcm1hdE9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdHlwZW9mIGNvbHVtbi5udW1iZXJGb3JtYXRPcHRpb25zID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4ubnVtYmVyRm9ybWF0T3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGE6IHJvd1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogY29sdW1uLm51bWJlckZvcm1hdE9wdGlvbnM7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlckZvcm1hdE9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5udW1lcmljU2VydmljZS5pbnN0YW50KGF0dHJpYnV0ZVZhbHVlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJGb3JtYXRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBhcHBseU1hc2soYXR0cmlidXRlVmFsdWUsIG51bWJlckNvbmZpZ3MsIHRoaXMuaXNOdW1iZXIoYXR0cmlidXRlVmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYXNlIEVudW1Db2x1bW5GaWVsZFR5cGUuREFURTpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZUZvcm1hdCA9IHRoaXMuZ2V0RGF0ZUZvcm1hdChjb2x1bW4sIGxvY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb21lbnQoYXR0cmlidXRlVmFsdWUpLmZvcm1hdChkYXRlRm9ybWF0KTtcblxuICAgICAgICAgICAgICAgIGNhc2UgRW51bUNvbHVtbkZpZWxkVHlwZS5CT09MRUFOOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF0dHJpYnV0ZVZhbHVlID8gXCJ5ZXNcIiA6IFwibm9cIjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQocHJlZml4ICsgdmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBFbnVtQ29sdW1uRmllbGRUeXBlLk5VTUJFUjoge1xuICAgICAgICAgICAgICAgICAgICBudW1iZXJDb25maWdzLnByZWZpeCA9IFwiXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyRm9ybWF0T3B0aW9ucyA9IGF0dHJpYnV0ZVZhbHVlPy5vcHRpb25zPy5udW1iZXJGb3JtYXRPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGF0dHJpYnV0ZVZhbHVlLm9wdGlvbnMubnVtYmVyRm9ybWF0T3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgOiB0eXBlb2YgY29sdW1uLm51bWJlckZvcm1hdE9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi5udW1iZXJGb3JtYXRPcHRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93RGF0YTogcm93VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4ubnVtYmVyRm9ybWF0T3B0aW9ucztcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyRm9ybWF0T3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLm51bWVyaWNTZXJ2aWNlLmluc3RhbnQoYXR0cmlidXRlVmFsdWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlckZvcm1hdE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGFwcGx5TWFzayhhdHRyaWJ1dGVWYWx1ZSwgbnVtYmVyQ29uZmlncywgdGhpcy5pc051bWJlcihhdHRyaWJ1dGVWYWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEVudW1Db2x1bW5GaWVsZFR5cGUuVE9LRU5TOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbnMoYXR0cmlidXRlVmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB1bmlmaWVkQ29sdW1uVmFsdWVzID0gY29sdW1uVmFsdWUuam9pbihzZXBhcmF0b3IpO1xuICAgICAgICBjb25zdCB1bmluZm9ybWVkTnVtYmVyID0gdW5pZmllZENvbHVtblZhbHVlcy5zcGxpdChzZXBhcmF0b3IpLmZpbHRlcigodmFsdWUpID0+IHZhbHVlID09PSB1bmluZm9ybWVkKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZENvbHVtblZhbHVlID0gdGhpcy5nZXRGb3JtYXR0ZWRDb2x1bW5WYWx1ZShjb2x1bW4sIGNvbHVtblZhbHVlLCB1bmlmaWVkQ29sdW1uVmFsdWVzLCB1bmluZm9ybWVkLCB1bmluZm9ybWVkTnVtYmVyKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICBjb2x1bW5WYWx1ZTogZm9ybWF0dGVkQ29sdW1uVmFsdWUsXG4gICAgICAgICAgICBzZXBhcmF0b3IsXG4gICAgICAgICAgICB1bmluZm9ybWVkLFxuICAgICAgICAgICAgYmFkZ2VDb25maWdzOiBjb2x1bW4/LmJhZGdlQ29uZmlncz8uZmluZChcbiAgICAgICAgICAgICAgICAoYmFkZ2VDb25maWcpID0+IGJhZGdlQ29uZmlnLmVudW1WYWx1ZSA9PT0gcm93VmFsdWVbY29sdW1uLmF0dHJpYnV0ZXNbMF0gPz8gY29sdW1uLmZpZWxkXVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGNvbG9yOiBjb2x1bW4uY29sb3I/Lihyb3dWYWx1ZSksXG4gICAgICAgICAgICB0eXBlOiBjb2x1bW4udHlwZSxcbiAgICAgICAgICAgIHRvb2x0aXA6IHRoaXMuZ2V0Q29sdW1uVG9vbHRpcChjb2x1bW4udG9vbHRpcCksXG4gICAgICAgICAgICBpbmZvU2lnbjogdGhpcy5nZXRDb2x1bW5JbmZvU2lnbihjb2x1bW4uaW5mb1NpZ24pLFxuICAgICAgICAgICAgb25MaW5rQ2xpY2s6IGNvbHVtbi5vbkxpbmtDbGljayxcbiAgICAgICAgICAgIG9uQ29sdW1uQ2xpY2s6IGNvbHVtbi5vbkNvbHVtbkNsaWNrLFxuICAgICAgICAgICAgY29tcGFjdDogY29sdW1uLmNvbXBhY3QsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb2x1bW5TY2FsZShzY2FsZTogbnVtYmVyIHwgKChyb3dWYWx1ZTogYW55KSA9PiBudW1iZXIpKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2FsZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NhbGUoZGVlcENsb25lKHRoaXMucm93VmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NhbGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb2x1bW5JbmZvU2lnbihpbmZvU2lnbjogc3RyaW5nIHwgKChyb3dWYWx1ZTogYW55KSA9PiBzdHJpbmcpKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGluZm9TaWduICE9PSB1bmRlZmluZWQgJiYgaW5mb1NpZ24gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5mb1NpZ24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbmZvU2lnbihkZWVwQ2xvbmUodGhpcy5yb3dWYWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluZm9TaWduO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29sdW1uVG9vbHRpcCh0b29sdGlwOiBzdHJpbmcgfCAoKHJvd1ZhbHVlOiBhbnkpID0+IHN0cmluZykpOiBzdHJpbmcge1xuICAgICAgICBpZiAodG9vbHRpcCAhPT0gdW5kZWZpbmVkICYmIHRvb2x0aXAgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdG9vbHRpcCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvb2x0aXAoZGVlcENsb25lKHRoaXMucm93VmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0b29sdGlwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNOdW1iZXIodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIW5ldyBCaWdOdW1iZXIodmFsdWUpLmlzTmFOKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUb2tlbnModmFsdWVzOiBhbnkpOiBJVG9rZW5bXSB7XG4gICAgICAgIGlmICghdGhpcy5pc0FycmF5KHZhbHVlcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRvIHVzZSB0b2tlbnMgYW4gYXJyYXkgbXVzdCBiZSBpbmZvcm1lZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkVG9rZW5BcnJheSh2YWx1ZXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgYSB2YWxpZCB0b2tlbiBhcnJheS4gTXVzdCBiZSBhIHByaW1pdGl2ZSB2YWx1ZXMgYXJyYXkgb3IgYW4gb2JqZWN0cyB3aXRoIGxhYmVsIGF0dHJpYnV0ZSBhcnJheVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzTGFiZWxPYmplY3RBcnJheSh2YWx1ZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlc1xuICAgICAgICAgICAgLmZpbHRlcigodmFsdWU6IGFueSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbClcbiAgICAgICAgICAgIC5tYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJzeW1ib2xcIiA/IHZhbHVlLnRvU3RyaW5nKCkgOiBgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVmFsaWRUb2tlbkFycmF5KHZhbHVlczogYW55W10pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNQcmltaXRpdmVWYWx1ZXNBcnJheSh2YWx1ZXMpIHx8IHRoaXMuaXNMYWJlbE9iamVjdEFycmF5KHZhbHVlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1ByaW1pdGl2ZVZhbHVlc0FycmF5KHZhbHVlczogYW55W10pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gT2JqZWN0KHZhbHVlKSkubGVuZ3RoID09PSB2YWx1ZXMubGVuZ3RoO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNMYWJlbE9iamVjdEFycmF5KHZhbHVlczogYW55W10pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZT8ubGFiZWwgIT09IG51bGwgJiYgdmFsdWU/LmxhYmVsICE9PSB1bmRlZmluZWQpLmxlbmd0aCA9PT0gdmFsdWVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRDb2x1bW5zQnlTZXF1ZW5jZShjb2x1bW5zOiBDb2x1bW5bXSk6IENvbHVtbltdIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbnMuc29ydCgoYSwgYikgPT4gYS5zZXF1ZW5jZSAtIGIuc2VxdWVuY2UpO1xuICAgIH1cbn1cblxudHlwZSBDZWxsRGF0YSA9IHsgdmFsdWU6IHN0cmluZzsgaXNVbmluZm9ybWVkOiBib29sZWFuOyBzZXBhcmF0b3I6IHN0cmluZyB9W107XG4iXX0=
|
|
@@ -2,7 +2,7 @@ import { __awaiter, __decorate, __param } from "tslib";
|
|
|
2
2
|
import { Component, Inject, Input, Output } from "@angular/core";
|
|
3
3
|
import { TranslateService } from "@ngx-translate/core";
|
|
4
4
|
import { HostProjectConfigsInjectionToken } from "../../../angular-components.module";
|
|
5
|
-
import { ExportUtils, isNullOrUndefined } from "../../utils";
|
|
5
|
+
import { deepClone, ExportUtils, isNullOrUndefined } from "../../utils";
|
|
6
6
|
import { LocaleService } from "../../locale/locale.service";
|
|
7
7
|
import BigNumber from "bignumber.js";
|
|
8
8
|
let TablePagingComponent = class TablePagingComponent {
|
|
@@ -84,7 +84,7 @@ let TablePagingComponent = class TablePagingComponent {
|
|
|
84
84
|
});
|
|
85
85
|
}
|
|
86
86
|
getCurrentPageRowsToExport(columns) {
|
|
87
|
-
let tableData = this.table.value;
|
|
87
|
+
let tableData = deepClone(this.table.value);
|
|
88
88
|
if (this.loadCurrentPageRecords) {
|
|
89
89
|
tableData = this.loadCurrentPageRecords();
|
|
90
90
|
}
|
|
@@ -93,7 +93,7 @@ let TablePagingComponent = class TablePagingComponent {
|
|
|
93
93
|
return this.mapColumnsTranslations(columns, tableData);
|
|
94
94
|
}
|
|
95
95
|
getSelectedRowsToExport(columns) {
|
|
96
|
-
let tableData = this.table.selection;
|
|
96
|
+
let tableData = deepClone(this.table.selection);
|
|
97
97
|
if (this.loadSelectedRecords) {
|
|
98
98
|
tableData = this.loadSelectedRecords();
|
|
99
99
|
}
|
|
@@ -310,4 +310,4 @@ TablePagingComponent = __decorate([
|
|
|
310
310
|
__param(2, Inject(HostProjectConfigsInjectionToken))
|
|
311
311
|
], TablePagingComponent);
|
|
312
312
|
export { TablePagingComponent };
|
|
313
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcGFnaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3RhYmxlL3RhYmxlLXBhZ2luZy90YWJsZS1wYWdpbmcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUt2RCxPQUFPLEVBQXNCLGdDQUFnQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFNUQsT0FBTyxTQUFTLE1BQU0sY0FBYyxDQUFDO0FBY3JDLElBQWEsb0JBQW9CLEdBQWpDLE1BQWEsb0JBQW9CO0lBK0I3QixZQUNxQixTQUEyQixFQUMzQixhQUE0QixFQUNjLGtCQUFzQztRQUZoRixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUNjLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUF2QjlGLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFHbEIsZ0NBQTJCLEdBQUcsSUFBSSxDQUFDO0lBcUJ2QyxDQUFDO0lBRUosV0FBVyxDQUFDLE9BQXNCOztRQUM5QixVQUFJLE9BQU8sQ0FBQyxZQUFZLDBDQUFFLFlBQVksRUFBRTtZQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsZUFBZSxFQUFFO2dCQUN4RixLQUFLLEVBQUUsT0FBTyxD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QUFDO1lBRXBFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFFdEUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7S0FBQTtDQUNKLENBQUE7O1lBdlZtQyxnQkFBZ0I7WUFDWixhQUFhOzRDQUM1QyxNQUFNLFNBQUMsZ0NBQWdDOztBQWhDNUM7SUFEQyxLQUFLLEVBQUU7MERBQ3FCO0FBRzdCO0lBREMsS0FBSyxFQUFFOzREQUN1QjtBQUcvQjtJQURDLEtBQUssRUFBRTttREFDYTtBQUdyQjtJQURDLEtBQUssRUFBRTt3REFDaUI7QUFHekI7SUFEQyxLQUFLLEVBQUU7eUVBQ2tDO0FBRzFDO0lBREMsS0FBSyxFQUFFOzJEQUM4QjtBQUd0QztJQURDLEtBQUssRUFBRTs0REFDcUM7QUFHN0M7SUFEQyxLQUFLLEVBQUU7b0VBQ29DO0FBRzVDO0lBREMsS0FBSyxFQUFFO2lFQUNpQztBQUd6QztJQURDLE1BQU0sRUFBRTs4REFDdUI7QUE3QnZCLG9CQUFvQjtJQUxoQyxTQUFTLENBQUM7UUFDUCw4YkFBNEM7UUFFNUMsUUFBUSxFQUFFLGdCQUFnQjs7S0FDN0IsQ0FBQztJQW1DTyxXQUFBLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFBO0dBbENwQyxvQkFBb0IsQ0F1WGhDO1NBdlhZLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gXCJwcmltZW5nL2FwaVwiO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tIFwicHJpbWVuZy90YWJsZVwiO1xuaW1wb3J0IHsgQ29sdW1uIH0gZnJvbSBcIi4uL3RhYmxlLWNvbHVtbi9tb2RlbHMvY29sdW1uLmludGVyZmFjZVwiO1xuXG5pbXBvcnQgeyBIb3N0UHJvamVjdENvbmZpZ3MsIEhvc3RQcm9qZWN0Q29uZmlnc0luamVjdGlvblRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2FuZ3VsYXItY29tcG9uZW50cy5tb2R1bGVcIjtcbmltcG9ydCB7IEV4cG9ydFV0aWxzLCBpc051bGxPclVuZGVmaW5lZCB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xuaW1wb3J0IHsgQ3VzdG9tQWN0aW9uIH0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBMb2NhbGVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2xvY2FsZS9sb2NhbGUuc2VydmljZVwiO1xuXG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gXCJiaWdudW1iZXIuanNcIjtcblxudHlwZSBSb3dWYWx1ZUZvcm1hdE9wdGlvbiA9IHtcbiAgICB2YWx1ZT86IG51bWJlcjtcbiAgICBvcHRpb25zPzoge1xuICAgICAgICBudW1iZXJGb3JtYXRPcHRpb25zPzogSW50bC5OdW1iZXJGb3JtYXRPcHRpb25zO1xuICAgIH07XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3RhYmxlLXBhZ2luZy5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0eWxlVXJsczogW1wiLi90YWJsZS1wYWdpbmcuY29tcG9uZW50LnNjc3NcIl0sXG4gICAgc2VsZWN0b3I6IFwicy10YWJsZS1wYWdpbmdcIixcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVQYWdpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRvdGFsUmVjb3JkcyE6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGV4cG9ydEZpbGVOYW1lPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGFibGUhOiBUYWJsZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGV4cG9ydGFibGUgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZW5hYmxlRXhwb3J0U2VsZWN0ZWRSZWNvcmRzID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGN1c3RvbUFjdGlvbnM/OiBDdXN0b21BY3Rpb25bXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvYWRBbGxSZWNvcmRzPzogKCkgPT4gUHJvbWlzZTxhbnlbXT47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsb2FkQ3VycmVudFBhZ2VSZWNvcmRzPzogKCkgPT4gYW55W107XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsb2FkU2VsZWN0ZWRSZWNvcmRzPzogKCkgPT4gYW55W107XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdG90YWxSZWNvcmRzVGV4dDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsZVNlcnZpY2U6IExvY2FsZVNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoSG9zdFByb2plY3RDb25maWdzSW5qZWN0aW9uVG9rZW4pIHByaXZhdGUgcmVhZG9ubHkgaG9zdFByb2plY3RDb25maWdzOiBIb3N0UHJvamVjdENvbmZpZ3NcbiAgICApIHt9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnRvdGFsUmVjb3Jkcz8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnRvdGFsUmVjb3Jkc1RleHQgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3RoaXMuZ2V0VHJhbnNsYXRlUHJlZml4KCl9dG90YWxfcmVjb3Jkc2AsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogY2hhbmdlcy50b3RhbFJlY29yZHMuY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRyYW5zbGF0ZVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuaG9zdFByb2plY3RDb25maWdzLmRvbWFpbn0uJHt0aGlzLmhvc3RQcm9qZWN0Q29uZmlncy5zZXJ2aWNlfS5gO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUb29sdGlwVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7dGhpcy5nZXRUcmFuc2xhdGVQcmVmaXgoKX1leHBvcnRfdG9fY3N2YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFjdGlvbnMoKTogTWVudUl0ZW1bXSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbnM6IE1lbnVJdGVtW10gPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6IFwiZXhwb3J0Q3VycmVudFBhZ2VcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLmdldFRyYW5zbGF0ZVByZWZpeCgpfWV4cG9ydF9jdXJyZW50X3BhZ2VgKSxcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLmV4cG9ydEN1cnJlbnRQYWdlKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZUV4cG9ydFNlbGVjdGVkUmVjb3Jkcykge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDogXCJleHBvcnRTZWxlY3RlZFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3RoaXMuZ2V0VHJhbnNsYXRlUHJlZml4KCl9ZXhwb3J0X3NlbGVjdGVkX3JlY29yZHNgKSxcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLmV4cG9ydFNlbGVjdGVkUmVjb3JkcygpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sb2FkQWxsUmVjb3Jkcykge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDogXCJleHBvcnRBbGxcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLmdldFRyYW5zbGF0ZVByZWZpeCgpfWV4cG9ydF9hbGxfcmVjb3Jkc2ApLFxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMuZXhwb3J0QWxsUmVjb3JkcygpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jdXN0b21BY3Rpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbU1lbnVzID0gdGhpcy5jdXN0b21BY3Rpb25zLm1hcCgocCwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgICAgaWQ6IFwiY3VzdG9tQWN0aW9uX1wiICsgaW5kZXgsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHAubGFiZWwsXG4gICAgICAgICAgICAgICAgY29tbWFuZDogcC5jb21tYW5kLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKC4uLmN1c3RvbU1lbnVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY3Rpb25zO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVDb21wb25lbnQoKSB7XG4gICAgICAgIGlmICghdGhpcy50YWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGFibGUgY29tcG9uZW50IG5vdCBkZWZpbmVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbHVtbnNUb0V4cG9ydCgpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnRhYmxlLmNvbHVtbnNdLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleHBvcnRDb2x1bW4gPSB7XG4gICAgICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgICAgIGhlYWRlcjogY29sdW1uLmhlYWRlcixcbiAgICAgICAgICAgICAgICBleHBvcnRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgc2VwYXJhdG9yOiBjb2x1bW4uc2VwYXJhdG9yID8/IFwiIC0gXCIsXG4gICAgICAgICAgICAgICAgZW51bVByZWZpeDogY29sdW1uLmVudW1QcmVmaXgsXG4gICAgICAgICAgICAgICAgY3VzdG9tRXhwb3J0OiBjb2x1bW4uY3VzdG9tRXhwb3J0LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGNvbHVtbi5leHBvcnRhYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGV4cG9ydENvbHVtbi5leHBvcnRhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4uYXR0cmlidXRlcyAmJiBjb2x1bW4uYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLmF0dHJpYnV0ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydENvbHVtbi5maWVsZCA9IGNvbHVtbi5hdHRyaWJ1dGVzWzBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydENvbHVtbi5maWVsZCA9IGNvbHVtbi5hdHRyaWJ1dGVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydENvbHVtbjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDdXJyZW50UGFnZVJvd3NUb0V4cG9ydChjb2x1bW5zOiBhbnlbXSkge1xuICAgICAgICBsZXQgdGFibGVEYXRhID0gdGhpcy50YWJsZS52YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMubG9hZEN1cnJlbnRQYWdlUmVjb3Jkcykge1xuICAgICAgICAgICAgdGFibGVEYXRhID0gdGhpcy5sb2FkQ3VycmVudFBhZ2VSZWNvcmRzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0YWJsZURhdGEgPSB0aGlzLm1hcEN1c3RvbUV4cG9ydChjb2x1bW5zLCB0YWJsZURhdGEpO1xuXG4gICAgICAgIHRhYmxlRGF0YSA9IHRoaXMubWFwTnVtYmVyRm9ybWF0T3B0aW9uc0V4cG9ydChjb2x1bW5zLCB0YWJsZURhdGEpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLm1hcENvbHVtbnNUcmFuc2xhdGlvbnMoY29sdW1ucywgdGFibGVEYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGVkUm93c1RvRXhwb3J0KGNvbHVtbnM6IGFueVtdKSB7XG4gICAgICAgIGxldCB0YWJsZURhdGEgPSB0aGlzLnRhYmxlLnNlbGVjdGlvbjtcbiAgICAgICAgaWYgKHRoaXMubG9hZFNlbGVjdGVkUmVjb3Jkcykge1xuICAgICAgICAgICAgdGFibGVEYXRhID0gdGhpcy5sb2FkU2VsZWN0ZWRSZWNvcmRzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0YWJsZURhdGEgPSB0aGlzLm1hcEN1c3RvbUV4cG9ydChjb2x1bW5zLCB0YWJsZURhdGEpO1xuXG4gICAgICAgIHRhYmxlRGF0YSA9IHRoaXMubWFwTnVtYmVyRm9ybWF0T3B0aW9uc0V4cG9ydChjb2x1bW5zLCB0YWJsZURhdGEpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLm1hcENvbHVtbnNUcmFuc2xhdGlvbnMoY29sdW1ucywgdGFibGVEYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByb3BlcnR5VmFsdWUob2JqOiBhbnksIHBhdGg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gcGF0aC5zcGxpdChcIi5cIikucmVkdWNlKChyZXN1bHQ6IGFueSwgcHJvcDogYW55KSA9PiAocmVzdWx0W3Byb3BdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZXN1bHRbcHJvcF0pLCBvYmopO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UHJvcGVydHlWYWx1ZShvYmo6IGFueSwgcGF0aDogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMucmVjdXJzaW9uU2V0VmFsdWUob2JqLCBwYXRoLnNwbGl0KFwiLlwiKSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVjdXJzaW9uU2V0VmFsdWUob2JqOiBhbnksIGtleXNMaXN0OiBzdHJpbmdbXSwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNMaXN0WzBdO1xuICAgICAgICBpZiAoa2V5c0xpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfVxuICAgICAgICBvYmpba2V5XSA9IHRoaXMucmVjdXJzaW9uU2V0VmFsdWUob2JqPy5ba2V5XSB8fCB7fSwga2V5c0xpc3Quc2xpY2UoMSksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWFwQ29sdW1uc1RyYW5zbGF0aW9ucyhjb2x1bW5zOiBhbnlbXSwgcm93czogYW55W10pIHtcbiAgICAgICAgY29uc3QgZW51bUNvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcigocCkgPT4gcC5lbnVtUHJlZml4KTtcbiAgICAgICAgaWYgKCFlbnVtQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByb3dzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFsuLi5yb3dzXS5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3Um93ID0geyAuLi5yb3cgfTtcbiAgICAgICAgICAgIGVudW1Db2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkcyA9ICFBcnJheS5pc0FycmF5KGNvbHVtbi5maWVsZCkgPyBbY29sdW1uLmZpZWxkXSA6IGNvbHVtbi5maWVsZDtcbiAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGROYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uRGF0YSA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShyb3csIGZpZWxkTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW5EYXRhID09PSBudWxsIHx8IGNvbHVtbkRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVZhbHVlKGNvbHVtbiwgY29sdW1uRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShuZXdSb3csIGZpZWxkTmFtZSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdSb3c7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIG1hcCB2YWx1ZXNcbiAgICAgKiBmcm9tIHRoZSBUYWJsZUNvbHVtbnNDb21wb25lbnQsIHdoaWNoIHVzZXMgdGhlIG51bWJlckZvcm1hdE9wdGlvbnNcbiAgICAgKiBmaWVsZCwgYWxvbmcgd2l0aCByb3dzIHRoYXQgaGF2ZSBhIGN1c3RvbSBudW1iZXJGb3JtYXRPcHRpb25zLFxuICAgICAqIHRvIGVuc3VyZSB0aGUgY29ycmVjdCB2YWx1ZXMgYXJlIGV4cG9ydGVkIGJ5IHRoZSBUYWJsZVBhZ2luZ0NvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIGNvcnJlY3RseSBtYXBwZWQgdGFibGVEYXRhLlxuICAgICAqL1xuICAgIHB1YmxpYyBtYXBOdW1iZXJGb3JtYXRPcHRpb25zRXhwb3J0KFxuICAgICAgICBjb2x1bW5zOiBQYXJ0aWFsPENvbHVtbj5bXSxcbiAgICAgICAgdGFibGVEYXRhOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBSb3dWYWx1ZUZvcm1hdE9wdGlvbiB8IG51bWJlciB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgICAgIH1bXVxuICAgICkge1xuICAgICAgICBjb25zdCBoYXNOdW1iZXJGb3JtYXRPcHRpb25zQ29sdW1ucyA9IGNvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4ubnVtYmVyRm9ybWF0T3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGhhc051bWJlckZvcm1hdE9wdGlvbnNSb3dzID0gdGFibGVEYXRhLnNvbWUoKHJvd0RhdGEpID0+XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhyb3dEYXRhKS5zb21lKChrZXkpID0+IChyb3dEYXRhW2tleV0gYXMgUm93VmFsdWVGb3JtYXRPcHRpb24pPy5vcHRpb25zPy5udW1iZXJGb3JtYXRPcHRpb25zKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghaGFzTnVtYmVyRm9ybWF0T3B0aW9uc0NvbHVtbnMgJiYgIWhhc051bWJlckZvcm1hdE9wdGlvbnNSb3dzKSByZXR1cm4gdGFibGVEYXRhO1xuXG4gICAgICAgIGlmIChoYXNOdW1iZXJGb3JtYXRPcHRpb25zQ29sdW1ucykge1xuICAgICAgICAgICAgdGFibGVEYXRhID0gdGFibGVEYXRhLm1hcCgocm93RGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnNXaXRoTnVtYmVyRm9ybWF0T3B0aW9ucyA9IGNvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5udW1iZXJGb3JtYXRPcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnNXaXRoTnVtYmVyRm9ybWF0T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gY29sdW1uLmF0dHJpYnV0ZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyRm9ybWF0T3B0aW9ucyA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY29sdW1uLm51bWJlckZvcm1hdE9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uLm51bWJlckZvcm1hdE9wdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY29sdW1uLm51bWJlckZvcm1hdE9wdGlvbnM7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHJvd0RhdGFbYXR0cmlidXRlIGFzIHN0cmluZ10pKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyb3dEYXRhW2F0dHJpYnV0ZSBhcyBzdHJpbmddIGFzIFJvd1ZhbHVlRm9ybWF0T3B0aW9uKS5vcHRpb25zPy5udW1iZXJGb3JtYXRPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcm93RGF0YVthdHRyaWJ1dGUgYXMgc3RyaW5nXSBhcyBzdHJpbmcgfCBudW1iZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZFZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJGb3JtYXRPcHRpb25zLnN0eWxlID09PSBcInBlcmNlbnRcIiA/IG5ldyBCaWdOdW1iZXIodmFsdWUpLnRpbWVzKDEwMCkgOiBuZXcgQmlnTnVtYmVyKHZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyRm9ybWF0ID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KHRoaXMubG9jYWxlU2VydmljZS5nZXRMb2NhbGVPcHRpb25zKCkubG9jYWxlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubnVtYmVyRm9ybWF0T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogXCJkZWNpbWFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlR3JvdXBpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kaW5nTW9kZTogXCJ0cnVuY1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBhbnkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhW2F0dHJpYnV0ZSBhcyBzdHJpbmddID0gbnVtYmVyRm9ybWF0LmZvcm1hdChtYXBwZWRWYWx1ZS50b051bWJlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiByb3dEYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzTnVtYmVyRm9ybWF0T3B0aW9uc1Jvd3MpIHtcbiAgICAgICAgICAgIHRhYmxlRGF0YSA9IHRhYmxlRGF0YS5tYXAoKHJvd0RhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzV2l0aE51bWJlckZvcm1hdE9wdGlvbnMgPSBPYmplY3Qua2V5cyhyb3dEYXRhKS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIChrZXkpID0+IChyb3dEYXRhW2tleV0gYXMgUm93VmFsdWVGb3JtYXRPcHRpb24pPy5vcHRpb25zPy5udW1iZXJGb3JtYXRPcHRpb25zXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXNXaXRoTnVtYmVyRm9ybWF0T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IChyb3dEYXRhW2tleV0gYXMgUm93VmFsdWVGb3JtYXRPcHRpb24pLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlckZvcm1hdE9wdGlvbnMgPSAocm93RGF0YVtrZXldIGFzIFJvd1ZhbHVlRm9ybWF0T3B0aW9uKS5vcHRpb25zLm51bWJlckZvcm1hdE9wdGlvbnM7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkVmFsdWUgPSBudW1iZXJGb3JtYXRPcHRpb25zLnN0eWxlID09PSBcInBlcmNlbnRcIiA/IG5ldyBCaWdOdW1iZXIodmFsdWUpLnRpbWVzKDEwMCkgOiBuZXcgQmlnTnVtYmVyKHZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBudW1iZXJGb3JtYXQgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQodGhpcy5sb2NhbGVTZXJ2aWNlLmdldExvY2FsZU9wdGlvbnMoKS5sb2NhbGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLm51bWJlckZvcm1hdE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogXCJkZWNpbWFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VHcm91cGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICByb3VuZGluZ01vZGU6IFwidHJ1bmNcIixcbiAgICAgICAgICAgICAgICAgICAgfSBhcyBhbnkpO1xuXG4gICAgICAgICAgICAgICAgICAgIChyb3dEYXRhW2tleV0gYXMgc3RyaW5nIHwgbnVtYmVyKSA9IG51bWJlckZvcm1hdC5mb3JtYXQobWFwcGVkVmFsdWUudG9OdW1iZXIoKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvd0RhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YWJsZURhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIG1hcEN1c3RvbUV4cG9ydChjb2x1bW5zOiBhbnlbXSwgcm93czogYW55W10pIHtcbiAgICAgICAgY29uc3QgY3VzdG9tQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChwKSA9PiBwLmN1c3RvbUV4cG9ydCk7XG4gICAgICAgIGlmICghY3VzdG9tQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByb3dzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFsuLi5yb3dzXS5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3Um93ID0geyAuLi5yb3cgfTtcbiAgICAgICAgICAgIGN1c3RvbUNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0gIUFycmF5LmlzQXJyYXkoY29sdW1uLmZpZWxkKSA/IFtjb2x1bW4uZmllbGRdIDogY29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5EYXRhID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKHJvdywgZmllbGROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbkRhdGEgPT09IG51bGwgfHwgY29sdW1uRGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb2x1bW4uY3VzdG9tRXhwb3J0KGNvbHVtbkRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUobmV3Um93LCBmaWVsZE5hbWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3Um93O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRyYW5zbGF0ZVZhbHVlKGNvbHVtbjogYW55LCBjb2x1bW5EYXRhOiBhbnkpIHtcbiAgICAgICAgLy8gRGVmYXVsdCB1c2FnZTogRU5VTV9WQUxVRSAtPiBkb21haW4uc2VydmljZS5lbnVtX3ZhbHVlXG4gICAgICAgIGNvbnN0IGVudW1WYWx1ZSA9IGNvbHVtbkRhdGEudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgdHJhbnNsYXRpb25LZXkgPSBjb2x1bW4uZW51bVByZWZpeCArIGVudW1WYWx1ZTtcbiAgICAgICAgbGV0IHRyYW5zbGF0ZWRWYWx1ZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQodHJhbnNsYXRpb25LZXkpO1xuXG4gICAgICAgIC8vIEN1c3RvbSB1c2FnZSAxOiBWOSAtPiBkb21haW4uc2VydmljZS52XzlcbiAgICAgICAgaWYgKHRyYW5zbGF0aW9uS2V5ID09PSB0cmFuc2xhdGVkVmFsdWUgJiYgZW51bVZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uS2V5ID0gYCR7Y29sdW1uLmVudW1QcmVmaXh9JHtlbnVtVmFsdWUuc3Vic3RyaW5nKDAsIDEpfV8ke2VudW1WYWx1ZS5zdWJzdHIoMSl9YDtcbiAgICAgICAgICAgIHRyYW5zbGF0ZWRWYWx1ZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQodHJhbnNsYXRpb25LZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3VzdG9tIHVzYWdlIDI6IEVudW1WYWx1ZSAtPiBkb21haW4uc2VydmljZS5lbnVtX3ZhbHVlXG4gICAgICAgIGlmICh0cmFuc2xhdGlvbktleSA9PT0gdHJhbnNsYXRlZFZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBlbnVtS2V5ID0gdGhpcy5jb252ZXJ0VG9TbmFrZUNhc2UoY29sdW1uRGF0YS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uS2V5ID0gYCR7Y29sdW1uLmVudW1QcmVmaXh9JHtlbnVtS2V5fWA7XG4gICAgICAgICAgICB0cmFuc2xhdGVkVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHRyYW5zbGF0aW9uS2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVkVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb252ZXJ0VG9TbmFrZUNhc2Uoc3RyOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oW0EtWl0pL2csIChtYXRjaCwgZ3JvdXApID0+IGBfJHtncm91cC50b0xvd2VyQ2FzZSgpfWApLnJlcGxhY2UoL15fLywgXCJcIik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHBvcnRGaWxlTmFtZSgpIHtcbiAgICAgICAgY29uc3QgbGFuZyA9IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nID8/IFwicHQtQlJcIjtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLmV4cG9ydEZpbGVOYW1lID8/IFwiZG93bmxvYWRcIjtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKGxhbmcpLnJlcGxhY2UoXCJfXCIsIFwiLVwiKTtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkVGltZSA9IGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKGxhbmcpLnJlcGxhY2UoXCIgXCIsIFwiLVwiKTtcblxuICAgICAgICByZXR1cm4gYCR7ZmlsZU5hbWV9XyR7Zm9ybWF0dGVkRGF0ZX1fJHtmb3JtYXR0ZWRUaW1lfWA7XG4gICAgfVxuXG4gICAgcHVibGljIGV4cG9ydEN1cnJlbnRQYWdlKCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlQ29tcG9uZW50KCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldENvbHVtbnNUb0V4cG9ydCgpO1xuICAgICAgICBjb25zdCBkYXRhVG9FeHBvcnQgPSB0aGlzLmdldEN1cnJlbnRQYWdlUm93c1RvRXhwb3J0KGNvbHVtbnMpO1xuICAgICAgICBFeHBvcnRVdGlscy5leHBvcnRDU1YoY29sdW1ucywgZGF0YVRvRXhwb3J0LCB1bmRlZmluZWQsIHRoaXMuZ2V0RXhwb3J0RmlsZU5hbWUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGV4cG9ydFNlbGVjdGVkUmVjb3JkcygpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUNvbXBvbmVudCgpO1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRDb2x1bW5zVG9FeHBvcnQoKTtcbiAgICAgICAgY29uc3QgZGF0YVRvRXhwb3J0ID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NUb0V4cG9ydChjb2x1bW5zKTtcbiAgICAgICAgRXhwb3J0VXRpbHMuZXhwb3J0Q1NWKGNvbHVtbnMsIGRhdGFUb0V4cG9ydCwgdW5kZWZpbmVkLCB0aGlzLmdldEV4cG9ydEZpbGVOYW1lKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBleHBvcnRBbGxSZWNvcmRzKCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlQ29tcG9uZW50KCk7XG5cbiAgICAgICAgbGV0IHNlcnZlckRhdGEgPSBhd2FpdCB0aGlzLmxvYWRBbGxSZWNvcmRzKCk7XG5cbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0Q29sdW1uc1RvRXhwb3J0KCk7XG5cbiAgICAgICAgc2VydmVyRGF0YSA9IHRoaXMubWFwQ3VzdG9tRXhwb3J0KGNvbHVtbnMsIHNlcnZlckRhdGEpO1xuXG4gICAgICAgIHNlcnZlckRhdGEgPSB0aGlzLm1hcE51bWJlckZvcm1hdE9wdGlvbnNFeHBvcnQoY29sdW1ucywgc2VydmVyRGF0YSk7XG5cbiAgICAgICAgY29uc3QgZGF0YVRvRXhwb3J0ID0gdGhpcy5tYXBDb2x1bW5zVHJhbnNsYXRpb25zKGNvbHVtbnMsIHNlcnZlckRhdGEpO1xuXG4gICAgICAgIEV4cG9ydFV0aWxzLmV4cG9ydENTVihjb2x1bW5zLCBkYXRhVG9FeHBvcnQsIHVuZGVmaW5lZCwgdGhpcy5nZXRFeHBvcnRGaWxlTmFtZSgpKTtcbiAgICB9XG59XG4iXX0=
|
|
313
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcGFnaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3RhYmxlL3RhYmxlLXBhZ2luZy90YWJsZS1wYWdpbmcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUt2RCxPQUFPLEVBQXNCLGdDQUFnQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTVELE9BQU8sU0FBUyxNQUFNLGNBQWMsQ0FBQztBQWNyQyxJQUFhLG9CQUFvQixHQUFqQyxNQUFhLG9CQUFvQjtJQStCN0IsWUFDcUIsU0FBMkIsRUFDM0IsYUFBNEIsRUFDYyxrQkFBc0M7UUFGaEYsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0Isa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDYyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBdkI5RixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBR2xCLGdDQUEyQixHQUFHLElBQUksQ0FBQztJQXFCdkMsQ0FBQztJQUVKLFdBQVcsQ0FBQyxPQUFzQjs7UUFDOUIsVUFBSSxPQUFPLENBQUMsWUFBWSwwQ0FBRSxZQUFZLEVBQUU7WUFDcEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLGVBQWUsRUFBRTtnQkFDeEYsS0FBSyxF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SSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUVwRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBRXRFLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUN0RixDQUFDO0tBQUE7Q0FDSixDQUFBOztZQXpWbUMsZ0JBQWdCO1lBQ1osYUFBYTs0Q0FDNUMsTUFBTSxTQUFDLGdDQUFnQzs7QUFoQzVDO0lBREMsS0FBSyxFQUFFOzBEQUNxQjtBQUc3QjtJQURDLEtBQUssRUFBRTs0REFDdUI7QUFHL0I7SUFEQyxLQUFLLEVBQUU7bURBQ2E7QUFHckI7SUFEQyxLQUFLLEVBQUU7d0RBQ2lCO0FBR3pCO0lBREMsS0FBSyxFQUFFO3lFQUNrQztBQUcxQztJQURDLEtBQUssRUFBRTsyREFDOEI7QUFHdEM7SUFEQyxLQUFLLEVBQUU7NERBQ3FDO0FBRzdDO0lBREMsS0FBSyxFQUFFO29FQUNvQztBQUc1QztJQURDLEtBQUssRUFBRTtpRUFDaUM7QUFHekM7SUFEQyxNQUFNLEVBQUU7OERBQ3VCO0FBN0J2QixvQkFBb0I7SUFMaEMsU0FBUyxDQUFDO1FBQ1AsOGJBQTRDO1FBRTVDLFFBQVEsRUFBRSxnQkFBZ0I7O0tBQzdCLENBQUM7SUFtQ08sV0FBQSxNQUFNLENBQUMsZ0NBQWdDLENBQUMsQ0FBQTtHQWxDcEMsb0JBQW9CLENBeVhoQztTQXpYWSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSBcInByaW1lbmcvdGFibGVcIjtcbmltcG9ydCB7IENvbHVtbiB9IGZyb20gXCIuLi90YWJsZS1jb2x1bW4vbW9kZWxzL2NvbHVtbi5pbnRlcmZhY2VcIjtcblxuaW1wb3J0IHsgSG9zdFByb2plY3RDb25maWdzLCBIb3N0UHJvamVjdENvbmZpZ3NJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuLi8uLi8uLi9hbmd1bGFyLWNvbXBvbmVudHMubW9kdWxlXCI7XG5pbXBvcnQgeyBkZWVwQ2xvbmUsIEV4cG9ydFV0aWxzLCBpc051bGxPclVuZGVmaW5lZCB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xuaW1wb3J0IHsgQ3VzdG9tQWN0aW9uIH0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBMb2NhbGVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2xvY2FsZS9sb2NhbGUuc2VydmljZVwiO1xuXG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gXCJiaWdudW1iZXIuanNcIjtcblxudHlwZSBSb3dWYWx1ZUZvcm1hdE9wdGlvbiA9IHtcbiAgICB2YWx1ZT86IG51bWJlcjtcbiAgICBvcHRpb25zPzoge1xuICAgICAgICBudW1iZXJGb3JtYXRPcHRpb25zPzogSW50bC5OdW1iZXJGb3JtYXRPcHRpb25zO1xuICAgIH07XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3RhYmxlLXBhZ2luZy5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0eWxlVXJsczogW1wiLi90YWJsZS1wYWdpbmcuY29tcG9uZW50LnNjc3NcIl0sXG4gICAgc2VsZWN0b3I6IFwicy10YWJsZS1wYWdpbmdcIixcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVQYWdpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRvdGFsUmVjb3JkcyE6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGV4cG9ydEZpbGVOYW1lPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGFibGUhOiBUYWJsZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGV4cG9ydGFibGUgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZW5hYmxlRXhwb3J0U2VsZWN0ZWRSZWNvcmRzID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGN1c3RvbUFjdGlvbnM/OiBDdXN0b21BY3Rpb25bXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvYWRBbGxSZWNvcmRzPzogKCkgPT4gUHJvbWlzZTxhbnlbXT47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsb2FkQ3VycmVudFBhZ2VSZWNvcmRzPzogKCkgPT4gYW55W107XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsb2FkU2VsZWN0ZWRSZWNvcmRzPzogKCkgPT4gYW55W107XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdG90YWxSZWNvcmRzVGV4dDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsZVNlcnZpY2U6IExvY2FsZVNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoSG9zdFByb2plY3RDb25maWdzSW5qZWN0aW9uVG9rZW4pIHByaXZhdGUgcmVhZG9ubHkgaG9zdFByb2plY3RDb25maWdzOiBIb3N0UHJvamVjdENvbmZpZ3NcbiAgICApIHt9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnRvdGFsUmVjb3Jkcz8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnRvdGFsUmVjb3Jkc1RleHQgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3RoaXMuZ2V0VHJhbnNsYXRlUHJlZml4KCl9dG90YWxfcmVjb3Jkc2AsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogY2hhbmdlcy50b3RhbFJlY29yZHMuY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRyYW5zbGF0ZVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuaG9zdFByb2plY3RDb25maWdzLmRvbWFpbn0uJHt0aGlzLmhvc3RQcm9qZWN0Q29uZmlncy5zZXJ2aWNlfS5gO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUb29sdGlwVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7dGhpcy5nZXRUcmFuc2xhdGVQcmVmaXgoKX1leHBvcnRfdG9fY3N2YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFjdGlvbnMoKTogTWVudUl0ZW1bXSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbnM6IE1lbnVJdGVtW10gPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6IFwiZXhwb3J0Q3VycmVudFBhZ2VcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLmdldFRyYW5zbGF0ZVByZWZpeCgpfWV4cG9ydF9jdXJyZW50X3BhZ2VgKSxcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLmV4cG9ydEN1cnJlbnRQYWdlKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZUV4cG9ydFNlbGVjdGVkUmVjb3Jkcykge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDogXCJleHBvcnRTZWxlY3RlZFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3RoaXMuZ2V0VHJhbnNsYXRlUHJlZml4KCl9ZXhwb3J0X3NlbGVjdGVkX3JlY29yZHNgKSxcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLmV4cG9ydFNlbGVjdGVkUmVjb3JkcygpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sb2FkQWxsUmVjb3Jkcykge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDogXCJleHBvcnRBbGxcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLmdldFRyYW5zbGF0ZVByZWZpeCgpfWV4cG9ydF9hbGxfcmVjb3Jkc2ApLFxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMuZXhwb3J0QWxsUmVjb3JkcygpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jdXN0b21BY3Rpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbU1lbnVzID0gdGhpcy5jdXN0b21BY3Rpb25zLm1hcCgocCwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgICAgaWQ6IFwiY3VzdG9tQWN0aW9uX1wiICsgaW5kZXgsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHAubGFiZWwsXG4gICAgICAgICAgICAgICAgY29tbWFuZDogcC5jb21tYW5kLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKC4uLmN1c3RvbU1lbnVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY3Rpb25zO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVDb21wb25lbnQoKSB7XG4gICAgICAgIGlmICghdGhpcy50YWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGFibGUgY29tcG9uZW50IG5vdCBkZWZpbmVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbHVtbnNUb0V4cG9ydCgpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnRhYmxlLmNvbHVtbnNdLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleHBvcnRDb2x1bW4gPSB7XG4gICAgICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgICAgIGhlYWRlcjogY29sdW1uLmhlYWRlcixcbiAgICAgICAgICAgICAgICBleHBvcnRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgc2VwYXJhdG9yOiBjb2x1bW4uc2VwYXJhdG9yID8/IFwiIC0gXCIsXG4gICAgICAgICAgICAgICAgZW51bVByZWZpeDogY29sdW1uLmVudW1QcmVmaXgsXG4gICAgICAgICAgICAgICAgY3VzdG9tRXhwb3J0OiBjb2x1bW4uY3VzdG9tRXhwb3J0LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGNvbHVtbi5leHBvcnRhYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGV4cG9ydENvbHVtbi5leHBvcnRhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4uYXR0cmlidXRlcyAmJiBjb2x1bW4uYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLmF0dHJpYnV0ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydENvbHVtbi5maWVsZCA9IGNvbHVtbi5hdHRyaWJ1dGVzWzBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydENvbHVtbi5maWVsZCA9IGNvbHVtbi5hdHRyaWJ1dGVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydENvbHVtbjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDdXJyZW50UGFnZVJvd3NUb0V4cG9ydChjb2x1bW5zOiBhbnlbXSkge1xuICAgICAgICBsZXQgdGFibGVEYXRhID0gZGVlcENsb25lKHRoaXMudGFibGUudmFsdWUpO1xuXG4gICAgICAgIGlmICh0aGlzLmxvYWRDdXJyZW50UGFnZVJlY29yZHMpIHtcbiAgICAgICAgICAgIHRhYmxlRGF0YSA9IHRoaXMubG9hZEN1cnJlbnRQYWdlUmVjb3JkcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGVEYXRhID0gdGhpcy5tYXBDdXN0b21FeHBvcnQoY29sdW1ucywgdGFibGVEYXRhKTtcblxuICAgICAgICB0YWJsZURhdGEgPSB0aGlzLm1hcE51bWJlckZvcm1hdE9wdGlvbnNFeHBvcnQoY29sdW1ucywgdGFibGVEYXRhKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5tYXBDb2x1bW5zVHJhbnNsYXRpb25zKGNvbHVtbnMsIHRhYmxlRGF0YSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RlZFJvd3NUb0V4cG9ydChjb2x1bW5zOiBhbnlbXSkge1xuICAgICAgICBsZXQgdGFibGVEYXRhID0gZGVlcENsb25lKHRoaXMudGFibGUuc2VsZWN0aW9uKTtcblxuICAgICAgICBpZiAodGhpcy5sb2FkU2VsZWN0ZWRSZWNvcmRzKSB7XG4gICAgICAgICAgICB0YWJsZURhdGEgPSB0aGlzLmxvYWRTZWxlY3RlZFJlY29yZHMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhYmxlRGF0YSA9IHRoaXMubWFwQ3VzdG9tRXhwb3J0KGNvbHVtbnMsIHRhYmxlRGF0YSk7XG5cbiAgICAgICAgdGFibGVEYXRhID0gdGhpcy5tYXBOdW1iZXJGb3JtYXRPcHRpb25zRXhwb3J0KGNvbHVtbnMsIHRhYmxlRGF0YSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubWFwQ29sdW1uc1RyYW5zbGF0aW9ucyhjb2x1bW5zLCB0YWJsZURhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHJvcGVydHlWYWx1ZShvYmo6IGFueSwgcGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBwYXRoLnNwbGl0KFwiLlwiKS5yZWR1Y2UoKHJlc3VsdDogYW55LCBwcm9wOiBhbnkpID0+IChyZXN1bHRbcHJvcF0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlc3VsdFtwcm9wXSksIG9iaik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRQcm9wZXJ0eVZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5yZWN1cnNpb25TZXRWYWx1ZShvYmosIHBhdGguc3BsaXQoXCIuXCIpLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWN1cnNpb25TZXRWYWx1ZShvYmo6IGFueSwga2V5c0xpc3Q6IHN0cmluZ1tdLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c0xpc3RbMF07XG4gICAgICAgIGlmIChrZXlzTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICB9XG4gICAgICAgIG9ialtrZXldID0gdGhpcy5yZWN1cnNpb25TZXRWYWx1ZShvYmo/LltrZXldIHx8IHt9LCBrZXlzTGlzdC5zbGljZSgxKSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXBDb2x1bW5zVHJhbnNsYXRpb25zKGNvbHVtbnM6IGFueVtdLCByb3dzOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBlbnVtQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChwKSA9PiBwLmVudW1QcmVmaXgpO1xuICAgICAgICBpZiAoIWVudW1Db2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvd3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gWy4uLnJvd3NdLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdSb3cgPSB7IC4uLnJvdyB9O1xuICAgICAgICAgICAgZW51bUNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0gIUFycmF5LmlzQXJyYXkoY29sdW1uLmZpZWxkKSA/IFtjb2x1bW4uZmllbGRdIDogY29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5EYXRhID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKHJvdywgZmllbGROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbkRhdGEgPT09IG51bGwgfHwgY29sdW1uRGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMudHJhbnNsYXRlVmFsdWUoY29sdW1uLCBjb2x1bW5EYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKG5ld1JvdywgZmllbGROYW1lLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ld1JvdztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8gbWFwIHZhbHVlc1xuICAgICAqIGZyb20gdGhlIFRhYmxlQ29sdW1uc0NvbXBvbmVudCwgd2hpY2ggdXNlcyB0aGUgbnVtYmVyRm9ybWF0T3B0aW9uc1xuICAgICAqIGZpZWxkLCBhbG9uZyB3aXRoIHJvd3MgdGhhdCBoYXZlIGEgY3VzdG9tIG51bWJlckZvcm1hdE9wdGlvbnMsXG4gICAgICogdG8gZW5zdXJlIHRoZSBjb3JyZWN0IHZhbHVlcyBhcmUgZXhwb3J0ZWQgYnkgdGhlIFRhYmxlUGFnaW5nQ29tcG9uZW50LlxuICAgICAqXG4gICAgICogQHJldHVybnMgUmV0dXJucyB0aGUgY29ycmVjdGx5IG1hcHBlZCB0YWJsZURhdGEuXG4gICAgICovXG4gICAgcHVibGljIG1hcE51bWJlckZvcm1hdE9wdGlvbnNFeHBvcnQoXG4gICAgICAgIGNvbHVtbnM6IFBhcnRpYWw8Q29sdW1uPltdLFxuICAgICAgICB0YWJsZURhdGE6IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IFJvd1ZhbHVlRm9ybWF0T3B0aW9uIHwgbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVtdXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGhhc051bWJlckZvcm1hdE9wdGlvbnNDb2x1bW5zID0gY29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5udW1iZXJGb3JtYXRPcHRpb25zKTtcbiAgICAgICAgY29uc3QgaGFzTnVtYmVyRm9ybWF0T3B0aW9uc1Jvd3MgPSB0YWJsZURhdGEuc29tZSgocm93RGF0YSkgPT5cbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHJvd0RhdGEpLnNvbWUoKGtleSkgPT4gKHJvd0RhdGFba2V5XSBhcyBSb3dWYWx1ZUZvcm1hdE9wdGlvbik/Lm9wdGlvbnM/Lm51bWJlckZvcm1hdE9wdGlvbnMpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFoYXNOdW1iZXJGb3JtYXRPcHRpb25zQ29sdW1ucyAmJiAhaGFzTnVtYmVyRm9ybWF0T3B0aW9uc1Jvd3MpIHJldHVybiB0YWJsZURhdGE7XG5cbiAgICAgICAgaWYgKGhhc051bWJlckZvcm1hdE9wdGlvbnNDb2x1bW5zKSB7XG4gICAgICAgICAgICB0YWJsZURhdGEgPSB0YWJsZURhdGEubWFwKChyb3dEYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uc1dpdGhOdW1iZXJGb3JtYXRPcHRpb25zID0gY29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uLm51bWJlckZvcm1hdE9wdGlvbnMpO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1uc1dpdGhOdW1iZXJGb3JtYXRPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBjb2x1bW4uYXR0cmlidXRlcztcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBudW1iZXJGb3JtYXRPcHRpb25zID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBjb2x1bW4ubnVtYmVyRm9ybWF0T3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4ubnVtYmVyRm9ybWF0T3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93RGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4ubnVtYmVyRm9ybWF0T3B0aW9ucztcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQocm93RGF0YVthdHRyaWJ1dGUgYXMgc3RyaW5nXSkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJvd0RhdGFbYXR0cmlidXRlIGFzIHN0cmluZ10gYXMgUm93VmFsdWVGb3JtYXRPcHRpb24pLm9wdGlvbnM/Lm51bWJlckZvcm1hdE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByb3dEYXRhW2F0dHJpYnV0ZSBhcyBzdHJpbmddIGFzIHN0cmluZyB8IG51bWJlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkVmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlckZvcm1hdE9wdGlvbnMuc3R5bGUgPT09IFwicGVyY2VudFwiID8gbmV3IEJpZ051bWJlcih2YWx1ZSkudGltZXMoMTAwKSA6IG5ldyBCaWdOdW1iZXIodmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBudW1iZXJGb3JtYXQgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQodGhpcy5sb2NhbGVTZXJ2aWNlLmdldExvY2FsZU9wdGlvbnMoKS5sb2NhbGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5udW1iZXJGb3JtYXRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiBcImRlY2ltYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VHcm91cGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRpbmdNb2RlOiBcInRydW5jXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGFzIGFueSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbYXR0cmlidXRlIGFzIHN0cmluZ10gPSBudW1iZXJGb3JtYXQuZm9ybWF0KG1hcHBlZFZhbHVlLnRvTnVtYmVyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvd0RhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNOdW1iZXJGb3JtYXRPcHRpb25zUm93cykge1xuICAgICAgICAgICAgdGFibGVEYXRhID0gdGFibGVEYXRhLm1hcCgocm93RGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXNXaXRoTnVtYmVyRm9ybWF0T3B0aW9ucyA9IE9iamVjdC5rZXlzKHJvd0RhdGEpLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKGtleSkgPT4gKHJvd0RhdGFba2V5XSBhcyBSb3dWYWx1ZUZvcm1hdE9wdGlvbik/Lm9wdGlvbnM/Lm51bWJlckZvcm1hdE9wdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5c1dpdGhOdW1iZXJGb3JtYXRPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKHJvd0RhdGFba2V5XSBhcyBSb3dWYWx1ZUZvcm1hdE9wdGlvbikudmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyRm9ybWF0T3B0aW9ucyA9IChyb3dEYXRhW2tleV0gYXMgUm93VmFsdWVGb3JtYXRPcHRpb24pLm9wdGlvbnMubnVtYmVyRm9ybWF0T3B0aW9ucztcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWRWYWx1ZSA9IG51bWJlckZvcm1hdE9wdGlvbnMuc3R5bGUgPT09IFwicGVyY2VudFwiID8gbmV3IEJpZ051bWJlcih2YWx1ZSkudGltZXMoMTAwKSA6IG5ldyBCaWdOdW1iZXIodmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlckZvcm1hdCA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmxvY2FsZVNlcnZpY2UuZ2V0TG9jYWxlT3B0aW9ucygpLmxvY2FsZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ubnVtYmVyRm9ybWF0T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiBcImRlY2ltYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUdyb3VwaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kaW5nTW9kZTogXCJ0cnVuY1wiLFxuICAgICAgICAgICAgICAgICAgICB9IGFzIGFueSk7XG5cbiAgICAgICAgICAgICAgICAgICAgKHJvd0RhdGFba2V5XSBhcyBzdHJpbmcgfCBudW1iZXIpID0gbnVtYmVyRm9ybWF0LmZvcm1hdChtYXBwZWRWYWx1ZS50b051bWJlcigpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcm93RGF0YTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhYmxlRGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWFwQ3VzdG9tRXhwb3J0KGNvbHVtbnM6IGFueVtdLCByb3dzOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBjdXN0b21Db2x1bW5zID0gY29sdW1ucy5maWx0ZXIoKHApID0+IHAuY3VzdG9tRXhwb3J0KTtcbiAgICAgICAgaWYgKCFjdXN0b21Db2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvd3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gWy4uLnJvd3NdLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdSb3cgPSB7IC4uLnJvdyB9O1xuICAgICAgICAgICAgY3VzdG9tQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHMgPSAhQXJyYXkuaXNBcnJheShjb2x1bW4uZmllbGQpID8gW2NvbHVtbi5maWVsZF0gOiBjb2x1bW4uZmllbGQ7XG4gICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbkRhdGEgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUocm93LCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uRGF0YSA9PT0gbnVsbCB8fCBjb2x1bW5EYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGNvbHVtbi5jdXN0b21FeHBvcnQoY29sdW1uRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShuZXdSb3csIGZpZWxkTmFtZSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdSb3c7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNsYXRlVmFsdWUoY29sdW1uOiBhbnksIGNvbHVtbkRhdGE6IGFueSkge1xuICAgICAgICAvLyBEZWZhdWx0IHVzYWdlOiBFTlVNX1ZBTFVFIC0+IGRvbWFpbi5zZXJ2aWNlLmVudW1fdmFsdWVcbiAgICAgICAgY29uc3QgZW51bVZhbHVlID0gY29sdW1uRGF0YS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCB0cmFuc2xhdGlvbktleSA9IGNvbHVtbi5lbnVtUHJlZml4ICsgZW51bVZhbHVlO1xuICAgICAgICBsZXQgdHJhbnNsYXRlZFZhbHVlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0cmFuc2xhdGlvbktleSk7XG5cbiAgICAgICAgLy8gQ3VzdG9tIHVzYWdlIDE6IFY5IC0+IGRvbWFpbi5zZXJ2aWNlLnZfOVxuICAgICAgICBpZiAodHJhbnNsYXRpb25LZXkgPT09IHRyYW5zbGF0ZWRWYWx1ZSAmJiBlbnVtVmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdHJhbnNsYXRpb25LZXkgPSBgJHtjb2x1bW4uZW51bVByZWZpeH0ke2VudW1WYWx1ZS5zdWJzdHJpbmcoMCwgMSl9XyR7ZW51bVZhbHVlLnN1YnN0cigxKX1gO1xuICAgICAgICAgICAgdHJhbnNsYXRlZFZhbHVlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0cmFuc2xhdGlvbktleSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDdXN0b20gdXNhZ2UgMjogRW51bVZhbHVlIC0+IGRvbWFpbi5zZXJ2aWNlLmVudW1fdmFsdWVcbiAgICAgICAgaWYgKHRyYW5zbGF0aW9uS2V5ID09PSB0cmFuc2xhdGVkVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudW1LZXkgPSB0aGlzLmNvbnZlcnRUb1NuYWtlQ2FzZShjb2x1bW5EYXRhLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgdHJhbnNsYXRpb25LZXkgPSBgJHtjb2x1bW4uZW51bVByZWZpeH0ke2VudW1LZXl9YDtcbiAgICAgICAgICAgIHRyYW5zbGF0ZWRWYWx1ZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQodHJhbnNsYXRpb25LZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWRWYWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnZlcnRUb1NuYWtlQ2FzZShzdHI6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbQS1aXSkvZywgKG1hdGNoLCBncm91cCkgPT4gYF8ke2dyb3VwLnRvTG93ZXJDYXNlKCl9YCkucmVwbGFjZSgvXl8vLCBcIlwiKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV4cG9ydEZpbGVOYW1lKCkge1xuICAgICAgICBjb25zdCBsYW5nID0gdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcgPz8gXCJwdC1CUlwiO1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcblxuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IHRoaXMuZXhwb3J0RmlsZU5hbWUgPz8gXCJkb3dubG9hZFwiO1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcobGFuZykucmVwbGFjZShcIl9cIiwgXCItXCIpO1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRUaW1lID0gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcobGFuZykucmVwbGFjZShcIiBcIiwgXCItXCIpO1xuXG4gICAgICAgIHJldHVybiBgJHtmaWxlTmFtZX1fJHtmb3JtYXR0ZWREYXRlfV8ke2Zvcm1hdHRlZFRpbWV9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhwb3J0Q3VycmVudFBhZ2UoKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVDb21wb25lbnQoKTtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0Q29sdW1uc1RvRXhwb3J0KCk7XG4gICAgICAgIGNvbnN0IGRhdGFUb0V4cG9ydCA9IHRoaXMuZ2V0Q3VycmVudFBhZ2VSb3dzVG9FeHBvcnQoY29sdW1ucyk7XG4gICAgICAgIEV4cG9ydFV0aWxzLmV4cG9ydENTVihjb2x1bW5zLCBkYXRhVG9FeHBvcnQsIHVuZGVmaW5lZCwgdGhpcy5nZXRFeHBvcnRGaWxlTmFtZSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhwb3J0U2VsZWN0ZWRSZWNvcmRzKCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlQ29tcG9uZW50KCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldENvbHVtbnNUb0V4cG9ydCgpO1xuICAgICAgICBjb25zdCBkYXRhVG9FeHBvcnQgPSB0aGlzLmdldFNlbGVjdGVkUm93c1RvRXhwb3J0KGNvbHVtbnMpO1xuICAgICAgICBFeHBvcnRVdGlscy5leHBvcnRDU1YoY29sdW1ucywgZGF0YVRvRXhwb3J0LCB1bmRlZmluZWQsIHRoaXMuZ2V0RXhwb3J0RmlsZU5hbWUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGV4cG9ydEFsbFJlY29yZHMoKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVDb21wb25lbnQoKTtcblxuICAgICAgICBsZXQgc2VydmVyRGF0YSA9IGF3YWl0IHRoaXMubG9hZEFsbFJlY29yZHMoKTtcblxuICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRDb2x1bW5zVG9FeHBvcnQoKTtcblxuICAgICAgICBzZXJ2ZXJEYXRhID0gdGhpcy5tYXBDdXN0b21FeHBvcnQoY29sdW1ucywgc2VydmVyRGF0YSk7XG5cbiAgICAgICAgc2VydmVyRGF0YSA9IHRoaXMubWFwTnVtYmVyRm9ybWF0T3B0aW9uc0V4cG9ydChjb2x1bW5zLCBzZXJ2ZXJEYXRhKTtcblxuICAgICAgICBjb25zdCBkYXRhVG9FeHBvcnQgPSB0aGlzLm1hcENvbHVtbnNUcmFuc2xhdGlvbnMoY29sdW1ucywgc2VydmVyRGF0YSk7XG5cbiAgICAgICAgRXhwb3J0VXRpbHMuZXhwb3J0Q1NWKGNvbHVtbnMsIGRhdGFUb0V4cG9ydCwgdW5kZWZpbmVkLCB0aGlzLmdldEV4cG9ydEZpbGVOYW1lKCkpO1xuICAgIH1cbn1cbiJdfQ==
|