@alfresco/adf-process-services-cloud 6.9.0-9076160222 → 6.9.0-9078488136

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.
@@ -140,23 +140,24 @@ export class DropdownCloudWidgetComponent extends WidgetComponent {
140
140
  return this.field?.optionType === 'variable';
141
141
  }
142
142
  persistFieldOptionsFromRestApi() {
143
- if (this.isValidRestType()) {
144
- this.resetRestApiErrorMessage();
145
- const bodyParam = this.buildBodyParam();
146
- this.formCloudService
147
- .getRestWidgetData(this.field.form.id, this.field.id, bodyParam)
148
- .pipe(takeUntil(this.onDestroy$))
149
- .subscribe((result) => {
150
- this.resetRestApiErrorMessage();
151
- this.field.options = result;
152
- this.updateOptions();
153
- this.field.updateForm();
154
- this.resetInvalidValue();
155
- }, (err) => {
156
- this.resetRestApiOptions();
157
- this.handleError(err);
158
- });
143
+ if (!this.isValidRestType() || this.field.readOnly) {
144
+ return;
159
145
  }
146
+ this.resetRestApiErrorMessage();
147
+ const bodyParam = this.buildBodyParam();
148
+ this.formCloudService
149
+ .getRestWidgetData(this.field.form.id, this.field.id, bodyParam)
150
+ .pipe(takeUntil(this.onDestroy$))
151
+ .subscribe((result) => {
152
+ this.resetRestApiErrorMessage();
153
+ this.field.options = result;
154
+ this.updateOptions();
155
+ this.field.updateForm();
156
+ this.resetInvalidValue();
157
+ }, (err) => {
158
+ this.resetRestApiOptions();
159
+ this.handleError(err);
160
+ });
160
161
  }
161
162
  buildBodyParam() {
162
163
  const bodyParam = Object.assign({});
@@ -352,7 +353,7 @@ export class DropdownCloudWidgetComponent extends WidgetComponent {
352
353
  }
353
354
  }
354
355
  DropdownCloudWidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: DropdownCloudWidgetComponent, deps: [{ token: i1.FormService }, { token: i2.FormCloudService }, { token: i1.AppConfigService }], target: i0.ɵɵFactoryTarget.Component });
355
- DropdownCloudWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: DropdownCloudWidgetComponent, selector: "dropdown-cloud-widget", host: { listeners: { "click": "event($event)", "blur": "event($event)", "change": "event($event)", "focus": "event($event)", "focusin": "event($event)", "focusout": "event($event)", "input": "event($event)", "invalid": "event($event)", "select": "event($event)" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"adf-dropdown-widget {{field.className}}\"\n [class.adf-invalid]=\"(!field.isValid && isTouched()) || isRestApiFailed\" [class.adf-readonly]=\"field.readOnly\" [class.adf-left-label-input-container]=\"field.leftLabels\">\n <div class=\"adf-dropdown-widget-top-labels\">\n <label class=\"adf-label\" [attr.for]=\"field.id\" [class.adf-left-label]=\"field.leftLabels\">{{field.name | translate }}<span class=\"adf-asterisk\"\n *ngIf=\"isRequired()\">*</span>\n </label>\n </div>\n <div>\n <mat-form-field>\n <mat-label *ngIf=\"getDefaultOption(list$ | async) as defaultOption\">\n {{ defaultOption.name }}\n </mat-label>\n <mat-select class=\"adf-select\"\n [id]=\"field.id\"\n [(ngModel)]=\"field.value\"\n [disabled]=\"field.readOnly\"\n [compareWith]=\"compareDropdownValues\"\n (ngModelChange)=\"selectionChangedForField(field)\"\n [matTooltip]=\"field.tooltip\"\n [required]=\"isRequired()\"\n panelClass=\"adf-select-filter\"\n (blur)=\"markAsTouched()\"\n matTooltipPosition=\"above\"\n matTooltipShowDelay=\"1000\"\n [multiple]=\"field.hasMultipleValues\">\n <adf-select-filter-input *ngIf=\"showInputFilter\" (change)=\"filter$.next($event)\"></adf-select-filter-input>\n\n <mat-option *ngFor=\"let opt of list$ | async\"\n [value]=\"getOptionValue(opt, field.value)\"\n [id]=\"opt.id\">{{opt.name}}\n </mat-option>\n <mat-option id=\"readonlyOption\" *ngIf=\"isReadOnlyType()\" [value]=\"field.value\">{{field.value}}</mat-option>\n </mat-select>\n </mat-form-field>\n <div *ngIf=\"!previewState\">\n <error-widget [error]=\"field.validationSummary\"></error-widget>\n <error-widget class=\"adf-dropdown-required-message\" *ngIf=\"showRequiredMessage()\"\n required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\"></error-widget>\n <error-widget class=\"adf-dropdown-failed-message\" *ngIf=\"isRestApiFailed\"\n required=\"{{ 'FORM.FIELD.REST_API_FAILED' | translate: { hostname: restApiHostName } }}\"></error-widget>\n <error-widget class=\"adf-dropdown-failed-message\" *ngIf=\"variableOptionsFailed\"\n required=\"{{ 'FORM.FIELD.VARIABLE_DROPDOWN_OPTIONS_FAILED' | translate }}\"></error-widget>\n </div>\n </div>\n</div>\n", styles: [".adf-dropdown-widget{width:100%;margin-top:13px}.adf-dropdown-widget .adf-select{padding-top:0;width:100%}.adf-dropdown-widget .adf-select-filter{font-size:var(--theme-body-1-font-size)}.adf-dropdown-widget-select{width:100%}.adf-dropdown-widget-dropdown-required-message .adf-error-container,.adf-dropdown-widget-dropdown-failed-message .adf-error-container{margin-top:1px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1.SelectFilterInputComponent, selector: "adf-select-filter-input", outputs: ["change"] }, { kind: "component", type: i1.ErrorWidgetComponent, selector: "error-widget", inputs: ["error", "required"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
356
+ DropdownCloudWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: DropdownCloudWidgetComponent, selector: "dropdown-cloud-widget", host: { listeners: { "click": "event($event)", "blur": "event($event)", "change": "event($event)", "focus": "event($event)", "focusin": "event($event)", "focusout": "event($event)", "input": "event($event)", "invalid": "event($event)", "select": "event($event)" } }, usesInheritance: true, ngImport: i0, template: "<div\n class=\"adf-dropdown-widget {{field.className}}\"\n [class.adf-invalid]=\"(!field.isValid && isTouched()) || isRestApiFailed\"\n [class.adf-readonly]=\"field.readOnly\"\n [class.adf-left-label-input-container]=\"field.leftLabels\"\n>\n <div class=\"adf-dropdown-widget-top-labels\">\n <label class=\"adf-label\" [attr.for]=\"field.id\" [class.adf-left-label]=\"field.leftLabels\"\n >{{field.name | translate }}<span class=\"adf-asterisk\" *ngIf=\"isRequired()\">*</span>\n </label>\n </div>\n <div>\n <mat-form-field>\n <mat-label *ngIf=\"getDefaultOption(list$ | async) as defaultOption\">\n {{ defaultOption.name }}\n </mat-label>\n <mat-select\n class=\"adf-select\"\n [id]=\"field.id\"\n [(ngModel)]=\"field.value\"\n [disabled]=\"field.readOnly\"\n [compareWith]=\"compareDropdownValues\"\n (ngModelChange)=\"selectionChangedForField(field)\"\n [matTooltip]=\"field.tooltip\"\n [required]=\"isRequired()\"\n panelClass=\"adf-select-filter\"\n (blur)=\"markAsTouched()\"\n matTooltipPosition=\"above\"\n matTooltipShowDelay=\"1000\"\n [multiple]=\"field.hasMultipleValues\"\n >\n <adf-select-filter-input *ngIf=\"showInputFilter\" (change)=\"filter$.next($event)\"></adf-select-filter-input>\n\n <mat-option *ngFor=\"let opt of list$ | async\" [value]=\"getOptionValue(opt, field.value)\" [id]=\"opt.id\">\n {{opt.name}}\n </mat-option>\n <mat-option id=\"readonlyOption\" *ngIf=\"isReadOnlyType()\" [value]=\"field.value\">\n {{field.value}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div *ngIf=\"!previewState && !field.readOnly\">\n <error-widget [error]=\"field.validationSummary\"></error-widget>\n <error-widget\n class=\"adf-dropdown-required-message\"\n *ngIf=\"showRequiredMessage()\"\n required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\"\n ></error-widget>\n <error-widget\n class=\"adf-dropdown-failed-message\"\n *ngIf=\"isRestApiFailed\"\n required=\"{{ 'FORM.FIELD.REST_API_FAILED' | translate: { hostname: restApiHostName } }}\"\n ></error-widget>\n <error-widget\n class=\"adf-dropdown-failed-message\"\n *ngIf=\"variableOptionsFailed\"\n required=\"{{ 'FORM.FIELD.VARIABLE_DROPDOWN_OPTIONS_FAILED' | translate }}\"\n ></error-widget>\n </div>\n </div>\n</div>\n", styles: [".adf-dropdown-widget{width:100%;margin-top:13px}.adf-dropdown-widget .adf-select{padding-top:0;width:100%}.adf-dropdown-widget .adf-select-filter{font-size:var(--theme-body-1-font-size)}.adf-dropdown-widget-select{width:100%}.adf-dropdown-widget-dropdown-required-message .adf-error-container,.adf-dropdown-widget-dropdown-failed-message .adf-error-container{margin-top:1px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1.SelectFilterInputComponent, selector: "adf-select-filter-input", outputs: ["change"] }, { kind: "component", type: i1.ErrorWidgetComponent, selector: "error-widget", inputs: ["error", "required"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
356
357
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: DropdownCloudWidgetComponent, decorators: [{
357
358
  type: Component,
358
359
  args: [{ selector: 'dropdown-cloud-widget', host: {
@@ -365,6 +366,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
365
366
  '(input)': 'event($event)',
366
367
  '(invalid)': 'event($event)',
367
368
  '(select)': 'event($event)'
368
- }, encapsulation: ViewEncapsulation.None, template: "<div class=\"adf-dropdown-widget {{field.className}}\"\n [class.adf-invalid]=\"(!field.isValid && isTouched()) || isRestApiFailed\" [class.adf-readonly]=\"field.readOnly\" [class.adf-left-label-input-container]=\"field.leftLabels\">\n <div class=\"adf-dropdown-widget-top-labels\">\n <label class=\"adf-label\" [attr.for]=\"field.id\" [class.adf-left-label]=\"field.leftLabels\">{{field.name | translate }}<span class=\"adf-asterisk\"\n *ngIf=\"isRequired()\">*</span>\n </label>\n </div>\n <div>\n <mat-form-field>\n <mat-label *ngIf=\"getDefaultOption(list$ | async) as defaultOption\">\n {{ defaultOption.name }}\n </mat-label>\n <mat-select class=\"adf-select\"\n [id]=\"field.id\"\n [(ngModel)]=\"field.value\"\n [disabled]=\"field.readOnly\"\n [compareWith]=\"compareDropdownValues\"\n (ngModelChange)=\"selectionChangedForField(field)\"\n [matTooltip]=\"field.tooltip\"\n [required]=\"isRequired()\"\n panelClass=\"adf-select-filter\"\n (blur)=\"markAsTouched()\"\n matTooltipPosition=\"above\"\n matTooltipShowDelay=\"1000\"\n [multiple]=\"field.hasMultipleValues\">\n <adf-select-filter-input *ngIf=\"showInputFilter\" (change)=\"filter$.next($event)\"></adf-select-filter-input>\n\n <mat-option *ngFor=\"let opt of list$ | async\"\n [value]=\"getOptionValue(opt, field.value)\"\n [id]=\"opt.id\">{{opt.name}}\n </mat-option>\n <mat-option id=\"readonlyOption\" *ngIf=\"isReadOnlyType()\" [value]=\"field.value\">{{field.value}}</mat-option>\n </mat-select>\n </mat-form-field>\n <div *ngIf=\"!previewState\">\n <error-widget [error]=\"field.validationSummary\"></error-widget>\n <error-widget class=\"adf-dropdown-required-message\" *ngIf=\"showRequiredMessage()\"\n required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\"></error-widget>\n <error-widget class=\"adf-dropdown-failed-message\" *ngIf=\"isRestApiFailed\"\n required=\"{{ 'FORM.FIELD.REST_API_FAILED' | translate: { hostname: restApiHostName } }}\"></error-widget>\n <error-widget class=\"adf-dropdown-failed-message\" *ngIf=\"variableOptionsFailed\"\n required=\"{{ 'FORM.FIELD.VARIABLE_DROPDOWN_OPTIONS_FAILED' | translate }}\"></error-widget>\n </div>\n </div>\n</div>\n", styles: [".adf-dropdown-widget{width:100%;margin-top:13px}.adf-dropdown-widget .adf-select{padding-top:0;width:100%}.adf-dropdown-widget .adf-select-filter{font-size:var(--theme-body-1-font-size)}.adf-dropdown-widget-select{width:100%}.adf-dropdown-widget-dropdown-required-message .adf-error-container,.adf-dropdown-widget-dropdown-failed-message .adf-error-container{margin-top:1px}\n"] }]
369
+ }, encapsulation: ViewEncapsulation.None, template: "<div\n class=\"adf-dropdown-widget {{field.className}}\"\n [class.adf-invalid]=\"(!field.isValid && isTouched()) || isRestApiFailed\"\n [class.adf-readonly]=\"field.readOnly\"\n [class.adf-left-label-input-container]=\"field.leftLabels\"\n>\n <div class=\"adf-dropdown-widget-top-labels\">\n <label class=\"adf-label\" [attr.for]=\"field.id\" [class.adf-left-label]=\"field.leftLabels\"\n >{{field.name | translate }}<span class=\"adf-asterisk\" *ngIf=\"isRequired()\">*</span>\n </label>\n </div>\n <div>\n <mat-form-field>\n <mat-label *ngIf=\"getDefaultOption(list$ | async) as defaultOption\">\n {{ defaultOption.name }}\n </mat-label>\n <mat-select\n class=\"adf-select\"\n [id]=\"field.id\"\n [(ngModel)]=\"field.value\"\n [disabled]=\"field.readOnly\"\n [compareWith]=\"compareDropdownValues\"\n (ngModelChange)=\"selectionChangedForField(field)\"\n [matTooltip]=\"field.tooltip\"\n [required]=\"isRequired()\"\n panelClass=\"adf-select-filter\"\n (blur)=\"markAsTouched()\"\n matTooltipPosition=\"above\"\n matTooltipShowDelay=\"1000\"\n [multiple]=\"field.hasMultipleValues\"\n >\n <adf-select-filter-input *ngIf=\"showInputFilter\" (change)=\"filter$.next($event)\"></adf-select-filter-input>\n\n <mat-option *ngFor=\"let opt of list$ | async\" [value]=\"getOptionValue(opt, field.value)\" [id]=\"opt.id\">\n {{opt.name}}\n </mat-option>\n <mat-option id=\"readonlyOption\" *ngIf=\"isReadOnlyType()\" [value]=\"field.value\">\n {{field.value}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div *ngIf=\"!previewState && !field.readOnly\">\n <error-widget [error]=\"field.validationSummary\"></error-widget>\n <error-widget\n class=\"adf-dropdown-required-message\"\n *ngIf=\"showRequiredMessage()\"\n required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\"\n ></error-widget>\n <error-widget\n class=\"adf-dropdown-failed-message\"\n *ngIf=\"isRestApiFailed\"\n required=\"{{ 'FORM.FIELD.REST_API_FAILED' | translate: { hostname: restApiHostName } }}\"\n ></error-widget>\n <error-widget\n class=\"adf-dropdown-failed-message\"\n *ngIf=\"variableOptionsFailed\"\n required=\"{{ 'FORM.FIELD.VARIABLE_DROPDOWN_OPTIONS_FAILED' | translate }}\"\n ></error-widget>\n </div>\n </div>\n</div>\n", styles: [".adf-dropdown-widget{width:100%;margin-top:13px}.adf-dropdown-widget .adf-select{padding-top:0;width:100%}.adf-dropdown-widget .adf-select-filter{font-size:var(--theme-body-1-font-size)}.adf-dropdown-widget-select{width:100%}.adf-dropdown-widget-dropdown-required-message .adf-error-container,.adf-dropdown-widget-dropdown-failed-message .adf-error-container{margin-top:1px}\n"] }]
369
370
  }], ctorParameters: function () { return [{ type: i1.FormService }, { type: i2.FormCloudService }, { type: i1.AppConfigService }]; } });
