@klippa/ngx-enhancy-forms 14.19.3 → 14.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { Component, ContentChild, Inject, InjectionToken, Input, Optional, ViewChild } from '@angular/core';
1
+ import { Component, ContentChild, Inject, InjectionToken, Input, Optional, TemplateRef, ViewChild } from '@angular/core';
2
2
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
3
  import { isValueSet, stringIsSetAndFilled } from '../../util/values';
4
4
  import { awaitableForNextCycle } from '../../util/angular';
@@ -77,7 +77,7 @@ export class FormElementComponent {
77
77
  this.popupState = 'onHover';
78
78
  return;
79
79
  }
80
- if (stringIsSetAndFilled(this.getWarningToShow())) {
80
+ if (isValueSet(this.getWarningToShow())) {
81
81
  this.popupState = 'lockedOpen';
82
82
  return;
83
83
  }
@@ -102,6 +102,15 @@ export class FormElementComponent {
102
102
  getWarningToShow() {
103
103
  return this.parent?.getWarningToShow(this.attachedControl);
104
104
  }
105
+ getWarningToShowAsTemplateRef() {
106
+ if (this.parent?.getWarningToShow(this.attachedControl) instanceof TemplateRef) {
107
+ return this.parent?.getWarningToShow(this.attachedControl);
108
+ }
109
+ throw new Error('Warning is not a TemplateRef');
110
+ }
111
+ getWarningToShowIsTemplateRef() {
112
+ return this.getWarningToShow() instanceof TemplateRef;
113
+ }
105
114
  getErrorToShow() {
106
115
  const firstError = Object.keys(this.attachedControl?.errors ?? {})[0];
107
116
  if (this.attachedControl?.touched !== true) {
@@ -159,7 +168,7 @@ export class FormElementComponent {
159
168
  if (stringIsSetAndFilled(this.getErrorToShow())) {
160
169
  return !this.errorFullyVisible;
161
170
  }
162
- if (stringIsSetAndFilled(this.getWarningToShow())) {
171
+ if (isValueSet(this.getWarningToShow())) {
163
172
  return true;
164
173
  }
165
174
  return false;
@@ -174,7 +183,7 @@ export class FormElementComponent {
174
183
  return true;
175
184
  }
176
185
  shouldShowWarningPopup() {
177
- return stringIsSetAndFilled(this.getWarningToShow());
186
+ return isValueSet(this.getWarningToShow());
178
187
  }
179
188
  closePopup() {
180
189
  this.popupState = 'onHover';
@@ -195,10 +204,10 @@ export class FormElementComponent {
195
204
  }
196
205
  }
197
206
  FormElementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: FormElementComponent, deps: [{ token: i1.FormComponent, optional: true }, { token: FORM_ERROR_MESSAGES, optional: true }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
198
- FormElementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: FormElementComponent, selector: "klp-form-element", inputs: { caption: "caption", direction: "direction", captionSpacing: "captionSpacing", verticalAlignment: "verticalAlignment", spaceDistribution: "spaceDistribution", swapInputAndCaption: "swapInputAndCaption", errorMessageAsTooltip: "errorMessageAsTooltip" }, queries: [{ propertyName: "fieldInput", first: true, predicate: NG_VALUE_ACCESSOR, descendants: true }], viewQueries: [{ propertyName: "internalComponentRef", first: true, predicate: ["internalComponentRef"], descendants: true }, { propertyName: "tailTpl", first: true, predicate: ["tailTpl"], descendants: true }, { propertyName: "captionDummyForSpaceCalculation", first: true, predicate: ["captionDummyForSpaceCalculation"], descendants: true }, { propertyName: "absoluteAnchor", first: true, predicate: ["absoluteAnchor"], descendants: true }, { propertyName: "fixedAnchor", first: true, predicate: ["fixedAnchor"], descendants: true }, { propertyName: "fixedWrapper", first: true, predicate: ["fixedWrapper"], descendants: true }], ngImport: i0, template: "<div\n\tclass=\"componentContainer\"\n\t[ngClass]=\"{\n\t\thasCaption: caption || captionRef,\n\t\tvertical: direction === 'vertical',\n\t\thorizontal: direction === 'horizontal',\n\t\ttopAlignment: verticalAlignment === 'top',\n\t\treverseOrder: swapInputAndCaption,\n\t\thasErrors: getErrorToShow() && attachedControl.touched,\n\t\tpercentageSpacing: captionSpacing === 'percentages' && spaceDistribution !== 'fixedInputWidth',\n\t\t'd40-60': spaceDistribution === '40-60',\n\t\t'd30-70': spaceDistribution === '30-70',\n\t\t'd34-66': spaceDistribution === '34-66',\n\t\t'fixedInputWidth': spaceDistribution === 'fixedInputWidth'\n\t}\"\n>\n\t<div class=\"errorAboveInputContainer\" *ngIf=\"direction === 'horizontal' && !errorMessageAsTooltip\">\n\t\t<div class=\"spacer\"></div>\n\t\t<ng-container [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t</div>\n\n\t<div class=\"captionInputAndError\" #internalComponentRef>\n\t\t<div class=\"captionDummyForSpaceCalculation\" #captionDummyForSpaceCalculation *ngIf=\"hasRightOfCaptionError()\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"captionTpl\" [ngTemplateOutletContext]=\"{forCalculation: true}\"></ng-container>\n\t\t</div>\n\t\t<ng-container [ngTemplateOutlet]=\"captionTpl\"></ng-container>\n\t\t<ng-container *ngIf=\"direction === 'vertical' && getErrorLocation() === 'belowCaption' && !errorMessageAsTooltip\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t<div class=\"inputContainer\" (mouseenter)=\"setErrorTooltipOffset()\">\n\t\t\t<ng-container *ngIf=\"errorMessageAsTooltip && shouldShowErrorMessages() && getErrorToShow()\">\n\t\t\t\t<div class=\"errorTooltipTriangle\"></div>\n\t\t\t\t<div class=\"errorTooltipTriangleWhite\"></div>\n\t\t\t\t<div class=\"errorTooltip\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t\t\t</div>\n\t\t\t</ng-container>\n\t\t\t<ng-content></ng-content>\n\t\t</div>\n\t</div>\n</div>\n\n<ng-template #captionTpl let-forCalculation=\"forCalculation\">\n\t<div class=\"caption\"\n\t\t*ngIf=\"caption || captionRef\"\n\t\t[ngClass]=\"{\n\t\t\twithErrorRightOfCaption: getErrorLocation() === 'rightOfCaption'\n\t\t}\"\n\t>\n\t\t<div *ngIf=\"captionRef\" class=\"captionRefContainer\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"captionRef\"></ng-container>\n\t\t\t<div *ngIf=\"isRequired()\">&nbsp;*</div>\n\t\t</div>\n\t\t<div *ngIf=\"!captionRef\" class=\"captionText\">{{caption}}<span *ngIf=\"isRequired()\">&nbsp;*</span></div>\n\t\t<div class=\"rightOfCaptionError\" *ngIf=\"hasRightOfCaptionError()\" [ngClass]=\"{errorFullyVisible: errorFullyVisible}\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"errorRef\" [ngTemplateOutletContext]=\"{forCalculation: forCalculation}\"></ng-container>\n\t\t</div>\n\t</div>\n</ng-template>\n\n<ng-template #errorRef let-forCalculation=\"forCalculation\">\n\t<div *ngIf=\"shouldShowErrorMessages() && getErrorToShow()\" class=\"errorContainer\" [elementIsTruncatedCb]=\"forCalculation ? setErrorMessageIsTruncated : null\" [ngClass]=\"{horizontal: direction === 'horizontal', hasCaption: caption || captionRef, 'd30-70': spaceDistribution === '30-70', 'd34-66': spaceDistribution === '34-66'}\">\n\t\t<div *ngIf=\"showDefaultError('min')\">{{substituteParameters(getErrorMessage(\"min\"), {min: attachedControl.errors.min.min})}}</div>\n\t\t<div *ngIf=\"showDefaultError('max')\">{{substituteParameters(getErrorMessage(\"max\"), {max: attachedControl.errors.max.max})}}</div>\n\t\t<div *ngIf=\"showDefaultError('required')\">{{getErrorMessage(\"required\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('email')\">{{getErrorMessage(\"email\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('minlength')\">{{substituteParameters(getErrorMessage(\"minLength\"), {minLength: attachedControl.errors.minlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('maxlength')\">{{substituteParameters(getErrorMessage(\"maxLength\"), {maxLength: attachedControl.errors.maxlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('pattern')\">{{getErrorMessage(\"pattern\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('MatchPassword')\">{{getErrorMessage(\"matchPassword\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('date')\">{{getErrorMessage(\"date\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('message')\">{{attachedControl.errors.message.value}}</div>\n\t\t<div [ngTemplateOutlet]=\"getCustomErrorHandler(getErrorToShow())?.templateRef\"></div>\n\t</div>\n</ng-template>\n\n<ng-template #tailTpl>\n\t<div class=\"errorTooltipContainer\" [ngClass]=\"{alwaysOpen: shouldShowErrorTooltipOpened()}\">\n\t\t<ng-container *ngIf=\"hasHoverableErrorTooltip() || shouldShowErrorTooltipOpened()\">\n\t\t\t<div class=\"errorTooltipTriangle\"></div>\n\t\t\t<div class=\"errorTooltipTriangleWhite\"></div>\n\n\t\t\t<div class=\"absoluteAnchor\" #absoluteAnchor></div>\n\t\t\t<div class=\"fixedAnchor\" #fixedAnchor></div>\n\t\t\t<div class=\"fixedWrapper\" #fixedWrapper>\n\t\t\t\t<div class=\"errorTooltip\" [ngClass]=\"{noPointerEvents: !shouldShowErrorTooltipOpened()}\">\n\t\t\t\t\t<div class=\"errorTooltipInner\">\n\t\t\t\t\t\t<i class=\"closeBtn\" (click)=\"closePopup();\">\u00D7</i>\n\t\t\t\t\t\t<ng-container *ngIf=\"getErrorToShow()\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t\t\t\t\t<div *ngIf=\"!getErrorToShow() && shouldShowWarningPopup()\">{{getWarningToShow()}}</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t</ng-container>\n\t\t<klp-form-warning-icon variant=\"fill\" *ngIf=\"getErrorToShow()\" (click)=\"togglePopup()\"></klp-form-warning-icon>\n\t\t<klp-form-warning-icon variant=\"line\" *ngIf=\"!getErrorToShow() && getWarningToShow()\" (click)=\"togglePopup()\"></klp-form-warning-icon>\n\t</div>\n</ng-template>\n", styles: [":host{display:block}.componentContainer:not(.hasCaption) .captionInputAndError{display:block}.componentContainer:not(.hasCaption) .captionInputAndError .inputContainer{margin-top:0;padding-left:0;max-width:initial}.componentContainer:not(.hasCaption) .errorContainer{padding-left:0}.componentContainer.hasCaption .errorAboveInputContainer .spacer{display:block}.componentContainer.reverseOrder .captionInputAndError{flex-direction:row-reverse;justify-content:flex-end}.componentContainer.vertical .captionInputAndError{display:block}.componentContainer.vertical .captionInputAndError .inputContainer{margin-top:.3125rem}.componentContainer.vertical .captionInputAndError .errorContainer{margin-left:0}.componentContainer.topAlignment .captionInputAndError{align-items:flex-start}.componentContainer.horizontal.hasCaption .inputContainer,.componentContainer.horizontal.hasCaption .errorAboveInputContainer .errorContainer{padding-left:1rem}.componentContainer.horizontal.hasCaption.d40-60 .errorAboveInputContainer .spacer{flex:0 1 40%}.componentContainer.horizontal.hasCaption.d40-60 .errorAboveInputContainer .errorContainer{flex:60 1 0px}.componentContainer.horizontal.hasCaption.d40-60 .caption{max-width:40%;flex:40 1 0px}.componentContainer.horizontal.hasCaption.d40-60 .inputContainer{max-width:60%;flex:60 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .errorAboveInputContainer .spacer{flex:0 1 34%}.componentContainer.horizontal.hasCaption.d34-66 .errorAboveInputContainer .errorContainer{flex:66 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .caption{max-width:34%;flex:34 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .inputContainer{max-width:66%;flex:66 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .errorAboveInputContainer .spacer{flex:0 1 30%}.componentContainer.horizontal.hasCaption.d30-70 .errorAboveInputContainer .errorContainer{flex:70 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .caption{max-width:30%;flex:30 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .inputContainer{max-width:70%;flex:70 1 0px}.componentContainer.fixedInputWidth .caption{flex:1 1 0px;overflow:hidden}.componentContainer.fixedInputWidth .inputContainer{flex:0 0 auto}.captionInputAndError{display:flex;align-items:center;min-height:42px}.errorAboveInputContainer{display:flex}.errorAboveInputContainer .spacer{display:none}.captionDummyForSpaceCalculation .caption.withErrorRightOfCaption{height:0px;overflow:hidden}.captionDummyForSpaceCalculation .caption.withErrorRightOfCaption .rightOfCaptionError{display:block}.captionRefContainer{display:flex}.caption{font-weight:700;flex:0 0 auto;color:#515365}.caption.percentageSpacing{max-width:40%;flex:40 1 0px}.caption.percentageSpacing.d30-70{max-width:30%;flex:30 1 0px}.caption.percentageSpacing.d34-66{max-width:34%;flex:34 1 0px}.caption.withErrorRightOfCaption{display:flex;justify-content:space-between;gap:1rem}.caption.withErrorRightOfCaption .captionText{flex:1 2 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.caption.withErrorRightOfCaption .rightOfCaptionError{display:none;max-width:40%;font-weight:400;overflow:hidden;flex:1 0 auto;text-align:right}.caption.withErrorRightOfCaption .rightOfCaptionError.errorFullyVisible{display:block}.caption.withErrorRightOfCaption .rightOfCaptionError ::ng-deep *{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.inputContainer{position:relative;flex:1}.inputContainer .errorTooltipContainer{position:relative}.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipTriangle,.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipTriangleWhite,.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltip{display:flex}.inputContainer .errorTooltipContainer.alwaysOpen .closeBtn{display:block}.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipInner{padding-right:1.4rem}.inputContainer .errorTooltipContainer klp-form-warning-icon{cursor:pointer}.inputContainer .errorTooltipContainer .absoluteAnchor{position:absolute}.inputContainer .errorTooltipContainer .fixedAnchor,.inputContainer .errorTooltipContainer .fixedWrapper{position:fixed}.inputContainer .errorTooltipTriangle{display:none;z-index:1;position:absolute;right:0;transform:translate(-.15rem,calc(-100% - .1rem)) scaleX(.8);width:0px;height:0px;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid rgba(0,0,0,.13)}.inputContainer .errorTooltipTriangleWhite{display:none;z-index:3;position:absolute;right:0;transform:translate(-.15rem,calc(-100% - .1rem - 2px)) scaleX(.8);width:0px;height:0px;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid white}.inputContainer .errorTooltip{display:none;justify-content:flex-end;position:absolute;top:-.6rem;right:-1.875rem;transform:translateY(-100%);width:20rem}.inputContainer .errorTooltip.noPointerEvents{pointer-events:none}.inputContainer .errorTooltip .closeBtn{display:none;position:absolute;top:.2rem;right:.2rem;padding:.2rem .4rem;cursor:pointer;color:#666;font-size:1rem}.inputContainer .errorTooltip .closeBtn:hover{color:#515365}.inputContainer .errorTooltipInner{background:white;padding:.4rem .6rem;border-radius:.4rem;border:1px solid rgba(0,0,0,.13);box-shadow:#00000021 2px 3px 10px}.inputContainer:hover .errorTooltipContainer .errorTooltip,.inputContainer:hover .errorTooltipContainer .errorTooltipTriangle,.inputContainer:hover .errorTooltipContainer .errorTooltipTriangleWhite{display:flex}.errorContainer{color:#ff8000}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.WarningIconComponent, selector: "klp-form-warning-icon", inputs: ["variant"] }, { kind: "directive", type: i4.ElementIsTruncatedCbComponent, selector: "[elementIsTruncatedCb]", inputs: ["elementIsTruncatedCb"] }] });
207
+ FormElementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: FormElementComponent, selector: "klp-form-element", inputs: { caption: "caption", direction: "direction", captionSpacing: "captionSpacing", verticalAlignment: "verticalAlignment", spaceDistribution: "spaceDistribution", swapInputAndCaption: "swapInputAndCaption", errorMessageAsTooltip: "errorMessageAsTooltip" }, queries: [{ propertyName: "fieldInput", first: true, predicate: NG_VALUE_ACCESSOR, descendants: true }], viewQueries: [{ propertyName: "internalComponentRef", first: true, predicate: ["internalComponentRef"], descendants: true }, { propertyName: "tailTpl", first: true, predicate: ["tailTpl"], descendants: true }, { propertyName: "captionDummyForSpaceCalculation", first: true, predicate: ["captionDummyForSpaceCalculation"], descendants: true }, { propertyName: "absoluteAnchor", first: true, predicate: ["absoluteAnchor"], descendants: true }, { propertyName: "fixedAnchor", first: true, predicate: ["fixedAnchor"], descendants: true }, { propertyName: "fixedWrapper", first: true, predicate: ["fixedWrapper"], descendants: true }], ngImport: i0, template: "<div\n\tclass=\"componentContainer\"\n\t[ngClass]=\"{\n\t\thasCaption: caption || captionRef,\n\t\tvertical: direction === 'vertical',\n\t\thorizontal: direction === 'horizontal',\n\t\ttopAlignment: verticalAlignment === 'top',\n\t\treverseOrder: swapInputAndCaption,\n\t\thasErrors: getErrorToShow() && attachedControl.touched,\n\t\tpercentageSpacing: captionSpacing === 'percentages' && spaceDistribution !== 'fixedInputWidth',\n\t\t'd40-60': spaceDistribution === '40-60',\n\t\t'd30-70': spaceDistribution === '30-70',\n\t\t'd34-66': spaceDistribution === '34-66',\n\t\t'fixedInputWidth': spaceDistribution === 'fixedInputWidth'\n\t}\"\n>\n\t<div class=\"errorAboveInputContainer\" *ngIf=\"direction === 'horizontal' && !errorMessageAsTooltip\">\n\t\t<div class=\"spacer\"></div>\n\t\t<ng-container [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t</div>\n\n\t<div class=\"captionInputAndError\" #internalComponentRef>\n\t\t<div class=\"captionDummyForSpaceCalculation\" #captionDummyForSpaceCalculation *ngIf=\"hasRightOfCaptionError()\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"captionTpl\" [ngTemplateOutletContext]=\"{forCalculation: true}\"></ng-container>\n\t\t</div>\n\t\t<ng-container [ngTemplateOutlet]=\"captionTpl\"></ng-container>\n\t\t<ng-container *ngIf=\"direction === 'vertical' && getErrorLocation() === 'belowCaption' && !errorMessageAsTooltip\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t<div class=\"inputContainer\" (mouseenter)=\"setErrorTooltipOffset()\">\n\t\t\t<ng-container *ngIf=\"errorMessageAsTooltip && shouldShowErrorMessages() && getErrorToShow()\">\n\t\t\t\t<div class=\"errorTooltipTriangle\"></div>\n\t\t\t\t<div class=\"errorTooltipTriangleWhite\"></div>\n\t\t\t\t<div class=\"errorTooltip\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t\t\t</div>\n\t\t\t</ng-container>\n\t\t\t<ng-content></ng-content>\n\t\t</div>\n\t</div>\n</div>\n\n<ng-template #captionTpl let-forCalculation=\"forCalculation\">\n\t<div class=\"caption\"\n\t\t*ngIf=\"caption || captionRef\"\n\t\t[ngClass]=\"{\n\t\t\twithErrorRightOfCaption: getErrorLocation() === 'rightOfCaption'\n\t\t}\"\n\t>\n\t\t<div *ngIf=\"captionRef\" class=\"captionRefContainer\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"captionRef\"></ng-container>\n\t\t\t<div *ngIf=\"isRequired()\">&nbsp;*</div>\n\t\t</div>\n\t\t<div *ngIf=\"!captionRef\" class=\"captionText\">{{caption}}<span *ngIf=\"isRequired()\">&nbsp;*</span></div>\n\t\t<div class=\"rightOfCaptionError\" *ngIf=\"hasRightOfCaptionError()\" [ngClass]=\"{errorFullyVisible: errorFullyVisible}\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"errorRef\" [ngTemplateOutletContext]=\"{forCalculation: forCalculation}\"></ng-container>\n\t\t</div>\n\t</div>\n</ng-template>\n\n<ng-template #errorRef let-forCalculation=\"forCalculation\">\n\t<div *ngIf=\"shouldShowErrorMessages() && getErrorToShow()\" class=\"errorContainer\" [elementIsTruncatedCb]=\"forCalculation ? setErrorMessageIsTruncated : null\" [ngClass]=\"{horizontal: direction === 'horizontal', hasCaption: caption || captionRef, 'd30-70': spaceDistribution === '30-70', 'd34-66': spaceDistribution === '34-66'}\">\n\t\t<div *ngIf=\"showDefaultError('min')\">{{substituteParameters(getErrorMessage(\"min\"), {min: attachedControl.errors.min.min})}}</div>\n\t\t<div *ngIf=\"showDefaultError('max')\">{{substituteParameters(getErrorMessage(\"max\"), {max: attachedControl.errors.max.max})}}</div>\n\t\t<div *ngIf=\"showDefaultError('required')\">{{getErrorMessage(\"required\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('email')\">{{getErrorMessage(\"email\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('minlength')\">{{substituteParameters(getErrorMessage(\"minLength\"), {minLength: attachedControl.errors.minlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('maxlength')\">{{substituteParameters(getErrorMessage(\"maxLength\"), {maxLength: attachedControl.errors.maxlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('pattern')\">{{getErrorMessage(\"pattern\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('MatchPassword')\">{{getErrorMessage(\"matchPassword\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('date')\">{{getErrorMessage(\"date\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('message')\">{{attachedControl.errors.message.value}}</div>\n\t\t<div [ngTemplateOutlet]=\"getCustomErrorHandler(getErrorToShow())?.templateRef\"></div>\n\t</div>\n</ng-template>\n\n<ng-template #tailTpl>\n\t<div class=\"errorTooltipContainer\" [ngClass]=\"{alwaysOpen: shouldShowErrorTooltipOpened()}\">\n\t\t<ng-container *ngIf=\"hasHoverableErrorTooltip() || shouldShowErrorTooltipOpened()\">\n\t\t\t<div class=\"errorTooltipTriangle\"></div>\n\t\t\t<div class=\"errorTooltipTriangleWhite\"></div>\n\n\t\t\t<div class=\"absoluteAnchor\" #absoluteAnchor></div>\n\t\t\t<div class=\"fixedAnchor\" #fixedAnchor></div>\n\t\t\t<div class=\"fixedWrapper\" #fixedWrapper>\n\t\t\t\t<div class=\"errorTooltip\" [ngClass]=\"{noPointerEvents: !shouldShowErrorTooltipOpened()}\">\n\t\t\t\t\t<div class=\"errorTooltipInner\">\n\t\t\t\t\t\t<i class=\"closeBtn\" (click)=\"closePopup();\">\u00D7</i>\n\t\t\t\t\t\t<ng-container *ngIf=\"getErrorToShow()\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t\t\t\t\t<div *ngIf=\"!getErrorToShow() && shouldShowWarningPopup()\">\n\t\t\t\t\t\t\t<ng-container *ngIf=\"getWarningToShowIsTemplateRef()\" [ngTemplateOutlet]=\"getWarningToShowAsTemplateRef()\"></ng-container>\n\t\t\t\t\t\t\t<span *ngIf=\"!getWarningToShowIsTemplateRef()\">{{getWarningToShow()}}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t</ng-container>\n\t\t<klp-form-warning-icon variant=\"fill\" *ngIf=\"getErrorToShow()\" (click)=\"togglePopup()\"></klp-form-warning-icon>\n\t\t<klp-form-warning-icon variant=\"line\" *ngIf=\"!getErrorToShow() && getWarningToShow()\" (click)=\"togglePopup()\"></klp-form-warning-icon>\n\t</div>\n</ng-template>\n", styles: [":host{display:block}.componentContainer:not(.hasCaption) .captionInputAndError{display:block}.componentContainer:not(.hasCaption) .captionInputAndError .inputContainer{margin-top:0;padding-left:0;max-width:initial}.componentContainer:not(.hasCaption) .errorContainer{padding-left:0}.componentContainer.hasCaption .errorAboveInputContainer .spacer{display:block}.componentContainer.reverseOrder .captionInputAndError{flex-direction:row-reverse;justify-content:flex-end}.componentContainer.vertical .captionInputAndError{display:block}.componentContainer.vertical .captionInputAndError .inputContainer{margin-top:.3125rem}.componentContainer.vertical .captionInputAndError .errorContainer{margin-left:0}.componentContainer.topAlignment .captionInputAndError{align-items:flex-start}.componentContainer.horizontal.hasCaption .inputContainer,.componentContainer.horizontal.hasCaption .errorAboveInputContainer .errorContainer{padding-left:1rem}.componentContainer.horizontal.hasCaption.d40-60 .errorAboveInputContainer .spacer{flex:0 1 40%}.componentContainer.horizontal.hasCaption.d40-60 .errorAboveInputContainer .errorContainer{flex:60 1 0px}.componentContainer.horizontal.hasCaption.d40-60 .caption{max-width:40%;flex:40 1 0px}.componentContainer.horizontal.hasCaption.d40-60 .inputContainer{max-width:60%;flex:60 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .errorAboveInputContainer .spacer{flex:0 1 34%}.componentContainer.horizontal.hasCaption.d34-66 .errorAboveInputContainer .errorContainer{flex:66 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .caption{max-width:34%;flex:34 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .inputContainer{max-width:66%;flex:66 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .errorAboveInputContainer .spacer{flex:0 1 30%}.componentContainer.horizontal.hasCaption.d30-70 .errorAboveInputContainer .errorContainer{flex:70 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .caption{max-width:30%;flex:30 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .inputContainer{max-width:70%;flex:70 1 0px}.componentContainer.fixedInputWidth .caption{flex:1 1 0px;overflow:hidden}.componentContainer.fixedInputWidth .inputContainer{flex:0 0 auto}.captionInputAndError{display:flex;align-items:center;min-height:42px}.errorAboveInputContainer{display:flex}.errorAboveInputContainer .spacer{display:none}.captionDummyForSpaceCalculation .caption.withErrorRightOfCaption{height:0px;overflow:hidden}.captionDummyForSpaceCalculation .caption.withErrorRightOfCaption .rightOfCaptionError{display:block}.captionRefContainer{display:flex}.caption{font-weight:700;flex:0 0 auto;color:#515365}.caption.percentageSpacing{max-width:40%;flex:40 1 0px}.caption.percentageSpacing.d30-70{max-width:30%;flex:30 1 0px}.caption.percentageSpacing.d34-66{max-width:34%;flex:34 1 0px}.caption.withErrorRightOfCaption{display:flex;justify-content:space-between;gap:1rem}.caption.withErrorRightOfCaption .captionText{flex:1 2 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.caption.withErrorRightOfCaption .rightOfCaptionError{display:none;max-width:40%;font-weight:400;overflow:hidden;flex:1 0 auto;text-align:right}.caption.withErrorRightOfCaption .rightOfCaptionError.errorFullyVisible{display:block}.caption.withErrorRightOfCaption .rightOfCaptionError ::ng-deep *{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.inputContainer{position:relative;flex:1}.inputContainer .errorTooltipContainer{position:relative}.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipTriangle,.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipTriangleWhite,.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltip{display:flex}.inputContainer .errorTooltipContainer.alwaysOpen .closeBtn{display:block}.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipInner{padding-right:1.4rem}.inputContainer .errorTooltipContainer klp-form-warning-icon{cursor:pointer}.inputContainer .errorTooltipContainer .absoluteAnchor{position:absolute}.inputContainer .errorTooltipContainer .fixedAnchor,.inputContainer .errorTooltipContainer .fixedWrapper{position:fixed}.inputContainer .errorTooltipTriangle{display:none;z-index:1;position:absolute;right:0;transform:translate(-.15rem,calc(-100% - .1rem)) scaleX(.8);width:0px;height:0px;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid rgba(0,0,0,.13)}.inputContainer .errorTooltipTriangleWhite{display:none;z-index:3;position:absolute;right:0;transform:translate(-.15rem,calc(-100% - .1rem - 2px)) scaleX(.8);width:0px;height:0px;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid white}.inputContainer .errorTooltip{display:none;justify-content:flex-end;position:absolute;top:-.6rem;right:-1.875rem;transform:translateY(-100%);width:20rem}.inputContainer .errorTooltip.noPointerEvents{pointer-events:none}.inputContainer .errorTooltip .closeBtn{display:none;position:absolute;top:.2rem;right:.2rem;padding:.2rem .4rem;cursor:pointer;color:#666;font-size:1rem}.inputContainer .errorTooltip .closeBtn:hover{color:#515365}.inputContainer .errorTooltipInner{background:white;padding:.4rem .6rem;border-radius:.4rem;border:1px solid rgba(0,0,0,.13);box-shadow:#00000021 2px 3px 10px}.inputContainer:hover .errorTooltipContainer .errorTooltip,.inputContainer:hover .errorTooltipContainer .errorTooltipTriangle,.inputContainer:hover .errorTooltipContainer .errorTooltipTriangleWhite{display:flex}.errorContainer{color:#ff8000}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.WarningIconComponent, selector: "klp-form-warning-icon", inputs: ["variant"] }, { kind: "directive", type: i4.ElementIsTruncatedCbComponent, selector: "[elementIsTruncatedCb]", inputs: ["elementIsTruncatedCb"] }] });
199
208
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: FormElementComponent, decorators: [{
200
209
  type: Component,
201
- args: [{ selector: 'klp-form-element', template: "<div\n\tclass=\"componentContainer\"\n\t[ngClass]=\"{\n\t\thasCaption: caption || captionRef,\n\t\tvertical: direction === 'vertical',\n\t\thorizontal: direction === 'horizontal',\n\t\ttopAlignment: verticalAlignment === 'top',\n\t\treverseOrder: swapInputAndCaption,\n\t\thasErrors: getErrorToShow() && attachedControl.touched,\n\t\tpercentageSpacing: captionSpacing === 'percentages' && spaceDistribution !== 'fixedInputWidth',\n\t\t'd40-60': spaceDistribution === '40-60',\n\t\t'd30-70': spaceDistribution === '30-70',\n\t\t'd34-66': spaceDistribution === '34-66',\n\t\t'fixedInputWidth': spaceDistribution === 'fixedInputWidth'\n\t}\"\n>\n\t<div class=\"errorAboveInputContainer\" *ngIf=\"direction === 'horizontal' && !errorMessageAsTooltip\">\n\t\t<div class=\"spacer\"></div>\n\t\t<ng-container [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t</div>\n\n\t<div class=\"captionInputAndError\" #internalComponentRef>\n\t\t<div class=\"captionDummyForSpaceCalculation\" #captionDummyForSpaceCalculation *ngIf=\"hasRightOfCaptionError()\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"captionTpl\" [ngTemplateOutletContext]=\"{forCalculation: true}\"></ng-container>\n\t\t</div>\n\t\t<ng-container [ngTemplateOutlet]=\"captionTpl\"></ng-container>\n\t\t<ng-container *ngIf=\"direction === 'vertical' && getErrorLocation() === 'belowCaption' && !errorMessageAsTooltip\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t<div class=\"inputContainer\" (mouseenter)=\"setErrorTooltipOffset()\">\n\t\t\t<ng-container *ngIf=\"errorMessageAsTooltip && shouldShowErrorMessages() && getErrorToShow()\">\n\t\t\t\t<div class=\"errorTooltipTriangle\"></div>\n\t\t\t\t<div class=\"errorTooltipTriangleWhite\"></div>\n\t\t\t\t<div class=\"errorTooltip\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t\t\t</div>\n\t\t\t</ng-container>\n\t\t\t<ng-content></ng-content>\n\t\t</div>\n\t</div>\n</div>\n\n<ng-template #captionTpl let-forCalculation=\"forCalculation\">\n\t<div class=\"caption\"\n\t\t*ngIf=\"caption || captionRef\"\n\t\t[ngClass]=\"{\n\t\t\twithErrorRightOfCaption: getErrorLocation() === 'rightOfCaption'\n\t\t}\"\n\t>\n\t\t<div *ngIf=\"captionRef\" class=\"captionRefContainer\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"captionRef\"></ng-container>\n\t\t\t<div *ngIf=\"isRequired()\">&nbsp;*</div>\n\t\t</div>\n\t\t<div *ngIf=\"!captionRef\" class=\"captionText\">{{caption}}<span *ngIf=\"isRequired()\">&nbsp;*</span></div>\n\t\t<div class=\"rightOfCaptionError\" *ngIf=\"hasRightOfCaptionError()\" [ngClass]=\"{errorFullyVisible: errorFullyVisible}\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"errorRef\" [ngTemplateOutletContext]=\"{forCalculation: forCalculation}\"></ng-container>\n\t\t</div>\n\t</div>\n</ng-template>\n\n<ng-template #errorRef let-forCalculation=\"forCalculation\">\n\t<div *ngIf=\"shouldShowErrorMessages() && getErrorToShow()\" class=\"errorContainer\" [elementIsTruncatedCb]=\"forCalculation ? setErrorMessageIsTruncated : null\" [ngClass]=\"{horizontal: direction === 'horizontal', hasCaption: caption || captionRef, 'd30-70': spaceDistribution === '30-70', 'd34-66': spaceDistribution === '34-66'}\">\n\t\t<div *ngIf=\"showDefaultError('min')\">{{substituteParameters(getErrorMessage(\"min\"), {min: attachedControl.errors.min.min})}}</div>\n\t\t<div *ngIf=\"showDefaultError('max')\">{{substituteParameters(getErrorMessage(\"max\"), {max: attachedControl.errors.max.max})}}</div>\n\t\t<div *ngIf=\"showDefaultError('required')\">{{getErrorMessage(\"required\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('email')\">{{getErrorMessage(\"email\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('minlength')\">{{substituteParameters(getErrorMessage(\"minLength\"), {minLength: attachedControl.errors.minlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('maxlength')\">{{substituteParameters(getErrorMessage(\"maxLength\"), {maxLength: attachedControl.errors.maxlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('pattern')\">{{getErrorMessage(\"pattern\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('MatchPassword')\">{{getErrorMessage(\"matchPassword\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('date')\">{{getErrorMessage(\"date\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('message')\">{{attachedControl.errors.message.value}}</div>\n\t\t<div [ngTemplateOutlet]=\"getCustomErrorHandler(getErrorToShow())?.templateRef\"></div>\n\t</div>\n</ng-template>\n\n<ng-template #tailTpl>\n\t<div class=\"errorTooltipContainer\" [ngClass]=\"{alwaysOpen: shouldShowErrorTooltipOpened()}\">\n\t\t<ng-container *ngIf=\"hasHoverableErrorTooltip() || shouldShowErrorTooltipOpened()\">\n\t\t\t<div class=\"errorTooltipTriangle\"></div>\n\t\t\t<div class=\"errorTooltipTriangleWhite\"></div>\n\n\t\t\t<div class=\"absoluteAnchor\" #absoluteAnchor></div>\n\t\t\t<div class=\"fixedAnchor\" #fixedAnchor></div>\n\t\t\t<div class=\"fixedWrapper\" #fixedWrapper>\n\t\t\t\t<div class=\"errorTooltip\" [ngClass]=\"{noPointerEvents: !shouldShowErrorTooltipOpened()}\">\n\t\t\t\t\t<div class=\"errorTooltipInner\">\n\t\t\t\t\t\t<i class=\"closeBtn\" (click)=\"closePopup();\">\u00D7</i>\n\t\t\t\t\t\t<ng-container *ngIf=\"getErrorToShow()\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t\t\t\t\t<div *ngIf=\"!getErrorToShow() && shouldShowWarningPopup()\">{{getWarningToShow()}}</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t</ng-container>\n\t\t<klp-form-warning-icon variant=\"fill\" *ngIf=\"getErrorToShow()\" (click)=\"togglePopup()\"></klp-form-warning-icon>\n\t\t<klp-form-warning-icon variant=\"line\" *ngIf=\"!getErrorToShow() && getWarningToShow()\" (click)=\"togglePopup()\"></klp-form-warning-icon>\n\t</div>\n</ng-template>\n", styles: [":host{display:block}.componentContainer:not(.hasCaption) .captionInputAndError{display:block}.componentContainer:not(.hasCaption) .captionInputAndError .inputContainer{margin-top:0;padding-left:0;max-width:initial}.componentContainer:not(.hasCaption) .errorContainer{padding-left:0}.componentContainer.hasCaption .errorAboveInputContainer .spacer{display:block}.componentContainer.reverseOrder .captionInputAndError{flex-direction:row-reverse;justify-content:flex-end}.componentContainer.vertical .captionInputAndError{display:block}.componentContainer.vertical .captionInputAndError .inputContainer{margin-top:.3125rem}.componentContainer.vertical .captionInputAndError .errorContainer{margin-left:0}.componentContainer.topAlignment .captionInputAndError{align-items:flex-start}.componentContainer.horizontal.hasCaption .inputContainer,.componentContainer.horizontal.hasCaption .errorAboveInputContainer .errorContainer{padding-left:1rem}.componentContainer.horizontal.hasCaption.d40-60 .errorAboveInputContainer .spacer{flex:0 1 40%}.componentContainer.horizontal.hasCaption.d40-60 .errorAboveInputContainer .errorContainer{flex:60 1 0px}.componentContainer.horizontal.hasCaption.d40-60 .caption{max-width:40%;flex:40 1 0px}.componentContainer.horizontal.hasCaption.d40-60 .inputContainer{max-width:60%;flex:60 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .errorAboveInputContainer .spacer{flex:0 1 34%}.componentContainer.horizontal.hasCaption.d34-66 .errorAboveInputContainer .errorContainer{flex:66 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .caption{max-width:34%;flex:34 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .inputContainer{max-width:66%;flex:66 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .errorAboveInputContainer .spacer{flex:0 1 30%}.componentContainer.horizontal.hasCaption.d30-70 .errorAboveInputContainer .errorContainer{flex:70 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .caption{max-width:30%;flex:30 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .inputContainer{max-width:70%;flex:70 1 0px}.componentContainer.fixedInputWidth .caption{flex:1 1 0px;overflow:hidden}.componentContainer.fixedInputWidth .inputContainer{flex:0 0 auto}.captionInputAndError{display:flex;align-items:center;min-height:42px}.errorAboveInputContainer{display:flex}.errorAboveInputContainer .spacer{display:none}.captionDummyForSpaceCalculation .caption.withErrorRightOfCaption{height:0px;overflow:hidden}.captionDummyForSpaceCalculation .caption.withErrorRightOfCaption .rightOfCaptionError{display:block}.captionRefContainer{display:flex}.caption{font-weight:700;flex:0 0 auto;color:#515365}.caption.percentageSpacing{max-width:40%;flex:40 1 0px}.caption.percentageSpacing.d30-70{max-width:30%;flex:30 1 0px}.caption.percentageSpacing.d34-66{max-width:34%;flex:34 1 0px}.caption.withErrorRightOfCaption{display:flex;justify-content:space-between;gap:1rem}.caption.withErrorRightOfCaption .captionText{flex:1 2 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.caption.withErrorRightOfCaption .rightOfCaptionError{display:none;max-width:40%;font-weight:400;overflow:hidden;flex:1 0 auto;text-align:right}.caption.withErrorRightOfCaption .rightOfCaptionError.errorFullyVisible{display:block}.caption.withErrorRightOfCaption .rightOfCaptionError ::ng-deep *{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.inputContainer{position:relative;flex:1}.inputContainer .errorTooltipContainer{position:relative}.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipTriangle,.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipTriangleWhite,.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltip{display:flex}.inputContainer .errorTooltipContainer.alwaysOpen .closeBtn{display:block}.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipInner{padding-right:1.4rem}.inputContainer .errorTooltipContainer klp-form-warning-icon{cursor:pointer}.inputContainer .errorTooltipContainer .absoluteAnchor{position:absolute}.inputContainer .errorTooltipContainer .fixedAnchor,.inputContainer .errorTooltipContainer .fixedWrapper{position:fixed}.inputContainer .errorTooltipTriangle{display:none;z-index:1;position:absolute;right:0;transform:translate(-.15rem,calc(-100% - .1rem)) scaleX(.8);width:0px;height:0px;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid rgba(0,0,0,.13)}.inputContainer .errorTooltipTriangleWhite{display:none;z-index:3;position:absolute;right:0;transform:translate(-.15rem,calc(-100% - .1rem - 2px)) scaleX(.8);width:0px;height:0px;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid white}.inputContainer .errorTooltip{display:none;justify-content:flex-end;position:absolute;top:-.6rem;right:-1.875rem;transform:translateY(-100%);width:20rem}.inputContainer .errorTooltip.noPointerEvents{pointer-events:none}.inputContainer .errorTooltip .closeBtn{display:none;position:absolute;top:.2rem;right:.2rem;padding:.2rem .4rem;cursor:pointer;color:#666;font-size:1rem}.inputContainer .errorTooltip .closeBtn:hover{color:#515365}.inputContainer .errorTooltipInner{background:white;padding:.4rem .6rem;border-radius:.4rem;border:1px solid rgba(0,0,0,.13);box-shadow:#00000021 2px 3px 10px}.inputContainer:hover .errorTooltipContainer .errorTooltip,.inputContainer:hover .errorTooltipContainer .errorTooltipTriangle,.inputContainer:hover .errorTooltipContainer .errorTooltipTriangleWhite{display:flex}.errorContainer{color:#ff8000}\n"] }]
210
+ args: [{ selector: 'klp-form-element', template: "<div\n\tclass=\"componentContainer\"\n\t[ngClass]=\"{\n\t\thasCaption: caption || captionRef,\n\t\tvertical: direction === 'vertical',\n\t\thorizontal: direction === 'horizontal',\n\t\ttopAlignment: verticalAlignment === 'top',\n\t\treverseOrder: swapInputAndCaption,\n\t\thasErrors: getErrorToShow() && attachedControl.touched,\n\t\tpercentageSpacing: captionSpacing === 'percentages' && spaceDistribution !== 'fixedInputWidth',\n\t\t'd40-60': spaceDistribution === '40-60',\n\t\t'd30-70': spaceDistribution === '30-70',\n\t\t'd34-66': spaceDistribution === '34-66',\n\t\t'fixedInputWidth': spaceDistribution === 'fixedInputWidth'\n\t}\"\n>\n\t<div class=\"errorAboveInputContainer\" *ngIf=\"direction === 'horizontal' && !errorMessageAsTooltip\">\n\t\t<div class=\"spacer\"></div>\n\t\t<ng-container [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t</div>\n\n\t<div class=\"captionInputAndError\" #internalComponentRef>\n\t\t<div class=\"captionDummyForSpaceCalculation\" #captionDummyForSpaceCalculation *ngIf=\"hasRightOfCaptionError()\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"captionTpl\" [ngTemplateOutletContext]=\"{forCalculation: true}\"></ng-container>\n\t\t</div>\n\t\t<ng-container [ngTemplateOutlet]=\"captionTpl\"></ng-container>\n\t\t<ng-container *ngIf=\"direction === 'vertical' && getErrorLocation() === 'belowCaption' && !errorMessageAsTooltip\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t<div class=\"inputContainer\" (mouseenter)=\"setErrorTooltipOffset()\">\n\t\t\t<ng-container *ngIf=\"errorMessageAsTooltip && shouldShowErrorMessages() && getErrorToShow()\">\n\t\t\t\t<div class=\"errorTooltipTriangle\"></div>\n\t\t\t\t<div class=\"errorTooltipTriangleWhite\"></div>\n\t\t\t\t<div class=\"errorTooltip\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t\t\t</div>\n\t\t\t</ng-container>\n\t\t\t<ng-content></ng-content>\n\t\t</div>\n\t</div>\n</div>\n\n<ng-template #captionTpl let-forCalculation=\"forCalculation\">\n\t<div class=\"caption\"\n\t\t*ngIf=\"caption || captionRef\"\n\t\t[ngClass]=\"{\n\t\t\twithErrorRightOfCaption: getErrorLocation() === 'rightOfCaption'\n\t\t}\"\n\t>\n\t\t<div *ngIf=\"captionRef\" class=\"captionRefContainer\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"captionRef\"></ng-container>\n\t\t\t<div *ngIf=\"isRequired()\">&nbsp;*</div>\n\t\t</div>\n\t\t<div *ngIf=\"!captionRef\" class=\"captionText\">{{caption}}<span *ngIf=\"isRequired()\">&nbsp;*</span></div>\n\t\t<div class=\"rightOfCaptionError\" *ngIf=\"hasRightOfCaptionError()\" [ngClass]=\"{errorFullyVisible: errorFullyVisible}\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"errorRef\" [ngTemplateOutletContext]=\"{forCalculation: forCalculation}\"></ng-container>\n\t\t</div>\n\t</div>\n</ng-template>\n\n<ng-template #errorRef let-forCalculation=\"forCalculation\">\n\t<div *ngIf=\"shouldShowErrorMessages() && getErrorToShow()\" class=\"errorContainer\" [elementIsTruncatedCb]=\"forCalculation ? setErrorMessageIsTruncated : null\" [ngClass]=\"{horizontal: direction === 'horizontal', hasCaption: caption || captionRef, 'd30-70': spaceDistribution === '30-70', 'd34-66': spaceDistribution === '34-66'}\">\n\t\t<div *ngIf=\"showDefaultError('min')\">{{substituteParameters(getErrorMessage(\"min\"), {min: attachedControl.errors.min.min})}}</div>\n\t\t<div *ngIf=\"showDefaultError('max')\">{{substituteParameters(getErrorMessage(\"max\"), {max: attachedControl.errors.max.max})}}</div>\n\t\t<div *ngIf=\"showDefaultError('required')\">{{getErrorMessage(\"required\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('email')\">{{getErrorMessage(\"email\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('minlength')\">{{substituteParameters(getErrorMessage(\"minLength\"), {minLength: attachedControl.errors.minlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('maxlength')\">{{substituteParameters(getErrorMessage(\"maxLength\"), {maxLength: attachedControl.errors.maxlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('pattern')\">{{getErrorMessage(\"pattern\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('MatchPassword')\">{{getErrorMessage(\"matchPassword\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('date')\">{{getErrorMessage(\"date\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('message')\">{{attachedControl.errors.message.value}}</div>\n\t\t<div [ngTemplateOutlet]=\"getCustomErrorHandler(getErrorToShow())?.templateRef\"></div>\n\t</div>\n</ng-template>\n\n<ng-template #tailTpl>\n\t<div class=\"errorTooltipContainer\" [ngClass]=\"{alwaysOpen: shouldShowErrorTooltipOpened()}\">\n\t\t<ng-container *ngIf=\"hasHoverableErrorTooltip() || shouldShowErrorTooltipOpened()\">\n\t\t\t<div class=\"errorTooltipTriangle\"></div>\n\t\t\t<div class=\"errorTooltipTriangleWhite\"></div>\n\n\t\t\t<div class=\"absoluteAnchor\" #absoluteAnchor></div>\n\t\t\t<div class=\"fixedAnchor\" #fixedAnchor></div>\n\t\t\t<div class=\"fixedWrapper\" #fixedWrapper>\n\t\t\t\t<div class=\"errorTooltip\" [ngClass]=\"{noPointerEvents: !shouldShowErrorTooltipOpened()}\">\n\t\t\t\t\t<div class=\"errorTooltipInner\">\n\t\t\t\t\t\t<i class=\"closeBtn\" (click)=\"closePopup();\">\u00D7</i>\n\t\t\t\t\t\t<ng-container *ngIf=\"getErrorToShow()\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t\t\t\t\t<div *ngIf=\"!getErrorToShow() && shouldShowWarningPopup()\">\n\t\t\t\t\t\t\t<ng-container *ngIf=\"getWarningToShowIsTemplateRef()\" [ngTemplateOutlet]=\"getWarningToShowAsTemplateRef()\"></ng-container>\n\t\t\t\t\t\t\t<span *ngIf=\"!getWarningToShowIsTemplateRef()\">{{getWarningToShow()}}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t</ng-container>\n\t\t<klp-form-warning-icon variant=\"fill\" *ngIf=\"getErrorToShow()\" (click)=\"togglePopup()\"></klp-form-warning-icon>\n\t\t<klp-form-warning-icon variant=\"line\" *ngIf=\"!getErrorToShow() && getWarningToShow()\" (click)=\"togglePopup()\"></klp-form-warning-icon>\n\t</div>\n</ng-template>\n", styles: [":host{display:block}.componentContainer:not(.hasCaption) .captionInputAndError{display:block}.componentContainer:not(.hasCaption) .captionInputAndError .inputContainer{margin-top:0;padding-left:0;max-width:initial}.componentContainer:not(.hasCaption) .errorContainer{padding-left:0}.componentContainer.hasCaption .errorAboveInputContainer .spacer{display:block}.componentContainer.reverseOrder .captionInputAndError{flex-direction:row-reverse;justify-content:flex-end}.componentContainer.vertical .captionInputAndError{display:block}.componentContainer.vertical .captionInputAndError .inputContainer{margin-top:.3125rem}.componentContainer.vertical .captionInputAndError .errorContainer{margin-left:0}.componentContainer.topAlignment .captionInputAndError{align-items:flex-start}.componentContainer.horizontal.hasCaption .inputContainer,.componentContainer.horizontal.hasCaption .errorAboveInputContainer .errorContainer{padding-left:1rem}.componentContainer.horizontal.hasCaption.d40-60 .errorAboveInputContainer .spacer{flex:0 1 40%}.componentContainer.horizontal.hasCaption.d40-60 .errorAboveInputContainer .errorContainer{flex:60 1 0px}.componentContainer.horizontal.hasCaption.d40-60 .caption{max-width:40%;flex:40 1 0px}.componentContainer.horizontal.hasCaption.d40-60 .inputContainer{max-width:60%;flex:60 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .errorAboveInputContainer .spacer{flex:0 1 34%}.componentContainer.horizontal.hasCaption.d34-66 .errorAboveInputContainer .errorContainer{flex:66 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .caption{max-width:34%;flex:34 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .inputContainer{max-width:66%;flex:66 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .errorAboveInputContainer .spacer{flex:0 1 30%}.componentContainer.horizontal.hasCaption.d30-70 .errorAboveInputContainer .errorContainer{flex:70 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .caption{max-width:30%;flex:30 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .inputContainer{max-width:70%;flex:70 1 0px}.componentContainer.fixedInputWidth .caption{flex:1 1 0px;overflow:hidden}.componentContainer.fixedInputWidth .inputContainer{flex:0 0 auto}.captionInputAndError{display:flex;align-items:center;min-height:42px}.errorAboveInputContainer{display:flex}.errorAboveInputContainer .spacer{display:none}.captionDummyForSpaceCalculation .caption.withErrorRightOfCaption{height:0px;overflow:hidden}.captionDummyForSpaceCalculation .caption.withErrorRightOfCaption .rightOfCaptionError{display:block}.captionRefContainer{display:flex}.caption{font-weight:700;flex:0 0 auto;color:#515365}.caption.percentageSpacing{max-width:40%;flex:40 1 0px}.caption.percentageSpacing.d30-70{max-width:30%;flex:30 1 0px}.caption.percentageSpacing.d34-66{max-width:34%;flex:34 1 0px}.caption.withErrorRightOfCaption{display:flex;justify-content:space-between;gap:1rem}.caption.withErrorRightOfCaption .captionText{flex:1 2 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.caption.withErrorRightOfCaption .rightOfCaptionError{display:none;max-width:40%;font-weight:400;overflow:hidden;flex:1 0 auto;text-align:right}.caption.withErrorRightOfCaption .rightOfCaptionError.errorFullyVisible{display:block}.caption.withErrorRightOfCaption .rightOfCaptionError ::ng-deep *{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.inputContainer{position:relative;flex:1}.inputContainer .errorTooltipContainer{position:relative}.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipTriangle,.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipTriangleWhite,.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltip{display:flex}.inputContainer .errorTooltipContainer.alwaysOpen .closeBtn{display:block}.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipInner{padding-right:1.4rem}.inputContainer .errorTooltipContainer klp-form-warning-icon{cursor:pointer}.inputContainer .errorTooltipContainer .absoluteAnchor{position:absolute}.inputContainer .errorTooltipContainer .fixedAnchor,.inputContainer .errorTooltipContainer .fixedWrapper{position:fixed}.inputContainer .errorTooltipTriangle{display:none;z-index:1;position:absolute;right:0;transform:translate(-.15rem,calc(-100% - .1rem)) scaleX(.8);width:0px;height:0px;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid rgba(0,0,0,.13)}.inputContainer .errorTooltipTriangleWhite{display:none;z-index:3;position:absolute;right:0;transform:translate(-.15rem,calc(-100% - .1rem - 2px)) scaleX(.8);width:0px;height:0px;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid white}.inputContainer .errorTooltip{display:none;justify-content:flex-end;position:absolute;top:-.6rem;right:-1.875rem;transform:translateY(-100%);width:20rem}.inputContainer .errorTooltip.noPointerEvents{pointer-events:none}.inputContainer .errorTooltip .closeBtn{display:none;position:absolute;top:.2rem;right:.2rem;padding:.2rem .4rem;cursor:pointer;color:#666;font-size:1rem}.inputContainer .errorTooltip .closeBtn:hover{color:#515365}.inputContainer .errorTooltipInner{background:white;padding:.4rem .6rem;border-radius:.4rem;border:1px solid rgba(0,0,0,.13);box-shadow:#00000021 2px 3px 10px}.inputContainer:hover .errorTooltipContainer .errorTooltip,.inputContainer:hover .errorTooltipContainer .errorTooltipTriangle,.inputContainer:hover .errorTooltipContainer .errorTooltipTriangleWhite{display:flex}.errorContainer{color:#ff8000}\n"] }]
202
211
  }], ctorParameters: function () { return [{ type: i1.FormComponent, decorators: [{
203
212
  type: Optional
204
213
  }] }, { type: undefined, decorators: [{
@@ -242,4 +251,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
242
251
  type: ContentChild,
243
252
  args: [NG_VALUE_ACCESSOR]
244
253
  }] } });
245
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lbGVtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tsaXBwYS9uZ3gtZW5oYW5jeS1mb3Jtcy9zcmMvbGliL2Zvcm0vZm9ybS1lbGVtZW50L2Zvcm0tZWxlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbGlwcGEvbmd4LWVuaGFuY3ktZm9ybXMvc3JjL2xpYi9mb3JtL2Zvcm0tZWxlbWVudC9mb3JtLWVsZW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVOLFNBQVMsRUFDVCxZQUFZLEVBRVosTUFBTSxFQUNOLGNBQWMsRUFDZCxLQUFLLEVBQ0wsUUFBUSxFQUVSLFNBQVMsRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWtCLGlCQUFpQixFQUFxQixNQUFNLGdCQUFnQixDQUFDO0FBR3RGLE9BQU8sRUFBQyxVQUFVLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUVuRSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBR3hELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLElBQUksY0FBYyxDQUFzQixxQkFBcUIsQ0FBQyxDQUFDO0FBRWxHLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFzQjtJQUN4RCxHQUFHLEVBQUUsZ0NBQWdDO0lBQ3JDLEdBQUcsRUFBRSxpQ0FBaUM7SUFDdEMsUUFBUSxFQUFFLFVBQVU7SUFDcEIsS0FBSyxFQUFFLDJCQUEyQjtJQUNsQyxTQUFTLEVBQUUsZ0RBQWdEO0lBQzNELFNBQVMsRUFBRSxpREFBaUQ7SUFDNUQsT0FBTyxFQUFFLHlCQUF5QjtJQUNsQyxhQUFhLEVBQUUsc0JBQXNCO0lB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QXhCdkIsT0FBTztzQkFBdEIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLGNBQWM7c0JBQTdCLEtBQUs7Z0JBQ1UsaUJBQWlCO3NCQUFoQyxLQUFLO2dCQUNVLGlCQUFpQjtzQkFBaEMsS0FBSztnQkFDVSxtQkFBbUI7c0JBQWxDLEtBQUs7Z0JBQ1UscUJBQXFCO3NCQUFwQyxLQUFLO2dCQUNvQyxvQkFBb0I7c0JBQTdELFNBQVM7dUJBQUMsc0JBQXNCO2dCQUNKLE9BQU87c0JBQW5DLFNBQVM7dUJBQUMsU0FBUztnQkFDaUMsK0JBQStCO3NCQUFuRixTQUFTO3VCQUFDLGlDQUFpQztnQkFDUixjQUFjO3NCQUFqRCxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDTSxXQUFXO3NCQUEzQyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ1UsWUFBWTtzQkFBN0MsU0FBUzt1QkFBQyxjQUFjO2dCQUNRLFVBQVU7c0JBQTFDLFlBQVk7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0QWZ0ZXJWaWV3SW5pdCxcblx0Q29tcG9uZW50LFxuXHRDb250ZW50Q2hpbGQsXG5cdEVsZW1lbnRSZWYsXG5cdEluamVjdCxcblx0SW5qZWN0aW9uVG9rZW4sXG5cdElucHV0LFxuXHRPcHRpb25hbCxcblx0VGVtcGxhdGVSZWYsXG5cdFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUiwgVW50eXBlZEZvcm1Db250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1ZhbHVlQWNjZXNzb3JCYXNlfSBmcm9tICcuLi8uLi9lbGVtZW50cy92YWx1ZS1hY2Nlc3Nvci1iYXNlL3ZhbHVlLWFjY2Vzc29yLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7Q3VzdG9tRXJyb3JNZXNzYWdlcywgRm9ybUVycm9yTWVzc2FnZXN9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7aXNWYWx1ZVNldCwgc3RyaW5nSXNTZXRBbmRGaWxsZWR9IGZyb20gJy4uLy4uL3V0aWwvdmFsdWVzJztcbmltcG9ydCB7Rm9ybUNvbXBvbmVudH0gZnJvbSAnLi4vZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHthd2FpdGFibGVGb3JOZXh0Q3ljbGV9IGZyb20gJy4uLy4uL3V0aWwvYW5ndWxhcic7XG5pbXBvcnQge2dldEFsbExpbWl0aW5nQ29udGFpbmVyc30gZnJvbSAnLi4vLi4vdXRpbC9kb20nO1xuXG5cbmV4cG9ydCBjb25zdCBGT1JNX0VSUk9SX01FU1NBR0VTID0gbmV3IEluamVjdGlvblRva2VuPEN1c3RvbUVycm9yTWVzc2FnZXM+KCdmb3JtLmVycm9yLm1lc3NhZ2VzJyk7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VSUk9SX01FU1NBR0VTOiBGb3JtRXJyb3JNZXNzYWdlcyA9IHtcblx0bWluOiAnVXNlIGEgbnVtYmVyIGxhcmdlciB0aGFuICVtaW4lJyxcblx0bWF4OiAnVXNlIGEgbnVtYmVyIHNtYWxsZXIgdGhhbiAlbWF4JScsXG5cdHJlcXVpcmVkOiAnUmVxdWlyZWQnLFxuXHRlbWFpbDogJ1VzZSBhIHZhbGlkIGVtYWlsIGFkZHJlc3MnLFxuXHRtaW5MZW5ndGg6ICdIYXMgdG8gYmUgbG9uZ2VyIHRoYW4gJW1pbkxlbmd0aCUgY2hhcmFjdGVyKHMpJyxcblx0bWF4TGVuZ3RoOiAnSGFzIHRvIGJlIHNob3J0ZXIgdGhhbiAlbWF4TGVuZ3RoJSBjaGFyYWN0ZXIocyknLFxuXHRwYXR0ZXJuOiAnVGhpcyBpbnB1dCBpcyBub3QgdmFsaWQnLFxuXHRtYXRjaFBhc3N3b3JkOiAnUGFzc3dvcmRzIG11c3QgbWF0Y2gnLFxuXHRkYXRlOiAnRW50ZXIgYSB2YWxpZCBkYXRlJyxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2tscC1mb3JtLWVsZW1lbnQnLFxuXHR0ZW1wbGF0ZVVybDogJy4vZm9ybS1lbGVtZW50LmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmxzOiBbJy4vZm9ybS1lbGVtZW50LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1FbGVtZW50Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cdHB1YmxpYyBhdHRhY2hlZENvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcblx0QElucHV0KCkgcHVibGljIGNhcHRpb246IHN0cmluZztcblx0QElucHV0KCkgcHVibGljIGRpcmVjdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJyA9ICdob3Jpem9udGFsJztcblx0QElucHV0KCkgcHVibGljIGNhcHRpb25TcGFjaW5nOiAncGVyY2VudGFnZXMnIHwgJ25vbmUnID0gJ3BlcmNlbnRhZ2VzJztcblx0QElucHV0KCkgcHVibGljIHZlcnRpY2FsQWxpZ25tZW50OiAnY2VudGVyJyB8ICd0b3AnID0gJ2NlbnRlcic7XG5cdEBJbnB1dCgpIHB1YmxpYyBzcGFjZURpc3RyaWJ1dGlvbjogJzQwLTYwJyB8ICczNC02NicgfCAnMzAtNzAnIHwgJ2ZpeGVkSW5wdXRXaWR0aCcgPSAnNDAtNjAnO1xuXHRASW5wdXQoKSBwdWJsaWMgc3dhcElucHV0QW5kQ2FwdGlvbiA9IGZhbHNlO1xuXHRASW5wdXQoKSBwdWJsaWMgZXJyb3JNZXNzYWdlQXNUb29sdGlwID0gZmFsc2U7XG5cdEBWaWV3Q2hpbGQoJ2ludGVybmFsQ29tcG9uZW50UmVmJykgcHVibGljIGludGVybmFsQ29tcG9uZW50UmVmOiBFbGVtZW50UmVmO1xuXHRAVmlld0NoaWxkKCd0YWlsVHBsJykgcHVibGljIHRhaWxUcGw6IFRlbXBsYXRlUmVmPGFueT47XG5cdEBWaWV3Q2hpbGQoJ2NhcHRpb25EdW1teUZvclNwYWNlQ2FsY3VsYXRpb24nKSBwdWJsaWMgY2FwdGlvbkR1bW15Rm9yU3BhY2VDYWxjdWxhdGlvbjogRWxlbWVudFJlZjtcblx0QFZpZXdDaGlsZCgnYWJzb2x1dGVBbmNob3InKSBwdWJsaWMgYWJzb2x1dGVBbmNob3I6IEVsZW1lbnRSZWY7XG5cdEBWaWV3Q2hpbGQoJ2ZpeGVkQW5jaG9yJykgcHVibGljIGZpeGVkQW5jaG9yOiBFbGVtZW50UmVmO1xuXHRAVmlld0NoaWxkKCdmaXhlZFdyYXBwZXInKSBwdWJsaWMgZml4ZWRXcmFwcGVyOiBFbGVtZW50UmVmO1xuXHRAQ29udGVudENoaWxkKE5HX1ZBTFVFX0FDQ0VTU09SKSBmaWVsZElucHV0OiBWYWx1ZUFjY2Vzc29yQmFzZTxhbnk+O1xuXG5cdHB1YmxpYyBjYXB0aW9uUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXHRwdWJsaWMgZXJyb3JNZXNzYWdlczogRm9ybUVycm9yTWVzc2FnZXMgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTO1xuXHRwdWJsaWMgY3VzdG9tRXJyb3JIYW5kbGVyczogQXJyYXk8eyBlcnJvcjogc3RyaW5nOyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PiB9PiA9IFtdO1xuXHRwcml2YXRlIGlucHV0OiBWYWx1ZUFjY2Vzc29yQmFzZTxhbnk+O1xuXHRwdWJsaWMgZXJyb3JGdWxseVZpc2libGU6IGJvb2xlYW47XG5cdHByaXZhdGUgcG9wdXBTdGF0ZTogJ2xvY2tlZE9wZW4nIHwgJ2xvY2tlZENsb3NlZCcgfCAnb25Ib3ZlcicgPSAnb25Ib3Zlcic7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0QE9wdGlvbmFsKCkgcHJpdmF0ZSBwYXJlbnQ6IEZvcm1Db21wb25lbnQsXG5cdFx0QEluamVjdChGT1JNX0VSUk9SX01FU1NBR0VTKSBAT3B0aW9uYWwoKSBwcml2YXRlIGN1c3RvbU1lc3NhZ2VzOiBDdXN0b21FcnJvck1lc3NhZ2VzLFxuXHRcdHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXG5cdCkge1xuXHR9XG5cblx0YXN5bmMgbmdBZnRlclZpZXdJbml0KCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IGF3YWl0YWJsZUZvck5leHRDeWNsZSgpO1xuXHRcdHRoaXMuZmllbGRJbnB1dD8uc2V0VGFpbFRwbCh0aGlzLnRhaWxUcGwpO1xuXHRcdHRoaXMuZmllbGRJbnB1dD8ub25Ub3VjaC5hc09ic2VydmFibGUoKS5zdWJzY3JpYmUoKGUpID0+IHtcblx0XHRcdHRoaXMuZGV0ZXJtaW5lUG9wdXBTdGF0ZSgpO1xuXHRcdH0pO1xuXG5cdFx0Wy4uLmdldEFsbExpbWl0aW5nQ29udGFpbmVycyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQpLCB3aW5kb3ddLmZvckVhY2goZSA9PiBlLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc2V0RXJyb3JUb29sdGlwT2Zmc2V0KSk7XG5cdH1cblxuXHRwdWJsaWMgc2hvdWxkU2hvd0Vycm9yTWVzc2FnZXMoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMucGFyZW50Py5zaG93RXJyb3JNZXNzYWdlcyAhPT0gZmFsc2U7XG5cdH1cblxuXHRwdWJsaWMgc3Vic3RpdHV0ZVBhcmFtZXRlcnMobWVzc2FnZTogc3RyaW5nLCBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMocGFyYW1ldGVycykucmVkdWNlKChtc2csIGtleSkgPT4ge1xuXHRcdFx0cmV0dXJuIG1zZy5yZXBsYWNlKGAlJHtrZXl9JWAsIHBhcmFtZXRlcnNba2V5XSk7XG5cdFx0fSwgbWVzc2FnZSk7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJDb250cm9sKGZvcm1Db250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wsIGlucHV0OiBWYWx1ZUFjY2Vzc29yQmFzZTxhbnk+ID0gbnVsbCk6IHZvaWQge1xuXHRcdHRoaXMuYXR0YWNoZWRDb250cm9sID0gZm9ybUNvbnRyb2w7XG5cdFx0dGhpcy5wYXJlbnQucmVnaXN0ZXJDb250cm9sKGZvcm1Db250cm9sLCB0aGlzKTtcblx0XHR0aGlzLmlucHV0ID0gaW5wdXQ7XG5cblxuXHRcdHRoaXMuYXR0YWNoZWRDb250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKChlKSA9PiB7XG5cdFx0XHR0aGlzLmRldGVybWluZVBvcHVwU3RhdGUoKTtcblx0XHR9KTtcblx0XHR0aGlzLmRldGVybWluZVBvcHVwU3RhdGUoKTtcblx0fVxuXG5cdHB1YmxpYyBkZXRlcm1pbmVQb3B1cFN0YXRlKCk6IHZvaWQge1xuXHRcdGlmIChzdHJpbmdJc1NldEFuZEZpbGxlZCh0aGlzLmdldEVycm9yVG9TaG93KCkpKSB7XG5cdFx0XHR0aGlzLnBvcHVwU3RhdGUgPSAnb25Ib3Zlcic7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChzdHJpbmdJc1NldEFuZEZpbGxlZCh0aGlzLmdldFdhcm5pbmdUb1Nob3coKSkpIHtcblx0XHRcdHRoaXMucG9wdXBTdGF0ZSA9ICdsb2NrZWRPcGVuJztcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5wb3B1cFN0YXRlID0gJ29uSG92ZXInO1xuXHR9XG5cblx0cHVibGljIHVucmVnaXN0ZXJDb250cm9sKGZvcm1Db250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiB2b2lkIHtcblx0XHR0aGlzLmF0dGFjaGVkQ29udHJvbCA9IG51bGw7XG5cdFx0dGhpcy5wYXJlbnQudW5yZWdpc3RlckNvbnRyb2woZm9ybUNvbnRyb2wpO1xuXHR9XG5cblx0cHVibGljIGdldEF0dGFjaGVkQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuXHRcdHJldHVybiB0aGlzLmF0dGFjaGVkQ29udHJvbDtcblx0fVxuXG5cdHB1YmxpYyBnZXRBdHRhY2hlZElucHV0KCk6IFZhbHVlQWNjZXNzb3JCYXNlPGFueT4ge1xuXHRcdHJldHVybiB0aGlzLmlucHV0O1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyRXJyb3JIYW5kbGVyKGVycm9yOiBzdHJpbmcsIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+KTogdm9pZCB7XG5cdFx0dGhpcy5jdXN0b21FcnJvckhhbmRsZXJzLnB1c2goe2Vycm9yLCB0ZW1wbGF0ZVJlZn0pO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyQ2FwdGlvbih0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Pik6IHZvaWQge1xuXHRcdHRoaXMuY2FwdGlvblJlZiA9IHRlbXBsYXRlUmVmO1xuXHR9XG5cblx0Z2V0V2FybmluZ1RvU2hvdygpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLnBhcmVudD8uZ2V0V2FybmluZ1RvU2hvdyh0aGlzLmF0dGFjaGVkQ29udHJvbCk7XG5cdH1cblxuXHRnZXRFcnJvclRvU2hvdygpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGZpcnN0RXJyb3IgPSBPYmplY3Qua2V5cyh0aGlzLmF0dGFjaGVkQ29udHJvbD8uZXJyb3JzID8/IHt9KVswXTtcblx0XHRpZiAodGhpcy5hdHRhY2hlZENvbnRyb2w/LnRvdWNoZWQgIT09IHRydWUpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRpZiAoIXRoaXMuYXR0YWNoZWRDb250cm9sPy5lcnJvcnMpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRyZXR1cm4gZmlyc3RFcnJvcjtcblx0fVxuXG5cdGdldEN1c3RvbUVycm9ySGFuZGxlcihlcnJvcjogc3RyaW5nKTogeyBlcnJvcjogc3RyaW5nOyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PiB9IHtcblx0XHRyZXR1cm4gdGhpcy5jdXN0b21FcnJvckhhbmRsZXJzLmZpbmQoKGUpID0+IGUuZXJyb3IgPT09IGVycm9yKTtcblx0fVxuXG5cdHNob3dEZWZhdWx0RXJyb3IoZXJyb3I6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldEVycm9yVG9TaG93KCkgPT09IGVycm9yICYmICF0aGlzLmN1c3RvbUVycm9ySGFuZGxlcnMuc29tZSgoZSkgPT4gZS5lcnJvciA9PT0gZXJyb3IpO1xuXHR9XG5cblx0Z2V0U2Nyb2xsYWJsZVBhcmVudChub2RlKTogYW55IHtcblx0XHRpZiAobm9kZSA9PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0aWYgKG5vZGUuc2Nyb2xsSGVpZ2h0ID4gbm9kZS5jbGllbnRIZWlnaHQpIHtcblx0XHRcdHJldHVybiBub2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGxhYmxlUGFyZW50KG5vZGUucGFyZW50Tm9kZSk7XG5cdFx0fVxuXHR9XG5cblx0c2Nyb2xsVG8oKTogdm9pZCB7XG5cdFx0dGhpcy5pbnRlcm5hbENvbXBvbmVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHRydWUpO1xuXHRcdC8vIHRvIGdpdmUgc29tZSBicmVhdGhpbmcgcm9vbSwgd2Ugc2Nyb2xsIDEwMHB4IG1vcmUgdG8gdGhlIHRvcFxuXHRcdHRoaXMuZ2V0U2Nyb2xsYWJsZVBhcmVudCh0aGlzLmludGVybmFsQ29tcG9uZW50UmVmLm5hdGl2ZUVsZW1lbnQpPy5zY3JvbGxCeSgwLCAtMTAwKTtcblx0fVxuXG5cdGlzUmVxdWlyZWQoKTogYm9vbGVhbiB7XG5cdFx0aWYgKGlzVmFsdWVTZXQodGhpcy5pbnB1dCkpIHtcblx0XHRcdHJldHVybiB0aGlzLmlucHV0Lmhhc1ZhbGlkYXRvcigncmVxdWlyZWQnKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Z2V0RXJyb3JNZXNzYWdlKGtleToga2V5b2YgRm9ybUVycm9yTWVzc2FnZXMpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmN1c3RvbU1lc3NhZ2VzPy5ba2V5XT8uKCkgPz8gdGhpcy5lcnJvck1lc3NhZ2VzW2tleV07XG5cdH1cblxuXHRwdWJsaWMgZ2V0RXJyb3JMb2NhdGlvbigpOiAnYmVsb3dDYXB0aW9uJyB8ICdyaWdodE9mQ2FwdGlvbicge1xuXHRcdHJldHVybiB0aGlzLnBhcmVudD8uZXJyb3JNZXNzYWdlTG9jYXRpb24gPz8gJ2JlbG93Q2FwdGlvbic7XG5cdH1cblxuXHRwdWJsaWMgc2hvdWxkU2hvd0Vycm9yVG9vbHRpcE9wZW5lZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5wb3B1cFN0YXRlID09PSAnbG9ja2VkT3Blbic7XG5cdH1cblxuXHRwdWJsaWMgaGFzSG92ZXJhYmxlRXJyb3JUb29sdGlwKCk6IGJvb2xlYW4ge1xuXHRcdGlmICghdGhpcy5oYXNSaWdodE9mQ2FwdGlvbkVycm9yKCkgJiYgIXRoaXMuZXJyb3JNZXNzYWdlQXNUb29sdGlwKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmICh0aGlzLnBvcHVwU3RhdGUgIT09ICdvbkhvdmVyJykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoc3RyaW5nSXNTZXRBbmRGaWxsZWQodGhpcy5nZXRFcnJvclRvU2hvdygpKSkge1xuXHRcdFx0cmV0dXJuICF0aGlzLmVycm9yRnVsbHlWaXNpYmxlO1xuXHRcdH1cblx0XHRpZiAoc3RyaW5nSXNTZXRBbmRGaWxsZWQodGhpcy5nZXRXYXJuaW5nVG9TaG93KCkpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cHVibGljIGhhc1JpZ2h0T2ZDYXB0aW9uRXJyb3IoKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMuZXJyb3JNZXNzYWdlQXNUb29sdGlwKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmRpcmVjdGlvbiAhPT0gJ3ZlcnRpY2FsJyB8fCB0aGlzLmdldEVycm9yTG9jYXRpb24oKSAhPT0gJ3JpZ2h0T2ZDYXB0aW9uJykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHB1YmxpYyBzZXRFcnJvck1lc3NhZ2VJc1RydW5jYXRlZCA9IChpc1RydW5jYXRlZDogYm9vbGVhbikgPT4ge1xuXHRcdHRoaXMuZXJyb3JGdWxseVZpc2libGUgPSAhaXNUcnVuY2F0ZWQ7XG5cdH1cblxuXHRwdWJsaWMgc2hvdWxkU2hvd1dhcm5pbmdQb3B1cCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gc3RyaW5nSXNTZXRBbmRGaWxsZWQodGhpcy5nZXRXYXJuaW5nVG9TaG93KCkpO1xuXHR9XG5cblx0cHVibGljIGNsb3NlUG9wdXAoKTogdm9pZCB7XG5cdFx0dGhpcy5wb3B1cFN0YXRlID0gJ29uSG92ZXInO1xuXHR9XG5cblx0cHVibGljIHRvZ2dsZVBvcHVwKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5lcnJvck1lc3NhZ2VBc1Rvb2x0aXAgJiYgIXRoaXMuaGFzUmlnaHRPZkNhcHRpb25FcnJvcigpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0aGlzLmVycm9yRnVsbHlWaXNpYmxlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0aGlzLnBvcHVwU3RhdGUgPT09ICdsb2NrZWRPcGVuJykge1xuXHRcdFx0dGhpcy5wb3B1cFN0YXRlID0gJ29uSG92ZXInO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnBvcHVwU3RhdGUgPSAnbG9ja2VkT3Blbic7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEVycm9yVG9vbHRpcE9mZnNldCA9ICgpOiB2b2lkID0+IHtcblx0XHRpZiAodGhpcy5wb3B1cFN0YXRlICE9PSAnbG9ja2VkT3BlbicgJiYgdGhpcy5wb3B1cFN0YXRlICE9PSAnb25Ib3ZlcicpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgcG9wdXBPZmZzZXRZID0gdGhpcy5hYnNvbHV0ZUFuY2hvcj8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmZpeGVkQW5jaG9yPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcblx0XHRpZiAodGhpcy5maXhlZFdyYXBwZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcblx0XHRcdHRoaXMuZml4ZWRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHtwb3B1cE9mZnNldFl9cHgpYDtcblx0XHR9XG5cdH07XG59XG4iLCI8ZGl2XG5cdGNsYXNzPVwiY29tcG9uZW50Q29udGFpbmVyXCJcblx0W25nQ2xhc3NdPVwie1xuXHRcdGhhc0NhcHRpb246IGNhcHRpb24gfHwgY2FwdGlvblJlZixcblx0XHR2ZXJ0aWNhbDogZGlyZWN0aW9uID09PSAndmVydGljYWwnLFxuXHRcdGhvcml6b250YWw6IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnLFxuXHRcdHRvcEFsaWdubWVudDogdmVydGljYWxBbGlnbm1lbnQgPT09ICd0b3AnLFxuXHRcdHJldmVyc2VPcmRlcjogc3dhcElucHV0QW5kQ2FwdGlvbixcblx0XHRoYXNFcnJvcnM6IGdldEVycm9yVG9TaG93KCkgJiYgYXR0YWNoZWRDb250cm9sLnRvdWNoZWQsXG5cdFx0cGVyY2VudGFnZVNwYWNpbmc6IGNhcHRpb25TcGFjaW5nID09PSAncGVyY2VudGFnZXMnICYmIHNwYWNlRGlzdHJpYnV0aW9uICE9PSAnZml4ZWRJbnB1dFdpZHRoJyxcblx0XHQnZDQwLTYwJzogc3BhY2VEaXN0cmlidXRpb24gPT09ICc0MC02MCcsXG5cdFx0J2QzMC03MCc6IHNwYWNlRGlzdHJpYnV0aW9uID09PSAnMzAtNzAnLFxuXHRcdCdkMzQtNjYnOiBzcGFjZURpc3RyaWJ1dGlvbiA9PT0gJzM0LTY2Jyxcblx0XHQnZml4ZWRJbnB1dFdpZHRoJzogc3BhY2VEaXN0cmlidXRpb24gPT09ICdmaXhlZElucHV0V2lkdGgnXG5cdH1cIlxuPlxuXHQ8ZGl2IGNsYXNzPVwiZXJyb3JBYm92ZUlucHV0Q29udGFpbmVyXCIgKm5nSWY9XCJkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyAmJiAhZXJyb3JNZXNzYWdlQXNUb29sdGlwXCI+XG5cdFx0PGRpdiBjbGFzcz1cInNwYWNlclwiPjwvZGl2PlxuXHRcdDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXJyb3JSZWZcIj48L25nLWNvbnRhaW5lcj5cblx0PC9kaXY+XG5cblx0PGRpdiBjbGFzcz1cImNhcHRpb25JbnB1dEFuZEVycm9yXCIgI2ludGVybmFsQ29tcG9uZW50UmVmPlxuXHRcdDxkaXYgY2xhc3M9XCJjYXB0aW9uRHVtbXlGb3JTcGFjZUNhbGN1bGF0aW9uXCIgI2NhcHRpb25EdW1teUZvclNwYWNlQ2FsY3VsYXRpb24gKm5nSWY9XCJoYXNSaWdodE9mQ2FwdGlvbkVycm9yKClcIj5cblx0XHRcdDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2FwdGlvblRwbFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Zm9yQ2FsY3VsYXRpb246IHRydWV9XCI+PC9uZy1jb250YWluZXI+XG5cdFx0PC9kaXY+XG5cdFx0PG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjYXB0aW9uVHBsXCI+PC9uZy1jb250YWluZXI+XG5cdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJiBnZXRFcnJvckxvY2F0aW9uKCkgPT09ICdiZWxvd0NhcHRpb24nICYmICFlcnJvck1lc3NhZ2VBc1Rvb2x0aXBcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJlcnJvclJlZlwiPjwvbmctY29udGFpbmVyPlxuXHRcdDxkaXYgY2xhc3M9XCJpbnB1dENvbnRhaW5lclwiIChtb3VzZWVudGVyKT1cInNldEVycm9yVG9vbHRpcE9mZnNldCgpXCI+XG5cdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiZXJyb3JNZXNzYWdlQXNUb29sdGlwICYmIHNob3VsZFNob3dFcnJvck1lc3NhZ2VzKCkgJiYgZ2V0RXJyb3JUb1Nob3coKVwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZXJyb3JUb29sdGlwVHJpYW5nbGVcIj48L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImVycm9yVG9vbHRpcFRyaWFuZ2xlV2hpdGVcIj48L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImVycm9yVG9vbHRpcFwiPlxuXHRcdFx0XHRcdDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXJyb3JSZWZcIj48L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNjYXB0aW9uVHBsIGxldC1mb3JDYWxjdWxhdGlvbj1cImZvckNhbGN1bGF0aW9uXCI+XG5cdDxkaXYgY2xhc3M9XCJjYXB0aW9uXCJcblx0XHQqbmdJZj1cImNhcHRpb24gfHwgY2FwdGlvblJlZlwiXG5cdFx0W25nQ2xhc3NdPVwie1xuXHRcdFx0d2l0aEVycm9yUmlnaHRPZkNhcHRpb246IGdldEVycm9yTG9jYXRpb24oKSA9PT0gJ3JpZ2h0T2ZDYXB0aW9uJ1xuXHRcdH1cIlxuXHQ+XG5cdFx0PGRpdiAqbmdJZj1cImNhcHRpb25SZWZcIiBjbGFzcz1cImNhcHRpb25SZWZDb250YWluZXJcIj5cblx0XHRcdDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2FwdGlvblJlZlwiPjwvbmctY29udGFpbmVyPlxuXHRcdFx0PGRpdiAqbmdJZj1cImlzUmVxdWlyZWQoKVwiPiZuYnNwOyo8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2ICpuZ0lmPVwiIWNhcHRpb25SZWZcIiBjbGFzcz1cImNhcHRpb25UZXh0XCI+e3tjYXB0aW9ufX08c3BhbiAqbmdJZj1cImlzUmVxdWlyZWQoKVwiPiZuYnNwOyo8L3NwYW4+PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cInJpZ2h0T2ZDYXB0aW9uRXJyb3JcIiAqbmdJZj1cImhhc1JpZ2h0T2ZDYXB0aW9uRXJyb3IoKVwiIFtuZ0NsYXNzXT1cIntlcnJvckZ1bGx5VmlzaWJsZTogZXJyb3JGdWxseVZpc2libGV9XCI+XG5cdFx0XHQ8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVycm9yUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntmb3JDYWxjdWxhdGlvbjogZm9yQ2FsY3VsYXRpb259XCI+PC9uZy1jb250YWluZXI+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNlcnJvclJlZiBsZXQtZm9yQ2FsY3VsYXRpb249XCJmb3JDYWxjdWxhdGlvblwiPlxuXHQ8ZGl2ICpuZ0lmPVwic2hvdWxkU2hvd0Vycm9yTWVzc2FnZXMoKSAmJiBnZXRFcnJvclRvU2hvdygpXCIgY2xhc3M9XCJlcnJvckNvbnRhaW5lclwiIFtlbGVtZW50SXNUcnVuY2F0ZWRDYl09XCJmb3JDYWxjdWxhdGlvbiA/IHNldEVycm9yTWVzc2FnZUlzVHJ1bmNhdGVkIDogbnVsbFwiIFtuZ0NsYXNzXT1cIntob3Jpem9udGFsOiBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJywgaGFzQ2FwdGlvbjogY2FwdGlvbiB8fCBjYXB0aW9uUmVmLCAnZDMwLTcwJzogc3BhY2VEaXN0cmlidXRpb24gPT09ICczMC03MCcsICdkMzQtNjYnOiBzcGFjZURpc3RyaWJ1dGlvbiA9PT0gJzM0LTY2J31cIj5cblx0XHQ8ZGl2ICpuZ0lmPVwic2hvd0RlZmF1bHRFcnJvcignbWluJylcIj57e3N1YnN0aXR1dGVQYXJhbWV0ZXJzKGdldEVycm9yTWVzc2FnZShcIm1pblwiKSwge21pbjogYXR0YWNoZWRDb250cm9sLmVycm9ycy5taW4ubWlufSl9fTwvZGl2PlxuXHRcdDxkaXYgKm5nSWY9XCJzaG93RGVmYXVsdEVycm9yKCdtYXgnKVwiPnt7c3Vic3RpdHV0ZVBhcmFtZXRlcnMoZ2V0RXJyb3JNZXNzYWdlKFwibWF4XCIpLCB7bWF4OiBhdHRhY2hlZENvbnRyb2wuZXJyb3JzLm1heC5tYXh9KX19PC9kaXY+XG5cdFx0PGRpdiAqbmdJZj1cInNob3dEZWZhdWx0RXJyb3IoJ3JlcXVpcmVkJylcIj57e2dldEVycm9yTWVzc2FnZShcInJlcXVpcmVkXCIpfX08L2Rpdj5cblx0XHQ8ZGl2ICpuZ0lmPVwic2hvd0RlZmF1bHRFcnJvcignZW1haWwnKVwiPnt7Z2V0RXJyb3JNZXNzYWdlKFwiZW1haWxcIil9fTwvZGl2PlxuXHRcdDxkaXYgKm5nSWY9XCJzaG93RGVmYXVsdEVycm9yKCdtaW5sZW5ndGgnKVwiPnt7c3Vic3RpdHV0ZVBhcmFtZXRlcnMoZ2V0RXJyb3JNZXNzYWdlKFwibWluTGVuZ3RoXCIpLCB7bWluTGVuZ3RoOiBhdHRhY2hlZENvbnRyb2wuZXJyb3JzLm1pbmxlbmd0aC5yZXF1aXJlZExlbmd0aH0pfX08L2Rpdj5cblx0XHQ8ZGl2ICpuZ0lmPVwic2hvd0RlZmF1bHRFcnJvcignbWF4bGVuZ3RoJylcIj57e3N1YnN0aXR1dGVQYXJhbWV0ZXJzKGdldEVycm9yTWVzc2FnZShcIm1heExlbmd0aFwiKSwge21heExlbmd0aDogYXR0YWNoZWRDb250cm9sLmVycm9ycy5tYXhsZW5ndGgucmVxdWlyZWRMZW5ndGh9KX19PC9kaXY+XG5cdFx0PGRpdiAqbmdJZj1cInNob3dEZWZhdWx0RXJyb3IoJ3BhdHRlcm4nKVwiPnt7Z2V0RXJyb3JNZXNzYWdlKFwicGF0dGVyblwiKX19PC9kaXY+XG5cdFx0PGRpdiAqbmdJZj1cInNob3dEZWZhdWx0RXJyb3IoJ01hdGNoUGFzc3dvcmQnKVwiPnt7Z2V0RXJyb3JNZXNzYWdlKFwibWF0Y2hQYXNzd29yZFwiKX19PC9kaXY+XG5cdFx0PGRpdiAqbmdJZj1cInNob3dEZWZhdWx0RXJyb3IoJ2RhdGUnKVwiPnt7Z2V0RXJyb3JNZXNzYWdlKFwiZGF0ZVwiKX19PC9kaXY+XG5cdFx0PGRpdiAqbmdJZj1cInNob3dEZWZhdWx0RXJyb3IoJ21lc3NhZ2UnKVwiPnt7YXR0YWNoZWRDb250cm9sLmVycm9ycy5tZXNzYWdlLnZhbHVlfX08L2Rpdj5cblx0XHQ8ZGl2IFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdldEN1c3RvbUVycm9ySGFuZGxlcihnZXRFcnJvclRvU2hvdygpKT8udGVtcGxhdGVSZWZcIj48L2Rpdj5cblx0PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RhaWxUcGw+XG5cdDxkaXYgY2xhc3M9XCJlcnJvclRvb2x0aXBDb250YWluZXJcIiBbbmdDbGFzc109XCJ7YWx3YXlzT3Blbjogc2hvdWxkU2hvd0Vycm9yVG9vbHRpcE9wZW5lZCgpfVwiPlxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNIb3ZlcmFibGVFcnJvclRvb2x0aXAoKSB8fCBzaG91bGRTaG93RXJyb3JUb29sdGlwT3BlbmVkKClcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJlcnJvclRvb2x0aXBUcmlhbmdsZVwiPjwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cImVycm9yVG9vbHRpcFRyaWFuZ2xlV2hpdGVcIj48L2Rpdj5cblxuXHRcdFx0PGRpdiBjbGFzcz1cImFic29sdXRlQW5jaG9yXCIgI2Fic29sdXRlQW5jaG9yPjwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cImZpeGVkQW5jaG9yXCIgI2ZpeGVkQW5jaG9yPjwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cImZpeGVkV3JhcHBlclwiICNmaXhlZFdyYXBwZXI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJlcnJvclRvb2x0aXBcIiBbbmdDbGFzc109XCJ7bm9Qb2ludGVyRXZlbnRzOiAhc2hvdWxkU2hvd0Vycm9yVG9vbHRpcE9wZW5lZCgpfVwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJlcnJvclRvb2x0aXBJbm5lclwiPlxuXHRcdFx0XHRcdFx0PGkgY2xhc3M9XCJjbG9zZUJ0blwiIChjbGljayk9XCJjbG9zZVBvcHVwKCk7XCI+w5c8L2k+XG5cdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0RXJyb3JUb1Nob3coKVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVycm9yUmVmXCI+PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdFx0XHQ8ZGl2ICpuZ0lmPVwiIWdldEVycm9yVG9TaG93KCkgJiYgc2hvdWxkU2hvd1dhcm5pbmdQb3B1cCgpXCI+e3tnZXRXYXJuaW5nVG9TaG93KCl9fTwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0PC9uZy1jb250YWluZXI+XG5cdFx0PGtscC1mb3JtLXdhcm5pbmctaWNvbiB2YXJpYW50PVwiZmlsbFwiICpuZ0lmPVwiZ2V0RXJyb3JUb1Nob3coKVwiIChjbGljayk9XCJ0b2dnbGVQb3B1cCgpXCI+PC9rbHAtZm9ybS13YXJuaW5nLWljb24+XG5cdFx0PGtscC1mb3JtLXdhcm5pbmctaWNvbiB2YXJpYW50PVwibGluZVwiICpuZ0lmPVwiIWdldEVycm9yVG9TaG93KCkgJiYgZ2V0V2FybmluZ1RvU2hvdygpXCIgKGNsaWNrKT1cInRvZ2dsZVBvcHVwKClcIj48L2tscC1mb3JtLXdhcm5pbmctaWNvbj5cblx0PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
254
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lbGVtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tsaXBwYS9uZ3gtZW5oYW5jeS1mb3Jtcy9zcmMvbGliL2Zvcm0vZm9ybS1lbGVtZW50L2Zvcm0tZWxlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbGlwcGEvbmd4LWVuaGFuY3ktZm9ybXMvc3JjL2xpYi9mb3JtL2Zvcm0tZWxlbWVudC9mb3JtLWVsZW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVOLFNBQVMsRUFDVCxZQUFZLEVBRVosTUFBTSxFQUNOLGNBQWMsRUFDZCxLQUFLLEVBQ0wsUUFBUSxFQUNSLFdBQVcsRUFDWCxTQUFTLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFrQixpQkFBaUIsRUFBcUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUd0RixPQUFPLEVBQUMsVUFBVSxFQUFFLG9CQUFvQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFbkUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQUd4RCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGNBQWMsQ0FBc0IscUJBQXFCLENBQUMsQ0FBQztBQUVsRyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBc0I7SUFDeEQsR0FBRyxFQUFFLGdDQUFnQztJQUNyQyxHQUFHLEVBQUUsaUNBQWlDO0lBQ3RDLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLEtBQUssRUFBRSwyQkFBMkI7SUFDbEMsU0FBUyxFQUFFLGdEQUFnRDtJQUMzRCxTQUFTLEVBQUUsaURBQWlEO0lBQzVELE9BQU8sRUFBRSx5QkFBeUI7SUFDbEMsYUFBYSxFQUFF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QUksQ0FBQyxVQUFVLEtBQUssWUFBWSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1NBQzVCO2FBQU07WUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztTQUMvQjtJQUNGLENBQUM7O2lIQXhOVyxvQkFBb0IsK0RBMEJ2QixtQkFBbUI7cUdBMUJoQixvQkFBb0Isc1dBZWxCLGlCQUFpQix1cUJDdkRoQywwMExBb0dBOzJGRDVEYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Msa0JBQWtCOzswQkE2QjFCLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsbUJBQW1COzswQkFBRyxRQUFRO3FFQXhCdkIsT0FBTztzQkFBdEIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLGNBQWM7c0JBQTdCLEtBQUs7Z0JBQ1UsaUJBQWlCO3NCQUFoQyxLQUFLO2dCQUNVLGlCQUFpQjtzQkFBaEMsS0FBSztnQkFDVSxtQkFBbUI7c0JBQWxDLEtBQUs7Z0JBQ1UscUJBQXFCO3NCQUFwQyxLQUFLO2dCQUNvQyxvQkFBb0I7c0JBQTdELFNBQVM7dUJBQUMsc0JBQXNCO2dCQUNKLE9BQU87c0JBQW5DLFNBQVM7dUJBQUMsU0FBUztnQkFDaUMsK0JBQStCO3NCQUFuRixTQUFTO3VCQUFDLGlDQUFpQztnQkFDUixjQUFjO3NCQUFqRCxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDTSxXQUFXO3NCQUEzQyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ1UsWUFBWTtzQkFBN0MsU0FBUzt1QkFBQyxjQUFjO2dCQUNRLFVBQVU7c0JBQTFDLFlBQVk7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0QWZ0ZXJWaWV3SW5pdCxcblx0Q29tcG9uZW50LFxuXHRDb250ZW50Q2hpbGQsXG5cdEVsZW1lbnRSZWYsXG5cdEluamVjdCxcblx0SW5qZWN0aW9uVG9rZW4sXG5cdElucHV0LFxuXHRPcHRpb25hbCxcblx0VGVtcGxhdGVSZWYsXG5cdFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUiwgVW50eXBlZEZvcm1Db250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1ZhbHVlQWNjZXNzb3JCYXNlfSBmcm9tICcuLi8uLi9lbGVtZW50cy92YWx1ZS1hY2Nlc3Nvci1iYXNlL3ZhbHVlLWFjY2Vzc29yLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7Q3VzdG9tRXJyb3JNZXNzYWdlcywgRm9ybUVycm9yTWVzc2FnZXN9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7aXNWYWx1ZVNldCwgc3RyaW5nSXNTZXRBbmRGaWxsZWR9IGZyb20gJy4uLy4uL3V0aWwvdmFsdWVzJztcbmltcG9ydCB7Rm9ybUNvbXBvbmVudH0gZnJvbSAnLi4vZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHthd2FpdGFibGVGb3JOZXh0Q3ljbGV9IGZyb20gJy4uLy4uL3V0aWwvYW5ndWxhcic7XG5pbXBvcnQge2dldEFsbExpbWl0aW5nQ29udGFpbmVyc30gZnJvbSAnLi4vLi4vdXRpbC9kb20nO1xuXG5cbmV4cG9ydCBjb25zdCBGT1JNX0VSUk9SX01FU1NBR0VTID0gbmV3IEluamVjdGlvblRva2VuPEN1c3RvbUVycm9yTWVzc2FnZXM+KCdmb3JtLmVycm9yLm1lc3NhZ2VzJyk7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VSUk9SX01FU1NBR0VTOiBGb3JtRXJyb3JNZXNzYWdlcyA9IHtcblx0bWluOiAnVXNlIGEgbnVtYmVyIGxhcmdlciB0aGFuICVtaW4lJyxcblx0bWF4OiAnVXNlIGEgbnVtYmVyIHNtYWxsZXIgdGhhbiAlbWF4JScsXG5cdHJlcXVpcmVkOiAnUmVxdWlyZWQnLFxuXHRlbWFpbDogJ1VzZSBhIHZhbGlkIGVtYWlsIGFkZHJlc3MnLFxuXHRtaW5MZW5ndGg6ICdIYXMgdG8gYmUgbG9uZ2VyIHRoYW4gJW1pbkxlbmd0aCUgY2hhcmFjdGVyKHMpJyxcblx0bWF4TGVuZ3RoOiAnSGFzIHRvIGJlIHNob3J0ZXIgdGhhbiAlbWF4TGVuZ3RoJSBjaGFyYWN0ZXIocyknLFxuXHRwYXR0ZXJuOiAnVGhpcyBpbnB1dCBpcyBub3QgdmFsaWQnLFxuXHRtYXRjaFBhc3N3b3JkOiAnUGFzc3dvcmRzIG11c3QgbWF0Y2gnLFxuXHRkYXRlOiAnRW50ZXIgYSB2YWxpZCBkYXRlJyxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2tscC1mb3JtLWVsZW1lbnQnLFxuXHR0ZW1wbGF0ZVVybDogJy4vZm9ybS1lbGVtZW50LmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmxzOiBbJy4vZm9ybS1lbGVtZW50LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1FbGVtZW50Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cdHB1YmxpYyBhdHRhY2hlZENvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcblx0QElucHV0KCkgcHVibGljIGNhcHRpb246IHN0cmluZztcblx0QElucHV0KCkgcHVibGljIGRpcmVjdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJyA9ICdob3Jpem9udGFsJztcblx0QElucHV0KCkgcHVibGljIGNhcHRpb25TcGFjaW5nOiAncGVyY2VudGFnZXMnIHwgJ25vbmUnID0gJ3BlcmNlbnRhZ2VzJztcblx0QElucHV0KCkgcHVibGljIHZlcnRpY2FsQWxpZ25tZW50OiAnY2VudGVyJyB8ICd0b3AnID0gJ2NlbnRlcic7XG5cdEBJbnB1dCgpIHB1YmxpYyBzcGFjZURpc3RyaWJ1dGlvbjogJzQwLTYwJyB8ICczNC02NicgfCAnMzAtNzAnIHwgJ2ZpeGVkSW5wdXRXaWR0aCcgPSAnNDAtNjAnO1xuXHRASW5wdXQoKSBwdWJsaWMgc3dhcElucHV0QW5kQ2FwdGlvbiA9IGZhbHNlO1xuXHRASW5wdXQoKSBwdWJsaWMgZXJyb3JNZXNzYWdlQXNUb29sdGlwID0gZmFsc2U7XG5cdEBWaWV3Q2hpbGQoJ2ludGVybmFsQ29tcG9uZW50UmVmJykgcHVibGljIGludGVybmFsQ29tcG9uZW50UmVmOiBFbGVtZW50UmVmO1xuXHRAVmlld0NoaWxkKCd0YWlsVHBsJykgcHVibGljIHRhaWxUcGw6IFRlbXBsYXRlUmVmPGFueT47XG5cdEBWaWV3Q2hpbGQoJ2NhcHRpb25EdW1teUZvclNwYWNlQ2FsY3VsYXRpb24nKSBwdWJsaWMgY2FwdGlvbkR1bW15Rm9yU3BhY2VDYWxjdWxhdGlvbjogRWxlbWVudFJlZjtcblx0QFZpZXdDaGlsZCgnYWJzb2x1dGVBbmNob3InKSBwdWJsaWMgYWJzb2x1dGVBbmNob3I6IEVsZW1lbnRSZWY7XG5cdEBWaWV3Q2hpbGQoJ2ZpeGVkQW5jaG9yJykgcHVibGljIGZpeGVkQW5jaG9yOiBFbGVtZW50UmVmO1xuXHRAVmlld0NoaWxkKCdmaXhlZFdyYXBwZXInKSBwdWJsaWMgZml4ZWRXcmFwcGVyOiBFbGVtZW50UmVmO1xuXHRAQ29udGVudENoaWxkKE5HX1ZBTFVFX0FDQ0VTU09SKSBmaWVsZElucHV0OiBWYWx1ZUFjY2Vzc29yQmFzZTxhbnk+O1xuXG5cdHB1YmxpYyBjYXB0aW9uUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXHRwdWJsaWMgZXJyb3JNZXNzYWdlczogRm9ybUVycm9yTWVzc2FnZXMgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTO1xuXHRwdWJsaWMgY3VzdG9tRXJyb3JIYW5kbGVyczogQXJyYXk8eyBlcnJvcjogc3RyaW5nOyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PiB9PiA9IFtdO1xuXHRwcml2YXRlIGlucHV0OiBWYWx1ZUFjY2Vzc29yQmFzZTxhbnk+O1xuXHRwdWJsaWMgZXJyb3JGdWxseVZpc2libGU6IGJvb2xlYW47XG5cdHByaXZhdGUgcG9wdXBTdGF0ZTogJ2xvY2tlZE9wZW4nIHwgJ2xvY2tlZENsb3NlZCcgfCAnb25Ib3ZlcicgPSAnb25Ib3Zlcic7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0QE9wdGlvbmFsKCkgcHJpdmF0ZSBwYXJlbnQ6IEZvcm1Db21wb25lbnQsXG5cdFx0QEluamVjdChGT1JNX0VSUk9SX01FU1NBR0VTKSBAT3B0aW9uYWwoKSBwcml2YXRlIGN1c3RvbU1lc3NhZ2VzOiBDdXN0b21FcnJvck1lc3NhZ2VzLFxuXHRcdHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXG5cdCkge1xuXHR9XG5cblx0YXN5bmMgbmdBZnRlclZpZXdJbml0KCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IGF3YWl0YWJsZUZvck5leHRDeWNsZSgpO1xuXHRcdHRoaXMuZmllbGRJbnB1dD8uc2V0VGFpbFRwbCh0aGlzLnRhaWxUcGwpO1xuXHRcdHRoaXMuZmllbGRJbnB1dD8ub25Ub3VjaC5hc09ic2VydmFibGUoKS5zdWJzY3JpYmUoKGUpID0+IHtcblx0XHRcdHRoaXMuZGV0ZXJtaW5lUG9wdXBTdGF0ZSgpO1xuXHRcdH0pO1xuXG5cdFx0Wy4uLmdldEFsbExpbWl0aW5nQ29udGFpbmVycyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQpLCB3aW5kb3ddLmZvckVhY2goZSA9PiBlLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc2V0RXJyb3JUb29sdGlwT2Zmc2V0KSk7XG5cdH1cblxuXHRwdWJsaWMgc2hvdWxkU2hvd0Vycm9yTWVzc2FnZXMoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMucGFyZW50Py5zaG93RXJyb3JNZXNzYWdlcyAhPT0gZmFsc2U7XG5cdH1cblxuXHRwdWJsaWMgc3Vic3RpdHV0ZVBhcmFtZXRlcnMobWVzc2FnZTogc3RyaW5nLCBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMocGFyYW1ldGVycykucmVkdWNlKChtc2csIGtleSkgPT4ge1xuXHRcdFx0cmV0dXJuIG1zZy5yZXBsYWNlKGAlJHtrZXl9JWAsIHBhcmFtZXRlcnNba2V5XSk7XG5cdFx0fSwgbWVzc2FnZSk7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJDb250cm9sKGZvcm1Db250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wsIGlucHV0OiBWYWx1ZUFjY2Vzc29yQmFzZTxhbnk+ID0gbnVsbCk6IHZvaWQge1xuXHRcdHRoaXMuYXR0YWNoZWRDb250cm9sID0gZm9ybUNvbnRyb2w7XG5cdFx0dGhpcy5wYXJlbnQucmVnaXN0ZXJDb250cm9sKGZvcm1Db250cm9sLCB0aGlzKTtcblx0XHR0aGlzLmlucHV0ID0gaW5wdXQ7XG5cblxuXHRcdHRoaXMuYXR0YWNoZWRDb250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKChlKSA9PiB7XG5cdFx0XHR0aGlzLmRldGVybWluZVBvcHVwU3RhdGUoKTtcblx0XHR9KTtcblx0XHR0aGlzLmRldGVybWluZVBvcHVwU3RhdGUoKTtcblx0fVxuXG5cdHB1YmxpYyBkZXRlcm1pbmVQb3B1cFN0YXRlKCk6IHZvaWQge1xuXHRcdGlmIChzdHJpbmdJc1NldEFuZEZpbGxlZCh0aGlzLmdldEVycm9yVG9TaG93KCkpKSB7XG5cdFx0XHR0aGlzLnBvcHVwU3RhdGUgPSAnb25Ib3Zlcic7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChpc1ZhbHVlU2V0KHRoaXMuZ2V0V2FybmluZ1RvU2hvdygpKSkge1xuXHRcdFx0dGhpcy5wb3B1cFN0YXRlID0gJ2xvY2tlZE9wZW4nO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLnBvcHVwU3RhdGUgPSAnb25Ib3Zlcic7XG5cdH1cblxuXHRwdWJsaWMgdW5yZWdpc3RlckNvbnRyb2woZm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IHZvaWQge1xuXHRcdHRoaXMuYXR0YWNoZWRDb250cm9sID0gbnVsbDtcblx0XHR0aGlzLnBhcmVudC51bnJlZ2lzdGVyQ29udHJvbChmb3JtQ29udHJvbCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QXR0YWNoZWRDb250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG5cdFx0cmV0dXJuIHRoaXMuYXR0YWNoZWRDb250cm9sO1xuXHR9XG5cblx0cHVibGljIGdldEF0dGFjaGVkSW5wdXQoKTogVmFsdWVBY2Nlc3NvckJhc2U8YW55PiB7XG5cdFx0cmV0dXJuIHRoaXMuaW5wdXQ7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJFcnJvckhhbmRsZXIoZXJyb3I6IHN0cmluZywgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pOiB2b2lkIHtcblx0XHR0aGlzLmN1c3RvbUVycm9ySGFuZGxlcnMucHVzaCh7ZXJyb3IsIHRlbXBsYXRlUmVmfSk7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJDYXB0aW9uKHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+KTogdm9pZCB7XG5cdFx0dGhpcy5jYXB0aW9uUmVmID0gdGVtcGxhdGVSZWY7XG5cdH1cblxuXHRwdWJsaWMgZ2V0V2FybmluZ1RvU2hvdygpOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHtcblx0XHRyZXR1cm4gdGhpcy5wYXJlbnQ/LmdldFdhcm5pbmdUb1Nob3codGhpcy5hdHRhY2hlZENvbnRyb2wpO1xuXHR9XG5cblx0cHVibGljIGdldFdhcm5pbmdUb1Nob3dBc1RlbXBsYXRlUmVmKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuXHRcdGlmICh0aGlzLnBhcmVudD8uZ2V0V2FybmluZ1RvU2hvdyh0aGlzLmF0dGFjaGVkQ29udHJvbCkgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuXHRcdFx0cmV0dXJuIHRoaXMucGFyZW50Py5nZXRXYXJuaW5nVG9TaG93KHRoaXMuYXR0YWNoZWRDb250cm9sKSBhcyBUZW1wbGF0ZVJlZjxhbnk+O1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1dhcm5pbmcgaXMgbm90IGEgVGVtcGxhdGVSZWYnKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRXYXJuaW5nVG9TaG93SXNUZW1wbGF0ZVJlZigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRXYXJuaW5nVG9TaG93KCkgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcblx0fVxuXG5cdGdldEVycm9yVG9TaG93KCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZmlyc3RFcnJvciA9IE9iamVjdC5rZXlzKHRoaXMuYXR0YWNoZWRDb250cm9sPy5lcnJvcnMgPz8ge30pWzBdO1xuXHRcdGlmICh0aGlzLmF0dGFjaGVkQ29udHJvbD8udG91Y2hlZCAhPT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGlmICghdGhpcy5hdHRhY2hlZENvbnRyb2w/LmVycm9ycykge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiBmaXJzdEVycm9yO1xuXHR9XG5cblx0Z2V0Q3VzdG9tRXJyb3JIYW5kbGVyKGVycm9yOiBzdHJpbmcpOiB7IGVycm9yOiBzdHJpbmc7IHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+IH0ge1xuXHRcdHJldHVybiB0aGlzLmN1c3RvbUVycm9ySGFuZGxlcnMuZmluZCgoZSkgPT4gZS5lcnJvciA9PT0gZXJyb3IpO1xuXHR9XG5cblx0c2hvd0RlZmF1bHRFcnJvcihlcnJvcjogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RXJyb3JUb1Nob3coKSA9PT0gZXJyb3IgJiYgIXRoaXMuY3VzdG9tRXJyb3JIYW5kbGVycy5zb21lKChlKSA9PiBlLmVycm9yID09PSBlcnJvcik7XG5cdH1cblxuXHRnZXRTY3JvbGxhYmxlUGFyZW50KG5vZGUpOiBhbnkge1xuXHRcdGlmIChub2RlID09IG51bGwpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRpZiAobm9kZS5zY3JvbGxIZWlnaHQgPiBub2RlLmNsaWVudEhlaWdodCkge1xuXHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLmdldFNjcm9sbGFibGVQYXJlbnQobm9kZS5wYXJlbnROb2RlKTtcblx0XHR9XG5cdH1cblxuXHRzY3JvbGxUbygpOiB2b2lkIHtcblx0XHR0aGlzLmludGVybmFsQ29tcG9uZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcodHJ1ZSk7XG5cdFx0Ly8gdG8gZ2l2ZSBzb21lIGJyZWF0aGluZyByb29tLCB3ZSBzY3JvbGwgMTAwcHggbW9yZSB0byB0aGUgdG9wXG5cdFx0dGhpcy5nZXRTY3JvbGxhYmxlUGFyZW50KHRoaXMuaW50ZXJuYWxDb21wb25lbnRSZWYubmF0aXZlRWxlbWVudCk/LnNjcm9sbEJ5KDAsIC0xMDApO1xuXHR9XG5cblx0aXNSZXF1aXJlZCgpOiBib29sZWFuIHtcblx0XHRpZiAoaXNWYWx1ZVNldCh0aGlzLmlucHV0KSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuaW5wdXQuaGFzVmFsaWRhdG9yKCdyZXF1aXJlZCcpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRnZXRFcnJvck1lc3NhZ2Uoa2V5OiBrZXlvZiBGb3JtRXJyb3JNZXNzYWdlcyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuY3VzdG9tTWVzc2FnZXM/LltrZXldPy4oKSA/PyB0aGlzLmVycm9yTWVzc2FnZXNba2V5XTtcblx0fVxuXG5cdHB1YmxpYyBnZXRFcnJvckxvY2F0aW9uKCk6ICdiZWxvd0NhcHRpb24nIHwgJ3JpZ2h0T2ZDYXB0aW9uJyB7XG5cdFx0cmV0dXJuIHRoaXMucGFyZW50Py5lcnJvck1lc3NhZ2VMb2NhdGlvbiA/PyAnYmVsb3dDYXB0aW9uJztcblx0fVxuXG5cdHB1YmxpYyBzaG91bGRTaG93RXJyb3JUb29sdGlwT3BlbmVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnBvcHVwU3RhdGUgPT09ICdsb2NrZWRPcGVuJztcblx0fVxuXG5cdHB1YmxpYyBoYXNIb3ZlcmFibGVFcnJvclRvb2x0aXAoKTogYm9vbGVhbiB7XG5cdFx0aWYgKCF0aGlzLmhhc1JpZ2h0T2ZDYXB0aW9uRXJyb3IoKSAmJiAhdGhpcy5lcnJvck1lc3NhZ2VBc1Rvb2x0aXApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKHRoaXMucG9wdXBTdGF0ZSAhPT0gJ29uSG92ZXInKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChzdHJpbmdJc1NldEFuZEZpbGxlZCh0aGlzLmdldEVycm9yVG9TaG93KCkpKSB7XG5cdFx0XHRyZXR1cm4gIXRoaXMuZXJyb3JGdWxseVZpc2libGU7XG5cdFx0fVxuXHRcdGlmIChpc1ZhbHVlU2V0KHRoaXMuZ2V0V2FybmluZ1RvU2hvdygpKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHB1YmxpYyBoYXNSaWdodE9mQ2FwdGlvbkVycm9yKCk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLmVycm9yTWVzc2FnZUFzVG9vbHRpcCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRpZiAodGhpcy5kaXJlY3Rpb24gIT09ICd2ZXJ0aWNhbCcgfHwgdGhpcy5nZXRFcnJvckxvY2F0aW9uKCkgIT09ICdyaWdodE9mQ2FwdGlvbicpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRwdWJsaWMgc2V0RXJyb3JNZXNzYWdlSXNUcnVuY2F0ZWQgPSAoaXNUcnVuY2F0ZWQ6IGJvb2xlYW4pID0+IHtcblx0XHR0aGlzLmVycm9yRnVsbHlWaXNpYmxlID0gIWlzVHJ1bmNhdGVkO1xuXHR9XG5cblx0cHVibGljIHNob3VsZFNob3dXYXJuaW5nUG9wdXAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGlzVmFsdWVTZXQodGhpcy5nZXRXYXJuaW5nVG9TaG93KCkpO1xuXHR9XG5cblx0cHVibGljIGNsb3NlUG9wdXAoKTogdm9pZCB7XG5cdFx0dGhpcy5wb3B1cFN0YXRlID0gJ29uSG92ZXInO1xuXHR9XG5cblx0cHVibGljIHRvZ2dsZVBvcHVwKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5lcnJvck1lc3NhZ2VBc1Rvb2x0aXAgJiYgIXRoaXMuaGFzUmlnaHRPZkNhcHRpb25FcnJvcigpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0aGlzLmVycm9yRnVsbHlWaXNpYmxlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0aGlzLnBvcHVwU3RhdGUgPT09ICdsb2NrZWRPcGVuJykge1xuXHRcdFx0dGhpcy5wb3B1cFN0YXRlID0gJ29uSG92ZXInO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnBvcHVwU3RhdGUgPSAnbG9ja2VkT3Blbic7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEVycm9yVG9vbHRpcE9mZnNldCA9ICgpOiB2b2lkID0+IHtcblx0XHRpZiAodGhpcy5wb3B1cFN0YXRlICE9PSAnbG9ja2VkT3BlbicgJiYgdGhpcy5wb3B1cFN0YXRlICE9PSAnb25Ib3ZlcicpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgcG9wdXBPZmZzZXRZID0gdGhpcy5hYnNvbHV0ZUFuY2hvcj8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmZpeGVkQW5jaG9yPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcblx0XHRpZiAodGhpcy5maXhlZFdyYXBwZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcblx0XHRcdHRoaXMuZml4ZWRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHtwb3B1cE9mZnNldFl9cHgpYDtcblx0XHR9XG5cdH07XG59XG4iLCI8ZGl2XG5cdGNsYXNzPVwiY29tcG9uZW50Q29udGFpbmVyXCJcblx0W25nQ2xhc3NdPVwie1xuXHRcdGhhc0NhcHRpb246IGNhcHRpb24gfHwgY2FwdGlvblJlZixcblx0XHR2ZXJ0aWNhbDogZGlyZWN0aW9uID09PSAndmVydGljYWwnLFxuXHRcdGhvcml6b250YWw6IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnLFxuXHRcdHRvcEFsaWdubWVudDogdmVydGljYWxBbGlnbm1lbnQgPT09ICd0b3AnLFxuXHRcdHJldmVyc2VPcmRlcjogc3dhcElucHV0QW5kQ2FwdGlvbixcblx0XHRoYXNFcnJvcnM6IGdldEVycm9yVG9TaG93KCkgJiYgYXR0YWNoZWRDb250cm9sLnRvdWNoZWQsXG5cdFx0cGVyY2VudGFnZVNwYWNpbmc6IGNhcHRpb25TcGFjaW5nID09PSAncGVyY2VudGFnZXMnICYmIHNwYWNlRGlzdHJpYnV0aW9uICE9PSAnZml4ZWRJbnB1dFdpZHRoJyxcblx0XHQnZDQwLTYwJzogc3BhY2VEaXN0cmlidXRpb24gPT09ICc0MC02MCcsXG5cdFx0J2QzMC03MCc6IHNwYWNlRGlzdHJpYnV0aW9uID09PSAnMzAtNzAnLFxuXHRcdCdkMzQtNjYnOiBzcGFjZURpc3RyaWJ1dGlvbiA9PT0gJzM0LTY2Jyxcblx0XHQnZml4ZWRJbnB1dFdpZHRoJzogc3BhY2VEaXN0cmlidXRpb24gPT09ICdmaXhlZElucHV0V2lkdGgnXG5cdH1cIlxuPlxuXHQ8ZGl2IGNsYXNzPVwiZXJyb3JBYm92ZUlucHV0Q29udGFpbmVyXCIgKm5nSWY9XCJkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyAmJiAhZXJyb3JNZXNzYWdlQXNUb29sdGlwXCI+XG5cdFx0PGRpdiBjbGFzcz1cInNwYWNlclwiPjwvZGl2PlxuXHRcdDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXJyb3JSZWZcIj48L25nLWNvbnRhaW5lcj5cblx0PC9kaXY+XG5cblx0PGRpdiBjbGFzcz1cImNhcHRpb25JbnB1dEFuZEVycm9yXCIgI2ludGVybmFsQ29tcG9uZW50UmVmPlxuXHRcdDxkaXYgY2xhc3M9XCJjYXB0aW9uRHVtbXlGb3JTcGFjZUNhbGN1bGF0aW9uXCIgI2NhcHRpb25EdW1teUZvclNwYWNlQ2FsY3VsYXRpb24gKm5nSWY9XCJoYXNSaWdodE9mQ2FwdGlvbkVycm9yKClcIj5cblx0XHRcdDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2FwdGlvblRwbFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Zm9yQ2FsY3VsYXRpb246IHRydWV9XCI+PC9uZy1jb250YWluZXI+XG5cdFx0PC9kaXY+XG5cdFx0PG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjYXB0aW9uVHBsXCI+PC9uZy1jb250YWluZXI+XG5cdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJiBnZXRFcnJvckxvY2F0aW9uKCkgPT09ICdiZWxvd0NhcHRpb24nICYmICFlcnJvck1lc3NhZ2VBc1Rvb2x0aXBcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJlcnJvclJlZlwiPjwvbmctY29udGFpbmVyPlxuXHRcdDxkaXYgY2xhc3M9XCJpbnB1dENvbnRhaW5lclwiIChtb3VzZWVudGVyKT1cInNldEVycm9yVG9vbHRpcE9mZnNldCgpXCI+XG5cdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiZXJyb3JNZXNzYWdlQXNUb29sdGlwICYmIHNob3VsZFNob3dFcnJvck1lc3NhZ2VzKCkgJiYgZ2V0RXJyb3JUb1Nob3coKVwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZXJyb3JUb29sdGlwVHJpYW5nbGVcIj48L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImVycm9yVG9vbHRpcFRyaWFuZ2xlV2hpdGVcIj48L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImVycm9yVG9vbHRpcFwiPlxuXHRcdFx0XHRcdDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXJyb3JSZWZcIj48L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNjYXB0aW9uVHBsIGxldC1mb3JDYWxjdWxhdGlvbj1cImZvckNhbGN1bGF0aW9uXCI+XG5cdDxkaXYgY2xhc3M9XCJjYXB0aW9uXCJcblx0XHQqbmdJZj1cImNhcHRpb24gfHwgY2FwdGlvblJlZlwiXG5cdFx0W25nQ2xhc3NdPVwie1xuXHRcdFx0d2l0aEVycm9yUmlnaHRPZkNhcHRpb246IGdldEVycm9yTG9jYXRpb24oKSA9PT0gJ3JpZ2h0T2ZDYXB0aW9uJ1xuXHRcdH1cIlxuXHQ+XG5cdFx0PGRpdiAqbmdJZj1cImNhcHRpb25SZWZcIiBjbGFzcz1cImNhcHRpb25SZWZDb250YWluZXJcIj5cblx0XHRcdDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2FwdGlvblJlZlwiPjwvbmctY29udGFpbmVyPlxuXHRcdFx0PGRpdiAqbmdJZj1cImlzUmVxdWlyZWQoKVwiPiZuYnNwOyo8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2ICpuZ0lmPVwiIWNhcHRpb25SZWZcIiBjbGFzcz1cImNhcHRpb25UZXh0XCI+e3tjYXB0aW9ufX08c3BhbiAqbmdJZj1cImlzUmVxdWlyZWQoKVwiPiZuYnNwOyo8L3NwYW4+PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cInJpZ2h0T2ZDYXB0aW9uRXJyb3JcIiAqbmdJZj1cImhhc1JpZ2h0T2ZDYXB0aW9uRXJyb3IoKVwiIFtuZ0NsYXNzXT1cIntlcnJvckZ1bGx5VmlzaWJsZTogZXJyb3JGdWxseVZpc2libGV9XCI+XG5cdFx0XHQ8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVycm9yUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntmb3JDYWxjdWxhdGlvbjogZm9yQ2FsY3VsYXRpb259XCI+PC9uZy1jb250YWluZXI+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNlcnJvclJlZiBsZXQtZm9yQ2FsY3VsYXRpb249XCJmb3JDYWxjdWxhdGlvblwiPlxuXHQ8ZGl2ICpuZ0lmPVwic2hvdWxkU2hvd0Vycm9yTWVzc2FnZXMoKSAmJiBnZXRFcnJvclRvU2hvdygpXCIgY2xhc3M9XCJlcnJvckNvbnRhaW5lclwiIFtlbGVtZW50SXNUcnVuY2F0ZWRDYl09XCJmb3JDYWxjdWxhdGlvbiA/IHNldEVycm9yTWVzc2FnZUlzVHJ1bmNhdGVkIDogbnVsbFwiIFtuZ0NsYXNzXT1cIntob3Jpem9udGFsOiBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJywgaGFzQ2FwdGlvbjogY2FwdGlvbiB8fCBjYXB0aW9uUmVmLCAnZDMwLTcwJzogc3BhY2VEaXN0cmlidXRpb24gPT09ICczMC03MCcsICdkMzQtNjYnOiBzcGFjZURpc3RyaWJ1dGlvbiA9PT0gJzM0LTY2J31cIj5cblx0XHQ8ZGl2ICpuZ0lmPVwic2hvd0RlZmF1bHRFcnJvcignbWluJylcIj57e3N1YnN0aXR1dGVQYXJhbWV0ZXJzKGdldEVycm9yTWVzc2FnZShcIm1pblwiKSwge21pbjogYXR0YWNoZWRDb250cm9sLmVycm9ycy5taW4ubWlufSl9fTwvZGl2PlxuXHRcdDxkaXYgKm5nSWY9XCJzaG93RGVmYXVsdEVycm9yKCdtYXgnKVwiPnt7c3Vic3RpdHV0ZVBhcmFtZXRlcnMoZ2V0RXJyb3JNZXNzYWdlKFwibWF4XCIpLCB7bWF4OiBhdHRhY2hlZENvbnRyb2wuZXJyb3JzLm1heC5tYXh9KX19PC9kaXY+XG5cdFx0PGRpdiAqbmdJZj1cInNob3dEZWZhdWx0RXJyb3IoJ3JlcXVpcmVkJylcIj57e2dldEVycm9yTWVzc2FnZShcInJlcXVpcmVkXCIpfX08L2Rpdj5cblx0XHQ8ZGl2ICpuZ0lmPVwic2hvd0RlZmF1bHRFcnJvcignZW1haWwnKVwiPnt7Z2V0RXJyb3JNZXNzYWdlKFwiZW1haWxcIil9fTwvZGl2PlxuXHRcdDxkaXYgKm5nSWY9XCJzaG93RGVmYXVsdEVycm9yKCdtaW5sZW5ndGgnKVwiPnt7c3Vic3RpdHV0ZVBhcmFtZXRlcnMoZ2V0RXJyb3JNZXNzYWdlKFwibWluTGVuZ3RoXCIpLCB7bWluTGVuZ3RoOiBhdHRhY2hlZENvbnRyb2wuZXJyb3JzLm1pbmxlbmd0aC5yZXF1aXJlZExlbmd0aH0pfX08L2Rpdj5cblx0XHQ8ZGl2ICpuZ0lmPVwic2hvd0RlZmF1bHRFcnJvcignbWF4bGVuZ3RoJylcIj57e3N1YnN0aXR1dGVQYXJhbWV0ZXJzKGdldEVycm9yTWVzc2FnZShcIm1heExlbmd0aFwiKSwge21heExlbmd0aDogYXR0YWNoZWRDb250cm9sLmVycm9ycy5tYXhsZW5ndGgucmVxdWlyZWRMZW5ndGh9KX19PC9kaXY+XG5cdFx0PGRpdiAqbmdJZj1cInNob3dEZWZhdWx0RXJyb3IoJ3BhdHRlcm4nKVwiPnt7Z2V0RXJyb3JNZXNzYWdlKFwicGF0dGVyblwiKX19PC9kaXY+XG5cdFx0PGRpdiAqbmdJZj1cInNob3dEZWZhdWx0RXJyb3IoJ01hdGNoUGFzc3dvcmQnKVwiPnt7Z2V0RXJyb3JNZXNzYWdlKFwibWF0Y2hQYXNzd29yZFwiKX19PC9kaXY+XG5cdFx0PGRpdiAqbmdJZj1cInNob3dEZWZhdWx0RXJyb3IoJ2RhdGUnKVwiPnt7Z2V0RXJyb3JNZXNzYWdlKFwiZGF0ZVwiKX19PC9kaXY+XG5cdFx0PGRpdiAqbmdJZj1cInNob3dEZWZhdWx0RXJyb3IoJ21lc3NhZ2UnKVwiPnt7YXR0YWNoZWRDb250cm9sLmVycm9ycy5tZXNzYWdlLnZhbHVlfX08L2Rpdj5cblx0XHQ8ZGl2IFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdldEN1c3RvbUVycm9ySGFuZGxlcihnZXRFcnJvclRvU2hvdygpKT8udGVtcGxhdGVSZWZcIj48L2Rpdj5cblx0PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RhaWxUcGw+XG5cdDxkaXYgY2xhc3M9XCJlcnJvclRvb2x0aXBDb250YWluZXJcIiBbbmdDbGFzc109XCJ7YWx3YXlzT3Blbjogc2hvdWxkU2hvd0Vycm9yVG9vbHRpcE9wZW5lZCgpfVwiPlxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNIb3ZlcmFibGVFcnJvclRvb2x0aXAoKSB8fCBzaG91bGRTaG93RXJyb3JUb29sdGlwT3BlbmVkKClcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJlcnJvclRvb2x0aXBUcmlhbmdsZVwiPjwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cImVycm9yVG9vbHRpcFRyaWFuZ2xlV2hpdGVcIj48L2Rpdj5cblxuXHRcdFx0PGRpdiBjbGFzcz1cImFic29sdXRlQW5jaG9yXCIgI2Fic29sdXRlQW5jaG9yPjwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cImZpeGVkQW5jaG9yXCIgI2ZpeGVkQW5jaG9yPjwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cImZpeGVkV3JhcHBlclwiICNmaXhlZFdyYXBwZXI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJlcnJvclRvb2x0aXBcIiBbbmdDbGFzc109XCJ7bm9Qb2ludGVyRXZlbnRzOiAhc2hvdWxkU2hvd0Vycm9yVG9vbHRpcE9wZW5lZCgpfVwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJlcnJvclRvb2x0aXBJbm5lclwiPlxuXHRcdFx0XHRcdFx0PGkgY2xhc3M9XCJjbG9zZUJ0blwiIChjbGljayk9XCJjbG9zZVBvcHVwKCk7XCI+w5c8L2k+XG5cdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0RXJyb3JUb1Nob3coKVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVycm9yUmVmXCI+PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdFx0XHQ8ZGl2ICpuZ0lmPVwiIWdldEVycm9yVG9TaG93KCkgJiYgc2hvdWxkU2hvd1dhcm5pbmdQb3B1cCgpXCI+XG5cdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRXYXJuaW5nVG9TaG93SXNUZW1wbGF0ZVJlZigpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0V2FybmluZ1RvU2hvd0FzVGVtcGxhdGVSZWYoKVwiPjwvbmctY29udGFpbmVyPlxuXHRcdFx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cIiFnZXRXYXJuaW5nVG9TaG93SXNUZW1wbGF0ZVJlZigpXCI+e3tnZXRXYXJuaW5nVG9TaG93KCl9fTwvc3Bhbj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0PC9uZy1jb250YWluZXI+XG5cdFx0PGtscC1mb3JtLXdhcm5pbmctaWNvbiB2YXJpYW50PVwiZmlsbFwiICpuZ0lmPVwiZ2V0RXJyb3JUb1Nob3coKVwiIChjbGljayk9XCJ0b2dnbGVQb3B1cCgpXCI+PC9rbHAtZm9ybS13YXJuaW5nLWljb24+XG5cdFx0PGtscC1mb3JtLXdhcm5pbmctaWNvbiB2YXJpYW50PVwibGluZVwiICpuZ0lmPVwiIWdldEVycm9yVG9TaG93KCkgJiYgZ2V0V2FybmluZ1RvU2hvdygpXCIgKGNsaWNrKT1cInRvZ2dsZVBvcHVwKClcIj48L2tscC1mb3JtLXdhcm5pbmctaWNvbj5cblx0PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -298,4 +298,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
298
298
  }], onInjected: [{
299
299
  type: Output
300
300
  }] } });
301
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbGlwcGEvbmd4LWVuaGFuY3ktZm9ybXMvc3JjL2xpYi9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy9saWIvZm9ybS9mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUFFLFlBQVksRUFDdkIsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBRU4sUUFBUSxFQUNSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBa0IsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxSSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFFNUMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFNdEUsTUFBTSxPQUFPLGdCQUFnQjs7NkdBQWhCLGdCQUFnQjtpR0FBaEIsZ0JBQWdCOzJGQUFoQixnQkFBZ0I7a0JBSjVCLFNBQVM7bUJBQUM7b0JBQ1YsOENBQThDO29CQUM5QyxRQUFRLEVBQUUsY0FBYztpQkFDeEI7OEJBRVMsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7O0FBUVAsTUFBTSxPQUFPLGFBQWE7SUFlekIsWUFBNEMsTUFBcUIsRUFBc0Isa0JBQW9DO1FBQS9FLFdBQU0sR0FBTixNQUFNLENBQWU7UUFBc0IsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFrQjtRQWQzRyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLHNCQUFpQixHQUFHLElBQUksQ0FBQztRQUN6Qix5QkFBb0IsR0FBc0MsY0FBYyxDQUFDO1FBRXpFLGFBQVEsR0FBaUMsSUFBSSxHQUFHLEVBQTJCLENBQUM7UUFFM0UsZUFBVSxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBRXRFLDhHQUE4RztRQUN0RyxtQkFBYyxHQUdqQixFQUFFLENBQUM7SUFHUixDQUFDO0lBRUQsUUFBUTtRQUNQLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1lBQzNDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO1NBQzFDO1FBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRTtZQUNuRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDO1lBQ3RELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7WUFDNUMsSUFBSSxVQUFVLFlBQVksZ0JBQWdCLEVBQUU7Z0JBQzNDLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO29CQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixPQUFPLFFBQVEsRUFBRSxDQUFDLENBQUM7aUJBQ2xFO2dCQUNELElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLEVBQUU7b0JBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ3pCO2dCQUNELE1BQU0saUJBQWlCLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUM7Z0JBQ3pELElBQUksVUFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7b0JBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7aUJBQzdDO2dCQUNELFVBQVUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUN4QztpQkFBTSxJQUFJLFVBQVUsWUFBWSxnQkFBZ0IsRUFBRTtnQkFDbEQsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUU7b0JBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLE9BQU8sUUFBUSxFQUFFLENBQUMsQ0FBQztpQkFDbEU7Z0JBQ0QsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBRTtvQkFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztpQkFDekI7Z0JBQ0QsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQztnQkFDMUQsSUFBSSxVQUFVLENBQUMsaUJBQWlCLENBQUMsRUFBRTtvQkFDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQztpQkFDN0M7Z0JBQ0QsVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2FBQ3hDO1NBQ0Q7SUFDRixDQUFDO0lBRUQsV0FBVyxDQUFDLGFBQTRCO1FBQ3ZDLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxZQUFZLEtBQUssSUFBSSxFQUFFO1lBQ2xELElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQzFEO1FBQ0QsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsRUFBRTtZQUNyRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztTQUM1QjtJQUNGLENBQUM7SUFFRCxXQUFXO1FBQ1YsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRTtZQUNuRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDO1lBQ3RELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7WUFDNUMsSUFBSSxVQUFVLFlBQVksZ0JBQWdCLEVBQUU7Z0JBQzNDLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDckUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDO2FBQzlDO2lCQUFNLElBQUksVUFBVSxZQUFZLGdCQUFnQixFQUFFO2dCQUNsRCxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRTtvQkFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsT0FBTyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2lCQUNsRTtnQkFDRCxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUM7YUFDbkQ7U0FDRDtJQUNGLENBQUM7SUFFTyxvQkFBb0I7UUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFvQixFQUFFLEtBQWEsRUFBZ0MsRUFBRTtZQUN6RixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JELElBQUksT0FBTyxLQUFLLEtBQUssRUFBRTtnQkFDdEIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLENBQUM7YUFDN0Q7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNmLENBQUMsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBb0IsRUFBVyxFQUFFO1lBQ3hELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsMkJBQTJCLENBQUMsR0FBRyxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztZQUM3RCxPQUFPLE1BQU0sQ0FBQztRQUNmLENBQUMsQ0FBQztJQUNILENBQUM7SUFFTyxrQ0FBa0M7UUFDekMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7UUFDckMsTUFBTSxLQUFLLEdBQUcsQ0FDYixLQUVDLEVBQ0QsT0FHQyxFQUNNLEVBQUU7WUFDVCxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzlDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2YsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNuQyxDQUFDO0lBRU0sZUFBZSxDQUFDLFdBQStCLEVBQUUsV0FBaUM7UUFDeEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBQyxXQUFXLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQztRQUNyRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUN0QjtRQUNELE1BQU0sUUFBUSxHQUFpRSxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ2xHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFrRCxFQUFFLEVBQUU7WUFDM0UsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ25CLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ2pDO1FBQ0YsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUVNLGlCQUFpQixDQUFDLFdBQStCO1FBQ3ZELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLENBQUM7UUFDdkYsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDM0M7SUFDRixDQUFDO0lBRU8sb0JBQW9CLENBQUMsU0FBMkIsRUFBRSxNQUFpQztRQUMxRixNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuRCxJQUFJLEtBQUssWUFBWSxnQkFBZ0IsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQzthQUN6QztpQkFBTSxJQUFJLEtBQUssWUFBWSxnQkFBZ0IsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQzthQUN6QztpQkFBTSxJQUFJLEtBQUssWUFBWSxrQkFBa0IsRUFBRTtnQkFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDbkM7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxTQUEyQixFQUFFLE1BQWlDO1FBQzFGLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxLQUFLLFlBQVksZ0JBQWdCLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDekM7aUJBQU0sSUFBSSxLQUFLLFlBQVksZ0JBQWdCLEVBQUU7Z0JBQzdDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDekM7aUJBQU0sSUFBSSxLQUFLLFlBQVksa0JBQWtCLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQ25DO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8sa0JBQWtCO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNsRCxPQUFPLE1BQU0sQ0FBQztJQUNmLENBQUM7SUFFTyxjQUFjLENBQUMsT0FBMkIsRUFBRSxNQUFpQztRQUNwRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFTywwQkFBMEIsQ0FBQyxPQUEyQjtRQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssT0FBTyxDQUFDLEVBQUU7WUFDaEUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2xCO0lBQ0YsQ0FBQztJQUVNLDJCQUEyQixDQUFDLE9BQXdCO1FBQzFELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssT0FBTyxDQUFDLEVBQUUsV0FBVyxDQUFDO0lBQ2hGLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxPQUF3QjtRQUMvQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxTQUFTO1FBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sV0FBVyxHQUE4QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUN6RSxNQUFNLHNCQUFzQixHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbEQsT0FBTyxFQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztRQUNILFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RCxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQztRQUNyRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUM1QyxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVGLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFOUYsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN0QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO2dCQUMzQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDMUQsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO3dCQUN0QixHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsRUFBRSx3QkFBd0IsRUFBRSx5QkFBeUIsRUFBRSxjQUFjLENBQUM7NkJBQ2pILElBQUksQ0FBQyxPQUFPLENBQUM7NkJBQ2IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUNmO2dCQUNGLENBQUMsQ0FBQyxDQUFDO2FBQ0g7aUJBQU07Z0JBQ04sSUFBSSxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLGNBQWMsQ0FBQztxQkFDakgsSUFBSSxDQUFDLE9BQU8sQ0FBQztxQkFDYixLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDZjtRQUNGLENBQUMsQ0FBQyxDQUFDO0lBRUosQ0FBQztJQUVPLGdCQUFnQixDQUN2QixzQkFBK0UsRUFDL0Usd0JBQTBDLEVBQzFDLHlCQUEyQyxFQUMzQyxjQUFjO1FBRWQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRTtZQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUMvRSxJQUFJLENBQUMsK0JBQStCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUM3RCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUMzQzthQUFNO1lBQ04sSUFBSSxDQUFDLCtCQUErQixDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDN0QsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLHdCQUF3QixFQUFFLHlCQUF5QixDQUFDLENBQUM7WUFDdEYsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7U0FDekQ7SUFDRixDQUFDO0lBRU8sK0JBQStCLENBQUMsU0FBb0IsRUFBRSxPQUFnQixFQUFFLFdBQVcsR0FBRyxFQUFFO1FBQy9GLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDOUQsSUFBSSxPQUFPLFlBQVksV0FBVyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxPQUFPLENBQUMsRUFBRTtnQkFDOUgsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7YUFDbEM7aUJBQU0sSUFBSSxPQUFPLFlBQVksU0FBUyxFQUFFO2dCQUN4QyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsK0JBQStCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUMxRTtpQkFBTSxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUU7Z0JBQ3hDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQzFFO1FBQ0YsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFdBQVcsQ0FBQztJQUNwQixDQUFDO0lBRU8sK0JBQStCLENBQUMsU0FBb0IsRUFBRSxPQUFnQixFQUFFLFVBQXNCO1FBQ3JHLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBd0IsRUFBRSxFQUFFO1lBQ3ZELElBQUksT0FBTyxZQUFZLFdBQVcsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssT0FBTyxDQUFDLEVBQUU7Z0JBQzlILFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQy9CO2lCQUFNLElBQUksT0FBTyxZQUFZLFNBQVMsRUFBRTtnQkFDeEMsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO2dCQUNwQixVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxQixJQUFJLENBQUMsK0JBQStCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQzthQUNqRTtpQkFBTSxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUU7Z0JBQ3hDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztnQkFDckIsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLCtCQUErQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7YUFDbEU7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTywrQkFBK0IsQ0FBQyxzQkFBOEU7UUFDckgsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO2dCQUNmLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDcEI7aUJBQU07Z0JBQ04sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNuQjtRQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs7MEdBclJXLGFBQWE7OEZBQWIsYUFBYSxrVUNqQzFCLG9EQUtBOzJGRDRCYSxhQUFhO2tCQUx6QixTQUFTOytCQUNDLFVBQVU7OzBCQW1CUCxRQUFROzswQkFBSSxRQUFROzswQkFBbUMsUUFBUTs0Q0FkNUQsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxpQkFBaUI7c0JBQWhDLEtBQUs7Z0JBQ1Usb0JBQW9CO3NCQUFuQyxLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxxQkFBcUI7c0JBQXBDLEtBQUs7Z0JBQ1csVUFBVTtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0RGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsXG5cdElucHV0LFxuXHRPbkNoYW5nZXMsXG5cdE9uRGVzdHJveSxcblx0T25Jbml0LFxuXHRPcHRpb25hbCxcblx0T3V0cHV0LFxuXHRTaW1wbGVDaGFuZ2VzLFxuXHRTa2lwU2VsZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtGb3JtRWxlbWVudENvbXBvbmVudH0gZnJvbSAnLi9mb3JtLWVsZW1lbnQvZm9ybS1lbGVtZW50LmNvbXBvbmVudCc7XG5pbXBvcnQge2lzVmFsdWVTZXR9IGZyb20gJy4uL3V0aWwvdmFsdWVzJztcbmltcG9ydCB7IGRlZXBNZXJnZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0cyc7XG5cbmV4cG9ydCBjb25zdCBpbnZhbGlkRmllbGRzU3ltYm9sID0gU3ltYm9sKCdOb3QgYWxsIGZpZWxkcyBhcmUgdmFsaWQnKTtcblxuQERpcmVjdGl2ZSh7XG5cdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3Jcblx0c2VsZWN0b3I6ICdrbHAtc3ViLWZvcm0nLFxufSlcbmV4cG9ydCBjbGFzcyBTdWJGb3JtRGlyZWN0aXZlIHtcblx0QElucHV0KCkgaW5qZWN0SW50bzogVW50eXBlZEZvcm1BcnJheSB8IFVudHlwZWRGb3JtR3JvdXA7XG5cdEBJbnB1dCgpIGF0OiBudW1iZXIgfCBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2tscC1mb3JtJyxcblx0dGVtcGxhdGVVcmw6ICcuL2Zvcm0uY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi9mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcblx0QElucHV0KCkgcHVibGljIHJlYWRPbmx5ID0gZmFsc2U7XG5cdEBJbnB1dCgpIHB1YmxpYyBzaG93RXJyb3JNZXNzYWdlcyA9IHRydWU7XG5cdEBJbnB1dCgpIHB1YmxpYyBlcnJvck1lc3NhZ2VMb2NhdGlvbjogJ2JlbG93Q2FwdGlvbicgfCAncmlnaHRPZkNhcHRpb24nID0gJ2JlbG93Q2FwdGlvbic7XG5cdEBJbnB1dCgpIHB1YmxpYyBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXA7XG5cdEBJbnB1dCgpIHB1YmxpYyB3YXJuaW5nczogTWFwPEFic3RyYWN0Q29udHJvbCwgc3RyaW5nPiA9IG5ldyBNYXA8QWJzdHJhY3RDb250cm9sLCBzdHJpbmc+KCk7XG5cdEBJbnB1dCgpIHB1YmxpYyBwYXRjaFZhbHVlSW50ZXJjZXB0b3I6ICh2YWx1ZXM6IGFueSkgPT4gUHJvbWlzZTxhbnk+O1xuXHRAT3V0cHV0KCkgcHVibGljIG9uSW5qZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZDxzdHJpbmcsIGFueT4+KCk7XG5cblx0Ly8gd2Uga2VlcCB0cmFjayBvZiB3aGF0IGZvcm0gY29udHJvbHMgYXJlIGFjdHVhbGx5IHJlbmRlcmVkLiBPbmx5IHRob3NlIGNvdW50IHdoZW4gbG9va2luZyBhdCBmb3JtIHZhbGlkYXRpb25cblx0cHJpdmF0ZSBhY3RpdmVDb250cm9sczogQXJyYXk8e1xuXHRcdGZvcm1Db250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2w7XG5cdFx0Zm9ybUVsZW1lbnQ6IEZvcm1FbGVtZW50Q29tcG9uZW50O1xuXHR9PiA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yKEBTa2lwU2VsZigpIEBPcHRpb25hbCgpIHByaXZhdGUgcGFyZW50OiBGb3JtQ29tcG9uZW50LCBAT3B0aW9uYWwoKSBwcml2YXRlIHN1YkZvcm1QbGFjZWhvbGRlcjogU3ViRm9ybURpcmVjdGl2ZSkge1xuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0aWYgKGlzVmFsdWVTZXQodGhpcy5wYXRjaFZhbHVlSW50ZXJjZXB0b3IpKSB7XG5cdFx0XHR0aGlzLmFkZFN1cHBvcnRGb3JQYXRjaFZhbHVlSW50ZXJjZXB0b3IoKTtcblx0XHR9XG5cdFx0aWYgKGlzVmFsdWVTZXQodGhpcy5wYXJlbnQpICYmIGlzVmFsdWVTZXQodGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIpKSB7XG5cdFx0XHRjb25zdCBpbmplY3RJbnRvID0gdGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIuaW5qZWN0SW50bztcblx0XHRcdGNvbnN0IGluamVjdEF0ID0gdGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIuYXQ7XG5cdFx0XHRpZiAoaW5qZWN0SW50byBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBpbmplY3RBdCAhPT0gJ251bWJlcicpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCBpbmRleCBGb3JtQXJyYXkgd2l0aCAke3R5cGVvZiBpbmplY3RBdH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaW5qZWN0SW50by5hdChpbmplY3RBdCk/LmRpc2FibGVkKSB7XG5cdFx0XHRcdFx0dGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHZhbHVlQmVmb3JlSW5qZWN0ID0gaW5qZWN0SW50by5hdChpbmplY3RBdCk/LnZhbHVlO1xuXHRcdFx0XHRpZiAoaXNWYWx1ZVNldCh2YWx1ZUJlZm9yZUluamVjdCkpIHtcblx0XHRcdFx0XHR0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHZhbHVlQmVmb3JlSW5qZWN0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpbmplY3RJbnRvLnNldENvbnRyb2woaW5qZWN0QXQsIHRoaXMuZm9ybUdyb3VwKTtcblx0XHRcdFx0dGhpcy5vbkluamVjdGVkLmVtaXQodmFsdWVCZWZvcmVJbmplY3QpO1xuXHRcdFx0fSBlbHNlIGlmIChpbmplY3RJbnRvIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGluamVjdEF0ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgY2Fubm90IGluZGV4IEZvcm1Hcm91cCB3aXRoICR7dHlwZW9mIGluamVjdEF0fWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChpbmplY3RJbnRvLmdldChpbmplY3RBdCk/LmRpc2FibGVkKSB7XG5cdFx0XHRcdFx0dGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHZhbHVlQmVmb3JlSW5qZWN0ID0gaW5qZWN0SW50by5nZXQoaW5qZWN0QXQpPy52YWx1ZTtcblx0XHRcdFx0aWYgKGlzVmFsdWVTZXQodmFsdWVCZWZvcmVJbmplY3QpKSB7XG5cdFx0XHRcdFx0dGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZUJlZm9yZUluamVjdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5qZWN0SW50by5zZXRDb250cm9sKGluamVjdEF0LCB0aGlzLmZvcm1Hcm91cCk7XG5cdFx0XHRcdHRoaXMub25JbmplY3RlZC5lbWl0KHZhbHVlQmVmb3JlSW5qZWN0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRuZ09uQ2hhbmdlcyhzaW1wbGVDaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG5cdFx0aWYgKHNpbXBsZUNoYW5nZXMucmVhZE9ubHk/LmN1cnJlbnRWYWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy5hY3RpdmVDb250cm9scy5mb3JFYWNoKGUgPT4gZS5mb3JtQ29udHJvbC5kaXNhYmxlKCkpO1xuXHRcdH1cblx0XHRpZiAoaXNWYWx1ZVNldChzaW1wbGVDaGFuZ2VzLndhcm5pbmdzPy5jdXJyZW50VmFsdWUpKSB7XG5cdFx0XHR0aGlzLnBhdGNoRm9ybVdhcm5pbmdzTWFwKCk7XG5cdFx0fVxuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0aWYgKGlzVmFsdWVTZXQodGhpcy5wYXJlbnQpICYmIGlzVmFsdWVTZXQodGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIpKSB7XG5cdFx0XHRjb25zdCBpbmplY3RJbnRvID0gdGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIuaW5qZWN0SW50bztcblx0XHRcdGNvbnN0IGluamVjdEF0ID0gdGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIuYXQ7XG5cdFx0XHRpZiAoaW5qZWN0SW50byBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcblx0XHRcdFx0Y29uc3QgaWR4ID0gaW5qZWN0SW50by5jb250cm9scy5maW5kSW5kZXgoZSA9PiBlID09PSB0aGlzLmZvcm1Hcm91cCk7XG5cdFx0XHRcdGluamVjdEludG8uc2V0Q29udHJvbChpZHgsIG5ldyBGb3JtQ29udHJvbCgpKTtcblx0XHRcdH0gZWxzZSBpZiAoaW5qZWN0SW50byBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBpbmplY3RBdCAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCBpbmRleCBGb3JtR3JvdXAgd2l0aCAke3R5cGVvZiBpbmplY3RBdH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpbmplY3RJbnRvLnNldENvbnRyb2woaW5qZWN0QXQsIG5ldyBGb3JtQ29udHJvbCgpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHBhdGNoRm9ybVdhcm5pbmdzTWFwKCk6IHZvaWQge1xuXHRcdGNvbnN0IHNldEZuID0gdGhpcy53YXJuaW5ncy5zZXQ7XG5cdFx0dGhpcy53YXJuaW5ncy5zZXQgPSAoa2V5OiBBYnN0cmFjdENvbnRyb2wsIHZhbHVlOiBzdHJpbmcpOiBNYXA8QWJzdHJhY3RDb250cm9sLCBzdHJpbmc+ID0+IHtcblx0XHRcdGNvbnN0IHByZXZWYWwgPSB0aGlzLndhcm5pbmdzLmdldChrZXkpO1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gc2V0Rm4uY2FsbCh0aGlzLndhcm5pbmdzLCBrZXksIHZhbHVlKTtcblx0XHRcdGlmIChwcmV2VmFsICE9PSB2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLmdldEZvcm1FbGVtZW50QnlGb3JtQ29udHJvbChrZXkpPy5kZXRlcm1pbmVQb3B1cFN0YXRlKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH07XG5cblx0XHRjb25zdCBkZWxldGVGbiA9IHRoaXMud2FybmluZ3MuZGVsZXRlO1xuXHRcdHRoaXMud2FybmluZ3MuZGVsZXRlID0gKGtleTogQWJzdHJhY3RDb250cm9sKTogYm9vbGVhbiA9PiB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBkZWxldGVGbi5jYWxsKHRoaXMud2FybmluZ3MsIGtleSk7XG5cdFx0XHR0aGlzLmdldEZvcm1FbGVtZW50QnlGb3JtQ29udHJvbChrZXkpPy5kZXRlcm1pbmVQb3B1cFN0YXRlKCk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIGFkZFN1cHBvcnRGb3JQYXRjaFZhbHVlSW50ZXJjZXB0b3IoKTogdm9pZCB7XG5cdFx0Y29uc3QgZm4gPSB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlO1xuXHRcdGNvbnN0IG5ld0ZuID0gKFxuXHRcdFx0dmFsdWU6IHtcblx0XHRcdFx0W2tleTogc3RyaW5nXTogYW55O1xuXHRcdFx0fSxcblx0XHRcdG9wdGlvbnM/OiB7XG5cdFx0XHRcdG9ubHlTZWxmPzogYm9vbGVhbjtcblx0XHRcdFx0ZW1pdEV2ZW50PzogYm9vbGVhbjtcblx0XHRcdH1cblx0XHQpOiB2b2lkID0+IHtcblx0XHRcdHRoaXMucGF0Y2hWYWx1ZUludGVyY2VwdG9yKHZhbHVlKS50aGVuKCh2YWwpID0+IHtcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0Zm4uY2FsbCh0aGlzLmZvcm1Hcm91cCwgdmFsLCBvcHRpb25zKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXHRcdHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUgPSBuZXdGbjtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlckNvbnRyb2woZm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCwgZm9ybUVsZW1lbnQ6IEZvcm1FbGVtZW50Q29tcG9uZW50KTogdm9pZCB7XG5cdFx0dGhpcy5hY3RpdmVDb250cm9scy5wdXNoKHtmb3JtQ29udHJvbCwgZm9ybUVsZW1lbnR9KTtcblx0XHRpZiAodGhpcy5wYXJlbnQpIHtcblx0XHRcdHRoaXMucGFyZW50LnJlZ2lzdGVyQ29udHJvbChmb3JtQ29udHJvbCwgZm9ybUVsZW1lbnQpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5yZWFkT25seSkge1xuXHRcdFx0Zm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xuXHRcdH1cblx0XHRjb25zdCBlbmFibGVGbjogKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSA9PiB2b2lkID0gZm9ybUNvbnRyb2wuZW5hYmxlO1xuXHRcdGZvcm1Db250cm9sLmVuYWJsZSA9IChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkgPT4ge1xuXHRcdFx0aWYgKCF0aGlzLnJlYWRPbmx5KSB7XG5cdFx0XHRcdGVuYWJsZUZuLmNhbGwoZm9ybUNvbnRyb2wsIG9wdHMpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRwdWJsaWMgdW5yZWdpc3RlckNvbnRyb2woZm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IHZvaWQge1xuXHRcdHRoaXMuYWN0aXZlQ29udHJvbHMgPSB0aGlzLmFjdGl2ZUNvbnRyb2xzLmZpbHRlcigoZSkgPT4gZS5mb3JtQ29udHJvbCAhPT0gZm9ybUNvbnRyb2wpO1xuXHRcdGlmICh0aGlzLnBhcmVudCkge1xuXHRcdFx0dGhpcy5wYXJlbnQudW5yZWdpc3RlckNvbnRyb2woZm9ybUNvbnRyb2wpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYWRkRm9ybUdyb3VwQ29udHJvbHMoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLCByZXN1bHQ6IEFycmF5PFVudHlwZWRGb3JtQ29udHJvbD4pOiB2b2lkIHtcblx0XHRPYmplY3QudmFsdWVzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaCgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcblx0XHRcdFx0dGhpcy5hZGRGb3JtR3JvdXBDb250cm9scyh2YWx1ZSwgcmVzdWx0KTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XG5cdFx0XHRcdHRoaXMuYWRkRm9ybUFycmF5Q29udHJvbHModmFsdWUsIHJlc3VsdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Db250cm9sKSB7XG5cdFx0XHRcdHRoaXMuYWRkRm9ybUNvbnRyb2wodmFsdWUsIHJlc3VsdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGFkZEZvcm1BcnJheUNvbnRyb2xzKGZvcm1BcnJheTogVW50eXBlZEZvcm1BcnJheSwgcmVzdWx0OiBBcnJheTxVbnR5cGVkRm9ybUNvbnRyb2w+KTogdm9pZCB7XG5cdFx0Zm9ybUFycmF5LmNvbnRyb2xzLmZvckVhY2goKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG5cdFx0XHRcdHRoaXMuYWRkRm9ybUdyb3VwQ29udHJvbHModmFsdWUsIHJlc3VsdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgVW50eXBlZEZvcm1BcnJheSkge1xuXHRcdFx0XHR0aGlzLmFkZEZvcm1BcnJheUNvbnRyb2xzKHZhbHVlLCByZXN1bHQpO1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQ29udHJvbCkge1xuXHRcdFx0XHR0aGlzLmFkZEZvcm1Db250cm9sKHZhbHVlLCByZXN1bHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRBbGxGb3JtQ29udHJvbHMoKTogQXJyYXk8VW50eXBlZEZvcm1Db250cm9sPiB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cdFx0dGhpcy5hZGRGb3JtR3JvdXBDb250cm9scyh0aGlzLmZvcm1Hcm91cCwgcmVzdWx0KTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBhZGRGb3JtQ29udHJvbChjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wsIHJlc3VsdDogQXJyYXk8VW50eXBlZEZvcm1Db250cm9sPik6IHZvaWQge1xuXHRcdHJlc3VsdC5wdXNoKGNvbnRyb2wpO1xuXHR9XG5cblx0cHJpdmF0ZSBkaXNhYmxlSW5hY3RpdmVGb3JtQ29udHJvbChjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuYWN0aXZlQ29udHJvbHMuc29tZSgoZSkgPT4gZS5mb3JtQ29udHJvbCA9PT0gY29udHJvbCkpIHtcblx0XHRcdGNvbnRyb2wuZGlzYWJsZSgpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBnZXRGb3JtRWxlbWVudEJ5Rm9ybUNvbnRyb2woY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogRm9ybUVsZW1lbnRDb21wb25lbnQge1xuXHRcdHJldHVybiB0aGlzLmFjdGl2ZUNvbnRyb2xzLmZpbmQoKGUpID0+IGUuZm9ybUNvbnRyb2wgPT09IGNvbnRyb2wpPy5mb3JtRWxlbWVudDtcblx0fVxuXG5cdHB1YmxpYyBnZXRXYXJuaW5nVG9TaG93KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMud2FybmluZ3MuZ2V0KGNvbnRyb2wpO1xuXHR9XG5cblx0dHJ5U3VibWl0KCk6IFByb21pc2U8YW55PiB7XG5cdFx0dGhpcy5mb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xuXHRcdGNvbnN0IGFsbENvbnRyb2xzOiBBcnJheTxVbnR5cGVkRm9ybUNvbnRyb2w+ID0gdGhpcy5nZXRBbGxGb3JtQ29udHJvbHMoKTtcblx0XHRjb25zdCBvcmlnaW5hbERpc2FibGVkU3RhdGVzID0gYWxsQ29udHJvbHMubWFwKGUgPT4ge1xuXHRcdFx0cmV0dXJuIHtjb250cm9sOiBlLCBkaXNhYmxlZDogZS5kaXNhYmxlZH07XG5cdFx0fSk7XG5cdFx0YWxsQ29udHJvbHMuZm9yRWFjaChlID0+IHRoaXMuZGlzYWJsZUluYWN0aXZlRm9ybUNvbnRyb2woZSkpO1xuXHRcdGFsbENvbnRyb2xzLmZvckVhY2goZSA9PiBlLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSk7XG5cdFx0Y29uc3QgZm9ybUdyb3VwVmFsdWUgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZTtcblx0XHRjb25zdCByZW5kZXJlZEFuZEVuYWJsZWRWYWx1ZXMgPSB0aGlzLmdldFJlbmRlcmVkRmllbGRWYWx1ZXNGb3JtR3JvdXAodGhpcy5mb3JtR3JvdXAsIHRydWUpO1xuXHRcdGNvbnN0IHJlbmRlcmVkQnV0RGlzYWJsZWRWYWx1ZXMgPSB0aGlzLmdldFJlbmRlcmVkRmllbGRWYWx1ZXNGb3JtR3JvdXAodGhpcy5mb3JtR3JvdXAsIGZhbHNlKTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRpZiAodGhpcy5mb3JtR3JvdXAucGVuZGluZykge1xuXHRcdFx0XHRjb25zdCBzdWIgPSB0aGlzLmZvcm1Hcm91cC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgocmVzKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHJlcyAhPT0gJ1BFTkRJTkcnKSB7XG5cdFx0XHRcdFx0XHRzdWIudW5zdWJzY3JpYmUoKTtcblx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlU3VibWlzc2lvbihvcmlnaW5hbERpc2FibGVkU3RhdGVzLCByZW5kZXJlZEFuZEVuYWJsZWRWYWx1ZXMsIHJlbmRlcmVkQnV0RGlzYWJsZWRWYWx1ZXMsIGZvcm1Hcm91cFZhbHVlKVxuXHRcdFx0XHRcdFx0LnRoZW4ocmVzb2x2ZSlcblx0XHRcdFx0XHRcdC5jYXRjaChyZWplY3QpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmhhbmRsZVN1Ym1pc3Npb24ob3JpZ2luYWxEaXNhYmxlZFN0YXRlcywgcmVuZGVyZWRBbmRFbmFibGVkVmFsdWVzLCByZW5kZXJlZEJ1dERpc2FibGVkVmFsdWVzLCBmb3JtR3JvdXBWYWx1ZSlcblx0XHRcdFx0LnRoZW4ocmVzb2x2ZSlcblx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0fVxuXG5cdHByaXZhdGUgaGFuZGxlU3VibWlzc2lvbihcblx0XHRvcmlnaW5hbERpc2FibGVkU3RhdGVzOiBBcnJheTx7IGNvbnRyb2w6IEZvcm1Db250cm9sPGFueT47IGRpc2FibGVkOiBib29sZWFuIH0+LFxuXHRcdHJlbmRlcmVkQW5kRW5hYmxlZFZhbHVlczogUmVjb3JkPGFueSwgYW55Pixcblx0XHRyZW5kZXJlZEJ1dERpc2FibGVkVmFsdWVzOiBSZWNvcmQ8YW55LCBhbnk+LFxuXHRcdGZvcm1Hcm91cFZhbHVlKTogUHJvbWlzZTxhbnk+XG5cdHtcblx0XHRpZiAodGhpcy5mb3JtR3JvdXAuaW52YWxpZCkge1xuXHRcdFx0dGhpcy5hY3RpdmVDb250cm9scy5maW5kKChlKSA9PiAhZS5mb3JtQ29udHJvbC52YWxpZCk/LmZvcm1FbGVtZW50Py5zY3JvbGxUbygpO1xuXHRcdFx0dGhpcy5zZXREaXNhYmxlZFN0YXRlc0ZvckFsbENvbnRyb2xzKG9yaWdpbmFsRGlzYWJsZWRTdGF0ZXMpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGludmFsaWRGaWVsZHNTeW1ib2wpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldERpc2FibGVkU3RhdGVzRm9yQWxsQ29udHJvbHMob3JpZ2luYWxEaXNhYmxlZFN0YXRlcyk7XG5cdFx0XHRjb25zdCByZW5kZXJlZFZhbHVlcyA9IGRlZXBNZXJnZShyZW5kZXJlZEFuZEVuYWJsZWRWYWx1ZXMsIHJlbmRlcmVkQnV0RGlzYWJsZWRWYWx1ZXMpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbZm9ybUdyb3VwVmFsdWUsIHJlbmRlcmVkVmFsdWVzXSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRSZW5kZXJlZEZpZWxkVmFsdWVzRm9ybUdyb3VwKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBlbmFibGVkOiBib29sZWFuLCB2YWx1ZU9iamVjdCA9IHt9KTogb2JqZWN0IHtcblx0XHRPYmplY3QuZW50cmllcyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goKFtuYW1lLCBjb250cm9sXSkgPT4ge1xuXHRcdFx0aWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCAmJiBjb250cm9sLmVuYWJsZWQgPT09IGVuYWJsZWQgJiYgdGhpcy5hY3RpdmVDb250cm9scy5zb21lKGUgPT4gZS5mb3JtQ29udHJvbCA9PT0gY29udHJvbCkpIHtcblx0XHRcdFx0dmFsdWVPYmplY3RbbmFtZV0gPSBjb250cm9sLnZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG5cdFx0XHRcdHZhbHVlT2JqZWN0W25hbWVdID0gW107XG5cdFx0XHRcdHRoaXMuZ2V0UmVuZGVyZWRGaWVsZFZhbHVlc0Zvcm1BcnJheShjb250cm9sLCBlbmFibGVkLCB2YWx1ZU9iamVjdFtuYW1lXSk7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcblx0XHRcdFx0dmFsdWVPYmplY3RbbmFtZV0gPSB7fTtcblx0XHRcdFx0dGhpcy5nZXRSZW5kZXJlZEZpZWxkVmFsdWVzRm9ybUdyb3VwKGNvbnRyb2wsIGVuYWJsZWQsIHZhbHVlT2JqZWN0W25hbWVdKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gdmFsdWVPYmplY3Q7XG5cdH1cblxuXHRwcml2YXRlIGdldFJlbmRlcmVkRmllbGRWYWx1ZXNGb3JtQXJyYXkoZm9ybUFycmF5OiBGb3JtQXJyYXksIGVuYWJsZWQ6IGJvb2xlYW4sIHZhbHVlQXJyYXk6IEFycmF5PGFueT4pOiB2b2lkIHtcblx0XHRmb3JtQXJyYXkuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG5cdFx0XHRpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sICYmIGNvbnRyb2wuZW5hYmxlZCA9PT0gZW5hYmxlZCAmJiB0aGlzLmFjdGl2ZUNvbnRyb2xzLnNvbWUoZSA9PiBlLmZvcm1Db250cm9sID09PSBjb250cm9sKSkge1xuXHRcdFx0XHR2YWx1ZUFycmF5LnB1c2goY29udHJvbC52YWx1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcblx0XHRcdFx0Y29uc3QgbmV3QXJyYXkgPSBbXTtcblx0XHRcdFx0dmFsdWVBcnJheS5wdXNoKG5ld0FycmF5KTtcblx0XHRcdFx0dGhpcy5nZXRSZW5kZXJlZEZpZWxkVmFsdWVzRm9ybUFycmF5KGNvbnRyb2wsIGVuYWJsZWQsIG5ld0FycmF5KTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuXHRcdFx0XHRjb25zdCBuZXdPYmplY3QgPSB7fTtcblx0XHRcdFx0dmFsdWVBcnJheS5wdXNoKG5ld09iamVjdCk7XG5cdFx0XHRcdHRoaXMuZ2V0UmVuZGVyZWRGaWVsZFZhbHVlc0Zvcm1Hcm91cChjb250cm9sLCBlbmFibGVkLCBuZXdPYmplY3QpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXREaXNhYmxlZFN0YXRlc0ZvckFsbENvbnRyb2xzKG9yaWdpbmFsRGlzYWJsZWRTdGF0ZXM6IEFycmF5PHsgY29udHJvbDogQWJzdHJhY3RDb250cm9sOyBkaXNhYmxlZDogYm9vbGVhbiB9Pik6IHZvaWQge1xuXHRcdG9yaWdpbmFsRGlzYWJsZWRTdGF0ZXMuZm9yRWFjaCgoZSkgPT4ge1xuXHRcdFx0aWYgKGUuZGlzYWJsZWQpIHtcblx0XHRcdFx0ZS5jb250cm9sLmRpc2FibGUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGUuY29udHJvbC5lbmFibGUoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIiwiPGZvcm0+XG5cdDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZm9ybT5cblxuXG4iXX0=
301
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbGlwcGEvbmd4LWVuaGFuY3ktZm9ybXMvc3JjL2xpYi9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy9saWIvZm9ybS9mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUFFLFlBQVksRUFDdkIsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBRU4sUUFBUSxFQUNSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBa0IsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxSSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFFNUMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFNdEUsTUFBTSxPQUFPLGdCQUFnQjs7NkdBQWhCLGdCQUFnQjtpR0FBaEIsZ0JBQWdCOzJGQUFoQixnQkFBZ0I7a0JBSjVCLFNBQVM7bUJBQUM7b0JBQ1YsOENBQThDO29CQUM5QyxRQUFRLEVBQUUsY0FBYztpQkFDeEI7OEJBRVMsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7O0FBUVAsTUFBTSxPQUFPLGFBQWE7SUFlekIsWUFBNEMsTUFBcUIsRUFBc0Isa0JBQW9DO1FBQS9FLFdBQU0sR0FBTixNQUFNLENBQWU7UUFBc0IsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFrQjtRQWQzRyxh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TyxFQUFFLENBQUM7YUFDcEI7aUJBQU07Z0JBQ04sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNuQjtRQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs7MEdBclJXLGFBQWE7OEZBQWIsYUFBYSxrVUNqQzFCLG9EQUtBOzJGRDRCYSxhQUFhO2tCQUx6QixTQUFTOytCQUNDLFVBQVU7OzBCQW1CUCxRQUFROzswQkFBSSxRQUFROzswQkFBbUMsUUFBUTs0Q0FkNUQsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxpQkFBaUI7c0JBQWhDLEtBQUs7Z0JBQ1Usb0JBQW9CO3NCQUFuQyxLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxxQkFBcUI7c0JBQXBDLEtBQUs7Z0JBQ1csVUFBVTtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0RGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsXG5cdElucHV0LFxuXHRPbkNoYW5nZXMsXG5cdE9uRGVzdHJveSxcblx0T25Jbml0LFxuXHRPcHRpb25hbCxcblx0T3V0cHV0LFxuXHRTaW1wbGVDaGFuZ2VzLFxuXHRTa2lwU2VsZiwgVGVtcGxhdGVSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUFycmF5LCBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Rm9ybUVsZW1lbnRDb21wb25lbnR9IGZyb20gJy4vZm9ybS1lbGVtZW50L2Zvcm0tZWxlbWVudC5jb21wb25lbnQnO1xuaW1wb3J0IHtpc1ZhbHVlU2V0fSBmcm9tICcuLi91dGlsL3ZhbHVlcyc7XG5pbXBvcnQgeyBkZWVwTWVyZ2UgfSBmcm9tICcuLi91dGlsL29iamVjdHMnO1xuXG5leHBvcnQgY29uc3QgaW52YWxpZEZpZWxkc1N5bWJvbCA9IFN5bWJvbCgnTm90IGFsbCBmaWVsZHMgYXJlIHZhbGlkJyk7XG5cbkBEaXJlY3RpdmUoe1xuXHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGlyZWN0aXZlLXNlbGVjdG9yXG5cdHNlbGVjdG9yOiAna2xwLXN1Yi1mb3JtJyxcbn0pXG5leHBvcnQgY2xhc3MgU3ViRm9ybURpcmVjdGl2ZSB7XG5cdEBJbnB1dCgpIGluamVjdEludG86IFVudHlwZWRGb3JtQXJyYXkgfCBVbnR5cGVkRm9ybUdyb3VwO1xuXHRASW5wdXQoKSBhdDogbnVtYmVyIHwgc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdrbHAtZm9ybScsXG5cdHRlbXBsYXRlVXJsOiAnLi9mb3JtLmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmxzOiBbJy4vZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG5cdEBJbnB1dCgpIHB1YmxpYyByZWFkT25seSA9IGZhbHNlO1xuXHRASW5wdXQoKSBwdWJsaWMgc2hvd0Vycm9yTWVzc2FnZXMgPSB0cnVlO1xuXHRASW5wdXQoKSBwdWJsaWMgZXJyb3JNZXNzYWdlTG9jYXRpb246ICdiZWxvd0NhcHRpb24nIHwgJ3JpZ2h0T2ZDYXB0aW9uJyA9ICdiZWxvd0NhcHRpb24nO1xuXHRASW5wdXQoKSBwdWJsaWMgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwO1xuXHRASW5wdXQoKSBwdWJsaWMgd2FybmluZ3M6IE1hcDxBYnN0cmFjdENvbnRyb2wsIHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4+ID0gbmV3IE1hcDxBYnN0cmFjdENvbnRyb2wsIHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4+KCk7XG5cdEBJbnB1dCgpIHB1YmxpYyBwYXRjaFZhbHVlSW50ZXJjZXB0b3I6ICh2YWx1ZXM6IGFueSkgPT4gUHJvbWlzZTxhbnk+O1xuXHRAT3V0cHV0KCkgcHVibGljIG9uSW5qZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZDxzdHJpbmcsIGFueT4+KCk7XG5cblx0Ly8gd2Uga2VlcCB0cmFjayBvZiB3aGF0IGZvcm0gY29udHJvbHMgYXJlIGFjdHVhbGx5IHJlbmRlcmVkLiBPbmx5IHRob3NlIGNvdW50IHdoZW4gbG9va2luZyBhdCBmb3JtIHZhbGlkYXRpb25cblx0cHJpdmF0ZSBhY3RpdmVDb250cm9sczogQXJyYXk8e1xuXHRcdGZvcm1Db250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2w7XG5cdFx0Zm9ybUVsZW1lbnQ6IEZvcm1FbGVtZW50Q29tcG9uZW50O1xuXHR9PiA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yKEBTa2lwU2VsZigpIEBPcHRpb25hbCgpIHByaXZhdGUgcGFyZW50OiBGb3JtQ29tcG9uZW50LCBAT3B0aW9uYWwoKSBwcml2YXRlIHN1YkZvcm1QbGFjZWhvbGRlcjogU3ViRm9ybURpcmVjdGl2ZSkge1xuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0aWYgKGlzVmFsdWVTZXQodGhpcy5wYXRjaFZhbHVlSW50ZXJjZXB0b3IpKSB7XG5cdFx0XHR0aGlzLmFkZFN1cHBvcnRGb3JQYXRjaFZhbHVlSW50ZXJjZXB0b3IoKTtcblx0XHR9XG5cdFx0aWYgKGlzVmFsdWVTZXQodGhpcy5wYXJlbnQpICYmIGlzVmFsdWVTZXQodGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIpKSB7XG5cdFx0XHRjb25zdCBpbmplY3RJbnRvID0gdGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIuaW5qZWN0SW50bztcblx0XHRcdGNvbnN0IGluamVjdEF0ID0gdGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIuYXQ7XG5cdFx0XHRpZiAoaW5qZWN0SW50byBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBpbmplY3RBdCAhPT0gJ251bWJlcicpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCBpbmRleCBGb3JtQXJyYXkgd2l0aCAke3R5cGVvZiBpbmplY3RBdH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaW5qZWN0SW50by5hdChpbmplY3RBdCk/LmRpc2FibGVkKSB7XG5cdFx0XHRcdFx0dGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHZhbHVlQmVmb3JlSW5qZWN0ID0gaW5qZWN0SW50by5hdChpbmplY3RBdCk/LnZhbHVlO1xuXHRcdFx0XHRpZiAoaXNWYWx1ZVNldCh2YWx1ZUJlZm9yZUluamVjdCkpIHtcblx0XHRcdFx0XHR0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHZhbHVlQmVmb3JlSW5qZWN0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpbmplY3RJbnRvLnNldENvbnRyb2woaW5qZWN0QXQsIHRoaXMuZm9ybUdyb3VwKTtcblx0XHRcdFx0dGhpcy5vbkluamVjdGVkLmVtaXQodmFsdWVCZWZvcmVJbmplY3QpO1xuXHRcdFx0fSBlbHNlIGlmIChpbmplY3RJbnRvIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGluamVjdEF0ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgY2Fubm90IGluZGV4IEZvcm1Hcm91cCB3aXRoICR7dHlwZW9mIGluamVjdEF0fWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChpbmplY3RJbnRvLmdldChpbmplY3RBdCk/LmRpc2FibGVkKSB7XG5cdFx0XHRcdFx0dGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHZhbHVlQmVmb3JlSW5qZWN0ID0gaW5qZWN0SW50by5nZXQoaW5qZWN0QXQpPy52YWx1ZTtcblx0XHRcdFx0aWYgKGlzVmFsdWVTZXQodmFsdWVCZWZvcmVJbmplY3QpKSB7XG5cdFx0XHRcdFx0dGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZUJlZm9yZUluamVjdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5qZWN0SW50by5zZXRDb250cm9sKGluamVjdEF0LCB0aGlzLmZvcm1Hcm91cCk7XG5cdFx0XHRcdHRoaXMub25JbmplY3RlZC5lbWl0KHZhbHVlQmVmb3JlSW5qZWN0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRuZ09uQ2hhbmdlcyhzaW1wbGVDaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG5cdFx0aWYgKHNpbXBsZUNoYW5nZXMucmVhZE9ubHk/LmN1cnJlbnRWYWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy5hY3RpdmVDb250cm9scy5mb3JFYWNoKGUgPT4gZS5mb3JtQ29udHJvbC5kaXNhYmxlKCkpO1xuXHRcdH1cblx0XHRpZiAoaXNWYWx1ZVNldChzaW1wbGVDaGFuZ2VzLndhcm5pbmdzPy5jdXJyZW50VmFsdWUpKSB7XG5cdFx0XHR0aGlzLnBhdGNoRm9ybVdhcm5pbmdzTWFwKCk7XG5cdFx0fVxuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0aWYgKGlzVmFsdWVTZXQodGhpcy5wYXJlbnQpICYmIGlzVmFsdWVTZXQodGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIpKSB7XG5cdFx0XHRjb25zdCBpbmplY3RJbnRvID0gdGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIuaW5qZWN0SW50bztcblx0XHRcdGNvbnN0IGluamVjdEF0ID0gdGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIuYXQ7XG5cdFx0XHRpZiAoaW5qZWN0SW50byBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcblx0XHRcdFx0Y29uc3QgaWR4ID0gaW5qZWN0SW50by5jb250cm9scy5maW5kSW5kZXgoZSA9PiBlID09PSB0aGlzLmZvcm1Hcm91cCk7XG5cdFx0XHRcdGluamVjdEludG8uc2V0Q29udHJvbChpZHgsIG5ldyBGb3JtQ29udHJvbCgpKTtcblx0XHRcdH0gZWxzZSBpZiAoaW5qZWN0SW50byBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBpbmplY3RBdCAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCBpbmRleCBGb3JtR3JvdXAgd2l0aCAke3R5cGVvZiBpbmplY3RBdH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpbmplY3RJbnRvLnNldENvbnRyb2woaW5qZWN0QXQsIG5ldyBGb3JtQ29udHJvbCgpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHBhdGNoRm9ybVdhcm5pbmdzTWFwKCk6IHZvaWQge1xuXHRcdGNvbnN0IHNldEZuID0gdGhpcy53YXJuaW5ncy5zZXQ7XG5cdFx0dGhpcy53YXJuaW5ncy5zZXQgPSAoa2V5OiBBYnN0cmFjdENvbnRyb2wsIHZhbHVlOiBzdHJpbmcpOiBNYXA8QWJzdHJhY3RDb250cm9sLCBzdHJpbmc+ID0+IHtcblx0XHRcdGNvbnN0IHByZXZWYWwgPSB0aGlzLndhcm5pbmdzLmdldChrZXkpO1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gc2V0Rm4uY2FsbCh0aGlzLndhcm5pbmdzLCBrZXksIHZhbHVlKTtcblx0XHRcdGlmIChwcmV2VmFsICE9PSB2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLmdldEZvcm1FbGVtZW50QnlGb3JtQ29udHJvbChrZXkpPy5kZXRlcm1pbmVQb3B1cFN0YXRlKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH07XG5cblx0XHRjb25zdCBkZWxldGVGbiA9IHRoaXMud2FybmluZ3MuZGVsZXRlO1xuXHRcdHRoaXMud2FybmluZ3MuZGVsZXRlID0gKGtleTogQWJzdHJhY3RDb250cm9sKTogYm9vbGVhbiA9PiB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBkZWxldGVGbi5jYWxsKHRoaXMud2FybmluZ3MsIGtleSk7XG5cdFx0XHR0aGlzLmdldEZvcm1FbGVtZW50QnlGb3JtQ29udHJvbChrZXkpPy5kZXRlcm1pbmVQb3B1cFN0YXRlKCk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIGFkZFN1cHBvcnRGb3JQYXRjaFZhbHVlSW50ZXJjZXB0b3IoKTogdm9pZCB7XG5cdFx0Y29uc3QgZm4gPSB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlO1xuXHRcdGNvbnN0IG5ld0ZuID0gKFxuXHRcdFx0dmFsdWU6IHtcblx0XHRcdFx0W2tleTogc3RyaW5nXTogYW55O1xuXHRcdFx0fSxcblx0XHRcdG9wdGlvbnM/OiB7XG5cdFx0XHRcdG9ubHlTZWxmPzogYm9vbGVhbjtcblx0XHRcdFx0ZW1pdEV2ZW50PzogYm9vbGVhbjtcblx0XHRcdH1cblx0XHQpOiB2b2lkID0+IHtcblx0XHRcdHRoaXMucGF0Y2hWYWx1ZUludGVyY2VwdG9yKHZhbHVlKS50aGVuKCh2YWwpID0+IHtcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0Zm4uY2FsbCh0aGlzLmZvcm1Hcm91cCwgdmFsLCBvcHRpb25zKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXHRcdHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUgPSBuZXdGbjtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlckNvbnRyb2woZm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCwgZm9ybUVsZW1lbnQ6IEZvcm1FbGVtZW50Q29tcG9uZW50KTogdm9pZCB7XG5cdFx0dGhpcy5hY3RpdmVDb250cm9scy5wdXNoKHtmb3JtQ29udHJvbCwgZm9ybUVsZW1lbnR9KTtcblx0XHRpZiAodGhpcy5wYXJlbnQpIHtcblx0XHRcdHRoaXMucGFyZW50LnJlZ2lzdGVyQ29udHJvbChmb3JtQ29udHJvbCwgZm9ybUVsZW1lbnQpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5yZWFkT25seSkge1xuXHRcdFx0Zm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xuXHRcdH1cblx0XHRjb25zdCBlbmFibGVGbjogKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSA9PiB2b2lkID0gZm9ybUNvbnRyb2wuZW5hYmxlO1xuXHRcdGZvcm1Db250cm9sLmVuYWJsZSA9IChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkgPT4ge1xuXHRcdFx0aWYgKCF0aGlzLnJlYWRPbmx5KSB7XG5cdFx0XHRcdGVuYWJsZUZuLmNhbGwoZm9ybUNvbnRyb2wsIG9wdHMpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRwdWJsaWMgdW5yZWdpc3RlckNvbnRyb2woZm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IHZvaWQge1xuXHRcdHRoaXMuYWN0aXZlQ29udHJvbHMgPSB0aGlzLmFjdGl2ZUNvbnRyb2xzLmZpbHRlcigoZSkgPT4gZS5mb3JtQ29udHJvbCAhPT0gZm9ybUNvbnRyb2wpO1xuXHRcdGlmICh0aGlzLnBhcmVudCkge1xuXHRcdFx0dGhpcy5wYXJlbnQudW5yZWdpc3RlckNvbnRyb2woZm9ybUNvbnRyb2wpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYWRkRm9ybUdyb3VwQ29udHJvbHMoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLCByZXN1bHQ6IEFycmF5PFVudHlwZWRGb3JtQ29udHJvbD4pOiB2b2lkIHtcblx0XHRPYmplY3QudmFsdWVzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaCgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcblx0XHRcdFx0dGhpcy5hZGRGb3JtR3JvdXBDb250cm9scyh2YWx1ZSwgcmVzdWx0KTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XG5cdFx0XHRcdHRoaXMuYWRkRm9ybUFycmF5Q29udHJvbHModmFsdWUsIHJlc3VsdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Db250cm9sKSB7XG5cdFx0XHRcdHRoaXMuYWRkRm9ybUNvbnRyb2wodmFsdWUsIHJlc3VsdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGFkZEZvcm1BcnJheUNvbnRyb2xzKGZvcm1BcnJheTogVW50eXBlZEZvcm1BcnJheSwgcmVzdWx0OiBBcnJheTxVbnR5cGVkRm9ybUNvbnRyb2w+KTogdm9pZCB7XG5cdFx0Zm9ybUFycmF5LmNvbnRyb2xzLmZvckVhY2goKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG5cdFx0XHRcdHRoaXMuYWRkRm9ybUdyb3VwQ29udHJvbHModmFsdWUsIHJlc3VsdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgVW50eXBlZEZvcm1BcnJheSkge1xuXHRcdFx0XHR0aGlzLmFkZEZvcm1BcnJheUNvbnRyb2xzKHZhbHVlLCByZXN1bHQpO1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQ29udHJvbCkge1xuXHRcdFx0XHR0aGlzLmFkZEZvcm1Db250cm9sKHZhbHVlLCByZXN1bHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRBbGxGb3JtQ29udHJvbHMoKTogQXJyYXk8VW50eXBlZEZvcm1Db250cm9sPiB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cdFx0dGhpcy5hZGRGb3JtR3JvdXBDb250cm9scyh0aGlzLmZvcm1Hcm91cCwgcmVzdWx0KTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBhZGRGb3JtQ29udHJvbChjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wsIHJlc3VsdDogQXJyYXk8VW50eXBlZEZvcm1Db250cm9sPik6IHZvaWQge1xuXHRcdHJlc3VsdC5wdXNoKGNvbnRyb2wpO1xuXHR9XG5cblx0cHJpdmF0ZSBkaXNhYmxlSW5hY3RpdmVGb3JtQ29udHJvbChjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuYWN0aXZlQ29udHJvbHMuc29tZSgoZSkgPT4gZS5mb3JtQ29udHJvbCA9PT0gY29udHJvbCkpIHtcblx0XHRcdGNvbnRyb2wuZGlzYWJsZSgpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBnZXRGb3JtRWxlbWVudEJ5Rm9ybUNvbnRyb2woY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogRm9ybUVsZW1lbnRDb21wb25lbnQge1xuXHRcdHJldHVybiB0aGlzLmFjdGl2ZUNvbnRyb2xzLmZpbmQoKGUpID0+IGUuZm9ybUNvbnRyb2wgPT09IGNvbnRyb2wpPy5mb3JtRWxlbWVudDtcblx0fVxuXG5cdHB1YmxpYyBnZXRXYXJuaW5nVG9TaG93KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4ge1xuXHRcdHJldHVybiB0aGlzLndhcm5pbmdzLmdldChjb250cm9sKTtcblx0fVxuXG5cdHRyeVN1Ym1pdCgpOiBQcm9taXNlPGFueT4ge1xuXHRcdHRoaXMuZm9ybUdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcblx0XHRjb25zdCBhbGxDb250cm9sczogQXJyYXk8VW50eXBlZEZvcm1Db250cm9sPiA9IHRoaXMuZ2V0QWxsRm9ybUNvbnRyb2xzKCk7XG5cdFx0Y29uc3Qgb3JpZ2luYWxEaXNhYmxlZFN0YXRlcyA9IGFsbENvbnRyb2xzLm1hcChlID0+IHtcblx0XHRcdHJldHVybiB7Y29udHJvbDogZSwgZGlzYWJsZWQ6IGUuZGlzYWJsZWR9O1xuXHRcdH0pO1xuXHRcdGFsbENvbnRyb2xzLmZvckVhY2goZSA9PiB0aGlzLmRpc2FibGVJbmFjdGl2ZUZvcm1Db250cm9sKGUpKTtcblx0XHRhbGxDb250cm9scy5mb3JFYWNoKGUgPT4gZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCkpO1xuXHRcdGNvbnN0IGZvcm1Hcm91cFZhbHVlID0gdGhpcy5mb3JtR3JvdXAudmFsdWU7XG5cdFx0Y29uc3QgcmVuZGVyZWRBbmRFbmFibGVkVmFsdWVzID0gdGhpcy5nZXRSZW5kZXJlZEZpZWxkVmFsdWVzRm9ybUdyb3VwKHRoaXMuZm9ybUdyb3VwLCB0cnVlKTtcblx0XHRjb25zdCByZW5kZXJlZEJ1dERpc2FibGVkVmFsdWVzID0gdGhpcy5nZXRSZW5kZXJlZEZpZWxkVmFsdWVzRm9ybUdyb3VwKHRoaXMuZm9ybUdyb3VwLCBmYWxzZSk7XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuZm9ybUdyb3VwLnBlbmRpbmcpIHtcblx0XHRcdFx0Y29uc3Qgc3ViID0gdGhpcy5mb3JtR3JvdXAuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0XHRcdGlmIChyZXMgIT09ICdQRU5ESU5HJykge1xuXHRcdFx0XHRcdFx0c3ViLnVuc3Vic2NyaWJlKCk7XG5cdFx0XHRcdFx0XHR0aGlzLmhhbmRsZVN1Ym1pc3Npb24ob3JpZ2luYWxEaXNhYmxlZFN0YXRlcywgcmVuZGVyZWRBbmRFbmFibGVkVmFsdWVzLCByZW5kZXJlZEJ1dERpc2FibGVkVmFsdWVzLCBmb3JtR3JvdXBWYWx1ZSlcblx0XHRcdFx0XHRcdC50aGVuKHJlc29sdmUpXG5cdFx0XHRcdFx0XHQuY2F0Y2gocmVqZWN0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5oYW5kbGVTdWJtaXNzaW9uKG9yaWdpbmFsRGlzYWJsZWRTdGF0ZXMsIHJlbmRlcmVkQW5kRW5hYmxlZFZhbHVlcywgcmVuZGVyZWRCdXREaXNhYmxlZFZhbHVlcywgZm9ybUdyb3VwVmFsdWUpXG5cdFx0XHRcdC50aGVuKHJlc29sdmUpXG5cdFx0XHRcdC5jYXRjaChyZWplY3QpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdH1cblxuXHRwcml2YXRlIGhhbmRsZVN1Ym1pc3Npb24oXG5cdFx0b3JpZ2luYWxEaXNhYmxlZFN0YXRlczogQXJyYXk8eyBjb250cm9sOiBGb3JtQ29udHJvbDxhbnk+OyBkaXNhYmxlZDogYm9vbGVhbiB9Pixcblx0XHRyZW5kZXJlZEFuZEVuYWJsZWRWYWx1ZXM6IFJlY29yZDxhbnksIGFueT4sXG5cdFx0cmVuZGVyZWRCdXREaXNhYmxlZFZhbHVlczogUmVjb3JkPGFueSwgYW55Pixcblx0XHRmb3JtR3JvdXBWYWx1ZSk6IFByb21pc2U8YW55PlxuXHR7XG5cdFx0aWYgKHRoaXMuZm9ybUdyb3VwLmludmFsaWQpIHtcblx0XHRcdHRoaXMuYWN0aXZlQ29udHJvbHMuZmluZCgoZSkgPT4gIWUuZm9ybUNvbnRyb2wudmFsaWQpPy5mb3JtRWxlbWVudD8uc2Nyb2xsVG8oKTtcblx0XHRcdHRoaXMuc2V0RGlzYWJsZWRTdGF0ZXNGb3JBbGxDb250cm9scyhvcmlnaW5hbERpc2FibGVkU3RhdGVzKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChpbnZhbGlkRmllbGRzU3ltYm9sKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXREaXNhYmxlZFN0YXRlc0ZvckFsbENvbnRyb2xzKG9yaWdpbmFsRGlzYWJsZWRTdGF0ZXMpO1xuXHRcdFx0Y29uc3QgcmVuZGVyZWRWYWx1ZXMgPSBkZWVwTWVyZ2UocmVuZGVyZWRBbmRFbmFibGVkVmFsdWVzLCByZW5kZXJlZEJ1dERpc2FibGVkVmFsdWVzKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW2Zvcm1Hcm91cFZhbHVlLCByZW5kZXJlZFZhbHVlc10pO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0UmVuZGVyZWRGaWVsZFZhbHVlc0Zvcm1Hcm91cChmb3JtR3JvdXA6IEZvcm1Hcm91cCwgZW5hYmxlZDogYm9vbGVhbiwgdmFsdWVPYmplY3QgPSB7fSk6IG9iamVjdCB7XG5cdFx0T2JqZWN0LmVudHJpZXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChbbmFtZSwgY29udHJvbF0pID0+IHtcblx0XHRcdGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wgJiYgY29udHJvbC5lbmFibGVkID09PSBlbmFibGVkICYmIHRoaXMuYWN0aXZlQ29udHJvbHMuc29tZShlID0+IGUuZm9ybUNvbnRyb2wgPT09IGNvbnRyb2wpKSB7XG5cdFx0XHRcdHZhbHVlT2JqZWN0W25hbWVdID0gY29udHJvbC52YWx1ZTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuXHRcdFx0XHR2YWx1ZU9iamVjdFtuYW1lXSA9IFtdO1xuXHRcdFx0XHR0aGlzLmdldFJlbmRlcmVkRmllbGRWYWx1ZXNGb3JtQXJyYXkoY29udHJvbCwgZW5hYmxlZCwgdmFsdWVPYmplY3RbbmFtZV0pO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG5cdFx0XHRcdHZhbHVlT2JqZWN0W25hbWVdID0ge307XG5cdFx0XHRcdHRoaXMuZ2V0UmVuZGVyZWRGaWVsZFZhbHVlc0Zvcm1Hcm91cChjb250cm9sLCBlbmFibGVkLCB2YWx1ZU9iamVjdFtuYW1lXSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHZhbHVlT2JqZWN0O1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRSZW5kZXJlZEZpZWxkVmFsdWVzRm9ybUFycmF5KGZvcm1BcnJheTogRm9ybUFycmF5LCBlbmFibGVkOiBib29sZWFuLCB2YWx1ZUFycmF5OiBBcnJheTxhbnk+KTogdm9pZCB7XG5cdFx0Zm9ybUFycmF5LmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuXHRcdFx0aWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCAmJiBjb250cm9sLmVuYWJsZWQgPT09IGVuYWJsZWQgJiYgdGhpcy5hY3RpdmVDb250cm9scy5zb21lKGUgPT4gZS5mb3JtQ29udHJvbCA9PT0gY29udHJvbCkpIHtcblx0XHRcdFx0dmFsdWVBcnJheS5wdXNoKGNvbnRyb2wudmFsdWUpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG5cdFx0XHRcdGNvbnN0IG5ld0FycmF5ID0gW107XG5cdFx0XHRcdHZhbHVlQXJyYXkucHVzaChuZXdBcnJheSk7XG5cdFx0XHRcdHRoaXMuZ2V0UmVuZGVyZWRGaWVsZFZhbHVlc0Zvcm1BcnJheShjb250cm9sLCBlbmFibGVkLCBuZXdBcnJheSk7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcblx0XHRcdFx0Y29uc3QgbmV3T2JqZWN0ID0ge307XG5cdFx0XHRcdHZhbHVlQXJyYXkucHVzaChuZXdPYmplY3QpO1xuXHRcdFx0XHR0aGlzLmdldFJlbmRlcmVkRmllbGRWYWx1ZXNGb3JtR3JvdXAoY29udHJvbCwgZW5hYmxlZCwgbmV3T2JqZWN0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgc2V0RGlzYWJsZWRTdGF0ZXNGb3JBbGxDb250cm9scyhvcmlnaW5hbERpc2FibGVkU3RhdGVzOiBBcnJheTx7IGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDsgZGlzYWJsZWQ6IGJvb2xlYW4gfT4pOiB2b2lkIHtcblx0XHRvcmlnaW5hbERpc2FibGVkU3RhdGVzLmZvckVhY2goKGUpID0+IHtcblx0XHRcdGlmIChlLmRpc2FibGVkKSB7XG5cdFx0XHRcdGUuY29udHJvbC5kaXNhYmxlKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlLmNvbnRyb2wuZW5hYmxlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiIsIjxmb3JtPlxuXHQ8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Zvcm0+XG5cblxuIl19
@@ -17,8 +17,15 @@ export class WithTooltipDirective {
17
17
  if (textToDisplay.length < 1) {
18
18
  return;
19
19
  }
20
- if (el.nativeElement.offsetWidth >= el.nativeElement.scrollWidth) {
21
- return;
20
+ if (stringIsSetAndFilled(this.tooltipText)) {
21
+ if (this.tooltipText === el.nativeElement.innerText) {
22
+ return;
23
+ }
24
+ }
25
+ else {
26
+ if (el.nativeElement.offsetWidth >= el.nativeElement.scrollWidth) {
27
+ return;
28
+ }
22
29
  }
23
30
  if (getComputedStyle(el.nativeElement).position === 'static') {
24
31
  el.nativeElement.style.position = 'relative';
@@ -93,4 +100,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
93
100
  }], tooltipText: [{
94
101
  type: Input
95
102
  }] } });
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aFRvb2x0aXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy9saWIvd2l0aFRvb2x0aXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQWMsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFFbkQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDO0FBRTVCLE1BQU0sTUFBTSxHQUFHO0lBQ2QsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxpQ0FBaUMsRUFBQztJQUNwRixLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGdDQUFnQyxFQUFDO0NBQ2pGLENBQUM7QUFLRixNQUFNLE9BQU8sb0JBQW9CO0lBTWhDLFlBQVksRUFBYztRQUZqQixtQkFBYyxHQUFzQixRQUFRLENBQUM7UUFHckQsRUFBRSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO1lBQ3BELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDL0MsT0FBTzthQUNQO1lBQ0QsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDN0IsT0FBTzthQUNQO1lBQ0QsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRTtnQkFDakUsT0FBTzthQUNQO1lBQ0QsSUFB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LFFBQVEsRUFBRSxrQkFBa0I7aUJBQzVCO2lHQUtTLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7c3RyaW5nSXNTZXRBbmRGaWxsZWR9IGZyb20gXCIuL3V0aWwvdmFsdWVzXCI7XG5cbmNvbnN0IHRyaWFuZ2xlU2l6ZSA9ICcxMnB4JztcblxuY29uc3QgY29sb3JzID0ge1xuXHRvcmFuZ2U6IHsgbm9BbHBoYTogJ3JnYigyNTUsIDEyOCwgMCknLCB3aXRoQWxwaGE6ICdyZ2JhKDI1NSwgMTI4LCAwLCAwLjEyNTQ5MDE5NjEpJ30sXG5cdGJsYWNrOiB7IG5vQWxwaGE6ICdyZ2IoNDAsIDQwLCA0MCknLCB3aXRoQWxwaGE6ICdyZ2JhKDQwLCA0MCwgNDAsIDAuMTI1NDkwMTk2MSknfSxcbn07XG5cbkBEaXJlY3RpdmUoe1xuXHRzZWxlY3RvcjogJ1trbHBXaXRoVG9vbHRpcF0nXG59KVxuZXhwb3J0IGNsYXNzIFdpdGhUb29sdGlwRGlyZWN0aXZlIHtcblx0cHJpdmF0ZSBkaXY6IEhUTUxFbGVtZW50O1xuXHRwcml2YXRlIHRyaWFuZ2xlOiBIVE1MRWxlbWVudDtcblx0cHJpdmF0ZSB0cmlhbmdsZVdoaXRlOiBIVE1MRWxlbWVudDtcblx0QElucHV0KCkga2xwV2l0aFRvb2x0aXA6ICdvcmFuZ2UnfCAnYmxhY2snID0gJ29yYW5nZSc7XG5cdEBJbnB1dCgpIHRvb2x0aXBUZXh0OiBzdHJpbmc7XG5cdGNvbnN0cnVjdG9yKGVsOiBFbGVtZW50UmVmKSB7XG5cdFx0ZWwubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgKCkgPT4ge1xuXHRcdFx0Y29uc3QgdGV4dFRvRGlzcGxheSA9IHRoaXMudG9vbHRpcFRleHQgfHwgZWwubmF0aXZlRWxlbWVudC5pbm5lclRleHQudHJpbSgpO1xuXHRcdFx0aWYgKCFzdHJpbmdJc1NldEFuZEZpbGxlZCh0aGlzLmtscFdpdGhUb29sdGlwKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAodGV4dFRvRGlzcGxheS5sZW5ndGggPCAxKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChlbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoID49IGVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGgpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGdldENvbXB1dGVkU3R5bGUoZWwubmF0aXZlRWxlbWVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG5cdFx0XHRcdGVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdFx0dGhpcy5kaXYuc3R5bGUuekluZGV4ID0gJzInO1xuXHRcdFx0dGhpcy5kaXYuc3R5bGUuY29sb3IgPSBgJHtjb2xvcnNbdGhpcy5rbHBXaXRoVG9vbHRpcF0ubm9BbHBoYX1gO1xuXHRcdFx0dGhpcy5kaXYuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuXHRcdFx0dGhpcy5kaXYuc3R5bGUubGVmdCA9IGAke2VsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueH1weGA7XG5cdFx0XHR0aGlzLmRpdi5zdHlsZS50b3AgPSBgJHtlbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnl9cHhgO1xuXHRcdFx0dGhpcy5kaXYuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZShjYWxjKC0xMDAlICsgJHtlbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRofXB4KSwgY2FsYygtMTAwJSAtIDAuM3JlbSkpYDtcblx0XHRcdHRoaXMuZGl2LnN0eWxlLm1heFdpZHRoID0gJzIwMHB4Jztcblx0XHRcdHRoaXMuZGl2LnN0eWxlLndoaXRlU3BhY2UgPSAnYnJlYWstc3BhY2VzJztcblx0XHRcdHRoaXMuZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICd3aGl0ZSc7XG5cdFx0XHR0aGlzLmRpdi5zdHlsZS5ib3JkZXIgPSBgMXB4IHNvbGlkICR7Y29sb3JzW3RoaXMua2xwV2l0aFRvb2x0aXBdLndpdGhBbHBoYX1gO1xuXHRcdFx0dGhpcy5kaXYuc3R5bGUuYm94U2hhZG93ID0gYDJweCAzcHggMTBweCAwcHggJHtjb2xvcnNbdGhpcy5rbHBXaXRoVG9vbHRpcF0ud2l0aEFscGhhfWA7XG5cdFx0XHR0aGlzLmRpdi5zdHlsZS5wYWRkaW5nID0gJzAuM3JlbSAwLjVyZW0nO1xuXHRcdFx0dGhpcy5kaXYuc3R5bGUuYm94U2l6aW5nID0gJ2JvcmRlci1ib3gnO1xuXHRcdFx0dGhpcy5kaXYuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzNweCc7XG5cdFx0XHR0aGlzLmRpdi50ZXh0Q29udGVudCA9IHRleHRUb0Rpc3BsYXk7XG5cdFx0XHRlbC5uYXRpdmVFbGVtZW50LnByZXBlbmQodGhpcy5kaXYpO1xuXG5cdFx0XHR0aGlzLnRyaWFuZ2xlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHR0aGlzLnRyaWFuZ2xlLnN0eWxlLnpJbmRleCA9ICcxJztcblx0XHRcdHRoaXMudHJpYW5nbGUuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuXHRcdFx0dGhpcy50cmlhbmdsZS5zdHlsZS5sZWZ0ID0gYGNhbGMoJHtlbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnggKyBlbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRofXB4IC0gMnJlbSlgO1xuXHRcdFx0dGhpcy50cmlhbmdsZS5zdHlsZS50b3AgPSBgJHtlbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnl9cHhgO1xuXHRcdFx0dGhpcy50cmlhbmdsZS5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKC01MCUsIGNhbGMoLTEwMCUgKyAwLjFyZW0pKWA7XG5cdFx0XHR0aGlzLnRyaWFuZ2xlLnN0eWxlLndpZHRoID0gJzAnO1xuXHRcdFx0dGhpcy50cmlhbmdsZS5zdHlsZS5oZWlnaHQgPSAnMCc7XG5cdFx0XHR0aGlzLnRyaWFuZ2xlLnN0eWxlLmJvcmRlckxlZnQgPSBgJHt0cmlhbmdsZVNpemV9IHNvbGlkIHRyYW5zcGFyZW50YDtcblx0XHRcdHRoaXMudHJpYW5nbGUuc3R5bGUuYm9yZGVyUmlnaHQgPSBgJHt0cmlhbmdsZVNpemV9IHNvbGlkIHRyYW5zcGFyZW50YDtcblx0XHRcdHRoaXMudHJpYW5nbGUuc3R5bGUuYm9yZGVyVG9wID0gYCR7dHJpYW5nbGVTaXplfSBzb2xpZCAke2NvbG9yc1t0aGlzLmtscFdpdGhUb29sdGlwXS53aXRoQWxwaGF9YDtcblx0XHRcdGVsLm5hdGl2ZUVsZW1lbnQucHJlcGVuZCh0aGlzLnRyaWFuZ2xlKTtcblxuXHRcdFx0dGhpcy50cmlhbmdsZVdoaXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHR0aGlzLnRyaWFuZ2xlV2hpdGUuc3R5bGUuekluZGV4ID0gJzMnO1xuXHRcdFx0dGhpcy50cmlhbmdsZVdoaXRlLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcblx0XHRcdHRoaXMudHJpYW5nbGVXaGl0ZS5zdHlsZS5sZWZ0ID0gYGNhbGMoJHtlbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnggKyBlbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRofXB4IC0gMnJlbSlgO1xuXHRcdFx0dGhpcy50cmlhbmdsZVdoaXRlLnN0eWxlLnRvcCA9IGAke2VsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueX1weGA7XG5cdFx0XHR0aGlzLnRyaWFuZ2xlV2hpdGUuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgtNTAlLCBjYWxjKC0xMDAlICsgMC4xcmVtIC0gMnB4KSlgO1xuXHRcdFx0dGhpcy50cmlhbmdsZVdoaXRlLnN0eWxlLndpZHRoID0gJzAnO1xuXHRcdFx0dGhpcy50cmlhbmdsZVdoaXRlLnN0eWxlLmhlaWdodCA9ICcwJztcblx0XHRcdHRoaXMudHJpYW5nbGVXaGl0ZS5zdHlsZS5ib3JkZXJMZWZ0ID0gYCR7dHJpYW5nbGVTaXplfSBzb2xpZCB0cmFuc3BhcmVudGA7XG5cdFx0XHR0aGlzLnRyaWFuZ2xlV2hpdGUuc3R5bGUuYm9yZGVyUmlnaHQgPSBgJHt0cmlhbmdsZVNpemV9IHNvbGlkIHRyYW5zcGFyZW50YDtcblx0XHRcdHRoaXMudHJpYW5nbGVXaGl0ZS5zdHlsZS5ib3JkZXJUb3AgPSBgJHt0cmlhbmdsZVNpemV9IHNvbGlkIHdoaXRlYDtcblx0XHRcdGVsLm5hdGl2ZUVsZW1lbnQucHJlcGVuZCh0aGlzLnRyaWFuZ2xlV2hpdGUpO1xuXHRcdH0pO1xuXHRcdGVsLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAoKSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRlbC5uYXRpdmVFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblx0XHRcdH0gY2F0Y2ggKGV4KSB7fVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZWwubmF0aXZlRWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLnRyaWFuZ2xlKTtcblx0XHRcdH0gY2F0Y2ggKGV4KSB7fVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZWwubmF0aXZlRWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLnRyaWFuZ2xlV2hpdGUpO1xuXHRcdFx0fSBjYXRjaCAoZXgpIHt9XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aFRvb2x0aXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy9saWIvd2l0aFRvb2x0aXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQWMsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFFbkQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDO0FBRTVCLE1BQU0sTUFBTSxHQUFHO0lBQ2QsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxpQ0FBaUMsRUFBQztJQUNwRixLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGdDQUFnQyxFQUFDO0NBQ2pGLENBQUM7QUFLRixNQUFNLE9BQU8sb0JBQW9CO0lBTWhDLFlBQVksRUFBYztRQUZqQixtQkFBYyxHQUFzQixRQUFRLENBQUM7UUFHckQsRUFBRSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO1lBQ3BELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDL0MsT0FBTzthQUNQO1lBQ0QsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDN0IsT0FBTzthQUNQO1lBQ0QsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQzNDLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxFQUFFLENBQUMsYUFBYSxD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QyxhQUFhLENBQUMsQ0FBQzthQUNqRDtZQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUU7UUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOztpSEFuRlcsb0JBQW9CO3FHQUFwQixvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFIaEMsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsa0JBQWtCO2lCQUM1QjtpR0FLUyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXR9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge3N0cmluZ0lzU2V0QW5kRmlsbGVkfSBmcm9tIFwiLi91dGlsL3ZhbHVlc1wiO1xuXG5jb25zdCB0cmlhbmdsZVNpemUgPSAnMTJweCc7XG5cbmNvbnN0IGNvbG9ycyA9IHtcblx0b3JhbmdlOiB7IG5vQWxwaGE6ICdyZ2IoMjU1LCAxMjgsIDApJywgd2l0aEFscGhhOiAncmdiYSgyNTUsIDEyOCwgMCwgMC4xMjU0OTAxOTYxKSd9LFxuXHRibGFjazogeyBub0FscGhhOiAncmdiKDQwLCA0MCwgNDApJywgd2l0aEFscGhhOiAncmdiYSg0MCwgNDAsIDQwLCAwLjEyNTQ5MDE5NjEpJ30sXG59O1xuXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6ICdba2xwV2l0aFRvb2x0aXBdJ1xufSlcbmV4cG9ydCBjbGFzcyBXaXRoVG9vbHRpcERpcmVjdGl2ZSB7XG5cdHByaXZhdGUgZGl2OiBIVE1MRWxlbWVudDtcblx0cHJpdmF0ZSB0cmlhbmdsZTogSFRNTEVsZW1lbnQ7XG5cdHByaXZhdGUgdHJpYW5nbGVXaGl0ZTogSFRNTEVsZW1lbnQ7XG5cdEBJbnB1dCgpIGtscFdpdGhUb29sdGlwOiAnb3JhbmdlJ3wgJ2JsYWNrJyA9ICdvcmFuZ2UnO1xuXHRASW5wdXQoKSB0b29sdGlwVGV4dDogc3RyaW5nO1xuXHRjb25zdHJ1Y3RvcihlbDogRWxlbWVudFJlZikge1xuXHRcdGVsLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHtcblx0XHRcdGNvbnN0IHRleHRUb0Rpc3BsYXkgPSB0aGlzLnRvb2x0aXBUZXh0IHx8IGVsLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0LnRyaW0oKTtcblx0XHRcdGlmICghc3RyaW5nSXNTZXRBbmRGaWxsZWQodGhpcy5rbHBXaXRoVG9vbHRpcCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRleHRUb0Rpc3BsYXkubGVuZ3RoIDwgMSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoc3RyaW5nSXNTZXRBbmRGaWxsZWQodGhpcy50b29sdGlwVGV4dCkpIHtcblx0XHRcdFx0aWYgKHRoaXMudG9vbHRpcFRleHQgPT09IGVsLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0KSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoZWwubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCA+PSBlbC5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZ2V0Q29tcHV0ZWRTdHlsZShlbC5uYXRpdmVFbGVtZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcblx0XHRcdFx0ZWwubmF0aXZlRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHR0aGlzLmRpdi5zdHlsZS56SW5kZXggPSAnMic7XG5cdFx0XHR0aGlzLmRpdi5zdHlsZS5jb2xvciA9IGAke2NvbG9yc1t0aGlzLmtscFdpdGhUb29sdGlwXS5ub0FscGhhfWA7XG5cdFx0XHR0aGlzLmRpdi5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG5cdFx0XHR0aGlzLmRpdi5zdHlsZS5sZWZ0ID0gYCR7ZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS54fXB4YDtcblx0XHRcdHRoaXMuZGl2LnN0eWxlLnRvcCA9IGAke2VsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueX1weGA7XG5cdFx0XHR0aGlzLmRpdi5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKGNhbGMoLTEwMCUgKyAke2VsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGh9cHgpLCBjYWxjKC0xMDAlIC0gMC4zcmVtKSlgO1xuXHRcdFx0dGhpcy5kaXYuc3R5bGUubWF4V2lkdGggPSAnMjAwcHgnO1xuXHRcdFx0dGhpcy5kaXYuc3R5bGUud2hpdGVTcGFjZSA9ICdicmVhay1zcGFjZXMnO1xuXHRcdFx0dGhpcy5kaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3doaXRlJztcblx0XHRcdHRoaXMuZGl2LnN0eWxlLmJvcmRlciA9IGAxcHggc29saWQgJHtjb2xvcnNbdGhpcy5rbHBXaXRoVG9vbHRpcF0ud2l0aEFscGhhfWA7XG5cdFx0XHR0aGlzLmRpdi5zdHlsZS5ib3hTaGFkb3cgPSBgMnB4IDNweCAxMHB4IDBweCAke2NvbG9yc1t0aGlzLmtscFdpdGhUb29sdGlwXS53aXRoQWxwaGF9YDtcblx0XHRcdHRoaXMuZGl2LnN0eWxlLnBhZGRpbmcgPSAnMC4zcmVtIDAuNXJlbSc7XG5cdFx0XHR0aGlzLmRpdi5zdHlsZS5ib3hTaXppbmcgPSAnYm9yZGVyLWJveCc7XG5cdFx0XHR0aGlzLmRpdi5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnM3B4Jztcblx0XHRcdHRoaXMuZGl2LnRleHRDb250ZW50ID0gdGV4dFRvRGlzcGxheTtcblx0XHRcdGVsLm5hdGl2ZUVsZW1lbnQucHJlcGVuZCh0aGlzLmRpdik7XG5cblx0XHRcdHRoaXMudHJpYW5nbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRcdHRoaXMudHJpYW5nbGUuc3R5bGUuekluZGV4ID0gJzEnO1xuXHRcdFx0dGhpcy50cmlhbmdsZS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG5cdFx0XHR0aGlzLnRyaWFuZ2xlLnN0eWxlLmxlZnQgPSBgY2FsYygke2VsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueCArIGVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGh9cHggLSAycmVtKWA7XG5cdFx0XHR0aGlzLnRyaWFuZ2xlLnN0eWxlLnRvcCA9IGAke2VsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueX1weGA7XG5cdFx0XHR0aGlzLnRyaWFuZ2xlLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoLTUwJSwgY2FsYygtMTAwJSArIDAuMXJlbSkpYDtcblx0XHRcdHRoaXMudHJpYW5nbGUuc3R5bGUud2lkdGggPSAnMCc7XG5cdFx0XHR0aGlzLnRyaWFuZ2xlLnN0eWxlLmhlaWdodCA9ICcwJztcblx0XHRcdHRoaXMudHJpYW5nbGUuc3R5bGUuYm9yZGVyTGVmdCA9IGAke3RyaWFuZ2xlU2l6ZX0gc29saWQgdHJhbnNwYXJlbnRgO1xuXHRcdFx0dGhpcy50cmlhbmdsZS5zdHlsZS5ib3JkZXJSaWdodCA9IGAke3RyaWFuZ2xlU2l6ZX0gc29saWQgdHJhbnNwYXJlbnRgO1xuXHRcdFx0dGhpcy50cmlhbmdsZS5zdHlsZS5ib3JkZXJUb3AgPSBgJHt0cmlhbmdsZVNpemV9IHNvbGlkICR7Y29sb3JzW3RoaXMua2xwV2l0aFRvb2x0aXBdLndpdGhBbHBoYX1gO1xuXHRcdFx0ZWwubmF0aXZlRWxlbWVudC5wcmVwZW5kKHRoaXMudHJpYW5nbGUpO1xuXG5cdFx0XHR0aGlzLnRyaWFuZ2xlV2hpdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRcdHRoaXMudHJpYW5nbGVXaGl0ZS5zdHlsZS56SW5kZXggPSAnMyc7XG5cdFx0XHR0aGlzLnRyaWFuZ2xlV2hpdGUuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuXHRcdFx0dGhpcy50cmlhbmdsZVdoaXRlLnN0eWxlLmxlZnQgPSBgY2FsYygke2VsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueCArIGVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGh9cHggLSAycmVtKWA7XG5cdFx0XHR0aGlzLnRyaWFuZ2xlV2hpdGUuc3R5bGUudG9wID0gYCR7ZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS55fXB4YDtcblx0XHRcdHRoaXMudHJpYW5nbGVXaGl0ZS5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKC01MCUsIGNhbGMoLTEwMCUgKyAwLjFyZW0gLSAycHgpKWA7XG5cdFx0XHR0aGlzLnRyaWFuZ2xlV2hpdGUuc3R5bGUud2lkdGggPSAnMCc7XG5cdFx0XHR0aGlzLnRyaWFuZ2xlV2hpdGUuc3R5bGUuaGVpZ2h0ID0gJzAnO1xuXHRcdFx0dGhpcy50cmlhbmdsZVdoaXRlLnN0eWxlLmJvcmRlckxlZnQgPSBgJHt0cmlhbmdsZVNpemV9IHNvbGlkIHRyYW5zcGFyZW50YDtcblx0XHRcdHRoaXMudHJpYW5nbGVXaGl0ZS5zdHlsZS5ib3JkZXJSaWdodCA9IGAke3RyaWFuZ2xlU2l6ZX0gc29saWQgdHJhbnNwYXJlbnRgO1xuXHRcdFx0dGhpcy50cmlhbmdsZVdoaXRlLnN0eWxlLmJvcmRlclRvcCA9IGAke3RyaWFuZ2xlU2l6ZX0gc29saWQgd2hpdGVgO1xuXHRcdFx0ZWwubmF0aXZlRWxlbWVudC5wcmVwZW5kKHRoaXMudHJpYW5nbGVXaGl0ZSk7XG5cdFx0fSk7XG5cdFx0ZWwubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICgpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGVsLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5kaXYpO1xuXHRcdFx0fSBjYXRjaCAoZXgpIHt9XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRlbC5uYXRpdmVFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMudHJpYW5nbGUpO1xuXHRcdFx0fSBjYXRjaCAoZXgpIHt9XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRlbC5uYXRpdmVFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMudHJpYW5nbGVXaGl0ZSk7XG5cdFx0XHR9IGNhdGNoIChleCkge31cblx0XHR9KTtcblx0fVxufVxuIl19