mmhglobal-dynamicform 2.0.0-beta.31 → 2.0.0-beta.33
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/README.md +8 -0
- package/esm2020/lib/embed-components/input-field-addons/input-field-addons.component.mjs +19 -9
- package/esm2020/lib/services/main.service.mjs +43 -47
- package/esm2020/lib/uiappmenucontent/uiappmenucontent.component.mjs +3 -3
- package/esm2020/lib/uicontent/uicontent.component.mjs +10 -4
- package/esm2020/lib/uiheader/uiheader.component.mjs +1 -1
- package/esm2020/lib/uimenucontent/uimenucontent.component.mjs +1 -1
- package/esm2020/lib/uivalidationmessage/uivalidationmessage.component.mjs +1 -1
- package/esm2020/lib/zbuttons/zbuttons.component.mjs +1 -1
- package/esm2020/lib/zcard/zcard.component.mjs +1 -1
- package/esm2020/lib/zchart/zchart.component.mjs +1 -1
- package/esm2020/lib/zcheckbox/zcheckbox.component.mjs +1 -1
- package/esm2020/lib/zchip/zchip.component.mjs +1 -1
- package/esm2020/lib/zdaterange/zdaterange.component.mjs +1 -1
- package/esm2020/lib/zdatetime/zdatetime.component.mjs +1 -1
- package/esm2020/lib/zgrid/container/zgrid-container.component.mjs +1 -1
- package/esm2020/lib/zgrid/date-range-cell-filter.component.mjs +1 -1
- package/esm2020/lib/zgrid/zgrid.component.mjs +3 -3
- package/esm2020/lib/zkcard/zkcard.component.mjs +1 -1
- package/esm2020/lib/zmfb/zmfb.component.mjs +1 -1
- package/esm2020/lib/znumeric/znumeric.component.mjs +1 -1
- package/esm2020/lib/zpostselectinput/zpostselectinput.component.mjs +1 -1
- package/esm2020/lib/zprogressbar/zprogressbar.component.mjs +1 -1
- package/esm2020/lib/zquerybuilder/zquerybuilder.component.mjs +1 -1
- package/esm2020/lib/zscheduler/zscheduler.component.mjs +1 -1
- package/esm2020/lib/zscheduler/zscheduler.toolbar.component.mjs +1 -1
- package/esm2020/lib/zselectmultiple/zselectmultiple.component.mjs +1 -1
- package/esm2020/lib/ztab/ztab.component.mjs +1 -1
- package/esm2020/lib/ztext/ztext.component.mjs +1 -1
- package/esm2020/lib/ztextarea/ztextarea.component.mjs +1 -1
- package/esm2020/lib/ztexteditor/ztexteditor.component.mjs +1 -1
- package/esm2020/lib/ztree/ztree.component.mjs +1 -1
- package/esm2020/lib/ztreelist/ztreelist.component.mjs +2 -2
- package/esm2020/lib/zupload/zupload.component.mjs +1 -1
- package/esm2020/lib/zworkflowbuttons/zworkflowbuttons.component.mjs +1 -1
- package/fesm2015/mmhglobal-dynamicform.mjs +98 -87
- package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
- package/fesm2020/mmhglobal-dynamicform.mjs +98 -87
- package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
- package/lib/embed-components/input-field-addons/input-field-addons.component.d.ts +3 -2
- package/lib/uicontent/uicontent.component.d.ts +3 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 11.2.13.
|
|
4
4
|
|
|
5
5
|
## Changelog
|
|
6
|
+
`2.33beta`<br/>
|
|
7
|
+
[input-field-addons] - Translate tooltip and addons for input components.<br/>
|
|
8
|
+
[mainservice] - default isCloneNew to false when create/update model.<br/>
|
|
9
|
+
|
|
10
|
+
`2.32beta`<br/>
|
|
11
|
+
[mainservice] - newmodel for formfield to reset form and clear zmodel.<br/>
|
|
12
|
+
[uicontent] - remove currentRouteParam when clicked.
|
|
13
|
+
|
|
6
14
|
`2.31beta`<br/>
|
|
7
15
|
[mainservice] - show alert when update model for form which is not dirty.<br/>
|
|
8
16
|
[zgrid] - Fix tooltip contains irrelevant characters.<br/>
|
|
@@ -3,12 +3,16 @@ import { ZComponentHelper } from 'mmhglobal-zcore';
|
|
|
3
3
|
import { InputFieldBase } from "../../components/inputfieldbase.component";
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "../../services/zcomponent.service";
|
|
6
|
-
import * as i2 from "
|
|
7
|
-
import * as i3 from "@
|
|
8
|
-
import * as i4 from "@angular
|
|
9
|
-
import * as i5 from "@
|
|
6
|
+
import * as i2 from "mmhglobal-zcore";
|
|
7
|
+
import * as i3 from "@fortawesome/angular-fontawesome";
|
|
8
|
+
import * as i4 from "@ionic/angular";
|
|
9
|
+
import * as i5 from "@angular/common";
|
|
10
|
+
import * as i6 from "@progress/kendo-angular-tooltip";
|
|
10
11
|
export class InputFieldAddOnsComponent extends InputFieldBase {
|
|
11
|
-
constructor(compService) {
|
|
12
|
+
constructor(compService, translationService) {
|
|
13
|
+
super(compService);
|
|
14
|
+
this.translationService = translationService;
|
|
15
|
+
}
|
|
12
16
|
// public iconList: ClickableIcons[];
|
|
13
17
|
// public buttonList;
|
|
14
18
|
ngOnInit() {
|
|
@@ -17,6 +21,7 @@ export class InputFieldAddOnsComponent extends InputFieldBase {
|
|
|
17
21
|
if (this.addOn) {
|
|
18
22
|
this.setupIconList();
|
|
19
23
|
this.setupButtonList();
|
|
24
|
+
this.setupTextList();
|
|
20
25
|
}
|
|
21
26
|
}
|
|
22
27
|
setupIconList() {
|
|
@@ -29,9 +34,11 @@ export class InputFieldAddOnsComponent extends InputFieldBase {
|
|
|
29
34
|
else if (i.ToolTipText.indexOf("group.") !== -1) {
|
|
30
35
|
i.ToolTipText = ZComponentHelper.getGroupEvalValue.call(this, i.ToolTipText);
|
|
31
36
|
}
|
|
37
|
+
this.translationService.$translateText(i.ToolTipText, { elementName: this.group.fieldName, group: this.group }).subscribe();
|
|
32
38
|
// Default position top. right | bottom | top | left
|
|
33
39
|
i.Position = i.Position || "top";
|
|
34
40
|
});
|
|
41
|
+
this.translationService.$translateItemList(this.addOn.IconList, "ToolTipText", { elementName: this.group.fieldName, group: this.group }).subscribe();
|
|
35
42
|
}
|
|
36
43
|
}
|
|
37
44
|
setupButtonList() {
|
|
@@ -40,6 +47,7 @@ export class InputFieldAddOnsComponent extends InputFieldBase {
|
|
|
40
47
|
this.addOn.ButtonList.forEach(button => {
|
|
41
48
|
button.Visible = ZComponentHelper.isNullUndefinedEmpty(button.Visible) ? 'true' : button.Visible;
|
|
42
49
|
});
|
|
50
|
+
this.translationService.$translateItemList(this.addOn.ButtonList, "Text", { elementName: this.group.fieldName, group: this.group }).subscribe();
|
|
43
51
|
}
|
|
44
52
|
}
|
|
45
53
|
setupTextList() {
|
|
@@ -55,15 +63,17 @@ export class InputFieldAddOnsComponent extends InputFieldBase {
|
|
|
55
63
|
// Default position top. right | bottom | top | left
|
|
56
64
|
i.Position = i.Position || "top";
|
|
57
65
|
});
|
|
66
|
+
this.translationService.$translateItemList(this.addOn.TextList, "Text", { elementName: this.group.fieldName, group: this.group }).subscribe();
|
|
67
|
+
this.translationService.$translateItemList(this.addOn.TextList, "ToolTipText", { elementName: this.group.fieldName, group: this.group }).subscribe();
|
|
58
68
|
}
|
|
59
69
|
}
|
|
60
70
|
}
|
|
61
|
-
InputFieldAddOnsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: InputFieldAddOnsComponent, deps: [{ token: i1.ZComponentService }], target: i0.ɵɵFactoryTarget.Component });
|
|
62
|
-
InputFieldAddOnsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: InputFieldAddOnsComponent, selector: "app-input-field-addons", inputs: { position: "position" }, usesInheritance: true, ngImport: i0, template: "<div [class]=\"'addons-container ' + position\" *ngIf=\"this.addOn\">\r\n <div class=\"addons-icon\" *ngIf=\"addOn.IconList\">\r\n <div *ngFor=\"let item of addOn.IconList\">\r\n <div kendoTooltip class=\"icon-button\" showOn=\"hover\" [tooltipWidth]=\"item.Width\" [position]=\"item.Position\">\r\n <span *ngIf=\"!!item \" (click)=\"onIconClick(item.Click)\" [title]=\"item.ToolTipText\" [style]=\"item.Style\">\r\n <fa-icon [icon]=\"item.Icon\">\r\n </fa-icon>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"addons-text\" *ngIf=\"addOn.TextList\">\r\n <div *ngFor=\"let item of addOn.TextList\">\r\n <div kendoTooltip class=\"icon-button\" showOn=\"hover\" [tooltipWidth]=\"item.Width\" [position]=\"item.Position\">\r\n <span *ngIf=\"!!item \" (click)=\"onIconClick(item.Click)\" [title]=\"item.ToolTipText\" [style]=\"item.Style\">\r\n {{item.Text}}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"addons-buttons\" *ngIf=\"addOn.ButtonList\">\r\n <ion-button *ngFor=\"let button of addOn.ButtonList; let i = button\" [fill]=\"button.fill || 'outline'\"\r\n [color]=\"button.color || 'dark'\" [size]=\"button.size || 'small'\" strong=\"false\"\r\n (click)=\"onIconClick(button.Click)\" [hidden]=\"!button.Visible\" [disabled]=\"group.isTriggered || button.Disabled\"\r\n [style]=\"button.Style\">\r\n <fa-icon *ngIf=\"button.Icon\" [icon]=\"getFontAwesome(button.Icon)\"\r\n [style.padding-right]=\"button.Text ? '5px' : '0px'\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">{{ button.Text }}</span>\r\n </ion-button>\r\n </div>\r\n</div>\r\n", styles: [".addons-container{display:flex}.addons-container .addons-icon{display:flex;flex-direction:row}.addons-container .addons-icon fa-icon{padding:4px 6px;font-size:calc(var(--content-font-size) - 2px)}.addons-container .addons-buttons>ion-button{margin:0 0 0 5px;height:20px;font-size:calc(var(--content-font-size) - 2px)}.addons-container .addons-text{padding-left:6px;padding-top:3px;font-size:calc(var(--content-font-size) - 2px)}.addons-container.top .addons-buttons>ion-button{top:-3px;position:relative}.addons-container.left .addons-buttons>ion-button{margin:0 5px 0 0}\n"], components: [{ type:
|
|
71
|
+
InputFieldAddOnsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: InputFieldAddOnsComponent, deps: [{ token: i1.ZComponentService }, { token: i2.TranslationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
72
|
+
InputFieldAddOnsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: InputFieldAddOnsComponent, selector: "app-input-field-addons", inputs: { position: "position" }, usesInheritance: true, ngImport: i0, template: "<div [class]=\"'addons-container ' + position\" *ngIf=\"this.addOn\">\r\n <div class=\"addons-icon\" *ngIf=\"addOn.IconList\">\r\n <div *ngFor=\"let item of addOn.IconList\">\r\n <div kendoTooltip class=\"icon-button\" showOn=\"hover\" [tooltipWidth]=\"item.Width\" [position]=\"item.Position\">\r\n <span *ngIf=\"!!item \" (click)=\"onIconClick(item.Click)\" [title]=\"item.ToolTipText\" [style]=\"item.Style\">\r\n <fa-icon [icon]=\"item.Icon\">\r\n </fa-icon>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"addons-text\" *ngIf=\"addOn.TextList\">\r\n <div *ngFor=\"let item of addOn.TextList\">\r\n <div kendoTooltip class=\"icon-button\" showOn=\"hover\" [tooltipWidth]=\"item.Width\" [position]=\"item.Position\">\r\n <span *ngIf=\"!!item \" (click)=\"onIconClick(item.Click)\" [title]=\"item.ToolTipText\" [style]=\"item.Style\">\r\n {{item.Text}}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"addons-buttons\" *ngIf=\"addOn.ButtonList\">\r\n <ion-button *ngFor=\"let button of addOn.ButtonList; let i = button\" [fill]=\"button.fill || 'outline'\"\r\n [color]=\"button.color || 'dark'\" [size]=\"button.size || 'small'\" strong=\"false\"\r\n (click)=\"onIconClick(button.Click)\" [hidden]=\"!button.Visible\" [disabled]=\"group.isTriggered || button.Disabled\"\r\n [style]=\"button.Style\">\r\n <fa-icon *ngIf=\"button.Icon\" [icon]=\"getFontAwesome(button.Icon)\"\r\n [style.padding-right]=\"button.Text ? '5px' : '0px'\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">{{ button.Text }}</span>\r\n </ion-button>\r\n </div>\r\n</div>\r\n", styles: [".addons-container{display:flex}.addons-container .addons-icon{display:flex;flex-direction:row}.addons-container .addons-icon fa-icon{padding:4px 6px;font-size:calc(var(--content-font-size) - 2px)}.addons-container .addons-buttons>ion-button{margin:0 0 0 5px;height:20px;font-size:calc(var(--content-font-size) - 2px)}.addons-container .addons-text{padding-left:6px;padding-top:3px;font-size:calc(var(--content-font-size) - 2px)}.addons-container.top .addons-buttons>ion-button{top:-3px;position:relative}.addons-container.left .addons-buttons>ion-button{margin:0 5px 0 0}\n"], components: [{ type: i3.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i4.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.TooltipDirective, selector: "[kendoTooltip]", inputs: ["filter", "position", "titleTemplate", "showOn", "showAfter", "callout", "closable", "offset", "tooltipWidth", "tooltipHeight", "tooltipClass", "collision", "closeTitle", "tooltipTemplate"], exportAs: ["kendoTooltip"] }] });
|
|
63
73
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: InputFieldAddOnsComponent, decorators: [{
|
|
64
74
|
type: Component,
|
|
65
75
|
args: [{ selector: "app-input-field-addons", template: "<div [class]=\"'addons-container ' + position\" *ngIf=\"this.addOn\">\r\n <div class=\"addons-icon\" *ngIf=\"addOn.IconList\">\r\n <div *ngFor=\"let item of addOn.IconList\">\r\n <div kendoTooltip class=\"icon-button\" showOn=\"hover\" [tooltipWidth]=\"item.Width\" [position]=\"item.Position\">\r\n <span *ngIf=\"!!item \" (click)=\"onIconClick(item.Click)\" [title]=\"item.ToolTipText\" [style]=\"item.Style\">\r\n <fa-icon [icon]=\"item.Icon\">\r\n </fa-icon>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"addons-text\" *ngIf=\"addOn.TextList\">\r\n <div *ngFor=\"let item of addOn.TextList\">\r\n <div kendoTooltip class=\"icon-button\" showOn=\"hover\" [tooltipWidth]=\"item.Width\" [position]=\"item.Position\">\r\n <span *ngIf=\"!!item \" (click)=\"onIconClick(item.Click)\" [title]=\"item.ToolTipText\" [style]=\"item.Style\">\r\n {{item.Text}}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"addons-buttons\" *ngIf=\"addOn.ButtonList\">\r\n <ion-button *ngFor=\"let button of addOn.ButtonList; let i = button\" [fill]=\"button.fill || 'outline'\"\r\n [color]=\"button.color || 'dark'\" [size]=\"button.size || 'small'\" strong=\"false\"\r\n (click)=\"onIconClick(button.Click)\" [hidden]=\"!button.Visible\" [disabled]=\"group.isTriggered || button.Disabled\"\r\n [style]=\"button.Style\">\r\n <fa-icon *ngIf=\"button.Icon\" [icon]=\"getFontAwesome(button.Icon)\"\r\n [style.padding-right]=\"button.Text ? '5px' : '0px'\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">{{ button.Text }}</span>\r\n </ion-button>\r\n </div>\r\n</div>\r\n", styles: [".addons-container{display:flex}.addons-container .addons-icon{display:flex;flex-direction:row}.addons-container .addons-icon fa-icon{padding:4px 6px;font-size:calc(var(--content-font-size) - 2px)}.addons-container .addons-buttons>ion-button{margin:0 0 0 5px;height:20px;font-size:calc(var(--content-font-size) - 2px)}.addons-container .addons-text{padding-left:6px;padding-top:3px;font-size:calc(var(--content-font-size) - 2px)}.addons-container.top .addons-buttons>ion-button{top:-3px;position:relative}.addons-container.left .addons-buttons>ion-button{margin:0 5px 0 0}\n"] }]
|
|
66
|
-
}], ctorParameters: function () { return [{ type: i1.ZComponentService }]; }, propDecorators: { position: [{
|
|
76
|
+
}], ctorParameters: function () { return [{ type: i1.ZComponentService }, { type: i2.TranslationService }]; }, propDecorators: { position: [{
|
|
67
77
|
type: Input
|
|
68
78
|
}] } });
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZmllbGQtYWRkb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL2VtYmVkLWNvbXBvbmVudHMvaW5wdXQtZmllbGQtYWRkb25zL2lucHV0LWZpZWxkLWFkZG9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi9lbWJlZC1jb21wb25lbnRzL2lucHV0LWZpZWxkLWFkZG9ucy9pbnB1dC1maWVsZC1hZGRvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFnRCxnQkFBZ0IsRUFBeUIsTUFBTSxpQkFBaUIsQ0FBQztBQUN4SCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7Ozs7Ozs7QUFRM0UsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGNBQWM7SUFFM0QsWUFBWSxXQUE4QixJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFHbEUscUNBQXFDO0lBQ3JDLHFCQUFxQjtJQUVyQixRQUFRO1FBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2pJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRU8sYUFBYTtRQUNuQixtSEFBbUg7UUFFbkgsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDckMsSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLFNBQVMsRUFBRTtvQkFDL0IsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7aUJBQ3BCO3FCQUFNLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0JBQ2pELENBQUMsQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQzlFO2dCQUVELG9EQUFvRDtnQkFDcEQsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztZQUNuQyxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVPLGVBQWU7UUFDckIsb0dBQW9HO1FBRXBHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNyQyxNQUFNLENBQUMsT0FBTyxHQUFHLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQ25HLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRU8sYUFBYTtRQUNuQiw0RkFBNEY7UUFFNUYsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDckMsSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLFNBQVMsRUFBRTtvQkFDL0IsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7aUJBQ3BCO3FCQUFNLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0JBQ2pELENBQUMsQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQzlFO2dCQUVELG9EQUFvRDtnQkFDcEQsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztZQUNuQyxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzs7dUhBM0RVLHlCQUF5QjsyR0FBekIseUJBQXlCLHVIQ1Z0Qyx3ckRBaUNBOzRGRHZCYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0Usd0JBQXdCO3dHQUt6QixRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ2xpY2thYmxlSWNvbnMsIElucHV0RmllbGRBZGRPbnMsIFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCB9IGZyb20gJ21taGdsb2JhbC16Y29yZSc7XHJcbmltcG9ydCB7IElucHV0RmllbGRCYXNlIH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvaW5wdXRmaWVsZGJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLWlucHV0LWZpZWxkLWFkZG9uc1wiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vaW5wdXQtZmllbGQtYWRkb25zLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2lucHV0LWZpZWxkLWFkZG9ucy5jb21wb25lbnQuc2Nzc1wiXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5wdXRGaWVsZEFkZE9uc0NvbXBvbmVudCBleHRlbmRzIElucHV0RmllbGRCYXNlIGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0IHtcclxuICBASW5wdXQoKSBwb3NpdGlvbjogJ3RvcCcgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ2JvdHRvbSc7IC8vIGRlZmF1bHQgdG9wXHJcbiAgY29uc3RydWN0b3IoY29tcFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlKSB7IHN1cGVyKGNvbXBTZXJ2aWNlKSB9XHJcblxyXG4gIHB1YmxpYyBhZGRPbjogSW5wdXRGaWVsZEFkZE9ucztcclxuICAvLyBwdWJsaWMgaWNvbkxpc3Q6IENsaWNrYWJsZUljb25zW107XHJcbiAgLy8gcHVibGljIGJ1dHRvbkxpc3Q7XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IHRoaXMucG9zaXRpb24gfHwgJ3RvcCc7XHJcbiAgICB0aGlzLmFkZE9uID0gdGhpcy5kYXRhICYmIHRoaXMuZGF0YS5JbnB1dEZpZWxkQWRkT25zID8gdGhpcy5kYXRhLklucHV0RmllbGRBZGRPbnMuZmluZChpID0+IGkuUG9zaXRpb24gPT09IHRoaXMucG9zaXRpb24pIDogbnVsbDtcclxuICAgIGlmICh0aGlzLmFkZE9uKSB7XHJcbiAgICAgIHRoaXMuc2V0dXBJY29uTGlzdCgpO1xyXG4gICAgICB0aGlzLnNldHVwQnV0dG9uTGlzdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEljb25MaXN0KCkge1xyXG4gICAgLy8gdGhpcy5hZGRPbi5JY29uTGlzdCA9IFt7IEljb246IFwidXNlclwiLCBDbGljazogbnVsbCwgU3R5bGU6IFwiY29sb3I6Ymx1ZTtcIiwgVG9vbFRpcFRleHQ6IFwidGV4dFwiIH1dOyAvLyBGb3IgVGVzdGluZ1xyXG5cclxuICAgIGlmICh0aGlzLmFkZE9uLkljb25MaXN0KSB7XHJcbiAgICAgIHRoaXMuYWRkT24uSWNvbkxpc3QuZm9yRWFjaCgoaTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGkuVG9vbFRpcFRleHQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgaS5Ub29sVGlwVGV4dCA9IFwiXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpLlRvb2xUaXBUZXh0LmluZGV4T2YoXCJncm91cC5cIikgIT09IC0xKSB7XHJcbiAgICAgICAgICBpLlRvb2xUaXBUZXh0ID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIGkuVG9vbFRpcFRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRGVmYXVsdCBwb3NpdGlvbiB0b3AuIHJpZ2h0IHwgYm90dG9tIHwgdG9wIHwgbGVmdFxyXG4gICAgICAgIGkuUG9zaXRpb24gPSBpLlBvc2l0aW9uIHx8IFwidG9wXCI7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEJ1dHRvbkxpc3QoKSB7XHJcbiAgICAvLyB0aGlzLmFkZE9uLkJ1dHRvbkxpc3QgPSBbeyBUZXh0OiAndGVzdCcsIEljb246ICd1c2VyJywgU3R5bGU6ICcnLCBDbGljazogbnVsbCB9XTsgIC8vIEZvciBUZXN0aW5nXHJcblxyXG4gICAgaWYgKHRoaXMuYWRkT24uQnV0dG9uTGlzdCkge1xyXG4gICAgICB0aGlzLmFkZE9uLkJ1dHRvbkxpc3QuZm9yRWFjaChidXR0b24gPT4ge1xyXG4gICAgICAgIGJ1dHRvbi5WaXNpYmxlID0gWkNvbXBvbmVudEhlbHBlci5pc051bGxVbmRlZmluZWRFbXB0eShidXR0b24uVmlzaWJsZSkgPyAndHJ1ZScgOiBidXR0b24uVmlzaWJsZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwVGV4dExpc3QoKSB7XHJcbiAgICAvLyB0aGlzLmFkZE9uLlRleHRMaXN0ID0gW3sgVGV4dDogJ3Rlc3QnLCBTdHlsZTogJycsIFRvb2x0aXBUZXh0OiAndGVzdCcgfV07ICAvLyBGb3IgVGVzdGluZ1xyXG5cclxuICAgIGlmICh0aGlzLmFkZE9uLlRleHRMaXN0KSB7XHJcbiAgICAgIHRoaXMuYWRkT24uVGV4dExpc3QuZm9yRWFjaCgoaTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGkuVG9vbFRpcFRleHQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgaS5Ub29sVGlwVGV4dCA9IFwiXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpLlRvb2xUaXBUZXh0LmluZGV4T2YoXCJncm91cC5cIikgIT09IC0xKSB7XHJcbiAgICAgICAgICBpLlRvb2xUaXBUZXh0ID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIGkuVG9vbFRpcFRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRGVmYXVsdCBwb3NpdGlvbiB0b3AuIHJpZ2h0IHwgYm90dG9tIHwgdG9wIHwgbGVmdFxyXG4gICAgICAgIGkuUG9zaXRpb24gPSBpLlBvc2l0aW9uIHx8IFwidG9wXCI7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IFtjbGFzc109XCInYWRkb25zLWNvbnRhaW5lciAnICsgcG9zaXRpb25cIiAqbmdJZj1cInRoaXMuYWRkT25cIj5cclxuICA8ZGl2IGNsYXNzPVwiYWRkb25zLWljb25cIiAqbmdJZj1cImFkZE9uLkljb25MaXN0XCI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFkZE9uLkljb25MaXN0XCI+XHJcbiAgICAgIDxkaXYga2VuZG9Ub29sdGlwIGNsYXNzPVwiaWNvbi1idXR0b25cIiBzaG93T249XCJob3ZlclwiIFt0b29sdGlwV2lkdGhdPVwiaXRlbS5XaWR0aFwiIFtwb3NpdGlvbl09XCJpdGVtLlBvc2l0aW9uXCI+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhIWl0ZW0gXCIgKGNsaWNrKT1cIm9uSWNvbkNsaWNrKGl0ZW0uQ2xpY2spXCIgW3RpdGxlXT1cIml0ZW0uVG9vbFRpcFRleHRcIiBbc3R5bGVdPVwiaXRlbS5TdHlsZVwiPlxyXG4gICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiaXRlbS5JY29uXCI+XHJcbiAgICAgICAgICA8L2ZhLWljb24+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiYWRkb25zLXRleHRcIiAqbmdJZj1cImFkZE9uLlRleHRMaXN0XCI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFkZE9uLlRleHRMaXN0XCI+XHJcbiAgICAgIDxkaXYga2VuZG9Ub29sdGlwIGNsYXNzPVwiaWNvbi1idXR0b25cIiBzaG93T249XCJob3ZlclwiIFt0b29sdGlwV2lkdGhdPVwiaXRlbS5XaWR0aFwiIFtwb3NpdGlvbl09XCJpdGVtLlBvc2l0aW9uXCI+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhIWl0ZW0gXCIgKGNsaWNrKT1cIm9uSWNvbkNsaWNrKGl0ZW0uQ2xpY2spXCIgW3RpdGxlXT1cIml0ZW0uVG9vbFRpcFRleHRcIiBbc3R5bGVdPVwiaXRlbS5TdHlsZVwiPlxyXG4gICAgICAgICAge3tpdGVtLlRleHR9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImFkZG9ucy1idXR0b25zXCIgKm5nSWY9XCJhZGRPbi5CdXR0b25MaXN0XCI+XHJcbiAgICA8aW9uLWJ1dHRvbiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGFkZE9uLkJ1dHRvbkxpc3Q7IGxldCBpID0gYnV0dG9uXCIgW2ZpbGxdPVwiYnV0dG9uLmZpbGwgfHwgJ291dGxpbmUnXCJcclxuICAgICAgW2NvbG9yXT1cImJ1dHRvbi5jb2xvciB8fCAnZGFyaydcIiBbc2l6ZV09XCJidXR0b24uc2l6ZSB8fCAnc21hbGwnXCIgc3Ryb25nPVwiZmFsc2VcIlxyXG4gICAgICAoY2xpY2spPVwib25JY29uQ2xpY2soYnV0dG9uLkNsaWNrKVwiIFtoaWRkZW5dPVwiIWJ1dHRvbi5WaXNpYmxlXCIgW2Rpc2FibGVkXT1cImdyb3VwLmlzVHJpZ2dlcmVkIHx8IGJ1dHRvbi5EaXNhYmxlZFwiXHJcbiAgICAgIFtzdHlsZV09XCJidXR0b24uU3R5bGVcIj5cclxuICAgICAgPGZhLWljb24gKm5nSWY9XCJidXR0b24uSWNvblwiIFtpY29uXT1cImdldEZvbnRBd2Vzb21lKGJ1dHRvbi5JY29uKVwiXHJcbiAgICAgICAgW3N0eWxlLnBhZGRpbmctcmlnaHRdPVwiYnV0dG9uLlRleHQgPyAnNXB4JyA6ICcwcHgnXCI+PC9mYS1pY29uPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImlvbi10ZXh0LWNhcGl0YWxpemVcIj57eyBidXR0b24uVGV4dCB9fTwvc3Bhbj5cclxuICAgIDwvaW9uLWJ1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZmllbGQtYWRkb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL2VtYmVkLWNvbXBvbmVudHMvaW5wdXQtZmllbGQtYWRkb25zL2lucHV0LWZpZWxkLWFkZG9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi9lbWJlZC1jb21wb25lbnRzL2lucHV0LWZpZWxkLWFkZG9ucy9pbnB1dC1maWVsZC1hZGRvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFvRCxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7Ozs7QUFRM0UsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGNBQWM7SUFFM0QsWUFBWSxXQUE4QixFQUFVLGtCQUFzQztRQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUE1RCx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO0lBQXVCLENBQUM7SUFHbEgscUNBQXFDO0lBQ3JDLHFCQUFxQjtJQUVyQixRQUFRO1FBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxL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QUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUM5RTtnQkFFRCxvREFBb0Q7Z0JBQ3BELENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM5SSxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUN0SjtJQUNILENBQUM7O3VIQXJFVSx5QkFBeUI7MkdBQXpCLHlCQUF5Qix1SENWdEMsd3JEQWlDQTs0RkR2QmEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLHdCQUF3Qjt5SUFLekIsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IElucHV0RmllbGRBZGRPbnMsIFRyYW5zbGF0aW9uU2VydmljZSwgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciB9IGZyb20gJ21taGdsb2JhbC16Y29yZSc7XHJcbmltcG9ydCB7IElucHV0RmllbGRCYXNlIH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvaW5wdXRmaWVsZGJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLWlucHV0LWZpZWxkLWFkZG9uc1wiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vaW5wdXQtZmllbGQtYWRkb25zLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2lucHV0LWZpZWxkLWFkZG9ucy5jb21wb25lbnQuc2Nzc1wiXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5wdXRGaWVsZEFkZE9uc0NvbXBvbmVudCBleHRlbmRzIElucHV0RmllbGRCYXNlIGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0IHtcclxuICBASW5wdXQoKSBwb3NpdGlvbjogJ3RvcCcgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ2JvdHRvbSc7IC8vIGRlZmF1bHQgdG9wXHJcbiAgY29uc3RydWN0b3IoY29tcFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlLCBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlKSB7IHN1cGVyKGNvbXBTZXJ2aWNlKSB9XHJcblxyXG4gIHB1YmxpYyBhZGRPbjogSW5wdXRGaWVsZEFkZE9ucztcclxuICAvLyBwdWJsaWMgaWNvbkxpc3Q6IENsaWNrYWJsZUljb25zW107XHJcbiAgLy8gcHVibGljIGJ1dHRvbkxpc3Q7XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IHRoaXMucG9zaXRpb24gfHwgJ3RvcCc7XHJcbiAgICB0aGlzLmFkZE9uID0gdGhpcy5kYXRhICYmIHRoaXMuZGF0YS5JbnB1dEZpZWxkQWRkT25zID8gdGhpcy5kYXRhLklucHV0RmllbGRBZGRPbnMuZmluZChpID0+IGkuUG9zaXRpb24gPT09IHRoaXMucG9zaXRpb24pIDogbnVsbDtcclxuICAgIGlmICh0aGlzLmFkZE9uKSB7XHJcbiAgICAgIHRoaXMuc2V0dXBJY29uTGlzdCgpO1xyXG4gICAgICB0aGlzLnNldHVwQnV0dG9uTGlzdCgpO1xyXG4gICAgICB0aGlzLnNldHVwVGV4dExpc3QoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBJY29uTGlzdCgpIHtcclxuICAgIC8vIHRoaXMuYWRkT24uSWNvbkxpc3QgPSBbeyBJY29uOiBcInVzZXJcIiwgQ2xpY2s6IG51bGwsIFN0eWxlOiBcImNvbG9yOmJsdWU7XCIsIFRvb2xUaXBUZXh0OiBcInRleHRcIiB9XTsgLy8gRm9yIFRlc3RpbmdcclxuXHJcbiAgICBpZiAodGhpcy5hZGRPbi5JY29uTGlzdCkge1xyXG4gICAgICB0aGlzLmFkZE9uLkljb25MaXN0LmZvckVhY2goKGk6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChpLlRvb2xUaXBUZXh0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGkuVG9vbFRpcFRleHQgPSBcIlwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaS5Ub29sVGlwVGV4dC5pbmRleE9mKFwiZ3JvdXAuXCIpICE9PSAtMSkge1xyXG4gICAgICAgICAgaS5Ub29sVGlwVGV4dCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBpLlRvb2xUaXBUZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLiR0cmFuc2xhdGVUZXh0KGkuVG9vbFRpcFRleHQsIHsgZWxlbWVudE5hbWU6IHRoaXMuZ3JvdXAuZmllbGROYW1lLCBncm91cDogdGhpcy5ncm91cCB9KS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgICAgLy8gRGVmYXVsdCBwb3NpdGlvbiB0b3AuIHJpZ2h0IHwgYm90dG9tIHwgdG9wIHwgbGVmdFxyXG4gICAgICAgIGkuUG9zaXRpb24gPSBpLlBvc2l0aW9uIHx8IFwidG9wXCI7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuJHRyYW5zbGF0ZUl0ZW1MaXN0KHRoaXMuYWRkT24uSWNvbkxpc3QsIFwiVG9vbFRpcFRleHRcIiwgeyBlbGVtZW50TmFtZTogdGhpcy5ncm91cC5maWVsZE5hbWUsIGdyb3VwOiB0aGlzLmdyb3VwIH0pLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEJ1dHRvbkxpc3QoKSB7XHJcbiAgICAvLyB0aGlzLmFkZE9uLkJ1dHRvbkxpc3QgPSBbeyBUZXh0OiAndGVzdCcsIEljb246ICd1c2VyJywgU3R5bGU6ICcnLCBDbGljazogbnVsbCB9XTsgIC8vIEZvciBUZXN0aW5nXHJcblxyXG4gICAgaWYgKHRoaXMuYWRkT24uQnV0dG9uTGlzdCkge1xyXG4gICAgICB0aGlzLmFkZE9uLkJ1dHRvbkxpc3QuZm9yRWFjaChidXR0b24gPT4ge1xyXG4gICAgICAgIGJ1dHRvbi5WaXNpYmxlID0gWkNvbXBvbmVudEhlbHBlci5pc051bGxVbmRlZmluZWRFbXB0eShidXR0b24uVmlzaWJsZSkgPyAndHJ1ZScgOiBidXR0b24uVmlzaWJsZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS4kdHJhbnNsYXRlSXRlbUxpc3QodGhpcy5hZGRPbi5CdXR0b25MaXN0LCBcIlRleHRcIiwgeyBlbGVtZW50TmFtZTogdGhpcy5ncm91cC5maWVsZE5hbWUsIGdyb3VwOiB0aGlzLmdyb3VwIH0pLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cFRleHRMaXN0KCkge1xyXG4gICAgLy8gdGhpcy5hZGRPbi5UZXh0TGlzdCA9IFt7IFRleHQ6ICd0ZXN0JywgU3R5bGU6ICcnLCBUb29sdGlwVGV4dDogJ3Rlc3QnIH1dOyAgLy8gRm9yIFRlc3RpbmdcclxuXHJcbiAgICBpZiAodGhpcy5hZGRPbi5UZXh0TGlzdCkge1xyXG4gICAgICB0aGlzLmFkZE9uLlRleHRMaXN0LmZvckVhY2goKGk6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChpLlRvb2xUaXBUZXh0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGkuVG9vbFRpcFRleHQgPSBcIlwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaS5Ub29sVGlwVGV4dC5pbmRleE9mKFwiZ3JvdXAuXCIpICE9PSAtMSkge1xyXG4gICAgICAgICAgaS5Ub29sVGlwVGV4dCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBpLlRvb2xUaXBUZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIERlZmF1bHQgcG9zaXRpb24gdG9wLiByaWdodCB8IGJvdHRvbSB8IHRvcCB8IGxlZnRcclxuICAgICAgICBpLlBvc2l0aW9uID0gaS5Qb3NpdGlvbiB8fCBcInRvcFwiO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLiR0cmFuc2xhdGVJdGVtTGlzdCh0aGlzLmFkZE9uLlRleHRMaXN0LCBcIlRleHRcIiwgeyBlbGVtZW50TmFtZTogdGhpcy5ncm91cC5maWVsZE5hbWUsIGdyb3VwOiB0aGlzLmdyb3VwIH0pLnN1YnNjcmliZSgpO1xyXG4gICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS4kdHJhbnNsYXRlSXRlbUxpc3QodGhpcy5hZGRPbi5UZXh0TGlzdCwgXCJUb29sVGlwVGV4dFwiLCB7IGVsZW1lbnROYW1lOiB0aGlzLmdyb3VwLmZpZWxkTmFtZSwgZ3JvdXA6IHRoaXMuZ3JvdXAgfSkuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgW2NsYXNzXT1cIidhZGRvbnMtY29udGFpbmVyICcgKyBwb3NpdGlvblwiICpuZ0lmPVwidGhpcy5hZGRPblwiPlxyXG4gIDxkaXYgY2xhc3M9XCJhZGRvbnMtaWNvblwiICpuZ0lmPVwiYWRkT24uSWNvbkxpc3RcIj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYWRkT24uSWNvbkxpc3RcIj5cclxuICAgICAgPGRpdiBrZW5kb1Rvb2x0aXAgY2xhc3M9XCJpY29uLWJ1dHRvblwiIHNob3dPbj1cImhvdmVyXCIgW3Rvb2x0aXBXaWR0aF09XCJpdGVtLldpZHRoXCIgW3Bvc2l0aW9uXT1cIml0ZW0uUG9zaXRpb25cIj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cIiEhaXRlbSBcIiAoY2xpY2spPVwib25JY29uQ2xpY2soaXRlbS5DbGljaylcIiBbdGl0bGVdPVwiaXRlbS5Ub29sVGlwVGV4dFwiIFtzdHlsZV09XCJpdGVtLlN0eWxlXCI+XHJcbiAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJpdGVtLkljb25cIj5cclxuICAgICAgICAgIDwvZmEtaWNvbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJhZGRvbnMtdGV4dFwiICpuZ0lmPVwiYWRkT24uVGV4dExpc3RcIj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYWRkT24uVGV4dExpc3RcIj5cclxuICAgICAgPGRpdiBrZW5kb1Rvb2x0aXAgY2xhc3M9XCJpY29uLWJ1dHRvblwiIHNob3dPbj1cImhvdmVyXCIgW3Rvb2x0aXBXaWR0aF09XCJpdGVtLldpZHRoXCIgW3Bvc2l0aW9uXT1cIml0ZW0uUG9zaXRpb25cIj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cIiEhaXRlbSBcIiAoY2xpY2spPVwib25JY29uQ2xpY2soaXRlbS5DbGljaylcIiBbdGl0bGVdPVwiaXRlbS5Ub29sVGlwVGV4dFwiIFtzdHlsZV09XCJpdGVtLlN0eWxlXCI+XHJcbiAgICAgICAgICB7e2l0ZW0uVGV4dH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiYWRkb25zLWJ1dHRvbnNcIiAqbmdJZj1cImFkZE9uLkJ1dHRvbkxpc3RcIj5cclxuICAgIDxpb24tYnV0dG9uICpuZ0Zvcj1cImxldCBidXR0b24gb2YgYWRkT24uQnV0dG9uTGlzdDsgbGV0IGkgPSBidXR0b25cIiBbZmlsbF09XCJidXR0b24uZmlsbCB8fCAnb3V0bGluZSdcIlxyXG4gICAgICBbY29sb3JdPVwiYnV0dG9uLmNvbG9yIHx8ICdkYXJrJ1wiIFtzaXplXT1cImJ1dHRvbi5zaXplIHx8ICdzbWFsbCdcIiBzdHJvbmc9XCJmYWxzZVwiXHJcbiAgICAgIChjbGljayk9XCJvbkljb25DbGljayhidXR0b24uQ2xpY2spXCIgW2hpZGRlbl09XCIhYnV0dG9uLlZpc2libGVcIiBbZGlzYWJsZWRdPVwiZ3JvdXAuaXNUcmlnZ2VyZWQgfHwgYnV0dG9uLkRpc2FibGVkXCJcclxuICAgICAgW3N0eWxlXT1cImJ1dHRvbi5TdHlsZVwiPlxyXG4gICAgICA8ZmEtaWNvbiAqbmdJZj1cImJ1dHRvbi5JY29uXCIgW2ljb25dPVwiZ2V0Rm9udEF3ZXNvbWUoYnV0dG9uLkljb24pXCJcclxuICAgICAgICBbc3R5bGUucGFkZGluZy1yaWdodF09XCJidXR0b24uVGV4dCA/ICc1cHgnIDogJzBweCdcIj48L2ZhLWljb24+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiaW9uLXRleHQtY2FwaXRhbGl6ZVwiPnt7IGJ1dHRvbi5UZXh0IH19PC9zcGFuPlxyXG4gICAgPC9pb24tYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|