@sumaris-net/ngx-components 18.3.17 → 18.3.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/doc/changelog.md +9 -0
- package/esm2022/src/app/shared/form/field.component.mjs +3 -3
- package/esm2022/src/app/shared/material/chips/material.chips.mjs +3 -3
- package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +3 -2
- package/esm2022/src/app/shared/material/text/text-form.component.mjs +3 -3
- package/fesm2022/sumaris-net.ngx-components.mjs +8 -7
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/assets/manifest.json +1 -1
- package/src/theme/_material.scss +2 -3
|
@@ -644,7 +644,7 @@ export class MatChipsField {
|
|
|
644
644
|
multi: true,
|
|
645
645
|
useExisting: forwardRef(() => MatChipsField),
|
|
646
646
|
},
|
|
647
|
-
], viewQueries: [{ propertyName: "matInputText", first: true, predicate: ["matInputText"], descendants: true }, { propertyName: "autocomplete", first: true, predicate: MatAutocomplete, descendants: true }, { propertyName: "autocompleteTrigger", first: true, predicate: MatAutocompleteTrigger, descendants: true }], ngImport: i0, template: "<ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\">\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n class=\"material-chips\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <mat-chip-grid #chipList (focus)=\"filterChipsFocusEvent($event)\" [disabled]=\"!readonly && disabled\">\n @for (item of value; track item) {\n <mat-chip-row\n class=\"ion-no-margin\"\n [removable]=\"!disabled\"\n (removed)=\"remove(item)\"\n [color]=\"chipColor\"\n [highlighted]=\"true\"\n >\n {{ item | toString: displayWith }}\n @if (enabled) {\n <mat-icon matChipRemove>cancel</mat-icon>\n }\n </mat-chip-row>\n }\n\n <input\n #matInputText\n type=\"text\"\n [matAutocomplete]=\"autocomplete\"\n [matAutocompletePosition]=\"matAutocompletePosition\"\n [formControl]=\"_inputControl\"\n [placeholder]=\"floatLabel === 'never' && placeholder\"\n [appAutofocus]=\"autofocus\"\n [tabindex]=\"_tabindex\"\n [readonly]=\"readonly\"\n [hidden]=\"disabled\"\n [required]=\"required\"\n (click)=\"clicked.emit($event)\"\n (focus)=\"filterInputTextFocusEvent($event)\"\n (blur)=\"filterInputTextBlurEvent($event)\"\n (keydown.escape)=\"keydownEscape.emit($event)\"\n (keyup.enter)=\"keyupEnter.emit($event)\"\n (keyup.arrowDown)=\"!autocomplete.showPanel && dropButtonClick.emit($event)\"\n [matChipInputFor]=\"chipList\"\n />\n </mat-chip-grid>\n\n <!-- autocomplete -->\n <mat-autocomplete\n #autocomplete=\"matAutocomplete\"\n [autoActiveFirstOption]=\"true\"\n [hideSingleSelectionIndicator]=\"true\"\n [displayWith]=\"displayWith\"\n [class]=\"panelClass\"\n [panelWidth]=\"panelWidth\"\n [disableRipple]=\"disableRipple\"\n (optionSelected)=\"add($event.option.value)\"\n >\n <!-- Headers -->\n <ion-row class=\"mat-autocomplete-header column ion-no-padding\">\n @for (attr of displayAttributes; track attr; let i = $index) {\n <ion-col [size]=\"displayColumnSizes[i]\">\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n }\n </ion-row>\n\n @if (_$filteredItems | push: 'userBlocking'; as items) {\n <!-- No item option -->\n @if (items | isEmptyArray) {\n <mat-option class=\"ion-padding text-italic\" disabled>\n <ion-label>\n <i>{{ noResultMessage | translate }}</i>\n </ion-label>\n </mat-option>\n }\n\n <!-- Options -->\n @for (item of items; track $index) {\n <mat-option [value]=\"item\" class=\"ion-no-padding\">\n <ion-row [classList]=\"item.classList || ''\">\n @for (path of displayAttributes; track path; let i = $index) {\n <ion-col [size]=\"displayColumnSizes[i]\" [title]=\"text.innerText\" class=\"ion-align-self-center\">\n <ion-text>\n <span\n #text\n [innerHTML]=\"\n item\n | propertyGet: path\n | highlight: { search: matInputText.value, withAccent: highlightAccent }\n \"\n ></span>\n </ion-text>\n </ion-col>\n }\n </ion-row>\n </mat-option>\n }\n <!-- More item -->\n @if (_moreItemsCount) {\n <mat-option (ngInit)=\"_initAutocompleteInfiniteScroll()\" class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n }\n } @else if ((matInputText.value | strLength) < suggestLengthThreshold) {\n <!-- Need more characters -->\n <mat-option class=\"ion-padding text-italic\" disabled>\n <ion-label>\n {{ 'INFO.PLEASE_TYPE_MORE_CHARACTERS' | translate: { minLength: suggestLengthThreshold } }}\n </ion-label>\n </mat-option>\n } @else {\n <!-- Loading spinner -->\n <mat-option class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n }\n\n <!-- footer -->\n @if (itemCount; as count) {\n <ion-row class=\"mat-autocomplete-footer ion-no-padding\">\n <ion-col>\n <ion-text class=\"ion-float-end ion-padding-end\">\n <i>{{ 'COMMON.RESULT_COUNT' | translate: { count: count } }}</i>\n </ion-text>\n </ion-col>\n </ion-row>\n }\n </mat-autocomplete>\n\n <div matSuffix class=\"mat-form-field-suffix-bottom\">\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n @if (formControl.hasError('required')) {\n <mat-error translate>ERROR.FIELD_REQUIRED</mat-error>\n }\n\n @if (formControl.hasError('entity')) {\n <mat-error translate>ERROR.FIELD_INVALID</mat-error>\n }\n <ng-container *ngTemplateOutlet=\"matErrorTemplate\"></ng-container>\n <!-- Hints -->\n @if (!formControl.invalid) {\n <mat-hint>\n <ng-container *ngTemplateOutlet=\"matHintTemplate\"></ng-container>\n </mat-hint>\n }\n </mat-form-field>\n </ion-col>\n <ion-col size=\"auto\" class=\"ion-no-padding\">\n <ng-content select=\"[matAfter]\"></ng-content>\n </ion-col>\n </ion-row>\n</ion-grid>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #matSuffixTemplate>\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"toggleShowPanel($event)\"\n [hidden]=\"disabled\"\n [title]=\"dropButtonTitle || '' | translate\"\n >\n <mat-icon>{{ mobile ? 'arrow_drop_down' : 'keyboard_arrow_down' }}</mat-icon>\n </button>\n @if (clearable) {\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\"\n [title]=\"clearButtonTitle || '' | translate\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n\n<ng-template #matErrorTemplate>\n <ng-content select=\"mat-error,[matError]\"></ng-content>\n</ng-template>\n\n<ng-template #matHintTemplate>\n <div class=\"mat-mdc-form-field-hint-wrapper\">\n <ng-content select=\"mat-hint:not([align='end']),[matHint]\"></ng-content>\n <div class=\"mat-mdc-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint[align='end']\"></ng-content>\n </div>\n</ng-template>\n", styles: [":host{width:100%;display:inline-block;position:relative}:host.ion-text-wrap ion-label{white-space:normal!important}button[hidden]{display:none}.mat-mdc-chip.mat-mdc-standard-chip{--mdc-chip-container-height: 23px;margin:1px 0 0 8px!important;min-height:calc(31px - .5em)}.mat-mdc-chip.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action{padding:0 2px}.mat-mdc-chip.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action{padding-right:4px;padding-left:4px}.mat-mdc-chip.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action mat-icon{color:inherit}.mat-mdc-chip.mat-mdc-standard-chip.mat-primary{background-color:var(--ion-color-primary);color:var(--ion-color-primary-contrast)}.mat-mdc-chip.mat-mdc-standard-chip.mat-secondary{background-color:var(--ion-color-secondary);color:var(--ion-color-secondary-contrast)}.mat-mdc-chip.mat-mdc-standard-chip.mat-tertiary{background-color:var(--ion-color-tertiary);color:var(--ion-color-tertiary-contrast)}.mat-mdc-chip.mat-mdc-standard-chip.mat-accent{background-color:var(--ion-color-accent);color:var(--ion-color-accent-contrast)}.mat-mdc-chip.mat-mdc-standard-chip.mat-warning{background-color:var(--ion-color-warning);color:var(--ion-color-warning-contrast)}\n"], dependencies: [{ kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i3.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.NgInitDirective, selector: "[ngInit]", outputs: ["ngInit"] }, { kind: "directive", type: i5.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i8.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i8.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i8.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i11.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i11.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i11.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i11.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "directive", type: i12.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i13.PropertyGetPipe, name: "propertyGet" }, { kind: "pipe", type: i14.HighlightPipe, name: "highlight" }, { kind: "pipe", type: i15.EmptyArrayPipe, name: "isEmptyArray" }, { kind: "pipe", type: i16.ToStringPipe, name: "toString" }, { kind: "pipe", type: i16.StrLengthPipe, name: "strLength" }, { kind: "pipe", type: i17.AsFloatLabelTypePipe, name: "asFloatLabelType" }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }, { kind: "pipe", type: i18.RxPush, name: "push" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
647
|
+
], viewQueries: [{ propertyName: "matInputText", first: true, predicate: ["matInputText"], descendants: true }, { propertyName: "autocomplete", first: true, predicate: MatAutocomplete, descendants: true }, { propertyName: "autocompleteTrigger", first: true, predicate: MatAutocompleteTrigger, descendants: true }], ngImport: i0, template: "<ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\">\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n class=\"material-chips\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <mat-chip-grid #chipList (focus)=\"filterChipsFocusEvent($event)\" [disabled]=\"!readonly && disabled\">\n @for (item of value; track item) {\n <mat-chip-row\n class=\"ion-no-margin\"\n [removable]=\"!disabled\"\n (removed)=\"remove(item)\"\n [color]=\"chipColor\"\n [highlighted]=\"true\"\n >\n {{ item | toString: displayWith }}\n @if (enabled) {\n <mat-icon matChipRemove>cancel</mat-icon>\n }\n </mat-chip-row>\n }\n\n <input\n #matInputText\n type=\"text\"\n [matAutocomplete]=\"autocomplete\"\n [matAutocompletePosition]=\"matAutocompletePosition\"\n [formControl]=\"_inputControl\"\n [placeholder]=\"floatLabel === 'never' ? placeholder : null\"\n [appAutofocus]=\"autofocus\"\n [tabindex]=\"_tabindex\"\n [readonly]=\"readonly\"\n [hidden]=\"disabled\"\n [required]=\"required\"\n (click)=\"clicked.emit($event)\"\n (focus)=\"filterInputTextFocusEvent($event)\"\n (blur)=\"filterInputTextBlurEvent($event)\"\n (keydown.escape)=\"keydownEscape.emit($event)\"\n (keyup.enter)=\"keyupEnter.emit($event)\"\n (keyup.arrowDown)=\"!autocomplete.showPanel && dropButtonClick.emit($event)\"\n [matChipInputFor]=\"chipList\"\n />\n </mat-chip-grid>\n\n <!-- autocomplete -->\n <mat-autocomplete\n #autocomplete=\"matAutocomplete\"\n [autoActiveFirstOption]=\"true\"\n [hideSingleSelectionIndicator]=\"true\"\n [displayWith]=\"displayWith\"\n [class]=\"panelClass\"\n [panelWidth]=\"panelWidth\"\n [disableRipple]=\"disableRipple\"\n (optionSelected)=\"add($event.option.value)\"\n >\n <!-- Headers -->\n <ion-row class=\"mat-autocomplete-header column ion-no-padding\">\n @for (attr of displayAttributes; track attr; let i = $index) {\n <ion-col [size]=\"displayColumnSizes[i]\">\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n }\n </ion-row>\n\n @if (_$filteredItems | push: 'userBlocking'; as items) {\n <!-- No item option -->\n @if (items | isEmptyArray) {\n <mat-option class=\"ion-padding text-italic\" disabled>\n <ion-label>\n <i>{{ noResultMessage | translate }}</i>\n </ion-label>\n </mat-option>\n }\n\n <!-- Options -->\n @for (item of items; track $index) {\n <mat-option [value]=\"item\" class=\"ion-no-padding\">\n <ion-row [classList]=\"item.classList || ''\">\n @for (path of displayAttributes; track path; let i = $index) {\n <ion-col [size]=\"displayColumnSizes[i]\" [title]=\"text.innerText\" class=\"ion-align-self-center\">\n <ion-text>\n <span\n #text\n [innerHTML]=\"\n item\n | propertyGet: path\n | highlight: { search: matInputText.value, withAccent: highlightAccent }\n \"\n ></span>\n </ion-text>\n </ion-col>\n }\n </ion-row>\n </mat-option>\n }\n <!-- More item -->\n @if (_moreItemsCount) {\n <mat-option (ngInit)=\"_initAutocompleteInfiniteScroll()\" class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n }\n } @else if ((matInputText.value | strLength) < suggestLengthThreshold) {\n <!-- Need more characters -->\n <mat-option class=\"ion-padding text-italic\" disabled>\n <ion-label>\n {{ 'INFO.PLEASE_TYPE_MORE_CHARACTERS' | translate: { minLength: suggestLengthThreshold } }}\n </ion-label>\n </mat-option>\n } @else {\n <!-- Loading spinner -->\n <mat-option class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n }\n\n <!-- footer -->\n @if (itemCount; as count) {\n <ion-row class=\"mat-autocomplete-footer ion-no-padding\">\n <ion-col>\n <ion-text class=\"ion-float-end ion-padding-end\">\n <i>{{ 'COMMON.RESULT_COUNT' | translate: { count: count } }}</i>\n </ion-text>\n </ion-col>\n </ion-row>\n }\n </mat-autocomplete>\n\n <div matSuffix class=\"mat-form-field-suffix-bottom\">\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n @if (formControl.hasError('required')) {\n <mat-error translate>ERROR.FIELD_REQUIRED</mat-error>\n }\n\n @if (formControl.hasError('entity')) {\n <mat-error translate>ERROR.FIELD_INVALID</mat-error>\n }\n <ng-container *ngTemplateOutlet=\"matErrorTemplate\"></ng-container>\n <!-- Hints -->\n @if (!formControl.invalid) {\n <mat-hint>\n <ng-container *ngTemplateOutlet=\"matHintTemplate\"></ng-container>\n </mat-hint>\n }\n </mat-form-field>\n </ion-col>\n <ion-col size=\"auto\" class=\"ion-no-padding\">\n <ng-content select=\"[matAfter]\"></ng-content>\n </ion-col>\n </ion-row>\n</ion-grid>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #matSuffixTemplate>\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"toggleShowPanel($event)\"\n [hidden]=\"disabled\"\n [title]=\"dropButtonTitle || '' | translate\"\n >\n <mat-icon>{{ mobile ? 'arrow_drop_down' : 'keyboard_arrow_down' }}</mat-icon>\n </button>\n @if (clearable) {\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\"\n [title]=\"clearButtonTitle || '' | translate\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n\n<ng-template #matErrorTemplate>\n <ng-content select=\"mat-error,[matError]\"></ng-content>\n</ng-template>\n\n<ng-template #matHintTemplate>\n <div class=\"mat-mdc-form-field-hint-wrapper\">\n <ng-content select=\"mat-hint:not([align='end']),[matHint]\"></ng-content>\n <div class=\"mat-mdc-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint[align='end']\"></ng-content>\n </div>\n</ng-template>\n", styles: [":host{width:100%;display:inline-block;position:relative}:host.ion-text-wrap ion-label{white-space:normal!important}button[hidden]{display:none}.mat-mdc-chip.mat-mdc-standard-chip{--mdc-chip-container-height: 23px;margin:1px 0 0 8px!important;min-height:calc(31px - .5em)}.mat-mdc-chip.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action{padding:0 2px}.mat-mdc-chip.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action{padding-right:4px;padding-left:4px}.mat-mdc-chip.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action mat-icon{color:inherit}.mat-mdc-chip.mat-mdc-standard-chip.mat-primary{background-color:var(--ion-color-primary);color:var(--ion-color-primary-contrast)}.mat-mdc-chip.mat-mdc-standard-chip.mat-secondary{background-color:var(--ion-color-secondary);color:var(--ion-color-secondary-contrast)}.mat-mdc-chip.mat-mdc-standard-chip.mat-tertiary{background-color:var(--ion-color-tertiary);color:var(--ion-color-tertiary-contrast)}.mat-mdc-chip.mat-mdc-standard-chip.mat-accent{background-color:var(--ion-color-accent);color:var(--ion-color-accent-contrast)}.mat-mdc-chip.mat-mdc-standard-chip.mat-warning{background-color:var(--ion-color-warning);color:var(--ion-color-warning-contrast)}\n"], dependencies: [{ kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i3.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.NgInitDirective, selector: "[ngInit]", outputs: ["ngInit"] }, { kind: "directive", type: i5.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i8.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i8.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i8.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i11.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i11.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i11.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i11.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "directive", type: i12.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i13.PropertyGetPipe, name: "propertyGet" }, { kind: "pipe", type: i14.HighlightPipe, name: "highlight" }, { kind: "pipe", type: i15.EmptyArrayPipe, name: "isEmptyArray" }, { kind: "pipe", type: i16.ToStringPipe, name: "toString" }, { kind: "pipe", type: i16.StrLengthPipe, name: "strLength" }, { kind: "pipe", type: i17.AsFloatLabelTypePipe, name: "asFloatLabelType" }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }, { kind: "pipe", type: i18.RxPush, name: "push" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
648
648
|
}
|
|
649
649
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: MatChipsField, decorators: [{
|
|
650
650
|
type: Component,
|
|
@@ -654,7 +654,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
|
|
|
654
654
|
multi: true,
|
|
655
655
|
useExisting: forwardRef(() => MatChipsField),
|
|
656
656
|
},
|
|
657
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\">\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n class=\"material-chips\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <mat-chip-grid #chipList (focus)=\"filterChipsFocusEvent($event)\" [disabled]=\"!readonly && disabled\">\n @for (item of value; track item) {\n <mat-chip-row\n class=\"ion-no-margin\"\n [removable]=\"!disabled\"\n (removed)=\"remove(item)\"\n [color]=\"chipColor\"\n [highlighted]=\"true\"\n >\n {{ item | toString: displayWith }}\n @if (enabled) {\n <mat-icon matChipRemove>cancel</mat-icon>\n }\n </mat-chip-row>\n }\n\n <input\n #matInputText\n type=\"text\"\n [matAutocomplete]=\"autocomplete\"\n [matAutocompletePosition]=\"matAutocompletePosition\"\n [formControl]=\"_inputControl\"\n [placeholder]=\"floatLabel === 'never'
|
|
657
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\">\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n class=\"material-chips\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <mat-chip-grid #chipList (focus)=\"filterChipsFocusEvent($event)\" [disabled]=\"!readonly && disabled\">\n @for (item of value; track item) {\n <mat-chip-row\n class=\"ion-no-margin\"\n [removable]=\"!disabled\"\n (removed)=\"remove(item)\"\n [color]=\"chipColor\"\n [highlighted]=\"true\"\n >\n {{ item | toString: displayWith }}\n @if (enabled) {\n <mat-icon matChipRemove>cancel</mat-icon>\n }\n </mat-chip-row>\n }\n\n <input\n #matInputText\n type=\"text\"\n [matAutocomplete]=\"autocomplete\"\n [matAutocompletePosition]=\"matAutocompletePosition\"\n [formControl]=\"_inputControl\"\n [placeholder]=\"floatLabel === 'never' ? placeholder : null\"\n [appAutofocus]=\"autofocus\"\n [tabindex]=\"_tabindex\"\n [readonly]=\"readonly\"\n [hidden]=\"disabled\"\n [required]=\"required\"\n (click)=\"clicked.emit($event)\"\n (focus)=\"filterInputTextFocusEvent($event)\"\n (blur)=\"filterInputTextBlurEvent($event)\"\n (keydown.escape)=\"keydownEscape.emit($event)\"\n (keyup.enter)=\"keyupEnter.emit($event)\"\n (keyup.arrowDown)=\"!autocomplete.showPanel && dropButtonClick.emit($event)\"\n [matChipInputFor]=\"chipList\"\n />\n </mat-chip-grid>\n\n <!-- autocomplete -->\n <mat-autocomplete\n #autocomplete=\"matAutocomplete\"\n [autoActiveFirstOption]=\"true\"\n [hideSingleSelectionIndicator]=\"true\"\n [displayWith]=\"displayWith\"\n [class]=\"panelClass\"\n [panelWidth]=\"panelWidth\"\n [disableRipple]=\"disableRipple\"\n (optionSelected)=\"add($event.option.value)\"\n >\n <!-- Headers -->\n <ion-row class=\"mat-autocomplete-header column ion-no-padding\">\n @for (attr of displayAttributes; track attr; let i = $index) {\n <ion-col [size]=\"displayColumnSizes[i]\">\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n }\n </ion-row>\n\n @if (_$filteredItems | push: 'userBlocking'; as items) {\n <!-- No item option -->\n @if (items | isEmptyArray) {\n <mat-option class=\"ion-padding text-italic\" disabled>\n <ion-label>\n <i>{{ noResultMessage | translate }}</i>\n </ion-label>\n </mat-option>\n }\n\n <!-- Options -->\n @for (item of items; track $index) {\n <mat-option [value]=\"item\" class=\"ion-no-padding\">\n <ion-row [classList]=\"item.classList || ''\">\n @for (path of displayAttributes; track path; let i = $index) {\n <ion-col [size]=\"displayColumnSizes[i]\" [title]=\"text.innerText\" class=\"ion-align-self-center\">\n <ion-text>\n <span\n #text\n [innerHTML]=\"\n item\n | propertyGet: path\n | highlight: { search: matInputText.value, withAccent: highlightAccent }\n \"\n ></span>\n </ion-text>\n </ion-col>\n }\n </ion-row>\n </mat-option>\n }\n <!-- More item -->\n @if (_moreItemsCount) {\n <mat-option (ngInit)=\"_initAutocompleteInfiniteScroll()\" class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n }\n } @else if ((matInputText.value | strLength) < suggestLengthThreshold) {\n <!-- Need more characters -->\n <mat-option class=\"ion-padding text-italic\" disabled>\n <ion-label>\n {{ 'INFO.PLEASE_TYPE_MORE_CHARACTERS' | translate: { minLength: suggestLengthThreshold } }}\n </ion-label>\n </mat-option>\n } @else {\n <!-- Loading spinner -->\n <mat-option class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n }\n\n <!-- footer -->\n @if (itemCount; as count) {\n <ion-row class=\"mat-autocomplete-footer ion-no-padding\">\n <ion-col>\n <ion-text class=\"ion-float-end ion-padding-end\">\n <i>{{ 'COMMON.RESULT_COUNT' | translate: { count: count } }}</i>\n </ion-text>\n </ion-col>\n </ion-row>\n }\n </mat-autocomplete>\n\n <div matSuffix class=\"mat-form-field-suffix-bottom\">\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n @if (formControl.hasError('required')) {\n <mat-error translate>ERROR.FIELD_REQUIRED</mat-error>\n }\n\n @if (formControl.hasError('entity')) {\n <mat-error translate>ERROR.FIELD_INVALID</mat-error>\n }\n <ng-container *ngTemplateOutlet=\"matErrorTemplate\"></ng-container>\n <!-- Hints -->\n @if (!formControl.invalid) {\n <mat-hint>\n <ng-container *ngTemplateOutlet=\"matHintTemplate\"></ng-container>\n </mat-hint>\n }\n </mat-form-field>\n </ion-col>\n <ion-col size=\"auto\" class=\"ion-no-padding\">\n <ng-content select=\"[matAfter]\"></ng-content>\n </ion-col>\n </ion-row>\n</ion-grid>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #matSuffixTemplate>\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"toggleShowPanel($event)\"\n [hidden]=\"disabled\"\n [title]=\"dropButtonTitle || '' | translate\"\n >\n <mat-icon>{{ mobile ? 'arrow_drop_down' : 'keyboard_arrow_down' }}</mat-icon>\n </button>\n @if (clearable) {\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\"\n [title]=\"clearButtonTitle || '' | translate\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n\n<ng-template #matErrorTemplate>\n <ng-content select=\"mat-error,[matError]\"></ng-content>\n</ng-template>\n\n<ng-template #matHintTemplate>\n <div class=\"mat-mdc-form-field-hint-wrapper\">\n <ng-content select=\"mat-hint:not([align='end']),[matHint]\"></ng-content>\n <div class=\"mat-mdc-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint[align='end']\"></ng-content>\n </div>\n</ng-template>\n", styles: [":host{width:100%;display:inline-block;position:relative}:host.ion-text-wrap ion-label{white-space:normal!important}button[hidden]{display:none}.mat-mdc-chip.mat-mdc-standard-chip{--mdc-chip-container-height: 23px;margin:1px 0 0 8px!important;min-height:calc(31px - .5em)}.mat-mdc-chip.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action{padding:0 2px}.mat-mdc-chip.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action{padding-right:4px;padding-left:4px}.mat-mdc-chip.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action mat-icon{color:inherit}.mat-mdc-chip.mat-mdc-standard-chip.mat-primary{background-color:var(--ion-color-primary);color:var(--ion-color-primary-contrast)}.mat-mdc-chip.mat-mdc-standard-chip.mat-secondary{background-color:var(--ion-color-secondary);color:var(--ion-color-secondary-contrast)}.mat-mdc-chip.mat-mdc-standard-chip.mat-tertiary{background-color:var(--ion-color-tertiary);color:var(--ion-color-tertiary-contrast)}.mat-mdc-chip.mat-mdc-standard-chip.mat-accent{background-color:var(--ion-color-accent);color:var(--ion-color-accent-contrast)}.mat-mdc-chip.mat-mdc-standard-chip.mat-warning{background-color:var(--ion-color-warning);color:var(--ion-color-warning-contrast)}\n"] }]
|
|
658
658
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.FormGroupDirective, decorators: [{
|
|
659
659
|
type: Optional
|
|
660
660
|
}] }], propDecorators: { equals: [{
|
|
@@ -787,4 +787,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
|
|
|
787
787
|
}], items: [{
|
|
788
788
|
type: Input
|
|
789
789
|
}] } });
|
|
790
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuY2hpcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9jaGlwcy9tYXRlcmlhbC5jaGlwcy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2NoaXBzL21hdGVyaWFsLmNoaXBzLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUNoQix1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLGVBQWUsRUFHZixRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTRDLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakgsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0SCxPQUFPLEVBQUUsVUFBVSxFQUFnQiwyQkFBMkIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd2RyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLFlBQVksRUFDWixLQUFLLEVBQ0wsWUFBWSxFQUNaLFFBQVEsRUFDUixlQUFlLEVBQ2YsY0FBYyxFQUNkLFNBQVMsRUFDVCxRQUFRLEdBQ1QsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUs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QTFCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ2tDLGNBQWM7c0JBQXJELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBS1AsU0FBUztzQkFBdkMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBUVIsT0FBTztzQkFBdkIsTUFBTTt1QkFBQyxPQUFPO2dCQUVDLE9BQU87c0JBQXRCLE1BQU07dUJBQUMsTUFBTTtnQkFFRyxPQUFPO3NCQUF2QixNQUFNO3VCQUFDLE9BQU87Z0JBQ0wsZUFBZTtzQkFBeEIsTUFBTTtnQkFDbUIsYUFBYTtzQkFBdEMsTUFBTTt1QkFBQyxnQkFBZ0I7Z0JBQ0QsVUFBVTtzQkFBaEMsTUFBTTt1QkFBQyxhQUFhO2dCQUVNLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFDRyxZQUFZO3NCQUF2QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ1MsbUJBQW1CO3NCQUFyRCxTQUFTO3VCQUFDLHNCQUFzQjtnQkFlcEIsTUFBTTtzQkFBbEIsS0FBSztnQkFZTyxRQUFRO3NCQUFwQixLQUFLO2dCQVNPLEtBQUs7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5HX1ZBTFVFX0FDQ0VTU09SLCBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGlzT2JzZXJ2YWJsZSwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBtZXJnZU1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGZvY3VzSW5wdXQsIElucHV0RWxlbWVudCwgc2VsZWN0SW5wdXRDb250ZW50RnJvbUV2ZW50LCBzZWxlY3RJbnB1dFJhbmdlIH0gZnJvbSAnLi4vLi4vaW5wdXRzJztcbmltcG9ydCB7IEZldGNoTW9yZUZuLCBMb2FkUmVzdWx0LCBTdWdnZXN0Rm4gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBBcHBGbG9hdExhYmVsVHlwZSwgRGlzcGxheUZuLCBFcXVhbHNGbiB9IGZyb20gJy4uLy4uL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHtcbiAgY2hhbmdlQ2FzZVRvVW5kZXJzY29yZSxcbiAgaXNFbXB0eUFycmF5LFxuICBpc05pbCxcbiAgaXNOaWxPckJsYW5rLFxuICBpc05vdE5pbCxcbiAgaXNOb3ROaWxPckJsYW5rLFxuICBpc05vdE5pbFN0cmluZyxcbiAgdG9Cb29sZWFuLFxuICB0b051bWJlcixcbn0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IGZpcnN0Tm90TmlsUHJvbWlzZSB9IGZyb20gJy4uLy4uL29ic2VydmFibGVzJztcbmltcG9ydCB7IGZyb21TY3JvbGxFbmRFdmVudCB9IGZyb20gJy4uLy4uL2V2ZW50cyc7XG5pbXBvcnQgeyBUaGVtZVBhbGV0dGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IHN1Z2dlc3RGcm9tQXJyYXkgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZyB9IGZyb20gJy4uL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUuY29uZmlnJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZUZpZWxkVXRpbHMgfSBmcm9tICcuLi9hdXRvY29tcGxldGUvbWF0ZXJpYWwuYXV0b2NvbXBsZXRlLnV0aWxzJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UsIFN1YnNjcmlwdFNpemluZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlLCBNYXRBdXRvY29tcGxldGVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAnLi4vLi4vcGxhdGZvcm1zJztcbmltcG9ydCB7IERFRkFVTFRfSk9JTl9QUk9QRVJUSUVTX1NFUEFSQVRPUiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbWF0LWNoaXBzLWZpZWxkJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwuY2hpcHMuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwuY2hpcHMuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNYXRDaGlwc0ZpZWxkKSxcbiAgICB9LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTWF0Q2hpcHNGaWVsZCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBJbnB1dEVsZW1lbnQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX29uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcblxuICBwcml2YXRlIF9vbkZldGNoTW9yZUNhbGxiYWNrOiBGZXRjaE1vcmVGbjxMb2FkUmVzdWx0PGFueT4+O1xuICBwcml2YXRlIF9pbXBsaWNpdFZhbHVlOiBhbnk7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfaXRlbXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfb3BlbmVkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgXyRmaWx0ZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBfaXRlbUNvdW50OiBudW1iZXI7XG4gIHByaXZhdGUgX3JlbG9hZCQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgcHJvdGVjdGVkIF90YWJpbmRleDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgXyRpbnB1dEl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIF8kZmlsdGVyZWRJdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBfaW5wdXRDb250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuICBwcm90ZWN0ZWQgX21vcmVJdGVtc0NvdW50OiBudW1iZXI7XG4gIHByb3RlY3RlZCBfZmV0Y2hNb3JlJCA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG5cbiAgQElucHV0KCkgZXF1YWxzOiBFcXVhbHNGbjtcbiAgQElucHV0KCkgbG9nUHJlZml4ID0gJ1ttYXQtY2hpcHNdICc7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTogc3RyaW5nID0gbnVsbDtcbiAgQElucHV0KCkgZmxvYXRMYWJlbDogQXBwRmxvYXRMYWJlbFR5cGUgPSAnYXV0byc7XG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XG4gIEBJbnB1dCgpIHN1YnNjcmlwdFNpemluZzogU3Vic2NyaXB0U2l6aW5nO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBzdWdnZXN0Rm46IFN1Z2dlc3RGbjxhbnksIGFueT47XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByZXF1aXJlZCA9IGZhbHNlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgbW9iaWxlOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNsZWFyYWJsZSA9IGZhbHNlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBkZWJvdW5jZVRpbWU6IG51bWJlciA9IG51bGw7XG5cbiAgQElucHV0KCkgZGlzcGxheVNlcGFyYXRvcjogc3RyaW5nIHwgbnVsbDtcbiAgQElucHV0KCkgZGlzcGxheVdpdGg6IERpc3BsYXlGbiB8IG51bGw7XG4gIEBJbnB1dCgpIGRpc3BsYXlBdHRyaWJ1dGVzOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgZGlzcGxheUNvbHVtblNpemVzOiAobnVtYmVyIHwgJ2F1dG8nIHwgdW5kZWZpbmVkKVtdO1xuICBASW5wdXQoKSBkaXNwbGF5Q29sdW1uTmFtZXM6IHN0cmluZ1tdO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaGlnaGxpZ2h0QWNjZW50OiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0FsbE9uRm9jdXM6IGJvb2xlYW47XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93UGFuZWxPbkZvY3VzOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYXV0b2ZvY3VzID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbmZpZzogTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWc7XG4gIEBJbnB1dCgpIGkxOG5QcmVmaXggPSAnUkVGRVJFTlRJQUwuJztcbiAgQElucHV0KCkgbm9SZXN1bHRNZXNzYWdlID0gJ0NPTU1PTi5OT19SRVNVTFQnO1xuICBASW5wdXQoKSBwYW5lbENsYXNzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBhbmVsV2lkdGg6IHN0cmluZztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGRpc2FibGVSaXBwbGUgPSBmYWxzZTtcbiAgQElucHV0KCkgbWF0QXV0b2NvbXBsZXRlUG9zaXRpb246ICdhdXRvJyB8ICdhYm92ZScgfCAnYmVsb3cnO1xuICBASW5wdXQoKSBpdGVtU2l6ZSA9ICc0OHB4JztcbiAgQElucHV0KCkgZmV0Y2hNb3JlVGhyZXNob2xkID0gJzE1JSc7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIHN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQ6IG51bWJlciA9IG51bGw7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93TG9hZGluZ1NwaW5uZXIgPSB0cnVlO1xuICBASW5wdXQoKSBjaGlwQ29sb3I6IFRoZW1lUGFsZXR0ZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGRlYnVnID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFwcGx5SW1wbGljaXRWYWx1ZTogYm9vbGVhbiB8ICgodmFsdWU6IGFueSkgPT4gYm9vbGVhbikgPSBmYWxzZTsgLy8gLyFcXCBmYWxzZSBieSBkZWZhdWx0IChub3QgbGlrZSBhdXRvY29tcGxldGUpXG4gIEBJbnB1dCgpIGRyb3BCdXR0b25UaXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBjbGVhckJ1dHRvblRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSB0cmltU2VhcmNoVGV4dDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHBhbmVsQ2xhc3MgaW5zdGVhZFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdjbGFzcycgfSkgc2V0IGNsYXNzTGlzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5wYW5lbENsYXNzID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGNsYXNzTGlzdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBhbmVsQ2xhc3M7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgnY2xpY2snKSBjbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgnYmx1cicpIGJsdXJyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCdmb2N1cycpIGZvY3VzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBkcm9wQnV0dG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50Pih0cnVlKTtcbiAgQE91dHB1dCgna2V5ZG93bi5lc2NhcGUnKSBrZXlkb3duRXNjYXBlID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgna2V5dXAuZW50ZXInKSBrZXl1cEVudGVyID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcblxuICBAVmlld0NoaWxkKCdtYXRJbnB1dFRleHQnKSBtYXRJbnB1dFRleHQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoTWF0QXV0b2NvbXBsZXRlKSBhdXRvY29tcGxldGU6IE1hdEF1dG9jb21wbGV0ZTtcbiAgQFZpZXdDaGlsZChNYXRBdXRvY29tcGxldGVUcmlnZ2VyKSBhdXRvY29tcGxldGVUcmlnZ2VyOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb3JtR3JvdXBEaXI6IEZvcm1Hcm91cERpcmVjdGl2ZVxuICApIHt9XG5cbiAgZ2V0IGl0ZW1Db3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9pdGVtQ291bnQ7XG4gIH1cblxuICBnZXQgY2FuRmV0Y2hNb3JlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrICYmIHRoaXMuX21vcmVJdGVtc0NvdW50ID4gMDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBmaWx0ZXIodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fJGZpbHRlci52YWx1ZSkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArIFwiIFNldHRpbmcgZmlsdGVyOlwiLCB2YWx1ZSk7XG4gICAgICB0aGlzLl8kZmlsdGVyLm5leHQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmaWx0ZXIoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fJGZpbHRlci52YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCB0YWJpbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fdGFiaW5kZXggPSB2YWx1ZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IHRhYmluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmluZGV4O1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGl0ZW1zKHZhbHVlOiBPYnNlcnZhYmxlPGFueVtdPiB8IGFueVtdKSB7XG4gICAgLy8gUmVtb3ZlIHByZXZpb3VzIHN1YnNjcmlwdGlvbiBvbiBpdGVtcywgKGlmIGV4aXRzKVxuICAgIGlmICh0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbikge1xuICAgICAgY29uc29sZS53YXJuKHRoaXMubG9nUHJlZml4ICsgJyBJdGVtcyByZWNlaXZlZCB0d2ljZSAhJyk7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24ucmVtb3ZlKHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uKTtcbiAgICAgIHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzT2JzZXJ2YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uID0gdmFsdWUuc3Vic2NyaWJlKCh2KSA9PiB0aGlzLl8kaW5wdXRJdGVtcy5uZXh0KHYpKTtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5faXRlbXNTdWJzY3JpcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMuXyRpbnB1dEl0ZW1zLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuXyRpbnB1dEl0ZW1zLm5leHQodmFsdWUgYXMgYW55W10pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBpdGVtcygpOiBPYnNlcnZhYmxlPGFueVtdPiB8IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fJGlucHV0SXRlbXM7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmZvcm1Db250cm9sLnZhbHVlIHx8IFtdO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZm9ybUNvbnRyb2w/LmRpc2FibGVkIHx8IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICghdGhpcy5yZWFkb25seSAmJiB0aGlzLmZvcm1Db250cm9sPy5lbmFibGVkKSB8fCBmYWxzZTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05pbCh0aGlzLl8kZmlsdGVyZWRJdGVtcy52YWx1ZSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZvcm1Db250cm9sID1cbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wgfHwgKHRoaXMuZm9ybUNvbnRyb2xOYW1lICYmIHRoaXMuZm9ybUdyb3VwRGlyICYmICh0aGlzLmZvcm1Hcm91cERpci5mb3JtLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSkgYXMgVW50eXBlZEZvcm1Db250cm9sKSk7XG4gICAgaWYgKCF0aGlzLmZvcm1Db250cm9sKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIG1hbmRhdG9yeSBhdHRyaWJ1dGUgJ2Zvcm1Db250cm9sJyBvciAnZm9ybUNvbnRyb2xOYW1lJyBpbiA8bWF0LWNoaXBzLWZpZWxkPi5cIik7XG5cbiAgICAvLyBDb25maWd1cmF0aW9uIGZyb20gY29uZmlnIG9iamVjdFxuICAgIGlmICh0aGlzLmNvbmZpZykge1xuICAgICAgdGhpcy5zdWdnZXN0Rm4gPSB0aGlzLnN1Z2dlc3RGbiB8fCB0aGlzLmNvbmZpZy5zdWdnZXN0Rm47XG4gICAgICBpZiAoIXRoaXMuc3VnZ2VzdEZuICYmIHRoaXMuY29uZmlnLml0ZW1zKSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLmNvbmZpZy5pdGVtcztcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsdGVyID0gdGhpcy5maWx0ZXIgfHwgdGhpcy5jb25maWcuZmlsdGVyO1xuICAgICAgdGhpcy5kaXNwbGF5QXR0cmlidXRlcyA9IHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMgPz8gdGhpcy5jb25maWcuYXR0cmlidXRlcztcbiAgICAgIHRoaXMuZGlzcGxheUNvbHVtblNpemVzID0gdGhpcy5kaXNwbGF5Q29sdW1uU2l6ZXMgPz8gdGhpcy5jb25maWcuY29sdW1uU2l6ZXM7XG4gICAgICB0aGlzLmRpc3BsYXlDb2x1bW5OYW1lcyA9IHRoaXMuZGlzcGxheUNvbHVtbk5hbWVzID8/IHRoaXMuY29uZmlnLmNvbHVtbk5hbWVzO1xuICAgICAgdGhpcy5kaXNwbGF5U2VwYXJhdG9yID0gdGhpcy5kaXNwbGF5U2VwYXJhdG9yID8/IHRoaXMuY29uZmlnLmRpc3BsYXlXaXRoU2VwYXJhdG9yO1xuICAgICAgdGhpcy5kaXNwbGF5V2l0aCA9IHRoaXMuZGlzcGxheVdpdGggPz8gdGhpcy5jb25maWcuZGlzcGxheVdpdGg7XG4gICAgICB0aGlzLnRyaW1TZWFyY2hUZXh0ID0gdGhpcy50cmltU2VhcmNoVGV4dCA/PyB0aGlzLmNvbmZpZy50cmltU2VhcmNoVGV4dDtcbiAgICAgIHRoaXMuZXF1YWxzID0gdGhpcy5lcXVhbHMgPz8gdGhpcy5jb25maWcuZXF1YWxzO1xuICAgICAgdGhpcy5tb2JpbGUgPSB0aGlzLm1vYmlsZSA/PyB0aGlzLmNvbmZpZy5tb2JpbGU7XG4gICAgICB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgPSB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgPz8gdGhpcy5jb25maWcuc3VnZ2VzdExlbmd0aFRocmVzaG9sZDtcbiAgICAgIHRoaXMuc2hvd0FsbE9uRm9jdXMgPSB0aGlzLnNob3dBbGxPbkZvY3VzID8/IHRoaXMuY29uZmlnLnNob3dBbGxPbkZvY3VzO1xuICAgICAgdGhpcy5zaG93UGFuZWxPbkZvY3VzID0gdGhpcy5zaG93UGFuZWxPbkZvY3VzID8/IHRoaXMuY29uZmlnLnNob3dQYW5lbE9uRm9jdXM7XG4gICAgICB0aGlzLnBhbmVsQ2xhc3MgPSB0aGlzLnBhbmVsQ2xhc3MgPz8gdGhpcy5jb25maWcucGFuZWxDbGFzcyA/PyB0aGlzLmNvbmZpZy5jbGFzcztcbiAgICAgIHRoaXMucGFuZWxXaWR0aCA9IHRoaXMucGFuZWxXaWR0aCA/PyB0aGlzLmNvbmZpZy5wYW5lbFdpZHRoO1xuICAgICAgdGhpcy5kZWJvdW5jZVRpbWUgPSB0b051bWJlcih0aGlzLmRlYm91bmNlVGltZSwgdGhpcy5jb25maWcuZGVib3VuY2VUaW1lKTtcbiAgICAgIHRoaXMuaGlnaGxpZ2h0QWNjZW50ID0gdG9Cb29sZWFuKHRoaXMuaGlnaGxpZ2h0QWNjZW50LCB0b0Jvb2xlYW4odGhpcy5jb25maWcuaGlnaGxpZ2h0QWNjZW50KSk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCB2YWx1ZXNcbiAgICB0aGlzLm1vYmlsZSA9IHRoaXMubW9iaWxlID8/IGlzTW9iaWxlKHdpbmRvdyk7XG4gICAgdGhpcy5kaXNwbGF5QXR0cmlidXRlcyA9IHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMgPz8gdGhpcy5maWx0ZXI/LmF0dHJpYnV0ZXMgPz8gWydsYWJlbCcsICduYW1lJ107XG4gICAgdGhpcy5kaXNwbGF5U2VwYXJhdG9yID0gdGhpcy5kaXNwbGF5U2VwYXJhdG9yID8/IERFRkFVTFRfSk9JTl9QUk9QRVJUSUVTX1NFUEFSQVRPUjtcbiAgICB0aGlzLmRpc3BsYXlXaXRoID0gdGhpcy5kaXNwbGF5V2l0aCA/PyBNYXRBdXRvY29tcGxldGVGaWVsZFV0aWxzLmNyZWF0ZURpc3BsYXlGbih0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzLCBmYWxzZSwgdGhpcy5kaXNwbGF5U2VwYXJhdG9yKTtcbiAgICB0aGlzLnRyaW1TZWFyY2hUZXh0ID0gdGhpcy50cmltU2VhcmNoVGV4dCA/PyB0cnVlO1xuICAgIHRoaXMuZXF1YWxzID0gdGhpcy5lcXVhbHMgPz8gTWF0QXV0b2NvbXBsZXRlRmllbGRVdGlscy5kZWZhdWx0RXF1YWxzO1xuXG4gICAgdGhpcy5kaXNwbGF5Q29sdW1uU2l6ZXMgPVxuICAgICAgdGhpcy5kaXNwbGF5Q29sdW1uU2l6ZXMgPz9cbiAgICAgIC8vIGlmIG9ubHkgY29sdW1uOiBhdXRvIHNpemVcbiAgICAgICgodGhpcy5kaXNwbGF5QXR0cmlidXRlcy5sZW5ndGggPT09IDEgJiYgW3VuZGVmaW5lZF0pIHx8XG4gICAgICAgIC8vIENvbXB1dGVkIGNvbHVtbiBzaXplOlxuICAgICAgICAvLyAtIGlmIGxhYmVsIHRoZW4gY29sIHNpemUgPSAyXG4gICAgICAgIC8vIC0gaWYgcmFua09yZGVyIHRoZW4gY29sIHNpemUgPSAxXG4gICAgICAgIC8vIC0gZXNlID0+IGF1dG8gc2l6ZVxuICAgICAgICB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzLm1hcCgoYXR0cikgPT4gYXR0ciAmJiAoYXR0ci5lbmRzV2l0aCgnbGFiZWwnKSA/IDMgOiBhdHRyLmVuZHNXaXRoKCdyYW5rT3JkZXInKSA/IDIgOiB1bmRlZmluZWQpKSk7XG4gICAgdGhpcy5kaXNwbGF5Q29sdW1uTmFtZXMgPSB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzLm1hcChcbiAgICAgIChhdHRyLCBpbmRleCkgPT4gKHRoaXMuZGlzcGxheUNvbHVtbk5hbWVzICYmIHRoaXMuZGlzcGxheUNvbHVtbk5hbWVzW2luZGV4XSkgfHwgdGhpcy5pMThuUHJlZml4ICsgY2hhbmdlQ2FzZVRvVW5kZXJzY29yZShhdHRyKS50b1VwcGVyQ2FzZSgpXG4gICAgKTtcbiAgICBjb25zdCBwYW5lbENsYXNzZXMgPSB0aGlzLnBhbmVsQ2xhc3M/LnNwbGl0KC9cXHMvKTtcbiAgICB0aGlzLnBhbmVsV2lkdGggPVxuICAgICAgdGhpcy5wYW5lbFdpZHRoID8/XG4gICAgICAocGFuZWxDbGFzc2VzICYmXG4gICAgICAgICgocGFuZWxDbGFzc2VzLmluY2x1ZGVzKCdtaW4td2lkdGgtbWVkaXVtJykgJiYgJzMwMHB4JykgfHxcbiAgICAgICAgICAocGFuZWxDbGFzc2VzLmluY2x1ZGVzKCdtaW4td2lkdGgtbGFyZ2UnKSAmJiAnNDAwcHgnKSB8fFxuICAgICAgICAgIChwYW5lbENsYXNzZXMuaW5jbHVkZXMoJ21pbi13aWR0aC14bGFyZ2UnKSAmJiAnNDUwcHgnKSB8fFxuICAgICAgICAgIChwYW5lbENsYXNzZXMuaW5jbHVkZXMoJ21pbi13aWR0aC04MHZ3JykgJiYgJzgwdncnKSB8fFxuICAgICAgICAgICgocGFuZWxDbGFzc2VzLmluY2x1ZGVzKCdmdWxsLXdpZHRoJykgfHwgcGFuZWxDbGFzc2VzLmluY2x1ZGVzKCdmdWxsLXNpemUnKSkgJiYgJzEwMHZ3JykpKTtcbiAgICB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgPSB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgPz8gMDtcbiAgICB0aGlzLnNob3dBbGxPbkZvY3VzID0gdGhpcy5zaG93QWxsT25Gb2N1cyA/PyB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgPD0gMDtcbiAgICB0aGlzLnNob3dQYW5lbE9uRm9jdXMgPSB0aGlzLnNob3dQYW5lbE9uRm9jdXMgPz8gdHJ1ZTtcbiAgICB0aGlzLmRlYm91bmNlVGltZSA9IHRoaXMuZGVib3VuY2VUaW1lID8/ICh0aGlzLm1vYmlsZSA/IDY1MCA6IDI1MCk7XG4gICAgdGhpcy5oaWdobGlnaHRBY2NlbnQgPSB0aGlzLmhpZ2hsaWdodEFjY2VudCA/PyBmYWxzZTtcbiAgICB0aGlzLm1hdEF1dG9jb21wbGV0ZVBvc2l0aW9uID0gdGhpcy5tYXRBdXRvY29tcGxldGVQb3NpdGlvbiA/PyAodGhpcy5tb2JpbGUgPyAnYWJvdmUnIDogJ2F1dG8nKTsgLy8gT24gbW9iaWxlLCBzZXQgcG9zaXRpb24gdG8gYWJvdmUgKGJlY2F1c2Ugb2YgYm90dG9tIGtleWJvYXJkKVxuXG4gICAgLy8gTm8gc3VnZ2VzdEZuOiBmaWx0ZXIgb24gdGhlIGdpdmVuIGl0ZW1zXG4gICAgaWYgKCF0aGlzLnN1Z2dlc3RGbikge1xuICAgICAgY29uc3Qgc3VnZ2VzdEZyb21BcnJheUZuOiBTdWdnZXN0Rm48YW55LCBhbnk+ID0gYXN5bmMgKHZhbHVlLCBmaWx0ZXIpID0+XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIENhbGxpbmcgc3VnZ2VzdEZyb21BcnJheSB3aXRoIHZhbHVlPScsIHZhbHVlKTtcblxuICAgICAgICBzdWdnZXN0RnJvbUFycmF5KHRoaXMuXyRpbnB1dEl0ZW1zLnZhbHVlLCB2YWx1ZSwge1xuICAgICAgICAgIHNlYXJjaEF0dHJpYnV0ZXM6IHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMsXG4gICAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFdhaXQgKG9uY2UpIHRoYXQgaXRlbXMgYXJlIGxvYWRlZCwgdGhlbiBjYWxsIHN1Z2dlc3QgZnJvbSBhcnJheSBmblxuICAgICAgdGhpcy5zdWdnZXN0Rm4gPSBhc3luYyAodmFsdWUsIGZpbHRlcikgPT4ge1xuICAgICAgICBpZiAoaXNOaWwodGhpcy5fJGlucHV0SXRlbXMudmFsdWUpKSB7XG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbbWF0LWNoaXBzXSBXYWl0aW5nIGl0ZW1zIHRvIGJlIHNldC4uLicpO1xuXG4gICAgICAgICAgYXdhaXQgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMuXyRpbnB1dEl0ZW1zKTtcblxuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW21hdC1jaGlwc10gUmVjZWl2ZWQgaXRlbXM6JywgdGhpcy4kaW5wdXRJdGVtcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWdnZXN0Rm4gPSBzdWdnZXN0RnJvbUFycmF5Rm47XG4gICAgICAgIHJldHVybiB0aGlzLnN1Z2dlc3RGbih2YWx1ZSwgZmlsdGVyKTsgLy8gTG9vcFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBTZW5kIHZhbHVlIHRvIHN1Z2dlc3Qgd2hlbiA6XG4gICAgLy8gLSBpcyBuaWwgYW5kICcqJywgYW5kIG5vIG1pbiBsZW5ndGggdGhyZXNob2xkXG4gICAgLy8gLSBpcyBub3QgbmlsIGFuZCBub3QgYSBzdHJpbmcgdHlwZSAoZS5nLiBvYmplY3QpXG4gICAgLy8gLSBpcyBub3QgbmlsIGFuZCBpcyBhIHN0cmluZywgYW5kIGhhcyBlbm91Z2ggY2hhcmFjdGVyXG4gICAgY29uc3QgdGhyZXNob2xkRmlsdGVyRm4gPSAodmFsdWUpID0+XG4gICAgICB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgPD0gMCB8fFxuICAgICAgKGlzTm90TmlsKHZhbHVlKSAmJiAoISh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB8fCAodmFsdWUgIT09ICcqJyAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID49IHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCkpKTtcblxuICAgIGNvbnN0IGZpbHRlcmVkSXRlbXNDaGFuZ2VzID0gbWVyZ2UoXG4gICAgICAvLyBSZWxvYWQgZXZlbnQgKG5vIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkgcGlwZSwgdG8gZm9yY2UgcmVsb2FkIGV2ZW4gaWYgc2FtZSB2YWx1ZSlcbiAgICAgIHRoaXMuX3JlbG9hZCQucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuZW5hYmxlZCksXG4gICAgICAgIGZpbHRlcih0aHJlc2hvbGRGaWx0ZXJGbiksXG4gICAgICAgIHRhcCgoXykgPT4gdGhpcy5zaG93TG9hZGluZ1NwaW5uZXIgJiYgdGhpcy5tYXJrQXNMb2FkaW5nKCkpXG4gICAgICApLFxuXG4gICAgICAvLyBTZWFyY2ggdGV4dCAobm8gZGlzdGluY3RVbnRpbENoYW5nZWQoKSBiZWNhdXNlIG9mIHRoZSBkZWJvdW5jZVRpbWUoKSBwaXBlKVxuICAgICAgdGhpcy5faW5wdXRDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICBmaWx0ZXIoKHZhbHVlKSA9PiB0aGlzLmVuYWJsZWQgJiYgaXNOb3ROaWxTdHJpbmcodmFsdWUpKSxcbiAgICAgICAgLy8gTWFyayBhcyBsb2FkaW5nICh0byBzaG93IGxvYWRpbmcgc3Bpbm5lcikgLSBhcyBzb29uIGFzIHBvc3NpYmxlLCBhbmQgYmVmb3JlIGRlYm91bmNlVGltZVxuICAgICAgICB0YXAoKF8pID0+IHRoaXMuc2hvd0xvYWRpbmdTcGlubmVyICYmIHRoaXMubWFya0FzTG9hZGluZygpKSxcbiAgICAgICAgLy8gRmlsdGVyIGlmIG5vdCBlbm91Z2ggY2hhcmFjdGVyXG4gICAgICAgIGZpbHRlcigodmFsdWUpID0+ICh2YWx1ZT8ubGVuZ3RoIHx8IDApID49IHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCksXG4gICAgICAgIC8vIFdhaXQgYSBkZWJvdW5jZSB0aW1lXG4gICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZSlcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy8sdGFwKCh2YWx1ZSkgPT4gdGhpcy5kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBTZWFyY2ggdGV4dCBjaGFuZ2VzOicsIHZhbHVlKSlcbiAgICAgICksXG5cbiAgICAgIC8vIE1lcmdlIHNvbWUgb2JzZXJ2YWJsZXMsIHdpdGggYSBjb21tb24gZGlzdGluY3RVbnRpbENoYW5nZWQoKSBwaXBlXG4gICAgICBtZXJnZShcbiAgICAgICAgLy8gT24gZHJvcGRvd24gYnV0dG9uIGNsaWNrIChubyBkZWJvdW5jZVRpbWUpXG4gICAgICAgIHRoaXMuZHJvcEJ1dHRvbkNsaWNrLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKChldmVudCkgPT4gIWV2ZW50IHx8ICFldmVudC5kZWZhdWx0UHJldmVudGVkKVxuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgLy8sdGFwKHZhbHVlID0+IHRoaXMuZGVidWcgJiYgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgYW4gY29udHJvbCBvYmplY3QgdmFsdWU6ICcsIHZhbHVlKSlcbiAgICAgICAgKSxcbiAgICAgICAgLy8gRm9jdXMgb3IgY2xpY2sgPT4gTG9hZCBhbGwgKG5vIGRlYm91bmNlVGltZSlcbiAgICAgICAgbWVyZ2UodGhpcy5mb2N1c2VkLCB0aGlzLmNsaWNrZWQpLFxuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvLy5waXBlKHRhcCgoXykgPT4gdGhpcy5kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCBmb2N1c2VkIG9yIGNsaWNrZWQgZXZlbnQnKSkpLFxuICAgICAgICAvLyBJbnB1dCBpdGVtcyBvciBmaWx0ZXIgY2hhbmdlc1xuICAgICAgICBtZXJnZSh0aGlzLl8kaW5wdXRJdGVtcywgdGhpcy5fJGZpbHRlcikucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKF8pID0+ICF0aGlzLmxvYWRpbmcpXG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvLyx0YXAoKF8pID0+IHRoaXMuZGVidWcgJiYgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgJGlucHV0SXRlbXMgb3IgZmlsdGVyIGV2ZW50JykpXG4gICAgICAgIClcbiAgICAgICkucGlwZShcbiAgICAgICAgZmlsdGVyKChfKSA9PiB0aGlzLmVuYWJsZWQpLFxuICAgICAgICBtYXAoKF8pID0+ICh0aGlzLnNob3dBbGxPbkZvY3VzICYmIGlzTmlsT3JCbGFuayh0aGlzLl9pbnB1dENvbnRyb2wudmFsdWUpID8gJyonIDogdGhpcy5faW5wdXRDb250cm9sLnZhbHVlKSksXG4gICAgICAgIC8vIERpc3Rpbmd1aXNoIGNoYW5nZXNcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHYxLCB2MikgPT5cbiAgICAgICAgICAvLyBJZiBsb2FkaW5nIChub3QgbG9hZGVkIHlldCksIHNpbXVsYXRlIHRoYXQgdmFsdWUgY2hhbmdlZCB0byBmb3JjZSBsb2FkXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID8gZmFsc2UgOiB2MSA9PT0gdjIgfHwgdGhpcy5lcXVhbHModjEsIHYyKVxuICAgICAgICApLFxuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIGNoYXJhY3RlcnNcbiAgICAgICAgZmlsdGVyKHRocmVzaG9sZEZpbHRlckZuKVxuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvLyx0YXAoKHZhbHVlKSA9PiB0aGlzLmRlYnVnICYmIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFJlY2VpdmVkIHVwZGF0ZSBldmVudDogJywgdmFsdWUpKVxuICAgICAgKVxuICAgICkucGlwZShcbiAgICAgIC8vIFN1Z2dlc3QgdmFsdWVzXG4gICAgICBtZXJnZU1hcCgodmFsdWUpID0+IHRoaXMuc3VnZ2VzdCh2YWx1ZSwgdGhpcy5maWx0ZXIpKSxcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL3RhcChpdGVtcyA9PiB0aGlzLmRlYnVnICYmIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFJlY2VpdmVkIGZyb20gc3VnZ2VzdDogJywgaXRlbXMpKSxcblxuICAgICAgLy8gU3RvcmUgaW1wbGljaXQgdmFsdWUgKHdpbGwgdXNlIGl0IG9uQmx1ciBpZiBub3Qgb3RoZXIgdmFsdWUgc2VsZWN0ZWQpXG4gICAgICB0YXAoKGl0ZW1zKSA9PiB0aGlzLnVwZGF0ZUltcGxpY2l0VmFsdWUoaXRlbXMpKVxuICAgICk7XG5cbiAgICAvLyBGZXRjaCBtb3JlIGV2ZW50c1xuICAgIGNvbnN0IGZldGNoTW9yZUl0ZW1zQ2hhbmdlcyA9IHRoaXMuX2ZldGNoTW9yZSQucGlwZShcbiAgICAgIHRhcCgoZXZlbnQpID0+IGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpKSwgLy8gQXZvaWQgdG8gY2xvc2UgdGhlIG1hdC1zZWxlY3RcbiAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmNhbkZldGNoTW9yZSksXG4gICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmZldGNoTW9yZSgpKSxcblxuICAgICAgLy8gREVCVUdcbiAgICAgIC8vdGFwKG1vcmVJdGVtcyA9PiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCBmcm9tIGZldGNoIE1vcmU6ICcsIG1vcmVJdGVtcykpLFxuXG4gICAgICAvLyBDb25jYXQgdG8gZXhpc3RpbmcgaXRlbXNcbiAgICAgIG1hcCgobW9yZUl0ZW1zKSA9PiAodGhpcy5fJGZpbHRlcmVkSXRlbXMudmFsdWUgfHwgW10pLmNvbmNhdChtb3JlSXRlbXMpKVxuICAgICk7XG5cbiAgICAvLyBVcGRhdGUgZmlsdGVyZWQgaXRlbXNcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgbWVyZ2UoXG4gICAgICAgIHRoaXMuXyRpbnB1dEl0ZW1zLFxuXG4gICAgICAgIC8vIFVwZGF0ZSBpdGVtcyBldmVudHNcbiAgICAgICAgZmlsdGVyZWRJdGVtc0NoYW5nZXMsXG5cbiAgICAgICAgLy8gRmV0Y2ggbW9yZSBldmVudHNcbiAgICAgICAgZmV0Y2hNb3JlSXRlbXNDaGFuZ2VzXG4gICAgICApXG4gICAgICAgIC8vIEVtaXQgaXRlbXNcbiAgICAgICAgLnN1YnNjcmliZSgoaXRlbXMpID0+IHRoaXMuXyRmaWx0ZXJlZEl0ZW1zLm5leHQoaXRlbXMpKVxuICAgICk7XG5cbiAgICAvLyBBcHBseWluZyBpbXBsaWNpdCB2YWx1ZSwgb24gYmx1clxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmJsdXJyZWRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDE1MCksXG4gICAgICAgICAgLy8gU2tpcCBpZiBtdWx0aXBsZSAobm8gaW1wbGljaXQgdmFsdWUpIG9yIGRpc2FibGVcbiAgICAgICAgICBmaWx0ZXIoKF8pID0+IHRoaXMuZW5hYmxlZCksXG5cbiAgICAgICAgICBtYXAoKF8pID0+IHRoaXMuX2lucHV0Q29udHJvbC52YWx1ZSlcbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC8vLHRhcCh2YWx1ZSA9PiB0aGlzLmRlYnVnICYmIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFJlY2VpdmVkIGJsdXJyZWQgZXZlbnQ6ICcsIHZhbHVlKSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAvLyBXaGVuIGxlYXZlIGNvbXBvbmVudCB3aXRob3V0IG9iamVjdCwgdXNlIGltcGxpY2l0IHZhbHVlIGlmIDpcbiAgICAgICAgICAvLyAtIGFuIGV4cGxpY2l0IHZhbHVlXG4gICAgICAgICAgLy8gLSBmaWVsZCBpcyBub3QgZW1wdHkgKHVzZXIgZmlsbCBzb21ldGhpbmcpXG4gICAgICAgICAgLy8gLSBPUiBmaWVsZCBlbXB0eSBidXQgaXMgcmVxdWlyZWRcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9pbXBsaWNpdFZhbHVlICYmXG4gICAgICAgICAgICAoKHRoaXMucmVxdWlyZWQgJiYgaXNFbXB0eUFycmF5KHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpKSB8fCAoaXNOb3ROaWxPckJsYW5rKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuYWRkKHRoaXMuX2ltcGxpY2l0VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5jaGVja0lmVG91Y2hlZCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZXNldCBzZWFyY2ggdGV4dFxuICAgICAgICAgICAgdGhpcy5tYXRJbnB1dFRleHQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgdGhpcy5faW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZlRvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2ltcGxpY2l0VmFsdWUgPSBudWxsOyAvLyByZXNldCB0aGUgaW1wbGljaXQgdmFsdWVcbiAgICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTsgLy8gQ2xvbmUgcGFuZWxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIGZvcm0gY29udHJvbCBzdGF0dXMgY2hhbmdlXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICAvLyBVcGRhdGUgY29tcG9uZW50IHN0YXRlXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jaGVja0lmVG91Y2hlZCgpKVxuICAgICk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5rZXlkb3duRXNjYXBlLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgLy8gQXZvaWQgZm9ybSBvciBwYWdlIHRvIG1hbmFnZSBlc2NhcGUgZXZlbnRcbiAgICAgICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC8vY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArIFwiIENsb3NpbmcgdGhlIHBhbmVsIChrZXlkb3duLmVzY2FwZSlcIik7XG5cbiAgICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgaWYgKHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5fJGlucHV0SXRlbXMuY29tcGxldGUoKTtcbiAgICB0aGlzLl8kaW5wdXRJdGVtcy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuXyRmaWx0ZXJlZEl0ZW1zLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fJGZpbHRlcmVkSXRlbXMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9yZWxvYWQkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fJGZpbHRlci5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy5kcm9wQnV0dG9uQ2xpY2suY29tcGxldGUoKTtcbiAgICB0aGlzLmNsaWNrZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLmJsdXJyZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLmZvY3VzZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLmtleWRvd25Fc2NhcGUuY29tcGxldGUoKTtcbiAgICB0aGlzLmtleXVwRW50ZXIuY29tcGxldGUoKTtcbiAgICB0aGlzLl9mZXRjaE1vcmUkLmNvbXBsZXRlKCk7XG5cbiAgICB0aGlzLl9pbXBsaWNpdFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wgPSBudWxsO1xuICAgIHRoaXMuZGlzcGxheVdpdGggPSBudWxsO1xuICAgIHRoaXMuZXF1YWxzID0gbnVsbDtcbiAgICB0aGlzLnN1Z2dlc3RGbiA9IG51bGw7XG4gICAgdGhpcy5fJGZpbHRlcmVkSXRlbXMgPSBudWxsO1xuICAgIHRoaXMuY29uZmlnID0gbnVsbDtcbiAgICB0aGlzLnBhbmVsQ2xhc3MgPSBudWxsO1xuXG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IG51bGw7XG4gICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBudWxsO1xuICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSBudWxsO1xuXG4gICAgLy8gRGVzdHJveSB0aGUgJ2F1dG9jb21wbGV0ZScgaW5zdGFuY2UsIHRvIGF2b2lkIG1lbW9yeSBsZWFrXG4gICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlKSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZS5uZ09uRGVzdHJveSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgaXRlbSB0byBjaGlwc1xuICAgKlxuICAgKiBAcGFyYW0gaXRlbVxuICAgKi9cbiAgYWRkKGl0ZW06IGFueSkge1xuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMubG9nUHJlZml4fXNlbGVjdGAsIGl0ZW0pO1xuICAgIHRoaXMud3JpdGVWYWx1ZShbLi4udGhpcy52YWx1ZSwgaXRlbV0pO1xuICAgIHRoaXMubWF0SW5wdXRUZXh0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB0aGlzLl9pbnB1dENvbnRyb2wuc2V0VmFsdWUoJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBpdGVtIGZyb20gY2hpcHNcbiAgICpcbiAgICogQHBhcmFtIGl0ZW1cbiAgICovXG4gIHJlbW92ZShpdGVtOiBhbnkpIHtcbiAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgY29uc3QgaW5kZXggPSB2YWx1ZSA/IHZhbHVlLmluZGV4T2YoaXRlbSkgOiAtMTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHZhbHVlLnNsaWNlKCk7XG4gICAgICBuZXdWYWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdGhpcy53cml0ZVZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB0byByZWxvYWQgY29udGVudC4gVXNlZnVsIHdoZW4gZmlsdGVyIGhhcyBiZWVuIGNoYW5nZWQgYnV0IG5vdCBkZXRlY3RlZFxuICAgKi9cbiAgcmVsb2FkSXRlbXModmFsdWU/OiBhbnkpIHtcbiAgICAvLyBERUJVR1xuICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBBc2tpbmcgdG8gcmVsb2FkSXRlbXMoKVwiKTtcbiAgICAvLyBGb3JjZSBhIHJlZnJlc2hcbiAgICB0aGlzLl9yZWxvYWQkLm5leHQodmFsdWUgfHwgKHRoaXMuc2hvd0FsbE9uRm9jdXMgJiYgdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkIDw9IDAgPyAnKicgOiB0aGlzLmZvcm1Db250cm9sLnZhbHVlKSk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnlbXSk6IHZvaWQge1xuICAgIC8vIERFQlVHXG4gICAgLy8gaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFdyaXRpbmcgdmFsdWU6ICcsIHZhbHVlKTtcblxuICAgIGlmICh2YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gW3ZhbHVlXTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmZvcm1Db250cm9sLnZhbHVlKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgV3JpdGluZyB2YWx1ZTogJywgdmFsdWUpO1xuXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGlzRGlzYWJsZWQgJiYgdGhpcy5hdXRvY29tcGxldGU/LmlzT3Blbikge1xuICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG4gICAgfVxuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICBmb2N1c0lucHV0KHRoaXMubWF0SW5wdXRUZXh0KTtcbiAgfVxuXG4gIGZpbHRlcklucHV0VGV4dEZvY3VzRXZlbnQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcblxuICAgIC8vIElnbm9yZSBldmVudCBmcm9tIG1hdC1vcHRpb25cbiAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGV2ZW50LnJlbGF0ZWRUYXJnZXQudGFnTmFtZSA9PT0gJ01BVC1PUFRJT04nKSB7XG4gICAgICAvLyBGSVhNRTogTmV2ZXIgaGFwcGVucyBhbnltb3JlIGJ1dCBubyBwcm9ibGVtIGJlY2F1c2UgYmx1ciBldmVudCBoYXMgYmVlbiBmaXhlZFxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcblxuICAgICAgLy8gREVCVUdcbiAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIENhbmNlbGxpbmcgZm9jdXMgZXZlbnQnKTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIERFQlVHXG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgU2VsZWN0IGlucHV0IGNvbnRlbnQnKTtcbiAgICBjb25zdCBoYXNDb250ZW50ID0gc2VsZWN0SW5wdXRDb250ZW50RnJvbUV2ZW50KGV2ZW50KTtcblxuICAgIGlmIChoYXNDb250ZW50KSB7XG4gICAgICAvLyBNb3ZlIGNhcmV0IHRvIHRoZSBiZWdpbm5pbmcgKGZpeCBpc3N1ZSBJTUFHSU5FLTQ2OSlcbiAgICAgIHNlbGVjdElucHV0UmFuZ2UoZXZlbnQudGFyZ2V0IGFzIGFueSwgMCwgMCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNob3dQYW5lbE9uRm9jdXMgJiYgdGhpcy5zaG93QWxsT25Gb2N1cykge1xuICAgICAgLy8gSWYgY29tYm8gaXMgZW1wdHksIG9yIGlmIGhhcyBjb250ZW50IGJ1dCBzaG91bGQgZm9yY2UgdG8gc2hvdyBwYW5lbCBvbiBmb2N1c1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIEVtaXQgZm9jdXMgZXZlbnQnKTtcblxuICAgICAgdGhpcy5mb2N1c2VkLmVtaXQoZXZlbnQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmaWx0ZXJJbnB1dFRleHRCbHVyRXZlbnQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcblxuICAgIC8vIEVtaXQgYmx1ciBldmVudFxuICAgIHRoaXMuYmx1cnJlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGZpbHRlckNoaXBzRm9jdXNFdmVudChldmVudDogRm9jdXNFdmVudCkge1xuICAgIC8vIERFQlVHXG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgRm9jdXMgaW4gY2hpcHMgbGlzdCcsIGV2ZW50KTtcblxuICAgIC8vIElnbm9yZSBldmVudCBpbiBidXR0b25cblxuICAgIHRoaXMubWF0SW5wdXRUZXh0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIGNsZWFyVmFsdWUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy53cml0ZVZhbHVlKG51bGwpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuICB9XG5cbiAgX2luaXRBdXRvY29tcGxldGVJbmZpbml0ZVNjcm9sbCh0aHJlc2hvbGQ/OiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuYXV0b2NvbXBsZXRlKSByZXR1cm47IC8vIFNraXBcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBJbml0IGF1dG9jb21wbGV0ZSBzY3JvbGwgbGlzdGVuZXInKTtcblxuICAgIGlmICh0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZSh0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG9wZW5lZCQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuYXV0b2NvbXBsZXRlLl9pc09wZW4gPyB0aW1lcigwKSA6IHRoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5waXBlKGRlYm91bmNlVGltZSgyMDApKTtcbiAgICBjb25zdCBzY3JvbGxFbmQkID0gb3BlbmVkJC5waXBlKFxuICAgICAgbWFwKChfKSA9PiB0aGlzLmdldEF1dG9jb21wbGV0ZVBhbmVsKCkpLFxuICAgICAgZmlsdGVyKGlzTm90TmlsKSxcbiAgICAgIHN3aXRjaE1hcCgocGFuZWwpID0+IGZyb21TY3JvbGxFbmRFdmVudChwYW5lbCwgdGhyZXNob2xkKSksXG4gICAgICB0YWtlVW50aWwodGhpcy5hdXRvY29tcGxldGUuY2xvc2VkKVxuICAgICk7XG5cbiAgICAvLyBUcmlnZ2VyIGZldGNoIG1vcmUsIGVuZCBlbmQgc2Nyb2xsIHJlYWNoZWRcbiAgICB0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24gPSBzY3JvbGxFbmQkLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9mZXRjaE1vcmUkLmVtaXQoKSk7XG5cbiAgICAvLyBSZWdpc3RlciBzdWJzY3JpcHRpb25cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbik7XG4gIH1cblxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmF1dG9jb21wbGV0ZT8uaXNPcGVuIHx8IGZhbHNlO1xuICB9XG5cbiAgY2xvc2VQYW5lbCgpIHtcbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGU/LmlzT3Blbikge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVUcmlnZ2VyPy5jbG9zZVBhbmVsKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVNob3dQYW5lbChldmVudDogRXZlbnQpIHtcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZHJvcEJ1dHRvbkNsaWNrLmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSBhc3luYyBzdWdnZXN0KHZhbHVlOiBhbnksIGZpbHRlcj86IGFueSk6IFByb21pc2U8YW55W10+IHtcbiAgICAvLyBUcmltIHN0cmluZyB2YWx1ZSBiZWZvcmUgc2VhcmNoaW5nXG4gICAgaWYgKHRoaXMudHJpbVNlYXJjaFRleHQgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gICAgfVxuXG4gICAgLy8gQ2FsbCBzdWdnZXN0aW9uIGZ1bmN0aW9uXG4gICAgbGV0IHJlcyA9IGF3YWl0IHRoaXMuc3VnZ2VzdEZuKHZhbHVlLCBmaWx0ZXIpO1xuXG4gICAgLy8gREVCVUdcbiAgICAvL2lmICh0aGlzLmRlYnVnKVxuICAgIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIEZpbHRlcmVkIGl0ZW1zIGJ5IHN1Z2dlc3RGbjonLCB2YWx1ZSwgcmVzKTtcblxuICAgIGlmICghcmVzKSB7XG4gICAgICB0aGlzLl9pdGVtQ291bnQgPSAwO1xuICAgICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX21vcmVJdGVtc0NvdW50ID0gMDtcbiAgICAgIHJlcyA9IFtdO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXMpKSB7XG4gICAgICByZXMgPSByZXMgYXMgYW55W107XG4gICAgICB0aGlzLl9pdGVtQ291bnQgPSByZXM/Lmxlbmd0aCB8fCAwO1xuICAgICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX21vcmVJdGVtc0NvdW50ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyBkYXRhLCB0b3RhbCwgZmV0Y2hNb3JlIH0gPSByZXMgYXMgTG9hZFJlc3VsdDxhbnk+O1xuICAgICAgdGhpcy5faXRlbUNvdW50ID0gdG9OdW1iZXIodG90YWwsIChkYXRhICYmIGRhdGEubGVuZ3RoKSB8fCAwKTtcbiAgICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSBmZXRjaE1vcmU7XG4gICAgICB0aGlzLl9tb3JlSXRlbXNDb3VudCA9IChmZXRjaE1vcmUgJiYgdGhpcy5faXRlbUNvdW50IC0gZGF0YS5sZW5ndGgpIHx8IDA7XG4gICAgICByZXMgPSBkYXRhO1xuICAgIH1cblxuICAgIC8vIEZpbHRlciBvdXQgZXhpc3RpbmcgaXRlbXNcbiAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSAocmVzIHx8IFtdKS5maWx0ZXIoKGl0ZW0xKSA9PiAhdGhpcy52YWx1ZT8uc29tZSgoaXRlbTIpID0+IHRoaXMuZXF1YWxzKGl0ZW0xLCBpdGVtMikpKTtcbiAgICBjb25zdCByZW1vdmVkSXRlbUNvdW50ID0gKHJlcz8ubGVuZ3RoIHx8IDApIC0gKGZpbHRlcmVkRGF0YT8ubGVuZ3RoIHx8IDApO1xuXG4gICAgLy8gRGVjcmVhc2UgdGhlIGl0ZW0gY291bnQsIHdpdGggZGVsdGFcbiAgICB0aGlzLl9pdGVtQ291bnQgLT0gcmVtb3ZlZEl0ZW1Db3VudDtcblxuICAgIC8vIERFQlVHXG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgRmlsdGVyZWQgaXRlbXMgYnkgc3VnZ2VzdEZuOicsIHZhbHVlLCBmaWx0ZXJlZERhdGEpO1xuXG4gICAgcmV0dXJuIGZpbHRlcmVkRGF0YSBhcyBhbnlbXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hNb3JlKCk6IFByb21pc2U8YW55W10+IHtcbiAgICBpZiAoIXRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2spIHJldHVybiBbXTtcblxuICAgIC8vIFNhdmUgdGhlbiByZW1vdmUgZmV0Y2ggZnVuY3Rpb24gKHRvIGF2b2lkIG11bHRpLWNhbGwpXG4gICAgY29uc3QgZmV0Y2hNb3JlRm4gPSB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrO1xuICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCB7IGRhdGEsIHRvdGFsLCBmZXRjaE1vcmUgfSA9IGF3YWl0IGZldGNoTW9yZUZuKCk7XG4gICAgdGhpcy5faXRlbUNvdW50ID0gKHRvdGFsIHx8IHRoaXMuX2l0ZW1Db3VudCkgLSAodGhpcy52YWx1ZT8ubGVuZ3RoIHx8IDApO1xuICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSBmZXRjaE1vcmU7XG4gICAgdGhpcy5fbW9yZUl0ZW1zQ291bnQgPSBNYXRoLm1heCgwLCB0aGlzLl9tb3JlSXRlbXNDb3VudCAtIGRhdGEubGVuZ3RoKTsgLy8gQm9ybmUgbWluID0gMFxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbXBsaWNpdFZhbHVlKGl0ZW1zOiBhbnlbXSkge1xuICAgIC8vIFN0b3JlIGltcGxpY2l0IHZhbHVlICh3aWxsIHVzZSBpdCBvbkJsdXIgaWYgbm90IG90aGVyIHZhbHVlIHNlbGVjdGVkKVxuICAgIGlmIChpdGVtcz8ubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBhcHBseUltcGxpY2l0VmFsdWUgPSB0eXBlb2YgdGhpcy5hcHBseUltcGxpY2l0VmFsdWUgPT09ICdmdW5jdGlvbicgPyB0aGlzLmFwcGx5SW1wbGljaXRWYWx1ZShpdGVtc1swXSkgOiB0aGlzLmFwcGx5SW1wbGljaXRWYWx1ZTtcbiAgICAgIHRoaXMuX2ltcGxpY2l0VmFsdWUgPSBhcHBseUltcGxpY2l0VmFsdWUgPyBpdGVtc1swXSA6IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faW1wbGljaXRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSWZUb3VjaGVkKCkge1xuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnRvdWNoZWQpIHtcbiAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXV0b2NvbXBsZXRlUGFuZWwoKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGVsZSA9IHRoaXMuYXV0b2NvbXBsZXRlPy5vcHRpb25zLmxhc3Q/Ll9nZXRIb3N0RWxlbWVudCgpLnBhcmVudEVsZW1lbnQ7XG4gICAgaWYgKCFlbGUpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICBjb25zb2xlLndhcm4odGhpcy5sb2dQcmVmaXggKyAnIFVuYWJsZSB0byBmaW5kIHRoZSBhdXRvY29tcGxldGUgZGl2Li4uJyk7XG4gICAgfVxuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwcml2YXRlIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrQXNMb2FkaW5nKCkge1xuICAgIGlmICh0aGlzLl8kZmlsdGVyZWRJdGVtcy52YWx1ZSkge1xuICAgICAgdGhpcy5fJGZpbHRlcmVkSXRlbXMubmV4dCh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5faXRlbUNvdW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5faW1wbGljaXRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9tb3JlSXRlbXNDb3VudCA9IDA7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxufVxuIiwiPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWwgfCBhc0Zsb2F0TGFiZWxUeXBlXCJcbiAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgIFtzdWJzY3JpcHRTaXppbmddPVwic3Vic2NyaXB0U2l6aW5nXCJcbiAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1jaGlwc1wiXG4gICAgICA+XG4gICAgICAgIDxkaXYgbWF0UHJlZml4PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRQcmVmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChmbG9hdExhYmVsICE9PSAnbmV2ZXInICYmICEhcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IHBsYWNlaG9sZGVyIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIH1cbiAgICAgICAgPG1hdC1jaGlwLWdyaWQgI2NoaXBMaXN0IChmb2N1cyk9XCJmaWx0ZXJDaGlwc0ZvY3VzRXZlbnQoJGV2ZW50KVwiIFtkaXNhYmxlZF09XCIhcmVhZG9ubHkgJiYgZGlzYWJsZWRcIj5cbiAgICAgICAgICBAZm9yIChpdGVtIG9mIHZhbHVlOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICA8bWF0LWNoaXAtcm93XG4gICAgICAgICAgICAgIGNsYXNzPVwiaW9uLW5vLW1hcmdpblwiXG4gICAgICAgICAgICAgIFtyZW1vdmFibGVdPVwiIWRpc2FibGVkXCJcbiAgICAgICAgICAgICAgKHJlbW92ZWQpPVwicmVtb3ZlKGl0ZW0pXCJcbiAgICAgICAgICAgICAgW2NvbG9yXT1cImNoaXBDb2xvclwiXG4gICAgICAgICAgICAgIFtoaWdobGlnaHRlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgaXRlbSB8IHRvU3RyaW5nOiBkaXNwbGF5V2l0aCB9fVxuICAgICAgICAgICAgICBAaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZT5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L21hdC1jaGlwLXJvdz5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICNtYXRJbnB1dFRleHRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVQb3NpdGlvbl09XCJtYXRBdXRvY29tcGxldGVQb3NpdGlvblwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiX2lucHV0Q29udHJvbFwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmxvYXRMYWJlbCA9PT0gJ25ldmVyJyAmJiBwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICBbYXBwQXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgICAgICAgICBbdGFiaW5kZXhdPVwiX3RhYmluZGV4XCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICBbaGlkZGVuXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tlZC5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgKGZvY3VzKT1cImZpbHRlcklucHV0VGV4dEZvY3VzRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoYmx1cik9XCJmaWx0ZXJJbnB1dFRleHRCbHVyRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lc2NhcGUpPVwia2V5ZG93bkVzY2FwZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImtleXVwRW50ZXIuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXl1cC5hcnJvd0Rvd24pPVwiIWF1dG9jb21wbGV0ZS5zaG93UGFuZWwgJiYgZHJvcEJ1dHRvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbbWF0Q2hpcElucHV0Rm9yXT1cImNoaXBMaXN0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L21hdC1jaGlwLWdyaWQ+XG5cbiAgICAgICAgPCEtLSBhdXRvY29tcGxldGUgLS0+XG4gICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgI2F1dG9jb21wbGV0ZT1cIm1hdEF1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgW2F1dG9BY3RpdmVGaXJzdE9wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICBbaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvcl09XCJ0cnVlXCJcbiAgICAgICAgICBbZGlzcGxheVdpdGhdPVwiZGlzcGxheVdpdGhcIlxuICAgICAgICAgIFtjbGFzc109XCJwYW5lbENsYXNzXCJcbiAgICAgICAgICBbcGFuZWxXaWR0aF09XCJwYW5lbFdpZHRoXCJcbiAgICAgICAgICBbZGlzYWJsZVJpcHBsZV09XCJkaXNhYmxlUmlwcGxlXCJcbiAgICAgICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiYWRkKCRldmVudC5vcHRpb24udmFsdWUpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gSGVhZGVycyAtLT5cbiAgICAgICAgICA8aW9uLXJvdyBjbGFzcz1cIm1hdC1hdXRvY29tcGxldGUtaGVhZGVyIGNvbHVtbiBpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgQGZvciAoYXR0ciBvZiBkaXNwbGF5QXR0cmlidXRlczsgdHJhY2sgYXR0cjsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgPGlvbi1jb2wgW3NpemVdPVwiZGlzcGxheUNvbHVtblNpemVzW2ldXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBbaW5uZXJIVE1MXT1cImRpc3BsYXlDb2x1bW5OYW1lc1tpXSB8IHRyYW5zbGF0ZVwiPjwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9pb24tcm93PlxuXG4gICAgICAgICAgQGlmIChfJGZpbHRlcmVkSXRlbXMgfCBwdXNoOiAndXNlckJsb2NraW5nJzsgYXMgaXRlbXMpIHtcbiAgICAgICAgICAgIDwhLS0gTm8gaXRlbSBvcHRpb24gLS0+XG4gICAgICAgICAgICBAaWYgKGl0ZW1zIHwgaXNFbXB0eUFycmF5KSB7XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiaW9uLXBhZGRpbmcgdGV4dC1pdGFsaWNcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGk+e3sgbm9SZXN1bHRNZXNzYWdlIHwgdHJhbnNsYXRlIH19PC9pPlxuICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwhLS0gT3B0aW9ucyAtLT5cbiAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbVwiIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICA8aW9uLXJvdyBbY2xhc3NMaXN0XT1cIml0ZW0uY2xhc3NMaXN0IHx8ICcnXCI+XG4gICAgICAgICAgICAgICAgICBAZm9yIChwYXRoIG9mIGRpc3BsYXlBdHRyaWJ1dGVzOyB0cmFjayBwYXRoOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8aW9uLWNvbCBbc2l6ZV09XCJkaXNwbGF5Q29sdW1uU2l6ZXNbaV1cIiBbdGl0bGVdPVwidGV4dC5pbm5lclRleHRcIiBjbGFzcz1cImlvbi1hbGlnbi1zZWxmLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICN0ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcm9wZXJ0eUdldDogcGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBoaWdobGlnaHQ6IHsgc2VhcmNoOiBtYXRJbnB1dFRleHQudmFsdWUsIHdpdGhBY2NlbnQ6IGhpZ2hsaWdodEFjY2VudCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwhLS0gTW9yZSBpdGVtIC0tPlxuICAgICAgICAgICAgQGlmIChfbW9yZUl0ZW1zQ291bnQpIHtcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKG5nSW5pdCk9XCJfaW5pdEF1dG9jb21wbGV0ZUluZmluaXRlU2Nyb2xsKClcIiBjbGFzcz1cImlvbi1wYWRkaW5nXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgPGlvbi1za2VsZXRvbi10ZXh0IFthbmltYXRlZF09XCJ0cnVlXCIgc3R5bGU9XCJ3aWR0aDogMTAwJVwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IEBlbHNlIGlmICgobWF0SW5wdXRUZXh0LnZhbHVlIHwgc3RyTGVuZ3RoKSA8IHN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQpIHtcbiAgICAgICAgICAgIDwhLS0gTmVlZCBtb3JlIGNoYXJhY3RlcnMgLS0+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImlvbi1wYWRkaW5nIHRleHQtaXRhbGljXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgIDxpb24tbGFiZWw+XG4gICAgICAgICAgICAgICAge3sgJ0lORk8uUExFQVNFX1RZUEVfTU9SRV9DSEFSQUNURVJTJyB8IHRyYW5zbGF0ZTogeyBtaW5MZW5ndGg6IHN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgfSB9fVxuICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDwhLS0gTG9hZGluZyBzcGlubmVyIC0tPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJpb24tcGFkZGluZ1wiIGRpc2FibGVkPlxuICAgICAgICAgICAgICA8aW9uLXNrZWxldG9uLXRleHQgW2FuaW1hdGVkXT1cInRydWVcIiBzdHlsZT1cIndpZHRoOiAxMDAlXCI+PC9pb24tc2tlbGV0b24tdGV4dD5cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8IS0tIGZvb3RlciAtLT5cbiAgICAgICAgICBAaWYgKGl0ZW1Db3VudDsgYXMgY291bnQpIHtcbiAgICAgICAgICAgIDxpb24tcm93IGNsYXNzPVwibWF0LWF1dG9jb21wbGV0ZS1mb290ZXIgaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNsYXNzPVwiaW9uLWZsb2F0LWVuZCBpb24tcGFkZGluZy1lbmRcIj5cbiAgICAgICAgICAgICAgICAgIDxpPnt7ICdDT01NT04uUkVTVUxUX0NPVU5UJyB8IHRyYW5zbGF0ZTogeyBjb3VudDogY291bnQgfSB9fTwvaT5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgfVxuICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG5cbiAgICAgICAgPGRpdiBtYXRTdWZmaXggY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1zdWZmaXgtYm90dG9tXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFN1ZmZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIEBpZiAoZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgICA8bWF0LWVycm9yIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChmb3JtQ29udHJvbC5oYXNFcnJvcignZW50aXR5JykpIHtcbiAgICAgICAgICA8bWF0LWVycm9yIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9JTlZBTElEPC9tYXQtZXJyb3I+XG4gICAgICAgIH1cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdEVycm9yVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBIaW50cyAtLT5cbiAgICAgICAgQGlmICghZm9ybUNvbnRyb2wuaW52YWxpZCkge1xuICAgICAgICAgIDxtYXQtaGludD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRIaW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L21hdC1oaW50PlxuICAgICAgICB9XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRBZnRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG48L2lvbi1ncmlkPlxuXG48bmctdGVtcGxhdGUgI21hdFByZWZpeFRlbXBsYXRlPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0UHJlZml4XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWF0U3VmZml4VGVtcGxhdGU+XG4gIDxidXR0b25cbiAgICBtYXRTdWZmaXhcbiAgICBtYXQtaWNvbi1idXR0b25cbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAoY2xpY2spPVwidG9nZ2xlU2hvd1BhbmVsKCRldmVudClcIlxuICAgIFtoaWRkZW5dPVwiZGlzYWJsZWRcIlxuICAgIFt0aXRsZV09XCJkcm9wQnV0dG9uVGl0bGUgfHwgJycgfCB0cmFuc2xhdGVcIlxuICA+XG4gICAgPG1hdC1pY29uPnt7IG1vYmlsZSA/ICdhcnJvd19kcm9wX2Rvd24nIDogJ2tleWJvYXJkX2Fycm93X2Rvd24nIH19PC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG4gIEBpZiAoY2xlYXJhYmxlKSB7XG4gICAgPGJ1dHRvblxuICAgICAgbWF0U3VmZml4XG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwiY2xlYXJWYWx1ZSgkZXZlbnQpXCJcbiAgICAgIFtoaWRkZW5dPVwiZGlzYWJsZWQgfHwgIWZvcm1Db250cm9sLnZhbHVlXCJcbiAgICAgIFt0aXRsZV09XCJjbGVhckJ1dHRvblRpdGxlIHx8ICcnIHwgdHJhbnNsYXRlXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICB9XG5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21hdEVycm9yVGVtcGxhdGU+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIm1hdC1lcnJvcixbbWF0RXJyb3JdXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtYXRIaW50VGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJtYXQtbWRjLWZvcm0tZmllbGQtaGludC13cmFwcGVyXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWhpbnQ6bm90KFthbGlnbj0nZW5kJ10pLFttYXRIaW50XVwiPjwvbmctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLWhpbnQtc3BhY2VyXCI+PC9kaXY+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWhpbnRbYWxpZ249J2VuZCddXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
790
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuY2hpcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9jaGlwcy9tYXRlcmlhbC5jaGlwcy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2NoaXBzL21hdGVyaWFsLmNoaXBzLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUNoQix1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLGVBQWUsRUFHZixRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTRDLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakgsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0SCxPQUFPLEVBQUUsVUFBVSxFQUFnQiwyQkFBMkIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd2RyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLFlBQVksRUFDWixLQUFLLEVBQ0wsWUFBWSxFQUNaLFFBQVEsRUFDUixlQUFlLEVBQ2YsY0FBYyxFQUNkLFNBQVMsRUFDVCxRQUFRLEdBQ1QsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUs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QTFCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ2tDLGNBQWM7c0JBQXJELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBS1AsU0FBUztzQkFBdkMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBUVIsT0FBTztzQkFBdkIsTUFBTTt1QkFBQyxPQUFPO2dCQUVDLE9BQU87c0JBQXRCLE1BQU07dUJBQUMsTUFBTTtnQkFFRyxPQUFPO3NCQUF2QixNQUFNO3VCQUFDLE9BQU87Z0JBQ0wsZUFBZTtzQkFBeEIsTUFBTTtnQkFDbUIsYUFBYTtzQkFBdEMsTUFBTTt1QkFBQyxnQkFBZ0I7Z0JBQ0QsVUFBVTtzQkFBaEMsTUFBTTt1QkFBQyxhQUFhO2dCQUVNLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFDRyxZQUFZO3NCQUF2QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ1MsbUJBQW1CO3NCQUFyRCxTQUFTO3VCQUFDLHNCQUFzQjtnQkFlcEIsTUFBTTtzQkFBbEIsS0FBSztnQkFZTyxRQUFRO3NCQUFwQixLQUFLO2dCQVNPLEtBQUs7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5HX1ZBTFVFX0FDQ0VTU09SLCBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGlzT2JzZXJ2YWJsZSwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBtZXJnZU1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGZvY3VzSW5wdXQsIElucHV0RWxlbWVudCwgc2VsZWN0SW5wdXRDb250ZW50RnJvbUV2ZW50LCBzZWxlY3RJbnB1dFJhbmdlIH0gZnJvbSAnLi4vLi4vaW5wdXRzJztcbmltcG9ydCB7IEZldGNoTW9yZUZuLCBMb2FkUmVzdWx0LCBTdWdnZXN0Rm4gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBBcHBGbG9hdExhYmVsVHlwZSwgRGlzcGxheUZuLCBFcXVhbHNGbiB9IGZyb20gJy4uLy4uL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHtcbiAgY2hhbmdlQ2FzZVRvVW5kZXJzY29yZSxcbiAgaXNFbXB0eUFycmF5LFxuICBpc05pbCxcbiAgaXNOaWxPckJsYW5rLFxuICBpc05vdE5pbCxcbiAgaXNOb3ROaWxPckJsYW5rLFxuICBpc05vdE5pbFN0cmluZyxcbiAgdG9Cb29sZWFuLFxuICB0b051bWJlcixcbn0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IGZpcnN0Tm90TmlsUHJvbWlzZSB9IGZyb20gJy4uLy4uL29ic2VydmFibGVzJztcbmltcG9ydCB7IGZyb21TY3JvbGxFbmRFdmVudCB9IGZyb20gJy4uLy4uL2V2ZW50cyc7XG5pbXBvcnQgeyBUaGVtZVBhbGV0dGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IHN1Z2dlc3RGcm9tQXJyYXkgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZyB9IGZyb20gJy4uL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUuY29uZmlnJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZUZpZWxkVXRpbHMgfSBmcm9tICcuLi9hdXRvY29tcGxldGUvbWF0ZXJpYWwuYXV0b2NvbXBsZXRlLnV0aWxzJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UsIFN1YnNjcmlwdFNpemluZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlLCBNYXRBdXRvY29tcGxldGVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAnLi4vLi4vcGxhdGZvcm1zJztcbmltcG9ydCB7IERFRkFVTFRfSk9JTl9QUk9QRVJUSUVTX1NFUEFSQVRPUiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbWF0LWNoaXBzLWZpZWxkJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwuY2hpcHMuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwuY2hpcHMuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNYXRDaGlwc0ZpZWxkKSxcbiAgICB9LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTWF0Q2hpcHNGaWVsZCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBJbnB1dEVsZW1lbnQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX29uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcblxuICBwcml2YXRlIF9vbkZldGNoTW9yZUNhbGxiYWNrOiBGZXRjaE1vcmVGbjxMb2FkUmVzdWx0PGFueT4+O1xuICBwcml2YXRlIF9pbXBsaWNpdFZhbHVlOiBhbnk7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfaXRlbXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfb3BlbmVkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgXyRmaWx0ZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBfaXRlbUNvdW50OiBudW1iZXI7XG4gIHByaXZhdGUgX3JlbG9hZCQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgcHJvdGVjdGVkIF90YWJpbmRleDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgXyRpbnB1dEl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIF8kZmlsdGVyZWRJdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBfaW5wdXRDb250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuICBwcm90ZWN0ZWQgX21vcmVJdGVtc0NvdW50OiBudW1iZXI7XG4gIHByb3RlY3RlZCBfZmV0Y2hNb3JlJCA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG5cbiAgQElucHV0KCkgZXF1YWxzOiBFcXVhbHNGbjtcbiAgQElucHV0KCkgbG9nUHJlZml4ID0gJ1ttYXQtY2hpcHNdICc7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTogc3RyaW5nID0gbnVsbDtcbiAgQElucHV0KCkgZmxvYXRMYWJlbDogQXBwRmxvYXRMYWJlbFR5cGUgPSAnYXV0byc7XG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XG4gIEBJbnB1dCgpIHN1YnNjcmlwdFNpemluZzogU3Vic2NyaXB0U2l6aW5nO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBzdWdnZXN0Rm46IFN1Z2dlc3RGbjxhbnksIGFueT47XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByZXF1aXJlZCA9IGZhbHNlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgbW9iaWxlOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNsZWFyYWJsZSA9IGZhbHNlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBkZWJvdW5jZVRpbWU6IG51bWJlciA9IG51bGw7XG5cbiAgQElucHV0KCkgZGlzcGxheVNlcGFyYXRvcjogc3RyaW5nIHwgbnVsbDtcbiAgQElucHV0KCkgZGlzcGxheVdpdGg6IERpc3BsYXlGbiB8IG51bGw7XG4gIEBJbnB1dCgpIGRpc3BsYXlBdHRyaWJ1dGVzOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgZGlzcGxheUNvbHVtblNpemVzOiAobnVtYmVyIHwgJ2F1dG8nIHwgdW5kZWZpbmVkKVtdO1xuICBASW5wdXQoKSBkaXNwbGF5Q29sdW1uTmFtZXM6IHN0cmluZ1tdO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaGlnaGxpZ2h0QWNjZW50OiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0FsbE9uRm9jdXM6IGJvb2xlYW47XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93UGFuZWxPbkZvY3VzOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYXV0b2ZvY3VzID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbmZpZzogTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWc7XG4gIEBJbnB1dCgpIGkxOG5QcmVmaXggPSAnUkVGRVJFTlRJQUwuJztcbiAgQElucHV0KCkgbm9SZXN1bHRNZXNzYWdlID0gJ0NPTU1PTi5OT19SRVNVTFQnO1xuICBASW5wdXQoKSBwYW5lbENsYXNzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBhbmVsV2lkdGg6IHN0cmluZztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGRpc2FibGVSaXBwbGUgPSBmYWxzZTtcbiAgQElucHV0KCkgbWF0QXV0b2NvbXBsZXRlUG9zaXRpb246ICdhdXRvJyB8ICdhYm92ZScgfCAnYmVsb3cnO1xuICBASW5wdXQoKSBpdGVtU2l6ZSA9ICc0OHB4JztcbiAgQElucHV0KCkgZmV0Y2hNb3JlVGhyZXNob2xkID0gJzE1JSc7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIHN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQ6IG51bWJlciA9IG51bGw7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93TG9hZGluZ1NwaW5uZXIgPSB0cnVlO1xuICBASW5wdXQoKSBjaGlwQ29sb3I6IFRoZW1lUGFsZXR0ZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGRlYnVnID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFwcGx5SW1wbGljaXRWYWx1ZTogYm9vbGVhbiB8ICgodmFsdWU6IGFueSkgPT4gYm9vbGVhbikgPSBmYWxzZTsgLy8gLyFcXCBmYWxzZSBieSBkZWZhdWx0IChub3QgbGlrZSBhdXRvY29tcGxldGUpXG4gIEBJbnB1dCgpIGRyb3BCdXR0b25UaXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBjbGVhckJ1dHRvblRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSB0cmltU2VhcmNoVGV4dDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHBhbmVsQ2xhc3MgaW5zdGVhZFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdjbGFzcycgfSkgc2V0IGNsYXNzTGlzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5wYW5lbENsYXNzID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGNsYXNzTGlzdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBhbmVsQ2xhc3M7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgnY2xpY2snKSBjbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgnYmx1cicpIGJsdXJyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCdmb2N1cycpIGZvY3VzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBkcm9wQnV0dG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50Pih0cnVlKTtcbiAgQE91dHB1dCgna2V5ZG93bi5lc2NhcGUnKSBrZXlkb3duRXNjYXBlID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgna2V5dXAuZW50ZXInKSBrZXl1cEVudGVyID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcblxuICBAVmlld0NoaWxkKCdtYXRJbnB1dFRleHQnKSBtYXRJbnB1dFRleHQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoTWF0QXV0b2NvbXBsZXRlKSBhdXRvY29tcGxldGU6IE1hdEF1dG9jb21wbGV0ZTtcbiAgQFZpZXdDaGlsZChNYXRBdXRvY29tcGxldGVUcmlnZ2VyKSBhdXRvY29tcGxldGVUcmlnZ2VyOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb3JtR3JvdXBEaXI6IEZvcm1Hcm91cERpcmVjdGl2ZVxuICApIHt9XG5cbiAgZ2V0IGl0ZW1Db3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9pdGVtQ291bnQ7XG4gIH1cblxuICBnZXQgY2FuRmV0Y2hNb3JlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrICYmIHRoaXMuX21vcmVJdGVtc0NvdW50ID4gMDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBmaWx0ZXIodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fJGZpbHRlci52YWx1ZSkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArIFwiIFNldHRpbmcgZmlsdGVyOlwiLCB2YWx1ZSk7XG4gICAgICB0aGlzLl8kZmlsdGVyLm5leHQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmaWx0ZXIoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fJGZpbHRlci52YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCB0YWJpbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fdGFiaW5kZXggPSB2YWx1ZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IHRhYmluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmluZGV4O1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGl0ZW1zKHZhbHVlOiBPYnNlcnZhYmxlPGFueVtdPiB8IGFueVtdKSB7XG4gICAgLy8gUmVtb3ZlIHByZXZpb3VzIHN1YnNjcmlwdGlvbiBvbiBpdGVtcywgKGlmIGV4aXRzKVxuICAgIGlmICh0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbikge1xuICAgICAgY29uc29sZS53YXJuKHRoaXMubG9nUHJlZml4ICsgJyBJdGVtcyByZWNlaXZlZCB0d2ljZSAhJyk7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24ucmVtb3ZlKHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uKTtcbiAgICAgIHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzT2JzZXJ2YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uID0gdmFsdWUuc3Vic2NyaWJlKCh2KSA9PiB0aGlzLl8kaW5wdXRJdGVtcy5uZXh0KHYpKTtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5faXRlbXNTdWJzY3JpcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMuXyRpbnB1dEl0ZW1zLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuXyRpbnB1dEl0ZW1zLm5leHQodmFsdWUgYXMgYW55W10pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBpdGVtcygpOiBPYnNlcnZhYmxlPGFueVtdPiB8IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fJGlucHV0SXRlbXM7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmZvcm1Db250cm9sLnZhbHVlIHx8IFtdO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZm9ybUNvbnRyb2w/LmRpc2FibGVkIHx8IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICghdGhpcy5yZWFkb25seSAmJiB0aGlzLmZvcm1Db250cm9sPy5lbmFibGVkKSB8fCBmYWxzZTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05pbCh0aGlzLl8kZmlsdGVyZWRJdGVtcy52YWx1ZSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZvcm1Db250cm9sID1cbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wgfHwgKHRoaXMuZm9ybUNvbnRyb2xOYW1lICYmIHRoaXMuZm9ybUdyb3VwRGlyICYmICh0aGlzLmZvcm1Hcm91cERpci5mb3JtLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSkgYXMgVW50eXBlZEZvcm1Db250cm9sKSk7XG4gICAgaWYgKCF0aGlzLmZvcm1Db250cm9sKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIG1hbmRhdG9yeSBhdHRyaWJ1dGUgJ2Zvcm1Db250cm9sJyBvciAnZm9ybUNvbnRyb2xOYW1lJyBpbiA8bWF0LWNoaXBzLWZpZWxkPi5cIik7XG5cbiAgICAvLyBDb25maWd1cmF0aW9uIGZyb20gY29uZmlnIG9iamVjdFxuICAgIGlmICh0aGlzLmNvbmZpZykge1xuICAgICAgdGhpcy5zdWdnZXN0Rm4gPSB0aGlzLnN1Z2dlc3RGbiB8fCB0aGlzLmNvbmZpZy5zdWdnZXN0Rm47XG4gICAgICBpZiAoIXRoaXMuc3VnZ2VzdEZuICYmIHRoaXMuY29uZmlnLml0ZW1zKSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLmNvbmZpZy5pdGVtcztcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsdGVyID0gdGhpcy5maWx0ZXIgfHwgdGhpcy5jb25maWcuZmlsdGVyO1xuICAgICAgdGhpcy5kaXNwbGF5QXR0cmlidXRlcyA9IHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMgPz8gdGhpcy5jb25maWcuYXR0cmlidXRlcztcbiAgICAgIHRoaXMuZGlzcGxheUNvbHVtblNpemVzID0gdGhpcy5kaXNwbGF5Q29sdW1uU2l6ZXMgPz8gdGhpcy5jb25maWcuY29sdW1uU2l6ZXM7XG4gICAgICB0aGlzLmRpc3BsYXlDb2x1bW5OYW1lcyA9IHRoaXMuZGlzcGxheUNvbHVtbk5hbWVzID8/IHRoaXMuY29uZmlnLmNvbHVtbk5hbWVzO1xuICAgICAgdGhpcy5kaXNwbGF5U2VwYXJhdG9yID0gdGhpcy5kaXNwbGF5U2VwYXJhdG9yID8/IHRoaXMuY29uZmlnLmRpc3BsYXlXaXRoU2VwYXJhdG9yO1xuICAgICAgdGhpcy5kaXNwbGF5V2l0aCA9IHRoaXMuZGlzcGxheVdpdGggPz8gdGhpcy5jb25maWcuZGlzcGxheVdpdGg7XG4gICAgICB0aGlzLnRyaW1TZWFyY2hUZXh0ID0gdGhpcy50cmltU2VhcmNoVGV4dCA/PyB0aGlzLmNvbmZpZy50cmltU2VhcmNoVGV4dDtcbiAgICAgIHRoaXMuZXF1YWxzID0gdGhpcy5lcXVhbHMgPz8gdGhpcy5jb25maWcuZXF1YWxzO1xuICAgICAgdGhpcy5tb2JpbGUgPSB0aGlzLm1vYmlsZSA/PyB0aGlzLmNvbmZpZy5tb2JpbGU7XG4gICAgICB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgPSB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgPz8gdGhpcy5jb25maWcuc3VnZ2VzdExlbmd0aFRocmVzaG9sZDtcbiAgICAgIHRoaXMuc2hvd0FsbE9uRm9jdXMgPSB0aGlzLnNob3dBbGxPbkZvY3VzID8/IHRoaXMuY29uZmlnLnNob3dBbGxPbkZvY3VzO1xuICAgICAgdGhpcy5zaG93UGFuZWxPbkZvY3VzID0gdGhpcy5zaG93UGFuZWxPbkZvY3VzID8/IHRoaXMuY29uZmlnLnNob3dQYW5lbE9uRm9jdXM7XG4gICAgICB0aGlzLnBhbmVsQ2xhc3MgPSB0aGlzLnBhbmVsQ2xhc3MgPz8gdGhpcy5jb25maWcucGFuZWxDbGFzcyA/PyB0aGlzLmNvbmZpZy5jbGFzcztcbiAgICAgIHRoaXMucGFuZWxXaWR0aCA9IHRoaXMucGFuZWxXaWR0aCA/PyB0aGlzLmNvbmZpZy5wYW5lbFdpZHRoO1xuICAgICAgdGhpcy5kZWJvdW5jZVRpbWUgPSB0b051bWJlcih0aGlzLmRlYm91bmNlVGltZSwgdGhpcy5jb25maWcuZGVib3VuY2VUaW1lKTtcbiAgICAgIHRoaXMuaGlnaGxpZ2h0QWNjZW50ID0gdG9Cb29sZWFuKHRoaXMuaGlnaGxpZ2h0QWNjZW50LCB0b0Jvb2xlYW4odGhpcy5jb25maWcuaGlnaGxpZ2h0QWNjZW50KSk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCB2YWx1ZXNcbiAgICB0aGlzLm1vYmlsZSA9IHRoaXMubW9iaWxlID8/IGlzTW9iaWxlKHdpbmRvdyk7XG4gICAgdGhpcy5kaXNwbGF5QXR0cmlidXRlcyA9IHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMgPz8gdGhpcy5maWx0ZXI/LmF0dHJpYnV0ZXMgPz8gWydsYWJlbCcsICduYW1lJ107XG4gICAgdGhpcy5kaXNwbGF5U2VwYXJhdG9yID0gdGhpcy5kaXNwbGF5U2VwYXJhdG9yID8/IERFRkFVTFRfSk9JTl9QUk9QRVJUSUVTX1NFUEFSQVRPUjtcbiAgICB0aGlzLmRpc3BsYXlXaXRoID0gdGhpcy5kaXNwbGF5V2l0aCA/PyBNYXRBdXRvY29tcGxldGVGaWVsZFV0aWxzLmNyZWF0ZURpc3BsYXlGbih0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzLCBmYWxzZSwgdGhpcy5kaXNwbGF5U2VwYXJhdG9yKTtcbiAgICB0aGlzLnRyaW1TZWFyY2hUZXh0ID0gdGhpcy50cmltU2VhcmNoVGV4dCA/PyB0cnVlO1xuICAgIHRoaXMuZXF1YWxzID0gdGhpcy5lcXVhbHMgPz8gTWF0QXV0b2NvbXBsZXRlRmllbGRVdGlscy5kZWZhdWx0RXF1YWxzO1xuXG4gICAgdGhpcy5kaXNwbGF5Q29sdW1uU2l6ZXMgPVxuICAgICAgdGhpcy5kaXNwbGF5Q29sdW1uU2l6ZXMgPz9cbiAgICAgIC8vIGlmIG9ubHkgY29sdW1uOiBhdXRvIHNpemVcbiAgICAgICgodGhpcy5kaXNwbGF5QXR0cmlidXRlcy5sZW5ndGggPT09IDEgJiYgW3VuZGVmaW5lZF0pIHx8XG4gICAgICAgIC8vIENvbXB1dGVkIGNvbHVtbiBzaXplOlxuICAgICAgICAvLyAtIGlmIGxhYmVsIHRoZW4gY29sIHNpemUgPSAyXG4gICAgICAgIC8vIC0gaWYgcmFua09yZGVyIHRoZW4gY29sIHNpemUgPSAxXG4gICAgICAgIC8vIC0gZXNlID0+IGF1dG8gc2l6ZVxuICAgICAgICB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzLm1hcCgoYXR0cikgPT4gYXR0ciAmJiAoYXR0ci5lbmRzV2l0aCgnbGFiZWwnKSA/IDMgOiBhdHRyLmVuZHNXaXRoKCdyYW5rT3JkZXInKSA/IDIgOiB1bmRlZmluZWQpKSk7XG4gICAgdGhpcy5kaXNwbGF5Q29sdW1uTmFtZXMgPSB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzLm1hcChcbiAgICAgIChhdHRyLCBpbmRleCkgPT4gKHRoaXMuZGlzcGxheUNvbHVtbk5hbWVzICYmIHRoaXMuZGlzcGxheUNvbHVtbk5hbWVzW2luZGV4XSkgfHwgdGhpcy5pMThuUHJlZml4ICsgY2hhbmdlQ2FzZVRvVW5kZXJzY29yZShhdHRyKS50b1VwcGVyQ2FzZSgpXG4gICAgKTtcbiAgICBjb25zdCBwYW5lbENsYXNzZXMgPSB0aGlzLnBhbmVsQ2xhc3M/LnNwbGl0KC9cXHMvKTtcbiAgICB0aGlzLnBhbmVsV2lkdGggPVxuICAgICAgdGhpcy5wYW5lbFdpZHRoID8/XG4gICAgICAocGFuZWxDbGFzc2VzICYmXG4gICAgICAgICgocGFuZWxDbGFzc2VzLmluY2x1ZGVzKCdtaW4td2lkdGgtbWVkaXVtJykgJiYgJzMwMHB4JykgfHxcbiAgICAgICAgICAocGFuZWxDbGFzc2VzLmluY2x1ZGVzKCdtaW4td2lkdGgtbGFyZ2UnKSAmJiAnNDAwcHgnKSB8fFxuICAgICAgICAgIChwYW5lbENsYXNzZXMuaW5jbHVkZXMoJ21pbi13aWR0aC14bGFyZ2UnKSAmJiAnNDUwcHgnKSB8fFxuICAgICAgICAgIChwYW5lbENsYXNzZXMuaW5jbHVkZXMoJ21pbi13aWR0aC04MHZ3JykgJiYgJzgwdncnKSB8fFxuICAgICAgICAgICgocGFuZWxDbGFzc2VzLmluY2x1ZGVzKCdmdWxsLXdpZHRoJykgfHwgcGFuZWxDbGFzc2VzLmluY2x1ZGVzKCdmdWxsLXNpemUnKSkgJiYgJzEwMHZ3JykpKTtcbiAgICB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgPSB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgPz8gMDtcbiAgICB0aGlzLnNob3dBbGxPbkZvY3VzID0gdGhpcy5zaG93QWxsT25Gb2N1cyA/PyB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgPD0gMDtcbiAgICB0aGlzLnNob3dQYW5lbE9uRm9jdXMgPSB0aGlzLnNob3dQYW5lbE9uRm9jdXMgPz8gdHJ1ZTtcbiAgICB0aGlzLmRlYm91bmNlVGltZSA9IHRoaXMuZGVib3VuY2VUaW1lID8/ICh0aGlzLm1vYmlsZSA/IDY1MCA6IDI1MCk7XG4gICAgdGhpcy5oaWdobGlnaHRBY2NlbnQgPSB0aGlzLmhpZ2hsaWdodEFjY2VudCA/PyBmYWxzZTtcbiAgICB0aGlzLm1hdEF1dG9jb21wbGV0ZVBvc2l0aW9uID0gdGhpcy5tYXRBdXRvY29tcGxldGVQb3NpdGlvbiA/PyAodGhpcy5tb2JpbGUgPyAnYWJvdmUnIDogJ2F1dG8nKTsgLy8gT24gbW9iaWxlLCBzZXQgcG9zaXRpb24gdG8gYWJvdmUgKGJlY2F1c2Ugb2YgYm90dG9tIGtleWJvYXJkKVxuXG4gICAgLy8gTm8gc3VnZ2VzdEZuOiBmaWx0ZXIgb24gdGhlIGdpdmVuIGl0ZW1zXG4gICAgaWYgKCF0aGlzLnN1Z2dlc3RGbikge1xuICAgICAgY29uc3Qgc3VnZ2VzdEZyb21BcnJheUZuOiBTdWdnZXN0Rm48YW55LCBhbnk+ID0gYXN5bmMgKHZhbHVlLCBmaWx0ZXIpID0+XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIENhbGxpbmcgc3VnZ2VzdEZyb21BcnJheSB3aXRoIHZhbHVlPScsIHZhbHVlKTtcblxuICAgICAgICBzdWdnZXN0RnJvbUFycmF5KHRoaXMuXyRpbnB1dEl0ZW1zLnZhbHVlLCB2YWx1ZSwge1xuICAgICAgICAgIHNlYXJjaEF0dHJpYnV0ZXM6IHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMsXG4gICAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFdhaXQgKG9uY2UpIHRoYXQgaXRlbXMgYXJlIGxvYWRlZCwgdGhlbiBjYWxsIHN1Z2dlc3QgZnJvbSBhcnJheSBmblxuICAgICAgdGhpcy5zdWdnZXN0Rm4gPSBhc3luYyAodmFsdWUsIGZpbHRlcikgPT4ge1xuICAgICAgICBpZiAoaXNOaWwodGhpcy5fJGlucHV0SXRlbXMudmFsdWUpKSB7XG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbbWF0LWNoaXBzXSBXYWl0aW5nIGl0ZW1zIHRvIGJlIHNldC4uLicpO1xuXG4gICAgICAgICAgYXdhaXQgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMuXyRpbnB1dEl0ZW1zKTtcblxuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW21hdC1jaGlwc10gUmVjZWl2ZWQgaXRlbXM6JywgdGhpcy4kaW5wdXRJdGVtcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWdnZXN0Rm4gPSBzdWdnZXN0RnJvbUFycmF5Rm47XG4gICAgICAgIHJldHVybiB0aGlzLnN1Z2dlc3RGbih2YWx1ZSwgZmlsdGVyKTsgLy8gTG9vcFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBTZW5kIHZhbHVlIHRvIHN1Z2dlc3Qgd2hlbiA6XG4gICAgLy8gLSBpcyBuaWwgYW5kICcqJywgYW5kIG5vIG1pbiBsZW5ndGggdGhyZXNob2xkXG4gICAgLy8gLSBpcyBub3QgbmlsIGFuZCBub3QgYSBzdHJpbmcgdHlwZSAoZS5nLiBvYmplY3QpXG4gICAgLy8gLSBpcyBub3QgbmlsIGFuZCBpcyBhIHN0cmluZywgYW5kIGhhcyBlbm91Z2ggY2hhcmFjdGVyXG4gICAgY29uc3QgdGhyZXNob2xkRmlsdGVyRm4gPSAodmFsdWUpID0+XG4gICAgICB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgPD0gMCB8fFxuICAgICAgKGlzTm90TmlsKHZhbHVlKSAmJiAoISh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB8fCAodmFsdWUgIT09ICcqJyAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID49IHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCkpKTtcblxuICAgIGNvbnN0IGZpbHRlcmVkSXRlbXNDaGFuZ2VzID0gbWVyZ2UoXG4gICAgICAvLyBSZWxvYWQgZXZlbnQgKG5vIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkgcGlwZSwgdG8gZm9yY2UgcmVsb2FkIGV2ZW4gaWYgc2FtZSB2YWx1ZSlcbiAgICAgIHRoaXMuX3JlbG9hZCQucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuZW5hYmxlZCksXG4gICAgICAgIGZpbHRlcih0aHJlc2hvbGRGaWx0ZXJGbiksXG4gICAgICAgIHRhcCgoXykgPT4gdGhpcy5zaG93TG9hZGluZ1NwaW5uZXIgJiYgdGhpcy5tYXJrQXNMb2FkaW5nKCkpXG4gICAgICApLFxuXG4gICAgICAvLyBTZWFyY2ggdGV4dCAobm8gZGlzdGluY3RVbnRpbENoYW5nZWQoKSBiZWNhdXNlIG9mIHRoZSBkZWJvdW5jZVRpbWUoKSBwaXBlKVxuICAgICAgdGhpcy5faW5wdXRDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICBmaWx0ZXIoKHZhbHVlKSA9PiB0aGlzLmVuYWJsZWQgJiYgaXNOb3ROaWxTdHJpbmcodmFsdWUpKSxcbiAgICAgICAgLy8gTWFyayBhcyBsb2FkaW5nICh0byBzaG93IGxvYWRpbmcgc3Bpbm5lcikgLSBhcyBzb29uIGFzIHBvc3NpYmxlLCBhbmQgYmVmb3JlIGRlYm91bmNlVGltZVxuICAgICAgICB0YXAoKF8pID0+IHRoaXMuc2hvd0xvYWRpbmdTcGlubmVyICYmIHRoaXMubWFya0FzTG9hZGluZygpKSxcbiAgICAgICAgLy8gRmlsdGVyIGlmIG5vdCBlbm91Z2ggY2hhcmFjdGVyXG4gICAgICAgIGZpbHRlcigodmFsdWUpID0+ICh2YWx1ZT8ubGVuZ3RoIHx8IDApID49IHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCksXG4gICAgICAgIC8vIFdhaXQgYSBkZWJvdW5jZSB0aW1lXG4gICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZSlcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy8sdGFwKCh2YWx1ZSkgPT4gdGhpcy5kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBTZWFyY2ggdGV4dCBjaGFuZ2VzOicsIHZhbHVlKSlcbiAgICAgICksXG5cbiAgICAgIC8vIE1lcmdlIHNvbWUgb2JzZXJ2YWJsZXMsIHdpdGggYSBjb21tb24gZGlzdGluY3RVbnRpbENoYW5nZWQoKSBwaXBlXG4gICAgICBtZXJnZShcbiAgICAgICAgLy8gT24gZHJvcGRvd24gYnV0dG9uIGNsaWNrIChubyBkZWJvdW5jZVRpbWUpXG4gICAgICAgIHRoaXMuZHJvcEJ1dHRvbkNsaWNrLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKChldmVudCkgPT4gIWV2ZW50IHx8ICFldmVudC5kZWZhdWx0UHJldmVudGVkKVxuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgLy8sdGFwKHZhbHVlID0+IHRoaXMuZGVidWcgJiYgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgYW4gY29udHJvbCBvYmplY3QgdmFsdWU6ICcsIHZhbHVlKSlcbiAgICAgICAgKSxcbiAgICAgICAgLy8gRm9jdXMgb3IgY2xpY2sgPT4gTG9hZCBhbGwgKG5vIGRlYm91bmNlVGltZSlcbiAgICAgICAgbWVyZ2UodGhpcy5mb2N1c2VkLCB0aGlzLmNsaWNrZWQpLFxuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvLy5waXBlKHRhcCgoXykgPT4gdGhpcy5kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCBmb2N1c2VkIG9yIGNsaWNrZWQgZXZlbnQnKSkpLFxuICAgICAgICAvLyBJbnB1dCBpdGVtcyBvciBmaWx0ZXIgY2hhbmdlc1xuICAgICAgICBtZXJnZSh0aGlzLl8kaW5wdXRJdGVtcywgdGhpcy5fJGZpbHRlcikucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKF8pID0+ICF0aGlzLmxvYWRpbmcpXG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvLyx0YXAoKF8pID0+IHRoaXMuZGVidWcgJiYgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgJGlucHV0SXRlbXMgb3IgZmlsdGVyIGV2ZW50JykpXG4gICAgICAgIClcbiAgICAgICkucGlwZShcbiAgICAgICAgZmlsdGVyKChfKSA9PiB0aGlzLmVuYWJsZWQpLFxuICAgICAgICBtYXAoKF8pID0+ICh0aGlzLnNob3dBbGxPbkZvY3VzICYmIGlzTmlsT3JCbGFuayh0aGlzLl9pbnB1dENvbnRyb2wudmFsdWUpID8gJyonIDogdGhpcy5faW5wdXRDb250cm9sLnZhbHVlKSksXG4gICAgICAgIC8vIERpc3Rpbmd1aXNoIGNoYW5nZXNcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHYxLCB2MikgPT5cbiAgICAgICAgICAvLyBJZiBsb2FkaW5nIChub3QgbG9hZGVkIHlldCksIHNpbXVsYXRlIHRoYXQgdmFsdWUgY2hhbmdlZCB0byBmb3JjZSBsb2FkXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID8gZmFsc2UgOiB2MSA9PT0gdjIgfHwgdGhpcy5lcXVhbHModjEsIHYyKVxuICAgICAgICApLFxuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIGNoYXJhY3RlcnNcbiAgICAgICAgZmlsdGVyKHRocmVzaG9sZEZpbHRlckZuKVxuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvLyx0YXAoKHZhbHVlKSA9PiB0aGlzLmRlYnVnICYmIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFJlY2VpdmVkIHVwZGF0ZSBldmVudDogJywgdmFsdWUpKVxuICAgICAgKVxuICAgICkucGlwZShcbiAgICAgIC8vIFN1Z2dlc3QgdmFsdWVzXG4gICAgICBtZXJnZU1hcCgodmFsdWUpID0+IHRoaXMuc3VnZ2VzdCh2YWx1ZSwgdGhpcy5maWx0ZXIpKSxcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL3RhcChpdGVtcyA9PiB0aGlzLmRlYnVnICYmIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFJlY2VpdmVkIGZyb20gc3VnZ2VzdDogJywgaXRlbXMpKSxcblxuICAgICAgLy8gU3RvcmUgaW1wbGljaXQgdmFsdWUgKHdpbGwgdXNlIGl0IG9uQmx1ciBpZiBub3Qgb3RoZXIgdmFsdWUgc2VsZWN0ZWQpXG4gICAgICB0YXAoKGl0ZW1zKSA9PiB0aGlzLnVwZGF0ZUltcGxpY2l0VmFsdWUoaXRlbXMpKVxuICAgICk7XG5cbiAgICAvLyBGZXRjaCBtb3JlIGV2ZW50c1xuICAgIGNvbnN0IGZldGNoTW9yZUl0ZW1zQ2hhbmdlcyA9IHRoaXMuX2ZldGNoTW9yZSQucGlwZShcbiAgICAgIHRhcCgoZXZlbnQpID0+IGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpKSwgLy8gQXZvaWQgdG8gY2xvc2UgdGhlIG1hdC1zZWxlY3RcbiAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmNhbkZldGNoTW9yZSksXG4gICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmZldGNoTW9yZSgpKSxcblxuICAgICAgLy8gREVCVUdcbiAgICAgIC8vdGFwKG1vcmVJdGVtcyA9PiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCBmcm9tIGZldGNoIE1vcmU6ICcsIG1vcmVJdGVtcykpLFxuXG4gICAgICAvLyBDb25jYXQgdG8gZXhpc3RpbmcgaXRlbXNcbiAgICAgIG1hcCgobW9yZUl0ZW1zKSA9PiAodGhpcy5fJGZpbHRlcmVkSXRlbXMudmFsdWUgfHwgW10pLmNvbmNhdChtb3JlSXRlbXMpKVxuICAgICk7XG5cbiAgICAvLyBVcGRhdGUgZmlsdGVyZWQgaXRlbXNcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgbWVyZ2UoXG4gICAgICAgIHRoaXMuXyRpbnB1dEl0ZW1zLFxuXG4gICAgICAgIC8vIFVwZGF0ZSBpdGVtcyBldmVudHNcbiAgICAgICAgZmlsdGVyZWRJdGVtc0NoYW5nZXMsXG5cbiAgICAgICAgLy8gRmV0Y2ggbW9yZSBldmVudHNcbiAgICAgICAgZmV0Y2hNb3JlSXRlbXNDaGFuZ2VzXG4gICAgICApXG4gICAgICAgIC8vIEVtaXQgaXRlbXNcbiAgICAgICAgLnN1YnNjcmliZSgoaXRlbXMpID0+IHRoaXMuXyRmaWx0ZXJlZEl0ZW1zLm5leHQoaXRlbXMpKVxuICAgICk7XG5cbiAgICAvLyBBcHBseWluZyBpbXBsaWNpdCB2YWx1ZSwgb24gYmx1clxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmJsdXJyZWRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDE1MCksXG4gICAgICAgICAgLy8gU2tpcCBpZiBtdWx0aXBsZSAobm8gaW1wbGljaXQgdmFsdWUpIG9yIGRpc2FibGVcbiAgICAgICAgICBmaWx0ZXIoKF8pID0+IHRoaXMuZW5hYmxlZCksXG5cbiAgICAgICAgICBtYXAoKF8pID0+IHRoaXMuX2lucHV0Q29udHJvbC52YWx1ZSlcbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC8vLHRhcCh2YWx1ZSA9PiB0aGlzLmRlYnVnICYmIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFJlY2VpdmVkIGJsdXJyZWQgZXZlbnQ6ICcsIHZhbHVlKSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAvLyBXaGVuIGxlYXZlIGNvbXBvbmVudCB3aXRob3V0IG9iamVjdCwgdXNlIGltcGxpY2l0IHZhbHVlIGlmIDpcbiAgICAgICAgICAvLyAtIGFuIGV4cGxpY2l0IHZhbHVlXG4gICAgICAgICAgLy8gLSBmaWVsZCBpcyBub3QgZW1wdHkgKHVzZXIgZmlsbCBzb21ldGhpbmcpXG4gICAgICAgICAgLy8gLSBPUiBmaWVsZCBlbXB0eSBidXQgaXMgcmVxdWlyZWRcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9pbXBsaWNpdFZhbHVlICYmXG4gICAgICAgICAgICAoKHRoaXMucmVxdWlyZWQgJiYgaXNFbXB0eUFycmF5KHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpKSB8fCAoaXNOb3ROaWxPckJsYW5rKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuYWRkKHRoaXMuX2ltcGxpY2l0VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5jaGVja0lmVG91Y2hlZCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZXNldCBzZWFyY2ggdGV4dFxuICAgICAgICAgICAgdGhpcy5tYXRJbnB1dFRleHQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgdGhpcy5faW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZlRvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2ltcGxpY2l0VmFsdWUgPSBudWxsOyAvLyByZXNldCB0aGUgaW1wbGljaXQgdmFsdWVcbiAgICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTsgLy8gQ2xvbmUgcGFuZWxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIGZvcm0gY29udHJvbCBzdGF0dXMgY2hhbmdlXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICAvLyBVcGRhdGUgY29tcG9uZW50IHN0YXRlXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jaGVja0lmVG91Y2hlZCgpKVxuICAgICk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5rZXlkb3duRXNjYXBlLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgLy8gQXZvaWQgZm9ybSBvciBwYWdlIHRvIG1hbmFnZSBlc2NhcGUgZXZlbnRcbiAgICAgICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC8vY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArIFwiIENsb3NpbmcgdGhlIHBhbmVsIChrZXlkb3duLmVzY2FwZSlcIik7XG5cbiAgICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgaWYgKHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5fJGlucHV0SXRlbXMuY29tcGxldGUoKTtcbiAgICB0aGlzLl8kaW5wdXRJdGVtcy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuXyRmaWx0ZXJlZEl0ZW1zLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fJGZpbHRlcmVkSXRlbXMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9yZWxvYWQkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fJGZpbHRlci5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy5kcm9wQnV0dG9uQ2xpY2suY29tcGxldGUoKTtcbiAgICB0aGlzLmNsaWNrZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLmJsdXJyZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLmZvY3VzZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLmtleWRvd25Fc2NhcGUuY29tcGxldGUoKTtcbiAgICB0aGlzLmtleXVwRW50ZXIuY29tcGxldGUoKTtcbiAgICB0aGlzLl9mZXRjaE1vcmUkLmNvbXBsZXRlKCk7XG5cbiAgICB0aGlzLl9pbXBsaWNpdFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wgPSBudWxsO1xuICAgIHRoaXMuZGlzcGxheVdpdGggPSBudWxsO1xuICAgIHRoaXMuZXF1YWxzID0gbnVsbDtcbiAgICB0aGlzLnN1Z2dlc3RGbiA9IG51bGw7XG4gICAgdGhpcy5fJGZpbHRlcmVkSXRlbXMgPSBudWxsO1xuICAgIHRoaXMuY29uZmlnID0gbnVsbDtcbiAgICB0aGlzLnBhbmVsQ2xhc3MgPSBudWxsO1xuXG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IG51bGw7XG4gICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBudWxsO1xuICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSBudWxsO1xuXG4gICAgLy8gRGVzdHJveSB0aGUgJ2F1dG9jb21wbGV0ZScgaW5zdGFuY2UsIHRvIGF2b2lkIG1lbW9yeSBsZWFrXG4gICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlKSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZS5uZ09uRGVzdHJveSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgaXRlbSB0byBjaGlwc1xuICAgKlxuICAgKiBAcGFyYW0gaXRlbVxuICAgKi9cbiAgYWRkKGl0ZW06IGFueSkge1xuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMubG9nUHJlZml4fXNlbGVjdGAsIGl0ZW0pO1xuICAgIHRoaXMud3JpdGVWYWx1ZShbLi4udGhpcy52YWx1ZSwgaXRlbV0pO1xuICAgIHRoaXMubWF0SW5wdXRUZXh0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB0aGlzLl9pbnB1dENvbnRyb2wuc2V0VmFsdWUoJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBpdGVtIGZyb20gY2hpcHNcbiAgICpcbiAgICogQHBhcmFtIGl0ZW1cbiAgICovXG4gIHJlbW92ZShpdGVtOiBhbnkpIHtcbiAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgY29uc3QgaW5kZXggPSB2YWx1ZSA/IHZhbHVlLmluZGV4T2YoaXRlbSkgOiAtMTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHZhbHVlLnNsaWNlKCk7XG4gICAgICBuZXdWYWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdGhpcy53cml0ZVZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB0byByZWxvYWQgY29udGVudC4gVXNlZnVsIHdoZW4gZmlsdGVyIGhhcyBiZWVuIGNoYW5nZWQgYnV0IG5vdCBkZXRlY3RlZFxuICAgKi9cbiAgcmVsb2FkSXRlbXModmFsdWU/OiBhbnkpIHtcbiAgICAvLyBERUJVR1xuICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBBc2tpbmcgdG8gcmVsb2FkSXRlbXMoKVwiKTtcbiAgICAvLyBGb3JjZSBhIHJlZnJlc2hcbiAgICB0aGlzLl9yZWxvYWQkLm5leHQodmFsdWUgfHwgKHRoaXMuc2hvd0FsbE9uRm9jdXMgJiYgdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkIDw9IDAgPyAnKicgOiB0aGlzLmZvcm1Db250cm9sLnZhbHVlKSk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnlbXSk6IHZvaWQge1xuICAgIC8vIERFQlVHXG4gICAgLy8gaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFdyaXRpbmcgdmFsdWU6ICcsIHZhbHVlKTtcblxuICAgIGlmICh2YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gW3ZhbHVlXTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmZvcm1Db250cm9sLnZhbHVlKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgV3JpdGluZyB2YWx1ZTogJywgdmFsdWUpO1xuXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGlzRGlzYWJsZWQgJiYgdGhpcy5hdXRvY29tcGxldGU/LmlzT3Blbikge1xuICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG4gICAgfVxuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICBmb2N1c0lucHV0KHRoaXMubWF0SW5wdXRUZXh0KTtcbiAgfVxuXG4gIGZpbHRlcklucHV0VGV4dEZvY3VzRXZlbnQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcblxuICAgIC8vIElnbm9yZSBldmVudCBmcm9tIG1hdC1vcHRpb25cbiAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGV2ZW50LnJlbGF0ZWRUYXJnZXQudGFnTmFtZSA9PT0gJ01BVC1PUFRJT04nKSB7XG4gICAgICAvLyBGSVhNRTogTmV2ZXIgaGFwcGVucyBhbnltb3JlIGJ1dCBubyBwcm9ibGVtIGJlY2F1c2UgYmx1ciBldmVudCBoYXMgYmVlbiBmaXhlZFxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcblxuICAgICAgLy8gREVCVUdcbiAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIENhbmNlbGxpbmcgZm9jdXMgZXZlbnQnKTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIERFQlVHXG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgU2VsZWN0IGlucHV0IGNvbnRlbnQnKTtcbiAgICBjb25zdCBoYXNDb250ZW50ID0gc2VsZWN0SW5wdXRDb250ZW50RnJvbUV2ZW50KGV2ZW50KTtcblxuICAgIGlmIChoYXNDb250ZW50KSB7XG4gICAgICAvLyBNb3ZlIGNhcmV0IHRvIHRoZSBiZWdpbm5pbmcgKGZpeCBpc3N1ZSBJTUFHSU5FLTQ2OSlcbiAgICAgIHNlbGVjdElucHV0UmFuZ2UoZXZlbnQudGFyZ2V0IGFzIGFueSwgMCwgMCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNob3dQYW5lbE9uRm9jdXMgJiYgdGhpcy5zaG93QWxsT25Gb2N1cykge1xuICAgICAgLy8gSWYgY29tYm8gaXMgZW1wdHksIG9yIGlmIGhhcyBjb250ZW50IGJ1dCBzaG91bGQgZm9yY2UgdG8gc2hvdyBwYW5lbCBvbiBmb2N1c1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIEVtaXQgZm9jdXMgZXZlbnQnKTtcblxuICAgICAgdGhpcy5mb2N1c2VkLmVtaXQoZXZlbnQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmaWx0ZXJJbnB1dFRleHRCbHVyRXZlbnQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcblxuICAgIC8vIEVtaXQgYmx1ciBldmVudFxuICAgIHRoaXMuYmx1cnJlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGZpbHRlckNoaXBzRm9jdXNFdmVudChldmVudDogRm9jdXNFdmVudCkge1xuICAgIC8vIERFQlVHXG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgRm9jdXMgaW4gY2hpcHMgbGlzdCcsIGV2ZW50KTtcblxuICAgIC8vIElnbm9yZSBldmVudCBpbiBidXR0b25cblxuICAgIHRoaXMubWF0SW5wdXRUZXh0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIGNsZWFyVmFsdWUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy53cml0ZVZhbHVlKG51bGwpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuICB9XG5cbiAgX2luaXRBdXRvY29tcGxldGVJbmZpbml0ZVNjcm9sbCh0aHJlc2hvbGQ/OiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuYXV0b2NvbXBsZXRlKSByZXR1cm47IC8vIFNraXBcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBJbml0IGF1dG9jb21wbGV0ZSBzY3JvbGwgbGlzdGVuZXInKTtcblxuICAgIGlmICh0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZSh0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG9wZW5lZCQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuYXV0b2NvbXBsZXRlLl9pc09wZW4gPyB0aW1lcigwKSA6IHRoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5waXBlKGRlYm91bmNlVGltZSgyMDApKTtcbiAgICBjb25zdCBzY3JvbGxFbmQkID0gb3BlbmVkJC5waXBlKFxuICAgICAgbWFwKChfKSA9PiB0aGlzLmdldEF1dG9jb21wbGV0ZVBhbmVsKCkpLFxuICAgICAgZmlsdGVyKGlzTm90TmlsKSxcbiAgICAgIHN3aXRjaE1hcCgocGFuZWwpID0+IGZyb21TY3JvbGxFbmRFdmVudChwYW5lbCwgdGhyZXNob2xkKSksXG4gICAgICB0YWtlVW50aWwodGhpcy5hdXRvY29tcGxldGUuY2xvc2VkKVxuICAgICk7XG5cbiAgICAvLyBUcmlnZ2VyIGZldGNoIG1vcmUsIGVuZCBlbmQgc2Nyb2xsIHJlYWNoZWRcbiAgICB0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24gPSBzY3JvbGxFbmQkLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9mZXRjaE1vcmUkLmVtaXQoKSk7XG5cbiAgICAvLyBSZWdpc3RlciBzdWJzY3JpcHRpb25cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbik7XG4gIH1cblxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmF1dG9jb21wbGV0ZT8uaXNPcGVuIHx8IGZhbHNlO1xuICB9XG5cbiAgY2xvc2VQYW5lbCgpIHtcbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGU/LmlzT3Blbikge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVUcmlnZ2VyPy5jbG9zZVBhbmVsKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVNob3dQYW5lbChldmVudDogRXZlbnQpIHtcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZHJvcEJ1dHRvbkNsaWNrLmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSBhc3luYyBzdWdnZXN0KHZhbHVlOiBhbnksIGZpbHRlcj86IGFueSk6IFByb21pc2U8YW55W10+IHtcbiAgICAvLyBUcmltIHN0cmluZyB2YWx1ZSBiZWZvcmUgc2VhcmNoaW5nXG4gICAgaWYgKHRoaXMudHJpbVNlYXJjaFRleHQgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gICAgfVxuXG4gICAgLy8gQ2FsbCBzdWdnZXN0aW9uIGZ1bmN0aW9uXG4gICAgbGV0IHJlcyA9IGF3YWl0IHRoaXMuc3VnZ2VzdEZuKHZhbHVlLCBmaWx0ZXIpO1xuXG4gICAgLy8gREVCVUdcbiAgICAvL2lmICh0aGlzLmRlYnVnKVxuICAgIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIEZpbHRlcmVkIGl0ZW1zIGJ5IHN1Z2dlc3RGbjonLCB2YWx1ZSwgcmVzKTtcblxuICAgIGlmICghcmVzKSB7XG4gICAgICB0aGlzLl9pdGVtQ291bnQgPSAwO1xuICAgICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX21vcmVJdGVtc0NvdW50ID0gMDtcbiAgICAgIHJlcyA9IFtdO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXMpKSB7XG4gICAgICByZXMgPSByZXMgYXMgYW55W107XG4gICAgICB0aGlzLl9pdGVtQ291bnQgPSByZXM/Lmxlbmd0aCB8fCAwO1xuICAgICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX21vcmVJdGVtc0NvdW50ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyBkYXRhLCB0b3RhbCwgZmV0Y2hNb3JlIH0gPSByZXMgYXMgTG9hZFJlc3VsdDxhbnk+O1xuICAgICAgdGhpcy5faXRlbUNvdW50ID0gdG9OdW1iZXIodG90YWwsIChkYXRhICYmIGRhdGEubGVuZ3RoKSB8fCAwKTtcbiAgICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSBmZXRjaE1vcmU7XG4gICAgICB0aGlzLl9tb3JlSXRlbXNDb3VudCA9IChmZXRjaE1vcmUgJiYgdGhpcy5faXRlbUNvdW50IC0gZGF0YS5sZW5ndGgpIHx8IDA7XG4gICAgICByZXMgPSBkYXRhO1xuICAgIH1cblxuICAgIC8vIEZpbHRlciBvdXQgZXhpc3RpbmcgaXRlbXNcbiAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSAocmVzIHx8IFtdKS5maWx0ZXIoKGl0ZW0xKSA9PiAhdGhpcy52YWx1ZT8uc29tZSgoaXRlbTIpID0+IHRoaXMuZXF1YWxzKGl0ZW0xLCBpdGVtMikpKTtcbiAgICBjb25zdCByZW1vdmVkSXRlbUNvdW50ID0gKHJlcz8ubGVuZ3RoIHx8IDApIC0gKGZpbHRlcmVkRGF0YT8ubGVuZ3RoIHx8IDApO1xuXG4gICAgLy8gRGVjcmVhc2UgdGhlIGl0ZW0gY291bnQsIHdpdGggZGVsdGFcbiAgICB0aGlzLl9pdGVtQ291bnQgLT0gcmVtb3ZlZEl0ZW1Db3VudDtcblxuICAgIC8vIERFQlVHXG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgRmlsdGVyZWQgaXRlbXMgYnkgc3VnZ2VzdEZuOicsIHZhbHVlLCBmaWx0ZXJlZERhdGEpO1xuXG4gICAgcmV0dXJuIGZpbHRlcmVkRGF0YSBhcyBhbnlbXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hNb3JlKCk6IFByb21pc2U8YW55W10+IHtcbiAgICBpZiAoIXRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2spIHJldHVybiBbXTtcblxuICAgIC8vIFNhdmUgdGhlbiByZW1vdmUgZmV0Y2ggZnVuY3Rpb24gKHRvIGF2b2lkIG11bHRpLWNhbGwpXG4gICAgY29uc3QgZmV0Y2hNb3JlRm4gPSB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrO1xuICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCB7IGRhdGEsIHRvdGFsLCBmZXRjaE1vcmUgfSA9IGF3YWl0IGZldGNoTW9yZUZuKCk7XG4gICAgdGhpcy5faXRlbUNvdW50ID0gKHRvdGFsIHx8IHRoaXMuX2l0ZW1Db3VudCkgLSAodGhpcy52YWx1ZT8ubGVuZ3RoIHx8IDApO1xuICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSBmZXRjaE1vcmU7XG4gICAgdGhpcy5fbW9yZUl0ZW1zQ291bnQgPSBNYXRoLm1heCgwLCB0aGlzLl9tb3JlSXRlbXNDb3VudCAtIGRhdGEubGVuZ3RoKTsgLy8gQm9ybmUgbWluID0gMFxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbXBsaWNpdFZhbHVlKGl0ZW1zOiBhbnlbXSkge1xuICAgIC8vIFN0b3JlIGltcGxpY2l0IHZhbHVlICh3aWxsIHVzZSBpdCBvbkJsdXIgaWYgbm90IG90aGVyIHZhbHVlIHNlbGVjdGVkKVxuICAgIGlmIChpdGVtcz8ubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBhcHBseUltcGxpY2l0VmFsdWUgPSB0eXBlb2YgdGhpcy5hcHBseUltcGxpY2l0VmFsdWUgPT09ICdmdW5jdGlvbicgPyB0aGlzLmFwcGx5SW1wbGljaXRWYWx1ZShpdGVtc1swXSkgOiB0aGlzLmFwcGx5SW1wbGljaXRWYWx1ZTtcbiAgICAgIHRoaXMuX2ltcGxpY2l0VmFsdWUgPSBhcHBseUltcGxpY2l0VmFsdWUgPyBpdGVtc1swXSA6IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faW1wbGljaXRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSWZUb3VjaGVkKCkge1xuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnRvdWNoZWQpIHtcbiAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXV0b2NvbXBsZXRlUGFuZWwoKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGVsZSA9IHRoaXMuYXV0b2NvbXBsZXRlPy5vcHRpb25zLmxhc3Q/Ll9nZXRIb3N0RWxlbWVudCgpLnBhcmVudEVsZW1lbnQ7XG4gICAgaWYgKCFlbGUpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICBjb25zb2xlLndhcm4odGhpcy5sb2dQcmVmaXggKyAnIFVuYWJsZSB0byBmaW5kIHRoZSBhdXRvY29tcGxldGUgZGl2Li4uJyk7XG4gICAgfVxuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwcml2YXRlIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrQXNMb2FkaW5nKCkge1xuICAgIGlmICh0aGlzLl8kZmlsdGVyZWRJdGVtcy52YWx1ZSkge1xuICAgICAgdGhpcy5fJGZpbHRlcmVkSXRlbXMubmV4dCh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5faXRlbUNvdW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5faW1wbGljaXRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9tb3JlSXRlbXNDb3VudCA9IDA7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxufVxuIiwiPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWwgfCBhc0Zsb2F0TGFiZWxUeXBlXCJcbiAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgIFtzdWJzY3JpcHRTaXppbmddPVwic3Vic2NyaXB0U2l6aW5nXCJcbiAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1jaGlwc1wiXG4gICAgICA+XG4gICAgICAgIDxkaXYgbWF0UHJlZml4PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRQcmVmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChmbG9hdExhYmVsICE9PSAnbmV2ZXInICYmICEhcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IHBsYWNlaG9sZGVyIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIH1cbiAgICAgICAgPG1hdC1jaGlwLWdyaWQgI2NoaXBMaXN0IChmb2N1cyk9XCJmaWx0ZXJDaGlwc0ZvY3VzRXZlbnQoJGV2ZW50KVwiIFtkaXNhYmxlZF09XCIhcmVhZG9ubHkgJiYgZGlzYWJsZWRcIj5cbiAgICAgICAgICBAZm9yIChpdGVtIG9mIHZhbHVlOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICA8bWF0LWNoaXAtcm93XG4gICAgICAgICAgICAgIGNsYXNzPVwiaW9uLW5vLW1hcmdpblwiXG4gICAgICAgICAgICAgIFtyZW1vdmFibGVdPVwiIWRpc2FibGVkXCJcbiAgICAgICAgICAgICAgKHJlbW92ZWQpPVwicmVtb3ZlKGl0ZW0pXCJcbiAgICAgICAgICAgICAgW2NvbG9yXT1cImNoaXBDb2xvclwiXG4gICAgICAgICAgICAgIFtoaWdobGlnaHRlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgaXRlbSB8IHRvU3RyaW5nOiBkaXNwbGF5V2l0aCB9fVxuICAgICAgICAgICAgICBAaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZT5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L21hdC1jaGlwLXJvdz5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICNtYXRJbnB1dFRleHRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVQb3NpdGlvbl09XCJtYXRBdXRvY29tcGxldGVQb3NpdGlvblwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiX2lucHV0Q29udHJvbFwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmxvYXRMYWJlbCA9PT0gJ25ldmVyJyA/IHBsYWNlaG9sZGVyIDogbnVsbFwiXG4gICAgICAgICAgICBbYXBwQXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgICAgICAgICBbdGFiaW5kZXhdPVwiX3RhYmluZGV4XCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICBbaGlkZGVuXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tlZC5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgKGZvY3VzKT1cImZpbHRlcklucHV0VGV4dEZvY3VzRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoYmx1cik9XCJmaWx0ZXJJbnB1dFRleHRCbHVyRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lc2NhcGUpPVwia2V5ZG93bkVzY2FwZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImtleXVwRW50ZXIuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXl1cC5hcnJvd0Rvd24pPVwiIWF1dG9jb21wbGV0ZS5zaG93UGFuZWwgJiYgZHJvcEJ1dHRvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbbWF0Q2hpcElucHV0Rm9yXT1cImNoaXBMaXN0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L21hdC1jaGlwLWdyaWQ+XG5cbiAgICAgICAgPCEtLSBhdXRvY29tcGxldGUgLS0+XG4gICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgI2F1dG9jb21wbGV0ZT1cIm1hdEF1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgW2F1dG9BY3RpdmVGaXJzdE9wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICBbaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvcl09XCJ0cnVlXCJcbiAgICAgICAgICBbZGlzcGxheVdpdGhdPVwiZGlzcGxheVdpdGhcIlxuICAgICAgICAgIFtjbGFzc109XCJwYW5lbENsYXNzXCJcbiAgICAgICAgICBbcGFuZWxXaWR0aF09XCJwYW5lbFdpZHRoXCJcbiAgICAgICAgICBbZGlzYWJsZVJpcHBsZV09XCJkaXNhYmxlUmlwcGxlXCJcbiAgICAgICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiYWRkKCRldmVudC5vcHRpb24udmFsdWUpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gSGVhZGVycyAtLT5cbiAgICAgICAgICA8aW9uLXJvdyBjbGFzcz1cIm1hdC1hdXRvY29tcGxldGUtaGVhZGVyIGNvbHVtbiBpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgQGZvciAoYXR0ciBvZiBkaXNwbGF5QXR0cmlidXRlczsgdHJhY2sgYXR0cjsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgPGlvbi1jb2wgW3NpemVdPVwiZGlzcGxheUNvbHVtblNpemVzW2ldXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBbaW5uZXJIVE1MXT1cImRpc3BsYXlDb2x1bW5OYW1lc1tpXSB8IHRyYW5zbGF0ZVwiPjwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9pb24tcm93PlxuXG4gICAgICAgICAgQGlmIChfJGZpbHRlcmVkSXRlbXMgfCBwdXNoOiAndXNlckJsb2NraW5nJzsgYXMgaXRlbXMpIHtcbiAgICAgICAgICAgIDwhLS0gTm8gaXRlbSBvcHRpb24gLS0+XG4gICAgICAgICAgICBAaWYgKGl0ZW1zIHwgaXNFbXB0eUFycmF5KSB7XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiaW9uLXBhZGRpbmcgdGV4dC1pdGFsaWNcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGk+e3sgbm9SZXN1bHRNZXNzYWdlIHwgdHJhbnNsYXRlIH19PC9pPlxuICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwhLS0gT3B0aW9ucyAtLT5cbiAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbVwiIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICA8aW9uLXJvdyBbY2xhc3NMaXN0XT1cIml0ZW0uY2xhc3NMaXN0IHx8ICcnXCI+XG4gICAgICAgICAgICAgICAgICBAZm9yIChwYXRoIG9mIGRpc3BsYXlBdHRyaWJ1dGVzOyB0cmFjayBwYXRoOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8aW9uLWNvbCBbc2l6ZV09XCJkaXNwbGF5Q29sdW1uU2l6ZXNbaV1cIiBbdGl0bGVdPVwidGV4dC5pbm5lclRleHRcIiBjbGFzcz1cImlvbi1hbGlnbi1zZWxmLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICN0ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcm9wZXJ0eUdldDogcGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBoaWdobGlnaHQ6IHsgc2VhcmNoOiBtYXRJbnB1dFRleHQudmFsdWUsIHdpdGhBY2NlbnQ6IGhpZ2hsaWdodEFjY2VudCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwhLS0gTW9yZSBpdGVtIC0tPlxuICAgICAgICAgICAgQGlmIChfbW9yZUl0ZW1zQ291bnQpIHtcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKG5nSW5pdCk9XCJfaW5pdEF1dG9jb21wbGV0ZUluZmluaXRlU2Nyb2xsKClcIiBjbGFzcz1cImlvbi1wYWRkaW5nXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgPGlvbi1za2VsZXRvbi10ZXh0IFthbmltYXRlZF09XCJ0cnVlXCIgc3R5bGU9XCJ3aWR0aDogMTAwJVwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IEBlbHNlIGlmICgobWF0SW5wdXRUZXh0LnZhbHVlIHwgc3RyTGVuZ3RoKSA8IHN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQpIHtcbiAgICAgICAgICAgIDwhLS0gTmVlZCBtb3JlIGNoYXJhY3RlcnMgLS0+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImlvbi1wYWRkaW5nIHRleHQtaXRhbGljXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgIDxpb24tbGFiZWw+XG4gICAgICAgICAgICAgICAge3sgJ0lORk8uUExFQVNFX1RZUEVfTU9SRV9DSEFSQUNURVJTJyB8IHRyYW5zbGF0ZTogeyBtaW5MZW5ndGg6IHN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgfSB9fVxuICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDwhLS0gTG9hZGluZyBzcGlubmVyIC0tPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJpb24tcGFkZGluZ1wiIGRpc2FibGVkPlxuICAgICAgICAgICAgICA8aW9uLXNrZWxldG9uLXRleHQgW2FuaW1hdGVkXT1cInRydWVcIiBzdHlsZT1cIndpZHRoOiAxMDAlXCI+PC9pb24tc2tlbGV0b24tdGV4dD5cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8IS0tIGZvb3RlciAtLT5cbiAgICAgICAgICBAaWYgKGl0ZW1Db3VudDsgYXMgY291bnQpIHtcbiAgICAgICAgICAgIDxpb24tcm93IGNsYXNzPVwibWF0LWF1dG9jb21wbGV0ZS1mb290ZXIgaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNsYXNzPVwiaW9uLWZsb2F0LWVuZCBpb24tcGFkZGluZy1lbmRcIj5cbiAgICAgICAgICAgICAgICAgIDxpPnt7ICdDT01NT04uUkVTVUxUX0NPVU5UJyB8IHRyYW5zbGF0ZTogeyBjb3VudDogY291bnQgfSB9fTwvaT5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgfVxuICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG5cbiAgICAgICAgPGRpdiBtYXRTdWZmaXggY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1zdWZmaXgtYm90dG9tXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFN1ZmZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIEBpZiAoZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgICA8bWF0LWVycm9yIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChmb3JtQ29udHJvbC5oYXNFcnJvcignZW50aXR5JykpIHtcbiAgICAgICAgICA8bWF0LWVycm9yIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9JTlZBTElEPC9tYXQtZXJyb3I+XG4gICAgICAgIH1cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdEVycm9yVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBIaW50cyAtLT5cbiAgICAgICAgQGlmICghZm9ybUNvbnRyb2wuaW52YWxpZCkge1xuICAgICAgICAgIDxtYXQtaGludD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRIaW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L21hdC1oaW50PlxuICAgICAgICB9XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRBZnRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG48L2lvbi1ncmlkPlxuXG48bmctdGVtcGxhdGUgI21hdFByZWZpeFRlbXBsYXRlPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0UHJlZml4XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWF0U3VmZml4VGVtcGxhdGU+XG4gIDxidXR0b25cbiAgICBtYXRTdWZmaXhcbiAgICBtYXQtaWNvbi1idXR0b25cbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAoY2xpY2spPVwidG9nZ2xlU2hvd1BhbmVsKCRldmVudClcIlxuICAgIFtoaWRkZW5dPVwiZGlzYWJsZWRcIlxuICAgIFt0aXRsZV09XCJkcm9wQnV0dG9uVGl0bGUgfHwgJycgfCB0cmFuc2xhdGVcIlxuICA+XG4gICAgPG1hdC1pY29uPnt7IG1vYmlsZSA/ICdhcnJvd19kcm9wX2Rvd24nIDogJ2tleWJvYXJkX2Fycm93X2Rvd24nIH19PC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG4gIEBpZiAoY2xlYXJhYmxlKSB7XG4gICAgPGJ1dHRvblxuICAgICAgbWF0U3VmZml4XG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwiY2xlYXJWYWx1ZSgkZXZlbnQpXCJcbiAgICAgIFtoaWRkZW5dPVwiZGlzYWJsZWQgfHwgIWZvcm1Db250cm9sLnZhbHVlXCJcbiAgICAgIFt0aXRsZV09XCJjbGVhckJ1dHRvblRpdGxlIHx8ICcnIHwgdHJhbnNsYXRlXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICB9XG5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21hdEVycm9yVGVtcGxhdGU+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIm1hdC1lcnJvcixbbWF0RXJyb3JdXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtYXRIaW50VGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJtYXQtbWRjLWZvcm0tZmllbGQtaGludC13cmFwcGVyXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWhpbnQ6bm90KFthbGlnbj0nZW5kJ10pLFttYXRIaW50XVwiPjwvbmctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLWhpbnQtc3BhY2VyXCI+PC9kaXY+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWhpbnRbYWxpZ249J2VuZCddXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|