ngx-sumax-erp-components 1.0.50 → 1.1.1

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.
@@ -223,6 +223,24 @@ export class DatePickerComponent {
223
223
  onKeyUpEnter() {
224
224
  this.enterKeyUp();
225
225
  }
226
+ handlePaste(event) {
227
+ if (!this.restrictInputLength)
228
+ return;
229
+ event.preventDefault();
230
+ if (!this.isApplicableToHandlePaste(event))
231
+ return;
232
+ const pastedText = event.clipboardData?.getData('text') || '';
233
+ if (!pastedText)
234
+ return;
235
+ this.formatDate(pastedText);
236
+ }
237
+ isApplicableToHandlePaste(event) {
238
+ const input = event.target;
239
+ if (this._hasTextSelection(input)) {
240
+ return this._isFullySelected(input);
241
+ }
242
+ return true;
243
+ }
226
244
  handleKeyPress(event) {
227
245
  if (this.restrictInputLength) {
228
246
  this._handleRestrictInputLength(event);
@@ -254,6 +272,11 @@ export class DatePickerComponent {
254
272
  _hasTextSelection(input) {
255
273
  return input.selectionStart !== input.selectionEnd;
256
274
  }
275
+ _isFullySelected(input) {
276
+ return input.selectionStart === 0 &&
277
+ input.selectionEnd === input.value.length &&
278
+ input.value.length > 0;
279
+ }
257
280
  _isInputLengthExceeded(currentValue) {
258
281
  const hasSlashes = /\//.test(currentValue);
259
282
  // DD/MM/YYYY (máximo 10 caracteres) o 12032025 (máximo 8 dígitos)
@@ -335,7 +358,10 @@ export class DatePickerComponent {
335
358
  }
336
359
  }
337
360
  focusOut(value) {
338
- if (value && value.trim() !== '') {
361
+ this.formatDate(value);
362
+ }
363
+ formatDate(value) {
364
+ if (value && value?.trim() !== '') {
339
365
  if (this._tempValue === value)
340
366
  return;
341
367
  this.ngbDatepicker.close();
@@ -381,7 +407,7 @@ export class DatePickerComponent {
381
407
  I18n,
382
408
  { provide: NgbDatepickerI18n, useClass: CustomDatepickerI18n },
383
409
  { provide: NgbDateParserFormatter, useClass: CustomDatepickerFormat },
384
- ], viewQueries: [{ propertyName: "ngbDatepicker", first: true, predicate: ["fecha"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"label != null && label != '' && showLabel\" class=\"d-flex sumax-label mb-0 p-0\"\r\n ><span [title]=\"label\" style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis\">{{ label }}</span>\r\n <span *ngIf=\"required\" class=\"ms-1\" [class.text-danger]=\"controls?.errors != null\"> *</span>\r\n <span *ngIf=\"labelInfo\">\r\n <i class=\"fa fa-exclamation-circle text-info ms-2\" [matTooltip]=\"textLabelInfo\" matTooltipClass=\"bg-info\"></i>\r\n </span>\r\n</label>\r\n<div\r\n [class.input-icon]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n [class.right]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\">\r\n <!-- tooltip-message es el icono de error -->\r\n\r\n <div class=\"d-flex p-0 group-input-button position-relative\">\r\n <tooltip-message\r\n [label]=\"label\"\r\n [controls]=\"controls\"\r\n [validatorMessage]=\"validatorMessage\"\r\n [submitted]=\"submitted\"\r\n [tooltipMessage]=\"tooltipMessage\"></tooltip-message>\r\n <input\r\n type=\"text\"\r\n [attr.autocomplete]=\"autocomplete\"\r\n [class.is-invalid]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n (keyup.enter)=\"onKeyUpEnter()\"\r\n (keyup.ArrowUp)=\"arrowUpKeyUp()\"\r\n (keypress)=\"handleKeyPress($event)\"\r\n (input)=\"onInput($any($event.target).value)\"\r\n (dateSelect)=\"onInput($event)\"\r\n (focus)=\"onFocus($any($event.target).value)\"\r\n (focusout)=\"focusOut($any($event.target).value)\"\r\n (blur)=\"onBlur()\"\r\n class=\"form-control form-control-sm rounded-left use-input\"\r\n container=\"body\"\r\n placeholder=\"dd/mm/yyyy\"\r\n [minDate]=\"{ year: 1960, month: 1, day: 1 }\"\r\n [maxDate]=\"maxDate\"\r\n name=\"fecha\"\r\n ngbDatepicker\r\n #fecha=\"ngbDatepicker\"\r\n [(ngModel)]=\"value\" />\r\n <button type=\"button\" [disabled]=\"disabled || readonly\" class=\"btn btn-info p-0 rounded-0 use-button\" (click)=\"fecha.toggle()\">\r\n <!-- <mat-icon class=\"text-white pt-1\" style=\"font-size: 18px;\" [matTooltip]=\"'Calendario'\" matTooltipClass=\"bg-info\">calendar_today</mat-icon> -->\r\n <i class=\"fa fa-calendar text-white px-1\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n<!-- error-message es el mansaje que aparece abajo del componente -->\r\n<error-message\r\n [label]=\"label\"\r\n [controls]=\"controls\"\r\n [validatorMessage]=\"validatorMessage\"\r\n [submitted]=\"submitted\"\r\n [tooltipMessage]=\"tooltipMessage\"></error-message>\r\n", styles: ["button[disabled]{pointer-events:none}.sumax-label{color:#646c9a!important}.input-icon tooltip-message{color:#ccc;position:absolute;z-index:3;width:16px;font-size:16px;text-align:center;left:auto;right:35px;top:50%;transform:translateY(-50%)}.input-icon.right>.form-control{padding-right:33px;padding-left:12px}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.was-validated .form-control:invalid,.form-control.is-invalid{background-image:none;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.form-control:focus,.form-control:active{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a!important}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.errorMessageComponent, selector: "error-message", inputs: ["tooltipMessage", "validatorMessage", "controls", "label", "submitted"] }, { kind: "component", type: i6.tooltipMessageComponent, selector: "tooltip-message", inputs: ["tooltipMessage", "validatorMessage", "controls", "label", "submitted"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i8.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }] }); }
410
+ ], viewQueries: [{ propertyName: "ngbDatepicker", first: true, predicate: ["fecha"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"label != null && label != '' && showLabel\" class=\"d-flex sumax-label mb-0 p-0\"\r\n ><span [title]=\"label\" style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis\">{{ label }}</span>\r\n <span *ngIf=\"required\" class=\"ms-1\" [class.text-danger]=\"controls?.errors != null\"> *</span>\r\n <span *ngIf=\"labelInfo\">\r\n <i class=\"fa fa-exclamation-circle text-info ms-2\" [matTooltip]=\"textLabelInfo\" matTooltipClass=\"bg-info\"></i>\r\n </span>\r\n</label>\r\n<div\r\n [class.input-icon]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n [class.right]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\">\r\n <!-- tooltip-message es el icono de error -->\r\n\r\n <div class=\"d-flex p-0 group-input-button position-relative\">\r\n <tooltip-message\r\n [label]=\"label\"\r\n [controls]=\"controls\"\r\n [validatorMessage]=\"validatorMessage\"\r\n [submitted]=\"submitted\"\r\n [tooltipMessage]=\"tooltipMessage\"></tooltip-message>\r\n <input\r\n type=\"text\"\r\n [attr.autocomplete]=\"autocomplete\"\r\n [class.is-invalid]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n (keyup.enter)=\"onKeyUpEnter()\"\r\n (keyup.ArrowUp)=\"arrowUpKeyUp()\"\r\n (keypress)=\"handleKeyPress($event)\"\r\n (input)=\"onInput($any($event.target).value)\"\r\n (dateSelect)=\"onInput($event)\"\r\n (focus)=\"onFocus($any($event.target).value)\"\r\n (focusout)=\"focusOut($any($event.target).value)\"\r\n (blur)=\"onBlur()\"\r\n (paste)=\"handlePaste($event)\"\r\n class=\"form-control form-control-sm rounded-left use-input\"\r\n container=\"body\"\r\n placeholder=\"dd/mm/yyyy\"\r\n [minDate]=\"{ year: 1960, month: 1, day: 1 }\"\r\n [maxDate]=\"maxDate\"\r\n name=\"fecha\"\r\n ngbDatepicker\r\n #fecha=\"ngbDatepicker\"\r\n [(ngModel)]=\"value\" />\r\n <button type=\"button\" [disabled]=\"disabled || readonly\" class=\"btn btn-info p-0 rounded-0 use-button\" (click)=\"fecha.toggle()\">\r\n <!-- <mat-icon class=\"text-white pt-1\" style=\"font-size: 18px;\" [matTooltip]=\"'Calendario'\" matTooltipClass=\"bg-info\">calendar_today</mat-icon> -->\r\n <i class=\"fa fa-calendar text-white px-1\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n<!-- error-message es el mansaje que aparece abajo del componente -->\r\n<error-message\r\n [label]=\"label\"\r\n [controls]=\"controls\"\r\n [validatorMessage]=\"validatorMessage\"\r\n [submitted]=\"submitted\"\r\n [tooltipMessage]=\"tooltipMessage\"></error-message>\r\n", styles: ["button[disabled]{pointer-events:none}.sumax-label{color:#646c9a!important}.input-icon tooltip-message{color:#ccc;position:absolute;z-index:3;width:16px;font-size:16px;text-align:center;left:auto;right:35px;top:50%;transform:translateY(-50%)}.input-icon.right>.form-control{padding-right:33px;padding-left:12px}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.was-validated .form-control:invalid,.form-control.is-invalid{background-image:none;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.form-control:focus,.form-control:active{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a!important}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.errorMessageComponent, selector: "error-message", inputs: ["tooltipMessage", "validatorMessage", "controls", "label", "submitted"] }, { kind: "component", type: i6.tooltipMessageComponent, selector: "tooltip-message", inputs: ["tooltipMessage", "validatorMessage", "controls", "label", "submitted"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i8.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }] }); }
385
411
  }
386
412
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DatePickerComponent, decorators: [{
387
413
  type: Component,
@@ -399,7 +425,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
399
425
  I18n,
400
426
  { provide: NgbDatepickerI18n, useClass: CustomDatepickerI18n },
401
427
  { provide: NgbDateParserFormatter, useClass: CustomDatepickerFormat },
402
- ], template: "<label *ngIf=\"label != null && label != '' && showLabel\" class=\"d-flex sumax-label mb-0 p-0\"\r\n ><span [title]=\"label\" style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis\">{{ label }}</span>\r\n <span *ngIf=\"required\" class=\"ms-1\" [class.text-danger]=\"controls?.errors != null\"> *</span>\r\n <span *ngIf=\"labelInfo\">\r\n <i class=\"fa fa-exclamation-circle text-info ms-2\" [matTooltip]=\"textLabelInfo\" matTooltipClass=\"bg-info\"></i>\r\n </span>\r\n</label>\r\n<div\r\n [class.input-icon]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n [class.right]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\">\r\n <!-- tooltip-message es el icono de error -->\r\n\r\n <div class=\"d-flex p-0 group-input-button position-relative\">\r\n <tooltip-message\r\n [label]=\"label\"\r\n [controls]=\"controls\"\r\n [validatorMessage]=\"validatorMessage\"\r\n [submitted]=\"submitted\"\r\n [tooltipMessage]=\"tooltipMessage\"></tooltip-message>\r\n <input\r\n type=\"text\"\r\n [attr.autocomplete]=\"autocomplete\"\r\n [class.is-invalid]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n (keyup.enter)=\"onKeyUpEnter()\"\r\n (keyup.ArrowUp)=\"arrowUpKeyUp()\"\r\n (keypress)=\"handleKeyPress($event)\"\r\n (input)=\"onInput($any($event.target).value)\"\r\n (dateSelect)=\"onInput($event)\"\r\n (focus)=\"onFocus($any($event.target).value)\"\r\n (focusout)=\"focusOut($any($event.target).value)\"\r\n (blur)=\"onBlur()\"\r\n class=\"form-control form-control-sm rounded-left use-input\"\r\n container=\"body\"\r\n placeholder=\"dd/mm/yyyy\"\r\n [minDate]=\"{ year: 1960, month: 1, day: 1 }\"\r\n [maxDate]=\"maxDate\"\r\n name=\"fecha\"\r\n ngbDatepicker\r\n #fecha=\"ngbDatepicker\"\r\n [(ngModel)]=\"value\" />\r\n <button type=\"button\" [disabled]=\"disabled || readonly\" class=\"btn btn-info p-0 rounded-0 use-button\" (click)=\"fecha.toggle()\">\r\n <!-- <mat-icon class=\"text-white pt-1\" style=\"font-size: 18px;\" [matTooltip]=\"'Calendario'\" matTooltipClass=\"bg-info\">calendar_today</mat-icon> -->\r\n <i class=\"fa fa-calendar text-white px-1\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n<!-- error-message es el mansaje que aparece abajo del componente -->\r\n<error-message\r\n [label]=\"label\"\r\n [controls]=\"controls\"\r\n [validatorMessage]=\"validatorMessage\"\r\n [submitted]=\"submitted\"\r\n [tooltipMessage]=\"tooltipMessage\"></error-message>\r\n", styles: ["button[disabled]{pointer-events:none}.sumax-label{color:#646c9a!important}.input-icon tooltip-message{color:#ccc;position:absolute;z-index:3;width:16px;font-size:16px;text-align:center;left:auto;right:35px;top:50%;transform:translateY(-50%)}.input-icon.right>.form-control{padding-right:33px;padding-left:12px}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.was-validated .form-control:invalid,.form-control.is-invalid{background-image:none;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.form-control:focus,.form-control:active{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a!important}\n"] }]
428
+ ], template: "<label *ngIf=\"label != null && label != '' && showLabel\" class=\"d-flex sumax-label mb-0 p-0\"\r\n ><span [title]=\"label\" style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis\">{{ label }}</span>\r\n <span *ngIf=\"required\" class=\"ms-1\" [class.text-danger]=\"controls?.errors != null\"> *</span>\r\n <span *ngIf=\"labelInfo\">\r\n <i class=\"fa fa-exclamation-circle text-info ms-2\" [matTooltip]=\"textLabelInfo\" matTooltipClass=\"bg-info\"></i>\r\n </span>\r\n</label>\r\n<div\r\n [class.input-icon]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n [class.right]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\">\r\n <!-- tooltip-message es el icono de error -->\r\n\r\n <div class=\"d-flex p-0 group-input-button position-relative\">\r\n <tooltip-message\r\n [label]=\"label\"\r\n [controls]=\"controls\"\r\n [validatorMessage]=\"validatorMessage\"\r\n [submitted]=\"submitted\"\r\n [tooltipMessage]=\"tooltipMessage\"></tooltip-message>\r\n <input\r\n type=\"text\"\r\n [attr.autocomplete]=\"autocomplete\"\r\n [class.is-invalid]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n (keyup.enter)=\"onKeyUpEnter()\"\r\n (keyup.ArrowUp)=\"arrowUpKeyUp()\"\r\n (keypress)=\"handleKeyPress($event)\"\r\n (input)=\"onInput($any($event.target).value)\"\r\n (dateSelect)=\"onInput($event)\"\r\n (focus)=\"onFocus($any($event.target).value)\"\r\n (focusout)=\"focusOut($any($event.target).value)\"\r\n (blur)=\"onBlur()\"\r\n (paste)=\"handlePaste($event)\"\r\n class=\"form-control form-control-sm rounded-left use-input\"\r\n container=\"body\"\r\n placeholder=\"dd/mm/yyyy\"\r\n [minDate]=\"{ year: 1960, month: 1, day: 1 }\"\r\n [maxDate]=\"maxDate\"\r\n name=\"fecha\"\r\n ngbDatepicker\r\n #fecha=\"ngbDatepicker\"\r\n [(ngModel)]=\"value\" />\r\n <button type=\"button\" [disabled]=\"disabled || readonly\" class=\"btn btn-info p-0 rounded-0 use-button\" (click)=\"fecha.toggle()\">\r\n <!-- <mat-icon class=\"text-white pt-1\" style=\"font-size: 18px;\" [matTooltip]=\"'Calendario'\" matTooltipClass=\"bg-info\">calendar_today</mat-icon> -->\r\n <i class=\"fa fa-calendar text-white px-1\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n<!-- error-message es el mansaje que aparece abajo del componente -->\r\n<error-message\r\n [label]=\"label\"\r\n [controls]=\"controls\"\r\n [validatorMessage]=\"validatorMessage\"\r\n [submitted]=\"submitted\"\r\n [tooltipMessage]=\"tooltipMessage\"></error-message>\r\n", styles: ["button[disabled]{pointer-events:none}.sumax-label{color:#646c9a!important}.input-icon tooltip-message{color:#ccc;position:absolute;z-index:3;width:16px;font-size:16px;text-align:center;left:auto;right:35px;top:50%;transform:translateY(-50%)}.input-icon.right>.form-control{padding-right:33px;padding-left:12px}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.was-validated .form-control:invalid,.form-control.is-invalid{background-image:none;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.form-control:focus,.form-control:active{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a!important}\n"] }]
403
429
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.MessageUtilService }, { type: i2.DatePickerService }, { type: i0.Renderer2 }], propDecorators: { showLabel: [{
404
430
  type: Input
405
431
  }], label: [{
@@ -458,4 +484,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
458
484
  type: ViewChild,
459
485
  args: ['fecha']
460
486
  }] } });
461
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN1bWF4LWVycC1jb21wb25lbnQvc3JjL2xpYi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3VtYXgtZXJwLWNvbXBvbmVudC9zcmMvbGliL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxFQUNULFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsYUFBYSxFQUNiLGlCQUFpQixHQUVsQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxPQUFPLEVBQ1Asc0JBQXNCLEVBR3RCLGlCQUFpQixHQUNsQixNQUFNLDRCQUE0QixDQUFDO0FBR3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7Ozs7QUF1QjdDLDJKQUEySjtBQUMzSixNQUFNLE9BQU8sbUJBQW1CO0lBNks5QixZQUNVLEVBQWMsRUFDZCxrQkFBc0MsRUFDdEMsaUJBQW9DLEVBQ3BDLE9BQWtCO1FBSGxCLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsWUFBTyxHQUFQLE9B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QUk7c0JBQVosS0FBSztnQkFPRyxhQUFhO3NCQUFyQixLQUFLO2dCQU9HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBT0csa0JBQWtCO3NCQUExQixLQUFLO2dCQU9HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBT0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQU9HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBT0csY0FBYztzQkFBdEIsS0FBSztnQkFPRyxTQUFTO3NCQUFqQixLQUFLO2dCQU9HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBT0csYUFBYTtzQkFBckIsS0FBSztnQkFPRyxPQUFPO3NCQUFmLEtBQUs7Z0JBT0csT0FBTztzQkFBZixLQUFLO2dCQU9HLE9BQU87c0JBQWYsS0FBSztnQkFPRyxZQUFZO3NCQUFwQixLQUFLO2dCQU9HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBT0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQU9hLGFBQWE7c0JBQWhDLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFJlbmRlcmVyMixcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxuICBmb3J3YXJkUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFic3RyYWN0Q29udHJvbCxcclxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcclxuICBOR19WQUxJREFUT1JTLFxyXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gIFZhbGlkYXRpb25FcnJvcnMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gIE5nYkRhdGUsXHJcbiAgTmdiRGF0ZVBhcnNlckZvcm1hdHRlcixcclxuICBOZ2JEYXRlU3RydWN0LFxyXG4gIE5nYkRhdGVwaWNrZXIsXHJcbiAgTmdiRGF0ZXBpY2tlckkxOG4sXHJcbn0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBEYXRlUGlja2VyU2VydmljZSB9IGZyb20gJy4vZGF0ZS1waWNrZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE1lc3NhZ2VVdGlsU2VydmljZSB9IGZyb20gJy4uL3V0aWxzL21lc3NhZ2UtdXRpbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3VzdG9tRGF0ZXBpY2tlckkxOG4sIEkxOG4gfSBmcm9tICcuL0N1c3RvbURhdGVQaWNrZXJJMThuJztcclxuaW1wb3J0IHsgQ3VzdG9tRGF0ZXBpY2tlckZvcm1hdCB9IGZyb20gJy4vQ3VzdG9tRGF0ZVBpY2tlckZvcm1hdCc7XHJcbmltcG9ydCB7IFNoYXJlZENvbXBvbmVudHNVdGlsIH0gZnJvbSAnLi4vdXRpbHMvU2hhcmVkQ29tcG9uZW50c1V0aWwnO1xyXG5pbXBvcnQgeyBEYXRlVXRpbCB9IGZyb20gJy4uL3V0aWxzL0RhdGVVdGlsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZGF0ZS1waWNrZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgICBJMThuLFxyXG4gICAgeyBwcm92aWRlOiBOZ2JEYXRlcGlja2VySTE4biwgdXNlQ2xhc3M6IEN1c3RvbURhdGVwaWNrZXJJMThuIH0sXHJcbiAgICB7IHByb3ZpZGU6IE5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIsIHVzZUNsYXNzOiBDdXN0b21EYXRlcGlja2VyRm9ybWF0IH0sXHJcbiAgXSxcclxufSlcclxuXHJcbi8vIHByb3ZpZGVyczogW0kxOG4sIHsgcHJvdmlkZTogTmdiRGF0ZXBpY2tlckkxOG4sIHVzZUNsYXNzOiBDdXN0b21EYXRlcGlja2VySTE4biB9LCB7IHByb3ZpZGU6IE5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIsIHVzZUNsYXNzOiBDdXN0b21EYXRlcGlja2VyRm9ybWF0IH1dXHJcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3Jcclxue1xyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIENvbnRyb2xhIGxhIHZpc3VhbGl6YWNpw7NuIGRlbCB0ZXh0byBzdXBlcmlvciAobGFiZWwpXHJcbiAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSBzaG93TGFiZWw6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIFRleHRvIGEgbW9zdHJhciBjb21vIGV0aXF1ZXRhIGRlbCBjYW1wb1xyXG4gICogQGRlZmF1bHQgbnVsbFxyXG4gICogQHR5cGUgYW55XHJcbiAgKi9cclxuICBASW5wdXQoKSBsYWJlbDogYW55ID0gbnVsbDtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBWYWxvciBwYXJhIGVsIGF0cmlidXRvIGF1dG9jb21wbGV0ZSBkZWwgaW5wdXRcclxuICAqIEBkZWZhdWx0ICdvZmYnXHJcbiAgKiBAdHlwZSBzdHJpbmdcclxuICAqL1xyXG4gIEBJbnB1dCgpIGF1dG9jb21wbGV0ZTogc3RyaW5nID0gJ29mZic7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNpYSBhbCBzaWd1aWVudGUgY29udHJvbCBwYXJhIG5hdmVnYWNpw7NuXHJcbiAgKiBAZGVmYXVsdCB1bmRlZmluZWRcclxuICAqIEB0eXBlIGFueVxyXG4gICovXHJcbiAgQElucHV0KCkgbmV4dDogYW55O1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIFJlZmVyZW5jaWEgYWwgY29udHJvbCBhbHRlcm5hdGl2byBjdWFuZG8gZWwgc2lndWllbnRlIGVzdMOhIGRlc2hhYmlsaXRhZG9cclxuICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG4gICogQHR5cGUgYW55XHJcbiAgKi9cclxuICBASW5wdXQoKSBuZXh0SXNEaXNhYmxlOiBhbnk7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNpYSBhbCBjb250cm9sIGFudGVyaW9yIHBhcmEgbmF2ZWdhY2nDs25cclxuICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG4gICogQHR5cGUgYW55XHJcbiAgKi9cclxuICBASW5wdXQoKSBiYWNrOiBhbnk7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNpYSBhbCBjb250cm9sIGFsdGVybmF0aXZvIGN1YW5kbyBlbCBhbnRlcmlvciBlc3TDoSBkZXNoYWJpbGl0YWRvXHJcbiAgKiBAZGVmYXVsdCB1bmRlZmluZWRcclxuICAqIEB0eXBlIGFueVxyXG4gICovXHJcbiAgQElucHV0KCkgYmFja0lzRGlzYWJsZTogYW55O1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIEluZGljYSBzaSBlbCBjYW1wbyBlcyBvYmxpZ2F0b3Jpb1xyXG4gICogQGRlZmF1bHQgZmFsc2VcclxuICAqIEB0eXBlIGJvb2xlYW5cclxuICAqL1xyXG4gIEBJbnB1dCgpIHJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gQ29tcGxldGEgYXV0b23DoXRpY2FtZW50ZSBjb24gbnVsbCBjdWFuZG8gZWwgdmFsb3IgZXN0w6EgdmFjw61vXHJcbiAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSBub0F1dG9Db21wbGV0ZU51bGw6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIEVzdGFibGVjZSBlbCBjb250cm9sIGNvbW8gc29sbyBsZWN0dXJhXHJcbiAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBNdWVzdHJhIG1lbnNhamVzIGRlIHZhbGlkYWNpw7NuXHJcbiAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgdmFsaWRhdG9yTWVzc2FnZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgbWVuc2FqZXMgZGUgYXl1ZGEgY29tbyB0b29sdGlwc1xyXG4gICogQGRlZmF1bHQgdHJ1ZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgdG9vbHRpcE1lc3NhZ2U6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgYWxlcnRhcyBkZSB2YWxpZGFjacOzblxyXG4gICogQGRlZmF1bHQgZmFsc2VcclxuICAqIEB0eXBlIGJvb2xlYW5cclxuICAqL1xyXG4gIEBJbnB1dCgpIHZhbGlkYXRvckFsZXJ0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gSW5kaWNhIHNpIGVsIGZvcm11bGFyaW8gaGEgc2lkbyBlbnZpYWRvIHBhcmEgbW9zdHJhciB2YWxpZGFjaW9uZXNcclxuICAqIEBkZWZhdWx0IHRydWVcclxuICAqIEB0eXBlIGJvb2xlYW5cclxuICAqL1xyXG4gIEBJbnB1dCgpIHN1Ym1pdHRlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gSGFiaWxpdGEgaW5mb3JtYWNpw7NuIGFkaWNpb25hbCBwYXJhIGxhIGV0aXF1ZXRhXHJcbiAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgbGFiZWxJbmZvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gVGV4dG8gaW5mb3JtYXRpdm8gYWRpY2lvbmFsIHBhcmEgbGEgZXRpcXVldGFcclxuICAqIEBkZWZhdWx0ICcnXHJcbiAgKiBAdHlwZSBzdHJpbmdcclxuICAqL1xyXG4gIEBJbnB1dCgpIHRleHRMYWJlbEluZm86IHN0cmluZyA9ICcnO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIEZlY2hhIG3DrW5pbWEgc2VsZWNjaW9uYWJsZVxyXG4gICogQGRlZmF1bHQgdW5kZWZpbmVkXHJcbiAgKiBAdHlwZSBOZ2JEYXRlU3RydWN0XHJcbiAgKi9cclxuICBASW5wdXQoKSBtaW5EYXRlITogTmdiRGF0ZVN0cnVjdDtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBGZWNoYSBtw6F4aW1hIHNlbGVjY2lvbmFibGVcclxuICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG4gICogQHR5cGUgTmdiRGF0ZVN0cnVjdFxyXG4gICovXHJcbiAgQElucHV0KCkgbWF4RGF0ZSE6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gSW5kaWNhIHNpIGVsIHZhbG9yIGVzIGludsOhbGlkb1xyXG4gICogQGRlZmF1bHQgZmFsc2VcclxuICAqIEB0eXBlIGJvb2xlYW5cclxuICAqL1xyXG4gIEBJbnB1dCgpIGludmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBFc3RhYmxlY2UgZWwgZm9jbyBpbmljaWFsIGVuIGVsIGNvbXBvbmVudGVcclxuICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSBmb2N1c0luaXRpYWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBEZXNoYWJpbGl0YSBlbCBjb250cm9sXHJcbiAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gUmVzdHJpbmdlIGxhIGVudHJhZGEgYSBtw6F4aW1vIDggZMOtZ2l0b3MgKERETU1ZWVlZKSBvIDEwIGNhcmFjdGVyZXMgKEREL01NL1lZWVkpXHJcbiAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgcmVzdHJpY3RJbnB1dExlbmd0aDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgb25OZXh0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25CYWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgaW5wdXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbmNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIC8vIHhtaW5EYXRlID0gbnVsbDtcclxuICAvLyB4bWF4RGF0ZSA9IG51bGw7XHJcbiAgdmFsdWU6IGFueTtcclxuICBjb250cm9sczogYW55O1xyXG4gIGVtaXRWYWx1ZTogTmdiRGF0ZSB8IHN0cmluZyA9ICcnO1xyXG4gIHNoYXJlZENvbXBvbmVudHNVdGlsID0gbmV3IFNoYXJlZENvbXBvbmVudHNVdGlsKCk7XHJcbiAgQFZpZXdDaGlsZCgnZmVjaGEnKSBuZ2JEYXRlcGlja2VyOiBOZ2JEYXRlcGlja2VyIHwgYW55O1xyXG5cclxuICBfdGVtcFZhbHVlID0gJyc7XHJcbiAgX2luaXRWYWx1ZSA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VVdGlsU2VydmljZTogTWVzc2FnZVV0aWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRlUGlja2VyU2VydmljZTogRGF0ZVBpY2tlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9yZW5kZXI6IFJlbmRlcmVyMlxyXG4gICkge1xyXG4gICAgdGhpcy5zaG93TGFiZWwgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmdldFNob3dMYWJlbCgpO1xyXG4gICAgdGhpcy5hdXRvY29tcGxldGUgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmdldEF1dG9jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5ub0F1dG9Db21wbGV0ZU51bGwgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmdldE5vQXV0b0NvbXBsZXRlTnVsbCgpO1xyXG4gICAgdGhpcy5mb2N1c0luaXRpYWwgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmdldEZvY3VzSW5pdGlhbCgpO1xyXG4gICAgdGhpcy52YWxpZGF0b3JNZXNzYWdlID0gdGhpcy5kYXRlUGlja2VyU2VydmljZS5nZXRWYWxpZGF0b3JNZXNzYWdlKCk7XHJcbiAgICB0aGlzLnRvb2x0aXBNZXNzYWdlID0gdGhpcy5kYXRlUGlja2VyU2VydmljZS5nZXRUb29sdGlwTWVzc2FnZSgpO1xyXG4gICAgdGhpcy5zdWJtaXR0ZWQgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmdldFN1Ym1pdHRlZCgpO1xyXG4gICAgdGhpcy52YWxpZGF0b3JBbGVydCA9IHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZ2V0VmFsaWRhdG9yQWxlcnQoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydzdWJtaXR0ZWQnXSkge1xyXG4gICAgICBpZiAodGhpcy5jb250cm9scyAhPT0gdW5kZWZpbmVkICYmIGNoYW5nZXNbJ3N1Ym1pdHRlZCddLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuY29udHJvbHMubWFya0FzRGlydHkoKTtcclxuICAgICAgICB0aGlzLmNvbnRyb2xzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5taW5EYXRlKSB7XHJcbiAgICAgIHRoaXMubWluRGF0ZSA9IHRoaXMuc3RyRGF0ZVRvTmdiRGF0ZSh0aGlzLm1pbkRhdGUpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZm9jdXNJbml0aWFsID09IHRydWUgJiYgdGhpcy5kaXNhYmxlZCA9PSBmYWxzZSkge1xyXG4gICAgICBjb25zdCBpbnZhbGlkQ29udHJvbCA9XHJcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0eXBlPVwidGV4dFwiXScpO1xyXG4gICAgICBpbnZhbGlkQ29udHJvbC5mb2N1cygpO1xyXG4gICAgICBpbnZhbGlkQ29udHJvbC5zZWxlY3QoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XHJcbiAgb25WYWxpZGF0aW9uQ2hhbmdlID0gKCkgPT4ge307XHJcbiAgb25Ub3VjaCA9ICgpID0+IHt9O1xyXG5cclxuICBmb2N1cyA9ICgpID0+IHtcclxuICAgIGNvbnN0IGludmFsaWRDb250cm9sID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0eXBlPVwidGV4dFwiXScpO1xyXG4gICAgaW52YWxpZENvbnRyb2wuZm9jdXMoKTtcclxuICAgIGludmFsaWRDb250cm9sLnNlbGVjdCgpO1xyXG4gIH07XHJcblxyXG4gIG9uRm9jdXMoZXZ0OiBhbnkpIHtcclxuICAgIGlmIChldnQpIHtcclxuICAgICAgY29uc3QgaW52YWxpZENvbnRyb2wgPVxyXG4gICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbdHlwZT1cInRleHRcIl0nKTtcclxuICAgICAgaW52YWxpZENvbnRyb2wuc2VsZWN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5zdHJEYXRlVG9OZ2JEYXRlKHZhbHVlKSB8fCAnJztcclxuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgIHRoaXMuX3RlbXBWYWx1ZSA9IERhdGVVdGlsLmRhdGVBdXRvQ29tcGxldGUodmFsdWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgICB0aGlzLl9yZW5kZXIuc2V0UHJvcGVydHkodGhpcy5jb250cm9scywgJ3ZhbHVlJywgdGhpcy5fdGVtcFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHRoaXMuX3RlbXBWYWx1ZSA9IHZhbHVlLnRyaW0oKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgdGhpcy5fdGVtcFZhbHVlID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2ggPSBmbjtcclxuICB9XHJcbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBhbnkge1xyXG4gICAgdGhpcy5jb250cm9scyA9IGNvbnRyb2w7XHJcbiAgICBpZiAoIXRoaXMuX2luaXRWYWx1ZSkge1xyXG4gICAgICBpZiAodGhpcy5fdGVtcFZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyLnNldFByb3BlcnR5KGNvbnRyb2wsICd2YWx1ZScsIHRoaXMuX3RlbXBWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5faW5pdFZhbHVlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZT8oZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25WYWxpZGF0aW9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICBvbkJsdXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2goKTtcclxuICB9XHJcblxyXG4gIG9uSW5wdXQodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5lbWl0VmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy52YWx1ZSBpbnN0YW5jZW9mIE5nYkRhdGUpIHtcclxuICAgICAgdGhpcy5lbWl0VmFsdWUgPSB0aGlzLm5nYkRhdGV0b1N0cmluZyh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLmVtaXRWYWx1ZSk7XHJcbiAgICB0aGlzLm9uY2hhbmdlLmVtaXQodGhpcy5lbWl0VmFsdWUpO1xyXG4gICAgdGhpcy5pbnB1dC5lbWl0KHRoaXMuZW1pdFZhbHVlKTtcclxuXHJcbiAgICB0aGlzLl90ZW1wVmFsdWUgPSAnJztcclxuICB9XHJcblxyXG4gIG9uS2V5VXBFbnRlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuZW50ZXJLZXlVcCgpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlS2V5UHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnJlc3RyaWN0SW5wdXRMZW5ndGgpIHtcclxuICAgICAgdGhpcy5faGFuZGxlUmVzdHJpY3RJbnB1dExlbmd0aChldmVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9ubHlOdW1iZXJzKGV2ZW50IGFzIGFueSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVSZXN0cmljdElucHV0TGVuZ3RoKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBpc1ZhbGlkQ2hhcmFjdGVyID0gdGhpcy5faXNEaWdpdE9yU2xhc2goZXZlbnQua2V5KTtcclxuXHJcbiAgICBpZiAoIWlzVmFsaWRDaGFyYWN0ZXIpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBpbnB1dC52YWx1ZTtcclxuXHJcbiAgICBjb25zdCBoYXNTZWxlY3RlZFRleHQgPSB0aGlzLl9oYXNUZXh0U2VsZWN0aW9uKGlucHV0KTtcclxuXHJcbiAgICBpZiAoaGFzU2VsZWN0ZWRUZXh0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpc0lucHV0TGVuZ3RoRXhjZWVkZWQgPSB0aGlzLl9pc0lucHV0TGVuZ3RoRXhjZWVkZWQoY3VycmVudFZhbHVlKTtcclxuXHJcbiAgICBpZiAoaXNJbnB1dExlbmd0aEV4Y2VlZGVkKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0RpZ2l0T3JTbGFzaChrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIC9bXFxkXFwvXS8udGVzdChrZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFzVGV4dFNlbGVjdGlvbihpbnB1dDogSFRNTElucHV0RWxlbWVudCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGlucHV0LnNlbGVjdGlvblN0YXJ0ICE9PSBpbnB1dC5zZWxlY3Rpb25FbmQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0lucHV0TGVuZ3RoRXhjZWVkZWQoY3VycmVudFZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGhhc1NsYXNoZXMgPSAvXFwvLy50ZXN0KGN1cnJlbnRWYWx1ZSk7XHJcblxyXG4gICAgLy8gREQvTU0vWVlZWSAobcOheGltbyAxMCBjYXJhY3RlcmVzKSBvIDEyMDMyMDI1IChtw6F4aW1vIDggZMOtZ2l0b3MpXHJcbiAgICBjb25zdCBtYXhMZW5ndGggPSBoYXNTbGFzaGVzID8gMTAgOiA4OyBcclxuICAgIHJldHVybiBjdXJyZW50VmFsdWUubGVuZ3RoID49IG1heExlbmd0aDtcclxuICB9XHJcblxyXG4gIG9ubHlOdW1iZXJzKGU6IGFueSkge1xyXG4gICAgaWYgKCEoZS5rZXlDb2RlID49IDQ4ICYmIGUua2V5Q29kZSA8PSA1NykgJiYgZS5rZXlDb2RlICE9IDQ3KSB7XHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0ckRhdGVUb05nYkRhdGUodmFsdWU6IGFueSkge1xyXG4gICAgY29uc3QgZGF0ZTogRGF0ZSA9IERhdGVVdGlsLnBhcnNlKHZhbHVlLCAnREFURScpO1xyXG4gICAgY29uc3QgbmdiRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgICAgZGF5OiBOdW1iZXIoRGF0ZVV0aWwuZ2V0RGF5KGRhdGUpKSxcclxuICAgICAgbW9udGg6IE51bWJlcihEYXRlVXRpbC5nZXRNb250aChkYXRlKSksXHJcbiAgICAgIHllYXI6IE51bWJlcihEYXRlVXRpbC5nZXRZZWFyKGRhdGUpKSxcclxuICAgIH07XHJcbiAgICAvLyByZXR1cm4gbmdiRGF0ZTtcclxuICAgIHJldHVybiBuZXcgTmdiRGF0ZShuZ2JEYXRlLnllYXIsIG5nYkRhdGUubW9udGgsIG5nYkRhdGUuZGF5KTtcclxuICB9XHJcblxyXG4gIG5nYkRhdGV0b1N0cmluZyh2YWx1ZTogTmdiRGF0ZVN0cnVjdCk6IE5nYkRhdGUgfCBzdHJpbmcge1xyXG4gICAgY29uc3QgY29uY2F0TmdiRGF0ZSA9XHJcbiAgICAgIGAwJHt2YWx1ZS5kYXl9YC5zbGljZSgtMikgKyBgMCR7dmFsdWUubW9udGh9YC5zbGljZSgtMikgKyB2YWx1ZS55ZWFyO1xyXG4gICAgcmV0dXJuIERhdGVVdGlsLmRhdGVBdXRvQ29tcGxldGUoY29uY2F0TmdiRGF0ZSk7XHJcbiAgfVxyXG5cclxuICBlbnRlcktleVVwKCkge1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIGxldCB2YWxpZGF0b3IgPSB0aGlzLnNoYXJlZENvbXBvbmVudHNVdGlsLnN0b3BCeVZhbGlkYXRvcihcclxuICAgICAgICB0aGlzLmNvbnRyb2xzLFxyXG4gICAgICAgIHRoaXMudmFsaWRhdG9yQWxlcnQsXHJcbiAgICAgICAgdGhpcy5sYWJlbFxyXG4gICAgICApO1xyXG4gICAgICBpZiAodmFsaWRhdG9yLmVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlVXRpbFNlcnZpY2UuZ2V0TWVzc2FnZUVycm9yKFxyXG4gICAgICAgICAgJzAwMDA0NicsXHJcbiAgICAgICAgICAnRXJyb3InLFxyXG4gICAgICAgICAgdmFsaWRhdG9yLm1lc3NhZ2VcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubmV4dCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHRoaXMubmV4dC5kaXNhYmxlZCB8fCB0aGlzLm5leHQucmVhZG9ubHkpIHtcclxuICAgICAgICBpZiAodGhpcy5uZXh0SXNEaXNhYmxlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5uZXh0SXNEaXNhYmxlLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubmV4dC5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5uZXh0SXNEaXNhYmxlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMubmV4dElzRGlzYWJsZS5mb2N1cygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub25OZXh0LmVtaXQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXJyb3dVcEtleVVwKCkge1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIGxldCB2YWxpZGF0b3IgPSB0aGlzLnNoYXJlZENvbXBvbmVudHNVdGlsLnN0b3BCeVZhbGlkYXRvcihcclxuICAgICAgICB0aGlzLmNvbnRyb2xzLFxyXG4gICAgICAgIHRoaXMudmFsaWRhdG9yQWxlcnQsXHJcbiAgICAgICAgdGhpcy5sYWJlbFxyXG4gICAgICApO1xyXG4gICAgICBpZiAodmFsaWRhdG9yLmVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlVXRpbFNlcnZpY2UuZ2V0TWVzc2FnZUVycm9yKFxyXG4gICAgICAgICAgJzAwMDA0NicsXHJcbiAgICAgICAgICAnRXJyb3InLFxyXG4gICAgICAgICAgdmFsaWRhdG9yLm1lc3NhZ2VcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYmFjayAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHRoaXMuYmFjay5kaXNhYmxlZCB8fCB0aGlzLmJhY2sucmVhZG9ubHkpIHtcclxuICAgICAgICBpZiAodGhpcy5iYWNrSXNEaXNhYmxlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5iYWNrSXNEaXNhYmxlLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYmFjay5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5iYWNrSXNEaXNhYmxlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuYmFja0lzRGlzYWJsZS5mb2N1cygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub25CYWNrLmVtaXQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9jdXNPdXQodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLnRyaW0oKSAhPT0gJycpIHtcclxuICAgICAgaWYgKHRoaXMuX3RlbXBWYWx1ZSA9PT0gdmFsdWUpIHJldHVybjtcclxuXHJcbiAgICAgIHRoaXMubmdiRGF0ZXBpY2tlci5jbG9zZSgpO1xyXG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBOZ2JEYXRlKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLm5nYkRhdGV0b1N0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgICAgIHRoaXMuZW1pdFZhbHVlID0gdGhpcy5uZ2JEYXRldG9TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmVtaXRWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2VBbGwoJy8nLCAnJyk7XHJcbiAgICAgICAgaWYgKHRoaXMubm9BdXRvQ29tcGxldGVOdWxsKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5zdHJEYXRlVG9OZ2JEYXRlKFxyXG4gICAgICAgICAgICBEYXRlVXRpbC5kYXRlQXV0b0NvbXBsZXRlKHZhbHVlKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuZW1pdFZhbHVlID0gRGF0ZVV0aWwuZGF0ZUF1dG9Db21wbGV0ZSh2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh2YWx1ZSAhPSAnJyAmJiB2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnN0ckRhdGVUb05nYkRhdGUoXHJcbiAgICAgICAgICAgICAgRGF0ZVV0aWwuZGF0ZUF1dG9Db21wbGV0ZSh2YWx1ZSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5lbWl0VmFsdWUgPSBEYXRlVXRpbC5kYXRlQXV0b0NvbXBsZXRlKHZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMub25Ub3VjaCgpO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZW1pdFZhbHVlKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5lbWl0VmFsdWUgPT09ICdzdHJpbmcnKSB0aGlzLl90ZW1wVmFsdWUgPSB0aGlzLmVtaXRWYWx1ZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGxhYmVsICpuZ0lmPVwibGFiZWwgIT0gbnVsbCAmJiBsYWJlbCAhPSAnJyAmJiBzaG93TGFiZWxcIiBjbGFzcz1cImQtZmxleCBzdW1heC1sYWJlbCBtYi0wIHAtMFwiXHJcbiAgPjxzcGFuIFt0aXRsZV09XCJsYWJlbFwiIHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcDsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXNcIj57eyBsYWJlbCB9fTwvc3Bhbj5cclxuICA8c3BhbiAqbmdJZj1cInJlcXVpcmVkXCIgY2xhc3M9XCJtcy0xXCIgW2NsYXNzLnRleHQtZGFuZ2VyXT1cImNvbnRyb2xzPy5lcnJvcnMgIT0gbnVsbFwiPiAqPC9zcGFuPlxyXG4gIDxzcGFuICpuZ0lmPVwibGFiZWxJbmZvXCI+XHJcbiAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLWNpcmNsZSB0ZXh0LWluZm8gbXMtMlwiIFttYXRUb29sdGlwXT1cInRleHRMYWJlbEluZm9cIiBtYXRUb29sdGlwQ2xhc3M9XCJiZy1pbmZvXCI+PC9pPlxyXG4gIDwvc3Bhbj5cclxuPC9sYWJlbD5cclxuPGRpdlxyXG4gIFtjbGFzcy5pbnB1dC1pY29uXT1cImNvbnRyb2xzPy5lcnJvcnMgIT0gbnVsbCAmJiAoY29udHJvbHM/LmRpcnR5IHx8IGNvbnRyb2xzPy50b3VjaGVkKSAmJiBzdWJtaXR0ZWRcIlxyXG4gIFtjbGFzcy5yaWdodF09XCJjb250cm9scz8uZXJyb3JzICE9IG51bGwgJiYgKGNvbnRyb2xzPy5kaXJ0eSB8fCBjb250cm9scz8udG91Y2hlZCkgJiYgc3VibWl0dGVkXCI+XHJcbiAgPCEtLSB0b29sdGlwLW1lc3NhZ2UgZXMgZWwgaWNvbm8gZGUgZXJyb3IgLS0+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggcC0wIGdyb3VwLWlucHV0LWJ1dHRvbiBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgPHRvb2x0aXAtbWVzc2FnZVxyXG4gICAgICBbbGFiZWxdPVwibGFiZWxcIlxyXG4gICAgICBbY29udHJvbHNdPVwiY29udHJvbHNcIlxyXG4gICAgICBbdmFsaWRhdG9yTWVzc2FnZV09XCJ2YWxpZGF0b3JNZXNzYWdlXCJcclxuICAgICAgW3N1Ym1pdHRlZF09XCJzdWJtaXR0ZWRcIlxyXG4gICAgICBbdG9vbHRpcE1lc3NhZ2VdPVwidG9vbHRpcE1lc3NhZ2VcIj48L3Rvb2x0aXAtbWVzc2FnZT5cclxuICAgIDxpbnB1dFxyXG4gICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgIFthdHRyLmF1dG9jb21wbGV0ZV09XCJhdXRvY29tcGxldGVcIlxyXG4gICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJjb250cm9scz8uZXJyb3JzICE9IG51bGwgJiYgKGNvbnRyb2xzPy5kaXJ0eSB8fCBjb250cm9scz8udG91Y2hlZCkgJiYgc3VibWl0dGVkXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgKGtleXVwLmVudGVyKT1cIm9uS2V5VXBFbnRlcigpXCJcclxuICAgICAgKGtleXVwLkFycm93VXApPVwiYXJyb3dVcEtleVVwKClcIlxyXG4gICAgICAoa2V5cHJlc3MpPVwiaGFuZGxlS2V5UHJlc3MoJGV2ZW50KVwiXHJcbiAgICAgIChpbnB1dCk9XCJvbklucHV0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcclxuICAgICAgKGRhdGVTZWxlY3QpPVwib25JbnB1dCgkZXZlbnQpXCJcclxuICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIlxyXG4gICAgICAoZm9jdXNvdXQpPVwiZm9jdXNPdXQoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIlxyXG4gICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXHJcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSByb3VuZGVkLWxlZnQgdXNlLWlucHV0XCJcclxuICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgIHBsYWNlaG9sZGVyPVwiZGQvbW0veXl5eVwiXHJcbiAgICAgIFttaW5EYXRlXT1cInsgeWVhcjogMTk2MCwgbW9udGg6IDEsIGRheTogMSB9XCJcclxuICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiXHJcbiAgICAgIG5hbWU9XCJmZWNoYVwiXHJcbiAgICAgIG5nYkRhdGVwaWNrZXJcclxuICAgICAgI2ZlY2hhPVwibmdiRGF0ZXBpY2tlclwiXHJcbiAgICAgIFsobmdNb2RlbCldPVwidmFsdWVcIiAvPlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCIgY2xhc3M9XCJidG4gYnRuLWluZm8gcC0wIHJvdW5kZWQtMCB1c2UtYnV0dG9uXCIgKGNsaWNrKT1cImZlY2hhLnRvZ2dsZSgpXCI+XHJcbiAgICAgIDwhLS0gPG1hdC1pY29uIGNsYXNzPVwidGV4dC13aGl0ZSBwdC0xXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7XCIgW21hdFRvb2x0aXBdPVwiJ0NhbGVuZGFyaW8nXCIgbWF0VG9vbHRpcENsYXNzPVwiYmctaW5mb1wiPmNhbGVuZGFyX3RvZGF5PC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2FsZW5kYXIgdGV4dC13aGl0ZSBweC0xXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48IS0tIGVycm9yLW1lc3NhZ2UgZXMgZWwgbWFuc2FqZSBxdWUgYXBhcmVjZSBhYmFqbyBkZWwgY29tcG9uZW50ZSAtLT5cclxuPGVycm9yLW1lc3NhZ2VcclxuICBbbGFiZWxdPVwibGFiZWxcIlxyXG4gIFtjb250cm9sc109XCJjb250cm9sc1wiXHJcbiAgW3ZhbGlkYXRvck1lc3NhZ2VdPVwidmFsaWRhdG9yTWVzc2FnZVwiXHJcbiAgW3N1Ym1pdHRlZF09XCJzdWJtaXR0ZWRcIlxyXG4gIFt0b29sdGlwTWVzc2FnZV09XCJ0b29sdGlwTWVzc2FnZVwiPjwvZXJyb3ItbWVzc2FnZT5cclxuIl19
487
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN1bWF4LWVycC1jb21wb25lbnQvc3JjL2xpYi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3VtYXgtZXJwLWNvbXBvbmVudC9zcmMvbGliL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxFQUNULFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsYUFBYSxFQUNiLGlCQUFpQixHQUVsQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxPQUFPLEVBQ1Asc0JBQXNCLEVBR3RCLGlCQUFpQixHQUNsQixNQUFNLDRCQUE0QixDQUFDO0FBR3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7Ozs7QUF1QjdDLDJKQUEySjtBQUMzSixNQUFNLE9BQU8sbUJBQW1CO0lBNks5QixZQUNVLEVBQWMsRUFDZCxrQkFBc0MsRUFDdEMsaUJBQW9DLEVBQ3BDLE9BQWtCO1FBSGxCLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsWUFBTyxHQUFQLE9B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YztzQkFBdEIsS0FBSztnQkFPRyxjQUFjO3NCQUF0QixLQUFLO2dCQU9HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBT0csU0FBUztzQkFBakIsS0FBSztnQkFPRyxhQUFhO3NCQUFyQixLQUFLO2dCQU9HLE9BQU87c0JBQWYsS0FBSztnQkFPRyxPQUFPO3NCQUFmLEtBQUs7Z0JBT0csT0FBTztzQkFBZixLQUFLO2dCQU9HLFlBQVk7c0JBQXBCLEtBQUs7Z0JBT0csUUFBUTtzQkFBaEIsS0FBSztnQkFPRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUksTUFBTTtzQkFBZixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBT2EsYUFBYTtzQkFBaEMsU0FBUzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIGZvcndhcmRSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxyXG4gIE5HX1ZBTElEQVRPUlMsXHJcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgVmFsaWRhdGlvbkVycm9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcbiAgTmdiRGF0ZSxcclxuICBOZ2JEYXRlUGFyc2VyRm9ybWF0dGVyLFxyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgTmdiRGF0ZXBpY2tlcixcclxuICBOZ2JEYXRlcGlja2VySTE4bixcclxufSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IERhdGVQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi9kYXRlLXBpY2tlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWVzc2FnZVV0aWxTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvbWVzc2FnZS11dGlsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDdXN0b21EYXRlcGlja2VySTE4biwgSTE4biB9IGZyb20gJy4vQ3VzdG9tRGF0ZVBpY2tlckkxOG4nO1xyXG5pbXBvcnQgeyBDdXN0b21EYXRlcGlja2VyRm9ybWF0IH0gZnJvbSAnLi9DdXN0b21EYXRlUGlja2VyRm9ybWF0JztcclxuaW1wb3J0IHsgU2hhcmVkQ29tcG9uZW50c1V0aWwgfSBmcm9tICcuLi91dGlscy9TaGFyZWRDb21wb25lbnRzVXRpbCc7XHJcbmltcG9ydCB7IERhdGVVdGlsIH0gZnJvbSAnLi4vdXRpbHMvRGF0ZVV0aWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdkYXRlLXBpY2tlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYXRlLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVBpY2tlckNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVBpY2tlckNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICAgIEkxOG4sXHJcbiAgICB7IHByb3ZpZGU6IE5nYkRhdGVwaWNrZXJJMThuLCB1c2VDbGFzczogQ3VzdG9tRGF0ZXBpY2tlckkxOG4gfSxcclxuICAgIHsgcHJvdmlkZTogTmdiRGF0ZVBhcnNlckZvcm1hdHRlciwgdXNlQ2xhc3M6IEN1c3RvbURhdGVwaWNrZXJGb3JtYXQgfSxcclxuICBdLFxyXG59KVxyXG5cclxuLy8gcHJvdmlkZXJzOiBbSTE4biwgeyBwcm92aWRlOiBOZ2JEYXRlcGlja2VySTE4biwgdXNlQ2xhc3M6IEN1c3RvbURhdGVwaWNrZXJJMThuIH0sIHsgcHJvdmlkZTogTmdiRGF0ZVBhcnNlckZvcm1hdHRlciwgdXNlQ2xhc3M6IEN1c3RvbURhdGVwaWNrZXJGb3JtYXQgfV1cclxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXJDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvclxyXG57XHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gQ29udHJvbGEgbGEgdmlzdWFsaXphY2nDs24gZGVsIHRleHRvIHN1cGVyaW9yIChsYWJlbClcclxuICAqIEBkZWZhdWx0IHRydWVcclxuICAqIEB0eXBlIGJvb2xlYW5cclxuICAqL1xyXG4gIEBJbnB1dCgpIHNob3dMYWJlbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gVGV4dG8gYSBtb3N0cmFyIGNvbW8gZXRpcXVldGEgZGVsIGNhbXBvXHJcbiAgKiBAZGVmYXVsdCBudWxsXHJcbiAgKiBAdHlwZSBhbnlcclxuICAqL1xyXG4gIEBJbnB1dCgpIGxhYmVsOiBhbnkgPSBudWxsO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIFZhbG9yIHBhcmEgZWwgYXRyaWJ1dG8gYXV0b2NvbXBsZXRlIGRlbCBpbnB1dFxyXG4gICogQGRlZmF1bHQgJ29mZidcclxuICAqIEB0eXBlIHN0cmluZ1xyXG4gICovXHJcbiAgQElucHV0KCkgYXV0b2NvbXBsZXRlOiBzdHJpbmcgPSAnb2ZmJztcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBSZWZlcmVuY2lhIGFsIHNpZ3VpZW50ZSBjb250cm9sIHBhcmEgbmF2ZWdhY2nDs25cclxuICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG4gICogQHR5cGUgYW55XHJcbiAgKi9cclxuICBASW5wdXQoKSBuZXh0OiBhbnk7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNpYSBhbCBjb250cm9sIGFsdGVybmF0aXZvIGN1YW5kbyBlbCBzaWd1aWVudGUgZXN0w6EgZGVzaGFiaWxpdGFkb1xyXG4gICogQGRlZmF1bHQgdW5kZWZpbmVkXHJcbiAgKiBAdHlwZSBhbnlcclxuICAqL1xyXG4gIEBJbnB1dCgpIG5leHRJc0Rpc2FibGU6IGFueTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBSZWZlcmVuY2lhIGFsIGNvbnRyb2wgYW50ZXJpb3IgcGFyYSBuYXZlZ2FjacOzblxyXG4gICogQGRlZmF1bHQgdW5kZWZpbmVkXHJcbiAgKiBAdHlwZSBhbnlcclxuICAqL1xyXG4gIEBJbnB1dCgpIGJhY2s6IGFueTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBSZWZlcmVuY2lhIGFsIGNvbnRyb2wgYWx0ZXJuYXRpdm8gY3VhbmRvIGVsIGFudGVyaW9yIGVzdMOhIGRlc2hhYmlsaXRhZG9cclxuICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG4gICogQHR5cGUgYW55XHJcbiAgKi9cclxuICBASW5wdXQoKSBiYWNrSXNEaXNhYmxlOiBhbnk7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gSW5kaWNhIHNpIGVsIGNhbXBvIGVzIG9ibGlnYXRvcmlvXHJcbiAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBDb21wbGV0YSBhdXRvbcOhdGljYW1lbnRlIGNvbiBudWxsIGN1YW5kbyBlbCB2YWxvciBlc3TDoSB2YWPDrW9cclxuICAqIEBkZWZhdWx0IHRydWVcclxuICAqIEB0eXBlIGJvb2xlYW5cclxuICAqL1xyXG4gIEBJbnB1dCgpIG5vQXV0b0NvbXBsZXRlTnVsbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gRXN0YWJsZWNlIGVsIGNvbnRyb2wgY29tbyBzb2xvIGxlY3R1cmFcclxuICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgbWVuc2FqZXMgZGUgdmFsaWRhY2nDs25cclxuICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSB2YWxpZGF0b3JNZXNzYWdlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSBtZW5zYWplcyBkZSBheXVkYSBjb21vIHRvb2x0aXBzXHJcbiAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSB0b29sdGlwTWVzc2FnZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSBhbGVydGFzIGRlIHZhbGlkYWNpw7NuXHJcbiAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgdmFsaWRhdG9yQWxlcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBJbmRpY2Egc2kgZWwgZm9ybXVsYXJpbyBoYSBzaWRvIGVudmlhZG8gcGFyYSBtb3N0cmFyIHZhbGlkYWNpb25lc1xyXG4gICogQGRlZmF1bHQgdHJ1ZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgc3VibWl0dGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBIYWJpbGl0YSBpbmZvcm1hY2nDs24gYWRpY2lvbmFsIHBhcmEgbGEgZXRpcXVldGFcclxuICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSBsYWJlbEluZm86IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBUZXh0byBpbmZvcm1hdGl2byBhZGljaW9uYWwgcGFyYSBsYSBldGlxdWV0YVxyXG4gICogQGRlZmF1bHQgJydcclxuICAqIEB0eXBlIHN0cmluZ1xyXG4gICovXHJcbiAgQElucHV0KCkgdGV4dExhYmVsSW5mbzogc3RyaW5nID0gJyc7XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gRmVjaGEgbcOtbmltYSBzZWxlY2Npb25hYmxlXHJcbiAgKiBAZGVmYXVsdCB1bmRlZmluZWRcclxuICAqIEB0eXBlIE5nYkRhdGVTdHJ1Y3RcclxuICAqL1xyXG4gIEBJbnB1dCgpIG1pbkRhdGUhOiBOZ2JEYXRlU3RydWN0O1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIEZlY2hhIG3DoXhpbWEgc2VsZWNjaW9uYWJsZVxyXG4gICogQGRlZmF1bHQgdW5kZWZpbmVkXHJcbiAgKiBAdHlwZSBOZ2JEYXRlU3RydWN0XHJcbiAgKi9cclxuICBASW5wdXQoKSBtYXhEYXRlITogTmdiRGF0ZVN0cnVjdDtcclxuICBcclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBJbmRpY2Egc2kgZWwgdmFsb3IgZXMgaW52w6FsaWRvXHJcbiAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICogQHR5cGUgYm9vbGVhblxyXG4gICovXHJcbiAgQElucHV0KCkgaW52YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIEVzdGFibGVjZSBlbCBmb2NvIGluaWNpYWwgZW4gZWwgY29tcG9uZW50ZVxyXG4gICogQGRlZmF1bHQgZmFsc2VcclxuICAqIEB0eXBlIGJvb2xlYW5cclxuICAqL1xyXG4gIEBJbnB1dCgpIGZvY3VzSW5pdGlhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIERlc2hhYmlsaXRhIGVsIGNvbnRyb2xcclxuICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBSZXN0cmluZ2UgbGEgZW50cmFkYSBhIG3DoXhpbW8gOCBkw61naXRvcyAoRERNTVlZWVkpIG8gMTAgY2FyYWN0ZXJlcyAoREQvTU0vWVlZWSlcclxuICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgKiBAdHlwZSBib29sZWFuXHJcbiAgKi9cclxuICBASW5wdXQoKSByZXN0cmljdElucHV0TGVuZ3RoOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBvbk5leHQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkJhY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBpbnB1dDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uY2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgYmx1cjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgLy8geG1pbkRhdGUgPSBudWxsO1xyXG4gIC8vIHhtYXhEYXRlID0gbnVsbDtcclxuICB2YWx1ZTogYW55O1xyXG4gIGNvbnRyb2xzOiBhbnk7XHJcbiAgZW1pdFZhbHVlOiBOZ2JEYXRlIHwgc3RyaW5nID0gJyc7XHJcbiAgc2hhcmVkQ29tcG9uZW50c1V0aWwgPSBuZXcgU2hhcmVkQ29tcG9uZW50c1V0aWwoKTtcclxuICBAVmlld0NoaWxkKCdmZWNoYScpIG5nYkRhdGVwaWNrZXI6IE5nYkRhdGVwaWNrZXIgfCBhbnk7XHJcblxyXG4gIF90ZW1wVmFsdWUgPSAnJztcclxuICBfaW5pdFZhbHVlID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgbWVzc2FnZVV0aWxTZXJ2aWNlOiBNZXNzYWdlVXRpbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRhdGVQaWNrZXJTZXJ2aWNlOiBEYXRlUGlja2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX3JlbmRlcjogUmVuZGVyZXIyXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNob3dMYWJlbCA9IHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZ2V0U2hvd0xhYmVsKCk7XHJcbiAgICB0aGlzLmF1dG9jb21wbGV0ZSA9IHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZ2V0QXV0b2NvbXBsZXRlKCk7XHJcbiAgICB0aGlzLm5vQXV0b0NvbXBsZXRlTnVsbCA9IHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZ2V0Tm9BdXRvQ29tcGxldGVOdWxsKCk7XHJcbiAgICB0aGlzLmZvY3VzSW5pdGlhbCA9IHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZ2V0Rm9jdXNJbml0aWFsKCk7XHJcbiAgICB0aGlzLnZhbGlkYXRvck1lc3NhZ2UgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmdldFZhbGlkYXRvck1lc3NhZ2UoKTtcclxuICAgIHRoaXMudG9vbHRpcE1lc3NhZ2UgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmdldFRvb2x0aXBNZXNzYWdlKCk7XHJcbiAgICB0aGlzLnN1Ym1pdHRlZCA9IHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZ2V0U3VibWl0dGVkKCk7XHJcbiAgICB0aGlzLnZhbGlkYXRvckFsZXJ0ID0gdGhpcy5kYXRlUGlja2VyU2VydmljZS5nZXRWYWxpZGF0b3JBbGVydCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3N1Ym1pdHRlZCddKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbnRyb2xzICE9PSB1bmRlZmluZWQgJiYgY2hhbmdlc1snc3VibWl0dGVkJ10uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9scy5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgIHRoaXMuY29udHJvbHMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLm1pbkRhdGUpIHtcclxuICAgICAgdGhpcy5taW5EYXRlID0gdGhpcy5zdHJEYXRlVG9OZ2JEYXRlKHRoaXMubWluRGF0ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5mb2N1c0luaXRpYWwgPT0gdHJ1ZSAmJiB0aGlzLmRpc2FibGVkID09IGZhbHNlKSB7XHJcbiAgICAgIGNvbnN0IGludmFsaWRDb250cm9sID1cclxuICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW3R5cGU9XCJ0ZXh0XCJdJyk7XHJcbiAgICAgIGludmFsaWRDb250cm9sLmZvY3VzKCk7XHJcbiAgICAgIGludmFsaWRDb250cm9sLnNlbGVjdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcclxuICBvblZhbGlkYXRpb25DaGFuZ2UgPSAoKSA9PiB7fTtcclxuICBvblRvdWNoID0gKCkgPT4ge307XHJcblxyXG4gIGZvY3VzID0gKCkgPT4ge1xyXG4gICAgY29uc3QgaW52YWxpZENvbnRyb2wgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW3R5cGU9XCJ0ZXh0XCJdJyk7XHJcbiAgICBpbnZhbGlkQ29udHJvbC5mb2N1cygpO1xyXG4gICAgaW52YWxpZENvbnRyb2wuc2VsZWN0KCk7XHJcbiAgfTtcclxuXHJcbiAgb25Gb2N1cyhldnQ6IGFueSkge1xyXG4gICAgaWYgKGV2dCkge1xyXG4gICAgICBjb25zdCBpbnZhbGlkQ29udHJvbCA9XHJcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0eXBlPVwidGV4dFwiXScpO1xyXG4gICAgICBpbnZhbGlkQ29udHJvbC5zZWxlY3QoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnN0ckRhdGVUb05nYkRhdGUodmFsdWUpIHx8ICcnO1xyXG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgdGhpcy5fdGVtcFZhbHVlID0gRGF0ZVV0aWwuZGF0ZUF1dG9Db21wbGV0ZSh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbHMpIHtcclxuICAgICAgICAgIHRoaXMuX3JlbmRlci5zZXRQcm9wZXJ0eSh0aGlzLmNvbnRyb2xzLCAndmFsdWUnLCB0aGlzLl90ZW1wVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgdGhpcy5fdGVtcFZhbHVlID0gdmFsdWUudHJpbSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICB0aGlzLl90ZW1wVmFsdWUgPSAnJztcclxuICAgIH1cclxuICB9XHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaCA9IGZuO1xyXG4gIH1cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IGFueSB7XHJcbiAgICB0aGlzLmNvbnRyb2xzID0gY29udHJvbDtcclxuICAgIGlmICghdGhpcy5faW5pdFZhbHVlKSB7XHJcbiAgICAgIGlmICh0aGlzLl90ZW1wVmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9yZW5kZXIuc2V0UHJvcGVydHkoY29udHJvbCwgJ3ZhbHVlJywgdGhpcy5fdGVtcFZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9pbml0VmFsdWUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlPyhmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblZhbGlkYXRpb25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIG9uQmx1cigpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaCgpO1xyXG4gIH1cclxuXHJcbiAgb25JbnB1dCh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLmVtaXRWYWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLnZhbHVlIGluc3RhbmNlb2YgTmdiRGF0ZSkge1xyXG4gICAgICB0aGlzLmVtaXRWYWx1ZSA9IHRoaXMubmdiRGF0ZXRvU3RyaW5nKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZW1pdFZhbHVlKTtcclxuICAgIHRoaXMub25jaGFuZ2UuZW1pdCh0aGlzLmVtaXRWYWx1ZSk7XHJcbiAgICB0aGlzLmlucHV0LmVtaXQodGhpcy5lbWl0VmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX3RlbXBWYWx1ZSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgb25LZXlVcEVudGVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lbnRlcktleVVwKCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVQYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmKCF0aGlzLnJlc3RyaWN0SW5wdXRMZW5ndGgpIHJldHVybjtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IFxyXG5cclxuICAgIGlmKCF0aGlzLmlzQXBwbGljYWJsZVRvSGFuZGxlUGFzdGUoZXZlbnQpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcGFzdGVkVGV4dCA9IGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKSB8fCAnJztcclxuICAgIGlmICghcGFzdGVkVGV4dCkgcmV0dXJuO1xyXG4gICAgICBcclxuICAgIHRoaXMuZm9ybWF0RGF0ZShwYXN0ZWRUZXh0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNBcHBsaWNhYmxlVG9IYW5kbGVQYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcblxyXG4gICAgaWYodGhpcy5faGFzVGV4dFNlbGVjdGlvbihpbnB1dCkpe1xyXG4gICAgICByZXR1cm4gdGhpcy5faXNGdWxseVNlbGVjdGVkKGlucHV0KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUtleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5yZXN0cmljdElucHV0TGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZVJlc3RyaWN0SW5wdXRMZW5ndGgoZXZlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vbmx5TnVtYmVycyhldmVudCBhcyBhbnkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlUmVzdHJpY3RJbnB1dExlbmd0aChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgaXNWYWxpZENoYXJhY3RlciA9IHRoaXMuX2lzRGlnaXRPclNsYXNoKGV2ZW50LmtleSk7XHJcblxyXG4gICAgaWYgKCFpc1ZhbGlkQ2hhcmFjdGVyKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gaW5wdXQudmFsdWU7XHJcblxyXG4gICAgY29uc3QgaGFzU2VsZWN0ZWRUZXh0ID0gdGhpcy5faGFzVGV4dFNlbGVjdGlvbihpbnB1dCk7XHJcblxyXG4gICAgaWYgKGhhc1NlbGVjdGVkVGV4dCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaXNJbnB1dExlbmd0aEV4Y2VlZGVkID0gdGhpcy5faXNJbnB1dExlbmd0aEV4Y2VlZGVkKGN1cnJlbnRWYWx1ZSk7XHJcblxyXG4gICAgaWYgKGlzSW5wdXRMZW5ndGhFeGNlZWRlZCkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNEaWdpdE9yU2xhc2goa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAvW1xcZFxcL10vLnRlc3Qoa2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhc1RleHRTZWxlY3Rpb24oaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBpbnB1dC5zZWxlY3Rpb25TdGFydCAhPT0gaW5wdXQuc2VsZWN0aW9uRW5kO1xyXG4gIH1cclxuICBcclxuICBwcml2YXRlIF9pc0Z1bGx5U2VsZWN0ZWQoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBpbnB1dC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJiBcclxuICAgICAgICAgICBpbnB1dC5zZWxlY3Rpb25FbmQgPT09IGlucHV0LnZhbHVlLmxlbmd0aCAmJiBcclxuICAgICAgICAgICBpbnB1dC52YWx1ZS5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNJbnB1dExlbmd0aEV4Y2VlZGVkKGN1cnJlbnRWYWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBoYXNTbGFzaGVzID0gL1xcLy8udGVzdChjdXJyZW50VmFsdWUpO1xyXG5cclxuICAgIC8vIEREL01NL1lZWVkgKG3DoXhpbW8gMTAgY2FyYWN0ZXJlcykgbyAxMjAzMjAyNSAobcOheGltbyA4IGTDrWdpdG9zKVxyXG4gICAgY29uc3QgbWF4TGVuZ3RoID0gaGFzU2xhc2hlcyA/IDEwIDogODsgXHJcbiAgICByZXR1cm4gY3VycmVudFZhbHVlLmxlbmd0aCA+PSBtYXhMZW5ndGg7XHJcbiAgfVxyXG5cclxuICBvbmx5TnVtYmVycyhlOiBhbnkpIHtcclxuICAgIGlmICghKGUua2V5Q29kZSA+PSA0OCAmJiBlLmtleUNvZGUgPD0gNTcpICYmIGUua2V5Q29kZSAhPSA0Nykge1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdHJEYXRlVG9OZ2JEYXRlKHZhbHVlOiBhbnkpIHtcclxuICAgIGNvbnN0IGRhdGU6IERhdGUgPSBEYXRlVXRpbC5wYXJzZSh2YWx1ZSwgJ0RBVEUnKTtcclxuICAgIGNvbnN0IG5nYkRhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XHJcbiAgICAgIGRheTogTnVtYmVyKERhdGVVdGlsLmdldERheShkYXRlKSksXHJcbiAgICAgIG1vbnRoOiBOdW1iZXIoRGF0ZVV0aWwuZ2V0TW9udGgoZGF0ZSkpLFxyXG4gICAgICB5ZWFyOiBOdW1iZXIoRGF0ZVV0aWwuZ2V0WWVhcihkYXRlKSksXHJcbiAgICB9O1xyXG4gICAgLy8gcmV0dXJuIG5nYkRhdGU7XHJcbiAgICByZXR1cm4gbmV3IE5nYkRhdGUobmdiRGF0ZS55ZWFyLCBuZ2JEYXRlLm1vbnRoLCBuZ2JEYXRlLmRheSk7XHJcbiAgfVxyXG5cclxuICBuZ2JEYXRldG9TdHJpbmcodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpOiBOZ2JEYXRlIHwgc3RyaW5nIHtcclxuICAgIGNvbnN0IGNvbmNhdE5nYkRhdGUgPVxyXG4gICAgICBgMCR7dmFsdWUuZGF5fWAuc2xpY2UoLTIpICsgYDAke3ZhbHVlLm1vbnRofWAuc2xpY2UoLTIpICsgdmFsdWUueWVhcjtcclxuICAgIHJldHVybiBEYXRlVXRpbC5kYXRlQXV0b0NvbXBsZXRlKGNvbmNhdE5nYkRhdGUpO1xyXG4gIH1cclxuXHJcbiAgZW50ZXJLZXlVcCgpIHtcclxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICBsZXQgdmFsaWRhdG9yID0gdGhpcy5zaGFyZWRDb21wb25lbnRzVXRpbC5zdG9wQnlWYWxpZGF0b3IoXHJcbiAgICAgICAgdGhpcy5jb250cm9scyxcclxuICAgICAgICB0aGlzLnZhbGlkYXRvckFsZXJ0LFxyXG4gICAgICAgIHRoaXMubGFiZWxcclxuICAgICAgKTtcclxuICAgICAgaWYgKHZhbGlkYXRvci5lcnJvcikge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVV0aWxTZXJ2aWNlLmdldE1lc3NhZ2VFcnJvcihcclxuICAgICAgICAgICcwMDAwNDYnLFxyXG4gICAgICAgICAgJ0Vycm9yJyxcclxuICAgICAgICAgIHZhbGlkYXRvci5tZXNzYWdlXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLm5leHQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmICh0aGlzLm5leHQuZGlzYWJsZWQgfHwgdGhpcy5uZXh0LnJlYWRvbmx5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMubmV4dElzRGlzYWJsZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMubmV4dElzRGlzYWJsZS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm5leHQuZm9jdXMoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMubmV4dElzRGlzYWJsZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLm5leHRJc0Rpc2FibGUuZm9jdXMoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm9uTmV4dC5lbWl0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFycm93VXBLZXlVcCgpIHtcclxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICBsZXQgdmFsaWRhdG9yID0gdGhpcy5zaGFyZWRDb21wb25lbnRzVXRpbC5zdG9wQnlWYWxpZGF0b3IoXHJcbiAgICAgICAgdGhpcy5jb250cm9scyxcclxuICAgICAgICB0aGlzLnZhbGlkYXRvckFsZXJ0LFxyXG4gICAgICAgIHRoaXMubGFiZWxcclxuICAgICAgKTtcclxuICAgICAgaWYgKHZhbGlkYXRvci5lcnJvcikge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVV0aWxTZXJ2aWNlLmdldE1lc3NhZ2VFcnJvcihcclxuICAgICAgICAgICcwMDAwNDYnLFxyXG4gICAgICAgICAgJ0Vycm9yJyxcclxuICAgICAgICAgIHZhbGlkYXRvci5tZXNzYWdlXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmJhY2sgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmICh0aGlzLmJhY2suZGlzYWJsZWQgfHwgdGhpcy5iYWNrLnJlYWRvbmx5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYmFja0lzRGlzYWJsZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMuYmFja0lzRGlzYWJsZS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmJhY2suZm9jdXMoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuYmFja0lzRGlzYWJsZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmJhY2tJc0Rpc2FibGUuZm9jdXMoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm9uQmFjay5lbWl0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvY3VzT3V0KHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuZm9ybWF0RGF0ZSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXREYXRlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZT8udHJpbSgpICE9PSAnJykge1xyXG4gICAgICBpZiAodGhpcy5fdGVtcFZhbHVlID09PSB2YWx1ZSkgcmV0dXJuO1xyXG5cclxuICAgICAgdGhpcy5uZ2JEYXRlcGlja2VyLmNsb3NlKCk7XHJcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE5nYkRhdGUpIHtcclxuICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMubmdiRGF0ZXRvU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgICAgdGhpcy5lbWl0VmFsdWUgPSB0aGlzLm5nYkRhdGV0b1N0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZW1pdFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZUFsbCgnLycsICcnKTtcclxuICAgICAgICBpZiAodGhpcy5ub0F1dG9Db21wbGV0ZU51bGwpIHtcclxuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnN0ckRhdGVUb05nYkRhdGUoXHJcbiAgICAgICAgICAgIERhdGVVdGlsLmRhdGVBdXRvQ29tcGxldGUodmFsdWUpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5lbWl0VmFsdWUgPSBEYXRlVXRpbC5kYXRlQXV0b0NvbXBsZXRlKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHZhbHVlICE9ICcnICYmIHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc3RyRGF0ZVRvTmdiRGF0ZShcclxuICAgICAgICAgICAgICBEYXRlVXRpbC5kYXRlQXV0b0NvbXBsZXRlKHZhbHVlKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRWYWx1ZSA9IERhdGVVdGlsLmRhdGVBdXRvQ29tcGxldGUodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5vblRvdWNoKCk7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5lbWl0VmFsdWUpO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmVtaXRWYWx1ZSA9PT0gJ3N0cmluZycpIHRoaXMuX3RlbXBWYWx1ZSA9IHRoaXMuZW1pdFZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8bGFiZWwgKm5nSWY9XCJsYWJlbCAhPSBudWxsICYmIGxhYmVsICE9ICcnICYmIHNob3dMYWJlbFwiIGNsYXNzPVwiZC1mbGV4IHN1bWF4LWxhYmVsIG1iLTAgcC0wXCJcclxuICA+PHNwYW4gW3RpdGxlXT1cImxhYmVsXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwOyBvdmVyZmxvdzogaGlkZGVuOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpc1wiPnt7IGxhYmVsIH19PC9zcGFuPlxyXG4gIDxzcGFuICpuZ0lmPVwicmVxdWlyZWRcIiBjbGFzcz1cIm1zLTFcIiBbY2xhc3MudGV4dC1kYW5nZXJdPVwiY29udHJvbHM/LmVycm9ycyAhPSBudWxsXCI+ICo8L3NwYW4+XHJcbiAgPHNwYW4gKm5nSWY9XCJsYWJlbEluZm9cIj5cclxuICAgIDxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlIHRleHQtaW5mbyBtcy0yXCIgW21hdFRvb2x0aXBdPVwidGV4dExhYmVsSW5mb1wiIG1hdFRvb2x0aXBDbGFzcz1cImJnLWluZm9cIj48L2k+XHJcbiAgPC9zcGFuPlxyXG48L2xhYmVsPlxyXG48ZGl2XHJcbiAgW2NsYXNzLmlucHV0LWljb25dPVwiY29udHJvbHM/LmVycm9ycyAhPSBudWxsICYmIChjb250cm9scz8uZGlydHkgfHwgY29udHJvbHM/LnRvdWNoZWQpICYmIHN1Ym1pdHRlZFwiXHJcbiAgW2NsYXNzLnJpZ2h0XT1cImNvbnRyb2xzPy5lcnJvcnMgIT0gbnVsbCAmJiAoY29udHJvbHM/LmRpcnR5IHx8IGNvbnRyb2xzPy50b3VjaGVkKSAmJiBzdWJtaXR0ZWRcIj5cclxuICA8IS0tIHRvb2x0aXAtbWVzc2FnZSBlcyBlbCBpY29ubyBkZSBlcnJvciAtLT5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBwLTAgZ3JvdXAtaW5wdXQtYnV0dG9uIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICA8dG9vbHRpcC1tZXNzYWdlXHJcbiAgICAgIFtsYWJlbF09XCJsYWJlbFwiXHJcbiAgICAgIFtjb250cm9sc109XCJjb250cm9sc1wiXHJcbiAgICAgIFt2YWxpZGF0b3JNZXNzYWdlXT1cInZhbGlkYXRvck1lc3NhZ2VcIlxyXG4gICAgICBbc3VibWl0dGVkXT1cInN1Ym1pdHRlZFwiXHJcbiAgICAgIFt0b29sdGlwTWVzc2FnZV09XCJ0b29sdGlwTWVzc2FnZVwiPjwvdG9vbHRpcC1tZXNzYWdlPlxyXG4gICAgPGlucHV0XHJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgW2F0dHIuYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXHJcbiAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImNvbnRyb2xzPy5lcnJvcnMgIT0gbnVsbCAmJiAoY29udHJvbHM/LmRpcnR5IHx8IGNvbnRyb2xzPy50b3VjaGVkKSAmJiBzdWJtaXR0ZWRcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG4gICAgICAoa2V5dXAuZW50ZXIpPVwib25LZXlVcEVudGVyKClcIlxyXG4gICAgICAoa2V5dXAuQXJyb3dVcCk9XCJhcnJvd1VwS2V5VXAoKVwiXHJcbiAgICAgIChrZXlwcmVzcyk9XCJoYW5kbGVLZXlQcmVzcygkZXZlbnQpXCJcclxuICAgICAgKGlucHV0KT1cIm9uSW5wdXQoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIlxyXG4gICAgICAoZGF0ZVNlbGVjdCk9XCJvbklucHV0KCRldmVudClcIlxyXG4gICAgICAoZm9jdXMpPVwib25Gb2N1cygkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXHJcbiAgICAgIChmb2N1c291dCk9XCJmb2N1c091dCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXHJcbiAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcclxuICAgICAgKHBhc3RlKT1cImhhbmRsZVBhc3RlKCRldmVudClcIlxyXG4gICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gcm91bmRlZC1sZWZ0IHVzZS1pbnB1dFwiXHJcbiAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICBwbGFjZWhvbGRlcj1cImRkL21tL3l5eXlcIlxyXG4gICAgICBbbWluRGF0ZV09XCJ7IHllYXI6IDE5NjAsIG1vbnRoOiAxLCBkYXk6IDEgfVwiXHJcbiAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxyXG4gICAgICBuYW1lPVwiZmVjaGFcIlxyXG4gICAgICBuZ2JEYXRlcGlja2VyXHJcbiAgICAgICNmZWNoYT1cIm5nYkRhdGVwaWNrZXJcIlxyXG4gICAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCIgLz5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCByZWFkb25seVwiIGNsYXNzPVwiYnRuIGJ0bi1pbmZvIHAtMCByb3VuZGVkLTAgdXNlLWJ1dHRvblwiIChjbGljayk9XCJmZWNoYS50b2dnbGUoKVwiPlxyXG4gICAgICA8IS0tIDxtYXQtaWNvbiBjbGFzcz1cInRleHQtd2hpdGUgcHQtMVwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1wiIFttYXRUb29sdGlwXT1cIidDYWxlbmRhcmlvJ1wiIG1hdFRvb2x0aXBDbGFzcz1cImJnLWluZm9cIj5jYWxlbmRhcl90b2RheTwvbWF0LWljb24+IC0tPlxyXG4gICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyIHRleHQtd2hpdGUgcHgtMVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPCEtLSBlcnJvci1tZXNzYWdlIGVzIGVsIG1hbnNhamUgcXVlIGFwYXJlY2UgYWJham8gZGVsIGNvbXBvbmVudGUgLS0+XHJcbjxlcnJvci1tZXNzYWdlXHJcbiAgW2xhYmVsXT1cImxhYmVsXCJcclxuICBbY29udHJvbHNdPVwiY29udHJvbHNcIlxyXG4gIFt2YWxpZGF0b3JNZXNzYWdlXT1cInZhbGlkYXRvck1lc3NhZ2VcIlxyXG4gIFtzdWJtaXR0ZWRdPVwic3VibWl0dGVkXCJcclxuICBbdG9vbHRpcE1lc3NhZ2VdPVwidG9vbHRpcE1lc3NhZ2VcIj48L2Vycm9yLW1lc3NhZ2U+XHJcbiJdfQ==
@@ -135,6 +135,12 @@ export class InputNumberComponent {
135
135
  * @type boolean
136
136
  */
137
137
  this.allowNegativeNumbers = false;
138
+ /**
139
+ * @description Deshabilita el separador de miles
140
+ * @default false
141
+ * @type boolean
142
+ */
143
+ this.disableThousandSeparator = false;
138
144
  this.onNext = new EventEmitter();
139
145
  this.onBack = new EventEmitter();
140
146
  this.change = new EventEmitter();
@@ -355,7 +361,7 @@ export class InputNumberComponent {
355
361
  }, 150);
356
362
  }
357
363
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: InputNumberComponent, deps: [{ token: i1.MessageUtilService }, { token: i2.InputNumberService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
358
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: InputNumberComponent, selector: "input-number", inputs: { showLabel: "showLabel", label: "label", btnEnable: "btnEnable", autocomplete: "autocomplete", bold: "bold", decimals: "decimals", formatCero: "formatCero", maxLength: "maxLength", next: "next", nextIsDisable: "nextIsDisable", back: "back", backIsDisable: "backIsDisable", required: "required", disabled: "disabled", readonly: "readonly", validatorMessage: "validatorMessage", tooltipMessage: "tooltipMessage", submitted: "submitted", labelInfo: "labelInfo", textLabelInfo: "textLabelInfo", validatorAlert: "validatorAlert", setNgClass: "setNgClass", placeholder: "placeholder", allowNegativeNumbers: "allowNegativeNumbers" }, outputs: { onNext: "onNext", onBack: "onBack", change: "change", onchange: "onchange", blur: "blur", onfocus: "onfocus", onfocusout: "onfocusout" }, providers: [
364
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: InputNumberComponent, selector: "input-number", inputs: { showLabel: "showLabel", label: "label", btnEnable: "btnEnable", autocomplete: "autocomplete", bold: "bold", decimals: "decimals", formatCero: "formatCero", maxLength: "maxLength", next: "next", nextIsDisable: "nextIsDisable", back: "back", backIsDisable: "backIsDisable", required: "required", disabled: "disabled", readonly: "readonly", validatorMessage: "validatorMessage", tooltipMessage: "tooltipMessage", submitted: "submitted", labelInfo: "labelInfo", textLabelInfo: "textLabelInfo", validatorAlert: "validatorAlert", setNgClass: "setNgClass", placeholder: "placeholder", allowNegativeNumbers: "allowNegativeNumbers", disableThousandSeparator: "disableThousandSeparator" }, outputs: { onNext: "onNext", onBack: "onBack", change: "change", onchange: "onchange", blur: "blur", onfocus: "onfocus", onfocusout: "onfocusout" }, providers: [
359
365
  {
360
366
  provide: NG_VALUE_ACCESSOR,
361
367
  useExisting: forwardRef(() => InputNumberComponent),
@@ -366,7 +372,7 @@ export class InputNumberComponent {
366
372
  useExisting: forwardRef(() => InputNumberComponent),
367
373
  multi: true
368
374
  }
369
- ], viewQueries: [{ propertyName: "inputText", first: true, predicate: ["inputText"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"label != null && label != '' && showLabel\" class=\"d-flex sumax-label mb-0 p-0\"\r\n\t><span [title]=\"label\" style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis\">{{ label }}</span>\r\n\t<span *ngIf=\"required\" class=\"ms-1\" [class.text-danger]=\"controls?.errors != null\"> *</span>\r\n\t<span *ngIf=\"labelInfo\">\r\n\t\t<i class=\"fa fa-exclamation-circle text-info ms-2\" [matTooltip]=\"textLabelInfo\" matTooltipClass=\"bg-info\"></i>\r\n\t</span>\r\n</label>\r\n<div\r\n\t[class.input-icon]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n\t[class.right]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n>\r\n\t<div class=\"d-flex\">\r\n\t\t<div class=\"w-100 position-relative\">\r\n\t\t\t<tooltip-message\r\n\t\t\t\t[label]=\"label\"\r\n\t\t\t\t[controls]=\"controls\"\r\n\t\t\t\t[validatorMessage]=\"validatorMessage\"\r\n\t\t\t\t[tooltipMessage]=\"tooltipMessage\"\r\n\t\t\t\t[submitted]=\"submitted\"\r\n\t\t\t></tooltip-message>\r\n\t\t\t<input\r\n\t\t\t\t#inputText\r\n\t\t\t\ttype=\"text\"\r\n\t\t\t\tclass=\"form-control form-control-sm text-end\"\r\n\t\t\t\t[class.is-invalid]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n\t\t\t\t[(ngModel)]=\"value\"\r\n\t\t\t\t[disabled]=\"disabled\"\r\n\t\t\t\t[readonly]=\"readonly\"\r\n\t\t\t\t[mask]=\"format\"\r\n\t\t\t\tthousandSeparator=\",\"\r\n\t\t\t\t(blur)=\"onBlur($any($event.target).value)\"\r\n\t\t\t\t(input)=\"onInput($any($event.target).value)\"\r\n\t\t\t\t(focusout)=\"onFocusOut($any($event.target).value)\"\r\n\t\t\t\t[attr.autocomplete]=\"autocomplete\"\r\n\t\t\t\t[placeholder]=\"placeholder\"\r\n\t\t\t\t(focus)=\"onFocus($any($event.target).value)\"\r\n\t\t\t\t[attr.maxLength]=\"maxLength\"\r\n\t\t\t\t(keyup.enter)=\"enterKeyUp()\"\r\n\t\t\t\t(keyup.ArrowUp)=\"arrowUpKeyUp()\"\r\n\t\t\t\t[ngClass]=\"setNgClass\"\r\n\t\t\t\t[class.bold]=\"bold\"\r\n\t\t\t\t[allowNegativeNumbers]=\"allowNegativeNumbers\"\r\n\t\t\t\t[leadZero]=\"!allowNegativeNumbers\"\r\n\t\t\t/>\r\n\t\t</div>\r\n\t\t<div class=\"bd-highlight\" *ngIf=\"btnEnable\">\r\n\t\t\t<button type=\"button\" class=\"btn btn-info p-0 rounded-0 h-100\" (click)=\"clickEnable()\">\r\n\t\t\t\t<i class=\"fa fa-check text-white px-1\" [matTooltip]=\"'Habilitar'\" matTooltipClass=\"bg-info\"></i>\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t\t<ng-content select=\"[more-buttons]\"></ng-content>\r\n\t</div>\r\n</div>\r\n<error-message\r\n\t[label]=\"label\"\r\n\t[controls]=\"controls\"\r\n\t[validatorMessage]=\"validatorMessage\"\r\n\t[tooltipMessage]=\"tooltipMessage\"\r\n\t[submitted]=\"submitted\"\r\n></error-message>\r\n", styles: [".sumax-label{color:#646c9a!important}.input-icon tooltip-message{color:#ccc;position:absolute;z-index:3;width:16px;font-size:16px;text-align:center;right:10px;top:50%;transform:translateY(-50%)}.input-icon.right>.form-control{padding-right:33px;padding-left:12px}.bold{color:#000;font-weight:700}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.was-validated .form-control:invalid,.form-control.is-invalid{background-image:none;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.form-control:focus,.form-control:active{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.errorMessageComponent, selector: "error-message", inputs: ["tooltipMessage", "validatorMessage", "controls", "label", "submitted"] }, { kind: "component", type: i6.tooltipMessageComponent, selector: "tooltip-message", inputs: ["tooltipMessage", "validatorMessage", "controls", "label", "submitted"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i8.NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }] }); }
375
+ ], viewQueries: [{ propertyName: "inputText", first: true, predicate: ["inputText"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"label != null && label != '' && showLabel\" class=\"d-flex sumax-label mb-0 p-0\"\r\n\t><span [title]=\"label\" style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis\">{{ label }}</span>\r\n\t<span *ngIf=\"required\" class=\"ms-1\" [class.text-danger]=\"controls?.errors != null\"> *</span>\r\n\t<span *ngIf=\"labelInfo\">\r\n\t\t<i class=\"fa fa-exclamation-circle text-info ms-2\" [matTooltip]=\"textLabelInfo\" matTooltipClass=\"bg-info\"></i>\r\n\t</span>\r\n</label>\r\n<div\r\n\t[class.input-icon]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n\t[class.right]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n>\r\n\t<div class=\"d-flex\">\r\n\t\t<div class=\"w-100 position-relative\">\r\n\t\t\t<tooltip-message\r\n\t\t\t\t[label]=\"label\"\r\n\t\t\t\t[controls]=\"controls\"\r\n\t\t\t\t[validatorMessage]=\"validatorMessage\"\r\n\t\t\t\t[tooltipMessage]=\"tooltipMessage\"\r\n\t\t\t\t[submitted]=\"submitted\"\r\n\t\t\t></tooltip-message>\r\n\t\t\t<input\r\n\t\t\t\t#inputText\r\n\t\t\t\ttype=\"text\"\r\n\t\t\t\tclass=\"form-control form-control-sm text-end\"\r\n\t\t\t\t[class.is-invalid]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n\t\t\t\t[(ngModel)]=\"value\"\r\n\t\t\t\t[disabled]=\"disabled\"\r\n\t\t\t\t[readonly]=\"readonly\"\r\n\t\t\t\t[mask]=\"format\"\r\n\t\t\t\t[thousandSeparator]=\"disableThousandSeparator ? '' : ','\"\r\n\t\t\t\t(blur)=\"onBlur($any($event.target).value)\"\r\n\t\t\t\t(input)=\"onInput($any($event.target).value)\"\r\n\t\t\t\t(focusout)=\"onFocusOut($any($event.target).value)\"\r\n\t\t\t\t[attr.autocomplete]=\"autocomplete\"\r\n\t\t\t\t[placeholder]=\"placeholder\"\r\n\t\t\t\t(focus)=\"onFocus($any($event.target).value)\"\r\n\t\t\t\t[attr.maxLength]=\"maxLength\"\r\n\t\t\t\t(keyup.enter)=\"enterKeyUp()\"\r\n\t\t\t\t(keyup.ArrowUp)=\"arrowUpKeyUp()\"\r\n\t\t\t\t[ngClass]=\"setNgClass\"\r\n\t\t\t\t[class.bold]=\"bold\"\r\n\t\t\t\t[allowNegativeNumbers]=\"allowNegativeNumbers\"\r\n\t\t\t\t[leadZero]=\"!allowNegativeNumbers\"\r\n\t\t\t/>\r\n\t\t</div>\r\n\t\t<div class=\"bd-highlight\" *ngIf=\"btnEnable\">\r\n\t\t\t<button type=\"button\" class=\"btn btn-info p-0 rounded-0 h-100\" (click)=\"clickEnable()\">\r\n\t\t\t\t<i class=\"fa fa-check text-white px-1\" [matTooltip]=\"'Habilitar'\" matTooltipClass=\"bg-info\"></i>\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t\t<ng-content select=\"[more-buttons]\"></ng-content>\r\n\t</div>\r\n</div>\r\n<error-message\r\n\t[label]=\"label\"\r\n\t[controls]=\"controls\"\r\n\t[validatorMessage]=\"validatorMessage\"\r\n\t[tooltipMessage]=\"tooltipMessage\"\r\n\t[submitted]=\"submitted\"\r\n></error-message>\r\n", styles: [".sumax-label{color:#646c9a!important}.input-icon tooltip-message{color:#ccc;position:absolute;z-index:3;width:16px;font-size:16px;text-align:center;right:10px;top:50%;transform:translateY(-50%)}.input-icon.right>.form-control{padding-right:33px;padding-left:12px}.bold{color:#000;font-weight:700}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.was-validated .form-control:invalid,.form-control.is-invalid{background-image:none;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.form-control:focus,.form-control:active{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.errorMessageComponent, selector: "error-message", inputs: ["tooltipMessage", "validatorMessage", "controls", "label", "submitted"] }, { kind: "component", type: i6.tooltipMessageComponent, selector: "tooltip-message", inputs: ["tooltipMessage", "validatorMessage", "controls", "label", "submitted"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i8.NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }] }); }
370
376
  }
371
377
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: InputNumberComponent, decorators: [{
372
378
  type: Component,
@@ -381,7 +387,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
381
387
  useExisting: forwardRef(() => InputNumberComponent),
382
388
  multi: true
383
389
  }
384
- ], template: "<label *ngIf=\"label != null && label != '' && showLabel\" class=\"d-flex sumax-label mb-0 p-0\"\r\n\t><span [title]=\"label\" style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis\">{{ label }}</span>\r\n\t<span *ngIf=\"required\" class=\"ms-1\" [class.text-danger]=\"controls?.errors != null\"> *</span>\r\n\t<span *ngIf=\"labelInfo\">\r\n\t\t<i class=\"fa fa-exclamation-circle text-info ms-2\" [matTooltip]=\"textLabelInfo\" matTooltipClass=\"bg-info\"></i>\r\n\t</span>\r\n</label>\r\n<div\r\n\t[class.input-icon]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n\t[class.right]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n>\r\n\t<div class=\"d-flex\">\r\n\t\t<div class=\"w-100 position-relative\">\r\n\t\t\t<tooltip-message\r\n\t\t\t\t[label]=\"label\"\r\n\t\t\t\t[controls]=\"controls\"\r\n\t\t\t\t[validatorMessage]=\"validatorMessage\"\r\n\t\t\t\t[tooltipMessage]=\"tooltipMessage\"\r\n\t\t\t\t[submitted]=\"submitted\"\r\n\t\t\t></tooltip-message>\r\n\t\t\t<input\r\n\t\t\t\t#inputText\r\n\t\t\t\ttype=\"text\"\r\n\t\t\t\tclass=\"form-control form-control-sm text-end\"\r\n\t\t\t\t[class.is-invalid]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n\t\t\t\t[(ngModel)]=\"value\"\r\n\t\t\t\t[disabled]=\"disabled\"\r\n\t\t\t\t[readonly]=\"readonly\"\r\n\t\t\t\t[mask]=\"format\"\r\n\t\t\t\tthousandSeparator=\",\"\r\n\t\t\t\t(blur)=\"onBlur($any($event.target).value)\"\r\n\t\t\t\t(input)=\"onInput($any($event.target).value)\"\r\n\t\t\t\t(focusout)=\"onFocusOut($any($event.target).value)\"\r\n\t\t\t\t[attr.autocomplete]=\"autocomplete\"\r\n\t\t\t\t[placeholder]=\"placeholder\"\r\n\t\t\t\t(focus)=\"onFocus($any($event.target).value)\"\r\n\t\t\t\t[attr.maxLength]=\"maxLength\"\r\n\t\t\t\t(keyup.enter)=\"enterKeyUp()\"\r\n\t\t\t\t(keyup.ArrowUp)=\"arrowUpKeyUp()\"\r\n\t\t\t\t[ngClass]=\"setNgClass\"\r\n\t\t\t\t[class.bold]=\"bold\"\r\n\t\t\t\t[allowNegativeNumbers]=\"allowNegativeNumbers\"\r\n\t\t\t\t[leadZero]=\"!allowNegativeNumbers\"\r\n\t\t\t/>\r\n\t\t</div>\r\n\t\t<div class=\"bd-highlight\" *ngIf=\"btnEnable\">\r\n\t\t\t<button type=\"button\" class=\"btn btn-info p-0 rounded-0 h-100\" (click)=\"clickEnable()\">\r\n\t\t\t\t<i class=\"fa fa-check text-white px-1\" [matTooltip]=\"'Habilitar'\" matTooltipClass=\"bg-info\"></i>\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t\t<ng-content select=\"[more-buttons]\"></ng-content>\r\n\t</div>\r\n</div>\r\n<error-message\r\n\t[label]=\"label\"\r\n\t[controls]=\"controls\"\r\n\t[validatorMessage]=\"validatorMessage\"\r\n\t[tooltipMessage]=\"tooltipMessage\"\r\n\t[submitted]=\"submitted\"\r\n></error-message>\r\n", styles: [".sumax-label{color:#646c9a!important}.input-icon tooltip-message{color:#ccc;position:absolute;z-index:3;width:16px;font-size:16px;text-align:center;right:10px;top:50%;transform:translateY(-50%)}.input-icon.right>.form-control{padding-right:33px;padding-left:12px}.bold{color:#000;font-weight:700}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.was-validated .form-control:invalid,.form-control.is-invalid{background-image:none;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.form-control:focus,.form-control:active{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a!important}\n"] }]
390
+ ], template: "<label *ngIf=\"label != null && label != '' && showLabel\" class=\"d-flex sumax-label mb-0 p-0\"\r\n\t><span [title]=\"label\" style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis\">{{ label }}</span>\r\n\t<span *ngIf=\"required\" class=\"ms-1\" [class.text-danger]=\"controls?.errors != null\"> *</span>\r\n\t<span *ngIf=\"labelInfo\">\r\n\t\t<i class=\"fa fa-exclamation-circle text-info ms-2\" [matTooltip]=\"textLabelInfo\" matTooltipClass=\"bg-info\"></i>\r\n\t</span>\r\n</label>\r\n<div\r\n\t[class.input-icon]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n\t[class.right]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n>\r\n\t<div class=\"d-flex\">\r\n\t\t<div class=\"w-100 position-relative\">\r\n\t\t\t<tooltip-message\r\n\t\t\t\t[label]=\"label\"\r\n\t\t\t\t[controls]=\"controls\"\r\n\t\t\t\t[validatorMessage]=\"validatorMessage\"\r\n\t\t\t\t[tooltipMessage]=\"tooltipMessage\"\r\n\t\t\t\t[submitted]=\"submitted\"\r\n\t\t\t></tooltip-message>\r\n\t\t\t<input\r\n\t\t\t\t#inputText\r\n\t\t\t\ttype=\"text\"\r\n\t\t\t\tclass=\"form-control form-control-sm text-end\"\r\n\t\t\t\t[class.is-invalid]=\"controls?.errors != null && (controls?.dirty || controls?.touched) && submitted\"\r\n\t\t\t\t[(ngModel)]=\"value\"\r\n\t\t\t\t[disabled]=\"disabled\"\r\n\t\t\t\t[readonly]=\"readonly\"\r\n\t\t\t\t[mask]=\"format\"\r\n\t\t\t\t[thousandSeparator]=\"disableThousandSeparator ? '' : ','\"\r\n\t\t\t\t(blur)=\"onBlur($any($event.target).value)\"\r\n\t\t\t\t(input)=\"onInput($any($event.target).value)\"\r\n\t\t\t\t(focusout)=\"onFocusOut($any($event.target).value)\"\r\n\t\t\t\t[attr.autocomplete]=\"autocomplete\"\r\n\t\t\t\t[placeholder]=\"placeholder\"\r\n\t\t\t\t(focus)=\"onFocus($any($event.target).value)\"\r\n\t\t\t\t[attr.maxLength]=\"maxLength\"\r\n\t\t\t\t(keyup.enter)=\"enterKeyUp()\"\r\n\t\t\t\t(keyup.ArrowUp)=\"arrowUpKeyUp()\"\r\n\t\t\t\t[ngClass]=\"setNgClass\"\r\n\t\t\t\t[class.bold]=\"bold\"\r\n\t\t\t\t[allowNegativeNumbers]=\"allowNegativeNumbers\"\r\n\t\t\t\t[leadZero]=\"!allowNegativeNumbers\"\r\n\t\t\t/>\r\n\t\t</div>\r\n\t\t<div class=\"bd-highlight\" *ngIf=\"btnEnable\">\r\n\t\t\t<button type=\"button\" class=\"btn btn-info p-0 rounded-0 h-100\" (click)=\"clickEnable()\">\r\n\t\t\t\t<i class=\"fa fa-check text-white px-1\" [matTooltip]=\"'Habilitar'\" matTooltipClass=\"bg-info\"></i>\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t\t<ng-content select=\"[more-buttons]\"></ng-content>\r\n\t</div>\r\n</div>\r\n<error-message\r\n\t[label]=\"label\"\r\n\t[controls]=\"controls\"\r\n\t[validatorMessage]=\"validatorMessage\"\r\n\t[tooltipMessage]=\"tooltipMessage\"\r\n\t[submitted]=\"submitted\"\r\n></error-message>\r\n", styles: [".sumax-label{color:#646c9a!important}.input-icon tooltip-message{color:#ccc;position:absolute;z-index:3;width:16px;font-size:16px;text-align:center;right:10px;top:50%;transform:translateY(-50%)}.input-icon.right>.form-control{padding-right:33px;padding-left:12px}.bold{color:#000;font-weight:700}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.was-validated .form-control:invalid,.form-control.is-invalid{background-image:none;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #fde6e8!important}.form-control:focus,.form-control:active{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a!important}\n"] }]
385
391
  }], ctorParameters: () => [{ type: i1.MessageUtilService }, { type: i2.InputNumberService }, { type: i0.Renderer2 }], propDecorators: { showLabel: [{
386
392
  type: Input
387
393
  }], label: [{
@@ -430,6 +436,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
430
436
  type: Input
431
437
  }], allowNegativeNumbers: [{
432
438
  type: Input
439
+ }], disableThousandSeparator: [{
440
+ type: Input
433
441
  }], onNext: [{
434
442
  type: Output
435
443
  }], onBack: [{
@@ -448,4 +456,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
448
456
  type: ViewChild,
449
457
  args: ['inputText']
450
458
  }] } });
451
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtbnVtYmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdW1heC1lcnAtY29tcG9uZW50L3NyYy9saWIvaW5wdXQtbnVtYmVyL2lucHV0LW51bWJlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3VtYXgtZXJwLWNvbXBvbmVudC9zcmMvbGliL2lucHV0LW51bWJlci9pbnB1dC1udW1iZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVOLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTixhQUFhLEVBQ2IsaUJBQWlCLEVBRWpCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7Ozs7QUFvQnJFLE1BQU0sT0FBTyxvQkFBb0I7SUEwTGhDLFlBQ1Msa0JBQXNDLEVBQ3RDLGtCQUFzQyxFQUN0QyxPQUFrQjtRQUZsQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsWUFBTyxHQUFQLE9BQU8sQ0FBVztRQTVMM0I7Ozs7V0FJRztRQUNNLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFFbkM7Ozs7V0FJRztRQUNNLFVBQUssR0FBUSxJQUFJLENBQUM7UUFFM0I7Ozs7V0FJRztRQUNNLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFFcEM7Ozs7V0FJRztRQUNNLGlCQUFZLEdBQVcsOEJBQThCLENBQUM7UUFFL0Q7Ozs7V0FJRztRQUNNLFNBQUksR0FBWSxLQUFLLENBQUM7UUFFL0I7Ozs7V0FJRztRQUNNLGFBQVEsR0FBVyxDQUFDLENBQUMsQ0FBQztRQUUv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QUk7c0JBQWIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ2lCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0QWZ0ZXJWaWV3SW5pdCxcclxuXHRDb21wb25lbnQsXHJcblx0RWxlbWVudFJlZixcclxuXHRFdmVudEVtaXR0ZXIsXHJcblx0Zm9yd2FyZFJlZixcclxuXHRJbnB1dCxcclxuXHRPbkNoYW5nZXMsXHJcblx0T25Jbml0LFxyXG5cdE91dHB1dCxcclxuXHRSZW5kZXJlcjIsXHJcblx0U2ltcGxlQ2hhbmdlcyxcclxuXHRWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuXHRBYnN0cmFjdENvbnRyb2wsXHJcblx0Q29udHJvbFZhbHVlQWNjZXNzb3IsXHJcblx0TkdfVkFMSURBVE9SUyxcclxuXHROR19WQUxVRV9BQ0NFU1NPUixcclxuXHRWYWxpZGF0aW9uRXJyb3JzXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBJbnB1dE51bWJlclNlcnZpY2UgfSBmcm9tICcuL2lucHV0LW51bWJlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2hhcmVkQ29tcG9uZW50c1V0aWwgfSBmcm9tICcuLi91dGlscy9TaGFyZWRDb21wb25lbnRzVXRpbCc7XHJcbmltcG9ydCB7IE1lc3NhZ2VVdGlsU2VydmljZSB9IGZyb20gJy4uL3V0aWxzL21lc3NhZ2UtdXRpbC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnaW5wdXQtbnVtYmVyJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vaW5wdXQtbnVtYmVyLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9pbnB1dC1udW1iZXIuY29tcG9uZW50LnNjc3MnXSxcclxuXHRwcm92aWRlcnM6IFtcclxuXHRcdHtcclxuXHRcdFx0cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcblx0XHRcdHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElucHV0TnVtYmVyQ29tcG9uZW50KSxcclxuXHRcdFx0bXVsdGk6IHRydWVcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcblx0XHRcdHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElucHV0TnVtYmVyQ29tcG9uZW50KSxcclxuXHRcdFx0bXVsdGk6IHRydWVcclxuXHRcdH1cclxuXHRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnB1dE51bWJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblx0LyoqXHJcblx0ICogQGRlc2NyaXB0aW9uIENvbnRyb2xhIGxhIHZpc3VhbGl6YWNpw7NuIGRlbCB0ZXh0byBzdXBlcmlvciAobGFiZWwpXHJcblx0ICogQGRlZmF1bHQgdHJ1ZVxyXG5cdCAqIEB0eXBlIGJvb2xlYW5cclxuXHQgKi9cclxuXHRASW5wdXQoKSBzaG93TGFiZWw6IGJvb2xlYW4gPSB0cnVlO1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIEBkZXNjcmlwdGlvbiBUZXh0byBhIG1vc3RyYXIgY29tbyBldGlxdWV0YSBkZWwgY2FtcG9cclxuXHQgKiBAZGVmYXVsdCBudWxsXHJcblx0ICogQHR5cGUgYW55XHJcblx0ICovXHJcblx0QElucHV0KCkgbGFiZWw6IGFueSA9IG51bGw7XHJcblx0XHJcblx0LyoqXHJcblx0ICogQGRlc2NyaXB0aW9uIEhhYmlsaXRhIGVsIGJvdMOzbiBwYXJhIGFjdGl2YXIgZWwgY2FtcG9cclxuXHQgKiBAZGVmYXVsdCBmYWxzZVxyXG5cdCAqIEB0eXBlIGJvb2xlYW5cclxuXHQgKi9cclxuXHRASW5wdXQoKSBidG5FbmFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gVmFsb3IgcGFyYSBlbCBhdHJpYnV0byBhdXRvY29tcGxldGUgZGVsIGlucHV0XHJcblx0ICogQGRlZmF1bHQgXCJuby1hdXRvY29tcGxldGUtaW5wdXQtbnVtYmVyXCJcclxuXHQgKiBAdHlwZSBzdHJpbmdcclxuXHQgKi9cclxuXHRASW5wdXQoKSBhdXRvY29tcGxldGU6IHN0cmluZyA9ICduby1hdXRvY29tcGxldGUtaW5wdXQtbnVtYmVyJztcclxuXHRcclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gQXBsaWNhIGVzdGlsbyBuZWdyaXRhIGFsIHRleHRvXHJcblx0ICogQGRlZmF1bHQgZmFsc2VcclxuXHQgKiBAdHlwZSBib29sZWFuXHJcblx0ICovXHJcblx0QElucHV0KCkgYm9sZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIEBkZXNjcmlwdGlvbiBOw7ptZXJvIGRlIGRlY2ltYWxlcyBhIG1vc3RyYXIgKC0xIHBhcmEgbm8gZXNwZWNpZmljYXIpXHJcblx0ICogQGRlZmF1bHQgLTFcclxuXHQgKiBAdHlwZSBudW1iZXJcclxuXHQgKi9cclxuXHRASW5wdXQoKSBkZWNpbWFsczogbnVtYmVyID0gLTE7XHJcblx0XHJcblx0LyoqXHJcblx0ICogQGRlc2NyaXB0aW9uIEZvcm1hdGVhIHZhbG9yZXMgdmFjw61vcyBjb21vIGNlcm9cclxuXHQgKiBAZGVmYXVsdCBmYWxzZVxyXG5cdCAqIEB0eXBlIGJvb2xlYW5cclxuXHQgKi9cclxuXHRASW5wdXQoKSBmb3JtYXRDZXJvOiBib29sZWFuID0gZmFsc2U7XHJcblx0XHJcblx0LyoqXHJcblx0ICogQGRlc2NyaXB0aW9uIExvbmdpdHVkIG3DoXhpbWEgcGVybWl0aWRhIHBhcmEgZWwgbsO6bWVyb1xyXG5cdCAqIEBkZWZhdWx0IG51bGxcclxuXHQgKiBAdHlwZSBhbnlcclxuXHQgKi9cclxuXHRASW5wdXQoKSBtYXhMZW5ndGg6IGFueSA9IG51bGw7XHJcblx0XHJcblx0LyoqXHJcblx0ICogQGRlc2NyaXB0aW9uIFJlZmVyZW5jaWEgYWwgc2lndWllbnRlIGNvbnRyb2wgcGFyYSBuYXZlZ2FjacOzblxyXG5cdCAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG5cdCAqIEB0eXBlIGFueVxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIG5leHQ6IGFueTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNpYSBhbCBjb250cm9sIGFsdGVybmF0aXZvIGN1YW5kbyBlbCBzaWd1aWVudGUgZXN0w6EgZGVzaGFiaWxpdGFkb1xyXG5cdCAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG5cdCAqIEB0eXBlIGFueVxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIG5leHRJc0Rpc2FibGU6IGFueTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNpYSBhbCBjb250cm9sIGFudGVyaW9yIHBhcmEgbmF2ZWdhY2nDs25cclxuXHQgKiBAZGVmYXVsdCB1bmRlZmluZWRcclxuXHQgKiBAdHlwZSBhbnlcclxuXHQgKi9cclxuXHRASW5wdXQoKSBiYWNrOiBhbnk7XHJcblx0XHJcblx0LyoqXHJcblx0ICogQGRlc2NyaXB0aW9uIFJlZmVyZW5jaWEgYWwgY29udHJvbCBhbHRlcm5hdGl2byBjdWFuZG8gZWwgYW50ZXJpb3IgZXN0w6EgZGVzaGFiaWxpdGFkb1xyXG5cdCAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG5cdCAqIEB0eXBlIGFueVxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIGJhY2tJc0Rpc2FibGU6IGFueTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gSW5kaWNhIHNpIGVsIGNhbXBvIGVzIG9ibGlnYXRvcmlvXHJcblx0ICogQGRlZmF1bHQgZmFsc2VcclxuXHQgKiBAdHlwZSBib29sZWFuXHJcblx0ICovXHJcblx0QElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gRGVzaGFiaWxpdGEgZWwgY29udHJvbFxyXG5cdCAqIEBkZWZhdWx0IGZhbHNlXHJcblx0ICogQHR5cGUgYm9vbGVhblxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblx0XHJcblx0LyoqXHJcblx0ICogQGRlc2NyaXB0aW9uIEVzdGFibGVjZSBlbCBjb250cm9sIGNvbW8gc29sbyBsZWN0dXJhXHJcblx0ICogQGRlZmF1bHQgZmFsc2VcclxuXHQgKiBAdHlwZSBib29sZWFuXHJcblx0ICovXHJcblx0QElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSBtZW5zYWplcyBkZSB2YWxpZGFjacOzblxyXG5cdCAqIEBkZWZhdWx0IGZhbHNlXHJcblx0ICogQHR5cGUgYm9vbGVhblxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIHZhbGlkYXRvck1lc3NhZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSBtZW5zYWplcyBkZSBheXVkYSBjb21vIHRvb2x0aXBzXHJcblx0ICogQGRlZmF1bHQgdHJ1ZVxyXG5cdCAqIEB0eXBlIGJvb2xlYW5cclxuXHQgKi9cclxuXHRASW5wdXQoKSB0b29sdGlwTWVzc2FnZTogYm9vbGVhbiA9IHRydWU7XHJcblx0XHJcblx0LyoqXHJcblx0ICogQGRlc2NyaXB0aW9uIEluZGljYSBzaSBlbCBmb3JtdWxhcmlvIGhhIHNpZG8gZW52aWFkbyBwYXJhIG1vc3RyYXIgdmFsaWRhY2lvbmVzXHJcblx0ICogQGRlZmF1bHQgdHJ1ZVxyXG5cdCAqIEB0eXBlIGJvb2xlYW5cclxuXHQgKi9cclxuXHRASW5wdXQoKSBzdWJtaXR0ZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIEBkZXNjcmlwdGlvbiBIYWJpbGl0YSBpbmZvcm1hY2nDs24gYWRpY2lvbmFsIHBhcmEgbGEgZXRpcXVldGFcclxuXHQgKiBAZGVmYXVsdCBmYWxzZVxyXG5cdCAqIEB0eXBlIGJvb2xlYW5cclxuXHQgKi9cclxuXHRASW5wdXQoKSBsYWJlbEluZm86IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gVGV4dG8gaW5mb3JtYXRpdm8gYWRpY2lvbmFsIHBhcmEgbGEgZXRpcXVldGFcclxuXHQgKiBAZGVmYXVsdCBcIlwiXHJcblx0ICogQHR5cGUgc3RyaW5nXHJcblx0ICovXHJcblx0QElucHV0KCkgdGV4dExhYmVsSW5mbzogc3RyaW5nID0gJyc7XHJcblx0XHJcblx0LyoqXHJcblx0ICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgYWxlcnRhcyBkZSB2YWxpZGFjacOzblxyXG5cdCAqIEBkZWZhdWx0IGZhbHNlXHJcblx0ICogQHR5cGUgYm9vbGVhblxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIHZhbGlkYXRvckFsZXJ0OiBib29sZWFuID0gZmFsc2U7XHJcblx0XHJcblx0LyoqXHJcblx0ICogQGRlc2NyaXB0aW9uIENsYXNlcyBDU1MgYWRpY2lvbmFsZXMgcGFyYSBlbCBjb21wb25lbnRlXHJcblx0ICogQGRlZmF1bHQgXCJcIlxyXG5cdCAqIEB0eXBlIHN0cmluZ1xyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIHNldE5nQ2xhc3M6IHN0cmluZyA9ICcnO1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIEBkZXNjcmlwdGlvbiBUZXh0byBkZSBwbGFjZWhvbGRlciBwYXJhIGVsIGlucHV0XHJcblx0ICogQGRlZmF1bHQgXCJcIlxyXG5cdCAqIEB0eXBlIHN0cmluZ1xyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcclxuXHRcclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gUGVybWl0ZSB2YWxvcmVzIG5lZ2F0aXZvc1xyXG5cdCAqIEBkZWZhdWx0IGZhbHNlXHJcblx0ICogQHR5cGUgYm9vbGVhblxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIGFsbG93TmVnYXRpdmVOdW1iZXJzOiBib29sZWFuID0gZmFsc2U7XHJcblx0QE91dHB1dCgpIG9uTmV4dDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblx0QE91dHB1dCgpIG9uQmFjazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblx0QE91dHB1dCgpIGNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblx0QE91dHB1dCgpIG9uY2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHRAT3V0cHV0KCkgYmx1cjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblx0QE91dHB1dCgpIG9uZm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cdEBPdXRwdXQoKSBvbmZvY3Vzb3V0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHRAVmlld0NoaWxkKCdpbnB1dFRleHQnKSBpbnB1dFRleHQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG5cclxuXHRzaGFyZWRDb21wb25lbnRzVXRpbCA9IG5ldyBTaGFyZWRDb21wb25lbnRzVXRpbCgpO1xyXG5cclxuXHRmb3JtYXQgPSAnc2VwYXJhdG9yJztcclxuXHJcblx0Y29udHJvbHM6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgPSBudWxsO1xyXG5cdHZhbHVlOiBhbnk7XHJcblx0dmFsdWVFbWl0OiBhbnk7XHJcblx0X2luaXRWYWx1ZSA9IGZhbHNlO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgbWVzc2FnZVV0aWxTZXJ2aWNlOiBNZXNzYWdlVXRpbFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGlucHV0TnVtYmVyU2VydmljZTogSW5wdXROdW1iZXJTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBfcmVuZGVyOiBSZW5kZXJlcjJcclxuXHQpIHtcclxuXHRcdHRoaXMuZGVjaW1hbHMgPSB0aGlzLmlucHV0TnVtYmVyU2VydmljZS5nZXREZWNpbWFscygpO1xyXG5cdFx0dGhpcy5mb3JtYXRDZXJvID0gdGhpcy5pbnB1dE51bWJlclNlcnZpY2UuZ2V0Rm9ybWF0Q2VybygpO1xyXG5cdFx0dGhpcy5idG5FbmFibGUgPSB0aGlzLmlucHV0TnVtYmVyU2VydmljZS5nZXRCdG5FbmFibGUoKTtcclxuXHRcdHRoaXMuYm9sZCA9IHRoaXMuaW5wdXROdW1iZXJTZXJ2aWNlLmdldEJvbGQoKTtcclxuXHRcdHRoaXMudmFsaWRhdG9yTWVzc2FnZSA9IHRoaXMuaW5wdXROdW1iZXJTZXJ2aWNlLmdldFZhbGlkYXRvck1lc3NhZ2UoKTtcclxuXHRcdHRoaXMudG9vbHRpcE1lc3NhZ2UgPSB0aGlzLmlucHV0TnVtYmVyU2VydmljZS5nZXRUb29sdGlwTWVzc2FnZSgpO1xyXG5cdFx0dGhpcy5zdWJtaXR0ZWQgPSB0aGlzLmlucHV0TnVtYmVyU2VydmljZS5nZXRTdWJtaXR0ZWQoKTtcclxuXHRcdHRoaXMudmFsaWRhdG9yQWxlcnQgPSB0aGlzLmlucHV0TnVtYmVyU2VydmljZS5nZXRWYWxpZGF0b3JBbGVydCgpO1xyXG5cdH1cclxuXHJcblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG5cdFx0aWYgKGNoYW5nZXNbJ3N1Ym1pdHRlZCddKSB7XHJcblx0XHRcdGlmICh0aGlzLmNvbnRyb2xzICE9IG51bGwgJiYgY2hhbmdlc1snc3VibWl0dGVkJ10uY3VycmVudFZhbHVlKSB7XHJcblx0XHRcdFx0dGhpcy5jb250cm9scy5tYXJrQXNEaXJ0eSgpO1xyXG5cdFx0XHRcdHRoaXMuY29udHJvbHMubWFya0FzVG91Y2hlZCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHRcdGlmICh0aGlzLmRlY2ltYWxzICE9IC0xKSB7XHJcblx0XHRcdHRoaXMuZm9ybWF0ID0gJ3NlcGFyYXRvcicgKyAnLicgKyB0aGlzLmRlY2ltYWxzLnRvU3RyaW5nKCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmZvcm1hdCA9ICdzZXBhcmF0b3InO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge31cclxuXHJcblx0b25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcclxuXHRvblZhbGlkYXRpb25DaGFuZ2UgPSAoKSA9PiB7fTtcclxuXHRvblRvdWNoID0gKCkgPT4ge307XHJcblx0Zm9jdXMgPSAoKSA9PiB7XHJcblx0XHR0aGlzLmlucHV0VGV4dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcblx0XHR0aGlzLmlucHV0VGV4dC5uYXRpdmVFbGVtZW50LnNlbGVjdCgpO1xyXG5cdH07XHJcblxyXG5cdG9uQmx1cih2YWx1ZTogYW55KSB7XHJcblx0XHR0aGlzLm9uVG91Y2goKTtcclxuXHRcdGlmICgodmFsdWUgPT0gJycgfHwgdmFsdWUgPT0gbnVsbCkgJiYgdGhpcy5mb3JtYXRDZXJvKSB7XHJcblx0XHRcdHZhbHVlID0gMDtcclxuXHRcdH1cclxuXHRcdGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5mb3JtYXROdW1iZXIodmFsdWUpO1xyXG5cclxuXHRcdGlmICh0aGlzLnZhbHVlICE9PSBuZXdWYWx1ZSkge1xyXG5cdFx0XHR0aGlzLnZhbHVlID0gbmV3VmFsdWU7XHJcblx0XHRcdHRoaXMub25DaGFuZ2UodGhpcy5lbWl0VmFsdWUobmV3VmFsdWUpKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBpZiAobmV3VmFsdWUpIHtcclxuXHRcdHRoaXMub25WYWxpZGF0aW9uQ2hhbmdlKCk7XHJcblx0XHR0aGlzLmJsdXIuZW1pdCh0aGlzLmVtaXRWYWx1ZShuZXdWYWx1ZSkpO1xyXG5cdFx0Ly8gfVxyXG5cdH1cclxuXHJcblx0b25Gb2N1cyhldnQ6IGFueSkge1xyXG5cdFx0dGhpcy5pbnB1dFRleHQubmF0aXZlRWxlbWVudC5zZWxlY3QoKTtcclxuXHRcdHRoaXMub25mb2N1cy5lbWl0KGV2dCk7XHJcblx0fVxyXG5cclxuXHRvbklucHV0KGV2dDogYW55KSB7XHJcblx0XHR0aGlzLm9uVG91Y2goKTtcclxuXHRcdHRoaXMub25DaGFuZ2UodGhpcy5lbWl0VmFsdWUoZXZ0KSk7XHJcblx0XHR0aGlzLm9uVmFsaWRhdGlvbkNoYW5nZSgpO1xyXG5cdFx0dGhpcy5jaGFuZ2UuZW1pdCh0aGlzLmVtaXRWYWx1ZShldnQpKTtcclxuXHRcdHRoaXMub25jaGFuZ2UuZW1pdCh0aGlzLmVtaXRWYWx1ZShldnQpKTtcclxuXHR9XHJcblxyXG5cdHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG5cdFx0aWYgKHZhbHVlICE9IG51bGwpIHtcclxuXHRcdFx0dGhpcy52YWx1ZSA9IHRoaXMuZm9ybWF0TnVtYmVyKHZhbHVlKTtcclxuXHJcblx0XHRcdGlmICh0aGlzLnZhbHVlID09PSAnTmFOJykge1xyXG5cdFx0XHRcdGlmICh0aGlzLmNvbnRyb2xzKSB7XHJcblx0XHRcdFx0XHR0aGlzLl9yZW5kZXIuc2V0UHJvcGVydHkodGhpcy5jb250cm9scywgJ3ZhbHVlJywgbnVsbCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignTm90IGEgbnVtYmVyJyk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh0aGlzLmNvbnRyb2xzKSB7XHJcblx0XHRcdFx0dGhpcy5fcmVuZGVyLnNldFByb3BlcnR5KHRoaXMuY29udHJvbHMsICd2YWx1ZScsIE51bWJlcih0aGlzLnZhbHVlKSk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMudmFsdWUgPSBudWxsO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcblx0XHR0aGlzLm9uQ2hhbmdlID0gZm47XHJcblx0fVxyXG5cclxuXHRyZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcblx0XHR0aGlzLm9uVG91Y2ggPSBmbjtcclxuXHR9XHJcblxyXG5cdHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG5cdFx0dGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcblx0fVxyXG5cclxuXHR2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgYW55IHtcclxuXHRcdHRoaXMuY29udHJvbHMgPSBjb250cm9sO1xyXG5cclxuXHRcdGlmICghdGhpcy5faW5pdFZhbHVlKSB7XHJcblx0XHRcdGlmICh0aGlzLnZhbHVlID09PSAnTmFOJykge1xyXG5cdFx0XHRcdHRoaXMuX3JlbmRlci5zZXRQcm9wZXJ0eSh0aGlzLmNvbnRyb2xzLCAndmFsdWUnLCBudWxsKTtcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ05vdCBhIG51bWJlcicpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAodGhpcy52YWx1ZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdHRoaXMuX3JlbmRlci5zZXRQcm9wZXJ0eSh0aGlzLmNvbnRyb2xzLCAndmFsdWUnLCBOdW1iZXIodGhpcy52YWx1ZSkpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuX2luaXRWYWx1ZSA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRyZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlPyhmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG5cdFx0dGhpcy5vblZhbGlkYXRpb25DaGFuZ2UgPSBmbjtcclxuXHR9XHJcblxyXG5cdGZvcm1hdE51bWJlcih2YWx1ZTogYW55KSB7XHJcblx0XHRpZiAodmFsdWUgIT0gbnVsbCkge1xyXG5cdFx0XHR2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5kZWNpbWFscyAhPSBudWxsICYmIHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT0gJycpIHtcclxuXHRcdFx0aWYgKHRoaXMuZGVjaW1hbHMgPiAwKSB7XHJcblx0XHRcdFx0cmV0dXJuIE51bWJlcih2YWx1ZS5yZXBsYWNlQWxsKCcsJywgJycpKS50b0ZpeGVkKHRoaXMuZGVjaW1hbHMpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJldHVybiBOdW1iZXIodmFsdWUucmVwbGFjZUFsbCgnLCcsICcnKSkudG9GaXhlZCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPSAnJykge1xyXG5cdFx0XHRcdHJldHVybiBOdW1iZXIodmFsdWUucmVwbGFjZUFsbCgnLCcsICcnKSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGVtaXRWYWx1ZSh2YWx1ZTogYW55KSB7XHJcblx0XHRpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPSAnJykge1xyXG5cdFx0XHRpZiAodGhpcy5kZWNpbWFscyAhPSBudWxsKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMuZGVjaW1hbHMgPiAwKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gTnVtYmVyKE51bWJlcih2YWx1ZS5yZXBsYWNlQWxsKCcsJywgJycpKS50b0ZpeGVkKHRoaXMuZGVjaW1hbHMpKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0cmV0dXJuIE51bWJlcihOdW1iZXIodmFsdWUucmVwbGFjZUFsbCgnLCcsICcnKSkudG9GaXhlZCgpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmV0dXJuIE51bWJlcih2YWx1ZS5yZXBsYWNlQWxsKCcsJywgJycpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRlbnRlcktleVVwKCkge1xyXG5cdFx0aWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcblx0XHRcdGxldCB2YWxpZGF0b3IgPSB0aGlzLnNoYXJlZENvbXBvbmVudHNVdGlsLnN0b3BCeVZhbGlkYXRvcih0aGlzLmNvbnRyb2xzLCB0aGlzLnZhbGlkYXRvckFsZXJ0LCB0aGlzLmxhYmVsKTtcclxuXHRcdFx0aWYgKHZhbGlkYXRvci5lcnJvcikge1xyXG5cdFx0XHRcdHRoaXMubWVzc2FnZVV0aWxTZXJ2aWNlLmdldE1lc3NhZ2VFcnJvcignMDAwMDQ2JywgJ0Vycm9yJywgdmFsaWRhdG9yLm1lc3NhZ2UpO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMubmV4dCAhPSB1bmRlZmluZWQpIHtcclxuXHRcdFx0aWYgKHRoaXMubmV4dC5kaXNhYmxlZCB8fCB0aGlzLm5leHQucmVhZG9ubHkpIHtcclxuXHRcdFx0XHRpZiAodGhpcy5uZXh0SXNEaXNhYmxlICE9IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5uZXh0SXNEaXNhYmxlLmZvY3VzKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMubmV4dC5mb2N1cygpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAodGhpcy5uZXh0SXNEaXNhYmxlICE9IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdHRoaXMubmV4dElzRGlzYWJsZS5mb2N1cygpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMub25OZXh0LmVtaXQoKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXJyb3dVcEtleVVwKCkge1xyXG5cdFx0aWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcblx0XHRcdGxldCB2YWxpZGF0b3IgPSB0aGlzLnNoYXJlZENvbXBvbmVudHNVdGlsLnN0b3BCeVZhbGlkYXRvcih0aGlzLmNvbnRyb2xzLCB0aGlzLnZhbGlkYXRvckFsZXJ0LCB0aGlzLmxhYmVsKTtcclxuXHRcdFx0aWYgKHZhbGlkYXRvci5lcnJvcikge1xyXG5cdFx0XHRcdHRoaXMubWVzc2FnZVV0aWxTZXJ2aWNlLmdldE1lc3NhZ2VFcnJvcignMDAwMDQ2JywgJ0Vycm9yJywgdmFsaWRhdG9yLm1lc3NhZ2UpO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuYmFjayAhPSB1bmRlZmluZWQpIHtcclxuXHRcdFx0aWYgKHRoaXMuYmFjay5kaXNhYmxlZCB8fCB0aGlzLmJhY2sucmVhZG9ubHkpIHtcclxuXHRcdFx0XHRpZiAodGhpcy5iYWNrSXNEaXNhYmxlICE9IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5iYWNrSXNEaXNhYmxlLmZvY3VzKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuYmFjay5mb2N1cygpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAodGhpcy5iYWNrSXNEaXNhYmxlICE9IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdHRoaXMuYmFja0lzRGlzYWJsZS5mb2N1cygpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMub25CYWNrLmVtaXQoKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0b25Gb2N1c091dChldnQ6IGFueSkge1xyXG5cdFx0dGhpcy5vbmZvY3Vzb3V0LmVtaXQoZXZ0KTtcclxuXHRcdGlmICh0aGlzLmJ0bkVuYWJsZSkge1xyXG5cdFx0XHR0aGlzLmRpc2FibGVkID0gdHJ1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNsaWNrRW5hYmxlKCkge1xyXG5cdFx0dGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xyXG5cdFx0dGhpcy5yZWFkb25seSA9IGZhbHNlO1xyXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdHRoaXMuZm9jdXMoKTtcclxuXHRcdH0sIDE1MCk7XHJcblx0fVxyXG59XHJcbiIsIjxsYWJlbCAqbmdJZj1cImxhYmVsICE9IG51bGwgJiYgbGFiZWwgIT0gJycgJiYgc2hvd0xhYmVsXCIgY2xhc3M9XCJkLWZsZXggc3VtYXgtbGFiZWwgbWItMCBwLTBcIlxyXG5cdD48c3BhbiBbdGl0bGVdPVwibGFiZWxcIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXA7IG92ZXJmbG93OiBoaWRkZW47IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzXCI+e3sgbGFiZWwgfX08L3NwYW4+XHJcblx0PHNwYW4gKm5nSWY9XCJyZXF1aXJlZFwiIGNsYXNzPVwibXMtMVwiIFtjbGFzcy50ZXh0LWRhbmdlcl09XCJjb250cm9scz8uZXJyb3JzICE9IG51bGxcIj4gKjwvc3Bhbj5cclxuXHQ8c3BhbiAqbmdJZj1cImxhYmVsSW5mb1wiPlxyXG5cdFx0PGkgY2xhc3M9XCJmYSBmYS1leGNsYW1hdGlvbi1jaXJjbGUgdGV4dC1pbmZvIG1zLTJcIiBbbWF0VG9vbHRpcF09XCJ0ZXh0TGFiZWxJbmZvXCIgbWF0VG9vbHRpcENsYXNzPVwiYmctaW5mb1wiPjwvaT5cclxuXHQ8L3NwYW4+XHJcbjwvbGFiZWw+XHJcbjxkaXZcclxuXHRbY2xhc3MuaW5wdXQtaWNvbl09XCJjb250cm9scz8uZXJyb3JzICE9IG51bGwgJiYgKGNvbnRyb2xzPy5kaXJ0eSB8fCBjb250cm9scz8udG91Y2hlZCkgJiYgc3VibWl0dGVkXCJcclxuXHRbY2xhc3MucmlnaHRdPVwiY29udHJvbHM/LmVycm9ycyAhPSBudWxsICYmIChjb250cm9scz8uZGlydHkgfHwgY29udHJvbHM/LnRvdWNoZWQpICYmIHN1Ym1pdHRlZFwiXHJcbj5cclxuXHQ8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcblx0XHQ8ZGl2IGNsYXNzPVwidy0xMDAgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuXHRcdFx0PHRvb2x0aXAtbWVzc2FnZVxyXG5cdFx0XHRcdFtsYWJlbF09XCJsYWJlbFwiXHJcblx0XHRcdFx0W2NvbnRyb2xzXT1cImNvbnRyb2xzXCJcclxuXHRcdFx0XHRbdmFsaWRhdG9yTWVzc2FnZV09XCJ2YWxpZGF0b3JNZXNzYWdlXCJcclxuXHRcdFx0XHRbdG9vbHRpcE1lc3NhZ2VdPVwidG9vbHRpcE1lc3NhZ2VcIlxyXG5cdFx0XHRcdFtzdWJtaXR0ZWRdPVwic3VibWl0dGVkXCJcclxuXHRcdFx0PjwvdG9vbHRpcC1tZXNzYWdlPlxyXG5cdFx0XHQ8aW5wdXRcclxuXHRcdFx0XHQjaW5wdXRUZXh0XHJcblx0XHRcdFx0dHlwZT1cInRleHRcIlxyXG5cdFx0XHRcdGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSB0ZXh0LWVuZFwiXHJcblx0XHRcdFx0W2NsYXNzLmlzLWludmFsaWRdPVwiY29udHJvbHM/LmVycm9ycyAhPSBudWxsICYmIChjb250cm9scz8uZGlydHkgfHwgY29udHJvbHM/LnRvdWNoZWQpICYmIHN1Ym1pdHRlZFwiXHJcblx0XHRcdFx0WyhuZ01vZGVsKV09XCJ2YWx1ZVwiXHJcblx0XHRcdFx0W2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuXHRcdFx0XHRbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG5cdFx0XHRcdFttYXNrXT1cImZvcm1hdFwiXHJcblx0XHRcdFx0dGhvdXNhbmRTZXBhcmF0b3I9XCIsXCJcclxuXHRcdFx0XHQoYmx1cik9XCJvbkJsdXIoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIlxyXG5cdFx0XHRcdChpbnB1dCk9XCJvbklucHV0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcclxuXHRcdFx0XHQoZm9jdXNvdXQpPVwib25Gb2N1c091dCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXHJcblx0XHRcdFx0W2F0dHIuYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXHJcblx0XHRcdFx0W3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuXHRcdFx0XHQoZm9jdXMpPVwib25Gb2N1cygkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXHJcblx0XHRcdFx0W2F0dHIubWF4TGVuZ3RoXT1cIm1heExlbmd0aFwiXHJcblx0XHRcdFx0KGtleXVwLmVudGVyKT1cImVudGVyS2V5VXAoKVwiXHJcblx0XHRcdFx0KGtleXVwLkFycm93VXApPVwiYXJyb3dVcEtleVVwKClcIlxyXG5cdFx0XHRcdFtuZ0NsYXNzXT1cInNldE5nQ2xhc3NcIlxyXG5cdFx0XHRcdFtjbGFzcy5ib2xkXT1cImJvbGRcIlxyXG5cdFx0XHRcdFthbGxvd05lZ2F0aXZlTnVtYmVyc109XCJhbGxvd05lZ2F0aXZlTnVtYmVyc1wiXHJcblx0XHRcdFx0W2xlYWRaZXJvXT1cIiFhbGxvd05lZ2F0aXZlTnVtYmVyc1wiXHJcblx0XHRcdC8+XHJcblx0XHQ8L2Rpdj5cclxuXHRcdDxkaXYgY2xhc3M9XCJiZC1oaWdobGlnaHRcIiAqbmdJZj1cImJ0bkVuYWJsZVwiPlxyXG5cdFx0XHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4taW5mbyBwLTAgcm91bmRlZC0wIGgtMTAwXCIgKGNsaWNrKT1cImNsaWNrRW5hYmxlKClcIj5cclxuXHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHRleHQtd2hpdGUgcHgtMVwiIFttYXRUb29sdGlwXT1cIidIYWJpbGl0YXInXCIgbWF0VG9vbHRpcENsYXNzPVwiYmctaW5mb1wiPjwvaT5cclxuXHRcdFx0PC9idXR0b24+XHJcblx0XHQ8L2Rpdj5cclxuXHRcdDxuZy1jb250ZW50IHNlbGVjdD1cIlttb3JlLWJ1dHRvbnNdXCI+PC9uZy1jb250ZW50PlxyXG5cdDwvZGl2PlxyXG48L2Rpdj5cclxuPGVycm9yLW1lc3NhZ2VcclxuXHRbbGFiZWxdPVwibGFiZWxcIlxyXG5cdFtjb250cm9sc109XCJjb250cm9sc1wiXHJcblx0W3ZhbGlkYXRvck1lc3NhZ2VdPVwidmFsaWRhdG9yTWVzc2FnZVwiXHJcblx0W3Rvb2x0aXBNZXNzYWdlXT1cInRvb2x0aXBNZXNzYWdlXCJcclxuXHRbc3VibWl0dGVkXT1cInN1Ym1pdHRlZFwiXHJcbj48L2Vycm9yLW1lc3NhZ2U+XHJcbiJdfQ==
459
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtbnVtYmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdW1heC1lcnAtY29tcG9uZW50L3NyYy9saWIvaW5wdXQtbnVtYmVyL2lucHV0LW51bWJlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3VtYXgtZXJwLWNvbXBvbmVudC9zcmMvbGliL2lucHV0LW51bWJlci9pbnB1dC1udW1iZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVOLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTixhQUFhLEVBQ2IsaUJBQWlCLEVBRWpCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7Ozs7QUFvQnJFLE1BQU0sT0FBTyxvQkFBb0I7SUFrTWhDLFlBQ1Msa0JBQXNDLEVBQ3RDLGtCQUFzQyxFQUN0QyxPQUFrQjtRQUZsQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsWUFBTyxHQUFQLE9BQU8sQ0FBVztRQXBNM0I7Ozs7V0FJRztRQUNNLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFFbkM7Ozs7V0FJRztRQUNNLFVBQUssR0FBUSxJQUFJLENBQUM7UUFFM0I7Ozs7V0FJRztRQUNNLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFFcEM7Ozs7V0FJRztRQUNNLGlCQUFZLEdBQVcsOEJBQThCLENBQUM7UUFFL0Q7Ozs7V0FJRztRQUNNLFNBQUksR0FBWSxLQUFLLENBQUM7UUFFL0I7Ozs7V0FJRztRQUNNLGFBQVEsR0FBVyxDQUFDLENBQUMsQ0FBQztRQUUv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TTtzQkFBZixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ2lCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0QWZ0ZXJWaWV3SW5pdCxcclxuXHRDb21wb25lbnQsXHJcblx0RWxlbWVudFJlZixcclxuXHRFdmVudEVtaXR0ZXIsXHJcblx0Zm9yd2FyZFJlZixcclxuXHRJbnB1dCxcclxuXHRPbkNoYW5nZXMsXHJcblx0T25Jbml0LFxyXG5cdE91dHB1dCxcclxuXHRSZW5kZXJlcjIsXHJcblx0U2ltcGxlQ2hhbmdlcyxcclxuXHRWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuXHRBYnN0cmFjdENvbnRyb2wsXHJcblx0Q29udHJvbFZhbHVlQWNjZXNzb3IsXHJcblx0TkdfVkFMSURBVE9SUyxcclxuXHROR19WQUxVRV9BQ0NFU1NPUixcclxuXHRWYWxpZGF0aW9uRXJyb3JzXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBJbnB1dE51bWJlclNlcnZpY2UgfSBmcm9tICcuL2lucHV0LW51bWJlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2hhcmVkQ29tcG9uZW50c1V0aWwgfSBmcm9tICcuLi91dGlscy9TaGFyZWRDb21wb25lbnRzVXRpbCc7XHJcbmltcG9ydCB7IE1lc3NhZ2VVdGlsU2VydmljZSB9IGZyb20gJy4uL3V0aWxzL21lc3NhZ2UtdXRpbC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnaW5wdXQtbnVtYmVyJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vaW5wdXQtbnVtYmVyLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9pbnB1dC1udW1iZXIuY29tcG9uZW50LnNjc3MnXSxcclxuXHRwcm92aWRlcnM6IFtcclxuXHRcdHtcclxuXHRcdFx0cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcblx0XHRcdHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElucHV0TnVtYmVyQ29tcG9uZW50KSxcclxuXHRcdFx0bXVsdGk6IHRydWVcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcblx0XHRcdHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElucHV0TnVtYmVyQ29tcG9uZW50KSxcclxuXHRcdFx0bXVsdGk6IHRydWVcclxuXHRcdH1cclxuXHRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnB1dE51bWJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblx0LyoqXHJcblx0ICogQGRlc2NyaXB0aW9uIENvbnRyb2xhIGxhIHZpc3VhbGl6YWNpw7NuIGRlbCB0ZXh0byBzdXBlcmlvciAobGFiZWwpXHJcblx0ICogQGRlZmF1bHQgdHJ1ZVxyXG5cdCAqIEB0eXBlIGJvb2xlYW5cclxuXHQgKi9cclxuXHRASW5wdXQoKSBzaG93TGFiZWw6IGJvb2xlYW4gPSB0cnVlO1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIEBkZXNjcmlwdGlvbiBUZXh0byBhIG1vc3RyYXIgY29tbyBldGlxdWV0YSBkZWwgY2FtcG9cclxuXHQgKiBAZGVmYXVsdCBudWxsXHJcblx0ICogQHR5cGUgYW55XHJcblx0ICovXHJcblx0QElucHV0KCkgbGFiZWw6IGFueSA9IG51bGw7XHJcblx0XHJcblx0LyoqXHJcblx0ICogQGRlc2NyaXB0aW9uIEhhYmlsaXRhIGVsIGJvdMOzbiBwYXJhIGFjdGl2YXIgZWwgY2FtcG9cclxuXHQgKiBAZGVmYXVsdCBmYWxzZVxyXG5cdCAqIEB0eXBlIGJvb2xlYW5cclxuXHQgKi9cclxuXHRASW5wdXQoKSBidG5FbmFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gVmFsb3IgcGFyYSBlbCBhdHJpYnV0byBhdXRvY29tcGxldGUgZGVsIGlucHV0XHJcblx0ICogQGRlZmF1bHQgXCJuby1hdXRvY29tcGxldGUtaW5wdXQtbnVtYmVyXCJcclxuXHQgKiBAdHlwZSBzdHJpbmdcclxuXHQgKi9cclxuXHRASW5wdXQoKSBhdXRvY29tcGxldGU6IHN0cmluZyA9ICduby1hdXRvY29tcGxldGUtaW5wdXQtbnVtYmVyJztcclxuXHRcclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gQXBsaWNhIGVzdGlsbyBuZWdyaXRhIGFsIHRleHRvXHJcblx0ICogQGRlZmF1bHQgZmFsc2VcclxuXHQgKiBAdHlwZSBib29sZWFuXHJcblx0ICovXHJcblx0QElucHV0KCkgYm9sZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIEBkZXNjcmlwdGlvbiBOw7ptZXJvIGRlIGRlY2ltYWxlcyBhIG1vc3RyYXIgKC0xIHBhcmEgbm8gZXNwZWNpZmljYXIpXHJcblx0ICogQGRlZmF1bHQgLTFcclxuXHQgKiBAdHlwZSBudW1iZXJcclxuXHQgKi9cclxuXHRASW5wdXQoKSBkZWNpbWFsczogbnVtYmVyID0gLTE7XHJcblx0XHJcblx0LyoqXHJcblx0ICogQGRlc2NyaXB0aW9uIEZvcm1hdGVhIHZhbG9yZXMgdmFjw61vcyBjb21vIGNlcm9cclxuXHQgKiBAZGVmYXVsdCBmYWxzZVxyXG5cdCAqIEB0eXBlIGJvb2xlYW5cclxuXHQgKi9cclxuXHRASW5wdXQoKSBmb3JtYXRDZXJvOiBib29sZWFuID0gZmFsc2U7XHJcblx0XHJcblx0LyoqXHJcblx0ICogQGRlc2NyaXB0aW9uIExvbmdpdHVkIG3DoXhpbWEgcGVybWl0aWRhIHBhcmEgZWwgbsO6bWVyb1xyXG5cdCAqIEBkZWZhdWx0IG51bGxcclxuXHQgKiBAdHlwZSBhbnlcclxuXHQgKi9cclxuXHRASW5wdXQoKSBtYXhMZW5ndGg6IGFueSA9IG51bGw7XHJcblx0XHJcblx0LyoqXHJcblx0ICogQGRlc2NyaXB0aW9uIFJlZmVyZW5jaWEgYWwgc2lndWllbnRlIGNvbnRyb2wgcGFyYSBuYXZlZ2FjacOzblxyXG5cdCAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG5cdCAqIEB0eXBlIGFueVxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIG5leHQ6IGFueTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNpYSBhbCBjb250cm9sIGFsdGVybmF0aXZvIGN1YW5kbyBlbCBzaWd1aWVudGUgZXN0w6EgZGVzaGFiaWxpdGFkb1xyXG5cdCAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG5cdCAqIEB0eXBlIGFueVxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIG5leHRJc0Rpc2FibGU6IGFueTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNpYSBhbCBjb250cm9sIGFudGVyaW9yIHBhcmEgbmF2ZWdhY2nDs25cclxuXHQgKiBAZGVmYXVsdCB1bmRlZmluZWRcclxuXHQgKiBAdHlwZSBhbnlcclxuXHQgKi9cclxuXHRASW5wdXQoKSBiYWNrOiBhbnk7XHJcblx0XHJcblx0LyoqXHJcblx0ICogQGRlc2NyaXB0aW9uIFJlZmVyZW5jaWEgYWwgY29udHJvbCBhbHRlcm5hdGl2byBjdWFuZG8gZWwgYW50ZXJpb3IgZXN0w6EgZGVzaGFiaWxpdGFkb1xyXG5cdCAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG5cdCAqIEB0eXBlIGFueVxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIGJhY2tJc0Rpc2FibGU6IGFueTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gSW5kaWNhIHNpIGVsIGNhbXBvIGVzIG9ibGlnYXRvcmlvXHJcblx0ICogQGRlZmF1bHQgZmFsc2VcclxuXHQgKiBAdHlwZSBib29sZWFuXHJcblx0ICovXHJcblx0QElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gRGVzaGFiaWxpdGEgZWwgY29udHJvbFxyXG5cdCAqIEBkZWZhdWx0IGZhbHNlXHJcblx0ICogQHR5cGUgYm9vbGVhblxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblx0XHJcblx0LyoqXHJcblx0ICogQGRlc2NyaXB0aW9uIEVzdGFibGVjZSBlbCBjb250cm9sIGNvbW8gc29sbyBsZWN0dXJhXHJcblx0ICogQGRlZmF1bHQgZmFsc2VcclxuXHQgKiBAdHlwZSBib29sZWFuXHJcblx0ICovXHJcblx0QElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSBtZW5zYWplcyBkZSB2YWxpZGFjacOzblxyXG5cdCAqIEBkZWZhdWx0IGZhbHNlXHJcblx0ICogQHR5cGUgYm9vbGVhblxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIHZhbGlkYXRvck1lc3NhZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSBtZW5zYWplcyBkZSBheXVkYSBjb21vIHRvb2x0aXBzXHJcblx0ICogQGRlZmF1bHQgdHJ1ZVxyXG5cdCAqIEB0eXBlIGJvb2xlYW5cclxuXHQgKi9cclxuXHRASW5wdXQoKSB0b29sdGlwTWVzc2FnZTogYm9vbGVhbiA9IHRydWU7XHJcblx0XHJcblx0LyoqXHJcblx0ICogQGRlc2NyaXB0aW9uIEluZGljYSBzaSBlbCBmb3JtdWxhcmlvIGhhIHNpZG8gZW52aWFkbyBwYXJhIG1vc3RyYXIgdmFsaWRhY2lvbmVzXHJcblx0ICogQGRlZmF1bHQgdHJ1ZVxyXG5cdCAqIEB0eXBlIGJvb2xlYW5cclxuXHQgKi9cclxuXHRASW5wdXQoKSBzdWJtaXR0ZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIEBkZXNjcmlwdGlvbiBIYWJpbGl0YSBpbmZvcm1hY2nDs24gYWRpY2lvbmFsIHBhcmEgbGEgZXRpcXVldGFcclxuXHQgKiBAZGVmYXVsdCBmYWxzZVxyXG5cdCAqIEB0eXBlIGJvb2xlYW5cclxuXHQgKi9cclxuXHRASW5wdXQoKSBsYWJlbEluZm86IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gVGV4dG8gaW5mb3JtYXRpdm8gYWRpY2lvbmFsIHBhcmEgbGEgZXRpcXVldGFcclxuXHQgKiBAZGVmYXVsdCBcIlwiXHJcblx0ICogQHR5cGUgc3RyaW5nXHJcblx0ICovXHJcblx0QElucHV0KCkgdGV4dExhYmVsSW5mbzogc3RyaW5nID0gJyc7XHJcblx0XHJcblx0LyoqXHJcblx0ICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgYWxlcnRhcyBkZSB2YWxpZGFjacOzblxyXG5cdCAqIEBkZWZhdWx0IGZhbHNlXHJcblx0ICogQHR5cGUgYm9vbGVhblxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIHZhbGlkYXRvckFsZXJ0OiBib29sZWFuID0gZmFsc2U7XHJcblx0XHJcblx0LyoqXHJcblx0ICogQGRlc2NyaXB0aW9uIENsYXNlcyBDU1MgYWRpY2lvbmFsZXMgcGFyYSBlbCBjb21wb25lbnRlXHJcblx0ICogQGRlZmF1bHQgXCJcIlxyXG5cdCAqIEB0eXBlIHN0cmluZ1xyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIHNldE5nQ2xhc3M6IHN0cmluZyA9ICcnO1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIEBkZXNjcmlwdGlvbiBUZXh0byBkZSBwbGFjZWhvbGRlciBwYXJhIGVsIGlucHV0XHJcblx0ICogQGRlZmF1bHQgXCJcIlxyXG5cdCAqIEB0eXBlIHN0cmluZ1xyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcclxuXHRcclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gUGVybWl0ZSB2YWxvcmVzIG5lZ2F0aXZvc1xyXG5cdCAqIEBkZWZhdWx0IGZhbHNlXHJcblx0ICogQHR5cGUgYm9vbGVhblxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIGFsbG93TmVnYXRpdmVOdW1iZXJzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiBEZXNoYWJpbGl0YSBlbCBzZXBhcmFkb3IgZGUgbWlsZXNcclxuICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAqIEB0eXBlIGJvb2xlYW5cclxuICAgKi9cclxuICBASW5wdXQoKSBkaXNhYmxlVGhvdXNhbmRTZXBhcmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0QE91dHB1dCgpIG9uTmV4dDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblx0QE91dHB1dCgpIG9uQmFjazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblx0QE91dHB1dCgpIGNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblx0QE91dHB1dCgpIG9uY2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHRAT3V0cHV0KCkgYmx1cjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblx0QE91dHB1dCgpIG9uZm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cdEBPdXRwdXQoKSBvbmZvY3Vzb3V0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHRAVmlld0NoaWxkKCdpbnB1dFRleHQnKSBpbnB1dFRleHQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG5cclxuXHRzaGFyZWRDb21wb25lbnRzVXRpbCA9IG5ldyBTaGFyZWRDb21wb25lbnRzVXRpbCgpO1xyXG5cclxuXHRmb3JtYXQgPSAnc2VwYXJhdG9yJztcclxuXHJcblx0Y29udHJvbHM6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgPSBudWxsO1xyXG5cdHZhbHVlOiBhbnk7XHJcblx0dmFsdWVFbWl0OiBhbnk7XHJcblx0X2luaXRWYWx1ZSA9IGZhbHNlO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgbWVzc2FnZVV0aWxTZXJ2aWNlOiBNZXNzYWdlVXRpbFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGlucHV0TnVtYmVyU2VydmljZTogSW5wdXROdW1iZXJTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBfcmVuZGVyOiBSZW5kZXJlcjJcclxuXHQpIHtcclxuXHRcdHRoaXMuZGVjaW1hbHMgPSB0aGlzLmlucHV0TnVtYmVyU2VydmljZS5nZXREZWNpbWFscygpO1xyXG5cdFx0dGhpcy5mb3JtYXRDZXJvID0gdGhpcy5pbnB1dE51bWJlclNlcnZpY2UuZ2V0Rm9ybWF0Q2VybygpO1xyXG5cdFx0dGhpcy5idG5FbmFibGUgPSB0aGlzLmlucHV0TnVtYmVyU2VydmljZS5nZXRCdG5FbmFibGUoKTtcclxuXHRcdHRoaXMuYm9sZCA9IHRoaXMuaW5wdXROdW1iZXJTZXJ2aWNlLmdldEJvbGQoKTtcclxuXHRcdHRoaXMudmFsaWRhdG9yTWVzc2FnZSA9IHRoaXMuaW5wdXROdW1iZXJTZXJ2aWNlLmdldFZhbGlkYXRvck1lc3NhZ2UoKTtcclxuXHRcdHRoaXMudG9vbHRpcE1lc3NhZ2UgPSB0aGlzLmlucHV0TnVtYmVyU2VydmljZS5nZXRUb29sdGlwTWVzc2FnZSgpO1xyXG5cdFx0dGhpcy5zdWJtaXR0ZWQgPSB0aGlzLmlucHV0TnVtYmVyU2VydmljZS5nZXRTdWJtaXR0ZWQoKTtcclxuXHRcdHRoaXMudmFsaWRhdG9yQWxlcnQgPSB0aGlzLmlucHV0TnVtYmVyU2VydmljZS5nZXRWYWxpZGF0b3JBbGVydCgpO1xyXG5cdH1cclxuXHJcblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG5cdFx0aWYgKGNoYW5nZXNbJ3N1Ym1pdHRlZCddKSB7XHJcblx0XHRcdGlmICh0aGlzLmNvbnRyb2xzICE9IG51bGwgJiYgY2hhbmdlc1snc3VibWl0dGVkJ10uY3VycmVudFZhbHVlKSB7XHJcblx0XHRcdFx0dGhpcy5jb250cm9scy5tYXJrQXNEaXJ0eSgpO1xyXG5cdFx0XHRcdHRoaXMuY29udHJvbHMubWFya0FzVG91Y2hlZCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHRcdGlmICh0aGlzLmRlY2ltYWxzICE9IC0xKSB7XHJcblx0XHRcdHRoaXMuZm9ybWF0ID0gJ3NlcGFyYXRvcicgKyAnLicgKyB0aGlzLmRlY2ltYWxzLnRvU3RyaW5nKCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmZvcm1hdCA9ICdzZXBhcmF0b3InO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge31cclxuXHJcblx0b25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcclxuXHRvblZhbGlkYXRpb25DaGFuZ2UgPSAoKSA9PiB7fTtcclxuXHRvblRvdWNoID0gKCkgPT4ge307XHJcblx0Zm9jdXMgPSAoKSA9PiB7XHJcblx0XHR0aGlzLmlucHV0VGV4dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcblx0XHR0aGlzLmlucHV0VGV4dC5uYXRpdmVFbGVtZW50LnNlbGVjdCgpO1xyXG5cdH07XHJcblxyXG5cdG9uQmx1cih2YWx1ZTogYW55KSB7XHJcblx0XHR0aGlzLm9uVG91Y2goKTtcclxuXHRcdGlmICgodmFsdWUgPT0gJycgfHwgdmFsdWUgPT0gbnVsbCkgJiYgdGhpcy5mb3JtYXRDZXJvKSB7XHJcblx0XHRcdHZhbHVlID0gMDtcclxuXHRcdH1cclxuXHRcdGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5mb3JtYXROdW1iZXIodmFsdWUpO1xyXG5cclxuXHRcdGlmICh0aGlzLnZhbHVlICE9PSBuZXdWYWx1ZSkge1xyXG5cdFx0XHR0aGlzLnZhbHVlID0gbmV3VmFsdWU7XHJcblx0XHRcdHRoaXMub25DaGFuZ2UodGhpcy5lbWl0VmFsdWUobmV3VmFsdWUpKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBpZiAobmV3VmFsdWUpIHtcclxuXHRcdHRoaXMub25WYWxpZGF0aW9uQ2hhbmdlKCk7XHJcblx0XHR0aGlzLmJsdXIuZW1pdCh0aGlzLmVtaXRWYWx1ZShuZXdWYWx1ZSkpO1xyXG5cdFx0Ly8gfVxyXG5cdH1cclxuXHJcblx0b25Gb2N1cyhldnQ6IGFueSkge1xyXG5cdFx0dGhpcy5pbnB1dFRleHQubmF0aXZlRWxlbWVudC5zZWxlY3QoKTtcclxuXHRcdHRoaXMub25mb2N1cy5lbWl0KGV2dCk7XHJcblx0fVxyXG5cclxuXHRvbklucHV0KGV2dDogYW55KSB7XHJcblx0XHR0aGlzLm9uVG91Y2goKTtcclxuXHRcdHRoaXMub25DaGFuZ2UodGhpcy5lbWl0VmFsdWUoZXZ0KSk7XHJcblx0XHR0aGlzLm9uVmFsaWRhdGlvbkNoYW5nZSgpO1xyXG5cdFx0dGhpcy5jaGFuZ2UuZW1pdCh0aGlzLmVtaXRWYWx1ZShldnQpKTtcclxuXHRcdHRoaXMub25jaGFuZ2UuZW1pdCh0aGlzLmVtaXRWYWx1ZShldnQpKTtcclxuXHR9XHJcblxyXG5cdHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG5cdFx0aWYgKHZhbHVlICE9IG51bGwpIHtcclxuXHRcdFx0dGhpcy52YWx1ZSA9IHRoaXMuZm9ybWF0TnVtYmVyKHZhbHVlKTtcclxuXHJcblx0XHRcdGlmICh0aGlzLnZhbHVlID09PSAnTmFOJykge1xyXG5cdFx0XHRcdGlmICh0aGlzLmNvbnRyb2xzKSB7XHJcblx0XHRcdFx0XHR0aGlzLl9yZW5kZXIuc2V0UHJvcGVydHkodGhpcy5jb250cm9scywgJ3ZhbHVlJywgbnVsbCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignTm90IGEgbnVtYmVyJyk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh0aGlzLmNvbnRyb2xzKSB7XHJcblx0XHRcdFx0dGhpcy5fcmVuZGVyLnNldFByb3BlcnR5KHRoaXMuY29udHJvbHMsICd2YWx1ZScsIE51bWJlcih0aGlzLnZhbHVlKSk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMudmFsdWUgPSBudWxsO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcblx0XHR0aGlzLm9uQ2hhbmdlID0gZm47XHJcblx0fVxyXG5cclxuXHRyZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcblx0XHR0aGlzLm9uVG91Y2ggPSBmbjtcclxuXHR9XHJcblxyXG5cdHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG5cdFx0dGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcblx0fVxyXG5cclxuXHR2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgYW55IHtcclxuXHRcdHRoaXMuY29udHJvbHMgPSBjb250cm9sO1xyXG5cclxuXHRcdGlmICghdGhpcy5faW5pdFZhbHVlKSB7XHJcblx0XHRcdGlmICh0aGlzLnZhbHVlID09PSAnTmFOJykge1xyXG5cdFx0XHRcdHRoaXMuX3JlbmRlci5zZXRQcm9wZXJ0eSh0aGlzLmNvbnRyb2xzLCAndmFsdWUnLCBudWxsKTtcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ05vdCBhIG51bWJlcicpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAodGhpcy52YWx1ZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdHRoaXMuX3JlbmRlci5zZXRQcm9wZXJ0eSh0aGlzLmNvbnRyb2xzLCAndmFsdWUnLCBOdW1iZXIodGhpcy52YWx1ZSkpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuX2luaXRWYWx1ZSA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRyZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlPyhmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG5cdFx0dGhpcy5vblZhbGlkYXRpb25DaGFuZ2UgPSBmbjtcclxuXHR9XHJcblxyXG5cdGZvcm1hdE51bWJlcih2YWx1ZTogYW55KSB7XHJcblx0XHRpZiAodmFsdWUgIT0gbnVsbCkge1xyXG5cdFx0XHR2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5kZWNpbWFscyAhPSBudWxsICYmIHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT0gJycpIHtcclxuXHRcdFx0aWYgKHRoaXMuZGVjaW1hbHMgPiAwKSB7XHJcblx0XHRcdFx0cmV0dXJuIE51bWJlcih2YWx1ZS5yZXBsYWNlQWxsKCcsJywgJycpKS50b0ZpeGVkKHRoaXMuZGVjaW1hbHMpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJldHVybiBOdW1iZXIodmFsdWUucmVwbGFjZUFsbCgnLCcsICcnKSkudG9GaXhlZCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPSAnJykge1xyXG5cdFx0XHRcdHJldHVybiBOdW1iZXIodmFsdWUucmVwbGFjZUFsbCgnLCcsICcnKSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGVtaXRWYWx1ZSh2YWx1ZTogYW55KSB7XHJcblx0XHRpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPSAnJykge1xyXG5cdFx0XHRpZiAodGhpcy5kZWNpbWFscyAhPSBudWxsKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMuZGVjaW1hbHMgPiAwKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gTnVtYmVyKE51bWJlcih2YWx1ZS5yZXBsYWNlQWxsKCcsJywgJycpKS50b0ZpeGVkKHRoaXMuZGVjaW1hbHMpKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0cmV0dXJuIE51bWJlcihOdW1iZXIodmFsdWUucmVwbGFjZUFsbCgnLCcsICcnKSkudG9GaXhlZCgpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmV0dXJuIE51bWJlcih2YWx1ZS5yZXBsYWNlQWxsKCcsJywgJycpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRlbnRlcktleVVwKCkge1xyXG5cdFx0aWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcblx0XHRcdGxldCB2YWxpZGF0b3IgPSB0aGlzLnNoYXJlZENvbXBvbmVudHNVdGlsLnN0b3BCeVZhbGlkYXRvcih0aGlzLmNvbnRyb2xzLCB0aGlzLnZhbGlkYXRvckFsZXJ0LCB0aGlzLmxhYmVsKTtcclxuXHRcdFx0aWYgKHZhbGlkYXRvci5lcnJvcikge1xyXG5cdFx0XHRcdHRoaXMubWVzc2FnZVV0aWxTZXJ2aWNlLmdldE1lc3NhZ2VFcnJvcignMDAwMDQ2JywgJ0Vycm9yJywgdmFsaWRhdG9yLm1lc3NhZ2UpO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMubmV4dCAhPSB1bmRlZmluZWQpIHtcclxuXHRcdFx0aWYgKHRoaXMubmV4dC5kaXNhYmxlZCB8fCB0aGlzLm5leHQucmVhZG9ubHkpIHtcclxuXHRcdFx0XHRpZiAodGhpcy5uZXh0SXNEaXNhYmxlICE9IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5uZXh0SXNEaXNhYmxlLmZvY3VzKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMubmV4dC5mb2N1cygpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAodGhpcy5uZXh0SXNEaXNhYmxlICE9IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdHRoaXMubmV4dElzRGlzYWJsZS5mb2N1cygpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMub25OZXh0LmVtaXQoKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YXJyb3dVcEtleVVwKCkge1xyXG5cdFx0aWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcblx0XHRcdGxldCB2YWxpZGF0b3IgPSB0aGlzLnNoYXJlZENvbXBvbmVudHNVdGlsLnN0b3BCeVZhbGlkYXRvcih0aGlzLmNvbnRyb2xzLCB0aGlzLnZhbGlkYXRvckFsZXJ0LCB0aGlzLmxhYmVsKTtcclxuXHRcdFx0aWYgKHZhbGlkYXRvci5lcnJvcikge1xyXG5cdFx0XHRcdHRoaXMubWVzc2FnZVV0aWxTZXJ2aWNlLmdldE1lc3NhZ2VFcnJvcignMDAwMDQ2JywgJ0Vycm9yJywgdmFsaWRhdG9yLm1lc3NhZ2UpO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuYmFjayAhPSB1bmRlZmluZWQpIHtcclxuXHRcdFx0aWYgKHRoaXMuYmFjay5kaXNhYmxlZCB8fCB0aGlzLmJhY2sucmVhZG9ubHkpIHtcclxuXHRcdFx0XHRpZiAodGhpcy5iYWNrSXNEaXNhYmxlICE9IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5iYWNrSXNEaXNhYmxlLmZvY3VzKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuYmFjay5mb2N1cygpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAodGhpcy5iYWNrSXNEaXNhYmxlICE9IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdHRoaXMuYmFja0lzRGlzYWJsZS5mb2N1cygpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMub25CYWNrLmVtaXQoKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0b25Gb2N1c091dChldnQ6IGFueSkge1xyXG5cdFx0dGhpcy5vbmZvY3Vzb3V0LmVtaXQoZXZ0KTtcclxuXHRcdGlmICh0aGlzLmJ0bkVuYWJsZSkge1xyXG5cdFx0XHR0aGlzLmRpc2FibGVkID0gdHJ1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNsaWNrRW5hYmxlKCkge1xyXG5cdFx0dGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xyXG5cdFx0dGhpcy5yZWFkb25seSA9IGZhbHNlO1xyXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdHRoaXMuZm9jdXMoKTtcclxuXHRcdH0sIDE1MCk7XHJcblx0fVxyXG59XHJcbiIsIjxsYWJlbCAqbmdJZj1cImxhYmVsICE9IG51bGwgJiYgbGFiZWwgIT0gJycgJiYgc2hvd0xhYmVsXCIgY2xhc3M9XCJkLWZsZXggc3VtYXgtbGFiZWwgbWItMCBwLTBcIlxyXG5cdD48c3BhbiBbdGl0bGVdPVwibGFiZWxcIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXA7IG92ZXJmbG93OiBoaWRkZW47IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzXCI+e3sgbGFiZWwgfX08L3NwYW4+XHJcblx0PHNwYW4gKm5nSWY9XCJyZXF1aXJlZFwiIGNsYXNzPVwibXMtMVwiIFtjbGFzcy50ZXh0LWRhbmdlcl09XCJjb250cm9scz8uZXJyb3JzICE9IG51bGxcIj4gKjwvc3Bhbj5cclxuXHQ8c3BhbiAqbmdJZj1cImxhYmVsSW5mb1wiPlxyXG5cdFx0PGkgY2xhc3M9XCJmYSBmYS1leGNsYW1hdGlvbi1jaXJjbGUgdGV4dC1pbmZvIG1zLTJcIiBbbWF0VG9vbHRpcF09XCJ0ZXh0TGFiZWxJbmZvXCIgbWF0VG9vbHRpcENsYXNzPVwiYmctaW5mb1wiPjwvaT5cclxuXHQ8L3NwYW4+XHJcbjwvbGFiZWw+XHJcbjxkaXZcclxuXHRbY2xhc3MuaW5wdXQtaWNvbl09XCJjb250cm9scz8uZXJyb3JzICE9IG51bGwgJiYgKGNvbnRyb2xzPy5kaXJ0eSB8fCBjb250cm9scz8udG91Y2hlZCkgJiYgc3VibWl0dGVkXCJcclxuXHRbY2xhc3MucmlnaHRdPVwiY29udHJvbHM/LmVycm9ycyAhPSBudWxsICYmIChjb250cm9scz8uZGlydHkgfHwgY29udHJvbHM/LnRvdWNoZWQpICYmIHN1Ym1pdHRlZFwiXHJcbj5cclxuXHQ8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcblx0XHQ8ZGl2IGNsYXNzPVwidy0xMDAgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuXHRcdFx0PHRvb2x0aXAtbWVzc2FnZVxyXG5cdFx0XHRcdFtsYWJlbF09XCJsYWJlbFwiXHJcblx0XHRcdFx0W2NvbnRyb2xzXT1cImNvbnRyb2xzXCJcclxuXHRcdFx0XHRbdmFsaWRhdG9yTWVzc2FnZV09XCJ2YWxpZGF0b3JNZXNzYWdlXCJcclxuXHRcdFx0XHRbdG9vbHRpcE1lc3NhZ2VdPVwidG9vbHRpcE1lc3NhZ2VcIlxyXG5cdFx0XHRcdFtzdWJtaXR0ZWRdPVwic3VibWl0dGVkXCJcclxuXHRcdFx0PjwvdG9vbHRpcC1tZXNzYWdlPlxyXG5cdFx0XHQ8aW5wdXRcclxuXHRcdFx0XHQjaW5wdXRUZXh0XHJcblx0XHRcdFx0dHlwZT1cInRleHRcIlxyXG5cdFx0XHRcdGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSB0ZXh0LWVuZFwiXHJcblx0XHRcdFx0W2NsYXNzLmlzLWludmFsaWRdPVwiY29udHJvbHM/LmVycm9ycyAhPSBudWxsICYmIChjb250cm9scz8uZGlydHkgfHwgY29udHJvbHM/LnRvdWNoZWQpICYmIHN1Ym1pdHRlZFwiXHJcblx0XHRcdFx0WyhuZ01vZGVsKV09XCJ2YWx1ZVwiXHJcblx0XHRcdFx0W2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuXHRcdFx0XHRbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG5cdFx0XHRcdFttYXNrXT1cImZvcm1hdFwiXHJcblx0XHRcdFx0W3Rob3VzYW5kU2VwYXJhdG9yXT1cImRpc2FibGVUaG91c2FuZFNlcGFyYXRvciA/ICcnIDogJywnXCJcclxuXHRcdFx0XHQoYmx1cik9XCJvbkJsdXIoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIlxyXG5cdFx0XHRcdChpbnB1dCk9XCJvbklucHV0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcclxuXHRcdFx0XHQoZm9jdXNvdXQpPVwib25Gb2N1c091dCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXHJcblx0XHRcdFx0W2F0dHIuYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXHJcblx0XHRcdFx0W3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuXHRcdFx0XHQoZm9jdXMpPVwib25Gb2N1cygkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXHJcblx0XHRcdFx0W2F0dHIubWF4TGVuZ3RoXT1cIm1heExlbmd0aFwiXHJcblx0XHRcdFx0KGtleXVwLmVudGVyKT1cImVudGVyS2V5VXAoKVwiXHJcblx0XHRcdFx0KGtleXVwLkFycm93VXApPVwiYXJyb3dVcEtleVVwKClcIlxyXG5cdFx0XHRcdFtuZ0NsYXNzXT1cInNldE5nQ2xhc3NcIlxyXG5cdFx0XHRcdFtjbGFzcy5ib2xkXT1cImJvbGRcIlxyXG5cdFx0XHRcdFthbGxvd05lZ2F0aXZlTnVtYmVyc109XCJhbGxvd05lZ2F0aXZlTnVtYmVyc1wiXHJcblx0XHRcdFx0W2xlYWRaZXJvXT1cIiFhbGxvd05lZ2F0aXZlTnVtYmVyc1wiXHJcblx0XHRcdC8+XHJcblx0XHQ8L2Rpdj5cclxuXHRcdDxkaXYgY2xhc3M9XCJiZC1oaWdobGlnaHRcIiAqbmdJZj1cImJ0bkVuYWJsZVwiPlxyXG5cdFx0XHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4taW5mbyBwLTAgcm91bmRlZC0wIGgtMTAwXCIgKGNsaWNrKT1cImNsaWNrRW5hYmxlKClcIj5cclxuXHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHRleHQtd2hpdGUgcHgtMVwiIFttYXRUb29sdGlwXT1cIidIYWJpbGl0YXInXCIgbWF0VG9vbHRpcENsYXNzPVwiYmctaW5mb1wiPjwvaT5cclxuXHRcdFx0PC9idXR0b24+XHJcblx0XHQ8L2Rpdj5cclxuXHRcdDxuZy1jb250ZW50IHNlbGVjdD1cIlttb3JlLWJ1dHRvbnNdXCI+PC9uZy1jb250ZW50PlxyXG5cdDwvZGl2PlxyXG48L2Rpdj5cclxuPGVycm9yLW1lc3NhZ2VcclxuXHRbbGFiZWxdPVwibGFiZWxcIlxyXG5cdFtjb250cm9sc109XCJjb250cm9sc1wiXHJcblx0W3ZhbGlkYXRvck1lc3NhZ2VdPVwidmFsaWRhdG9yTWVzc2FnZVwiXHJcblx0W3Rvb2x0aXBNZXNzYWdlXT1cInRvb2x0aXBNZXNzYWdlXCJcclxuXHRbc3VibWl0dGVkXT1cInN1Ym1pdHRlZFwiXHJcbj48L2Vycm9yLW1lc3NhZ2U+XHJcbiJdfQ==