@sumaris-net/ngx-components 1.20.1 → 1.20.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/sumaris-net.ngx-components.umd.js +6 -3
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/doc/changelog.md +4 -0
- package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.js +3 -2
- package/esm2015/src/app/shared/material/chips/material.chips.js +3 -2
- package/esm2015/src/app/shared/material/swipe/material.swipe.js +3 -2
- package/fesm2015/sumaris-net.ngx-components.js +6 -3
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +1 -1
- package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +2 -1
- package/src/app/shared/material/chips/material.chips.d.ts +2 -1
- package/src/app/shared/material/swipe/material.swipe.d.ts +2 -1
- package/sumaris-net.ngx-components.metadata.json +1 -1
|
@@ -570,7 +570,7 @@ MatChipsField.decorators = [
|
|
|
570
570
|
{ type: Component, args: [{
|
|
571
571
|
// eslint-disable-next-line @angular-eslint/component-selector
|
|
572
572
|
selector: 'mat-chips-field',
|
|
573
|
-
template: "<ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"
|
|
573
|
+
template: "<ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n class=\"material-chips\" [class.mat-form-field-disabled]=\"disabled\">\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <mat-label>{{placeholder}}</mat-label>\n <mat-chip-list #chipList\n (focus)=\"filterChipsFocusEvent($event)\" >\n <mat-chip\n *ngFor=\"let item of value\"\n [selectable]=\"false\"\n [removable]=\"!disabled\"\n (removed)=\"remove(item)\"\n [color]=\"chipColor\"\n >\n {{displayWith(item)}}\n <mat-icon matChipRemove *ngIf=\"!disabled\">cancel</mat-icon>\n </mat-chip>\n\n <input #matInputText type=\"text\"\n [matAutocomplete]=\"autocomplete\"\n [matAutocompletePosition]=\"matAutocompletePosition\"\n [formControl]=\"inputControl\"\n [appAutofocus]=\"autofocus\"\n [tabindex]=\"_tabindex\"\n [readonly]=\"disabled\"\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-list>\n\n <!-- autocomplete -->\n <mat-autocomplete #autocomplete=\"matAutocomplete\"\n (optionSelected)=\"add($event)\"\n autoActiveFirstOption\n [displayWith]=\"displayWith\"\n [class]=\"classList\"\n [panelWidth]=\"panelWidth\">\n <ion-row class=\"mat-autocomplete-header ion-no-padding column\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i\" [size]=\"displayColumnSizes[i]\">\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n\n <ng-container *ngIf=\"$filteredItems | async as items; else loadingTemplate\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label>{{noResultMessage | translate}}</ion-label>\n </mat-option>\n\n <mat-option *ngFor=\"let item of items\" [value]=\"item\" class=\"ion-no-padding\">\n <ion-row [classList]=\"item.classList\">\n <ion-col *ngFor=\"let path of displayAttributes; index as i;\"\n [size]=\"displayColumnSizes[i]\">\n <ion-text [innerHTML]=\"item | propertyGet: path | highlight: { search: inputControl.value, withAccent: highlightAccent } \"></ion-text>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <!-- More item -->\n <mat-option *ngIf=\"_moreItemsCount\" (ngInit)=\"_initAutocompleteInfiniteScroll()\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-container>\n\n <!-- footer -->\n <ion-row *ngIf=\"itemCount as count\"\n class=\"mat-autocomplete-footer ion-no-padding\">\n <ion-col>\n <ion-text class=\"ion-float-end ion-padding-end\"><i>{{'COMMON.RESULT_COUNT'|translate: {count: count} }}</i></ion-text>\n </ion-col>\n </ion-row>\n\n <!-- Loading spinner -->\n <ng-template #loadingTemplate>\n <mat-option *ngIf=\"(matInputText.value | strLength) >= suggestLengthThreshold; else waitMoreCharacterTemplate\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-template>\n\n <!-- Need more characters -->\n <ng-template #waitMoreCharacterTemplate>\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 </ng-template>\n </mat-autocomplete>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <ng-content select=\"[matError]\"></ng-content>\n\n </mat-form-field>\n\n </ion-col>\n <ion-col size=\"auto\" class=\"ion-align-self-center\">\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\n<ng-template #matSuffixTemplate>\n <button mat-icon-button tabindex=\"-1\"\n type=\"button\"\n (click)=\"dropButtonClick.emit($event)\"\n [hidden]=\"disabled\">\n <mat-icon class=\"large select-arrow\">arrow_drop_down</mat-icon>\n </button>\n <button mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n",
|
|
574
574
|
providers: [{
|
|
575
575
|
provide: NG_VALUE_ACCESSOR,
|
|
576
576
|
multi: true,
|
|
@@ -591,6 +591,7 @@ MatChipsField.propDecorators = {
|
|
|
591
591
|
formControl: [{ type: Input }],
|
|
592
592
|
formControlName: [{ type: Input }],
|
|
593
593
|
floatLabel: [{ type: Input }],
|
|
594
|
+
appearance: [{ type: Input }],
|
|
594
595
|
placeholder: [{ type: Input }],
|
|
595
596
|
suggestFn: [{ type: Input }],
|
|
596
597
|
required: [{ type: Input }],
|
|
@@ -632,4 +633,4 @@ MatChipsField.propDecorators = {
|
|
|
632
633
|
items: [{ type: Input }]
|
|
633
634
|
};
|
|
634
635
|
export { ɵ0 };
|
|
635
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuY2hpcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9jaGlwcy9tYXRlcmlhbC5jaGlwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDcE0sT0FBTyxFQUF1QixXQUFXLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RyxPQUFPLEVBQUMsZUFBZSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFcEcsT0FBTyxFQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvSCxPQUFPLEVBQUMsZUFBZSxFQUFnQyxzQkFBc0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JILE9BQU8sRUFBQyxVQUFVLEVBQWdCLGtCQUFrQixFQUFFLGdCQUFnQixFQUFDLE1BQU0sY0FBYyxDQUFDO0FBSTVGLE9BQU8sRUFBQyxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNsTCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFP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c0JBQXNCO3FCQWdDaEMsS0FBSzt1QkFhTCxLQUFLO29CQVNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwRGlyZWN0aXZlLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGlzT2JzZXJ2YWJsZSwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtGbG9hdExhYmVsVHlwZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBtZXJnZU1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge01hdEF1dG9jb21wbGV0ZSwgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCwgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7Zm9jdXNJbnB1dCwgSW5wdXRFbGVtZW50LCBzZWxlY3RJbnB1dENvbnRlbnQsIHNlbGVjdElucHV0UmFuZ2V9IGZyb20gJy4uLy4uL2lucHV0cyc7XG5pbXBvcnQge0ZldGNoTW9yZUZuLCBMb2FkUmVzdWx0LCBTdWdnZXN0Rm59IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7RGlzcGxheUZuLCBFcXVhbHNGbn0gZnJvbSAnLi4vLi4vZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQge01hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnfSBmcm9tICcuLi9hdXRvY29tcGxldGUvbWF0ZXJpYWwuYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7Y2hhbmdlQ2FzZVRvVW5kZXJzY29yZSwgaXNOaWwsIGlzTmlsT3JCbGFuaywgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgaXNOb3ROaWxTdHJpbmcsIGpvaW5Qcm9wZXJ0aWVzUGF0aCwgc3VnZ2VzdEZyb21BcnJheSwgdG9Cb29sZWFuLCB0b051bWJlcn0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7Zmlyc3ROb3ROaWxQcm9taXNlfSBmcm9tICcuLi8uLi9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge2Zyb21TY3JvbGxFbmRFdmVudH0gZnJvbSAnLi4vLi4vZXZlbnRzJztcbmltcG9ydCB7UHJlZGVmaW5lZENvbG9yc30gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHtUaGVtZVBhbGV0dGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ21hdC1jaGlwcy1maWVsZCcsXG4gIHN0eWxlVXJsczogWycuL21hdGVyaWFsLmNoaXBzLnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL21hdGVyaWFsLmNoaXBzLmh0bWwnLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgbXVsdGk6IHRydWUsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWF0Q2hpcHNGaWVsZClcbiAgfV0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsIC8vIE5lZWQgZm9yIHRoZSBDU1MgY2xhc3MgJ21hdC1mb3JtLWZpZWxkLXN1ZmZpeCcgb3ZlcnJpZGVcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTWF0Q2hpcHNGaWVsZCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBJbnB1dEVsZW1lbnQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuXG4gIEBJbnB1dCgpIGVxdWFsczogRXF1YWxzRm47XG4gIEBJbnB1dCgpIGxvZ1ByZWZpeCA9ICdbbWF0LWNoaXBzXSAnO1xuICBASW5wdXQoKSBmb3JtQ29udHJvbDogRm9ybUNvbnRyb2w7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTogc3RyaW5nID0gbnVsbDtcbiAgQElucHV0KCkgZmxvYXRMYWJlbDogRmxvYXRMYWJlbFR5cGU7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN1Z2dlc3RGbjogU3VnZ2VzdEZuPGFueSwgYW55PjtcbiAgQElucHV0KCkgcmVxdWlyZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgbW9iaWxlOiBib29sZWFuO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBjbGVhcmFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgZGVib3VuY2VUaW1lOiBudW1iZXIgPSBudWxsO1xuICBASW5wdXQoKSBkaXNwbGF5V2l0aDogRGlzcGxheUZuIHwgbnVsbDtcbiAgQElucHV0KCkgZGlzcGxheUF0dHJpYnV0ZXM6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBkaXNwbGF5Q29sdW1uU2l6ZXM6IChudW1iZXIgfCAnYXV0bycgfCB1bmRlZmluZWQpW107XG4gIEBJbnB1dCgpIGRpc3BsYXlDb2x1bW5OYW1lczogc3RyaW5nW107XG4gIEBJbnB1dCgpIGhpZ2hsaWdodEFjY2VudDogYm9vbGVhbjtcbiAgQElucHV0KCkgc2hvd0FsbE9uRm9jdXM6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNob3dQYW5lbE9uRm9jdXM6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGF1dG9mb2N1czogYm9vbGVhbjtcbiAgQElucHV0KCkgY29uZmlnOiBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZztcbiAgQElucHV0KCkgaTE4blByZWZpeCA9ICdSRUZFUkVOVElBTC4nO1xuICBASW5wdXQoKSBub1Jlc3VsdE1lc3NhZ2UgPSAnQ09NTU9OLk5PX1JFU1VMVCc7XG4gIEBJbnB1dCgnY2xhc3MnKSBjbGFzc0xpc3Q6IHN0cmluZztcbiAgQElucHV0KCkgcGFuZWxXaWR0aDogc3RyaW5nO1xuICBASW5wdXQoKSBtYXRBdXRvY29tcGxldGVQb3NpdGlvbjogJ2F1dG8nIHwgJ2Fib3ZlJyB8ICdiZWxvdyc7XG4gIEBJbnB1dCgpIGl0ZW1TaXplID0gJzQ4cHgnO1xuICBASW5wdXQoKSBmZXRjaE1vcmVUaHJlc2hvbGQ6IHN0cmluZyA9ICcxNSUnO1xuICBASW5wdXQoKSBzdWdnZXN0TGVuZ3RoVGhyZXNob2xkOiBudW1iZXIgPSBudWxsO1xuICBASW5wdXQoKSBzaG93TG9hZGluZ1NwaW5uZXIgPSB0cnVlO1xuICBASW5wdXQoKSBjaGlwQ29sb3I6IFRoZW1lUGFsZXR0ZSB8IFByZWRlZmluZWRDb2xvcnMgPSBudWxsO1xuICBASW5wdXQoKSBkZWJ1ZyA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoJ2NsaWNrJykgY2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcbiAgQE91dHB1dCgnYmx1cicpIGJsdXJyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG4gIEBPdXRwdXQoJ2ZvY3VzJykgZm9jdXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcbiAgQE91dHB1dCgpIGRyb3BCdXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8VUlFdmVudD4odHJ1ZSk7XG4gIEBPdXRwdXQoJ2tleWRvd24uZXNjYXBlJykga2V5ZG93bkVzY2FwZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdrZXl1cC5lbnRlcicpIGtleXVwRW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAVmlld0NoaWxkKCdtYXRJbnB1dFRleHQnKSBtYXRJbnB1dFRleHQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoTWF0QXV0b2NvbXBsZXRlKSBhdXRvY29tcGxldGU6IE1hdEF1dG9jb21wbGV0ZTtcbiAgQFZpZXdDaGlsZChNYXRBdXRvY29tcGxldGVUcmlnZ2VyKSBhdXRvY29tcGxldGVUcmlnZ2VyOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyO1xuXG4gIF90YWJpbmRleDogbnVtYmVyO1xuICAkaW5wdXRJdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KHVuZGVmaW5lZCk7XG4gICRmaWx0ZXJlZEl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4odW5kZWZpbmVkKTtcbiAgaW5wdXRDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gIF9tb3JlSXRlbXNDb3VudDogbnVtYmVyO1xuICBfZmV0Y2hNb3JlJCA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG5cbiAgcHJpdmF0ZSBfb25GZXRjaE1vcmVDYWxsYmFjazogRmV0Y2hNb3JlRm48TG9hZFJlc3VsdDxhbnk+PjtcbiAgcHJpdmF0ZSBfaW1wbGljaXRWYWx1ZTogYW55O1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX2l0ZW1zU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX29wZW5lZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF8kZmlsdGVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgX2l0ZW1Db3VudDogbnVtYmVyO1xuICBwcml2YXRlIF9yZWxvYWQkID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb3JtR3JvdXBEaXI6IEZvcm1Hcm91cERpcmVjdGl2ZVxuICApIHtcbiAgfVxuXG4gIGdldCBpdGVtQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbUNvdW50O1xuICB9XG5cbiAgZ2V0IGNhbkZldGNoTW9yZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayAmJiB0aGlzLl9tb3JlSXRlbXNDb3VudCA+IDA7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZmlsdGVyKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuXyRmaWx0ZXIudmFsdWUpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2NvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBTZXR0aW5nIGZpbHRlcjpcIiwgdmFsdWUpO1xuICAgICAgdGhpcy5fJGZpbHRlci5uZXh0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZmlsdGVyKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuXyRmaWx0ZXIudmFsdWU7XG4gIH1cblxuXG4gIEBJbnB1dCgpIHNldCB0YWJpbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fdGFiaW5kZXggPSB2YWx1ZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IHRhYmluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmluZGV4O1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGl0ZW1zKHZhbHVlOiBPYnNlcnZhYmxlPGFueVtdPiB8IGFueVtdKSB7XG4gICAgLy8gUmVtb3ZlIHByZXZpb3VzIHN1YnNjcmlwdGlvbiBvbiBpdGVtcywgKGlmIGV4aXRzKVxuICAgIGlmICh0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbikge1xuICAgICAgY29uc29sZS53YXJuKHRoaXMubG9nUHJlZml4ICsgJyBJdGVtcyByZWNlaXZlZCB0d2ljZSAhJyk7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24ucmVtb3ZlKHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uKTtcbiAgICAgIHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzT2JzZXJ2YWJsZTxhbnlbXT4odmFsdWUpKSB7XG4gICAgICB0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbiA9IHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgIHZhbHVlLnN1YnNjcmliZSh2ID0+IHtcbiAgICAgICAgICAvL2NvbnNvbGUud2Fybih0aGlzLmxvZ1ByZWZpeCArIFwiIFJlY2VpdmVkIGl0ZW1zOiBcIiwgdik7XG4gICAgICAgICAgdGhpcy4kaW5wdXRJdGVtcy5uZXh0KHYpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLiRpbnB1dEl0ZW1zLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGlucHV0SXRlbXMubmV4dCh2YWx1ZSBhcyBhbnlbXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGl0ZW1zKCk6IE9ic2VydmFibGU8YW55W10+IHwgYW55W10ge1xuICAgIHJldHVybiB0aGlzLiRpbnB1dEl0ZW1zO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSB8fCBbXTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkb25seSB8fCB0aGlzLmZvcm1Db250cm9sLmRpc2FibGVkO1xuICB9XG5cbiAgZ2V0IGVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnJlYWRvbmx5ICYmIHRoaXMuZm9ybUNvbnRyb2wuZW5hYmxlZDtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05pbCh0aGlzLiRmaWx0ZXJlZEl0ZW1zLnZhbHVlKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1Db250cm9sIHx8IHRoaXMuZm9ybUNvbnRyb2xOYW1lICYmIHRoaXMuZm9ybUdyb3VwRGlyICYmIHRoaXMuZm9ybUdyb3VwRGlyLmZvcm0uZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKSBhcyBGb3JtQ29udHJvbDtcbiAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBtYW5kYXRvcnkgYXR0cmlidXRlIFxcJ2Zvcm1Db250cm9sXFwnIG9yIFxcJ2Zvcm1Db250cm9sTmFtZVxcJyBpbiA8bWF0LWNoaXBzLWZpZWxkPi4nKTtcblxuICAgIC8vIENvbmZpZ3VyYXRpb24gZnJvbSBjb25maWcgb2JqZWN0XG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLnN1Z2dlc3RGbiA9IHRoaXMuc3VnZ2VzdEZuIHx8IHRoaXMuY29uZmlnLnN1Z2dlc3RGbjtcbiAgICAgIGlmICghdGhpcy5zdWdnZXN0Rm4gJiYgdGhpcy5jb25maWcuaXRlbXMpIHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuY29uZmlnLml0ZW1zO1xuICAgICAgfVxuICAgICAgdGhpcy5maWx0ZXIgPSB0aGlzLmZpbHRlciB8fCB0aGlzLmNvbmZpZy5maWx0ZXI7XG4gICAgICB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzID0gdGhpcy5kaXNwbGF5QXR0cmlidXRlcyB8fCB0aGlzLmNvbmZpZy5hdHRyaWJ1dGVzO1xuICAgICAgdGhpcy5kaXNwbGF5Q29sdW1uU2l6ZXMgPSB0aGlzLmRpc3BsYXlDb2x1bW5TaXplcyB8fCB0aGlzLmNvbmZpZy5jb2x1bW5TaXplcztcbiAgICAgIHRoaXMuZGlzcGxheUNvbHVtbk5hbWVzID0gdGhpcy5kaXNwbGF5Q29sdW1uTmFtZXMgfHwgdGhpcy5jb25maWcuY29sdW1uTmFtZXM7XG4gICAgICB0aGlzLmRpc3BsYXlXaXRoID0gdGhpcy5kaXNwbGF5V2l0aCB8fCB0aGlzLmNvbmZpZy5kaXNwbGF5V2l0aDtcbiAgICAgIHRoaXMuZXF1YWxzID0gdGhpcy5lcXVhbHMgfHwgdGhpcy5jb25maWcuZXF1YWxzO1xuICAgICAgdGhpcy5tb2JpbGUgPSB0b0Jvb2xlYW4odGhpcy5tb2JpbGUsIHRoaXMuY29uZmlnLm1vYmlsZSk7XG4gICAgICB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgPSB0b051bWJlcih0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQsIHRoaXMuY29uZmlnLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgfHwgMCk7XG4gICAgICB0aGlzLnNob3dBbGxPbkZvY3VzID0gdG9Cb29sZWFuKHRoaXMuc2hvd0FsbE9uRm9jdXMsIHRvQm9vbGVhbih0aGlzLmNvbmZpZy5zaG93QWxsT25Gb2N1cywgdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkIDw9IDApKTtcbiAgICAgIHRoaXMuc2hvd1BhbmVsT25Gb2N1cyA9IHRvQm9vbGVhbih0aGlzLnNob3dQYW5lbE9uRm9jdXMsIHRvQm9vbGVhbih0aGlzLmNvbmZpZy5zaG93UGFuZWxPbkZvY3VzLCB0cnVlKSk7XG4gICAgICB0aGlzLmNsYXNzTGlzdCA9IHRoaXMuY2xhc3NMaXN0IHx8IHRoaXMuY29uZmlnLmNsYXNzO1xuICAgICAgdGhpcy5kZWJvdW5jZVRpbWUgPSB0b051bWJlcih0aGlzLmRlYm91bmNlVGltZSwgdGhpcy5jb25maWcuZGVib3VuY2VUaW1lKTtcbiAgICAgIHRoaXMuaGlnaGxpZ2h0QWNjZW50ID0gIHRvQm9vbGVhbih0aGlzLmhpZ2hsaWdodEFjY2VudCwgdG9Cb29sZWFuKHRoaXMuY29uZmlnLmhpZ2hsaWdodEFjY2VudCkpO1xuICAgIH1cblxuICAgIC8vIERlZmF1bHQgdmFsdWVzXG4gICAgdGhpcy5kaXNwbGF5QXR0cmlidXRlcyA9IHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMgfHwgdGhpcy5maWx0ZXI/LmF0dHJpYnV0ZXMgfHwgWydsYWJlbCcsICduYW1lJ107XG4gICAgdGhpcy5kaXNwbGF5V2l0aCA9IHRoaXMuZGlzcGxheVdpdGggfHwgKChvYmopID0+IG9iaiAmJiBqb2luUHJvcGVydGllc1BhdGgob2JqLCB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzKSk7XG4gICAgdGhpcy5kaXNwbGF5Q29sdW1uU2l6ZXMgPSB0aGlzLmRpc3BsYXlDb2x1bW5TaXplc1xuICAgICAgLy8gaWYgb25seSBjb2x1bW46IGF1dG8gc2l6ZVxuICAgICAgfHwgKHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMubGVuZ3RoID09PSAxICYmIFt1bmRlZmluZWRdKVxuICAgICAgLy8gQ29tcHV0ZWQgY29sdW1uIHNpemU6XG4gICAgICAvLyAtIGlmIGxhYmVsIHRoZW4gY29sIHNpemUgPSAyXG4gICAgICAvLyAtIGlmIHJhbmtPcmRlciB0aGVuIGNvbCBzaXplID0gMVxuICAgICAgLy8gLSBlc2UgPT4gYXV0byBzaXplXG4gICAgICB8fCB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzLm1hcChhdHRyID0+XG4gICAgICAgIGF0dHIgJiYgKGF0dHIuZW5kc1dpdGgoJ2xhYmVsJykgPyAzXG4gICAgICAgIDogKGF0dHIuZW5kc1dpdGgoJ3JhbmtPcmRlcicpID8gMlxuICAgICAgICAgIDogdW5kZWZpbmVkKSkpO1xuICAgIHRoaXMuZGlzcGxheUNvbHVtbk5hbWVzID0gdGhpcy5kaXNwbGF5QXR0cmlidXRlcy5tYXAoKGF0dHIsIGluZGV4KSA9PiB0aGlzLmRpc3BsYXlDb2x1bW5OYW1lcyAmJiB0aGlzLmRpc3BsYXlDb2x1bW5OYW1lc1tpbmRleF0gfHxcbiAgICAgICh0aGlzLmkxOG5QcmVmaXggKyBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlKGF0dHIpLnRvVXBwZXJDYXNlKCkpKTtcbiAgICB0aGlzLm1vYmlsZSA9IHRvQm9vbGVhbih0aGlzLm1vYmlsZSwgZmFsc2UpO1xuICAgIHRoaXMuZXF1YWxzID0gdGhpcy5lcXVhbHMgfHwgKChvMSwgbzIpID0+IG8xICYmIG8yICYmIG8xLmlkID09PSBvMi5pZCk7XG4gICAgY29uc3QgY2xhc3NMaXN0ID0gdGhpcy5jbGFzc0xpc3Q/LnNwbGl0KCcgJyk7XG4gICAgdGhpcy5wYW5lbFdpZHRoID0gdGhpcy5wYW5lbFdpZHRoIHx8IChjbGFzc0xpc3QgJiYgKFxuICAgICAgKGNsYXNzTGlzdC5pbmNsdWRlcygnbWluLXdpZHRoLW1lZGl1bScpICYmICczMDBweCcpXG4gICAgICB8fCAoY2xhc3NMaXN0LmluY2x1ZGVzKCdtaW4td2lkdGgtbGFyZ2UnKSAmJiAnNDAwcHgnKVxuICAgICAgfHwgKGNsYXNzTGlzdC5pbmNsdWRlcygnbWluLXdpZHRoLXhsYXJnZScpICYmICc0NTBweCcpXG4gICAgICB8fCAoY2xhc3NMaXN0LmluY2x1ZGVzKCdtYXQtYXV0b2NvbXBsZXRlLXBhbmVsLWZ1bGwtc2l6ZScpICYmICcxMDB2dycpXG4gICAgKSk7XG4gICAgdGhpcy5zaG93UGFuZWxPbkZvY3VzID0gdG9Cb29sZWFuKHRoaXMuc2hvd1BhbmVsT25Gb2N1cywgdHJ1ZSk7XG4gICAgdGhpcy5kZWJvdW5jZVRpbWUgPSB0b051bWJlcih0aGlzLmRlYm91bmNlVGltZSwgMjUwKTtcbiAgICB0aGlzLmhpZ2hsaWdodEFjY2VudCA9IHRvQm9vbGVhbih0aGlzLmhpZ2hsaWdodEFjY2VudCwgZmFsc2UpO1xuICAgIHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCA9IHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCB8fCAwO1xuICAgIHRoaXMubWF0QXV0b2NvbXBsZXRlUG9zaXRpb24gPSB0aGlzLm1hdEF1dG9jb21wbGV0ZVBvc2l0aW9uIHx8ICh0aGlzLm1vYmlsZSA/ICdhYm92ZScgOiAnYXV0bycpOyAvLyBPbiBtb2JpbGUsIHNldCBwb3NpdGlvbiB0byBhYm92ZSAoYmVjYXVzZSBvZiBib3R0b20ga2V5Ym9hcmQpXG5cbiAgICAvLyBObyBzdWdnZXN0Rm46IGZpbHRlciBvbiB0aGUgZ2l2ZW4gaXRlbXNcbiAgICBpZiAoIXRoaXMuc3VnZ2VzdEZuKSB7XG4gICAgICBjb25zdCBzdWdnZXN0RnJvbUFycmF5Rm46IFN1Z2dlc3RGbjxhbnksIGFueT4gPSBhc3luYyAodmFsdWUsIGZpbHRlcikgPT4ge1xuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBDYWxsaW5nIHN1Z2dlc3RGcm9tQXJyYXkgd2l0aCB2YWx1ZT0nLCB2YWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIHN1Z2dlc3RGcm9tQXJyYXkodGhpcy4kaW5wdXRJdGVtcy52YWx1ZSwgdmFsdWUsIHtcbiAgICAgICAgICBzZWFyY2hBdHRyaWJ1dGVzOiB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzLFxuICAgICAgICAgIC4uLmZpbHRlclxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICAvLyBXYWl0IChvbmNlKSB0aGF0IGl0ZW1zIGFyZSBsb2FkZWQsIHRoZW4gY2FsbCBzdWdnZXN0IGZyb20gYXJyYXkgZm5cbiAgICAgIHRoaXMuc3VnZ2VzdEZuID0gYXN5bmMgKHZhbHVlLCBmaWx0ZXIpID0+IHtcbiAgICAgICAgaWYgKGlzTmlsKHRoaXMuJGlucHV0SXRlbXMudmFsdWUpKSB7XG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbbWF0LWNoaXBzXSBXYWl0aW5nIGl0ZW1zIHRvIGJlIHNldC4uLicpO1xuXG4gICAgICAgICAgYXdhaXQgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMuJGlucHV0SXRlbXMpO1xuXG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbbWF0LWNoaXBzXSBSZWNlaXZlZCBpdGVtczonLCB0aGlzLiRpbnB1dEl0ZW1zLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN1Z2dlc3RGbiA9IHN1Z2dlc3RGcm9tQXJyYXlGbjtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VnZ2VzdEZuKHZhbHVlLCBmaWx0ZXIpOyAvLyBMb29wXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFNlbmQgdmFsdWUgdG8gc3VnZ2VzdCB3aGVuIDpcbiAgICAvLyAtIGlzIG5pbCBhbmQgJyonLCBhbmQgbm8gbWluIGxlbmd0aCB0aHJlc2hvbGRcbiAgICAvLyAtIGlzIG5vdCBuaWwgYW5kIG5vdCBhIHN0cmluZyB0eXBlIChlLmcuIG9iamVjdClcbiAgICAvLyAtIGlzIG5vdCBuaWwgYW5kIGlzIGEgc3RyaW5nLCBhbmQgaGFzIGVub3VnaCBjaGFyYWN0ZXJcbiAgICBjb25zdCB0aHJlc2hvbGRGaWx0ZXJGbiA9ICh2YWx1ZSkgPT4gKGlzTmlsT3JCbGFuayh2YWx1ZSkgfHwgKHZhbHVlID09PSAnKicpXG4gICAgICAgID8gKHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCA8PSAwKVxuICAgICAgICA6ICghKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgfHwgdmFsdWUubGVuZ3RoID49IHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZClcbiAgICApO1xuXG4gICAgY29uc3QgZmlsdGVyZWRJdGVtc0NoYW5nZXMgPSBtZXJnZShcblxuICAgICAgLy8gUmVsb2FkIGV2ZW50IChubyBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpIHBpcGUsIHRvIGZvcmNlIHJlbG9hZCBldmVuIGlmIHNhbWUgdmFsdWUpXG4gICAgICB0aGlzLl9yZWxvYWQkLFxuXG4gICAgICB0aGlzLmlucHV0Q29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKHZhbHVlID0+IHRoaXMuZW5hYmxlZCAmJiBpc05vdE5pbFN0cmluZyh2YWx1ZSkpLFxuICAgICAgICAgIC8vIE1hcmsgYXMgbG9hZGluZyAodG8gc2hvdyBsb2FkaW5nIHNwaW5uZXIpIC0gZWFybGllciBhcyBwb3NzaWJsZSwgc28gYmVmb3JlIHRoZSBkZWJvdW5jZSB0aW1lXG4gICAgICAgICAgdGFwKF8gPT4gdGhpcy5zaG93TG9hZGluZ1NwaW5uZXIgJiYgdGhpcy5tYXJrQXNMb2FkaW5nKCkpLFxuICAgICAgICAgIC8vIEZpbHRlciBpZiBub3QgZW5vdWdoIGNoYXJhY3RlclxuICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiB2YWx1ZS5sZW5ndGggPj0gdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkKSxcbiAgICAgICAgICAvLyBXYWl0IGEgZGVib3VuY2UgdGltZVxuICAgICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZSlcbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC8vLHRhcCgodmFsdWUpID0+IHRoaXMuZGVidWcgJiYgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgU2VhcmNoIHRleHQgY2hhbmdlczonLCB2YWx1ZSkpXG4gICAgICAgICksXG5cbiAgICAgIC8vIE9iamVjdCBzZXQ6IHVzZSBpdCAobm8gZGlzdGluY3RVbnRpbENoYW5nZWQoKSBwaXBlIG5lZWQpXG4gICAgICB0aGlzLmlucHV0Q29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoPGFueSwgYW55Pih0aGlzLmlucHV0Q29udHJvbC52YWx1ZSksXG4gICAgICAgICAgZmlsdGVyKHZhbHVlID0+IGlzTm90TmlsKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSxcbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC8vdGFwKHZhbHVlID0+IHRoaXMuZGVidWcgJiYgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgYW4gb2JqZWN0IHZhbHVlOiAnLCB2YWx1ZSkpXG4gICAgICAgICksXG5cbiAgICAgIC8vIE9uIGRyb3Bkb3duIGJ1dHRvbiBjbGljayAobm8gZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgbm9yIGRlYm91bmNlVGltZSlcbiAgICAgIHRoaXMuZHJvcEJ1dHRvbkNsaWNrXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcihldmVudCA9PiB0aGlzLmVuYWJsZWQgJiYgKCFldmVudCB8fCAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkpLFxuICAgICAgICAgIHRhcChfID0+IHRoaXMubWF0SW5wdXRUZXh0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSksXG4gICAgICAgICAgbWFwKF8gPT4gdGhpcy5zaG93QWxsT25Gb2N1cyA/ICcqJyA6IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpLFxuICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggY2hhcmFjdGVyc1xuICAgICAgICAgIGZpbHRlcih0aHJlc2hvbGRGaWx0ZXJGbilcbiAgICAgICAgKSxcblxuICAgICAgLy8gTWVyZ2Ugc29tZSBvYnNlcnZhYmxlcywgd2l0aCBhIGNvbW1vbiBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpIHBpcGUsIGFuZCBOTyBkZWJvdW5jZVRpbWVcbiAgICAgIG1lcmdlKFxuICAgICAgICAvLyBGb2N1cyBvciBjbGljayA9PiBMb2FkIGFsbFxuICAgICAgICBtZXJnZSh0aGlzLmZvY3VzZWQsIHRoaXMuY2xpY2tlZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIGZpbHRlcihfID0+IHRoaXMuZW5hYmxlZCksXG4gICAgICAgICAgICBtYXAoKF8pID0+IHRoaXMuc2hvd0FsbE9uRm9jdXMgPyAnKicgOiB0aGlzLmlucHV0Q29udHJvbC52YWx1ZSlcblxuICAgICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAgIC8vLHRhcCh2YWx1ZSA9PiB0aGlzLmRlYnVnICYmIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFJlY2VpdmVkIGZvY3VzZWQgb3IgY2xpY2tlZCBldmVudDogJywgdmFsdWUpKVxuICAgICAgICAgICksXG4gICAgICAgIG1lcmdlKHRoaXMuJGlucHV0SXRlbXMsIHRoaXMuXyRmaWx0ZXIpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoXyA9PiB0aGlzLmVuYWJsZWQpLFxuICAgICAgICAgICAgbWFwKF8gPT4gdGhpcy5pbnB1dENvbnRyb2wudmFsdWUpLFxuXG4gICAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgICAgLy90YXAodmFsdWUgPT4gdGhpcy5kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCAkaW5wdXRJdGVtcyBvciBmaWx0ZXIgZXZlbnQ6ICcsIHZhbHVlKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggY2hhcmFjdGVyc1xuICAgICAgICAgIGZpbHRlcih0aHJlc2hvbGRGaWx0ZXJGbiksXG4gICAgICAgICAgLy8gRGlzdGluZ3Vpc2ggY2hhbmdlc1xuICAgICAgICAgIC8vIC0gZG8gTk9UIGZpbHRlciBpZiBsb2FkaW5nLCB0byBmb3JjZSB1cGRhdGUgYWZ0ZXIgYSBibHVyIGV2ZW50XG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHYxLCB2MikgPT4gIXRoaXMubG9hZGluZyAmJiAodjEgPT09IHYyIHx8IHRoaXMuZXF1YWxzKHYxLCB2MikpKVxuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgLy8sdGFwKHZhbHVlID0+IHRoaXMuZGVidWcgJiYgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgdXBkYXRlIGV2ZW50OiAnLCB2YWx1ZSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5waXBlKFxuXG4gICAgICAgIC8vIFN1Z2dlc3QgdmFsdWVzXG4gICAgICAgIG1lcmdlTWFwKHZhbHVlID0+IHRoaXMuc3VnZ2VzdCh2YWx1ZSwgdGhpcy5maWx0ZXIpKSxcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy90YXAoaXRlbXMgPT4gdGhpcy5kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCBmcm9tIHN1Z2dlc3Q6ICcsIGl0ZW1zKSksXG5cbiAgICAgICAgLy8gU3RvcmUgaW1wbGljaXQgdmFsdWUgKHdpbGwgdXNlIGl0IG9uQmx1ciBpZiBub3Qgb3RoZXIgdmFsdWUgc2VsZWN0ZWQpXG4gICAgICAgIHRhcChpdGVtcyA9PiB0aGlzLnVwZGF0ZUltcGxpY2l0VmFsdWUoaXRlbXMpKVxuICAgICAgKTtcblxuICAgIC8vIEZldGNoIG1vcmUgZXZlbnRzXG4gICAgY29uc3QgZmV0Y2hNb3JlSXRlbXNDaGFuZ2VzID0gdGhpcy5fZmV0Y2hNb3JlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcChldmVudCA9PiBldmVudD8ucHJldmVudERlZmF1bHQoKSksIC8vIEF2b2lkIHRvIGNsb3NlIHRoZSBtYXQtc2VsZWN0XG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmNhbkZldGNoTW9yZSksXG4gICAgICAgIG1lcmdlTWFwKCgpID0+IHRoaXMuZmV0Y2hNb3JlKCkpLFxuXG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vdGFwKG1vcmVJdGVtcyA9PiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCBmcm9tIGZldGNoIE1vcmU6ICcsIG1vcmVJdGVtcykpLFxuXG4gICAgICAgIC8vIENvbmNhdCB0byBleGlzdGluZyBpdGVtc1xuICAgICAgICBtYXAobW9yZUl0ZW1zID0+ICh0aGlzLiRmaWx0ZXJlZEl0ZW1zLnZhbHVlIHx8IFtdKS5jb25jYXQobW9yZUl0ZW1zKSlcbiAgICAgICk7XG5cbiAgICAvLyBVcGRhdGUgZmlsdGVyZWQgaXRlbXNcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgbWVyZ2UoXG4gICAgICAgIHRoaXMuJGlucHV0SXRlbXMsXG5cbiAgICAgICAgLy8gVXBkYXRlIGl0ZW1zIGV2ZW50c1xuICAgICAgICBmaWx0ZXJlZEl0ZW1zQ2hhbmdlcyxcblxuICAgICAgICAvLyBGZXRjaCBtb3JlIGV2ZW50c1xuICAgICAgICBmZXRjaE1vcmVJdGVtc0NoYW5nZXNcbiAgICAgIClcbiAgICAgICAgLy8gRW1pdCBpdGVtc1xuICAgICAgICAuc3Vic2NyaWJlKGl0ZW1zID0+IHRoaXMuJGZpbHRlcmVkSXRlbXMubmV4dChpdGVtcykpXG4gICAgKTtcblxuICAgIC8vIEFwcGx5aW5nIGltcGxpY2l0IHZhbHVlLCBvbiBibHVyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuYmx1cnJlZFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoXyA9PiB0aGlzLmZvcm1Db250cm9sLnZhbHVlKVxuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgLy8sdGFwKHZhbHVlID0+IHRoaXMuZGVidWcgJiYgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgYmx1cnJlZCBldmVudDogJywgdmFsdWUpKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgICAvLyBXaGVuIGxlYXZlIGNvbXBvbmVudCB3aXRob3V0IG9iamVjdCwgdXNlIGltcGxpY2l0IHZhbHVlIGlmIDpcbiAgICAgICAgICAvLyAtIGFuIGV4cGxpY2l0IHZhbHVlXG4gICAgICAgICAgLy8gLSBmaWVsZCBpcyBub3QgZW1wdHkgKHVzZXIgZmlsbCBzb21ldGhpbmcpXG4gICAgICAgICAgLy8gLSBPUiBmaWVsZCBlbXB0eSBidXQgaXMgcmVxdWlyZWRcbiAgICAgICAgICBpZiAodGhpcy5faW1wbGljaXRWYWx1ZSAmJiAoKHRoaXMucmVxdWlyZWQgJiYgaXNOaWxPckJsYW5rKHZhbHVlKSkgfHwgKGlzTm90TmlsT3JCbGFuayh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykpKSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5faW1wbGljaXRWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1BlbmRpbmcoe2VtaXRFdmVudDogZmFsc2UsIG9ubHlTZWxmOiB0cnVlfSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDogZmFsc2UsIG9ubHlTZWxmOiB0cnVlfSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrSWZUb3VjaGVkKCk7XG4gICAgICAgICAgICB0aGlzLiRmaWx0ZXJlZEl0ZW1zLm5leHQoW3RoaXMuX2ltcGxpY2l0VmFsdWVdKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTmlsT3JCbGFuayh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZShudWxsKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzUGVuZGluZyh7ZW1pdEV2ZW50OiBmYWxzZSwgb25seVNlbGY6IHRydWV9KTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiBmYWxzZSwgb25seVNlbGY6IHRydWV9KTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZlRvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMuJGZpbHRlcmVkSXRlbXMubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9pbXBsaWNpdFZhbHVlID0gbnVsbDsgLy8gcmVzZXQgdGhlIGltcGxpY2l0IHZhbHVlXG4gICAgICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7IC8vIENsb25lIHBhbmVsXG4gICAgICAgIH0pKTtcblxuICAgIC8vIExpc3RlbiBmb3JtIGNvbnRyb2wgc3RhdHVzIGNoYW5nZVxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnN0YXR1c0NoYW5nZXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy9maWx0ZXIoKCkgPT4gdGhpcy5lbmFibGVkKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLy8gVXBkYXRlIGNvbXBvbmVudCBzdGF0ZVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2hlY2tJZlRvdWNoZWQoKSlcbiAgICApO1xuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMua2V5ZG93bkVzY2FwZS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAvLyBBdm9pZCBmb3JtIG9yIHBhZ2UgdG8gbWFuYWdlIGVzY2FwZSBldmVudFxuICAgICAgICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgXCIgQ2xvc2luZyB0aGUgcGFuZWwgKGtleWRvd24uZXNjYXBlKVwiKTtcblxuICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICBpZiAodGhpcy5faXRlbXNTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLiRpbnB1dEl0ZW1zLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4kaW5wdXRJdGVtcy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuJGZpbHRlcmVkSXRlbXMuY29tcGxldGUoKTtcbiAgICB0aGlzLiRmaWx0ZXJlZEl0ZW1zLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fcmVsb2FkJC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuXyRmaWx0ZXIuY29tcGxldGUoKTtcblxuICAgIHRoaXMuZHJvcEJ1dHRvbkNsaWNrLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5jbGlja2VkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5ibHVycmVkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5mb2N1c2VkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5rZXlkb3duRXNjYXBlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5rZXl1cEVudGVyLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZmV0Y2hNb3JlJC5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy5faW1wbGljaXRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmZvcm1Db250cm9sID0gbnVsbDtcbiAgICB0aGlzLmRpc3BsYXlXaXRoID0gbnVsbDtcbiAgICB0aGlzLmVxdWFscyA9IG51bGw7XG4gICAgdGhpcy5zdWdnZXN0Rm4gPSBudWxsO1xuICAgIHRoaXMuJGZpbHRlcmVkSXRlbXMgPSBudWxsO1xuICAgIHRoaXMuY29uZmlnID0gbnVsbDtcbiAgICB0aGlzLmNsYXNzTGlzdCA9IG51bGw7XG5cbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gbnVsbDtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IG51bGw7XG4gICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IG51bGw7XG5cbiAgICAvLyBEZXN0cm95IHRoZSAnYXV0b2NvbXBsZXRlJyBpbnN0YW5jZSwgdG8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGUpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLm5nT25EZXN0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBpdGVtIHRvIGNoaXBzXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKi9cbiAgYWRkKGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KSB7XG5cbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmxvZ1ByZWZpeH1zZWxlY3RgLCBldmVudCk7XG5cbiAgICBjb25zdCBpdGVtID0gZXZlbnQub3B0aW9uLnZhbHVlO1xuICAgIHRoaXMud3JpdGVWYWx1ZShbLi4udGhpcy52YWx1ZSwgaXRlbV0pO1xuICAgIHRoaXMubWF0SW5wdXRUZXh0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB0aGlzLmlucHV0Q29udHJvbC5zZXRWYWx1ZSgnJyk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgaXRlbSBmcm9tIGNoaXBzXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtXG4gICAqL1xuICByZW1vdmUoaXRlbTogYW55KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIGNvbnN0IGluZGV4ID0gdmFsdWUgPyB2YWx1ZS5pbmRleE9mKGl0ZW0pIDogLTE7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZS5zbGljZSgpO1xuICAgICAgbmV3VmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgdG8gcmVsb2FkIGNvbnRlbnQuIFVzZWZ1bCB3aGVuIGZpbHRlciBoYXMgYmVlbiBjaGFuZ2VkIGJ1dCBub3QgZGV0ZWN0ZWRcbiAgICovXG4gIHJlbG9hZEl0ZW1zKHZhbHVlPzogYW55KSB7XG4gICAgLy8gRm9yY2UgYSByZWZyZXNoXG4gICAgdGhpcy5fcmVsb2FkJC5uZXh0KHZhbHVlIHx8ICcqJyk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnlbXSk6IHZvaWQge1xuICAgIC8vIERFQlVHXG4gICAgLy8gaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFdyaXRpbmcgdmFsdWU6ICcsIHZhbHVlKTtcblxuICAgIGlmICh2YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gW3ZhbHVlXTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmZvcm1Db250cm9sLnZhbHVlKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgV3JpdGluZyB2YWx1ZTogJywgdmFsdWUpO1xuXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUodmFsdWUsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGlzRGlzYWJsZWQgJiYgdGhpcy5hdXRvY29tcGxldGU/LmlzT3Blbikge1xuICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG4gICAgfVxuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICBmb2N1c0lucHV0KHRoaXMubWF0SW5wdXRUZXh0KTtcbiAgfVxuXG4gIGZpbHRlcklucHV0VGV4dEZvY3VzRXZlbnQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcblxuICAgIC8vIElnbm9yZSBldmVudCBmcm9tIG1hdC1vcHRpb25cbiAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGV2ZW50LnJlbGF0ZWRUYXJnZXQudGFnTmFtZSA9PT0gJ01BVC1PUFRJT04nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuXG4gICAgICAvLyBERUJVR1xuICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgQ2FuY2VsbGluZyBmb2N1cyBldmVudCcpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gREVCVUdcbiAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBTZWxlY3QgaW5wdXQgY29udGVudCcpO1xuICAgIGNvbnN0IGhhc0NvbnRlbnQgPSBzZWxlY3RJbnB1dENvbnRlbnQoZXZlbnQpO1xuXG4gICAgLy8gSWYgY29tYm8gaXMgZW1wdHksIG9yIGlmIGhhcyBjb250ZW50IGJ1dCBzaG91bGQgZm9yY2UgdG8gc2hvdyBwYW5lbCBvbiBmb2N1c1xuICAgIGlmICghaGFzQ29udGVudCB8fCAodGhpcy5zaG93UGFuZWxPbkZvY3VzICYmIHRoaXMuc2hvd0FsbE9uRm9jdXMpKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgRW1pdCBmb2N1cyBldmVudCcpO1xuXG4gICAgICB0aGlzLmZvY3VzZWQuZW1pdChldmVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZmlsdGVySW5wdXRUZXh0Qmx1ckV2ZW50KGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgaWYgKCFldmVudCB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG5cbiAgICAvLyBJZ25vcmUgZXZlbnQgZnJvbSBtYXQtb3B0aW9uXG4gICAgaWYgKGV2ZW50LnJlbGF0ZWRUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBldmVudC5yZWxhdGVkVGFyZ2V0LnRhZ05hbWUgPT09ICdNQVQtT1BUSU9OJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcblxuICAgICAgLy9ERUJVR1xuICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArIFwiIENhbmNlbGxpbmcgYmx1ciBldmVudFwiKTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIERFQlVHXG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgQmx1cjogbW92ZSBjYXJldCB0byB0aGUgYmVnaW5uaW5nJyk7XG5cbiAgICAvLyBNb3ZlIGNhcmV0IHRvIHRoZSBiZWdpbm5pbmcgKGZpeCBpc3N1ZSBJTUFHSU5FLTQ2OSlcbiAgICBzZWxlY3RJbnB1dFJhbmdlKGV2ZW50LnRhcmdldCBhcyBhbnksIDAsIDApO1xuXG4gICAgdGhpcy5ibHVycmVkLmVtaXQoZXZlbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZmlsdGVyQ2hpcHNGb2N1c0V2ZW50KGV2ZW50OiBGb2N1c0V2ZW50KXtcbiAgICAvLyBERUJVR1xuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBGb2N1cyBpbiBjaGlwcyBsaXN0JywgZXZlbnQpO1xuXG4gICAgLy8gSWdub3JlIGV2ZW50IGluIGJ1dHRvblxuXG4gICAgdGhpcy5tYXRJbnB1dFRleHQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgY2xlYXJWYWx1ZShldmVudDogVUlFdmVudCkge1xuICAgIHRoaXMud3JpdGVWYWx1ZShudWxsKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIF9pbml0QXV0b2NvbXBsZXRlSW5maW5pdGVTY3JvbGwodGhyZXNob2xkPzogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmF1dG9jb21wbGV0ZSkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgSW5pdCBhdXRvY29tcGxldGUgc2Nyb2xsIGxpc3RlbmVyJyk7XG5cbiAgICBpZiAodGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5yZW1vdmUodGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcGVuZWQkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLmF1dG9jb21wbGV0ZS5faXNPcGVuXG4gICAgICA/IHRpbWVyKDApXG4gICAgICA6IHRoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5waXBlKGRlYm91bmNlVGltZSgyMDApKTtcbiAgICBjb25zdCBzY3JvbGxFbmQkID0gb3BlbmVkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoXykgPT4gdGhpcy5nZXRBdXRvY29tcGxldGVQYW5lbCgpKSxcbiAgICAgICAgZmlsdGVyKGlzTm90TmlsKSxcbiAgICAgICAgc3dpdGNoTWFwKChwYW5lbCkgPT4gZnJvbVNjcm9sbEVuZEV2ZW50KHBhbmVsLCB0aHJlc2hvbGQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5hdXRvY29tcGxldGUuY2xvc2VkKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgIC8vIFRyaWdnZXIgZmV0Y2ggbW9yZSwgZW5kIGVuZCBzY3JvbGwgcmVhY2hlZFxuICAgIHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbiA9IHNjcm9sbEVuZCRcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fZmV0Y2hNb3JlJC5lbWl0KCkpO1xuXG4gICAgLy8gUmVnaXN0ZXIgc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZCh0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hdXRvY29tcGxldGU/LmlzT3BlbiB8fCBmYWxzZTtcbiAgfVxuXG4gIGNsb3NlUGFuZWwoKSB7XG4gICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlPy5pc09wZW4pIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlcj8uY2xvc2VQYW5lbCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSBhc3luYyBzdWdnZXN0KHZhbHVlOiBhbnksIGZpbHRlcj86IGFueSk6IFByb21pc2U8YW55W10+IHtcbiAgICAvLyBDYWxsIHN1Z2dlc3Rpb24gZnVuY3Rpb25cbiAgICBsZXQgcmVzID0gYXdhaXQgdGhpcy5zdWdnZXN0Rm4odmFsdWUsIGZpbHRlcik7XG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgRmlsdGVyZWQgaXRlbXMgYnkgc3VnZ2VzdEZuOicsIHZhbHVlLCByZXMpO1xuICAgIGlmICghcmVzKSB7XG4gICAgICB0aGlzLl9pdGVtQ291bnQgPSAwO1xuICAgICAgcmVzID0gW107XG4gICAgfVxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzKSkge1xuICAgICAgcmVzID0gcmVzIGFzIGFueVtdO1xuICAgICAgdGhpcy5faXRlbUNvdW50ID0gcmVzLmxlbmd0aCB8fCAwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IHtkYXRhLCB0b3RhbCwgZmV0Y2hNb3JlfSA9IHJlcyBhcyBMb2FkUmVzdWx0PGFueT47XG4gICAgICB0aGlzLl9pdGVtQ291bnQgPSB0b051bWJlcih0b3RhbCwgZGF0YSAmJiBkYXRhLmxlbmd0aCB8fCAwKTtcbiAgICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSBmZXRjaE1vcmU7XG4gICAgICB0aGlzLl9tb3JlSXRlbXNDb3VudCA9IGZldGNoTW9yZSAmJiAodGhpcy5faXRlbUNvdW50IC0gZGF0YS5sZW5ndGgpIHx8IDA7XG4gICAgICByZXMgPSBkYXRhO1xuICAgIH1cblxuICAgIC8vIEZpbHRlciBvdXQgZXhpc3RpbmcgaXRlbXNcbiAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSAocmVzIHx8IFtdKS5zbGljZSgpLmZpbHRlcihpdGVtMSA9PiB0aGlzLnZhbHVlLmZpbmRJbmRleChpdGVtMiA9PiB0aGlzLmVxdWFscyhpdGVtMSwgaXRlbTIpKSA9PT0gLTEpO1xuICAgIGNvbnN0IHJlbW92ZWRJdGVtQ291bnQgPSAoKHJlcz8ubGVuZ3RoIHx8IDApIC0gKGZpbHRlcmVkRGF0YT8ubGVuZ3RoIHx8IDApKTtcblxuICAgIC8vIERlY3JlYXNlIHRoZSBpdGVtIGNvdW50LCB3aXRoIGRlbHRhXG4gICAgdGhpcy5faXRlbUNvdW50IC09IHJlbW92ZWRJdGVtQ291bnQ7XG5cbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgRmlsdGVyZWQgaXRlbXMgYnkgc3VnZ2VzdEZuOicsIHZhbHVlLCByZXMpO1xuXG4gICAgcmV0dXJuIHJlcyBhcyBhbnlbXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hNb3JlKCk6IFByb21pc2U8YW55W10+IHtcbiAgICBpZiAoIXRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2spIHJldHVybiBbXTtcblxuICAgIC8vIFNhdmUgdGhlbiByZW1vdmUgZmV0Y2ggZnVuY3Rpb24gKHRvIGF2b2lkIG11bHRpLWNhbGwpXG4gICAgY29uc3QgZmV0Y2hNb3JlRm4gPSB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrO1xuICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCB7ZGF0YSwgdG90YWwsIGZldGNoTW9yZX0gPSBhd2FpdCBmZXRjaE1vcmVGbigpO1xuICAgIHRoaXMuX2l0ZW1Db3VudCA9IHRvdGFsIHx8IHRoaXMuX2l0ZW1Db3VudDtcbiAgICB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrID0gZmV0Y2hNb3JlO1xuICAgIHRoaXMuX21vcmVJdGVtc0NvdW50ID0gTWF0aC5tYXgoMCwgdGhpcy5fbW9yZUl0ZW1zQ291bnQgLSBkYXRhLmxlbmd0aCk7IC8vIEJvcm5lIG1pbiA9IDBcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSW1wbGljaXRWYWx1ZShpdGVtczogYW55W10pIHtcbiAgICAvLyBTdG9yZSBpbXBsaWNpdCB2YWx1ZSAod2lsbCB1c2UgaXQgb25CbHVyIGlmIG5vdCBvdGhlciB2YWx1ZSBzZWxlY3RlZClcbiAgICBpZiAoaXRlbXMgJiYgaXRlbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLl9pbXBsaWNpdFZhbHVlID0gaXRlbXNbMF07XG4gICAgICAvL3RoaXMuZm9ybUNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pbXBsaWNpdFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJZlRvdWNoZWQoKSB7XG4gICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wudG91Y2hlZCkge1xuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdXRvY29tcGxldGVQYW5lbCgpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgZWxlID0gdGhpcy5hdXRvY29tcGxldGU/Lm9wdGlvbnMubGFzdD8uX2dldEhvc3RFbGVtZW50KCkucGFyZW50RWxlbWVudDtcbiAgICBpZiAoIWVsZSkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIGNvbnNvbGUud2Fybih0aGlzLmxvZ1ByZWZpeCArICcgVW5hYmxlIHRvIGZpbmQgdGhlIGF1dG9jb21wbGV0ZSBkaXYuLi4nKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0FzTG9hZGluZygpIHtcbiAgICBpZiAodGhpcy4kZmlsdGVyZWRJdGVtcy52YWx1ZSkge1xuICAgICAgdGhpcy4kZmlsdGVyZWRJdGVtcy5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICB0aGlzLl9pdGVtQ291bnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9pbXBsaWNpdFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX21vcmVJdGVtc0NvdW50ID0gMDtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
636
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuY2hpcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9jaGlwcy9tYXRlcmlhbC5jaGlwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDcE0sT0FBTyxFQUF1QixXQUFXLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RyxPQUFPLEVBQUMsZUFBZSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFcEcsT0FBTyxFQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvSCxPQUFPLEVBQUMsZUFBZSxFQUFnQyxzQkFBc0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JILE9BQU8sRUFBQyxVQUFVLEVBQWdCLGtCQUFrQixFQUFFLGdCQUFnQixFQUFDLE1BQU0sY0FBYyxDQUFDO0FBSTVGLE9BQU8sRUFBQyxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNsTCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFP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LFNBQVMsU0FBQyxzQkFBc0I7cUJBZ0NoQyxLQUFLO3VCQWFMLEtBQUs7b0JBU0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgaXNPYnNlcnZhYmxlLCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0Zsb2F0TGFiZWxUeXBlLCBNYXRGb3JtRmllbGRBcHBlYXJhbmNlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIG1lcmdlTWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TWF0QXV0b2NvbXBsZXRlLCBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50LCBNYXRBdXRvY29tcGxldGVUcmlnZ2VyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHtmb2N1c0lucHV0LCBJbnB1dEVsZW1lbnQsIHNlbGVjdElucHV0Q29udGVudCwgc2VsZWN0SW5wdXRSYW5nZX0gZnJvbSAnLi4vLi4vaW5wdXRzJztcbmltcG9ydCB7RmV0Y2hNb3JlRm4sIExvYWRSZXN1bHQsIFN1Z2dlc3RGbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtEaXNwbGF5Rm4sIEVxdWFsc0ZufSBmcm9tICcuLi8uLi9mb3JtL2ZpZWxkLm1vZGVsJztcbmltcG9ydCB7TWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWd9IGZyb20gJy4uL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUnO1xuaW1wb3J0IHtjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlLCBpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLCBpc05vdE5pbFN0cmluZywgam9pblByb3BlcnRpZXNQYXRoLCBzdWdnZXN0RnJvbUFycmF5LCB0b0Jvb2xlYW4sIHRvTnVtYmVyfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHtmaXJzdE5vdE5pbFByb21pc2V9IGZyb20gJy4uLy4uL29ic2VydmFibGVzJztcbmltcG9ydCB7ZnJvbVNjcm9sbEVuZEV2ZW50fSBmcm9tICcuLi8uLi9ldmVudHMnO1xuaW1wb3J0IHtQcmVkZWZpbmVkQ29sb3JzfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQge1RoZW1lUGFsZXR0ZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbWF0LWNoaXBzLWZpZWxkJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwuY2hpcHMuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwuY2hpcHMuaHRtbCcsXG4gIHByb3ZpZGVyczogW3tcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICBtdWx0aTogdHJ1ZSxcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNYXRDaGlwc0ZpZWxkKVxuICB9XSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSwgLy8gTmVlZCBmb3IgdGhlIENTUyBjbGFzcyAnbWF0LWZvcm0tZmllbGQtc3VmZml4JyBvdmVycmlkZVxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNYXRDaGlwc0ZpZWxkIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIElucHV0RWxlbWVudCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG5cbiAgQElucHV0KCkgZXF1YWxzOiBFcXVhbHNGbjtcbiAgQElucHV0KCkgbG9nUHJlZml4ID0gJ1ttYXQtY2hpcHNdICc7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcbiAgQElucHV0KCkgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcgPSBudWxsO1xuICBASW5wdXQoKSBmbG9hdExhYmVsOiBGbG9hdExhYmVsVHlwZTtcbiAgQElucHV0KCkgYXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZTtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgQElucHV0KCkgc3VnZ2VzdEZuOiBTdWdnZXN0Rm48YW55LCBhbnk+O1xuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBtb2JpbGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNsZWFyYWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBkZWJvdW5jZVRpbWU6IG51bWJlciA9IG51bGw7XG4gIEBJbnB1dCgpIGRpc3BsYXlXaXRoOiBEaXNwbGF5Rm4gfCBudWxsO1xuICBASW5wdXQoKSBkaXNwbGF5QXR0cmlidXRlczogc3RyaW5nW107XG4gIEBJbnB1dCgpIGRpc3BsYXlDb2x1bW5TaXplczogKG51bWJlciB8ICdhdXRvJyB8IHVuZGVmaW5lZClbXTtcbiAgQElucHV0KCkgZGlzcGxheUNvbHVtbk5hbWVzOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgaGlnaGxpZ2h0QWNjZW50OiBib29sZWFuO1xuICBASW5wdXQoKSBzaG93QWxsT25Gb2N1czogYm9vbGVhbjtcbiAgQElucHV0KCkgc2hvd1BhbmVsT25Gb2N1czogYm9vbGVhbjtcbiAgQElucHV0KCkgYXV0b2ZvY3VzOiBib29sZWFuO1xuICBASW5wdXQoKSBjb25maWc6IE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnO1xuICBASW5wdXQoKSBpMThuUHJlZml4ID0gJ1JFRkVSRU5USUFMLic7XG4gIEBJbnB1dCgpIG5vUmVzdWx0TWVzc2FnZSA9ICdDT01NT04uTk9fUkVTVUxUJztcbiAgQElucHV0KCdjbGFzcycpIGNsYXNzTGlzdDogc3RyaW5nO1xuICBASW5wdXQoKSBwYW5lbFdpZHRoOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1hdEF1dG9jb21wbGV0ZVBvc2l0aW9uOiAnYXV0bycgfCAnYWJvdmUnIHwgJ2JlbG93JztcbiAgQElucHV0KCkgaXRlbVNpemUgPSAnNDhweCc7XG4gIEBJbnB1dCgpIGZldGNoTW9yZVRocmVzaG9sZDogc3RyaW5nID0gJzE1JSc7XG4gIEBJbnB1dCgpIHN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQ6IG51bWJlciA9IG51bGw7XG4gIEBJbnB1dCgpIHNob3dMb2FkaW5nU3Bpbm5lciA9IHRydWU7XG4gIEBJbnB1dCgpIGNoaXBDb2xvcjogVGhlbWVQYWxldHRlIHwgUHJlZGVmaW5lZENvbG9ycyA9IG51bGw7XG4gIEBJbnB1dCgpIGRlYnVnID0gZmFsc2U7XG5cbiAgQE91dHB1dCgnY2xpY2snKSBjbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuICBAT3V0cHV0KCdibHVyJykgYmx1cnJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcbiAgQE91dHB1dCgnZm9jdXMnKSBmb2N1c2VkID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuICBAT3V0cHV0KCkgZHJvcEJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxVSUV2ZW50Pih0cnVlKTtcbiAgQE91dHB1dCgna2V5ZG93bi5lc2NhcGUnKSBrZXlkb3duRXNjYXBlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ2tleXVwLmVudGVyJykga2V5dXBFbnRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ21hdElucHV0VGV4dCcpIG1hdElucHV0VGV4dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZChNYXRBdXRvY29tcGxldGUpIGF1dG9jb21wbGV0ZTogTWF0QXV0b2NvbXBsZXRlO1xuICBAVmlld0NoaWxkKE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIpIGF1dG9jb21wbGV0ZVRyaWdnZXI6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XG5cbiAgX3RhYmluZGV4OiBudW1iZXI7XG4gICRpbnB1dEl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4odW5kZWZpbmVkKTtcbiAgJGZpbHRlcmVkSXRlbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPih1bmRlZmluZWQpO1xuICBpbnB1dENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgX21vcmVJdGVtc0NvdW50OiBudW1iZXI7XG4gIF9mZXRjaE1vcmUkID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcblxuICBwcml2YXRlIF9vbkZldGNoTW9yZUNhbGxiYWNrOiBGZXRjaE1vcmVGbjxMb2FkUmVzdWx0PGFueT4+O1xuICBwcml2YXRlIF9pbXBsaWNpdFZhbHVlOiBhbnk7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfaXRlbXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfb3BlbmVkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgXyRmaWx0ZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBfaXRlbUNvdW50OiBudW1iZXI7XG4gIHByaXZhdGUgX3JlbG9hZCQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGZvcm1Hcm91cERpcjogRm9ybUdyb3VwRGlyZWN0aXZlXG4gICkge1xuICB9XG5cbiAgZ2V0IGl0ZW1Db3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9pdGVtQ291bnQ7XG4gIH1cblxuICBnZXQgY2FuRmV0Y2hNb3JlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrICYmIHRoaXMuX21vcmVJdGVtc0NvdW50ID4gMDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBmaWx0ZXIodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fJGZpbHRlci52YWx1ZSkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArIFwiIFNldHRpbmcgZmlsdGVyOlwiLCB2YWx1ZSk7XG4gICAgICB0aGlzLl8kZmlsdGVyLm5leHQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmaWx0ZXIoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fJGZpbHRlci52YWx1ZTtcbiAgfVxuXG5cbiAgQElucHV0KCkgc2V0IHRhYmluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl90YWJpbmRleCA9IHZhbHVlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgdGFiaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdGFiaW5kZXg7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgaXRlbXModmFsdWU6IE9ic2VydmFibGU8YW55W10+IHwgYW55W10pIHtcbiAgICAvLyBSZW1vdmUgcHJldmlvdXMgc3Vic2NyaXB0aW9uIG9uIGl0ZW1zLCAoaWYgZXhpdHMpXG4gICAgaWYgKHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uKSB7XG4gICAgICBjb25zb2xlLndhcm4odGhpcy5sb2dQcmVmaXggKyAnIEl0ZW1zIHJlY2VpdmVkIHR3aWNlICEnKTtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5yZW1vdmUodGhpcy5faXRlbXNTdWJzY3JpcHRpb24pO1xuICAgICAgdGhpcy5faXRlbXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYnNlcnZhYmxlPGFueVtdPih2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uID0gdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgdmFsdWUuc3Vic2NyaWJlKHYgPT4ge1xuICAgICAgICAgIC8vY29uc29sZS53YXJuKHRoaXMubG9nUHJlZml4ICsgXCIgUmVjZWl2ZWQgaXRlbXM6IFwiLCB2KTtcbiAgICAgICAgICB0aGlzLiRpbnB1dEl0ZW1zLm5leHQodik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMuJGlucHV0SXRlbXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy4kaW5wdXRJdGVtcy5uZXh0KHZhbHVlIGFzIGFueVtdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgaXRlbXMoKTogT2JzZXJ2YWJsZTxhbnlbXT4gfCBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuJGlucHV0SXRlbXM7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmZvcm1Db250cm9sLnZhbHVlIHx8IFtdO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZm9ybUNvbnRyb2wuZGlzYWJsZWQ7XG4gIH1cblxuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMucmVhZG9ubHkgJiYgdGhpcy5mb3JtQ29udHJvbC5lbmFibGVkO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTmlsKHRoaXMuJGZpbHRlcmVkSXRlbXMudmFsdWUpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRyb2wgfHwgdGhpcy5mb3JtQ29udHJvbE5hbWUgJiYgdGhpcy5mb3JtR3JvdXBEaXIgJiYgdGhpcy5mb3JtR3JvdXBEaXIuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpIGFzIEZvcm1Db250cm9sO1xuICAgIGlmICghdGhpcy5mb3JtQ29udHJvbCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIG1hbmRhdG9yeSBhdHRyaWJ1dGUgXFwnZm9ybUNvbnRyb2xcXCcgb3IgXFwnZm9ybUNvbnRyb2xOYW1lXFwnIGluIDxtYXQtY2hpcHMtZmllbGQ+LicpO1xuXG4gICAgLy8gQ29uZmlndXJhdGlvbiBmcm9tIGNvbmZpZyBvYmplY3RcbiAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgIHRoaXMuc3VnZ2VzdEZuID0gdGhpcy5zdWdnZXN0Rm4gfHwgdGhpcy5jb25maWcuc3VnZ2VzdEZuO1xuICAgICAgaWYgKCF0aGlzLnN1Z2dlc3RGbiAmJiB0aGlzLmNvbmZpZy5pdGVtcykge1xuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5jb25maWcuaXRlbXM7XG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlciA9IHRoaXMuZmlsdGVyIHx8IHRoaXMuY29uZmlnLmZpbHRlcjtcbiAgICAgIHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMgPSB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzIHx8IHRoaXMuY29uZmlnLmF0dHJpYnV0ZXM7XG4gICAgICB0aGlzLmRpc3BsYXlDb2x1bW5TaXplcyA9IHRoaXMuZGlzcGxheUNvbHVtblNpemVzIHx8IHRoaXMuY29uZmlnLmNvbHVtblNpemVzO1xuICAgICAgdGhpcy5kaXNwbGF5Q29sdW1uTmFtZXMgPSB0aGlzLmRpc3BsYXlDb2x1bW5OYW1lcyB8fCB0aGlzLmNvbmZpZy5jb2x1bW5OYW1lcztcbiAgICAgIHRoaXMuZGlzcGxheVdpdGggPSB0aGlzLmRpc3BsYXlXaXRoIHx8IHRoaXMuY29uZmlnLmRpc3BsYXlXaXRoO1xuICAgICAgdGhpcy5lcXVhbHMgPSB0aGlzLmVxdWFscyB8fCB0aGlzLmNvbmZpZy5lcXVhbHM7XG4gICAgICB0aGlzLm1vYmlsZSA9IHRvQm9vbGVhbih0aGlzLm1vYmlsZSwgdGhpcy5jb25maWcubW9iaWxlKTtcbiAgICAgIHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCA9IHRvTnVtYmVyKHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCwgdGhpcy5jb25maWcuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCB8fCAwKTtcbiAgICAgIHRoaXMuc2hvd0FsbE9uRm9jdXMgPSB0b0Jvb2xlYW4odGhpcy5zaG93QWxsT25Gb2N1cywgdG9Cb29sZWFuKHRoaXMuY29uZmlnLnNob3dBbGxPbkZvY3VzLCB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgPD0gMCkpO1xuICAgICAgdGhpcy5zaG93UGFuZWxPbkZvY3VzID0gdG9Cb29sZWFuKHRoaXMuc2hvd1BhbmVsT25Gb2N1cywgdG9Cb29sZWFuKHRoaXMuY29uZmlnLnNob3dQYW5lbE9uRm9jdXMsIHRydWUpKTtcbiAgICAgIHRoaXMuY2xhc3NMaXN0ID0gdGhpcy5jbGFzc0xpc3QgfHwgdGhpcy5jb25maWcuY2xhc3M7XG4gICAgICB0aGlzLmRlYm91bmNlVGltZSA9IHRvTnVtYmVyKHRoaXMuZGVib3VuY2VUaW1lLCB0aGlzLmNvbmZpZy5kZWJvdW5jZVRpbWUpO1xuICAgICAgdGhpcy5oaWdobGlnaHRBY2NlbnQgPSAgdG9Cb29sZWFuKHRoaXMuaGlnaGxpZ2h0QWNjZW50LCB0b0Jvb2xlYW4odGhpcy5jb25maWcuaGlnaGxpZ2h0QWNjZW50KSk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCB2YWx1ZXNcbiAgICB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzID0gdGhpcy5kaXNwbGF5QXR0cmlidXRlcyB8fCB0aGlzLmZpbHRlcj8uYXR0cmlidXRlcyB8fCBbJ2xhYmVsJywgJ25hbWUnXTtcbiAgICB0aGlzLmRpc3BsYXlXaXRoID0gdGhpcy5kaXNwbGF5V2l0aCB8fCAoKG9iaikgPT4gb2JqICYmIGpvaW5Qcm9wZXJ0aWVzUGF0aChvYmosIHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMpKTtcbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5TaXplcyA9IHRoaXMuZGlzcGxheUNvbHVtblNpemVzXG4gICAgICAvLyBpZiBvbmx5IGNvbHVtbjogYXV0byBzaXplXG4gICAgICB8fCAodGhpcy5kaXNwbGF5QXR0cmlidXRlcy5sZW5ndGggPT09IDEgJiYgW3VuZGVmaW5lZF0pXG4gICAgICAvLyBDb21wdXRlZCBjb2x1bW4gc2l6ZTpcbiAgICAgIC8vIC0gaWYgbGFiZWwgdGhlbiBjb2wgc2l6ZSA9IDJcbiAgICAgIC8vIC0gaWYgcmFua09yZGVyIHRoZW4gY29sIHNpemUgPSAxXG4gICAgICAvLyAtIGVzZSA9PiBhdXRvIHNpemVcbiAgICAgIHx8IHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMubWFwKGF0dHIgPT5cbiAgICAgICAgYXR0ciAmJiAoYXR0ci5lbmRzV2l0aCgnbGFiZWwnKSA/IDNcbiAgICAgICAgOiAoYXR0ci5lbmRzV2l0aCgncmFua09yZGVyJykgPyAyXG4gICAgICAgICAgOiB1bmRlZmluZWQpKSk7XG4gICAgdGhpcy5kaXNwbGF5Q29sdW1uTmFtZXMgPSB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzLm1hcCgoYXR0ciwgaW5kZXgpID0+IHRoaXMuZGlzcGxheUNvbHVtbk5hbWVzICYmIHRoaXMuZGlzcGxheUNvbHVtbk5hbWVzW2luZGV4XSB8fFxuICAgICAgKHRoaXMuaTE4blByZWZpeCArIGNoYW5nZUNhc2VUb1VuZGVyc2NvcmUoYXR0cikudG9VcHBlckNhc2UoKSkpO1xuICAgIHRoaXMubW9iaWxlID0gdG9Cb29sZWFuKHRoaXMubW9iaWxlLCBmYWxzZSk7XG4gICAgdGhpcy5lcXVhbHMgPSB0aGlzLmVxdWFscyB8fCAoKG8xLCBvMikgPT4gbzEgJiYgbzIgJiYgbzEuaWQgPT09IG8yLmlkKTtcbiAgICBjb25zdCBjbGFzc0xpc3QgPSB0aGlzLmNsYXNzTGlzdD8uc3BsaXQoJyAnKTtcbiAgICB0aGlzLnBhbmVsV2lkdGggPSB0aGlzLnBhbmVsV2lkdGggfHwgKGNsYXNzTGlzdCAmJiAoXG4gICAgICAoY2xhc3NMaXN0LmluY2x1ZGVzKCdtaW4td2lkdGgtbWVkaXVtJykgJiYgJzMwMHB4JylcbiAgICAgIHx8IChjbGFzc0xpc3QuaW5jbHVkZXMoJ21pbi13aWR0aC1sYXJnZScpICYmICc0MDBweCcpXG4gICAgICB8fCAoY2xhc3NMaXN0LmluY2x1ZGVzKCdtaW4td2lkdGgteGxhcmdlJykgJiYgJzQ1MHB4JylcbiAgICAgIHx8IChjbGFzc0xpc3QuaW5jbHVkZXMoJ21hdC1hdXRvY29tcGxldGUtcGFuZWwtZnVsbC1zaXplJykgJiYgJzEwMHZ3JylcbiAgICApKTtcbiAgICB0aGlzLnNob3dQYW5lbE9uRm9jdXMgPSB0b0Jvb2xlYW4odGhpcy5zaG93UGFuZWxPbkZvY3VzLCB0cnVlKTtcbiAgICB0aGlzLmRlYm91bmNlVGltZSA9IHRvTnVtYmVyKHRoaXMuZGVib3VuY2VUaW1lLCAyNTApO1xuICAgIHRoaXMuaGlnaGxpZ2h0QWNjZW50ID0gdG9Cb29sZWFuKHRoaXMuaGlnaGxpZ2h0QWNjZW50LCBmYWxzZSk7XG4gICAgdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkID0gdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkIHx8IDA7XG4gICAgdGhpcy5tYXRBdXRvY29tcGxldGVQb3NpdGlvbiA9IHRoaXMubWF0QXV0b2NvbXBsZXRlUG9zaXRpb24gfHwgKHRoaXMubW9iaWxlID8gJ2Fib3ZlJyA6ICdhdXRvJyk7IC8vIE9uIG1vYmlsZSwgc2V0IHBvc2l0aW9uIHRvIGFib3ZlIChiZWNhdXNlIG9mIGJvdHRvbSBrZXlib2FyZClcblxuICAgIC8vIE5vIHN1Z2dlc3RGbjogZmlsdGVyIG9uIHRoZSBnaXZlbiBpdGVtc1xuICAgIGlmICghdGhpcy5zdWdnZXN0Rm4pIHtcbiAgICAgIGNvbnN0IHN1Z2dlc3RGcm9tQXJyYXlGbjogU3VnZ2VzdEZuPGFueSwgYW55PiA9IGFzeW5jICh2YWx1ZSwgZmlsdGVyKSA9PiB7XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIENhbGxpbmcgc3VnZ2VzdEZyb21BcnJheSB3aXRoIHZhbHVlPScsIHZhbHVlKTtcblxuICAgICAgICByZXR1cm4gc3VnZ2VzdEZyb21BcnJheSh0aGlzLiRpbnB1dEl0ZW1zLnZhbHVlLCB2YWx1ZSwge1xuICAgICAgICAgIHNlYXJjaEF0dHJpYnV0ZXM6IHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMsXG4gICAgICAgICAgLi4uZmlsdGVyXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIC8vIFdhaXQgKG9uY2UpIHRoYXQgaXRlbXMgYXJlIGxvYWRlZCwgdGhlbiBjYWxsIHN1Z2dlc3QgZnJvbSBhcnJheSBmblxuICAgICAgdGhpcy5zdWdnZXN0Rm4gPSBhc3luYyAodmFsdWUsIGZpbHRlcikgPT4ge1xuICAgICAgICBpZiAoaXNOaWwodGhpcy4kaW5wdXRJdGVtcy52YWx1ZSkpIHtcbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1ttYXQtY2hpcHNdIFdhaXRpbmcgaXRlbXMgdG8gYmUgc2V0Li4uJyk7XG5cbiAgICAgICAgICBhd2FpdCBmaXJzdE5vdE5pbFByb21pc2UodGhpcy4kaW5wdXRJdGVtcyk7XG5cbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1ttYXQtY2hpcHNdIFJlY2VpdmVkIGl0ZW1zOicsIHRoaXMuJGlucHV0SXRlbXMudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3VnZ2VzdEZuID0gc3VnZ2VzdEZyb21BcnJheUZuO1xuICAgICAgICByZXR1cm4gdGhpcy5zdWdnZXN0Rm4odmFsdWUsIGZpbHRlcik7IC8vIExvb3BcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gU2VuZCB2YWx1ZSB0byBzdWdnZXN0IHdoZW4gOlxuICAgIC8vIC0gaXMgbmlsIGFuZCAnKicsIGFuZCBubyBtaW4gbGVuZ3RoIHRocmVzaG9sZFxuICAgIC8vIC0gaXMgbm90IG5pbCBhbmQgbm90IGEgc3RyaW5nIHR5cGUgKGUuZy4gb2JqZWN0KVxuICAgIC8vIC0gaXMgbm90IG5pbCBhbmQgaXMgYSBzdHJpbmcsIGFuZCBoYXMgZW5vdWdoIGNoYXJhY3RlclxuICAgIGNvbnN0IHRocmVzaG9sZEZpbHRlckZuID0gKHZhbHVlKSA9PiAoaXNOaWxPckJsYW5rKHZhbHVlKSB8fCAodmFsdWUgPT09ICcqJylcbiAgICAgICAgPyAodGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkIDw9IDApXG4gICAgICAgIDogKCEodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJylcbiAgICAgICAgICB8fCB2YWx1ZS5sZW5ndGggPj0gdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkKVxuICAgICk7XG5cbiAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zQ2hhbmdlcyA9IG1lcmdlKFxuXG4gICAgICAvLyBSZWxvYWQgZXZlbnQgKG5vIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkgcGlwZSwgdG8gZm9yY2UgcmVsb2FkIGV2ZW4gaWYgc2FtZSB2YWx1ZSlcbiAgICAgIHRoaXMuX3JlbG9hZCQsXG5cbiAgICAgIHRoaXMuaW5wdXRDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIodmFsdWUgPT4gdGhpcy5lbmFibGVkICYmIGlzTm90TmlsU3RyaW5nKHZhbHVlKSksXG4gICAgICAgICAgLy8gTWFyayBhcyBsb2FkaW5nICh0byBzaG93IGxvYWRpbmcgc3Bpbm5lcikgLSBlYXJsaWVyIGFzIHBvc3NpYmxlLCBzbyBiZWZvcmUgdGhlIGRlYm91bmNlIHRpbWVcbiAgICAgICAgICB0YXAoXyA9PiB0aGlzLnNob3dMb2FkaW5nU3Bpbm5lciAmJiB0aGlzLm1hcmtBc0xvYWRpbmcoKSksXG4gICAgICAgICAgLy8gRmlsdGVyIGlmIG5vdCBlbm91Z2ggY2hhcmFjdGVyXG4gICAgICAgICAgZmlsdGVyKHZhbHVlID0+IHZhbHVlLmxlbmd0aCA+PSB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQpLFxuICAgICAgICAgIC8vIFdhaXQgYSBkZWJvdW5jZSB0aW1lXG4gICAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lKVxuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgLy8sdGFwKCh2YWx1ZSkgPT4gdGhpcy5kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBTZWFyY2ggdGV4dCBjaGFuZ2VzOicsIHZhbHVlKSlcbiAgICAgICAgKSxcblxuICAgICAgLy8gT2JqZWN0IHNldDogdXNlIGl0IChubyBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpIHBpcGUgbmVlZClcbiAgICAgIHRoaXMuaW5wdXRDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBzdGFydFdpdGg8YW55LCBhbnk+KHRoaXMuaW5wdXRDb250cm9sLnZhbHVlKSxcbiAgICAgICAgICBmaWx0ZXIodmFsdWUgPT4gaXNOb3ROaWwodmFsdWUpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpLFxuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgLy90YXAodmFsdWUgPT4gdGhpcy5kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCBhbiBvYmplY3QgdmFsdWU6ICcsIHZhbHVlKSlcbiAgICAgICAgKSxcblxuICAgICAgLy8gT24gZHJvcGRvd24gYnV0dG9uIGNsaWNrIChubyBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBub3IgZGVib3VuY2VUaW1lKVxuICAgICAgdGhpcy5kcm9wQnV0dG9uQ2xpY2tcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IHRoaXMuZW5hYmxlZCAmJiAoIWV2ZW50IHx8ICFldmVudC5kZWZhdWx0UHJldmVudGVkKSksXG4gICAgICAgICAgdGFwKF8gPT4gdGhpcy5tYXRJbnB1dFRleHQubmF0aXZlRWxlbWVudC5mb2N1cygpKSxcbiAgICAgICAgICBtYXAoXyA9PiB0aGlzLnNob3dBbGxPbkZvY3VzID8gJyonIDogdGhpcy5mb3JtQ29udHJvbC52YWx1ZSksXG4gICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBjaGFyYWN0ZXJzXG4gICAgICAgICAgZmlsdGVyKHRocmVzaG9sZEZpbHRlckZuKVxuICAgICAgICApLFxuXG4gICAgICAvLyBNZXJnZSBzb21lIG9ic2VydmFibGVzLCB3aXRoIGEgY29tbW9uIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkgcGlwZSwgYW5kIE5PIGRlYm91bmNlVGltZVxuICAgICAgbWVyZ2UoXG4gICAgICAgIC8vIEZvY3VzIG9yIGNsaWNrID0+IExvYWQgYWxsXG4gICAgICAgIG1lcmdlKHRoaXMuZm9jdXNlZCwgdGhpcy5jbGlja2VkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKF8gPT4gdGhpcy5lbmFibGVkKSxcbiAgICAgICAgICAgIG1hcCgoXykgPT4gdGhpcy5zaG93QWxsT25Gb2N1cyA/ICcqJyA6IHRoaXMuaW5wdXRDb250cm9sLnZhbHVlKVxuXG4gICAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgICAgLy8sdGFwKHZhbHVlID0+IHRoaXMuZGVidWcgJiYgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgZm9jdXNlZCBvciBjbGlja2VkIGV2ZW50OiAnLCB2YWx1ZSkpXG4gICAgICAgICAgKSxcbiAgICAgICAgbWVyZ2UodGhpcy4kaW5wdXRJdGVtcywgdGhpcy5fJGZpbHRlcilcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIGZpbHRlcihfID0+IHRoaXMuZW5hYmxlZCksXG4gICAgICAgICAgICBtYXAoXyA9PiB0aGlzLmlucHV0Q29udHJvbC52YWx1ZSksXG5cbiAgICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgICAvL3RhcCh2YWx1ZSA9PiB0aGlzLmRlYnVnICYmIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFJlY2VpdmVkICRpbnB1dEl0ZW1zIG9yIGZpbHRlciBldmVudDogJywgdmFsdWUpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBjaGFyYWN0ZXJzXG4gICAgICAgICAgZmlsdGVyKHRocmVzaG9sZEZpbHRlckZuKSxcbiAgICAgICAgICAvLyBEaXN0aW5ndWlzaCBjaGFuZ2VzXG4gICAgICAgICAgLy8gLSBkbyBOT1QgZmlsdGVyIGlmIGxvYWRpbmcsIHRvIGZvcmNlIHVwZGF0ZSBhZnRlciBhIGJsdXIgZXZlbnRcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgodjEsIHYyKSA9PiAhdGhpcy5sb2FkaW5nICYmICh2MSA9PT0gdjIgfHwgdGhpcy5lcXVhbHModjEsIHYyKSkpXG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvLyx0YXAodmFsdWUgPT4gdGhpcy5kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCB1cGRhdGUgZXZlbnQ6ICcsIHZhbHVlKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnBpcGUoXG5cbiAgICAgICAgLy8gU3VnZ2VzdCB2YWx1ZXNcbiAgICAgICAgbWVyZ2VNYXAodmFsdWUgPT4gdGhpcy5zdWdnZXN0KHZhbHVlLCB0aGlzLmZpbHRlcikpLFxuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvL3RhcChpdGVtcyA9PiB0aGlzLmRlYnVnICYmIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFJlY2VpdmVkIGZyb20gc3VnZ2VzdDogJywgaXRlbXMpKSxcblxuICAgICAgICAvLyBTdG9yZSBpbXBsaWNpdCB2YWx1ZSAod2lsbCB1c2UgaXQgb25CbHVyIGlmIG5vdCBvdGhlciB2YWx1ZSBzZWxlY3RlZClcbiAgICAgICAgdGFwKGl0ZW1zID0+IHRoaXMudXBkYXRlSW1wbGljaXRWYWx1ZShpdGVtcykpXG4gICAgICApO1xuXG4gICAgLy8gRmV0Y2ggbW9yZSBldmVudHNcbiAgICBjb25zdCBmZXRjaE1vcmVJdGVtc0NoYW5nZXMgPSB0aGlzLl9mZXRjaE1vcmUkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKGV2ZW50ID0+IGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpKSwgLy8gQXZvaWQgdG8gY2xvc2UgdGhlIG1hdC1zZWxlY3RcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuY2FuRmV0Y2hNb3JlKSxcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5mZXRjaE1vcmUoKSksXG5cbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy90YXAobW9yZUl0ZW1zID0+IGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFJlY2VpdmVkIGZyb20gZmV0Y2ggTW9yZTogJywgbW9yZUl0ZW1zKSksXG5cbiAgICAgICAgLy8gQ29uY2F0IHRvIGV4aXN0aW5nIGl0ZW1zXG4gICAgICAgIG1hcChtb3JlSXRlbXMgPT4gKHRoaXMuJGZpbHRlcmVkSXRlbXMudmFsdWUgfHwgW10pLmNvbmNhdChtb3JlSXRlbXMpKVxuICAgICAgKTtcblxuICAgIC8vIFVwZGF0ZSBmaWx0ZXJlZCBpdGVtc1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBtZXJnZShcbiAgICAgICAgdGhpcy4kaW5wdXRJdGVtcyxcblxuICAgICAgICAvLyBVcGRhdGUgaXRlbXMgZXZlbnRzXG4gICAgICAgIGZpbHRlcmVkSXRlbXNDaGFuZ2VzLFxuXG4gICAgICAgIC8vIEZldGNoIG1vcmUgZXZlbnRzXG4gICAgICAgIGZldGNoTW9yZUl0ZW1zQ2hhbmdlc1xuICAgICAgKVxuICAgICAgICAvLyBFbWl0IGl0ZW1zXG4gICAgICAgIC5zdWJzY3JpYmUoaXRlbXMgPT4gdGhpcy4kZmlsdGVyZWRJdGVtcy5uZXh0KGl0ZW1zKSlcbiAgICApO1xuXG4gICAgLy8gQXBwbHlpbmcgaW1wbGljaXQgdmFsdWUsIG9uIGJsdXJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5ibHVycmVkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcChfID0+IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpXG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvLyx0YXAodmFsdWUgPT4gdGhpcy5kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCBibHVycmVkIGV2ZW50OiAnLCB2YWx1ZSkpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICAgIC8vIFdoZW4gbGVhdmUgY29tcG9uZW50IHdpdGhvdXQgb2JqZWN0LCB1c2UgaW1wbGljaXQgdmFsdWUgaWYgOlxuICAgICAgICAgIC8vIC0gYW4gZXhwbGljaXQgdmFsdWVcbiAgICAgICAgICAvLyAtIGZpZWxkIGlzIG5vdCBlbXB0eSAodXNlciBmaWxsIHNvbWV0aGluZylcbiAgICAgICAgICAvLyAtIE9SIGZpZWxkIGVtcHR5IGJ1dCBpcyByZXF1aXJlZFxuICAgICAgICAgIGlmICh0aGlzLl9pbXBsaWNpdFZhbHVlICYmICgodGhpcy5yZXF1aXJlZCAmJiBpc05pbE9yQmxhbmsodmFsdWUpKSB8fCAoaXNOb3ROaWxPckJsYW5rKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSkpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLl9pbXBsaWNpdFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzUGVuZGluZyh7ZW1pdEV2ZW50OiBmYWxzZSwgb25seVNlbGY6IHRydWV9KTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiBmYWxzZSwgb25seVNlbGY6IHRydWV9KTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZlRvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMuJGZpbHRlcmVkSXRlbXMubmV4dChbdGhpcy5faW1wbGljaXRWYWx1ZV0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNOaWxPckJsYW5rKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKG51bGwpO1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNQZW5kaW5nKHtlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZX0pO1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZX0pO1xuICAgICAgICAgICAgdGhpcy5jaGVja0lmVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy4kZmlsdGVyZWRJdGVtcy5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2ltcGxpY2l0VmFsdWUgPSBudWxsOyAvLyByZXNldCB0aGUgaW1wbGljaXQgdmFsdWVcbiAgICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTsgLy8gQ2xvbmUgcGFuZWxcbiAgICAgICAgfSkpO1xuXG4gICAgLy8gTGlzdGVuIGZvcm0gY29udHJvbCBzdGF0dXMgY2hhbmdlXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICAvL2ZpbHRlcigoKSA9PiB0aGlzLmVuYWJsZWQpLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgKVxuICAgICAgICAvLyBVcGRhdGUgY29tcG9uZW50IHN0YXRlXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jaGVja0lmVG91Y2hlZCgpKVxuICAgICk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5rZXlkb3duRXNjYXBlLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgIC8vIEF2b2lkIGZvcm0gb3IgcGFnZSB0byBtYW5hZ2UgZXNjYXBlIGV2ZW50XG4gICAgICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBDbG9zaW5nIHRoZSBwYW5lbCAoa2V5ZG93bi5lc2NhcGUpXCIpO1xuXG4gICAgICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIGlmICh0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5faXRlbXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMuJGlucHV0SXRlbXMuY29tcGxldGUoKTtcbiAgICB0aGlzLiRpbnB1dEl0ZW1zLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy4kZmlsdGVyZWRJdGVtcy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuJGZpbHRlcmVkSXRlbXMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9yZWxvYWQkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fJGZpbHRlci5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy5kcm9wQnV0dG9uQ2xpY2suY29tcGxldGUoKTtcbiAgICB0aGlzLmNsaWNrZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLmJsdXJyZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLmZvY3VzZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLmtleWRvd25Fc2NhcGUuY29tcGxldGUoKTtcbiAgICB0aGlzLmtleXVwRW50ZXIuY29tcGxldGUoKTtcbiAgICB0aGlzLl9mZXRjaE1vcmUkLmNvbXBsZXRlKCk7XG5cbiAgICB0aGlzLl9pbXBsaWNpdFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wgPSBudWxsO1xuICAgIHRoaXMuZGlzcGxheVdpdGggPSBudWxsO1xuICAgIHRoaXMuZXF1YWxzID0gbnVsbDtcbiAgICB0aGlzLnN1Z2dlc3RGbiA9IG51bGw7XG4gICAgdGhpcy4kZmlsdGVyZWRJdGVtcyA9IG51bGw7XG4gICAgdGhpcy5jb25maWcgPSBudWxsO1xuICAgIHRoaXMuY2xhc3NMaXN0ID0gbnVsbDtcblxuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBudWxsO1xuICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gbnVsbDtcbiAgICB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrID0gbnVsbDtcblxuICAgIC8vIERlc3Ryb3kgdGhlICdhdXRvY29tcGxldGUnIGluc3RhbmNlLCB0byBhdm9pZCBtZW1vcnkgbGVha1xuICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZSkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUubmdPbkRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGl0ZW0gdG8gY2hpcHNcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqL1xuICBhZGQoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpIHtcblxuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMubG9nUHJlZml4fXNlbGVjdGAsIGV2ZW50KTtcblxuICAgIGNvbnN0IGl0ZW0gPSBldmVudC5vcHRpb24udmFsdWU7XG4gICAgdGhpcy53cml0ZVZhbHVlKFsuLi50aGlzLnZhbHVlLCBpdGVtXSk7XG4gICAgdGhpcy5tYXRJbnB1dFRleHQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIHRoaXMuaW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcblxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBpdGVtIGZyb20gY2hpcHNcbiAgICpcbiAgICogQHBhcmFtIGl0ZW1cbiAgICovXG4gIHJlbW92ZShpdGVtOiBhbnkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgY29uc3QgaW5kZXggPSB2YWx1ZSA/IHZhbHVlLmluZGV4T2YoaXRlbSkgOiAtMTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHZhbHVlLnNsaWNlKCk7XG4gICAgICBuZXdWYWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdGhpcy53cml0ZVZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB0byByZWxvYWQgY29udGVudC4gVXNlZnVsIHdoZW4gZmlsdGVyIGhhcyBiZWVuIGNoYW5nZWQgYnV0IG5vdCBkZXRlY3RlZFxuICAgKi9cbiAgcmVsb2FkSXRlbXModmFsdWU/OiBhbnkpIHtcbiAgICAvLyBGb3JjZSBhIHJlZnJlc2hcbiAgICB0aGlzLl9yZWxvYWQkLm5leHQodmFsdWUgfHwgJyonKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueVtdKTogdm9pZCB7XG4gICAgLy8gREVCVUdcbiAgICAvLyBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgV3JpdGluZyB2YWx1ZTogJywgdmFsdWUpO1xuXG4gICAgaWYgKHZhbHVlICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSBbdmFsdWVdO1xuICAgIH1cbiAgICBpZiAodmFsdWUgIT09IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBXcml0aW5nIHZhbHVlOiAnLCB2YWx1ZSk7XG5cbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSh2YWx1ZSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoaXNEaXNhYmxlZCAmJiB0aGlzLmF1dG9jb21wbGV0ZT8uaXNPcGVuKSB7XG4gICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICB9XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIGZvY3VzSW5wdXQodGhpcy5tYXRJbnB1dFRleHQpO1xuICB9XG5cbiAgZmlsdGVySW5wdXRUZXh0Rm9jdXNFdmVudChldmVudDogRm9jdXNFdmVudCkge1xuICAgIGlmICghZXZlbnQgfHwgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuXG4gICAgLy8gSWdub3JlIGV2ZW50IGZyb20gbWF0LW9wdGlvblxuICAgIGlmIChldmVudC5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQucmVsYXRlZFRhcmdldC50YWdOYW1lID09PSAnTUFULU9QVElPTicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG5cbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBDYW5jZWxsaW5nIGZvY3VzIGV2ZW50Jyk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBERUJVR1xuICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFNlbGVjdCBpbnB1dCBjb250ZW50Jyk7XG4gICAgY29uc3QgaGFzQ29udGVudCA9IHNlbGVjdElucHV0Q29udGVudChldmVudCk7XG5cbiAgICAvLyBJZiBjb21ibyBpcyBlbXB0eSwgb3IgaWYgaGFzIGNvbnRlbnQgYnV0IHNob3VsZCBmb3JjZSB0byBzaG93IHBhbmVsIG9uIGZvY3VzXG4gICAgaWYgKCFoYXNDb250ZW50IHx8ICh0aGlzLnNob3dQYW5lbE9uRm9jdXMgJiYgdGhpcy5zaG93QWxsT25Gb2N1cykpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBFbWl0IGZvY3VzIGV2ZW50Jyk7XG5cbiAgICAgIHRoaXMuZm9jdXNlZC5lbWl0KGV2ZW50KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmaWx0ZXJJbnB1dFRleHRCbHVyRXZlbnQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcblxuICAgIC8vIElnbm9yZSBldmVudCBmcm9tIG1hdC1vcHRpb25cbiAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGV2ZW50LnJlbGF0ZWRUYXJnZXQudGFnTmFtZSA9PT0gJ01BVC1PUFRJT04nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuXG4gICAgICAvL0RFQlVHXG4gICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgXCIgQ2FuY2VsbGluZyBibHVyIGV2ZW50XCIpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gREVCVUdcbiAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBCbHVyOiBtb3ZlIGNhcmV0IHRvIHRoZSBiZWdpbm5pbmcnKTtcblxuICAgIC8vIE1vdmUgY2FyZXQgdG8gdGhlIGJlZ2lubmluZyAoZml4IGlzc3VlIElNQUdJTkUtNDY5KVxuICAgIHNlbGVjdElucHV0UmFuZ2UoZXZlbnQudGFyZ2V0IGFzIGFueSwgMCwgMCk7XG5cbiAgICB0aGlzLmJsdXJyZWQuZW1pdChldmVudCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmaWx0ZXJDaGlwc0ZvY3VzRXZlbnQoZXZlbnQ6IEZvY3VzRXZlbnQpe1xuICAgIC8vIERFQlVHXG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIEZvY3VzIGluIGNoaXBzIGxpc3QnLCBldmVudCk7XG5cbiAgICAvLyBJZ25vcmUgZXZlbnQgaW4gYnV0dG9uXG5cbiAgICB0aGlzLm1hdElucHV0VGV4dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBjbGVhclZhbHVlKGV2ZW50OiBVSUV2ZW50KSB7XG4gICAgdGhpcy53cml0ZVZhbHVlKG51bGwpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgX2luaXRBdXRvY29tcGxldGVJbmZpbml0ZVNjcm9sbCh0aHJlc2hvbGQ/OiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuYXV0b2NvbXBsZXRlKSByZXR1cm47IC8vIFNraXBcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBJbml0IGF1dG9jb21wbGV0ZSBzY3JvbGwgbGlzdGVuZXInKTtcblxuICAgIGlmICh0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZSh0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG9wZW5lZCQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuYXV0b2NvbXBsZXRlLl9pc09wZW5cbiAgICAgID8gdGltZXIoMClcbiAgICAgIDogdGhpcy5hdXRvY29tcGxldGUub3BlbmVkLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpO1xuICAgIGNvbnN0IHNjcm9sbEVuZCQgPSBvcGVuZWQkXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChfKSA9PiB0aGlzLmdldEF1dG9jb21wbGV0ZVBhbmVsKCkpLFxuICAgICAgICBmaWx0ZXIoaXNOb3ROaWwpLFxuICAgICAgICBzd2l0Y2hNYXAoKHBhbmVsKSA9PiBmcm9tU2Nyb2xsRW5kRXZlbnQocGFuZWwsIHRocmVzaG9sZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmF1dG9jb21wbGV0ZS5jbG9zZWQpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuXG4gICAgLy8gVHJpZ2dlciBmZXRjaCBtb3JlLCBlbmQgZW5kIHNjcm9sbCByZWFjaGVkXG4gICAgdGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uID0gc2Nyb2xsRW5kJFxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9mZXRjaE1vcmUkLmVtaXQoKSk7XG5cbiAgICAvLyBSZWdpc3RlciBzdWJzY3JpcHRpb25cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbik7XG4gIH1cblxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmF1dG9jb21wbGV0ZT8uaXNPcGVuIHx8IGZhbHNlO1xuICB9XG5cbiAgY2xvc2VQYW5lbCgpIHtcbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGU/LmlzT3Blbikge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVUcmlnZ2VyPy5jbG9zZVBhbmVsKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLyogLS0gcHJpdmF0ZSBtZXRob2QgLS0gKi9cblxuICBwcml2YXRlIGFzeW5jIHN1Z2dlc3QodmFsdWU6IGFueSwgZmlsdGVyPzogYW55KTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIC8vIENhbGwgc3VnZ2VzdGlvbiBmdW5jdGlvblxuICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLnN1Z2dlc3RGbih2YWx1ZSwgZmlsdGVyKTtcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBGaWx0ZXJlZCBpdGVtcyBieSBzdWdnZXN0Rm46JywgdmFsdWUsIHJlcyk7XG4gICAgaWYgKCFyZXMpIHtcbiAgICAgIHRoaXMuX2l0ZW1Db3VudCA9IDA7XG4gICAgICByZXMgPSBbXTtcbiAgICB9XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXMpKSB7XG4gICAgICByZXMgPSByZXMgYXMgYW55W107XG4gICAgICB0aGlzLl9pdGVtQ291bnQgPSByZXMubGVuZ3RoIHx8IDA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3Qge2RhdGEsIHRvdGFsLCBmZXRjaE1vcmV9ID0gcmVzIGFzIExvYWRSZXN1bHQ8YW55PjtcbiAgICAgIHRoaXMuX2l0ZW1Db3VudCA9IHRvTnVtYmVyKHRvdGFsLCBkYXRhICYmIGRhdGEubGVuZ3RoIHx8IDApO1xuICAgICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IGZldGNoTW9yZTtcbiAgICAgIHRoaXMuX21vcmVJdGVtc0NvdW50ID0gZmV0Y2hNb3JlICYmICh0aGlzLl9pdGVtQ291bnQgLSBkYXRhLmxlbmd0aCkgfHwgMDtcbiAgICAgIHJlcyA9IGRhdGE7XG4gICAgfVxuXG4gICAgLy8gRmlsdGVyIG91dCBleGlzdGluZyBpdGVtc1xuICAgIGNvbnN0IGZpbHRlcmVkRGF0YSA9IChyZXMgfHwgW10pLnNsaWNlKCkuZmlsdGVyKGl0ZW0xID0+IHRoaXMudmFsdWUuZmluZEluZGV4KGl0ZW0yID0+IHRoaXMuZXF1YWxzKGl0ZW0xLCBpdGVtMikpID09PSAtMSk7XG4gICAgY29uc3QgcmVtb3ZlZEl0ZW1Db3VudCA9ICgocmVzPy5sZW5ndGggfHwgMCkgLSAoZmlsdGVyZWREYXRhPy5sZW5ndGggfHwgMCkpO1xuXG4gICAgLy8gRGVjcmVhc2UgdGhlIGl0ZW0gY291bnQsIHdpdGggZGVsdGFcbiAgICB0aGlzLl9pdGVtQ291bnQgLT0gcmVtb3ZlZEl0ZW1Db3VudDtcblxuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBGaWx0ZXJlZCBpdGVtcyBieSBzdWdnZXN0Rm46JywgdmFsdWUsIHJlcyk7XG5cbiAgICByZXR1cm4gcmVzIGFzIGFueVtdO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaE1vcmUoKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGlmICghdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjaykgcmV0dXJuIFtdO1xuXG4gICAgLy8gU2F2ZSB0aGVuIHJlbW92ZSBmZXRjaCBmdW5jdGlvbiAodG8gYXZvaWQgbXVsdGktY2FsbClcbiAgICBjb25zdCBmZXRjaE1vcmVGbiA9IHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2s7XG4gICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHtkYXRhLCB0b3RhbCwgZmV0Y2hNb3JlfSA9IGF3YWl0IGZldGNoTW9yZUZuKCk7XG4gICAgdGhpcy5faXRlbUNvdW50ID0gdG90YWwgfHwgdGhpcy5faXRlbUNvdW50O1xuICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSBmZXRjaE1vcmU7XG4gICAgdGhpcy5fbW9yZUl0ZW1zQ291bnQgPSBNYXRoLm1heCgwLCB0aGlzLl9tb3JlSXRlbXNDb3VudCAtIGRhdGEubGVuZ3RoKTsgLy8gQm9ybmUgbWluID0gMFxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbXBsaWNpdFZhbHVlKGl0ZW1zOiBhbnlbXSkge1xuICAgIC8vIFN0b3JlIGltcGxpY2l0IHZhbHVlICh3aWxsIHVzZSBpdCBvbkJsdXIgaWYgbm90IG90aGVyIHZhbHVlIHNlbGVjdGVkKVxuICAgIGlmIChpdGVtcyAmJiBpdGVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuX2ltcGxpY2l0VmFsdWUgPSBpdGVtc1swXTtcbiAgICAgIC8vdGhpcy5mb3JtQ29udHJvbC5zZXRFcnJvcnMobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2ltcGxpY2l0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0lmVG91Y2hlZCgpIHtcbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbC50b3VjaGVkKSB7XG4gICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEF1dG9jb21wbGV0ZVBhbmVsKCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBlbGUgPSB0aGlzLmF1dG9jb21wbGV0ZT8ub3B0aW9ucy5sYXN0Py5fZ2V0SG9zdEVsZW1lbnQoKS5wYXJlbnRFbGVtZW50O1xuICAgIGlmICghZWxlKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgY29uc29sZS53YXJuKHRoaXMubG9nUHJlZml4ICsgJyBVbmFibGUgdG8gZmluZCB0aGUgYXV0b2NvbXBsZXRlIGRpdi4uLicpO1xuICAgIH1cbiAgICByZXR1cm4gZWxlO1xuICB9XG5cblxuICBwcml2YXRlIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrQXNMb2FkaW5nKCkge1xuICAgIGlmICh0aGlzLiRmaWx0ZXJlZEl0ZW1zLnZhbHVlKSB7XG4gICAgICB0aGlzLiRmaWx0ZXJlZEl0ZW1zLm5leHQodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuX2l0ZW1Db3VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2ltcGxpY2l0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbW9yZUl0ZW1zQ291bnQgPSAwO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -269,7 +269,7 @@ export class MatSwipeField {
|
|
|
269
269
|
MatSwipeField.decorators = [
|
|
270
270
|
{ type: Component, args: [{
|
|
271
271
|
selector: 'mat-swipe-field',
|
|
272
|
-
template: "<mat-form-field [floatLabel]=\"showSlides && (!floatLabel || floatLabel === 'auto') ? 'always': floatLabel\"\n [class]=\"classList\"\n [class.mat-form-field-disabled]=\"disabled\">\n <mat-label *ngIf=\"placeholder && floatLabel!=='never'\">\n {{placeholder}}\n </mat-label>\n <input matInput #fakeInput type=\"text\"\n [formControl]=\"formControl\"\n [readonly]=\"true\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showSlides\"\n [tabindex]=\"tabindex\">\n\n <div class=\"slides-container\" [class.hidden]=\"!showSlides\">\n <ion-slides #slides\n [options]=\"slidesOptions\"\n (ionSlidesDidLoad)=\"slidesLoaded()\"\n (ionSlideReachStart)=\"reachStart(true)\"\n (ionSlideReachEnd)=\"reachEnd(true)\"\n (ionSlideNextEnd)=\"reachStart(false)\"\n (ionSlidePrevEnd)=\"reachEnd(false)\"\n (ionSlideDidChange)=\"slideChanged()\"\n >\n <ion-slide *ngFor=\"let item of $items | async\">\n <ion-label>{{ displayWith(item) }}</ion-label>\n </ion-slide>\n\n </ion-slides>\n </div>\n\n <button #prevButton\n mat-icon-button\n type=\"button\"\n class=\"button-prev\"\n [hidden]=\"!showSlides\"\n [disabled]=\"previousDisabled\"\n (click)=\"previous()\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button #nextButton\n mat-icon-button\n type=\"button\"\n class=\"button-next\"\n [hidden]=\"!showSlides\"\n [disabled]=\"nextDisabled\"\n (click)=\"next()\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('entity')\" translate>ERROR.FIELD_INVALID</mat-error>\n\n</mat-form-field>\n",
|
|
272
|
+
template: "<mat-form-field [floatLabel]=\"showSlides && (!floatLabel || floatLabel === 'auto') ? 'always': floatLabel\"\n [appearance]=\"appearance\"\n [class]=\"classList\"\n [class.mat-form-field-disabled]=\"disabled\">\n <mat-label *ngIf=\"placeholder && floatLabel!=='never'\">\n {{placeholder}}\n </mat-label>\n <input matInput #fakeInput type=\"text\"\n [formControl]=\"formControl\"\n [readonly]=\"true\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showSlides\"\n [tabindex]=\"tabindex\">\n\n <div class=\"slides-container\" [class.hidden]=\"!showSlides\">\n <ion-slides #slides\n [options]=\"slidesOptions\"\n (ionSlidesDidLoad)=\"slidesLoaded()\"\n (ionSlideReachStart)=\"reachStart(true)\"\n (ionSlideReachEnd)=\"reachEnd(true)\"\n (ionSlideNextEnd)=\"reachStart(false)\"\n (ionSlidePrevEnd)=\"reachEnd(false)\"\n (ionSlideDidChange)=\"slideChanged()\"\n >\n <ion-slide *ngFor=\"let item of $items | async\">\n <ion-label>{{ displayWith(item) }}</ion-label>\n </ion-slide>\n\n </ion-slides>\n </div>\n\n <button #prevButton\n mat-icon-button\n type=\"button\"\n class=\"button-prev\"\n [hidden]=\"!showSlides\"\n [disabled]=\"previousDisabled\"\n (click)=\"previous()\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button #nextButton\n mat-icon-button\n type=\"button\"\n class=\"button-next\"\n [hidden]=\"!showSlides\"\n [disabled]=\"nextDisabled\"\n (click)=\"next()\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('entity')\" translate>ERROR.FIELD_INVALID</mat-error>\n\n</mat-form-field>\n",
|
|
273
273
|
providers: [DEFAULT_VALUE_ACCESSOR],
|
|
274
274
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
275
275
|
styles: [":host{display:inline-block;width:100%;position:relative}input.hidden{display:none}.slides-container .swiper-slide{font-size:16px!important}.slides-container.hidden{visibility:hidden;height:0!important}.button-next,.button-prev{position:absolute;top:calc(50% - 20px);z-index:10}.button-prev{left:0;right:auto}.button-next{left:auto;right:0}"]
|
|
@@ -284,6 +284,7 @@ MatSwipeField.propDecorators = {
|
|
|
284
284
|
formControl: [{ type: Input }],
|
|
285
285
|
formControlName: [{ type: Input }],
|
|
286
286
|
floatLabel: [{ type: Input }],
|
|
287
|
+
appearance: [{ type: Input }],
|
|
287
288
|
placeholder: [{ type: Input }],
|
|
288
289
|
debug: [{ type: Input }],
|
|
289
290
|
required: [{ type: Input }],
|
|
@@ -304,4 +305,4 @@ MatSwipeField.propDecorators = {
|
|
|
304
305
|
prevButton: [{ type: ViewChild, args: ['prevButton',] }],
|
|
305
306
|
nextButton: [{ type: ViewChild, args: ['nextButton',] }]
|
|
306
307
|
};
|
|
307
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuc3dpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9zd2lwZS9tYXRlcmlhbC5zd2lwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBWSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0wsT0FBTyxFQUFxQyxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFHLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBYyxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckYsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQWEsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRixPQUFPLEVBQWdCLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBS2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsTUFBTSxzQkFBc0IsR0FBYTtJQUN2QyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDO0lBQzVDLEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQVNGLE1BQU0sT0FBTyxhQUFhO0lBNEd4QixZQUNZLEVBQXFCLEVBQ1gsWUFBZ0M7UUFEMUMsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDWCxpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUE1RzlDLHNCQUFp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QyxJQUFJLENBQ0gsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQ3BDLENBQUMsQ0FBQzthQUNOO1FBQ0gsQ0FBQztLQUFBOzs7WUFqVkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxpQkFBaUI7Z0JBRTNCLG91RUFBb0M7Z0JBQ3BDLFNBQVMsRUFBRSxDQUFDLHNCQUFzQixDQUFDO2dCQUNuQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDaEQ7OztZQXpCaUMsaUJBQWlCO1lBQ1Asa0JBQWtCLHVCQXVJekQsUUFBUTs7O3dCQTNGVixLQUFLOzBCQUVMLEtBQUs7OEJBRUwsS0FBSzt5QkFFTCxLQUFLOzBCQUVMLEtBQUs7b0JBRUwsS0FBSzt1QkFFTCxLQUFLO3FCQUVMLEtBQUs7d0JBRUwsS0FBSztxQkFFTCxLQUFLOzBCQUVMLEtBQUs7Z0NBRUwsS0FBSzsyQkFFTCxLQUFLO3dCQUVMLEtBQUssU0FBQyxPQUFPO3VCQUViLEtBQUs7b0JBV0wsS0FBSztzQkE2QkwsTUFBTSxTQUFDLE9BQU87c0JBQ2QsTUFBTSxTQUFDLE1BQU07c0JBQ2IsTUFBTSxTQUFDLE9BQU87d0JBRWQsU0FBUyxTQUFDLFdBQVc7cUJBQ3JCLFNBQVMsU0FBQyxRQUFRLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO3lCQUNsQyxTQUFTLFNBQUMsWUFBWTt5QkFDdEIsU0FBUyxTQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQsIFByb3ZpZGVyLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwRGlyZWN0aXZlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgaXNPYnNlcnZhYmxlLCBub29wLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzTmlsLCBpc05vdE5pbCwgam9pblByb3BlcnRpZXNQYXRoLCB0b0Jvb2xlYW4gfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgSW5wdXRFbGVtZW50LCBzZWxlY3RJbnB1dENvbnRlbnQgfSBmcm9tICcuLi8uLi9pbnB1dHMnO1xuaW1wb3J0IHsgRXF1YWxzRm4sIERpc3BsYXlGbiB9IGZyb20gJy4uLy4uL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgRmxvYXRMYWJlbFR5cGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IElvblNsaWRlcyB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IE1hdEJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBmaXJzdE5vdE5pbFByb21pc2UgfSBmcm9tICcuLi8uLi9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge2lzTW9iaWxlfSBmcm9tICcuLi8uLi9wbGF0Zm9ybXMnO1xuXG5jb25zdCBERUZBVUxUX1ZBTFVFX0FDQ0VTU09SOiBQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hdFN3aXBlRmllbGQpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWF0LXN3aXBlLWZpZWxkJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwuc3dpcGUuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwuc3dpcGUuaHRtbCcsXG4gIHByb3ZpZGVyczogW0RFRkFVTFRfVkFMVUVfQUNDRVNTT1JdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNYXRTd2lwZUZpZWxkIGltcGxlbWVudHMgT25Jbml0LCBJbnB1dEVsZW1lbnQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX3ZhbHVlOiBhbnk7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfaXRlbXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfd3JpdGluZyA9IGZhbHNlO1xuICBwcml2YXRlIF90YWJpbmRleDogbnVtYmVyO1xuICBwcmV2aW91c0Rpc2FibGVkOiBib29sZWFuO1xuICBuZXh0RGlzYWJsZWQ6IGJvb2xlYW47XG4gIHNob3dTbGlkZXMgPSBmYWxzZTtcbiAgJGl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4odW5kZWZpbmVkKTtcbiAgJGxvYWRlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHNsaWRlc09wdGlvbnM6IHtcbiAgICBzcGVlZDogMTAwOyAvLyBGSVhNRTogc2VlbXMgaXQncyBub3Qgd29ya2luZ1xuICB9O1xuXG4gIEBJbnB1dCgpIGxvZ1ByZWZpeCA9ICdbbWF0LXN3aXBlLWZpZWxkXSc7XG5cbiAgQElucHV0KCkgZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sO1xuXG4gIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIGZsb2F0TGFiZWw6IEZsb2F0TGFiZWxUeXBlO1xuXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgZGVidWcgPSBmYWxzZTtcblxuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIG1vYmlsZTogYm9vbGVhbjtcblxuICBASW5wdXQoKSBjbGVhcmFibGUgPSBmYWxzZTtcblxuICBASW5wdXQoKSBlcXVhbHM6IEVxdWFsc0ZuIHwgbnVsbDtcblxuICBASW5wdXQoKSBkaXNwbGF5V2l0aDogRGlzcGxheUZuIHwgbnVsbDtcblxuICBASW5wdXQoKSBkaXNwbGF5QXR0cmlidXRlczogc3RyaW5nW107XG5cbiAgQElucHV0KCkgYXBwQXV0b2ZvY3VzOiBib29sZWFuO1xuXG4gIEBJbnB1dCgnY2xhc3MnKSBjbGFzc0xpc3Q6IHN0cmluZztcblxuICBASW5wdXQoKSBzZXQgdGFiaW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLl90YWJpbmRleCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3RhYmluZGV4ID0gdmFsdWU7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlVGFiSW5kZXgoKSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRhYmluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmluZGV4O1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGl0ZW1zKHZhbHVlOiBPYnNlcnZhYmxlPGFueVtdPiB8IGFueVtdKSB7XG4gICAgLy8gUmVtb3ZlIHByZXZpb3VzIHN1YnNjcmlwdGlvbiBvbiBpdGVtcywgKGlmIGV4aXRzKVxuICAgIGlmICh0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbikge1xuICAgICAgY29uc29sZS53YXJuKGAke3RoaXMubG9nUHJlZml4fSBJdGVtcyByZWNlaXZlZCB0d2ljZSAhYCk7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24ucmVtb3ZlKHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uKTtcbiAgICAgIHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzT2JzZXJ2YWJsZTxhbnlbXT4odmFsdWUpKSB7XG4gICAgICB0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbiA9IHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgIHZhbHVlLnN1YnNjcmliZSh2ID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRJdGVtcyh2KTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy4kaXRlbXMuZ2V0VmFsdWUoKSkge1xuICAgICAgICB0aGlzLmxvYWRJdGVtcyh2YWx1ZSBhcyBhbnlbXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGl0ZW1zKCk6IE9ic2VydmFibGU8YW55W10+IHwgYW55W10ge1xuICAgIHJldHVybiB0aGlzLiRpdGVtcy5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgZ2V0IGl0ZW1Db3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiAodGhpcy4kaXRlbXMuZ2V0VmFsdWUoKSB8fCBbXSkubGVuZ3RoO1xuICB9XG5cbiAgQE91dHB1dCgnY2xpY2snKSBvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuICBAT3V0cHV0KCdibHVyJykgYmx1cnJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcbiAgQE91dHB1dCgnZm9jdXMnKSBmb2N1c2VkID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2Zha2VJbnB1dCcpIGZha2VJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc2xpZGVzJywge3N0YXRpYzogdHJ1ZX0pIHNsaWRlczogSW9uU2xpZGVzO1xuICBAVmlld0NoaWxkKCdwcmV2QnV0dG9uJykgcHJldkJ1dHRvbjogTWF0QnV0dG9uO1xuICBAVmlld0NoaWxkKCduZXh0QnV0dG9uJykgbmV4dEJ1dHRvbjogTWF0QnV0dG9uO1xuXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmZvcm1Db250cm9sLmRpc2FibGVkO1xuICB9XG5cbiAgZ2V0IGVuYWJsZWQoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29udHJvbC5lbmFibGVkO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGZvcm1Hcm91cERpcjogRm9ybUdyb3VwRGlyZWN0aXZlXG4gICkge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRyb2wgfHwgdGhpcy5mb3JtQ29udHJvbE5hbWUgJiYgdGhpcy5mb3JtR3JvdXBEaXIgJiYgdGhpcy5mb3JtR3JvdXBEaXIuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpIGFzIEZvcm1Db250cm9sO1xuICAgIGlmICghdGhpcy5mb3JtQ29udHJvbCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIG1hbmRhdG9yeSBhdHRyaWJ1dGUgXFwnZm9ybUNvbnRyb2xcXCcgb3IgXFwnZm9ybUNvbnRyb2xOYW1lXFwnIGluIDxtYXQtc3dpcGUtZmllbGQ+LicpO1xuXG4gICAgLy8gRGVmYXVsdCB2YWx1ZXNcbiAgICB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzID0gdGhpcy5kaXNwbGF5QXR0cmlidXRlcyB8fCBbJ2xhYmVsJywgJ25hbWUnXTtcbiAgICB0aGlzLmRpc3BsYXlXaXRoID0gdGhpcy5kaXNwbGF5V2l0aCB8fCAoKG9iaikgPT4gb2JqICYmIGpvaW5Qcm9wZXJ0aWVzUGF0aChvYmosIHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMpKTtcbiAgICB0aGlzLmVxdWFscyA9IHRoaXMuZXF1YWxzIHx8ICgobzE6IGFueSwgbzI6IGFueSkgPT4gbzEgJiYgbzIgJiYgbzEuaWQgPT09IG8yLmlkKTtcbiAgICB0aGlzLm1vYmlsZSA9IGlzTm90TmlsKHRoaXMubW9iaWxlKSA/IHRoaXMubW9iaWxlIDogaXNNb2JpbGUod2luZG93KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuJGl0ZW1zLmNvbXBsZXRlKCk7XG4gIH1cblxuICBfb25Gb2N1c0Zha2VJbnB1dChldmVudDogRm9jdXNFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAvLyBIaWRlIHRoZSBmYWtlIGlucHV0XG4gICAgaWYgKHRoaXMuZmFrZUlucHV0KSB7XG4gICAgICB0aGlzLmZha2VJbnB1dC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgICAgdGhpcy5mYWtlSW5wdXQubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IC0xO1xuICAgIH1cblxuICAgIC8vIEZvY3VzIG9uIGZpcnN0IGJ1dHRvblxuICAgIHRoaXMuZm9jdXMoKTtcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIC8vIHNob3cgc2xpZGVzIGNvbXBvbmVudFxuICAgIHRoaXMuc2hvd1NsaWRlcyA9IHRydWU7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnByZXZCdXR0b24pIHtcbiAgICAgICAgdGhpcy5wcmV2QnV0dG9uLmZvY3VzKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KCk7XG4gICAgfSk7XG5cbiAgICBpZiAoaXNOaWwodGhpcy5fdmFsdWUpKSB7XG4gICAgICAvLyBTbGlkZSB0byBmaXJzdCBhbmQgYWZmZWN0IHZhbHVlXG4gICAgICB0aGlzLnNsaWRlVG8oMCk7XG4gICAgICB0aGlzLnNsaWRlQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSwgYmVjYXVzZSwgdGhpcyBjb21wb25lbnQgaGFzIGEgdGVtcG9yYXJ5IGNvbXBvbmVudCBkaXNwbGF5ZWQgYmVmb3JlIHRoZSBmaXJzdCBmb2N1cyBldmVudFxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVUYWJJbmRleCgpIHtcbiAgICBpZiAoaXNOaWwodGhpcy5fdGFiaW5kZXgpIHx8IHRoaXMuX3RhYmluZGV4ID09PSAtMSkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuZmFrZUlucHV0KSB7XG4gICAgICBpZiAodGhpcy5zaG93U2xpZGVzKSB7XG4gICAgICAgIHRoaXMuZmFrZUlucHV0Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7XG4gICAgICAgIHRoaXMuZmFrZUlucHV0Lm5hdGl2ZUVsZW1lbnQudGFiSW5kZXggPSAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmFrZUlucHV0Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gICAgICAgIHRoaXMuZmFrZUlucHV0Lm5hdGl2ZUVsZW1lbnQudGFiSW5kZXggPSB0aGlzLl90YWJpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMucHJldkJ1dHRvbiAmJiB0aGlzLm5leHRCdXR0b24pIHtcbiAgICAgIHRoaXMucHJldkJ1dHRvbi5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRhYkluZGV4ID0gdGhpcy5zaG93U2xpZGVzID8gdGhpcy5fdGFiaW5kZXggOiAtMTtcbiAgICAgIHRoaXMubmV4dEJ1dHRvbi5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRhYkluZGV4ID0gdGhpcy5zaG93U2xpZGVzID8gdGhpcy5fdGFiaW5kZXggKyAxIDogLTE7XG4gICAgfVxuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fd3JpdGluZykgcmV0dXJuO1xuXG4gICAgdGhpcy5fd3JpdGluZyA9IHRydWU7XG4gICAgaWYgKCF0aGlzLmVxdWFscyh2YWx1ZSwgdGhpcy5fdmFsdWUpKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5zaG93U2xpZGVzID0gaXNOb3ROaWwodGhpcy5fdmFsdWUpO1xuICAgICAgdGhpcy51cGRhdGVTbGlkZXMoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVUYWJJbmRleCgpKTtcbiAgICB9XG4gICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGNsZWFyVmFsdWUoZXZlbnQ6IFVJRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLl93cml0aW5nID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmxvZ1ByZWZpeH0gY2xlYXIgdmFsdWVgKTtcbiAgICB0aGlzLl92YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUobnVsbCwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB0aGlzLnNob3dTbGlkZXMgPSBmYWxzZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlVGFiSW5kZXgoKTtcbiAgICAgIHRoaXMuc2xpZGVUbygwKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gICAgICB9LCAxMDApO1xuICAgIH0pO1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sobnVsbCk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zbGlkZXMubG9ja1N3aXBlcyhpc0Rpc2FibGVkKS50aGVuKCgpID0+IHRoaXMudXBkYXRlQnV0dG9ucygpKTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgc2VsZWN0SW5wdXRDb250ZW50ID0gc2VsZWN0SW5wdXRDb250ZW50O1xuXG4gIHByZXZpb3VzKCkge1xuICAgIHRoaXMuc2xpZGVzLnNsaWRlUHJldigpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICB0aGlzLnNsaWRlcy5zbGlkZU5leHQoKTtcbiAgfVxuXG4gIHJlYWNoU3RhcnQocmVhY2hlZDogYm9vbGVhbikge1xuICAgIHRoaXMucHJldmlvdXNEaXNhYmxlZCA9IHJlYWNoZWQ7XG4gIH1cblxuICByZWFjaEVuZChyZWFjaGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5uZXh0RGlzYWJsZWQgPSByZWFjaGVkO1xuICB9XG5cbiAgc2xpZGVzTG9hZGVkKCkge1xuICAgIHRoaXMuJGxvYWRlZC5uZXh0KHRydWUpO1xuICB9XG5cbiAgc2xpZGVDaGFuZ2VkKCkge1xuICAgIHRoaXMuc2xpZGVzLmdldEFjdGl2ZUluZGV4KClcbiAgICAgIC50aGVuKGFjdGl2ZUluZGV4ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3dyaXRpbmcpIHJldHVybjtcbiAgICAgICAgdGhpcy5fd3JpdGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gKHRoaXMuJGl0ZW1zLmdldFZhbHVlKCkgfHwgW10pW2FjdGl2ZUluZGV4XSB8fCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMubG9nUHJlZml4fSBzbGlkZSBjaGFuZ2VkIEFjdGl2ZUluZGV4OiR7YWN0aXZlSW5kZXh9LCBuZXcgdmFsdWU6JHt2YWx1ZX1gKTtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKHZhbHVlLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2hlY2tJZlRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh2YWx1ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2QgLS0gKi9cblxuICBwcml2YXRlIGxvYWRJdGVtcyhpdGVtczogYW55W10pIHtcbiAgICB0aGlzLiRsb2FkZWQubmV4dChmYWxzZSk7XG4gICAgdGhpcy4kaXRlbXMubmV4dChpdGVtcyk7XG4gICAgdGhpcy5yZWFkeSgpLnRoZW4oKCkgPT4gdGhpcy5zbGlkZXMudXBkYXRlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0lmVG91Y2hlZCgpIHtcbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbC50b3VjaGVkKSB7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTbGlkZXMoKSB7XG4gICAgaWYgKHRoaXMuc2hvd1NsaWRlcykge1xuICAgICAgY29uc3QgaXRlbUluZGV4ID0gKHRoaXMuJGl0ZW1zLmdldFZhbHVlKCkgfHwgW10pLmZpbmRJbmRleCh2YWx1ZSA9PiB0aGlzLmVxdWFscyh2YWx1ZSwgdGhpcy5fdmFsdWUpKTtcbiAgICAgIGlmIChpdGVtSW5kZXggPj0gMCkge1xuICAgICAgICB0aGlzLnNsaWRlVG8oaXRlbUluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLmxvZ1ByZWZpeH0gSXRlbSBub3QgZm91bmRgLCB0aGlzLl92YWx1ZSk7XG4gICAgICAgIHRoaXMuc2xpZGVUbygwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNsaWRlVG8oaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2xpZGVzLnNsaWRlVG8oaW5kZXgsIDAsIGZhbHNlKS50aGVuKCgpID0+XG4gICAgICB0aGlzLnNsaWRlcy51cGRhdGUoKS50aGVuKCgpID0+XG4gICAgICAgIHRoaXMudXBkYXRlQnV0dG9ucygpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlQnV0dG9ucygpIHtcbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IGF3YWl0IHRoaXMuc2xpZGVzLmdldEFjdGl2ZUluZGV4KCk7XG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5sb2dQcmVmaXh9IHVwZGF0ZSBidXR0b25zIEFjdGl2ZUluZGV4OiR7YWN0aXZlSW5kZXh9YCk7XG4gICAgdGhpcy5wcmV2aW91c0Rpc2FibGVkID0gYWN0aXZlSW5kZXggPT09IDAgfHwgdGhpcy5kaXNhYmxlZDtcbiAgICB0aGlzLm5leHREaXNhYmxlZCA9IGFjdGl2ZUluZGV4ID09PSB0aGlzLml0ZW1Db3VudCAtIDEgfHwgdGhpcy5kaXNhYmxlZDtcbiAgfVxuXG5cbiAgLy8gbm90IHVzZWQgLi4uXG4gIGFzeW5jIGdldFNsaWRlcygpOiBQcm9taXNlPElvblNsaWRlcz4ge1xuICAgIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICByZXR1cm4gdGhpcy5zbGlkZXM7XG4gIH1cblxuICBhc3luYyByZWFkeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBXYWl0IHBtZm1zIGxvYWQsIGFuZCBjb250cm9scyBsb2FkXG4gICAgaWYgKHRoaXMuJGxvYWRlZC5nZXRWYWx1ZSgpID09PSBmYWxzZSkge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5sb2dQcmVmaXh9IHdhaXRpbmcgc2xpZGVzIHRvIGJlIHJlYWR5Li4uYCk7XG4gICAgICBhd2FpdCBmaXJzdE5vdE5pbFByb21pc2UodGhpcy4kbG9hZGVkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcigobG9hZGVkKSA9PiBsb2FkZWQgPT09IHRydWUpXG4gICAgICAgICkpO1xuICAgIH1cbiAgfVxuXG59XG4iXX0=
|
|
308
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuc3dpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9zd2lwZS9tYXRlcmlhbC5zd2lwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBWSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0wsT0FBTyxFQUFxQyxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFHLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBYyxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckYsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQWEsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRixPQUFPLEVBQWdCLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBS2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsTUFBTSxzQkFBc0IsR0FBYTtJQUN2QyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDO0lBQzVDLEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQVNGLE1BQU0sT0FBTyxhQUFhO0lBZ0d4QixZQUNZLEVBQXFCLEVBQ1gsWUFBZ0M7UUFEMUMsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDWCxpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFoRzlDLHNCQUFp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QyxJQUFJLENBQ0gsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQ3BDLENBQUMsQ0FBQzthQUNOO1FBQ0gsQ0FBQztLQUFBOzs7WUFyVUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxpQkFBaUI7Z0JBRTNCLGl4RUFBb0M7Z0JBQ3BDLFNBQVMsRUFBRSxDQUFDLHNCQUFzQixDQUFDO2dCQUNuQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDaEQ7OztZQXpCaUMsaUJBQWlCO1lBQ1Asa0JBQWtCLHVCQTJIekQsUUFBUTs7O3dCQS9FVixLQUFLOzBCQUNMLEtBQUs7OEJBQ0wsS0FBSzt5QkFDTCxLQUFLO3lCQUNMLEtBQUs7MEJBQ0wsS0FBSztvQkFDTCxLQUFLO3VCQUNMLEtBQUs7cUJBQ0wsS0FBSzt3QkFDTCxLQUFLO3FCQUNMLEtBQUs7MEJBQ0wsS0FBSztnQ0FDTCxLQUFLOzJCQUNMLEtBQUs7d0JBQ0wsS0FBSyxTQUFDLE9BQU87dUJBRWIsS0FBSztvQkFXTCxLQUFLO3NCQTZCTCxNQUFNLFNBQUMsT0FBTztzQkFDZCxNQUFNLFNBQUMsTUFBTTtzQkFDYixNQUFNLFNBQUMsT0FBTzt3QkFFZCxTQUFTLFNBQUMsV0FBVztxQkFDckIsU0FBUyxTQUFDLFFBQVEsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7eUJBQ2xDLFNBQVMsU0FBQyxZQUFZO3lCQUN0QixTQUFTLFNBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgUHJvdmlkZXIsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBpc09ic2VydmFibGUsIG5vb3AsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaXNOaWwsIGlzTm90TmlsLCBqb2luUHJvcGVydGllc1BhdGgsIHRvQm9vbGVhbiB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBJbnB1dEVsZW1lbnQsIHNlbGVjdElucHV0Q29udGVudCB9IGZyb20gJy4uLy4uL2lucHV0cyc7XG5pbXBvcnQgeyBFcXVhbHNGbiwgRGlzcGxheUZuIH0gZnJvbSAnLi4vLi4vZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQge0Zsb2F0TGFiZWxUeXBlLCBNYXRGb3JtRmllbGRBcHBlYXJhbmNlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IElvblNsaWRlcyB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IE1hdEJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBmaXJzdE5vdE5pbFByb21pc2UgfSBmcm9tICcuLi8uLi9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge2lzTW9iaWxlfSBmcm9tICcuLi8uLi9wbGF0Zm9ybXMnO1xuXG5jb25zdCBERUZBVUxUX1ZBTFVFX0FDQ0VTU09SOiBQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hdFN3aXBlRmllbGQpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWF0LXN3aXBlLWZpZWxkJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwuc3dpcGUuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwuc3dpcGUuaHRtbCcsXG4gIHByb3ZpZGVyczogW0RFRkFVTFRfVkFMVUVfQUNDRVNTT1JdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNYXRTd2lwZUZpZWxkIGltcGxlbWVudHMgT25Jbml0LCBJbnB1dEVsZW1lbnQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX3ZhbHVlOiBhbnk7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfaXRlbXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfd3JpdGluZyA9IGZhbHNlO1xuICBwcml2YXRlIF90YWJpbmRleDogbnVtYmVyO1xuICBwcmV2aW91c0Rpc2FibGVkOiBib29sZWFuO1xuICBuZXh0RGlzYWJsZWQ6IGJvb2xlYW47XG4gIHNob3dTbGlkZXMgPSBmYWxzZTtcbiAgJGl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4odW5kZWZpbmVkKTtcbiAgJGxvYWRlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHNsaWRlc09wdGlvbnM6IHtcbiAgICBzcGVlZDogMTAwOyAvLyBGSVhNRTogc2VlbXMgaXQncyBub3Qgd29ya2luZ1xuICB9O1xuXG4gIEBJbnB1dCgpIGxvZ1ByZWZpeCA9ICdbbWF0LXN3aXBlLWZpZWxkXSc7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcbiAgQElucHV0KCkgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZsb2F0TGFiZWw6IEZsb2F0TGFiZWxUeXBlO1xuICBASW5wdXQoKSBhcHBlYXJhbmNlOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBkZWJ1ZyA9IGZhbHNlO1xuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBtb2JpbGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNsZWFyYWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBlcXVhbHM6IEVxdWFsc0ZuIHwgbnVsbDtcbiAgQElucHV0KCkgZGlzcGxheVdpdGg6IERpc3BsYXlGbiB8IG51bGw7XG4gIEBJbnB1dCgpIGRpc3BsYXlBdHRyaWJ1dGVzOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgYXBwQXV0b2ZvY3VzOiBib29sZWFuO1xuICBASW5wdXQoJ2NsYXNzJykgY2xhc3NMaXN0OiBzdHJpbmc7XG5cbiAgQElucHV0KCkgc2V0IHRhYmluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fdGFiaW5kZXggIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl90YWJpbmRleCA9IHZhbHVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVRhYkluZGV4KCkpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0YWJpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90YWJpbmRleDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBpdGVtcyh2YWx1ZTogT2JzZXJ2YWJsZTxhbnlbXT4gfCBhbnlbXSkge1xuICAgIC8vIFJlbW92ZSBwcmV2aW91cyBzdWJzY3JpcHRpb24gb24gaXRlbXMsIChpZiBleGl0cylcbiAgICBpZiAodGhpcy5faXRlbXNTdWJzY3JpcHRpb24pIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLmxvZ1ByZWZpeH0gSXRlbXMgcmVjZWl2ZWQgdHdpY2UgIWApO1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZSh0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbik7XG4gICAgICB0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmIChpc09ic2VydmFibGU8YW55W10+KHZhbHVlKSkge1xuICAgICAgdGhpcy5faXRlbXNTdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICB2YWx1ZS5zdWJzY3JpYmUodiA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkSXRlbXModik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMuJGl0ZW1zLmdldFZhbHVlKCkpIHtcbiAgICAgICAgdGhpcy5sb2FkSXRlbXModmFsdWUgYXMgYW55W10pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBpdGVtcygpOiBPYnNlcnZhYmxlPGFueVtdPiB8IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy4kaXRlbXMuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIGdldCBpdGVtQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHRoaXMuJGl0ZW1zLmdldFZhbHVlKCkgfHwgW10pLmxlbmd0aDtcbiAgfVxuXG4gIEBPdXRwdXQoJ2NsaWNrJykgb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcbiAgQE91dHB1dCgnYmx1cicpIGJsdXJyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG4gIEBPdXRwdXQoJ2ZvY3VzJykgZm9jdXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcblxuICBAVmlld0NoaWxkKCdmYWtlSW5wdXQnKSBmYWtlSW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NsaWRlcycsIHtzdGF0aWM6IHRydWV9KSBzbGlkZXM6IElvblNsaWRlcztcbiAgQFZpZXdDaGlsZCgncHJldkJ1dHRvbicpIHByZXZCdXR0b246IE1hdEJ1dHRvbjtcbiAgQFZpZXdDaGlsZCgnbmV4dEJ1dHRvbicpIG5leHRCdXR0b246IE1hdEJ1dHRvbjtcblxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29udHJvbC5kaXNhYmxlZDtcbiAgfVxuXG4gIGdldCBlbmFibGVkKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbnRyb2wuZW5hYmxlZDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb3JtR3JvdXBEaXI6IEZvcm1Hcm91cERpcmVjdGl2ZVxuICApIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1Db250cm9sIHx8IHRoaXMuZm9ybUNvbnRyb2xOYW1lICYmIHRoaXMuZm9ybUdyb3VwRGlyICYmIHRoaXMuZm9ybUdyb3VwRGlyLmZvcm0uZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKSBhcyBGb3JtQ29udHJvbDtcbiAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBtYW5kYXRvcnkgYXR0cmlidXRlIFxcJ2Zvcm1Db250cm9sXFwnIG9yIFxcJ2Zvcm1Db250cm9sTmFtZVxcJyBpbiA8bWF0LXN3aXBlLWZpZWxkPi4nKTtcblxuICAgIC8vIERlZmF1bHQgdmFsdWVzXG4gICAgdGhpcy5kaXNwbGF5QXR0cmlidXRlcyA9IHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMgfHwgWydsYWJlbCcsICduYW1lJ107XG4gICAgdGhpcy5kaXNwbGF5V2l0aCA9IHRoaXMuZGlzcGxheVdpdGggfHwgKChvYmopID0+IG9iaiAmJiBqb2luUHJvcGVydGllc1BhdGgob2JqLCB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzKSk7XG4gICAgdGhpcy5lcXVhbHMgPSB0aGlzLmVxdWFscyB8fCAoKG8xOiBhbnksIG8yOiBhbnkpID0+IG8xICYmIG8yICYmIG8xLmlkID09PSBvMi5pZCk7XG4gICAgdGhpcy5tb2JpbGUgPSBpc05vdE5pbCh0aGlzLm1vYmlsZSkgPyB0aGlzLm1vYmlsZSA6IGlzTW9iaWxlKHdpbmRvdyk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl92YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLiRpdGVtcy5jb21wbGV0ZSgpO1xuICB9XG5cbiAgX29uRm9jdXNGYWtlSW5wdXQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgLy8gSGlkZSB0aGUgZmFrZSBpbnB1dFxuICAgIGlmICh0aGlzLmZha2VJbnB1dCkge1xuICAgICAgdGhpcy5mYWtlSW5wdXQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICAgIHRoaXMuZmFrZUlucHV0Lm5hdGl2ZUVsZW1lbnQudGFiSW5kZXggPSAtMTtcbiAgICB9XG5cbiAgICAvLyBGb2N1cyBvbiBmaXJzdCBidXR0b25cbiAgICB0aGlzLmZvY3VzKCk7XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICAvLyBzaG93IHNsaWRlcyBjb21wb25lbnRcbiAgICB0aGlzLnNob3dTbGlkZXMgPSB0cnVlO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5wcmV2QnV0dG9uKSB7XG4gICAgICAgIHRoaXMucHJldkJ1dHRvbi5mb2N1cygpO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVUYWJJbmRleCgpO1xuICAgIH0pO1xuXG4gICAgaWYgKGlzTmlsKHRoaXMuX3ZhbHVlKSkge1xuICAgICAgLy8gU2xpZGUgdG8gZmlyc3QgYW5kIGFmZmVjdCB2YWx1ZVxuICAgICAgdGhpcy5zbGlkZVRvKDApO1xuICAgICAgdGhpcy5zbGlkZUNoYW5nZWQoKTtcbiAgICB9XG5cbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UsIGJlY2F1c2UsIHRoaXMgY29tcG9uZW50IGhhcyBhIHRlbXBvcmFyeSBjb21wb25lbnQgZGlzcGxheWVkIGJlZm9yZSB0aGUgZmlyc3QgZm9jdXMgZXZlbnRcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlVGFiSW5kZXgoKSB7XG4gICAgaWYgKGlzTmlsKHRoaXMuX3RhYmluZGV4KSB8fCB0aGlzLl90YWJpbmRleCA9PT0gLTEpIHJldHVybjtcblxuICAgIGlmICh0aGlzLmZha2VJbnB1dCkge1xuICAgICAgaWYgKHRoaXMuc2hvd1NsaWRlcykge1xuICAgICAgICB0aGlzLmZha2VJbnB1dC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgICAgICB0aGlzLmZha2VJbnB1dC5uYXRpdmVFbGVtZW50LnRhYkluZGV4ID0gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZha2VJbnB1dC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgICAgICB0aGlzLmZha2VJbnB1dC5uYXRpdmVFbGVtZW50LnRhYkluZGV4ID0gdGhpcy5fdGFiaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnByZXZCdXR0b24gJiYgdGhpcy5uZXh0QnV0dG9uKSB7XG4gICAgICB0aGlzLnByZXZCdXR0b24uX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IHRoaXMuc2hvd1NsaWRlcyA/IHRoaXMuX3RhYmluZGV4IDogLTE7XG4gICAgICB0aGlzLm5leHRCdXR0b24uX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IHRoaXMuc2hvd1NsaWRlcyA/IHRoaXMuX3RhYmluZGV4ICsgMSA6IC0xO1xuICAgIH1cbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dyaXRpbmcpIHJldHVybjtcblxuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuICAgIGlmICghdGhpcy5lcXVhbHModmFsdWUsIHRoaXMuX3ZhbHVlKSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc2hvd1NsaWRlcyA9IGlzTm90TmlsKHRoaXMuX3ZhbHVlKTtcbiAgICAgIHRoaXMudXBkYXRlU2xpZGVzKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlVGFiSW5kZXgoKSk7XG4gICAgfVxuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBjbGVhclZhbHVlKGV2ZW50OiBVSUV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5fd3JpdGluZyA9IHRydWU7XG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5sb2dQcmVmaXh9IGNsZWFyIHZhbHVlYCk7XG4gICAgdGhpcy5fdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKG51bGwsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgdGhpcy5zaG93U2xpZGVzID0gZmFsc2U7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KCk7XG4gICAgICB0aGlzLnNsaWRlVG8oMCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICAgICAgfSwgMTAwKTtcbiAgICB9KTtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKG51bGwpO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2xpZGVzLmxvY2tTd2lwZXMoaXNEaXNhYmxlZCkudGhlbigoKSA9PiB0aGlzLnVwZGF0ZUJ1dHRvbnMoKSk7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHNlbGVjdElucHV0Q29udGVudCA9IHNlbGVjdElucHV0Q29udGVudDtcblxuICBwcmV2aW91cygpIHtcbiAgICB0aGlzLnNsaWRlcy5zbGlkZVByZXYoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgdGhpcy5zbGlkZXMuc2xpZGVOZXh0KCk7XG4gIH1cblxuICByZWFjaFN0YXJ0KHJlYWNoZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnByZXZpb3VzRGlzYWJsZWQgPSByZWFjaGVkO1xuICB9XG5cbiAgcmVhY2hFbmQocmVhY2hlZDogYm9vbGVhbikge1xuICAgIHRoaXMubmV4dERpc2FibGVkID0gcmVhY2hlZDtcbiAgfVxuXG4gIHNsaWRlc0xvYWRlZCgpIHtcbiAgICB0aGlzLiRsb2FkZWQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHNsaWRlQ2hhbmdlZCgpIHtcbiAgICB0aGlzLnNsaWRlcy5nZXRBY3RpdmVJbmRleCgpXG4gICAgICAudGhlbihhY3RpdmVJbmRleCA9PiB7XG4gICAgICAgIGlmICh0aGlzLl93cml0aW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCB2YWx1ZSA9ICh0aGlzLiRpdGVtcy5nZXRWYWx1ZSgpIHx8IFtdKVthY3RpdmVJbmRleF0gfHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmxvZ1ByZWZpeH0gc2xpZGUgY2hhbmdlZCBBY3RpdmVJbmRleDoke2FjdGl2ZUluZGV4fSwgbmV3IHZhbHVlOiR7dmFsdWV9YCk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSh2YWx1ZSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNoZWNrSWZUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodmFsdWUpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSBsb2FkSXRlbXMoaXRlbXM6IGFueVtdKSB7XG4gICAgdGhpcy4kbG9hZGVkLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuJGl0ZW1zLm5leHQoaXRlbXMpO1xuICAgIHRoaXMucmVhZHkoKS50aGVuKCgpID0+IHRoaXMuc2xpZGVzLnVwZGF0ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJZlRvdWNoZWQoKSB7XG4gICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wudG91Y2hlZCkge1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2xpZGVzKCkge1xuICAgIGlmICh0aGlzLnNob3dTbGlkZXMpIHtcbiAgICAgIGNvbnN0IGl0ZW1JbmRleCA9ICh0aGlzLiRpdGVtcy5nZXRWYWx1ZSgpIHx8IFtdKS5maW5kSW5kZXgodmFsdWUgPT4gdGhpcy5lcXVhbHModmFsdWUsIHRoaXMuX3ZhbHVlKSk7XG4gICAgICBpZiAoaXRlbUluZGV4ID49IDApIHtcbiAgICAgICAgdGhpcy5zbGlkZVRvKGl0ZW1JbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oYCR7dGhpcy5sb2dQcmVmaXh9IEl0ZW0gbm90IGZvdW5kYCwgdGhpcy5fdmFsdWUpO1xuICAgICAgICB0aGlzLnNsaWRlVG8oMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzbGlkZVRvKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnNsaWRlcy5zbGlkZVRvKGluZGV4LCAwLCBmYWxzZSkudGhlbigoKSA9PlxuICAgICAgdGhpcy5zbGlkZXMudXBkYXRlKCkudGhlbigoKSA9PlxuICAgICAgICB0aGlzLnVwZGF0ZUJ1dHRvbnMoKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUJ1dHRvbnMoKSB7XG4gICAgY29uc3QgYWN0aXZlSW5kZXggPSBhd2FpdCB0aGlzLnNsaWRlcy5nZXRBY3RpdmVJbmRleCgpO1xuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMubG9nUHJlZml4fSB1cGRhdGUgYnV0dG9ucyBBY3RpdmVJbmRleDoke2FjdGl2ZUluZGV4fWApO1xuICAgIHRoaXMucHJldmlvdXNEaXNhYmxlZCA9IGFjdGl2ZUluZGV4ID09PSAwIHx8IHRoaXMuZGlzYWJsZWQ7XG4gICAgdGhpcy5uZXh0RGlzYWJsZWQgPSBhY3RpdmVJbmRleCA9PT0gdGhpcy5pdGVtQ291bnQgLSAxIHx8IHRoaXMuZGlzYWJsZWQ7XG4gIH1cblxuXG4gIC8vIG5vdCB1c2VkIC4uLlxuICBhc3luYyBnZXRTbGlkZXMoKTogUHJvbWlzZTxJb25TbGlkZXM+IHtcbiAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgcmV0dXJuIHRoaXMuc2xpZGVzO1xuICB9XG5cbiAgYXN5bmMgcmVhZHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gV2FpdCBwbWZtcyBsb2FkLCBhbmQgY29udHJvbHMgbG9hZFxuICAgIGlmICh0aGlzLiRsb2FkZWQuZ2V0VmFsdWUoKSA9PT0gZmFsc2UpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMubG9nUHJlZml4fSB3YWl0aW5nIHNsaWRlcyB0byBiZSByZWFkeS4uLmApO1xuICAgICAgYXdhaXQgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMuJGxvYWRlZFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKGxvYWRlZCkgPT4gbG9hZGVkID09PSB0cnVlKVxuICAgICAgICApKTtcbiAgICB9XG4gIH1cblxufVxuIl19
|