@klippa/ngx-enhancy-forms 18.23.9 → 18.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -35,6 +35,7 @@ export class FormComponent {
|
|
|
35
35
|
this.activeControls = [];
|
|
36
36
|
}
|
|
37
37
|
ngOnInit() {
|
|
38
|
+
this.topLevelFormControl = this.formGroup ?? this.formArray;
|
|
38
39
|
if (isValueSet(this.patchValueInterceptor)) {
|
|
39
40
|
this.addSupportForPatchValueInterceptor();
|
|
40
41
|
}
|
|
@@ -46,13 +47,13 @@ export class FormComponent {
|
|
|
46
47
|
throw new Error(`cannot index FormArray with ${typeof injectAt}`);
|
|
47
48
|
}
|
|
48
49
|
if (injectInto.at(injectAt)?.disabled) {
|
|
49
|
-
this.
|
|
50
|
+
this.topLevelFormControl.disable();
|
|
50
51
|
}
|
|
51
52
|
const valueBeforeInject = injectInto.at(injectAt)?.value;
|
|
52
53
|
if (isValueSet(valueBeforeInject)) {
|
|
53
|
-
this.
|
|
54
|
+
this.topLevelFormControl.patchValue(valueBeforeInject);
|
|
54
55
|
}
|
|
55
|
-
injectInto.setControl(injectAt, this.
|
|
56
|
+
injectInto.setControl(injectAt, this.topLevelFormControl);
|
|
56
57
|
this.onInjected.emit(valueBeforeInject);
|
|
57
58
|
}
|
|
58
59
|
else if (injectInto instanceof UntypedFormGroup) {
|
|
@@ -60,13 +61,13 @@ export class FormComponent {
|
|
|
60
61
|
throw new Error(`cannot index FormGroup with ${typeof injectAt}`);
|
|
61
62
|
}
|
|
62
63
|
if (injectInto.get(injectAt)?.disabled) {
|
|
63
|
-
this.
|
|
64
|
+
this.topLevelFormControl.disable();
|
|
64
65
|
}
|
|
65
66
|
const valueBeforeInject = injectInto.get(injectAt)?.value;
|
|
66
67
|
if (isValueSet(valueBeforeInject)) {
|
|
67
|
-
this.
|
|
68
|
+
this.topLevelFormControl.patchValue(valueBeforeInject);
|
|
68
69
|
}
|
|
69
|
-
injectInto.setControl(injectAt, this.
|
|
70
|
+
injectInto.setControl(injectAt, this.topLevelFormControl);
|
|
70
71
|
this.onInjected.emit(valueBeforeInject);
|
|
71
72
|
}
|
|
72
73
|
}
|
|
@@ -87,7 +88,7 @@ export class FormComponent {
|
|
|
87
88
|
const injectInto = this.subFormPlaceholder.injectInto;
|
|
88
89
|
const injectAt = this.subFormPlaceholder.at;
|
|
89
90
|
if (injectInto instanceof UntypedFormArray) {
|
|
90
|
-
const idx = injectInto.controls.findIndex(e => e === this.
|
|
91
|
+
const idx = injectInto.controls.findIndex(e => e === this.topLevelFormControl);
|
|
91
92
|
injectInto.setControl(idx, new FormControl());
|
|
92
93
|
}
|
|
93
94
|
else if (injectInto instanceof UntypedFormGroup) {
|
|
@@ -137,15 +138,15 @@ export class FormComponent {
|
|
|
137
138
|
};
|
|
138
139
|
}
|
|
139
140
|
addSupportForPatchValueInterceptor() {
|
|
140
|
-
const fn = this.
|
|
141
|
+
const fn = this.topLevelFormControl.patchValue;
|
|
141
142
|
const newFn = (value, options) => {
|
|
142
143
|
this.patchValueInterceptor(value).then((val) => {
|
|
143
144
|
setTimeout(() => {
|
|
144
|
-
fn.call(this.
|
|
145
|
+
fn.call(this.topLevelFormControl, val, options);
|
|
145
146
|
});
|
|
146
147
|
});
|
|
147
148
|
};
|
|
148
|
-
this.
|
|
149
|
+
this.topLevelFormControl.patchValue = newFn;
|
|
149
150
|
}
|
|
150
151
|
registerControl(formControl, formElement) {
|
|
151
152
|
this.activeControls.push({ formControl, formElement });
|
|
@@ -196,7 +197,12 @@ export class FormComponent {
|
|
|
196
197
|
}
|
|
197
198
|
getAllFormControls() {
|
|
198
199
|
const result = [];
|
|
199
|
-
|
|
200
|
+
if (this.topLevelFormControl instanceof FormGroup) {
|
|
201
|
+
this.addFormGroupControls(this.topLevelFormControl, result);
|
|
202
|
+
}
|
|
203
|
+
else if (this.topLevelFormControl instanceof FormArray) {
|
|
204
|
+
this.addFormArrayControls(this.topLevelFormControl, result);
|
|
205
|
+
}
|
|
200
206
|
return result;
|
|
201
207
|
}
|
|
202
208
|
addFormControl(control, result) {
|
|
@@ -214,36 +220,39 @@ export class FormComponent {
|
|
|
214
220
|
return this.warnings.get(control);
|
|
215
221
|
}
|
|
216
222
|
trySubmit() {
|
|
217
|
-
this.
|
|
223
|
+
this.topLevelFormControl.markAllAsTouched();
|
|
218
224
|
const allControls = this.getAllFormControls();
|
|
219
225
|
const originalDisabledStates = allControls.map(e => {
|
|
220
226
|
return { control: e, disabled: e.disabled };
|
|
221
227
|
});
|
|
222
228
|
allControls.forEach(e => this.disableInactiveFormControl(e));
|
|
223
229
|
allControls.forEach(e => e.updateValueAndValidity());
|
|
224
|
-
const formGroupValue = this.
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
.
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
.
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
230
|
+
const formGroupValue = this.topLevelFormControl.value;
|
|
231
|
+
if (this.topLevelFormControl instanceof FormGroup) {
|
|
232
|
+
const renderedAndEnabledValues = this.getRenderedFieldValuesFormGroup(this.topLevelFormControl, true);
|
|
233
|
+
const renderedButDisabledValues = this.getRenderedFieldValuesFormGroup(this.topLevelFormControl, false);
|
|
234
|
+
return new Promise((resolve, reject) => {
|
|
235
|
+
if (this.topLevelFormControl.pending) {
|
|
236
|
+
const sub = this.topLevelFormControl.statusChanges.subscribe((res) => {
|
|
237
|
+
if (res !== 'PENDING') {
|
|
238
|
+
sub.unsubscribe();
|
|
239
|
+
this.handleSubmission(originalDisabledStates, renderedAndEnabledValues, renderedButDisabledValues, formGroupValue)
|
|
240
|
+
.then(resolve)
|
|
241
|
+
.catch(reject);
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
this.handleSubmission(originalDisabledStates, renderedAndEnabledValues, renderedButDisabledValues, formGroupValue)
|
|
247
|
+
.then(resolve)
|
|
248
|
+
.catch(reject);
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
throw new Error('Submitting a FormArray as topLevel not supported (yet). Wrap it in a FormGroup.');
|
|
244
253
|
}
|
|
245
254
|
handleSubmission(originalDisabledStates, renderedAndEnabledValues, renderedButDisabledValues, formGroupValue) {
|
|
246
|
-
if (this.
|
|
255
|
+
if (this.topLevelFormControl.invalid) {
|
|
247
256
|
this.activeControls.find((e) => e.formControl.invalid)?.formElement?.scrollTo();
|
|
248
257
|
this.setDisabledStatesForAllControls(originalDisabledStates);
|
|
249
258
|
return Promise.reject(invalidFieldsSymbol);
|
|
@@ -298,7 +307,7 @@ export class FormComponent {
|
|
|
298
307
|
});
|
|
299
308
|
}
|
|
300
309
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FormComponent, deps: [{ token: FormComponent, optional: true, skipSelf: true }, { token: SubFormDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
301
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: FormComponent, selector: "klp-form", inputs: { readOnly: "readOnly", showErrorMessages: "showErrorMessages", errorMessageLocation: "errorMessageLocation", formGroup: "formGroup", warnings: "warnings", errors: "errors", patchValueInterceptor: "patchValueInterceptor", allowSubmitOn: "allowSubmitOn" }, outputs: { onInjected: "onInjected" }, usesOnChanges: true, ngImport: i0, template: "<form>\n\t<ng-content></ng-content>\n</form>\n\n\n", styles: [":host{display:block}:host.row{display:flex}:host form{height:inherit}\n"], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] }); }
|
|
310
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: FormComponent, selector: "klp-form", inputs: { readOnly: "readOnly", showErrorMessages: "showErrorMessages", errorMessageLocation: "errorMessageLocation", formGroup: "formGroup", formArray: "formArray", warnings: "warnings", errors: "errors", patchValueInterceptor: "patchValueInterceptor", allowSubmitOn: "allowSubmitOn" }, outputs: { onInjected: "onInjected" }, usesOnChanges: true, ngImport: i0, template: "<form>\n\t<ng-content></ng-content>\n</form>\n\n\n", styles: [":host{display:block}:host.row{display:flex}:host form{height:inherit}\n"], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] }); }
|
|
302
311
|
}
|
|
303
312
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FormComponent, decorators: [{
|
|
304
313
|
type: Component,
|
|
@@ -317,6 +326,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
317
326
|
type: Input
|
|
318
327
|
}], formGroup: [{
|
|
319
328
|
type: Input
|
|
329
|
+
}], formArray: [{
|
|
330
|
+
type: Input
|
|
320
331
|
}], warnings: [{
|
|
321
332
|
type: Input
|
|
322
333
|
}], errors: [{
|
|
@@ -328,4 +339,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
328
339
|
}], onInjected: [{
|
|
329
340
|
type: Output
|
|
330
341
|
}] } });
|
|
331
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbGlwcGEvbmd4LWVuaGFuY3ktZm9ybXMvc3JjL2xpYi9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy9saWIvZm9ybS9mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUFFLFlBQVksRUFDdkIsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBRU4sUUFBUSxFQUNSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBa0IsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxSSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFFNUMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFNdEUsTUFBTSxPQUFPLGdCQUFnQjs4R0FBaEIsZ0JBQWdCO2tHQUFoQixnQkFBZ0I7OzJGQUFoQixnQkFBZ0I7a0JBSjVCLFNBQVM7bUJBQUM7b0JBQ1YsOENBQThDO29CQUM5QyxRQUFRLEVBQUUsY0FBYztpQkFDeEI7OEJBRVMsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7O0FBUVAsTUFBTSxPQUFPLGFBQWE7SUFpQnpCLFlBQTRDLE1BQXFCLEVBQXNCLGtCQUFvQztRQUEvRSxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQXNCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBa0I7UUFoQjNH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LEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxNQUFNO3NCQUFyQixLQUFLO2dCQUNVLHFCQUFxQjtzQkFBcEMsS0FBSztnQkFDVSxhQUFhO3NCQUE1QixLQUFLO2dCQUNXLFVBQVU7c0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLFxuXHRJbnB1dCxcblx0T25DaGFuZ2VzLFxuXHRPbkRlc3Ryb3ksXG5cdE9uSW5pdCxcblx0T3B0aW9uYWwsXG5cdE91dHB1dCxcblx0U2ltcGxlQ2hhbmdlcyxcblx0U2tpcFNlbGYsIFRlbXBsYXRlUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0Zvcm1FbGVtZW50Q29tcG9uZW50fSBmcm9tICcuL2Zvcm0tZWxlbWVudC9mb3JtLWVsZW1lbnQuY29tcG9uZW50JztcbmltcG9ydCB7aXNWYWx1ZVNldH0gZnJvbSAnLi4vdXRpbC92YWx1ZXMnO1xuaW1wb3J0IHsgZGVlcE1lcmdlIH0gZnJvbSAnLi4vdXRpbC9vYmplY3RzJztcblxuZXhwb3J0IGNvbnN0IGludmFsaWRGaWVsZHNTeW1ib2wgPSBTeW1ib2woJ05vdCBhbGwgZmllbGRzIGFyZSB2YWxpZCcpO1xuXG5ARGlyZWN0aXZlKHtcblx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRpcmVjdGl2ZS1zZWxlY3RvclxuXHRzZWxlY3RvcjogJ2tscC1zdWItZm9ybScsXG59KVxuZXhwb3J0IGNsYXNzIFN1YkZvcm1EaXJlY3RpdmUge1xuXHRASW5wdXQoKSBpbmplY3RJbnRvOiBVbnR5cGVkRm9ybUFycmF5IHwgVW50eXBlZEZvcm1Hcm91cDtcblx0QElucHV0KCkgYXQ6IG51bWJlciB8IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAna2xwLWZvcm0nLFxuXHR0ZW1wbGF0ZVVybDogJy4vZm9ybS5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsczogWycuL2Zvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXHRASW5wdXQoKSBwdWJsaWMgcmVhZE9ubHkgPSBmYWxzZTtcblx0QElucHV0KCkgcHVibGljIHNob3dFcnJvck1lc3NhZ2VzID0gdHJ1ZTtcblx0QElucHV0KCkgcHVibGljIGVycm9yTWVzc2FnZUxvY2F0aW9uOiAnYmVsb3dDYXB0aW9uJyB8ICdyaWdodE9mQ2FwdGlvbicgPSAnYmVsb3dDYXB0aW9uJztcblx0QElucHV0KCkgcHVibGljIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cDtcblx0QElucHV0KCkgcHVibGljIHdhcm5pbmdzOiBNYXA8QWJzdHJhY3RDb250cm9sLCBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+PiA9IG5ldyBNYXA8QWJzdHJhY3RDb250cm9sLCBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+PigpO1xuXHRASW5wdXQoKSBwdWJsaWMgZXJyb3JzOiBNYXA8QWJzdHJhY3RDb250cm9sLCBzdHJpbmc+ID0gbmV3IE1hcDxBYnN0cmFjdENvbnRyb2wsIHN0cmluZz4oKTtcblx0QElucHV0KCkgcHVibGljIHBhdGNoVmFsdWVJbnRlcmNlcHRvcjogKHZhbHVlczogYW55KSA9PiBQcm9taXNlPGFueT47XG5cdEBJbnB1dCgpIHB1YmxpYyBhbGxvd1N1Ym1pdE9uOiAnYnV0dG9uQW5kRW50ZXInIHwgJ2J1dHRvbk9ubHknID0gJ2J1dHRvbkFuZEVudGVyJztcblx0QE91dHB1dCgpIHB1YmxpYyBvbkluamVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ8c3RyaW5nLCBhbnk+PigpO1xuXG5cdC8vIHdlIGtlZXAgdHJhY2sgb2Ygd2hhdCBmb3JtIGNvbnRyb2xzIGFyZSBhY3R1YWxseSByZW5kZXJlZC4gT25seSB0aG9zZSBjb3VudCB3aGVuIGxvb2tpbmcgYXQgZm9ybSB2YWxpZGF0aW9uXG5cdHByaXZhdGUgYWN0aXZlQ29udHJvbHM6IEFycmF5PHtcblx0XHRmb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sO1xuXHRcdGZvcm1FbGVtZW50OiBGb3JtRWxlbWVudENvbXBvbmVudDtcblx0fT4gPSBbXTtcblxuXHRjb25zdHJ1Y3RvcihAU2tpcFNlbGYoKSBAT3B0aW9uYWwoKSBwcml2YXRlIHBhcmVudDogRm9ybUNvbXBvbmVudCwgQE9wdGlvbmFsKCkgcHJpdmF0ZSBzdWJGb3JtUGxhY2Vob2xkZXI6IFN1YkZvcm1EaXJlY3RpdmUpIHtcblx0fVxuXG5cdG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdGlmIChpc1ZhbHVlU2V0KHRoaXMucGF0Y2hWYWx1ZUludGVyY2VwdG9yKSkge1xuXHRcdFx0dGhpcy5hZGRTdXBwb3J0Rm9yUGF0Y2hWYWx1ZUludGVyY2VwdG9yKCk7XG5cdFx0fVxuXHRcdGlmIChpc1ZhbHVlU2V0KHRoaXMucGFyZW50KSAmJiBpc1ZhbHVlU2V0KHRoaXMuc3ViRm9ybVBsYWNlaG9sZGVyKSkge1xuXHRcdFx0Y29uc3QgaW5qZWN0SW50byA9IHRoaXMuc3ViRm9ybVBsYWNlaG9sZGVyLmluamVjdEludG87XG5cdFx0XHRjb25zdCBpbmplY3RBdCA9IHRoaXMuc3ViRm9ybVBsYWNlaG9sZGVyLmF0O1xuXHRcdFx0aWYgKGluamVjdEludG8gaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgaW5qZWN0QXQgIT09ICdudW1iZXInKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgaW5kZXggRm9ybUFycmF5IHdpdGggJHt0eXBlb2YgaW5qZWN0QXR9YCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGluamVjdEludG8uYXQoaW5qZWN0QXQpPy5kaXNhYmxlZCkge1xuXHRcdFx0XHRcdHRoaXMuZm9ybUdyb3VwLmRpc2FibGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCB2YWx1ZUJlZm9yZUluamVjdCA9IGluamVjdEludG8uYXQoaW5qZWN0QXQpPy52YWx1ZTtcblx0XHRcdFx0aWYgKGlzVmFsdWVTZXQodmFsdWVCZWZvcmVJbmplY3QpKSB7XG5cdFx0XHRcdFx0dGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZUJlZm9yZUluamVjdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5qZWN0SW50by5zZXRDb250cm9sKGluamVjdEF0LCB0aGlzLmZvcm1Hcm91cCk7XG5cdFx0XHRcdHRoaXMub25JbmplY3RlZC5lbWl0KHZhbHVlQmVmb3JlSW5qZWN0KTtcblx0XHRcdH0gZWxzZSBpZiAoaW5qZWN0SW50byBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBpbmplY3RBdCAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCBpbmRleCBGb3JtR3JvdXAgd2l0aCAke3R5cGVvZiBpbmplY3RBdH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaW5qZWN0SW50by5nZXQoaW5qZWN0QXQpPy5kaXNhYmxlZCkge1xuXHRcdFx0XHRcdHRoaXMuZm9ybUdyb3VwLmRpc2FibGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCB2YWx1ZUJlZm9yZUluamVjdCA9IGluamVjdEludG8uZ2V0KGluamVjdEF0KT8udmFsdWU7XG5cdFx0XHRcdGlmIChpc1ZhbHVlU2V0KHZhbHVlQmVmb3JlSW5qZWN0KSkge1xuXHRcdFx0XHRcdHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUodmFsdWVCZWZvcmVJbmplY3QpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluamVjdEludG8uc2V0Q29udHJvbChpbmplY3RBdCwgdGhpcy5mb3JtR3JvdXApO1xuXHRcdFx0XHR0aGlzLm9uSW5qZWN0ZWQuZW1pdCh2YWx1ZUJlZm9yZUluamVjdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0bmdPbkNoYW5nZXMoc2ltcGxlQ2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuXHRcdGlmIChzaW1wbGVDaGFuZ2VzLnJlYWRPbmx5Py5jdXJyZW50VmFsdWUgPT09IHRydWUpIHtcblx0XHRcdHRoaXMuYWN0aXZlQ29udHJvbHMuZm9yRWFjaChlID0+IGUuZm9ybUNvbnRyb2wuZGlzYWJsZSgpKTtcblx0XHR9XG5cdFx0aWYgKGlzVmFsdWVTZXQoc2ltcGxlQ2hhbmdlcy53YXJuaW5ncz8uY3VycmVudFZhbHVlKSkge1xuXHRcdFx0dGhpcy5wYXRjaEZvcm1XYXJuaW5nc01hcCgpO1xuXHRcdH1cblx0XHRpZiAoaXNWYWx1ZVNldChzaW1wbGVDaGFuZ2VzLmVycm9ycz8uY3VycmVudFZhbHVlKSkge1xuXHRcdFx0dGhpcy5wYXRjaEZvcm1FcnJvcnNNYXAoKTtcblx0XHR9XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHRpZiAoaXNWYWx1ZVNldCh0aGlzLnBhcmVudCkgJiYgaXNWYWx1ZVNldCh0aGlzLnN1YkZvcm1QbGFjZWhvbGRlcikpIHtcblx0XHRcdGNvbnN0IGluamVjdEludG8gPSB0aGlzLnN1YkZvcm1QbGFjZWhvbGRlci5pbmplY3RJbnRvO1xuXHRcdFx0Y29uc3QgaW5qZWN0QXQgPSB0aGlzLnN1YkZvcm1QbGFjZWhvbGRlci5hdDtcblx0XHRcdGlmIChpbmplY3RJbnRvIGluc3RhbmNlb2YgVW50eXBlZEZvcm1BcnJheSkge1xuXHRcdFx0XHRjb25zdCBpZHggPSBpbmplY3RJbnRvLmNvbnRyb2xzLmZpbmRJbmRleChlID0+IGUgPT09IHRoaXMuZm9ybUdyb3VwKTtcblx0XHRcdFx0aW5qZWN0SW50by5zZXRDb250cm9sKGlkeCwgbmV3IEZvcm1Db250cm9sKCkpO1xuXHRcdFx0fSBlbHNlIGlmIChpbmplY3RJbnRvIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGluamVjdEF0ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgY2Fubm90IGluZGV4IEZvcm1Hcm91cCB3aXRoICR7dHlwZW9mIGluamVjdEF0fWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluamVjdEludG8uc2V0Q29udHJvbChpbmplY3RBdCwgbmV3IEZvcm1Db250cm9sKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcGF0Y2hGb3JtV2FybmluZ3NNYXAoKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2V0Rm4gPSB0aGlzLndhcm5pbmdzLnNldDtcblx0XHR0aGlzLndhcm5pbmdzLnNldCA9IChrZXk6IEFic3RyYWN0Q29udHJvbCwgdmFsdWU6IHN0cmluZyk6IE1hcDxBYnN0cmFjdENvbnRyb2wsIHN0cmluZz4gPT4ge1xuXHRcdFx0Y29uc3QgcHJldlZhbCA9IHRoaXMud2FybmluZ3MuZ2V0KGtleSk7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBzZXRGbi5jYWxsKHRoaXMud2FybmluZ3MsIGtleSwgdmFsdWUpO1xuXHRcdFx0aWYgKHByZXZWYWwgIT09IHZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuZ2V0Rm9ybUVsZW1lbnRCeUZvcm1Db250cm9sKGtleSk/LmRldGVybWluZVBvcHVwU3RhdGUoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fTtcblxuXHRcdGNvbnN0IGRlbGV0ZUZuID0gdGhpcy53YXJuaW5ncy5kZWxldGU7XG5cdFx0dGhpcy53YXJuaW5ncy5kZWxldGUgPSAoa2V5OiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuID0+IHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGRlbGV0ZUZuLmNhbGwodGhpcy53YXJuaW5ncywga2V5KTtcblx0XHRcdHRoaXMuZ2V0Rm9ybUVsZW1lbnRCeUZvcm1Db250cm9sKGtleSk/LmRldGVybWluZVBvcHVwU3RhdGUoKTtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgcGF0Y2hGb3JtRXJyb3JzTWFwKCk6IHZvaWQge1xuXHRcdGNvbnN0IHNldEZuID0gdGhpcy5lcnJvcnMuc2V0O1xuXHRcdHRoaXMuZXJyb3JzLnNldCA9IChrZXk6IEFic3RyYWN0Q29udHJvbCwgdmFsdWU6IHN0cmluZyk6IE1hcDxBYnN0cmFjdENvbnRyb2wsIHN0cmluZz4gPT4ge1xuXHRcdFx0Y29uc3QgcHJldlZhbCA9IHRoaXMuZXJyb3JzLmdldChrZXkpO1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gc2V0Rm4uY2FsbCh0aGlzLmVycm9ycywga2V5LCB2YWx1ZSk7XG5cdFx0XHRrZXkuc2V0RXJyb3JzKHsgLi4ua2V5LmVycm9ycywgZm9ybUxldmVsOiB2YWx1ZX0pO1xuXHRcdFx0aWYgKHByZXZWYWwgIT09IHZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuZ2V0Rm9ybUVsZW1lbnRCeUZvcm1Db250cm9sKGtleSk/LmRldGVybWluZVBvcHVwU3RhdGUoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fTtcblxuXHRcdGNvbnN0IGRlbGV0ZUZuID0gdGhpcy5lcnJvcnMuZGVsZXRlO1xuXHRcdHRoaXMuZXJyb3JzLmRlbGV0ZSA9IChrZXk6IEFic3RyYWN0Q29udHJvbCk6IGJvb2xlYW4gPT4ge1xuXHRcdFx0Y29uc3QgbmV3RXJyb3JzT2JqZWN0ID0ga2V5LmVycm9ycztcblx0XHRcdGRlbGV0ZSBuZXdFcnJvcnNPYmplY3QuZm9ybUxldmVsO1xuXHRcdFx0a2V5LnNldEVycm9ycyhuZXdFcnJvcnNPYmplY3QpO1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gZGVsZXRlRm4uY2FsbCh0aGlzLmVycm9ycywga2V5KTtcblx0XHRcdHRoaXMuZ2V0Rm9ybUVsZW1lbnRCeUZvcm1Db250cm9sKGtleSk/LmRldGVybWluZVBvcHVwU3RhdGUoKTtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgYWRkU3VwcG9ydEZvclBhdGNoVmFsdWVJbnRlcmNlcHRvcigpOiB2b2lkIHtcblx0XHRjb25zdCBmbiA9IHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWU7XG5cdFx0Y29uc3QgbmV3Rm4gPSAoXG5cdFx0XHR2YWx1ZToge1xuXHRcdFx0XHRba2V5OiBzdHJpbmddOiBhbnk7XG5cdFx0XHR9LFxuXHRcdFx0b3B0aW9ucz86IHtcblx0XHRcdFx0b25seVNlbGY/OiBib29sZWFuO1xuXHRcdFx0XHRlbWl0RXZlbnQ/OiBib29sZWFuO1xuXHRcdFx0fVxuXHRcdCk6IHZvaWQgPT4ge1xuXHRcdFx0dGhpcy5wYXRjaFZhbHVlSW50ZXJjZXB0b3IodmFsdWUpLnRoZW4oKHZhbCkgPT4ge1xuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRmbi5jYWxsKHRoaXMuZm9ybUdyb3VwLCB2YWwsIG9wdGlvbnMpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH07XG5cdFx0dGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSA9IG5ld0ZuO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyQ29udHJvbChmb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sLCBmb3JtRWxlbWVudDogRm9ybUVsZW1lbnRDb21wb25lbnQpOiB2b2lkIHtcblx0XHR0aGlzLmFjdGl2ZUNvbnRyb2xzLnB1c2goe2Zvcm1Db250cm9sLCBmb3JtRWxlbWVudH0pO1xuXHRcdGlmICh0aGlzLnBhcmVudCkge1xuXHRcdFx0dGhpcy5wYXJlbnQucmVnaXN0ZXJDb250cm9sKGZvcm1Db250cm9sLCBmb3JtRWxlbWVudCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLnJlYWRPbmx5KSB7XG5cdFx0XHRmb3JtQ29udHJvbC5kaXNhYmxlKCk7XG5cdFx0fVxuXHRcdGNvbnN0IGVuYWJsZUZuOiAob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pID0+IHZvaWQgPSBmb3JtQ29udHJvbC5lbmFibGU7XG5cdFx0Zm9ybUNvbnRyb2wuZW5hYmxlID0gKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSA9PiB7XG5cdFx0XHRpZiAoIXRoaXMucmVhZE9ubHkpIHtcblx0XHRcdFx0ZW5hYmxlRm4uY2FsbChmb3JtQ29udHJvbCwgb3B0cyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdHB1YmxpYyB1bnJlZ2lzdGVyQ29udHJvbChmb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogdm9pZCB7XG5cdFx0dGhpcy5hY3RpdmVDb250cm9scyA9IHRoaXMuYWN0aXZlQ29udHJvbHMuZmlsdGVyKChlKSA9PiBlLmZvcm1Db250cm9sICE9PSBmb3JtQ29udHJvbCk7XG5cdFx0aWYgKHRoaXMucGFyZW50KSB7XG5cdFx0XHR0aGlzLnBhcmVudC51bnJlZ2lzdGVyQ29udHJvbChmb3JtQ29udHJvbCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBhZGRGb3JtR3JvdXBDb250cm9scyhmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsIHJlc3VsdDogQXJyYXk8VW50eXBlZEZvcm1Db250cm9sPik6IHZvaWQge1xuXHRcdE9iamVjdC52YWx1ZXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xuXHRcdFx0XHR0aGlzLmFkZEZvcm1Hcm91cENvbnRyb2xzKHZhbHVlLCByZXN1bHQpO1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcblx0XHRcdFx0dGhpcy5hZGRGb3JtQXJyYXlDb250cm9scyh2YWx1ZSwgcmVzdWx0KTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUNvbnRyb2wpIHtcblx0XHRcdFx0dGhpcy5hZGRGb3JtQ29udHJvbCh2YWx1ZSwgcmVzdWx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgYWRkRm9ybUFycmF5Q29udHJvbHMoZm9ybUFycmF5OiBVbnR5cGVkRm9ybUFycmF5LCByZXN1bHQ6IEFycmF5PFVudHlwZWRGb3JtQ29udHJvbD4pOiB2b2lkIHtcblx0XHRmb3JtQXJyYXkuY29udHJvbHMuZm9yRWFjaCgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcblx0XHRcdFx0dGhpcy5hZGRGb3JtR3JvdXBDb250cm9scyh2YWx1ZSwgcmVzdWx0KTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XG5cdFx0XHRcdHRoaXMuYWRkRm9ybUFycmF5Q29udHJvbHModmFsdWUsIHJlc3VsdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Db250cm9sKSB7XG5cdFx0XHRcdHRoaXMuYWRkRm9ybUNvbnRyb2wodmFsdWUsIHJlc3VsdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGdldEFsbEZvcm1Db250cm9scygpOiBBcnJheTxVbnR5cGVkRm9ybUNvbnRyb2w+IHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblx0XHR0aGlzLmFkZEZvcm1Hcm91cENvbnRyb2xzKHRoaXMuZm9ybUdyb3VwLCByZXN1bHQpO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwcml2YXRlIGFkZEZvcm1Db250cm9sKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCwgcmVzdWx0OiBBcnJheTxVbnR5cGVkRm9ybUNvbnRyb2w+KTogdm9pZCB7XG5cdFx0cmVzdWx0LnB1c2goY29udHJvbCk7XG5cdH1cblxuXHRwcml2YXRlIGRpc2FibGVJbmFjdGl2ZUZvcm1Db250cm9sKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5hY3RpdmVDb250cm9scy5zb21lKChlKSA9PiBlLmZvcm1Db250cm9sID09PSBjb250cm9sKSkge1xuXHRcdFx0Y29udHJvbC5kaXNhYmxlKCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGdldEZvcm1FbGVtZW50QnlGb3JtQ29udHJvbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBGb3JtRWxlbWVudENvbXBvbmVudCB7XG5cdFx0cmV0dXJuIHRoaXMuYWN0aXZlQ29udHJvbHMuZmluZCgoZSkgPT4gZS5mb3JtQ29udHJvbCA9PT0gY29udHJvbCk/LmZvcm1FbGVtZW50O1xuXHR9XG5cblx0cHVibGljIGdldFdhcm5pbmdUb1Nob3coY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiB7XG5cdFx0cmV0dXJuIHRoaXMud2FybmluZ3MuZ2V0KGNvbnRyb2wpO1xuXHR9XG5cblx0dHJ5U3VibWl0KCk6IFByb21pc2U8YW55PiB7XG5cdFx0dGhpcy5mb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xuXHRcdGNvbnN0IGFsbENvbnRyb2xzOiBBcnJheTxVbnR5cGVkRm9ybUNvbnRyb2w+ID0gdGhpcy5nZXRBbGxGb3JtQ29udHJvbHMoKTtcblx0XHRjb25zdCBvcmlnaW5hbERpc2FibGVkU3RhdGVzID0gYWxsQ29udHJvbHMubWFwKGUgPT4ge1xuXHRcdFx0cmV0dXJuIHtjb250cm9sOiBlLCBkaXNhYmxlZDogZS5kaXNhYmxlZH07XG5cdFx0fSk7XG5cdFx0YWxsQ29udHJvbHMuZm9yRWFjaChlID0+IHRoaXMuZGlzYWJsZUluYWN0aXZlRm9ybUNvbnRyb2woZSkpO1xuXHRcdGFsbENvbnRyb2xzLmZvckVhY2goZSA9PiBlLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSk7XG5cdFx0Y29uc3QgZm9ybUdyb3VwVmFsdWUgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZTtcblx0XHRjb25zdCByZW5kZXJlZEFuZEVuYWJsZWRWYWx1ZXMgPSB0aGlzLmdldFJlbmRlcmVkRmllbGRWYWx1ZXNGb3JtR3JvdXAodGhpcy5mb3JtR3JvdXAsIHRydWUpO1xuXHRcdGNvbnN0IHJlbmRlcmVkQnV0RGlzYWJsZWRWYWx1ZXMgPSB0aGlzLmdldFJlbmRlcmVkRmllbGRWYWx1ZXNGb3JtR3JvdXAodGhpcy5mb3JtR3JvdXAsIGZhbHNlKTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRpZiAodGhpcy5mb3JtR3JvdXAucGVuZGluZykge1xuXHRcdFx0XHRjb25zdCBzdWIgPSB0aGlzLmZvcm1Hcm91cC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgocmVzKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHJlcyAhPT0gJ1BFTkRJTkcnKSB7XG5cdFx0XHRcdFx0XHRzdWIudW5zdWJzY3JpYmUoKTtcblx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlU3VibWlzc2lvbihvcmlnaW5hbERpc2FibGVkU3RhdGVzLCByZW5kZXJlZEFuZEVuYWJsZWRWYWx1ZXMsIHJlbmRlcmVkQnV0RGlzYWJsZWRWYWx1ZXMsIGZvcm1Hcm91cFZhbHVlKVxuXHRcdFx0XHRcdFx0LnRoZW4ocmVzb2x2ZSlcblx0XHRcdFx0XHRcdC5jYXRjaChyZWplY3QpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmhhbmRsZVN1Ym1pc3Npb24ob3JpZ2luYWxEaXNhYmxlZFN0YXRlcywgcmVuZGVyZWRBbmRFbmFibGVkVmFsdWVzLCByZW5kZXJlZEJ1dERpc2FibGVkVmFsdWVzLCBmb3JtR3JvdXBWYWx1ZSlcblx0XHRcdFx0LnRoZW4ocmVzb2x2ZSlcblx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0fVxuXG5cdHByaXZhdGUgaGFuZGxlU3VibWlzc2lvbihcblx0XHRvcmlnaW5hbERpc2FibGVkU3RhdGVzOiBBcnJheTx7IGNvbnRyb2w6IEZvcm1Db250cm9sPGFueT47IGRpc2FibGVkOiBib29sZWFuIH0+LFxuXHRcdHJlbmRlcmVkQW5kRW5hYmxlZFZhbHVlczogUmVjb3JkPGFueSwgYW55Pixcblx0XHRyZW5kZXJlZEJ1dERpc2FibGVkVmFsdWVzOiBSZWNvcmQ8YW55LCBhbnk+LFxuXHRcdGZvcm1Hcm91cFZhbHVlKTogUHJvbWlzZTxhbnk+XG5cdHtcblx0XHRpZiAodGhpcy5mb3JtR3JvdXAuaW52YWxpZCkge1xuXHRcdFx0dGhpcy5hY3RpdmVDb250cm9scy5maW5kKChlKSA9PiBlLmZvcm1Db250cm9sLmludmFsaWQpPy5mb3JtRWxlbWVudD8uc2Nyb2xsVG8oKTtcblx0XHRcdHRoaXMuc2V0RGlzYWJsZWRTdGF0ZXNGb3JBbGxDb250cm9scyhvcmlnaW5hbERpc2FibGVkU3RhdGVzKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChpbnZhbGlkRmllbGRzU3ltYm9sKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXREaXNhYmxlZFN0YXRlc0ZvckFsbENvbnRyb2xzKG9yaWdpbmFsRGlzYWJsZWRTdGF0ZXMpO1xuXHRcdFx0Y29uc3QgcmVuZGVyZWRWYWx1ZXMgPSBkZWVwTWVyZ2UocmVuZGVyZWRBbmRFbmFibGVkVmFsdWVzLCByZW5kZXJlZEJ1dERpc2FibGVkVmFsdWVzKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW2Zvcm1Hcm91cFZhbHVlLCByZW5kZXJlZFZhbHVlc10pO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0UmVuZGVyZWRGaWVsZFZhbHVlc0Zvcm1Hcm91cChmb3JtR3JvdXA6IEZvcm1Hcm91cCwgZW5hYmxlZDogYm9vbGVhbiwgdmFsdWVPYmplY3QgPSB7fSk6IG9iamVjdCB7XG5cdFx0T2JqZWN0LmVudHJpZXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChbbmFtZSwgY29udHJvbF0pID0+IHtcblx0XHRcdGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wgJiYgY29udHJvbC5lbmFibGVkID09PSBlbmFibGVkICYmIHRoaXMuYWN0aXZlQ29udHJvbHMuc29tZShlID0+IGUuZm9ybUNvbnRyb2wgPT09IGNvbnRyb2wpKSB7XG5cdFx0XHRcdHZhbHVlT2JqZWN0W25hbWVdID0gY29udHJvbC52YWx1ZTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuXHRcdFx0XHR2YWx1ZU9iamVjdFtuYW1lXSA9IFtdO1xuXHRcdFx0XHR0aGlzLmdldFJlbmRlcmVkRmllbGRWYWx1ZXNGb3JtQXJyYXkoY29udHJvbCwgZW5hYmxlZCwgdmFsdWVPYmplY3RbbmFtZV0pO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG5cdFx0XHRcdHZhbHVlT2JqZWN0W25hbWVdID0ge307XG5cdFx0XHRcdHRoaXMuZ2V0UmVuZGVyZWRGaWVsZFZhbHVlc0Zvcm1Hcm91cChjb250cm9sLCBlbmFibGVkLCB2YWx1ZU9iamVjdFtuYW1lXSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHZhbHVlT2JqZWN0O1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRSZW5kZXJlZEZpZWxkVmFsdWVzRm9ybUFycmF5KGZvcm1BcnJheTogRm9ybUFycmF5LCBlbmFibGVkOiBib29sZWFuLCB2YWx1ZUFycmF5OiBBcnJheTxhbnk+KTogdm9pZCB7XG5cdFx0Zm9ybUFycmF5LmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuXHRcdFx0aWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCAmJiBjb250cm9sLmVuYWJsZWQgPT09IGVuYWJsZWQgJiYgdGhpcy5hY3RpdmVDb250cm9scy5zb21lKGUgPT4gZS5mb3JtQ29udHJvbCA9PT0gY29udHJvbCkpIHtcblx0XHRcdFx0dmFsdWVBcnJheS5wdXNoKGNvbnRyb2wudmFsdWUpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG5cdFx0XHRcdGNvbnN0IG5ld0FycmF5ID0gW107XG5cdFx0XHRcdHZhbHVlQXJyYXkucHVzaChuZXdBcnJheSk7XG5cdFx0XHRcdHRoaXMuZ2V0UmVuZGVyZWRGaWVsZFZhbHVlc0Zvcm1BcnJheShjb250cm9sLCBlbmFibGVkLCBuZXdBcnJheSk7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcblx0XHRcdFx0Y29uc3QgbmV3T2JqZWN0ID0ge307XG5cdFx0XHRcdHZhbHVlQXJyYXkucHVzaChuZXdPYmplY3QpO1xuXHRcdFx0XHR0aGlzLmdldFJlbmRlcmVkRmllbGRWYWx1ZXNGb3JtR3JvdXAoY29udHJvbCwgZW5hYmxlZCwgbmV3T2JqZWN0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgc2V0RGlzYWJsZWRTdGF0ZXNGb3JBbGxDb250cm9scyhvcmlnaW5hbERpc2FibGVkU3RhdGVzOiBBcnJheTx7IGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDsgZGlzYWJsZWQ6IGJvb2xlYW4gfT4pOiB2b2lkIHtcblx0XHRvcmlnaW5hbERpc2FibGVkU3RhdGVzLmZvckVhY2goKGUpID0+IHtcblx0XHRcdGlmIChlLmRpc2FibGVkKSB7XG5cdFx0XHRcdGUuY29udHJvbC5kaXNhYmxlKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlLmNvbnRyb2wuZW5hYmxlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiIsIjxmb3JtPlxuXHQ8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Zvcm0+XG5cblxuIl19
|
|
342
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbGlwcGEvbmd4LWVuaGFuY3ktZm9ybXMvc3JjL2xpYi9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy9saWIvZm9ybS9mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUFFLFlBQVksRUFDdkIsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBRU4sUUFBUSxFQUNSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBa0IsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxSSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFFNUMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFNdEUsTUFBTSxPQUFPLGdCQUFnQjs4R0FBaEIsZ0JBQWdCO2tHQUFoQixnQkFBZ0I7OzJGQUFoQixnQkFBZ0I7a0JBSjVCLFNBQVM7bUJBQUM7b0JBQ1YsOENBQThDO29CQUM5QyxRQUFRLEVBQUUsY0FBYztpQkFDeEI7OEJBRVMsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7O0FBUVAsTUFBTSxPQUFPLGFBQWE7SUFvQnpCLFlBQTRDLE1BQXFCLEVBQXNCLGtCQUFvQztRQUEvRSxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQXNCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBa0I7UUFuQjNH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QUFFO1lBQ3BDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNoQixDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLENBQUM7aUJBQU0sQ0FBQztnQkFDUCxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBM1RXLGFBQWE7a0dBQWIsYUFBYSw0WUNqQzFCLG9EQUtBOzsyRkQ0QmEsYUFBYTtrQkFMekIsU0FBUzsrQkFDQyxVQUFVOzswQkF3QlAsUUFBUTs7MEJBQUksUUFBUTs7MEJBQW1DLFFBQVE7eUNBbkI1RCxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLGlCQUFpQjtzQkFBaEMsS0FBSztnQkFDVSxvQkFBb0I7c0JBQW5DLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFDVSxxQkFBcUI7c0JBQXBDLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFDVyxVQUFVO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHREaXJlY3RpdmUsIEV2ZW50RW1pdHRlcixcblx0SW5wdXQsXG5cdE9uQ2hhbmdlcyxcblx0T25EZXN0cm95LFxuXHRPbkluaXQsXG5cdE9wdGlvbmFsLFxuXHRPdXRwdXQsXG5cdFNpbXBsZUNoYW5nZXMsXG5cdFNraXBTZWxmLCBUZW1wbGF0ZVJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtGb3JtRWxlbWVudENvbXBvbmVudH0gZnJvbSAnLi9mb3JtLWVsZW1lbnQvZm9ybS1lbGVtZW50LmNvbXBvbmVudCc7XG5pbXBvcnQge2lzVmFsdWVTZXR9IGZyb20gJy4uL3V0aWwvdmFsdWVzJztcbmltcG9ydCB7IGRlZXBNZXJnZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0cyc7XG5cbmV4cG9ydCBjb25zdCBpbnZhbGlkRmllbGRzU3ltYm9sID0gU3ltYm9sKCdOb3QgYWxsIGZpZWxkcyBhcmUgdmFsaWQnKTtcblxuQERpcmVjdGl2ZSh7XG5cdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3Jcblx0c2VsZWN0b3I6ICdrbHAtc3ViLWZvcm0nLFxufSlcbmV4cG9ydCBjbGFzcyBTdWJGb3JtRGlyZWN0aXZlIHtcblx0QElucHV0KCkgaW5qZWN0SW50bzogVW50eXBlZEZvcm1BcnJheSB8IFVudHlwZWRGb3JtR3JvdXA7XG5cdEBJbnB1dCgpIGF0OiBudW1iZXIgfCBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2tscC1mb3JtJyxcblx0dGVtcGxhdGVVcmw6ICcuL2Zvcm0uY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi9mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcblx0QElucHV0KCkgcHVibGljIHJlYWRPbmx5ID0gZmFsc2U7XG5cdEBJbnB1dCgpIHB1YmxpYyBzaG93RXJyb3JNZXNzYWdlcyA9IHRydWU7XG5cdEBJbnB1dCgpIHB1YmxpYyBlcnJvck1lc3NhZ2VMb2NhdGlvbjogJ2JlbG93Q2FwdGlvbicgfCAncmlnaHRPZkNhcHRpb24nID0gJ2JlbG93Q2FwdGlvbic7XG5cdEBJbnB1dCgpIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcblx0QElucHV0KCkgcHVibGljIGZvcm1BcnJheTogRm9ybUFycmF5O1xuXHRASW5wdXQoKSBwdWJsaWMgd2FybmluZ3M6IE1hcDxBYnN0cmFjdENvbnRyb2wsIHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4+ID0gbmV3IE1hcDxBYnN0cmFjdENvbnRyb2wsIHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4+KCk7XG5cdEBJbnB1dCgpIHB1YmxpYyBlcnJvcnM6IE1hcDxBYnN0cmFjdENvbnRyb2wsIHN0cmluZz4gPSBuZXcgTWFwPEFic3RyYWN0Q29udHJvbCwgc3RyaW5nPigpO1xuXHRASW5wdXQoKSBwdWJsaWMgcGF0Y2hWYWx1ZUludGVyY2VwdG9yOiAodmFsdWVzOiBhbnkpID0+IFByb21pc2U8YW55Pjtcblx0QElucHV0KCkgcHVibGljIGFsbG93U3VibWl0T246ICdidXR0b25BbmRFbnRlcicgfCAnYnV0dG9uT25seScgPSAnYnV0dG9uQW5kRW50ZXInO1xuXHRAT3V0cHV0KCkgcHVibGljIG9uSW5qZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZDxzdHJpbmcsIGFueT4+KCk7XG5cblx0cHJpdmF0ZSB0b3BMZXZlbEZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2w7XG5cblx0Ly8gd2Uga2VlcCB0cmFjayBvZiB3aGF0IGZvcm0gY29udHJvbHMgYXJlIGFjdHVhbGx5IHJlbmRlcmVkLiBPbmx5IHRob3NlIGNvdW50IHdoZW4gbG9va2luZyBhdCBmb3JtIHZhbGlkYXRpb25cblx0cHJpdmF0ZSBhY3RpdmVDb250cm9sczogQXJyYXk8e1xuXHRcdGZvcm1Db250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2w7XG5cdFx0Zm9ybUVsZW1lbnQ6IEZvcm1FbGVtZW50Q29tcG9uZW50O1xuXHR9PiA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yKEBTa2lwU2VsZigpIEBPcHRpb25hbCgpIHByaXZhdGUgcGFyZW50OiBGb3JtQ29tcG9uZW50LCBAT3B0aW9uYWwoKSBwcml2YXRlIHN1YkZvcm1QbGFjZWhvbGRlcjogU3ViRm9ybURpcmVjdGl2ZSkge1xuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy50b3BMZXZlbEZvcm1Db250cm9sID0gdGhpcy5mb3JtR3JvdXAgPz8gdGhpcy5mb3JtQXJyYXk7XG5cdFx0aWYgKGlzVmFsdWVTZXQodGhpcy5wYXRjaFZhbHVlSW50ZXJjZXB0b3IpKSB7XG5cdFx0XHR0aGlzLmFkZFN1cHBvcnRGb3JQYXRjaFZhbHVlSW50ZXJjZXB0b3IoKTtcblx0XHR9XG5cdFx0aWYgKGlzVmFsdWVTZXQodGhpcy5wYXJlbnQpICYmIGlzVmFsdWVTZXQodGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIpKSB7XG5cdFx0XHRjb25zdCBpbmplY3RJbnRvID0gdGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIuaW5qZWN0SW50bztcblx0XHRcdGNvbnN0IGluamVjdEF0ID0gdGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIuYXQ7XG5cdFx0XHRpZiAoaW5qZWN0SW50byBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBpbmplY3RBdCAhPT0gJ251bWJlcicpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCBpbmRleCBGb3JtQXJyYXkgd2l0aCAke3R5cGVvZiBpbmplY3RBdH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaW5qZWN0SW50by5hdChpbmplY3RBdCk/LmRpc2FibGVkKSB7XG5cdFx0XHRcdFx0dGhpcy50b3BMZXZlbEZvcm1Db250cm9sLmRpc2FibGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCB2YWx1ZUJlZm9yZUluamVjdCA9IGluamVjdEludG8uYXQoaW5qZWN0QXQpPy52YWx1ZTtcblx0XHRcdFx0aWYgKGlzVmFsdWVTZXQodmFsdWVCZWZvcmVJbmplY3QpKSB7XG5cdFx0XHRcdFx0dGhpcy50b3BMZXZlbEZvcm1Db250cm9sLnBhdGNoVmFsdWUodmFsdWVCZWZvcmVJbmplY3QpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluamVjdEludG8uc2V0Q29udHJvbChpbmplY3RBdCwgdGhpcy50b3BMZXZlbEZvcm1Db250cm9sKTtcblx0XHRcdFx0dGhpcy5vbkluamVjdGVkLmVtaXQodmFsdWVCZWZvcmVJbmplY3QpO1xuXHRcdFx0fSBlbHNlIGlmIChpbmplY3RJbnRvIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGluamVjdEF0ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgY2Fubm90IGluZGV4IEZvcm1Hcm91cCB3aXRoICR7dHlwZW9mIGluamVjdEF0fWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChpbmplY3RJbnRvLmdldChpbmplY3RBdCk/LmRpc2FibGVkKSB7XG5cdFx0XHRcdFx0dGhpcy50b3BMZXZlbEZvcm1Db250cm9sLmRpc2FibGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCB2YWx1ZUJlZm9yZUluamVjdCA9IGluamVjdEludG8uZ2V0KGluamVjdEF0KT8udmFsdWU7XG5cdFx0XHRcdGlmIChpc1ZhbHVlU2V0KHZhbHVlQmVmb3JlSW5qZWN0KSkge1xuXHRcdFx0XHRcdHRoaXMudG9wTGV2ZWxGb3JtQ29udHJvbC5wYXRjaFZhbHVlKHZhbHVlQmVmb3JlSW5qZWN0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpbmplY3RJbnRvLnNldENvbnRyb2woaW5qZWN0QXQsIHRoaXMudG9wTGV2ZWxGb3JtQ29udHJvbCk7XG5cdFx0XHRcdHRoaXMub25JbmplY3RlZC5lbWl0KHZhbHVlQmVmb3JlSW5qZWN0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRuZ09uQ2hhbmdlcyhzaW1wbGVDaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG5cdFx0aWYgKHNpbXBsZUNoYW5nZXMucmVhZE9ubHk/LmN1cnJlbnRWYWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy5hY3RpdmVDb250cm9scy5mb3JFYWNoKGUgPT4gZS5mb3JtQ29udHJvbC5kaXNhYmxlKCkpO1xuXHRcdH1cblx0XHRpZiAoaXNWYWx1ZVNldChzaW1wbGVDaGFuZ2VzLndhcm5pbmdzPy5jdXJyZW50VmFsdWUpKSB7XG5cdFx0XHR0aGlzLnBhdGNoRm9ybVdhcm5pbmdzTWFwKCk7XG5cdFx0fVxuXHRcdGlmIChpc1ZhbHVlU2V0KHNpbXBsZUNoYW5nZXMuZXJyb3JzPy5jdXJyZW50VmFsdWUpKSB7XG5cdFx0XHR0aGlzLnBhdGNoRm9ybUVycm9yc01hcCgpO1xuXHRcdH1cblx0fVxuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdGlmIChpc1ZhbHVlU2V0KHRoaXMucGFyZW50KSAmJiBpc1ZhbHVlU2V0KHRoaXMuc3ViRm9ybVBsYWNlaG9sZGVyKSkge1xuXHRcdFx0Y29uc3QgaW5qZWN0SW50byA9IHRoaXMuc3ViRm9ybVBsYWNlaG9sZGVyLmluamVjdEludG87XG5cdFx0XHRjb25zdCBpbmplY3RBdCA9IHRoaXMuc3ViRm9ybVBsYWNlaG9sZGVyLmF0O1xuXHRcdFx0aWYgKGluamVjdEludG8gaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XG5cdFx0XHRcdGNvbnN0IGlkeCA9IGluamVjdEludG8uY29udHJvbHMuZmluZEluZGV4KGUgPT4gZSA9PT0gdGhpcy50b3BMZXZlbEZvcm1Db250cm9sKTtcblx0XHRcdFx0aW5qZWN0SW50by5zZXRDb250cm9sKGlkeCwgbmV3IEZvcm1Db250cm9sKCkpO1xuXHRcdFx0fSBlbHNlIGlmIChpbmplY3RJbnRvIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGluamVjdEF0ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgY2Fubm90IGluZGV4IEZvcm1Hcm91cCB3aXRoICR7dHlwZW9mIGluamVjdEF0fWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluamVjdEludG8uc2V0Q29udHJvbChpbmplY3RBdCwgbmV3IEZvcm1Db250cm9sKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcGF0Y2hGb3JtV2FybmluZ3NNYXAoKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2V0Rm4gPSB0aGlzLndhcm5pbmdzLnNldDtcblx0XHR0aGlzLndhcm5pbmdzLnNldCA9IChrZXk6IEFic3RyYWN0Q29udHJvbCwgdmFsdWU6IHN0cmluZyk6IE1hcDxBYnN0cmFjdENvbnRyb2wsIHN0cmluZz4gPT4ge1xuXHRcdFx0Y29uc3QgcHJldlZhbCA9IHRoaXMud2FybmluZ3MuZ2V0KGtleSk7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBzZXRGbi5jYWxsKHRoaXMud2FybmluZ3MsIGtleSwgdmFsdWUpO1xuXHRcdFx0aWYgKHByZXZWYWwgIT09IHZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuZ2V0Rm9ybUVsZW1lbnRCeUZvcm1Db250cm9sKGtleSk/LmRldGVybWluZVBvcHVwU3RhdGUoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fTtcblxuXHRcdGNvbnN0IGRlbGV0ZUZuID0gdGhpcy53YXJuaW5ncy5kZWxldGU7XG5cdFx0dGhpcy53YXJuaW5ncy5kZWxldGUgPSAoa2V5OiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuID0+IHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGRlbGV0ZUZuLmNhbGwodGhpcy53YXJuaW5ncywga2V5KTtcblx0XHRcdHRoaXMuZ2V0Rm9ybUVsZW1lbnRCeUZvcm1Db250cm9sKGtleSk/LmRldGVybWluZVBvcHVwU3RhdGUoKTtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgcGF0Y2hGb3JtRXJyb3JzTWFwKCk6IHZvaWQge1xuXHRcdGNvbnN0IHNldEZuID0gdGhpcy5lcnJvcnMuc2V0O1xuXHRcdHRoaXMuZXJyb3JzLnNldCA9IChrZXk6IEFic3RyYWN0Q29udHJvbCwgdmFsdWU6IHN0cmluZyk6IE1hcDxBYnN0cmFjdENvbnRyb2wsIHN0cmluZz4gPT4ge1xuXHRcdFx0Y29uc3QgcHJldlZhbCA9IHRoaXMuZXJyb3JzLmdldChrZXkpO1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gc2V0Rm4uY2FsbCh0aGlzLmVycm9ycywga2V5LCB2YWx1ZSk7XG5cdFx0XHRrZXkuc2V0RXJyb3JzKHsgLi4ua2V5LmVycm9ycywgZm9ybUxldmVsOiB2YWx1ZX0pO1xuXHRcdFx0aWYgKHByZXZWYWwgIT09IHZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuZ2V0Rm9ybUVsZW1lbnRCeUZvcm1Db250cm9sKGtleSk/LmRldGVybWluZVBvcHVwU3RhdGUoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fTtcblxuXHRcdGNvbnN0IGRlbGV0ZUZuID0gdGhpcy5lcnJvcnMuZGVsZXRlO1xuXHRcdHRoaXMuZXJyb3JzLmRlbGV0ZSA9IChrZXk6IEFic3RyYWN0Q29udHJvbCk6IGJvb2xlYW4gPT4ge1xuXHRcdFx0Y29uc3QgbmV3RXJyb3JzT2JqZWN0ID0ga2V5LmVycm9ycztcblx0XHRcdGRlbGV0ZSBuZXdFcnJvcnNPYmplY3QuZm9ybUxldmVsO1xuXHRcdFx0a2V5LnNldEVycm9ycyhuZXdFcnJvcnNPYmplY3QpO1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gZGVsZXRlRm4uY2FsbCh0aGlzLmVycm9ycywga2V5KTtcblx0XHRcdHRoaXMuZ2V0Rm9ybUVsZW1lbnRCeUZvcm1Db250cm9sKGtleSk/LmRldGVybWluZVBvcHVwU3RhdGUoKTtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgYWRkU3VwcG9ydEZvclBhdGNoVmFsdWVJbnRlcmNlcHRvcigpOiB2b2lkIHtcblx0XHRjb25zdCBmbiA9IHRoaXMudG9wTGV2ZWxGb3JtQ29udHJvbC5wYXRjaFZhbHVlO1xuXHRcdGNvbnN0IG5ld0ZuID0gKFxuXHRcdFx0dmFsdWU6IHtcblx0XHRcdFx0W2tleTogc3RyaW5nXTogYW55O1xuXHRcdFx0fSxcblx0XHRcdG9wdGlvbnM/OiB7XG5cdFx0XHRcdG9ubHlTZWxmPzogYm9vbGVhbjtcblx0XHRcdFx0ZW1pdEV2ZW50PzogYm9vbGVhbjtcblx0XHRcdH1cblx0XHQpOiB2b2lkID0+IHtcblx0XHRcdHRoaXMucGF0Y2hWYWx1ZUludGVyY2VwdG9yKHZhbHVlKS50aGVuKCh2YWwpID0+IHtcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0Zm4uY2FsbCh0aGlzLnRvcExldmVsRm9ybUNvbnRyb2wsIHZhbCwgb3B0aW9ucyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHR0aGlzLnRvcExldmVsRm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSA9IG5ld0ZuO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyQ29udHJvbChmb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sLCBmb3JtRWxlbWVudDogRm9ybUVsZW1lbnRDb21wb25lbnQpOiB2b2lkIHtcblx0XHR0aGlzLmFjdGl2ZUNvbnRyb2xzLnB1c2goe2Zvcm1Db250cm9sLCBmb3JtRWxlbWVudH0pO1xuXHRcdGlmICh0aGlzLnBhcmVudCkge1xuXHRcdFx0dGhpcy5wYXJlbnQucmVnaXN0ZXJDb250cm9sKGZvcm1Db250cm9sLCBmb3JtRWxlbWVudCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLnJlYWRPbmx5KSB7XG5cdFx0XHRmb3JtQ29udHJvbC5kaXNhYmxlKCk7XG5cdFx0fVxuXHRcdGNvbnN0IGVuYWJsZUZuOiAob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pID0+IHZvaWQgPSBmb3JtQ29udHJvbC5lbmFibGU7XG5cdFx0Zm9ybUNvbnRyb2wuZW5hYmxlID0gKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSA9PiB7XG5cdFx0XHRpZiAoIXRoaXMucmVhZE9ubHkpIHtcblx0XHRcdFx0ZW5hYmxlRm4uY2FsbChmb3JtQ29udHJvbCwgb3B0cyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdHB1YmxpYyB1bnJlZ2lzdGVyQ29udHJvbChmb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogdm9pZCB7XG5cdFx0dGhpcy5hY3RpdmVDb250cm9scyA9IHRoaXMuYWN0aXZlQ29udHJvbHMuZmlsdGVyKChlKSA9PiBlLmZvcm1Db250cm9sICE9PSBmb3JtQ29udHJvbCk7XG5cdFx0aWYgKHRoaXMucGFyZW50KSB7XG5cdFx0XHR0aGlzLnBhcmVudC51bnJlZ2lzdGVyQ29udHJvbChmb3JtQ29udHJvbCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBhZGRGb3JtR3JvdXBDb250cm9scyhmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsIHJlc3VsdDogQXJyYXk8VW50eXBlZEZvcm1Db250cm9sPik6IHZvaWQge1xuXHRcdE9iamVjdC52YWx1ZXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xuXHRcdFx0XHR0aGlzLmFkZEZvcm1Hcm91cENvbnRyb2xzKHZhbHVlLCByZXN1bHQpO1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcblx0XHRcdFx0dGhpcy5hZGRGb3JtQXJyYXlDb250cm9scyh2YWx1ZSwgcmVzdWx0KTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUNvbnRyb2wpIHtcblx0XHRcdFx0dGhpcy5hZGRGb3JtQ29udHJvbCh2YWx1ZSwgcmVzdWx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgYWRkRm9ybUFycmF5Q29udHJvbHMoZm9ybUFycmF5OiBVbnR5cGVkRm9ybUFycmF5LCByZXN1bHQ6IEFycmF5PFVudHlwZWRGb3JtQ29udHJvbD4pOiB2b2lkIHtcblx0XHRmb3JtQXJyYXkuY29udHJvbHMuZm9yRWFjaCgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcblx0XHRcdFx0dGhpcy5hZGRGb3JtR3JvdXBDb250cm9scyh2YWx1ZSwgcmVzdWx0KTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XG5cdFx0XHRcdHRoaXMuYWRkRm9ybUFycmF5Q29udHJvbHModmFsdWUsIHJlc3VsdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Db250cm9sKSB7XG5cdFx0XHRcdHRoaXMuYWRkRm9ybUNvbnRyb2wodmFsdWUsIHJlc3VsdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGdldEFsbEZvcm1Db250cm9scygpOiBBcnJheTxVbnR5cGVkRm9ybUNvbnRyb2w+IHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblx0XHRpZiAodGhpcy50b3BMZXZlbEZvcm1Db250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG5cdFx0XHR0aGlzLmFkZEZvcm1Hcm91cENvbnRyb2xzKHRoaXMudG9wTGV2ZWxGb3JtQ29udHJvbCwgcmVzdWx0KTtcblx0XHR9IGVsc2UgaWYgKHRoaXMudG9wTGV2ZWxGb3JtQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuXHRcdFx0dGhpcy5hZGRGb3JtQXJyYXlDb250cm9scyh0aGlzLnRvcExldmVsRm9ybUNvbnRyb2wsIHJlc3VsdCk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwcml2YXRlIGFkZEZvcm1Db250cm9sKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCwgcmVzdWx0OiBBcnJheTxVbnR5cGVkRm9ybUNvbnRyb2w+KTogdm9pZCB7XG5cdFx0cmVzdWx0LnB1c2goY29udHJvbCk7XG5cdH1cblxuXHRwcml2YXRlIGRpc2FibGVJbmFjdGl2ZUZvcm1Db250cm9sKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5hY3RpdmVDb250cm9scy5zb21lKChlKSA9PiBlLmZvcm1Db250cm9sID09PSBjb250cm9sKSkge1xuXHRcdFx0Y29udHJvbC5kaXNhYmxlKCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGdldEZvcm1FbGVtZW50QnlGb3JtQ29udHJvbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBGb3JtRWxlbWVudENvbXBvbmVudCB7XG5cdFx0cmV0dXJuIHRoaXMuYWN0aXZlQ29udHJvbHMuZmluZCgoZSkgPT4gZS5mb3JtQ29udHJvbCA9PT0gY29udHJvbCk/LmZvcm1FbGVtZW50O1xuXHR9XG5cblx0cHVibGljIGdldFdhcm5pbmdUb1Nob3coY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiB7XG5cdFx0cmV0dXJuIHRoaXMud2FybmluZ3MuZ2V0KGNvbnRyb2wpO1xuXHR9XG5cblx0dHJ5U3VibWl0KCk6IFByb21pc2U8YW55PiB7XG5cdFx0dGhpcy50b3BMZXZlbEZvcm1Db250cm9sLm1hcmtBbGxBc1RvdWNoZWQoKTtcblx0XHRjb25zdCBhbGxDb250cm9sczogQXJyYXk8VW50eXBlZEZvcm1Db250cm9sPiA9IHRoaXMuZ2V0QWxsRm9ybUNvbnRyb2xzKCk7XG5cdFx0Y29uc3Qgb3JpZ2luYWxEaXNhYmxlZFN0YXRlcyA9IGFsbENvbnRyb2xzLm1hcChlID0+IHtcblx0XHRcdHJldHVybiB7Y29udHJvbDogZSwgZGlzYWJsZWQ6IGUuZGlzYWJsZWR9O1xuXHRcdH0pO1xuXHRcdGFsbENvbnRyb2xzLmZvckVhY2goZSA9PiB0aGlzLmRpc2FibGVJbmFjdGl2ZUZvcm1Db250cm9sKGUpKTtcblx0XHRhbGxDb250cm9scy5mb3JFYWNoKGUgPT4gZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCkpO1xuXHRcdGNvbnN0IGZvcm1Hcm91cFZhbHVlID0gdGhpcy50b3BMZXZlbEZvcm1Db250cm9sLnZhbHVlO1xuXHRcdGlmICh0aGlzLnRvcExldmVsRm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcblx0XHRcdGNvbnN0IHJlbmRlcmVkQW5kRW5hYmxlZFZhbHVlcyA9IHRoaXMuZ2V0UmVuZGVyZWRGaWVsZFZhbHVlc0Zvcm1Hcm91cCh0aGlzLnRvcExldmVsRm9ybUNvbnRyb2wsIHRydWUpO1xuXHRcdFx0Y29uc3QgcmVuZGVyZWRCdXREaXNhYmxlZFZhbHVlcyA9IHRoaXMuZ2V0UmVuZGVyZWRGaWVsZFZhbHVlc0Zvcm1Hcm91cCh0aGlzLnRvcExldmVsRm9ybUNvbnRyb2wsIGZhbHNlKTtcblxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMudG9wTGV2ZWxGb3JtQ29udHJvbC5wZW5kaW5nKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3ViID0gdGhpcy50b3BMZXZlbEZvcm1Db250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdFx0XHRcdGlmIChyZXMgIT09ICdQRU5ESU5HJykge1xuXHRcdFx0XHRcdFx0XHRzdWIudW5zdWJzY3JpYmUoKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVTdWJtaXNzaW9uKG9yaWdpbmFsRGlzYWJsZWRTdGF0ZXMsIHJlbmRlcmVkQW5kRW5hYmxlZFZhbHVlcywgcmVuZGVyZWRCdXREaXNhYmxlZFZhbHVlcywgZm9ybUdyb3VwVmFsdWUpXG5cdFx0XHRcdFx0XHRcdC50aGVuKHJlc29sdmUpXG5cdFx0XHRcdFx0XHRcdC5jYXRjaChyZWplY3QpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuaGFuZGxlU3VibWlzc2lvbihvcmlnaW5hbERpc2FibGVkU3RhdGVzLCByZW5kZXJlZEFuZEVuYWJsZWRWYWx1ZXMsIHJlbmRlcmVkQnV0RGlzYWJsZWRWYWx1ZXMsIGZvcm1Hcm91cFZhbHVlKVxuXHRcdFx0XHRcdC50aGVuKHJlc29sdmUpXG5cdFx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1N1Ym1pdHRpbmcgYSBGb3JtQXJyYXkgYXMgdG9wTGV2ZWwgbm90IHN1cHBvcnRlZCAoeWV0KS4gV3JhcCBpdCBpbiBhIEZvcm1Hcm91cC4nKTtcblx0fVxuXG5cdHByaXZhdGUgaGFuZGxlU3VibWlzc2lvbihcblx0XHRvcmlnaW5hbERpc2FibGVkU3RhdGVzOiBBcnJheTx7IGNvbnRyb2w6IEZvcm1Db250cm9sPGFueT47IGRpc2FibGVkOiBib29sZWFuIH0+LFxuXHRcdHJlbmRlcmVkQW5kRW5hYmxlZFZhbHVlczogUmVjb3JkPGFueSwgYW55Pixcblx0XHRyZW5kZXJlZEJ1dERpc2FibGVkVmFsdWVzOiBSZWNvcmQ8YW55LCBhbnk+LFxuXHRcdGZvcm1Hcm91cFZhbHVlKTogUHJvbWlzZTxhbnk+XG5cdHtcblx0XHRpZiAodGhpcy50b3BMZXZlbEZvcm1Db250cm9sLmludmFsaWQpIHtcblx0XHRcdHRoaXMuYWN0aXZlQ29udHJvbHMuZmluZCgoZSkgPT4gZS5mb3JtQ29udHJvbC5pbnZhbGlkKT8uZm9ybUVsZW1lbnQ/LnNjcm9sbFRvKCk7XG5cdFx0XHR0aGlzLnNldERpc2FibGVkU3RhdGVzRm9yQWxsQ29udHJvbHMob3JpZ2luYWxEaXNhYmxlZFN0YXRlcyk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoaW52YWxpZEZpZWxkc1N5bWJvbCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0RGlzYWJsZWRTdGF0ZXNGb3JBbGxDb250cm9scyhvcmlnaW5hbERpc2FibGVkU3RhdGVzKTtcblx0XHRcdGNvbnN0IHJlbmRlcmVkVmFsdWVzID0gZGVlcE1lcmdlKHJlbmRlcmVkQW5kRW5hYmxlZFZhbHVlcywgcmVuZGVyZWRCdXREaXNhYmxlZFZhbHVlcyk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtmb3JtR3JvdXBWYWx1ZSwgcmVuZGVyZWRWYWx1ZXNdKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldFJlbmRlcmVkRmllbGRWYWx1ZXNGb3JtR3JvdXAoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGVuYWJsZWQ6IGJvb2xlYW4sIHZhbHVlT2JqZWN0ID0ge30pOiBvYmplY3Qge1xuXHRcdE9iamVjdC5lbnRyaWVzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaCgoW25hbWUsIGNvbnRyb2xdKSA9PiB7XG5cdFx0XHRpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sICYmIGNvbnRyb2wuZW5hYmxlZCA9PT0gZW5hYmxlZCAmJiB0aGlzLmFjdGl2ZUNvbnRyb2xzLnNvbWUoZSA9PiBlLmZvcm1Db250cm9sID09PSBjb250cm9sKSkge1xuXHRcdFx0XHR2YWx1ZU9iamVjdFtuYW1lXSA9IGNvbnRyb2wudmFsdWU7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcblx0XHRcdFx0dmFsdWVPYmplY3RbbmFtZV0gPSBbXTtcblx0XHRcdFx0dGhpcy5nZXRSZW5kZXJlZEZpZWxkVmFsdWVzRm9ybUFycmF5KGNvbnRyb2wsIGVuYWJsZWQsIHZhbHVlT2JqZWN0W25hbWVdKTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuXHRcdFx0XHR2YWx1ZU9iamVjdFtuYW1lXSA9IHt9O1xuXHRcdFx0XHR0aGlzLmdldFJlbmRlcmVkRmllbGRWYWx1ZXNGb3JtR3JvdXAoY29udHJvbCwgZW5hYmxlZCwgdmFsdWVPYmplY3RbbmFtZV0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiB2YWx1ZU9iamVjdDtcblx0fVxuXG5cdHByaXZhdGUgZ2V0UmVuZGVyZWRGaWVsZFZhbHVlc0Zvcm1BcnJheShmb3JtQXJyYXk6IEZvcm1BcnJheSwgZW5hYmxlZDogYm9vbGVhbiwgdmFsdWVBcnJheTogQXJyYXk8YW55Pik6IHZvaWQge1xuXHRcdGZvcm1BcnJheS5jb250cm9scy5mb3JFYWNoKChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcblx0XHRcdGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wgJiYgY29udHJvbC5lbmFibGVkID09PSBlbmFibGVkICYmIHRoaXMuYWN0aXZlQ29udHJvbHMuc29tZShlID0+IGUuZm9ybUNvbnRyb2wgPT09IGNvbnRyb2wpKSB7XG5cdFx0XHRcdHZhbHVlQXJyYXkucHVzaChjb250cm9sLnZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuXHRcdFx0XHRjb25zdCBuZXdBcnJheSA9IFtdO1xuXHRcdFx0XHR2YWx1ZUFycmF5LnB1c2gobmV3QXJyYXkpO1xuXHRcdFx0XHR0aGlzLmdldFJlbmRlcmVkRmllbGRWYWx1ZXNGb3JtQXJyYXkoY29udHJvbCwgZW5hYmxlZCwgbmV3QXJyYXkpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG5cdFx0XHRcdGNvbnN0IG5ld09iamVjdCA9IHt9O1xuXHRcdFx0XHR2YWx1ZUFycmF5LnB1c2gobmV3T2JqZWN0KTtcblx0XHRcdFx0dGhpcy5nZXRSZW5kZXJlZEZpZWxkVmFsdWVzRm9ybUdyb3VwKGNvbnRyb2wsIGVuYWJsZWQsIG5ld09iamVjdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIHNldERpc2FibGVkU3RhdGVzRm9yQWxsQ29udHJvbHMob3JpZ2luYWxEaXNhYmxlZFN0YXRlczogQXJyYXk8eyBjb250cm9sOiBBYnN0cmFjdENvbnRyb2w7IGRpc2FibGVkOiBib29sZWFuIH0+KTogdm9pZCB7XG5cdFx0b3JpZ2luYWxEaXNhYmxlZFN0YXRlcy5mb3JFYWNoKChlKSA9PiB7XG5cdFx0XHRpZiAoZS5kaXNhYmxlZCkge1xuXHRcdFx0XHRlLmNvbnRyb2wuZGlzYWJsZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZS5jb250cm9sLmVuYWJsZSgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG4iLCI8Zm9ybT5cblx0PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9mb3JtPlxuXG5cbiJdfQ==
|
|
@@ -3,7 +3,7 @@ import { Directive, Input, EventEmitter, Component, SkipSelf, Optional, Output,
|
|
|
3
3
|
import * as i1 from '@angular/common';
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
5
|
import * as i2 from '@angular/forms';
|
|
6
|
-
import { UntypedFormArray, UntypedFormGroup, FormControl, UntypedFormControl,
|
|
6
|
+
import { UntypedFormArray, UntypedFormGroup, FormControl, UntypedFormControl, FormGroup, FormArray, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
|
|
7
7
|
import { isString } from 'lodash-es';
|
|
8
8
|
import { isArray } from 'lodash';
|
|
9
9
|
import * as i4 from '@ng-select/ng-select';
|
|
@@ -173,6 +173,7 @@ class FormComponent {
|
|
|
173
173
|
this.activeControls = [];
|
|
174
174
|
}
|
|
175
175
|
ngOnInit() {
|
|
176
|
+
this.topLevelFormControl = this.formGroup ?? this.formArray;
|
|
176
177
|
if (isValueSet(this.patchValueInterceptor)) {
|
|
177
178
|
this.addSupportForPatchValueInterceptor();
|
|
178
179
|
}
|
|
@@ -184,13 +185,13 @@ class FormComponent {
|
|
|
184
185
|
throw new Error(`cannot index FormArray with ${typeof injectAt}`);
|
|
185
186
|
}
|
|
186
187
|
if (injectInto.at(injectAt)?.disabled) {
|
|
187
|
-
this.
|
|
188
|
+
this.topLevelFormControl.disable();
|
|
188
189
|
}
|
|
189
190
|
const valueBeforeInject = injectInto.at(injectAt)?.value;
|
|
190
191
|
if (isValueSet(valueBeforeInject)) {
|
|
191
|
-
this.
|
|
192
|
+
this.topLevelFormControl.patchValue(valueBeforeInject);
|
|
192
193
|
}
|
|
193
|
-
injectInto.setControl(injectAt, this.
|
|
194
|
+
injectInto.setControl(injectAt, this.topLevelFormControl);
|
|
194
195
|
this.onInjected.emit(valueBeforeInject);
|
|
195
196
|
}
|
|
196
197
|
else if (injectInto instanceof UntypedFormGroup) {
|
|
@@ -198,13 +199,13 @@ class FormComponent {
|
|
|
198
199
|
throw new Error(`cannot index FormGroup with ${typeof injectAt}`);
|
|
199
200
|
}
|
|
200
201
|
if (injectInto.get(injectAt)?.disabled) {
|
|
201
|
-
this.
|
|
202
|
+
this.topLevelFormControl.disable();
|
|
202
203
|
}
|
|
203
204
|
const valueBeforeInject = injectInto.get(injectAt)?.value;
|
|
204
205
|
if (isValueSet(valueBeforeInject)) {
|
|
205
|
-
this.
|
|
206
|
+
this.topLevelFormControl.patchValue(valueBeforeInject);
|
|
206
207
|
}
|
|
207
|
-
injectInto.setControl(injectAt, this.
|
|
208
|
+
injectInto.setControl(injectAt, this.topLevelFormControl);
|
|
208
209
|
this.onInjected.emit(valueBeforeInject);
|
|
209
210
|
}
|
|
210
211
|
}
|
|
@@ -225,7 +226,7 @@ class FormComponent {
|
|
|
225
226
|
const injectInto = this.subFormPlaceholder.injectInto;
|
|
226
227
|
const injectAt = this.subFormPlaceholder.at;
|
|
227
228
|
if (injectInto instanceof UntypedFormArray) {
|
|
228
|
-
const idx = injectInto.controls.findIndex(e => e === this.
|
|
229
|
+
const idx = injectInto.controls.findIndex(e => e === this.topLevelFormControl);
|
|
229
230
|
injectInto.setControl(idx, new FormControl());
|
|
230
231
|
}
|
|
231
232
|
else if (injectInto instanceof UntypedFormGroup) {
|
|
@@ -275,15 +276,15 @@ class FormComponent {
|
|
|
275
276
|
};
|
|
276
277
|
}
|
|
277
278
|
addSupportForPatchValueInterceptor() {
|
|
278
|
-
const fn = this.
|
|
279
|
+
const fn = this.topLevelFormControl.patchValue;
|
|
279
280
|
const newFn = (value, options) => {
|
|
280
281
|
this.patchValueInterceptor(value).then((val) => {
|
|
281
282
|
setTimeout(() => {
|
|
282
|
-
fn.call(this.
|
|
283
|
+
fn.call(this.topLevelFormControl, val, options);
|
|
283
284
|
});
|
|
284
285
|
});
|
|
285
286
|
};
|
|
286
|
-
this.
|
|
287
|
+
this.topLevelFormControl.patchValue = newFn;
|
|
287
288
|
}
|
|
288
289
|
registerControl(formControl, formElement) {
|
|
289
290
|
this.activeControls.push({ formControl, formElement });
|
|
@@ -334,7 +335,12 @@ class FormComponent {
|
|
|
334
335
|
}
|
|
335
336
|
getAllFormControls() {
|
|
336
337
|
const result = [];
|
|
337
|
-
|
|
338
|
+
if (this.topLevelFormControl instanceof FormGroup) {
|
|
339
|
+
this.addFormGroupControls(this.topLevelFormControl, result);
|
|
340
|
+
}
|
|
341
|
+
else if (this.topLevelFormControl instanceof FormArray) {
|
|
342
|
+
this.addFormArrayControls(this.topLevelFormControl, result);
|
|
343
|
+
}
|
|
338
344
|
return result;
|
|
339
345
|
}
|
|
340
346
|
addFormControl(control, result) {
|
|
@@ -352,36 +358,39 @@ class FormComponent {
|
|
|
352
358
|
return this.warnings.get(control);
|
|
353
359
|
}
|
|
354
360
|
trySubmit() {
|
|
355
|
-
this.
|
|
361
|
+
this.topLevelFormControl.markAllAsTouched();
|
|
356
362
|
const allControls = this.getAllFormControls();
|
|
357
363
|
const originalDisabledStates = allControls.map(e => {
|
|
358
364
|
return { control: e, disabled: e.disabled };
|
|
359
365
|
});
|
|
360
366
|
allControls.forEach(e => this.disableInactiveFormControl(e));
|
|
361
367
|
allControls.forEach(e => e.updateValueAndValidity());
|
|
362
|
-
const formGroupValue = this.
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
.
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
.
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
368
|
+
const formGroupValue = this.topLevelFormControl.value;
|
|
369
|
+
if (this.topLevelFormControl instanceof FormGroup) {
|
|
370
|
+
const renderedAndEnabledValues = this.getRenderedFieldValuesFormGroup(this.topLevelFormControl, true);
|
|
371
|
+
const renderedButDisabledValues = this.getRenderedFieldValuesFormGroup(this.topLevelFormControl, false);
|
|
372
|
+
return new Promise((resolve, reject) => {
|
|
373
|
+
if (this.topLevelFormControl.pending) {
|
|
374
|
+
const sub = this.topLevelFormControl.statusChanges.subscribe((res) => {
|
|
375
|
+
if (res !== 'PENDING') {
|
|
376
|
+
sub.unsubscribe();
|
|
377
|
+
this.handleSubmission(originalDisabledStates, renderedAndEnabledValues, renderedButDisabledValues, formGroupValue)
|
|
378
|
+
.then(resolve)
|
|
379
|
+
.catch(reject);
|
|
380
|
+
}
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
this.handleSubmission(originalDisabledStates, renderedAndEnabledValues, renderedButDisabledValues, formGroupValue)
|
|
385
|
+
.then(resolve)
|
|
386
|
+
.catch(reject);
|
|
387
|
+
}
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
throw new Error('Submitting a FormArray as topLevel not supported (yet). Wrap it in a FormGroup.');
|
|
382
391
|
}
|
|
383
392
|
handleSubmission(originalDisabledStates, renderedAndEnabledValues, renderedButDisabledValues, formGroupValue) {
|
|
384
|
-
if (this.
|
|
393
|
+
if (this.topLevelFormControl.invalid) {
|
|
385
394
|
this.activeControls.find((e) => e.formControl.invalid)?.formElement?.scrollTo();
|
|
386
395
|
this.setDisabledStatesForAllControls(originalDisabledStates);
|
|
387
396
|
return Promise.reject(invalidFieldsSymbol);
|
|
@@ -436,7 +445,7 @@ class FormComponent {
|
|
|
436
445
|
});
|
|
437
446
|
}
|
|
438
447
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FormComponent, deps: [{ token: FormComponent, optional: true, skipSelf: true }, { token: SubFormDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
439
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: FormComponent, selector: "klp-form", inputs: { readOnly: "readOnly", showErrorMessages: "showErrorMessages", errorMessageLocation: "errorMessageLocation", formGroup: "formGroup", warnings: "warnings", errors: "errors", patchValueInterceptor: "patchValueInterceptor", allowSubmitOn: "allowSubmitOn" }, outputs: { onInjected: "onInjected" }, usesOnChanges: true, ngImport: i0, template: "<form>\n\t<ng-content></ng-content>\n</form>\n\n\n", styles: [":host{display:block}:host.row{display:flex}:host form{height:inherit}\n"], dependencies: [{ kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] }); }
|
|
448
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: FormComponent, selector: "klp-form", inputs: { readOnly: "readOnly", showErrorMessages: "showErrorMessages", errorMessageLocation: "errorMessageLocation", formGroup: "formGroup", formArray: "formArray", warnings: "warnings", errors: "errors", patchValueInterceptor: "patchValueInterceptor", allowSubmitOn: "allowSubmitOn" }, outputs: { onInjected: "onInjected" }, usesOnChanges: true, ngImport: i0, template: "<form>\n\t<ng-content></ng-content>\n</form>\n\n\n", styles: [":host{display:block}:host.row{display:flex}:host form{height:inherit}\n"], dependencies: [{ kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] }); }
|
|
440
449
|
}
|
|
441
450
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FormComponent, decorators: [{
|
|
442
451
|
type: Component,
|
|
@@ -455,6 +464,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
455
464
|
type: Input
|
|
456
465
|
}], formGroup: [{
|
|
457
466
|
type: Input
|
|
467
|
+
}], formArray: [{
|
|
468
|
+
type: Input
|
|
458
469
|
}], warnings: [{
|
|
459
470
|
type: Input
|
|
460
471
|
}], errors: [{
|