@dsivd/prestations-ng 16.4.5-beta.1 → 16.4.5-beta.2

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/CHANGELOG.md CHANGED
@@ -8,6 +8,12 @@
8
8
 
9
9
  ## [16.4.5]
10
10
 
11
+ ### Added
12
+
13
+ - [foehn-input.component.ts](projects/prestations-ng/src/foehn-input/foehn-input.component.ts)
14
+
15
+ - added `@Input() updateModelWhenDisabled = false;`. When set to `true` allows double-binding even when input is disabled
16
+
11
17
  ### Fixed
12
18
 
13
19
  - [foehn-input-textarea.component.ts](projects/prestations-ng/src/foehn-input/foehn-input-textarea.component.ts)
@@ -27,6 +27,10 @@ export class FoehnInputComponent {
27
27
  * When set to TRUE: Shows error even if input is disabled
28
28
  */
29
29
  this.showErrorWhenDisabled = false;
30
+ /**
31
+ * When set to TRUE: Allows model update to be emitted
32
+ */
33
+ this.updateModelWhenDisabled = false;
30
34
  /**
31
35
  * Fired when the model changes for any reason
32
36
  */
@@ -101,7 +105,7 @@ export class FoehnInputComponent {
101
105
  }
102
106
  updateNgModel(value) {
103
107
  this.model_ = value;
104
- if (!this._disabled) {
108
+ if (!this._disabled || this.updateModelWhenDisabled) {
105
109
  this.modelChange.emit(value);
106
110
  }
107
111
  }
@@ -313,7 +317,7 @@ export class FoehnInputComponent {
313
317
  }
314
318
  }
315
319
  FoehnInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FoehnInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
316
- FoehnInputComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: FoehnInputComponent, inputs: { id: "id", required: "required", label: "label", isLabelSrOnly: "isLabelSrOnly", helpText: "helpText", name: "name", pattern: "pattern", labelStyleModifier: "labelStyleModifier", customErrors: "customErrors", maxlength: "maxlength", overrideGesdemMaxlength: "overrideGesdemMaxlength", min: "min", max: "max", autocomplete: "autocomplete", preventPaste: "preventPaste", clearButton: "clearButton", excludeFromErrorSummary: "excludeFromErrorSummary", hideNotRequiredExtraLabel: "hideNotRequiredExtraLabel", isErrorInherited: "isErrorInherited", showErrorWhenDisabled: "showErrorWhenDisabled", autocapitalize: "autocapitalize", helpModal: "helpModal", model: "model", disabled: "disabled" }, outputs: { modelChange: "modelChange", userInput: "userInput", blurHandler: "blur", focusHandler: "focus" }, host: { properties: { "attr.id": "this.hostId" } }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["entryComponent"], descendants: true }, { propertyName: "inputModelList", predicate: NgModel, descendants: true }, { propertyName: "subComponents", predicate: i0.forwardRef(function () { return FoehnInputComponent; }), descendants: true }], ngImport: i0 });
320
+ FoehnInputComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: FoehnInputComponent, inputs: { id: "id", required: "required", label: "label", isLabelSrOnly: "isLabelSrOnly", helpText: "helpText", name: "name", pattern: "pattern", labelStyleModifier: "labelStyleModifier", customErrors: "customErrors", maxlength: "maxlength", overrideGesdemMaxlength: "overrideGesdemMaxlength", min: "min", max: "max", autocomplete: "autocomplete", preventPaste: "preventPaste", clearButton: "clearButton", excludeFromErrorSummary: "excludeFromErrorSummary", hideNotRequiredExtraLabel: "hideNotRequiredExtraLabel", isErrorInherited: "isErrorInherited", showErrorWhenDisabled: "showErrorWhenDisabled", autocapitalize: "autocapitalize", updateModelWhenDisabled: "updateModelWhenDisabled", helpModal: "helpModal", model: "model", disabled: "disabled" }, outputs: { modelChange: "modelChange", userInput: "userInput", blurHandler: "blur", focusHandler: "focus" }, host: { properties: { "attr.id": "this.hostId" } }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["entryComponent"], descendants: true }, { propertyName: "inputModelList", predicate: NgModel, descendants: true }, { propertyName: "subComponents", predicate: i0.forwardRef(function () { return FoehnInputComponent; }), descendants: true }], ngImport: i0 });
317
321
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FoehnInputComponent, decorators: [{
318
322
  type: Directive
319
323
  }], ctorParameters: function () { return []; }, propDecorators: { id: [{
@@ -358,6 +362,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
358
362
  type: Input
359
363
  }], autocapitalize: [{
360
364
  type: Input
365
+ }], updateModelWhenDisabled: [{
366
+ type: Input
361
367
  }], helpModal: [{
362
368
  type: Input
363
369
  }], inputModelList: [{
@@ -389,4 +395,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
389
395
  }], disabled: [{
390
396
  type: Input
391
397
  }] } });
