mmhglobal-dynamicform 2.0.0-beta.71 → 2.0.0-beta.72
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 +4 -0
- package/esm2020/lib/components/inputfieldbase.component.mjs +85 -82
- package/esm2020/lib/zudf/zudf.component.mjs +19 -11
- package/fesm2015/mmhglobal-dynamicform.mjs +103 -92
- package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
- package/fesm2020/mmhglobal-dynamicform.mjs +102 -91
- package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
- package/lib/components/inputfieldbase.component.d.ts +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
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.72beta`<br/>
|
|
7
|
+
[zudf] - component enhancement for userlist dropdown feature.<br/>
|
|
8
|
+
[inputfieldbase] - tidy the code for handlign zudf.<br/>
|
|
9
|
+
|
|
6
10
|
`2.71beta`<br/>
|
|
7
11
|
[ztreelist] - Allow set default expand/collapse programtically.<br/>
|
|
8
12
|
[zudf] - enhancement for component.<br/>
|
|
@@ -19,87 +19,7 @@ export class InputFieldBase extends FieldBase {
|
|
|
19
19
|
}
|
|
20
20
|
onChange(event, fieldValue) {
|
|
21
21
|
if (this.data.SubType && this.data.SubType === 'zudf') {
|
|
22
|
-
|
|
23
|
-
const getZudfScope = ZComponentHelper.getZudfScope(this.group, this.data.Value);
|
|
24
|
-
if (!getZudfScope) {
|
|
25
|
-
console.log('zudf scope is null for field onchange.');
|
|
26
|
-
}
|
|
27
|
-
getZudfScope.zModel[this.data.Value] = zudfFieldValue;
|
|
28
|
-
of({}).pipe(tap(res => {
|
|
29
|
-
if (getZudfScope.linkedComponent) {
|
|
30
|
-
const linkedComponentScope = getZudfScope.linkedComponent;
|
|
31
|
-
// #1 check is the onchange component linked to other component.
|
|
32
|
-
// #2 if linked to other component(lets call it child component),
|
|
33
|
-
// base on the linkedComponentScope value, find the child component.
|
|
34
|
-
// #3 keep the original SelectOptions in the component.
|
|
35
|
-
// #4 clear the child zmodel and filter the child component options.
|
|
36
|
-
linkedComponentScope.forEach(item => {
|
|
37
|
-
const dataValueSegment = this.data.Value.split('_');
|
|
38
|
-
if (item.linkedComponent == dataValueSegment[dataValueSegment.length - 1]) {
|
|
39
|
-
const childComponent = ZComponentHelper.getComponentByValue(this.group, item.value);
|
|
40
|
-
const originalSelectOptions = childComponent.data['originalSelectOptions'] ?? Object.assign([], childComponent.data.SelectOptions);
|
|
41
|
-
const filteredSelectionOptions = originalSelectOptions.filter(option => option.parentExpression == fieldValue);
|
|
42
|
-
//childComponent.clearData(); //unable to use clearData. not handled for zudf type
|
|
43
|
-
// manuall patch the component formcontrol value
|
|
44
|
-
getZudfScope.zModel[item.value] = null;
|
|
45
|
-
const zudfForm = getZudfScope.form;
|
|
46
|
-
const componentFormControl = zudfForm.controls[item.value];
|
|
47
|
-
componentFormControl.patchValue(getZudfScope.zModel[item.value]);
|
|
48
|
-
childComponent.data['originalSelectOptions'] = originalSelectOptions;
|
|
49
|
-
childComponent.setSelectOption(filteredSelectionOptions);
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
}), tap(res => {
|
|
54
|
-
if (this.data['AutoPopulateChildFieldValue']) {
|
|
55
|
-
// ZUDF. Auto Populate child field value
|
|
56
|
-
const childFields = this.data['ChildFields'];
|
|
57
|
-
if (childFields) {
|
|
58
|
-
let selectedDataOption = null;
|
|
59
|
-
if (fieldValue) {
|
|
60
|
-
// get the selected data full info
|
|
61
|
-
const dataOption = this.group.zData[this.data['ZDataOptionName']];
|
|
62
|
-
if (dataOption) {
|
|
63
|
-
dataOption.forEach(option => {
|
|
64
|
-
if (option.Id === fieldValue) {
|
|
65
|
-
selectedDataOption = Object.assign({}, option);
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
// set to all related zMode of the dropdown
|
|
72
|
-
let fg = getZudfScope.form;
|
|
73
|
-
childFields.forEach(childField => {
|
|
74
|
-
// remove symbol.
|
|
75
|
-
let childFieldName = encodeURI(childField.replace(/[^a-z0-9]/gi, ""));
|
|
76
|
-
const fieldModelName = this.data.Name + childFieldName;
|
|
77
|
-
const zModels = getZudfScope.zModel;
|
|
78
|
-
const childComponent = ZComponentHelper.getComponent(this.group, 'text_' + fieldModelName);
|
|
79
|
-
if (childComponent['data']['ReadOnly'] && !fieldValue) {
|
|
80
|
-
// clear child field if only readonly is true.
|
|
81
|
-
zModels[fieldModelName] = !fieldValue ? null : selectedDataOption ? selectedDataOption[childFieldName] : null;
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
if (selectedDataOption) {
|
|
85
|
-
zModels[fieldModelName] = selectedDataOption[childFieldName];
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
fg.patchValue(zModels);
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}), switchMap(res => {
|
|
93
|
-
const eventName = 'triggerValidation';
|
|
94
|
-
if (this.group) {
|
|
95
|
-
if (this.group[eventName]) {
|
|
96
|
-
return this.group[eventName](this.group, event, fieldValue);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
return of({});
|
|
100
|
-
})).subscribe(res => {
|
|
101
|
-
this.triggerEvent("inputfield-onChange", this.data.OnChange, event, fieldValue);
|
|
102
|
-
});
|
|
22
|
+
this.handleZudfChange(event, fieldValue);
|
|
103
23
|
}
|
|
104
24
|
else {
|
|
105
25
|
ZComponentHelper.setComponentModelValue(this.data, this.getFieldValue(event, fieldValue), this.group);
|
|
@@ -150,6 +70,89 @@ export class InputFieldBase extends FieldBase {
|
|
|
150
70
|
}
|
|
151
71
|
return fieldValue;
|
|
152
72
|
}
|
|
73
|
+
handleZudfChange(event, fieldValue) {
|
|
74
|
+
const zudfFieldValue = this.getFieldValue(event, fieldValue);
|
|
75
|
+
const getZudfScope = ZComponentHelper.getZudfScope(this.group, this.data.Value);
|
|
76
|
+
if (!getZudfScope) {
|
|
77
|
+
console.log('zudf scope is null for field onchange.');
|
|
78
|
+
}
|
|
79
|
+
getZudfScope.zModel[this.data.Value] = zudfFieldValue;
|
|
80
|
+
of({}).pipe(tap(res => {
|
|
81
|
+
if (getZudfScope.linkedComponent) {
|
|
82
|
+
const linkedComponentScope = getZudfScope.linkedComponent;
|
|
83
|
+
// #1 check is the onchange component linked to other component.
|
|
84
|
+
// #2 if linked to other component(lets call it child component),
|
|
85
|
+
// base on the linkedComponentScope value, find the child component.
|
|
86
|
+
// #3 keep the original SelectOptions in the component.
|
|
87
|
+
// #4 clear the child zmodel and filter the child component options.
|
|
88
|
+
linkedComponentScope.forEach(item => {
|
|
89
|
+
const dataValueSegment = this.data.Value.split('_');
|
|
90
|
+
if (item.linkedComponent == dataValueSegment[dataValueSegment.length - 1]) {
|
|
91
|
+
const childComponent = ZComponentHelper.getComponentByValue(this.group, item.value);
|
|
92
|
+
const originalSelectOptions = childComponent.data['originalSelectOptions'] ?? Object.assign([], childComponent.data.SelectOptions);
|
|
93
|
+
const filteredSelectionOptions = originalSelectOptions.filter(option => option.parentExpression == fieldValue);
|
|
94
|
+
//childComponent.clearData(); //unable to use clearData. not handled for zudf type
|
|
95
|
+
// manuall patch the component formcontrol value
|
|
96
|
+
getZudfScope.zModel[item.value] = null;
|
|
97
|
+
const zudfForm = getZudfScope.form;
|
|
98
|
+
const componentFormControl = zudfForm.controls[item.value];
|
|
99
|
+
componentFormControl.patchValue(getZudfScope.zModel[item.value]);
|
|
100
|
+
childComponent.data['originalSelectOptions'] = originalSelectOptions;
|
|
101
|
+
childComponent.setSelectOption(filteredSelectionOptions);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}), tap(res => {
|
|
106
|
+
if (this.data['AutoPopulateChildFieldValue']) {
|
|
107
|
+
// ZUDF. Auto Populate child field value
|
|
108
|
+
const childFields = this.data['ChildFields'];
|
|
109
|
+
if (childFields) {
|
|
110
|
+
let selectedDataOption = null;
|
|
111
|
+
if (fieldValue) {
|
|
112
|
+
// get the selected data full info
|
|
113
|
+
const dataOption = this.group.zData[this.data['ZDataOptionName']];
|
|
114
|
+
if (dataOption) {
|
|
115
|
+
dataOption.forEach(option => {
|
|
116
|
+
if (option.Id === fieldValue) {
|
|
117
|
+
selectedDataOption = Object.assign({}, option);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// set to all related zMode of the dropdown
|
|
124
|
+
let fg = getZudfScope.form;
|
|
125
|
+
childFields.forEach(childField => {
|
|
126
|
+
// remove symbol.
|
|
127
|
+
let childFieldName = encodeURI(childField.replace(/[^a-z0-9]/gi, ""));
|
|
128
|
+
const fieldModelName = this.data.Name + childFieldName;
|
|
129
|
+
const zModels = getZudfScope.zModel;
|
|
130
|
+
const childComponent = ZComponentHelper.getComponent(this.group, 'text_' + fieldModelName);
|
|
131
|
+
if (childComponent['data']['ReadOnly'] && !fieldValue) {
|
|
132
|
+
// clear child field if only readonly is true.
|
|
133
|
+
zModels[fieldModelName] = !fieldValue ? null : selectedDataOption ? selectedDataOption[childFieldName] : null;
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
if (selectedDataOption) {
|
|
137
|
+
zModels[fieldModelName] = selectedDataOption[childFieldName];
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
fg.patchValue(zModels);
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}), switchMap(res => {
|
|
145
|
+
const eventName = 'triggerValidation';
|
|
146
|
+
if (this.group) {
|
|
147
|
+
if (this.group[eventName]) {
|
|
148
|
+
return this.group[eventName](this.group, event, fieldValue);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return of({});
|
|
152
|
+
})).subscribe(res => {
|
|
153
|
+
this.triggerEvent("inputfield-onChange", this.data.OnChange, event, fieldValue);
|
|
154
|
+
});
|
|
155
|
+
}
|
|
153
156
|
}
|
|
154
157
|
InputFieldBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: InputFieldBase, deps: [{ token: i1.ZComponentService }], target: i0.ɵɵFactoryTarget.Component });
|
|
155
158
|
InputFieldBase.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: InputFieldBase, selector: "ng-component", outputs: { triggerContainerEvent: "triggerContainerEvent" }, usesInheritance: true, ngImport: i0, template: ``, isInline: true });
|
|
@@ -162,4 +165,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
162
165
|
type: Output,
|
|
163
166
|
args: ['triggerContainerEvent']
|
|
164
167
|
}] } });
|
|
165
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRmaWVsZGJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dGZpZWxkYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBeUIsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFPMUMsMklBQTJJO0FBQzNJLE1BQU0sT0FBTyxjQUFlLFNBQVEsU0FBUztJQUUzQyxZQUFZLFdBQThCO1FBQ3hDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUZZLDBCQUFxQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBRy9GLENBQUM7SUFFTSxPQUFPLENBQUMsS0FBVSxFQUFFLFVBQWdCO1FBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQVUsRUFBRSxVQUFnQjtRQUM1QyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RyxJQUFJLENBQUMsWUFBWSxDQUFDLHVCQUF1QixFQUFFLElB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RCxjQUFjO2tCQUwxQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxFQUFFO2lCQUNiO3dHQUlrQyxxQkFBcUI7c0JBQXJELE1BQU07dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE91dHB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCB9IGZyb20gXCJtbWhnbG9iYWwtemNvcmVcIjtcclxuaW1wb3J0IHsgRmllbGRCYXNlIH0gZnJvbSBcIi4vZmllbGRiYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgb2YsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGU6IGBgLFxyXG59KVxyXG5cclxuLy8gRm9yOiB6Y2hlY2tib3gsIHpjaGlwLCB6ZGF0ZXRpbWUsIHppbWcsIHppbnB1dC1jb250YWluZXIsIHpsYWJlbCwgem51bWVyaWMsIHpwb3N0c2VsZWN0aW5wdXQsIHpzZWxlY3RtdWx0aXBsZSwgenRleHQsIHp0ZXh0YXJlYSwgenVwbG9hZFxyXG5leHBvcnQgY2xhc3MgSW5wdXRGaWVsZEJhc2UgZXh0ZW5kcyBGaWVsZEJhc2Uge1xyXG4gIEBPdXRwdXQoJ3RyaWdnZXJDb250YWluZXJFdmVudCcpIHRyaWdnZXJDb250YWluZXJFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgY29uc3RydWN0b3IoY29tcFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlKSB7XHJcbiAgICBzdXBlcihjb21wU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DbGljayhldmVudDogYW55LCBmaWVsZFZhbHVlPzogYW55KSB7XHJcbiAgICB0aGlzLnRyaWdnZXJFdmVudChcImlucHV0ZmllbGQtb25DbGlja1wiLCB0aGlzLmRhdGEuT25DbGljaywgZXZlbnQsIGZpZWxkVmFsdWUgfHwgZXZlbnRbJ09uQ2xpY2snXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2VDQyhldmVudDogYW55LCBmaWVsZFZhbHVlPzogYW55KSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudE1vZGVsVmFsdWUodGhpcy5kYXRhLCB0aGlzLmdldEZpZWxkVmFsdWUoZXZlbnQsIGZpZWxkVmFsdWUpLCB0aGlzLmdyb3VwKTtcclxuICAgIHRoaXMudHJpZ2dlckV2ZW50KFwiaW5wdXRmaWVsZC1vbkNoYW5nZUNDXCIsIHRoaXMuZGF0YS5DQ09uQ2hhbmdlLCBldmVudCwgZmllbGRWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2UoZXZlbnQ6IGFueSwgZmllbGRWYWx1ZT86IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5TdWJUeXBlICYmIHRoaXMuZGF0YS5TdWJUeXBlID09PSAnenVkZicpIHtcclxuICAgICAgY29uc3QgenVkZkZpZWxkVmFsdWUgPSB0aGlzLmdldEZpZWxkVmFsdWUoZXZlbnQsIGZpZWxkVmFsdWUpO1xyXG4gICAgICBjb25zdCBnZXRadWRmU2NvcGUgPSBaQ29tcG9uZW50SGVscGVyLmdldFp1ZGZTY29wZSh0aGlzLmdyb3VwLCB0aGlzLmRhdGEuVmFsdWUpO1xyXG5cclxuICAgICAgaWYgKCFnZXRadWRmU2NvcGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnenVkZiBzY29wZSBpcyBudWxsIGZvciBmaWVsZCBvbmNoYW5nZS4nKTtcclxuICAgICAgfVxyXG4gICAgICBnZXRadWRmU2NvcGUuek1vZGVsW3RoaXMuZGF0YS5WYWx1ZV0gPSB6dWRmRmllbGRWYWx1ZTtcclxuICAgICAgb2Yoe30pLnBpcGUoXHJcbiAgICAgICAgdGFwKHJlcyA9PiB7XHJcbiAgICAgICAgICBpZiAoZ2V0WnVkZlNjb3BlLmxpbmtlZENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBsaW5rZWRDb21wb25lbnRTY29wZSA9IGdldFp1ZGZTY29wZS5saW5rZWRDb21wb25lbnQ7XHJcbiAgICAgICAgICAgIC8vICMxIGNoZWNrIGlzIHRoZSBvbmNoYW5nZSBjb21wb25lbnQgbGlua2VkIHRvIG90aGVyIGNvbXBvbmVudC5cclxuICAgICAgICAgICAgLy8gIzIgaWYgbGlua2VkIHRvIG90aGVyIGNvbXBvbmVudChsZXRzIGNhbGwgaXQgY2hpbGQgY29tcG9uZW50KSxcclxuICAgICAgICAgICAgLy8gICAgYmFzZSBvbiB0aGUgbGlua2VkQ29tcG9uZW50U2NvcGUgdmFsdWUsIGZpbmQgdGhlIGNoaWxkIGNvbXBvbmVudC5cclxuICAgICAgICAgICAgLy8gIzMga2VlcCB0aGUgb3JpZ2luYWwgU2VsZWN0T3B0aW9ucyBpbiB0aGUgY29tcG9uZW50LlxyXG4gICAgICAgICAgICAvLyAjNCBjbGVhciB0aGUgY2hpbGQgem1vZGVsIGFuZCBmaWx0ZXIgdGhlIGNoaWxkIGNvbXBvbmVudCBvcHRpb25zLlxyXG4gICAgICAgICAgICBsaW5rZWRDb21wb25lbnRTY29wZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGRhdGFWYWx1ZVNlZ21lbnQgPSB0aGlzLmRhdGEuVmFsdWUuc3BsaXQoJ18nKTtcclxuICAgICAgICAgICAgICBpZiAoaXRlbS5saW5rZWRDb21wb25lbnQgPT0gZGF0YVZhbHVlU2VnbWVudFtkYXRhVmFsdWVTZWdtZW50Lmxlbmd0aCAtIDFdKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZENvbXBvbmVudCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0Q29tcG9uZW50QnlWYWx1ZSh0aGlzLmdyb3VwLCBpdGVtLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsU2VsZWN0T3B0aW9ucyA9IGNoaWxkQ29tcG9uZW50LmRhdGFbJ29yaWdpbmFsU2VsZWN0T3B0aW9ucyddID8/IE9iamVjdC5hc3NpZ24oW10sIGNoaWxkQ29tcG9uZW50LmRhdGEuU2VsZWN0T3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFNlbGVjdGlvbk9wdGlvbnMgPSBvcmlnaW5hbFNlbGVjdE9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24ucGFyZW50RXhwcmVzc2lvbiA9PSBmaWVsZFZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvL2NoaWxkQ29tcG9uZW50LmNsZWFyRGF0YSgpOyAvL3VuYWJsZSB0byB1c2UgY2xlYXJEYXRhLiBub3QgaGFuZGxlZCBmb3IgenVkZiB0eXBlXHJcbiAgICAgICAgICAgICAgICAvLyBtYW51YWxsIHBhdGNoIHRoZSBjb21wb25lbnQgZm9ybWNvbnRyb2wgdmFsdWVcclxuICAgICAgICAgICAgICAgIGdldFp1ZGZTY29wZS56TW9kZWxbaXRlbS52YWx1ZV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgenVkZkZvcm0gPSBnZXRadWRmU2NvcGUuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnRGb3JtQ29udHJvbCA9IHp1ZGZGb3JtLmNvbnRyb2xzW2l0ZW0udmFsdWVdIGFzIEZvcm1Db250cm9sO1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50Rm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShnZXRadWRmU2NvcGUuek1vZGVsW2l0ZW0udmFsdWVdKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjaGlsZENvbXBvbmVudC5kYXRhWydvcmlnaW5hbFNlbGVjdE9wdGlvbnMnXSA9IG9yaWdpbmFsU2VsZWN0T3B0aW9ucztcclxuICAgICAgICAgICAgICAgIGNoaWxkQ29tcG9uZW50LnNldFNlbGVjdE9wdGlvbihmaWx0ZXJlZFNlbGVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICB0YXAocmVzID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmRhdGFbJ0F1dG9Qb3B1bGF0ZUNoaWxkRmllbGRWYWx1ZSddKSB7XHJcbiAgICAgICAgICAgIC8vIFpVREYuIEF1dG8gUG9wdWxhdGUgY2hpbGQgZmllbGQgdmFsdWVcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRGaWVsZHMgPSB0aGlzLmRhdGFbJ0NoaWxkRmllbGRzJ107XHJcbiAgICAgICAgICAgIGlmIChjaGlsZEZpZWxkcykge1xyXG4gICAgICAgICAgICAgIGxldCBzZWxlY3RlZERhdGFPcHRpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAgIGlmIChmaWVsZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIHNlbGVjdGVkIGRhdGEgZnVsbCBpbmZvIFxyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YU9wdGlvbiA9IHRoaXMuZ3JvdXAuekRhdGFbdGhpcy5kYXRhWydaRGF0YU9wdGlvbk5hbWUnXV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGFPcHRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgZGF0YU9wdGlvbi5mb3JFYWNoKG9wdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi5JZCA9PT0gZmllbGRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWREYXRhT3B0aW9uID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgLy8gc2V0IHRvIGFsbCByZWxhdGVkIHpNb2RlIG9mIHRoZSBkcm9wZG93blxyXG4gICAgICAgICAgICAgIGxldCBmZzogRm9ybUdyb3VwID0gZ2V0WnVkZlNjb3BlLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgICAgICAgICAgIGNoaWxkRmllbGRzLmZvckVhY2goY2hpbGRGaWVsZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgc3ltYm9sLiBcclxuICAgICAgICAgICAgICAgIGxldCBjaGlsZEZpZWxkTmFtZSA9IGVuY29kZVVSSShjaGlsZEZpZWxkLnJlcGxhY2UoL1teYS16MC05XS9naSwgXCJcIikpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRNb2RlbE5hbWUgPSB0aGlzLmRhdGEuTmFtZSArIGNoaWxkRmllbGROYW1lO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgek1vZGVscyA9IGdldFp1ZGZTY29wZS56TW9kZWw7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRDb21wb25lbnQgPSBaQ29tcG9uZW50SGVscGVyLmdldENvbXBvbmVudCh0aGlzLmdyb3VwLCAndGV4dF8nICsgZmllbGRNb2RlbE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkQ29tcG9uZW50WydkYXRhJ11bJ1JlYWRPbmx5J10gJiYgIWZpZWxkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gY2xlYXIgY2hpbGQgZmllbGQgaWYgb25seSByZWFkb25seSBpcyB0cnVlLiBcclxuICAgICAgICAgICAgICAgICAgek1vZGVsc1tmaWVsZE1vZGVsTmFtZV0gPSAhZmllbGRWYWx1ZSA/IG51bGwgOiBzZWxlY3RlZERhdGFPcHRpb24gPyBzZWxlY3RlZERhdGFPcHRpb25bY2hpbGRGaWVsZE5hbWVdIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWREYXRhT3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgek1vZGVsc1tmaWVsZE1vZGVsTmFtZV0gPSBzZWxlY3RlZERhdGFPcHRpb25bY2hpbGRGaWVsZE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmZy5wYXRjaFZhbHVlKHpNb2RlbHMpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc3dpdGNoTWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICBjb25zdCBldmVudE5hbWUgPSAndHJpZ2dlclZhbGlkYXRpb24nO1xyXG4gICAgICAgICAgaWYgKHRoaXMuZ3JvdXApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXBbZXZlbnROYW1lXSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmdyb3VwW2V2ZW50TmFtZV0odGhpcy5ncm91cCwgZXZlbnQsIGZpZWxkVmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoXCJpbnB1dGZpZWxkLW9uQ2hhbmdlXCIsIHRoaXMuZGF0YS5PbkNoYW5nZSwgZXZlbnQsIGZpZWxkVmFsdWUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudE1vZGVsVmFsdWUodGhpcy5kYXRhLCB0aGlzLmdldEZpZWxkVmFsdWUoZXZlbnQsIGZpZWxkVmFsdWUpLCB0aGlzLmdyb3VwKTtcclxuICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoXCJpbnB1dGZpZWxkLW9uQ2hhbmdlXCIsIHRoaXMuZGF0YS5PbkNoYW5nZSwgZXZlbnQsIGZpZWxkVmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uSXRlbUNsaWNrKGV2ZW50OiBhbnksIGZpZWxkVmFsdWU/OiBhbnkpIHtcclxuICAgIHRoaXMudHJpZ2dlckV2ZW50KFwiaW5wdXRmaWVsZC1vbkl0ZW1DbGlja1wiLCB0aGlzLmRhdGEuT25JdGVtQ2xpY2ssIGV2ZW50LCBmaWVsZFZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkljb25DbGljayhjbGlja0FjdGlvbkV4cHI6IHN0cmluZykge1xyXG4gICAgdGhpcy50cmlnZ2VyRXZlbnQoXCJpbnB1dGZpZWxkLW9uSWNvbkNsaWNrXCIsIGNsaWNrQWN0aW9uRXhwciwgbnVsbCwgdGhpcy5ncm91cC56TW9kZWxbdGhpcy5kYXRhLlZhbHVlXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UmVhZE9ubHlWYWx1ZSgpIHtcclxuICAgIGNvbnN0IHJlYWRPbmx5VmFsdWUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLlJlYWRPbmx5KTtcclxuICAgIGlmICh0eXBlb2YgcmVhZE9ubHlWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjb25zdCBjYWxsRnVuYyA9IHJlYWRPbmx5VmFsdWUuYmluZCh0aGlzLmdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAgIHJldHVybiBjYWxsRnVuYyh0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZWFkT25seVZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldElzUmVxdWlyZWRWYWx1ZSgpIHtcclxuICAgIGNvbnN0IElzUmVxdWlyZWRWYWx1ZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuSXNSZXF1aXJlZCk7XHJcbiAgICBpZiAodHlwZW9mIElzUmVxdWlyZWRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjb25zdCBjYWxsRnVuYyA9IElzUmVxdWlyZWRWYWx1ZS5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgcmV0dXJuIGNhbGxGdW5jKHRoaXMuZ3JvdXApO1xyXG5cclxuICAgIH1cclxuICAgIHJldHVybiBJc1JlcXVpcmVkVmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VmFsdWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRDb21wb25lbnRNb2RlbFZhbHVlKHRoaXMuZGF0YSwgdmFsdWUsIHRoaXMuZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEFkZE9uVmFsdWUoYWRkT25zPzogYW55KSB7XHJcbiAgICB0aGlzLnRyaWdnZXJDb250YWluZXJFdmVudC5lbWl0KHsgdHlwZTogJ3NldEFkZE9uVmFsdWUnLCBkYXRhOiBhZGRPbnMgfSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdHJpZ2dlckV2ZW50KHR5cGU6IHN0cmluZywgdGFyZ2V0OiBhbnksIGV2ZW50OiBhbnksIGZpZWxkVmFsdWU/OiBhbnkpIHtcclxuICAgIGlmICh0YXJnZXQpIHtcclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXHJcbiAgICAgICAgZXZlbnQsXHJcbiAgICAgICAgZGF0YTogeyB2YWx1ZTogdGhpcy5nZXRGaWVsZFZhbHVlKGV2ZW50LCBmaWVsZFZhbHVlKSwgZmllbGQ6IHRoaXMuZGF0YSwgY29tcDogdGhpcyB9XHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmllbGRWYWx1ZShldmVudDogYW55LCBmaWVsZFZhbHVlPzogYW55KSB7XHJcbiAgICBpZiAoZmllbGRWYWx1ZSA9PSBudWxsIHx8IGZpZWxkVmFsdWUgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBldmVudD8udmFsdWUgfHwgZXZlbnQ/LnRhcmdldD8udmFsdWVcclxuICAgIH1cclxuICAgIHJldHVybiBmaWVsZFZhbHVlO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRmaWVsZGJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dGZpZWxkYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBeUIsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFPMUMsMklBQTJJO0FBQzNJLE1BQU0sT0FBTyxjQUFlLFNBQVEsU0FBUztJQUUzQyxZQUFZLFdBQThCO1FBQ3hDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUZZLDBCQUFxQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBRy9GLENBQUM7SUFFTSxPQUFPLENBQUMsS0FBVSxFQUFFLFVBQWdCO1FBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQVUsRUFBRSxVQUFnQjtRQUM1QyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RyxJQUFJLENBQUMsWUFBWSxDQUFDLHVCQUF1QixFQUFFLElB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RSxVQUFVLENBQUMsQ0FBQztRQUNsRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OzRHQTFLVSxjQUFjO2dHQUFkLGNBQWMsd0lBSmYsRUFBRTs0RkFJRCxjQUFjO2tCQUwxQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxFQUFFO2lCQUNiO3dHQUlrQyxxQkFBcUI7c0JBQXJELE1BQU07dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE91dHB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCB9IGZyb20gXCJtbWhnbG9iYWwtemNvcmVcIjtcclxuaW1wb3J0IHsgRmllbGRCYXNlIH0gZnJvbSBcIi4vZmllbGRiYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgb2YsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGU6IGBgLFxyXG59KVxyXG5cclxuLy8gRm9yOiB6Y2hlY2tib3gsIHpjaGlwLCB6ZGF0ZXRpbWUsIHppbWcsIHppbnB1dC1jb250YWluZXIsIHpsYWJlbCwgem51bWVyaWMsIHpwb3N0c2VsZWN0aW5wdXQsIHpzZWxlY3RtdWx0aXBsZSwgenRleHQsIHp0ZXh0YXJlYSwgenVwbG9hZFxyXG5leHBvcnQgY2xhc3MgSW5wdXRGaWVsZEJhc2UgZXh0ZW5kcyBGaWVsZEJhc2Uge1xyXG4gIEBPdXRwdXQoJ3RyaWdnZXJDb250YWluZXJFdmVudCcpIHRyaWdnZXJDb250YWluZXJFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgY29uc3RydWN0b3IoY29tcFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlKSB7XHJcbiAgICBzdXBlcihjb21wU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DbGljayhldmVudDogYW55LCBmaWVsZFZhbHVlPzogYW55KSB7XHJcbiAgICB0aGlzLnRyaWdnZXJFdmVudChcImlucHV0ZmllbGQtb25DbGlja1wiLCB0aGlzLmRhdGEuT25DbGljaywgZXZlbnQsIGZpZWxkVmFsdWUgfHwgZXZlbnRbJ09uQ2xpY2snXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2VDQyhldmVudDogYW55LCBmaWVsZFZhbHVlPzogYW55KSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudE1vZGVsVmFsdWUodGhpcy5kYXRhLCB0aGlzLmdldEZpZWxkVmFsdWUoZXZlbnQsIGZpZWxkVmFsdWUpLCB0aGlzLmdyb3VwKTtcclxuICAgIHRoaXMudHJpZ2dlckV2ZW50KFwiaW5wdXRmaWVsZC1vbkNoYW5nZUNDXCIsIHRoaXMuZGF0YS5DQ09uQ2hhbmdlLCBldmVudCwgZmllbGRWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2UoZXZlbnQ6IGFueSwgZmllbGRWYWx1ZT86IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5TdWJUeXBlICYmIHRoaXMuZGF0YS5TdWJUeXBlID09PSAnenVkZicpIHtcclxuICAgICAgdGhpcy5oYW5kbGVadWRmQ2hhbmdlKGV2ZW50LCBmaWVsZFZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIFpDb21wb25lbnRIZWxwZXIuc2V0Q29tcG9uZW50TW9kZWxWYWx1ZSh0aGlzLmRhdGEsIHRoaXMuZ2V0RmllbGRWYWx1ZShldmVudCwgZmllbGRWYWx1ZSksIHRoaXMuZ3JvdXApO1xyXG4gICAgICB0aGlzLnRyaWdnZXJFdmVudChcImlucHV0ZmllbGQtb25DaGFuZ2VcIiwgdGhpcy5kYXRhLk9uQ2hhbmdlLCBldmVudCwgZmllbGRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25JdGVtQ2xpY2soZXZlbnQ6IGFueSwgZmllbGRWYWx1ZT86IGFueSkge1xyXG4gICAgdGhpcy50cmlnZ2VyRXZlbnQoXCJpbnB1dGZpZWxkLW9uSXRlbUNsaWNrXCIsIHRoaXMuZGF0YS5Pbkl0ZW1DbGljaywgZXZlbnQsIGZpZWxkVmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uSWNvbkNsaWNrKGNsaWNrQWN0aW9uRXhwcjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRyaWdnZXJFdmVudChcImlucHV0ZmllbGQtb25JY29uQ2xpY2tcIiwgY2xpY2tBY3Rpb25FeHByLCBudWxsLCB0aGlzLmdyb3VwLnpNb2RlbFt0aGlzLmRhdGEuVmFsdWVdKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSZWFkT25seVZhbHVlKCkge1xyXG4gICAgY29uc3QgcmVhZE9ubHlWYWx1ZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuUmVhZE9ubHkpO1xyXG4gICAgaWYgKHR5cGVvZiByZWFkT25seVZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gcmVhZE9ubHlWYWx1ZS5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgcmV0dXJuIGNhbGxGdW5jKHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlYWRPbmx5VmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXNSZXF1aXJlZFZhbHVlKCkge1xyXG4gICAgY29uc3QgSXNSZXF1aXJlZFZhbHVlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5Jc1JlcXVpcmVkKTtcclxuICAgIGlmICh0eXBlb2YgSXNSZXF1aXJlZFZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gSXNSZXF1aXJlZFZhbHVlLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICByZXR1cm4gY2FsbEZ1bmModGhpcy5ncm91cCk7XHJcblxyXG4gICAgfVxyXG4gICAgcmV0dXJuIElzUmVxdWlyZWRWYWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudE1vZGVsVmFsdWUodGhpcy5kYXRhLCB2YWx1ZSwgdGhpcy5ncm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0QWRkT25WYWx1ZShhZGRPbnM/OiBhbnkpIHtcclxuICAgIHRoaXMudHJpZ2dlckNvbnRhaW5lckV2ZW50LmVtaXQoeyB0eXBlOiAnc2V0QWRkT25WYWx1ZScsIGRhdGE6IGFkZE9ucyB9KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB0cmlnZ2VyRXZlbnQodHlwZTogc3RyaW5nLCB0YXJnZXQ6IGFueSwgZXZlbnQ6IGFueSwgZmllbGRWYWx1ZT86IGFueSkge1xyXG4gICAgaWYgKHRhcmdldCkge1xyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogdHlwZSxcclxuICAgICAgICB0YXJnZXQ6IHRhcmdldCxcclxuICAgICAgICBldmVudCxcclxuICAgICAgICBkYXRhOiB7IHZhbHVlOiB0aGlzLmdldEZpZWxkVmFsdWUoZXZlbnQsIGZpZWxkVmFsdWUpLCBmaWVsZDogdGhpcy5kYXRhLCBjb21wOiB0aGlzIH1cclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGaWVsZFZhbHVlKGV2ZW50OiBhbnksIGZpZWxkVmFsdWU/OiBhbnkpIHtcclxuICAgIGlmIChmaWVsZFZhbHVlID09IG51bGwgfHwgZmllbGRWYWx1ZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGV2ZW50Py52YWx1ZSB8fCBldmVudD8udGFyZ2V0Py52YWx1ZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpZWxkVmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVp1ZGZDaGFuZ2UoZXZlbnQ6IGFueSwgZmllbGRWYWx1ZT86IGFueSkge1xyXG4gICAgY29uc3QgenVkZkZpZWxkVmFsdWUgPSB0aGlzLmdldEZpZWxkVmFsdWUoZXZlbnQsIGZpZWxkVmFsdWUpO1xyXG4gICAgY29uc3QgZ2V0WnVkZlNjb3BlID0gWkNvbXBvbmVudEhlbHBlci5nZXRadWRmU2NvcGUodGhpcy5ncm91cCwgdGhpcy5kYXRhLlZhbHVlKTtcclxuXHJcbiAgICBpZiAoIWdldFp1ZGZTY29wZSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnenVkZiBzY29wZSBpcyBudWxsIGZvciBmaWVsZCBvbmNoYW5nZS4nKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRadWRmU2NvcGUuek1vZGVsW3RoaXMuZGF0YS5WYWx1ZV0gPSB6dWRmRmllbGRWYWx1ZTtcclxuICAgIG9mKHt9KS5waXBlKFxyXG4gICAgICB0YXAocmVzID0+IHtcclxuICAgICAgICBpZiAoZ2V0WnVkZlNjb3BlLmxpbmtlZENvbXBvbmVudCkge1xyXG4gICAgICAgICAgY29uc3QgbGlua2VkQ29tcG9uZW50U2NvcGUgPSBnZXRadWRmU2NvcGUubGlua2VkQ29tcG9uZW50O1xyXG4gICAgICAgICAgLy8gIzEgY2hlY2sgaXMgdGhlIG9uY2hhbmdlIGNvbXBvbmVudCBsaW5rZWQgdG8gb3RoZXIgY29tcG9uZW50LlxyXG4gICAgICAgICAgLy8gIzIgaWYgbGlua2VkIHRvIG90aGVyIGNvbXBvbmVudChsZXRzIGNhbGwgaXQgY2hpbGQgY29tcG9uZW50KSxcclxuICAgICAgICAgIC8vICAgIGJhc2Ugb24gdGhlIGxpbmtlZENvbXBvbmVudFNjb3BlIHZhbHVlLCBmaW5kIHRoZSBjaGlsZCBjb21wb25lbnQuXHJcbiAgICAgICAgICAvLyAjMyBrZWVwIHRoZSBvcmlnaW5hbCBTZWxlY3RPcHRpb25zIGluIHRoZSBjb21wb25lbnQuXHJcbiAgICAgICAgICAvLyAjNCBjbGVhciB0aGUgY2hpbGQgem1vZGVsIGFuZCBmaWx0ZXIgdGhlIGNoaWxkIGNvbXBvbmVudCBvcHRpb25zLlxyXG4gICAgICAgICAgbGlua2VkQ29tcG9uZW50U2NvcGUuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZGF0YVZhbHVlU2VnbWVudCA9IHRoaXMuZGF0YS5WYWx1ZS5zcGxpdCgnXycpO1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5saW5rZWRDb21wb25lbnQgPT0gZGF0YVZhbHVlU2VnbWVudFtkYXRhVmFsdWVTZWdtZW50Lmxlbmd0aCAtIDFdKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY2hpbGRDb21wb25lbnQgPSBaQ29tcG9uZW50SGVscGVyLmdldENvbXBvbmVudEJ5VmFsdWUodGhpcy5ncm91cCwgaXRlbS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxTZWxlY3RPcHRpb25zID0gY2hpbGRDb21wb25lbnQuZGF0YVsnb3JpZ2luYWxTZWxlY3RPcHRpb25zJ10gPz8gT2JqZWN0LmFzc2lnbihbXSwgY2hpbGRDb21wb25lbnQuZGF0YS5TZWxlY3RPcHRpb25zKTtcclxuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFNlbGVjdGlvbk9wdGlvbnMgPSBvcmlnaW5hbFNlbGVjdE9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24ucGFyZW50RXhwcmVzc2lvbiA9PSBmaWVsZFZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgICAgLy9jaGlsZENvbXBvbmVudC5jbGVhckRhdGEoKTsgLy91bmFibGUgdG8gdXNlIGNsZWFyRGF0YS4gbm90IGhhbmRsZWQgZm9yIHp1ZGYgdHlwZVxyXG4gICAgICAgICAgICAgIC8vIG1hbnVhbGwgcGF0Y2ggdGhlIGNvbXBvbmVudCBmb3JtY29udHJvbCB2YWx1ZVxyXG4gICAgICAgICAgICAgIGdldFp1ZGZTY29wZS56TW9kZWxbaXRlbS52YWx1ZV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHp1ZGZGb3JtID0gZ2V0WnVkZlNjb3BlLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudEZvcm1Db250cm9sID0genVkZkZvcm0uY29udHJvbHNbaXRlbS52YWx1ZV0gYXMgRm9ybUNvbnRyb2w7XHJcbiAgICAgICAgICAgICAgY29tcG9uZW50Rm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShnZXRadWRmU2NvcGUuek1vZGVsW2l0ZW0udmFsdWVdKTtcclxuXHJcbiAgICAgICAgICAgICAgY2hpbGRDb21wb25lbnQuZGF0YVsnb3JpZ2luYWxTZWxlY3RPcHRpb25zJ10gPSBvcmlnaW5hbFNlbGVjdE9wdGlvbnM7XHJcbiAgICAgICAgICAgICAgY2hpbGRDb21wb25lbnQuc2V0U2VsZWN0T3B0aW9uKGZpbHRlcmVkU2VsZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgdGFwKHJlcyA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YVsnQXV0b1BvcHVsYXRlQ2hpbGRGaWVsZFZhbHVlJ10pIHtcclxuICAgICAgICAgIC8vIFpVREYuIEF1dG8gUG9wdWxhdGUgY2hpbGQgZmllbGQgdmFsdWVcclxuICAgICAgICAgIGNvbnN0IGNoaWxkRmllbGRzID0gdGhpcy5kYXRhWydDaGlsZEZpZWxkcyddO1xyXG4gICAgICAgICAgaWYgKGNoaWxkRmllbGRzKSB7XHJcbiAgICAgICAgICAgIGxldCBzZWxlY3RlZERhdGFPcHRpb24gPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoZmllbGRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIC8vIGdldCB0aGUgc2VsZWN0ZWQgZGF0YSBmdWxsIGluZm8gXHJcbiAgICAgICAgICAgICAgY29uc3QgZGF0YU9wdGlvbiA9IHRoaXMuZ3JvdXAuekRhdGFbdGhpcy5kYXRhWydaRGF0YU9wdGlvbk5hbWUnXV07XHJcblxyXG4gICAgICAgICAgICAgIGlmIChkYXRhT3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhT3B0aW9uLmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi5JZCA9PT0gZmllbGRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRGF0YU9wdGlvbiA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHNldCB0byBhbGwgcmVsYXRlZCB6TW9kZSBvZiB0aGUgZHJvcGRvd25cclxuICAgICAgICAgICAgbGV0IGZnOiBGb3JtR3JvdXAgPSBnZXRadWRmU2NvcGUuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgICAgIGNoaWxkRmllbGRzLmZvckVhY2goY2hpbGRGaWVsZCA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gcmVtb3ZlIHN5bWJvbC4gXHJcbiAgICAgICAgICAgICAgbGV0IGNoaWxkRmllbGROYW1lID0gZW5jb2RlVVJJKGNoaWxkRmllbGQucmVwbGFjZSgvW15hLXowLTldL2dpLCBcIlwiKSk7XHJcbiAgICAgICAgICAgICAgY29uc3QgZmllbGRNb2RlbE5hbWUgPSB0aGlzLmRhdGEuTmFtZSArIGNoaWxkRmllbGROYW1lO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHpNb2RlbHMgPSBnZXRadWRmU2NvcGUuek1vZGVsO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBjaGlsZENvbXBvbmVudCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0Q29tcG9uZW50KHRoaXMuZ3JvdXAsICd0ZXh0XycgKyBmaWVsZE1vZGVsTmFtZSk7XHJcbiAgICAgICAgICAgICAgaWYgKGNoaWxkQ29tcG9uZW50WydkYXRhJ11bJ1JlYWRPbmx5J10gJiYgIWZpZWxkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNsZWFyIGNoaWxkIGZpZWxkIGlmIG9ubHkgcmVhZG9ubHkgaXMgdHJ1ZS4gXHJcbiAgICAgICAgICAgICAgICB6TW9kZWxzW2ZpZWxkTW9kZWxOYW1lXSA9ICFmaWVsZFZhbHVlID8gbnVsbCA6IHNlbGVjdGVkRGF0YU9wdGlvbiA/IHNlbGVjdGVkRGF0YU9wdGlvbltjaGlsZEZpZWxkTmFtZV0gOiBudWxsO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZERhdGFPcHRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgek1vZGVsc1tmaWVsZE1vZGVsTmFtZV0gPSBzZWxlY3RlZERhdGFPcHRpb25bY2hpbGRGaWVsZE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmZy5wYXRjaFZhbHVlKHpNb2RlbHMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBzd2l0Y2hNYXAocmVzID0+IHtcclxuICAgICAgICBjb25zdCBldmVudE5hbWUgPSAndHJpZ2dlclZhbGlkYXRpb24nO1xyXG4gICAgICAgIGlmICh0aGlzLmdyb3VwKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cFtldmVudE5hbWVdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyb3VwW2V2ZW50TmFtZV0odGhpcy5ncm91cCwgZXZlbnQsIGZpZWxkVmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgICB9KVxyXG4gICAgKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoXCJpbnB1dGZpZWxkLW9uQ2hhbmdlXCIsIHRoaXMuZGF0YS5PbkNoYW5nZSwgZXZlbnQsIGZpZWxkVmFsdWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|