370
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tY2xvdWQud2lkZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3Byb2Nlc3Mtc2VydmljZXMtY2xvdWQvc3JjL2xpYi9mb3JtL2NvbXBvbmVudHMvd2lkZ2V0cy9kcm9wZG93bi9kcm9wZG93bi1jbG91ZC53aWRnZXQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy1jbG91ZC9zcmMvbGliL2Zvcm0vY29tcG9uZW50cy93aWRnZXRzL2Ryb3Bkb3duL2Ryb3Bkb3duLWNsb3VkLndpZGdldC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQXFCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsY0FBYyxFQUdkLGNBQWMsRUFDZCxXQUFXLEVBRVgsZUFBZSxFQUNsQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0UsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBR3hELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRztJQUMxQixFQUFFLEVBQUUsT0FBTztJQUNYLElBQUksRUFBRSxlQUFlO0NBQ3hCLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFFbkMsdURBQXVEO0FBbUJ2RCxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsZUFBZTtJQWdCN0QsWUFBbUIsV0FBd0IsRUFBVSxnQkFBa0Ms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Q0FBQyxDQUFDLE1BQXVCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7O3lIQW5ZUSw0QkFBNEI7NkdBQTVCLDRCQUE0QiwrVkMxRHpDLHd0RkE2Q0E7MkZEYWEsNEJBQTRCO2tCQWpCeEMsU0FBUzsrQkFDSSx1QkFBdUIsUUFHM0I7d0JBQ0YsU0FBUyxFQUFFLGVBQWU7d0JBQzFCLFFBQVEsRUFBRSxlQUFlO3dCQUN6QixVQUFVLEVBQUUsZUFBZTt3QkFDM0IsU0FBUyxFQUFFLGVBQWU7d0JBQzFCLFdBQVcsRUFBRSxlQUFlO3dCQUM1QixZQUFZLEVBQUUsZUFBZTt3QkFDN0IsU0FBUyxFQUFFLGVBQWU7d0JBQzFCLFdBQVcsRUFBRSxlQUFlO3dCQUM1QixVQUFVLEVBQUUsZUFBZTtxQkFDOUIsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjQgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQXBwQ29uZmlnU2VydmljZSxcbiAgICBGb3JtRmllbGRFdmVudCxcbiAgICBGb3JtRmllbGRNb2RlbCxcbiAgICBGb3JtRmllbGRPcHRpb24sXG4gICAgRm9ybUZpZWxkVHlwZXMsXG4gICAgRm9ybVNlcnZpY2UsXG4gICAgUnVsZUVudHJ5LFxuICAgIFdpZGdldENvbXBvbmVudFxufSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgRm9ybUNsb3VkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Zvcm0tY2xvdWQuc2VydmljZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVGFza1ZhcmlhYmxlQ2xvdWQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdGFzay12YXJpYWJsZS1jbG91ZC5tb2RlbCc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09QVElPTiA9IHtcbiAgICBpZDogJ2VtcHR5JyxcbiAgICBuYW1lOiAnQ2hvb3NlIG9uZS4uLidcbn07XG5leHBvcnQgY29uc3QgSElERV9GSUxURVJfTElNSVQgPSA1O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yICovXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZHJvcGRvd24tY2xvdWQtd2lkZ2V0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24tY2xvdWQud2lkZ2V0Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2Ryb3Bkb3duLWNsb3VkLndpZGdldC5zY3NzJ10sXG4gICAgaG9zdDoge1xuICAgICAgICAnKGNsaWNrKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhibHVyKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhjaGFuZ2UpJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKGZvY3VzKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhmb2N1c2luKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhmb2N1c291dCknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoaW5wdXQpJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKGludmFsaWQpJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKHNlbGVjdCknOiAnZXZlbnQoJGV2ZW50KSdcbiAgICB9LFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd25DbG91ZFdpZGdldENvbXBvbmVudCBleHRlbmRzIFdpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICB0eXBlSWQgPSAnRHJvcGRvd25DbG91ZFdpZGdldENvbXBvbmVudCc7XG4gICAgc2hvd0lucHV0RmlsdGVyID0gZmFsc2U7XG4gICAgaXNSZXN0QXBpRmFpbGVkID0gZmFsc2U7XG4gICAgdmFyaWFibGVPcHRpb25zRmFpbGVkID0gZmFsc2U7XG4gICAgcHJldmlld1N0YXRlID0gZmFsc2U7XG4gICAgcmVzdEFwaUhvc3ROYW1lOiBzdHJpbmc7XG4gICAgbGlzdCQ6IE9ic2VydmFibGU8Rm9ybUZpZWxkT3B0aW9uW10+O1xuICAgIGZpbHRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0VmFyaWFibGVPcHRpb25JZCA9ICdpZCc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0VmFyaWFibGVPcHRpb25MYWJlbCA9ICduYW1lJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRWYXJpYWJsZU9wdGlvblBhdGggPSAnZGF0YSc7XG5cbiAgICBwcm90ZWN0ZWQgb25EZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlLCBwcml2YXRlIGZvcm1DbG91ZFNlcnZpY2U6IEZvcm1DbG91ZFNlcnZpY2UsIHByaXZhdGUgYXBwQ29uZmlnOiBBcHBDb25maWdTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKGZvcm1TZXJ2aWNlKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXRQcmV2aWV3U3RhdGUoKTtcbiAgICAgICAgdGhpcy5jaGVja0ZpZWxkT3B0aW9uc1NvdXJjZSgpO1xuICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrRmllbGRPcHRpb25zU291cmNlKCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgICAgICAgIGNhc2UgdGhpcy5maWVsZC5yZXN0VXJsICYmICF0aGlzLmlzTGlua2VkV2lkZ2V0KCk6XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzaXN0RmllbGRPcHRpb25zRnJvbVJlc3RBcGkoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSB0aGlzLmlzTGlua2VkV2lkZ2V0KCk6XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRmllbGRPcHRpb25zRm9yTGlua2VkV2lkZ2V0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgdGhpcy5pc1ZhcmlhYmxlT3B0aW9uVHlwZSgpOlxuICAgICAgICAgICAgICAgIHRoaXMucGVyc2lzdEZpZWxkT3B0aW9uc0Zyb21WYXJpYWJsZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwZXJzaXN0RmllbGRPcHRpb25zRnJvbVZhcmlhYmxlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcHRpb25zUGF0aCA9IHRoaXMuZmllbGQ/LnZhcmlhYmxlQ29uZmlnPy5vcHRpb25zUGF0aCA/PyB0aGlzLmRlZmF1bHRWYXJpYWJsZU9wdGlvblBhdGg7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlTmFtZSA9IHRoaXMuZmllbGQ/LnZhcmlhYmxlQ29uZmlnPy52YXJpYWJsZU5hbWU7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NWYXJpYWJsZXMgPSB0aGlzLmZpZWxkPy5mb3JtPy5wcm9jZXNzVmFyaWFibGVzO1xuICAgICAgICBjb25zdCBmb3JtVmFyaWFibGVzID0gdGhpcy5maWVsZD8uZm9ybT8udmFyaWFibGVzO1xuXG4gICAgICAgIGNvbnN0IGRyb3Bkb3duT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uc0Zyb21WYXJpYWJsZShwcm9jZXNzVmFyaWFibGVzLCBmb3JtVmFyaWFibGVzLCB2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgIGlmIChkcm9wZG93bk9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1WYXJpYWJsZU9wdGlvbnM6IEZvcm1GaWVsZE9wdGlvbltdID0gdGhpcy5nZXRPcHRpb25zRnJvbVBhdGgoZHJvcGRvd25PcHRpb25zLCBvcHRpb25zUGF0aCk7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLm9wdGlvbnMgPSBmb3JtVmFyaWFibGVPcHRpb25zO1xuICAgICAgICAgICAgdGhpcy5yZXNldEludmFsaWRWYWx1ZSgpO1xuICAgICAgICAgICAgdGhpcy5maWVsZC51cGRhdGVGb3JtKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGAke3ZhcmlhYmxlTmFtZX0gbm90IGZvdW5kYCk7XG4gICAgICAgICAgICB0aGlzLnJlc2V0T3B0aW9ucygpO1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZU9wdGlvbnNGYWlsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcHRpb25zRnJvbVBhdGgoZGF0YTogYW55LCBwYXRoOiBzdHJpbmcpOiBGb3JtRmllbGRPcHRpb25bXSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNJZCA9IHRoaXMuZmllbGQ/LnZhcmlhYmxlQ29uZmlnPy5vcHRpb25zSWQgPz8gdGhpcy5kZWZhdWx0VmFyaWFibGVPcHRpb25JZDtcbiAgICAgICAgY29uc3Qgb3B0aW9uc0xhYmVsID0gdGhpcy5maWVsZD8udmFyaWFibGVDb25maWc/Lm9wdGlvbnNMYWJlbCA/PyB0aGlzLmRlZmF1bHRWYXJpYWJsZU9wdGlvbkxhYmVsO1xuXG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQcm9wZXJ0eSA9IHByb3BlcnRpZXMuc2hpZnQoKTtcblxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBjdXJyZW50UHJvcGVydHkpKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGAke2N1cnJlbnRQcm9wZXJ0eX0gbm90IGZvdW5kIGluICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YCk7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlT3B0aW9uc0ZhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXN0ZWREYXRhID0gZGF0YVtjdXJyZW50UHJvcGVydHldO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5lc3RlZERhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25zRnJvbUFycmF5KG5lc3RlZERhdGEsIG9wdGlvbnNJZCwgb3B0aW9uc0xhYmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbnNGcm9tUGF0aChuZXN0ZWREYXRhLCBwcm9wZXJ0aWVzLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcHRpb25zRnJvbUFycmF5KG5lc3RlZERhdGE6IGFueVtdLCBpZDogc3RyaW5nLCBsYWJlbDogc3RyaW5nKTogRm9ybUZpZWxkT3B0aW9uW10ge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gbmVzdGVkRGF0YS5tYXAoKGl0ZW0pID0+IHRoaXMuY3JlYXRlT3B0aW9uKGl0ZW0sIGlkLCBsYWJlbCkpO1xuICAgICAgICBjb25zdCBoYXNJbnZhbGlkT3B0aW9uID0gb3B0aW9ucy5zb21lKChvcHRpb24pID0+ICFvcHRpb24pO1xuXG4gICAgICAgIGlmIChoYXNJbnZhbGlkT3B0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlT3B0aW9uc0ZhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZhcmlhYmxlT3B0aW9uc0ZhaWxlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZU9wdGlvbihpdGVtOiBhbnksIGlkOiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcpOiBGb3JtRmllbGRPcHRpb24ge1xuICAgICAgICBjb25zdCBvcHRpb246IEZvcm1GaWVsZE9wdGlvbiA9IHtcbiAgICAgICAgICAgIGlkOiBpdGVtW2lkXSxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW1bbGFiZWxdXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKCFvcHRpb24uaWQgfHwgIW9wdGlvbi5uYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGAnaWQnIG9yICdsYWJlbCcgaXMgbm90IHByb3Blcmx5IGRlZmluZWRgKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3B0aW9uc0Zyb21WYXJpYWJsZShcbiAgICAgICAgcHJvY2Vzc1ZhcmlhYmxlczogVGFza1ZhcmlhYmxlQ2xvdWRbXSxcbiAgICAgICAgZm9ybVZhcmlhYmxlczogVGFza1ZhcmlhYmxlQ2xvdWRbXSxcbiAgICAgICAgdmFyaWFibGVOYW1lOiBzdHJpbmdcbiAgICApOiBUYXNrVmFyaWFibGVDbG91ZCB7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NWYXJpYWJsZURyb3Bkb3duT3B0aW9uczogVGFza1ZhcmlhYmxlQ2xvdWQgPSB0aGlzLmdldFZhcmlhYmxlVmFsdWVCeU5hbWUocHJvY2Vzc1ZhcmlhYmxlcywgdmFyaWFibGVOYW1lKTtcbiAgICAgICAgY29uc3QgZm9ybVZhcmlhYmxlRHJvcGRvd25PcHRpb25zOiBUYXNrVmFyaWFibGVDbG91ZCA9IHRoaXMuZ2V0VmFyaWFibGVWYWx1ZUJ5TmFtZShmb3JtVmFyaWFibGVzLCB2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgIHJldHVybiBwcm9jZXNzVmFyaWFibGVEcm9wZG93bk9wdGlvbnMgPz8gZm9ybVZhcmlhYmxlRHJvcGRvd25PcHRpb25zO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VmFyaWFibGVWYWx1ZUJ5TmFtZSh2YXJpYWJsZXM6IFRhc2tWYXJpYWJsZUNsb3VkW10sIHZhcmlhYmxlTmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlcz8uZmluZCgodmFyaWFibGU6IFRhc2tWYXJpYWJsZUNsb3VkKSA9PiB2YXJpYWJsZT8ubmFtZSA9PT0gYHZhcmlhYmxlcy4ke3ZhcmlhYmxlTmFtZX1gIHx8IHZhcmlhYmxlPy5uYW1lID09PSB2YXJpYWJsZU5hbWUpXG4gICAgICAgICAgICA/LnZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWYXJpYWJsZU9wdGlvblR5cGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkPy5vcHRpb25UeXBlID09PSAndmFyaWFibGUnO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGVyc2lzdEZpZWxkT3B0aW9uc0Zyb21SZXN0QXBpKCkge1xuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkUmVzdFR5cGUoKSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFJlc3RBcGlFcnJvck1lc3NhZ2UoKTtcbiAgICAgICAgICAgIGNvbnN0IGJvZHlQYXJhbSA9IHRoaXMuYnVpbGRCb2R5UGFyYW0oKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNsb3VkU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZXRSZXN0V2lkZ2V0RGF0YSh0aGlzLmZpZWxkLmZvcm0uaWQsIHRoaXMuZmllbGQuaWQsIGJvZHlQYXJhbSlcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0OiBGb3JtRmllbGRPcHRpb25bXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldFJlc3RBcGlFcnJvck1lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGQub3B0aW9ucyA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlT3B0aW9ucygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWVsZC51cGRhdGVGb3JtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0SW52YWxpZFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRSZXN0QXBpT3B0aW9ucygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRCb2R5UGFyYW0oKTogYW55IHtcbiAgICAgICAgY29uc3QgYm9keVBhcmFtID0gT2JqZWN0LmFzc2lnbih7fSk7XG4gICAgICAgIGlmICh0aGlzLmlzTGlua2VkV2lkZ2V0KCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFdpZGdldFZhbHVlID0gdGhpcy5nZXRQYXJlbnRXaWRnZXRWYWx1ZSgpO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50V2lkZ2V0SWQgPSB0aGlzLmdldExpbmtlZFdpZGdldElkKCk7XG4gICAgICAgICAgICBib2R5UGFyYW1bcGFyZW50V2lkZ2V0SWRdID0gcGFyZW50V2lkZ2V0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJvZHlQYXJhbTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRGaWVsZE9wdGlvbnNGb3JMaW5rZWRXaWRnZXQoKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFdpZGdldFZhbHVlID0gdGhpcy5nZXRQYXJlbnRXaWRnZXRWYWx1ZSgpO1xuICAgICAgICB0aGlzLnBhcmVudFZhbHVlQ2hhbmdlZChwYXJlbnRXaWRnZXRWYWx1ZSk7XG5cbiAgICAgICAgdGhpcy5mb3JtU2VydmljZS5mb3JtRmllbGRWYWx1ZUNoYW5nZWRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQ6IEZvcm1GaWVsZEV2ZW50KSA9PiB0aGlzLmlzRm9ybUZpZWxkRXZlbnRPZlR5cGVEcm9wZG93bihldmVudCkgJiYgdGhpcy5pc1BhcmVudEZvcm1GaWVsZEV2ZW50KGV2ZW50KSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBGb3JtRmllbGRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlT2ZQYXJlbnRXaWRnZXQgPSBldmVudC5maWVsZC52YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudFZhbHVlQ2hhbmdlZCh2YWx1ZU9mUGFyZW50V2lkZ2V0KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGFyZW50V2lkZ2V0VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcGFyZW50V2lkZ2V0SWQgPSB0aGlzLmdldExpbmtlZFdpZGdldElkKCk7XG4gICAgICAgIGNvbnN0IHBhcmVudFdpZGdldCA9IHRoaXMuZ2V0Rm9ybUZpZWxkQnlJZChwYXJlbnRXaWRnZXRJZCk7XG4gICAgICAgIHJldHVybiBwYXJlbnRXaWRnZXQ/LnZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyZW50VmFsdWVDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHZhbHVlICYmICF0aGlzLmlzTm9uZVZhbHVlU2VsZWN0ZWQodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRSZXN0VHlwZSgpID8gdGhpcy5wZXJzaXN0RmllbGRPcHRpb25zRnJvbVJlc3RBcGkoKSA6IHRoaXMucGVyc2lzdEZpZWxkT3B0aW9uc0Zyb21NYW51YWxMaXN0KHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzTm9uZVZhbHVlU2VsZWN0ZWQodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0UmVzdEFwaUVycm9yTWVzc2FnZSgpO1xuICAgICAgICAgICAgdGhpcy5yZXNldE9wdGlvbnMoKTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRJbnZhbGlkVmFsdWUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGQub3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5yZXNldEludmFsaWRWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc05vbmVWYWx1ZVNlbGVjdGVkKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JtRmllbGRCeUlkKGZpZWxkSWQpOiBGb3JtRmllbGRNb2RlbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkLmZvcm0uZ2V0Rm9ybUZpZWxkcygpLmZpbHRlcigoZmllbGQ6IEZvcm1GaWVsZE1vZGVsKSA9PiBmaWVsZC5pZCA9PT0gZmllbGRJZClbMF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwZXJzaXN0RmllbGRPcHRpb25zRnJvbU1hbnVhbExpc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5oYXNSdWxlRW50cmllcygpKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlc0VudHJpZXMgPSB0aGlzLmZpZWxkLnJ1bGUuZW50cmllcztcbiAgICAgICAgICAgIHJ1bGVzRW50cmllcy5mb3JFYWNoKChydWxlRW50cnk6IFJ1bGVFbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChydWxlRW50cnkua2V5ID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpZWxkLm9wdGlvbnMgPSBydWxlRW50cnkub3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldEludmFsaWRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpZWxkLnVwZGF0ZUZvcm0oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRJbnZhbGlkVmFsdWUoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkVmFsdWUoKSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0VmFsdWUoKSB7XG4gICAgICAgIHRoaXMuZmllbGQudmFsdWUgPSAnJztcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkRm9yRmllbGQodGhpcy5maWVsZCk7XG4gICAgICAgIHRoaXMudXBkYXRlT3B0aW9ucygpO1xuICAgICAgICB0aGlzLmZpZWxkLnVwZGF0ZUZvcm0oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVmFsaWRWYWx1ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGRWYWx1ZSAmJiB0aGlzLmlzU2VsZWN0ZWRWYWx1ZUluT3B0aW9ucygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNTZWxlY3RlZFZhbHVlSW5PcHRpb25zKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZpZWxkVmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25JZExpc3QgPSBbLi4udGhpcy5maWVsZC5vcHRpb25zXS5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLmlkKTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWVJZHMgPSB0aGlzLmZpZWxkVmFsdWUubWFwKCh2YWx1ZU9wdGlvbikgPT4gdmFsdWVPcHRpb24uaWQpO1xuICAgICAgICAgICAgcmV0dXJuIGZpZWxkVmFsdWVJZHMuZXZlcnkoKHZhbHVlT3B0aW9uSWQpID0+IG9wdGlvbklkTGlzdC5pbmNsdWRlcyh2YWx1ZU9wdGlvbklkKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLnRoaXMuZmllbGQub3B0aW9uc10ubWFwKChvcHRpb24pID0+IG9wdGlvbi5pZCkuaW5jbHVkZXModGhpcy5maWVsZFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBmaWVsZFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkLnZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzUnVsZUVudHJpZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZmllbGQucnVsZS5lbnRyaWVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0T3B0aW9ucygpIHtcbiAgICAgICAgdGhpcy5maWVsZC5vcHRpb25zID0gW107XG4gICAgICAgIHRoaXMudXBkYXRlT3B0aW9ucygpO1xuICAgIH1cblxuICAgIHNlbGVjdGlvbkNoYW5nZWRGb3JGaWVsZChmaWVsZDogRm9ybUZpZWxkTW9kZWwpIHtcbiAgICAgICAgY29uc3QgZm9ybUZpZWxkVmFsdWVDaGFuZ2VkRXZlbnQgPSBuZXcgRm9ybUZpZWxkRXZlbnQoZmllbGQuZm9ybSwgZmllbGQpO1xuICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLmZvcm1GaWVsZFZhbHVlQ2hhbmdlZC5uZXh0KGZvcm1GaWVsZFZhbHVlQ2hhbmdlZEV2ZW50KTtcbiAgICAgICAgdGhpcy5vbkZpZWxkQ2hhbmdlZChmaWVsZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1BhcmVudEZvcm1GaWVsZEV2ZW50KGV2ZW50OiBGb3JtRmllbGRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZXZlbnQuZmllbGQuaWQgPT09IHRoaXMuZ2V0TGlua2VkV2lkZ2V0SWQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRm9ybUZpZWxkRXZlbnRPZlR5cGVEcm9wZG93bihldmVudDogRm9ybUZpZWxkRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LmZpZWxkLnR5cGUgPT09IEZvcm1GaWVsZFR5cGVzLkRST1BET1dOO1xuICAgIH1cblxuICAgIGlzTGlua2VkV2lkZ2V0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmdldExpbmtlZFdpZGdldElkKCk7XG4gICAgfVxuXG4gICAgZ2V0TGlua2VkV2lkZ2V0SWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQ/LnJ1bGU/LnJ1bGVPbjtcbiAgICB9XG5cbiAgICBjb21wYXJlRHJvcGRvd25WYWx1ZXMob3B0MTogRm9ybUZpZWxkT3B0aW9uIHwgc3RyaW5nLCBvcHQyOiBGb3JtRmllbGRPcHRpb24gfCBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFvcHQxIHx8ICFvcHQyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIG9wdDEgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBvcHQyID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIG9wdDEgPT09IG9wdDIuaWQgfHwgb3B0MSA9PT0gb3B0Mi5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHQxID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb3B0MiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHQxLmlkID09PSBvcHQyIHx8IG9wdDEubmFtZSA9PT0gb3B0MjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0MSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9wdDIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0MS5pZCA9PT0gb3B0Mi5pZCB8fCBvcHQxLm5hbWUgPT09IG9wdDIubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHQxID09PSBvcHQyO1xuICAgIH1cblxuICAgIGdldE9wdGlvblZhbHVlKG9wdGlvbjogRm9ybUZpZWxkT3B0aW9uLCBmaWVsZFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgfCBGb3JtRmllbGRPcHRpb24ge1xuICAgICAgICBpZiAodGhpcy5maWVsZC5oYXNNdWx0aXBsZVZhbHVlcykge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvcHRpb25WYWx1ZTogc3RyaW5nID0gJyc7XG4gICAgICAgIGlmIChvcHRpb24uaWQgPT09IERFRkFVTFRfT1BUSU9OLmlkKSB7XG4gICAgICAgICAgICBvcHRpb25WYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb24ubmFtZSAhPT0gZmllbGRWYWx1ZSkge1xuICAgICAgICAgICAgb3B0aW9uVmFsdWUgPSBvcHRpb24uaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25WYWx1ZSA9IG9wdGlvbi5uYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcHRpb25WYWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVmFsaWRSZXN0VHlwZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQub3B0aW9uVHlwZSA9PT0gJ3Jlc3QnICYmICEhdGhpcy5maWVsZC5yZXN0VXJsO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UHJldmlld1N0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpZXdTdGF0ZSA9IHRoaXMuZm9ybUNsb3VkU2VydmljZS5nZXRQcmV2aWV3U3RhdGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLnByZXZpZXdTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy53aWRnZXRFcnJvci5lbWl0KGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzUmVhZE9ubHlUeXBlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZC50eXBlID09PSAncmVhZG9ubHknO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLm9uRGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlT3B0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaG93SW5wdXRGaWx0ZXIgPSB0aGlzLmZpZWxkLm9wdGlvbnMubGVuZ3RoID4gdGhpcy5hcHBDb25maWcuZ2V0PG51bWJlcj4oJ2Zvcm0uZHJvcERvd25GaWx0ZXJMaW1pdCcsIEhJREVfRklMVEVSX0xJTUlUKTtcbiAgICAgICAgdGhpcy5saXN0JCA9IGNvbWJpbmVMYXRlc3QoW29mKHRoaXMuZmllbGQub3B0aW9ucyksIHRoaXMuZmlsdGVyJF0pLnBpcGUoXG4gICAgICAgICAgICBtYXAoKFtpdGVtcywgc2VhcmNoXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghc2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbHRlcigoeyBuYW1lIH0pID0+IG5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSkpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJlc2V0UmVzdEFwaUVycm9yTWVzc2FnZSgpIHtcbiAgICAgICAgdGhpcy5pc1Jlc3RBcGlGYWlsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXN0QXBpSG9zdE5hbWUgPSAnJztcbiAgICB9XG5cbiAgICByZXNldFJlc3RBcGlPcHRpb25zKCkge1xuICAgICAgICB0aGlzLmZpZWxkLm9wdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5yZXNldFZhbHVlKCk7XG4gICAgICAgIHRoaXMuaXNSZXN0QXBpRmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZXN0QXBpSG9zdE5hbWUgPSB0aGlzLmdldFJlc3RVcmxIb3N0TmFtZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UmVzdFVybEhvc3ROYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVSTCh0aGlzLmZpZWxkPy5yZXN0VXJsKS5ob3N0bmFtZTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maWVsZD8ucmVzdFVybDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNob3dSZXF1aXJlZE1lc3NhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodGhpcy5pc0ludmFsaWRGaWVsZFJlcXVpcmVkKCkgfHwgKHRoaXMuaXNOb25lVmFsdWVTZWxlY3RlZCh0aGlzLmZpZWxkLnZhbHVlKSAmJiB0aGlzLmlzUmVxdWlyZWQoKSkpICYmXG4gICAgICAgICAgICB0aGlzLmlzVG91Y2hlZCgpICYmXG4gICAgICAgICAgICAhdGhpcy5pc1Jlc3RBcGlGYWlsZWQgJiZcbiAgICAgICAgICAgICF0aGlzLnZhcmlhYmxlT3B0aW9uc0ZhaWxlZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRPcHRpb24ob3B0aW9uczogRm9ybUZpZWxkT3B0aW9uW10pOiBGb3JtRmllbGRPcHRpb24ge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5maW5kKChvcHRpb246IEZvcm1GaWVsZE9wdGlvbikgPT4gb3B0aW9uLmlkID09PSBERUZBVUxUX09QVElPTi5pZCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImFkZi1kcm9wZG93bi13aWRnZXQge3tmaWVsZC5jbGFzc05hbWV9fVwiXG4gICAgIFtjbGFzcy5hZGYtaW52YWxpZF09XCIoIWZpZWxkLmlzVmFsaWQgJiYgaXNUb3VjaGVkKCkpIHx8IGlzUmVzdEFwaUZhaWxlZFwiIFtjbGFzcy5hZGYtcmVhZG9ubHldPVwiZmllbGQucmVhZE9ubHlcIiBbY2xhc3MuYWRmLWxlZnQtbGFiZWwtaW5wdXQtY29udGFpbmVyXT1cImZpZWxkLmxlZnRMYWJlbHNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYWRmLWRyb3Bkb3duLXdpZGdldC10b3AtbGFiZWxzXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImFkZi1sYWJlbFwiIFthdHRyLmZvcl09XCJmaWVsZC5pZFwiIFtjbGFzcy5hZGYtbGVmdC1sYWJlbF09XCJmaWVsZC5sZWZ0TGFiZWxzXCI+e3tmaWVsZC5uYW1lIHwgdHJhbnNsYXRlIH19PHNwYW4gY2xhc3M9XCJhZGYtYXN0ZXJpc2tcIlxuICAgICAgICAgICAgKm5nSWY9XCJpc1JlcXVpcmVkKClcIj4qPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJnZXREZWZhdWx0T3B0aW9uKGxpc3QkIHwgYXN5bmMpIGFzIGRlZmF1bHRPcHRpb25cIj5cbiAgICAgICAgICAgICAgICB7eyBkZWZhdWx0T3B0aW9uLm5hbWUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgY2xhc3M9XCJhZGYtc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZC5yZWFkT25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29tcGFyZVdpdGhdPVwiY29tcGFyZURyb3Bkb3duVmFsdWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdGlvbkNoYW5nZWRGb3JGaWVsZChmaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQudG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJhZGYtc2VsZWN0LWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJtYXJrQXNUb3VjaGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjEwMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImZpZWxkLmhhc011bHRpcGxlVmFsdWVzXCI+XG4gICAgICAgICAgICAgICAgPGFkZi1zZWxlY3QtZmlsdGVyLWlucHV0ICpuZ0lmPVwic2hvd0lucHV0RmlsdGVyXCIgKGNoYW5nZSk9XCJmaWx0ZXIkLm5leHQoJGV2ZW50KVwiPjwvYWRmLXNlbGVjdC1maWx0ZXItaW5wdXQ+XG5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0IG9mIGxpc3QkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRPcHRpb25WYWx1ZShvcHQsIGZpZWxkLnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIm9wdC5pZFwiPnt7b3B0Lm5hbWV9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBpZD1cInJlYWRvbmx5T3B0aW9uXCIgKm5nSWY9XCJpc1JlYWRPbmx5VHlwZSgpXCIgW3ZhbHVlXT1cImZpZWxkLnZhbHVlXCI+e3tmaWVsZC52YWx1ZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIXByZXZpZXdTdGF0ZVwiPlxuICAgICAgICAgICAgPGVycm9yLXdpZGdldCBbZXJyb3JdPVwiZmllbGQudmFsaWRhdGlvblN1bW1hcnlcIj48L2Vycm9yLXdpZGdldD5cbiAgICAgICAgICAgIDxlcnJvci13aWRnZXQgY2xhc3M9XCJhZGYtZHJvcGRvd24tcmVxdWlyZWQtbWVzc2FnZVwiICpuZ0lmPVwic2hvd1JlcXVpcmVkTWVzc2FnZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwie3sgJ0ZPUk0uRklFTEQuUkVRVUlSRUQnIHwgdHJhbnNsYXRlIH19XCI+PC9lcnJvci13aWRnZXQ+XG4gICAgICAgICAgICA8ZXJyb3Itd2lkZ2V0IGNsYXNzPVwiYWRmLWRyb3Bkb3duLWZhaWxlZC1tZXNzYWdlXCIgKm5nSWY9XCJpc1Jlc3RBcGlGYWlsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9XCJ7eyAnRk9STS5GSUVMRC5SRVNUX0FQSV9GQUlMRUQnIHwgdHJhbnNsYXRlOiB7IGhvc3RuYW1lOiByZXN0QXBpSG9zdE5hbWUgfSB9fVwiPjwvZXJyb3Itd2lkZ2V0PlxuICAgICAgICAgICAgPGVycm9yLXdpZGdldCBjbGFzcz1cImFkZi1kcm9wZG93bi1mYWlsZWQtbWVzc2FnZVwiICpuZ0lmPVwidmFyaWFibGVPcHRpb25zRmFpbGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwie3sgJ0ZPUk0uRklFTEQuVkFSSUFCTEVfRFJPUERPV05fT1BUSU9OU19GQUlMRUQnIHwgdHJhbnNsYXRlIH19XCI+PC9lcnJvci13aWRnZXQ+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
371
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tY2xvdWQud2lkZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3Byb2Nlc3Mtc2VydmljZXMtY2xvdWQvc3JjL2xpYi9mb3JtL2NvbXBvbmVudHMvd2lkZ2V0cy9kcm9wZG93bi9kcm9wZG93bi1jbG91ZC53aWRnZXQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy1jbG91ZC9zcmMvbGliL2Zvcm0vY29tcG9uZW50cy93aWRnZXRzL2Ryb3Bkb3duL2Ryb3Bkb3duLWNsb3VkLndpZGdldC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQXFCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsY0FBYyxFQUdkLGNBQWMsRUFDZCxXQUFXLEVBRVgsZUFBZSxFQUNsQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0UsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBR3hELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRztJQUMxQixFQUFFLEVBQUUsT0FBTztJQUNYLElBQUksRUFBRSxlQUFlO0NBQ3hCLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFFbkMsdURBQXVEO0FBbUJ2RCxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsZUFBZTtJQWdCN0QsWUFBbUIsV0FBd0IsRUFBVSxnQkFBa0Ms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QUMsT0FBMEI7UUFDdkMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBdUIsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEYsQ0FBQzs7eUhBcllRLDRCQUE0Qjs2R0FBNUIsNEJBQTRCLCtWQzFEekMsdXpGQTZEQTsyRkRIYSw0QkFBNEI7a0JBakJ4QyxTQUFTOytCQUNJLHVCQUF1QixRQUczQjt3QkFDRixTQUFTLEVBQUUsZUFBZTt3QkFDMUIsUUFBUSxFQUFFLGVBQWU7d0JBQ3pCLFVBQVUsRUFBRSxlQUFlO3dCQUMzQixTQUFTLEVBQUUsZUFBZTt3QkFDMUIsV0FBVyxFQUFFLGVBQWU7d0JBQzVCLFlBQVksRUFBRSxlQUFlO3dCQUM3QixTQUFTLEVBQUUsZUFBZTt3QkFDMUIsV0FBVyxFQUFFLGVBQWU7d0JBQzVCLFVBQVUsRUFBRSxlQUFlO3FCQUM5QixpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNCBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBcHBDb25maWdTZXJ2aWNlLFxuICAgIEZvcm1GaWVsZEV2ZW50LFxuICAgIEZvcm1GaWVsZE1vZGVsLFxuICAgIEZvcm1GaWVsZE9wdGlvbixcbiAgICBGb3JtRmllbGRUeXBlcyxcbiAgICBGb3JtU2VydmljZSxcbiAgICBSdWxlRW50cnksXG4gICAgV2lkZ2V0Q29tcG9uZW50XG59IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBGb3JtQ2xvdWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZm9ybS1jbG91ZC5zZXJ2aWNlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUYXNrVmFyaWFibGVDbG91ZCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy90YXNrLXZhcmlhYmxlLWNsb3VkLm1vZGVsJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1BUSU9OID0ge1xuICAgIGlkOiAnZW1wdHknLFxuICAgIG5hbWU6ICdDaG9vc2Ugb25lLi4uJ1xufTtcbmV4cG9ydCBjb25zdCBISURFX0ZJTFRFUl9MSU1JVCA9IDU7XG5cbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3IgKi9cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdkcm9wZG93bi1jbG91ZC13aWRnZXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kcm9wZG93bi1jbG91ZC53aWRnZXQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZHJvcGRvd24tY2xvdWQud2lkZ2V0LnNjc3MnXSxcbiAgICBob3N0OiB7XG4gICAgICAgICcoY2xpY2spJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKGJsdXIpJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKGNoYW5nZSknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoZm9jdXMpJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKGZvY3VzaW4pJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKGZvY3Vzb3V0KSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhpbnB1dCknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoaW52YWxpZCknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoc2VsZWN0KSc6ICdldmVudCgkZXZlbnQpJ1xuICAgIH0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBEcm9wZG93bkNsb3VkV2lkZ2V0Q29tcG9uZW50IGV4dGVuZHMgV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHR5cGVJZCA9ICdEcm9wZG93bkNsb3VkV2lkZ2V0Q29tcG9uZW50JztcbiAgICBzaG93SW5wdXRGaWx0ZXIgPSBmYWxzZTtcbiAgICBpc1Jlc3RBcGlGYWlsZWQgPSBmYWxzZTtcbiAgICB2YXJpYWJsZU9wdGlvbnNGYWlsZWQgPSBmYWxzZTtcbiAgICBwcmV2aWV3U3RhdGUgPSBmYWxzZTtcbiAgICByZXN0QXBpSG9zdE5hbWU6IHN0cmluZztcbiAgICBsaXN0JDogT2JzZXJ2YWJsZTxGb3JtRmllbGRPcHRpb25bXT47XG4gICAgZmlsdGVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRWYXJpYWJsZU9wdGlvbklkID0gJ2lkJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRWYXJpYWJsZU9wdGlvbkxhYmVsID0gJ25hbWUnO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFZhcmlhYmxlT3B0aW9uUGF0aCA9ICdkYXRhJztcblxuICAgIHByb3RlY3RlZCBvbkRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UsIHByaXZhdGUgZm9ybUNsb3VkU2VydmljZTogRm9ybUNsb3VkU2VydmljZSwgcHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoZm9ybVNlcnZpY2UpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnNldFByZXZpZXdTdGF0ZSgpO1xuICAgICAgICB0aGlzLmNoZWNrRmllbGRPcHRpb25zU291cmNlKCk7XG4gICAgICAgIHRoaXMudXBkYXRlT3B0aW9ucygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tGaWVsZE9wdGlvbnNTb3VyY2UoKTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgICAgY2FzZSB0aGlzLmZpZWxkLnJlc3RVcmwgJiYgIXRoaXMuaXNMaW5rZWRXaWRnZXQoKTpcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNpc3RGaWVsZE9wdGlvbnNGcm9tUmVzdEFwaSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIHRoaXMuaXNMaW5rZWRXaWRnZXQoKTpcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRGaWVsZE9wdGlvbnNGb3JMaW5rZWRXaWRnZXQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSB0aGlzLmlzVmFyaWFibGVPcHRpb25UeXBlKCk6XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzaXN0RmllbGRPcHRpb25zRnJvbVZhcmlhYmxlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHBlcnNpc3RGaWVsZE9wdGlvbnNGcm9tVmFyaWFibGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNQYXRoID0gdGhpcy5maWVsZD8udmFyaWFibGVDb25maWc/Lm9wdGlvbnNQYXRoID8/IHRoaXMuZGVmYXVsdFZhcmlhYmxlT3B0aW9uUGF0aDtcbiAgICAgICAgY29uc3QgdmFyaWFibGVOYW1lID0gdGhpcy5maWVsZD8udmFyaWFibGVDb25maWc/LnZhcmlhYmxlTmFtZTtcbiAgICAgICAgY29uc3QgcHJvY2Vzc1ZhcmlhYmxlcyA9IHRoaXMuZmllbGQ/LmZvcm0/LnByb2Nlc3NWYXJpYWJsZXM7XG4gICAgICAgIGNvbnN0IGZvcm1WYXJpYWJsZXMgPSB0aGlzLmZpZWxkPy5mb3JtPy52YXJpYWJsZXM7XG5cbiAgICAgICAgY29uc3QgZHJvcGRvd25PcHRpb25zID0gdGhpcy5nZXRPcHRpb25zRnJvbVZhcmlhYmxlKHByb2Nlc3NWYXJpYWJsZXMsIGZvcm1WYXJpYWJsZXMsIHZhcmlhYmxlTmFtZSk7XG5cbiAgICAgICAgaWYgKGRyb3Bkb3duT3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgZm9ybVZhcmlhYmxlT3B0aW9uczogRm9ybUZpZWxkT3B0aW9uW10gPSB0aGlzLmdldE9wdGlvbnNGcm9tUGF0aChkcm9wZG93bk9wdGlvbnMsIG9wdGlvbnNQYXRoKTtcbiAgICAgICAgICAgIHRoaXMuZmllbGQub3B0aW9ucyA9IGZvcm1WYXJpYWJsZU9wdGlvbnM7XG4gICAgICAgICAgICB0aGlzLnJlc2V0SW52YWxpZFZhbHVlKCk7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnVwZGF0ZUZvcm0oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoYCR7dmFyaWFibGVOYW1lfSBub3QgZm91bmRgKTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRPcHRpb25zKCk7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlT3B0aW9uc0ZhaWxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9wdGlvbnNGcm9tUGF0aChkYXRhOiBhbnksIHBhdGg6IHN0cmluZyk6IEZvcm1GaWVsZE9wdGlvbltdIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uc0lkID0gdGhpcy5maWVsZD8udmFyaWFibGVDb25maWc/Lm9wdGlvbnNJZCA/PyB0aGlzLmRlZmF1bHRWYXJpYWJsZU9wdGlvbklkO1xuICAgICAgICBjb25zdCBvcHRpb25zTGFiZWwgPSB0aGlzLmZpZWxkPy52YXJpYWJsZUNvbmZpZz8ub3B0aW9uc0xhYmVsID8/IHRoaXMuZGVmYXVsdFZhcmlhYmxlT3B0aW9uTGFiZWw7XG5cbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICAgICAgY29uc3QgY3VycmVudFByb3BlcnR5ID0gcHJvcGVydGllcy5zaGlmdCgpO1xuXG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGN1cnJlbnRQcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoYCR7Y3VycmVudFByb3BlcnR5fSBub3QgZm91bmQgaW4gJHtKU09OLnN0cmluZ2lmeShkYXRhKX1gKTtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVPcHRpb25zRmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5lc3RlZERhdGEgPSBkYXRhW2N1cnJlbnRQcm9wZXJ0eV07XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmVzdGVkRGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbnNGcm9tQXJyYXkobmVzdGVkRGF0YSwgb3B0aW9uc0lkLCBvcHRpb25zTGFiZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uc0Zyb21QYXRoKG5lc3RlZERhdGEsIHByb3BlcnRpZXMuam9pbignLicpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9wdGlvbnNGcm9tQXJyYXkobmVzdGVkRGF0YTogYW55W10sIGlkOiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcpOiBGb3JtRmllbGRPcHRpb25bXSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBuZXN0ZWREYXRhLm1hcCgoaXRlbSkgPT4gdGhpcy5jcmVhdGVPcHRpb24oaXRlbSwgaWQsIGxhYmVsKSk7XG4gICAgICAgIGNvbnN0IGhhc0ludmFsaWRPcHRpb24gPSBvcHRpb25zLnNvbWUoKG9wdGlvbikgPT4gIW9wdGlvbik7XG5cbiAgICAgICAgaWYgKGhhc0ludmFsaWRPcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVPcHRpb25zRmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFyaWFibGVPcHRpb25zRmFpbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlT3B0aW9uKGl0ZW06IGFueSwgaWQ6IHN0cmluZywgbGFiZWw6IHN0cmluZyk6IEZvcm1GaWVsZE9wdGlvbiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbjogRm9ybUZpZWxkT3B0aW9uID0ge1xuICAgICAgICAgICAgaWQ6IGl0ZW1baWRdLFxuICAgICAgICAgICAgbmFtZTogaXRlbVtsYWJlbF1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoIW9wdGlvbi5pZCB8fCAhb3B0aW9uLm5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoYCdpZCcgb3IgJ2xhYmVsJyBpcyBub3QgcHJvcGVybHkgZGVmaW5lZGApO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb247XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcHRpb25zRnJvbVZhcmlhYmxlKFxuICAgICAgICBwcm9jZXNzVmFyaWFibGVzOiBUYXNrVmFyaWFibGVDbG91ZFtdLFxuICAgICAgICBmb3JtVmFyaWFibGVzOiBUYXNrVmFyaWFibGVDbG91ZFtdLFxuICAgICAgICB2YXJpYWJsZU5hbWU6IHN0cmluZ1xuICAgICk6IFRhc2tWYXJpYWJsZUNsb3VkIHtcbiAgICAgICAgY29uc3QgcHJvY2Vzc1ZhcmlhYmxlRHJvcGRvd25PcHRpb25zOiBUYXNrVmFyaWFibGVDbG91ZCA9IHRoaXMuZ2V0VmFyaWFibGVWYWx1ZUJ5TmFtZShwcm9jZXNzVmFyaWFibGVzLCB2YXJpYWJsZU5hbWUpO1xuICAgICAgICBjb25zdCBmb3JtVmFyaWFibGVEcm9wZG93bk9wdGlvbnM6IFRhc2tWYXJpYWJsZUNsb3VkID0gdGhpcy5nZXRWYXJpYWJsZVZhbHVlQnlOYW1lKGZvcm1WYXJpYWJsZXMsIHZhcmlhYmxlTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHByb2Nlc3NWYXJpYWJsZURyb3Bkb3duT3B0aW9ucyA/PyBmb3JtVmFyaWFibGVEcm9wZG93bk9wdGlvbnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYXJpYWJsZVZhbHVlQnlOYW1lKHZhcmlhYmxlczogVGFza1ZhcmlhYmxlQ2xvdWRbXSwgdmFyaWFibGVOYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICByZXR1cm4gdmFyaWFibGVzPy5maW5kKCh2YXJpYWJsZTogVGFza1ZhcmlhYmxlQ2xvdWQpID0+IHZhcmlhYmxlPy5uYW1lID09PSBgdmFyaWFibGVzLiR7dmFyaWFibGVOYW1lfWAgfHwgdmFyaWFibGU/Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSlcbiAgICAgICAgICAgID8udmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1ZhcmlhYmxlT3B0aW9uVHlwZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQ/Lm9wdGlvblR5cGUgPT09ICd2YXJpYWJsZSc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwZXJzaXN0RmllbGRPcHRpb25zRnJvbVJlc3RBcGkoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkUmVzdFR5cGUoKSB8fCB0aGlzLmZpZWxkLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0UmVzdEFwaUVycm9yTWVzc2FnZSgpO1xuICAgICAgICBjb25zdCBib2R5UGFyYW0gPSB0aGlzLmJ1aWxkQm9keVBhcmFtKCk7XG4gICAgICAgIHRoaXMuZm9ybUNsb3VkU2VydmljZVxuICAgICAgICAgICAgLmdldFJlc3RXaWRnZXREYXRhKHRoaXMuZmllbGQuZm9ybS5pZCwgdGhpcy5maWVsZC5pZCwgYm9keVBhcmFtKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChyZXN1bHQ6IEZvcm1GaWVsZE9wdGlvbltdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRSZXN0QXBpRXJyb3JNZXNzYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGQub3B0aW9ucyA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGQudXBkYXRlRm9ybSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0SW52YWxpZFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRSZXN0QXBpT3B0aW9ucygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkQm9keVBhcmFtKCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGJvZHlQYXJhbSA9IE9iamVjdC5hc3NpZ24oe30pO1xuICAgICAgICBpZiAodGhpcy5pc0xpbmtlZFdpZGdldCgpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRXaWRnZXRWYWx1ZSA9IHRoaXMuZ2V0UGFyZW50V2lkZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFdpZGdldElkID0gdGhpcy5nZXRMaW5rZWRXaWRnZXRJZCgpO1xuICAgICAgICAgICAgYm9keVBhcmFtW3BhcmVudFdpZGdldElkXSA9IHBhcmVudFdpZGdldFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBib2R5UGFyYW07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkRmllbGRPcHRpb25zRm9yTGlua2VkV2lkZ2V0KCkge1xuICAgICAgICBjb25zdCBwYXJlbnRXaWRnZXRWYWx1ZSA9IHRoaXMuZ2V0UGFyZW50V2lkZ2V0VmFsdWUoKTtcbiAgICAgICAgdGhpcy5wYXJlbnRWYWx1ZUNoYW5nZWQocGFyZW50V2lkZ2V0VmFsdWUpO1xuXG4gICAgICAgIHRoaXMuZm9ybVNlcnZpY2UuZm9ybUZpZWxkVmFsdWVDaGFuZ2VkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGV2ZW50OiBGb3JtRmllbGRFdmVudCkgPT4gdGhpcy5pc0Zvcm1GaWVsZEV2ZW50T2ZUeXBlRHJvcGRvd24oZXZlbnQpICYmIHRoaXMuaXNQYXJlbnRGb3JtRmllbGRFdmVudChldmVudCkpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogRm9ybUZpZWxkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZU9mUGFyZW50V2lkZ2V0ID0gZXZlbnQuZmllbGQudmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRWYWx1ZUNoYW5nZWQodmFsdWVPZlBhcmVudFdpZGdldCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBhcmVudFdpZGdldFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHBhcmVudFdpZGdldElkID0gdGhpcy5nZXRMaW5rZWRXaWRnZXRJZCgpO1xuICAgICAgICBjb25zdCBwYXJlbnRXaWRnZXQgPSB0aGlzLmdldEZvcm1GaWVsZEJ5SWQocGFyZW50V2lkZ2V0SWQpO1xuICAgICAgICByZXR1cm4gcGFyZW50V2lkZ2V0Py52YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcmVudFZhbHVlQ2hhbmdlZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiAhdGhpcy5pc05vbmVWYWx1ZVNlbGVjdGVkKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkUmVzdFR5cGUoKSA/IHRoaXMucGVyc2lzdEZpZWxkT3B0aW9uc0Zyb21SZXN0QXBpKCkgOiB0aGlzLnBlcnNpc3RGaWVsZE9wdGlvbnNGcm9tTWFudWFsTGlzdCh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc05vbmVWYWx1ZVNlbGVjdGVkKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFJlc3RBcGlFcnJvck1lc3NhZ2UoKTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRPcHRpb25zKCk7XG4gICAgICAgICAgICB0aGlzLnJlc2V0SW52YWxpZFZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLm9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRJbnZhbGlkVmFsdWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNOb25lVmFsdWVTZWxlY3RlZCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9ybUZpZWxkQnlJZChmaWVsZElkKTogRm9ybUZpZWxkTW9kZWwge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZC5mb3JtLmdldEZvcm1GaWVsZHMoKS5maWx0ZXIoKGZpZWxkOiBGb3JtRmllbGRNb2RlbCkgPT4gZmllbGQuaWQgPT09IGZpZWxkSWQpWzBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGVyc2lzdEZpZWxkT3B0aW9uc0Zyb21NYW51YWxMaXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzUnVsZUVudHJpZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgcnVsZXNFbnRyaWVzID0gdGhpcy5maWVsZC5ydWxlLmVudHJpZXM7XG4gICAgICAgICAgICBydWxlc0VudHJpZXMuZm9yRWFjaCgocnVsZUVudHJ5OiBSdWxlRW50cnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocnVsZUVudHJ5LmtleSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWVsZC5vcHRpb25zID0gcnVsZUVudHJ5Lm9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRJbnZhbGlkVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWVsZC51cGRhdGVGb3JtKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0SW52YWxpZFZhbHVlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZFZhbHVlKCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldFZhbHVlKCkge1xuICAgICAgICB0aGlzLmZpZWxkLnZhbHVlID0gJyc7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZEZvckZpZWxkKHRoaXMuZmllbGQpO1xuICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5maWVsZC51cGRhdGVGb3JtKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1ZhbGlkVmFsdWUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkVmFsdWUgJiYgdGhpcy5pc1NlbGVjdGVkVmFsdWVJbk9wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU2VsZWN0ZWRWYWx1ZUluT3B0aW9ucygpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5maWVsZFZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uSWRMaXN0ID0gWy4uLnRoaXMuZmllbGQub3B0aW9uc10ubWFwKChvcHRpb24pID0+IG9wdGlvbi5pZCk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlSWRzID0gdGhpcy5maWVsZFZhbHVlLm1hcCgodmFsdWVPcHRpb24pID0+IHZhbHVlT3B0aW9uLmlkKTtcbiAgICAgICAgICAgIHJldHVybiBmaWVsZFZhbHVlSWRzLmV2ZXJ5KCh2YWx1ZU9wdGlvbklkKSA9PiBvcHRpb25JZExpc3QuaW5jbHVkZXModmFsdWVPcHRpb25JZCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi50aGlzLmZpZWxkLm9wdGlvbnNdLm1hcCgob3B0aW9uKSA9PiBvcHRpb24uaWQpLmluY2x1ZGVzKHRoaXMuZmllbGRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZmllbGRWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZC52YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1J1bGVFbnRyaWVzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmZpZWxkLnJ1bGUuZW50cmllcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldE9wdGlvbnMoKSB7XG4gICAgICAgIHRoaXMuZmllbGQub3B0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBzZWxlY3Rpb25DaGFuZ2VkRm9yRmllbGQoZmllbGQ6IEZvcm1GaWVsZE1vZGVsKSB7XG4gICAgICAgIGNvbnN0IGZvcm1GaWVsZFZhbHVlQ2hhbmdlZEV2ZW50ID0gbmV3IEZvcm1GaWVsZEV2ZW50KGZpZWxkLmZvcm0sIGZpZWxkKTtcbiAgICAgICAgdGhpcy5mb3JtU2VydmljZS5mb3JtRmllbGRWYWx1ZUNoYW5nZWQubmV4dChmb3JtRmllbGRWYWx1ZUNoYW5nZWRFdmVudCk7XG4gICAgICAgIHRoaXMub25GaWVsZENoYW5nZWQoZmllbGQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNQYXJlbnRGb3JtRmllbGRFdmVudChldmVudDogRm9ybUZpZWxkRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LmZpZWxkLmlkID09PSB0aGlzLmdldExpbmtlZFdpZGdldElkKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0Zvcm1GaWVsZEV2ZW50T2ZUeXBlRHJvcGRvd24oZXZlbnQ6IEZvcm1GaWVsZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBldmVudC5maWVsZC50eXBlID09PSBGb3JtRmllbGRUeXBlcy5EUk9QRE9XTjtcbiAgICB9XG5cbiAgICBpc0xpbmtlZFdpZGdldCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5nZXRMaW5rZWRXaWRnZXRJZCgpO1xuICAgIH1cblxuICAgIGdldExpbmtlZFdpZGdldElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkPy5ydWxlPy5ydWxlT247XG4gICAgfVxuXG4gICAgY29tcGFyZURyb3Bkb3duVmFsdWVzKG9wdDE6IEZvcm1GaWVsZE9wdGlvbiB8IHN0cmluZywgb3B0MjogRm9ybUZpZWxkT3B0aW9uIHwgc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghb3B0MSB8fCAhb3B0Mikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHQxID09PSAnc3RyaW5nJyAmJiB0eXBlb2Ygb3B0MiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHQxID09PSBvcHQyLmlkIHx8IG9wdDEgPT09IG9wdDIubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0MSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9wdDIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0MS5pZCA9PT0gb3B0MiB8fCBvcHQxLm5hbWUgPT09IG9wdDI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIG9wdDEgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcHQyID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIG9wdDEuaWQgPT09IG9wdDIuaWQgfHwgb3B0MS5uYW1lID09PSBvcHQyLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3B0MSA9PT0gb3B0MjtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25WYWx1ZShvcHRpb246IEZvcm1GaWVsZE9wdGlvbiwgZmllbGRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgRm9ybUZpZWxkT3B0aW9uIHtcbiAgICAgICAgaWYgKHRoaXMuZmllbGQuaGFzTXVsdGlwbGVWYWx1ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb3B0aW9uVmFsdWU6IHN0cmluZyA9ICcnO1xuICAgICAgICBpZiAob3B0aW9uLmlkID09PSBERUZBVUxUX09QVElPTi5pZCkge1xuICAgICAgICAgICAgb3B0aW9uVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLm5hbWUgIT09IGZpZWxkVmFsdWUpIHtcbiAgICAgICAgICAgIG9wdGlvblZhbHVlID0gb3B0aW9uLmlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9uVmFsdWUgPSBvcHRpb24ubmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW9uVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1ZhbGlkUmVzdFR5cGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkLm9wdGlvblR5cGUgPT09ICdyZXN0JyAmJiAhIXRoaXMuZmllbGQucmVzdFVybDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFByZXZpZXdTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcmV2aWV3U3RhdGUgPSB0aGlzLmZvcm1DbG91ZFNlcnZpY2UuZ2V0UHJldmlld1N0YXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnJvcjogYW55KSB7XG4gICAgICAgIGlmICghdGhpcy5wcmV2aWV3U3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0RXJyb3IuZW1pdChlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc1JlYWRPbmx5VHlwZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQudHlwZSA9PT0gJ3JlYWRvbmx5JztcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMub25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHVwZGF0ZU9wdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd0lucHV0RmlsdGVyID0gdGhpcy5maWVsZC5vcHRpb25zLmxlbmd0aCA+IHRoaXMuYXBwQ29uZmlnLmdldDxudW1iZXI+KCdmb3JtLmRyb3BEb3duRmlsdGVyTGltaXQnLCBISURFX0ZJTFRFUl9MSU1JVCk7XG4gICAgICAgIHRoaXMubGlzdCQgPSBjb21iaW5lTGF0ZXN0KFtvZih0aGlzLmZpZWxkLm9wdGlvbnMpLCB0aGlzLmZpbHRlciRdKS5waXBlKFxuICAgICAgICAgICAgbWFwKChbaXRlbXMsIHNlYXJjaF0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXNlYXJjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtcy5maWx0ZXIoKHsgbmFtZSB9KSA9PiBuYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXNldFJlc3RBcGlFcnJvck1lc3NhZ2UoKSB7XG4gICAgICAgIHRoaXMuaXNSZXN0QXBpRmFpbGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVzdEFwaUhvc3ROYW1lID0gJyc7XG4gICAgfVxuXG4gICAgcmVzZXRSZXN0QXBpT3B0aW9ucygpIHtcbiAgICAgICAgdGhpcy5maWVsZC5vcHRpb25zID0gW107XG4gICAgICAgIHRoaXMucmVzZXRWYWx1ZSgpO1xuICAgICAgICB0aGlzLmlzUmVzdEFwaUZhaWxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucmVzdEFwaUhvc3ROYW1lID0gdGhpcy5nZXRSZXN0VXJsSG9zdE5hbWUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlc3RVcmxIb3N0TmFtZSgpOiBzdHJpbmcge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVUkwodGhpcy5maWVsZD8ucmVzdFVybCkuaG9zdG5hbWU7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQ/LnJlc3RVcmw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaG93UmVxdWlyZWRNZXNzYWdlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHRoaXMuaXNJbnZhbGlkRmllbGRSZXF1aXJlZCgpIHx8ICh0aGlzLmlzTm9uZVZhbHVlU2VsZWN0ZWQodGhpcy5maWVsZC52YWx1ZSkgJiYgdGhpcy5pc1JlcXVpcmVkKCkpKSAmJlxuICAgICAgICAgICAgdGhpcy5pc1RvdWNoZWQoKSAmJlxuICAgICAgICAgICAgIXRoaXMuaXNSZXN0QXBpRmFpbGVkICYmXG4gICAgICAgICAgICAhdGhpcy52YXJpYWJsZU9wdGlvbnNGYWlsZWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0T3B0aW9uKG9wdGlvbnM6IEZvcm1GaWVsZE9wdGlvbltdKTogRm9ybUZpZWxkT3B0aW9uIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZmluZCgob3B0aW9uOiBGb3JtRmllbGRPcHRpb24pID0+IG9wdGlvbi5pZCA9PT0gREVGQVVMVF9PUFRJT04uaWQpO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cImFkZi1kcm9wZG93bi13aWRnZXQge3tmaWVsZC5jbGFzc05hbWV9fVwiXG4gICAgW2NsYXNzLmFkZi1pbnZhbGlkXT1cIighZmllbGQuaXNWYWxpZCAmJiBpc1RvdWNoZWQoKSkgfHwgaXNSZXN0QXBpRmFpbGVkXCJcbiAgICBbY2xhc3MuYWRmLXJlYWRvbmx5XT1cImZpZWxkLnJlYWRPbmx5XCJcbiAgICBbY2xhc3MuYWRmLWxlZnQtbGFiZWwtaW5wdXQtY29udGFpbmVyXT1cImZpZWxkLmxlZnRMYWJlbHNcIlxuPlxuICAgIDxkaXYgY2xhc3M9XCJhZGYtZHJvcGRvd24td2lkZ2V0LXRvcC1sYWJlbHNcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYWRmLWxhYmVsXCIgW2F0dHIuZm9yXT1cImZpZWxkLmlkXCIgW2NsYXNzLmFkZi1sZWZ0LWxhYmVsXT1cImZpZWxkLmxlZnRMYWJlbHNcIlxuICAgICAgICAgICAgPnt7ZmllbGQubmFtZSB8IHRyYW5zbGF0ZSB9fTxzcGFuIGNsYXNzPVwiYWRmLWFzdGVyaXNrXCIgKm5nSWY9XCJpc1JlcXVpcmVkKClcIj4qPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJnZXREZWZhdWx0T3B0aW9uKGxpc3QkIHwgYXN5bmMpIGFzIGRlZmF1bHRPcHRpb25cIj5cbiAgICAgICAgICAgICAgICB7eyBkZWZhdWx0T3B0aW9uLm5hbWUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1zZWxlY3RcIlxuICAgICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5pZFwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWVsZC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkLnJlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICBbY29tcGFyZVdpdGhdPVwiY29tcGFyZURyb3Bkb3duVmFsdWVzXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3Rpb25DaGFuZ2VkRm9yRmllbGQoZmllbGQpXCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC50b29sdGlwXCJcbiAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZCgpXCJcbiAgICAgICAgICAgICAgICBwYW5lbENsYXNzPVwiYWRmLXNlbGVjdC1maWx0ZXJcIlxuICAgICAgICAgICAgICAgIChibHVyKT1cIm1hcmtBc1RvdWNoZWQoKVwiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCIxMDAwXCJcbiAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiZmllbGQuaGFzTXVsdGlwbGVWYWx1ZXNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxhZGYtc2VsZWN0LWZpbHRlci1pbnB1dCAqbmdJZj1cInNob3dJbnB1dEZpbHRlclwiIChjaGFuZ2UpPVwiZmlsdGVyJC5uZXh0KCRldmVudClcIj48L2FkZi1zZWxlY3QtZmlsdGVyLWlucHV0PlxuXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdCBvZiBsaXN0JCB8IGFzeW5jXCIgW3ZhbHVlXT1cImdldE9wdGlvblZhbHVlKG9wdCwgZmllbGQudmFsdWUpXCIgW2lkXT1cIm9wdC5pZFwiPlxuICAgICAgICAgICAgICAgICAgICB7e29wdC5uYW1lfX1cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gaWQ9XCJyZWFkb25seU9wdGlvblwiICpuZ0lmPVwiaXNSZWFkT25seVR5cGUoKVwiIFt2YWx1ZV09XCJmaWVsZC52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICB7e2ZpZWxkLnZhbHVlfX1cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhcHJldmlld1N0YXRlICYmICFmaWVsZC5yZWFkT25seVwiPlxuICAgICAgICAgICAgPGVycm9yLXdpZGdldCBbZXJyb3JdPVwiZmllbGQudmFsaWRhdGlvblN1bW1hcnlcIj48L2Vycm9yLXdpZGdldD5cbiAgICAgICAgICAgIDxlcnJvci13aWRnZXRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1kcm9wZG93bi1yZXF1aXJlZC1tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dSZXF1aXJlZE1lc3NhZ2UoKVwiXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ9XCJ7eyAnRk9STS5GSUVMRC5SRVFVSVJFRCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgPjwvZXJyb3Itd2lkZ2V0PlxuICAgICAgICAgICAgPGVycm9yLXdpZGdldFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRyb3Bkb3duLWZhaWxlZC1tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImlzUmVzdEFwaUZhaWxlZFwiXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ9XCJ7eyAnRk9STS5GSUVMRC5SRVNUX0FQSV9GQUlMRUQnIHwgdHJhbnNsYXRlOiB7IGhvc3RuYW1lOiByZXN0QXBpSG9zdE5hbWUgfSB9fVwiXG4gICAgICAgICAgICA+PC9lcnJvci13aWRnZXQ+XG4gICAgICAgICAgICA8ZXJyb3Itd2lkZ2V0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZHJvcGRvd24tZmFpbGVkLW1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwidmFyaWFibGVPcHRpb25zRmFpbGVkXCJcbiAgICAgICAgICAgICAgICByZXF1aXJlZD1cInt7ICdGT1JNLkZJRUxELlZBUklBQkxFX0RST1BET1dOX09QVElPTlNfRkFJTEVEJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICA+PC9lcnJvci13aWRnZXQ+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -7464,23 +7464,24 @@ class DropdownCloudWidgetComponent extends WidgetComponent {
7464
7464
  return ((_a = this.field) === null || _a === void 0 ? void 0 : _a.optionType) === 'variable';
7465
7465
  }
