@wertzui/ngx-restworld-client 15.2.0 → 15.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/restworld-form/restworld-form.component.mjs +10 -3
- package/esm2022/lib/components/restworld-inputs/restworld-inputs.mjs +7 -4
- package/fesm2022/wertzui-ngx-restworld-client.mjs +15 -5
- package/fesm2022/wertzui-ngx-restworld-client.mjs.map +1 -1
- package/lib/components/restworld-form/restworld-form.component.d.ts +5 -1
- package/lib/components/restworld-form/restworld-form.component.d.ts.map +1 -1
- package/lib/components/restworld-inputs/restworld-inputs.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -59,6 +59,10 @@ export class RestWorldFormComponent {
|
|
|
59
59
|
* A reference to a template that can be used to render custom buttons for the form.
|
|
60
60
|
*/
|
|
61
61
|
buttonsRef;
|
|
62
|
+
/**
|
|
63
|
+
* A reference to a template that can be used to render custom content inside the <form> element instead of the default form.
|
|
64
|
+
*/
|
|
65
|
+
contentRef;
|
|
62
66
|
scrollToFirstValidationError() {
|
|
63
67
|
setTimeout(() => {
|
|
64
68
|
const validationErrorElements = this._elementRef.nativeElement.querySelectorAll('rw-validation-errors>val-errors>div');
|
|
@@ -222,11 +226,11 @@ export class RestWorldFormComponent {
|
|
|
222
226
|
return this._clients.getClient(this.apiName);
|
|
223
227
|
}
|
|
224
228
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: RestWorldFormComponent, deps: [{ token: i1.RestWorldClientCollection }, { token: i2.ConfirmationService }, { token: i2.MessageService }, { token: i3.FormService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
225
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: RestWorldFormComponent, selector: "rw-form", inputs: { template: "template", apiName: "apiName", rel: "rel", allowSubmit: "allowSubmit", allowDelete: "allowDelete", allowReload: "allowReload", showSubmit: "showSubmit", showDelete: "showDelete", showReload: "showReload" }, outputs: { afterDelete: "afterDelete", afterSubmit: "afterSubmit" }, queries: [{ propertyName: "buttonsRef", first: true, predicate: ["buttons"], descendants: true }], ngImport: i0, template: "<form *ngIf=\"formGroup !== undefined && template !== undefined\" [formGroup]=\"formGroup\" (ngSubmit)=\"submit()\">\n <div class=\"blockable-container\">\n <div class=\"blockable-element\">\n <div class=\"grid field\">\n <div class=\"col-12 md:col-10 md:col-offset-2\">\n <rw-validation-errors [form]=\"formGroup\"></rw-validation-errors>\n </div>\n </div>\n <rw-input-template [template]=\"template\" [apiName]=\"apiName\"></rw-input-template>\n </div>\n <div class=\"blockable-overlay\" *ngIf=\"isLoading\">\n <p-progressSpinner></p-progressSpinner>\n </div>\n </div>\n\n <div class=\"grid\">\n <div class=\"col\">\n <div class=\"flex justify-content-end w-full\">\n <ng-template #defaultButtons>\n <button pButton pRipple type=\"submit\" label=\"Save\" icon=\"far fa-save\" class=\"mx-2 p-button-success\"\n [disabled]=\"!allowSubmit\"></button>\n <button pButton pRipple type=\"button\" label=\"Reload\" icon=\"fas fa-redo\" class=\"mx-2 p-button-info\"\n (click)=\"reload()\" [disabled]=\"!canReload\"></button>\n <button pButton pRipple type=\"button\" label=\"Delete\" icon=\"far fa-trash-alt\" class=\"ml-2 p-button-danger\"\n (click)=\"showDeleteConfirmatioModal()\" [disabled]=\"!canDelete\"></button>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"buttonsRef || defaultButtons\"></ng-container>\n </div>\n </div>\n </div>\n</form>\n", styles: [".blockable-container{display:grid;place-items:center;grid-template-areas:\"inner\"}.blockable-element{grid-area:inner;width:100%}.blockable-overlay{grid-area:inner;height:100%;width:100%;background-color:#0006;display:flex;align-items:center;justify-content:center;z-index:1}\n"], dependencies: [{ kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i7.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "directive", type: i8.Ripple, selector: "[pRipple]" }, { kind: "component", type: i9.RestWorldInputTemplateComponent, selector: "rw-input-template", inputs: ["apiName", "template"] }, { kind: "component", type: i10.RestWorldValidationErrorsComponent, selector: "rw-validation-errors", inputs: ["property", "form"] }] });
|
|
229
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: RestWorldFormComponent, selector: "rw-form", inputs: { template: "template", apiName: "apiName", rel: "rel", allowSubmit: "allowSubmit", allowDelete: "allowDelete", allowReload: "allowReload", showSubmit: "showSubmit", showDelete: "showDelete", showReload: "showReload" }, outputs: { afterDelete: "afterDelete", afterSubmit: "afterSubmit" }, queries: [{ propertyName: "buttonsRef", first: true, predicate: ["buttons"], descendants: true }, { propertyName: "contentRef", first: true, predicate: ["content"], descendants: true }], ngImport: i0, template: "<form *ngIf=\"formGroup !== undefined && template !== undefined\" [formGroup]=\"formGroup\" (ngSubmit)=\"submit()\">\n <div class=\"blockable-container\">\n <div class=\"blockable-element\">\n <div class=\"grid field\">\n <div class=\"col-12 md:col-10 md:col-offset-2\">\n <rw-validation-errors [form]=\"formGroup\"></rw-validation-errors>\n </div>\n </div>\n <ng-template #defaultContent>\n <rw-input-template [template]=\"template\" [apiName]=\"apiName\"></rw-input-template>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"contentRef || defaultContent\"></ng-container>\n </div>\n <div class=\"blockable-overlay\" *ngIf=\"isLoading\">\n <p-progressSpinner></p-progressSpinner>\n </div>\n </div>\n\n <div class=\"grid\">\n <div class=\"col\">\n <div class=\"flex justify-content-end w-full\">\n <ng-template #defaultButtons>\n <button pButton pRipple type=\"submit\" label=\"Save\" icon=\"far fa-save\" class=\"mx-2 p-button-success\"\n [disabled]=\"!allowSubmit\"></button>\n <button pButton pRipple type=\"button\" label=\"Reload\" icon=\"fas fa-redo\" class=\"mx-2 p-button-info\"\n (click)=\"reload()\" [disabled]=\"!canReload\"></button>\n <button pButton pRipple type=\"button\" label=\"Delete\" icon=\"far fa-trash-alt\" class=\"ml-2 p-button-danger\"\n (click)=\"showDeleteConfirmatioModal()\" [disabled]=\"!canDelete\"></button>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"buttonsRef || defaultButtons\"></ng-container>\n </div>\n </div>\n </div>\n</form>\n", styles: [".blockable-container{display:grid;place-items:center;grid-template-areas:\"inner\"}.blockable-element{grid-area:inner;width:100%}.blockable-overlay{grid-area:inner;height:100%;width:100%;background-color:#0006;display:flex;align-items:center;justify-content:center;z-index:1}\n"], dependencies: [{ kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i7.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "directive", type: i8.Ripple, selector: "[pRipple]" }, { kind: "component", type: i9.RestWorldInputTemplateComponent, selector: "rw-input-template", inputs: ["apiName", "template"] }, { kind: "component", type: i10.RestWorldValidationErrorsComponent, selector: "rw-validation-errors", inputs: ["property", "form"] }] });
|
|
226
230
|
}
|
|
227
231
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: RestWorldFormComponent, decorators: [{
|
|
228
232
|
type: Component,
|
|
229
|
-
args: [{ selector: 'rw-form', template: "<form *ngIf=\"formGroup !== undefined && template !== undefined\" [formGroup]=\"formGroup\" (ngSubmit)=\"submit()\">\n <div class=\"blockable-container\">\n <div class=\"blockable-element\">\n <div class=\"grid field\">\n <div class=\"col-12 md:col-10 md:col-offset-2\">\n <rw-validation-errors [form]=\"formGroup\"></rw-validation-errors>\n </div>\n </div>\n <rw-input-template [template]=\"template\" [apiName]=\"apiName\"></rw-input-template>\n </div>\n <div class=\"blockable-overlay\" *ngIf=\"isLoading\">\n <p-progressSpinner></p-progressSpinner>\n </div>\n </div>\n\n <div class=\"grid\">\n <div class=\"col\">\n <div class=\"flex justify-content-end w-full\">\n <ng-template #defaultButtons>\n <button pButton pRipple type=\"submit\" label=\"Save\" icon=\"far fa-save\" class=\"mx-2 p-button-success\"\n [disabled]=\"!allowSubmit\"></button>\n <button pButton pRipple type=\"button\" label=\"Reload\" icon=\"fas fa-redo\" class=\"mx-2 p-button-info\"\n (click)=\"reload()\" [disabled]=\"!canReload\"></button>\n <button pButton pRipple type=\"button\" label=\"Delete\" icon=\"far fa-trash-alt\" class=\"ml-2 p-button-danger\"\n (click)=\"showDeleteConfirmatioModal()\" [disabled]=\"!canDelete\"></button>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"buttonsRef || defaultButtons\"></ng-container>\n </div>\n </div>\n </div>\n</form>\n", styles: [".blockable-container{display:grid;place-items:center;grid-template-areas:\"inner\"}.blockable-element{grid-area:inner;width:100%}.blockable-overlay{grid-area:inner;height:100%;width:100%;background-color:#0006;display:flex;align-items:center;justify-content:center;z-index:1}\n"] }]
|
|
233
|
+
args: [{ selector: 'rw-form', template: "<form *ngIf=\"formGroup !== undefined && template !== undefined\" [formGroup]=\"formGroup\" (ngSubmit)=\"submit()\">\n <div class=\"blockable-container\">\n <div class=\"blockable-element\">\n <div class=\"grid field\">\n <div class=\"col-12 md:col-10 md:col-offset-2\">\n <rw-validation-errors [form]=\"formGroup\"></rw-validation-errors>\n </div>\n </div>\n <ng-template #defaultContent>\n <rw-input-template [template]=\"template\" [apiName]=\"apiName\"></rw-input-template>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"contentRef || defaultContent\"></ng-container>\n </div>\n <div class=\"blockable-overlay\" *ngIf=\"isLoading\">\n <p-progressSpinner></p-progressSpinner>\n </div>\n </div>\n\n <div class=\"grid\">\n <div class=\"col\">\n <div class=\"flex justify-content-end w-full\">\n <ng-template #defaultButtons>\n <button pButton pRipple type=\"submit\" label=\"Save\" icon=\"far fa-save\" class=\"mx-2 p-button-success\"\n [disabled]=\"!allowSubmit\"></button>\n <button pButton pRipple type=\"button\" label=\"Reload\" icon=\"fas fa-redo\" class=\"mx-2 p-button-info\"\n (click)=\"reload()\" [disabled]=\"!canReload\"></button>\n <button pButton pRipple type=\"button\" label=\"Delete\" icon=\"far fa-trash-alt\" class=\"ml-2 p-button-danger\"\n (click)=\"showDeleteConfirmatioModal()\" [disabled]=\"!canDelete\"></button>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"buttonsRef || defaultButtons\"></ng-container>\n </div>\n </div>\n </div>\n</form>\n", styles: [".blockable-container{display:grid;place-items:center;grid-template-areas:\"inner\"}.blockable-element{grid-area:inner;width:100%}.blockable-overlay{grid-area:inner;height:100%;width:100%;background-color:#0006;display:flex;align-items:center;justify-content:center;z-index:1}\n"] }]
|
|
230
234
|
}], ctorParameters: () => [{ type: i1.RestWorldClientCollection }, { type: i2.ConfirmationService }, { type: i2.MessageService }, { type: i3.FormService }, { type: i0.ElementRef }], propDecorators: { template: [{
|
|
231
235
|
type: Input,
|
|
232
236
|
args: [{ required: true }]
|
|
@@ -255,5 +259,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
|
|
|
255
259
|
}], buttonsRef: [{
|
|
256
260
|
type: ContentChild,
|
|
257
261
|
args: ['buttons', { static: false }]
|
|
262
|
+
}], contentRef: [{
|
|
263
|
+
type: ContentChild,
|
|
264
|
+
args: ['content', { static: false }]
|
|
258
265
|
}] } });
|
|
259
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1mb3JtL3Jlc3R3b3JsZC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtZm9ybS9yZXN0d29ybGQtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUN0SCxPQUFPLEVBQThCLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEcsT0FBTyxFQUE4QixjQUFjLEVBQXNDLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7OztBQU16SDs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLHNCQUFzQjtJQXdHZDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBM0duQjs7T0FFRztJQUVILFFBQVEsQ0FBMkI7SUFHbkMsT0FBTyxDQUFVO0lBR2pCLEdBQUcsQ0FBVTtJQUViOztNQUVFO0lBRUYsV0FBVyxHQUFHLElBQUksQ0FBQztJQUVuQjs7TUFFRTtJQUVGLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFFbkI7O01BRUU7SUFFRixXQUFXLEdBQUcsSUFBSSxDQUFDO0lBRW5COztNQUVFO0lBRUYsVUFBVSxHQUFHLElBQUksQ0FBQztJQUVsQjs7TUFFRTtJQUVGLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFFbEI7O01BRUU7SUFFRixVQUFVLEdBQUcsSUFBSSxDQUFDO0lBR2xCLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFD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ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUFycmF5LCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UsIEZvcm1zUmVzb3VyY2UsIFByb2JsZW1EZXRhaWxzLCBQcm9wZXJ0eUR0bywgU2ltcGxlVmFsdWUsIFRlbXBsYXRlIH0gZnJvbSAnQHdlcnR6dWkvbmd4LWhhbC1jbGllbnQnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBSZXN0V29ybGRDbGllbnQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50JztcbmltcG9ydCB7IFJlc3RXb3JsZENsaWVudENvbGxlY3Rpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50LWNvbGxlY3Rpb24nO1xuaW1wb3J0IHsgQWZ0ZXJTdWJtaXRPa0V2ZW50LCBBZnRlclN1Ym1pdFJlZGlyZWN0RXZlbnQgfSBmcm9tICcuLi8uLi9tb2RlbHMvZXZlbnRzJztcblxuLyoqXG4gKiBBIGZvcm0gd2l0aCBTYXZlLCBSZWxvYWQgYW5kIERlbGV0ZSBidXR0b25zLlxuICogSWYgeW91IGRvIG5vdCB3YW50IGJ1dHRvbnMsIHVzZSBSZXN0V29ybGRGb3JtVGVtcGxhdGVDb21wb25lbnQgPHJ3LWZvcm0tdGVtcGxhdGU+LlxuICogWW91IGNhbiBhbHNvIHByb3ZpZGUgeW91ciBvd24gYnV0dG9ucyBieSBwYXNzaW5nIGluIGEgdGVtcGxhdGUuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3J3LWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVzdHdvcmxkLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtZm9ybS5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUmVzdFdvcmxkRm9ybUNvbXBvbmVudDxUUHJvcGVydHlEdG9zIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxQcm9wZXJ0eUR0bzxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+Pj4gaW1wbGVtZW50cyBPbkluaXR7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byByZW5kZXIgdGhlIGZvcm0uXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICB0ZW1wbGF0ZSE6IFRlbXBsYXRlPFRQcm9wZXJ0eUR0b3M+O1xuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIGFwaU5hbWUhOiBzdHJpbmc7XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgcmVsITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZW5hYmxlIHRoZSBzdWJtaXQgYnV0dG9uLlxuICAqL1xuICBASW5wdXQoKVxuICBhbGxvd1N1Ym1pdCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBlbmFibGUgdGhlIGRlbGV0ZSBidXR0b24uXG4gICovXG4gIEBJbnB1dCgpXG4gIGFsbG93RGVsZXRlID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGVuYWJsZSB0aGUgcmVsb2FkIGJ1dHRvbi5cbiAgKi9cbiAgQElucHV0KClcbiAgYWxsb3dSZWxvYWQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgc3VibWl0IGJ1dHRvbi5cbiAgKi9cbiAgQElucHV0KClcbiAgc2hvd1N1Ym1pdCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBzaG93IHRoZSBkZWxldGUgYnV0dG9uLlxuICAqL1xuICBASW5wdXQoKVxuICBzaG93RGVsZXRlID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHNob3cgdGhlIHJlbG9hZCBidXR0b24uXG4gICovXG4gIEBJbnB1dCgpXG4gIHNob3dSZWxvYWQgPSB0cnVlO1xuXG4gIEBPdXRwdXQoKVxuICBhZnRlckRlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAT3V0cHV0KClcbiAgYWZ0ZXJTdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPEFmdGVyU3VibWl0T2tFdmVudCB8IEFmdGVyU3VibWl0UmVkaXJlY3RFdmVudD4oKTtcblxuICAvKipcbiAgICogQSByZWZlcmVuY2UgdG8gYSB0ZW1wbGF0ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlbmRlciBjdXN0b20gYnV0dG9ucyBmb3IgdGhlIGZvcm0uXG4gICovXG4gIEBDb250ZW50Q2hpbGQoJ2J1dHRvbnMnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgYnV0dG9uc1JlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIHNjcm9sbFRvRmlyc3RWYWxpZGF0aW9uRXJyb3IoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uRXJyb3JFbGVtZW50cyA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdydy12YWxpZGF0aW9uLWVycm9ycz52YWwtZXJyb3JzPmRpdicpXG4gICAgICBjb25zdCBmaXJzdEVycm9yID0gdmFsaWRhdGlvbkVycm9yRWxlbWVudHNbMF07XG4gICAgICBmaXJzdEVycm9yLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcid9KTtcbiAgICB9LFxuICAgIDEwMCk7XG4gIH1cblxuICBwcml2YXRlIF9pc0xvYWRpbmcgPSBmYWxzZTtcbiAgcHVibGljIGdldCBpc0xvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzTG9hZGluZztcbiAgfVxuXG4gIHByaXZhdGUgX2Zvcm1Hcm91cD86IEZvcm1Hcm91cDxhbnk+O1xuICBwdWJsaWMgZ2V0IGZvcm1Hcm91cCgpOiBGb3JtR3JvdXA8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1Hcm91cDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2FuU3VibWl0KCkgOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hbGxvd1N1Ym1pdCAmJlxuICAgICAgdGhpcy50ZW1wbGF0ZS50YXJnZXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgIXRoaXMuaXNMb2FkaW5nICYmXG4gICAgICB0aGlzLmZvcm1Hcm91cCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmZvcm1Hcm91cC52YWxpZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2FuRGVsZXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93RGVsZXRlICYmXG4gICAgICB0aGlzLnRlbXBsYXRlLnRhcmdldCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLnRlbXBsYXRlLm1ldGhvZCA9PSBcIlBVVFwiICYmXG4gICAgICAhdGhpcy5pc0xvYWRpbmc7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNhblJlbG9hZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hbGxvd1JlbG9hZCAmJlxuICAgICAgdGhpcy50ZW1wbGF0ZS50YXJnZXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy50ZW1wbGF0ZS50aXRsZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLnRlbXBsYXRlLnByb3BlcnRpZXMuc29tZShwID0+IHAubmFtZSA9PT0gXCJpZFwiICYmIHAudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwLnZhbHVlICE9PSBudWxsICYmIHAudmFsdWUgIT09IDApICYmXG4gICAgICAhdGhpcy5pc0xvYWRpbmc7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jbGllbnRzOiBSZXN0V29ybGRDbGllbnRDb2xsZWN0aW9uLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Zvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fZm9ybUdyb3VwID0gdGhpcy5fZm9ybVNlcnZpY2UuY3JlYXRlRm9ybUdyb3VwRnJvbVRlbXBsYXRlKHRoaXMudGVtcGxhdGUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2FuUmVsb2FkKVxuICAgICAgcmV0dXJuO1xuXG4gICAgdGhpcy5faXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgIHRyeVxuICAgIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5nZXRGb3JtKHRoaXMudGVtcGxhdGUudGFyZ2V0ISk7XG4gICAgICBpZiAoIXJlc3BvbnNlLm9rIHx8IFByb2JsZW1EZXRhaWxzLmlzUHJvYmxlbURldGFpbHMocmVzcG9uc2UuYm9keSkgfHwgIXJlc3BvbnNlLmJvZHkpIHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogJ0Vycm9yIHdoaWxlIGxvYWRpbmcgdGhlIHJlc291cmNlIGZyb20gdGhlIEFQSS4nLCBkYXRhOiByZXNwb25zZSwgc3RpY2t5OiB0cnVlIH0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSByZXNwb25zZS5ib2R5LmdldFRlbXBsYXRlQnlUaXRsZSh0aGlzLnRlbXBsYXRlLnRpdGxlISkgYXMgVGVtcGxhdGU8VFByb3BlcnR5RHRvcz47XG4gICAgICAgIHRoaXMuX2Zvcm1Hcm91cCA9IHRoaXMuX2Zvcm1TZXJ2aWNlLmNyZWF0ZUZvcm1Hcm91cEZyb21UZW1wbGF0ZSh0aGlzLnRlbXBsYXRlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6IGBBbiB1bmtub3duIGVycm9yIG9jY3VycmVkLiAke0pTT04uc3RyaW5naWZ5KGUpfWAsIHN0aWNreTogdHJ1ZSB9KTtcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgIH1cblxuICAgIHRoaXMuX2lzTG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHNob3dEZWxldGVDb25maXJtYXRpb01vZGFsKCkge1xuICAgIHRoaXMuX2NvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICBtZXNzYWdlOiAnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlc291cmNlPycsXG4gICAgICBoZWFkZXI6ICdDb25maXJtIGRlbGV0ZScsXG4gICAgICBpY29uOiAnZmFyIGZhLXRyYXNoLWFsdCcsXG4gICAgICBhY2NlcHQ6ICgpID0+IHRoaXMuZGVsZXRlKClcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdWJtaXQoKSB7XG4gICAgaWYoIHRoaXMuZm9ybUdyb3VwICE9PSB1bmRlZmluZWQpXG4gICAge1xuICAgICAgdGhpcy5mb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xuXG4gICAgICBpZiAoIXRoaXMuZm9ybUdyb3VwLnZhbGlkKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgc3VtbWFyeTogJ0Vycm9yJyxcbiAgICAgICAgICBkZXRhaWw6ICdQbGVhc2UgY29ycmVjdCB0aGUgZXJyb3JzIGJlZm9yZSBzdWJtaXR0aW5nLicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9GaXJzdFZhbGlkYXRpb25FcnJvcigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKCF0aGlzLmNhblN1Ym1pdClcbiAgICAgIHJldHVybjtcblxuICAgIHRoaXMuX2lzTG9hZGluZyA9IHRydWU7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpLnN1Ym1pdCh0aGlzLnRlbXBsYXRlLCB0aGlzLmZvcm1Hcm91cCEudmFsdWUpO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGxldCBzdW1tYXJ5ID0gJ0Vycm9yJztcbiAgICAgICAgbGV0IGRldGFpbCA9ICdFcnJvciB3aGlsZSBzYXZpbmcgdGhlIHJlc291cmNlLic7XG4gICAgICAgIGlmIChQcm9ibGVtRGV0YWlscy5pc1Byb2JsZW1EZXRhaWxzKHJlc3BvbnNlLmJvZHkpKSB7XG4gICAgICAgICAgY29uc3QgcHJvYmxlbURldGFpbHMgPSByZXNwb25zZS5ib2R5IGFzIFByb2JsZW1EZXRhaWxzO1xuICAgICAgICAgIHN1bW1hcnkgPSBwcm9ibGVtRGV0YWlscy50aXRsZSB8fCBzdW1tYXJ5O1xuICAgICAgICAgIGRldGFpbCA9IHByb2JsZW1EZXRhaWxzLmRldGFpbCB8fCBkZXRhaWw7XG4gICAgICAgICAgLy8gZGlzcGxheSB2YWxpZGF0aW9uIGVycm9yc1xuICAgICAgICAgIGlmIChwcm9ibGVtRGV0YWlsc1snZXJyb3JzJ10gYXMge30pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgZXJyb3JzRm9yS2V5XSBvZiBPYmplY3QuZW50cmllcyhwcm9ibGVtRGV0YWlsc1snZXJyb3JzJ10gYXMge30pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBrZXkuc3BsaXQoL1xcLnxcXFsvKS5tYXAoZSA9PiBlLnJlcGxhY2UoXCJdXCIsIFwiXCIpKTtcbiAgICAgICAgICAgICAgLy8gVGhlIHBhdGggbWlnaHQgc3RhcnQgd2l0aCBhICQsIGluZGljYXRpbmcgdGhlIHJvb3QuXG4gICAgICAgICAgICAgIGlmIChwYXRoLmxlbmd0aCA+IDAgJiYgcGF0aFswXSA9PT0gJyQnKVxuICAgICAgICAgICAgICAgIHBhdGguc2hpZnQoKTtcbiAgICAgICAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBwYXRoLnJlZHVjZTxBYnN0cmFjdENvbnRyb2wgfCB1bmRlZmluZWQ+KFJlc3RXb3JsZEZvcm1Db21wb25lbnQuZ2V0U3ViQ29udHJvbCwgdGhpcy5mb3JtR3JvdXApO1xuICAgICAgICAgICAgICBpZiAoZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbC5zZXRFcnJvcnMoeyAuLi5mb3JtQ29udHJvbC5lcnJvcnMsIC4uLnsgcmVtb3RlOiBlcnJvcnNGb3JLZXkgfSB9KTtcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogc3VtbWFyeSwgZGV0YWlsOiBkZXRhaWwsIGRhdGE6IHJlc3BvbnNlLCBzdGlja3k6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gMjAxKSB7XG4gICAgICAgIGlmICghcmVzcG9uc2UuaGVhZGVycy5oYXMoJ0xvY2F0aW9uJykpIHtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm9yJywgZGV0YWlsOiAnVGhlIHNlcnZlciByZXR1cm5lZCBhIDIwMSBDcmVhdGVkIHJlc3BvbnNlLCBidXQgZGlkIG5vdCByZXR1cm4gYSBMb2NhdGlvbiBoZWFkZXIuJywgZGF0YTogcmVzcG9uc2UsIHN0aWNreTogdHJ1ZSB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnQ3JlYXRlZCcsIGRldGFpbDogJ1RoZSByZXNvdXJjZSBoYXMgYmVlbiBjcmVhdGVkLicgfSk7XG5cbiAgICAgICAgdmFyIGNyZWF0ZWRBdFVyaSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdMb2NhdGlvbicpITtcbiAgICAgICAgdGhpcy5hZnRlclN1Ym1pdC5lbWl0KHsgbG9jYXRpb246IGNyZWF0ZWRBdFVyaSwgc3RhdHVzOiAyMDEgfSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGVCZWZvcmVTdWJtaXQgPSB0aGlzLnRlbXBsYXRlO1xuICAgICAgICBjb25zdCByZXNwb25zZVJlc291cmNlID0gKHJlc3BvbnNlLmJvZHkgYXMgRm9ybXNSZXNvdXJjZSk7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSByZXNwb25zZVJlc291cmNlLmdldFRlbXBsYXRlQnlUaXRsZSh0aGlzLnRlbXBsYXRlLnRpdGxlISkgYXMgVGVtcGxhdGU8VFByb3BlcnR5RHRvcz47XG4gICAgICAgIHRoaXMuX2Zvcm1Hcm91cCA9IHRoaXMuX2Zvcm1TZXJ2aWNlLmNyZWF0ZUZvcm1Hcm91cEZyb21UZW1wbGF0ZSh0aGlzLnRlbXBsYXRlKTtcblxuICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnU2F2ZWQnLCBkZXRhaWw6ICdUaGUgcmVzb3VyY2UgaGFzIGJlZW4gc2F2ZWQuJyB9KTtcblxuICAgICAgICB0aGlzLmFmdGVyU3VibWl0LmVtaXQoeyBvbGQ6IHRlbXBsYXRlQmVmb3JlU3VibWl0LCBuZXc6IHRoaXMudGVtcGxhdGUsIHN0YXR1czogMjAwIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogYEFuIHVua25vd24gZXJyb3Igb2NjdXJyZWQuICR7SlNPTi5zdHJpbmdpZnkoZSl9YCwgc3RpY2t5OiB0cnVlIH0pO1xuICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgfVxuXG4gICAgdGhpcy5faXNMb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYW5EZWxldGUpXG4gICAgICByZXR1cm47XG5cbiAgICBpZiAodGhpcy5mb3JtR3JvdXAgPT09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm1Hcm91cCBjYW5ub3QgYmUgdW5kZWZpbmVkLlwiKTtcblxuICAgIGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCkuZGVsZXRlQnlUZW1wbGF0ZUFuZEZvcm0odGhpcy50ZW1wbGF0ZSwgdGhpcy5mb3JtR3JvdXApO1xuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdEZWxldGVkJywgZGV0YWlsOiAnVGhlIHJlc291cmNlIGhhcyBiZWVuIGRlbGV0ZWQuJyB9KVxuXG4gICAgdGhpcy5hZnRlckRlbGV0ZS5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRTdWJDb250cm9sKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IHVuZGVmaW5lZCwgcGF0aEVsZW1lbnQ6IHN0cmluZyk6IEFic3RyYWN0Q29udHJvbCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHBhdGhFbGVtZW50ID09PSBcIlwiKVxuICAgICAgcmV0dXJuIGNvbnRyb2w7XG5cbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApXG4gICAgICByZXR1cm4gY29udHJvbC5jb250cm9sc1twYXRoRWxlbWVudF07XG5cbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gTnVtYmVyLnBhcnNlSW50KHBhdGhFbGVtZW50KTtcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGluZGV4KSlcbiAgICAgICAgcmV0dXJuIGNvbnRyb2wuY29udHJvbHNbaW5kZXhdO1xuICAgIH1cblxuICAgIHJldHVybiBjb250cm9sO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGllbnQoKTogUmVzdFdvcmxkQ2xpZW50IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50cy5nZXRDbGllbnQodGhpcy5hcGlOYW1lKTtcbiAgfVxufVxuIiwiPGZvcm0gKm5nSWY9XCJmb3JtR3JvdXAgIT09IHVuZGVmaW5lZCAmJiB0ZW1wbGF0ZSAhPT0gdW5kZWZpbmVkXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiAobmdTdWJtaXQpPVwic3VibWl0KClcIj5cbiAgPGRpdiBjbGFzcz1cImJsb2NrYWJsZS1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYmxvY2thYmxlLWVsZW1lbnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGZpZWxkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWQ6Y29sLTEwIG1kOmNvbC1vZmZzZXQtMlwiPlxuICAgICAgICAgIDxydy12YWxpZGF0aW9uLWVycm9ycyBbZm9ybV09XCJmb3JtR3JvdXBcIj48L3J3LXZhbGlkYXRpb24tZXJyb3JzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHJ3LWlucHV0LXRlbXBsYXRlIFt0ZW1wbGF0ZV09XCJ0ZW1wbGF0ZVwiIFthcGlOYW1lXT1cImFwaU5hbWVcIj48L3J3LWlucHV0LXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJibG9ja2FibGUtb3ZlcmxheVwiICpuZ0lmPVwiaXNMb2FkaW5nXCI+XG4gICAgICA8cC1wcm9ncmVzc1NwaW5uZXI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImdyaWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIHctZnVsbFwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRCdXR0b25zPlxuICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJzdWJtaXRcIiBsYWJlbD1cIlNhdmVcIiBpY29uPVwiZmFyIGZhLXNhdmVcIiBjbGFzcz1cIm14LTIgcC1idXR0b24tc3VjY2Vzc1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWFsbG93U3VibWl0XCI+PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGxhYmVsPVwiUmVsb2FkXCIgaWNvbj1cImZhcyBmYS1yZWRvXCIgY2xhc3M9XCJteC0yIHAtYnV0dG9uLWluZm9cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJlbG9hZCgpXCIgW2Rpc2FibGVkXT1cIiFjYW5SZWxvYWRcIj48L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgbGFiZWw9XCJEZWxldGVcIiBpY29uPVwiZmFyIGZhLXRyYXNoLWFsdFwiIGNsYXNzPVwibWwtMiBwLWJ1dHRvbi1kYW5nZXJcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNob3dEZWxldGVDb25maXJtYXRpb01vZGFsKClcIiBbZGlzYWJsZWRdPVwiIWNhbkRlbGV0ZVwiPjwvYnV0dG9uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uc1JlZiB8fCBkZWZhdWx0QnV0dG9uc1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9mb3JtPlxuIl19
|
|
266
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1mb3JtL3Jlc3R3b3JsZC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtZm9ybS9yZXN0d29ybGQtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUN0SCxPQUFPLEVBQThCLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEcsT0FBTyxFQUE4QixjQUFjLEVBQXNDLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7OztBQU16SDs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLHNCQUFzQjtJQThHZDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBakhuQjs7T0FFRztJQUVILFFBQVEsQ0FBMkI7SUFHbkMsT0FBTyxDQUFVO0lBR2pCLEdBQUcsQ0FBVTtJQUViOztNQUVFO0lBRUYsV0FBVyxHQUFHLElBQUksQ0FBQztJQUVuQjs7TUFFRTtJQUVGLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFFbkI7O01BRUU7SUFFRixXQUFXLEdBQUcsSUFBSSxDQUFDO0lBRW5COztNQUVFO0lBRUYsVUFBVSxHQUFHLElBQUksQ0FBQztJQUVsQjs7TUFFRTtJQUVGLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFFbEI7O01BRUU7SUFFRixVQUFVLEdBQUcsSUFBSSxDQUFDO0lBR2xCLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBR3ZDLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBaUQsQ0FBQztJQUVoRjs7TUFFRTtJQUVGLFVBQVUsQ0FBd0I7SUFFbEM7O01BRUU7SUFFRixVQUFVLENBQXdCO0lBRWxDLDRCQUE0QjtRQUMxQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFBO1lBQ3RILE1BQU0sVUFBVSxHQUFHLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsRUFDRCxHQUFHLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzNCLElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVPLFVBQVUsQ0FBa0I7SUFDcEMsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFdBQVc7WUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssU0FBUztZQUNsQyxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQ2YsSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTO1lBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsV0FBVztZQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxTQUFTO1lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLEtBQUs7WUFDN0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsV0FBVztZQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxTQUFTO1lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLFNBQVM7WUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7WUFDakgsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxZQUNtQixRQUFtQyxFQUNuQyxvQkFBeUMsRUFDekMsZUFBK0IsRUFDL0IsWUFBeUIsRUFDekIsV0FBb0M7UUFKcEMsYUFBUSxHQUFSLFFBQVEsQ0FBMkI7UUFDbkMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQUN6QyxvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDL0IsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO0lBQ3ZELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRU0sS0FBSyxDQUFDLE1BQU07UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQ2pCLE9BQU87UUFFVCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUV2QixJQUNBLENBQUM7WUFDQyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFPLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxjQUFjLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNyRixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsZ0RBQWdELEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM1SixDQUFDO2lCQUNJLENBQUM7Z0JBQ0osSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBTSxDQUE0QixDQUFDO2dCQUNsRyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pGLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxDQUFVLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsOEJBQThCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMzSSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRU0sMEJBQTBCO1FBQy9CLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUM7WUFDaEMsT0FBTyxFQUFFLDZDQUE2QztZQUN0RCxNQUFNLEVBQUUsZ0JBQWdCO1lBQ3hCLElBQUksRUFBRSxrQkFBa0I7WUFDeEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNO1FBQ2pCLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQ2hDLENBQUM7WUFDQyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFFbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDO29CQUN2QixRQUFRLEVBQUUsT0FBTztvQkFDakIsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLE1BQU0sRUFBRSw4Q0FBOEM7aUJBQ3ZELENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztZQUN0QyxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUztZQUNoQixPQUFPO1FBRVQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFFdkIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVyRixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNqQixJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUM7Z0JBQ3RCLElBQUksTUFBTSxHQUFHLGtDQUFrQyxDQUFDO2dCQUNoRCxJQUFJLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDbkQsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLElBQXNCLENBQUM7b0JBQ3ZELE9BQU8sR0FBRyxjQUFjLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQztvQkFDMUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDO29CQUN6Qyw0QkFBNEI7b0JBQzVCLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBTyxFQUFFLENBQUM7d0JBQ25DLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQU8sQ0FBQyxFQUFFLENBQUM7NEJBQ2pGLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDN0Qsc0RBQXNEOzRCQUN0RCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHO2dDQUNwQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7NEJBQ2YsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBOEIsc0JBQXNCLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzs0QkFDbkgsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQ0FDaEIsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztnQ0FDOUUsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDOzRCQUM5QixDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO2dCQUVELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNsSCxDQUFDO2lCQUNJLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxtRkFBbUYsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUM3TCxPQUFPO2dCQUNULENBQUM7Z0JBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLGdDQUFnQyxFQUFFLENBQUMsQ0FBQztnQkFFaEgsSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFFLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNqRSxDQUFDO2lCQUNJLENBQUM7Z0JBQ0osTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUMzQyxNQUFNLGdCQUFnQixHQUFJLFFBQVEsQ0FBQyxJQUFzQixDQUFDO2dCQUMxRCxJQUFJLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBTSxDQUE0QixDQUFDO2dCQUNyRyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUUvRSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsOEJBQThCLEVBQUUsQ0FBQyxDQUFDO2dCQUU1RyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUN4RixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sQ0FBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLDhCQUE4QixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDM0ksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztZQUNqQixPQUFPO1FBRVQsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVM7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBRXBELE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDLENBQUE7UUFFL0csSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFvQyxFQUFFLFdBQW1CO1FBQ3BGLElBQUksV0FBVyxLQUFLLEVBQUU7WUFDcEIsT0FBTyxPQUFPLENBQUM7UUFFakIsSUFBSSxPQUFPLFlBQVksZ0JBQWdCO1lBQ3JDLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV2QyxJQUFJLE9BQU8sWUFBWSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDM0MsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztnQkFDekIsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRU8sU0FBUztRQUNmLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLENBQUM7dUdBelFVLHNCQUFzQjsyRkFBdEIsc0JBQXNCLG1oQkNsQm5DLHluREFrQ0E7OzJGRGhCYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsU0FBUztnTkFTbkIsUUFBUTtzQkFEUCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFJekIsT0FBTztzQkFETixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFJekIsR0FBRztzQkFERixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFPekIsV0FBVztzQkFEVixLQUFLO2dCQU9OLFdBQVc7c0JBRFYsS0FBSztnQkFPTixXQUFXO3NCQURWLEtBQUs7Z0JBT04sVUFBVTtzQkFEVCxLQUFLO2dCQU9OLFVBQVU7c0JBRFQsS0FBSztnQkFPTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sV0FBVztzQkFEVixNQUFNO2dCQUlQLFdBQVc7c0JBRFYsTUFBTTtnQkFPUCxVQUFVO3NCQURULFlBQVk7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFPMUMsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCwgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1TZXJ2aWNlLCBGb3Jtc1Jlc291cmNlLCBQcm9ibGVtRGV0YWlscywgUHJvcGVydHlEdG8sIFNpbXBsZVZhbHVlLCBUZW1wbGF0ZSB9IGZyb20gJ0B3ZXJ0enVpL25neC1oYWwtY2xpZW50JztcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgUmVzdFdvcmxkQ2xpZW50IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudCc7XG5pbXBvcnQgeyBSZXN0V29ybGRDbGllbnRDb2xsZWN0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudC1jb2xsZWN0aW9uJztcbmltcG9ydCB7IEFmdGVyU3VibWl0T2tFdmVudCwgQWZ0ZXJTdWJtaXRSZWRpcmVjdEV2ZW50IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2V2ZW50cyc7XG5cbi8qKlxuICogQSBmb3JtIHdpdGggU2F2ZSwgUmVsb2FkIGFuZCBEZWxldGUgYnV0dG9ucy5cbiAqIElmIHlvdSBkbyBub3Qgd2FudCBidXR0b25zLCB1c2UgUmVzdFdvcmxkRm9ybVRlbXBsYXRlQ29tcG9uZW50IDxydy1mb3JtLXRlbXBsYXRlPi5cbiAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIHlvdXIgb3duIGJ1dHRvbnMgYnkgcGFzc2luZyBpbiBhIHRlbXBsYXRlLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdydy1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVzdHdvcmxkLWZvcm0uY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJlc3RXb3JsZEZvcm1Db21wb25lbnQ8VFByb3BlcnR5RHRvcyBleHRlbmRzIFJlYWRvbmx5QXJyYXk8UHJvcGVydHlEdG88U2ltcGxlVmFsdWUsIHN0cmluZywgc3RyaW5nPj4+IGltcGxlbWVudHMgT25Jbml0e1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gcmVuZGVyIHRoZSBmb3JtLlxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgdGVtcGxhdGUhOiBUZW1wbGF0ZTxUUHJvcGVydHlEdG9zPjtcblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBhcGlOYW1lITogc3RyaW5nO1xuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHJlbCE6IHN0cmluZztcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGVuYWJsZSB0aGUgc3VibWl0IGJ1dHRvbi5cbiAgKi9cbiAgQElucHV0KClcbiAgYWxsb3dTdWJtaXQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZW5hYmxlIHRoZSBkZWxldGUgYnV0dG9uLlxuICAqL1xuICBASW5wdXQoKVxuICBhbGxvd0RlbGV0ZSA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBlbmFibGUgdGhlIHJlbG9hZCBidXR0b24uXG4gICovXG4gIEBJbnB1dCgpXG4gIGFsbG93UmVsb2FkID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHNob3cgdGhlIHN1Ym1pdCBidXR0b24uXG4gICovXG4gIEBJbnB1dCgpXG4gIHNob3dTdWJtaXQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgZGVsZXRlIGJ1dHRvbi5cbiAgKi9cbiAgQElucHV0KClcbiAgc2hvd0RlbGV0ZSA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBzaG93IHRoZSByZWxvYWQgYnV0dG9uLlxuICAqL1xuICBASW5wdXQoKVxuICBzaG93UmVsb2FkID0gdHJ1ZTtcblxuICBAT3V0cHV0KClcbiAgYWZ0ZXJEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGFmdGVyU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxBZnRlclN1Ym1pdE9rRXZlbnQgfCBBZnRlclN1Ym1pdFJlZGlyZWN0RXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEEgcmVmZXJlbmNlIHRvIGEgdGVtcGxhdGUgdGhhdCBjYW4gYmUgdXNlZCB0byByZW5kZXIgY3VzdG9tIGJ1dHRvbnMgZm9yIHRoZSBmb3JtLlxuICAqL1xuICBAQ29udGVudENoaWxkKCdidXR0b25zJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGJ1dHRvbnNSZWY/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAvKipcbiAgICogQSByZWZlcmVuY2UgdG8gYSB0ZW1wbGF0ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlbmRlciBjdXN0b20gY29udGVudCBpbnNpZGUgdGhlIDxmb3JtPiBlbGVtZW50IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgZm9ybS5cbiAgKi9cbiAgQENvbnRlbnRDaGlsZCgnY29udGVudCcsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBjb250ZW50UmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgc2Nyb2xsVG9GaXJzdFZhbGlkYXRpb25FcnJvcigpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvckVsZW1lbnRzID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3J3LXZhbGlkYXRpb24tZXJyb3JzPnZhbC1lcnJvcnM+ZGl2JylcbiAgICAgIGNvbnN0IGZpcnN0RXJyb3IgPSB2YWxpZGF0aW9uRXJyb3JFbGVtZW50c1swXTtcbiAgICAgIGZpcnN0RXJyb3Iuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJ30pO1xuICAgIH0sXG4gICAgMTAwKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzTG9hZGluZyA9IGZhbHNlO1xuICBwdWJsaWMgZ2V0IGlzTG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNMb2FkaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBfZm9ybUdyb3VwPzogRm9ybUdyb3VwPGFueT47XG4gIHB1YmxpYyBnZXQgZm9ybUdyb3VwKCk6IEZvcm1Hcm91cDxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybUdyb3VwO1xuICB9XG5cbiAgcHVibGljIGdldCBjYW5TdWJtaXQoKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93U3VibWl0ICYmXG4gICAgICB0aGlzLnRlbXBsYXRlLnRhcmdldCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAhdGhpcy5pc0xvYWRpbmcgJiZcbiAgICAgIHRoaXMuZm9ybUdyb3VwICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnZhbGlkO1xuICB9XG5cbiAgcHVibGljIGdldCBjYW5EZWxldGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWxsb3dEZWxldGUgJiZcbiAgICAgIHRoaXMudGVtcGxhdGUudGFyZ2V0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMudGVtcGxhdGUubWV0aG9kID09IFwiUFVUXCIgJiZcbiAgICAgICF0aGlzLmlzTG9hZGluZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2FuUmVsb2FkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93UmVsb2FkICYmXG4gICAgICB0aGlzLnRlbXBsYXRlLnRhcmdldCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLnRlbXBsYXRlLnRpdGxlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMudGVtcGxhdGUucHJvcGVydGllcy5zb21lKHAgPT4gcC5uYW1lID09PSBcImlkXCIgJiYgcC52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHAudmFsdWUgIT09IG51bGwgJiYgcC52YWx1ZSAhPT0gMCkgJiZcbiAgICAgICF0aGlzLmlzTG9hZGluZztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NsaWVudHM6IFJlc3RXb3JsZENsaWVudENvbGxlY3Rpb24sXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JtR3JvdXAgPSB0aGlzLl9mb3JtU2VydmljZS5jcmVhdGVGb3JtR3JvdXBGcm9tVGVtcGxhdGUodGhpcy50ZW1wbGF0ZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVsb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYW5SZWxvYWQpXG4gICAgICByZXR1cm47XG5cbiAgICB0aGlzLl9pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgdHJ5XG4gICAge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpLmdldEZvcm0odGhpcy50ZW1wbGF0ZS50YXJnZXQhKTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2sgfHwgUHJvYmxlbURldGFpbHMuaXNQcm9ibGVtRGV0YWlscyhyZXNwb25zZS5ib2R5KSB8fCAhcmVzcG9uc2UuYm9keSkge1xuICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm9yJywgZGV0YWlsOiAnRXJyb3Igd2hpbGUgbG9hZGluZyB0aGUgcmVzb3VyY2UgZnJvbSB0aGUgQVBJLicsIGRhdGE6IHJlc3BvbnNlLCBzdGlja3k6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHJlc3BvbnNlLmJvZHkuZ2V0VGVtcGxhdGVCeVRpdGxlKHRoaXMudGVtcGxhdGUudGl0bGUhKSBhcyBUZW1wbGF0ZTxUUHJvcGVydHlEdG9zPjtcbiAgICAgICAgdGhpcy5fZm9ybUdyb3VwID0gdGhpcy5fZm9ybVNlcnZpY2UuY3JlYXRlRm9ybUdyb3VwRnJvbVRlbXBsYXRlKHRoaXMudGVtcGxhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogYEFuIHVua25vd24gZXJyb3Igb2NjdXJyZWQuICR7SlNPTi5zdHJpbmdpZnkoZSl9YCwgc3RpY2t5OiB0cnVlIH0pO1xuICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgfVxuXG4gICAgdGhpcy5faXNMb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc2hvd0RlbGV0ZUNvbmZpcm1hdGlvTW9kYWwoKSB7XG4gICAgdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgIG1lc3NhZ2U6ICdEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVzb3VyY2U/JyxcbiAgICAgIGhlYWRlcjogJ0NvbmZpcm0gZGVsZXRlJyxcbiAgICAgIGljb246ICdmYXIgZmEtdHJhc2gtYWx0JyxcbiAgICAgIGFjY2VwdDogKCkgPT4gdGhpcy5kZWxldGUoKVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHN1Ym1pdCgpIHtcbiAgICBpZiggdGhpcy5mb3JtR3JvdXAgIT09IHVuZGVmaW5lZClcbiAgICB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XG5cbiAgICAgIGlmICghdGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICBzdW1tYXJ5OiAnRXJyb3InLFxuICAgICAgICAgIGRldGFpbDogJ1BsZWFzZSBjb3JyZWN0IHRoZSBlcnJvcnMgYmVmb3JlIHN1Ym1pdHRpbmcuJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zY3JvbGxUb0ZpcnN0VmFsaWRhdGlvbkVycm9yKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoIXRoaXMuY2FuU3VibWl0KVxuICAgICAgcmV0dXJuO1xuXG4gICAgdGhpcy5faXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCkuc3VibWl0KHRoaXMudGVtcGxhdGUsIHRoaXMuZm9ybUdyb3VwIS52YWx1ZSk7XG5cbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgbGV0IHN1bW1hcnkgPSAnRXJyb3InO1xuICAgICAgICBsZXQgZGV0YWlsID0gJ0Vycm9yIHdoaWxlIHNhdmluZyB0aGUgcmVzb3VyY2UuJztcbiAgICAgICAgaWYgKFByb2JsZW1EZXRhaWxzLmlzUHJvYmxlbURldGFpbHMocmVzcG9uc2UuYm9keSkpIHtcbiAgICAgICAgICBjb25zdCBwcm9ibGVtRGV0YWlscyA9IHJlc3BvbnNlLmJvZHkgYXMgUHJvYmxlbURldGFpbHM7XG4gICAgICAgICAgc3VtbWFyeSA9IHByb2JsZW1EZXRhaWxzLnRpdGxlIHx8IHN1bW1hcnk7XG4gICAgICAgICAgZGV0YWlsID0gcHJvYmxlbURldGFpbHMuZGV0YWlsIHx8IGRldGFpbDtcbiAgICAgICAgICAvLyBkaXNwbGF5IHZhbGlkYXRpb24gZXJyb3JzXG4gICAgICAgICAgaWYgKHByb2JsZW1EZXRhaWxzWydlcnJvcnMnXSBhcyB7fSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBlcnJvcnNGb3JLZXldIG9mIE9iamVjdC5lbnRyaWVzKHByb2JsZW1EZXRhaWxzWydlcnJvcnMnXSBhcyB7fSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGtleS5zcGxpdCgvXFwufFxcWy8pLm1hcChlID0+IGUucmVwbGFjZShcIl1cIiwgXCJcIikpO1xuICAgICAgICAgICAgICAvLyBUaGUgcGF0aCBtaWdodCBzdGFydCB3aXRoIGEgJCwgaW5kaWNhdGluZyB0aGUgcm9vdC5cbiAgICAgICAgICAgICAgaWYgKHBhdGgubGVuZ3RoID4gMCAmJiBwYXRoWzBdID09PSAnJCcpXG4gICAgICAgICAgICAgICAgcGF0aC5zaGlmdCgpO1xuICAgICAgICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHBhdGgucmVkdWNlPEFic3RyYWN0Q29udHJvbCB8IHVuZGVmaW5lZD4oUmVzdFdvcmxkRm9ybUNvbXBvbmVudC5nZXRTdWJDb250cm9sLCB0aGlzLmZvcm1Hcm91cCk7XG4gICAgICAgICAgICAgIGlmIChmb3JtQ29udHJvbCkge1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sLnNldEVycm9ycyh7IC4uLmZvcm1Db250cm9sLmVycm9ycywgLi4ueyByZW1vdGU6IGVycm9yc0ZvcktleSB9IH0pO1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiBzdW1tYXJ5LCBkZXRhaWw6IGRldGFpbCwgZGF0YTogcmVzcG9uc2UsIHN0aWNreTogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAyMDEpIHtcbiAgICAgICAgaWYgKCFyZXNwb25zZS5oZWFkZXJzLmhhcygnTG9jYXRpb24nKSkge1xuICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6ICdUaGUgc2VydmVyIHJldHVybmVkIGEgMjAxIENyZWF0ZWQgcmVzcG9uc2UsIGJ1dCBkaWQgbm90IHJldHVybiBhIExvY2F0aW9uIGhlYWRlci4nLCBkYXRhOiByZXNwb25zZSwgc3RpY2t5OiB0cnVlIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdDcmVhdGVkJywgZGV0YWlsOiAnVGhlIHJlc291cmNlIGhhcyBiZWVuIGNyZWF0ZWQuJyB9KTtcblxuICAgICAgICB2YXIgY3JlYXRlZEF0VXJpID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ0xvY2F0aW9uJykhO1xuICAgICAgICB0aGlzLmFmdGVyU3VibWl0LmVtaXQoeyBsb2NhdGlvbjogY3JlYXRlZEF0VXJpLCBzdGF0dXM6IDIwMSB9KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZUJlZm9yZVN1Ym1pdCA9IHRoaXMudGVtcGxhdGU7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlUmVzb3VyY2UgPSAocmVzcG9uc2UuYm9keSBhcyBGb3Jtc1Jlc291cmNlKTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHJlc3BvbnNlUmVzb3VyY2UuZ2V0VGVtcGxhdGVCeVRpdGxlKHRoaXMudGVtcGxhdGUudGl0bGUhKSBhcyBUZW1wbGF0ZTxUUHJvcGVydHlEdG9zPjtcbiAgICAgICAgdGhpcy5fZm9ybUdyb3VwID0gdGhpcy5fZm9ybVNlcnZpY2UuY3JlYXRlRm9ybUdyb3VwRnJvbVRlbXBsYXRlKHRoaXMudGVtcGxhdGUpO1xuXG4gICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdTYXZlZCcsIGRldGFpbDogJ1RoZSByZXNvdXJjZSBoYXMgYmVlbiBzYXZlZC4nIH0pO1xuXG4gICAgICAgIHRoaXMuYWZ0ZXJTdWJtaXQuZW1pdCh7IG9sZDogdGVtcGxhdGVCZWZvcmVTdWJtaXQsIG5ldzogdGhpcy50ZW1wbGF0ZSwgc3RhdHVzOiAyMDAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm9yJywgZGV0YWlsOiBgQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZC4gJHtKU09OLnN0cmluZ2lmeShlKX1gLCBzdGlja3k6IHRydWUgfSk7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNhbkRlbGV0ZSlcbiAgICAgIHJldHVybjtcblxuICAgIGlmICh0aGlzLmZvcm1Hcm91cCA9PT0gdW5kZWZpbmVkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybUdyb3VwIGNhbm5vdCBiZSB1bmRlZmluZWQuXCIpO1xuXG4gICAgYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5kZWxldGVCeVRlbXBsYXRlQW5kRm9ybSh0aGlzLnRlbXBsYXRlLCB0aGlzLmZvcm1Hcm91cCk7XG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ0RlbGV0ZWQnLCBkZXRhaWw6ICdUaGUgcmVzb3VyY2UgaGFzIGJlZW4gZGVsZXRlZC4nIH0pXG5cbiAgICB0aGlzLmFmdGVyRGVsZXRlLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldFN1YkNvbnRyb2woY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkLCBwYXRoRWxlbWVudDogc3RyaW5nKTogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAocGF0aEVsZW1lbnQgPT09IFwiXCIpXG4gICAgICByZXR1cm4gY29udHJvbDtcblxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cClcbiAgICAgIHJldHVybiBjb250cm9sLmNvbnRyb2xzW3BhdGhFbGVtZW50XTtcblxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1BcnJheSkge1xuICAgICAgY29uc3QgaW5kZXggPSBOdW1iZXIucGFyc2VJbnQocGF0aEVsZW1lbnQpO1xuICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoaW5kZXgpKVxuICAgICAgICByZXR1cm4gY29udHJvbC5jb250cm9sc1tpbmRleF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRyb2w7XG4gIH1cblxuICBwcml2YXRlIGdldENsaWVudCgpOiBSZXN0V29ybGRDbGllbnQge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnRzLmdldENsaWVudCh0aGlzLmFwaU5hbWUpO1xuICB9XG59XG4iLCI8Zm9ybSAqbmdJZj1cImZvcm1Hcm91cCAhPT0gdW5kZWZpbmVkICYmIHRlbXBsYXRlICE9PSB1bmRlZmluZWRcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIChuZ1N1Ym1pdCk9XCJzdWJtaXQoKVwiPlxuICA8ZGl2IGNsYXNzPVwiYmxvY2thYmxlLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJibG9ja2FibGUtZWxlbWVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZmllbGRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtZDpjb2wtMTAgbWQ6Y29sLW9mZnNldC0yXCI+XG4gICAgICAgICAgPHJ3LXZhbGlkYXRpb24tZXJyb3JzIFtmb3JtXT1cImZvcm1Hcm91cFwiPjwvcnctdmFsaWRhdGlvbi1lcnJvcnM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDb250ZW50PlxuICAgICAgICA8cnctaW5wdXQtdGVtcGxhdGUgW3RlbXBsYXRlXT1cInRlbXBsYXRlXCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiPjwvcnctaW5wdXQtdGVtcGxhdGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRSZWYgfHwgZGVmYXVsdENvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYmxvY2thYmxlLW92ZXJsYXlcIiAqbmdJZj1cImlzTG9hZGluZ1wiPlxuICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyPjwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJncmlkXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGxcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0QnV0dG9ucz5cbiAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwic3VibWl0XCIgbGFiZWw9XCJTYXZlXCIgaWNvbj1cImZhciBmYS1zYXZlXCIgY2xhc3M9XCJteC0yIHAtYnV0dG9uLXN1Y2Nlc3NcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFhbGxvd1N1Ym1pdFwiPjwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBsYWJlbD1cIlJlbG9hZFwiIGljb249XCJmYXMgZmEtcmVkb1wiIGNsYXNzPVwibXgtMiBwLWJ1dHRvbi1pbmZvXCJcbiAgICAgICAgICAgIChjbGljayk9XCJyZWxvYWQoKVwiIFtkaXNhYmxlZF09XCIhY2FuUmVsb2FkXCI+PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGxhYmVsPVwiRGVsZXRlXCIgaWNvbj1cImZhciBmYS10cmFzaC1hbHRcIiBjbGFzcz1cIm1sLTIgcC1idXR0b24tZGFuZ2VyXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzaG93RGVsZXRlQ29uZmlybWF0aW9Nb2RhbCgpXCIgW2Rpc2FibGVkXT1cIiFjYW5EZWxldGVcIj48L2J1dHRvbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbnNSZWYgfHwgZGVmYXVsdEJ1dHRvbnNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
|
|
@@ -240,14 +240,17 @@ export class RestWorldInputDropdownComponent {
|
|
|
240
240
|
getPrompt(item) {
|
|
241
241
|
if (item === undefined || item === null || !item.hasOwnProperty(this.promptField))
|
|
242
242
|
return "";
|
|
243
|
-
return item[this.promptField];
|
|
243
|
+
return item[this.promptField] ?? "";
|
|
244
244
|
}
|
|
245
245
|
getLabelInternal(item) {
|
|
246
246
|
if (item === undefined || item === null)
|
|
247
247
|
return "";
|
|
248
248
|
let label = this.getPrompt(item);
|
|
249
|
-
if (this.property.cols === undefined || this.property.cols > 1)
|
|
250
|
-
|
|
249
|
+
if (this.property.cols === undefined || this.property.cols > 1) {
|
|
250
|
+
const value = this.getValue(item);
|
|
251
|
+
if (typeof value !== "string" || (value !== "" && value.toUpperCase() !== label.toUpperCase()))
|
|
252
|
+
label += ` (${value})`;
|
|
253
|
+
}
|
|
251
254
|
return label;
|
|
252
255
|
}
|
|
253
256
|
getTooltipInternal(item) {
|
|
@@ -522,4 +525,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
|
|
|
522
525
|
type: Input,
|
|
523
526
|
args: [{ required: true }]
|
|
524
527
|
}] } });
|
|
525
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWlucHV0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtaW5wdXRzL3Jlc3R3b3JsZC1pbnB1dHMudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWlucHV0cy9yZXN0d29ybGQtZm9ybS1lbGVtZW50L3Jlc3R3b3JsZC1mb3JtLWVsZW1lbnQuY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWlucHV0cy9yZXN0d29ybGQtaW5wdXQvcmVzdHdvcmxkLWlucHV0LmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1pbnB1dHMvcmVzdHdvcmxkLWlucHV0LWNvbGxlY3Rpb24vcmVzdHdvcmxkLWlucHV0LWNvbGxlY3Rpb24uY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWlucHV0cy9yZXN0d29ybGQtaW5wdXQtZHJvcGRvd24vcmVzdHdvcmxkLWlucHV0LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1pbnB1dHMvcmVzdHdvcmxkLWlucHV0LW9iamVjdC9yZXN0d29ybGQtaW5wdXQtb2JqZWN0LmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1pbnB1dHMvcmVzdHdvcmxkLWlucHV0LXNpbXBsZS9yZXN0d29ybGQtaW5wdXQtc2ltcGxlLmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1pbnB1dHMvcmVzdHdvcmxkLWlucHV0LXRlbXBsYXRlL3Jlc3R3b3JsZC1pbnB1dC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hJLE9BQU8sRUFBbUIsZ0JBQWdCLEVBQXFDLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUgsT0FBTyxFQUFlLGNBQWMsRUFBMkIsY0FBYyxFQUFZLFlBQVksRUFBa0UsTUFBTSx5QkFBeUIsQ0FBQztBQU12TSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUN4RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWxEOzs7O0dBSUc7QUFPSCxNQUFNLE9BQU8sNkJBQTZCO0lBRXhDLFFBQVEsQ0FBYTtJQUdyQixPQUFPLENBQVU7dUdBTE4sNkJBQTZCOzJGQUE3Qiw2QkFBNkIsNkdDeEIxQyx1UEFJQSw4RUR5Q2EsdUJBQXVCLHNNQXZCbkIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsQ0FB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QUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFJekIsUUFBUTtzQkFEUCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0RyYWdEcm9wIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1Hcm91cERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRm9ybVNlcnZpY2UsIE51bWJlclRlbXBsYXRlLCBPcHRpb25zLCBPcHRpb25zSXRlbUR0bywgUHJvYmxlbURldGFpbHMsIFByb3BlcnR5LCBQcm9wZXJ0eVR5cGUsIFJlc291cmNlRHRvLCBSZXNvdXJjZU9mRHRvLCBTaW1wbGVWYWx1ZSwgVGVtcGxhdGUsIFRlbXBsYXRlRHRvIH0gZnJvbSAnQHdlcnR6dWkvbmd4LWhhbC1jbGllbnQnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgRHJvcGRvd25DaGFuZ2VFdmVudCB9IGZyb20gJy4uLy4uL21vZGVscy9ldmVudHMnO1xyXG5pbXBvcnQgeyBQcm9wZXJ0eVRlbXBsYXRlQ29udGV4dCB9IGZyb20gJy4uLy4uL21vZGVscy90ZW1wbGF0aW5nJztcclxuaW1wb3J0IHsgUmVzdFdvcmxkQ2xpZW50IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudCc7XHJcbmltcG9ydCB7IFJlc3RXb3JsZENsaWVudENvbGxlY3Rpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50LWNvbGxlY3Rpb24nO1xyXG5pbXBvcnQgeyBQcm9wZXJ0eVdpdGhPcHRpb25zLCBQcm9wZXJ0eVdpdGhJbWFnZSB9IGZyb20gJy4uLy4uL21vZGVscy9zcGVjaWFsLXByb3BlcnRpZXMnXHJcbmltcG9ydCB7IGRlYm91bmNlIH0gZnJvbSAnLi4vLi4vdXRpbC9kZWJvdW5jZSc7XHJcbmltcG9ydCB7IE11bHRpU2VsZWN0IH0gZnJvbSAncHJpbWVuZy9tdWx0aXNlbGVjdCc7XHJcblxyXG4vKipcclxuICogQSBmb3JtIGVsZW1lbnQgd2l0aCBhIGxhYmVsIHRoYXQgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIGZyb20gYSBwcm9wZXJ0eSBpbiBhIGZvcm0gdGVtcGxhdGUuXHJcbiAqIFRoaXMgbWF5IGFsc28gYmUgYSBjb21wbGV4IG9iamVjdCBvciBhIGNvbGxlY3Rpb24gaW4gd2hpY2ggY2FzZSBtdWx0aXBsZSBhbmQgbmVzdGVkIGlucHV0IGVsZW1lbnRzIG1heSBiZSByZW5kZXJlZC5cclxuICogSWYgeW91IHdhbnQgYSBmb3JtIGVsZW1lbnQgd2l0aG91dCBhIGxhYmVsLCB1c2UgUmVzdFdvcmxkRm9ybUlucHV0IDxydy1pbnB1dD4uXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3J3LWZvcm0tZWxlbWVudCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1mb3JtLWVsZW1lbnQvcmVzdHdvcmxkLWZvcm0tZWxlbWVudC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVzdHdvcmxkLWZvcm0tZWxlbWVudC9yZXN0d29ybGQtZm9ybS1lbGVtZW50LmNvbXBvbmVudC5jc3MnXSxcclxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogRm9ybUdyb3VwRGlyZWN0aXZlIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXN0V29ybGRGb3JtRWxlbWVudENvbXBvbmVudDxUUHJvcGVydHkgZXh0ZW5kcyBQcm9wZXJ0eTxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+PiB7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBwcm9wZXJ0eSE6IFRQcm9wZXJ0eTtcclxuXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBhcGlOYW1lITogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogQSBmb3JtIGlucHV0IGVsZW1lbnQgdGhhdCBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZnJvbSBhIHByb3BlcnR5IGluIGEgZm9ybSB0ZW1wbGF0ZS5cclxuICogVGhpcyBtYXkgYWxzbyBiZSBhIGNvbXBsZXggb2JqZWN0IG9yIGEgY29sbGVjdGlvbiBpbiB3aGljaCBjYXNlIG11bHRpcGxlIGFuZCBuZXN0ZWQgaW5wdXQgZWxlbWVudHMgbWF5IGJlIHJlbmRlcmVkLlxyXG4gKiBJZiB5b3UgYWxzbyB3YW50IGEgbGFiZWwsIHVzZSBSZXN0V29ybGRGb3JtRWxlbWVudCA8cnctZm9ybS1lbGVtZW50Pi5cclxuICogWW91IGNhbiBhbHNvIHVzZSBvbmUgb2YgdGhlIGRpZmZlcmVudCBSZXN0V29ybGRJbnB1dC4uLiA8cnctaW5wdXQtLi4uPiBlbGVtZW50cyB0byByZW5kZXIgYSBzcGVjaWZpYyBpbnB1dCxcclxuICogYnV0IGl0IGlzIGFkdmlzZWQgdG8gY29udHJvbCB0aGUgcmVuZGVyZWQgaW5wdXQgdGhyb3VnaCB0aGUgcGFzc2VkIGluIHByb3BlcnR5LlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdydy1pbnB1dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1pbnB1dC9yZXN0d29ybGQtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Jlc3R3b3JsZC1pbnB1dC9yZXN0d29ybGQtaW5wdXQuY29tcG9uZW50LmNzcyddLFxyXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBGb3JtR3JvdXBEaXJlY3RpdmUgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc3RXb3JsZElucHV0Q29tcG9uZW50PFRQcm9wZXJ0eSBleHRlbmRzIFByb3BlcnR5PFNpbXBsZVZhbHVlLCBzdHJpbmcsIHN0cmluZz4+IHtcclxuXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBwcm9wZXJ0eSE6IFRQcm9wZXJ0eTtcclxuXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBhcGlOYW1lITogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgZ2V0IFByb3BlcnR5VHlwZSgpIHtcclxuICAgIHJldHVybiBQcm9wZXJ0eVR5cGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IFByb3BlcnR5V2l0aE9wdGlvbnMoKSB7XHJcbiAgICByZXR1cm4gUHJvcGVydHlXaXRoT3B0aW9uczxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+O1xyXG4gIH1cclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBBIGNvbGxlY3Rpb24gdGhhdCBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZnJvbSB0aGUgZ2l2ZW4gcHJvcGVydHkuXHJcbiAqIFRoZSBjb2xsZWN0aW9uIHN1cHBvcnRzIGRyYWcgJiBkcm9wIHRvIHJlIG9yZGVyIHRoZSBlbGVtZW50cyBhbmQgY2FuIGFsc28gYmUgbmVzdGVkLlxyXG4gKiBAcmVtYXJrcyBJdCBpcyBhZHZpc2VkIHRvIHVzZSBSZXN0V29ybGRJbnB1dENvbXBvbmVudCA8cnctaW5wdXQ+IGFuZCBjb250cm9sIHRoZSByZW5kZXJlZCBpbnB1dHMgd2l0aCB0aGUgcGFzc2VkIGluIHByb3BlcnR5XHJcbiAqIGluc3RlYWQgb2YgdXNpbmcgdGhpcyBjb21wb25lbnQgZGlyZWN0bHkuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3J3LWlucHV0LWNvbGxlY3Rpb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtaW5wdXQtY29sbGVjdGlvbi9yZXN0d29ybGQtaW5wdXQtY29sbGVjdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVzdHdvcmxkLWlucHV0LWNvbGxlY3Rpb24vcmVzdHdvcmxkLWlucHV0LWNvbGxlY3Rpb24uY29tcG9uZW50LmNzcyddLFxyXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBGb3JtR3JvdXBEaXJlY3RpdmUgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc3RXb3JsZElucHV0Q29sbGVjdGlvbkNvbXBvbmVudDxUIGV4dGVuZHMgeyBbSyBpbiBrZXlvZiBUXTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PjsgfT4gaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIHByb3BlcnR5ITogUHJvcGVydHkgJiB7IF90ZW1wbGF0ZXM6IHsgZGVmYXVsdDogVGVtcGxhdGUgfSB9O1xyXG5cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIGFwaU5hbWUhOiBzdHJpbmc7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lucHV0Q29sbGVjdGlvbicsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0Q29sbGVjdGlvblJlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuXHJcbiAgcHJpdmF0ZSBfdGVtcGxhdGVzOiBOdW1iZXJUZW1wbGF0ZVtdID0gW107XHJcbiAgcHVibGljIGdldCB0ZW1wbGF0ZXMoKTogTnVtYmVyVGVtcGxhdGVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGVmYXVsdFRlbXBsYXRlPzogVGVtcGxhdGU7XHJcbiAgcHVibGljIGdldCBkZWZhdWx0VGVtcGxhdGUoKTogVGVtcGxhdGUge1xyXG4gICAgaWYgKHRoaXMuX2RlZmF1bHRUZW1wbGF0ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBkZWZhdWx0IHRlbXBsYXRlIGZvdW5kLlwiKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFRlbXBsYXRlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5uZXJGb3JtQXJyYXk/OiBGb3JtQXJyYXk8Rm9ybUdyb3VwPFQ+PjtcclxuICBwdWJsaWMgZ2V0IGlubmVyRm9ybUFycmF5KCkge1xyXG4gICAgaWYgKHRoaXMuX2lubmVyRm9ybUFycmF5ID09PSB1bmRlZmluZWQpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm1Hcm91cCBpcyBub3Qgc2V0LlwiKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5faW5uZXJGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuX2NvbnRyb2xDb250YWluZXIuY29udHJvbCBhcyBGb3JtR3JvdXA8YW55PjtcclxuICAgIHRoaXMuX2lubmVyRm9ybUFycmF5ID0gZm9ybUdyb3VwLmNvbnRyb2xzW3RoaXMucHJvcGVydHkubmFtZV0gYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxUPj47XHJcbiAgICB0aGlzLl90ZW1wbGF0ZXMgPSBSZXN0V29ybGRJbnB1dENvbGxlY3Rpb25Db21wb25lbnQuZ2V0Q29sbGVjdGlvbkVudHJ5VGVtcGxhdGVzKHRoaXMucHJvcGVydHkpO1xyXG4gICAgdGhpcy5fZGVmYXVsdFRlbXBsYXRlID0gdGhpcy5wcm9wZXJ0eS5fdGVtcGxhdGVzLmRlZmF1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBnZXRDb2xsZWN0aW9uRW50cnlUZW1wbGF0ZXMocHJvcGVydHk/OiBQcm9wZXJ0eSk6IE51bWJlclRlbXBsYXRlW10ge1xyXG4gICAgaWYgKCFwcm9wZXJ0eSlcclxuICAgICAgcmV0dXJuIFtdO1xyXG5cclxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhwcm9wZXJ0eS5fdGVtcGxhdGVzKVxyXG4gICAgICAuZmlsdGVyKChba2V5LCB2YWx1ZV0pID0+IE51bWJlci5pc0ludGVnZXIoTnVtYmVyLnBhcnNlSW50KGtleSkpICYmIE51bWJlci5pc0ludGVnZXIoTnVtYmVyLnBhcnNlSW50KHZhbHVlPy50aXRsZSA/PyBcIlwiKSkpXHJcbiAgICAgIC5tYXAoKFssIHZhbHVlXSkgPT4gbmV3IE51bWJlclRlbXBsYXRlKHZhbHVlIGFzIFRlbXBsYXRlRHRvKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkTmV3SXRlbVRvQ29sbGVjdGlvbigpOiB2b2lkIHtcclxuICAgIGNvbnN0IG1heEluZGV4ID0gTWF0aC5tYXgoLi4uT2JqZWN0LmtleXModGhpcy50ZW1wbGF0ZXMpXHJcbiAgICAgIC5tYXAoa2V5ID0+IE51bWJlci5wYXJzZUludChrZXkpKVxyXG4gICAgICAuZmlsdGVyKGtleSA9PiBOdW1iZXIuaXNTYWZlSW50ZWdlcihrZXkpKSk7XHJcbiAgICBjb25zdCBuZXh0SW5kZXggPSBtYXhJbmRleCA8IDAgPyAwIDogbWF4SW5kZXggKyAxO1xyXG5cclxuICAgIGNvbnN0IGNvcGllZFRlbXBsYXRlRHRvID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmRlZmF1bHRUZW1wbGF0ZSkpIGFzIFRlbXBsYXRlRHRvO1xyXG4gICAgY29waWVkVGVtcGxhdGVEdG8udGl0bGUgPSBuZXh0SW5kZXgudG9TdHJpbmcoKTtcclxuICAgIGNvbnN0IGNvcGllZFRlbXBsYXRlID0gbmV3IE51bWJlclRlbXBsYXRlKGNvcGllZFRlbXBsYXRlRHRvKTtcclxuXHJcbiAgICB0aGlzLnRlbXBsYXRlc1tuZXh0SW5kZXhdID0gY29waWVkVGVtcGxhdGU7XHJcbiAgICB0aGlzLmlubmVyRm9ybUFycmF5LnB1c2godGhpcy5fZm9ybVNlcnZpY2UuY3JlYXRlRm9ybUdyb3VwRnJvbVRlbXBsYXRlKHRoaXMuZGVmYXVsdFRlbXBsYXRlKSBhcyB1bmtub3duIGFzIEZvcm1Hcm91cDxUPik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVsZXRlSXRlbUZyb21Db2xsZWN0aW9uKHRlbXBsYXRlOiBOdW1iZXJUZW1wbGF0ZSk6IHZvaWQge1xyXG4gICAgaWYgKHRlbXBsYXRlLnRpdGxlID09PSB1bmRlZmluZWQpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBkZWxldGUgYSB0ZW1wbGF0ZSB3aXRob3V0IGEgdGl0bGUuXCIpO1xyXG5cclxuICAgIGRlbGV0ZSB0aGlzLnRlbXBsYXRlc1t0ZW1wbGF0ZS50aXRsZV07XHJcbiAgICB0aGlzLmlubmVyRm9ybUFycmF5LnJlbW92ZUF0KHRlbXBsYXRlLnRpdGxlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb2xsZWN0aW9uSXRlbURyb3BwZWQoJGV2ZW50OiBDZGtEcmFnRHJvcDx7fT4pIHtcclxuICAgIGNvbnN0IHByZXZpb3VzSW5kZXggPSAkZXZlbnQucHJldmlvdXNJbmRleDtcclxuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9ICRldmVudC5jdXJyZW50SW5kZXg7XHJcbiAgICBjb25zdCBtb3ZlbWVudERpcmVjdGlvbiA9IGN1cnJlbnRJbmRleCA+IHByZXZpb3VzSW5kZXggPyAxIDogLTE7XHJcblxyXG4gICAgLy8gTW92ZSBpbiBGb3JtQXJyYXlcclxuICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIG1vdmUgdGhlIGl0ZW0gaW4gdGhlIF90ZW1wbGF0ZXMgb2JqZWN0XHJcbiAgICBjb25zdCBtb3ZlZENvbnRyb2wgPSB0aGlzLmlubmVyRm9ybUFycmF5LmF0KHByZXZpb3VzSW5kZXgpO1xyXG4gICAgZm9yIChsZXQgaSA9IHByZXZpb3VzSW5kZXg7IGkgKiBtb3ZlbWVudERpcmVjdGlvbiA8IGN1cnJlbnRJbmRleCAqIG1vdmVtZW50RGlyZWN0aW9uOyBpID0gaSArIG1vdmVtZW50RGlyZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuaW5uZXJGb3JtQXJyYXkuc2V0Q29udHJvbChpLCB0aGlzLmlubmVyRm9ybUFycmF5LmF0KGkgKyBtb3ZlbWVudERpcmVjdGlvbikpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbm5lckZvcm1BcnJheS5zZXRDb250cm9sKGN1cnJlbnRJbmRleCwgbW92ZWRDb250cm9sKTtcclxuXHJcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGlzIGhlbHBlciB0eXBlIGNvbnZlcnRzIGEgUHJvcGVydHk8WCwgWSwgWj4gdG8gYW4gT3B0aW9uc0l0ZW1EdG88WCwgWSwgWj4gYW5kIHByZXNlcnZlcyB0aGUgZ2VuZXJpYyBwYXJhbWV0ZXJzLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgRXh0cmFjdEdlbmVyaWNPcHRpb25zSXRlbVR5cGU8VFByb3BlcnR5PiA9IFRQcm9wZXJ0eSBleHRlbmRzIFByb3BlcnR5PGluZmVyIFgsIGluZmVyIFksIGluZmVyIFo+ID8gT3B0aW9uc0l0ZW1EdG88WCwgWSwgWj4gOiBuZXZlclxyXG5leHBvcnQgdHlwZSBFeHRyYWN0R2VuZXJpY09wdGlvbnNTZWxlY3RlZFZhbHVlc1R5cGU8VFByb3BlcnR5PiA9IFRQcm9wZXJ0eSBleHRlbmRzIFByb3BlcnR5PGluZmVyIFgsIGluZmVyIFksIGluZmVyIFo+ID8gT3B0aW9uczxYLCBZLCBaPltcInNlbGVjdGVkVmFsdWVzXCJdIDogbmV2ZXJcclxuZXhwb3J0IHR5cGUgRXh0cmFjdFZhbHVlVHlwZTxUUHJvcGVydHk+ID0gVFByb3BlcnR5IGV4dGVuZHMgUHJvcGVydHk8aW5mZXIgWCwgaW5mZXIgWSwgaW5mZXIgWj4gPyBYIDogbmV2ZXJcclxuXHJcbi8qKlxyXG4gKiBBIGRyb3Bkb3duIHRoYXQgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIGZyb20gdGhlIGdpdmVuIHByb3BlcnR5LlxyXG4gKiBUaGUgZHJvcGRvd24gc3VwcG9ydHMgc2VhcmNoaW5nIHRocm91Z2ggYSBSRVNUV29ybGQgbGlzdCBlbmRwb2ludCBvbiB0aGUgYmFja2VuZCBpZiB0aGUgYGxpbmtgIG9mIHRoZSBvcHRpb25zIGlzIHNldC5cclxuICogT3RoZXJ3aXNlIHRoZSBkcm9wZG93biB3aWxsIHVzZSB0aGUgYGlubGluZWAgb2YgdGhlIG9wdGlvbnMuXHJcbiAqIEByZW1hcmtzIEl0IGlzIGFkdmlzZWQgdG8gdXNlIFJlc3RXb3JsZElucHV0Q29tcG9uZW50IDxydy1pbnB1dD4gYW5kIGNvbnRyb2wgdGhlIHJlbmRlcmVkIGlucHV0cyB3aXRoIHRoZSBwYXNzZWQgaW4gcHJvcGVydHlcclxuICogaW5zdGVhZCBvZiB1c2luZyB0aGlzIGNvbXBvbmVudCBkaXJlY3RseS5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnctaW5wdXQtZHJvcGRvd24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtaW5wdXQtZHJvcGRvd24vcmVzdHdvcmxkLWlucHV0LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtaW5wdXQtZHJvcGRvd24vcmVzdHdvcmxkLWlucHV0LWRyb3Bkb3duLmNvbXBvbmVudC5jc3MnXSxcclxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogRm9ybUdyb3VwRGlyZWN0aXZlIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXN0V29ybGRJbnB1dERyb3Bkb3duQ29tcG9uZW50PFRQcm9wZXJ0eSBleHRlbmRzIFByb3BlcnR5PFNpbXBsZVZhbHVlLCBzdHJpbmcsIHN0cmluZz4gJiB7IG9wdGlvbnM6IE9wdGlvbnM8U2ltcGxlVmFsdWUsIHN0cmluZywgc3RyaW5nPiB9LCBUT3B0aW9uc0l0ZW0gZXh0ZW5kcyBFeHRyYWN0R2VuZXJpY09wdGlvbnNJdGVtVHlwZTxUUHJvcGVydHk+ID0gRXh0cmFjdEdlbmVyaWNPcHRpb25zSXRlbVR5cGU8VFByb3BlcnR5Pj4gaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgcHJvcGVydHkhOiBUUHJvcGVydHk7XHJcblxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgYXBpTmFtZSE6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgZ2l2ZW4gaXRlbS5cclxuICAgKiBUaGUgZGVmYXVsdCByZXR1cm5zIHRoZSBwcm9tcHQgYW5kIG9wdGlvbmFsbHkgdGhlIHZhbHVlIGluIGJyYWNrZXRzLlxyXG4gICAqIFRoZSB2YWx1ZSBpbiBicmFja2V0cyB3aWxsIG9ubHkgYmUgZGlzcGxheWVkIGlmIHRoZSBgY29sc2AgZmllbGQgb2YgdGhlIHByb3BlcnR5IGlzIHVuZGVmaW5lZCBvciBncmVhdGVyIHRoYW4gMS5cclxuICAgKiBPdmVyd3JpdGUgdGhpcyBmdW5jdGlvbiB0byBjaGFuZ2UgdGhlIGxhYmVsLlxyXG4gICAqIEBwYXJhbSBpdGVtIFRoZSBpdGVtIHRvIGdldCB0aGUgbGFiZWwgZm9yLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0TGFiZWw6IChpdGVtOiBUT3B0aW9uc0l0ZW0pID0+IHN0cmluZyA9IHRoaXMuZ2V0TGFiZWxJbnRlcm5hbDtcclxuXHJcbiAgLyoqXHJcbiAgICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHRvb2x0aXAgZm9yIHRoZSBnaXZlbiBpdGVtLlxyXG4gICAqIFRoZSBkZWZhdWx0IHJldHVybnMgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGl0ZW0gZXhjZXB0IHRoZSBvbmVzIHRoYXQgc3RhcnQgd2l0aCBhbiB1bmRlcnNjb3JlIG9yIHRoZSBvbmVzIHRoYXQgYXJlIGluIHRoZSBsaXN0IG9mIGRlZmF1bHQgcHJvcGVydGllcyB0byBleGNsdWRlLlxyXG4gICAqIFRoZSBkZWZhdWx0IHByb3BlcnRpZXMgdG8gZXhjbHVkZSBhcmU6IGNyZWF0ZWRBdCwgY3JlYXRlZEJ5LCBsYXN0Q2hhbmdlZEF0LCBsYXN0Q2hhbmdlZEJ5LCB0aW1lc3RhbXAsIHByb21wdEZpZWxkLCB2YWx1ZUZpZWxkLlxyXG4gICAqIE92ZXJ3cml0ZSB0aGlzIGZ1bmN0aW9uIHRvIGNoYW5nZSB0aGUgdG9vbHRpcC5cclxuICAgKiBAcGFyYW0gaXRlbSBUaGUgaXRlbSB0byBnZXQgdGhlIGxhYmVsIGZvci5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIGdldFRvb2x0aXA6IChpdGVtOiBUT3B0aW9uc0l0ZW0pID0+IHN0cmluZyA9IHRoaXMuZ2V0VG9vbHRpcEludGVybmFsO1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dE9wdGlvbnNTaW5nbGUnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dE9wdGlvbnNTaW5nbGVSZWY/OiBUZW1wbGF0ZVJlZjxQcm9wZXJ0eVRlbXBsYXRlQ29udGV4dD47XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lucHV0T3B0aW9uc011bHRpcGxlJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgaW5wdXRPcHRpb25zTXVsdGlwbGVSZWY/OiBUZW1wbGF0ZVJlZjxQcm9wZXJ0eVRlbXBsYXRlQ29udGV4dD47XHJcblxyXG4gIEBWaWV3Q2hpbGQoTXVsdGlTZWxlY3QpXHJcbiAgbXVsdGlTZWxlY3Q/OiBNdWx0aVNlbGVjdDtcclxuXHJcbiAgLyoqXHJcbiAgICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIHdoZW4gdGhlIHNlbGVjdGVkIHZhbHVlIGNoYW5nZXMuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEcm9wZG93bkNoYW5nZUV2ZW50PFRPcHRpb25zSXRlbT4+KCk7XHJcblxyXG4gIHByaXZhdGUgX2Zvcm1Db250cm9sITogQWJzdHJhY3RDb250cm9sPEV4dHJhY3RHZW5lcmljT3B0aW9uc1NlbGVjdGVkVmFsdWVzVHlwZTxUUHJvcGVydHk+PjtcclxuXHJcbiAgcHJpdmF0ZSBfZmlsdGVyVmFsdWU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIHB1YmxpYyBnZXQgZmlsdGVyVmFsdWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9maWx0ZXJWYWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHZhbHVlRmllbGQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BlcnR5Lm9wdGlvbnMudmFsdWVGaWVsZCA/PyBcInZhbHVlXCI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHByb21wdEZpZWxkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eS5vcHRpb25zLnByb21wdEZpZWxkID8/IFwicHJvbXB0XCI7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX21lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NsaWVudHM6IFJlc3RXb3JsZENsaWVudENvbGxlY3Rpb24sXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLl9jb250cm9sQ29udGFpbmVyLmNvbnRyb2wgYXMgRm9ybUdyb3VwPGFueT47XHJcbiAgICB0aGlzLl9mb3JtQ29udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1t0aGlzLnByb3BlcnR5Lm5hbWVdIGFzIEFic3RyYWN0Q29udHJvbDxFeHRyYWN0R2VuZXJpY09wdGlvbnNTZWxlY3RlZFZhbHVlc1R5cGU8VFByb3BlcnR5Pj47XHJcbiAgICBhd2FpdCB0aGlzLnNldEluaXRpYWxTZWxlY3RlZE9wdGlvbnNFbGVtZW50Rm9yUHJvcGVydHkoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRWYWx1ZShpdGVtOiBUT3B0aW9uc0l0ZW0pOiBFeHRyYWN0VmFsdWVUeXBlPFRQcm9wZXJ0eT4ge1xyXG4gICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsIHx8ICFpdGVtLmhhc093blByb3BlcnR5KHRoaXMudmFsdWVGaWVsZCkpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGl0ZW0gZG9lcyBub3QgaGF2ZSBhIHByb3BlcnR5ICR7dGhpcy52YWx1ZUZpZWxkfS5gKTtcclxuXHJcbiAgICByZXR1cm4gaXRlbVt0aGlzLnZhbHVlRmllbGQgYXMga2V5b2YgVE9wdGlvbnNJdGVtXSBhcyBFeHRyYWN0VmFsdWVUeXBlPFRQcm9wZXJ0eT47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UHJvbXB0KGl0ZW06IFRPcHRpb25zSXRlbSk6IHN0cmluZyB7XHJcbiAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwgfHwgIWl0ZW0uaGFzT3duUHJvcGVydHkodGhpcy5wcm9tcHRGaWVsZCkpXHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHJldHVybiBpdGVtW3RoaXMucHJvbXB0RmllbGQgYXMga2V5b2YgVE9wdGlvbnNJdGVtXSBhcyBzdHJpbmc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0TGFiZWxJbnRlcm5hbChpdGVtOiBUT3B0aW9uc0l0ZW0pOiBzdHJpbmcge1xyXG4gICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gXCJcIjtcclxuXHJcbiAgICBsZXQgbGFiZWwgPSB0aGlzLmdldFByb21wdChpdGVtKTtcclxuICAgIGlmICh0aGlzLnByb3BlcnR5LmNvbHMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnByb3BlcnR5LmNvbHMgPiAxKVxyXG4gICAgICBsYWJlbCArPSBgICgke3RoaXMuZ2V0VmFsdWUoaXRlbSl9KWA7XHJcblxyXG4gICAgcmV0dXJuIGxhYmVsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUb29sdGlwSW50ZXJuYWwoaXRlbTogVE9wdGlvbnNJdGVtKTogc3RyaW5nIHtcclxuICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgY29uc3QgdG9vbHRpcCA9IE9iamVjdC5lbnRyaWVzKGl0ZW0pXHJcbiAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiAhKGtleS5zdGFydHNXaXRoKCdfJykgfHwgWydjcmVhdGVkQXQnLCAnY3JlYXRlZEJ5JywgJ2xhc3RDaGFuZ2VkQXQnLCAnbGFzdENoYW5nZWRCeScsICd0aW1lc3RhbXAnLCB0aGlzLnByb21wdEZpZWxkLCB0aGlzLnZhbHVlRmllbGRdLmluY2x1ZGVzKGtleSkpKVxyXG4gICAgICAucmVkdWNlKChwcmV2LCBba2V5LCB2YWx1ZV0sIGluZGV4KSA9PiBgJHtwcmV2fSR7aW5kZXggPT09IDAgPyAnJyA6ICdcXG4nfSR7a2V5fTogJHtSZXN0V29ybGRJbnB1dERyb3Bkb3duQ29tcG9uZW50Lmpzb25TdHJpbmdpZnlXaXRoRWxpcHNpcyh2YWx1ZSl9YCwgJycpO1xyXG5cclxuICAgIHJldHVybiB0b29sdGlwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEl0ZW1CeVZhbHVlKHZhbHVlOiBFeHRyYWN0VmFsdWVUeXBlPFRQcm9wZXJ0eT4pOiBUT3B0aW9uc0l0ZW0ge1xyXG4gICAgaWYgKHRoaXMucHJvcGVydHkub3B0aW9ucy5pbmxpbmUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnByb3BlcnR5Lm9wdGlvbnMuaW5saW5lID09PSBudWxsKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm9wZXJ0eSBkb2VzIG5vdCBoYXZlIGFueSBpbmxpbmUgb3B0aW9ucy4nKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eS5vcHRpb25zLmlubGluZS5maW5kKGl0ZW0gPT4gdGhpcy5nZXRWYWx1ZShpdGVtIGFzIFRPcHRpb25zSXRlbSkgPT09IHZhbHVlKSBhcyBUT3B0aW9uc0l0ZW07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlQnlWYWx1ZSh2YWx1ZTogRXh0cmFjdFZhbHVlVHlwZTxUUHJvcGVydHk+KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fZm9ybUNvbnRyb2wudmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl9mb3JtQ29udHJvbC52YWx1ZSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuX2Zvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgY29uc3QgbmV3VmFsdWUgPSBmb3JtVmFsdWUuZmlsdGVyKGkgPT4gaSAhPT0gdmFsdWUpIGFzIEV4dHJhY3RHZW5lcmljT3B0aW9uc1NlbGVjdGVkVmFsdWVzVHlwZTxUUHJvcGVydHk+O1xyXG4gICAgdGhpcy5fZm9ybUNvbnRyb2wuc2V0VmFsdWUobmV3VmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uT3B0aW9uc0ZpbHRlcmVkID0gZGVib3VuY2UodGhpcy5vbk9wdGlvbnNGaWx0ZXJlZEludGVybmFsLCAyMDApO1xyXG5cclxuICBwdWJsaWMgYXN5bmMgb25PcHRpb25zRmlsdGVyZWRJbnRlcm5hbChldmVudDogeyBvcmlnaW5hbEV2ZW50OiBFdmVudDsgZmlsdGVyOiBzdHJpbmcgfCBudWxsIH0pIHtcclxuICAgIHRoaXMuX2xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BlcnR5Py5vcHRpb25zO1xyXG5cclxuICAgICAgaWYgKCEoZXZlbnQuZmlsdGVyKSB8fCBldmVudC5maWx0ZXIgPT09ICcnKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50LnR5cGUgPT09IFwiaW5wdXRcIikge1xyXG4gICAgICAgIGNvbnN0IGlucHV0RXZlbnQgPSAoZXZlbnQub3JpZ2luYWxFdmVudCBhcyBJbnB1dEV2ZW50KTtcclxuICAgICAgICBpZiAoaW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0RnJvbVBhc3RlXCIpIHtcclxuICAgICAgICAgIC8vIElmIHRoZSB1c2VyIHBhc3RlZCBpbiBtdWx0aXBsZSBpZHMgYXMgY29tbWEgc2VwYXJhdGVkIGxpc3QsIHdlIHdhbnQgdG8gZ2V0IHRoZW0gYWxsIGFuZCBzZXQgdGhlbSBhcyB0aGUgc2VsZWN0ZWQgdmFsdWUuXHJcblxyXG4gICAgICAgICAgdmFyIHZhbHVlcyA9IGV2ZW50LmZpbHRlclxyXG4gICAgICAgICAgICAuc3BsaXQoXCIsXCIpXHJcbiAgICAgICAgICAgIC5maWx0ZXIodiA9PiB2ICE9PSAnJylcclxuICAgICAgICAgICAgLm1hcCh2ID0+IHYudHJpbSgpKVxyXG4gICAgICAgICAgICAubWFwKHYgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG4gPSBOdW1iZXIucGFyc2VGbG9hdCh2KTtcclxuICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKG4pID8gdiA6IG47XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGlmICghdmFsdWVzIHx8IHZhbHVlcy5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICBjb25zdCBhbGxBcmVOdW1iZXJzID0gdmFsdWVzLmV2ZXJ5KHYgPT4gdHlwZW9mIHYgPT09IFwibnVtYmVyXCIgJiYgIWlzTmFOKHYpKTtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGFsbEFyZU51bWJlcnNcclxuICAgICAgICAgICAgPyBgJHtvcHRpb25zLnZhbHVlRmllbGR9IGluICgke3ZhbHVlcy5qb2luKCcsJyl9KWBcclxuICAgICAgICAgICAgOiBgY29udGFpbnMoJHtvcHRpb25zLnByb21wdEZpZWxkfSwgJyR7dmFsdWVzLmpvaW4oXCInLCAnXCIpfScpYDtcclxuXHJcbiAgICAgICAgICBpZiAoKG9wdGlvbnM/Lmxpbms/LmhyZWYpKVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLlNldElubGluZU9wdGlvbnNGcm9tRmlsdGVyKGZpbHRlciwgXCJcIik7XHJcblxyXG4gICAgICAgICAgaWYgKG9wdGlvbnMuaW5saW5lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzOiBFeHRyYWN0R2VuZXJpY09wdGlvbnNTZWxlY3RlZFZhbHVlc1R5cGU8VFByb3BlcnR5PiA9IG9wdGlvbnMuaW5saW5lXHJcbiAgICAgICAgICAgICAgLm1hcChpID0+IHRoaXMuZ2V0VmFsdWUoaSBhcyBUT3B0aW9uc0l0ZW0pKVxyXG4gICAgICAgICAgICAgIC5maWx0ZXIodiA9PiB2YWx1ZXMuaW5jbHVkZXModiBhcyBhbnkpKSBhcyBhbnk7XHJcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1Db250cm9sLnNldFZhbHVlKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdD8ucmVzZXRGaWx0ZXIoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBub3JtYWwgY2FzZSB3aGVyZSB0aGUgdXNlciB0eXBlcyBpbiBhIGZpbHRlci5cclxuXHJcbiAgICAgICAgICBsZXQgZmlsdGVyID0gYGNvbnRhaW5zKCR7b3B0aW9ucy5wcm9tcHRGaWVsZH0sICcke2V2ZW50LmZpbHRlcn0nKWA7XHJcbiAgICAgICAgICBpZiAob3B0aW9ucy52YWx1ZUZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSAnaWQnICYmICFOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlSW50KGV2ZW50LmZpbHRlcikpKVxyXG4gICAgICAgICAgICBmaWx0ZXIgPSBgKCR7b3B0aW9ucy52YWx1ZUZpZWxkfSBlcSAke2V2ZW50LmZpbHRlcn0pICBvciAoJHtmaWx0ZXJ9KWA7XHJcblxyXG4gICAgICAgICAgaWYgKChvcHRpb25zPy5saW5rPy5ocmVmKSlcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5TZXRJbmxpbmVPcHRpb25zRnJvbUZpbHRlcihmaWx0ZXIsIGV2ZW50LmZpbHRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uT3B0aW9uc0NoYW5nZWQoZXZlbnQ6IERyb3Bkb3duQ2hhbmdlRXZlbnQ8VE9wdGlvbnNJdGVtPikge1xyXG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2V0SW5pdGlhbFNlbGVjdGVkT3B0aW9uc0VsZW1lbnRGb3JQcm9wZXJ0eSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BlcnR5Lm9wdGlvbnM7XHJcblxyXG4gICAgaWYgKCFvcHRpb25zLmxpbms/LmhyZWYgfHwgIW9wdGlvbnMuc2VsZWN0ZWRWYWx1ZXMpIHtcclxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdGlvbnMuaW5saW5lKSB8fCBvcHRpb25zLmlubGluZS5sZW5ndGggPT09IDApXHJcbiAgICAgICAgb3B0aW9ucy5pbmxpbmUgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZpbHRlciA9IGAke29wdGlvbnMudmFsdWVGaWVsZH0gaW4gKCR7b3B0aW9ucy5zZWxlY3RlZFZhbHVlc30pYDtcclxuICAgIGF3YWl0IHRoaXMuU2V0SW5saW5lT3B0aW9uc0Zyb21GaWx0ZXIoZmlsdGVyLCBcIlwiKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgU2V0SW5saW5lT3B0aW9uc0Zyb21GaWx0ZXIoZmlsdGVyOiBzdHJpbmcsIGV2ZW50RmlsdGVyOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BlcnR5Lm9wdGlvbnM7XHJcbiAgICBpZiAoIW9wdGlvbnMubGluaz8uaHJlZilcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcHJvcGVydHkgZG9lcyBub3QgaGF2ZSBhIGxpbmsgaHJlZi4nKTtcclxuXHJcbiAgICBjb25zdCB0ZW1wbGF0ZWRVcmkgPSBvcHRpb25zLmxpbmsuaHJlZjtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5nZXRMaXN0QnlVcmk8VE9wdGlvbnNJdGVtPih0ZW1wbGF0ZWRVcmksIHsgJGZpbHRlcjogZmlsdGVyLCAkdG9wOiAxMCB9KTtcclxuICAgIGlmICghcmVzcG9uc2Uub2sgfHwgUHJvYmxlbURldGFpbHMuaXNQcm9ibGVtRGV0YWlscyhyZXNwb25zZS5ib2R5KSB8fCAhcmVzcG9uc2UuYm9keSkge1xyXG4gICAgICBjb25zdCBtZXNzYWdlID0gYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGdldHRpbmcgdGhlIHNlbGVjdGVkIGl0ZW1zIGZvciB0aGUgcHJvcGVydHkgJHt0aGlzLnByb3BlcnR5Lm5hbWV9LmA7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6IG1lc3NhZ2UsIGRhdGE6IHJlc3BvbnNlLCBzdGlja3k6IHRydWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaXRlbXMgPSByZXNwb25zZS5ib2R5IS5fZW1iZWRkZWQuaXRlbXMgYXMgUmVzb3VyY2VPZkR0bzxUT3B0aW9uc0l0ZW0+W107XHJcbiAgICBjb25zdCBuZXdJdGVtcyA9IHRoaXMuY29tYmluZUlubGluZVdpdGhTZWxlY3RlZChpdGVtcyk7XHJcbiAgICBvcHRpb25zLmlubGluZSA9IG5ld0l0ZW1zO1xyXG5cclxuICAgIC8vIFRoZSBtdWx0aXNlbGVjdCBjb21wb25lbnQgZG9lcyBub3QgdXBkYXRlIHRoZSBvcHRpb25zIHdoZW4gdGhlIGlubGluZSBvcHRpb25zIGFyZSB1cGRhdGVkLCBzbyB3ZSBuZWVkIHRvIHRyaWdnZXIgYSBjaGFuZ2UgZGV0ZWN0aW9uLlxyXG4gICAgdGhpcy5fZmlsdGVyVmFsdWUgPSBldmVudEZpbHRlcjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tYmluZUlubGluZVdpdGhTZWxlY3RlZChpdGVtczogUmVzb3VyY2VPZkR0bzxUT3B0aW9uc0l0ZW0+W10pOiBUT3B0aW9uc0l0ZW1bXSB7XHJcbiAgICBjb25zdCBvbGRJbmxpbmUgPSB0aGlzLnByb3BlcnR5Lm9wdGlvbnMuaW5saW5lIGFzIFJlc291cmNlT2ZEdG88VE9wdGlvbnNJdGVtPltdO1xyXG4gICAgaWYgKCFvbGRJbmxpbmUpXHJcbiAgICAgIHJldHVybiBpdGVtcztcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlcyA9IHRoaXMuZ2V0U2VsZWN0ZWRWYWx1ZXMoKTtcclxuICAgIGNvbnN0IGl0ZW1zVG9LZWVwID0gb2xkSW5saW5lLmZpbHRlcihpID0+IHNlbGVjdGVkVmFsdWVzLmluY2x1ZGVzKHRoaXMuZ2V0VmFsdWUoaSBhcyBUT3B0aW9uc0l0ZW0pKSk7XHJcbiAgICBjb25zdCBuZXdWYWx1ZXMgPSBpdGVtcy5tYXAoaSA9PiB0aGlzLmdldFZhbHVlKGkpKTtcclxuICAgIGNvbnN0IG5ld0l0ZW1zID0gaXRlbXMuY29uY2F0KGl0ZW1zVG9LZWVwLmZpbHRlcihpID0+ICFuZXdWYWx1ZXMuaW5jbHVkZXModGhpcy5nZXRWYWx1ZShpKSkpKTtcclxuXHJcbiAgICByZXR1cm4gbmV3SXRlbXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFNlbGVjdGVkVmFsdWVzKCk6IHVua25vd25bXSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2Zvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBbXTtcclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXHJcbiAgICAgIHJldHVybiB2YWx1ZVxyXG5cclxuICAgIHJldHVybiBbdmFsdWVdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDbGllbnQoKTogUmVzdFdvcmxkQ2xpZW50IHtcclxuICAgIGlmICghdGhpcy5hcGlOYW1lKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBnZXQgYSBjbGllbnQsIGJlY2F1c2UgdGhlIGFwaU5hbWUgaXMgbm90IHNldC4nKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50cy5nZXRDbGllbnQodGhpcy5hcGlOYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGpzb25TdHJpbmdpZnlXaXRoRWxpcHNpcyh2YWx1ZTogdW5rbm93bikge1xyXG4gICAgY29uc3QgbWF4TGVuZ3RoID0gMjAwO1xyXG4gICAgY29uc3QgZW5kID0gMTA7XHJcbiAgICBjb25zdCBzdGFydCA9IG1heExlbmd0aCAtIGVuZCAtIDI7XHJcbiAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xyXG4gICAgY29uc3Qgc2hvcnRlbmVkID0ganNvbi5sZW5ndGggPiBtYXhMZW5ndGggPyBqc29uLnN1YnN0cmluZygwLCBzdGFydCkgKyAn4oCmJyArIGpzb24uc3Vic3RyaW5nKGpzb24ubGVuZ3RoIC0gZW5kKSA6IGpzb247XHJcblxyXG4gICAgcmV0dXJuIHNob3J0ZW5lZDtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIGNvbXBsZXggb2JqZWN0IHdpdGggbXVsdGlwbGUgcHJvcGVydGllcyB0aGF0IGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBmcm9tIHRoZSBnaXZlbiBwcm9wZXJ0eS5cclxuICogVGhlIG9iamVjdCBjYW4gYWxzbyBiZSBuZXN0ZWQuXHJcbiAqIEByZW1hcmtzIEl0IGlzIGFkdmlzZWQgdG8gdXNlIFJlc3RXb3JsZElucHV0Q29tcG9uZW50IDxydy1pbnB1dD4gYW5kIGNvbnRyb2wgdGhlIHJlbmRlcmVkIGlucHV0cyB3aXRoIHRoZSBwYXNzZWQgaW4gcHJvcGVydHlcclxuICogaW5zdGVhZCBvZiB1c2luZyB0aGlzIGNvbXBvbmVudCBkaXJlY3RseS5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnctaW5wdXQtb2JqZWN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVzdHdvcmxkLWlucHV0LW9iamVjdC9yZXN0d29ybGQtaW5wdXQtb2JqZWN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtaW5wdXQtb2JqZWN0L3Jlc3R3b3JsZC1pbnB1dC1vYmplY3QuY29tcG9uZW50LmNzcyddLFxyXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBGb3JtR3JvdXBEaXJlY3RpdmUgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc3RXb3JsZElucHV0T2JqZWN0Q29tcG9uZW50PFQgZXh0ZW5kcyB7IFtLIGluIGtleW9mIFRdOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+OyB9PiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgcHJvcGVydHkhOiBQcm9wZXJ0eTxudWxsLCBuZXZlciwgbmV2ZXI+ICYgeyBfdGVtcGxhdGVzOiB7IGRlZmF1bHQ6IFRlbXBsYXRlIH0gfTtcclxuXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBhcGlOYW1lITogc3RyaW5nO1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dE9iamVjdCcsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0T2JqZWN0UmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcblxyXG4gIHByaXZhdGUgX2lubmVyRm9ybUdyb3VwPzogRm9ybUdyb3VwPFQ+O1xyXG5cclxuICBwdWJsaWMgZ2V0IGlubmVyRm9ybUdyb3VwKCkge1xyXG4gICAgaWYgKHRoaXMuX2lubmVyRm9ybUdyb3VwID09PSB1bmRlZmluZWQpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm1Hcm91cCBpcyBub3Qgc2V0LlwiKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5faW5uZXJGb3JtR3JvdXA7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXJcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5fY29udHJvbENvbnRhaW5lci5jb250cm9sIGFzIEZvcm1Hcm91cDxhbnk+O1xyXG4gICAgdGhpcy5faW5uZXJGb3JtR3JvdXAgPSBmb3JtR3JvdXAuY29udHJvbHNbdGhpcy5wcm9wZXJ0eS5uYW1lXSBhcyBGb3JtR3JvdXA8VD47XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQSBzaW1wbGUgaW5wdXQgZWxlbWVudCwgbGlrZSBhIHN0cmluZywgYSBudW1iZXIgb3IgYSBEYXRlIHRoYXQgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIGZyb20gdGhlIGdpdmVuIHByb3BlcnR5LlxyXG4gKiBAcmVtYXJrcyBJdCBpcyBhZHZpc2VkIHRvIHVzZSBSZXN0V29ybGRJbnB1dENvbXBvbmVudCA8cnctaW5wdXQ+IGFuZCBjb250cm9sIHRoZSByZW5kZXJlZCBpbnB1dHMgd2l0aCB0aGUgcGFzc2VkIGluIHByb3BlcnR5XHJcbiAqIGluc3RlYWQgb2YgdXNpbmcgdGhpcyBjb21wb25lbnQgZGlyZWN0bHkuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3J3LWlucHV0LXNpbXBsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1pbnB1dC1zaW1wbGUvcmVzdHdvcmxkLWlucHV0LXNpbXBsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVzdHdvcmxkLWlucHV0LXNpbXBsZS9yZXN0d29ybGQtaW5wdXQtc2ltcGxlLmNvbXBvbmVudC5jc3MnXSxcclxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogRm9ybUdyb3VwRGlyZWN0aXZlIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXN0V29ybGRJbnB1dFNpbXBsZUNvbXBvbmVudDxUUHJvcGVydHkgZXh0ZW5kcyBQcm9wZXJ0eTxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+PiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgcHJvcGVydHkhOiBUUHJvcGVydHk7XHJcblxyXG4gIHB1YmxpYyBnZXQgUHJvcGVydHlUeXBlKCkge1xyXG4gICAgcmV0dXJuIFByb3BlcnR5VHlwZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kYXRlRm9ybWF0ID0gbmV3IERhdGUoMzMzMywgMTAsIDIyKSAvLyBtb250aHMgc3RhcnQgYXQgMCBpbiBKU1xyXG4gICAgLnRvTG9jYWxlRGF0ZVN0cmluZygpXHJcbiAgICAucmVwbGFjZShcIjIyXCIsIFwiZGRcIilcclxuICAgIC5yZXBsYWNlKFwiMTFcIiwgXCJtbVwiKVxyXG4gICAgLnJlcGxhY2UoXCIzMzMzXCIsIFwieXlcIilcclxuICAgIC5yZXBsYWNlKFwiMzNcIiwgXCJ5XCIpO1xyXG5cclxuICBwdWJsaWMgZ2V0IGRhdGVGb3JtYXQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBSZXN0V29ybGRJbnB1dFNpbXBsZUNvbXBvbmVudC5fZGF0ZUZvcm1hdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF90aW1lRm9ybWF0ID0gbmV3IERhdGUoMSwgMSwgMSwgMjIsIDMzLCA0NClcclxuICAgIC50b0xvY2FsZVRpbWVTdHJpbmcoKVxyXG4gICAgLnJlcGxhY2UoXCIyMlwiLCBcImhoXCIpXHJcbiAgICAucmVwbGFjZShcIjMzXCIsIFwibW1cIilcclxuICAgIC5yZXBsYWNlKFwiNDRcIiwgXCJzc1wiKTtcclxuXHJcbiAgcHVibGljIGdldCB0aW1lRm9ybWF0KCkge1xyXG4gICAgcmV0dXJuIFJlc3RXb3JsZElucHV0U2ltcGxlQ29tcG9uZW50Ll90aW1lRm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZm9ybUNvbnRyb2w/OiBGb3JtQ29udHJvbDxTaW1wbGVWYWx1ZSB8IFNpbXBsZVZhbHVlW10+O1xyXG5cclxuICBwdWJsaWMgZ2V0IGZvcm1Db250cm9sKCkge1xyXG4gICAgaWYgKHRoaXMuX2Zvcm1Db250cm9sID09PSB1bmRlZmluZWQpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm1Hcm91cCBpcyBub3Qgc2V0LlwiKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fZm9ybUNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IFByb3BlcnR5V2l0aEltYWdlKCkge1xyXG4gICAgcmV0dXJuIFByb3BlcnR5V2l0aEltYWdlO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuX2NvbnRyb2xDb250YWluZXIuY29udHJvbCBhcyBGb3JtR3JvdXA8YW55PjtcclxuICAgIHRoaXMuX2Zvcm1Db250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW3RoaXMucHJvcGVydHkubmFtZV0gYXMgRm9ybUNvbnRyb2w8U2ltcGxlVmFsdWUgfCBTaW1wbGVWYWx1ZVtdPjtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIGNvbGxlY3Rpb24gb2YgcnctZm9ybS1lbGVtZW50cyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZnJvbSBhIHRlbXBsYXRlLlxyXG4gKiBEb2VzIG5vdCBoYXZlIGFueSBidXR0b25zIG9uIGl0cyBvd24uXHJcbiAqIElmIHlvdSB3YW50IGJ1dHRvbnMsIHVzZSBSZXN0V29ybGRGb3JtIDxydy1mb3JtPi5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnctaW5wdXQtdGVtcGxhdGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtaW5wdXQtdGVtcGxhdGUvcmVzdHdvcmxkLWlucHV0LXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtaW5wdXQtdGVtcGxhdGUvcmVzdHdvcmxkLWlucHV0LXRlbXBsYXRlLmNvbXBvbmVudC5jc3MnXSxcclxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogRm9ybUdyb3VwRGlyZWN0aXZlIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXN0V29ybGRJbnB1dFRlbXBsYXRlQ29tcG9uZW50PFQgZXh0ZW5kcyB7IFtLIGluIGtleW9mIFRdOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+OyB9PiB7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBhcGlOYW1lITogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIHRlbXBsYXRlITogVGVtcGxhdGU7XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImdyaWQgZmllbGRcIj5cclxuICAgIDxydy1sYWJlbCBbcHJvcGVydHldPVwicHJvcGVydHlcIiBjbGFzcz1cImNvbC0xMiBtZDpjb2wtMiBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPjwvcnctbGFiZWw+XHJcbiAgICA8cnctaW5wdXQgW2FwaU5hbWVdPVwiYXBpTmFtZVwiIFtwcm9wZXJ0eV09XCJwcm9wZXJ0eVwiIGNsYXNzPVwiY29sLTEyIG1kOmNvbC0xMFwiPjwvcnctaW5wdXQ+XHJcbjwvZGl2PlxyXG4iLCI8cnctaW5wdXQtZHJvcGRvd24gKm5nSWY9XCJwcm9wZXJ0eS5vcHRpb25zXCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiIFtwcm9wZXJ0eV09XCIkYW55KHByb3BlcnR5KVwiPjwvcnctaW5wdXQtZHJvcGRvd24+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiIXByb3BlcnR5Lm9wdGlvbnNcIj5cclxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInByb3BlcnR5LnR5cGVcIj5cclxuICAgICAgICA8cnctaW5wdXQtb2JqZWN0ICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuT2JqZWN0XCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiIFtwcm9wZXJ0eV09XCIkYW55KHByb3BlcnR5KVwiPjwvcnctaW5wdXQtb2JqZWN0PlxyXG4gICAgICAgIDxydy1pbnB1dC1jb2xsZWN0aW9uICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuQ29sbGVjdGlvblwiIFthcGlOYW1lXT1cImFwaU5hbWVcIiBbcHJvcGVydHldPVwiJGFueShwcm9wZXJ0eSlcIj48L3J3LWlucHV0LWNvbGxlY3Rpb24+XHJcbiAgICAgICAgPHJ3LWlucHV0LXNpbXBsZSAqbmdTd2l0Y2hEZWZhdWx0IFtwcm9wZXJ0eV09XCJwcm9wZXJ0eVwiPjwvcnctaW5wdXQtc2ltcGxlPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPHJ3LXZhbGlkYXRpb24tZXJyb3JzIFtwcm9wZXJ0eV09XCJwcm9wZXJ0eVwiPjwvcnctdmFsaWRhdGlvbi1lcnJvcnM+XHJcbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJicmFjZVwiPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImNvbGxlY3Rpb25JdGVtRHJvcHBlZCgkZXZlbnQpXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHRlbXBsYXRlIG9mIHRlbXBsYXRlc1wiIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiBjZGtEcmFnPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZ3JpcC1saW5lc1wiIGNka0RyYWdIYW5kbGU+PC9pPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJyYWNlXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICAgICAgICAgICAgPHJ3LWlucHV0LXRlbXBsYXRlIFtmb3JtR3JvdXBdPVwiaW5uZXJGb3JtQXJyYXkuY29udHJvbHNbdGVtcGxhdGUudGl0bGUhXVwiIFt0ZW1wbGF0ZV09XCJkZWZhdWx0VGVtcGxhdGVcIiBbYXBpTmFtZV09XCJhcGlOYW1lXCIgY2xhc3M9XCJ3LWZ1bGxcIj48L3J3LWlucHV0LXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBpY29uPVwiZmFzIGZhLXRyYXNoXCIgY2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZCBwLWJ1dHRvbi1kYW5nZXIgbWwtMiBtYi0zXCIgKGNsaWNrKT1cImRlbGV0ZUl0ZW1Gcm9tQ29sbGVjdGlvbih0ZW1wbGF0ZSlcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGxcIj5cbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBpY29uPVwiZmFzIGZhLXBsdXNcIiBjbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkIHAtYnV0dG9uLWluZm9cIiAoY2xpY2spPVwiYWRkTmV3SXRlbVRvQ29sbGVjdGlvbigpXCI+PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+IiwiPG5nLXRlbXBsYXRlICNkZWZhdWx0SW5wdXRPcHRpb25zU2luZ2xlIGxldC1wcm9wZXJ0eT1cInByb3BlcnR5XCIgbGV0LXRlbXBsYXRlPVwidGVtcGxhdGVcIj5cbiAgICA8cC1kcm9wZG93blxuICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCJcbiAgICAgIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCJcbiAgICAgIFtvcHRpb25zXT1cInByb3BlcnR5Lm9wdGlvbnMuaW5saW5lXCJcbiAgICAgIFtmaWx0ZXJCeV09XCJwcm9tcHRGaWVsZCArICcsJyArIHZhbHVlRmllbGRcIlxuICAgICAgW29wdGlvbkxhYmVsXT1cInByb21wdEZpZWxkXCJcbiAgICAgIFtvcHRpb25WYWx1ZV09XCJ2YWx1ZUZpZWxkXCJcbiAgICAgIFtyZWFkb25seV09XCJwcm9wZXJ0eS5yZWFkT25seVwiXG4gICAgICBbcmVxdWlyZWRdPVwicHJvcGVydHkucmVxdWlyZWQgfHwgcHJvcGVydHkub3B0aW9ucy5taW5JdGVtcyA+IDBcIlxuICAgICAgW2ZpbHRlcl09XCJ0cnVlXCJcbiAgICAgIFtmaWx0ZXJWYWx1ZV09XCJmaWx0ZXJWYWx1ZVwiXG4gICAgICBbYXV0b0Rpc3BsYXlGaXJzdF09XCJmYWxzZVwiXG4gICAgICBbc2hvd0NsZWFyXT1cIiFwcm9wZXJ0eS5yZXF1aXJlZCB8fCBwcm9wZXJ0eS5vcHRpb25zLm1pbkl0ZW1zIDw9IDBcIlxuICAgICAgKG9uRmlsdGVyKT1cIm9uT3B0aW9uc0ZpbHRlcmVkKCRldmVudClcIlxuICAgICAgKG9uQ2hhbmdlKT1cIm9uT3B0aW9uc0NoYW5nZWQoJGV2ZW50KVwiXG4gICAgICBzdHlsZUNsYXNzPVwidy1mdWxsXCJcbiAgICAgIFtwYW5lbFN0eWxlQ2xhc3NdPVwibG9hZGluZyA/ICdsb2FkaW5nJyA6ICcnXCJcbiAgICAgIFtmaWx0ZXJQbGFjZWhvbGRlcl09XCJwcm9wZXJ0eT8ub3B0aW9ucz8ubGluaz8uaHJlZiA/ICdzZWFyY2ggZm9yIG1vcmUgcmVzdWx0cycgOiAnJ1wiXG4gICAgICBbZW1wdHlGaWx0ZXJNZXNzYWdlXT1cImxvYWRpbmcgPyAnTG9hZGluZy4uLicgOiAnJ1wiXG4gICAgICBhcHBlbmRUbz1cImJvZHlcIlxuICAgID5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtIHBUZW1wbGF0ZT1cInNlbGVjdGVkSXRlbVwiPlxuICAgICAgICAgIDxzcGFuIFtwVG9vbHRpcF09XCJnZXRUb29sdGlwKGl0ZW0pXCI+e3tnZXRMYWJlbChpdGVtKX19PC9zcGFuPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWl0ZW0gcFRlbXBsYXRlPVwiaXRlbVwiPlxuICAgICAgICAgIDxzcGFuIFtwVG9vbHRpcF09XCJnZXRUb29sdGlwKGl0ZW0pXCI+e3tnZXRMYWJlbChpdGVtKX19PC9zcGFuPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyaWNvblwiPlxuICAgICAgICAgIDxTZWFyY2hJY29uICpuZ0lmPVwiIWxvYWRpbmdcIj48L1NlYXJjaEljb24+XG4gICAgICAgICAgPFNwaW5uZXJJY29uICpuZ0lmPVwibG9hZGluZ1wiIFtzcGluXT1cInRydWVcIj48L1NwaW5uZXJJY29uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvcC1kcm9wZG93bj5cbjwvbmctdGVtcGxhdGU+XG48bmctY29udGFpbmVyICpuZ0lmPVwiIXByb3BlcnR5Lm9wdGlvbnMubWF4SXRlbXMgfHwgcHJvcGVydHkub3B0aW9ucy5tYXhJdGVtcyA9PSAxXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0T3B0aW9uc1NpbmdsZVJlZiA/PyBkZWZhdWx0SW5wdXRPcHRpb25zU2luZ2xlOyBjb250ZXh0OiB7IHByb3BlcnR5OiBwcm9wZXJ0eSwgYXBpTmFtZTogYXBpTmFtZSB9XCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0SW5wdXRPcHRpb25zTXVsdGlwbGUgbGV0LXByb3BlcnR5PVwicHJvcGVydHlcIiBsZXQtdGVtcGxhdGU9XCJ0ZW1wbGF0ZVwiPlxuICAgIDxwLW11bHRpU2VsZWN0XG4gICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIlxuICAgICAgW2lkXT1cInByb3BlcnR5Lm5hbWVcIlxuICAgICAgW29wdGlvbnNdPVwicHJvcGVydHkub3B0aW9ucy5pbmxpbmVcIlxuICAgICAgW2ZpbHRlckJ5XT1cInByb21wdEZpZWxkICsgJywnICsgdmFsdWVGaWVsZFwiXG4gICAgICBbb3B0aW9uTGFiZWxdPVwicHJvbXB0RmllbGRcIlxuICAgICAgW29wdGlvblZhbHVlXT1cInZhbHVlRmllbGRcIlxuICAgICAgW3JlYWRvbmx5XT1cInByb3BlcnR5LnJlYWRPbmx5XCJcbiAgICAgIFtyZXF1aXJlZF09XCJwcm9wZXJ0eS5yZXF1aXJlZCB8fCBwcm9wZXJ0eS5vcHRpb25zLm1pbkl0ZW1zID4gMFwiXG4gICAgICBbZmlsdGVyXT1cInRydWVcIlxuICAgICAgW2ZpbHRlclZhbHVlXT1cImZpbHRlclZhbHVlXCJcbiAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICBbc2hvd1RvZ2dsZUFsbF09XCJ0cnVlXCJcbiAgICAgIChvbkZpbHRlcik9XCJvbk9wdGlvbnNGaWx0ZXJlZCgkZXZlbnQpXCJcbiAgICAgIChvbkNoYW5nZSk9XCJvbk9wdGlvbnNDaGFuZ2VkKCRldmVudClcIlxuICAgICAgc3R5bGVDbGFzcz1cInctZnVsbFwiXG4gICAgICBbcGFuZWxTdHlsZUNsYXNzXT1cImxvYWRpbmcgPyAnbG9hZGluZycgOiAnJ1wiXG4gICAgICBbZmlsdGVyUGxhY2VIb2xkZXJdPVwicHJvcGVydHk/Lm9wdGlvbnM/Lmxpbms/LmhyZWYgPyAnc2VhcmNoIGZvciBtb3JlIHJlc3VsdHMnIDogJydcIlxuICAgICAgW2VtcHR5RmlsdGVyTWVzc2FnZV09XCJsb2FkaW5nID8gJ0xvYWRpbmcuLi4nIDogJydcIlxuICAgICAgW3NlbGVjdGlvbkxpbWl0XT1cInByb3BlcnR5Lm9wdGlvbnMubWF4SXRlbXNcIlxuICAgICAgZGlzcGxheT1cImNoaXBcIlxuICAgICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICA+XG4gICAgPG5nLXRlbXBsYXRlIGxldC12YWx1ZSBwVGVtcGxhdGU9XCJzZWxlY3RlZEl0ZW1zXCI+XG4gICAgICA8cC1jaGlwXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHZhbHVlOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgW3BUb29sdGlwXT1cImdldFRvb2x0aXAoaXRlbSlcIlxuICAgICAgICBbbGFiZWxdPVwiZ2V0TGFiZWwoaXRlbSlcIlxuICAgICAgICBbcmVtb3ZhYmxlXT1cInRydWVcIlxuICAgICAgICAob25SZW1vdmUpPVwicmVtb3ZlQnlWYWx1ZShnZXRWYWx1ZShpdGVtKSlcIlxuICAgICAgPlxuICAgICAgPC9wLWNoaXA+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgbGV0LWl0ZW0gcFRlbXBsYXRlPVwiaXRlbVwiPlxuICAgICAgICA8c3BhbiBbcFRvb2x0aXBdPVwiZ2V0VG9vbHRpcChpdGVtKVwiPnt7Z2V0TGFiZWwoaXRlbSl9fTwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJpY29uXCI+XG4gICAgICA8U2VhcmNoSWNvbiAqbmdJZj1cIiFsb2FkaW5nXCI+PC9TZWFyY2hJY29uPlxuICAgICAgPFNwaW5uZXJJY29uICpuZ0lmPVwibG9hZGluZ1wiIFtzcGluXT1cInRydWVcIj48L1NwaW5uZXJJY29uPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC1tdWx0aVNlbGVjdD5cbjwvbmctdGVtcGxhdGU+XG48bmctY29udGFpbmVyICpuZ0lmPVwiKHByb3BlcnR5Lm9wdGlvbnMubWF4SXRlbXMgPz8gMCkgPiAxXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0T3B0aW9uc011bHRpcGxlUmVmID8/IGRlZmF1bHRJbnB1dE9wdGlvbnNNdWx0aXBsZTsgY29udGV4dDogeyBwcm9wZXJ0eTogcHJvcGVydHksIGFwaU5hbWU6IGFwaU5hbWUgfVwiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iLCI8bmctdGVtcGxhdGUgI2RlZmF1bHRJbnB1dE9iamVjdCBsZXQtcHJvcGVydHk9XCJwcm9wZXJ0eVwiIGxldC10ZW1wbGF0ZT1cInRlbXBsYXRlXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJicmFjZVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgPHJ3LWlucHV0LXRlbXBsYXRlIFtmb3JtR3JvdXBdPVwiaW5uZXJGb3JtR3JvdXBcIiBbdGVtcGxhdGVdPVwicHJvcGVydHkuX3RlbXBsYXRlcy5kZWZhdWx0XCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiPjwvcnctaW5wdXQtdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0T2JqZWN0UmVmIHx8IGRlZmF1bHRJbnB1dE9iamVjdDsgY29udGV4dDogeyBwcm9wZXJ0eTogcHJvcGVydHksIGlubmVyRm9ybUdyb3VwOiBpbm5lckZvcm1Hcm91cCwgYXBpTmFtZTogYXBpTmFtZSB9XCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj4iLCI8ZGl2IFtuZ1N3aXRjaF09XCJwcm9wZXJ0eS50eXBlXCI+XG5cbiAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5IaWRkZW5cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIHR5cGU9XCJoaWRkZW5cIiBbdmFsdWVdPVwicHJvcGVydHkudmFsdWVcIiAvPlxuXG4gICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuVGV4dFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0IGNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIiAvPlxuXG4gICAgPHRleHRhcmVhICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuVGV4dGFyZWFcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIHBJbnB1dFRleHRhcmVhIGNsYXNzPVwidy1mdWxsIHAtaW5wdXR0ZXh0YXJlYSBwLWlucHV0dGV4dCBwLWNvbXBvbmVudCBwLWVsZW1lbnRcIiBbY2xhc3MucC1kaXNhYmxlZF09XCJwcm9wZXJ0eS5yZWFkT25seVwiIFtjb2xzXT1cInByb3BlcnR5LmNvbHNcIiBbcm93c109XCJwcm9wZXJ0eS5yb3dzXCI+PC90ZXh0YXJlYT5cblxuICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLlNlYXJjaFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgdHlwZT1cInNlYXJjaFwiIHBJbnB1dFRleHQgY2xhc3M9XCJ3LWZ1bGxcIiBbY2xhc3MucC1kaXNhYmxlZF09XCJwcm9wZXJ0eS5yZWFkT25seVwiIC8+XG5cbiAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5UZWxcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIHR5cGU9XCJ0ZWxcIiBwSW5wdXRUZXh0IGNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIiAvPlxuXG4gICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuVXJsXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiB0eXBlPVwidXJsXCIgcElucHV0VGV4dCBjbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCIgLz5cblxuICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkVtYWlsXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiB0eXBlPVwiZW1haWxcIiBwSW5wdXRUZXh0IGNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIiAvPlxuXG4gICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuUGFzc3dvcmRcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIHR5cGU9XCJwYXNzd29yZFwiIHBQYXNzd29yZCBjbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCIgLz5cblxuICAgIDxwLWNhbGVuZGFyICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuRGF0ZVwiIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgW2RhdGVGb3JtYXRdPVwiZGF0ZUZvcm1hdFwiIFtzaG93V2Vla109XCJ0cnVlXCIgW3Nob3dJY29uXT1cInRydWVcIiBzdHlsZUNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIj48L3AtY2FsZW5kYXI+XG5cbiAgICA8cC1jYWxlbmRhciAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLk1vbnRoXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiBbZGF0ZUZvcm1hdF09XCJkYXRlRm9ybWF0XCIgW3Nob3dXZWVrXT1cImZhbHNlXCIgdmlldz1cIm1vbnRoXCIgW3Nob3dJY29uXT1cInRydWVcIiBzdHlsZUNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIj48L3AtY2FsZW5kYXI+XG5cbiAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5XZWVrXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiB0eXBlPVwid2Vla1wiIHBJbnB1dFRleHQgY2xhc3M9XCJ3LWZ1bGxcIiBbY2xhc3MucC1kaXNhYmxlZF09XCJwcm9wZXJ0eS5yZWFkT25seVwiIC8+XG5cbiAgICA8cC1jYWxlbmRhciAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLlRpbWVcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIFtkYXRlRm9ybWF0XT1cInRpbWVGb3JtYXRcIiBbc2hvd1RpbWVdPVwidHJ1ZVwiIFt0aW1lT25seV09XCJ0cnVlXCIgW3Nob3dXZWVrXT1cImZhbHNlXCIgW3Nob3dJY29uXT1cInRydWVcIiBzdHlsZUNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIj48L3AtY2FsZW5kYXI+XG5cbiAgICA8cC1jYWxlbmRhciAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkRhdGV0aW1lTG9jYWxcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIFtkYXRlRm9ybWF0XT1cImRhdGVGb3JtYXRcIiBbc2hvd1RpbWVdPVwidHJ1ZVwiIFtzaG93V2Vla109XCJmYWxzZVwiIFtzaG93SWNvbl09XCJ0cnVlXCIgc3R5bGVDbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCI+PC9wLWNhbGVuZGFyPlxuXG4gICAgPHAtaW5wdXROdW1iZXIgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5OdW1iZXJcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIG1vZGU9XCJkZWNpbWFsXCIgW3Nob3dCdXR0b25zXT1cIiFwcm9wZXJ0eS5yZWFkT25seVwiIGNsYXNzPVwidy1mdWxsXCIgc3R5bGVDbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCI+PC9wLWlucHV0TnVtYmVyPlxuXG4gICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuUmFuZ2VcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIHR5cGU9XCJyYW5nZVwiIFttaW5dPVwicHJvcGVydHkubWluXCIgW21heF09XCJwcm9wZXJ0eS5tYXhcIiBbc3RlcF09XCJwcm9wZXJ0eS5zdGVwXCIgcElucHV0VGV4dCBjbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCIgLz5cblxuICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkNvbG9yXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiB0eXBlPVwiY29sb3JcIiBwSW5wdXRUZXh0IGNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIiAvPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkJvb2xcIj5cbiAgICAgICAgPHAtY2hlY2tib3ggKm5nSWY9XCJwcm9wZXJ0eS5yZXF1aXJlZFwiIFtiaW5hcnldPVwidHJ1ZVwiIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgW3JlYWRvbmx5XT1cInByb3BlcnR5LnJlYWRPbmx5IVwiPjwvcC1jaGVja2JveD5cbiAgICAgICAgPHAtdHJpU3RhdGVDaGVja2JveCAqbmdJZj1cIiFwcm9wZXJ0eS5yZXF1aXJlZFwiIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgW3JlYWRvbmx5XT1cInByb3BlcnR5LnJlYWRPbmx5IVwiPjwvcC10cmlTdGF0ZUNoZWNrYm94PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPHAtY2FsZW5kYXIgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5EYXRldGltZU9mZnNldFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgW2RhdGVGb3JtYXRdPVwiZGF0ZUZvcm1hdFwiIFtzaG93VGltZV09XCJ0cnVlXCIgW3Nob3dXZWVrXT1cImZhbHNlXCIgW3Nob3dJY29uXT1cInRydWVcIiBzdHlsZUNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIj48L3AtY2FsZW5kYXI+XG5cbiAgICA8cC1jYWxlbmRhciAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkR1cmF0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiBbZGF0ZUZvcm1hdF09XCJ0aW1lRm9ybWF0XCIgW3Nob3dUaW1lXT1cInRydWVcIiBbdGltZU9ubHldPVwidHJ1ZVwiIFtzaG93V2Vla109XCJmYWxzZVwiIFtzaG93SWNvbl09XCJ0cnVlXCIgc3R5bGVDbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCI+PC9wLWNhbGVuZGFyPlxuXG4gICAgPHJ3LWltYWdlICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuSW1hZ2VcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbcHJvcGVydHldPVwiJGFueShwcm9wZXJ0eSlcIj48L3J3LWltYWdlPlxuXG4gICAgPHJ3LWZpbGUgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5GaWxlXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2ZpbGVOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbYWNjZXB0XT1cIiRhbnkocHJvcGVydHkucGxhY2Vob2xkZXIpXCI+PC9ydy1maWxlPlxuXG4gICAgPGlucHV0ICpuZ1N3aXRjaERlZmF1bHQgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiB0eXBlPVwidGV4dFwiIHBJbnB1dFRleHQgY2xhc3M9XCJ3LWZ1bGxcIiBbY2xhc3MucC1kaXNhYmxlZF09XCJwcm9wZXJ0eS5yZWFkT25seVwiIC8+XG48L2Rpdj5cbiIsIjxydy1mb3JtLWVsZW1lbnQgKm5nRm9yPVwibGV0IHByb3BlcnR5IG9mIHRlbXBsYXRlLnByb3BlcnRpZXNcIiBbcHJvcGVydHldPVwicHJvcGVydHlcIiBbYXBpTmFtZV09XCJhcGlOYW1lXCI+PC9ydy1mb3JtLWVsZW1lbnQ+Il19
|
|
528
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWlucHV0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtaW5wdXRzL3Jlc3R3b3JsZC1pbnB1dHMudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWlucHV0cy9yZXN0d29ybGQtZm9ybS1lbGVtZW50L3Jlc3R3b3JsZC1mb3JtLWVsZW1lbnQuY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWlucHV0cy9yZXN0d29ybGQtaW5wdXQvcmVzdHdvcmxkLWlucHV0LmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1pbnB1dHMvcmVzdHdvcmxkLWlucHV0LWNvbGxlY3Rpb24vcmVzdHdvcmxkLWlucHV0LWNvbGxlY3Rpb24uY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWlucHV0cy9yZXN0d29ybGQtaW5wdXQtZHJvcGRvd24vcmVzdHdvcmxkLWlucHV0LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1pbnB1dHMvcmVzdHdvcmxkLWlucHV0LW9iamVjdC9yZXN0d29ybGQtaW5wdXQtb2JqZWN0LmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1pbnB1dHMvcmVzdHdvcmxkLWlucHV0LXNpbXBsZS9yZXN0d29ybGQtaW5wdXQtc2ltcGxlLmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1pbnB1dHMvcmVzdHdvcmxkLWlucHV0LXRlbXBsYXRlL3Jlc3R3b3JsZC1pbnB1dC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hJLE9BQU8sRUFBbUIsZ0JBQWdCLEVBQXFDLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUgsT0FBTyxFQUFlLGNBQWMsRUFBMkIsY0FBYyxFQUFZLFlBQVksRUFBa0UsTUFBTSx5QkFBeUIsQ0FBQztBQU12TSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUN4RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWxEOzs7O0dBSUc7QUFPSCxNQUFNLE9BQU8sNkJBQTZCO0lBRXhDLFFBQVEsQ0FBYTtJQUdyQixPQUFPLENBQVU7dUdBTE4sNkJBQTZCOzJGQUE3Qiw2QkFBNkIsNkdDeEIxQyx1UEFJQSw4RUR5Q2EsdUJBQXVCLHNNQXZCbkIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsQ0FB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QUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxDQUFDOzsyRkFFcEUsK0JBQStCO2tCQU4zQyxTQUFTOytCQUNFLG1CQUFtQixpQkFHZCxDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxDQUFDOzhCQUkvRSxPQUFPO3NCQUROLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUl6QixRQUFRO3NCQURQLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybUdyb3VwRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGb3JtU2VydmljZSwgTnVtYmVyVGVtcGxhdGUsIE9wdGlvbnMsIE9wdGlvbnNJdGVtRHRvLCBQcm9ibGVtRGV0YWlscywgUHJvcGVydHksIFByb3BlcnR5VHlwZSwgUmVzb3VyY2VEdG8sIFJlc291cmNlT2ZEdG8sIFNpbXBsZVZhbHVlLCBUZW1wbGF0ZSwgVGVtcGxhdGVEdG8gfSBmcm9tICdAd2VydHp1aS9uZ3gtaGFsLWNsaWVudCc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBEcm9wZG93bkNoYW5nZUV2ZW50IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2V2ZW50cyc7XHJcbmltcG9ydCB7IFByb3BlcnR5VGVtcGxhdGVDb250ZXh0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RlbXBsYXRpbmcnO1xyXG5pbXBvcnQgeyBSZXN0V29ybGRDbGllbnQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50JztcclxuaW1wb3J0IHsgUmVzdFdvcmxkQ2xpZW50Q29sbGVjdGlvbiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3R3b3JsZC1jbGllbnQtY29sbGVjdGlvbic7XHJcbmltcG9ydCB7IFByb3BlcnR5V2l0aE9wdGlvbnMsIFByb3BlcnR5V2l0aEltYWdlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NwZWNpYWwtcHJvcGVydGllcydcclxuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tICcuLi8uLi91dGlsL2RlYm91bmNlJztcclxuaW1wb3J0IHsgTXVsdGlTZWxlY3QgfSBmcm9tICdwcmltZW5nL211bHRpc2VsZWN0JztcclxuXHJcbi8qKlxyXG4gKiBBIGZvcm0gZWxlbWVudCB3aXRoIGEgbGFiZWwgdGhhdCBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZnJvbSBhIHByb3BlcnR5IGluIGEgZm9ybSB0ZW1wbGF0ZS5cclxuICogVGhpcyBtYXkgYWxzbyBiZSBhIGNvbXBsZXggb2JqZWN0IG9yIGEgY29sbGVjdGlvbiBpbiB3aGljaCBjYXNlIG11bHRpcGxlIGFuZCBuZXN0ZWQgaW5wdXQgZWxlbWVudHMgbWF5IGJlIHJlbmRlcmVkLlxyXG4gKiBJZiB5b3Ugd2FudCBhIGZvcm0gZWxlbWVudCB3aXRob3V0IGEgbGFiZWwsIHVzZSBSZXN0V29ybGRGb3JtSW5wdXQgPHJ3LWlucHV0Pi5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnctZm9ybS1lbGVtZW50JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVzdHdvcmxkLWZvcm0tZWxlbWVudC9yZXN0d29ybGQtZm9ybS1lbGVtZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtZm9ybS1lbGVtZW50L3Jlc3R3b3JsZC1mb3JtLWVsZW1lbnQuY29tcG9uZW50LmNzcyddLFxyXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBGb3JtR3JvdXBEaXJlY3RpdmUgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc3RXb3JsZEZvcm1FbGVtZW50Q29tcG9uZW50PFRQcm9wZXJ0eSBleHRlbmRzIFByb3BlcnR5PFNpbXBsZVZhbHVlLCBzdHJpbmcsIHN0cmluZz4+IHtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIHByb3BlcnR5ITogVFByb3BlcnR5O1xyXG5cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIGFwaU5hbWUhOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIGZvcm0gaW5wdXQgZWxlbWVudCB0aGF0IGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBmcm9tIGEgcHJvcGVydHkgaW4gYSBmb3JtIHRlbXBsYXRlLlxyXG4gKiBUaGlzIG1heSBhbHNvIGJlIGEgY29tcGxleCBvYmplY3Qgb3IgYSBjb2xsZWN0aW9uIGluIHdoaWNoIGNhc2UgbXVsdGlwbGUgYW5kIG5lc3RlZCBpbnB1dCBlbGVtZW50cyBtYXkgYmUgcmVuZGVyZWQuXHJcbiAqIElmIHlvdSBhbHNvIHdhbnQgYSBsYWJlbCwgdXNlIFJlc3RXb3JsZEZvcm1FbGVtZW50IDxydy1mb3JtLWVsZW1lbnQ+LlxyXG4gKiBZb3UgY2FuIGFsc28gdXNlIG9uZSBvZiB0aGUgZGlmZmVyZW50IFJlc3RXb3JsZElucHV0Li4uIDxydy1pbnB1dC0uLi4+IGVsZW1lbnRzIHRvIHJlbmRlciBhIHNwZWNpZmljIGlucHV0LFxyXG4gKiBidXQgaXQgaXMgYWR2aXNlZCB0byBjb250cm9sIHRoZSByZW5kZXJlZCBpbnB1dCB0aHJvdWdoIHRoZSBwYXNzZWQgaW4gcHJvcGVydHkuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3J3LWlucHV0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVzdHdvcmxkLWlucHV0L3Jlc3R3b3JsZC1pbnB1dC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVzdHdvcmxkLWlucHV0L3Jlc3R3b3JsZC1pbnB1dC5jb21wb25lbnQuY3NzJ10sXHJcbiAgdmlld1Byb3ZpZGVyczogW3sgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IEZvcm1Hcm91cERpcmVjdGl2ZSB9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVzdFdvcmxkSW5wdXRDb21wb25lbnQ8VFByb3BlcnR5IGV4dGVuZHMgUHJvcGVydHk8U2ltcGxlVmFsdWUsIHN0cmluZywgc3RyaW5nPj4ge1xyXG5cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIHByb3BlcnR5ITogVFByb3BlcnR5O1xyXG5cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIGFwaU5hbWUhOiBzdHJpbmc7XHJcblxyXG4gIHB1YmxpYyBnZXQgUHJvcGVydHlUeXBlKCkge1xyXG4gICAgcmV0dXJuIFByb3BlcnR5VHlwZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgUHJvcGVydHlXaXRoT3B0aW9ucygpIHtcclxuICAgIHJldHVybiBQcm9wZXJ0eVdpdGhPcHRpb25zPFNpbXBsZVZhbHVlLCBzdHJpbmcsIHN0cmluZz47XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEEgY29sbGVjdGlvbiB0aGF0IGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBmcm9tIHRoZSBnaXZlbiBwcm9wZXJ0eS5cclxuICogVGhlIGNvbGxlY3Rpb24gc3VwcG9ydHMgZHJhZyAmIGRyb3AgdG8gcmUgb3JkZXIgdGhlIGVsZW1lbnRzIGFuZCBjYW4gYWxzbyBiZSBuZXN0ZWQuXHJcbiAqIEByZW1hcmtzIEl0IGlzIGFkdmlzZWQgdG8gdXNlIFJlc3RXb3JsZElucHV0Q29tcG9uZW50IDxydy1pbnB1dD4gYW5kIGNvbnRyb2wgdGhlIHJlbmRlcmVkIGlucHV0cyB3aXRoIHRoZSBwYXNzZWQgaW4gcHJvcGVydHlcclxuICogaW5zdGVhZCBvZiB1c2luZyB0aGlzIGNvbXBvbmVudCBkaXJlY3RseS5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnctaW5wdXQtY29sbGVjdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1pbnB1dC1jb2xsZWN0aW9uL3Jlc3R3b3JsZC1pbnB1dC1jb2xsZWN0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtaW5wdXQtY29sbGVjdGlvbi9yZXN0d29ybGQtaW5wdXQtY29sbGVjdGlvbi5jb21wb25lbnQuY3NzJ10sXHJcbiAgdmlld1Byb3ZpZGVyczogW3sgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IEZvcm1Hcm91cERpcmVjdGl2ZSB9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVzdFdvcmxkSW5wdXRDb2xsZWN0aW9uQ29tcG9uZW50PFQgZXh0ZW5kcyB7IFtLIGluIGtleW9mIFRdOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+OyB9PiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgcHJvcGVydHkhOiBQcm9wZXJ0eSAmIHsgX3RlbXBsYXRlczogeyBkZWZhdWx0OiBUZW1wbGF0ZSB9IH07XHJcblxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgYXBpTmFtZSE6IHN0cmluZztcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXRDb2xsZWN0aW9uJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgaW5wdXRDb2xsZWN0aW9uUmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcblxyXG5cclxuICBwcml2YXRlIF90ZW1wbGF0ZXM6IE51bWJlclRlbXBsYXRlW10gPSBbXTtcclxuICBwdWJsaWMgZ2V0IHRlbXBsYXRlcygpOiBOdW1iZXJUZW1wbGF0ZVtdIHtcclxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kZWZhdWx0VGVtcGxhdGU/OiBUZW1wbGF0ZTtcclxuICBwdWJsaWMgZ2V0IGRlZmF1bHRUZW1wbGF0ZSgpOiBUZW1wbGF0ZSB7XHJcbiAgICBpZiAodGhpcy5fZGVmYXVsdFRlbXBsYXRlID09PSB1bmRlZmluZWQpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGRlZmF1bHQgdGVtcGxhdGUgZm91bmQuXCIpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VGVtcGxhdGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbm5lckZvcm1BcnJheT86IEZvcm1BcnJheTxGb3JtR3JvdXA8VD4+O1xyXG4gIHB1YmxpYyBnZXQgaW5uZXJGb3JtQXJyYXkoKSB7XHJcbiAgICBpZiAodGhpcy5faW5uZXJGb3JtQXJyYXkgPT09IHVuZGVmaW5lZClcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybUdyb3VwIGlzIG5vdCBzZXQuXCIpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9pbm5lckZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Zvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5fY29udHJvbENvbnRhaW5lci5jb250cm9sIGFzIEZvcm1Hcm91cDxhbnk+O1xyXG4gICAgdGhpcy5faW5uZXJGb3JtQXJyYXkgPSBmb3JtR3JvdXAuY29udHJvbHNbdGhpcy5wcm9wZXJ0eS5uYW1lXSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPFQ+PjtcclxuICAgIHRoaXMuX3RlbXBsYXRlcyA9IFJlc3RXb3JsZElucHV0Q29sbGVjdGlvbkNvbXBvbmVudC5nZXRDb2xsZWN0aW9uRW50cnlUZW1wbGF0ZXModGhpcy5wcm9wZXJ0eSk7XHJcbiAgICB0aGlzLl9kZWZhdWx0VGVtcGxhdGUgPSB0aGlzLnByb3BlcnR5Ll90ZW1wbGF0ZXMuZGVmYXVsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGdldENvbGxlY3Rpb25FbnRyeVRlbXBsYXRlcyhwcm9wZXJ0eT86IFByb3BlcnR5KTogTnVtYmVyVGVtcGxhdGVbXSB7XHJcbiAgICBpZiAoIXByb3BlcnR5KVxyXG4gICAgICByZXR1cm4gW107XHJcblxyXG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHByb3BlcnR5Ll90ZW1wbGF0ZXMpXHJcbiAgICAgIC5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4gTnVtYmVyLmlzSW50ZWdlcihOdW1iZXIucGFyc2VJbnQoa2V5KSkgJiYgTnVtYmVyLmlzSW50ZWdlcihOdW1iZXIucGFyc2VJbnQodmFsdWU/LnRpdGxlID8/IFwiXCIpKSlcclxuICAgICAgLm1hcCgoWywgdmFsdWVdKSA9PiBuZXcgTnVtYmVyVGVtcGxhdGUodmFsdWUgYXMgVGVtcGxhdGVEdG8pKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGROZXdJdGVtVG9Db2xsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbWF4SW5kZXggPSBNYXRoLm1heCguLi5PYmplY3Qua2V5cyh0aGlzLnRlbXBsYXRlcylcclxuICAgICAgLm1hcChrZXkgPT4gTnVtYmVyLnBhcnNlSW50KGtleSkpXHJcbiAgICAgIC5maWx0ZXIoa2V5ID0+IE51bWJlci5pc1NhZmVJbnRlZ2VyKGtleSkpKTtcclxuICAgIGNvbnN0IG5leHRJbmRleCA9IG1heEluZGV4IDwgMCA/IDAgOiBtYXhJbmRleCArIDE7XHJcblxyXG4gICAgY29uc3QgY29waWVkVGVtcGxhdGVEdG8gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGVmYXVsdFRlbXBsYXRlKSkgYXMgVGVtcGxhdGVEdG87XHJcbiAgICBjb3BpZWRUZW1wbGF0ZUR0by50aXRsZSA9IG5leHRJbmRleC50b1N0cmluZygpO1xyXG4gICAgY29uc3QgY29waWVkVGVtcGxhdGUgPSBuZXcgTnVtYmVyVGVtcGxhdGUoY29waWVkVGVtcGxhdGVEdG8pO1xyXG5cclxuICAgIHRoaXMudGVtcGxhdGVzW25leHRJbmRleF0gPSBjb3BpZWRUZW1wbGF0ZTtcclxuICAgIHRoaXMuaW5uZXJGb3JtQXJyYXkucHVzaCh0aGlzLl9mb3JtU2VydmljZS5jcmVhdGVGb3JtR3JvdXBGcm9tVGVtcGxhdGUodGhpcy5kZWZhdWx0VGVtcGxhdGUpIGFzIHVua25vd24gYXMgRm9ybUdyb3VwPFQ+KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWxldGVJdGVtRnJvbUNvbGxlY3Rpb24odGVtcGxhdGU6IE51bWJlclRlbXBsYXRlKTogdm9pZCB7XHJcbiAgICBpZiAodGVtcGxhdGUudGl0bGUgPT09IHVuZGVmaW5lZClcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGRlbGV0ZSBhIHRlbXBsYXRlIHdpdGhvdXQgYSB0aXRsZS5cIik7XHJcblxyXG4gICAgZGVsZXRlIHRoaXMudGVtcGxhdGVzW3RlbXBsYXRlLnRpdGxlXTtcclxuICAgIHRoaXMuaW5uZXJGb3JtQXJyYXkucmVtb3ZlQXQodGVtcGxhdGUudGl0bGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbGxlY3Rpb25JdGVtRHJvcHBlZCgkZXZlbnQ6IENka0RyYWdEcm9wPHt9Pikge1xyXG4gICAgY29uc3QgcHJldmlvdXNJbmRleCA9ICRldmVudC5wcmV2aW91c0luZGV4O1xyXG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gJGV2ZW50LmN1cnJlbnRJbmRleDtcclxuICAgIGNvbnN0IG1vdmVtZW50RGlyZWN0aW9uID0gY3VycmVudEluZGV4ID4gcHJldmlvdXNJbmRleCA/IDEgOiAtMTtcclxuXHJcbiAgICAvLyBNb3ZlIGluIEZvcm1BcnJheVxyXG4gICAgLy8gV2UgZG8gbm90IG5lZWQgdG8gbW92ZSB0aGUgaXRlbSBpbiB0aGUgX3RlbXBsYXRlcyBvYmplY3RcclxuICAgIGNvbnN0IG1vdmVkQ29udHJvbCA9IHRoaXMuaW5uZXJGb3JtQXJyYXkuYXQocHJldmlvdXNJbmRleCk7XHJcbiAgICBmb3IgKGxldCBpID0gcHJldmlvdXNJbmRleDsgaSAqIG1vdmVtZW50RGlyZWN0aW9uIDwgY3VycmVudEluZGV4ICogbW92ZW1lbnREaXJlY3Rpb247IGkgPSBpICsgbW92ZW1lbnREaXJlY3Rpb24pIHtcclxuICAgICAgdGhpcy5pbm5lckZvcm1BcnJheS5zZXRDb250cm9sKGksIHRoaXMuaW5uZXJGb3JtQXJyYXkuYXQoaSArIG1vdmVtZW50RGlyZWN0aW9uKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlubmVyRm9ybUFycmF5LnNldENvbnRyb2woY3VycmVudEluZGV4LCBtb3ZlZENvbnRyb2wpO1xyXG5cclxuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFRoaXMgaGVscGVyIHR5cGUgY29udmVydHMgYSBQcm9wZXJ0eTxYLCBZLCBaPiB0byBhbiBPcHRpb25zSXRlbUR0bzxYLCBZLCBaPiBhbmQgcHJlc2VydmVzIHRoZSBnZW5lcmljIHBhcmFtZXRlcnMuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBFeHRyYWN0R2VuZXJpY09wdGlvbnNJdGVtVHlwZTxUUHJvcGVydHk+ID0gVFByb3BlcnR5IGV4dGVuZHMgUHJvcGVydHk8aW5mZXIgWCwgaW5mZXIgWSwgaW5mZXIgWj4gPyBPcHRpb25zSXRlbUR0bzxYLCBZLCBaPiA6IG5ldmVyXHJcbmV4cG9ydCB0eXBlIEV4dHJhY3RHZW5lcmljT3B0aW9uc1NlbGVjdGVkVmFsdWVzVHlwZTxUUHJvcGVydHk+ID0gVFByb3BlcnR5IGV4dGVuZHMgUHJvcGVydHk8aW5mZXIgWCwgaW5mZXIgWSwgaW5mZXIgWj4gPyBPcHRpb25zPFgsIFksIFo+W1wic2VsZWN0ZWRWYWx1ZXNcIl0gOiBuZXZlclxyXG5leHBvcnQgdHlwZSBFeHRyYWN0VmFsdWVUeXBlPFRQcm9wZXJ0eT4gPSBUUHJvcGVydHkgZXh0ZW5kcyBQcm9wZXJ0eTxpbmZlciBYLCBpbmZlciBZLCBpbmZlciBaPiA/IFggOiBuZXZlclxyXG5cclxuLyoqXHJcbiAqIEEgZHJvcGRvd24gdGhhdCBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZnJvbSB0aGUgZ2l2ZW4gcHJvcGVydHkuXHJcbiAqIFRoZSBkcm9wZG93biBzdXBwb3J0cyBzZWFyY2hpbmcgdGhyb3VnaCBhIFJFU1RXb3JsZCBsaXN0IGVuZHBvaW50IG9uIHRoZSBiYWNrZW5kIGlmIHRoZSBgbGlua2Agb2YgdGhlIG9wdGlvbnMgaXMgc2V0LlxyXG4gKiBPdGhlcndpc2UgdGhlIGRyb3Bkb3duIHdpbGwgdXNlIHRoZSBgaW5saW5lYCBvZiB0aGUgb3B0aW9ucy5cclxuICogQHJlbWFya3MgSXQgaXMgYWR2aXNlZCB0byB1c2UgUmVzdFdvcmxkSW5wdXRDb21wb25lbnQgPHJ3LWlucHV0PiBhbmQgY29udHJvbCB0aGUgcmVuZGVyZWQgaW5wdXRzIHdpdGggdGhlIHBhc3NlZCBpbiBwcm9wZXJ0eVxyXG4gKiBpbnN0ZWFkIG9mIHVzaW5nIHRoaXMgY29tcG9uZW50IGRpcmVjdGx5LlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdydy1pbnB1dC1kcm9wZG93bicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1pbnB1dC1kcm9wZG93bi9yZXN0d29ybGQtaW5wdXQtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Jlc3R3b3JsZC1pbnB1dC1kcm9wZG93bi9yZXN0d29ybGQtaW5wdXQtZHJvcGRvd24uY29tcG9uZW50LmNzcyddLFxyXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBGb3JtR3JvdXBEaXJlY3RpdmUgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc3RXb3JsZElucHV0RHJvcGRvd25Db21wb25lbnQ8VFByb3BlcnR5IGV4dGVuZHMgUHJvcGVydHk8U2ltcGxlVmFsdWUsIHN0cmluZywgc3RyaW5nPiAmIHsgb3B0aW9uczogT3B0aW9uczxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+IH0sIFRPcHRpb25zSXRlbSBleHRlbmRzIEV4dHJhY3RHZW5lcmljT3B0aW9uc0l0ZW1UeXBlPFRQcm9wZXJ0eT4gPSBFeHRyYWN0R2VuZXJpY09wdGlvbnNJdGVtVHlwZTxUUHJvcGVydHk+PiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBwcm9wZXJ0eSE6IFRQcm9wZXJ0eTtcclxuXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBhcGlOYW1lITogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbGFiZWwgZm9yIHRoZSBnaXZlbiBpdGVtLlxyXG4gICAqIFRoZSBkZWZhdWx0IHJldHVybnMgdGhlIHByb21wdCBhbmQgb3B0aW9uYWxseSB0aGUgdmFsdWUgaW4gYnJhY2tldHMuXHJcbiAgICogVGhlIHZhbHVlIGluIGJyYWNrZXRzIHdpbGwgb25seSBiZSBkaXNwbGF5ZWQgaWYgdGhlIGBjb2xzYCBmaWVsZCBvZiB0aGUgcHJvcGVydHkgaXMgdW5kZWZpbmVkIG9yIGdyZWF0ZXIgdGhhbiAxLlxyXG4gICAqIE92ZXJ3cml0ZSB0aGlzIGZ1bmN0aW9uIHRvIGNoYW5nZSB0aGUgbGFiZWwuXHJcbiAgICogQHBhcmFtIGl0ZW0gVGhlIGl0ZW0gdG8gZ2V0IHRoZSBsYWJlbCBmb3IuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBnZXRMYWJlbDogKGl0ZW06IFRPcHRpb25zSXRlbSkgPT4gc3RyaW5nID0gdGhpcy5nZXRMYWJlbEludGVybmFsO1xyXG5cclxuICAvKipcclxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdG9vbHRpcCBmb3IgdGhlIGdpdmVuIGl0ZW0uXHJcbiAgICogVGhlIGRlZmF1bHQgcmV0dXJucyBhbGwgcHJvcGVydGllcyBvZiB0aGUgaXRlbSBleGNlcHQgdGhlIG9uZXMgdGhhdCBzdGFydCB3aXRoIGFuIHVuZGVyc2NvcmUgb3IgdGhlIG9uZXMgdGhhdCBhcmUgaW4gdGhlIGxpc3Qgb2YgZGVmYXVsdCBwcm9wZXJ0aWVzIHRvIGV4Y2x1ZGUuXHJcbiAgICogVGhlIGRlZmF1bHQgcHJvcGVydGllcyB0byBleGNsdWRlIGFyZTogY3JlYXRlZEF0LCBjcmVhdGVkQnksIGxhc3RDaGFuZ2VkQXQsIGxhc3RDaGFuZ2VkQnksIHRpbWVzdGFtcCwgcHJvbXB0RmllbGQsIHZhbHVlRmllbGQuXHJcbiAgICogT3ZlcndyaXRlIHRoaXMgZnVuY3Rpb24gdG8gY2hhbmdlIHRoZSB0b29sdGlwLlxyXG4gICAqIEBwYXJhbSBpdGVtIFRoZSBpdGVtIHRvIGdldCB0aGUgbGFiZWwgZm9yLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0VG9vbHRpcDogKGl0ZW06IFRPcHRpb25zSXRlbSkgPT4gc3RyaW5nID0gdGhpcy5nZXRUb29sdGlwSW50ZXJuYWw7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lucHV0T3B0aW9uc1NpbmdsZScsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0T3B0aW9uc1NpbmdsZVJlZj86IFRlbXBsYXRlUmVmPFByb3BlcnR5VGVtcGxhdGVDb250ZXh0PjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXRPcHRpb25zTXVsdGlwbGUnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dE9wdGlvbnNNdWx0aXBsZVJlZj86IFRlbXBsYXRlUmVmPFByb3BlcnR5VGVtcGxhdGVDb250ZXh0PjtcclxuXHJcbiAgQFZpZXdDaGlsZChNdWx0aVNlbGVjdClcclxuICBtdWx0aVNlbGVjdD86IE11bHRpU2VsZWN0O1xyXG5cclxuICAvKipcclxuICAgKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0ZWQgdmFsdWUgY2hhbmdlcy5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERyb3Bkb3duQ2hhbmdlRXZlbnQ8VE9wdGlvbnNJdGVtPj4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfZm9ybUNvbnRyb2whOiBBYnN0cmFjdENvbnRyb2w8RXh0cmFjdEdlbmVyaWNPcHRpb25zU2VsZWN0ZWRWYWx1ZXNUeXBlPFRQcm9wZXJ0eT4+O1xyXG5cclxuICBwcml2YXRlIF9maWx0ZXJWYWx1ZTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgcHVibGljIGdldCBmaWx0ZXJWYWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlclZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbG9hZGluZztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmFsdWVGaWVsZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHkub3B0aW9ucy52YWx1ZUZpZWxkID8/IFwidmFsdWVcIjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcHJvbXB0RmllbGQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BlcnR5Lm9wdGlvbnMucHJvbXB0RmllbGQgPz8gXCJwcm9tcHRcIjtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2xpZW50czogUmVzdFdvcmxkQ2xpZW50Q29sbGVjdGlvbixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuX2NvbnRyb2xDb250YWluZXIuY29udHJvbCBhcyBGb3JtR3JvdXA8YW55PjtcclxuICAgIHRoaXMuX2Zvcm1Db250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW3RoaXMucHJvcGVydHkubmFtZV0gYXMgQWJzdHJhY3RDb250cm9sPEV4dHJhY3RHZW5lcmljT3B0aW9uc1NlbGVjdGVkVmFsdWVzVHlwZTxUUHJvcGVydHk+PjtcclxuICAgIGF3YWl0IHRoaXMuc2V0SW5pdGlhbFNlbGVjdGVkT3B0aW9uc0VsZW1lbnRGb3JQcm9wZXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFZhbHVlKGl0ZW06IFRPcHRpb25zSXRlbSk6IEV4dHJhY3RWYWx1ZVR5cGU8VFByb3BlcnR5PiB7XHJcbiAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwgfHwgIWl0ZW0uaGFzT3duUHJvcGVydHkodGhpcy52YWx1ZUZpZWxkKSlcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgaXRlbSBkb2VzIG5vdCBoYXZlIGEgcHJvcGVydHkgJHt0aGlzLnZhbHVlRmllbGR9LmApO1xyXG5cclxuICAgIHJldHVybiBpdGVtW3RoaXMudmFsdWVGaWVsZCBhcyBrZXlvZiBUT3B0aW9uc0l0ZW1dIGFzIEV4dHJhY3RWYWx1ZVR5cGU8VFByb3BlcnR5PjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRQcm9tcHQoaXRlbTogVE9wdGlvbnNJdGVtKTogc3RyaW5nIHtcclxuICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCB8fCAhaXRlbS5oYXNPd25Qcm9wZXJ0eSh0aGlzLnByb21wdEZpZWxkKSlcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1bdGhpcy5wcm9tcHRGaWVsZCBhcyBrZXlvZiBUT3B0aW9uc0l0ZW1dIGFzIHN0cmluZyA/PyBcIlwiO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldExhYmVsSW50ZXJuYWwoaXRlbTogVE9wdGlvbnNJdGVtKTogc3RyaW5nIHtcclxuICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgbGV0IGxhYmVsID0gdGhpcy5nZXRQcm9tcHQoaXRlbSk7XHJcbiAgICBpZiAodGhpcy5wcm9wZXJ0eS5jb2xzID09PSB1bmRlZmluZWQgfHwgdGhpcy5wcm9wZXJ0eS5jb2xzID4gMSkge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoaXRlbSk7XHJcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgfHwgKHZhbHVlICE9PSBcIlwiICYmIHZhbHVlLnRvVXBwZXJDYXNlKCkgIT09IGxhYmVsLnRvVXBwZXJDYXNlKCkpKVxyXG4gICAgICAgIGxhYmVsICs9IGAgKCR7dmFsdWV9KWA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxhYmVsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUb29sdGlwSW50ZXJuYWwoaXRlbTogVE9wdGlvbnNJdGVtKTogc3RyaW5nIHtcclxuICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgY29uc3QgdG9vbHRpcCA9IE9iamVjdC5lbnRyaWVzKGl0ZW0pXHJcbiAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiAhKGtleS5zdGFydHNXaXRoKCdfJykgfHwgWydjcmVhdGVkQXQnLCAnY3JlYXRlZEJ5JywgJ2xhc3RDaGFuZ2VkQXQnLCAnbGFzdENoYW5nZWRCeScsICd0aW1lc3RhbXAnLCB0aGlzLnByb21wdEZpZWxkLCB0aGlzLnZhbHVlRmllbGRdLmluY2x1ZGVzKGtleSkpKVxyXG4gICAgICAucmVkdWNlKChwcmV2LCBba2V5LCB2YWx1ZV0sIGluZGV4KSA9PiBgJHtwcmV2fSR7aW5kZXggPT09IDAgPyAnJyA6ICdcXG4nfSR7a2V5fTogJHtSZXN0V29ybGRJbnB1dERyb3Bkb3duQ29tcG9uZW50Lmpzb25TdHJpbmdpZnlXaXRoRWxpcHNpcyh2YWx1ZSl9YCwgJycpO1xyXG5cclxuICAgIHJldHVybiB0b29sdGlwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEl0ZW1CeVZhbHVlKHZhbHVlOiBFeHRyYWN0VmFsdWVUeXBlPFRQcm9wZXJ0eT4pOiBUT3B0aW9uc0l0ZW0ge1xyXG4gICAgaWYgKHRoaXMucHJvcGVydHkub3B0aW9ucy5pbmxpbmUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnByb3BlcnR5Lm9wdGlvbnMuaW5saW5lID09PSBudWxsKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm9wZXJ0eSBkb2VzIG5vdCBoYXZlIGFueSBpbmxpbmUgb3B0aW9ucy4nKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eS5vcHRpb25zLmlubGluZS5maW5kKGl0ZW0gPT4gdGhpcy5nZXRWYWx1ZShpdGVtIGFzIFRPcHRpb25zSXRlbSkgPT09IHZhbHVlKSBhcyBUT3B0aW9uc0l0ZW07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlQnlWYWx1ZSh2YWx1ZTogRXh0cmFjdFZhbHVlVHlwZTxUUHJvcGVydHk+KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fZm9ybUNvbnRyb2wudmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl9mb3JtQ29udHJvbC52YWx1ZSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuX2Zvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgY29uc3QgbmV3VmFsdWUgPSBmb3JtVmFsdWUuZmlsdGVyKGkgPT4gaSAhPT0gdmFsdWUpIGFzIEV4dHJhY3RHZW5lcmljT3B0aW9uc1NlbGVjdGVkVmFsdWVzVHlwZTxUUHJvcGVydHk+O1xyXG4gICAgdGhpcy5fZm9ybUNvbnRyb2wuc2V0VmFsdWUobmV3VmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uT3B0aW9uc0ZpbHRlcmVkID0gZGVib3VuY2UodGhpcy5vbk9wdGlvbnNGaWx0ZXJlZEludGVybmFsLCAyMDApO1xyXG5cclxuICBwdWJsaWMgYXN5bmMgb25PcHRpb25zRmlsdGVyZWRJbnRlcm5hbChldmVudDogeyBvcmlnaW5hbEV2ZW50OiBFdmVudDsgZmlsdGVyOiBzdHJpbmcgfCBudWxsIH0pIHtcclxuICAgIHRoaXMuX2xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BlcnR5Py5vcHRpb25zO1xyXG5cclxuICAgICAgaWYgKCEoZXZlbnQuZmlsdGVyKSB8fCBldmVudC5maWx0ZXIgPT09ICcnKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50LnR5cGUgPT09IFwiaW5wdXRcIikge1xyXG4gICAgICAgIGNvbnN0IGlucHV0RXZlbnQgPSAoZXZlbnQub3JpZ2luYWxFdmVudCBhcyBJbnB1dEV2ZW50KTtcclxuICAgICAgICBpZiAoaW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0RnJvbVBhc3RlXCIpIHtcclxuICAgICAgICAgIC8vIElmIHRoZSB1c2VyIHBhc3RlZCBpbiBtdWx0aXBsZSBpZHMgYXMgY29tbWEgc2VwYXJhdGVkIGxpc3QsIHdlIHdhbnQgdG8gZ2V0IHRoZW0gYWxsIGFuZCBzZXQgdGhlbSBhcyB0aGUgc2VsZWN0ZWQgdmFsdWUuXHJcblxyXG4gICAgICAgICAgdmFyIHZhbHVlcyA9IGV2ZW50LmZpbHRlclxyXG4gICAgICAgICAgICAuc3BsaXQoXCIsXCIpXHJcbiAgICAgICAgICAgIC5maWx0ZXIodiA9PiB2ICE9PSAnJylcclxuICAgICAgICAgICAgLm1hcCh2ID0+IHYudHJpbSgpKVxyXG4gICAgICAgICAgICAubWFwKHYgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG4gPSBOdW1iZXIucGFyc2VGbG9hdCh2KTtcclxuICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKG4pID8gdiA6IG47XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGlmICghdmFsdWVzIHx8IHZhbHVlcy5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICBjb25zdCBhbGxBcmVOdW1iZXJzID0gdmFsdWVzLmV2ZXJ5KHYgPT4gdHlwZW9mIHYgPT09IFwibnVtYmVyXCIgJiYgIWlzTmFOKHYpKTtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGFsbEFyZU51bWJlcnNcclxuICAgICAgICAgICAgPyBgJHtvcHRpb25zLnZhbHVlRmllbGR9IGluICgke3ZhbHVlcy5qb2luKCcsJyl9KWBcclxuICAgICAgICAgICAgOiBgY29udGFpbnMoJHtvcHRpb25zLnByb21wdEZpZWxkfSwgJyR7dmFsdWVzLmpvaW4oXCInLCAnXCIpfScpYDtcclxuXHJcbiAgICAgICAgICBpZiAoKG9wdGlvbnM/Lmxpbms/LmhyZWYpKVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLlNldElubGluZU9wdGlvbnNGcm9tRmlsdGVyKGZpbHRlciwgXCJcIik7XHJcblxyXG4gICAgICAgICAgaWYgKG9wdGlvbnMuaW5saW5lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzOiBFeHRyYWN0R2VuZXJpY09wdGlvbnNTZWxlY3RlZFZhbHVlc1R5cGU8VFByb3BlcnR5PiA9IG9wdGlvbnMuaW5saW5lXHJcbiAgICAgICAgICAgICAgLm1hcChpID0+IHRoaXMuZ2V0VmFsdWUoaSBhcyBUT3B0aW9uc0l0ZW0pKVxyXG4gICAgICAgICAgICAgIC5maWx0ZXIodiA9PiB2YWx1ZXMuaW5jbHVkZXModiBhcyBhbnkpKSBhcyBhbnk7XHJcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1Db250cm9sLnNldFZhbHVlKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdD8ucmVzZXRGaWx0ZXIoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBub3JtYWwgY2FzZSB3aGVyZSB0aGUgdXNlciB0eXBlcyBpbiBhIGZpbHRlci5cclxuXHJcbiAgICAgICAgICBsZXQgZmlsdGVyID0gYGNvbnRhaW5zKCR7b3B0aW9ucy5wcm9tcHRGaWVsZH0sICcke2V2ZW50LmZpbHRlcn0nKWA7XHJcbiAgICAgICAgICBpZiAob3B0aW9ucy52YWx1ZUZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSAnaWQnICYmICFOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlSW50KGV2ZW50LmZpbHRlcikpKVxyXG4gICAgICAgICAgICBmaWx0ZXIgPSBgKCR7b3B0aW9ucy52YWx1ZUZpZWxkfSBlcSAke2V2ZW50LmZpbHRlcn0pICBvciAoJHtmaWx0ZXJ9KWA7XHJcblxyXG4gICAgICAgICAgaWYgKChvcHRpb25zPy5saW5rPy5ocmVmKSlcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5TZXRJbmxpbmVPcHRpb25zRnJvbUZpbHRlcihmaWx0ZXIsIGV2ZW50LmZpbHRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uT3B0aW9uc0NoYW5nZWQoZXZlbnQ6IERyb3Bkb3duQ2hhbmdlRXZlbnQ8VE9wdGlvbnNJdGVtPikge1xyXG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2V0SW5pdGlhbFNlbGVjdGVkT3B0aW9uc0VsZW1lbnRGb3JQcm9wZXJ0eSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BlcnR5Lm9wdGlvbnM7XHJcblxyXG4gICAgaWYgKCFvcHRpb25zLmxpbms/LmhyZWYgfHwgIW9wdGlvbnMuc2VsZWN0ZWRWYWx1ZXMpIHtcclxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdGlvbnMuaW5saW5lKSB8fCBvcHRpb25zLmlubGluZS5sZW5ndGggPT09IDApXHJcbiAgICAgICAgb3B0aW9ucy5pbmxpbmUgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZpbHRlciA9IGAke29wdGlvbnMudmFsdWVGaWVsZH0gaW4gKCR7b3B0aW9ucy5zZWxlY3RlZFZhbHVlc30pYDtcclxuICAgIGF3YWl0IHRoaXMuU2V0SW5saW5lT3B0aW9uc0Zyb21GaWx0ZXIoZmlsdGVyLCBcIlwiKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgU2V0SW5saW5lT3B0aW9uc0Zyb21GaWx0ZXIoZmlsdGVyOiBzdHJpbmcsIGV2ZW50RmlsdGVyOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BlcnR5Lm9wdGlvbnM7XHJcbiAgICBpZiAoIW9wdGlvbnMubGluaz8uaHJlZilcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcHJvcGVydHkgZG9lcyBub3QgaGF2ZSBhIGxpbmsgaHJlZi4nKTtcclxuXHJcbiAgICBjb25zdCB0ZW1wbGF0ZWRVcmkgPSBvcHRpb25zLmxpbmsuaHJlZjtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5nZXRMaXN0QnlVcmk8VE9wdGlvbnNJdGVtPih0ZW1wbGF0ZWRVcmksIHsgJGZpbHRlcjogZmlsdGVyLCAkdG9wOiAxMCB9KTtcclxuICAgIGlmICghcmVzcG9uc2Uub2sgfHwgUHJvYmxlbURldGFpbHMuaXNQcm9ibGVtRGV0YWlscyhyZXNwb25zZS5ib2R5KSB8fCAhcmVzcG9uc2UuYm9keSkge1xyXG4gICAgICBjb25zdCBtZXNzYWdlID0gYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGdldHRpbmcgdGhlIHNlbGVjdGVkIGl0ZW1zIGZvciB0aGUgcHJvcGVydHkgJHt0aGlzLnByb3BlcnR5Lm5hbWV9LmA7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6IG1lc3NhZ2UsIGRhdGE6IHJlc3BvbnNlLCBzdGlja3k6IHRydWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaXRlbXMgPSByZXNwb25zZS5ib2R5IS5fZW1iZWRkZWQuaXRlbXMgYXMgUmVzb3VyY2VPZkR0bzxUT3B0aW9uc0l0ZW0+W107XHJcbiAgICBjb25zdCBuZXdJdGVtcyA9IHRoaXMuY29tYmluZUlubGluZVdpdGhTZWxlY3RlZChpdGVtcyk7XHJcbiAgICBvcHRpb25zLmlubGluZSA9IG5ld0l0ZW1zO1xyXG5cclxuICAgIC8vIFRoZSBtdWx0aXNlbGVjdCBjb21wb25lbnQgZG9lcyBub3QgdXBkYXRlIHRoZSBvcHRpb25zIHdoZW4gdGhlIGlubGluZSBvcHRpb25zIGFyZSB1cGRhdGVkLCBzbyB3ZSBuZWVkIHRvIHRyaWdnZXIgYSBjaGFuZ2UgZGV0ZWN0aW9uLlxyXG4gICAgdGhpcy5fZmlsdGVyVmFsdWUgPSBldmVudEZpbHRlcjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tYmluZUlubGluZVdpdGhTZWxlY3RlZChpdGVtczogUmVzb3VyY2VPZkR0bzxUT3B0aW9uc0l0ZW0+W10pOiBUT3B0aW9uc0l0ZW1bXSB7XHJcbiAgICBjb25zdCBvbGRJbmxpbmUgPSB0aGlzLnByb3BlcnR5Lm9wdGlvbnMuaW5saW5lIGFzIFJlc291cmNlT2ZEdG88VE9wdGlvbnNJdGVtPltdO1xyXG4gICAgaWYgKCFvbGRJbmxpbmUpXHJcbiAgICAgIHJldHVybiBpdGVtcztcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlcyA9IHRoaXMuZ2V0U2VsZWN0ZWRWYWx1ZXMoKTtcclxuICAgIGNvbnN0IGl0ZW1zVG9LZWVwID0gb2xkSW5saW5lLmZpbHRlcihpID0+IHNlbGVjdGVkVmFsdWVzLmluY2x1ZGVzKHRoaXMuZ2V0VmFsdWUoaSBhcyBUT3B0aW9uc0l0ZW0pKSk7XHJcbiAgICBjb25zdCBuZXdWYWx1ZXMgPSBpdGVtcy5tYXAoaSA9PiB0aGlzLmdldFZhbHVlKGkpKTtcclxuICAgIGNvbnN0IG5ld0l0ZW1zID0gaXRlbXMuY29uY2F0KGl0ZW1zVG9LZWVwLmZpbHRlcihpID0+ICFuZXdWYWx1ZXMuaW5jbHVkZXModGhpcy5nZXRWYWx1ZShpKSkpKTtcclxuXHJcbiAgICByZXR1cm4gbmV3SXRlbXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFNlbGVjdGVkVmFsdWVzKCk6IHVua25vd25bXSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2Zvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBbXTtcclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXHJcbiAgICAgIHJldHVybiB2YWx1ZVxyXG5cclxuICAgIHJldHVybiBbdmFsdWVdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDbGllbnQoKTogUmVzdFdvcmxkQ2xpZW50IHtcclxuICAgIGlmICghdGhpcy5hcGlOYW1lKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBnZXQgYSBjbGllbnQsIGJlY2F1c2UgdGhlIGFwaU5hbWUgaXMgbm90IHNldC4nKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50cy5nZXRDbGllbnQodGhpcy5hcGlOYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGpzb25TdHJpbmdpZnlXaXRoRWxpcHNpcyh2YWx1ZTogdW5rbm93bikge1xyXG4gICAgY29uc3QgbWF4TGVuZ3RoID0gMjAwO1xyXG4gICAgY29uc3QgZW5kID0gMTA7XHJcbiAgICBjb25zdCBzdGFydCA9IG1heExlbmd0aCAtIGVuZCAtIDI7XHJcbiAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xyXG4gICAgY29uc3Qgc2hvcnRlbmVkID0ganNvbi5sZW5ndGggPiBtYXhMZW5ndGggPyBqc29uLnN1YnN0cmluZygwLCBzdGFydCkgKyAn4oCmJyArIGpzb24uc3Vic3RyaW5nKGpzb24ubGVuZ3RoIC0gZW5kKSA6IGpzb247XHJcblxyXG4gICAgcmV0dXJuIHNob3J0ZW5lZDtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIGNvbXBsZXggb2JqZWN0IHdpdGggbXVsdGlwbGUgcHJvcGVydGllcyB0aGF0IGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBmcm9tIHRoZSBnaXZlbiBwcm9wZXJ0eS5cclxuICogVGhlIG9iamVjdCBjYW4gYWxzbyBiZSBuZXN0ZWQuXHJcbiAqIEByZW1hcmtzIEl0IGlzIGFkdmlzZWQgdG8gdXNlIFJlc3RXb3JsZElucHV0Q29tcG9uZW50IDxydy1pbnB1dD4gYW5kIGNvbnRyb2wgdGhlIHJlbmRlcmVkIGlucHV0cyB3aXRoIHRoZSBwYXNzZWQgaW4gcHJvcGVydHlcclxuICogaW5zdGVhZCBvZiB1c2luZyB0aGlzIGNvbXBvbmVudCBkaXJlY3RseS5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnctaW5wdXQtb2JqZWN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVzdHdvcmxkLWlucHV0LW9iamVjdC9yZXN0d29ybGQtaW5wdXQtb2JqZWN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtaW5wdXQtb2JqZWN0L3Jlc3R3b3JsZC1pbnB1dC1vYmplY3QuY29tcG9uZW50LmNzcyddLFxyXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBGb3JtR3JvdXBEaXJlY3RpdmUgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc3RXb3JsZElucHV0T2JqZWN0Q29tcG9uZW50PFQgZXh0ZW5kcyB7IFtLIGluIGtleW9mIFRdOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+OyB9PiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgcHJvcGVydHkhOiBQcm9wZXJ0eTxudWxsLCBuZXZlciwgbmV2ZXI+ICYgeyBfdGVtcGxhdGVzOiB7IGRlZmF1bHQ6IFRlbXBsYXRlIH0gfTtcclxuXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBhcGlOYW1lITogc3RyaW5nO1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dE9iamVjdCcsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0T2JqZWN0UmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcblxyXG4gIHByaXZhdGUgX2lubmVyRm9ybUdyb3VwPzogRm9ybUdyb3VwPFQ+O1xyXG5cclxuICBwdWJsaWMgZ2V0IGlubmVyRm9ybUdyb3VwKCkge1xyXG4gICAgaWYgKHRoaXMuX2lubmVyRm9ybUdyb3VwID09PSB1bmRlZmluZWQpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm1Hcm91cCBpcyBub3Qgc2V0LlwiKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5faW5uZXJGb3JtR3JvdXA7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXJcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5fY29udHJvbENvbnRhaW5lci5jb250cm9sIGFzIEZvcm1Hcm91cDxhbnk+O1xyXG4gICAgdGhpcy5faW5uZXJGb3JtR3JvdXAgPSBmb3JtR3JvdXAuY29udHJvbHNbdGhpcy5wcm9wZXJ0eS5uYW1lXSBhcyBGb3JtR3JvdXA8VD47XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQSBzaW1wbGUgaW5wdXQgZWxlbWVudCwgbGlrZSBhIHN0cmluZywgYSBudW1iZXIgb3IgYSBEYXRlIHRoYXQgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIGZyb20gdGhlIGdpdmVuIHByb3BlcnR5LlxyXG4gKiBAcmVtYXJrcyBJdCBpcyBhZHZpc2VkIHRvIHVzZSBSZXN0V29ybGRJbnB1dENvbXBvbmVudCA8cnctaW5wdXQ+IGFuZCBjb250cm9sIHRoZSByZW5kZXJlZCBpbnB1dHMgd2l0aCB0aGUgcGFzc2VkIGluIHByb3BlcnR5XHJcbiAqIGluc3RlYWQgb2YgdXNpbmcgdGhpcyBjb21wb25lbnQgZGlyZWN0bHkuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3J3LWlucHV0LXNpbXBsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1pbnB1dC1zaW1wbGUvcmVzdHdvcmxkLWlucHV0LXNpbXBsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVzdHdvcmxkLWlucHV0LXNpbXBsZS9yZXN0d29ybGQtaW5wdXQtc2ltcGxlLmNvbXBvbmVudC5jc3MnXSxcclxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogRm9ybUdyb3VwRGlyZWN0aXZlIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXN0V29ybGRJbnB1dFNpbXBsZUNvbXBvbmVudDxUUHJvcGVydHkgZXh0ZW5kcyBQcm9wZXJ0eTxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+PiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgcHJvcGVydHkhOiBUUHJvcGVydHk7XHJcblxyXG4gIHB1YmxpYyBnZXQgUHJvcGVydHlUeXBlKCkge1xyXG4gICAgcmV0dXJuIFByb3BlcnR5VHlwZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kYXRlRm9ybWF0ID0gbmV3IERhdGUoMzMzMywgMTAsIDIyKSAvLyBtb250aHMgc3RhcnQgYXQgMCBpbiBKU1xyXG4gICAgLnRvTG9jYWxlRGF0ZVN0cmluZygpXHJcbiAgICAucmVwbGFjZShcIjIyXCIsIFwiZGRcIilcclxuICAgIC5yZXBsYWNlKFwiMTFcIiwgXCJtbVwiKVxyXG4gICAgLnJlcGxhY2UoXCIzMzMzXCIsIFwieXlcIilcclxuICAgIC5yZXBsYWNlKFwiMzNcIiwgXCJ5XCIpO1xyXG5cclxuICBwdWJsaWMgZ2V0IGRhdGVGb3JtYXQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBSZXN0V29ybGRJbnB1dFNpbXBsZUNvbXBvbmVudC5fZGF0ZUZvcm1hdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF90aW1lRm9ybWF0ID0gbmV3IERhdGUoMSwgMSwgMSwgMjIsIDMzLCA0NClcclxuICAgIC50b0xvY2FsZVRpbWVTdHJpbmcoKVxyXG4gICAgLnJlcGxhY2UoXCIyMlwiLCBcImhoXCIpXHJcbiAgICAucmVwbGFjZShcIjMzXCIsIFwibW1cIilcclxuICAgIC5yZXBsYWNlKFwiNDRcIiwgXCJzc1wiKTtcclxuXHJcbiAgcHVibGljIGdldCB0aW1lRm9ybWF0KCkge1xyXG4gICAgcmV0dXJuIFJlc3RXb3JsZElucHV0U2ltcGxlQ29tcG9uZW50Ll90aW1lRm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZm9ybUNvbnRyb2w/OiBGb3JtQ29udHJvbDxTaW1wbGVWYWx1ZSB8IFNpbXBsZVZhbHVlW10+O1xyXG5cclxuICBwdWJsaWMgZ2V0IGZvcm1Db250cm9sKCkge1xyXG4gICAgaWYgKHRoaXMuX2Zvcm1Db250cm9sID09PSB1bmRlZmluZWQpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm1Hcm91cCBpcyBub3Qgc2V0LlwiKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fZm9ybUNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IFByb3BlcnR5V2l0aEltYWdlKCkge1xyXG4gICAgcmV0dXJuIFByb3BlcnR5V2l0aEltYWdlO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuX2NvbnRyb2xDb250YWluZXIuY29udHJvbCBhcyBGb3JtR3JvdXA8YW55PjtcclxuICAgIHRoaXMuX2Zvcm1Db250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW3RoaXMucHJvcGVydHkubmFtZV0gYXMgRm9ybUNvbnRyb2w8U2ltcGxlVmFsdWUgfCBTaW1wbGVWYWx1ZVtdPjtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIGNvbGxlY3Rpb24gb2YgcnctZm9ybS1lbGVtZW50cyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZnJvbSBhIHRlbXBsYXRlLlxyXG4gKiBEb2VzIG5vdCBoYXZlIGFueSBidXR0b25zIG9uIGl0cyBvd24uXHJcbiAqIElmIHlvdSB3YW50IGJ1dHRvbnMsIHVzZSBSZXN0V29ybGRGb3JtIDxydy1mb3JtPi5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnctaW5wdXQtdGVtcGxhdGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtaW5wdXQtdGVtcGxhdGUvcmVzdHdvcmxkLWlucHV0LXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtaW5wdXQtdGVtcGxhdGUvcmVzdHdvcmxkLWlucHV0LXRlbXBsYXRlLmNvbXBvbmVudC5jc3MnXSxcclxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogRm9ybUdyb3VwRGlyZWN0aXZlIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXN0V29ybGRJbnB1dFRlbXBsYXRlQ29tcG9uZW50PFQgZXh0ZW5kcyB7IFtLIGluIGtleW9mIFRdOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+OyB9PiB7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBhcGlOYW1lITogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIHRlbXBsYXRlITogVGVtcGxhdGU7XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImdyaWQgZmllbGRcIj5cclxuICAgIDxydy1sYWJlbCBbcHJvcGVydHldPVwicHJvcGVydHlcIiBjbGFzcz1cImNvbC0xMiBtZDpjb2wtMiBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPjwvcnctbGFiZWw+XHJcbiAgICA8cnctaW5wdXQgW2FwaU5hbWVdPVwiYXBpTmFtZVwiIFtwcm9wZXJ0eV09XCJwcm9wZXJ0eVwiIGNsYXNzPVwiY29sLTEyIG1kOmNvbC0xMFwiPjwvcnctaW5wdXQ+XHJcbjwvZGl2PlxyXG4iLCI8cnctaW5wdXQtZHJvcGRvd24gKm5nSWY9XCJwcm9wZXJ0eS5vcHRpb25zXCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiIFtwcm9wZXJ0eV09XCIkYW55KHByb3BlcnR5KVwiPjwvcnctaW5wdXQtZHJvcGRvd24+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiIXByb3BlcnR5Lm9wdGlvbnNcIj5cclxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInByb3BlcnR5LnR5cGVcIj5cclxuICAgICAgICA8cnctaW5wdXQtb2JqZWN0ICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuT2JqZWN0XCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiIFtwcm9wZXJ0eV09XCIkYW55KHByb3BlcnR5KVwiPjwvcnctaW5wdXQtb2JqZWN0PlxyXG4gICAgICAgIDxydy1pbnB1dC1jb2xsZWN0aW9uICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuQ29sbGVjdGlvblwiIFthcGlOYW1lXT1cImFwaU5hbWVcIiBbcHJvcGVydHldPVwiJGFueShwcm9wZXJ0eSlcIj48L3J3LWlucHV0LWNvbGxlY3Rpb24+XHJcbiAgICAgICAgPHJ3LWlucHV0LXNpbXBsZSAqbmdTd2l0Y2hEZWZhdWx0IFtwcm9wZXJ0eV09XCJwcm9wZXJ0eVwiPjwvcnctaW5wdXQtc2ltcGxlPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPHJ3LXZhbGlkYXRpb24tZXJyb3JzIFtwcm9wZXJ0eV09XCJwcm9wZXJ0eVwiPjwvcnctdmFsaWRhdGlvbi1lcnJvcnM+XHJcbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJicmFjZVwiPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImNvbGxlY3Rpb25JdGVtRHJvcHBlZCgkZXZlbnQpXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHRlbXBsYXRlIG9mIHRlbXBsYXRlc1wiIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiBjZGtEcmFnPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZ3JpcC1saW5lc1wiIGNka0RyYWdIYW5kbGU+PC9pPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJyYWNlXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICAgICAgICAgICAgPHJ3LWlucHV0LXRlbXBsYXRlIFtmb3JtR3JvdXBdPVwiaW5uZXJGb3JtQXJyYXkuY29udHJvbHNbdGVtcGxhdGUudGl0bGUhXVwiIFt0ZW1wbGF0ZV09XCJkZWZhdWx0VGVtcGxhdGVcIiBbYXBpTmFtZV09XCJhcGlOYW1lXCIgY2xhc3M9XCJ3LWZ1bGxcIj48L3J3LWlucHV0LXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBpY29uPVwiZmFzIGZhLXRyYXNoXCIgY2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZCBwLWJ1dHRvbi1kYW5nZXIgbWwtMiBtYi0zXCIgKGNsaWNrKT1cImRlbGV0ZUl0ZW1Gcm9tQ29sbGVjdGlvbih0ZW1wbGF0ZSlcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGxcIj5cbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBpY29uPVwiZmFzIGZhLXBsdXNcIiBjbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkIHAtYnV0dG9uLWluZm9cIiAoY2xpY2spPVwiYWRkTmV3SXRlbVRvQ29sbGVjdGlvbigpXCI+PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+IiwiPG5nLXRlbXBsYXRlICNkZWZhdWx0SW5wdXRPcHRpb25zU2luZ2xlIGxldC1wcm9wZXJ0eT1cInByb3BlcnR5XCIgbGV0LXRlbXBsYXRlPVwidGVtcGxhdGVcIj5cbiAgICA8cC1kcm9wZG93blxuICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCJcbiAgICAgIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCJcbiAgICAgIFtvcHRpb25zXT1cInByb3BlcnR5Lm9wdGlvbnMuaW5saW5lXCJcbiAgICAgIFtmaWx0ZXJCeV09XCJwcm9tcHRGaWVsZCArICcsJyArIHZhbHVlRmllbGRcIlxuICAgICAgW29wdGlvbkxhYmVsXT1cInByb21wdEZpZWxkXCJcbiAgICAgIFtvcHRpb25WYWx1ZV09XCJ2YWx1ZUZpZWxkXCJcbiAgICAgIFtyZWFkb25seV09XCJwcm9wZXJ0eS5yZWFkT25seVwiXG4gICAgICBbcmVxdWlyZWRdPVwicHJvcGVydHkucmVxdWlyZWQgfHwgcHJvcGVydHkub3B0aW9ucy5taW5JdGVtcyA+IDBcIlxuICAgICAgW2ZpbHRlcl09XCJ0cnVlXCJcbiAgICAgIFtmaWx0ZXJWYWx1ZV09XCJmaWx0ZXJWYWx1ZVwiXG4gICAgICBbYXV0b0Rpc3BsYXlGaXJzdF09XCJmYWxzZVwiXG4gICAgICBbc2hvd0NsZWFyXT1cIiFwcm9wZXJ0eS5yZXF1aXJlZCB8fCBwcm9wZXJ0eS5vcHRpb25zLm1pbkl0ZW1zIDw9IDBcIlxuICAgICAgKG9uRmlsdGVyKT1cIm9uT3B0aW9uc0ZpbHRlcmVkKCRldmVudClcIlxuICAgICAgKG9uQ2hhbmdlKT1cIm9uT3B0aW9uc0NoYW5nZWQoJGV2ZW50KVwiXG4gICAgICBzdHlsZUNsYXNzPVwidy1mdWxsXCJcbiAgICAgIFtwYW5lbFN0eWxlQ2xhc3NdPVwibG9hZGluZyA/ICdsb2FkaW5nJyA6ICcnXCJcbiAgICAgIFtmaWx0ZXJQbGFjZWhvbGRlcl09XCJwcm9wZXJ0eT8ub3B0aW9ucz8ubGluaz8uaHJlZiA/ICdzZWFyY2ggZm9yIG1vcmUgcmVzdWx0cycgOiAnJ1wiXG4gICAgICBbZW1wdHlGaWx0ZXJNZXNzYWdlXT1cImxvYWRpbmcgPyAnTG9hZGluZy4uLicgOiAnJ1wiXG4gICAgICBhcHBlbmRUbz1cImJvZHlcIlxuICAgID5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtIHBUZW1wbGF0ZT1cInNlbGVjdGVkSXRlbVwiPlxuICAgICAgICAgIDxzcGFuIFtwVG9vbHRpcF09XCJnZXRUb29sdGlwKGl0ZW0pXCI+e3tnZXRMYWJlbChpdGVtKX19PC9zcGFuPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWl0ZW0gcFRlbXBsYXRlPVwiaXRlbVwiPlxuICAgICAgICAgIDxzcGFuIFtwVG9vbHRpcF09XCJnZXRUb29sdGlwKGl0ZW0pXCI+e3tnZXRMYWJlbChpdGVtKX19PC9zcGFuPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyaWNvblwiPlxuICAgICAgICAgIDxTZWFyY2hJY29uICpuZ0lmPVwiIWxvYWRpbmdcIj48L1NlYXJjaEljb24+XG4gICAgICAgICAgPFNwaW5uZXJJY29uICpuZ0lmPVwibG9hZGluZ1wiIFtzcGluXT1cInRydWVcIj48L1NwaW5uZXJJY29uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvcC1kcm9wZG93bj5cbjwvbmctdGVtcGxhdGU+XG48bmctY29udGFpbmVyICpuZ0lmPVwiIXByb3BlcnR5Lm9wdGlvbnMubWF4SXRlbXMgfHwgcHJvcGVydHkub3B0aW9ucy5tYXhJdGVtcyA9PSAxXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0T3B0aW9uc1NpbmdsZVJlZiA/PyBkZWZhdWx0SW5wdXRPcHRpb25zU2luZ2xlOyBjb250ZXh0OiB7IHByb3BlcnR5OiBwcm9wZXJ0eSwgYXBpTmFtZTogYXBpTmFtZSB9XCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0SW5wdXRPcHRpb25zTXVsdGlwbGUgbGV0LXByb3BlcnR5PVwicHJvcGVydHlcIiBsZXQtdGVtcGxhdGU9XCJ0ZW1wbGF0ZVwiPlxuICAgIDxwLW11bHRpU2VsZWN0XG4gICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIlxuICAgICAgW2lkXT1cInByb3BlcnR5Lm5hbWVcIlxuICAgICAgW29wdGlvbnNdPVwicHJvcGVydHkub3B0aW9ucy5pbmxpbmVcIlxuICAgICAgW2ZpbHRlckJ5XT1cInByb21wdEZpZWxkICsgJywnICsgdmFsdWVGaWVsZFwiXG4gICAgICBbb3B0aW9uTGFiZWxdPVwicHJvbXB0RmllbGRcIlxuICAgICAgW29wdGlvblZhbHVlXT1cInZhbHVlRmllbGRcIlxuICAgICAgW3JlYWRvbmx5XT1cInByb3BlcnR5LnJlYWRPbmx5XCJcbiAgICAgIFtyZXF1aXJlZF09XCJwcm9wZXJ0eS5yZXF1aXJlZCB8fCBwcm9wZXJ0eS5vcHRpb25zLm1pbkl0ZW1zID4gMFwiXG4gICAgICBbZmlsdGVyXT1cInRydWVcIlxuICAgICAgW2ZpbHRlclZhbHVlXT1cImZpbHRlclZhbHVlXCJcbiAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICBbc2hvd1RvZ2dsZUFsbF09XCJ0cnVlXCJcbiAgICAgIChvbkZpbHRlcik9XCJvbk9wdGlvbnNGaWx0ZXJlZCgkZXZlbnQpXCJcbiAgICAgIChvbkNoYW5nZSk9XCJvbk9wdGlvbnNDaGFuZ2VkKCRldmVudClcIlxuICAgICAgc3R5bGVDbGFzcz1cInctZnVsbFwiXG4gICAgICBbcGFuZWxTdHlsZUNsYXNzXT1cImxvYWRpbmcgPyAnbG9hZGluZycgOiAnJ1wiXG4gICAgICBbZmlsdGVyUGxhY2VIb2xkZXJdPVwicHJvcGVydHk/Lm9wdGlvbnM/Lmxpbms/LmhyZWYgPyAnc2VhcmNoIGZvciBtb3JlIHJlc3VsdHMnIDogJydcIlxuICAgICAgW2VtcHR5RmlsdGVyTWVzc2FnZV09XCJsb2FkaW5nID8gJ0xvYWRpbmcuLi4nIDogJydcIlxuICAgICAgW3NlbGVjdGlvbkxpbWl0XT1cInByb3BlcnR5Lm9wdGlvbnMubWF4SXRlbXNcIlxuICAgICAgZGlzcGxheT1cImNoaXBcIlxuICAgICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICA+XG4gICAgPG5nLXRlbXBsYXRlIGxldC12YWx1ZSBwVGVtcGxhdGU9XCJzZWxlY3RlZEl0ZW1zXCI+XG4gICAgICA8cC1jaGlwXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHZhbHVlOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgW3BUb29sdGlwXT1cImdldFRvb2x0aXAoaXRlbSlcIlxuICAgICAgICBbbGFiZWxdPVwiZ2V0TGFiZWwoaXRlbSlcIlxuICAgICAgICBbcmVtb3ZhYmxlXT1cInRydWVcIlxuICAgICAgICAob25SZW1vdmUpPVwicmVtb3ZlQnlWYWx1ZShnZXRWYWx1ZShpdGVtKSlcIlxuICAgICAgPlxuICAgICAgPC9wLWNoaXA+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgbGV0LWl0ZW0gcFRlbXBsYXRlPVwiaXRlbVwiPlxuICAgICAgICA8c3BhbiBbcFRvb2x0aXBdPVwiZ2V0VG9vbHRpcChpdGVtKVwiPnt7Z2V0TGFiZWwoaXRlbSl9fTwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJpY29uXCI+XG4gICAgICA8U2VhcmNoSWNvbiAqbmdJZj1cIiFsb2FkaW5nXCI+PC9TZWFyY2hJY29uPlxuICAgICAgPFNwaW5uZXJJY29uICpuZ0lmPVwibG9hZGluZ1wiIFtzcGluXT1cInRydWVcIj48L1NwaW5uZXJJY29uPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC1tdWx0aVNlbGVjdD5cbjwvbmctdGVtcGxhdGU+XG48bmctY29udGFpbmVyICpuZ0lmPVwiKHByb3BlcnR5Lm9wdGlvbnMubWF4SXRlbXMgPz8gMCkgPiAxXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0T3B0aW9uc011bHRpcGxlUmVmID8/IGRlZmF1bHRJbnB1dE9wdGlvbnNNdWx0aXBsZTsgY29udGV4dDogeyBwcm9wZXJ0eTogcHJvcGVydHksIGFwaU5hbWU6IGFwaU5hbWUgfVwiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iLCI8bmctdGVtcGxhdGUgI2RlZmF1bHRJbnB1dE9iamVjdCBsZXQtcHJvcGVydHk9XCJwcm9wZXJ0eVwiIGxldC10ZW1wbGF0ZT1cInRlbXBsYXRlXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJicmFjZVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgPHJ3LWlucHV0LXRlbXBsYXRlIFtmb3JtR3JvdXBdPVwiaW5uZXJGb3JtR3JvdXBcIiBbdGVtcGxhdGVdPVwicHJvcGVydHkuX3RlbXBsYXRlcy5kZWZhdWx0XCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiPjwvcnctaW5wdXQtdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0T2JqZWN0UmVmIHx8IGRlZmF1bHRJbnB1dE9iamVjdDsgY29udGV4dDogeyBwcm9wZXJ0eTogcHJvcGVydHksIGlubmVyRm9ybUdyb3VwOiBpbm5lckZvcm1Hcm91cCwgYXBpTmFtZTogYXBpTmFtZSB9XCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj4iLCI8ZGl2IFtuZ1N3aXRjaF09XCJwcm9wZXJ0eS50eXBlXCI+XG5cbiAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5IaWRkZW5cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIHR5cGU9XCJoaWRkZW5cIiBbdmFsdWVdPVwicHJvcGVydHkudmFsdWVcIiAvPlxuXG4gICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuVGV4dFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0IGNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIiAvPlxuXG4gICAgPHRleHRhcmVhICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuVGV4dGFyZWFcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIHBJbnB1dFRleHRhcmVhIGNsYXNzPVwidy1mdWxsIHAtaW5wdXR0ZXh0YXJlYSBwLWlucHV0dGV4dCBwLWNvbXBvbmVudCBwLWVsZW1lbnRcIiBbY2xhc3MucC1kaXNhYmxlZF09XCJwcm9wZXJ0eS5yZWFkT25seVwiIFtjb2xzXT1cInByb3BlcnR5LmNvbHNcIiBbcm93c109XCJwcm9wZXJ0eS5yb3dzXCI+PC90ZXh0YXJlYT5cblxuICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLlNlYXJjaFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgdHlwZT1cInNlYXJjaFwiIHBJbnB1dFRleHQgY2xhc3M9XCJ3LWZ1bGxcIiBbY2xhc3MucC1kaXNhYmxlZF09XCJwcm9wZXJ0eS5yZWFkT25seVwiIC8+XG5cbiAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5UZWxcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIHR5cGU9XCJ0ZWxcIiBwSW5wdXRUZXh0IGNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIiAvPlxuXG4gICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuVXJsXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiB0eXBlPVwidXJsXCIgcElucHV0VGV4dCBjbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCIgLz5cblxuICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkVtYWlsXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiB0eXBlPVwiZW1haWxcIiBwSW5wdXRUZXh0IGNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIiAvPlxuXG4gICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuUGFzc3dvcmRcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIHR5cGU9XCJwYXNzd29yZFwiIHBQYXNzd29yZCBjbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCIgLz5cblxuICAgIDxwLWNhbGVuZGFyICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuRGF0ZVwiIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgW2RhdGVGb3JtYXRdPVwiZGF0ZUZvcm1hdFwiIFtzaG93V2Vla109XCJ0cnVlXCIgW3Nob3dJY29uXT1cInRydWVcIiBzdHlsZUNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIj48L3AtY2FsZW5kYXI+XG5cbiAgICA8cC1jYWxlbmRhciAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLk1vbnRoXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiBbZGF0ZUZvcm1hdF09XCJkYXRlRm9ybWF0XCIgW3Nob3dXZWVrXT1cImZhbHNlXCIgdmlldz1cIm1vbnRoXCIgW3Nob3dJY29uXT1cInRydWVcIiBzdHlsZUNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIj48L3AtY2FsZW5kYXI+XG5cbiAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5XZWVrXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiB0eXBlPVwid2Vla1wiIHBJbnB1dFRleHQgY2xhc3M9XCJ3LWZ1bGxcIiBbY2xhc3MucC1kaXNhYmxlZF09XCJwcm9wZXJ0eS5yZWFkT25seVwiIC8+XG5cbiAgICA8cC1jYWxlbmRhciAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLlRpbWVcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIFtkYXRlRm9ybWF0XT1cInRpbWVGb3JtYXRcIiBbc2hvd1RpbWVdPVwidHJ1ZVwiIFt0aW1lT25seV09XCJ0cnVlXCIgW3Nob3dXZWVrXT1cImZhbHNlXCIgW3Nob3dJY29uXT1cInRydWVcIiBzdHlsZUNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIj48L3AtY2FsZW5kYXI+XG5cbiAgICA8cC1jYWxlbmRhciAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkRhdGV0aW1lTG9jYWxcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIFtkYXRlRm9ybWF0XT1cImRhdGVGb3JtYXRcIiBbc2hvd1RpbWVdPVwidHJ1ZVwiIFtzaG93V2Vla109XCJmYWxzZVwiIFtzaG93SWNvbl09XCJ0cnVlXCIgc3R5bGVDbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCI+PC9wLWNhbGVuZGFyPlxuXG4gICAgPHAtaW5wdXROdW1iZXIgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5OdW1iZXJcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIG1vZGU9XCJkZWNpbWFsXCIgW3Nob3dCdXR0b25zXT1cIiFwcm9wZXJ0eS5yZWFkT25seVwiIGNsYXNzPVwidy1mdWxsXCIgc3R5bGVDbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCI+PC9wLWlucHV0TnVtYmVyPlxuXG4gICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuUmFuZ2VcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIHR5cGU9XCJyYW5nZVwiIFttaW5dPVwicHJvcGVydHkubWluXCIgW21heF09XCJwcm9wZXJ0eS5tYXhcIiBbc3RlcF09XCJwcm9wZXJ0eS5zdGVwXCIgcElucHV0VGV4dCBjbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCIgLz5cblxuICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkNvbG9yXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiB0eXBlPVwiY29sb3JcIiBwSW5wdXRUZXh0IGNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIiAvPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkJvb2xcIj5cbiAgICAgICAgPHAtY2hlY2tib3ggKm5nSWY9XCJwcm9wZXJ0eS5yZXF1aXJlZFwiIFtiaW5hcnldPVwidHJ1ZVwiIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgW3JlYWRvbmx5XT1cInByb3BlcnR5LnJlYWRPbmx5IVwiPjwvcC1jaGVja2JveD5cbiAgICAgICAgPHAtdHJpU3RhdGVDaGVja2JveCAqbmdJZj1cIiFwcm9wZXJ0eS5yZXF1aXJlZFwiIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgW3JlYWRvbmx5XT1cInByb3BlcnR5LnJlYWRPbmx5IVwiPjwvcC10cmlTdGF0ZUNoZWNrYm94PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPHAtY2FsZW5kYXIgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5EYXRldGltZU9mZnNldFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgW2RhdGVGb3JtYXRdPVwiZGF0ZUZvcm1hdFwiIFtzaG93VGltZV09XCJ0cnVlXCIgW3Nob3dXZWVrXT1cImZhbHNlXCIgW3Nob3dJY29uXT1cInRydWVcIiBzdHlsZUNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIj48L3AtY2FsZW5kYXI+XG5cbiAgICA8cC1jYWxlbmRhciAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkR1cmF0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiBbZGF0ZUZvcm1hdF09XCJ0aW1lRm9ybWF0XCIgW3Nob3dUaW1lXT1cInRydWVcIiBbdGltZU9ubHldPVwidHJ1ZVwiIFtzaG93V2Vla109XCJmYWxzZVwiIFtzaG93SWNvbl09XCJ0cnVlXCIgc3R5bGVDbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCI+PC9wLWNhbGVuZGFyPlxuXG4gICAgPHJ3LWltYWdlICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuSW1hZ2VcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbcHJvcGVydHldPVwiJGFueShwcm9wZXJ0eSlcIj48L3J3LWltYWdlPlxuXG4gICAgPHJ3LWZpbGUgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5GaWxlXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2ZpbGVOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbYWNjZXB0XT1cIiRhbnkocHJvcGVydHkucGxhY2Vob2xkZXIpXCI+PC9ydy1maWxlPlxuXG4gICAgPGlucHV0ICpuZ1N3aXRjaERlZmF1bHQgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiB0eXBlPVwidGV4dFwiIHBJbnB1dFRleHQgY2xhc3M9XCJ3LWZ1bGxcIiBbY2xhc3MucC1kaXNhYmxlZF09XCJwcm9wZXJ0eS5yZWFkT25seVwiIC8+XG48L2Rpdj5cbiIsIjxydy1mb3JtLWVsZW1lbnQgKm5nRm9yPVwibGV0IHByb3BlcnR5IG9mIHRlbXBsYXRlLnByb3BlcnRpZXNcIiBbcHJvcGVydHldPVwicHJvcGVydHlcIiBbYXBpTmFtZV09XCJhcGlOYW1lXCI+PC9ydy1mb3JtLWVsZW1lbnQ+Il19
|