392
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4taW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlc3RhdGlvbnMtbmcvc3JjL2ZvZWhuLWlucHV0L2ZvZWhuLWlucHV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNULFlBQVksRUFDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBYyxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFHakYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUFFcEYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsS0FBSyxDQUFDO0FBRzVDLE1BQU0sT0FBZ0IsbUJBQW1CO0lBNElyQztRQTdHQSxpQkFBWSxHQUE4QixFQUFFLENBQUM7UUFNN0MsNEJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBZ0JoQyxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUdyQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQjs7V0FFRztRQUVILDRCQUF1QixHQUFHLEtBQUssQ0FBQztRQUVoQzs7V0FFRztRQUVILDhCQUF5QixHQUFHLEtBQUssQ0FBQztRQUdsQyxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFFekI7O1dBRUc7UUFFSCwwQkFBcUIsR0FB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SU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFJTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBSU4sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFJTix1QkFBdUI7c0JBRHRCLEtBQUs7Z0JBSU4sR0FBRztzQkFERixLQUFLO2dCQUlOLEdBQUc7c0JBREYsS0FBSztnQkFRTixZQUFZO3NCQURYLEtBQUs7Z0JBSU4sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFPTix1QkFBdUI7c0JBRHRCLEtBQUs7Z0JBT04seUJBQXlCO3NCQUR4QixLQUFLO2dCQUlOLGdCQUFnQjtzQkFEZixLQUFLO2dCQU9OLHFCQUFxQjtzQkFEcEIsS0FBSztnQkFTTixjQUFjO3NCQURiLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxPQUFPO2dCQUlyQixZQUFZO3NCQURYLFNBQVM7dUJBQUMsZ0JBQWdCOztRQUkzQiw4REFBOEQ7UUFDOUQsYUFBYTtzQkFGWixZQUFZO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztnQkFRbkQsV0FBVztzQkFEVixNQUFNO2dCQU9QLFNBQVM7c0JBRFIsTUFBTTtnQkFLUCxXQUFXO3NCQURWLE1BQU07dUJBQUMsTUFBTTtnQkFLZCxZQUFZO3NCQURYLE1BQU07dUJBQUMsT0FBTztnQkFJZixNQUFNO3NCQURMLFdBQVc7dUJBQUMsU0FBUztnQkE4Q2xCLEtBQUs7c0JBRFIsS0FBSztnQkFXRixRQUFRO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ01vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUmVnaXN0ZXJOZ01vZGVsU2VydmljZSB9IGZyb20gJy4uL2ZvZWhuLWZvcm0vcmVnaXN0ZXItbmctbW9kZWwuc2VydmljZSc7XG5pbXBvcnQgeyBIZWxwTW9kYWwgfSBmcm9tICcuLi9mb2Vobi1oZWxwLW1vZGFsL2ZvZWhuLWhlbHAtbW9kYWwudHlwZSc7XG5pbXBvcnQgeyBGb3JtRXJyb3IgfSBmcm9tICcuLi9mb3JtLWVycm9yJztcbmltcG9ydCB7IFNlcnZpY2VMb2NhdG9yIH0gZnJvbSAnLi4vc2VydmljZS1sb2NhdG9yJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tY3ljbGVcbmltcG9ydCB7IFZhbGlkYXRpb25IYW5kbGVyU2VydmljZSB9IGZyb20gJy4uL3ZhbGlkYXRpb24vdmFsaWRhdGlvbi1oYW5kbGVyLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgR0VTREVNX01BWF9EQVRBX0xFTkdUSCA9IDEwMDAwO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGb2VobklucHV0Q29tcG9uZW50PFQ+XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgQElucHV0KClcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICByZXF1aXJlZDogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpXG4gICAgbGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFdoZW4gVFJVRSwgYWRkcyBjbGFzcyAnc3Itb25seScgKG9ubHkgZm9yIHNjcmVlbiByZWFkZXJzKSBvbiB0YWcgPGxhYmVsPiBvciA8bGVnZW5kPlxuICAgICAqIGRlcGVuZGluZyBvbiBjb21wb25lbnQgZXh0ZW5kaW5nIHRoaXMgY2xhc3NcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGlzTGFiZWxTck9ubHk6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKVxuICAgIGhlbHBUZXh0OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIG5hbWU6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcGF0dGVybjogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBsYWJlbFN0eWxlTW9kaWZpZXI6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgY3VzdG9tRXJyb3JzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgICBASW5wdXQoKVxuICAgIG1heGxlbmd0aDogbnVtYmVyO1xuXG4gICAgQElucHV0KClcbiAgICBvdmVycmlkZUdlc2RlbU1heGxlbmd0aCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBtaW46IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgbWF4OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXR0cmlidXRlIG11c3QgdGFrZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4gICAgICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0hUTUwvQXR0cmlidXRlcy9hdXRvY29tcGxldGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGF1dG9jb21wbGV0ZTogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwcmV2ZW50UGFzdGUgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgY2xlYXJCdXR0b24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEV4Y2x1ZGUgdGhlIGNvbXBvbmVudCBmcm9tIHRoZSBlcnJvciBzdW1tYXJ5IGlmIHRoZSBjb21wb25lbnQgaGFzIGFuIGVycm9yLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZXhjbHVkZUZyb21FcnJvclN1bW1hcnkgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEhpZGUgdGhlICdmYWN1bHRhdGlmJyBleHRyYSBsYWJlbC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGhpZGVOb3RSZXF1aXJlZEV4dHJhTGFiZWwgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgaXNFcnJvckluaGVyaXRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBzZXQgdG8gVFJVRTogU2hvd3MgZXJyb3IgZXZlbiBpZiBpbnB1dCBpcyBkaXNhYmxlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0Vycm9yV2hlbkRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXV0b2NhcGl0YWxpemUgYXR0cmlidXRlIG5ldmVyIGNhdXNlcyBhdXRvY2FwaXRhbGl6YXRpb24gdG8gYmUgZW5hYmxlZCBmb3JcbiAgICAgKiBhbiA8aW5wdXQ+IGVsZW1lbnQgd2l0aCBhIHR5cGUgYXR0cmlidXRlIHdob3NlIHZhbHVlIGlzIHVybCwgZW1haWwsIG9yIHBhc3N3b3JkLlxuICAgICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvYXV0b2NhcGl0YWxpemVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGF1dG9jYXBpdGFsaXplOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIGhlbHBNb2RhbDogSGVscE1vZGFsO1xuXG4gICAgQFZpZXdDaGlsZHJlbihOZ01vZGVsKVxuICAgIGlucHV0TW9kZWxMaXN0OiBRdWVyeUxpc3Q8TmdNb2RlbD47XG5cbiAgICBAVmlld0NoaWxkKCdlbnRyeUNvbXBvbmVudCcpXG4gICAgaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgQFZpZXdDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IEZvZWhuSW5wdXRDb21wb25lbnQpKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgc3ViQ29tcG9uZW50czogUXVlcnlMaXN0PEZvZWhuSW5wdXRDb21wb25lbnQ8YW55Pj47XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBtb2RlbCBjaGFuZ2VzIGZvciBhbnkgcmVhc29uXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgbW9kZWxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSB1c2VyIGNoYW5nZXMgYSB2YWx1ZSwgYWZ0ZXIgdGhlIG1vZGVsIGlzIHVwZGF0ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgdXNlcklucHV0ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlLEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtcmVuYW1lXG4gICAgQE91dHB1dCgnYmx1cicpXG4gICAgYmx1ckhhbmRsZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmUsQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1yZW5hbWVcbiAgICBAT3V0cHV0KCdmb2N1cycpXG4gICAgZm9jdXNIYW5kbGVyID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBob3N0SWQ6IHN0cmluZztcblxuICAgIHR5cGU6IHN0cmluZztcblxuICAgIHZhbGlkYXRpb25IYW5kbGVyU2VydmljZTogVmFsaWRhdGlvbkhhbmRsZXJTZXJ2aWNlO1xuXG4gICAgbW9kZWxfOiBUO1xuXG4gICAgcHJpdmF0ZSBfZXJyb3JzOiBGb3JtRXJyb3JbXTtcblxuICAgIHByaXZhdGUgdmFsaWRhdGlvbkVycm9yc1N1YmplY3RTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIHJlZ2lzdGVyTmdNb2RlbFNlcnZpY2U6IFJlZ2lzdGVyTmdNb2RlbFNlcnZpY2U7XG5cbiAgICBwcml2YXRlIHNob3dDbGVhckJ1dHRvbjogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBwcml2YXRlIHVzZXJJbnB1dFN1YmplY3QgPSBuZXcgU3ViamVjdDxUPigpO1xuICAgIHByaXZhdGUgdXNlcklucHV0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25IYW5kbGVyU2VydmljZSA9IFNlcnZpY2VMb2NhdG9yLmluamVjdG9yLmdldChcbiAgICAgICAgICAgIFZhbGlkYXRpb25IYW5kbGVyU2VydmljZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyTmdNb2RlbFNlcnZpY2UgPSBTZXJ2aWNlTG9jYXRvci5pbmplY3Rvci5nZXQoXG4gICAgICAgICAgICBSZWdpc3Rlck5nTW9kZWxTZXJ2aWNlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVxdWlyZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnNTdWJqZWN0U3Vic2NyaXB0aW9uID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25IYW5kbGVyU2VydmljZS52YWxpZGF0aW9uRXJyb3JzU3ViamVjdCxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkhhbmRsZXJTZXJ2aWNlLnZhbGlkYXRpb25EaXNwbGF5U3ViamVjdFxuICAgICAgICBdKS5zdWJzY3JpYmUodmFsdWVzID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaEVycm9ycyh2YWx1ZXMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXQgZXJyb3JzKCk6IEZvcm1FcnJvcltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9ycztcbiAgICB9XG5cbiAgICBnZXQgbW9kZWwoKTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsXztcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBtb2RlbCh2YWx1ZTogVCkge1xuICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXG4gICAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gRW5zdXJlcyB0aGF0IHRoZSBob3N0IGhhcyBhbiBJZCBmb3IgaW5zdHJ1bWVudGFsaXphdGlvbiBvZiB0aGUgRE9NIGJ5IGF1dG9tYXRlZCB0ZXN0cy5cbiAgICAgICAgdGhpcy5ob3N0SWQgPSB0aGlzLmJ1aWxkSWQoKTtcblxuICAgICAgICB0aGlzLnNob3dDbGVhckJ1dHRvbiA9IHRoaXMubW9kZWxDaGFuZ2VcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUobWFwKG1vZGVsID0+IHRoaXMuY2xlYXJCdXR0b24gJiYgISFtb2RlbCAmJiAhdGhpcy5fZGlzYWJsZWQpKTtcblxuICAgICAgICB0aGlzLnVzZXJJbnB1dFN1YnNjcmlwdGlvbiA9IHRoaXMudXNlcklucHV0U3ViamVjdFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IHdlIG9ubHkgY2F0Y2ggdGhlIGxhdGVzdCBvZiBtdWx0aXBsZVxuICAgICAgICAgICAgICAgIC8vIHF1aWNrIHVwZGF0ZXMsIGFuZCB0byBtYWtlIHN1cmUgdGhlIHVzZXJJbnB1dCBpcyBmaXJlZCB3aGVuXG4gICAgICAgICAgICAgICAgLy8gdGhlIGNvbXBvbmVudCBpcyBkb25lIHVwZGF0aW5nLlxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgwKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VySW5wdXQuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGlvbkVycm9yc1N1YmplY3RTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yc1N1YmplY3RTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnVzZXJJbnB1dFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy51c2VySW5wdXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJDb21wb25lbnRzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyTmdNb2RlbFNlcnZpY2UudXBkYXRlUmVnaXN0ZXJlZE5nTW9kZWxzKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvbk1vZGVsQ2hhbmdlKHZhbHVlOiBUKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlTmdNb2RlbCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlOiBUKTogdm9pZCB7XG4gICAgICAgIHRoaXMudHJpZ2dlclVzZXJJbnB1dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgdXBkYXRlTmdNb2RlbCh2YWx1ZTogVCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vZGVsXyA9IHZhbHVlO1xuICAgICAgICBpZiAoIXRoaXMuX2Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFzRXJyb3JzVG9EaXNwbGF5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5oYXNFcnJvcnMoKSAmJiAoIXRoaXMuX2Rpc2FibGVkIHx8IHRoaXMuc2hvd0Vycm9yV2hlbkRpc2FibGVkKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9ycyAmJiB0aGlzLl9lcnJvcnMubGVuZ3RoID4gMCAmJiB0aGlzLmlzUHJpc3RpbmUoKTtcbiAgICB9XG5cbiAgICBoYXNJbmhlcml0RXJyb3JGcm9tUGFyZW50KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Vycm9ySW5oZXJpdGVkO1xuICAgIH1cblxuICAgIGlzUHJpc3RpbmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmlucHV0TW9kZWxMaXN0LmZpbHRlcihtID0+ICFtLnByaXN0aW5lKS5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgIHRoaXMuc3ViQ29tcG9uZW50cy5maWx0ZXIoYyA9PiAhYy5pc1ByaXN0aW5lKCkpLmxlbmd0aCA9PT0gMFxuICAgICAgICApO1xuICAgIH1cblxuICAgIG1hcmtBc0RpcnR5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0TW9kZWxMaXN0LmZvckVhY2gobmdNb2RlbCA9PiB7XG4gICAgICAgICAgICBuZ01vZGVsLmNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3ViQ29tcG9uZW50cy5mb3JFYWNoKGMgPT4ge1xuICAgICAgICAgICAgYy5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBtYXJrQXNQcmlzdGluZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dE1vZGVsTGlzdC5mb3JFYWNoKG5nTW9kZWwgPT4ge1xuICAgICAgICAgICAgbmdNb2RlbC5jb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1YkNvbXBvbmVudHMuZm9yRWFjaChjID0+IHtcbiAgICAgICAgICAgIGMubWFya0FzRGlydHkoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0TmF0aXZlSW5wdXRMaXN0KCk6IE5nTW9kZWxbXSB7XG4gICAgICAgIGxldCByZXN1bHQ6IE5nTW9kZWxbXSA9IHRoaXMuaW5wdXRNb2RlbExpc3QudG9BcnJheSgpO1xuICAgICAgICB0aGlzLnN1YkNvbXBvbmVudHMuZm9yRWFjaChjID0+IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoYy5nZXROYXRpdmVJbnB1dExpc3QoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgZ2V0TWVBbmRTdWJDb21wb25lbnRzKCk6IEZvZWhuSW5wdXRDb21wb25lbnQ8YW55PltdIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgbGV0IHJlc3VsdDogRm9laG5JbnB1dENvbXBvbmVudDxhbnk+W10gPSBbdGhpc107XG4gICAgICAgIGlmICh0aGlzLnN1YkNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuc3ViQ29tcG9uZW50cy5mb3JFYWNoKGMgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoYy5nZXRNZUFuZFN1YkNvbXBvbmVudHMoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmVmcmVzaEVycm9ycyhyZXN1bHRzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBlcnJvcnM6IEZvcm1FcnJvcltdID0gcmVzdWx0c1swXTtcbiAgICAgICAgY29uc3Qgc2hvdWxkRGlzcGxheUVycm9yczogYm9vbGVhbiA9IHJlc3VsdHNbMV07XG4gICAgICAgIGlmIChzaG91bGREaXNwbGF5RXJyb3JzKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcnMgPSBlcnJvcnMuZmlsdGVyKGUgPT4gZS5uYW1lID09PSB0aGlzLm5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGxldCBlbGVtZW50Q29udGFpbmVyO1xuICAgICAgICBpZiAodGhpcy5pbnB1dEVsZW1lbnQgJiYgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbWVudENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRJZCgnQ29udGFpbmVyJylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudENvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBpbiB2aWV3IHNob3VsZCBiZSBkb25lIG9uIGlucHV0IGNvbnRhaW5lclxuICAgICAgICAgICAgICAgIGVsZW1lbnRDb250YWluZXIuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEZvY3VzIHNob3VsZCBiZSBvbiB0aGUgaW5wdXQgaXRzZWxmXG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0aGlzLnN1YkNvbXBvbmVudHMgJiZcbiAgICAgICAgICAgIHRoaXMuZ2V0Rmlyc3RJbnB1dENvbXBvbmVudEVuYWJsZWQodGhpcy5zdWJDb21wb25lbnRzKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0Q29tcG9uZW50ID0gdGhpcy5nZXRGaXJzdElucHV0Q29tcG9uZW50RW5hYmxlZChcbiAgICAgICAgICAgICAgICB0aGlzLnN1YkNvbXBvbmVudHNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlbGVtZW50Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAgICAgICAgICAgaW5wdXRDb21wb25lbnQuYnVpbGRJZCgnQ29udGFpbmVyJylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudENvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBpbiB2aWV3IHNob3VsZCBiZSBkb25lIG9uIGlucHV0IGNvbnRhaW5lclxuICAgICAgICAgICAgICAgIGVsZW1lbnRDb250YWluZXIuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEZvY3VzIHNob3VsZCBiZSBvbiB0aGUgaW5wdXQgaXRzZWxmXG4gICAgICAgICAgICBpbnB1dENvbXBvbmVudC5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ2FzZSBmb3IgY29tcG9uZW50IHdobyBkbyBub3QgaGF2ZSBhbnkgJyNlbnRyeUNvbXBvbmVudCcgaW4gdGhlaXIgaHRtbCB0ZW1wbGF0ZSAoaS5lLiBmb2Vobi1yYWRpbywgZm9laG4tY2hlY2tib3gsLi4uKVxuICAgICAgICAgICAgZWxlbWVudENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRJZCgnQ29udGFpbmVyJylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudENvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBpbiB2aWV3IHNob3VsZCBiZSBkb25lIG9uIGlucHV0IGNvbnRhaW5lclxuICAgICAgICAgICAgICAgIGVsZW1lbnRDb250YWluZXIuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnROb2RlTGlzdE9mID0gZWxlbWVudENvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICAgICAgIGBpbnB1dFtpZF49XCIke3RoaXMubmFtZX1cIl1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnROb2RlTGlzdE9mICYmIGVsZW1lbnROb2RlTGlzdE9mLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSB0aGlzLmZpbmRGaXJzdEh0bWxJbnB1dEVsZW1lbnRFbmFibGVkKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50Tm9kZUxpc3RPZlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBGb2N1cyBzaG91bGQgYmUgb24gdGhlIGlucHV0IGl0c2VsZlxuICAgICAgICAgICAgICAgICAgICBpbnB1dEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRNYXhMZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCF0aGlzLm1heGxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIEdFU0RFTV9NQVhfREFUQV9MRU5HVEg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLm1heGxlbmd0aCA+IEdFU0RFTV9NQVhfREFUQV9MRU5HVEggJiZcbiAgICAgICAgICAgICF0aGlzLm92ZXJyaWRlR2VzZGVtTWF4bGVuZ3RoXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgYG1heExlbmd0aCBpbiAke3RoaXMubmFtZX0gY2Fubm90IGJlIG1vcmUgdGhhbiAke0dFU0RFTV9NQVhfREFUQV9MRU5HVEh9ICFgXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIEdFU0RFTV9NQVhfREFUQV9MRU5HVEg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5tYXhsZW5ndGg7XG4gICAgfVxuXG4gICAgYnVpbGRJZChzdWZmaXg6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcbiAgICAgICAgLy8gVGhlIGJhc2VJZCBpcyBlaXRoZXIgYW4gaWQgZ2l2ZW4gYnkgdGhlIHVzZXIgb3IgdGhlIHZhbHVlIG9mIHRoZSBuYW1lLlxuICAgICAgICAvLyBGb3IgaW50ZWdyYXRpb24gcHVycG9zZXMsIHRoZSBjb250YWluZXIgZm9laG4tKiBtdXN0IGhhdmUgYW4gSWQuXG4gICAgICAgIGNvbnN0IGJhc2VJZCA9IHRoaXMuaWQgfHwgdGhpcy5uYW1lO1xuICAgICAgICBpZiAoIWJhc2VJZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7YmFzZUlkfSR7c3VmZml4fWA7XG4gICAgfVxuXG4gICAgYnVpbGRDaGlsZElkKHN1ZmZpeDogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5idWlsZElkKGBDaGlsZCR7c3VmZml4fWApO1xuICAgIH1cblxuICAgIGJ1aWxkQ2hpbGROYW1lKHN1ZmZpeDogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5uYW1lfUNoaWxkJHtzdWZmaXh9YDtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgb25LZXlkb3duKGtleTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICAvLyBEbyBub3RoaW5nLCBvdmVycmlkZW4gYnkgc3ViY29tcG9uZW50XG4gICAgfVxuXG4gICAgcmVzZXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlTmdNb2RlbChudWxsKTtcbiAgICB9XG5cbiAgICBvblBhc3RlKGU6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnByZXZlbnRQYXN0ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25CbHVyKGU6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ibHVySGFuZGxlci5lbWl0KGUpO1xuICAgIH1cblxuICAgIG9uRm9jdXMoZTogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvY3VzSGFuZGxlci5lbWl0KGUpO1xuICAgIH1cblxuICAgIG9uQ2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlTmdNb2RlbChudWxsKTtcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UobnVsbCk7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBkaXNwbGF5Q2xlYXJCdXR0b24oKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIC8vIFRoaXMgaGFzIHRvIGJlIGFuIG9ic2VydmFibGUgdG8gcmVhY3QgdG8gdGhlIGNoYW5nZSBvZiBtb2RlbCB2YWx1ZS5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd0NsZWFyQnV0dG9uO1xuICAgIH1cblxuICAgIGdldERlc2NyaWJlZEJ5KCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGhlbHBUZXh0SWQgPSB0aGlzLmhlbHBUZXh0ID8gYCR7dGhpcy5idWlsZENoaWxkSWQoKX1IZWxwYCA6IG51bGw7XG4gICAgICAgIGNvbnN0IGVycm9ySWQgPSB0aGlzLmhhc0Vycm9yc1RvRGlzcGxheSgpXG4gICAgICAgICAgICA/IGAke3RoaXMuYnVpbGRJZCgpfUVycm9yc0NvbnRhaW5lcmBcbiAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICAvLyBhcmlhLWRlc2NyaWJlZGJ5IGNhbiBiZSBsaW5rZWQgdG8gbXVsdGlwbGUgSWRzIHNlcGFyYXRlZCBieSBhIGNvbW1hLlxuICAgICAgICByZXR1cm4gW2hlbHBUZXh0SWQsIGVycm9ySWRdLmZpbHRlcihpZCA9PiAhIWlkKS5qb2luKCcsJykgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBnZXRBdXRvQ29tcGxldGUoKTogc3RyaW5nIHtcbiAgICAgICAgLy8gcmV0cm8gY29tcGF0aWJpbGl0eSAoYXV0b2NvbXBsZXRlIHVzZWQgdG8gYmUgYSBib29sZWFuKVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuICdvZmYnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0b2NvbXBsZXRlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRGaXJzdElucHV0Q29tcG9uZW50RW5hYmxlZChcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgc3ViQ29tcG9uZW50czogUXVlcnlMaXN0PEZvZWhuSW5wdXRDb21wb25lbnQ8YW55Pj5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICApOiBGb2VobklucHV0Q29tcG9uZW50PGFueT4ge1xuICAgICAgICBjb25zdCBmb2VobklucHV0Q29tcG9uZW50cyA9IHN1YkNvbXBvbmVudHMuZmlsdGVyKFxuICAgICAgICAgICAgaXRlbSA9PlxuICAgICAgICAgICAgICAgIGl0ZW0uaW5wdXRFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgaXRlbS5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgICFpdGVtLl9kaXNhYmxlZFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghIWZvZWhuSW5wdXRDb21wb25lbnRzICYmIGZvZWhuSW5wdXRDb21wb25lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZvZWhuSW5wdXRDb21wb25lbnRzWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZpbmRGaXJzdEh0bWxJbnB1dEVsZW1lbnRFbmFibGVkKFxuICAgICAgICBlbGVtZW50Tm9kZUxpc3RPZjogTm9kZUxpc3RPZjxFbGVtZW50PlxuICAgICk6IEhUTUxJbnB1dEVsZW1lbnQge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnROb2RlTGlzdE9mLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBodG1sSW5wdXRFbGVtZW50ID0gZWxlbWVudE5vZGVMaXN0T2YuaXRlbShcbiAgICAgICAgICAgICAgICBpXG4gICAgICAgICAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIWh0bWxJbnB1dEVsZW1lbnQuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaHRtbElucHV0RWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHByb3RlY3RlZCBpc0VtcHR5KGRhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB1bmRlZmluZWQgfHwgZGF0YSA9PT0gJyc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHRyaWdnZXJVc2VySW5wdXQodmFsdWU6IFQpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgLy8gSWYgdGhlIGNhbGxiYWNrIGlzIGRlZmluZWRcbiAgICAgICAgICAgICEhdGhpcy51c2VySW5wdXQgJiZcbiAgICAgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBhY3R1YWxseSBzb21ldGhpbmcgKFQgb3IgbnVsbClcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIC8vIElmIGlucHV0IGlzbid0IGRpc2FibGVkXG4gICAgICAgICAgICAhdGhpcy5fZGlzYWJsZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJJbnB1dFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
398
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4taW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlc3RhdGlvbnMtbmcvc3JjL2ZvZWhuLWlucHV0L2ZvZWhuLWlucHV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNULFlBQVksRUFDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBYyxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFHakYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUFFcEYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsS0FBSyxDQUFDO0FBRzVDLE1BQU0sT0FBZ0IsbUJBQW1CO0lBa0pyQztRQW5IQSxpQkFBWSxHQUE4QixFQUFFLENBQUM7UUFNN0MsNEJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBZ0JoQyxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUdyQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQjs7V0FFRztRQUVILDRCQUF1QixHQUFHLEtBQUssQ0FBQztRQUVoQzs7V0FFRztRQUVILDhCQUF5QixHQUFHLEtBQUssQ0FBQztRQUdsQyxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFFekI7O1dBRUc7UUFFSCwwQkFBcUIsR0FB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SztzQkFESixLQUFLO2dCQVFOLGFBQWE7c0JBRFosS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFJTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBSU4sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFJTix1QkFBdUI7c0JBRHRCLEtBQUs7Z0JBSU4sR0FBRztzQkFERixLQUFLO2dCQUlOLEdBQUc7c0JBREYsS0FBSztnQkFRTixZQUFZO3NCQURYLEtBQUs7Z0JBSU4sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFPTix1QkFBdUI7c0JBRHRCLEtBQUs7Z0JBT04seUJBQXlCO3NCQUR4QixLQUFLO2dCQUlOLGdCQUFnQjtzQkFEZixLQUFLO2dCQU9OLHFCQUFxQjtzQkFEcEIsS0FBSztnQkFTTixjQUFjO3NCQURiLEtBQUs7Z0JBT04sdUJBQXVCO3NCQUR0QixLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFJTixjQUFjO3NCQURiLFlBQVk7dUJBQUMsT0FBTztnQkFJckIsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLGdCQUFnQjs7UUFJM0IsOERBQThEO1FBQzlELGFBQWE7c0JBRlosWUFBWTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUM7Z0JBUW5ELFdBQVc7c0JBRFYsTUFBTTtnQkFPUCxTQUFTO3NCQURSLE1BQU07Z0JBS1AsV0FBVztzQkFEVixNQUFNO3VCQUFDLE1BQU07Z0JBS2QsWUFBWTtzQkFEWCxNQUFNO3VCQUFDLE9BQU87Z0JBSWYsTUFBTTtzQkFETCxXQUFXO3VCQUFDLFNBQVM7Z0JBOENsQixLQUFLO3NCQURSLEtBQUs7Z0JBV0YsUUFBUTtzQkFEWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdNb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFJlZ2lzdGVyTmdNb2RlbFNlcnZpY2UgfSBmcm9tICcuLi9mb2Vobi1mb3JtL3JlZ2lzdGVyLW5nLW1vZGVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGVscE1vZGFsIH0gZnJvbSAnLi4vZm9laG4taGVscC1tb2RhbC9mb2Vobi1oZWxwLW1vZGFsLnR5cGUnO1xuaW1wb3J0IHsgRm9ybUVycm9yIH0gZnJvbSAnLi4vZm9ybS1lcnJvcic7XG5pbXBvcnQgeyBTZXJ2aWNlTG9jYXRvciB9IGZyb20gJy4uL3NlcnZpY2UtbG9jYXRvcic7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWN5Y2xlXG5pbXBvcnQgeyBWYWxpZGF0aW9uSGFuZGxlclNlcnZpY2UgfSBmcm9tICcuLi92YWxpZGF0aW9uL3ZhbGlkYXRpb24taGFuZGxlci5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IEdFU0RFTV9NQVhfREFUQV9MRU5HVEggPSAxMDAwMDtcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRm9laG5JbnB1dENvbXBvbmVudDxUPlxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICAgIEBJbnB1dCgpXG4gICAgaWQ6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcmVxdWlyZWQ6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKVxuICAgIGxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIFRSVUUsIGFkZHMgY2xhc3MgJ3NyLW9ubHknIChvbmx5IGZvciBzY3JlZW4gcmVhZGVycykgb24gdGFnIDxsYWJlbD4gb3IgPGxlZ2VuZD5cbiAgICAgKiBkZXBlbmRpbmcgb24gY29tcG9uZW50IGV4dGVuZGluZyB0aGlzIGNsYXNzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpc0xhYmVsU3JPbmx5OiBib29sZWFuO1xuXG4gICAgQElucHV0KClcbiAgICBoZWxwVGV4dDogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBuYW1lOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHBhdHRlcm46IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgbGFiZWxTdHlsZU1vZGlmaWVyOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIGN1c3RvbUVycm9yczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuXG4gICAgQElucHV0KClcbiAgICBtYXhsZW5ndGg6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgb3ZlcnJpZGVHZXNkZW1NYXhsZW5ndGggPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgbWluOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKVxuICAgIG1heDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZSBtdXN0IHRha2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuICAgICAqIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9IVE1ML0F0dHJpYnV0ZXMvYXV0b2NvbXBsZXRlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhdXRvY29tcGxldGU6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHJldmVudFBhc3RlID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIGNsZWFyQnV0dG9uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBFeGNsdWRlIHRoZSBjb21wb25lbnQgZnJvbSB0aGUgZXJyb3Igc3VtbWFyeSBpZiB0aGUgY29tcG9uZW50IGhhcyBhbiBlcnJvci5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGV4Y2x1ZGVGcm9tRXJyb3JTdW1tYXJ5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBIaWRlIHRoZSAnZmFjdWx0YXRpZicgZXh0cmEgbGFiZWwuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBoaWRlTm90UmVxdWlyZWRFeHRyYUxhYmVsID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIGlzRXJyb3JJbmhlcml0ZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gc2V0IHRvIFRSVUU6IFNob3dzIGVycm9yIGV2ZW4gaWYgaW5wdXQgaXMgZGlzYWJsZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dFcnJvcldoZW5EaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF1dG9jYXBpdGFsaXplIGF0dHJpYnV0ZSBuZXZlciBjYXVzZXMgYXV0b2NhcGl0YWxpemF0aW9uIHRvIGJlIGVuYWJsZWQgZm9yXG4gICAgICogYW4gPGlucHV0PiBlbGVtZW50IHdpdGggYSB0eXBlIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZSBpcyB1cmwsIGVtYWlsLCBvciBwYXNzd29yZC5cbiAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2F1dG9jYXBpdGFsaXplXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhdXRvY2FwaXRhbGl6ZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBzZXQgdG8gVFJVRTogQWxsb3dzIG1vZGVsIHVwZGF0ZSB0byBiZSBlbWl0dGVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB1cGRhdGVNb2RlbFdoZW5EaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBoZWxwTW9kYWw6IEhlbHBNb2RhbDtcblxuICAgIEBWaWV3Q2hpbGRyZW4oTmdNb2RlbClcbiAgICBpbnB1dE1vZGVsTGlzdDogUXVlcnlMaXN0PE5nTW9kZWw+O1xuXG4gICAgQFZpZXdDaGlsZCgnZW50cnlDb21wb25lbnQnKVxuICAgIGlucHV0RWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIEBWaWV3Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBGb2VobklucHV0Q29tcG9uZW50KSlcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHN1YkNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxGb2VobklucHV0Q29tcG9uZW50PGFueT4+O1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgbW9kZWwgY2hhbmdlcyBmb3IgYW55IHJlYXNvblxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIG1vZGVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIGEgdmFsdWUsIGFmdGVyIHRoZSBtb2RlbCBpcyB1cGRhdGVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHVzZXJJbnB1dCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZSxAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LXJlbmFtZVxuICAgIEBPdXRwdXQoJ2JsdXInKVxuICAgIGJsdXJIYW5kbGVyID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlLEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtcmVuYW1lXG4gICAgQE91dHB1dCgnZm9jdXMnKVxuICAgIGZvY3VzSGFuZGxlciA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgaG9zdElkOiBzdHJpbmc7XG5cbiAgICB0eXBlOiBzdHJpbmc7XG5cbiAgICB2YWxpZGF0aW9uSGFuZGxlclNlcnZpY2U6IFZhbGlkYXRpb25IYW5kbGVyU2VydmljZTtcblxuICAgIG1vZGVsXzogVDtcblxuICAgIHByaXZhdGUgX2Vycm9yczogRm9ybUVycm9yW107XG5cbiAgICBwcml2YXRlIHZhbGlkYXRpb25FcnJvcnNTdWJqZWN0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSByZWdpc3Rlck5nTW9kZWxTZXJ2aWNlOiBSZWdpc3Rlck5nTW9kZWxTZXJ2aWNlO1xuXG4gICAgcHJpdmF0ZSBzaG93Q2xlYXJCdXR0b246IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcHJpdmF0ZSB1c2VySW5wdXRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8VD4oKTtcbiAgICBwcml2YXRlIHVzZXJJbnB1dFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uSGFuZGxlclNlcnZpY2UgPSBTZXJ2aWNlTG9jYXRvci5pbmplY3Rvci5nZXQoXG4gICAgICAgICAgICBWYWxpZGF0aW9uSGFuZGxlclNlcnZpY2VcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZWdpc3Rlck5nTW9kZWxTZXJ2aWNlID0gU2VydmljZUxvY2F0b3IuaW5qZWN0b3IuZ2V0KFxuICAgICAgICAgICAgUmVnaXN0ZXJOZ01vZGVsU2VydmljZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzU3ViamVjdFN1YnNjcmlwdGlvbiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uSGFuZGxlclNlcnZpY2UudmFsaWRhdGlvbkVycm9yc1N1YmplY3QsXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25IYW5kbGVyU2VydmljZS52YWxpZGF0aW9uRGlzcGxheVN1YmplY3RcbiAgICAgICAgXSkuc3Vic2NyaWJlKHZhbHVlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hFcnJvcnModmFsdWVzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGVycm9ycygpOiBGb3JtRXJyb3JbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lcnJvcnM7XG4gICAgfVxuXG4gICAgZ2V0IG1vZGVsKCk6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbF87XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzZXQgbW9kZWwodmFsdWU6IFQpIHtcbiAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xuICAgIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIEVuc3VyZXMgdGhhdCB0aGUgaG9zdCBoYXMgYW4gSWQgZm9yIGluc3RydW1lbnRhbGl6YXRpb24gb2YgdGhlIERPTSBieSBhdXRvbWF0ZWQgdGVzdHMuXG4gICAgICAgIHRoaXMuaG9zdElkID0gdGhpcy5idWlsZElkKCk7XG5cbiAgICAgICAgdGhpcy5zaG93Q2xlYXJCdXR0b24gPSB0aGlzLm1vZGVsQ2hhbmdlXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKG1hcChtb2RlbCA9PiB0aGlzLmNsZWFyQnV0dG9uICYmICEhbW9kZWwgJiYgIXRoaXMuX2Rpc2FibGVkKSk7XG5cbiAgICAgICAgdGhpcy51c2VySW5wdXRTdWJzY3JpcHRpb24gPSB0aGlzLnVzZXJJbnB1dFN1YmplY3RcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhhdCB3ZSBvbmx5IGNhdGNoIHRoZSBsYXRlc3Qgb2YgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAvLyBxdWljayB1cGRhdGVzLCBhbmQgdG8gbWFrZSBzdXJlIHRoZSB1c2VySW5wdXQgaXMgZmlyZWQgd2hlblxuICAgICAgICAgICAgICAgIC8vIHRoZSBjb21wb25lbnQgaXMgZG9uZSB1cGRhdGluZy5cbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlcklucHV0LmVtaXQodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25FcnJvcnNTdWJqZWN0U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnNTdWJqZWN0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy51c2VySW5wdXRTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudXNlcklucHV0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3ViQ29tcG9uZW50cy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PlxuICAgICAgICAgICAgdGhpcy5yZWdpc3Rlck5nTW9kZWxTZXJ2aWNlLnVwZGF0ZVJlZ2lzdGVyZWROZ01vZGVscygpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb25Nb2RlbENoYW5nZSh2YWx1ZTogVCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZU5nTW9kZWwodmFsdWUpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZTogVCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRyaWdnZXJVc2VySW5wdXQodmFsdWUpO1xuICAgIH1cblxuICAgIHVwZGF0ZU5nTW9kZWwodmFsdWU6IFQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb2RlbF8gPSB2YWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLl9kaXNhYmxlZCB8fCB0aGlzLnVwZGF0ZU1vZGVsV2hlbkRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFzRXJyb3JzVG9EaXNwbGF5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5oYXNFcnJvcnMoKSAmJiAoIXRoaXMuX2Rpc2FibGVkIHx8IHRoaXMuc2hvd0Vycm9yV2hlbkRpc2FibGVkKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9ycyAmJiB0aGlzLl9lcnJvcnMubGVuZ3RoID4gMCAmJiB0aGlzLmlzUHJpc3RpbmUoKTtcbiAgICB9XG5cbiAgICBoYXNJbmhlcml0RXJyb3JGcm9tUGFyZW50KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Vycm9ySW5oZXJpdGVkO1xuICAgIH1cblxuICAgIGlzUHJpc3RpbmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmlucHV0TW9kZWxMaXN0LmZpbHRlcihtID0+ICFtLnByaXN0aW5lKS5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgIHRoaXMuc3ViQ29tcG9uZW50cy5maWx0ZXIoYyA9PiAhYy5pc1ByaXN0aW5lKCkpLmxlbmd0aCA9PT0gMFxuICAgICAgICApO1xuICAgIH1cblxuICAgIG1hcmtBc0RpcnR5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0TW9kZWxMaXN0LmZvckVhY2gobmdNb2RlbCA9PiB7XG4gICAgICAgICAgICBuZ01vZGVsLmNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3ViQ29tcG9uZW50cy5mb3JFYWNoKGMgPT4ge1xuICAgICAgICAgICAgYy5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBtYXJrQXNQcmlzdGluZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dE1vZGVsTGlzdC5mb3JFYWNoKG5nTW9kZWwgPT4ge1xuICAgICAgICAgICAgbmdNb2RlbC5jb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1YkNvbXBvbmVudHMuZm9yRWFjaChjID0+IHtcbiAgICAgICAgICAgIGMubWFya0FzRGlydHkoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0TmF0aXZlSW5wdXRMaXN0KCk6IE5nTW9kZWxbXSB7XG4gICAgICAgIGxldCByZXN1bHQ6IE5nTW9kZWxbXSA9IHRoaXMuaW5wdXRNb2RlbExpc3QudG9BcnJheSgpO1xuICAgICAgICB0aGlzLnN1YkNvbXBvbmVudHMuZm9yRWFjaChjID0+IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoYy5nZXROYXRpdmVJbnB1dExpc3QoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgZ2V0TWVBbmRTdWJDb21wb25lbnRzKCk6IEZvZWhuSW5wdXRDb21wb25lbnQ8YW55PltdIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgbGV0IHJlc3VsdDogRm9laG5JbnB1dENvbXBvbmVudDxhbnk+W10gPSBbdGhpc107XG4gICAgICAgIGlmICh0aGlzLnN1YkNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuc3ViQ29tcG9uZW50cy5mb3JFYWNoKGMgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoYy5nZXRNZUFuZFN1YkNvbXBvbmVudHMoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmVmcmVzaEVycm9ycyhyZXN1bHRzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBlcnJvcnM6IEZvcm1FcnJvcltdID0gcmVzdWx0c1swXTtcbiAgICAgICAgY29uc3Qgc2hvdWxkRGlzcGxheUVycm9yczogYm9vbGVhbiA9IHJlc3VsdHNbMV07XG4gICAgICAgIGlmIChzaG91bGREaXNwbGF5RXJyb3JzKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcnMgPSBlcnJvcnMuZmlsdGVyKGUgPT4gZS5uYW1lID09PSB0aGlzLm5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGxldCBlbGVtZW50Q29udGFpbmVyO1xuICAgICAgICBpZiAodGhpcy5pbnB1dEVsZW1lbnQgJiYgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbWVudENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRJZCgnQ29udGFpbmVyJylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudENvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBpbiB2aWV3IHNob3VsZCBiZSBkb25lIG9uIGlucHV0IGNvbnRhaW5lclxuICAgICAgICAgICAgICAgIGVsZW1lbnRDb250YWluZXIuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEZvY3VzIHNob3VsZCBiZSBvbiB0aGUgaW5wdXQgaXRzZWxmXG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0aGlzLnN1YkNvbXBvbmVudHMgJiZcbiAgICAgICAgICAgIHRoaXMuZ2V0Rmlyc3RJbnB1dENvbXBvbmVudEVuYWJsZWQodGhpcy5zdWJDb21wb25lbnRzKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0Q29tcG9uZW50ID0gdGhpcy5nZXRGaXJzdElucHV0Q29tcG9uZW50RW5hYmxlZChcbiAgICAgICAgICAgICAgICB0aGlzLnN1YkNvbXBvbmVudHNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlbGVtZW50Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAgICAgICAgICAgaW5wdXRDb21wb25lbnQuYnVpbGRJZCgnQ29udGFpbmVyJylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudENvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBpbiB2aWV3IHNob3VsZCBiZSBkb25lIG9uIGlucHV0IGNvbnRhaW5lclxuICAgICAgICAgICAgICAgIGVsZW1lbnRDb250YWluZXIuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEZvY3VzIHNob3VsZCBiZSBvbiB0aGUgaW5wdXQgaXRzZWxmXG4gICAgICAgICAgICBpbnB1dENvbXBvbmVudC5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ2FzZSBmb3IgY29tcG9uZW50IHdobyBkbyBub3QgaGF2ZSBhbnkgJyNlbnRyeUNvbXBvbmVudCcgaW4gdGhlaXIgaHRtbCB0ZW1wbGF0ZSAoaS5lLiBmb2Vobi1yYWRpbywgZm9laG4tY2hlY2tib3gsLi4uKVxuICAgICAgICAgICAgZWxlbWVudENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRJZCgnQ29udGFpbmVyJylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudENvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBpbiB2aWV3IHNob3VsZCBiZSBkb25lIG9uIGlucHV0IGNvbnRhaW5lclxuICAgICAgICAgICAgICAgIGVsZW1lbnRDb250YWluZXIuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnROb2RlTGlzdE9mID0gZWxlbWVudENvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICAgICAgIGBpbnB1dFtpZF49XCIke3RoaXMubmFtZX1cIl1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnROb2RlTGlzdE9mICYmIGVsZW1lbnROb2RlTGlzdE9mLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSB0aGlzLmZpbmRGaXJzdEh0bWxJbnB1dEVsZW1lbnRFbmFibGVkKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50Tm9kZUxpc3RPZlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBGb2N1cyBzaG91bGQgYmUgb24gdGhlIGlucHV0IGl0c2VsZlxuICAgICAgICAgICAgICAgICAgICBpbnB1dEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRNYXhMZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCF0aGlzLm1heGxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIEdFU0RFTV9NQVhfREFUQV9MRU5HVEg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLm1heGxlbmd0aCA+IEdFU0RFTV9NQVhfREFUQV9MRU5HVEggJiZcbiAgICAgICAgICAgICF0aGlzLm92ZXJyaWRlR2VzZGVtTWF4bGVuZ3RoXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgYG1heExlbmd0aCBpbiAke3RoaXMubmFtZX0gY2Fubm90IGJlIG1vcmUgdGhhbiAke0dFU0RFTV9NQVhfREFUQV9MRU5HVEh9ICFgXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIEdFU0RFTV9NQVhfREFUQV9MRU5HVEg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5tYXhsZW5ndGg7XG4gICAgfVxuXG4gICAgYnVpbGRJZChzdWZmaXg6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcbiAgICAgICAgLy8gVGhlIGJhc2VJZCBpcyBlaXRoZXIgYW4gaWQgZ2l2ZW4gYnkgdGhlIHVzZXIgb3IgdGhlIHZhbHVlIG9mIHRoZSBuYW1lLlxuICAgICAgICAvLyBGb3IgaW50ZWdyYXRpb24gcHVycG9zZXMsIHRoZSBjb250YWluZXIgZm9laG4tKiBtdXN0IGhhdmUgYW4gSWQuXG4gICAgICAgIGNvbnN0IGJhc2VJZCA9IHRoaXMuaWQgfHwgdGhpcy5uYW1lO1xuICAgICAgICBpZiAoIWJhc2VJZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7YmFzZUlkfSR7c3VmZml4fWA7XG4gICAgfVxuXG4gICAgYnVpbGRDaGlsZElkKHN1ZmZpeDogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5idWlsZElkKGBDaGlsZCR7c3VmZml4fWApO1xuICAgIH1cblxuICAgIGJ1aWxkQ2hpbGROYW1lKHN1ZmZpeDogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5uYW1lfUNoaWxkJHtzdWZmaXh9YDtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgb25LZXlkb3duKGtleTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICAvLyBEbyBub3RoaW5nLCBvdmVycmlkZW4gYnkgc3ViY29tcG9uZW50XG4gICAgfVxuXG4gICAgcmVzZXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlTmdNb2RlbChudWxsKTtcbiAgICB9XG5cbiAgICBvblBhc3RlKGU6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnByZXZlbnRQYXN0ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25CbHVyKGU6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ibHVySGFuZGxlci5lbWl0KGUpO1xuICAgIH1cblxuICAgIG9uRm9jdXMoZTogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvY3VzSGFuZGxlci5lbWl0KGUpO1xuICAgIH1cblxuICAgIG9uQ2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlTmdNb2RlbChudWxsKTtcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UobnVsbCk7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBkaXNwbGF5Q2xlYXJCdXR0b24oKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIC8vIFRoaXMgaGFzIHRvIGJlIGFuIG9ic2VydmFibGUgdG8gcmVhY3QgdG8gdGhlIGNoYW5nZSBvZiBtb2RlbCB2YWx1ZS5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd0NsZWFyQnV0dG9uO1xuICAgIH1cblxuICAgIGdldERlc2NyaWJlZEJ5KCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGhlbHBUZXh0SWQgPSB0aGlzLmhlbHBUZXh0ID8gYCR7dGhpcy5idWlsZENoaWxkSWQoKX1IZWxwYCA6IG51bGw7XG4gICAgICAgIGNvbnN0IGVycm9ySWQgPSB0aGlzLmhhc0Vycm9yc1RvRGlzcGxheSgpXG4gICAgICAgICAgICA/IGAke3RoaXMuYnVpbGRJZCgpfUVycm9yc0NvbnRhaW5lcmBcbiAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICAvLyBhcmlhLWRlc2NyaWJlZGJ5IGNhbiBiZSBsaW5rZWQgdG8gbXVsdGlwbGUgSWRzIHNlcGFyYXRlZCBieSBhIGNvbW1hLlxuICAgICAgICByZXR1cm4gW2hlbHBUZXh0SWQsIGVycm9ySWRdLmZpbHRlcihpZCA9PiAhIWlkKS5qb2luKCcsJykgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBnZXRBdXRvQ29tcGxldGUoKTogc3RyaW5nIHtcbiAgICAgICAgLy8gcmV0cm8gY29tcGF0aWJpbGl0eSAoYXV0b2NvbXBsZXRlIHVzZWQgdG8gYmUgYSBib29sZWFuKVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuICdvZmYnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0b2NvbXBsZXRlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRGaXJzdElucHV0Q29tcG9uZW50RW5hYmxlZChcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgc3ViQ29tcG9uZW50czogUXVlcnlMaXN0PEZvZWhuSW5wdXRDb21wb25lbnQ8YW55Pj5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICApOiBGb2VobklucHV0Q29tcG9uZW50PGFueT4ge1xuICAgICAgICBjb25zdCBmb2VobklucHV0Q29tcG9uZW50cyA9IHN1YkNvbXBvbmVudHMuZmlsdGVyKFxuICAgICAgICAgICAgaXRlbSA9PlxuICAgICAgICAgICAgICAgIGl0ZW0uaW5wdXRFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgaXRlbS5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgICFpdGVtLl9kaXNhYmxlZFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghIWZvZWhuSW5wdXRDb21wb25lbnRzICYmIGZvZWhuSW5wdXRDb21wb25lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZvZWhuSW5wdXRDb21wb25lbnRzWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZpbmRGaXJzdEh0bWxJbnB1dEVsZW1lbnRFbmFibGVkKFxuICAgICAgICBlbGVtZW50Tm9kZUxpc3RPZjogTm9kZUxpc3RPZjxFbGVtZW50PlxuICAgICk6IEhUTUxJbnB1dEVsZW1lbnQge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnROb2RlTGlzdE9mLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBodG1sSW5wdXRFbGVtZW50ID0gZWxlbWVudE5vZGVMaXN0T2YuaXRlbShcbiAgICAgICAgICAgICAgICBpXG4gICAgICAgICAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIWh0bWxJbnB1dEVsZW1lbnQuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaHRtbElucHV0RWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHByb3RlY3RlZCBpc0VtcHR5KGRhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB1bmRlZmluZWQgfHwgZGF0YSA9PT0gJyc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHRyaWdnZXJVc2VySW5wdXQodmFsdWU6IFQpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgLy8gSWYgdGhlIGNhbGxiYWNrIGlzIGRlZmluZWRcbiAgICAgICAgICAgICEhdGhpcy51c2VySW5wdXQgJiZcbiAgICAgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBhY3R1YWxseSBzb21ldGhpbmcgKFQgb3IgbnVsbClcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIC8vIElmIGlucHV0IGlzbid0IGRpc2FibGVkXG4gICAgICAgICAgICAhdGhpcy5fZGlzYWJsZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJJbnB1dFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -338,6 +338,10 @@ class FoehnInputComponent {
338
338
  * When set to TRUE: Shows error even if input is disabled
339
339
  */
340
340
  this.showErrorWhenDisabled = false;
341
+ /**
342
+ * When set to TRUE: Allows model update to be emitted
343
+ */
344
+ this.updateModelWhenDisabled = false;
341
345
  /**
342
346
  * Fired when the model changes for any reason
343
347
  */
@@ -412,7 +416,7 @@ class FoehnInputComponent {
412
416
  }
413
417
  updateNgModel(value) {
414
418
  this.model_ = value;
415
- if (!this._disabled) {
419
+ if (!this._disabled || this.updateModelWhenDisabled) {
416
420
  this.modelChange.emit(value);
417
421
  }
418
422
  }
@@ -624,7 +628,7 @@ class FoehnInputComponent {
624
628
  }
625
629
  }
626
630
  FoehnInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FoehnInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
627
- FoehnInputComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: FoehnInputComponent, inputs: { id: "id", required: "required", label: "label", isLabelSrOnly: "isLabelSrOnly", helpText: "helpText", name: "name", pattern: "pattern", labelStyleModifier: "labelStyleModifier", customErrors: "customErrors", maxlength: "maxlength", overrideGesdemMaxlength: "overrideGesdemMaxlength", min: "min", max: "max", autocomplete: "autocomplete", preventPaste: "preventPaste", clearButton: "clearButton", excludeFromErrorSummary: "excludeFromErrorSummary", hideNotRequiredExtraLabel: "hideNotRequiredExtraLabel", isErrorInherited: "isErrorInherited", showErrorWhenDisabled: "showErrorWhenDisabled", autocapitalize: "autocapitalize", helpModal: "helpModal", model: "model", disabled: "disabled" }, outputs: { modelChange: "modelChange", userInput: "userInput", blurHandler: "blur", focusHandler: "focus" }, host: { properties: { "attr.id": "this.hostId" } }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["entryComponent"], descendants: true }, { propertyName: "inputModelList", predicate: NgModel, descendants: true }, { propertyName: "subComponents", predicate: i0.forwardRef(function () { return FoehnInputComponent; }), descendants: true }], ngImport: i0 });
631
+ FoehnInputComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: FoehnInputComponent, inputs: { id: "id", required: "required", label: "label", isLabelSrOnly: "isLabelSrOnly", helpText: "helpText", name: "name", pattern: "pattern", labelStyleModifier: "labelStyleModifier", customErrors: "customErrors", maxlength: "maxlength", overrideGesdemMaxlength: "overrideGesdemMaxlength", min: "min", max: "max", autocomplete: "autocomplete", preventPaste: "preventPaste", clearButton: "clearButton", excludeFromErrorSummary: "excludeFromErrorSummary", hideNotRequiredExtraLabel: "hideNotRequiredExtraLabel", isErrorInherited: "isErrorInherited", showErrorWhenDisabled: "showErrorWhenDisabled", autocapitalize: "autocapitalize", updateModelWhenDisabled: "updateModelWhenDisabled", helpModal: "helpModal", model: "model", disabled: "disabled" }, outputs: { modelChange: "modelChange", userInput: "userInput", blurHandler: "blur", focusHandler: "focus" }, host: { properties: { "attr.id": "this.hostId" } }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["entryComponent"], descendants: true }, { propertyName: "inputModelList", predicate: NgModel, descendants: true }, { propertyName: "subComponents", predicate: i0.forwardRef(function () { return FoehnInputComponent; }), descendants: true }], ngImport: i0 });
628
632
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FoehnInputComponent, decorators: [{
629
633
  type: Directive
630
634
  }], ctorParameters: function () { return []; }, propDecorators: { id: [{
@@ -669,6 +673,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
669
673
  type: Input
670
674
  }], autocapitalize: [{
671
675
  type: Input
676
+ }], updateModelWhenDisabled: [{
677
+ type: Input
672
678
  }], helpModal: [{
673
679
  type: Input
674
680
  }], inputModelList: [{