@wemake4u/form-player-se 1.0.47 → 1.0.48
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/THIRD_PARTY_LICENSES.txt +6 -0
- package/esm2022/lib/builtIn/function.json +16 -0
- package/esm2022/lib/components/actionsCellRenderer/actionsCellRenderer.component.mjs +18 -14
- package/esm2022/lib/components/badge/badge.component.mjs +16 -0
- package/esm2022/lib/components/hostCellRenderer/hostCellRenderer.component.mjs +10 -8
- package/esm2022/lib/controls/factory.mjs +7 -1
- package/esm2022/lib/controls/navigator.mjs +4 -0
- package/esm2022/lib/controls/treerlist.mjs +4 -0
- package/esm2022/lib/dialog/dialog.component.mjs +10 -8
- package/esm2022/lib/directives/collapse.directive.mjs +3 -3
- package/esm2022/lib/directives/date.directive.mjs +139 -44
- package/esm2022/lib/directives/dialog.directive.mjs +7 -1
- package/esm2022/lib/directives/dropdown.directive.mjs +13 -8
- package/esm2022/lib/directives/filepicker.directive.mjs +34 -0
- package/esm2022/lib/directives/navigator.directive.mjs +76 -0
- package/esm2022/lib/directives/repeat.directive.mjs +8 -7
- package/esm2022/lib/directives/tab.badge.directive.mjs +95 -0
- package/esm2022/lib/directives/tabitem.directive.mjs +7 -4
- package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +50 -84
- package/esm2022/lib/dynamic-form/dynamic-form.component.mjs +11 -8
- package/esm2022/lib/pipes/times.mjs +14 -0
- package/esm2022/lib/services/builder.service.mjs +43 -89
- package/esm2022/lib/services/compute.service.mjs +7 -7
- package/esm2022/lib/services/dialog.service.mjs +35 -4
- package/esm2022/lib/services/disable.service.mjs +29 -10
- package/esm2022/lib/services/event.service.mjs +14 -12
- package/esm2022/lib/services/form.service.mjs +32 -46
- package/esm2022/lib/services/function.service.mjs +6 -2
- package/esm2022/lib/services/grid.service.mjs +20 -14
- package/esm2022/lib/services/lifetime.service.mjs +36 -0
- package/esm2022/lib/services/programmability.service.mjs +21 -17
- package/esm2022/lib/services/status.service.mjs +88 -25
- package/esm2022/lib/services/validation.service.mjs +7 -7
- package/esm2022/lib/utils/FormArrayEx.mjs +63 -0
- package/esm2022/lib/utils/window.mjs +3 -2
- package/fesm2022/wemake4u-form-player-se.mjs +889 -399
- package/fesm2022/wemake4u-form-player-se.mjs.map +1 -1
- package/lib/components/badge/badge.component.d.ts +13 -0
- package/lib/controls/navigator.d.ts +3 -0
- package/lib/controls/treerlist.d.ts +3 -0
- package/lib/dialog/dialog.component.d.ts +2 -2
- package/lib/directives/collapse.directive.d.ts +3 -2
- package/lib/directives/date.directive.d.ts +15 -4
- package/lib/directives/dropdown.directive.d.ts +2 -2
- package/lib/directives/filepicker.directive.d.ts +11 -0
- package/lib/directives/navigator.directive.d.ts +22 -0
- package/lib/directives/tab.badge.directive.d.ts +28 -0
- package/lib/directives/tabitem.directive.d.ts +2 -1
- package/lib/dynamic-fields/dynamic-fields.component.d.ts +9 -8
- package/lib/dynamic-form/dynamic-form.component.d.ts +1 -1
- package/lib/pipes/times.d.ts +7 -0
- package/lib/services/builder.service.d.ts +6 -10
- package/lib/services/compute.service.d.ts +2 -1
- package/lib/services/dialog.service.d.ts +10 -3
- package/lib/services/disable.service.d.ts +5 -1
- package/lib/services/event.service.d.ts +1 -1
- package/lib/services/form.service.d.ts +5 -2
- package/lib/services/function.service.d.ts +1 -0
- package/lib/services/grid.service.d.ts +1 -1
- package/lib/services/lifetime.service.d.ts +12 -0
- package/lib/services/programmability.service.d.ts +3 -1
- package/lib/services/status.service.d.ts +18 -4
- package/lib/services/validation.service.d.ts +2 -1
- package/lib/utils/FormArrayEx.d.ts +26 -0
- package/package.json +3 -2
|
@@ -30,13 +30,13 @@ export class ValidationService {
|
|
|
30
30
|
collection.set(control, { component, formGroup });
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
setupCollection(collection) {
|
|
33
|
+
setupCollection(collection, destroyRef) {
|
|
34
34
|
collection.forEach((componentValidation, control) => {
|
|
35
35
|
const component = componentValidation.component;
|
|
36
36
|
const currentGroup = componentValidation.formGroup;
|
|
37
37
|
const required = component?.validate?.required;
|
|
38
38
|
const rules = this.getRules(component);
|
|
39
|
-
const [requiredValidator, validators, asyncValidators, watching] = this.validateRules(currentGroup, component, required, rules);
|
|
39
|
+
const [requiredValidator, validators, asyncValidators, watching] = this.validateRules(currentGroup, component, required, rules, destroyRef);
|
|
40
40
|
control.setValidators(validators);
|
|
41
41
|
control.setAsyncValidators(asyncValidators);
|
|
42
42
|
if (requiredValidator)
|
|
@@ -67,7 +67,7 @@ export class ValidationService {
|
|
|
67
67
|
};
|
|
68
68
|
});
|
|
69
69
|
}
|
|
70
|
-
validateRules(formGroup, component, required, validations) {
|
|
70
|
+
validateRules(formGroup, component, required, validations, destroyRef) {
|
|
71
71
|
const skipValidation = this.resolveSkipValidation(component);
|
|
72
72
|
const validators = [];
|
|
73
73
|
const asyncValidators = [];
|
|
@@ -97,7 +97,7 @@ export class ValidationService {
|
|
|
97
97
|
});
|
|
98
98
|
}
|
|
99
99
|
const watching = (control) => {
|
|
100
|
-
this.watchForValidation(formGroup, skipValidation, control, component.key, callbacks, validations);
|
|
100
|
+
this.watchForValidation(formGroup, skipValidation, control, component.key, callbacks, validations, destroyRef);
|
|
101
101
|
};
|
|
102
102
|
return [requiredValidator, validators, asyncValidators, watching];
|
|
103
103
|
}
|
|
@@ -167,7 +167,7 @@ export class ValidationService {
|
|
|
167
167
|
const validationError = { error: true, message };
|
|
168
168
|
return validationError;
|
|
169
169
|
}
|
|
170
|
-
watchForValidation(formGroup, skipValidation, control, key, callbacks, validations) {
|
|
170
|
+
watchForValidation(formGroup, skipValidation, control, key, callbacks, validations, destroyRef) {
|
|
171
171
|
const expressions = [];
|
|
172
172
|
if (typeof skipValidation === "string" && this.programmability.isExpression(skipValidation)) {
|
|
173
173
|
expressions.push("=" + this.programmability.getExpression(skipValidation));
|
|
@@ -190,7 +190,7 @@ export class ValidationService {
|
|
|
190
190
|
callbacks.invoke();
|
|
191
191
|
control.updateValueAndValidity();
|
|
192
192
|
});
|
|
193
|
-
});
|
|
193
|
+
}, destroyRef);
|
|
194
194
|
}
|
|
195
195
|
logValidation = (component, rule, control, result) => {
|
|
196
196
|
if (this.programmability.verbose) {
|
|
@@ -254,4 +254,4 @@ export class ValidationService {
|
|
|
254
254
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ValidationService, decorators: [{
|
|
255
255
|
type: Injectable
|
|
256
256
|
}], ctorParameters: () => [{ type: i1.LanguageService }, { type: i2.ProgrammabilityService }] });
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUErRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6SCxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHN0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQUc5QyxNQUFNLE9BQU8saUJBQWlCO0lBR2xCO0lBQ0E7SUFGVixZQUNVLGVBQWdDLEVBQ2hDLGVBQXVDO1FBRHZDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7SUFDakQsQ0FBQztJQUVPLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFFbkMsSUFBSSxRQUFRLENBQUMsS0FBYztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksR0FBRyxFQUFxQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxlQUFlLENBQUMsVUFBZ0MsRUFBRSxPQUF3QixFQUFFLFNBQW9CLEVBQUUsU0FB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QU8sY0FBYyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sY0FBYyxDQUFDO1FBQ3hCLENBQUM7UUFDRCxJQUFJLE9BQU8sY0FBYyxLQUFLLFFBQVE7ZUFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxPQUFPLGNBQWMsQ0FBQztRQUN4QixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO3dHQTNUVSxpQkFBaUI7NEdBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUHJvZ3JhbW1hYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuLCBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBpc09ic2VydmFibGUsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIGNhdGNoRXJyb3IsIHRha2UgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdG9GZWVsYWJsZSB9IGZyb20gJy4uL3V0aWxzL2ZlZWxhYmxlJztcclxuaW1wb3J0IHsgQ2FsbGJhY2tSZWdpc3RyeSB9IGZyb20gJy4uL3V0aWxzL0NhbGxiYWNrUmVnaXN0cnknO1xyXG5cclxuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQHdlbWFrZTR1L2ludGVyYWN0JztcclxuaW1wb3J0IHsgVGV4dHMgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxlJztcclxuaW1wb3J0IHsgbG9jYWxpemUgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxpemUnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvblNlcnZpY2UgIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwcm9ncmFtbWFiaWxpdHk6IFByb2dyYW1tYWJpbGl0eVNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N1cHByZXNzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNldCBzdXBwcmVzcyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc3VwcHJlc3MgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBzdXBwcmVzcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zdXBwcmVzcztcclxuICB9XHJcblxyXG4gIGNyZWF0ZUNvbGxlY3Rpb24oKTogVmFsaWRhdGlvbkNvbGxlY3Rpb24ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8QWJzdHJhY3RDb250cm9sLCBDb21wb25lbnRDb250ZXh0PigpO1xyXG4gIH1cclxuXHJcbiAgYWRkVG9Db2xsZWN0aW9uKGNvbGxlY3Rpb246IFZhbGlkYXRpb25Db2xsZWN0aW9uLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGZvcm1Hcm91cDogRm9ybUdyb3VwLCBjb21wb25lbnQ6IGFueSkge1xyXG4gICAgaWYgKCFjb2xsZWN0aW9uLmhhcyhjb250cm9sKSAmJiB0aGlzLmNhbkFkZFRvQ29sbGVjdGlvbihjb21wb25lbnQpKSB7IFxyXG4gICAgICBjb2xsZWN0aW9uLnNldChjb250cm9sLCB7IGNvbXBvbmVudCwgZm9ybUdyb3VwIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0dXBDb2xsZWN0aW9uKGNvbGxlY3Rpb246IFZhbGlkYXRpb25Db2xsZWN0aW9uKSB7XHJcbiAgICBjb2xsZWN0aW9uLmZvckVhY2goKGNvbXBvbmVudFZhbGlkYXRpb24sIGNvbnRyb2wpID0+IHtcclxuICAgICAgY29uc3QgY29tcG9uZW50ID0gY29tcG9uZW50VmFsaWRhdGlvbi5jb21wb25lbnQ7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRHcm91cCA9IGNvbXBvbmVudFZhbGlkYXRpb24uZm9ybUdyb3VwO1xyXG4gICAgICBjb25zdCByZXF1aXJlZCA9IGNvbXBvbmVudD8udmFsaWRhdGU/LnJlcXVpcmVkO1xyXG4gICAgICBjb25zdCBydWxlcyA9IHRoaXMuZ2V0UnVsZXMoY29tcG9uZW50KTtcclxuICAgICAgY29uc3QgW3JlcXVpcmVkVmFsaWRhdG9yLCB2YWxpZGF0b3JzLCBhc3luY1ZhbGlkYXRvcnMsIHdhdGNoaW5nXSA9IHRoaXMudmFsaWRhdGVSdWxlcyhjdXJyZW50R3JvdXAsIGNvbXBvbmVudCwgcmVxdWlyZWQsIHJ1bGVzKTtcclxuICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xyXG4gICAgICBjb250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyhhc3luY1ZhbGlkYXRvcnMpO1xyXG4gICAgICBpZiAocmVxdWlyZWRWYWxpZGF0b3IpIHRoaXMucmVxdWlyZWRWYWxpZGF0b3JzLnNldChjb250cm9sLCByZXF1aXJlZFZhbGlkYXRvcik7XHJcbiAgICAgIHdhdGNoaW5nKGNvbnRyb2wpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZVJlcXVpcmVkKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgY3VycmVudFZhbHVlOiBhbnkpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBpZiAoIXRoaXMucmVxdWlyZWRWYWxpZGF0b3JzLmhhcyhjb250cm9sKSlcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCB2YWxpZGF0b3IgPSB0aGlzLnJlcXVpcmVkVmFsaWRhdG9ycy5nZXQoY29udHJvbCk7XHJcbiAgICByZXR1cm4gdmFsaWRhdG9yISh7IHZhbHVlOiBjdXJyZW50VmFsdWUgfSBhcyBhbnkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYW5BZGRUb0NvbGxlY3Rpb24oY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHJlcXVpcmVkID0gY29tcG9uZW50Py52YWxpZGF0ZT8ucmVxdWlyZWQ7XHJcbiAgICBjb25zdCBoYXNSdWxlcyA9IEFycmF5LmlzQXJyYXkoY29tcG9uZW50Py52YWxpZGF0aW9ucykgJiYgY29tcG9uZW50LnZhbGlkYXRpb25zLmxlbmd0aCA+IDA7XHJcbiAgICByZXR1cm4gcmVxdWlyZWQgPT09IHRydWUgfHwgaGFzUnVsZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJ1bGVzKGNvbXBvbmVudDogYW55KTogVmFsaWRhdGlvblJ1bGVbXSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29tcG9uZW50LnZhbGlkYXRpb25zKSkgcmV0dXJuIFtdO1xyXG4gICAgcmV0dXJuIGNvbXBvbmVudC52YWxpZGF0aW9ucz8ubWFwKChydWxlOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBleHByZXNzaW9uOiBydWxlLmV4cHJlc3Npb24sXHJcbiAgICAgICAgdHlwZTogcnVsZS50eXBlLFxyXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMubG9jYWxlKHJ1bGUsICdtZXNzYWdlJyksXHJcbiAgICAgICAgYXN5bmM6IHJ1bGUuYXN5bmMgPT09IHRydWVcclxuICAgICAgfSBhcyBWYWxpZGF0aW9uUnVsZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZVJ1bGVzKGZvcm1Hcm91cDogRm9ybUdyb3VwXHJcbiAgICAsIGNvbXBvbmVudDogYW55XHJcbiAgICAsIHJlcXVpcmVkPzogYm9vbGVhblxyXG4gICAgLCB2YWxpZGF0aW9ucz86IFZhbGlkYXRpb25SdWxlW10pOiBbVmFsaWRhdG9yRm4gfCBudWxsLCBWYWxpZGF0b3JGbltdLCBBc3luY1ZhbGlkYXRvckZuW10sIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHZvaWRdIHtcclxuXHJcbiAgICBjb25zdCBza2lwVmFsaWRhdGlvbiA9IHRoaXMucmVzb2x2ZVNraXBWYWxpZGF0aW9uKGNvbXBvbmVudCk7XHJcblxyXG4gICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG4gICAgY29uc3QgYXN5bmNWYWxpZGF0b3JzOiBBc3luY1ZhbGlkYXRvckZuW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCByZXF1aXJlZFZhbGlkYXRvciA9IHJlcXVpcmVkID09PSB0cnVlXHJcbiAgICAgID8gdGhpcy5jcmVhdGVSZXF1aXJlZFZhbGlkYXRvcihjb21wb25lbnQsIGZvcm1Hcm91cCwgc2tpcFZhbGlkYXRpb24pXHJcbiAgICAgIDogbnVsbDtcclxuXHJcbiAgICBpZiAocmVxdWlyZWRWYWxpZGF0b3IpIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKHJlcXVpcmVkVmFsaWRhdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjYWxsYmFja3MgPSBuZXcgQ2FsbGJhY2tSZWdpc3RyeSgpO1xyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbGlkYXRpb25zKSkge1xyXG4gICAgICB2YWxpZGF0aW9ucy5mb3JFYWNoKChpdGVtOiBWYWxpZGF0aW9uUnVsZSkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5wcm9ncmFtbWFiaWxpdHkuaXNFeHByZXNzaW9uKGl0ZW0uZXhwcmVzc2lvbikpXHJcbiAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGxvZ2dlcjogVmFsaWRhdGlvbkNhbGxiYWNrID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcmVzdWx0OiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCkgPT5cclxuICAgICAgICAgIHRoaXMubG9nVmFsaWRhdGlvbihjb21wb25lbnQsIGl0ZW0sIGNvbnRyb2wsIHJlc3VsdCk7XHJcblxyXG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09IFwidmFsaWRhdGVcIiB8fCBpdGVtLnR5cGUgPT09IFwiaW52YWxpZGF0ZVwiKSB7XHJcbiAgICAgICAgICBjb25zdCBwcmVkaWNhdGUgPSBpdGVtLnR5cGUgPT09IFwidmFsaWRhdGVcIlxyXG4gICAgICAgICAgICA/IChyZXN1bHQ6IGFueSkgPT4gcmVzdWx0XHJcbiAgICAgICAgICAgIDogKHJlc3VsdDogYW55KSA9PiAhcmVzdWx0O1xyXG5cclxuICAgICAgICAgIGlmIChpdGVtLmFzeW5jKSB7XHJcbiAgICAgICAgICAgIGFzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMuY3JlYXRlQXN5bmNWYWxpZGF0b3IoZm9ybUdyb3VwLCBza2lwVmFsaWRhdGlvbiwgaXRlbSwgY2FsbGJhY2tzLCBwcmVkaWNhdGUsIGxvZ2dlcikpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaCh0aGlzLmNyZWF0ZVZhbGlkYXRvcihmb3JtR3JvdXAsIHNraXBWYWxpZGF0aW9uLCBpdGVtLCBwcmVkaWNhdGUsIGxvZ2dlcikpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgd2F0Y2hpbmcgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogdm9pZCA9PiB7XHJcbiAgICAgIHRoaXMud2F0Y2hGb3JWYWxpZGF0aW9uKGZvcm1Hcm91cCwgc2tpcFZhbGlkYXRpb24sIGNvbnRyb2wsIGNvbXBvbmVudC5rZXksIGNhbGxiYWNrcywgdmFsaWRhdGlvbnMpO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gW3JlcXVpcmVkVmFsaWRhdG9yLCB2YWxpZGF0b3JzLCBhc3luY1ZhbGlkYXRvcnMsIHdhdGNoaW5nXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlVmFsaWRhdG9yKGZvcm1Hcm91cDogRm9ybUdyb3VwXHJcbiAgICAsIHNraXBWYWxpZGF0aW9uOiBzdHJpbmcgfCBib29sZWFuXHJcbiAgICAsIGl0ZW06IFZhbGlkYXRpb25SdWxlXHJcbiAgICAsIHByZWRpY2F0ZTogKHJlc3VsdDogYW55KSA9PiBib29sZWFuXHJcbiAgICAsIGNhbGxiYWNrOiBWYWxpZGF0aW9uQ2FsbGJhY2spOiBWYWxpZGF0b3JGbiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgICAgaWYgKHRoaXMuc3VwcHJlc3MgfHwgdGhpcy5zaG91bGRTa2lwVmFsaWRhdGlvbihmb3JtR3JvdXAsIHNraXBWYWxpZGF0aW9uKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlVW5hcnkoZm9ybUdyb3VwLCBpdGVtLmV4cHJlc3Npb24sIGNvbnRyb2wudmFsdWUpXHJcbiAgICAgIGlmIChpc09ic2VydmFibGUocmVzdWx0KSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIFwiW1ZhbGlkYXRvcl0gVW5leHBlY3RlZCBvYnNlcnZhYmxlIHJlc3VsdCBpbiBjcmVhdGVWYWxpZGF0b3JcIixcclxuICAgICAgICAgIHsgZXhwcmVzc2lvbjogaXRlbS5leHByZXNzaW9uLCB2YWx1ZTogY29udHJvbC52YWx1ZSwgcnVsZTogaXRlbSB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB2YWxpZGF0ZSA9IHByZWRpY2F0ZShyZXN1bHQpID8gbnVsbCA6IHRoaXMudmFsaWRhdGlvbkVycm9ycyhmb3JtR3JvdXAsIGl0ZW0pO1xyXG4gICAgICBjYWxsYmFjayhjb250cm9sLCB2YWxpZGF0ZSk7XHJcbiAgICAgIHJldHVybiB2YWxpZGF0ZTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUFzeW5jVmFsaWRhdG9yKGZvcm1Hcm91cDogRm9ybUdyb3VwXHJcbiAgICAsIHNraXBWYWxpZGF0aW9uOiBzdHJpbmcgfCBib29sZWFuXHJcbiAgICAsIGl0ZW06IFZhbGlkYXRpb25SdWxlXHJcbiAgICAsIGNhbGxiYWNrczogQ2FsbGJhY2tSZWdpc3RyeVxyXG4gICAgLCBwcmVkaWNhdGU6IChyZXN1bHQ6IGFueSkgPT4gYm9vbGVhblxyXG4gICAgLCBjYWxsYmFjazogVmFsaWRhdGlvbkNhbGxiYWNrKTogQXN5bmNWYWxpZGF0b3JGbiB7XHJcblxyXG4gICAgY29uc3QgdW5zZXRTdGF0ZSA9ICgpID0+ICh7IHZhbHVlOiBTeW1ib2woJ3Vuc2V0JyksIHJlc3VsdDogbnVsbCB9KTtcclxuXHJcbiAgICBsZXQgc3RhdGUgPSB1bnNldFN0YXRlKCk7XHJcblxyXG4gICAgY2FsbGJhY2tzLnJlZ2lzdGVyKCgpID0+IHN0YXRlID0gdW5zZXRTdGF0ZSgpKTtcclxuXHJcbiAgICBjb25zdCBnZXRSZXN1bHQgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogYW55ID0+IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlKGZvcm1Hcm91cCwgaXRlbS5leHByZXNzaW9uLCB7XHJcbiAgICAgIGNhY2hlYWJsZTogZmFsc2UsXHJcbiAgICAgIGV4dGVuZENvbnRleHQ6ICgpID0+IHsgcmV0dXJuIHsgXCI/XCI6IGNvbnRyb2wudmFsdWUgfSB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBjb21wdXRlT25jZSA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBhbnkgPT4ge1xyXG4gICAgICBjb25zdCB2ID0gY29udHJvbC52YWx1ZTtcclxuICAgICAgaWYgKHN0YXRlLnZhbHVlICE9PSB2KSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGdldFJlc3VsdChjb250cm9sKTtcclxuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcclxuICAgICAgICAgIHJlc3VsdCA9IChyZXN1bHQgYXMgT2JzZXJ2YWJsZTxhbnk+KS5waXBlKFxyXG4gICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICBtYXAoKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0ZSA9IHByZWRpY2F0ZSh2YWx1ZSkgPyBudWxsIDogdGhpcy52YWxpZGF0aW9uRXJyb3JzKGZvcm1Hcm91cCwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgY2FsbGJhY2soY29udHJvbCwgdmFsaWRhdGUpO1xyXG4gICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiW0FzeW5jVmFsaWRhdG9yXSBFdmFsdWF0aW9uIGVycm9yXCIsIHsgZXhwcmVzc2lvbjogaXRlbS5leHByZXNzaW9uLCBlcnIgfSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVsbE9ic2VydmVyO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RhdGUgPSB7IHZhbHVlOiB2LCByZXN1bHQ6IHJlc3VsdCB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHQ7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnN1cHByZXNzIHx8IHRoaXMuc2hvdWxkU2tpcFZhbGlkYXRpb24oZm9ybUdyb3VwLCBza2lwVmFsaWRhdGlvbikpIHJldHVybiB0aGlzLm51bGxPYnNlcnZlcjtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gY29tcHV0ZU9uY2UoY29udHJvbCk7ICAgICAgXHJcbiAgICAgIGlmICghaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBcIltBc3luY1ZhbGlkYXRvcl0gRXhwZWN0ZWQgb2JzZXJ2YWJsZSBidXQgZ290IG5vbi1vYnNlcnZhYmxlIHJlc3VsdFwiLFxyXG4gICAgICAgICAgeyBleHByZXNzaW9uOiBpdGVtLmV4cHJlc3Npb24sIHZhbHVlOiBjb250cm9sLnZhbHVlLCByZXN1bHQsIHJ1bGU6IGl0ZW0gfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubnVsbE9ic2VydmVyO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXN1bHQgYXMgT2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlUmVxdWlyZWRWYWxpZGF0b3IoY29tcG9uZW50OiBhbnlcclxuICAgICwgZm9ybUdyb3VwOiBGb3JtR3JvdXBcclxuICAgICwgc2tpcFZhbGlkYXRpb246IHN0cmluZyB8IGJvb2xlYW4pOiBWYWxpZGF0b3JGblxyXG4gIHtcclxuICAgIGNvbnN0IGZuID0gKHRoaXMuaXNUcnVlVmFsaWRhdG9yKGNvbXBvbmVudClcclxuICAgICAgPyB0aGlzLnJlcXVpcmVkVHJ1ZVZhbGlkYXRvclxyXG4gICAgICA6IHRoaXMucmVxdWlyZWRWYWxpZGF0b3IpLmJpbmQodGhpcyk7XHJcblxyXG4gICAgcmV0dXJuIChjb250cm9sKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnN1cHByZXNzIHx8IHRoaXMuc2hvdWxkU2tpcFZhbGlkYXRpb24oZm9ybUdyb3VwLCBza2lwVmFsaWRhdGlvbikpIHJldHVybiBudWxsO1xyXG4gICAgICByZXR1cm4gZm4oY29udHJvbCk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0aW9uRXJyb3JzKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBpdGVtOiBWYWxpZGF0aW9uUnVsZSkge1xyXG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlU3RyaW5nKGZvcm1Hcm91cCwgaXRlbS5tZXNzYWdlKTtcclxuICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IHsgZXJyb3I6IHRydWUsIG1lc3NhZ2UgfTtcclxuICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3I7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdhdGNoRm9yVmFsaWRhdGlvbihmb3JtR3JvdXA6IEZvcm1Hcm91cFxyXG4gICAgLCBza2lwVmFsaWRhdGlvbjogYm9vbGVhbiB8IHN0cmluZ1xyXG4gICAgLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2xcclxuICAgICwga2V5OiBzdHJpbmdcclxuICAgICwgY2FsbGJhY2tzOiBDYWxsYmFja1JlZ2lzdHJ5XHJcbiAgICAsIHZhbGlkYXRpb25zPzogVmFsaWRhdGlvblJ1bGVbXSk6IHZvaWQge1xyXG5cclxuICAgIGNvbnN0IGV4cHJlc3Npb25zOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGlmICh0eXBlb2Ygc2tpcFZhbGlkYXRpb24gPT09IFwic3RyaW5nXCIgJiYgdGhpcy5wcm9ncmFtbWFiaWxpdHkuaXNFeHByZXNzaW9uKHNraXBWYWxpZGF0aW9uKSkge1xyXG4gICAgICBleHByZXNzaW9ucy5wdXNoKFwiPVwiICsgdGhpcy5wcm9ncmFtbWFiaWxpdHkuZ2V0RXhwcmVzc2lvbihza2lwVmFsaWRhdGlvbikpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWxpZGF0aW9ucykpIHtcclxuICAgICAgY29uc3QgcnVsZUV4cHJlc3Npb25zID0gdmFsaWRhdGlvbnNcclxuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuaXNFeHByZXNzaW9uKGl0ZW0uZXhwcmVzc2lvbikpXHJcbiAgICAgICAgLm1hcChpdGVtID0+IFwiPVwiICsgdGhpcy5wcm9ncmFtbWFiaWxpdHkuZ2V0RXhwcmVzc2lvbihpdGVtLmV4cHJlc3Npb24pKTtcclxuICAgICAgZXhwcmVzc2lvbnMucHVzaCguLi5ydWxlRXhwcmVzc2lvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChleHByZXNzaW9ucy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBmZWVsYWJsZSA9IHRvRmVlbGFibGUoZXhwcmVzc2lvbnMpO1xyXG5cclxuICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmdldERlcGVuZGVuY2llcyhmb3JtR3JvdXAsIGZlZWxhYmxlKVxyXG4gICAgICAuZmlsdGVyKGRlcCA9PiBkZXAgIT09IGtleSk7XHJcblxyXG4gICAgaWYgKGRlcGVuZGVuY2llcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICB0aGlzLnByb2dyYW1tYWJpbGl0eS53YXRjaChmb3JtR3JvdXAsIGRlcGVuZGVuY2llcywgKCkgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjYWxsYmFja3MuaW52b2tlKCk7XHJcbiAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2dWYWxpZGF0aW9uID0gKGNvbXBvbmVudDogYW55LCBydWxlOiBWYWxpZGF0aW9uUnVsZSwgY29udHJvbDogQWJzdHJhY3RDb250cm9sLCByZXN1bHQ6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsKSA9PiB7XHJcbiAgICBpZiAodGhpcy5wcm9ncmFtbWFiaWxpdHkudmVyYm9zZSkge1xyXG4gICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXCJbVmFsaWRhdGlvbl0gRmFpbGVkXCIsIHsgY29udHJvbCwgY29tcG9uZW50LCBydWxlLCByZXN1bHQgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJbVmFsaWRhdGlvbl0gU3VjY2Vzc1wiLCB7IGNvbnRyb2wsIGNvbXBvbmVudCwgcnVsZSwgcmVzdWx0IH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IG51bGxPYnNlcnZlciA9IG9mKG51bGwpO1xyXG5cclxuICBwcml2YXRlIGdldCBsYW5ndWFnZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLmdldExhbmd1YWdlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvY2FsZShjb21wb25lbnQ6IGFueSwga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGxvY2FsaXplKHRoaXMubGFuZ3VhZ2UsIGNvbXBvbmVudCwga2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVxdWlyZWRWYWxpZGF0b3JzID0gbmV3IFdlYWtNYXA8QWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3JGbj4oKTtcclxuXHJcbiAgcHJpdmF0ZSByZXF1aXJlZFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBpZiAoVmFsaWRhdG9ycy5yZXF1aXJlZChjb250cm9sKSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6IHRoaXMuZ2V0UmVxdWlyZWRNZXNzYWdlKCkgfSAgICBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVxdWlyZWRUcnVlVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGlmIChWYWxpZGF0b3JzLnJlcXVpcmVkVHJ1ZShjb250cm9sKSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6IHRoaXMuZ2V0UmVxdWlyZWRNZXNzYWdlKCkgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1RydWVWYWxpZGF0b3IoY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBjb21wb25lbnQ/LnR5cGUgPT09ICdjaGVja2JveCc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlcXVpcmVkTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubG9jYWxlKFRleHRzLCAnUmVxdWlyZWRGaWVsZCcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG91bGRTa2lwVmFsaWRhdGlvbihmb3JtR3JvdXA6IEZvcm1Hcm91cCwgc2tpcFZhbGlkYXRpb246IHN0cmluZyB8IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGlmICh0eXBlb2Ygc2tpcFZhbGlkYXRpb24gPT09ICdib29sZWFuJykge1xyXG4gICAgICByZXR1cm4gc2tpcFZhbGlkYXRpb247XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHNraXBWYWxpZGF0aW9uID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVCb29sZWFuKGZvcm1Hcm91cCwgc2tpcFZhbGlkYXRpb24pID8/IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNvbHZlU2tpcFZhbGlkYXRpb24oY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHwgc3RyaW5nIHtcclxuICAgIGNvbnN0IHNraXBWYWxpZGF0aW9uID0gY29tcG9uZW50LnNraXBWYWxpZGF0aW9uO1xyXG4gICAgaWYgKHR5cGVvZiBza2lwVmFsaWRhdGlvbiA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIHJldHVybiBza2lwVmFsaWRhdGlvbjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygc2tpcFZhbGlkYXRpb24gPT09ICdzdHJpbmcnXHJcbiAgICAgICYmIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmlzRXhwcmVzc2lvbihza2lwVmFsaWRhdGlvbikpIHtcclxuICAgICAgcmV0dXJuIHNraXBWYWxpZGF0aW9uO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxudHlwZSBWYWxpZGF0aW9uQ2FsbGJhY2sgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCByZXN1bHQ6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsKSA9PiB2b2lkO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRDb250ZXh0IHtcclxuICBjb21wb25lbnQ6IGFueTtcclxuICBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uUnVsZSB7XHJcbiAgZXhwcmVzc2lvbjogc3RyaW5nO1xyXG4gIHR5cGU6IFwidmFsaWRhdGVcIiB8IFwiaW52YWxpZGF0ZVwiO1xyXG4gIG1lc3NhZ2U6IHN0cmluZyxcclxuICBhc3luYzogYm9vbGVhblxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uQ29sbGVjdGlvbiA9IE1hcDxBYnN0cmFjdENvbnRyb2wsIENvbXBvbmVudENvbnRleHQ+O1xyXG4iXX0=
|
|
257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkQsT0FBTyxFQUErRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6SCxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHN0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQUc5QyxNQUFNLE9BQU8saUJBQWlCO0lBR2xCO0lBQ0E7SUFGVixZQUNVLGVBQWdDLEVBQ2hDLGVBQXVDO1FBRHZDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7SUFDakQsQ0FBQztJQUVPLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFFbkMsSUFBSSxRQUFRLENBQUMsS0FBYztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksR0FBRyxFQUFxQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxlQUFlLENBQUMsVUFBZ0MsRUFBRSxPQUF3QixFQUFFLFNBQW9CLEVBQUUsU0FB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QixDQUFDLFNBQWM7UUFDMUMsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQztRQUNoRCxJQUFJLE9BQU8sY0FBYyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sY0FBYyxDQUFDO1FBQ3hCLENBQUM7UUFDRCxJQUFJLE9BQU8sY0FBYyxLQUFLLFFBQVE7ZUFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxPQUFPLGNBQWMsQ0FBQztRQUN4QixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO3dHQTVUVSxpQkFBaUI7NEdBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc3Ryb3lSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUHJvZ3JhbW1hYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuLCBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBpc09ic2VydmFibGUsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIGNhdGNoRXJyb3IsIHRha2UgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdG9GZWVsYWJsZSB9IGZyb20gJy4uL3V0aWxzL2ZlZWxhYmxlJztcclxuaW1wb3J0IHsgQ2FsbGJhY2tSZWdpc3RyeSB9IGZyb20gJy4uL3V0aWxzL0NhbGxiYWNrUmVnaXN0cnknO1xyXG5cclxuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQHdlbWFrZTR1L2ludGVyYWN0JztcclxuaW1wb3J0IHsgVGV4dHMgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxlJztcclxuaW1wb3J0IHsgbG9jYWxpemUgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxpemUnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvblNlcnZpY2UgIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwcm9ncmFtbWFiaWxpdHk6IFByb2dyYW1tYWJpbGl0eVNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N1cHByZXNzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNldCBzdXBwcmVzcyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc3VwcHJlc3MgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBzdXBwcmVzcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zdXBwcmVzcztcclxuICB9XHJcblxyXG4gIGNyZWF0ZUNvbGxlY3Rpb24oKTogVmFsaWRhdGlvbkNvbGxlY3Rpb24ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8QWJzdHJhY3RDb250cm9sLCBDb21wb25lbnRDb250ZXh0PigpO1xyXG4gIH1cclxuXHJcbiAgYWRkVG9Db2xsZWN0aW9uKGNvbGxlY3Rpb246IFZhbGlkYXRpb25Db2xsZWN0aW9uLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGZvcm1Hcm91cDogRm9ybUdyb3VwLCBjb21wb25lbnQ6IGFueSkge1xyXG4gICAgaWYgKCFjb2xsZWN0aW9uLmhhcyhjb250cm9sKSAmJiB0aGlzLmNhbkFkZFRvQ29sbGVjdGlvbihjb21wb25lbnQpKSB7IFxyXG4gICAgICBjb2xsZWN0aW9uLnNldChjb250cm9sLCB7IGNvbXBvbmVudCwgZm9ybUdyb3VwIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0dXBDb2xsZWN0aW9uKGNvbGxlY3Rpb246IFZhbGlkYXRpb25Db2xsZWN0aW9uLCBkZXN0cm95UmVmPzogRGVzdHJveVJlZikge1xyXG4gICAgY29sbGVjdGlvbi5mb3JFYWNoKChjb21wb25lbnRWYWxpZGF0aW9uLCBjb250cm9sKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbXBvbmVudFZhbGlkYXRpb24uY29tcG9uZW50O1xyXG4gICAgICBjb25zdCBjdXJyZW50R3JvdXAgPSBjb21wb25lbnRWYWxpZGF0aW9uLmZvcm1Hcm91cDtcclxuICAgICAgY29uc3QgcmVxdWlyZWQgPSBjb21wb25lbnQ/LnZhbGlkYXRlPy5yZXF1aXJlZDtcclxuICAgICAgY29uc3QgcnVsZXMgPSB0aGlzLmdldFJ1bGVzKGNvbXBvbmVudCk7XHJcbiAgICAgIGNvbnN0IFtyZXF1aXJlZFZhbGlkYXRvciwgdmFsaWRhdG9ycywgYXN5bmNWYWxpZGF0b3JzLCB3YXRjaGluZ10gPSB0aGlzLnZhbGlkYXRlUnVsZXMoY3VycmVudEdyb3VwLCBjb21wb25lbnQsIHJlcXVpcmVkLCBydWxlcywgZGVzdHJveVJlZik7XHJcbiAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcclxuICAgICAgY29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMoYXN5bmNWYWxpZGF0b3JzKTtcclxuICAgICAgaWYgKHJlcXVpcmVkVmFsaWRhdG9yKSB0aGlzLnJlcXVpcmVkVmFsaWRhdG9ycy5zZXQoY29udHJvbCwgcmVxdWlyZWRWYWxpZGF0b3IpO1xyXG4gICAgICB3YXRjaGluZyhjb250cm9sKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVSZXF1aXJlZChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGN1cnJlbnRWYWx1ZTogYW55KTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLnJlcXVpcmVkVmFsaWRhdG9ycy5oYXMoY29udHJvbCkpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgdmFsaWRhdG9yID0gdGhpcy5yZXF1aXJlZFZhbGlkYXRvcnMuZ2V0KGNvbnRyb2wpO1xyXG4gICAgcmV0dXJuIHZhbGlkYXRvciEoeyB2YWx1ZTogY3VycmVudFZhbHVlIH0gYXMgYW55KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FuQWRkVG9Db2xsZWN0aW9uKGNvbXBvbmVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCByZXF1aXJlZCA9IGNvbXBvbmVudD8udmFsaWRhdGU/LnJlcXVpcmVkO1xyXG4gICAgY29uc3QgaGFzUnVsZXMgPSBBcnJheS5pc0FycmF5KGNvbXBvbmVudD8udmFsaWRhdGlvbnMpICYmIGNvbXBvbmVudC52YWxpZGF0aW9ucy5sZW5ndGggPiAwO1xyXG4gICAgcmV0dXJuIHJlcXVpcmVkID09PSB0cnVlIHx8IGhhc1J1bGVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSdWxlcyhjb21wb25lbnQ6IGFueSk6IFZhbGlkYXRpb25SdWxlW10ge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbXBvbmVudC52YWxpZGF0aW9ucykpIHJldHVybiBbXTtcclxuICAgIHJldHVybiBjb21wb25lbnQudmFsaWRhdGlvbnM/Lm1hcCgocnVsZTogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZXhwcmVzc2lvbjogcnVsZS5leHByZXNzaW9uLFxyXG4gICAgICAgIHR5cGU6IHJ1bGUudHlwZSxcclxuICAgICAgICBtZXNzYWdlOiB0aGlzLmxvY2FsZShydWxlLCAnbWVzc2FnZScpLFxyXG4gICAgICAgIGFzeW5jOiBydWxlLmFzeW5jID09PSB0cnVlXHJcbiAgICAgIH0gYXMgVmFsaWRhdGlvblJ1bGU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGVSdWxlcyhmb3JtR3JvdXA6IEZvcm1Hcm91cFxyXG4gICAgLCBjb21wb25lbnQ6IGFueVxyXG4gICAgLCByZXF1aXJlZD86IGJvb2xlYW5cclxuICAgICwgdmFsaWRhdGlvbnM/OiBWYWxpZGF0aW9uUnVsZVtdXHJcbiAgICAsIGRlc3Ryb3lSZWY/OiBEZXN0cm95UmVmKTogW1ZhbGlkYXRvckZuIHwgbnVsbCwgVmFsaWRhdG9yRm5bXSwgQXN5bmNWYWxpZGF0b3JGbltdLCAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB2b2lkXSB7XHJcblxyXG4gICAgY29uc3Qgc2tpcFZhbGlkYXRpb24gPSB0aGlzLnJlc29sdmVTa2lwVmFsaWRhdGlvbihjb21wb25lbnQpO1xyXG5cclxuICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcclxuICAgIGNvbnN0IGFzeW5jVmFsaWRhdG9yczogQXN5bmNWYWxpZGF0b3JGbltdID0gW107XHJcblxyXG4gICAgY29uc3QgcmVxdWlyZWRWYWxpZGF0b3IgPSByZXF1aXJlZCA9PT0gdHJ1ZVxyXG4gICAgICA/IHRoaXMuY3JlYXRlUmVxdWlyZWRWYWxpZGF0b3IoY29tcG9uZW50LCBmb3JtR3JvdXAsIHNraXBWYWxpZGF0aW9uKVxyXG4gICAgICA6IG51bGw7XHJcblxyXG4gICAgaWYgKHJlcXVpcmVkVmFsaWRhdG9yKSB7XHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChyZXF1aXJlZFZhbGlkYXRvcik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2FsbGJhY2tzID0gbmV3IENhbGxiYWNrUmVnaXN0cnkoKTtcclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWxpZGF0aW9ucykpIHtcclxuICAgICAgdmFsaWRhdGlvbnMuZm9yRWFjaCgoaXRlbTogVmFsaWRhdGlvblJ1bGUpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMucHJvZ3JhbW1hYmlsaXR5LmlzRXhwcmVzc2lvbihpdGVtLmV4cHJlc3Npb24pKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBsb2dnZXI6IFZhbGlkYXRpb25DYWxsYmFjayA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHJlc3VsdDogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwpID0+XHJcbiAgICAgICAgICB0aGlzLmxvZ1ZhbGlkYXRpb24oY29tcG9uZW50LCBpdGVtLCBjb250cm9sLCByZXN1bHQpO1xyXG5cclxuICAgICAgICBpZiAoaXRlbS50eXBlID09PSBcInZhbGlkYXRlXCIgfHwgaXRlbS50eXBlID09PSBcImludmFsaWRhdGVcIikge1xyXG4gICAgICAgICAgY29uc3QgcHJlZGljYXRlID0gaXRlbS50eXBlID09PSBcInZhbGlkYXRlXCJcclxuICAgICAgICAgICAgPyAocmVzdWx0OiBhbnkpID0+IHJlc3VsdFxyXG4gICAgICAgICAgICA6IChyZXN1bHQ6IGFueSkgPT4gIXJlc3VsdDtcclxuXHJcbiAgICAgICAgICBpZiAoaXRlbS5hc3luYykge1xyXG4gICAgICAgICAgICBhc3luY1ZhbGlkYXRvcnMucHVzaCh0aGlzLmNyZWF0ZUFzeW5jVmFsaWRhdG9yKGZvcm1Hcm91cCwgc2tpcFZhbGlkYXRpb24sIGl0ZW0sIGNhbGxiYWNrcywgcHJlZGljYXRlLCBsb2dnZXIpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2godGhpcy5jcmVhdGVWYWxpZGF0b3IoZm9ybUdyb3VwLCBza2lwVmFsaWRhdGlvbiwgaXRlbSwgcHJlZGljYXRlLCBsb2dnZXIpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHdhdGNoaW5nID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHZvaWQgPT4ge1xyXG4gICAgICB0aGlzLndhdGNoRm9yVmFsaWRhdGlvbihmb3JtR3JvdXAsIHNraXBWYWxpZGF0aW9uLCBjb250cm9sLCBjb21wb25lbnQua2V5LCBjYWxsYmFja3MsIHZhbGlkYXRpb25zLCBkZXN0cm95UmVmKTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIFtyZXF1aXJlZFZhbGlkYXRvciwgdmFsaWRhdG9ycywgYXN5bmNWYWxpZGF0b3JzLCB3YXRjaGluZ107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVZhbGlkYXRvcihmb3JtR3JvdXA6IEZvcm1Hcm91cFxyXG4gICAgLCBza2lwVmFsaWRhdGlvbjogc3RyaW5nIHwgYm9vbGVhblxyXG4gICAgLCBpdGVtOiBWYWxpZGF0aW9uUnVsZVxyXG4gICAgLCBwcmVkaWNhdGU6IChyZXN1bHQ6IGFueSkgPT4gYm9vbGVhblxyXG4gICAgLCBjYWxsYmFjazogVmFsaWRhdGlvbkNhbGxiYWNrKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnN1cHByZXNzIHx8IHRoaXMuc2hvdWxkU2tpcFZhbGlkYXRpb24oZm9ybUdyb3VwLCBza2lwVmFsaWRhdGlvbikpIHJldHVybiBudWxsO1xyXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZVVuYXJ5KGZvcm1Hcm91cCwgaXRlbS5leHByZXNzaW9uLCBjb250cm9sLnZhbHVlKVxyXG4gICAgICBpZiAoaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBcIltWYWxpZGF0b3JdIFVuZXhwZWN0ZWQgb2JzZXJ2YWJsZSByZXN1bHQgaW4gY3JlYXRlVmFsaWRhdG9yXCIsXHJcbiAgICAgICAgICB7IGV4cHJlc3Npb246IGl0ZW0uZXhwcmVzc2lvbiwgdmFsdWU6IGNvbnRyb2wudmFsdWUsIHJ1bGU6IGl0ZW0gfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdmFsaWRhdGUgPSBwcmVkaWNhdGUocmVzdWx0KSA/IG51bGwgOiB0aGlzLnZhbGlkYXRpb25FcnJvcnMoZm9ybUdyb3VwLCBpdGVtKTtcclxuICAgICAgY2FsbGJhY2soY29udHJvbCwgdmFsaWRhdGUpO1xyXG4gICAgICByZXR1cm4gdmFsaWRhdGU7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVBc3luY1ZhbGlkYXRvcihmb3JtR3JvdXA6IEZvcm1Hcm91cFxyXG4gICAgLCBza2lwVmFsaWRhdGlvbjogc3RyaW5nIHwgYm9vbGVhblxyXG4gICAgLCBpdGVtOiBWYWxpZGF0aW9uUnVsZVxyXG4gICAgLCBjYWxsYmFja3M6IENhbGxiYWNrUmVnaXN0cnlcclxuICAgICwgcHJlZGljYXRlOiAocmVzdWx0OiBhbnkpID0+IGJvb2xlYW5cclxuICAgICwgY2FsbGJhY2s6IFZhbGlkYXRpb25DYWxsYmFjayk6IEFzeW5jVmFsaWRhdG9yRm4ge1xyXG5cclxuICAgIGNvbnN0IHVuc2V0U3RhdGUgPSAoKSA9PiAoeyB2YWx1ZTogU3ltYm9sKCd1bnNldCcpLCByZXN1bHQ6IG51bGwgfSk7XHJcblxyXG4gICAgbGV0IHN0YXRlID0gdW5zZXRTdGF0ZSgpO1xyXG5cclxuICAgIGNhbGxiYWNrcy5yZWdpc3RlcigoKSA9PiBzdGF0ZSA9IHVuc2V0U3RhdGUoKSk7XHJcblxyXG4gICAgY29uc3QgZ2V0UmVzdWx0ID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGFueSA9PiB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZShmb3JtR3JvdXAsIGl0ZW0uZXhwcmVzc2lvbiwge1xyXG4gICAgICBjYWNoZWFibGU6IGZhbHNlLFxyXG4gICAgICBleHRlbmRDb250ZXh0OiAoKSA9PiB7IHJldHVybiB7IFwiP1wiOiBjb250cm9sLnZhbHVlIH0gfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgY29tcHV0ZU9uY2UgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogYW55ID0+IHtcclxuICAgICAgY29uc3QgdiA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICAgIGlmIChzdGF0ZS52YWx1ZSAhPT0gdikge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBnZXRSZXN1bHQoY29udHJvbCk7XHJcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShyZXN1bHQpKSB7XHJcbiAgICAgICAgICByZXN1bHQgPSAocmVzdWx0IGFzIE9ic2VydmFibGU8YW55PikucGlwZShcclxuICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgbWFwKCh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGUgPSBwcmVkaWNhdGUodmFsdWUpID8gbnVsbCA6IHRoaXMudmFsaWRhdGlvbkVycm9ycyhmb3JtR3JvdXAsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgIGNhbGxiYWNrKGNvbnRyb2wsIHZhbGlkYXRlKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGU7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIltBc3luY1ZhbGlkYXRvcl0gRXZhbHVhdGlvbiBlcnJvclwiLCB7IGV4cHJlc3Npb246IGl0ZW0uZXhwcmVzc2lvbiwgZXJyIH0pO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLm51bGxPYnNlcnZlcjtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0YXRlID0geyB2YWx1ZTogdiwgcmVzdWx0OiByZXN1bHQgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gc3RhdGUucmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zdXBwcmVzcyB8fCB0aGlzLnNob3VsZFNraXBWYWxpZGF0aW9uKGZvcm1Hcm91cCwgc2tpcFZhbGlkYXRpb24pKSByZXR1cm4gdGhpcy5udWxsT2JzZXJ2ZXI7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbXB1dGVPbmNlKGNvbnRyb2wpOyAgICAgIFxyXG4gICAgICBpZiAoIWlzT2JzZXJ2YWJsZShyZXN1bHQpKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgXCJbQXN5bmNWYWxpZGF0b3JdIEV4cGVjdGVkIG9ic2VydmFibGUgYnV0IGdvdCBub24tb2JzZXJ2YWJsZSByZXN1bHRcIixcclxuICAgICAgICAgIHsgZXhwcmVzc2lvbjogaXRlbS5leHByZXNzaW9uLCB2YWx1ZTogY29udHJvbC52YWx1ZSwgcmVzdWx0LCBydWxlOiBpdGVtIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm51bGxPYnNlcnZlcjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzdWx0IGFzIE9ic2VydmFibGU8YW55PjtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVJlcXVpcmVkVmFsaWRhdG9yKGNvbXBvbmVudDogYW55XHJcbiAgICAsIGZvcm1Hcm91cDogRm9ybUdyb3VwXHJcbiAgICAsIHNraXBWYWxpZGF0aW9uOiBzdHJpbmcgfCBib29sZWFuKTogVmFsaWRhdG9yRm5cclxuICB7XHJcbiAgICBjb25zdCBmbiA9ICh0aGlzLmlzVHJ1ZVZhbGlkYXRvcihjb21wb25lbnQpXHJcbiAgICAgID8gdGhpcy5yZXF1aXJlZFRydWVWYWxpZGF0b3JcclxuICAgICAgOiB0aGlzLnJlcXVpcmVkVmFsaWRhdG9yKS5iaW5kKHRoaXMpO1xyXG5cclxuICAgIHJldHVybiAoY29udHJvbCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zdXBwcmVzcyB8fCB0aGlzLnNob3VsZFNraXBWYWxpZGF0aW9uKGZvcm1Hcm91cCwgc2tpcFZhbGlkYXRpb24pKSByZXR1cm4gbnVsbDtcclxuICAgICAgcmV0dXJuIGZuKGNvbnRyb2wpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGlvbkVycm9ycyhmb3JtR3JvdXA6IEZvcm1Hcm91cCwgaXRlbTogVmFsaWRhdGlvblJ1bGUpIHtcclxuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZVN0cmluZyhmb3JtR3JvdXAsIGl0ZW0ubWVzc2FnZSk7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9uRXJyb3IgPSB7IGVycm9yOiB0cnVlLCBtZXNzYWdlIH07XHJcbiAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3YXRjaEZvclZhbGlkYXRpb24oZm9ybUdyb3VwOiBGb3JtR3JvdXBcclxuICAgICwgc2tpcFZhbGlkYXRpb246IGJvb2xlYW4gfCBzdHJpbmdcclxuICAgICwgY29udHJvbDogQWJzdHJhY3RDb250cm9sXHJcbiAgICAsIGtleTogc3RyaW5nXHJcbiAgICAsIGNhbGxiYWNrczogQ2FsbGJhY2tSZWdpc3RyeVxyXG4gICAgLCB2YWxpZGF0aW9ucz86IFZhbGlkYXRpb25SdWxlW11cclxuICAgICwgZGVzdHJveVJlZj86IERlc3Ryb3lSZWYpOiB2b2lkIHtcclxuXHJcbiAgICBjb25zdCBleHByZXNzaW9uczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBpZiAodHlwZW9mIHNraXBWYWxpZGF0aW9uID09PSBcInN0cmluZ1wiICYmIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmlzRXhwcmVzc2lvbihza2lwVmFsaWRhdGlvbikpIHtcclxuICAgICAgZXhwcmVzc2lvbnMucHVzaChcIj1cIiArIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmdldEV4cHJlc3Npb24oc2tpcFZhbGlkYXRpb24pKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsaWRhdGlvbnMpKSB7XHJcbiAgICAgIGNvbnN0IHJ1bGVFeHByZXNzaW9ucyA9IHZhbGlkYXRpb25zXHJcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmlzRXhwcmVzc2lvbihpdGVtLmV4cHJlc3Npb24pKVxyXG4gICAgICAgIC5tYXAoaXRlbSA9PiBcIj1cIiArIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmdldEV4cHJlc3Npb24oaXRlbS5leHByZXNzaW9uKSk7XHJcbiAgICAgIGV4cHJlc3Npb25zLnB1c2goLi4ucnVsZUV4cHJlc3Npb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXhwcmVzc2lvbnMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZmVlbGFibGUgPSB0b0ZlZWxhYmxlKGV4cHJlc3Npb25zKTtcclxuXHJcbiAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5nZXREZXBlbmRlbmNpZXMoZm9ybUdyb3VwLCBmZWVsYWJsZSlcclxuICAgICAgLmZpbHRlcihkZXAgPT4gZGVwICE9PSBrZXkpO1xyXG5cclxuICAgIGlmIChkZXBlbmRlbmNpZXMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5wcm9ncmFtbWFiaWxpdHkud2F0Y2goZm9ybUdyb3VwLCBkZXBlbmRlbmNpZXMsICgpID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgY2FsbGJhY2tzLmludm9rZSgpO1xyXG4gICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICB9KTtcclxuICAgIH0sIGRlc3Ryb3lSZWYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2dWYWxpZGF0aW9uID0gKGNvbXBvbmVudDogYW55LCBydWxlOiBWYWxpZGF0aW9uUnVsZSwgY29udHJvbDogQWJzdHJhY3RDb250cm9sLCByZXN1bHQ6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsKSA9PiB7XHJcbiAgICBpZiAodGhpcy5wcm9ncmFtbWFiaWxpdHkudmVyYm9zZSkge1xyXG4gICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXCJbVmFsaWRhdGlvbl0gRmFpbGVkXCIsIHsgY29udHJvbCwgY29tcG9uZW50LCBydWxlLCByZXN1bHQgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJbVmFsaWRhdGlvbl0gU3VjY2Vzc1wiLCB7IGNvbnRyb2wsIGNvbXBvbmVudCwgcnVsZSwgcmVzdWx0IH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IG51bGxPYnNlcnZlciA9IG9mKG51bGwpO1xyXG5cclxuICBwcml2YXRlIGdldCBsYW5ndWFnZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLmdldExhbmd1YWdlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvY2FsZShjb21wb25lbnQ6IGFueSwga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGxvY2FsaXplKHRoaXMubGFuZ3VhZ2UsIGNvbXBvbmVudCwga2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVxdWlyZWRWYWxpZGF0b3JzID0gbmV3IFdlYWtNYXA8QWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3JGbj4oKTtcclxuXHJcbiAgcHJpdmF0ZSByZXF1aXJlZFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBpZiAoVmFsaWRhdG9ycy5yZXF1aXJlZChjb250cm9sKSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6IHRoaXMuZ2V0UmVxdWlyZWRNZXNzYWdlKCkgfSAgICBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVxdWlyZWRUcnVlVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGlmIChWYWxpZGF0b3JzLnJlcXVpcmVkVHJ1ZShjb250cm9sKSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6IHRoaXMuZ2V0UmVxdWlyZWRNZXNzYWdlKCkgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1RydWVWYWxpZGF0b3IoY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBjb21wb25lbnQ/LnR5cGUgPT09ICdjaGVja2JveCc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlcXVpcmVkTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubG9jYWxlKFRleHRzLCAnUmVxdWlyZWRGaWVsZCcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG91bGRTa2lwVmFsaWRhdGlvbihmb3JtR3JvdXA6IEZvcm1Hcm91cCwgc2tpcFZhbGlkYXRpb246IHN0cmluZyB8IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGlmICh0eXBlb2Ygc2tpcFZhbGlkYXRpb24gPT09ICdib29sZWFuJykge1xyXG4gICAgICByZXR1cm4gc2tpcFZhbGlkYXRpb247XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHNraXBWYWxpZGF0aW9uID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVCb29sZWFuKGZvcm1Hcm91cCwgc2tpcFZhbGlkYXRpb24pID8/IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNvbHZlU2tpcFZhbGlkYXRpb24oY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHwgc3RyaW5nIHtcclxuICAgIGNvbnN0IHNraXBWYWxpZGF0aW9uID0gY29tcG9uZW50LnNraXBWYWxpZGF0aW9uO1xyXG4gICAgaWYgKHR5cGVvZiBza2lwVmFsaWRhdGlvbiA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIHJldHVybiBza2lwVmFsaWRhdGlvbjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygc2tpcFZhbGlkYXRpb24gPT09ICdzdHJpbmcnXHJcbiAgICAgICYmIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmlzRXhwcmVzc2lvbihza2lwVmFsaWRhdGlvbikpIHtcclxuICAgICAgcmV0dXJuIHNraXBWYWxpZGF0aW9uO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxudHlwZSBWYWxpZGF0aW9uQ2FsbGJhY2sgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCByZXN1bHQ6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsKSA9PiB2b2lkO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRDb250ZXh0IHtcclxuICBjb21wb25lbnQ6IGFueTtcclxuICBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uUnVsZSB7XHJcbiAgZXhwcmVzc2lvbjogc3RyaW5nO1xyXG4gIHR5cGU6IFwidmFsaWRhdGVcIiB8IFwiaW52YWxpZGF0ZVwiO1xyXG4gIG1lc3NhZ2U6IHN0cmluZyxcclxuICBhc3luYzogYm9vbGVhblxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uQ29sbGVjdGlvbiA9IE1hcDxBYnN0cmFjdENvbnRyb2wsIENvbXBvbmVudENvbnRleHQ+O1xyXG4iXX0=
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { FormArray } from '@angular/forms';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
export class FormArrayEx extends FormArray {
|
|
4
|
+
controlsChanges = new Subject();
|
|
5
|
+
constructor(controls, validatorOrOpts, asyncValidator) {
|
|
6
|
+
super(controls, validatorOrOpts, asyncValidator);
|
|
7
|
+
}
|
|
8
|
+
push(control, options) {
|
|
9
|
+
const index = this.length - 1;
|
|
10
|
+
this.notify('adding', index, control);
|
|
11
|
+
super.push(control, options);
|
|
12
|
+
this.notify('add', index, control);
|
|
13
|
+
}
|
|
14
|
+
insert(index, control, options) {
|
|
15
|
+
this.notify('adding', index, control);
|
|
16
|
+
super.insert(index, control, options);
|
|
17
|
+
this.notify('add', index, control);
|
|
18
|
+
}
|
|
19
|
+
removeAt(index, options) {
|
|
20
|
+
const control = this.at(index);
|
|
21
|
+
this.notify('removing', index, control);
|
|
22
|
+
super.removeAt(index, options);
|
|
23
|
+
this.notify('remove', index, control);
|
|
24
|
+
}
|
|
25
|
+
clear() {
|
|
26
|
+
while (this.length > 0) {
|
|
27
|
+
this.removeAt(0);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
moveUp(index) {
|
|
31
|
+
if (index <= 0 || index >= this.length)
|
|
32
|
+
return false;
|
|
33
|
+
const control = this.at(index);
|
|
34
|
+
super.removeAt(index);
|
|
35
|
+
super.insert(index - 1, control);
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
moveDown(index) {
|
|
39
|
+
if (index < 0 || index >= this.length - 1)
|
|
40
|
+
return false;
|
|
41
|
+
const control = this.at(index);
|
|
42
|
+
super.removeAt(index);
|
|
43
|
+
super.insert(index + 1, control);
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
resize(newSize, factory) {
|
|
47
|
+
while (this.length > newSize) {
|
|
48
|
+
this.removeAt(this.length - 1, { emitEvent: false });
|
|
49
|
+
}
|
|
50
|
+
while (this.length < newSize) {
|
|
51
|
+
this.push(factory(), { emitEvent: false });
|
|
52
|
+
}
|
|
53
|
+
this.updateValueAndValidity({ emitEvent: true });
|
|
54
|
+
}
|
|
55
|
+
notify(type, index, control) {
|
|
56
|
+
this.controlsChanges.next({
|
|
57
|
+
type: type,
|
|
58
|
+
control,
|
|
59
|
+
index
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9ybUFycmF5RXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi91dGlscy9Gb3JtQXJyYXlFeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUVWLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQWMvQixNQUFNLE9BQU8sV0FDWCxTQUFRLFNBQW1CO0lBRWxCLGVBQWUsR0FDdEIsSUFBSSxPQUFPLEVBQTZCLENBQUM7SUFFM0MsWUFDRSxRQUFvQixFQUNwQixlQUFvRCxFQUNwRCxjQUE2RDtRQUU3RCxLQUFLLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRVEsSUFBSSxDQUFDLE9BQWlCLEVBQUUsT0FBa0M7UUFDakUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRVEsTUFBTSxDQUFDLEtBQWEsRUFBRSxPQUFpQixFQUFFLE9BQWtDO1FBQ2xGLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0QyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFUSxRQUFRLENBQUMsS0FBYSxFQUFFLE9BQWtDO1FBQ2pFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFhLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRVEsS0FBSztRQUVaLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWE7UUFFbEIsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTTtZQUNwQyxPQUFPLEtBQUssQ0FBQztRQUVmLE1BQU0sT0FBTyxHQUFhLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFhLENBQUM7UUFDckQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFakMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWE7UUFDcEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUV4RCxNQUFNLE9BQU8sR0FBYSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBYSxDQUFDO1FBQ3JELEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRWpDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFlLEVBQUUsT0FBdUI7UUFFN0MsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBRUQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLE1BQU0sQ0FBQyxJQUF5QixFQUFFLEtBQWEsRUFBRSxPQUFpQjtRQUN4RSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQztZQUN4QixJQUFJLEVBQUUsSUFBSTtZQUNWLE9BQU87WUFDUCxLQUFLO1NBQ04sQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBYnN0cmFjdENvbnRyb2wsXHJcbiAgQXN5bmNWYWxpZGF0b3JGbixcclxuICBGb3JtQXJyYXksXHJcbiAgVmFsaWRhdG9yRm5cclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5leHBvcnQgdHlwZSBGb3JtQXJyYXlDaGFuZ2VUeXBlID1cclxuICB8ICdhZGQnXHJcbiAgfCAnYWRkaW5nJ1xyXG4gIHwgJ3JlbW92ZSdcclxuICB8ICdyZW1vdmluZyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1BcnJheUNoYW5nZTxUQ29udHJvbCBleHRlbmRzIEFic3RyYWN0Q29udHJvbCA9IEFic3RyYWN0Q29udHJvbD4ge1xyXG4gIHR5cGU6IEZvcm1BcnJheUNoYW5nZVR5cGUgO1xyXG4gIGNvbnRyb2w6IFRDb250cm9sO1xyXG4gIGluZGV4OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBGb3JtQXJyYXlFeDxUQ29udHJvbCBleHRlbmRzIEFic3RyYWN0Q29udHJvbCA9IEFic3RyYWN0Q29udHJvbD5cclxuICBleHRlbmRzIEZvcm1BcnJheTxUQ29udHJvbD4ge1xyXG5cclxuICByZWFkb25seSBjb250cm9sc0NoYW5nZXMgPVxyXG4gICAgbmV3IFN1YmplY3Q8Rm9ybUFycmF5Q2hhbmdlPFRDb250cm9sPj4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBjb250cm9sczogVENvbnRyb2xbXSxcclxuICAgIHZhbGlkYXRvck9yT3B0cz86IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXSB8IG51bGwsXHJcbiAgICBhc3luY1ZhbGlkYXRvcj86IEFzeW5jVmFsaWRhdG9yRm4gfCBBc3luY1ZhbGlkYXRvckZuW10gfCBudWxsXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb250cm9scywgdmFsaWRhdG9yT3JPcHRzLCBhc3luY1ZhbGlkYXRvcik7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBwdXNoKGNvbnRyb2w6IFRDb250cm9sLCBvcHRpb25zPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyB9KTogdm9pZCB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMubGVuZ3RoIC0gMTtcclxuICAgIHRoaXMubm90aWZ5KCdhZGRpbmcnLCBpbmRleCwgY29udHJvbCk7XHJcbiAgICBzdXBlci5wdXNoKGNvbnRyb2wsIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5ub3RpZnkoJ2FkZCcsIGluZGV4LCBjb250cm9sKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIGluc2VydChpbmRleDogbnVtYmVyLCBjb250cm9sOiBUQ29udHJvbCwgb3B0aW9ucz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgfSk6IHZvaWQge1xyXG4gICAgdGhpcy5ub3RpZnkoJ2FkZGluZycsIGluZGV4LCBjb250cm9sKTtcclxuICAgIHN1cGVyLmluc2VydChpbmRleCwgY29udHJvbCwgb3B0aW9ucyk7XHJcbiAgICB0aGlzLm5vdGlmeSgnYWRkJywgaW5kZXgsIGNvbnRyb2wpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgcmVtb3ZlQXQoaW5kZXg6IG51bWJlciwgb3B0aW9ucz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgfSk6IHZvaWQge1xyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuYXQoaW5kZXgpIGFzIFRDb250cm9sO1xyXG4gICAgdGhpcy5ub3RpZnkoJ3JlbW92aW5nJywgaW5kZXgsIGNvbnRyb2wpO1xyXG4gICAgc3VwZXIucmVtb3ZlQXQoaW5kZXgsIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5ub3RpZnkoJ3JlbW92ZScsIGluZGV4LCBjb250cm9sKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIGNsZWFyKCk6IHZvaWQge1xyXG5cclxuICAgIHdoaWxlICh0aGlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5yZW1vdmVBdCgwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vdmVVcChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcblxyXG4gICAgaWYgKGluZGV4IDw9IDAgfHwgaW5kZXggPj0gdGhpcy5sZW5ndGgpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBjb250cm9sOiBUQ29udHJvbCA9IHRoaXMuYXQoaW5kZXgpIGFzIFRDb250cm9sO1xyXG4gICAgc3VwZXIucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgc3VwZXIuaW5zZXJ0KGluZGV4IC0gMSwgY29udHJvbCk7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3ZlRG93bihpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMubGVuZ3RoIC0gMSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IGNvbnRyb2w6IFRDb250cm9sID0gdGhpcy5hdChpbmRleCkgYXMgVENvbnRyb2w7XHJcbiAgICBzdXBlci5yZW1vdmVBdChpbmRleCk7XHJcbiAgICBzdXBlci5pbnNlcnQoaW5kZXggKyAxLCBjb250cm9sKTtcclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlc2l6ZShuZXdTaXplOiBudW1iZXIsIGZhY3Rvcnk6ICgpID0+IFRDb250cm9sKTogdm9pZCB7XHJcblxyXG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoID4gbmV3U2l6ZSkge1xyXG4gICAgICB0aGlzLnJlbW92ZUF0KHRoaXMubGVuZ3RoIC0gMSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHdoaWxlICh0aGlzLmxlbmd0aCA8IG5ld1NpemUpIHtcclxuICAgICAgdGhpcy5wdXNoKGZhY3RvcnkoKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogdHJ1ZSB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbm90aWZ5KHR5cGU6IEZvcm1BcnJheUNoYW5nZVR5cGUsIGluZGV4OiBudW1iZXIsIGNvbnRyb2w6IFRDb250cm9sKSB7XHJcbiAgICB0aGlzLmNvbnRyb2xzQ2hhbmdlcy5uZXh0KHtcclxuICAgICAgdHlwZTogdHlwZSxcclxuICAgICAgY29udHJvbCxcclxuICAgICAgaW5kZXhcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -31,10 +31,11 @@ export function openWindow(url, target = '_blank', features = {}) {
|
|
|
31
31
|
featureList.push('noopener');
|
|
32
32
|
if (noreferrer)
|
|
33
33
|
featureList.push('noreferrer');
|
|
34
|
-
const
|
|
34
|
+
const locationUrl = new URL(url, window.location.href);
|
|
35
|
+
const newWindow = window.open(locationUrl.toString(), target, featureList.join(','));
|
|
35
36
|
if (newWindow && focus) {
|
|
36
37
|
newWindow.focus();
|
|
37
38
|
}
|
|
38
39
|
return newWindow;
|
|
39
40
|
}
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvdXRpbHMvd2luZG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTJCQSxNQUFNLFVBQVUsVUFBVSxDQUN4QixHQUFXLEVBQ1gsU0FBdUIsUUFBUSxFQUMvQixXQUErQixFQUFFO0lBR2pDLE1BQU0sRUFDSixLQUFLLEVBQ0wsTUFBTSxFQUNOLElBQUksRUFDSixHQUFHLEVBQ0gsT0FBTyxFQUNQLE9BQU8sRUFDUCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxVQUFVLEVBQ1YsUUFBUSxHQUFHLElBQUksRUFDZixVQUFVLEdBQUcsS0FBSyxFQUNsQixNQUFNLEdBQUcsS0FBSyxFQUNkLEtBQUssR0FBRyxJQUFJLEVBQ2IsR0FBRyxRQUFRLENBQUM7SUFFYixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDckIsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDO0lBRW5CLElBQUksTUFBTSxJQUFJLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUM5QixTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdELFFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFhLEVBQUUsQ0FBQztJQUVqQyxJQUFJLEtBQUs7UUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM5QyxJQUFJLE1BQU07UUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNqRCxJQUFJLFNBQVMsS0FBSyxTQUFTO1FBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDbkUsSUFBSSxRQUFRLEtBQUssU0FBUztRQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBRWhFLElBQUksT0FBTyxLQUFLLFNBQVM7UUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakYsSUFBSSxPQUFPLEtBQUssU0FBUztRQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNqRixJQUFJLFFBQVEsS0FBSyxTQUFTO1FBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BGLElBQUksTUFBTSxLQUFLLFNBQVM7UUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUUsSUFBSSxTQUFTLEtBQUssU0FBUztRQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2RixJQUFJLFVBQVUsS0FBSyxTQUFTO1FBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRTFGLElBQUksUUFBUTtRQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsSUFBSSxVQUFVO1FBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUUvQyxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV2RCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUMzQixXQUFXLENBQUMsUUFBUSxFQUFFLEVBQ3RCLE1BQU0sRUFDTixXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUN0QixDQUFDO0lBRUYsSUFBSSxTQUFTLElBQUksS0FBSyxFQUFFLENBQUM7UUFDdkIsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBPcGVuV2luZG93RmVhdHVyZXMge1xyXG4gIHdpZHRoPzogbnVtYmVyO1xyXG4gIGhlaWdodD86IG51bWJlcjtcclxuICBsZWZ0PzogbnVtYmVyO1xyXG4gIHRvcD86IG51bWJlcjtcclxuXHJcbiAgdG9vbGJhcj86IGJvb2xlYW47XHJcbiAgbWVudWJhcj86IGJvb2xlYW47XHJcbiAgbG9jYXRpb24/OiBib29sZWFuO1xyXG4gIHN0YXR1cz86IGJvb2xlYW47XHJcbiAgcmVzaXphYmxlPzogYm9vbGVhbjtcclxuICBzY3JvbGxiYXJzPzogYm9vbGVhbjtcclxuXHJcbiAgbm9vcGVuZXI/OiBib29sZWFuO1xyXG4gIG5vcmVmZXJyZXI/OiBib29sZWFuO1xyXG5cclxuICBjZW50ZXI/OiBib29sZWFuO1xyXG4gIGZvY3VzPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgV2luZG93VGFyZ2V0ID1cclxuICB8ICdfYmxhbmsnXHJcbiAgfCAnX3NlbGYnXHJcbiAgfCAnX3BhcmVudCdcclxuICB8ICdfdG9wJ1xyXG4gIHwgc3RyaW5nO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG9wZW5XaW5kb3coXHJcbiAgdXJsOiBzdHJpbmcsXHJcbiAgdGFyZ2V0OiBXaW5kb3dUYXJnZXQgPSAnX2JsYW5rJyxcclxuICBmZWF0dXJlczogT3BlbldpbmRvd0ZlYXR1cmVzID0ge31cclxuKTogV2luZG93IHwgbnVsbCB7XHJcblxyXG4gIGNvbnN0IHtcclxuICAgIHdpZHRoLFxyXG4gICAgaGVpZ2h0LFxyXG4gICAgbGVmdCxcclxuICAgIHRvcCxcclxuICAgIHRvb2xiYXIsXHJcbiAgICBtZW51YmFyLFxyXG4gICAgbG9jYXRpb24sXHJcbiAgICBzdGF0dXMsXHJcbiAgICByZXNpemFibGUsXHJcbiAgICBzY3JvbGxiYXJzLFxyXG4gICAgbm9vcGVuZXIgPSB0cnVlLFxyXG4gICAgbm9yZWZlcnJlciA9IGZhbHNlLFxyXG4gICAgY2VudGVyID0gZmFsc2UsXHJcbiAgICBmb2N1cyA9IHRydWVcclxuICB9ID0gZmVhdHVyZXM7XHJcblxyXG4gIGxldCBmaW5hbExlZnQgPSBsZWZ0O1xyXG4gIGxldCBmaW5hbFRvcCA9IHRvcDtcclxuXHJcbiAgaWYgKGNlbnRlciAmJiB3aWR0aCAmJiBoZWlnaHQpIHtcclxuICAgIGZpbmFsTGVmdCA9IHdpbmRvdy5zY3JlZW5YICsgKHdpbmRvdy5vdXRlcldpZHRoIC0gd2lkdGgpIC8gMjtcclxuICAgIGZpbmFsVG9wID0gd2luZG93LnNjcmVlblkgKyAod2luZG93Lm91dGVySGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XHJcbiAgfVxyXG5cclxuICBjb25zdCBmZWF0dXJlTGlzdDogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgaWYgKHdpZHRoKSBmZWF0dXJlTGlzdC5wdXNoKGB3aWR0aD0ke3dpZHRofWApO1xyXG4gIGlmIChoZWlnaHQpIGZlYXR1cmVMaXN0LnB1c2goYGhlaWdodD0ke2hlaWdodH1gKTtcclxuICBpZiAoZmluYWxMZWZ0ICE9PSB1bmRlZmluZWQpIGZlYXR1cmVMaXN0LnB1c2goYGxlZnQ9JHtmaW5hbExlZnR9YCk7XHJcbiAgaWYgKGZpbmFsVG9wICE9PSB1bmRlZmluZWQpIGZlYXR1cmVMaXN0LnB1c2goYHRvcD0ke2ZpbmFsVG9wfWApO1xyXG5cclxuICBpZiAodG9vbGJhciAhPT0gdW5kZWZpbmVkKSBmZWF0dXJlTGlzdC5wdXNoKGB0b29sYmFyPSR7dG9vbGJhciA/ICd5ZXMnIDogJ25vJ31gKTtcclxuICBpZiAobWVudWJhciAhPT0gdW5kZWZpbmVkKSBmZWF0dXJlTGlzdC5wdXNoKGBtZW51YmFyPSR7bWVudWJhciA/ICd5ZXMnIDogJ25vJ31gKTtcclxuICBpZiAobG9jYXRpb24gIT09IHVuZGVmaW5lZCkgZmVhdHVyZUxpc3QucHVzaChgbG9jYXRpb249JHtsb2NhdGlvbiA/ICd5ZXMnIDogJ25vJ31gKTtcclxuICBpZiAoc3RhdHVzICE9PSB1bmRlZmluZWQpIGZlYXR1cmVMaXN0LnB1c2goYHN0YXR1cz0ke3N0YXR1cyA/ICd5ZXMnIDogJ25vJ31gKTtcclxuICBpZiAocmVzaXphYmxlICE9PSB1bmRlZmluZWQpIGZlYXR1cmVMaXN0LnB1c2goYHJlc2l6YWJsZT0ke3Jlc2l6YWJsZSA/ICd5ZXMnIDogJ25vJ31gKTtcclxuICBpZiAoc2Nyb2xsYmFycyAhPT0gdW5kZWZpbmVkKSBmZWF0dXJlTGlzdC5wdXNoKGBzY3JvbGxiYXJzPSR7c2Nyb2xsYmFycyA/ICd5ZXMnIDogJ25vJ31gKTtcclxuXHJcbiAgaWYgKG5vb3BlbmVyKSBmZWF0dXJlTGlzdC5wdXNoKCdub29wZW5lcicpO1xyXG4gIGlmIChub3JlZmVycmVyKSBmZWF0dXJlTGlzdC5wdXNoKCdub3JlZmVycmVyJyk7XHJcblxyXG4gIGNvbnN0IGxvY2F0aW9uVXJsID0gbmV3IFVSTCh1cmwsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcclxuICBcclxuICBjb25zdCBuZXdXaW5kb3cgPSB3aW5kb3cub3BlbihcclxuICAgIGxvY2F0aW9uVXJsLnRvU3RyaW5nKCksXHJcbiAgICB0YXJnZXQsXHJcbiAgICBmZWF0dXJlTGlzdC5qb2luKCcsJylcclxuICApO1xyXG5cclxuICBpZiAobmV3V2luZG93ICYmIGZvY3VzKSB7XHJcbiAgICBuZXdXaW5kb3cuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBuZXdXaW5kb3c7XHJcbn1cclxuIl19
|