7466
7466
  persistFieldOptionsFromRestApi() {
7467
- if (this.isValidRestType()) {
7468
- this.resetRestApiErrorMessage();
7469
- const bodyParam = this.buildBodyParam();
7470
- this.formCloudService
7471
- .getRestWidgetData(this.field.form.id, this.field.id, bodyParam)
7472
- .pipe(takeUntil(this.onDestroy$))
7473
- .subscribe((result) => {
7474
- this.resetRestApiErrorMessage();
7475
- this.field.options = result;
7476
- this.updateOptions();
7477
- this.field.updateForm();
7478
- this.resetInvalidValue();
7479
- }, (err) => {
7480
- this.resetRestApiOptions();
7481
- this.handleError(err);
7482
- });
7467
+ if (!this.isValidRestType() || this.field.readOnly) {
7468
+ return;
7483
7469
  }
7470
+ this.resetRestApiErrorMessage();
7471
+ const bodyParam = this.buildBodyParam();
7472
+ this.formCloudService
7473
+ .getRestWidgetData(this.field.form.id, this.field.id, bodyParam)
7474
+ .pipe(takeUntil(this.onDestroy$))
7475
+ .subscribe((result) => {
7476
+ this.resetRestApiErrorMessage();
7477
+ this.field.options = result;
7478
+ this.updateOptions();
7479
+ this.field.updateForm();
7480
+ this.resetInvalidValue();
7481
+ }, (err) => {
7482
+ this.resetRestApiOptions();
7483
+ this.handleError(err);
7484
+ });
7484
7485
  }
7485
7486
  buildBodyParam() {
7486
7487
  const bodyParam = Object.assign({});
@@ -7678,7 +7679,7 @@ class DropdownCloudWidgetComponent extends WidgetComponent {
7678
7679
  }
7679
7680
  }
7680
7681
  DropdownCloudWidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: DropdownCloudWidgetComponent, deps: [{ token: i1$1.FormService }, { token: FormCloudService }, { token: i1$1.AppConfigService }], target: i0.ɵɵFactoryTarget.Component });
