igniteui-angular 16.1.6 → 16.1.8
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/grids/common/grid.interface.mjs +1 -1
- package/esm2022/lib/grids/filtering/excel-style/common.mjs +6 -1
- package/esm2022/lib/grids/filtering/excel-style/excel-style-filtering.component.mjs +2 -2
- package/esm2022/lib/grids/filtering/excel-style/excel-style-search.component.mjs +148 -6
- package/esm2022/lib/grids/grid-base.directive.mjs +1 -1
- package/esm2022/lib/grids/pivot-grid/pivot-data-selector.component.mjs +2 -2
- package/esm2022/lib/grids/pivot-grid/pivot-grid.component.mjs +2 -2
- package/esm2022/lib/grids/pivot-grid/pivot-header-row.component.mjs +2 -2
- package/esm2022/lib/grids/state.directive.mjs +3 -2
- package/esm2022/lib/list/list-item.component.mjs +9 -4
- package/esm2022/lib/list/list.component.mjs +10 -4
- package/esm2022/lib/simple-combo/simple-combo.component.mjs +9 -20
- package/fesm2022/igniteui-angular.mjs +225 -78
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/core/styles/components/chip/_chip-theme.scss +26 -8
- package/lib/core/styles/components/list/_list-component.scss +5 -0
- package/lib/core/styles/components/list/_list-theme.scss +10 -0
- package/lib/grids/common/grid.interface.d.ts +21 -0
- package/lib/grids/filtering/excel-style/common.d.ts +8 -0
- package/lib/grids/filtering/excel-style/excel-style-search.component.d.ts +25 -3
- package/lib/grids/grid-base.directive.d.ts +2 -19
- package/lib/grids/state.directive.d.ts +1 -0
- package/lib/list/list-item.component.d.ts +5 -3
- package/lib/list/list.component.d.ts +4 -2
- package/lib/simple-combo/simple-combo.component.d.ts +0 -3
- package/package.json +1 -1
- package/styles/igniteui-angular-dark.css +1 -1
- package/styles/igniteui-angular.css +1 -1
- package/styles/igniteui-bootstrap-dark.css +1 -1
- package/styles/igniteui-bootstrap-light.css +1 -1
- package/styles/igniteui-dark-green.css +1 -1
- package/styles/igniteui-fluent-dark-excel.css +1 -1
- package/styles/igniteui-fluent-dark-word.css +1 -1
- package/styles/igniteui-fluent-dark.css +1 -1
- package/styles/igniteui-fluent-light-excel.css +1 -1
- package/styles/igniteui-fluent-light-word.css +1 -1
- package/styles/igniteui-fluent-light.css +1 -1
- package/styles/igniteui-indigo-dark.css +1 -1
- package/styles/igniteui-indigo-light.css +1 -1
- package/styles/maps/igniteui-angular-dark.css.map +1 -1
- package/styles/maps/igniteui-angular.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
- package/styles/maps/igniteui-dark-green.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-light.css.map +1 -1
- package/styles/maps/igniteui-indigo-dark.css.map +1 -1
- package/styles/maps/igniteui-indigo-light.css.map +1 -1
|
@@ -300,6 +300,7 @@ export class IgxListComponent extends IgxListBaseDirective {
|
|
|
300
300
|
*/
|
|
301
301
|
this.itemClicked = new EventEmitter();
|
|
302
302
|
this._resourceStrings = CurrentResourceStrings.ListResStrings;
|
|
303
|
+
this._role = 'list';
|
|
303
304
|
}
|
|
304
305
|
/**
|
|
305
306
|
* @hidden
|
|
@@ -313,7 +314,7 @@ export class IgxListComponent extends IgxListBaseDirective {
|
|
|
313
314
|
return null;
|
|
314
315
|
}
|
|
315
316
|
/**
|
|
316
|
-
* Gets the `role` attribute value.
|
|
317
|
+
* Gets/Sets the `role` attribute value.
|
|
317
318
|
*
|
|
318
319
|
* @example
|
|
319
320
|
* ```typescript
|
|
@@ -321,7 +322,10 @@ export class IgxListComponent extends IgxListBaseDirective {
|
|
|
321
322
|
* ```
|
|
322
323
|
*/
|
|
323
324
|
get role() {
|
|
324
|
-
return
|
|
325
|
+
return this._role;
|
|
326
|
+
}
|
|
327
|
+
set role(val) {
|
|
328
|
+
this._role = val;
|
|
325
329
|
}
|
|
326
330
|
/**
|
|
327
331
|
* Gets a boolean indicating if the list is empty.
|
|
@@ -419,7 +423,7 @@ export class IgxListComponent extends IgxListBaseDirective {
|
|
|
419
423
|
}
|
|
420
424
|
}
|
|
421
425
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.8", ngImport: i0, type: IgxListComponent, deps: [{ token: i0.ElementRef }, { token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
422
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.8", type: IgxListComponent, isStandalone: true, selector: "igx-list", inputs: { panEndTriggeringThreshold: "panEndTriggeringThreshold", id: "id", allowLeftPanning: "allowLeftPanning", allowRightPanning: "allowRightPanning", isLoading: "isLoading", resourceStrings: "resourceStrings" }, outputs: { leftPan: "leftPan", rightPan: "rightPan", startPan: "startPan", endPan: "endPan", resetPan: "resetPan", panStateChange: "panStateChange", itemClicked: "itemClicked" }, host: { properties: { "attr.id": "this.id", "attr.role": "this.role", "class.igx-list--empty": "this.isListEmpty", "class.igx-list": "this.cssClass", "style.--component-size": "this.componentSize" } }, providers: [{ provide: IgxListBaseDirective, useExisting: IgxListComponent }], queries: [{ propertyName: "emptyListTemplate", first: true, predicate: IgxEmptyListTemplateDirective, descendants: true, read: IgxEmptyListTemplateDirective }, { propertyName: "dataLoadingTemplate", first: true, predicate: IgxDataLoadingTemplateDirective, descendants: true, read: IgxDataLoadingTemplateDirective }, { propertyName: "listItemLeftPanningTemplate", first: true, predicate: IgxListItemLeftPanningTemplateDirective, descendants: true, read: IgxListItemLeftPanningTemplateDirective }, { propertyName: "listItemRightPanningTemplate", first: true, predicate: IgxListItemRightPanningTemplateDirective, descendants: true, read: IgxListItemRightPanningTemplateDirective }, { propertyName: "children", predicate: i0.forwardRef(function () { return IgxListItemComponent; }), descendants: true }], viewQueries: [{ propertyName: "defaultEmptyListTemplate", first: true, predicate: ["defaultEmptyList"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultDataLoadingTemplate", first: true, predicate: ["defaultDataLoading"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n\n<ng-template #defaultEmptyList>\n <article class=\"igx-list__message\">\n {{resourceStrings.igx_list_no_items}}\n </article>\n</ng-template>\n\n<ng-template #defaultDataLoading>\n <article class=\"igx-list__message\">\n {{resourceStrings.igx_list_loading}}\n </article>\n</ng-template>\n\n<ng-container *ngIf=\"!children || children.length === 0 || isLoading\">\n <ng-container *ngTemplateOutlet=\"template; context: context\">\n </ng-container>\n</ng-container>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
|
|
426
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.8", type: IgxListComponent, isStandalone: true, selector: "igx-list", inputs: { panEndTriggeringThreshold: "panEndTriggeringThreshold", id: "id", allowLeftPanning: "allowLeftPanning", allowRightPanning: "allowRightPanning", isLoading: "isLoading", resourceStrings: "resourceStrings", role: "role" }, outputs: { leftPan: "leftPan", rightPan: "rightPan", startPan: "startPan", endPan: "endPan", resetPan: "resetPan", panStateChange: "panStateChange", itemClicked: "itemClicked" }, host: { properties: { "attr.id": "this.id", "attr.role": "this.role", "class.igx-list--empty": "this.isListEmpty", "class.igx-list": "this.cssClass", "style.--component-size": "this.componentSize" } }, providers: [{ provide: IgxListBaseDirective, useExisting: IgxListComponent }], queries: [{ propertyName: "emptyListTemplate", first: true, predicate: IgxEmptyListTemplateDirective, descendants: true, read: IgxEmptyListTemplateDirective }, { propertyName: "dataLoadingTemplate", first: true, predicate: IgxDataLoadingTemplateDirective, descendants: true, read: IgxDataLoadingTemplateDirective }, { propertyName: "listItemLeftPanningTemplate", first: true, predicate: IgxListItemLeftPanningTemplateDirective, descendants: true, read: IgxListItemLeftPanningTemplateDirective }, { propertyName: "listItemRightPanningTemplate", first: true, predicate: IgxListItemRightPanningTemplateDirective, descendants: true, read: IgxListItemRightPanningTemplateDirective }, { propertyName: "children", predicate: i0.forwardRef(function () { return IgxListItemComponent; }), descendants: true }], viewQueries: [{ propertyName: "defaultEmptyListTemplate", first: true, predicate: ["defaultEmptyList"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultDataLoadingTemplate", first: true, predicate: ["defaultDataLoading"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n\n<ng-template #defaultEmptyList>\n <article class=\"igx-list__message\">\n {{resourceStrings.igx_list_no_items}}\n </article>\n</ng-template>\n\n<ng-template #defaultDataLoading>\n <article class=\"igx-list__message\">\n {{resourceStrings.igx_list_loading}}\n </article>\n</ng-template>\n\n<ng-container *ngIf=\"!children || children.length === 0 || isLoading\">\n <ng-container *ngTemplateOutlet=\"template; context: context\">\n </ng-container>\n</ng-container>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
|
|
423
427
|
}
|
|
424
428
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.8", ngImport: i0, type: IgxListComponent, decorators: [{
|
|
425
429
|
type: Component,
|
|
@@ -482,6 +486,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.8", ngImpor
|
|
|
482
486
|
}], role: [{
|
|
483
487
|
type: HostBinding,
|
|
484
488
|
args: ['attr.role']
|
|
489
|
+
}, {
|
|
490
|
+
type: Input
|
|
485
491
|
}], isListEmpty: [{
|
|
486
492
|
type: HostBinding,
|
|
487
493
|
args: ['class.igx-list--empty']
|
|
@@ -492,4 +498,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.8", ngImpor
|
|
|
492
498
|
type: HostBinding,
|
|
493
499
|
args: ['style.--component-size']
|
|
494
500
|
}] } });
|
|
495
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvbGlzdC9saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9saXN0L2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFDSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFFZixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUVOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFBRSxTQUFTLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsK0JBQStCLEVBQy9CLDZCQUE2QixFQUU3Qix1Q0FBdUMsRUFDdkMsd0NBQXdDLEVBQzNDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBMEIsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUc5RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFFaEUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBNkJoQjs7O0dBR0c7QUFNSCxNQUFNLE9BQU8seUJBQXlCOzhHQUF6Qix5QkFBeUI7a0dBQXpCLHlCQUF5Qjs7MkZBQXpCLHlCQUF5QjtrQkFMckMsU0FBUzttQkFBQztvQkFDUCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFVBQVUsRUFBRSxJQUFJO2lCQUNuQjs7QUFHRDs7O0dBR0c7QUFN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UUFBUTtzQkFEdkIsTUFBTTtnQkFlUyxNQUFNO3NCQURyQixNQUFNO2dCQWVVLFFBQVE7c0JBRHZCLE1BQU07Z0JBZ0JRLGNBQWM7c0JBRDdCLE1BQU07Z0JBZVMsV0FBVztzQkFEMUIsTUFBTTtnQkFRRyx3QkFBd0I7c0JBRGpDLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBUXhELDBCQUEwQjtzQkFEbkMsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFVekQsZUFBZTtzQkFEekIsS0FBSztnQkFzQ0ssSUFBSTtzQkFEZCxXQUFXO3VCQUFDLFdBQVc7Z0JBY2IsV0FBVztzQkFEckIsV0FBVzt1QkFBQyx1QkFBdUI7Z0JBVXpCLFFBQVE7c0JBRGxCLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQU9sQixhQUFhO3NCQUR2QixXQUFXO3VCQUFDLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIE9wdGlvbmFsLFxuICAgIEluamVjdCwgRGlyZWN0aXZlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5cblxuaW1wb3J0IHsgSWd4TGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2xpc3QtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBJZ3hMaXN0QmFzZURpcmVjdGl2ZSxcbiAgICBJZ3hEYXRhTG9hZGluZ1RlbXBsYXRlRGlyZWN0aXZlLFxuICAgIElneEVtcHR5TGlzdFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIElneExpc3RQYW5TdGF0ZSxcbiAgICBJZ3hMaXN0SXRlbUxlZnRQYW5uaW5nVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgSWd4TGlzdEl0ZW1SaWdodFBhbm5pbmdUZW1wbGF0ZURpcmVjdGl2ZVxufSBmcm9tICcuL2xpc3QuY29tbW9uJztcbmltcG9ydCB7IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMsIERpc3BsYXlEZW5zaXR5VG9rZW4gfSBmcm9tICcuLi9jb3JlL2RlbnNpdHknO1xuaW1wb3J0IHsgSUJhc2VFdmVudEFyZ3MgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElMaXN0UmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vY29yZS9pMThuL2xpc3QtcmVzb3VyY2VzJztcbmltcG9ydCB7IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vcmVzb3VyY2VzJztcblxubGV0IE5FWFRfSUQgPSAwO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgdGhlIHBhblN0YXRlQ2hhbmdlIGlneExpc3QgZXZlbnQgYXJndW1lbnRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBhblN0YXRlQ2hhbmdlRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIG9sZFN0YXRlOiBJZ3hMaXN0UGFuU3RhdGU7XG4gICAgbmV3U3RhdGU6IElneExpc3RQYW5TdGF0ZTtcbiAgICBpdGVtOiBJZ3hMaXN0SXRlbUNvbXBvbmVudDtcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIHRoZSBsaXN0SXRlbUNsaWNrIGlneExpc3QgZXZlbnQgYXJndW1lbnRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUxpc3RJdGVtQ2xpY2tFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgaXRlbTogSWd4TGlzdEl0ZW1Db21wb25lbnQ7XG4gICAgZXZlbnQ6IEV2ZW50O1xuICAgIGRpcmVjdGlvbjogSWd4TGlzdFBhblN0YXRlO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgdGhlIGxpc3RJdGVtUGFubmluZyBpZ3hMaXN0IGV2ZW50IGFyZ3VtZW50c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElMaXN0SXRlbVBhbm5pbmdFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgaXRlbTogSWd4TGlzdEl0ZW1Db21wb25lbnQ7XG4gICAgZGlyZWN0aW9uOiBJZ3hMaXN0UGFuU3RhdGU7XG4gICAga2VlcEl0ZW06IGJvb2xlYW47XG59XG5cbi8qKlxuICogaWd4TGlzdFRodW1ibmFpbCBpcyBjb250YWluZXIgZm9yIHRoZSBMaXN0IG1lZGlhXG4gKiBVc2UgaXQgdG8gd3JhcCBhbnl0aGluZyB5b3Ugd2FudCB0byBiZSB1c2VkIGFzIGEgdGh1bWJuYWlsLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnW2lneExpc3RUaHVtYm5haWxdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneExpc3RUaHVtYm5haWxEaXJlY3RpdmUge31cblxuLyoqXG4gKiBpZ3hMaXN0QWN0aW9uIGlzIGNvbnRhaW5lciBmb3IgdGhlIExpc3QgYWN0aW9uXG4gKiBVc2UgaXQgdG8gd3JhcCBhbnl0aGluZyB5b3Ugd2FudCB0byBiZSB1c2VkIGFzIGEgbGlzdCBhY3Rpb246IGljb24sIGNoZWNrYm94Li4uXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdbaWd4TGlzdEFjdGlvbl0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4TGlzdEFjdGlvbkRpcmVjdGl2ZSB7fVxuXG4vKipcbiAqIGlneExpc3RMaW5lIGlzIGNvbnRhaW5lciBmb3IgdGhlIExpc3QgdGV4dCBjb250ZW50XG4gKiBVc2UgaXQgdG8gd3JhcCBhbnl0aGluZyB5b3Ugd2FudCB0byBiZSB1c2VkIGFzIGEgcGxhbmUgdGV4dC5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1tpZ3hMaXN0TGluZV0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4TGlzdExpbmVEaXJlY3RpdmUge31cblxuLyoqXG4gKiBpZ3hMaXN0TGluZVRpdGxlIGlzIGEgZGlyZWN0aXZlIHRoYXQgYWRkIGNsYXNzIHRvIHRoZSB0YXJnZXQgZWxlbWVudFxuICogVXNlIGl0IHRvIG1ha2UgYW55dGhpbmcgdG8gbG9vayBsaWtlIGxpc3QgVGl0bGUuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdbaWd4TGlzdExpbmVUaXRsZV0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4TGlzdExpbmVUaXRsZURpcmVjdGl2ZSB7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtbGlzdF9faXRlbS1saW5lLXRpdGxlJylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LWxpc3RfX2l0ZW0tbGluZS10aXRsZSc7XG59XG5cbi8qKlxuICogaWd4TGlzdExpbmVTdWJUaXRsZSBpcyBhIGRpcmVjdGl2ZSB0aGF0IGFkZCBjbGFzcyB0byB0aGUgdGFyZ2V0IGVsZW1lbnRcbiAqIFVzZSBpdCB0byBtYWtlIGFueXRoaW5nIHRvIGxvb2sgbGlrZSBsaXN0IFN1YnRpdGxlLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnW2lneExpc3RMaW5lU3ViVGl0bGVdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneExpc3RMaW5lU3ViVGl0bGVEaXJlY3RpdmUge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWxpc3RfX2l0ZW0tbGluZS1zdWJ0aXRsZScpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1saXN0X19pdGVtLWxpbmUtc3VidGl0bGUnO1xufVxuXG4vKipcbiAqIERpc3BsYXlzIGEgY29sbGVjdGlvbiBvZiBkYXRhIGl0ZW1zIGluIGEgdGVtcGxhdGFibGUgbGlzdCBmb3JtYXRcbiAqXG4gKiBAaWd4TW9kdWxlIElneExpc3RNb2R1bGVcbiAqXG4gKiBAaWd4VGhlbWUgaWd4LWxpc3QtdGhlbWVcbiAqXG4gKiBAaWd4S2V5d29yZHMgbGlzdCwgZGF0YVxuICpcbiAqIEBpZ3hHcm91cCBHcmlkcyAmIExpc3RzXG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSBJZ25pdGUgVUkgTGlzdCBkaXNwbGF5cyByb3dzIG9mIGl0ZW1zIGFuZCBzdXBwb3J0cyBvbmUgb3IgbW9yZSBoZWFkZXIgaXRlbXMgYXMgd2VsbCBhcyBzZWFyY2ggYW5kIGZpbHRlcmluZ1xuICogb2YgbGlzdCBpdGVtcy4gRWFjaCBsaXN0IGl0ZW0gaXMgY29tcGxldGVseSB0ZW1wbGF0YWJsZSBhbmQgd2lsbCBzdXBwb3J0IGFueSB2YWxpZCBIVE1MIG9yIEFuZ3VsYXIgY29tcG9uZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8aWd4LWxpc3Q+XG4gKiAgIDxpZ3gtbGlzdC1pdGVtIGlzSGVhZGVyPVwidHJ1ZVwiPkNvbnRhY3RzPC9pZ3gtbGlzdC1pdGVtPlxuICogICA8aWd4LWxpc3QtaXRlbSAqbmdGb3I9XCJsZXQgY29udGFjdCBvZiBjb250YWN0c1wiPlxuICogICAgIDxzcGFuIGNsYXNzPVwibmFtZVwiPnt7IGNvbnRhY3QubmFtZSB9fTwvc3Bhbj5cbiAqICAgICA8c3BhbiBjbGFzcz1cInBob25lXCI+e3sgY29udGFjdC5waG9uZSB9fTwvc3Bhbj5cbiAqICAgPC9pZ3gtbGlzdC1pdGVtPlxuICogPC9pZ3gtbGlzdD5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1saXN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJ2xpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogSWd4TGlzdEJhc2VEaXJlY3RpdmUsIHVzZUV4aXN0aW5nOiBJZ3hMaXN0Q29tcG9uZW50IH1dLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWYsIE5nVGVtcGxhdGVPdXRsZXRdXG59KVxuZXhwb3J0IGNsYXNzIElneExpc3RDb21wb25lbnQgZXh0ZW5kcyBJZ3hMaXN0QmFzZURpcmVjdGl2ZSB7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvbGxlY3Rpb24gb2YgYWxsIGl0ZW1zIGFuZCBoZWFkZXJzIGluIHRoZSBsaXN0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGxpc3RDaGlsZHJlbjogUXVlcnlMaXN0ID0gdGhpcy5saXN0LmNoaWxkcmVuO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBJZ3hMaXN0SXRlbUNvbXBvbmVudCksIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY2hpbGRyZW46IFF1ZXJ5TGlzdDxJZ3hMaXN0SXRlbUNvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGVtcHR5IGxpc3QgdGVtcGxhdGUuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoaXMgdGVtcGxhdGUgaXMgdXNlZCBieSBJZ3hMaXN0IGluIGNhc2UgdGhlcmUgYXJlIG5vIGxpc3QgaXRlbXNcbiAgICAgKiBkZWZpbmVkIGFuZCBgaXNMb2FkaW5nYCBpcyBzZXQgdG8gYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtbGlzdD5cbiAgICAgKiAgIDxuZy10ZW1wbGF0ZSBpZ3hFbXB0eUxpc3Q+XG4gICAgICogICAgIDxwIGNsYXNzPVwiZW1wdHlcIj5ObyBjb250YWN0cyEgOig8L3A+XG4gICAgICogICA8L25nLXRlbXBsYXRlPlxuICAgICAqIDwvaWd4LWxpc3Q+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBlbXB0eVRlbXBsYXRlID0gdGhpcy5saXN0LmVtcHR5TGlzdFRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4RW1wdHlMaXN0VGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogSWd4RW1wdHlMaXN0VGVtcGxhdGVEaXJlY3RpdmUgfSlcbiAgICBwdWJsaWMgZW1wdHlMaXN0VGVtcGxhdGU6IElneEVtcHR5TGlzdFRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBsaXN0IGxvYWRpbmcgdGVtcGxhdGUuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoaXMgdGVtcGxhdGUgaXMgdXNlZCBieSBJZ3hMaXN0IGluIGNhc2UgdGhlcmUgYXJlIG5vIGxpc3QgaXRlbXMgZGVmaW5lZCBhbmQgYGlzTG9hZGluZ2AgaXMgc2V0IHRvIGB0cnVlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtbGlzdD5cbiAgICAgKiAgIDxuZy10ZW1wbGF0ZSBpZ3hEYXRhTG9hZGluZz5cbiAgICAgKiAgICAgPHA+UGF0aWVuY2UsIHdlIGFyZSBjdXJyZW50bHkgbG9hZGluZyB5b3VyIGRhdGEuLi48L3A+XG4gICAgICogICA8L25nLXRlbXBsYXRlPlxuICAgICAqIDwvaWd4LWxpc3Q+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBsb2FkaW5nVGVtcGxhdGUgPSB0aGlzLmxpc3QuZGF0YUxvYWRpbmdUZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneERhdGFMb2FkaW5nVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogSWd4RGF0YUxvYWRpbmdUZW1wbGF0ZURpcmVjdGl2ZSB9KVxuICAgIHB1YmxpYyBkYXRhTG9hZGluZ1RlbXBsYXRlOiBJZ3hEYXRhTG9hZGluZ1RlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSB0ZW1wbGF0ZSBmb3IgbGVmdCBwYW5uaW5nIGEgbGlzdCBpdGVtLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBudWxsYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtbGlzdCBbYWxsb3dMZWZ0UGFubmluZ109XCJ0cnVlXCI+XG4gICAgICogICA8bmctdGVtcGxhdGUgaWd4TGlzdEl0ZW1MZWZ0UGFubmluZz5cbiAgICAgKiAgICAgPGlneC1pY29uPmRlbGV0ZTwvaWd4LWljb24+RGVsZXRlXG4gICAgICogICA8L25nLXRlbXBsYXRlPlxuICAgICAqIDwvaWd4LWxpc3Q+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpdGVtTGVmdFBhblRtcGwgPSB0aGlzLmxpc3QubGlzdEl0ZW1MZWZ0UGFubmluZ1RlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4TGlzdEl0ZW1MZWZ0UGFubmluZ1RlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IElneExpc3RJdGVtTGVmdFBhbm5pbmdUZW1wbGF0ZURpcmVjdGl2ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSBsaXN0SXRlbUxlZnRQYW5uaW5nVGVtcGxhdGU6IElneExpc3RJdGVtTGVmdFBhbm5pbmdUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgdGVtcGxhdGUgZm9yIHJpZ2h0IHBhbm5pbmcgYSBsaXN0IGl0ZW0uXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYG51bGxgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1saXN0IFthbGxvd1JpZ2h0UGFubmluZ10gPSBcInRydWVcIj5cbiAgICAgKiAgIDxuZy10ZW1wbGF0ZSBpZ3hMaXN0SXRlbVJpZ2h0UGFubmluZz5cbiAgICAgKiAgICAgPGlneC1pY29uPmNhbGw8L2lneC1pY29uPkRpYWxcbiAgICAgKiAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogPC9pZ3gtbGlzdD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGl0ZW1SaWdodFBhblRtcGwgPSB0aGlzLmxpc3QubGlzdEl0ZW1SaWdodFBhbm5pbmdUZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneExpc3RJdGVtUmlnaHRQYW5uaW5nVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogSWd4TGlzdEl0ZW1SaWdodFBhbm5pbmdUZW1wbGF0ZURpcmVjdGl2ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSBsaXN0SXRlbVJpZ2h0UGFubmluZ1RlbXBsYXRlOiBJZ3hMaXN0SXRlbVJpZ2h0UGFubmluZ1RlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSB0aHJlc2hvbGQgYWZ0ZXIgd2hpY2ggdGhlIGl0ZW0ncyBwYW5uaW5nIHdpbGwgYmUgY29tcGxldGVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIEJ5IGRlZmF1bHQgdGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gMC41IHdoaWNoIGlzIDUwJSBvZiB0aGUgbGlzdCBpdGVtJ3Mgd2lkdGguXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWxpc3QgW3BhbkVuZFRyaWdnZXJpbmdUaHJlc2hvbGRdPVwiMC44XCI+PC9pZ3gtbGlzdD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBwYW5FbmRUcmlnZ2VyaW5nVGhyZXNob2xkID0gMC41O1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgaWRgIG9mIHRoZSBsaXN0LlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiBub3Qgc2V0LCB0aGUgYGlkYCBvZiB0aGUgZmlyc3QgbGlzdCBjb21wb25lbnQgd2lsbCBiZSBgXCJpZ3gtbGlzdC0wXCJgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1saXN0IGlkPVwibXktZmlyc3QtbGlzdFwiPjwvaWd4LWxpc3Q+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBsaXN0SWQgPSB0aGlzLmxpc3QuaWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtbGlzdC0ke05FWFRfSUQrK31gO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHdoZXRoZXIgdGhlIGxlZnQgcGFubmluZyBvZiBhbiBpdGVtIGlzIGFsbG93ZWQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtbGlzdCBbYWxsb3dMZWZ0UGFubmluZ109XCJ0cnVlXCI+PC9pZ3gtbGlzdD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzTGVmdFBhbm5pbmdBbGxvd2VkID0gdGhpcy5saXN0LmFsbG93TGVmdFBhbm5pbmc7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgYWxsb3dMZWZ0UGFubmluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHdoZXRoZXIgdGhlIHJpZ2h0IHBhbm5pbmcgb2YgYW4gaXRlbSBpcyBhbGxvd2VkLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWxpc3QgW2FsbG93UmlnaHRQYW5uaW5nXT1cInRydWVcIj48L2lneC1saXN0PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNSaWdodFBhbm5pbmdBbGxvd2VkID0gdGhpcy5saXN0LmFsbG93UmlnaHRQYW5uaW5nO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGFsbG93UmlnaHRQYW5uaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgd2hldGhlciB0aGUgbGlzdCBpcyBjdXJyZW50bHkgbG9hZGluZyBkYXRhLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBTZXQgaXQgdG8gZGlzcGxheSB0aGUgZGF0YUxvYWRpbmdUZW1wbGF0ZSB3aGlsZSBkYXRhIGlzIGJlaW5nIHJldHJpZXZlZC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1saXN0IFtpc0xvYWRpbmddPVwidHJ1ZVwiPjwvaWd4LWxpc3Q+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc0xvYWRpbmcgPSB0aGlzLmxpc3QuaXNMb2FkaW5nO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGEgbGVmdCBwYW4gZ2VzdHVyZSBpcyBleGVjdXRlZCBvbiBhIGxpc3QgaXRlbS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogUHJvdmlkZXMgYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IG9mIHR5cGUgYElMaXN0SXRlbVBhbm5pbmdFdmVudEFyZ3NgIGFzIGFuIGV2ZW50IGFyZ3VtZW50LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1saXN0IFthbGxvd0xlZnRQYW5uaW5nXT1cInRydWVcIiAobGVmdFBhbik9XCJsZWZ0UGFuKCRldmVudClcIj48L2lneC1saXN0PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBsZWZ0UGFuID0gbmV3IEV2ZW50RW1pdHRlcjxJTGlzdEl0ZW1QYW5uaW5nRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGEgcmlnaHQgcGFuIGdlc3R1cmUgaXMgZXhlY3V0ZWQgb24gYSBsaXN0IGl0ZW0uXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFByb3ZpZGVzIGEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCBvZiB0eXBlIGBJTGlzdEl0ZW1QYW5uaW5nRXZlbnRBcmdzYCBhcyBhbiBldmVudCBhcmd1bWVudC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtbGlzdCBbYWxsb3dSaWdodFBhbm5pbmddPVwidHJ1ZVwiIChyaWdodFBhbik9XCJyaWdodFBhbigkZXZlbnQpXCI+PC9pZ3gtbGlzdD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmlnaHRQYW4gPSBuZXcgRXZlbnRFbWl0dGVyPElMaXN0SXRlbVBhbm5pbmdFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYSBwYW4gZ2VzdHVyZSBpcyBzdGFydGVkLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBQcm92aWRlcyBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3Qgb2YgdHlwZSBgSUxpc3RJdGVtUGFubmluZ0V2ZW50QXJnc2AgYXMgYW4gZXZlbnQgYXJndW1lbnQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWxpc3QgKHN0YXJ0UGFuKT1cInN0YXJ0UGFuKCRldmVudClcIj48L2lneC1saXN0PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBzdGFydFBhbiA9IG5ldyBFdmVudEVtaXR0ZXI8SUxpc3RJdGVtUGFubmluZ0V2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIHBhbiBnZXN0dXJlIGlzIGNvbXBsZXRlZCBvciBjYW5jZWxlZC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogUHJvdmlkZXMgYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IG9mIHR5cGUgYElMaXN0SXRlbVBhbm5pbmdFdmVudEFyZ3NgIGFzIGFuIGV2ZW50IGFyZ3VtZW50LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1saXN0IChlbmRQYW4pPVwiZW5kUGFuKCRldmVudClcIj48L2lneC1saXN0PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBlbmRQYW4gPSBuZXcgRXZlbnRFbWl0dGVyPElMaXN0SXRlbVBhbm5pbmdFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYSBwYW4gaXRlbSBpcyByZXR1cm5lZCB0byBpdHMgb3JpZ2luYWwgcG9zaXRpb24uXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFByb3ZpZGVzIGEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCBvZiB0eXBlIGBJZ3hMaXN0Q29tcG9uZW50YCBhcyBhbiBldmVudCBhcmd1bWVudC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtbGlzdCAocmVzZXRQYW4pPVwicmVzZXRQYW4oJGV2ZW50KVwiPjwvaWd4LWxpc3Q+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgIEBPdXRwdXQoKVxuICAgICBwdWJsaWMgb3ZlcnJpZGUgcmVzZXRQYW4gPSBuZXcgRXZlbnRFbWl0dGVyPElneExpc3RDb21wb25lbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIHBhbiBnZXN0dXJlIGlzIGV4ZWN1dGVkIG9uIGEgbGlzdCBpdGVtLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2VzIHRvIHRoZSBgSWd4TGlzdEl0ZW1Db21wb25lbnRgIGFuZCBgSWd4TGlzdFBhblN0YXRlYCBhcyBldmVudCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWxpc3QgKHBhblN0YXRlQ2hhbmdlKT1cInBhblN0YXRlQ2hhbmdlKCRldmVudClcIj48L2lneC1saXN0PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBwYW5TdGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SVBhblN0YXRlQ2hhbmdlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGEgbGlzdCBpdGVtIGlzIGNsaWNrZWQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFByb3ZpZGVzIHJlZmVyZW5jZXMgdG8gdGhlIGBJZ3hMaXN0SXRlbUNvbXBvbmVudGAgYW5kIGBFdmVudGAgYXMgZXZlbnQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1saXN0IChpdGVtQ2xpY2tlZCk9XCJvbkl0ZW1DbGlja2VkKCRldmVudClcIj48L2lneC1saXN0PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBpdGVtQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUxpc3RJdGVtQ2xpY2tFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdEVtcHR5TGlzdCcsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBkZWZhdWx0RW1wdHlMaXN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdERhdGFMb2FkaW5nJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHREYXRhTG9hZGluZ1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgcHJpdmF0ZSBfcmVzb3VyY2VTdHJpbmdzID0gQ3VycmVudFJlc291cmNlU3RyaW5ncy5MaXN0UmVzU3RyaW5ncztcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICogQnkgZGVmYXVsdCBpdCB1c2VzIEVOIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcmVzb3VyY2VTdHJpbmdzKHZhbHVlOiBJTGlzdFJlc291cmNlU3RyaW5ncykge1xuICAgICAgICB0aGlzLl9yZXNvdXJjZVN0cmluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9yZXNvdXJjZVN0cmluZ3MsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcmVzb3VyY2VTdHJpbmdzKCk6IElMaXN0UmVzb3VyY2VTdHJpbmdzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlU3RyaW5ncztcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEaXNwbGF5RGVuc2l0eVRva2VuKSBfZGlzcGxheURlbnNpdHlPcHRpb25zOiBJRGlzcGxheURlbnNpdHlPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMsIGVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IHNvcnRlZENoaWxkcmVuKCk6IElneExpc3RJdGVtQ29tcG9uZW50W10ge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi50b0FycmF5KClcbiAgICAgICAgICAgICAgICAuc29ydCgoYTogSWd4TGlzdEl0ZW1Db21wb25lbnQsIGI6IElneExpc3RJdGVtQ29tcG9uZW50KSA9PiBhLmluZGV4IC0gYi5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYHJvbGVgIGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBsaXN0Um9sZSA9ICB0aGlzLmxpc3Qucm9sZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcHVibGljIGdldCByb2xlKCkge1xuICAgICAgICByZXR1cm4gJ2xpc3QnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGxpc3QgaXMgZW1wdHkuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNFbXB0eSA9ICB0aGlzLmxpc3QuaXNMaXN0RW1wdHk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtbGlzdC0tZW1wdHknKVxuICAgIHB1YmxpYyBnZXQgaXNMaXN0RW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jaGlsZHJlbiB8fCB0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtbGlzdCcpXG4gICAgcHVibGljIGdldCBjc3NDbGFzcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzTGlzdEVtcHR5O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuLS1jb21wb25lbnQtc2l6ZScpXG4gICAgcHVibGljIGdldCBjb21wb25lbnRTaXplKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNMaXN0RW1wdHkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudFNpemVTdHlsZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGxpc3QgYGl0ZW1zYCBleGNsdWRpbmcgdGhlIGhlYWRlciBvbmVzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGxpc3RJdGVtczogSWd4TGlzdEl0ZW1Db21wb25lbnRbXSA9IHRoaXMubGlzdC5pdGVtcztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGl0ZW1zKCk6IElneExpc3RJdGVtQ29tcG9uZW50W10ge1xuICAgICAgICBjb25zdCBpdGVtczogSWd4TGlzdEl0ZW1Db21wb25lbnRbXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuc29ydGVkQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLmlzSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaGVhZGVyIGxpc3QgYGl0ZW1zYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBsaXN0SGVhZGVyczogSWd4TGlzdEl0ZW1Db21wb25lbnRbXSA9ICB0aGlzLmxpc3QuaGVhZGVycztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhlYWRlcnMoKTogSWd4TGlzdEl0ZW1Db21wb25lbnRbXSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnM6IElneExpc3RJdGVtQ29tcG9uZW50W10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmNoaWxkcmVuLnRvQXJyYXkoKSkge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5pc0hlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGVhZGVycztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBgY29udGV4dGAgb2JqZWN0IG9mIHRoZSB0ZW1wbGF0ZSBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQHJlbWFya1xuICAgICAqIEdldHMgdGhlIGBjb250ZXh0YCBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUgYHRlbXBsYXRlIGNvbnRleHRgIGJpbmRpbmcgaW50byB0aGUgYGxpc3QgY29udGFpbmVyYFxuICAgICAqIGJ5IHByb3ZpZGluZyB0aGUgYCRpbXBsaWNpdGAgZGVjbGFyYXRpb24gd2hpY2ggaXMgdGhlIGBJZ3hMaXN0Q29tcG9uZW50YCBpdHNlbGYuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgbGlzdENvbXBvbmVudCA9ICB0aGlzLmxpc3QuY29udGV4dDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbnRleHQoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRpbXBsaWNpdDogdGhpc1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYSBgVGVtcGxhdGVSZWZgIHRvIHRoZSBjdXJyZW50bHkgdXNlZCB0ZW1wbGF0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBsaXN0VGVtcGxhdGUgPSB0aGlzLmxpc3QudGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCB0ZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNMb2FkaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhTG9hZGluZ1RlbXBsYXRlID8gdGhpcy5kYXRhTG9hZGluZ1RlbXBsYXRlLnRlbXBsYXRlIDogdGhpcy5kZWZhdWx0RGF0YUxvYWRpbmdUZW1wbGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVtcHR5TGlzdFRlbXBsYXRlID8gdGhpcy5lbXB0eUxpc3RUZW1wbGF0ZS50ZW1wbGF0ZSA6IHRoaXMuZGVmYXVsdEVtcHR5TGlzdFRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuXG4iLCI8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEVtcHR5TGlzdD5cbiAgICA8YXJ0aWNsZSBjbGFzcz1cImlneC1saXN0X19tZXNzYWdlXCI+XG4gICAgICAgIHt7cmVzb3VyY2VTdHJpbmdzLmlneF9saXN0X25vX2l0ZW1zfX1cbiAgICA8L2FydGljbGU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHREYXRhTG9hZGluZz5cbiAgICA8YXJ0aWNsZSBjbGFzcz1cImlneC1saXN0X19tZXNzYWdlXCI+XG4gICAgICAgIHt7cmVzb3VyY2VTdHJpbmdzLmlneF9saXN0X2xvYWRpbmd9fVxuICAgIDwvYXJ0aWNsZT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhY2hpbGRyZW4gfHwgY2hpbGRyZW4ubGVuZ3RoID09PSAwIHx8IGlzTG9hZGluZ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogY29udGV4dFwiPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
|
|
501
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvbGlzdC9saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9saXN0L2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFDSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFFZixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUVOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFBRSxTQUFTLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsK0JBQStCLEVBQy9CLDZCQUE2QixFQUU3Qix1Q0FBdUMsRUFDdkMsd0NBQXdDLEVBQzNDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBMEIsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUc5RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFFaEUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBNkJoQjs7O0dBR0c7QUFNSCxNQUFNLE9BQU8seUJBQXlCOzhHQUF6Qix5QkFBeUI7a0dBQXpCLHlCQUF5Qjs7MkZBQXpCLHlCQUF5QjtrQkFMckMsU0FBUzttQkFBQztvQkFDUCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFVBQVUsRUFBRSxJQUFJO2lCQUNuQjs7QUFHRDs7O0dBR0c7QUFN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QixLQUFLO2dCQWtCVSxpQkFBaUI7c0JBRGhDLEtBQUs7Z0JBbUJDLFNBQVM7c0JBRGYsS0FBSztnQkFlVSxPQUFPO3NCQUR0QixNQUFNO2dCQWVTLFFBQVE7c0JBRHZCLE1BQU07Z0JBZVMsUUFBUTtzQkFEdkIsTUFBTTtnQkFlUyxNQUFNO3NCQURyQixNQUFNO2dCQWVVLFFBQVE7c0JBRHZCLE1BQU07Z0JBZ0JRLGNBQWM7c0JBRDdCLE1BQU07Z0JBZVMsV0FBVztzQkFEMUIsTUFBTTtnQkFRRyx3QkFBd0I7c0JBRGpDLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBUXhELDBCQUEwQjtzQkFEbkMsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFVekQsZUFBZTtzQkFEekIsS0FBSztnQkF5Q0ssSUFBSTtzQkFGZCxXQUFXO3VCQUFDLFdBQVc7O3NCQUN2QixLQUFLO2dCQWtCSyxXQUFXO3NCQURyQixXQUFXO3VCQUFDLHVCQUF1QjtnQkFVekIsUUFBUTtzQkFEbEIsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBT2xCLGFBQWE7c0JBRHZCLFdBQVc7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgT3B0aW9uYWwsXG4gICAgSW5qZWN0LCBEaXJlY3RpdmVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cblxuXG5pbXBvcnQgeyBJZ3hMaXN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vbGlzdC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIElneExpc3RCYXNlRGlyZWN0aXZlLFxuICAgIElneERhdGFMb2FkaW5nVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgSWd4RW1wdHlMaXN0VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgSWd4TGlzdFBhblN0YXRlLFxuICAgIElneExpc3RJdGVtTGVmdFBhbm5pbmdUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBJZ3hMaXN0SXRlbVJpZ2h0UGFubmluZ1RlbXBsYXRlRGlyZWN0aXZlXG59IGZyb20gJy4vbGlzdC5jb21tb24nO1xuaW1wb3J0IHsgSURpc3BsYXlEZW5zaXR5T3B0aW9ucywgRGlzcGxheURlbnNpdHlUb2tlbiB9IGZyb20gJy4uL2NvcmUvZGVuc2l0eSc7XG5pbXBvcnQgeyBJQmFzZUV2ZW50QXJncyB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSUxpc3RSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vbGlzdC1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ3VycmVudFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9yZXNvdXJjZXMnO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciB0aGUgcGFuU3RhdGVDaGFuZ2UgaWd4TGlzdCBldmVudCBhcmd1bWVudHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUGFuU3RhdGVDaGFuZ2VFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgb2xkU3RhdGU6IElneExpc3RQYW5TdGF0ZTtcbiAgICBuZXdTdGF0ZTogSWd4TGlzdFBhblN0YXRlO1xuICAgIGl0ZW06IElneExpc3RJdGVtQ29tcG9uZW50O1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgdGhlIGxpc3RJdGVtQ2xpY2sgaWd4TGlzdCBldmVudCBhcmd1bWVudHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTGlzdEl0ZW1DbGlja0V2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICBpdGVtOiBJZ3hMaXN0SXRlbUNvbXBvbmVudDtcbiAgICBldmVudDogRXZlbnQ7XG4gICAgZGlyZWN0aW9uOiBJZ3hMaXN0UGFuU3RhdGU7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciB0aGUgbGlzdEl0ZW1QYW5uaW5nIGlneExpc3QgZXZlbnQgYXJndW1lbnRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUxpc3RJdGVtUGFubmluZ0V2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICBpdGVtOiBJZ3hMaXN0SXRlbUNvbXBvbmVudDtcbiAgICBkaXJlY3Rpb246IElneExpc3RQYW5TdGF0ZTtcbiAgICBrZWVwSXRlbTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBpZ3hMaXN0VGh1bWJuYWlsIGlzIGNvbnRhaW5lciBmb3IgdGhlIExpc3QgbWVkaWFcbiAqIFVzZSBpdCB0byB3cmFwIGFueXRoaW5nIHlvdSB3YW50IHRvIGJlIHVzZWQgYXMgYSB0aHVtYm5haWwuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdbaWd4TGlzdFRodW1ibmFpbF0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4TGlzdFRodW1ibmFpbERpcmVjdGl2ZSB7fVxuXG4vKipcbiAqIGlneExpc3RBY3Rpb24gaXMgY29udGFpbmVyIGZvciB0aGUgTGlzdCBhY3Rpb25cbiAqIFVzZSBpdCB0byB3cmFwIGFueXRoaW5nIHlvdSB3YW50IHRvIGJlIHVzZWQgYXMgYSBsaXN0IGFjdGlvbjogaWNvbiwgY2hlY2tib3guLi5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1tpZ3hMaXN0QWN0aW9uXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hMaXN0QWN0aW9uRGlyZWN0aXZlIHt9XG5cbi8qKlxuICogaWd4TGlzdExpbmUgaXMgY29udGFpbmVyIGZvciB0aGUgTGlzdCB0ZXh0IGNvbnRlbnRcbiAqIFVzZSBpdCB0byB3cmFwIGFueXRoaW5nIHlvdSB3YW50IHRvIGJlIHVzZWQgYXMgYSBwbGFuZSB0ZXh0LlxuICovXG5ARGlyZWN0aXZlKHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnW2lneExpc3RMaW5lXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hMaXN0TGluZURpcmVjdGl2ZSB7fVxuXG4vKipcbiAqIGlneExpc3RMaW5lVGl0bGUgaXMgYSBkaXJlY3RpdmUgdGhhdCBhZGQgY2xhc3MgdG8gdGhlIHRhcmdldCBlbGVtZW50XG4gKiBVc2UgaXQgdG8gbWFrZSBhbnl0aGluZyB0byBsb29rIGxpa2UgbGlzdCBUaXRsZS5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1tpZ3hMaXN0TGluZVRpdGxlXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hMaXN0TGluZVRpdGxlRGlyZWN0aXZlIHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1saXN0X19pdGVtLWxpbmUtdGl0bGUnKVxuICAgIHB1YmxpYyBjc3NDbGFzcyA9ICdpZ3gtbGlzdF9faXRlbS1saW5lLXRpdGxlJztcbn1cblxuLyoqXG4gKiBpZ3hMaXN0TGluZVN1YlRpdGxlIGlzIGEgZGlyZWN0aXZlIHRoYXQgYWRkIGNsYXNzIHRvIHRoZSB0YXJnZXQgZWxlbWVudFxuICogVXNlIGl0IHRvIG1ha2UgYW55dGhpbmcgdG8gbG9vayBsaWtlIGxpc3QgU3VidGl0bGUuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdbaWd4TGlzdExpbmVTdWJUaXRsZV0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4TGlzdExpbmVTdWJUaXRsZURpcmVjdGl2ZSB7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtbGlzdF9faXRlbS1saW5lLXN1YnRpdGxlJylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LWxpc3RfX2l0ZW0tbGluZS1zdWJ0aXRsZSc7XG59XG5cbi8qKlxuICogRGlzcGxheXMgYSBjb2xsZWN0aW9uIG9mIGRhdGEgaXRlbXMgaW4gYSB0ZW1wbGF0YWJsZSBsaXN0IGZvcm1hdFxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4TGlzdE1vZHVsZVxuICpcbiAqIEBpZ3hUaGVtZSBpZ3gtbGlzdC10aGVtZVxuICpcbiAqIEBpZ3hLZXl3b3JkcyBsaXN0LCBkYXRhXG4gKlxuICogQGlneEdyb3VwIEdyaWRzICYgTGlzdHNcbiAqXG4gKiBAcmVtYXJrc1xuICogVGhlIElnbml0ZSBVSSBMaXN0IGRpc3BsYXlzIHJvd3Mgb2YgaXRlbXMgYW5kIHN1cHBvcnRzIG9uZSBvciBtb3JlIGhlYWRlciBpdGVtcyBhcyB3ZWxsIGFzIHNlYXJjaCBhbmQgZmlsdGVyaW5nXG4gKiBvZiBsaXN0IGl0ZW1zLiBFYWNoIGxpc3QgaXRlbSBpcyBjb21wbGV0ZWx5IHRlbXBsYXRhYmxlIGFuZCB3aWxsIHN1cHBvcnQgYW55IHZhbGlkIEhUTUwgb3IgQW5ndWxhciBjb21wb25lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtbGlzdD5cbiAqICAgPGlneC1saXN0LWl0ZW0gaXNIZWFkZXI9XCJ0cnVlXCI+Q29udGFjdHM8L2lneC1saXN0LWl0ZW0+XG4gKiAgIDxpZ3gtbGlzdC1pdGVtICpuZ0Zvcj1cImxldCBjb250YWN0IG9mIGNvbnRhY3RzXCI+XG4gKiAgICAgPHNwYW4gY2xhc3M9XCJuYW1lXCI+e3sgY29udGFjdC5uYW1lIH19PC9zcGFuPlxuICogICAgIDxzcGFuIGNsYXNzPVwicGhvbmVcIj57eyBjb250YWN0LnBob25lIH19PC9zcGFuPlxuICogICA8L2lneC1saXN0LWl0ZW0+XG4gKiA8L2lneC1saXN0PlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBJZ3hMaXN0QmFzZURpcmVjdGl2ZSwgdXNlRXhpc3Rpbmc6IElneExpc3RDb21wb25lbnQgfV0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdJZiwgTmdUZW1wbGF0ZU91dGxldF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4TGlzdENvbXBvbmVudCBleHRlbmRzIElneExpc3RCYXNlRGlyZWN0aXZlIHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgY29sbGVjdGlvbiBvZiBhbGwgaXRlbXMgYW5kIGhlYWRlcnMgaW4gdGhlIGxpc3QuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgbGlzdENoaWxkcmVuOiBRdWVyeUxpc3QgPSB0aGlzLmxpc3QuY2hpbGRyZW47XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IElneExpc3RJdGVtQ29tcG9uZW50KSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSBjaGlsZHJlbjogUXVlcnlMaXN0PElneExpc3RJdGVtQ29tcG9uZW50PjtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgZW1wdHkgbGlzdCB0ZW1wbGF0ZS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhpcyB0ZW1wbGF0ZSBpcyB1c2VkIGJ5IElneExpc3QgaW4gY2FzZSB0aGVyZSBhcmUgbm8gbGlzdCBpdGVtc1xuICAgICAqIGRlZmluZWQgYW5kIGBpc0xvYWRpbmdgIGlzIHNldCB0byBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1saXN0PlxuICAgICAqICAgPG5nLXRlbXBsYXRlIGlneEVtcHR5TGlzdD5cbiAgICAgKiAgICAgPHAgY2xhc3M9XCJlbXB0eVwiPk5vIGNvbnRhY3RzISA6KDwvcD5cbiAgICAgKiAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogPC9pZ3gtbGlzdD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGVtcHR5VGVtcGxhdGUgPSB0aGlzLmxpc3QuZW1wdHlMaXN0VGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hFbXB0eUxpc3RUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBJZ3hFbXB0eUxpc3RUZW1wbGF0ZURpcmVjdGl2ZSB9KVxuICAgIHB1YmxpYyBlbXB0eUxpc3RUZW1wbGF0ZTogSWd4RW1wdHlMaXN0VGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGxpc3QgbG9hZGluZyB0ZW1wbGF0ZS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhpcyB0ZW1wbGF0ZSBpcyB1c2VkIGJ5IElneExpc3QgaW4gY2FzZSB0aGVyZSBhcmUgbm8gbGlzdCBpdGVtcyBkZWZpbmVkIGFuZCBgaXNMb2FkaW5nYCBpcyBzZXQgdG8gYHRydWVgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1saXN0PlxuICAgICAqICAgPG5nLXRlbXBsYXRlIGlneERhdGFMb2FkaW5nPlxuICAgICAqICAgICA8cD5QYXRpZW5jZSwgd2UgYXJlIGN1cnJlbnRseSBsb2FkaW5nIHlvdXIgZGF0YS4uLjwvcD5cbiAgICAgKiAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogPC9pZ3gtbGlzdD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGxvYWRpbmdUZW1wbGF0ZSA9IHRoaXMubGlzdC5kYXRhTG9hZGluZ1RlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4RGF0YUxvYWRpbmdUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBJZ3hEYXRhTG9hZGluZ1RlbXBsYXRlRGlyZWN0aXZlIH0pXG4gICAgcHVibGljIGRhdGFMb2FkaW5nVGVtcGxhdGU6IElneERhdGFMb2FkaW5nVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIHRlbXBsYXRlIGZvciBsZWZ0IHBhbm5pbmcgYSBsaXN0IGl0ZW0uXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYG51bGxgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1saXN0IFthbGxvd0xlZnRQYW5uaW5nXT1cInRydWVcIj5cbiAgICAgKiAgIDxuZy10ZW1wbGF0ZSBpZ3hMaXN0SXRlbUxlZnRQYW5uaW5nPlxuICAgICAqICAgICA8aWd4LWljb24+ZGVsZXRlPC9pZ3gtaWNvbj5EZWxldGVcbiAgICAgKiAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogPC9pZ3gtbGlzdD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGl0ZW1MZWZ0UGFuVG1wbCA9IHRoaXMubGlzdC5saXN0SXRlbUxlZnRQYW5uaW5nVGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hMaXN0SXRlbUxlZnRQYW5uaW5nVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogSWd4TGlzdEl0ZW1MZWZ0UGFubmluZ1RlbXBsYXRlRGlyZWN0aXZlIH0pXG4gICAgcHVibGljIG92ZXJyaWRlIGxpc3RJdGVtTGVmdFBhbm5pbmdUZW1wbGF0ZTogSWd4TGlzdEl0ZW1MZWZ0UGFubmluZ1RlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSB0ZW1wbGF0ZSBmb3IgcmlnaHQgcGFubmluZyBhIGxpc3QgaXRlbS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgbnVsbGAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWxpc3QgW2FsbG93UmlnaHRQYW5uaW5nXSA9IFwidHJ1ZVwiPlxuICAgICAqICAgPG5nLXRlbXBsYXRlIGlneExpc3RJdGVtUmlnaHRQYW5uaW5nPlxuICAgICAqICAgICA8aWd4LWljb24+Y2FsbDwvaWd4LWljb24+RGlhbFxuICAgICAqICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiA8L2lneC1saXN0PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXRlbVJpZ2h0UGFuVG1wbCA9IHRoaXMubGlzdC5saXN0SXRlbVJpZ2h0UGFubmluZ1RlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4TGlzdEl0ZW1SaWdodFBhbm5pbmdUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBJZ3hMaXN0SXRlbVJpZ2h0UGFubmluZ1RlbXBsYXRlRGlyZWN0aXZlIH0pXG4gICAgcHVibGljIG92ZXJyaWRlIGxpc3RJdGVtUmlnaHRQYW5uaW5nVGVtcGxhdGU6IElneExpc3RJdGVtUmlnaHRQYW5uaW5nVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIHRocmVzaG9sZCBhZnRlciB3aGljaCB0aGUgaXRlbSdzIHBhbm5pbmcgd2lsbCBiZSBjb21wbGV0ZWQgYXV0b21hdGljYWxseS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogQnkgZGVmYXVsdCB0aGlzIHByb3BlcnR5IGlzIHNldCB0byAwLjUgd2hpY2ggaXMgNTAlIG9mIHRoZSBsaXN0IGl0ZW0ncyB3aWR0aC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtbGlzdCBbcGFuRW5kVHJpZ2dlcmluZ1RocmVzaG9sZF09XCIwLjhcIj48L2lneC1saXN0PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHBhbkVuZFRyaWdnZXJpbmdUaHJlc2hvbGQgPSAwLjU7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGBpZGAgb2YgdGhlIGxpc3QuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIElmIG5vdCBzZXQsIHRoZSBgaWRgIG9mIHRoZSBmaXJzdCBsaXN0IGNvbXBvbmVudCB3aWxsIGJlIGBcImlneC1saXN0LTBcImAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWxpc3QgaWQ9XCJteS1maXJzdC1saXN0XCI+PC9pZ3gtbGlzdD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGxpc3RJZCA9IHRoaXMubGlzdC5pZDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGlneC1saXN0LSR7TkVYVF9JRCsrfWA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgd2hldGhlciB0aGUgbGVmdCBwYW5uaW5nIG9mIGFuIGl0ZW0gaXMgYWxsb3dlZC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1saXN0IFthbGxvd0xlZnRQYW5uaW5nXT1cInRydWVcIj48L2lneC1saXN0PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNMZWZ0UGFubmluZ0FsbG93ZWQgPSB0aGlzLmxpc3QuYWxsb3dMZWZ0UGFubmluZztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBhbGxvd0xlZnRQYW5uaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgd2hldGhlciB0aGUgcmlnaHQgcGFubmluZyBvZiBhbiBpdGVtIGlzIGFsbG93ZWQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtbGlzdCBbYWxsb3dSaWdodFBhbm5pbmddPVwidHJ1ZVwiPjwvaWd4LWxpc3Q+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc1JpZ2h0UGFubmluZ0FsbG93ZWQgPSB0aGlzLmxpc3QuYWxsb3dSaWdodFBhbm5pbmc7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgYWxsb3dSaWdodFBhbm5pbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB3aGV0aGVyIHRoZSBsaXN0IGlzIGN1cnJlbnRseSBsb2FkaW5nIGRhdGEuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFNldCBpdCB0byBkaXNwbGF5IHRoZSBkYXRhTG9hZGluZ1RlbXBsYXRlIHdoaWxlIGRhdGEgaXMgYmVpbmcgcmV0cmlldmVkLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWxpc3QgW2lzTG9hZGluZ109XCJ0cnVlXCI+PC9pZ3gtbGlzdD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzTG9hZGluZyA9IHRoaXMubGlzdC5pc0xvYWRpbmc7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYSBsZWZ0IHBhbiBnZXN0dXJlIGlzIGV4ZWN1dGVkIG9uIGEgbGlzdCBpdGVtLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBQcm92aWRlcyBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3Qgb2YgdHlwZSBgSUxpc3RJdGVtUGFubmluZ0V2ZW50QXJnc2AgYXMgYW4gZXZlbnQgYXJndW1lbnQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWxpc3QgW2FsbG93TGVmdFBhbm5pbmddPVwidHJ1ZVwiIChsZWZ0UGFuKT1cImxlZnRQYW4oJGV2ZW50KVwiPjwvaWd4LWxpc3Q+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGxlZnRQYW4gPSBuZXcgRXZlbnRFbWl0dGVyPElMaXN0SXRlbVBhbm5pbmdFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYSByaWdodCBwYW4gZ2VzdHVyZSBpcyBleGVjdXRlZCBvbiBhIGxpc3QgaXRlbS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogUHJvdmlkZXMgYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IG9mIHR5cGUgYElMaXN0SXRlbVBhbm5pbmdFdmVudEFyZ3NgIGFzIGFuIGV2ZW50IGFyZ3VtZW50LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1saXN0IFthbGxvd1JpZ2h0UGFubmluZ109XCJ0cnVlXCIgKHJpZ2h0UGFuKT1cInJpZ2h0UGFuKCRldmVudClcIj48L2lneC1saXN0PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByaWdodFBhbiA9IG5ldyBFdmVudEVtaXR0ZXI8SUxpc3RJdGVtUGFubmluZ0V2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIHBhbiBnZXN0dXJlIGlzIHN0YXJ0ZWQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFByb3ZpZGVzIGEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCBvZiB0eXBlIGBJTGlzdEl0ZW1QYW5uaW5nRXZlbnRBcmdzYCBhcyBhbiBldmVudCBhcmd1bWVudC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtbGlzdCAoc3RhcnRQYW4pPVwic3RhcnRQYW4oJGV2ZW50KVwiPjwvaWd4LWxpc3Q+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHN0YXJ0UGFuID0gbmV3IEV2ZW50RW1pdHRlcjxJTGlzdEl0ZW1QYW5uaW5nRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGEgcGFuIGdlc3R1cmUgaXMgY29tcGxldGVkIG9yIGNhbmNlbGVkLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBQcm92aWRlcyBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3Qgb2YgdHlwZSBgSUxpc3RJdGVtUGFubmluZ0V2ZW50QXJnc2AgYXMgYW4gZXZlbnQgYXJndW1lbnQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWxpc3QgKGVuZFBhbik9XCJlbmRQYW4oJGV2ZW50KVwiPjwvaWd4LWxpc3Q+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGVuZFBhbiA9IG5ldyBFdmVudEVtaXR0ZXI8SUxpc3RJdGVtUGFubmluZ0V2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIHBhbiBpdGVtIGlzIHJldHVybmVkIHRvIGl0cyBvcmlnaW5hbCBwb3NpdGlvbi5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogUHJvdmlkZXMgYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IG9mIHR5cGUgYElneExpc3RDb21wb25lbnRgIGFzIGFuIGV2ZW50IGFyZ3VtZW50LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1saXN0IChyZXNldFBhbik9XCJyZXNldFBhbigkZXZlbnQpXCI+PC9pZ3gtbGlzdD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAgQE91dHB1dCgpXG4gICAgIHB1YmxpYyBvdmVycmlkZSByZXNldFBhbiA9IG5ldyBFdmVudEVtaXR0ZXI8SWd4TGlzdENvbXBvbmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGEgcGFuIGdlc3R1cmUgaXMgZXhlY3V0ZWQgb24gYSBsaXN0IGl0ZW0uXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFByb3ZpZGVzIHJlZmVyZW5jZXMgdG8gdGhlIGBJZ3hMaXN0SXRlbUNvbXBvbmVudGAgYW5kIGBJZ3hMaXN0UGFuU3RhdGVgIGFzIGV2ZW50IGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtbGlzdCAocGFuU3RhdGVDaGFuZ2UpPVwicGFuU3RhdGVDaGFuZ2UoJGV2ZW50KVwiPjwvaWd4LWxpc3Q+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHBhblN0YXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJUGFuU3RhdGVDaGFuZ2VFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYSBsaXN0IGl0ZW0gaXMgY2xpY2tlZC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogUHJvdmlkZXMgcmVmZXJlbmNlcyB0byB0aGUgYElneExpc3RJdGVtQ29tcG9uZW50YCBhbmQgYEV2ZW50YCBhcyBldmVudCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWxpc3QgKGl0ZW1DbGlja2VkKT1cIm9uSXRlbUNsaWNrZWQoJGV2ZW50KVwiPjwvaWd4LWxpc3Q+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGl0ZW1DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJTGlzdEl0ZW1DbGlja0V2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0RW1wdHlMaXN0JywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRFbXB0eUxpc3RUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0RGF0YUxvYWRpbmcnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdERhdGFMb2FkaW5nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBwcml2YXRlIF9yZXNvdXJjZVN0cmluZ3MgPSBDdXJyZW50UmVzb3VyY2VTdHJpbmdzLkxpc3RSZXNTdHJpbmdzO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKiBCeSBkZWZhdWx0IGl0IHVzZXMgRU4gcmVzb3VyY2VzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCByZXNvdXJjZVN0cmluZ3ModmFsdWU6IElMaXN0UmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICovXG4gICAgcHVibGljIGdldCByZXNvdXJjZVN0cmluZ3MoKTogSUxpc3RSZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERpc3BsYXlEZW5zaXR5VG9rZW4pIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnM6IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoX2Rpc3BsYXlEZW5zaXR5T3B0aW9ucywgZWxlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXQgc29ydGVkQ2hpbGRyZW4oKTogSWd4TGlzdEl0ZW1Db21wb25lbnRbXSB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLnRvQXJyYXkoKVxuICAgICAgICAgICAgICAgIC5zb3J0KChhOiBJZ3hMaXN0SXRlbUNvbXBvbmVudCwgYjogSWd4TGlzdEl0ZW1Db21wb25lbnQpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yb2xlID0gJ2xpc3QnO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBgcm9sZWAgYXR0cmlidXRlIHZhbHVlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGxpc3RSb2xlID0gIHRoaXMubGlzdC5yb2xlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgcm9sZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JvbGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCByb2xlKHZhbDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3JvbGUgPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgbGlzdCBpcyBlbXB0eS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc0VtcHR5ID0gIHRoaXMubGlzdC5pc0xpc3RFbXB0eTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1saXN0LS1lbXB0eScpXG4gICAgcHVibGljIGdldCBpc0xpc3RFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmNoaWxkcmVuIHx8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1saXN0JylcbiAgICBwdWJsaWMgZ2V0IGNzc0NsYXNzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNMaXN0RW1wdHk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS4tLWNvbXBvbmVudC1zaXplJylcbiAgICBwdWJsaWMgZ2V0IGNvbXBvbmVudFNpemUoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0xpc3RFbXB0eSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50U2l6ZVN0eWxlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbGlzdCBgaXRlbXNgIGV4Y2x1ZGluZyB0aGUgaGVhZGVyIG9uZXMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgbGlzdEl0ZW1zOiBJZ3hMaXN0SXRlbUNvbXBvbmVudFtdID0gdGhpcy5saXN0Lml0ZW1zO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXRlbXMoKTogSWd4TGlzdEl0ZW1Db21wb25lbnRbXSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBJZ3hMaXN0SXRlbUNvbXBvbmVudFtdID0gW107XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5zb3J0ZWRDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGlmICghY2hpbGQuaXNIZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBoZWFkZXIgbGlzdCBgaXRlbXNgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGxpc3RIZWFkZXJzOiBJZ3hMaXN0SXRlbUNvbXBvbmVudFtdID0gIHRoaXMubGlzdC5oZWFkZXJzO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGVhZGVycygpOiBJZ3hMaXN0SXRlbUNvbXBvbmVudFtdIHtcbiAgICAgICAgY29uc3QgaGVhZGVyczogSWd4TGlzdEl0ZW1Db21wb25lbnRbXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuY2hpbGRyZW4udG9BcnJheSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLmlzSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGBjb250ZXh0YCBvYmplY3Qgb2YgdGhlIHRlbXBsYXRlIGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrXG4gICAgICogR2V0cyB0aGUgYGNvbnRleHRgIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBgdGVtcGxhdGUgY29udGV4dGAgYmluZGluZyBpbnRvIHRoZSBgbGlzdCBjb250YWluZXJgXG4gICAgICogYnkgcHJvdmlkaW5nIHRoZSBgJGltcGxpY2l0YCBkZWNsYXJhdGlvbiB3aGljaCBpcyB0aGUgYElneExpc3RDb21wb25lbnRgIGl0c2VsZi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBsaXN0Q29tcG9uZW50ID0gIHRoaXMubGlzdC5jb250ZXh0O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29udGV4dCgpOiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJGltcGxpY2l0OiB0aGlzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhIGBUZW1wbGF0ZVJlZmAgdG8gdGhlIGN1cnJlbnRseSB1c2VkIHRlbXBsYXRlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGxpc3RUZW1wbGF0ZSA9IHRoaXMubGlzdC50ZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5pc0xvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFMb2FkaW5nVGVtcGxhdGUgPyB0aGlzLmRhdGFMb2FkaW5nVGVtcGxhdGUudGVtcGxhdGUgOiB0aGlzLmRlZmF1bHREYXRhTG9hZGluZ1RlbXBsYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW1wdHlMaXN0VGVtcGxhdGUgPyB0aGlzLmVtcHR5TGlzdFRlbXBsYXRlLnRlbXBsYXRlIDogdGhpcy5kZWZhdWx0RW1wdHlMaXN0VGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5cbiIsIjxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0RW1wdHlMaXN0PlxuICAgIDxhcnRpY2xlIGNsYXNzPVwiaWd4LWxpc3RfX21lc3NhZ2VcIj5cbiAgICAgICAge3tyZXNvdXJjZVN0cmluZ3MuaWd4X2xpc3Rfbm9faXRlbXN9fVxuICAgIDwvYXJ0aWNsZT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdERhdGFMb2FkaW5nPlxuICAgIDxhcnRpY2xlIGNsYXNzPVwiaWd4LWxpc3RfX21lc3NhZ2VcIj5cbiAgICAgICAge3tyZXNvdXJjZVN0cmluZ3MuaWd4X2xpc3RfbG9hZGluZ319XG4gICAgPC9hcnRpY2xlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjaGlsZHJlbiB8fCBjaGlsZHJlbi5sZW5ndGggPT09IDAgfHwgaXNMb2FkaW5nXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiBjb250ZXh0XCI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|