7681
- DropdownCloudWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: DropdownCloudWidgetComponent, selector: "dropdown-cloud-widget", host: { listeners: { "click": "event($event)", "blur": "event($event)", "change": "event($event)", "focus": "event($event)", "focusin": "event($event)", "focusout": "event($event)", "input": "event($event)", "invalid": "event($event)", "select": "event($event)" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"adf-dropdown-widget {{field.className}}\"\n [class.adf-invalid]=\"(!field.isValid && isTouched()) || isRestApiFailed\" [class.adf-readonly]=\"field.readOnly\" [class.adf-left-label-input-container]=\"field.leftLabels\">\n <div class=\"adf-dropdown-widget-top-labels\">\n <label class=\"adf-label\" [attr.for]=\"field.id\" [class.adf-left-label]=\"field.leftLabels\">{{field.name | translate }}<span class=\"adf-asterisk\"\n *ngIf=\"isRequired()\">*</span>\n </label>\n </div>\n <div>\n <mat-form-field>\n <mat-label *ngIf=\"getDefaultOption(list$ | async) as defaultOption\">\n {{ defaultOption.name }}\n </mat-label>\n <mat-select class=\"adf-select\"\n [id]=\"field.id\"\n [(ngModel)]=\"field.value\"\n [disabled]=\"field.readOnly\"\n [compareWith]=\"compareDropdownValues\"\n (ngModelChange)=\"selectionChangedForField(field)\"\n [matTooltip]=\"field.tooltip\"\n [required]=\"isRequired()\"\n panelClass=\"adf-select-filter\"\n (blur)=\"markAsTouched()\"\n matTooltipPosition=\"above\"\n matTooltipShowDelay=\"1000\"\n [multiple]=\"field.hasMultipleValues\">\n <adf-select-filter-input *ngIf=\"showInputFilter\" (change)=\"filter$.next($event)\"></adf-select-filter-input>\n\n <mat-option *ngFor=\"let opt of list$ | async\"\n [value]=\"getOptionValue(opt, field.value)\"\n [id]=\"opt.id\">{{opt.name}}\n </mat-option>\n <mat-option id=\"readonlyOption\" *ngIf=\"isReadOnlyType()\" [value]=\"field.value\">{{field.value}}</mat-option>\n </mat-select>\n </mat-form-field>\n <div *ngIf=\"!previewState\">\n <error-widget [error]=\"field.validationSummary\"></error-widget>\n <error-widget class=\"adf-dropdown-required-message\" *ngIf=\"showRequiredMessage()\"\n required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\"></error-widget>\n <error-widget class=\"adf-dropdown-failed-message\" *ngIf=\"isRestApiFailed\"\n required=\"{{ 'FORM.FIELD.REST_API_FAILED' | translate: { hostname: restApiHostName } }}\"></error-widget>\n <error-widget class=\"adf-dropdown-failed-message\" *ngIf=\"variableOptionsFailed\"\n required=\"{{ 'FORM.FIELD.VARIABLE_DROPDOWN_OPTIONS_FAILED' | translate }}\"></error-widget>\n </div>\n </div>\n</div>\n", styles: [".adf-dropdown-widget{width:100%;margin-top:13px}.adf-dropdown-widget .adf-select{padding-top:0;width:100%}.adf-dropdown-widget .adf-select-filter{font-size:var(--theme-body-1-font-size)}.adf-dropdown-widget-select{width:100%}.adf-dropdown-widget-dropdown-required-message .adf-error-container,.adf-dropdown-widget-dropdown-failed-message .adf-error-container{margin-top:1px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i5$2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5$2.MatLabel, selector: "mat-label" }, { kind: "component", type: i6$1.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "directive", type: i8$1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1$1.SelectFilterInputComponent, selector: "adf-select-filter-input", outputs: ["change"] }, { kind: "component", type: i1$1.ErrorWidgetComponent, selector: "error-widget", inputs: ["error", "required"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
7682
+ DropdownCloudWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: DropdownCloudWidgetComponent, selector: "dropdown-cloud-widget", host: { listeners: { "click": "event($event)", "blur": "event($event)", "change": "event($event)", "focus": "event($event)", "focusin": "event($event)", "focusout": "event($event)", "input": "event($event)", "invalid": "event($event)", "select": "event($event)" } }, usesInheritance: true, ngImport: i0, template: "<div\n class=\"adf-dropdown-widget {{field.className}}\"\n [class.adf-invalid]=\"(!field.isValid && isTouched()) || isRestApiFailed\"\n [class.adf-readonly]=\"field.readOnly\"\n [class.adf-left-label-input-container]=\"field.leftLabels\"\n>\n <div class=\"adf-dropdown-widget-top-labels\">\n <label class=\"adf-label\" [attr.for]=\"field.id\" [class.adf-left-label]=\"field.leftLabels\"\n >{{field.name | translate }}<span class=\"adf-asterisk\" *ngIf=\"isRequired()\">*</span>\n </label>\n </div>\n <div>\n <mat-form-field>\n <mat-label *ngIf=\"getDefaultOption(list$ | async) as defaultOption\">\n {{ defaultOption.name }}\n </mat-label>\n <mat-select\n class=\"adf-select\"\n [id]=\"field.id\"\n [(ngModel)]=\"field.value\"\n [disabled]=\"field.readOnly\"\n [compareWith]=\"compareDropdownValues\"\n (ngModelChange)=\"selectionChangedForField(field)\"\n [matTooltip]=\"field.tooltip\"\n [required]=\"isRequired()\"\n panelClass=\"adf-select-filter\"\n (blur)=\"markAsTouched()\"\n matTooltipPosition=\"above\"\n matTooltipShowDelay=\"1000\"\n [multiple]=\"field.hasMultipleValues\"\n >\n <adf-select-filter-input *ngIf=\"showInputFilter\" (change)=\"filter$.next($event)\"></adf-select-filter-input>\n\n <mat-option *ngFor=\"let opt of list$ | async\" [value]=\"getOptionValue(opt, field.value)\" [id]=\"opt.id\">\n {{opt.name}}\n </mat-option>\n <mat-option id=\"readonlyOption\" *ngIf=\"isReadOnlyType()\" [value]=\"field.value\">\n {{field.value}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div *ngIf=\"!previewState && !field.readOnly\">\n <error-widget [error]=\"field.validationSummary\"></error-widget>\n <error-widget\n class=\"adf-dropdown-required-message\"\n *ngIf=\"showRequiredMessage()\"\n required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\"\n ></error-widget>\n <error-widget\n class=\"adf-dropdown-failed-message\"\n *ngIf=\"isRestApiFailed\"\n required=\"{{ 'FORM.FIELD.REST_API_FAILED' | translate: { hostname: restApiHostName } }}\"\n ></error-widget>\n <error-widget\n class=\"adf-dropdown-failed-message\"\n *ngIf=\"variableOptionsFailed\"\n required=\"{{ 'FORM.FIELD.VARIABLE_DROPDOWN_OPTIONS_FAILED' | translate }}\"\n ></error-widget>\n </div>\n </div>\n</div>\n", styles: [".adf-dropdown-widget{width:100%;margin-top:13px}.adf-dropdown-widget .adf-select{padding-top:0;width:100%}.adf-dropdown-widget .adf-select-filter{font-size:var(--theme-body-1-font-size)}.adf-dropdown-widget-select{width:100%}.adf-dropdown-widget-dropdown-required-message .adf-error-container,.adf-dropdown-widget-dropdown-failed-message .adf-error-container{margin-top:1px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i5$2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5$2.MatLabel, selector: "mat-label" }, { kind: "component", type: i6$1.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "directive", type: i8$1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1$1.SelectFilterInputComponent, selector: "adf-select-filter-input", outputs: ["change"] }, { kind: "component", type: i1$1.ErrorWidgetComponent, selector: "error-widget", inputs: ["error", "required"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
7682
7683
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: DropdownCloudWidgetComponent, decorators: [{
7683
7684
  type: Component,
7684
7685
  args: [{ selector: 'dropdown-cloud-widget', host: {
@@ -7691,7 +7692,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
7691
7692
  '(input)': 'event($event)',
7692
7693
  '(invalid)': 'event($event)',
7693
7694
  '(select)': 'event($event)'
7694
- }, encapsulation: ViewEncapsulation.None, template: "<div class=\"adf-dropdown-widget {{field.className}}\"\n [class.adf-invalid]=\"(!field.isValid && isTouched()) || isRestApiFailed\" [class.adf-readonly]=\"field.readOnly\" [class.adf-left-label-input-container]=\"field.leftLabels\">\n <div class=\"adf-dropdown-widget-top-labels\">\n <label class=\"adf-label\" [attr.for]=\"field.id\" [class.adf-left-label]=\"field.leftLabels\">{{field.name | translate }}<span class=\"adf-asterisk\"\n *ngIf=\"isRequired()\">*</span>\n </label>\n </div>\n <div>\n <mat-form-field>\n <mat-label *ngIf=\"getDefaultOption(list$ | async) as defaultOption\">\n {{ defaultOption.name }}\n </mat-label>\n <mat-select class=\"adf-select\"\n [id]=\"field.id\"\n [(ngModel)]=\"field.value\"\n [disabled]=\"field.readOnly\"\n [compareWith]=\"compareDropdownValues\"\n (ngModelChange)=\"selectionChangedForField(field)\"\n [matTooltip]=\"field.tooltip\"\n [required]=\"isRequired()\"\n panelClass=\"adf-select-filter\"\n (blur)=\"markAsTouched()\"\n matTooltipPosition=\"above\"\n matTooltipShowDelay=\"1000\"\n [multiple]=\"field.hasMultipleValues\">\n <adf-select-filter-input *ngIf=\"showInputFilter\" (change)=\"filter$.next($event)\"></adf-select-filter-input>\n\n <mat-option *ngFor=\"let opt of list$ | async\"\n [value]=\"getOptionValue(opt, field.value)\"\n [id]=\"opt.id\">{{opt.name}}\n </mat-option>\n <mat-option id=\"readonlyOption\" *ngIf=\"isReadOnlyType()\" [value]=\"field.value\">{{field.value}}</mat-option>\n </mat-select>\n </mat-form-field>\n <div *ngIf=\"!previewState\">\n <error-widget [error]=\"field.validationSummary\"></error-widget>\n <error-widget class=\"adf-dropdown-required-message\" *ngIf=\"showRequiredMessage()\"\n required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\"></error-widget>\n <error-widget class=\"adf-dropdown-failed-message\" *ngIf=\"isRestApiFailed\"\n required=\"{{ 'FORM.FIELD.REST_API_FAILED' | translate: { hostname: restApiHostName } }}\"></error-widget>\n <error-widget class=\"adf-dropdown-failed-message\" *ngIf=\"variableOptionsFailed\"\n required=\"{{ 'FORM.FIELD.VARIABLE_DROPDOWN_OPTIONS_FAILED' | translate }}\"></error-widget>\n </div>\n </div>\n</div>\n", styles: [".adf-dropdown-widget{width:100%;margin-top:13px}.adf-dropdown-widget .adf-select{padding-top:0;width:100%}.adf-dropdown-widget .adf-select-filter{font-size:var(--theme-body-1-font-size)}.adf-dropdown-widget-select{width:100%}.adf-dropdown-widget-dropdown-required-message .adf-error-container,.adf-dropdown-widget-dropdown-failed-message .adf-error-container{margin-top:1px}\n"] }]
7695
+ }, encapsulation: ViewEncapsulation.None, template: "<div\n class=\"adf-dropdown-widget {{field.className}}\"\n [class.adf-invalid]=\"(!field.isValid && isTouched()) || isRestApiFailed\"\n [class.adf-readonly]=\"field.readOnly\"\n [class.adf-left-label-input-container]=\"field.leftLabels\"\n>\n <div class=\"adf-dropdown-widget-top-labels\">\n <label class=\"adf-label\" [attr.for]=\"field.id\" [class.adf-left-label]=\"field.leftLabels\"\n >{{field.name | translate }}<span class=\"adf-asterisk\" *ngIf=\"isRequired()\">*</span>\n </label>\n </div>\n <div>\n <mat-form-field>\n <mat-label *ngIf=\"getDefaultOption(list$ | async) as defaultOption\">\n {{ defaultOption.name }}\n </mat-label>\n <mat-select\n class=\"adf-select\"\n [id]=\"field.id\"\n [(ngModel)]=\"field.value\"\n [disabled]=\"field.readOnly\"\n [compareWith]=\"compareDropdownValues\"\n (ngModelChange)=\"selectionChangedForField(field)\"\n [matTooltip]=\"field.tooltip\"\n [required]=\"isRequired()\"\n panelClass=\"adf-select-filter\"\n (blur)=\"markAsTouched()\"\n matTooltipPosition=\"above\"\n matTooltipShowDelay=\"1000\"\n [multiple]=\"field.hasMultipleValues\"\n >\n <adf-select-filter-input *ngIf=\"showInputFilter\" (change)=\"filter$.next($event)\"></adf-select-filter-input>\n\n <mat-option *ngFor=\"let opt of list$ | async\" [value]=\"getOptionValue(opt, field.value)\" [id]=\"opt.id\">\n {{opt.name}}\n </mat-option>\n <mat-option id=\"readonlyOption\" *ngIf=\"isReadOnlyType()\" [value]=\"field.value\">\n {{field.value}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div *ngIf=\"!previewState && !field.readOnly\">\n <error-widget [error]=\"field.validationSummary\"></error-widget>\n <error-widget\n class=\"adf-dropdown-required-message\"\n *ngIf=\"showRequiredMessage()\"\n required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\"\n ></error-widget>\n <error-widget\n class=\"adf-dropdown-failed-message\"\n *ngIf=\"isRestApiFailed\"\n required=\"{{ 'FORM.FIELD.REST_API_FAILED' | translate: { hostname: restApiHostName } }}\"\n ></error-widget>\n <error-widget\n class=\"adf-dropdown-failed-message\"\n *ngIf=\"variableOptionsFailed\"\n required=\"{{ 'FORM.FIELD.VARIABLE_DROPDOWN_OPTIONS_FAILED' | translate }}\"\n ></error-widget>\n </div>\n </div>\n</div>\n", styles: [".adf-dropdown-widget{width:100%;margin-top:13px}.adf-dropdown-widget .adf-select{padding-top:0;width:100%}.adf-dropdown-widget .adf-select-filter{font-size:var(--theme-body-1-font-size)}.adf-dropdown-widget-select{width:100%}.adf-dropdown-widget-dropdown-required-message .adf-error-container,.adf-dropdown-widget-dropdown-failed-message .adf-error-container{margin-top:1px}\n"] }]
7695
7696
  }], ctorParameters: function () { return [{ type: i1$1.FormService }, { type: FormCloudService }, { type: i1$1.AppConfigService }]; } });
7696
7697
 
7697
7698
  /*!