@datorama/core 22.9.2-rc.7 → 22.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/datorama-core.umd.js +61 -90
- package/bundles/datorama-core.umd.js.map +1 -1
- package/bundles/datorama-core.umd.min.js +14 -14
- package/bundles/datorama-core.umd.min.js.map +1 -1
- package/datorama-core.d.ts +0 -1
- package/datorama-core.metadata.json +1 -1
- package/esm2015/datorama-core.js +1 -2
- package/esm2015/lib/breadcrumbs/breadcrumbs.component.js +2 -4
- package/esm2015/lib/grid-v2/grid/grid-v2.types.js +1 -1
- package/esm2015/lib/grid-v2/grid-controller/grid-controller.component.js +2 -5
- package/esm2015/lib/grid-v2/grid-filter/grid-filter.component.js +2 -2
- package/esm2015/lib/grid-v2/grid-settings.js +2 -2
- package/esm2015/lib/grid-v2/grid-store/grid.service.js +2 -3
- package/esm2015/lib/grid-v2/grid-toolbar/grid-toolbar.component.js +1 -7
- package/esm2015/lib/icon/icon.types.js +1 -1
- package/esm2015/lib/rich-text/rich-text.directive.js +38 -20
- package/esm2015/lib/select/select.component.js +17 -14
- package/esm2015/lib/version.js +2 -2
- package/esm5/datorama-core.js +1 -2
- package/esm5/lib/breadcrumbs/breadcrumbs.component.js +2 -4
- package/esm5/lib/grid-v2/grid/grid-v2.types.js +1 -1
- package/esm5/lib/grid-v2/grid-controller/grid-controller.component.js +2 -5
- package/esm5/lib/grid-v2/grid-filter/grid-filter.component.js +5 -2
- package/esm5/lib/grid-v2/grid-settings.js +2 -2
- package/esm5/lib/grid-v2/grid-store/grid.service.js +2 -3
- package/esm5/lib/grid-v2/grid-toolbar/grid-toolbar.component.js +1 -13
- package/esm5/lib/icon/icon.types.js +1 -1
- package/esm5/lib/rich-text/rich-text.directive.js +39 -21
- package/esm5/lib/select/select.component.js +17 -14
- package/esm5/lib/version.js +2 -2
- package/fesm2015/datorama-core.js +58 -82
- package/fesm2015/datorama-core.js.map +1 -1
- package/fesm5/datorama-core.js +62 -90
- package/fesm5/datorama-core.js.map +1 -1
- package/lib/grid-v2/grid/grid-v2.types.d.ts +0 -1
- package/lib/grid-v2/grid-settings.d.ts +2 -2
- package/lib/grid-v2/grid-toolbar/grid-toolbar.component.d.ts +0 -2
- package/lib/icon/icon.types.d.ts +1 -1
- package/lib/rich-text/rich-text.directive.d.ts +6 -4
- package/package.json +1 -1
- package/esm2015/lib/rich-text/rich-text.service.js +0 -50
- package/esm5/lib/rich-text/rich-text.service.js +0 -51
- package/lib/rich-text/rich-text.service.d.ts +0 -10
|
@@ -91,10 +91,7 @@ var DatoGridControllerComponent = /** @class */ (function () {
|
|
|
91
91
|
.pipe(switchMap(function () {
|
|
92
92
|
_this.gridOptions = _this.normalizeOptions();
|
|
93
93
|
agGrid.gridOptions = _this.gridOptions;
|
|
94
|
-
var
|
|
95
|
-
var settingsLoader = _this.gridOptions.saveSettings === false
|
|
96
|
-
? of(null)
|
|
97
|
-
: _this.storageAPI.get(_this.gridOptions.gridName, isGlobal);
|
|
94
|
+
var settingsLoader = _this.gridOptions.saveSettings === false ? of(null) : _this.storageAPI.get(_this.gridOptions.gridName);
|
|
98
95
|
return combineLatest([agGrid.gridReady, settingsLoader]);
|
|
99
96
|
}), untilDestroyed(this))
|
|
100
97
|
.subscribe(function (_a) {
|
|
@@ -519,4 +516,4 @@ var DatoGridControllerComponent = /** @class */ (function () {
|
|
|
519
516
|
return DatoGridControllerComponent;
|
|
520
517
|
}());
|
|
521
518
|
export { DatoGridControllerComponent };
|
|
522
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1jb250cm9sbGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC1jb250cm9sbGVyL2dyaWQtY29udHJvbGxlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBWXhELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUlyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBRzNHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBa0Is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VztnQkFDYixTQUFTO2dCQUNkLGlCQUFpQjtnQkFDUixZQUFZO2dCQUNmLG9CQUFvQjtnQkFDekIsVUFBVTtnQkFDTixRQUFRO2dCQUNSLHdCQUF3QjtnQkFDekIsV0FBVztnREFDM0IsTUFBTSxTQUFDLHFCQUFxQjs7SUFsRHFCO1FBQW5ELGVBQWUsQ0FBQyxpQ0FBaUMsQ0FBQztrQ0FBeUIsU0FBUzsrRUFFbkY7SUFFUTtRQUFULE1BQU0sRUFBRTs7cUVBQW9EO0lBQ3BEO1FBQVIsS0FBSyxFQUFFOzttRUFBOEI7SUFDN0I7UUFBUixLQUFLLEVBQUU7O29FQUFnQztJQUMvQjtRQUFSLEtBQUssRUFBRTs7O2tFQVlQO0lBcEJVLDJCQUEyQjtRQVR2QyxTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsc0JBQXNCO1lBQ2hDLFFBQVEsRUFBRSxxQ0FFVDtZQUVELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO1lBQy9DLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDOztTQUMvQyxDQUFDO1FBb0RHLFdBQUEsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUE7eUNBVFYsV0FBVztZQUNiLFNBQVM7WUFDZCxpQkFBaUI7WUFDUixZQUFZO1lBQ2Ysb0JBQW9CO1lBQ3pCLFVBQVU7WUFDTixRQUFRO1lBQ1Isd0JBQXdCO1lBQ3pCLFdBQVc7T0FsRG5CLDJCQUEyQixDQWtmdkM7SUFBRCxrQ0FBQztDQUFBLEFBbGZELElBa2ZDO1NBbGZZLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBEYXRvcmFtYS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBBcGFjaGUgTGljZW5zZSAyLjAgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZGF0b3JhbWEvY2xpZW50LWNvcmUvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIENvbXBvbmVudFJlZixcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgRU1QVFksIGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBZ0dyaWROZzIgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xuaW1wb3J0IHsgdW50aWxEZXN0cm95ZWQgfSBmcm9tICduZ3gtdGFrZS11bnRpbC1kZXN0cm95JztcbmltcG9ydCB7XG4gIEJvZHlTY3JvbGxFdmVudCxcbiAgQ2VsbENsaWNrZWRFdmVudCxcbiAgQ2VsbEV2ZW50LFxuICBDZWxsTW91c2VPdXRFdmVudCxcbiAgQ29sdW1uUmVzaXplZEV2ZW50LFxuICBDb2x1bW5Sb3dHcm91cENoYW5nZWRFdmVudCxcbiAgRGV0YWlsR3JpZEluZm8sXG4gIEdyaWRBcGksXG4gIFJvd0dyb3VwT3BlbmVkRXZlbnRcbn0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgR3JpZFF1ZXJ5IH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnF1ZXJ5JztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0Q29sdW1uc1NpemVzIH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS91dGlsJztcbmltcG9ydCB7IEdyaWRTdG9yZSB9IGZyb20gJy4uL2dyaWQtc3RvcmUvZ3JpZC5zdG9yZSc7XG5pbXBvcnQgeyBEYXRvR3JpZFNldHRpbmdzIH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnN0b3JlLnR5cGVzJztcbmltcG9ydCB7IERhdG9HcmlkQXBpIH0gZnJvbSAnLi9ncmlkLWNvbnRyb2xsZXIudHlwZXMnO1xuaW1wb3J0IHsgRGF0b0dyaWRBbGlnbm1lbnQsIERhdG9HcmlkT3B0aW9ucywgRGF0b0dyaWRTb3J0LCBHcmlkQ2hhbmdlRXZlbnQgfSBmcm9tICcuLi9ncmlkL2dyaWQtdjIudHlwZXMnO1xuaW1wb3J0IHsgSWNvblJlZ2lzdHJ5IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaWNvbi1yZWdpc3RyeSc7XG5pbXBvcnQgeyBkZWVwbWVyZ2UgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC9kZWVwLW1lcmdlJztcbmltcG9ydCB7IERhdG9DdXN0b21IZWFkZXJUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQtY3VzdG9tLWhlYWRlci9jdXN0b20taGVhZGVyLXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIYXNoTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgR3JpZEFjdGlvbiwgUm93QWN0aW9uIH0gZnJvbSAnLi4vZ3JpZC10b29sYmFyL2dyaWQtdG9vbGJhci50eXBlcyc7XG5pbXBvcnQgeyBEYXRvVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IERBVE9fR1JJRF9TVE9SQUdFX0FQSSwgR3JpZFN0b3JhZ2VBUEkgfSBmcm9tICcuLi9ncmlkLXNldHRpbmdzJztcbmltcG9ydCB7IGF1ZGl0VGltZSwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIHNraXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgYWRkQ2xhc3MsIGFwcGVuZENoaWxkLCBxdWVyeSB9IGZyb20gJy4uLy4uL2ludGVybmFsL2hlbHBlcnMnO1xuaW1wb3J0IFRvb2x0aXAgZnJvbSAndG9vbHRpcC5qcyc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uLy4uL3V0aWxzL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgY3JlYXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYW5ndWxhci9keW5hbWljLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgRGF0b0dyaWRPbkhvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1vbi1ob3Zlci9ncmlkLW9uLWhvdmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjb252ZXJ0RnJvbVRyZWVEYXRhLCBkZWZhdWx0R3JpZE9wdGlvbnMsIGRlZmF1bHRUcmVlT3B0aW9ucyB9IGZyb20gJy4uL2dyaWQvZ3JpZC12Mi5jb25maWcnO1xuaW1wb3J0IHsgY29lcmNlQXJyYXkgfSBmcm9tICcuLi8uLi91dGlscy9jb2VyY2lvbic7XG5pbXBvcnQgeyBEYXRvSG90a2V5cyB9IGZyb20gJy4uLy4uL2hvdGtleXMvaG90a2V5cy5zZXJ2aWNlJztcbmltcG9ydCBET01QdXJpZnkgZnJvbSAnZG9tcHVyaWZ5JztcbmltcG9ydCB7IERhdG9HcmlkRXh0ZXJuYWxGaWx0ZXIgfSBmcm9tICcuLi9ncmlkLWZpbHRlci9ncmlkLWZpbHRlci50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdG8tZ3JpZC1jb250cm9sbGVyJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2dyaWQtY29udHJvbGxlci5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbR3JpZFF1ZXJ5LCBHcmlkU2VydmljZSwgR3JpZFN0b3JlXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRvR3JpZENvbnRyb2xsZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXQge1xuICBAQ29udGVudENoaWxkcmVuKERhdG9DdXN0b21IZWFkZXJUZW1wbGF0ZUNvbXBvbmVudCkgY3VzdG9tSGVhZGVyc1RlbXBsYXRlczogUXVlcnlMaXN0PFxuICAgIERhdG9DdXN0b21IZWFkZXJUZW1wbGF0ZUNvbXBvbmVudFxuICA+O1xuXG4gIEBPdXRwdXQoKSBvbkdyaWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEdyaWRDaGFuZ2VFdmVudD4oKTtcbiAgQElucHV0KCkgcm93QWN0aW9uczogUm93QWN0aW9uW10gPSBbXTtcbiAgQElucHV0KCkgZ3JpZEFjdGlvbnM6IEdyaWRBY3Rpb25bXSA9IFtdO1xuICBASW5wdXQoKSBzZXQgZ3JpZE9wdGlvbnMoZ3JpZE9wdGlvbnM6IERhdG9HcmlkT3B0aW9ucykge1xuICAgIHRoaXMuX2dyaWRPcHRpb25zID0gZ3JpZE9wdGlvbnM7XG4gICAgdGhpcy5ncmlkU2VydmljZS50cmVlRGF0YSA9IGdyaWRPcHRpb25zLnRyZWVEYXRhO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuaXNQaXZvdE1vZGUgPSBncmlkT3B0aW9ucy5waXZvdE1vZGU7XG5cbiAgICBpZiAodGhpcy5hZ0dyaWRFbCkge1xuICAgICAgaWYgKGdyaWRPcHRpb25zLnRyZWVEYXRhKSB7XG4gICAgICAgICF0aGlzLmFnR3JpZEVsLmNsYXNzTGlzdC5jb250YWlucyh0aGlzLnRyZWVHcmlkQ2xhc3MpICYmIHRoaXMuYWdHcmlkRWwuY2xhc3NMaXN0LmFkZCh0aGlzLnRyZWVHcmlkQ2xhc3MpO1xuICAgICAgfSBlbHNlIGlmICghZ3JpZE9wdGlvbnMuZW5hYmxlVjJfMSkge1xuICAgICAgICB0aGlzLmFnR3JpZEVsLmNsYXNzTGlzdC5hZGQodGhpcy50cmVlR3JpZENsYXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgZ3JpZE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dyaWRPcHRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBjb250ZW50SW5pdCA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgdG9vbHRpcDtcbiAgcHJpdmF0ZSBfZ3JpZE9wdGlvbnM6IERhdG9HcmlkT3B0aW9ucztcbiAgZ3JpZFJlYWR5JCA9IHRoaXMuZ3JpZFF1ZXJ5LmdyaWRSZWFkeSQ7XG4gIGFnR3JpZEVsOiBIVE1MRWxlbWVudDtcblxuICBwcml2YXRlIHJvd0hvdmVyQ29tcG9uZW50OiBDb21wb25lbnRSZWY8RGF0b0dyaWRPbkhvdmVyQ29tcG9uZW50PjtcbiAgcHJpdmF0ZSBsYXN0SG92ZXJlZFJvdzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgZ3JpZEVsZW1lbnRzID0ge1xuICAgIGNlbnRlclZpZXdwb3J0OiBudWxsLFxuICAgIGNlbnRlckNvbnRhaW5lcjogbnVsbCxcbiAgICBib2R5Vmlld3BvcnQ6IG51bGxcbiAgfTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmVlR3JpZENsYXNzID0gJ3RyZWUnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBncmlkU2VydmljZTogR3JpZFNlcnZpY2UsXG4gICAgcHVibGljIGdyaWRRdWVyeTogR3JpZFF1ZXJ5LFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGljb25SZWdpc3RyeTogSWNvblJlZ2lzdHJ5LFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBEYXRvVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGhvc3Q6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgaG90a2V5czogRGF0b0hvdGtleXMsXG4gICAgQEluamVjdChEQVRPX0dSSURfU1RPUkFHRV9BUEkpIHByaXZhdGUgc3RvcmFnZUFQSTogR3JpZFN0b3JhZ2VBUElcbiAgKSB7fVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY29udGVudEluaXQuY29tcGxldGUoKTtcbiAgICB0aGlzLnRvb2x0aXAgJiYgdGhpcy5jbGVhclRvb2x0aXAoKTtcbiAgICB0aGlzLnJvd0hvdmVyQ29tcG9uZW50ICYmIHRoaXMucm93SG92ZXJDb21wb25lbnQuZGVzdHJveSgpO1xuICAgIHRoaXMucm93SG92ZXJDb21wb25lbnQgPSBudWxsO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuY29udGVudEluaXQubmV4dCgpO1xuICAgIHRoaXMuY29udGVudEluaXQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qIEBpbnRlcm5hbCAqL1xuICBfaW5pdGlhbGl6ZUdyaWQoYWdHcmlkOiBBZ0dyaWROZzIsIGFnR3JpZEVsOiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMuYWdHcmlkRWwgPSBhZ0dyaWRFbDtcbiAgICB0aGlzLmNvbnRlbnRJbml0XG4gICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMgPSB0aGlzLm5vcm1hbGl6ZU9wdGlvbnMoKTtcbiAgICAgICAgICBhZ0dyaWQuZ3JpZE9wdGlvbnMgPSB0aGlzLmdyaWRPcHRpb25zO1xuICAgICAgICAgIGNvbnN0IGlzR2xvYmFsID0gdGhpcy5ncmlkT3B0aW9ucy5pc0dsb2JhbFNldHRpbmdzO1xuICAgICAgICAgIGNvbnN0IHNldHRpbmdzTG9hZGVyID1cbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2F2ZVNldHRpbmdzID09PSBmYWxzZVxuICAgICAgICAgICAgICA/IG9mKG51bGwpXG4gICAgICAgICAgICAgIDogdGhpcy5zdG9yYWdlQVBJLmdldCh0aGlzLmdyaWRPcHRpb25zLmdyaWROYW1lLCBpc0dsb2JhbCk7XG4gICAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW2FnR3JpZC5ncmlkUmVhZHksIHNldHRpbmdzTG9hZGVyXSk7XG4gICAgICAgIH0pLFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoW3sgYXBpLCBjb2x1bW5BcGkgfSwgc2F2ZWRTZXR0aW5ncyA9IHt9XTogW0RldGFpbEdyaWRJbmZvLCBQYXJ0aWFsPERhdG9HcmlkU2V0dGluZ3M+XSkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZE9wdGlvbnMucm93RGF0YSkge1xuICAgICAgICAgIGFwaS5zaG93TG9hZGluZ092ZXJsYXkoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZ3JpZE9wdGlvbnMuc3RhdHVzQmFyKSB7XG4gICAgICAgICAgLyoqIEZpeCBhZy1ncmlkIGJ1ZyB0aGF0IGRvZXNuJ3QgYWRkIGFnLWhpZGRlbiBjbGFzcyB0byB0aGUgc3RhdHVzIGJhciwgd2hpY2ggb25seSBnZXQgZml4ZWQgaW4gbGF0ZXIgdmVyc2lvbnMgKi9cbiAgICAgICAgICBjb25zdCBlbCA9IGFnR3JpZEVsLnF1ZXJ5U2VsZWN0b3IoJy5hZy1zdGF0dXMtYmFyJyk7XG5cbiAgICAgICAgICBhZGRDbGFzcyhlbCwgJ2FnLWhpZGRlbicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdyaWRBcGk6IERhdG9HcmlkQXBpID0geyBncmlkOiBhcGksIGNvbHVtbnM6IGNvbHVtbkFwaSB9O1xuICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLl9zZXRBcGkoZ3JpZEFwaSwgYWdHcmlkKTtcbiAgICAgICAgdGhpcy5ncmlkUXVlcnkuX3NldEFwaShncmlkQXBpLCBhZ0dyaWQpO1xuXG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuaW5pdFNldHRpbmdzKHNhdmVkU2V0dGluZ3MgfHwge30pO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyU2V0dGluZ3NMaXN0ZW5lcnMoZ3JpZEFwaSwgYWdHcmlkKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckdyaWRMaXN0ZW5lcnMoZ3JpZEFwaSwgYWdHcmlkKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckV2ZW50c1RyaWdnZXJpbmdDbGVhclNlbGVjdGVkUm93cyhhZ0dyaWQpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyUGFnaW5hdGlvbkNoYW5nZWQoYWdHcmlkKTtcbiAgICAgICAgdGhpcy5ncmlkUXVlcnkuX2dyaWRSZWFkeS5uZXh0KHRydWUpO1xuXG4gICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLnRyZWVEYXRhKSB7XG4gICAgICAgICAgdGhpcy5hZ0dyaWRFbC5jbGFzc0xpc3QuYWRkKCd0cmVlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMucm93SGVpZ2h0KSB7XG4gICAgICAgICAgdGhpcy5hZ0dyaWRFbC5jbGFzc0xpc3QuYWRkKGByb3ctaGVpZ2h0LSR7dGhpcy5ncmlkT3B0aW9ucy5yb3dIZWlnaHR9YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVPcHRpb25zKCkge1xuICAgIC8qKlxuICAgICAqIFdoZW4gdHJlZURhdGEgaXMgZW5hYmxlZCwgUGFnaW5hdGlvbiBtdXN0IGJlIHR1cm5lZCBvZmZcbiAgICAgKi9cbiAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy50cmVlRGF0YSkge1xuICAgICAgdGhpcy5ncmlkT3B0aW9ucyA9IHtcbiAgICAgICAgLi4udGhpcy5ncmlkT3B0aW9ucyxcbiAgICAgICAgcGFnaW5hdGlvbjogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGdyaWRPcHRpb25zOiB0aGlzLmdyaWRPcHRpb25zLFxuICAgICAgY3VzdG9tSGVhZGVyc1RlbXBsYXRlczogdGhpcy5jdXN0b21IZWFkZXJzVGVtcGxhdGVzLFxuICAgICAgcm93QWN0aW9uczogdGhpcy5yb3dBY3Rpb25zXG4gICAgfTtcblxuICAgIGxldCBub3JtYWxpemVkID0gdGhpcy5ncmlkU2VydmljZS5ub3JtYWxpemVPcHRpb25zKHBhcmFtcyk7XG4gICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICAuLi5kZWZhdWx0R3JpZE9wdGlvbnMsXG4gICAgICAuLi4odGhpcy5ncmlkT3B0aW9ucy50cmVlRGF0YSA/IGRlZmF1bHRUcmVlT3B0aW9ucyA6IHt9KSxcbiAgICAgIGljb25zOiB0aGlzLmdldEdyaWRJY29ucygpXG4gICAgfTtcbiAgICByZXR1cm4gZGVlcG1lcmdlKGRlZmF1bHRzLCBub3JtYWxpemVkKTtcbiAgfVxuXG4gIHNldEdyaWRSb3dzPFQ+KGRhdGE6IFRbXSkge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Um93czxUPihkYXRhKTtcbiAgfVxuXG4gIHNldEdyaWRGaWx0ZXJzKGZpbHRlcnM6IERhdG9HcmlkRXh0ZXJuYWxGaWx0ZXJbXSkge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0R3JpZEZpbHRlcnMoZmlsdGVycyk7XG4gIH1cblxuICBzZXRHcmlkU29ydChzb3J0OiBEYXRvR3JpZFNvcnQpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldEdyaWRTb3J0KHNvcnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRHcmlkSWNvbnMoKTogSGFzaE1hcDxzdHJpbmc+IHtcbiAgICBjb25zdCBtb3ZlQ29sdW1uSWNvbiA9IGA8c3BhbiBjbGFzcz1cImRhLWdyaWQtaWNvbiBwb2ludGVyIGQtZmxleCBjb2x1bW4tbW92ZVwiPiR7dGhpcy5pY29uUmVnaXN0cnkuZ2V0U3ZnKFxuICAgICAgJ21vdmUtY29sdW1uJ1xuICAgICl9PC9zcGFuPmA7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdyb3VwRXhwYW5kZWQ6IGA8c3BhbiBjbGFzcz1cImRhLWdyaWQtaWNvbiBwb2ludGVyIGdyb3VwLWV4cGFuZGVkLWljb25cIj4ke3RoaXMuaWNvblJlZ2lzdHJ5LmdldFN2ZyhcbiAgICAgICAgJ2Fycm93LXJpZ2h0J1xuICAgICAgKX08L3NwYW4+YCxcbiAgICAgIGdyb3VwQ29udHJhY3RlZDogYDxzcGFuIGNsYXNzPVwiZGEtZ3JpZC1pY29uIHBvaW50ZXIgZ3JvdXAtY29udHJhY3RlZC1pY29uXCI+JHt0aGlzLmljb25SZWdpc3RyeS5nZXRTdmcoXG4gICAgICAgICdhcnJvdy1yaWdodCdcbiAgICAgICl9PC9zcGFuPmAsXG4gICAgICBjb2x1bW5Nb3ZlUGluOiBgPHNwYW4gY2xhc3M9XCJkYS1ncmlkLWljb24gcG9pbnRlciBkLWZsZXggcHJpbWFyeS0zMDAtZmlsbCBjb2x1bW4tbW92ZS1waW5cIj4ke3RoaXMuaWNvblJlZ2lzdHJ5LmdldFN2ZyhcbiAgICAgICAgJ3BpbidcbiAgICAgICl9PC9zcGFuPmAsXG4gICAgICBjb2x1bW5Nb3ZlSGlkZTogYDxzcGFuIGNsYXNzPVwiZGEtZ3JpZC1pY29uIHBvaW50ZXIgZC1mbGV4IGNvbHVtbi1tb3ZlLWhpZGVcIj4ke3RoaXMuaWNvblJlZ2lzdHJ5LmdldFN2ZyhcbiAgICAgICAgJ2V5ZS1oaWRlJ1xuICAgICAgKX08L3NwYW4+YCxcbiAgICAgIGNvbHVtbk1vdmVNb3ZlOiBtb3ZlQ29sdW1uSWNvbixcbiAgICAgIGNvbHVtbk1vdmVMZWZ0OiBtb3ZlQ29sdW1uSWNvbixcbiAgICAgIGNvbHVtbk1vdmVSaWdodDogbW92ZUNvbHVtbkljb24sXG4gICAgICByb3dEcmFnOiBgPHNwYW4gY2xhc3M9XCJkYS1ncmlkLWljb24gZHJhZyBkLWZsZXhcIj4ke3RoaXMuaWNvblJlZ2lzdHJ5LmdldFN2ZygnZHJhZy0wMScpfTwvc3Bhbj5gXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJTZXR0aW5nc0xpc3RlbmVycyhhcGk6IERhdG9HcmlkQXBpLCBhZ0dyaWQ6IEFnR3JpZE5nMikge1xuICAgIHRoaXMubGlzdGVuVG9Db2x1bW5SZXNpemUoYXBpLCBhZ0dyaWQpO1xuICAgIHRoaXMubGlzdGVuVG9HcmlkRXZlbnRzKGFnR3JpZCk7XG4gICAgdGhpcy5saXN0ZW5Ub1N0b3JlU2V0dGluZ3NDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlblRvQ29sdW1uUmVzaXplKGFwaTogRGF0b0dyaWRBcGksIHsgY29sdW1uUmVzaXplZCB9OiBBZ0dyaWROZzIpIHtcbiAgICBsZXQgb2JzZXJ2YWJsZSA9IGNvbHVtblJlc2l6ZWQuYXNPYnNlcnZhYmxlKCk7XG4gICAgaWYgKHRoaXMub25Ib3ZlckVuYWJsZWQoKSkge1xuICAgICAgb2JzZXJ2YWJsZSA9IG9ic2VydmFibGUucGlwZShcbiAgICAgICAgZmlsdGVyKCh7IHNvdXJjZSB9OiBDb2x1bW5SZXNpemVkRXZlbnQpID0+IHNvdXJjZSA9PT0gJ3VpQ29sdW1uRHJhZ2dlZCcpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy51cGRhdGVPbkhvdmVyUG9zKCkpXG4gICAgICApO1xuICAgIH1cbiAgICBvYnNlcnZhYmxlXG4gICAgICAucGlwZShcbiAgICAgICAgYXVkaXRUaW1lKDEwMCksXG4gICAgICAgIGZpbHRlcigoeyBmaW5pc2hlZCwgc291cmNlIH06IENvbHVtblJlc2l6ZWRFdmVudCkgPT4gZmluaXNoZWQgJiYgc291cmNlID09PSAndWlDb2x1bW5EcmFnZ2VkJyksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGUgPT4ge1xuICAgICAgICBjb25zdCBbY29sdW1uXSA9IGUuY29sdW1ucztcbiAgICAgICAgbGV0IGNvbHVtbnNTaXplcyA9IHsgLi4udGhpcy5ncmlkUXVlcnkuZ2V0Q29sdW1uU2l6ZXMoKSB9O1xuICAgICAgICBpZiAoY29sdW1uc1NpemVzKSB7XG4gICAgICAgICAgY29sdW1uc1NpemVzW2NvbHVtbi5nZXRDb2xJZCgpXSA9IGNvbHVtbi5nZXRBY3R1YWxXaWR0aCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbHVtbnNTaXplcyA9IGdldENvbHVtbnNTaXplcyhhcGkuY29sdW1ucy5nZXRBbGxHcmlkQ29sdW1ucygpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnVwZGF0ZVNldHRpbmdzKHsgZ3JpZEFsaWdubWVudDogRGF0b0dyaWRBbGlnbm1lbnQuQ1VTVE9NLCBjb2x1bW5zU2l6ZXMgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuVG9HcmlkRXZlbnRzKGFnR3JpZDogQWdHcmlkTmcyKSB7XG4gICAgY29uc3QgeyBjb2x1bW5WaXNpYmxlLCBzb3J0Q2hhbmdlZCwgY29sdW1uUm93R3JvdXBDaGFuZ2VkLCBjb2x1bW5QaW5uZWQsIGRyYWdTdG9wcGVkLCBmaWx0ZXJDaGFuZ2VkIH0gPSBhZ0dyaWQ7XG4gICAgbWVyZ2UoY29sdW1uVmlzaWJsZSwgc29ydENoYW5nZWQsIGNvbHVtblJvd0dyb3VwQ2hhbmdlZCwgY29sdW1uUGlubmVkLCBkcmFnU3RvcHBlZCwgZmlsdGVyQ2hhbmdlZClcbiAgICAgIC5waXBlKFxuICAgICAgICAvKiBTa2lwIHRoZSBpbml0aWFsIHNvcnRpbmcgZXZlbnQgZmlyZWQgYnkgdGhlIGdyaWQgd2hlbiBhZGRpbmcgcm93cyAqL1xuICAgICAgICBza2lwKDEpLFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeyB0eXBlIH0pID0+IHtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3NEaWZmID0gdGhpcy5ncmlkU2VydmljZS5nZXRTZXR0aW5nc0RpZmYoKTtcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS51cGRhdGVTZXR0aW5ncyhzZXR0aW5nc0RpZmYpO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRHcmlkRGF0YSgpO1xuICAgICAgICB0aGlzLm9uR3JpZENoYW5nZS5lbWl0KHtcbiAgICAgICAgICBmaWx0ZXI6IHRoaXMuZ3JpZFF1ZXJ5LmdldEV4dGVybmFsRmlsdGVyKCksXG4gICAgICAgICAgc29ydDogdGhpcy5ncmlkUXVlcnkuZ2V0U29ydCgpLFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgZGF0YVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Ub1N0b3JlU2V0dGluZ3NDaGFuZ2VzKCkge1xuICAgIHRoaXMuZ3JpZFF1ZXJ5XG4gICAgICAuc2VsZWN0KHN0YXRlID0+IHN0YXRlLnNldHRpbmdzKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHNraXAoMSksXG4gICAgICAgIGRlYm91bmNlVGltZSgxMDAwKSxcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCBzZXR0aW5nc0RpZmYgPSB0aGlzLmdyaWRTZXJ2aWNlLmdldFNldHRpbmdzRGlmZigpO1xuICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNhdmVTZXR0aW5nc1RvU2VydmVyKHNldHRpbmdzRGlmZik7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJHcmlkTGlzdGVuZXJzKGFwaTogRGF0b0dyaWRBcGksIGFnR3JpZDogQWdHcmlkTmcyKSB7XG4gICAgdGhpcy5ncmlkRWxlbWVudHMgPSB7XG4gICAgICBjZW50ZXJDb250YWluZXI6IHF1ZXJ5KCcuYWctY2VudGVyLWNvbHMtY29udGFpbmVyJywgdGhpcy5hZ0dyaWRFbCksXG4gICAgICBjZW50ZXJWaWV3cG9ydDogcXVlcnkoJy5hZy1jZW50ZXItY29scy12aWV3cG9ydCcsIHRoaXMuYWdHcmlkRWwpLFxuICAgICAgYm9keVZpZXdwb3J0OiBxdWVyeSgnLmFnLWJvZHktdmlld3BvcnQnLCB0aGlzLmFnR3JpZEVsKVxuICAgIH07XG4gICAgdGhpcy5yZWdpc3RlckdyaWRDbGlja0xpc3RlbmVyKGFwaS5ncmlkKTtcbiAgICB0aGlzLnJlZ2lzdGVyR3JpZEdyb3VwTGlzdGVuZXJzKGFnR3JpZCk7XG4gICAgdGhpcy5yZWdpc3RlckdyaWRNb3VzZUxpc3RlbmVycyhhZ0dyaWQpO1xuICAgIHRoaXMucmVnaXN0ZXJHcmlkS2V5Ym9hcmRMaXN0ZW5lcihhcGkpO1xuICAgIHRoaXMucmVnaXN0ZXJXaW5kb3dSZXNpemVMaXN0ZW5lcigpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlckdyaWRHcm91cExpc3RlbmVycyhhZ0dyaWQ6IEFnR3JpZE5nMikge1xuICAgIC8qIE1ha2UgZ3JvdXAgZXhwYW5kL2NvbGxhcHNlIG9uIGEgc2luZ2xlIGNsaWNrIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgZG91YmxlIGNsaWNrICovXG4gICAgYWdHcmlkLmNvbHVtblJvd0dyb3VwQ2hhbmdlZFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeyBjb2x1bW5zIH06IENvbHVtblJvd0dyb3VwQ2hhbmdlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbHVtbnMubGVuZ3RoID09PSAwXG4gICAgICAgICAgICA/IEVNUFRZXG4gICAgICAgICAgICA6IGFnR3JpZC5jZWxsQ2xpY2tlZC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoeyB2YWx1ZSwgbm9kZSB9OiBDZWxsQ2xpY2tlZEV2ZW50KSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIG5vZGUuZ3JvdXAgPT09IHRydWUpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeyBub2RlIH06IENlbGxDbGlja2VkRXZlbnQpID0+IHtcbiAgICAgICAgbm9kZS5zZXRFeHBhbmRlZCghbm9kZS5leHBhbmRlZCk7XG4gICAgICB9KTtcbiAgICAvKiBXaGVuIGNsb3NpbmcgYSBncm91cGVkIHJvdyB3ZSB3YW50IHRvIGhpZGUgdGhlIG9uIGhvdmVyIGFjdGlvbnMgKi9cbiAgICBpZiAodGhpcy5vbkhvdmVyRW5hYmxlZCgpKSB7XG4gICAgICBhZ0dyaWQucm93R3JvdXBPcGVuZWRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKCh7IG5vZGUgfTogUm93R3JvdXBPcGVuZWRFdmVudCkgPT4gbm9kZS5leHBhbmRlZCA9PT0gZmFsc2UpLFxuICAgICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sYXN0SG92ZXJlZFJvdyA9IG51bGw7XG4gICAgICAgICAgdGhpcy5zZXRPbkhvdmVyU3RhdGUoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBjbGljayB3YXMgcGVyZm9ybWVkIG9uIHRoZSBncmlkcyBib2R5IGFuZCBub3QgYSByb3csIGNsZWFyIHRoZSByb3dzIHNlbGVjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSByZWdpc3RlckdyaWRDbGlja0xpc3RlbmVyKGFwaTogR3JpZEFwaSkge1xuICAgIGNvbnN0IHsgYm9keVZpZXdwb3J0LCBjZW50ZXJWaWV3cG9ydCB9ID0gdGhpcy5ncmlkRWxlbWVudHM7XG4gICAgZnJvbUV2ZW50KGJvZHlWaWV3cG9ydCwgJ2NsaWNrJylcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChldmVudC50YXJnZXQgPT09IGJvZHlWaWV3cG9ydCB8fCBldmVudC50YXJnZXQgPT09IGNlbnRlclZpZXdwb3J0KSAmJiBhcGkuZ2V0U2VsZWN0ZWRSb3dzKCkubGVuZ3RoID4gMDtcbiAgICAgICAgfSksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IGFwaS5kZXNlbGVjdEFsbCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Ib3ZlckVuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZE9wdGlvbnMuaG92ZXJDb25maWcuZW5hYmxlZCAmJiB0aGlzLnJvd0FjdGlvbnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJHcmlkTW91c2VMaXN0ZW5lcnMoYWdHcmlkOiBBZ0dyaWROZzIpIHtcbiAgICBjb25zdCB7IGJvZHlWaWV3cG9ydCwgY2VudGVyQ29udGFpbmVyIH0gPSB0aGlzLmdyaWRFbGVtZW50cztcbiAgICBsZXQgbGFzdEhvdmVyZWRDZWxsO1xuICAgIGNvbnN0IG9uSG92ZXJFbmFibGVkID0gdGhpcy5vbkhvdmVyRW5hYmxlZCgpO1xuICAgIGlmIChvbkhvdmVyRW5hYmxlZCkge1xuICAgICAgZnJvbUV2ZW50KGNlbnRlckNvbnRhaW5lciwgJ21vdXNlbGVhdmUnKVxuICAgICAgICAucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy50b2dnbGVSb3dIb3ZlckNsYXNzKHRoaXMubGFzdEhvdmVyZWRSb3cpO1xuICAgICAgICAgIHRoaXMubGFzdEhvdmVyZWRSb3cgPSBudWxsO1xuICAgICAgICAgIHRoaXMuc2V0T25Ib3ZlclN0YXRlKGZhbHNlKTtcbiAgICAgICAgICBsYXN0SG92ZXJlZENlbGwgPSBudWxsO1xuICAgICAgICB9KTtcbiAgICAgIG1lcmdlKFxuICAgICAgICBhZ0dyaWQuYm9keVNjcm9sbC5waXBlKGZpbHRlcigoeyBkaXJlY3Rpb24gfTogQm9keVNjcm9sbEV2ZW50KSA9PiBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJykpLFxuICAgICAgICBhZ0dyaWQucm93RGF0YUNoYW5nZWRcbiAgICAgIClcbiAgICAgICAgLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlT25Ib3ZlclBvcygpO1xuICAgICAgICB9KTtcbiAgICAgIHRoaXMuYWRkT25Ib3ZlckVsZW1lbnQoKTtcbiAgICB9XG4gICAgYWdHcmlkLmNlbGxNb3VzZU92ZXJcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKHsgbm9kZSwgY29sdW1uIH0pID0+IGxhc3RIb3ZlcmVkQ2VsbCAhPT0gYCR7bm9kZS5pZH0tJHtjb2x1bW4uZ2V0Q29sSWQoKX1gKSxcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBDZWxsTW91c2VPdXRFdmVudCkgPT4ge1xuICAgICAgICBsYXN0SG92ZXJlZENlbGwgPSBgJHtldmVudC5ub2RlLmlkfS0ke2V2ZW50LmNvbHVtbi5nZXRDb2xJZCgpfWA7XG4gICAgICAgIHRoaXMuc2hvd1Rvb2x0aXAoZXZlbnQpO1xuICAgICAgICBjb25zdCByb3cgPSAoZXZlbnQuZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5wYXJlbnRFbGVtZW50O1xuICAgICAgICBpZiAob25Ib3ZlckVuYWJsZWQgJiYgKGV2ZW50Lm5vZGUuZ3JvdXAgPT09IGZhbHNlIHx8IGlzTmlsKGV2ZW50Lm5vZGUuZ3JvdXApKSAmJiB0aGlzLmxhc3RIb3ZlcmVkUm93ICE9PSByb3cpIHtcbiAgICAgICAgICBjb25zdCBwcmV2aW91c05vZGUgPSB0aGlzLmxhc3RIb3ZlcmVkUm93O1xuICAgICAgICAgIHRoaXMubGFzdEhvdmVyZWRSb3cgPSByb3c7XG4gICAgICAgICAgdGhpcy50b2dnbGVSb3dIb3ZlckNsYXNzKFtwcmV2aW91c05vZGUsIHRoaXMubGFzdEhvdmVyZWRSb3ddKTtcbiAgICAgICAgICB0aGlzLnNldE9uSG92ZXJTdGF0ZSh0cnVlLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIGNvbnN0IG9uVG9vbHRpcE91dCA9IG1lcmdlKFxuICAgICAgZnJvbUV2ZW50KGJvZHlWaWV3cG9ydCwgJ3Njcm9sbCcpLFxuICAgICAgZnJvbUV2ZW50KHRoaXMuYWdHcmlkRWwsICdtb3VzZWxlYXZlJyksXG4gICAgICBhZ0dyaWQuY2VsbE1vdXNlT3V0XG4gICAgKTtcbiAgICBvblRvb2x0aXBPdXRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKCkgPT4gIWlzTmlsKHRoaXMudG9vbHRpcCkpLFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xlYXJUb29sdGlwKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwb3NlIHRoZSB0b29sdGlwXG4gICAqL1xuICBjbGVhclRvb2x0aXAoKTogdm9pZCB7XG4gICAgdGhpcy50b29sdGlwLmRpc3Bvc2UoKTtcbiAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93VG9vbHRpcChldmVudDogQ2VsbEV2ZW50KSB7XG4gICAgY29uc3QgY2VsbDogSFRNTEVsZW1lbnQgPSBldmVudC5ldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgdGV4dE92ZXJmbG93ID0gY2VsbC5vZmZzZXRXaWR0aCA8IGNlbGwuc2Nyb2xsV2lkdGg7XG4gICAgaWYgKHRleHRPdmVyZmxvdykge1xuICAgICAgY29uc3QgcGFyYW1zID0geyBjZWxsLCB2YWx1ZTogY2VsbC5pbm5lclRleHQgfTtcbiAgICAgIGlzTmlsKHRoaXMudG9vbHRpcCkgPyB0aGlzLmNyZWF0ZUFuZFNob3dUb29sdGlwKHBhcmFtcykgOiB0aGlzLnVwZGF0ZVRvb2x0aXAocGFyYW1zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUFuZFNob3dUb29sdGlwKHsgY2VsbCwgdmFsdWUgfSkge1xuICAgIHRoaXMudG9vbHRpcCA9IG5ldyBUb29sdGlwKGNlbGwsIHtcbiAgICAgIHBsYWNlbWVudDogJ3RvcCcsXG4gICAgICBjb250YWluZXI6IGRvY3VtZW50LmJvZHksXG4gICAgICB0cmlnZ2VyOiAnbWFudWFsJyxcbiAgICAgIHRpdGxlOiBET01QdXJpZnkuc2FuaXRpemUodmFsdWUpLFxuICAgICAgaHRtbDogdHJ1ZSxcbiAgICAgIHBvcHBlck9wdGlvbnM6IHtcbiAgICAgICAgbW9kaWZpZXJzOiB7XG4gICAgICAgICAgcHJldmVudE92ZXJmbG93OiB7IGVuYWJsZWQ6IGZhbHNlIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRlbXBsYXRlOlxuICAgICAgICAnPGRpdiBjbGFzcz1cInRvb2x0aXAgZGF0by10b29sdGlwIGNvbW1vbi10b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIj48ZGl2IGNsYXNzPVwidG9vbHRpcC1hcnJvd1wiPjwvZGl2PjxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+PC9kaXY+J1xuICAgIH0pO1xuXG4gICAgdGhpcy50b29sdGlwLnNob3coKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHRvb2x0aXAgZWxlbWVudCByZWYgYW5kIGNvbnRlbnRcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlVG9vbHRpcCh7IGNlbGwsIHZhbHVlIH0pOiB2b2lkIHtcbiAgICBpZiAoY2VsbCAhPT0gdGhpcy50b29sdGlwLnJlZmVyZW5jZSkge1xuICAgICAgdGhpcy50b29sdGlwLnJlZmVyZW5jZSA9IGNlbGw7XG4gICAgICB0aGlzLnRvb2x0aXAucG9wcGVySW5zdGFuY2UucmVmZXJlbmNlID0gY2VsbDtcbiAgICAgIHRoaXMudG9vbHRpcC51cGRhdGVUaXRsZUNvbnRlbnQodmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLnRvb2x0aXAuc2hvdygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRPbkhvdmVyRWxlbWVudCgpIHtcbiAgICB0aGlzLnJvd0hvdmVyQ29tcG9uZW50ID0gY3JlYXRlQ29tcG9uZW50PERhdG9HcmlkT25Ib3ZlckNvbXBvbmVudD4oe1xuICAgICAgY29tcG9uZW50OiBEYXRvR3JpZE9uSG92ZXJDb21wb25lbnQsXG4gICAgICBpbmplY3RvcjogdGhpcy5pbmplY3RvcixcbiAgICAgIHJlc29sdmVyOiB0aGlzLnJlc29sdmVyXG4gICAgfSk7XG4gICAgY29uc3QgeyBpbnN0YW5jZSwgaG9zdFZpZXcgfSA9IHRoaXMucm93SG92ZXJDb21wb25lbnQ7XG4gICAgaW5zdGFuY2UuY29uZmlnID0geyAuLi50aGlzLmdyaWRPcHRpb25zLmhvdmVyQ29uZmlnLCBhY3Rpb25zOiB0aGlzLnJvd0FjdGlvbnMuc2xpY2UoKSB9O1xuICAgIGhvc3RWaWV3LmRldGVjdENoYW5nZXMoKTtcbiAgICBhcHBlbmRDaGlsZCh0aGlzLmdyaWRFbGVtZW50cy5jZW50ZXJDb250YWluZXIsIHRoaXMucm93SG92ZXJFbCk7XG4gIH1cblxuICBwcml2YXRlIGdldCByb3dIb3ZlckVsKCkge1xuICAgIHJldHVybiB0aGlzLnJvd0hvdmVyQ29tcG9uZW50LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIHNldE9uSG92ZXJTdGF0ZSh2aXNpYmxlOiBib29sZWFuLCBldmVudD86IENlbGxNb3VzZU91dEV2ZW50KSB7XG4gICAgY29uc3QgeyBpbnN0YW5jZSB9ID0gdGhpcy5yb3dIb3ZlckNvbXBvbmVudDtcbiAgICBpZiAodmlzaWJsZSkge1xuICAgICAgaW5zdGFuY2Uuc2hvdyhldmVudCk7XG4gICAgICB0aGlzLnVwZGF0ZU9uSG92ZXJQb3MoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdGFuY2UuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlT25Ib3ZlclBvcygpIHtcbiAgICBjb25zdCB7IGNlbnRlclZpZXdwb3J0LCBjZW50ZXJDb250YWluZXIgfSA9IHRoaXMuZ3JpZEVsZW1lbnRzO1xuICAgIGNvbnN0IHRhcmdldCA9IGNlbnRlckNvbnRhaW5lci5jbGllbnRXaWR0aCA+IGNlbnRlclZpZXdwb3J0LmNsaWVudFdpZHRoID8gY2VudGVyVmlld3BvcnQgOiBjZW50ZXJDb250YWluZXI7XG4gICAgY29uc3QgeyBjbGllbnRXaWR0aCwgc2Nyb2xsTGVmdCB9ID0gdGFyZ2V0O1xuICAgIHRoaXMucm93SG92ZXJDb21wb25lbnQuaW5zdGFuY2UudXBkYXRlU2Nyb2xsUG9zKGNsaWVudFdpZHRoICsgc2Nyb2xsTGVmdCk7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZVJvd0hvdmVyQ2xhc3Mocm93czogSFRNTEVsZW1lbnQgfCBIVE1MRWxlbWVudFtdKSB7XG4gICAgY29lcmNlQXJyYXkocm93cykuZm9yRWFjaChyb3cgPT4gcm93ICYmIHJvdy5jbGFzc0xpc3QudG9nZ2xlKCdhY3Rpb25zLWhvdmVyZWQnKSk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyR3JpZEtleWJvYXJkTGlzdGVuZXIoeyBncmlkLCBjb2x1bW5zIH06IERhdG9HcmlkQXBpKSB7XG4gICAgdGhpcy5ob3RrZXlzXG4gICAgICAuYWRkU2hvcnRjdXQoe1xuICAgICAgICBlbGVtZW50OiB0aGlzLmFnR3JpZEVsLFxuICAgICAgICBrZXlzOiAnbWV0YS5hJyxcbiAgICAgICAgaWdub3JlSW5FZGl0YWJsZTogdHJ1ZVxuICAgICAgfSlcbiAgICAgIC5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2VsZWN0QWxsQ3VycmVudFBhZ2VSb3dzKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJXaW5kb3dSZXNpemVMaXN0ZW5lcigpIHtcbiAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuZ3JpZFF1ZXJ5LmdyaWRBbGlnbm1lbnQgIT09IERhdG9HcmlkQWxpZ25tZW50LkNVU1RPTSksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29uc3QgZml0VG8gPSB0aGlzLmdyaWRRdWVyeS5ncmlkQWxpZ25tZW50ID09PSBEYXRvR3JpZEFsaWdubWVudC5GSVRfVE9fQ09OVEFJTkVSID8gJ2NvbnRhaW5lcicgOiAnY29udGVudCc7XG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuZml0R3JpZChmaXRUbyk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0R3JpZERhdGEoKSB7XG4gICAgY29uc3QgZ3JpZE1vZGVsID0gdGhpcy5ncmlkU2VydmljZS5hcGkuZ3JpZC5nZXRNb2RlbCgpIGFzIGFueTtcbiAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy50cmVlRGF0YSkge1xuICAgICAgY29uc3QgZ3JpZERhdGEgPSBncmlkTW9kZWwucm93c1RvRGlzcGxheS5tYXAoKHsgZGF0YSB9KSA9PiBkYXRhKTtcbiAgICAgIHJldHVybiBjb252ZXJ0RnJvbVRyZWVEYXRhKGdyaWREYXRhLCB0aGlzLmdyaWRTZXJ2aWNlLnRyZWVDb25maWcpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ3JpZE1vZGVsLnJvd3NUb0Rpc3BsYXk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlckV2ZW50c1RyaWdnZXJpbmdDbGVhclNlbGVjdGVkUm93cyhhZ0dyaWQ6IEFnR3JpZE5nMikge1xuICAgIGNvbnN0IGV2ZW50cyQgPSB0aGlzLmdyaWRRdWVyeS5pc1NlcnZlclNpZGVcbiAgICAgID8gbWVyZ2UoYWdHcmlkLnNvcnRDaGFuZ2VkLCBhZ0dyaWQuZmlsdGVyQ2hhbmdlZClcbiAgICAgIDogYWdHcmlkLmZpbHRlckNoYW5nZWQ7XG4gICAgKGV2ZW50cyQgYXMgT2JzZXJ2YWJsZTxhbnk+KS5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5ncmlkU2VydmljZS5kZXNlbGVjdEFsbFJvd3MoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJQYWdpbmF0aW9uQ2hhbmdlZChhZ0dyaWQ6IEFnR3JpZE5nMikge1xuICAgIGlmICghdGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTaWRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGFnR3JpZC5wYWdpbmF0aW9uQ2hhbmdlZC5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JpZFF1ZXJ5LmlzU2VydmVyU2VsZWN0QWxsUm93c0VuYWJsZWQpIHtcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zZWxlY3RBbGxDdXJyZW50UGFnZVJvd3ModHJ1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
519
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1jb250cm9sbGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC1jb250cm9sbGVyL2dyaWQtY29udHJvbGxlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBWXhELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUlyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBRzNHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBa0Is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TixRQUFRO2dCQUNSLHdCQUF3QjtnQkFDekIsV0FBVztnREFDM0IsTUFBTSxTQUFDLHFCQUFxQjs7SUFsRHFCO1FBQW5ELGVBQWUsQ0FBQyxpQ0FBaUMsQ0FBQztrQ0FBeUIsU0FBUzsrRUFFbkY7SUFFUTtRQUFULE1BQU0sRUFBRTs7cUVBQW9EO0lBQ3BEO1FBQVIsS0FBSyxFQUFFOzttRUFBOEI7SUFDN0I7UUFBUixLQUFLLEVBQUU7O29FQUFnQztJQUMvQjtRQUFSLEtBQUssRUFBRTs7O2tFQVlQO0lBcEJVLDJCQUEyQjtRQVR2QyxTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsc0JBQXNCO1lBQ2hDLFFBQVEsRUFBRSxxQ0FFVDtZQUVELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO1lBQy9DLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDOztTQUMvQyxDQUFDO1FBb0RHLFdBQUEsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUE7eUNBVFYsV0FBVztZQUNiLFNBQVM7WUFDZCxpQkFBaUI7WUFDUixZQUFZO1lBQ2Ysb0JBQW9CO1lBQ3pCLFVBQVU7WUFDTixRQUFRO1lBQ1Isd0JBQXdCO1lBQ3pCLFdBQVc7T0FsRG5CLDJCQUEyQixDQStldkM7SUFBRCxrQ0FBQztDQUFBLEFBL2VELElBK2VDO1NBL2VZLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBEYXRvcmFtYS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBBcGFjaGUgTGljZW5zZSAyLjAgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZGF0b3JhbWEvY2xpZW50LWNvcmUvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIENvbXBvbmVudFJlZixcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgRU1QVFksIGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBZ0dyaWROZzIgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xuaW1wb3J0IHsgdW50aWxEZXN0cm95ZWQgfSBmcm9tICduZ3gtdGFrZS11bnRpbC1kZXN0cm95JztcbmltcG9ydCB7XG4gIEJvZHlTY3JvbGxFdmVudCxcbiAgQ2VsbENsaWNrZWRFdmVudCxcbiAgQ2VsbEV2ZW50LFxuICBDZWxsTW91c2VPdXRFdmVudCxcbiAgQ29sdW1uUmVzaXplZEV2ZW50LFxuICBDb2x1bW5Sb3dHcm91cENoYW5nZWRFdmVudCxcbiAgRGV0YWlsR3JpZEluZm8sXG4gIEdyaWRBcGksXG4gIFJvd0dyb3VwT3BlbmVkRXZlbnRcbn0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgR3JpZFF1ZXJ5IH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnF1ZXJ5JztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0Q29sdW1uc1NpemVzIH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS91dGlsJztcbmltcG9ydCB7IEdyaWRTdG9yZSB9IGZyb20gJy4uL2dyaWQtc3RvcmUvZ3JpZC5zdG9yZSc7XG5pbXBvcnQgeyBEYXRvR3JpZFNldHRpbmdzIH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnN0b3JlLnR5cGVzJztcbmltcG9ydCB7IERhdG9HcmlkQXBpIH0gZnJvbSAnLi9ncmlkLWNvbnRyb2xsZXIudHlwZXMnO1xuaW1wb3J0IHsgRGF0b0dyaWRBbGlnbm1lbnQsIERhdG9HcmlkT3B0aW9ucywgRGF0b0dyaWRTb3J0LCBHcmlkQ2hhbmdlRXZlbnQgfSBmcm9tICcuLi9ncmlkL2dyaWQtdjIudHlwZXMnO1xuaW1wb3J0IHsgSWNvblJlZ2lzdHJ5IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaWNvbi1yZWdpc3RyeSc7XG5pbXBvcnQgeyBkZWVwbWVyZ2UgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC9kZWVwLW1lcmdlJztcbmltcG9ydCB7IERhdG9DdXN0b21IZWFkZXJUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQtY3VzdG9tLWhlYWRlci9jdXN0b20taGVhZGVyLXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIYXNoTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgR3JpZEFjdGlvbiwgUm93QWN0aW9uIH0gZnJvbSAnLi4vZ3JpZC10b29sYmFyL2dyaWQtdG9vbGJhci50eXBlcyc7XG5pbXBvcnQgeyBEYXRvVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IERBVE9fR1JJRF9TVE9SQUdFX0FQSSwgR3JpZFN0b3JhZ2VBUEkgfSBmcm9tICcuLi9ncmlkLXNldHRpbmdzJztcbmltcG9ydCB7IGF1ZGl0VGltZSwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIHNraXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgYWRkQ2xhc3MsIGFwcGVuZENoaWxkLCBxdWVyeSB9IGZyb20gJy4uLy4uL2ludGVybmFsL2hlbHBlcnMnO1xuaW1wb3J0IFRvb2x0aXAgZnJvbSAndG9vbHRpcC5qcyc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uLy4uL3V0aWxzL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgY3JlYXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYW5ndWxhci9keW5hbWljLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgRGF0b0dyaWRPbkhvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1vbi1ob3Zlci9ncmlkLW9uLWhvdmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjb252ZXJ0RnJvbVRyZWVEYXRhLCBkZWZhdWx0R3JpZE9wdGlvbnMsIGRlZmF1bHRUcmVlT3B0aW9ucyB9IGZyb20gJy4uL2dyaWQvZ3JpZC12Mi5jb25maWcnO1xuaW1wb3J0IHsgY29lcmNlQXJyYXkgfSBmcm9tICcuLi8uLi91dGlscy9jb2VyY2lvbic7XG5pbXBvcnQgeyBEYXRvSG90a2V5cyB9IGZyb20gJy4uLy4uL2hvdGtleXMvaG90a2V5cy5zZXJ2aWNlJztcbmltcG9ydCBET01QdXJpZnkgZnJvbSAnZG9tcHVyaWZ5JztcbmltcG9ydCB7IERhdG9HcmlkRXh0ZXJuYWxGaWx0ZXIgfSBmcm9tICcuLi9ncmlkLWZpbHRlci9ncmlkLWZpbHRlci50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdG8tZ3JpZC1jb250cm9sbGVyJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2dyaWQtY29udHJvbGxlci5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbR3JpZFF1ZXJ5LCBHcmlkU2VydmljZSwgR3JpZFN0b3JlXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRvR3JpZENvbnRyb2xsZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXQge1xuICBAQ29udGVudENoaWxkcmVuKERhdG9DdXN0b21IZWFkZXJUZW1wbGF0ZUNvbXBvbmVudCkgY3VzdG9tSGVhZGVyc1RlbXBsYXRlczogUXVlcnlMaXN0PFxuICAgIERhdG9DdXN0b21IZWFkZXJUZW1wbGF0ZUNvbXBvbmVudFxuICA+O1xuXG4gIEBPdXRwdXQoKSBvbkdyaWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEdyaWRDaGFuZ2VFdmVudD4oKTtcbiAgQElucHV0KCkgcm93QWN0aW9uczogUm93QWN0aW9uW10gPSBbXTtcbiAgQElucHV0KCkgZ3JpZEFjdGlvbnM6IEdyaWRBY3Rpb25bXSA9IFtdO1xuICBASW5wdXQoKSBzZXQgZ3JpZE9wdGlvbnMoZ3JpZE9wdGlvbnM6IERhdG9HcmlkT3B0aW9ucykge1xuICAgIHRoaXMuX2dyaWRPcHRpb25zID0gZ3JpZE9wdGlvbnM7XG4gICAgdGhpcy5ncmlkU2VydmljZS50cmVlRGF0YSA9IGdyaWRPcHRpb25zLnRyZWVEYXRhO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuaXNQaXZvdE1vZGUgPSBncmlkT3B0aW9ucy5waXZvdE1vZGU7XG5cbiAgICBpZiAodGhpcy5hZ0dyaWRFbCkge1xuICAgICAgaWYgKGdyaWRPcHRpb25zLnRyZWVEYXRhKSB7XG4gICAgICAgICF0aGlzLmFnR3JpZEVsLmNsYXNzTGlzdC5jb250YWlucyh0aGlzLnRyZWVHcmlkQ2xhc3MpICYmIHRoaXMuYWdHcmlkRWwuY2xhc3NMaXN0LmFkZCh0aGlzLnRyZWVHcmlkQ2xhc3MpO1xuICAgICAgfSBlbHNlIGlmICghZ3JpZE9wdGlvbnMuZW5hYmxlVjJfMSkge1xuICAgICAgICB0aGlzLmFnR3JpZEVsLmNsYXNzTGlzdC5hZGQodGhpcy50cmVlR3JpZENsYXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgZ3JpZE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dyaWRPcHRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBjb250ZW50SW5pdCA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgdG9vbHRpcDtcbiAgcHJpdmF0ZSBfZ3JpZE9wdGlvbnM6IERhdG9HcmlkT3B0aW9ucztcbiAgZ3JpZFJlYWR5JCA9IHRoaXMuZ3JpZFF1ZXJ5LmdyaWRSZWFkeSQ7XG4gIGFnR3JpZEVsOiBIVE1MRWxlbWVudDtcblxuICBwcml2YXRlIHJvd0hvdmVyQ29tcG9uZW50OiBDb21wb25lbnRSZWY8RGF0b0dyaWRPbkhvdmVyQ29tcG9uZW50PjtcbiAgcHJpdmF0ZSBsYXN0SG92ZXJlZFJvdzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgZ3JpZEVsZW1lbnRzID0ge1xuICAgIGNlbnRlclZpZXdwb3J0OiBudWxsLFxuICAgIGNlbnRlckNvbnRhaW5lcjogbnVsbCxcbiAgICBib2R5Vmlld3BvcnQ6IG51bGxcbiAgfTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmVlR3JpZENsYXNzID0gJ3RyZWUnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBncmlkU2VydmljZTogR3JpZFNlcnZpY2UsXG4gICAgcHVibGljIGdyaWRRdWVyeTogR3JpZFF1ZXJ5LFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGljb25SZWdpc3RyeTogSWNvblJlZ2lzdHJ5LFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBEYXRvVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGhvc3Q6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgaG90a2V5czogRGF0b0hvdGtleXMsXG4gICAgQEluamVjdChEQVRPX0dSSURfU1RPUkFHRV9BUEkpIHByaXZhdGUgc3RvcmFnZUFQSTogR3JpZFN0b3JhZ2VBUElcbiAgKSB7fVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY29udGVudEluaXQuY29tcGxldGUoKTtcbiAgICB0aGlzLnRvb2x0aXAgJiYgdGhpcy5jbGVhclRvb2x0aXAoKTtcbiAgICB0aGlzLnJvd0hvdmVyQ29tcG9uZW50ICYmIHRoaXMucm93SG92ZXJDb21wb25lbnQuZGVzdHJveSgpO1xuICAgIHRoaXMucm93SG92ZXJDb21wb25lbnQgPSBudWxsO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuY29udGVudEluaXQubmV4dCgpO1xuICAgIHRoaXMuY29udGVudEluaXQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qIEBpbnRlcm5hbCAqL1xuICBfaW5pdGlhbGl6ZUdyaWQoYWdHcmlkOiBBZ0dyaWROZzIsIGFnR3JpZEVsOiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMuYWdHcmlkRWwgPSBhZ0dyaWRFbDtcbiAgICB0aGlzLmNvbnRlbnRJbml0XG4gICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMgPSB0aGlzLm5vcm1hbGl6ZU9wdGlvbnMoKTtcbiAgICAgICAgICBhZ0dyaWQuZ3JpZE9wdGlvbnMgPSB0aGlzLmdyaWRPcHRpb25zO1xuICAgICAgICAgIGNvbnN0IHNldHRpbmdzTG9hZGVyID1cbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2F2ZVNldHRpbmdzID09PSBmYWxzZSA/IG9mKG51bGwpIDogdGhpcy5zdG9yYWdlQVBJLmdldCh0aGlzLmdyaWRPcHRpb25zLmdyaWROYW1lKTtcbiAgICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbYWdHcmlkLmdyaWRSZWFkeSwgc2V0dGluZ3NMb2FkZXJdKTtcbiAgICAgICAgfSksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChbeyBhcGksIGNvbHVtbkFwaSB9LCBzYXZlZFNldHRpbmdzID0ge31dOiBbRGV0YWlsR3JpZEluZm8sIFBhcnRpYWw8RGF0b0dyaWRTZXR0aW5ncz5dKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkT3B0aW9ucy5yb3dEYXRhKSB7XG4gICAgICAgICAgYXBpLnNob3dMb2FkaW5nT3ZlcmxheSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5ncmlkT3B0aW9ucy5zdGF0dXNCYXIpIHtcbiAgICAgICAgICAvKiogRml4IGFnLWdyaWQgYnVnIHRoYXQgZG9lc24ndCBhZGQgYWctaGlkZGVuIGNsYXNzIHRvIHRoZSBzdGF0dXMgYmFyLCB3aGljaCBvbmx5IGdldCBmaXhlZCBpbiBsYXRlciB2ZXJzaW9ucyAqL1xuICAgICAgICAgIGNvbnN0IGVsID0gYWdHcmlkRWwucXVlcnlTZWxlY3RvcignLmFnLXN0YXR1cy1iYXInKTtcblxuICAgICAgICAgIGFkZENsYXNzKGVsLCAnYWctaGlkZGVuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ3JpZEFwaTogRGF0b0dyaWRBcGkgPSB7IGdyaWQ6IGFwaSwgY29sdW1uczogY29sdW1uQXBpIH07XG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuX3NldEFwaShncmlkQXBpLCBhZ0dyaWQpO1xuICAgICAgICB0aGlzLmdyaWRRdWVyeS5fc2V0QXBpKGdyaWRBcGksIGFnR3JpZCk7XG5cbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5pbml0U2V0dGluZ3Moc2F2ZWRTZXR0aW5ncyB8fCB7fSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJTZXR0aW5nc0xpc3RlbmVycyhncmlkQXBpLCBhZ0dyaWQpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyR3JpZExpc3RlbmVycyhncmlkQXBpLCBhZ0dyaWQpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRXZlbnRzVHJpZ2dlcmluZ0NsZWFyU2VsZWN0ZWRSb3dzKGFnR3JpZCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJQYWdpbmF0aW9uQ2hhbmdlZChhZ0dyaWQpO1xuICAgICAgICB0aGlzLmdyaWRRdWVyeS5fZ3JpZFJlYWR5Lm5leHQodHJ1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMudHJlZURhdGEpIHtcbiAgICAgICAgICB0aGlzLmFnR3JpZEVsLmNsYXNzTGlzdC5hZGQoJ3RyZWUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5yb3dIZWlnaHQpIHtcbiAgICAgICAgICB0aGlzLmFnR3JpZEVsLmNsYXNzTGlzdC5hZGQoYHJvdy1oZWlnaHQtJHt0aGlzLmdyaWRPcHRpb25zLnJvd0hlaWdodH1gKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZU9wdGlvbnMoKSB7XG4gICAgLyoqXG4gICAgICogV2hlbiB0cmVlRGF0YSBpcyBlbmFibGVkLCBQYWdpbmF0aW9uIG11c3QgYmUgdHVybmVkIG9mZlxuICAgICAqL1xuICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLnRyZWVEYXRhKSB7XG4gICAgICB0aGlzLmdyaWRPcHRpb25zID0ge1xuICAgICAgICAuLi50aGlzLmdyaWRPcHRpb25zLFxuICAgICAgICBwYWdpbmF0aW9uOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgZ3JpZE9wdGlvbnM6IHRoaXMuZ3JpZE9wdGlvbnMsXG4gICAgICBjdXN0b21IZWFkZXJzVGVtcGxhdGVzOiB0aGlzLmN1c3RvbUhlYWRlcnNUZW1wbGF0ZXMsXG4gICAgICByb3dBY3Rpb25zOiB0aGlzLnJvd0FjdGlvbnNcbiAgICB9O1xuXG4gICAgbGV0IG5vcm1hbGl6ZWQgPSB0aGlzLmdyaWRTZXJ2aWNlLm5vcm1hbGl6ZU9wdGlvbnMocGFyYW1zKTtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgIC4uLmRlZmF1bHRHcmlkT3B0aW9ucyxcbiAgICAgIC4uLih0aGlzLmdyaWRPcHRpb25zLnRyZWVEYXRhID8gZGVmYXVsdFRyZWVPcHRpb25zIDoge30pLFxuICAgICAgaWNvbnM6IHRoaXMuZ2V0R3JpZEljb25zKClcbiAgICB9O1xuICAgIHJldHVybiBkZWVwbWVyZ2UoZGVmYXVsdHMsIG5vcm1hbGl6ZWQpO1xuICB9XG5cbiAgc2V0R3JpZFJvd3M8VD4oZGF0YTogVFtdKSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5zZXRSb3dzPFQ+KGRhdGEpO1xuICB9XG5cbiAgc2V0R3JpZEZpbHRlcnMoZmlsdGVyczogRGF0b0dyaWRFeHRlcm5hbEZpbHRlcltdKSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5zZXRHcmlkRmlsdGVycyhmaWx0ZXJzKTtcbiAgfVxuXG4gIHNldEdyaWRTb3J0KHNvcnQ6IERhdG9HcmlkU29ydCkge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0R3JpZFNvcnQoc29ydCk7XG4gIH1cblxuICBwcml2YXRlIGdldEdyaWRJY29ucygpOiBIYXNoTWFwPHN0cmluZz4ge1xuICAgIGNvbnN0IG1vdmVDb2x1bW5JY29uID0gYDxzcGFuIGNsYXNzPVwiZGEtZ3JpZC1pY29uIHBvaW50ZXIgZC1mbGV4IGNvbHVtbi1tb3ZlXCI+JHt0aGlzLmljb25SZWdpc3RyeS5nZXRTdmcoXG4gICAgICAnbW92ZS1jb2x1bW4nXG4gICAgKX08L3NwYW4+YDtcbiAgICByZXR1cm4ge1xuICAgICAgZ3JvdXBFeHBhbmRlZDogYDxzcGFuIGNsYXNzPVwiZGEtZ3JpZC1pY29uIHBvaW50ZXIgZ3JvdXAtZXhwYW5kZWQtaWNvblwiPiR7dGhpcy5pY29uUmVnaXN0cnkuZ2V0U3ZnKFxuICAgICAgICAnYXJyb3ctcmlnaHQnXG4gICAgICApfTwvc3Bhbj5gLFxuICAgICAgZ3JvdXBDb250cmFjdGVkOiBgPHNwYW4gY2xhc3M9XCJkYS1ncmlkLWljb24gcG9pbnRlciBncm91cC1jb250cmFjdGVkLWljb25cIj4ke3RoaXMuaWNvblJlZ2lzdHJ5LmdldFN2ZyhcbiAgICAgICAgJ2Fycm93LXJpZ2h0J1xuICAgICAgKX08L3NwYW4+YCxcbiAgICAgIGNvbHVtbk1vdmVQaW46IGA8c3BhbiBjbGFzcz1cImRhLWdyaWQtaWNvbiBwb2ludGVyIGQtZmxleCBwcmltYXJ5LTMwMC1maWxsIGNvbHVtbi1tb3ZlLXBpblwiPiR7dGhpcy5pY29uUmVnaXN0cnkuZ2V0U3ZnKFxuICAgICAgICAncGluJ1xuICAgICAgKX08L3NwYW4+YCxcbiAgICAgIGNvbHVtbk1vdmVIaWRlOiBgPHNwYW4gY2xhc3M9XCJkYS1ncmlkLWljb24gcG9pbnRlciBkLWZsZXggY29sdW1uLW1vdmUtaGlkZVwiPiR7dGhpcy5pY29uUmVnaXN0cnkuZ2V0U3ZnKFxuICAgICAgICAnZXllLWhpZGUnXG4gICAgICApfTwvc3Bhbj5gLFxuICAgICAgY29sdW1uTW92ZU1vdmU6IG1vdmVDb2x1bW5JY29uLFxuICAgICAgY29sdW1uTW92ZUxlZnQ6IG1vdmVDb2x1bW5JY29uLFxuICAgICAgY29sdW1uTW92ZVJpZ2h0OiBtb3ZlQ29sdW1uSWNvbixcbiAgICAgIHJvd0RyYWc6IGA8c3BhbiBjbGFzcz1cImRhLWdyaWQtaWNvbiBkcmFnIGQtZmxleFwiPiR7dGhpcy5pY29uUmVnaXN0cnkuZ2V0U3ZnKCdkcmFnLTAxJyl9PC9zcGFuPmBcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlclNldHRpbmdzTGlzdGVuZXJzKGFwaTogRGF0b0dyaWRBcGksIGFnR3JpZDogQWdHcmlkTmcyKSB7XG4gICAgdGhpcy5saXN0ZW5Ub0NvbHVtblJlc2l6ZShhcGksIGFnR3JpZCk7XG4gICAgdGhpcy5saXN0ZW5Ub0dyaWRFdmVudHMoYWdHcmlkKTtcbiAgICB0aGlzLmxpc3RlblRvU3RvcmVTZXR0aW5nc0NoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuVG9Db2x1bW5SZXNpemUoYXBpOiBEYXRvR3JpZEFwaSwgeyBjb2x1bW5SZXNpemVkIH06IEFnR3JpZE5nMikge1xuICAgIGxldCBvYnNlcnZhYmxlID0gY29sdW1uUmVzaXplZC5hc09ic2VydmFibGUoKTtcbiAgICBpZiAodGhpcy5vbkhvdmVyRW5hYmxlZCgpKSB7XG4gICAgICBvYnNlcnZhYmxlID0gb2JzZXJ2YWJsZS5waXBlKFxuICAgICAgICBmaWx0ZXIoKHsgc291cmNlIH06IENvbHVtblJlc2l6ZWRFdmVudCkgPT4gc291cmNlID09PSAndWlDb2x1bW5EcmFnZ2VkJyksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLnVwZGF0ZU9uSG92ZXJQb3MoKSlcbiAgICAgICk7XG4gICAgfVxuICAgIG9ic2VydmFibGVcbiAgICAgIC5waXBlKFxuICAgICAgICBhdWRpdFRpbWUoMTAwKSxcbiAgICAgICAgZmlsdGVyKCh7IGZpbmlzaGVkLCBzb3VyY2UgfTogQ29sdW1uUmVzaXplZEV2ZW50KSA9PiBmaW5pc2hlZCAmJiBzb3VyY2UgPT09ICd1aUNvbHVtbkRyYWdnZWQnKSxcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoZSA9PiB7XG4gICAgICAgIGNvbnN0IFtjb2x1bW5dID0gZS5jb2x1bW5zO1xuICAgICAgICBsZXQgY29sdW1uc1NpemVzID0geyAuLi50aGlzLmdyaWRRdWVyeS5nZXRDb2x1bW5TaXplcygpIH07XG4gICAgICAgIGlmIChjb2x1bW5zU2l6ZXMpIHtcbiAgICAgICAgICBjb2x1bW5zU2l6ZXNbY29sdW1uLmdldENvbElkKCldID0gY29sdW1uLmdldEFjdHVhbFdpZHRoKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sdW1uc1NpemVzID0gZ2V0Q29sdW1uc1NpemVzKGFwaS5jb2x1bW5zLmdldEFsbEdyaWRDb2x1bW5zKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2UudXBkYXRlU2V0dGluZ3MoeyBncmlkQWxpZ25tZW50OiBEYXRvR3JpZEFsaWdubWVudC5DVVNUT00sIGNvbHVtbnNTaXplcyB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Ub0dyaWRFdmVudHMoYWdHcmlkOiBBZ0dyaWROZzIpIHtcbiAgICBjb25zdCB7IGNvbHVtblZpc2libGUsIHNvcnRDaGFuZ2VkLCBjb2x1bW5Sb3dHcm91cENoYW5nZWQsIGNvbHVtblBpbm5lZCwgZHJhZ1N0b3BwZWQsIGZpbHRlckNoYW5nZWQgfSA9IGFnR3JpZDtcbiAgICBtZXJnZShjb2x1bW5WaXNpYmxlLCBzb3J0Q2hhbmdlZCwgY29sdW1uUm93R3JvdXBDaGFuZ2VkLCBjb2x1bW5QaW5uZWQsIGRyYWdTdG9wcGVkLCBmaWx0ZXJDaGFuZ2VkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIC8qIFNraXAgdGhlIGluaXRpYWwgc29ydGluZyBldmVudCBmaXJlZCBieSB0aGUgZ3JpZCB3aGVuIGFkZGluZyByb3dzICovXG4gICAgICAgIHNraXAoMSksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7IHR5cGUgfSkgPT4ge1xuICAgICAgICBjb25zdCBzZXR0aW5nc0RpZmYgPSB0aGlzLmdyaWRTZXJ2aWNlLmdldFNldHRpbmdzRGlmZigpO1xuICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnVwZGF0ZVNldHRpbmdzKHNldHRpbmdzRGlmZik7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldEdyaWREYXRhKCk7XG4gICAgICAgIHRoaXMub25HcmlkQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgIGZpbHRlcjogdGhpcy5ncmlkUXVlcnkuZ2V0RXh0ZXJuYWxGaWx0ZXIoKSxcbiAgICAgICAgICBzb3J0OiB0aGlzLmdyaWRRdWVyeS5nZXRTb3J0KCksXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBkYXRhXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlblRvU3RvcmVTZXR0aW5nc0NoYW5nZXMoKSB7XG4gICAgdGhpcy5ncmlkUXVlcnlcbiAgICAgIC5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUuc2V0dGluZ3MpXG4gICAgICAucGlwZShcbiAgICAgICAgc2tpcCgxKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDEwMDApLFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzRGlmZiA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0U2V0dGluZ3NEaWZmKCk7XG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2F2ZVNldHRpbmdzVG9TZXJ2ZXIoc2V0dGluZ3NEaWZmKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlckdyaWRMaXN0ZW5lcnMoYXBpOiBEYXRvR3JpZEFwaSwgYWdHcmlkOiBBZ0dyaWROZzIpIHtcbiAgICB0aGlzLmdyaWRFbGVtZW50cyA9IHtcbiAgICAgIGNlbnRlckNvbnRhaW5lcjogcXVlcnkoJy5hZy1jZW50ZXItY29scy1jb250YWluZXInLCB0aGlzLmFnR3JpZEVsKSxcbiAgICAgIGNlbnRlclZpZXdwb3J0OiBxdWVyeSgnLmFnLWNlbnRlci1jb2xzLXZpZXdwb3J0JywgdGhpcy5hZ0dyaWRFbCksXG4gICAgICBib2R5Vmlld3BvcnQ6IHF1ZXJ5KCcuYWctYm9keS12aWV3cG9ydCcsIHRoaXMuYWdHcmlkRWwpXG4gICAgfTtcbiAgICB0aGlzLnJlZ2lzdGVyR3JpZENsaWNrTGlzdGVuZXIoYXBpLmdyaWQpO1xuICAgIHRoaXMucmVnaXN0ZXJHcmlkR3JvdXBMaXN0ZW5lcnMoYWdHcmlkKTtcbiAgICB0aGlzLnJlZ2lzdGVyR3JpZE1vdXNlTGlzdGVuZXJzKGFnR3JpZCk7XG4gICAgdGhpcy5yZWdpc3RlckdyaWRLZXlib2FyZExpc3RlbmVyKGFwaSk7XG4gICAgdGhpcy5yZWdpc3RlcldpbmRvd1Jlc2l6ZUxpc3RlbmVyKCk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyR3JpZEdyb3VwTGlzdGVuZXJzKGFnR3JpZDogQWdHcmlkTmcyKSB7XG4gICAgLyogTWFrZSBncm91cCBleHBhbmQvY29sbGFwc2Ugb24gYSBzaW5nbGUgY2xpY2sgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBkb3VibGUgY2xpY2sgKi9cbiAgICBhZ0dyaWQuY29sdW1uUm93R3JvdXBDaGFuZ2VkXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh7IGNvbHVtbnMgfTogQ29sdW1uUm93R3JvdXBDaGFuZ2VkRXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4gY29sdW1ucy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgID8gRU1QVFlcbiAgICAgICAgICAgIDogYWdHcmlkLmNlbGxDbGlja2VkLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKCh7IHZhbHVlLCBub2RlIH06IENlbGxDbGlja2VkRXZlbnQpID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgbm9kZS5ncm91cCA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7IG5vZGUgfTogQ2VsbENsaWNrZWRFdmVudCkgPT4ge1xuICAgICAgICBub2RlLnNldEV4cGFuZGVkKCFub2RlLmV4cGFuZGVkKTtcbiAgICAgIH0pO1xuICAgIC8qIFdoZW4gY2xvc2luZyBhIGdyb3VwZWQgcm93IHdlIHdhbnQgdG8gaGlkZSB0aGUgb24gaG92ZXIgYWN0aW9ucyAqL1xuICAgIGlmICh0aGlzLm9uSG92ZXJFbmFibGVkKCkpIHtcbiAgICAgIGFnR3JpZC5yb3dHcm91cE9wZW5lZFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKHsgbm9kZSB9OiBSb3dHcm91cE9wZW5lZEV2ZW50KSA9PiBub2RlLmV4cGFuZGVkID09PSBmYWxzZSksXG4gICAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxhc3RIb3ZlcmVkUm93ID0gbnVsbDtcbiAgICAgICAgICB0aGlzLnNldE9uSG92ZXJTdGF0ZShmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIGNsaWNrIHdhcyBwZXJmb3JtZWQgb24gdGhlIGdyaWRzIGJvZHkgYW5kIG5vdCBhIHJvdywgY2xlYXIgdGhlIHJvd3Mgc2VsZWN0aW9uXG4gICAqL1xuICBwcml2YXRlIHJlZ2lzdGVyR3JpZENsaWNrTGlzdGVuZXIoYXBpOiBHcmlkQXBpKSB7XG4gICAgY29uc3QgeyBib2R5Vmlld3BvcnQsIGNlbnRlclZpZXdwb3J0IH0gPSB0aGlzLmdyaWRFbGVtZW50cztcbiAgICBmcm9tRXZlbnQoYm9keVZpZXdwb3J0LCAnY2xpY2snKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4gKGV2ZW50LnRhcmdldCA9PT0gYm9keVZpZXdwb3J0IHx8IGV2ZW50LnRhcmdldCA9PT0gY2VudGVyVmlld3BvcnQpICYmIGFwaS5nZXRTZWxlY3RlZFJvd3MoKS5sZW5ndGggPiAwO1xuICAgICAgICB9KSxcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gYXBpLmRlc2VsZWN0QWxsKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkhvdmVyRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5ncmlkT3B0aW9ucy5ob3ZlckNvbmZpZy5lbmFibGVkICYmIHRoaXMucm93QWN0aW9ucy5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlckdyaWRNb3VzZUxpc3RlbmVycyhhZ0dyaWQ6IEFnR3JpZE5nMikge1xuICAgIGNvbnN0IHsgYm9keVZpZXdwb3J0LCBjZW50ZXJDb250YWluZXIgfSA9IHRoaXMuZ3JpZEVsZW1lbnRzO1xuICAgIGxldCBsYXN0SG92ZXJlZENlbGw7XG4gICAgY29uc3Qgb25Ib3ZlckVuYWJsZWQgPSB0aGlzLm9uSG92ZXJFbmFibGVkKCk7XG4gICAgaWYgKG9uSG92ZXJFbmFibGVkKSB7XG4gICAgICBmcm9tRXZlbnQoY2VudGVyQ29udGFpbmVyLCAnbW91c2VsZWF2ZScpXG4gICAgICAgIC5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnRvZ2dsZVJvd0hvdmVyQ2xhc3ModGhpcy5sYXN0SG92ZXJlZFJvdyk7XG4gICAgICAgICAgdGhpcy5sYXN0SG92ZXJlZFJvdyA9IG51bGw7XG4gICAgICAgICAgdGhpcy5zZXRPbkhvdmVyU3RhdGUoZmFsc2UpO1xuICAgICAgICAgIGxhc3RIb3ZlcmVkQ2VsbCA9IG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgbWVyZ2UoXG4gICAgICAgIGFnR3JpZC5ib2R5U2Nyb2xsLnBpcGUoZmlsdGVyKCh7IGRpcmVjdGlvbiB9OiBCb2R5U2Nyb2xsRXZlbnQpID0+IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnKSksXG4gICAgICAgIGFnR3JpZC5yb3dEYXRhQ2hhbmdlZFxuICAgICAgKVxuICAgICAgICAucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVPbkhvdmVyUG9zKCk7XG4gICAgICAgIH0pO1xuICAgICAgdGhpcy5hZGRPbkhvdmVyRWxlbWVudCgpO1xuICAgIH1cbiAgICBhZ0dyaWQuY2VsbE1vdXNlT3ZlclxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoeyBub2RlLCBjb2x1bW4gfSkgPT4gbGFzdEhvdmVyZWRDZWxsICE9PSBgJHtub2RlLmlkfS0ke2NvbHVtbi5nZXRDb2xJZCgpfWApLFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IENlbGxNb3VzZU91dEV2ZW50KSA9PiB7XG4gICAgICAgIGxhc3RIb3ZlcmVkQ2VsbCA9IGAke2V2ZW50Lm5vZGUuaWR9LSR7ZXZlbnQuY29sdW1uLmdldENvbElkKCl9YDtcbiAgICAgICAgdGhpcy5zaG93VG9vbHRpcChldmVudCk7XG4gICAgICAgIGNvbnN0IHJvdyA9IChldmVudC5ldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGlmIChvbkhvdmVyRW5hYmxlZCAmJiAoZXZlbnQubm9kZS5ncm91cCA9PT0gZmFsc2UgfHwgaXNOaWwoZXZlbnQubm9kZS5ncm91cCkpICYmIHRoaXMubGFzdEhvdmVyZWRSb3cgIT09IHJvdykge1xuICAgICAgICAgIGNvbnN0IHByZXZpb3VzTm9kZSA9IHRoaXMubGFzdEhvdmVyZWRSb3c7XG4gICAgICAgICAgdGhpcy5sYXN0SG92ZXJlZFJvdyA9IHJvdztcbiAgICAgICAgICB0aGlzLnRvZ2dsZVJvd0hvdmVyQ2xhc3MoW3ByZXZpb3VzTm9kZSwgdGhpcy5sYXN0SG92ZXJlZFJvd10pO1xuICAgICAgICAgIHRoaXMuc2V0T25Ib3ZlclN0YXRlKHRydWUsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgY29uc3Qgb25Ub29sdGlwT3V0ID0gbWVyZ2UoXG4gICAgICBmcm9tRXZlbnQoYm9keVZpZXdwb3J0LCAnc2Nyb2xsJyksXG4gICAgICBmcm9tRXZlbnQodGhpcy5hZ0dyaWRFbCwgJ21vdXNlbGVhdmUnKSxcbiAgICAgIGFnR3JpZC5jZWxsTW91c2VPdXRcbiAgICApO1xuICAgIG9uVG9vbHRpcE91dFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiAhaXNOaWwodGhpcy50b29sdGlwKSksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jbGVhclRvb2x0aXAoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2UgdGhlIHRvb2x0aXBcbiAgICovXG4gIGNsZWFyVG9vbHRpcCgpOiB2b2lkIHtcbiAgICB0aGlzLnRvb2x0aXAuZGlzcG9zZSgpO1xuICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHNob3dUb29sdGlwKGV2ZW50OiBDZWxsRXZlbnQpIHtcbiAgICBjb25zdCBjZWxsOiBIVE1MRWxlbWVudCA9IGV2ZW50LmV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCB0ZXh0T3ZlcmZsb3cgPSBjZWxsLm9mZnNldFdpZHRoIDwgY2VsbC5zY3JvbGxXaWR0aDtcbiAgICBpZiAodGV4dE92ZXJmbG93KSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7IGNlbGwsIHZhbHVlOiBjZWxsLmlubmVyVGV4dCB9O1xuICAgICAgaXNOaWwodGhpcy50b29sdGlwKSA/IHRoaXMuY3JlYXRlQW5kU2hvd1Rvb2x0aXAocGFyYW1zKSA6IHRoaXMudXBkYXRlVG9vbHRpcChwYXJhbXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQW5kU2hvd1Rvb2x0aXAoeyBjZWxsLCB2YWx1ZSB9KSB7XG4gICAgdGhpcy50b29sdGlwID0gbmV3IFRvb2x0aXAoY2VsbCwge1xuICAgICAgcGxhY2VtZW50OiAndG9wJyxcbiAgICAgIGNvbnRhaW5lcjogZG9jdW1lbnQuYm9keSxcbiAgICAgIHRyaWdnZXI6ICdtYW51YWwnLFxuICAgICAgdGl0bGU6IERPTVB1cmlmeS5zYW5pdGl6ZSh2YWx1ZSksXG4gICAgICBodG1sOiB0cnVlLFxuICAgICAgcG9wcGVyT3B0aW9uczoge1xuICAgICAgICBtb2RpZmllcnM6IHtcbiAgICAgICAgICBwcmV2ZW50T3ZlcmZsb3c6IHsgZW5hYmxlZDogZmFsc2UgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdGVtcGxhdGU6XG4gICAgICAgICc8ZGl2IGNsYXNzPVwidG9vbHRpcCBkYXRvLXRvb2x0aXAgY29tbW9uLXRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiPjxkaXYgY2xhc3M9XCJ0b29sdGlwLWFycm93XCI+PC9kaXY+PGRpdiBjbGFzcz1cInRvb2x0aXAtaW5uZXJcIj48L2Rpdj48L2Rpdj4nXG4gICAgfSk7XG5cbiAgICB0aGlzLnRvb2x0aXAuc2hvdygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgdG9vbHRpcCBlbGVtZW50IHJlZiBhbmQgY29udGVudFxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVUb29sdGlwKHsgY2VsbCwgdmFsdWUgfSk6IHZvaWQge1xuICAgIGlmIChjZWxsICE9PSB0aGlzLnRvb2x0aXAucmVmZXJlbmNlKSB7XG4gICAgICB0aGlzLnRvb2x0aXAucmVmZXJlbmNlID0gY2VsbDtcbiAgICAgIHRoaXMudG9vbHRpcC5wb3BwZXJJbnN0YW5jZS5yZWZlcmVuY2UgPSBjZWxsO1xuICAgICAgdGhpcy50b29sdGlwLnVwZGF0ZVRpdGxlQ29udGVudCh2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMudG9vbHRpcC5zaG93KCk7XG4gIH1cblxuICBwcml2YXRlIGFkZE9uSG92ZXJFbGVtZW50KCkge1xuICAgIHRoaXMucm93SG92ZXJDb21wb25lbnQgPSBjcmVhdGVDb21wb25lbnQ8RGF0b0dyaWRPbkhvdmVyQ29tcG9uZW50Pih7XG4gICAgICBjb21wb25lbnQ6IERhdG9HcmlkT25Ib3ZlckNvbXBvbmVudCxcbiAgICAgIGluamVjdG9yOiB0aGlzLmluamVjdG9yLFxuICAgICAgcmVzb2x2ZXI6IHRoaXMucmVzb2x2ZXJcbiAgICB9KTtcbiAgICBjb25zdCB7IGluc3RhbmNlLCBob3N0VmlldyB9ID0gdGhpcy5yb3dIb3ZlckNvbXBvbmVudDtcbiAgICBpbnN0YW5jZS5jb25maWcgPSB7IC4uLnRoaXMuZ3JpZE9wdGlvbnMuaG92ZXJDb25maWcsIGFjdGlvbnM6IHRoaXMucm93QWN0aW9ucy5zbGljZSgpIH07XG4gICAgaG9zdFZpZXcuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGFwcGVuZENoaWxkKHRoaXMuZ3JpZEVsZW1lbnRzLmNlbnRlckNvbnRhaW5lciwgdGhpcy5yb3dIb3ZlckVsKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHJvd0hvdmVyRWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucm93SG92ZXJDb21wb25lbnQubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0T25Ib3ZlclN0YXRlKHZpc2libGU6IGJvb2xlYW4sIGV2ZW50PzogQ2VsbE1vdXNlT3V0RXZlbnQpIHtcbiAgICBjb25zdCB7IGluc3RhbmNlIH0gPSB0aGlzLnJvd0hvdmVyQ29tcG9uZW50O1xuICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICBpbnN0YW5jZS5zaG93KGV2ZW50KTtcbiAgICAgIHRoaXMudXBkYXRlT25Ib3ZlclBvcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnN0YW5jZS5oaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVPbkhvdmVyUG9zKCkge1xuICAgIGNvbnN0IHsgY2VudGVyVmlld3BvcnQsIGNlbnRlckNvbnRhaW5lciB9ID0gdGhpcy5ncmlkRWxlbWVudHM7XG4gICAgY29uc3QgdGFyZ2V0ID0gY2VudGVyQ29udGFpbmVyLmNsaWVudFdpZHRoID4gY2VudGVyVmlld3BvcnQuY2xpZW50V2lkdGggPyBjZW50ZXJWaWV3cG9ydCA6IGNlbnRlckNvbnRhaW5lcjtcbiAgICBjb25zdCB7IGNsaWVudFdpZHRoLCBzY3JvbGxMZWZ0IH0gPSB0YXJnZXQ7XG4gICAgdGhpcy5yb3dIb3ZlckNvbXBvbmVudC5pbnN0YW5jZS51cGRhdGVTY3JvbGxQb3MoY2xpZW50V2lkdGggKyBzY3JvbGxMZWZ0KTtcbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlUm93SG92ZXJDbGFzcyhyb3dzOiBIVE1MRWxlbWVudCB8IEhUTUxFbGVtZW50W10pIHtcbiAgICBjb2VyY2VBcnJheShyb3dzKS5mb3JFYWNoKHJvdyA9PiByb3cgJiYgcm93LmNsYXNzTGlzdC50b2dnbGUoJ2FjdGlvbnMtaG92ZXJlZCcpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJHcmlkS2V5Ym9hcmRMaXN0ZW5lcih7IGdyaWQsIGNvbHVtbnMgfTogRGF0b0dyaWRBcGkpIHtcbiAgICB0aGlzLmhvdGtleXNcbiAgICAgIC5hZGRTaG9ydGN1dCh7XG4gICAgICAgIGVsZW1lbnQ6IHRoaXMuYWdHcmlkRWwsXG4gICAgICAgIGtleXM6ICdtZXRhLmEnLFxuICAgICAgICBpZ25vcmVJbkVkaXRhYmxlOiB0cnVlXG4gICAgICB9KVxuICAgICAgLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zZWxlY3RBbGxDdXJyZW50UGFnZVJvd3MoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlcldpbmRvd1Jlc2l6ZUxpc3RlbmVyKCkge1xuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5ncmlkUXVlcnkuZ3JpZEFsaWdubWVudCAhPT0gRGF0b0dyaWRBbGlnbm1lbnQuQ1VTVE9NKSxcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCBmaXRUbyA9IHRoaXMuZ3JpZFF1ZXJ5LmdyaWRBbGlnbm1lbnQgPT09IERhdG9HcmlkQWxpZ25tZW50LkZJVF9UT19DT05UQUlORVIgPyAnY29udGFpbmVyJyA6ICdjb250ZW50JztcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5maXRHcmlkKGZpdFRvKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRHcmlkRGF0YSgpIHtcbiAgICBjb25zdCBncmlkTW9kZWwgPSB0aGlzLmdyaWRTZXJ2aWNlLmFwaS5ncmlkLmdldE1vZGVsKCkgYXMgYW55O1xuICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLnRyZWVEYXRhKSB7XG4gICAgICBjb25zdCBncmlkRGF0YSA9IGdyaWRNb2RlbC5yb3dzVG9EaXNwbGF5Lm1hcCgoeyBkYXRhIH0pID0+IGRhdGEpO1xuICAgICAgcmV0dXJuIGNvbnZlcnRGcm9tVHJlZURhdGEoZ3JpZERhdGEsIHRoaXMuZ3JpZFNlcnZpY2UudHJlZUNvbmZpZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBncmlkTW9kZWwucm93c1RvRGlzcGxheTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyRXZlbnRzVHJpZ2dlcmluZ0NsZWFyU2VsZWN0ZWRSb3dzKGFnR3JpZDogQWdHcmlkTmcyKSB7XG4gICAgY29uc3QgZXZlbnRzJCA9IHRoaXMuZ3JpZFF1ZXJ5LmlzU2VydmVyU2lkZVxuICAgICAgPyBtZXJnZShhZ0dyaWQuc29ydENoYW5nZWQsIGFnR3JpZC5maWx0ZXJDaGFuZ2VkKVxuICAgICAgOiBhZ0dyaWQuZmlsdGVyQ2hhbmdlZDtcbiAgICAoZXZlbnRzJCBhcyBPYnNlcnZhYmxlPGFueT4pLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLmRlc2VsZWN0QWxsUm93cygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlclBhZ2luYXRpb25DaGFuZ2VkKGFnR3JpZDogQWdHcmlkTmcyKSB7XG4gICAgaWYgKCF0aGlzLmdyaWRRdWVyeS5pc1NlcnZlclNpZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYWdHcmlkLnBhZ2luYXRpb25DaGFuZ2VkLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTZWxlY3RBbGxSb3dzRW5hYmxlZCkge1xuICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNlbGVjdEFsbEN1cnJlbnRQYWdlUm93cyh0cnVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -239,7 +239,10 @@ var DatoGridFilterComponent = /** @class */ (function () {
|
|
|
239
239
|
this.listOptions = rawValues.map(mapToListItem);
|
|
240
240
|
}
|
|
241
241
|
else {
|
|
242
|
-
var columnValues = this.getColumnValues()
|
|
242
|
+
var columnValues = this.getColumnValues().filter(function (_a) {
|
|
243
|
+
var value = _a.value;
|
|
244
|
+
return !isNil(value);
|
|
245
|
+
});
|
|
243
246
|
this.columnValues = columnValues.map(function (_a) {
|
|
244
247
|
var value = _a.value;
|
|
245
248
|
return !isNil(_this.pivotColumn) && value ? value[_this.colField] : value;
|
|
@@ -724,4 +727,4 @@ var DatoGridFilterComponent = /** @class */ (function () {
|
|
|
724
727
|
}());
|
|
725
728
|
export { DatoGridFilterComponent };
|
|
726
729
|
export { ɵ0, ɵ1, ɵ2 };
|
|
727
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLWZpbHRlci9ncmlkLWZpbHRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLG9CQUFvQixFQUdwQix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLG1CQUFtQixFQUVuQiwyQkFBMkIsRUFDM0IsZ0JBQWdCLEVBRWpCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0csT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXZELE9BQU8sRUFBRSxLQUFLLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEUsT0FB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LGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQTNCLENBQTJCLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxnREFBYyxHQUF0QixVQUF1QixNQUFtQixFQUFFLE1BQVc7UUFBWCx1QkFBQSxFQUFBLFdBQVc7UUFDckQsSUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3ZDLElBQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUVqRixJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzFDO1FBRUQsV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0MsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7Z0JBcG9CZSxVQUFVO2dCQUNQLFVBQVU7Z0JBQ2YsV0FBVztnQkFDSixvQkFBb0I7Z0JBQzFCLGlCQUFpQjs7SUFyRGhDO1FBREMsWUFBWSxDQUFDLGlCQUFpQixDQUFDO2tDQUNGLFNBQVM7eUNBQVQsU0FBUztrRUFVdEM7SUFaVSx1QkFBdUI7UUFObkMsU0FBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLGtCQUFrQjtZQUM1QiwyeGFBQTJDO1lBRTNDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNOztTQUNoRCxDQUFDO3lDQW9EZ0IsVUFBVTtZQUNQLFVBQVU7WUFDZixXQUFXO1lBQ0osb0JBQW9CO1lBQzFCLGlCQUFpQjtPQXZEckIsdUJBQXVCLENBd3JCbkM7SUFBRCw4QkFBQztDQUFBLEFBeHJCRCxJQXdyQkM7U0F4ckJZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBEYXRvcmFtYS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBBcGFjaGUgTGljZW5zZSAyLjAgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZGF0b3JhbWEvY2xpZW50LWNvcmUvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBPbkRlc3Ryb3ksXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMsXG4gIERhdG9HcmlkRmlsdGVyLFxuICBEYXRvR3JpZEZpbHRlckNvbmRpdGlvbixcbiAgRGF0b0dyaWRGaWx0ZXJPcHRpb25zTWFwLFxuICBEYXRvR3JpZEZpbHRlclNlY3Rpb25zLFxuICBEYXRvR3JpZEZpbHRlclR5cGVzLFxuICBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uLFxuICBEYXRvR3JpZFN0cmluZ0ZpbHRlck9wdGlvbnMsXG4gIGlzUmFuZ2VDb25kaXRpb24sXG4gIExpc3RJdGVtXG59IGZyb20gJy4vZ3JpZC1maWx0ZXIudHlwZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUG9wb3ZlclJlZiB9IGZyb20gJy4uLy4uL3BvcG92ZXIvcG9wb3Zlci1yZWYnO1xuaW1wb3J0IHsgR3JpZFF1ZXJ5IH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnF1ZXJ5JztcbmltcG9ydCB7IG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHBhaXJ3aXNlLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGRpZmZlcmVuY2UsIGlzQXJyYXlWYWx1ZXNFcXVhbCwgdW5pcUJ5IH0gZnJvbSAnLi4vLi4vdXRpbHMvYXJyYXknO1xuaW1wb3J0IHsgaXNFbXB0eSwgaXNOaWwsIGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgR3JpZFNlcnZpY2UgfSBmcm9tICcuLi9ncmlkLXN0b3JlL2dyaWQuc2VydmljZSc7XG5pbXBvcnQgeyBPcGVyYXRvclR5cGVzIH0gZnJvbSAnLi4vLi4vb3BlcmF0b3ItdG9nZ2xlci9vcGVyYXRvci10b2dnbGVyLnR5cGVzJztcbmltcG9ydCB7IERhdG9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgdmFsaWRhdGVGaWx0ZXIgfSBmcm9tICcuL2ZpbHRlci12YWxpZGF0b3InO1xuaW1wb3J0IHsgRGF0b0dyaWRDb2x1bW5EZWYsIERhdG9HcmlkR2V0Um93c1BhcmFtcyB9IGZyb20gJy4uL2dyaWQvZ3JpZC12Mi50eXBlcyc7XG5pbXBvcnQgeyB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ25neC10YWtlLXVudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgRGF0b0NvbHVtbk1lbnVEYXRhIH0gZnJvbSAnLi4vZ3JpZC1jb2x1bW4taGVhZGVyL2dyaWQtY29sdW1uLWhlYWRlci50eXBlcyc7XG5pbXBvcnQgeyBDb2x1bW4sIENvbHVtbkdyb3VwLCBHcmlkQXBpLCBSb3dOb2RlIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgRGF0ZVJhbmdlIH0gZnJvbSAnLi4vLi4vZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIudHlwZXMnO1xuaW1wb3J0IHsgY3VycnkgfSBmcm9tICcuLi8uLi91dGlscy9mdW5jdGlvbic7XG5pbXBvcnQgeyBTb3J0TGFiZWxUeXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvc2VhcmNoLXJlc3VsdHMucGlwZSc7XG5pbXBvcnQgeyBIb3RLZXlDb25maWcgfSBmcm9tICcuLi8uLi9ob3RrZXlzL2hvdGtleS50eXBlcyc7XG5pbXBvcnQgeyBmb3JtYXRLZXlzIH0gZnJvbSAnLi4vLi4vaG90a2V5cy9ob3RrZXlzLWZvcm1hdHRlcic7XG5pbXBvcnQgeyBnZXRDb2xGaWVsZCB9IGZyb20gJy4uL2dyaWQtc3RvcmUvdXRpbCc7XG5pbXBvcnQgeyBEYXRvVG9nZ2xlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RvZ2dsZXIvdG9nZ2xlci5jb21wb25lbnQnO1xuXG5jb25zdCBtYXBUb1ZhbHVlID0gKHsgdmFsdWUgfSkgPT4gdmFsdWU7XG5jb25zdCBtYXBUb0xpc3RJdGVtID0gdmFsID0+ICh7IGlkOiB2YWwsIGxhYmVsOiBpc05pbCh2YWwpID8gYChFbXB0eSlgIDogYCR7dmFsfWAudHJpbSgpLCB2YWx1ZTogdmFsIH0pO1xuY29uc3QgbWFwVG9MaXN0SXRlbVdpdGhGb3JtYXR0ZWQgPSAoeyB2YWx1ZSwgZm9ybWF0dGVkVmFsdWUgfSwga2V5PykgPT4gKHtcbiAgaWQ6IGtleSAmJiB2YWx1ZSA/IHZhbHVlW2tleV0gOiB2YWx1ZSxcbiAgbGFiZWw6IGlzTmlsKGZvcm1hdHRlZFZhbHVlKSA/IGAoRW1wdHkpYCA6IGAke2tleSA/IGZvcm1hdHRlZFZhbHVlW2tleV0gOiBmb3JtYXR0ZWRWYWx1ZX1gLnRyaW0oKSxcbiAgdmFsdWU6IGtleSAmJiB2YWx1ZSA/IHZhbHVlW2tleV0gOiB2YWx1ZVxufSk7XG5cbnR5cGUgQ29uZGl0aW9ucyA9IHtcbiAgdHlwZToge1xuICAgIG9wZXJhbmQ6IEV4Y2x1ZGU8RGF0b0ZpbHRlckNvbmRpdGlvbnMsIERhdG9GaWx0ZXJDb25kaXRpb25zLklOX0xJU1QgfCBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVD47XG4gIH07XG4gIHZhbHVlOiBzdHJpbmcgfCBudW1iZXI7XG4gIHJhbmdlRW5kOiBzdHJpbmcgfCBudW1iZXI7XG59W107XG5cbnR5cGUgQ29uZGl0aW9uT3B0aW9uID0geyBpZDogbnVtYmVyOyBsYWJlbDogc3RyaW5nOyBvcGVyYW5kOiBEYXRvRmlsdGVyQ29uZGl0aW9ucyB9O1xuXG50eXBlIFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUgPSB7IHZhbHVlOiBzdHJpbmcgfCBudW1iZXI7IGZvcm1hdHRlZFZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0by1ncmlkLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmlkLWZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dyaWQtZmlsdGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIERhdG9HcmlkRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZHJlbignb3BlcmF0b3JUb2dnbGVyJylcbiAgc2V0IG9wZXJhdG9yVG9nZ2xlcih0b2dnbGVyczogUXVlcnlMaXN0PERhdG9Ub2dnbGVyQ29tcG9uZW50Pikge1xuICAgIGlmICh0b2dnbGVycyAmJiB0aGlzLmlucHV0Q29uZGl0aW9uc09wZXJhdG9yKSB7XG4gICAgICB0b2dnbGVycy5mb3JFYWNoKCh0b2dnbGVyOiBEYXRvVG9nZ2xlckNvbXBvbmVudCkgPT4ge1xuICAgICAgICBpZiAoIXRvZ2dsZXIuaXNEaXNhYmxlZCkge1xuICAgICAgICAgIHRvZ2dsZXIuc2V0RGlzYWJsZWRTdGF0ZSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBncmlkRmlsdGVyVHlwZXMgPSBEYXRvR3JpZEZpbHRlclR5cGVzO1xuICBmaWx0ZXJUeXBlOiBEYXRvR3JpZEZpbHRlclR5cGVzO1xuICBjb2x1bW5WYWx1ZXM6IChzdHJpbmcgfCBudW1iZXIpW10gPSBbXTtcbiAgbGlzdE9wdGlvbnM6IExpc3RJdGVtW10gPSBbXTtcbiAgY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zOiBDb25kaXRpb25PcHRpb25bXTtcbiAgaGFzRmlsdGVyJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgZmlsdGVyRm9ybTogRm9ybUdyb3VwO1xuICBmaWx0ZXJTZWN0aW9uczogeyBbRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZV0/OiBib29sZWFuOyBbRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbF0/OiBib29sZWFuIH0gPSB7XG4gICAgW0RhdG9HcmlkRmlsdGVyU2VjdGlvbnMuQnlfVmFsdWVdOiB0cnVlLFxuICAgIFtEYXRvR3JpZEZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsXTogdHJ1ZVxuICB9O1xuICByYW5nZU9wZXJhbmQgPSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRTtcbiAgbGlzdExhYmVsVHlwZTogU29ydExhYmVsVHlwZTtcbiAgbGlzdFNvcnRCeUtleTogc3RyaW5nO1xuICBpc0NsaWVudFNpZGVHcmlkID0gZmFsc2U7XG4gIGxpc3RTZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gIGxvYWRpbmdMaXN0ID0gZmFsc2U7XG4gIHNlcnZlclNlYXJjaEVycm9yZWQgPSBmYWxzZTtcbiAgYXBwbHlIb3RLZXlDb25maWc6IEhvdEtleUNvbmZpZyA9IHtcbiAgICBrZXlzOiAnbWV0YS5lbnRlcicsXG4gICAgaGFuZGxlcjogKCkgPT4gdGhpcy5jbG9zZVBvcFVwKCksXG4gICAgZGVzY3JpcHRpb246ICdjb3JlLmFwcGx5LWZpbHRlcnMnXG4gIH07XG4gIGhvdEtleVRvb2x0aXAgPSBmb3JtYXRLZXlzKHRoaXMuYXBwbHlIb3RLZXlDb25maWcua2V5cyk7XG4gIGFjdGl2ZUFjY29yZGlvbklkID0gMDtcbiAga2VlcFByZWRlZmluZWRMaXN0T3JpZ2luYWxPcmRlcjogYm9vbGVhbjtcbiAgc2hvd0NsZWFyRmlsdGVyc0J1dHRvbiA9IHRydWU7XG5cbiAgcHJpdmF0ZSBncmlkUXVlcnk6IEdyaWRRdWVyeTtcbiAgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZFNlcnZpY2U7XG4gIHByaXZhdGUgY29sRmllbGQ6IHN0cmluZztcbiAgcHJpdmF0ZSBleGNsdWRlZFZhbHVlcyA9IG5ldyBTZXQ8c3RyaW5nIHwgbnVtYmVyPigpO1xuICBwcml2YXRlIGJ5VmFsdWVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBwaXZvdENvbHVtbjogQ29sdW1uO1xuICBwcml2YXRlIGlucHV0Q29uZGl0aW9uc09wZXJhdG9yOiBPcGVyYXRvclR5cGVzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaG9zdDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHBvcG92ZXI6IFBvcG92ZXJSZWY8RGF0b0NvbHVtbk1lbnVEYXRhPixcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogRGF0b1RyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBnZXQgYnlWYWx1ZUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJGb3JtLmdldCgnYnlWYWx1ZScpO1xuICB9XG5cbiAgZ2V0IGNvbmRpdGlvbnNDb250cm9scygpOiBBYnN0cmFjdENvbnRyb2xbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9ucy5jb250cm9scztcbiAgfVxuXG4gIGdldCBjb25kaXRpb25zT3BlcmF0b3IoKTogT3BlcmF0b3JUeXBlcyB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyRm9ybS5nZXQoJ2NvbmRpdGlvbmFsLm9wZXJhdG9yJykudmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0T3BlcmFuZCgpOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIHR5cGU6IFt0aGlzLmNvbmRpdGlvbmFsRmlsdGVyT3B0aW9uc1swXV0sXG4gICAgICB2YWx1ZTogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgcmFuZ2VFbmQ6IFtudWxsXVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXNQcmVkZWZpbmVkTGlzdEl0ZW1zKCkge1xuICAgIGNvbnN0IHsgZmlsdGVyc0NvbmZpZyA9IHt9IH0gPSB0aGlzLmNvbERlZjtcbiAgICByZXR1cm4gZmlsdGVyc0NvbmZpZy5wcmVkZWZpbmVkTGlzdFZhbHVlcyAmJiB0eXBlb2YgZmlsdGVyc0NvbmZpZy5wcmVkZWZpbmVkTGlzdFZhbHVlc1swXSA9PT0gJ29iamVjdCc7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0Q29uZGl0aW9uYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgb3BlcmF0b3I6IFt0aGlzLmlucHV0Q29uZGl0aW9uc09wZXJhdG9yIHx8IE9wZXJhdG9yVHlwZXMuQU5EXSxcbiAgICAgIGNvbmRpdGlvbnM6IHRoaXMuZmIuYXJyYXkoW3RoaXMuZGVmYXVsdE9wZXJhbmRdKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdEJ5VmFsdWUoKSB7XG4gICAgcmV0dXJuIFt0aGlzLmNvbHVtblZhbHVlc107XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0Rm9ybSgpOiBGb3JtR3JvdXAge1xuICAgIGNvbnN0IGZpbHRlcnM6IHsgYnlWYWx1ZT87IGNvbmRpdGlvbmFsPyB9ID0ge307XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQnlfVmFsdWUpIHtcbiAgICAgIGZpbHRlcnMuYnlWYWx1ZSA9IHRoaXMuZGVmYXVsdEJ5VmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICBmaWx0ZXJzLmNvbmRpdGlvbmFsID0gdGhpcy5kZWZhdWx0Q29uZGl0aW9uYWw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKGZpbHRlcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29uZGl0aW9ucygpOiBGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0uZ2V0KCdjb25kaXRpb25hbC5jb25kaXRpb25zJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29sRmlsdGVyKCk6IERhdG9HcmlkRmlsdGVyIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmdyaWRRdWVyeS5nZXRGaWx0ZXIoKVt0aGlzLmNvbEZpZWxkXTtcblxuICAgIHJldHVybiBmaWx0ZXIgJiYgaXNBcnJheVZhbHVlc0VxdWFsKHRoaXMucGl2b3RLZXlzLCBmaWx0ZXIucGl2b3RLZXlzKSA/IGZpbHRlciA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb2xEZWYoKTogRGF0b0dyaWRDb2x1bW5EZWYge1xuICAgIHJldHVybiB0aGlzLnBvcG92ZXIuZGF0YS5jb2x1bW4uZ2V0Q29sRGVmKCkgYXMgRGF0b0dyaWRDb2x1bW5EZWY7XG4gIH1cblxuICBwcml2YXRlIGdldCBwaXZvdEtleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmNvbERlZi5waXZvdEtleXMgfHwgW107XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCB7IGdyaWRTZXJ2aWNlLCBncmlkUXVlcnkgfSA9IHRoaXMucG9wb3Zlci5kYXRhO1xuICAgIGNvbnN0IHsgZmlsdGVyLCBwaXZvdFZhbHVlQ29sdW1uLCBwaXZvdEtleXMgfSA9IHRoaXMuY29sRGVmO1xuICAgIGNvbnN0IGNvbERlZnMgPSBncmlkUXVlcnkuYXBpLmNvbHVtbnMuZ2V0QWxsQ29sdW1ucygpLm1hcChjb2x1bW4gPT4gY29sdW1uLmdldENvbERlZigpKTtcblxuICAgIHRoaXMuY29sRmllbGQgPSBnZXRDb2xGaWVsZCh0aGlzLmNvbERlZik7XG5cbiAgICBjb25zdCBjb2xEZWY6IERhdG9HcmlkQ29sdW1uRGVmID0gY29sRGVmcy5maW5kKGNvbERlZiA9PiBjb2xEZWYuZmllbGQgPT09IHRoaXMuY29sRmllbGQpO1xuICAgIGNvbnN0IGZpbHRlcnNDb25maWcgPSBjb2xEZWYuZmlsdGVyc0NvbmZpZyB8fCB0aGlzLmNvbERlZi5maWx0ZXJzQ29uZmlnIHx8IHt9O1xuICAgIGNvbnN0IGNvbEZpbHRlciA9IGZpbHRlciB8fCBjb2xEZWYuZmlsdGVyO1xuICAgIGNvbnN0IGZpbHRlck9wdGlvbnMgPSBEYXRvR3JpZEZpbHRlck9wdGlvbnNNYXBbY29sRmlsdGVyIGFzIHN0cmluZ107XG5cbiAgICB0aGlzLnBpdm90Q29sdW1uID0gZ3JpZFF1ZXJ5LmFwaS5jb2x1bW5zLmdldFNlY29uZGFyeVBpdm90Q29sdW1uKHBpdm90S2V5cywgcGl2b3RWYWx1ZUNvbHVtbik7XG4gICAgdGhpcy5pbnB1dENvbmRpdGlvbnNPcGVyYXRvciA9IGZpbHRlcnNDb25maWcuaW5wdXRDb25kaXRpb25zT3BlcmF0b3I7XG5cbiAgICBpZiAoIWlzTmlsKGZpbHRlcnNDb25maWcuc2hvd0NsZWFyRmlsdGVyc0J1dHRvbikpIHtcbiAgICAgIHRoaXMuc2hvd0NsZWFyRmlsdGVyc0J1dHRvbiA9IGZpbHRlcnNDb25maWcuc2hvd0NsZWFyRmlsdGVyc0J1dHRvbjtcbiAgICB9XG5cbiAgICBpZiAoZmlsdGVyc0NvbmZpZy5zZWN0aW9ucykge1xuICAgICAgdGhpcy5maWx0ZXJTZWN0aW9ucyA9IHsgW2ZpbHRlcnNDb25maWcuc2VjdGlvbnNdOiB0cnVlIH07XG4gICAgfVxuXG4gICAgdGhpcy5rZWVwUHJlZGVmaW5lZExpc3RPcmlnaW5hbE9yZGVyID1cbiAgICAgIGZpbHRlcnNDb25maWcua2VlcFByZWRlZmluZWRMaXN0T3JpZ2luYWxPcmRlciAmJiAhaXNFbXB0eShmaWx0ZXJzQ29uZmlnLnByZWRlZmluZWRMaXN0VmFsdWVzKTtcblxuICAgIHRoaXMuZmlsdGVyVHlwZSA9IGZpbHRlck9wdGlvbnMgPyAoY29sRmlsdGVyIGFzIERhdG9HcmlkRmlsdGVyVHlwZXMpIDogRGF0b0dyaWRGaWx0ZXJUeXBlcy5TdHJpbmc7XG4gICAgdGhpcy5saXN0TGFiZWxUeXBlID0gdGhpcy5maWx0ZXJUeXBlLnRvTG93ZXJDYXNlKCkgYXMgU29ydExhYmVsVHlwZTtcbiAgICB0aGlzLmxpc3RTb3J0QnlLZXkgPSB0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuTnVtYmVyICYmIHRoaXMuY29sRGVmLnZhbHVlRm9ybWF0dGVyID8gJ2lkJyA6ICdsYWJlbCc7XG4gICAgdGhpcy5ncmlkUXVlcnkgPSBncmlkUXVlcnk7XG4gICAgdGhpcy5ncmlkU2VydmljZSA9IGdyaWRTZXJ2aWNlO1xuICAgIHRoaXMuaGFzRmlsdGVyJCA9IHRoaXMuZ3JpZFF1ZXJ5XG4gICAgICAuc2VsZWN0KHN0YXRlID0+IHN0YXRlLnNldHRpbmdzLmZpbHRlclt0aGlzLmNvbEZpZWxkXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoZmlsdGVyID0+IHtcbiAgICAgICAgICByZXR1cm4gIWlzTmlsKGZpbHRlcikgJiYgaXNBcnJheVZhbHVlc0VxdWFsKGZpbHRlci5waXZvdEtleXMsIHRoaXMucGl2b3RLZXlzKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgbGV0IGZpbHRlckNvbmRpdGlvbnM6IERhdG9GaWx0ZXJDb25kaXRpb25zW10gPSBmaWx0ZXJPcHRpb25zIHx8IERhdG9HcmlkU3RyaW5nRmlsdGVyT3B0aW9ucztcblxuICAgICAgaWYgKGZpbHRlcnNDb25maWcuc2hvd0VtcHR5Q29uZGl0aW9ucykge1xuICAgICAgICBsZXQgZW1wdHlDb25kaXRpb25zID0gW0RhdG9GaWx0ZXJDb25kaXRpb25zLklTX0VNUFRZLCBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfRU1QVFldO1xuXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuTnVtYmVyKSB7XG4gICAgICAgICAgZW1wdHlDb25kaXRpb25zID0gW0RhdG9GaWx0ZXJDb25kaXRpb25zLklTX05VTEwsIERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9OVUxMXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlckNvbmRpdGlvbnMgPSBbLi4uZmlsdGVyQ29uZGl0aW9ucywgLi4uZW1wdHlDb25kaXRpb25zXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zID0gZmlsdGVyQ29uZGl0aW9ucy5tYXAoKG9wZXJhbmQsIGlkKSA9PiAoe1xuICAgICAgICBpZCxcbiAgICAgICAgb3BlcmFuZCxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybShgY29yZS4ke3RoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5EYXRlID8gJ0RBVEVfJyA6ICcnfSR7b3BlcmFuZH1gKVxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGxldCBvcmlnaW5hbE9wdGlvbnM7XG5cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgY29uc3QgeyBwcmVkZWZpbmVkTGlzdFZhbHVlcyB9ID0gZmlsdGVyc0NvbmZpZztcbiAgICAgIHRoaXMuaXNDbGllbnRTaWRlR3JpZCA9ICFpc05pbChwcmVkZWZpbmVkTGlzdFZhbHVlcykgfHwgIWdyaWRRdWVyeS5pc1NlcnZlclNpZGU7XG4gICAgICBpZiAoIXByZWRlZmluZWRMaXN0VmFsdWVzIHx8IHRoaXMuaXNTdHJpbmdBcnJheShwcmVkZWZpbmVkTGlzdFZhbHVlcykpIHtcbiAgICAgICAgY29uc3QgcmF3VmFsdWVzID0gcHJlZGVmaW5lZExpc3RWYWx1ZXMgYXMgc3RyaW5nW107XG4gICAgICAgIGlmIChyYXdWYWx1ZXMpIHtcbiAgICAgICAgICB0aGlzLmNvbHVtblZhbHVlcyA9IHJhd1ZhbHVlcztcbiAgICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gcmF3VmFsdWVzLm1hcChtYXBUb0xpc3RJdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZXMgPSB0aGlzLmdldENvbHVtblZhbHVlcygpO1xuICAgICAgICAgIHRoaXMuY29sdW1uVmFsdWVzID0gY29sdW1uVmFsdWVzLm1hcCgoeyB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIWlzTmlsKHRoaXMucGl2b3RDb2x1bW4pICYmIHZhbHVlID8gdmFsdWVbdGhpcy5jb2xGaWVsZF0gOiB2YWx1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gY29sdW1uVmFsdWVzLm1hcChjb2xWYWx1ZSA9PlxuICAgICAgICAgICAgbWFwVG9MaXN0SXRlbVdpdGhGb3JtYXR0ZWQoY29sVmFsdWUsICFpc05pbCh0aGlzLnBpdm90Q29sdW1uKSAmJiB0aGlzLmNvbEZpZWxkKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJhd1ZhbHVlcyA9IHByZWRlZmluZWRMaXN0VmFsdWVzIGFzIExpc3RJdGVtW107XG4gICAgICAgIHRoaXMuY29sdW1uVmFsdWVzID0gcmF3VmFsdWVzLm1hcChtYXBUb1ZhbHVlKTtcbiAgICAgICAgdGhpcy5saXN0T3B0aW9ucyA9IHJhd1ZhbHVlcztcbiAgICAgIH1cblxuICAgICAgb3JpZ2luYWxPcHRpb25zID0gdGhpcy5saXN0T3B0aW9ucztcblxuICAgICAgaWYgKCF0aGlzLmlzQ2xpZW50U2lkZUdyaWQpIHtcbiAgICAgICAgdGhpcy5saXN0U2VhcmNoQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSkuc3Vic2NyaWJlKChzZWFyY2hUZXJtOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLnNlcnZlclNlYXJjaEVycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgICBpZiAoc2VhcmNoVGVybS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdMaXN0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gb3JpZ2luYWxPcHRpb25zO1xuICAgICAgICAgICAgdGhpcy5wYXRjaEFuZFJlUmVnaXN0ZXIodGhpcy5jb2x1bW5WYWx1ZXMpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdldFZhbHVlc0Zyb21TZXJ2ZXIoc2VhcmNoVGVybSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRGb3JtKCk7XG4gIH1cblxuICBjbG9zZVBvcFVwKCkge1xuICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgdGhpcy5wb3BvdmVyLmNsb3NlKCk7XG4gIH1cblxuICBhcHBseUZpbHRlcnMoKSB7XG4gICAgdGhpcy5maWx0ZXJGb3JtLnZhbGlkICYmIHRoaXMuZmlsdGVyRm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgaWYgKHRoaXMuZmlsdGVyRm9ybS5kaXJ0eSAmJiAodGhpcy5maWx0ZXJGb3JtLnZhbGlkIHx8IHRoaXMuZmlsdGVyRm9ybS5nZXQoJ2NvbmRpdGlvbmFsJykucHJpc3RpbmUpKSB7XG4gICAgICBjb25zdCB7IGNvbHVtbiB9ID0gdGhpcy5wb3BvdmVyLmRhdGE7XG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKCk7XG4gICAgICBpc0VtcHR5KGZpbHRlcilcbiAgICAgICAgPyB0aGlzLmdyaWRTZXJ2aWNlLmNsZWFyQ29sdW1uRmlsdGVyKHRoaXMuY29sRmllbGQpXG4gICAgICAgIDogdGhpcy5ncmlkU2VydmljZS5zZXRDb2x1bW5GaWx0ZXIoY29sdW1uLCBmaWx0ZXIpO1xuXG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLm5vdGlmeUZpbHRlclVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyRmlsdGVycygpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNsZWFyQ29sdW1uRmlsdGVyKHRoaXMuY29sRmllbGQpO1xuICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gIH1cblxuICByZW1vdmVDb25kaXRpb24oaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuY29uZGl0aW9ucy5yZW1vdmVBdChpbmRleCk7XG4gICAgdGhpcy5maWx0ZXJGb3JtLm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICBhZGRDb25kaXRpb24oKSB7XG4gICAgdGhpcy5maWx0ZXJGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgdGhpcy5jb25kaXRpb25zLnB1c2godGhpcy5kZWZhdWx0T3BlcmFuZCk7XG4gIH1cblxuICBnZXRPcGVyYW5kVHlwZShpOiBudW1iZXIpIHtcbiAgICBjb25zdCBjb25kaXRpb25UeXBlID0gdGhpcy5jb25kaXRpb25zLmF0KGkpLnZhbHVlLnR5cGU7XG4gICAgcmV0dXJuIGNvbmRpdGlvblR5cGUgPyBjb25kaXRpb25UeXBlLm9wZXJhbmQgOiBudWxsO1xuICB9XG5cbiAgaXNDb25kaXRpb25hbEVtcHR5KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG9wZXJhbmQ6IERhdG9GaWx0ZXJDb25kaXRpb25zID1cbiAgICAgIGNvbnRyb2wgJiYgY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlLnR5cGUgPyBjb250cm9sLnZhbHVlLnR5cGUub3BlcmFuZCA6IG51bGw7XG4gICAgcmV0dXJuIHRoaXMuaXNFbXB0eU9wZXJhbmQob3BlcmFuZCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmJ5VmFsdWVTdWJzY3JpcHRpb24gJiYgdGhpcy5ieVZhbHVlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIHR5cGU6IFwiRXhjbHVkZVwiXG4gICAqIFNlbGVjdGVkIHZhbHVlczogQSwgQywgRFxuICAgKiBBbGwgbGlzdDogQSwgQiwgQywgRFxuICAgKiBSZXN1bHQ6IEJcbiAgICogQHBhcmFtIGluY2x1ZGVkQXJyIC1UaGUgbGlzdCBvZiB2YWx1ZXMgdG8gaW5jbHVkZVxuICAgKiBAcGFyYW0gYXNMaXN0SXRlbSAtSW5kaWNhdGVzIGlmIHRoZSByZXNwb25zZSBuZWVkcyB0byBiZSBhcyBzdHJpbmcgb3IgYXMgTGlzdEl0ZW1cbiAgICovXG4gIHByaXZhdGUgZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoaW5jbHVkZWRBcnI6IChMaXN0SXRlbSB8IHN0cmluZyB8IG51bWJlcilbXSwgYXNMaXN0SXRlbTogdHJ1ZSk6IExpc3RJdGVtW107XG4gIHByaXZhdGUgZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoaW5jbHVkZWRBcnI6IChMaXN0SXRlbSB8IHN0cmluZyB8IG51bWJlcilbXSk6IChzdHJpbmcgfCBudW1iZXIpW107XG4gIHByaXZhdGUgZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoXG4gICAgaW5jbHVkZWRBcnI6IChMaXN0SXRlbSB8IHN0cmluZyB8IG51bWJlcilbXSxcbiAgICBhc0xpc3RJdGVtID0gZmFsc2VcbiAgKTogKHN0cmluZyB8IG51bWJlcilbXSB8IExpc3RJdGVtW10ge1xuICAgIGxldCBpbmNsdWRlZFNldDtcbiAgICBpZiAodGhpcy5pc1ByZWRlZmluZWRMaXN0SXRlbXMpIHtcbiAgICAgIGNvbnN0IHByZWRlZmluZWRMaXN0ID0gdGhpcy5jb2xEZWYuZmlsdGVyc0NvbmZpZy5wcmVkZWZpbmVkTGlzdFZhbHVlcyBhcyBMaXN0SXRlbVtdO1xuICAgICAgaW5jbHVkZWRTZXQgPSBuZXcgU2V0KFxuICAgICAgICBpbmNsdWRlZEFyci5tYXAodmFsID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtID0gcHJlZGVmaW5lZExpc3QuZmluZCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gdmFsKTtcbiAgICAgICAgICByZXR1cm4gaXRlbS5pZDtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluY2x1ZGVkU2V0ID0gbmV3IFNldChpbmNsdWRlZEFyci5tYXAodmFsID0+IChpc09iamVjdDxMaXN0SXRlbT4odmFsKSA/IHZhbC52YWx1ZSA6IHZhbCkpKTtcbiAgICB9XG4gICAgaWYgKGFzTGlzdEl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmxpc3RPcHRpb25zLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiAhaW5jbHVkZWRTZXQuaGFzKHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbHVtblZhbHVlcy5maWx0ZXIodmFsdWUgPT4gIWluY2x1ZGVkU2V0Lmhhcyh2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZpbHRlcigpOiBEYXRvR3JpZEZpbHRlciB7XG4gICAgY29uc3QgeyBieVZhbHVlLCBjb25kaXRpb25hbCB9ID0gdGhpcy5maWx0ZXJGb3JtLnZhbHVlO1xuICAgIGNvbnN0IGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIgPSB7fTtcblxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICB0aGlzLnNldENvbmRpdGlvbmFsRmlsdGVyKGZpbHRlciwgY29uZGl0aW9uYWwpO1xuICAgIH1cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgdGhpcy5zZXRCeVZhbHVlRmlsdGVyKGZpbHRlciwgYnlWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIElmIGZpbHRlcnMgYXBwbGllZCwgYWRkIHRoZSBleHRyYSBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgcGl2b3QgbW9kZSAqL1xuICAgIGlmIChmaWx0ZXIuYnlWYWx1ZSB8fCBmaWx0ZXIuY29uZGl0aW9uYWwpIHtcbiAgICAgIGZpbHRlci5jb2xJZCA9IHRoaXMuY29sRGVmLmNvbElkO1xuICAgICAgZmlsdGVyLnBpdm90S2V5cyA9IHRoaXMucGl2b3RLZXlzO1xuXG4gICAgICBpZiAodGhpcy5waXZvdENvbHVtbikge1xuICAgICAgICBmaWx0ZXIucGl2b3RGaWVsZHNNYXAgPSB0aGlzLmdldFBpdm90RmllbGRzKHRoaXMucGl2b3RDb2x1bW4uZ2V0UGFyZW50KCkpLnJlZHVjZSgoZmllbGRNYXAsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnBpdm90S2V5c1tpbmRleF0pIHtcbiAgICAgICAgICAgIGZpZWxkTWFwW2ZpZWxkXSA9IHRoaXMucGl2b3RLZXlzW2luZGV4XTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmllbGRNYXA7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Rm9ybSgpIHtcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHRoaXMuY29sRmlsdGVyO1xuICAgIHRoaXMuZmlsdGVyRm9ybSA9IGZpbHRlclZhbHVlID8gdGhpcy5idWlsZEZvcm1Gcm9tRmlsdGVyKGZpbHRlclZhbHVlKSA6IHRoaXMuZGVmYXVsdEZvcm07XG4gICAgdGhpcy5yZWdpc3Rlck9wZXJhbmRMaXN0ZW5lcnMoKTtcbiAgICBpZiAoIXRoaXMuaXNDbGllbnRTaWRlR3JpZCAmJiB0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyQnlWYWx1ZUxpc3RlbmVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBmaWx0ZXIgdmlldyBmcm9tIGEgZ2l2ZW4gZmlsdGVyXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkRm9ybUZyb21GaWx0ZXIoZmlsdGVyOiBEYXRvR3JpZEZpbHRlcik6IEZvcm1Hcm91cCB7XG4gICAgY29uc3QgZmlsdGVyR3JvdXAgPSB7fTtcbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgZmlsdGVyR3JvdXBbJ2NvbmRpdGlvbmFsJ10gPSB0aGlzLmJ1aWxkQ29uZGl0aW9uYWxGaWx0ZXIoZmlsdGVyLmNvbmRpdGlvbmFsKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQnlfVmFsdWUpIHtcbiAgICAgIGZpbHRlckdyb3VwWydieVZhbHVlJ10gPSB0aGlzLmJ1aWxkQnlWYWx1ZUZpbHRlcihmaWx0ZXIuYnlWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKGZpbHRlckdyb3VwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgZmlsdGVyIHZpZXdcbiAgICovXG4gIHByaXZhdGUgcmVzZXRGb3JtKCkge1xuICAgIHRoaXMuZmlsdGVyRm9ybS5zZXRFcnJvcnMobnVsbCk7XG4gICAgbGV0IG9yaWdpbmFsU3RhdGUgPSB7fTtcbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgb3JpZ2luYWxTdGF0ZSA9IHsgYnlWYWx1ZTogdGhpcy5jb2x1bW5WYWx1ZXMgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwpIHtcbiAgICAgIG9yaWdpbmFsU3RhdGUgPSB7XG4gICAgICAgIC4uLm9yaWdpbmFsU3RhdGUsXG4gICAgICAgIGNvbmRpdGlvbmFsOiB7XG4gICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELFxuICAgICAgICAgIGNvbmRpdGlvbnM6IFt7IHR5cGU6IHRoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zWzBdLCB2YWx1ZTogbnVsbCwgcmFuZ2VFbmQ6IG51bGwgfV1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbmRpdGlvbmFsID0gdGhpcy5maWx0ZXJGb3JtLmNvbnRyb2xzLmNvbmRpdGlvbmFsIGFzIEZvcm1Hcm91cDtcbiAgICAgIGNvbmRpdGlvbmFsLnJlbW92ZUNvbnRyb2woJ2NvbmRpdGlvbnMnKTtcbiAgICAgIGNvbmRpdGlvbmFsLmFkZENvbnRyb2woJ2NvbmRpdGlvbnMnLCB0aGlzLmZiLmFycmF5KFt0aGlzLmRlZmF1bHRPcGVyYW5kXSkpO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlckZvcm0ucmVzZXQob3JpZ2luYWxTdGF0ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuZmlsdGVyRm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCB0aGUgY29sdW1uIHZhbHVlcyB0byBkaXNwbGF5IG9uIHRoZSBsaXN0LlxuICAgKiAxLiBJdGVyYXRlIG92ZXIgdGhlIHJvd3MgYWZ0ZXIgZmlsdGVyaW5nIGFuZCBzb3J0aW5nIHdhcyBhcHBsaWVkXG4gICAqIDIuIFNpbmNlIHdlIGFsc28gd2FudCB0byBzaG93IHZhbHVlcyB0aGF0IHdlcmUgZmlsdGVyZWQgYnkgdGhpcyBjb2x1bW4gZmlsdGVyIHdlIGFyZSBpdGVyYXRpbmcgYWxsIHRoZSByb3dzXG4gICAqIChiZWZvcmUgdGhlIGZpbHRlcmluZyksIGZpbmRpbmcgd2hpY2ggd2VyZSByZW1vdmVkIGJ5IHRoaXMgY29sdW1uJ3MgZmlsdGVyIGFuZCBhZGRpbmcgdGhlbSBiYWNrLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRDb2x1bW5WYWx1ZXMoKTogVmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZVtdIHtcbiAgICBsZXQgdmFsdWVzOiBWYWx1ZUFuZEZvcm1hdHRlZFZhbHVlW10gPSBbXTtcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHRoaXMuY29sRmlsdGVyO1xuICAgIGNvbnN0IGRpc3BsYXllZFJvdyA9IHt9O1xuICAgIGNvbnN0IGJ5VmFsdWVUeXBlID0gZmlsdGVyVmFsdWUgJiYgZmlsdGVyVmFsdWUuYnlWYWx1ZSAmJiBmaWx0ZXJWYWx1ZS5ieVZhbHVlLmNvbmRpdGlvbjtcbiAgICBjb25zdCBhcGkgPSB0aGlzLmdyaWRRdWVyeS5hcGkuZ3JpZDtcbiAgICBjb25zdCBnZXRWYWx1ZUN1cnJpZWQgPSBjdXJyeSh0aGlzLmdldFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUpKHRoaXMuY29sRmllbGQsIGFwaSwgdGhpcy5jb2xEZWYudmFsdWVGb3JtYXR0ZXIpO1xuICAgIC8qKiAxLiBJdGVyYXRlIG92ZXIgdGhlIHJvd3MgYWZ0ZXIgZmlsdGVyaW5nIGFuZCBzb3J0aW5nIHdhcyBhcHBsaWVkICovXG4gICAgaWYgKHRoaXMuaXNDbGllbnRTaWRlR3JpZCkge1xuICAgICAgYXBpLmZvckVhY2hOb2RlQWZ0ZXJGaWx0ZXJBbmRTb3J0KHJvdyA9PiB7XG4gICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlQ3VycmllZChyb3cpKTtcbiAgICAgICAgZGlzcGxheWVkUm93W3Jvdy5pZF0gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIFdlIG9ubHkgZGlzcGxheSB0aGUgY3VycmVudCBwYWdlIGluIHRoZSBsaXN0ICovXG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IGFwaS5wYWdpbmF0aW9uR2V0UGFnZVNpemUoKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gYXBpLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpO1xuICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHBhZ2VTaXplICogY3VycmVudFBhZ2U7XG4gICAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBwYWdlU2l6ZTtcbiAgICAgIGFwaS5mb3JFYWNoTm9kZShyb3cgPT4ge1xuICAgICAgICBjb25zdCB7IHJvd0luZGV4IH0gPSByb3c7XG4gICAgICAgIGlmIChyb3dJbmRleCA+PSBzdGFydEluZGV4ICYmIHJvd0luZGV4IDwgZW5kSW5kZXgpIHtcbiAgICAgICAgICB2YWx1ZXMucHVzaChnZXRWYWx1ZUN1cnJpZWQocm93KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiAyLiBBZGQgYmFjayB2YWx1ZXMgdGhhdCB3ZXJlIGZpbHRlcmVkIGJ5IHRoaXMgY29sdW1uICovXG4gICAgaWYgKGJ5VmFsdWVUeXBlKSB7XG4gICAgICBpZiAoYnlWYWx1ZVR5cGUgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNUKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHRoaXMuY29sRGVmLnZhbHVlRm9ybWF0dGVyIGFzIChwYXJhbXM6IGFueSkgPT4gc3RyaW5nO1xuICAgICAgICBjb25zdCBjdXJyRmlsdGVyVmFsdWVzID0gZmlsdGVyVmFsdWUuYnlWYWx1ZS52YWx1ZXMubWFwKCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSBmb3JtYXR0ZXIgPyBmb3JtYXR0ZXIoeyB2YWx1ZSB9KSA6IHZhbHVlO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlLCBmb3JtYXR0ZWRWYWx1ZSB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdmFsdWVzID0gdmFsdWVzLmNvbmNhdChjdXJyRmlsdGVyVmFsdWVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgY29uZGl0aW9uYWwgfSA9IHRoaXMuY29sRmlsdGVyO1xuICAgICAgICBjb25zdCBhY3RpdmVGaWx0ZXJzID0ge1xuICAgICAgICAgIC4uLnRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpLFxuICAgICAgICAgIFt0aGlzLmNvbEZpZWxkXTogeyBjb25kaXRpb25hbCB9XG4gICAgICAgIH07XG4gICAgICAgIGFwaS5mb3JFYWNoTGVhZk5vZGUocm93ID0+IHtcbiAgICAgICAgICBpZiAoIWRpc3BsYXllZFJvdy5oYXNPd25Qcm9wZXJ0eShyb3cuaWQpICYmIHZhbGlkYXRlRmlsdGVyKHsgcm93LCBhcGkgfSwgYWN0aXZlRmlsdGVycykpIHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlQ3VycmllZChyb3cpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5pcUJ5KHZhbHVlcywgJ3ZhbHVlJyk7XG4gIH1cblxuICBwcml2YXRlIGdldFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUoXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICBhcGk6IEdyaWRBcGksXG4gICAgLy8gVE9ETzogZm9sbG93dXA6IGh0dHBzOi8vYWctZ3JpZC56ZW5kZXNrLmNvbS9oYy9lbi11cy9yZXF1ZXN0cy8xMTAxOVxuICAgIGZvcm1hdHRlcjogKHBhcmFtczogYW55KSA9PiBzdHJpbmcsXG4gICAgcm93OiBSb3dOb2RlXG4gICk6IFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUge1xuICAgIGNvbnN0IHZhbHVlID0gYXBpLmdldFZhbHVlKGZpZWxkLCByb3cpO1xuICAgIC8vIFRPRE86IGZvbGxvd3VwOiBodHRwczovL2FnLWdyaWQuemVuZGVzay5jb20vaGMvZW4tdXMvcmVxdWVzdHMvMTA5NjM/cGFnZT0xXG4gICAgcmV0dXJuIHsgdmFsdWUsIGZvcm1hdHRlZFZhbHVlOiBmb3JtYXR0ZXIgPyBmb3JtYXR0ZXIoeyB2YWx1ZSB9IGFzIGFueSkgOiB2YWx1ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb25kaXRpb25hbEZpbHRlcihcbiAgICBmaWx0ZXI6IERhdG9HcmlkRmlsdGVyLFxuICAgIHsgb3BlcmF0b3IsIGNvbmRpdGlvbnMgfTogeyBvcGVyYXRvcjogT3BlcmF0b3JUeXBlczsgY29uZGl0aW9uczogQ29uZGl0aW9ucyB9XG4gICkge1xuICAgIGNvbnN0IHZhbGlkQ29uZGl0aW9ucyA9IGNvbmRpdGlvbnMuZmlsdGVyKCh7IHZhbHVlLCB0eXBlIH0pID0+ICFpc05pbCh2YWx1ZSkgfHwgdGhpcy5pc0VtcHR5T3BlcmFuZCh0eXBlLm9wZXJhbmQpKTtcbiAgICBpZiAodmFsaWRDb25kaXRpb25zLmxlbmd0aCkge1xuICAgICAgZmlsdGVyLmNvbmRpdGlvbmFsID0ge1xuICAgICAgICB0eXBlOiAodGhpcy5jb2xEZWYuZmlsdGVyIGFzIERhdG9HcmlkRmlsdGVyVHlwZXMpIHx8IERhdG9HcmlkRmlsdGVyVHlwZXMuU3RyaW5nLFxuICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgY29uZGl0aW9uczogY29uZGl0aW9ucy5tYXAoKHsgdmFsdWUsIHR5cGUsIHJhbmdlRW5kIH0pID0+IHtcbiAgICAgICAgICBjb25zdCBiYXNlID0geyBjb25kaXRpb246IHR5cGUub3BlcmFuZCwgdmFsdWUgfTtcbiAgICAgICAgICBpZiAodHlwZS5vcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRSkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHsgLi4uYmFzZSwgcmFuZ2VFbmQgfTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuRGF0ZSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGZyb20sIHRvIH0gPSB2YWx1ZSBhcyBEYXRlUmFuZ2U7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHsgY29uZGl0aW9uOiB0eXBlLm9wZXJhbmQsIHZhbHVlOiBmcm9tIGFzIHN0cmluZywgcmFuZ2VFbmQ6IHRvIGFzIHN0cmluZyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYmFzZSBhcyBEYXRvR3JpZEZpbHRlckNvbmRpdGlvbjtcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRCeVZhbHVlRmlsdGVyKGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIsIGJ5VmFsdWU6IChzdHJpbmcgfCBudW1iZXIpW10pIHtcbiAgICBpZiAodGhpcy5pc0NsaWVudFNpZGVHcmlkKSB7XG4gICAgICBjb25zdCB2YWx1ZXNDb3VudCA9IHRoaXMuY29sdW1uVmFsdWVzLmxlbmd0aDtcbiAgICAgIGlmIChieVZhbHVlLmxlbmd0aCAhPT0gdmFsdWVzQ291bnQpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID1cbiAgICAgICAgICBieVZhbHVlLmxlbmd0aCA8IHZhbHVlc0NvdW50IC8gMiA/IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX0xJU1QgOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVDtcbiAgICAgICAgZmlsdGVyLmJ5VmFsdWUgPSB7XG4gICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgIHZhbHVlczogY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9MSVNUID8gYnlWYWx1ZSA6IHRoaXMuZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoYnlWYWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuZnJvbSh0aGlzLmV4Y2x1ZGVkVmFsdWVzLnZhbHVlcygpKTtcbiAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBmaWx0ZXIuYnlWYWx1ZSA9IHtcbiAgICAgICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNULFxuICAgICAgICAgIHZhbHVlc1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRCeVZhbHVlRmlsdGVyKGJ5VmFsdWU6IERhdG9HcmlkRmlsdGVyWydieVZhbHVlJ10pOiAoc3RyaW5nIHwgbnVtYmVyKVtdW10ge1xuICAgIGlmICghYnlWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEJ5VmFsdWU7XG4gICAgfVxuICAgIGlmIChieVZhbHVlLnZhbHVlcy5sZW5ndGggJiYgdGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgdGhpcy5hY3RpdmVBY2NvcmRpb25JZCA9IDE7XG4gICAgfVxuICAgIGlmIChieVZhbHVlLmNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1QpIHtcbiAgICAgIGlmICghdGhpcy5pc0NsaWVudFNpZGVHcmlkKSB7XG4gICAgICAgIHRoaXMuZXhjbHVkZWRWYWx1ZXMgPSBuZXcgU2V0KGJ5VmFsdWUudmFsdWVzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbdGhpcy5nZXRCeVZhbHVlRXhjbHVkZVZhbHVlcyhieVZhbHVlLnZhbHVlcyldO1xuICAgIH1cbiAgICByZXR1cm4gW2J5VmFsdWUudmFsdWVzXTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb25kaXRpb25hbEZpbHRlcihjb25kaXRpb25hbDogRGF0b0dyaWRGaWx0ZXJbJ2NvbmRpdGlvbmFsJ10pOiBGb3JtR3JvdXAge1xuICAgIGlmICghY29uZGl0aW9uYWwpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRDb25kaXRpb25hbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgb3BlcmF0b3I6IFt0aGlzLmlucHV0Q29uZGl0aW9uc09wZXJhdG9yIHx8IGNvbmRpdGlvbmFsLm9wZXJhdG9yXSxcbiAgICAgIGNvbmRpdGlvbnM6IHRoaXMuZmIuYXJyYXkodGhpcy5idWlsZENvbmRpdGlvbnMoY29uZGl0aW9uYWwuY29uZGl0aW9ucykpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ29uZGl0aW9ucyhjb25kaXRpb25zOiAoRGF0b0dyaWRGaWx0ZXJDb25kaXRpb24gfCBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uKVtdKTogRm9ybUdyb3VwW10ge1xuICAgIHJldHVybiBjb25kaXRpb25zLm1hcChjb25kaXRpb24gPT4ge1xuICAgICAgY29uc3QgeyBjb25kaXRpb246IGN1cnJlbnRPcGVyYW5kLCB2YWx1ZSB9ID0gY29uZGl0aW9uO1xuICAgICAgY29uc3QgZ3JvdXAgPSB7XG4gICAgICAgIHR5cGU6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogdGhpcy5jb25kaXRpb25hbEZpbHRlck9wdGlvbnMuZmluZEluZGV4KCh7IG9wZXJhbmQgfSkgPT4gb3BlcmFuZCA9PT0gY3VycmVudE9wZXJhbmQpLFxuICAgICAgICAgICAgb3BlcmFuZDogY3VycmVudE9wZXJhbmQsXG4gICAgICAgICAgICBsYWJlbDogYGNvcmUuJHtjdXJyZW50T3BlcmFuZH1gXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB2YWx1ZTogW3ZhbHVlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgcmFuZ2VFbmQ6IG51bGxcbiAgICAgIH07XG4gICAgICBpZiAoaXNSYW5nZUNvbmRpdGlvbjxEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uPihjb25kaXRpb24pKSB7XG4gICAgICAgIGdyb3VwLnJhbmdlRW5kID0gW2NvbmRpdGlvbi5yYW5nZUVuZCwgVmFsaWRhdG9ycy5yZXF1aXJlZF07XG4gICAgICAgIGdyb3VwLnZhbHVlID0gW3sgZnJvbTogY29uZGl0aW9uLnZhbHVlIGFzIHN0cmluZywgdG86IGNvbmRpdGlvbi5yYW5nZUVuZCBhcyBzdHJpbmcgfSwgVmFsaWRhdG9ycy5yZXF1aXJlZF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5mYi5ncm91cChncm91cCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gcmFuZ2UgaXMgbm90IHJlcXVpcmVkIGJ5IGRlZmF1bHQsIHdlIHdhbnQgdG8gbWFrZSBpdCByZXF1aXJlZCBvbmNlIHRoaXMgb3BlcmFuZCBpcyBzZWxlY3RlZC5cbiAgICogKi9cbiAgcHJpdmF0ZSByZWdpc3Rlck9wZXJhbmRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKCF0aGlzLmNvbmRpdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb25kaXRpb25zLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aCh0aGlzLmNvbmRpdGlvbnMubGVuZ3RoKSxcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuY29uZGl0aW9ucy5sZW5ndGgpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlQ2hhbmdlcyA9IHRoaXMuY29uZGl0aW9ucy5jb250cm9scy5tYXAoKGdyb3VwOiBGb3JtR3JvdXAsIGluZGV4KSA9PlxuICAgICAgICAgICAgZ3JvdXAuZ2V0KCd0eXBlJykudmFsdWVDaGFuZ2VzLnBpcGUobWFwKCh2YWx1ZTogQ29uZGl0aW9uT3B0aW9uKSA9PiAoeyB2YWx1ZSwgaW5kZXggfSkpKVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIG1lcmdlKC4uLnZhbHVlQ2hhbmdlcyk7XG4gICAgICAgIH0pLFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeyB2YWx1ZTogeyBvcGVyYW5kIH0sIGluZGV4IH0pID0+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBpbmRleCwgaW5SYW5nZTogb3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0UgfTtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5EYXRlKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVEYXRlSW5wdXQocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuTnVtYmVyKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVOdW1iZXJJbnB1dChwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWVDb250cm9sVmFsaWRhdG9yKG9wZXJhbmQsIGluZGV4KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXRlSW5wdXQoeyBpblJhbmdlLCBpbmRleCB9KSB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuY29uZGl0aW9ucy5hdChpbmRleCkuZ2V0KCd2YWx1ZScpO1xuICAgIGlmIChjb250cm9sLmRpcnR5KSB7XG4gICAgICBjb25zdCB7IHZhbHVlIH0gPSBjb250cm9sO1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBpblJhbmdlID8geyBmcm9tOiB2YWx1ZSwgdG86IHZhbHVlIH0gOiB2YWx1ZS5mcm9tO1xuICAgICAgY29udHJvbC5wYXRjaFZhbHVlKG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU51bWJlcklucHV0KHsgaW5SYW5nZSwgaW5kZXggfSkge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IGluUmFuZ2UgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbDtcbiAgICBjb25zdCByYW5nZUVuZCA9IHRoaXMuY29uZGl0aW9ucy5hdChpbmRleCkuZ2V0KCdyYW5nZUVuZCcpO1xuICAgIHJhbmdlRW5kLnNldFZhbGlkYXRvcnModmFsaWRhdG9yKTtcbiAgICByYW5nZUVuZC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZhbHVlQ29udHJvbFZhbGlkYXRvcihvcGVyYW5kOiBEYXRvRmlsdGVyQ29uZGl0aW9ucywgaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9ICF0aGlzLmlzRW1wdHlPcGVyYW5kKG9wZXJhbmQpID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IG51bGw7XG4gICAgY29uc3QgdmFsdWVDb250cm9sID0gdGhpcy5jb25kaXRpb25zLmF0KGluZGV4KS5nZXQoJ3ZhbHVlJykgYXMgRm9ybUNvbnRyb2w7XG4gICAgdmFsdWVDb250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9yKTtcbiAgICB2YWx1ZUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VtcHR5T3BlcmFuZChvcGVyYW5kOiBEYXRvRmlsdGVyQ29uZGl0aW9ucyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBvcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19FTVBUWSB8fFxuICAgICAgb3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0VNUFRZIHx8XG4gICAgICBvcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19OVUxMIHx8XG4gICAgICBvcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfTlVMTFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGlzU3RyaW5nQXJyYXkodmFsdWU6IChzdHJpbmcgfCBMaXN0SXRlbSlbXSk6IHZhbHVlIGlzIHN0cmluZ1tdIHtcbiAgICByZXR1cm4gaXNTdHJpbmcodmFsdWVbMF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZXNGcm9tU2VydmVyKHNlYXJjaFRlcm06IHN0cmluZykge1xuICAgIHRoaXMubG9hZGluZ0xpc3QgPSB0cnVlO1xuICAgIHRoaXMubGlzdE9wdGlvbnMgPSBbXTtcbiAgICBjb25zdCBwYXJhbXM6IFBhcnRpYWw8RGF0b0dyaWRHZXRSb3dzUGFyYW1zPiA9IHtcbiAgICAgIGZhaWxDYWxsYmFjazogKCkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmdMaXN0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VydmVyU2VhcmNoRXJyb3JlZCA9IHRydWU7XG4gICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICAgIHN1Y2Nlc3NDYWxsYmFjazogZGF0YSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ0xpc3QgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZmxhdERhdGEgPSBkYXRhLm1hcCh2YWx1ZSA9PiB2YWx1ZVt0aGlzLmNvbEZpZWxkXSk7XG4gICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSBmbGF0RGF0YS5tYXAobWFwVG9MaXN0SXRlbSk7XG4gICAgICAgIHRoaXMucGF0Y2hBbmRSZVJlZ2lzdGVyKGZsYXREYXRhKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICAgIHNlcnZlckNvbmZpZzoge1xuICAgICAgICBwYWdlU2l6ZTogMzAsXG4gICAgICAgIHBhZ2VOdW1iZXI6IDEsXG4gICAgICAgIGNvbHVtbkZpbHRlcnM6IHtcbiAgICAgICAgICBbdGhpcy5jb2xGaWVsZF06IHtcbiAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzLkFORCxcbiAgICAgICAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogRGF0b0ZpbHRlckNvbmRpdGlvbnMuQ09OVEFJTlMsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHNlYXJjaFRlcm1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc29ydDogW10sXG4gICAgICAgIGNvbHVtbnNUb1JldHVybjogW3RoaXMuY29sRmllbGRdLFxuICAgICAgICBkaXN0aW5jdFJlc3VsdHM6IHRydWVcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuX29yaWdpbmFsR2V0Um93cyhwYXJhbXMgYXMgYW55KTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKiBXaGVuIHNlYXJjaGluZyB0aGUgYnkgdmFsdWUgZmlsdGVyIG9uIHNlcnZlciBzaWRlIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBjb250cm9sIHdpdGggdGhlIG5ldyB2YWx1ZXMgYW5kIHJlLXJlZ2lzdGVyIHRvIHRoZSBjaGFuZ2VzICovXG4gIHByaXZhdGUgcGF0Y2hBbmRSZVJlZ2lzdGVyKGRhdGE6IChzdHJpbmcgfCBudW1iZXIpW10pIHtcbiAgICB0aGlzLmJ5VmFsdWVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmJ5VmFsdWVDb250cm9sLnBhdGNoVmFsdWUodGhpcy5nZXROb25FeGNsdWRlZFZhbHVlcyhkYXRhKSk7XG4gICAgdGhpcy5yZWdpc3RlckJ5VmFsdWVMaXN0ZW5lcigpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlckJ5VmFsdWVMaXN0ZW5lcigpIHtcbiAgICBjb25zdCBieVZhbHVlID0gdGhpcy5ieVZhbHVlQ29udHJvbDtcbiAgICB0aGlzLmJ5VmFsdWVTdWJzY3JpcHRpb24gPSBieVZhbHVlLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aChieVZhbHVlLnZhbHVlKSxcbiAgICAgICAgcGFpcndpc2UoKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoW3ByZXYsIGN1cnJlbnRdKSA9PiB7XG4gICAgICAgIGNvbnN0IGFkZFRvRXhjbHVkZWQgPSBjdXJyZW50Lmxlbmd0aCA8IHByZXYubGVuZ3RoO1xuICAgICAgICBjb25zdCBkaWZmID0gYWRkVG9FeGNsdWRlZCA/IGRpZmZlcmVuY2UocHJldiwgY3VycmVudCkgOiBkaWZmZXJlbmNlKGN1cnJlbnQsIHByZXYpO1xuICAgICAgICBkaWZmLmZvckVhY2godiA9PiAoYWRkVG9FeGNsdWRlZCA/IHRoaXMuZXhjbHVkZWRWYWx1ZXMuYWRkKHYpIDogdGhpcy5leGNsdWRlZFZhbHVlcy5kZWxldGUodikpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROb25FeGNsdWRlZFZhbHVlcyhkYXRhOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogKHN0cmluZyB8IG51bWJlcilbXSB7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKHYgPT4gIXRoaXMuZXhjbHVkZWRWYWx1ZXMuaGFzKHYpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcGl2b3QgZGltZW5zaW9ucyBhcyBkZWZpbmVkIGluIHRoZSBwYXJlbnQgZ3JvdXAgY29sdW1uIGhlYWRlciBjbGFzcy5cbiAgICovXG4gIHByaXZhdGUgZ2V0UGl2b3RGaWVsZHMocGFyZW50OiBDb2x1bW5Hcm91cCwgZmllbGRzID0gW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZ3JhbmRQYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50KCk7XG4gICAgY29uc3QgaGVhZGVyQ2xhc3MgPSBwYXJlbnQuZ2V0T3JpZ2luYWxDb2x1bW5Hcm91cCgpLmdldENvbEdyb3VwRGVmKCkuaGVhZGVyQ2xhc3M7XG5cbiAgICBpZiAoZ3JhbmRQYXJlbnQpIHtcbiAgICAgIHRoaXMuZ2V0UGl2b3RGaWVsZHMoZ3JhbmRQYXJlbnQsIGZpZWxkcyk7XG4gICAgfVxuXG4gICAgaGVhZGVyQ2xhc3MgJiYgZmllbGRzLnB1c2goaGVhZGVyQ2xhc3NbMF0pO1xuXG4gICAgcmV0dXJuIGZpZWxkcztcbiAgfVxufVxuIl19
|
|
730
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLWZpbHRlci9ncmlkLWZpbHRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLG9CQUFvQixFQUdwQix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLG1CQUFtQixFQUVuQiwyQkFBMkIsRUFDM0IsZ0JBQWdCLEVBRWpCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0csT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXZELE9BQU8sRUFBRSxLQUFLLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEUsT0FB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XG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IERhdG9yYW1hLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIEFwYWNoZSBMaWNlbnNlIDIuMCBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRvcmFtYS9jbGllbnQtY29yZS9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBEYXRvRmlsdGVyQ29uZGl0aW9ucyxcbiAgRGF0b0dyaWRGaWx0ZXIsXG4gIERhdG9HcmlkRmlsdGVyQ29uZGl0aW9uLFxuICBEYXRvR3JpZEZpbHRlck9wdGlvbnNNYXAsXG4gIERhdG9HcmlkRmlsdGVyU2VjdGlvbnMsXG4gIERhdG9HcmlkRmlsdGVyVHlwZXMsXG4gIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24sXG4gIERhdG9HcmlkU3RyaW5nRmlsdGVyT3B0aW9ucyxcbiAgaXNSYW5nZUNvbmRpdGlvbixcbiAgTGlzdEl0ZW1cbn0gZnJvbSAnLi9ncmlkLWZpbHRlci50eXBlcyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBQb3BvdmVyUmVmIH0gZnJvbSAnLi4vLi4vcG9wb3Zlci9wb3BvdmVyLXJlZic7XG5pbXBvcnQgeyBHcmlkUXVlcnkgfSBmcm9tICcuLi9ncmlkLXN0b3JlL2dyaWQucXVlcnknO1xuaW1wb3J0IHsgbWVyZ2UsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgcGFpcndpc2UsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZGlmZmVyZW5jZSwgaXNBcnJheVZhbHVlc0VxdWFsLCB1bmlxQnkgfSBmcm9tICcuLi8uLi91dGlscy9hcnJheSc7XG5pbXBvcnQgeyBpc0VtcHR5LCBpc05pbCwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gJy4uL2dyaWQtc3RvcmUvZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7IE9wZXJhdG9yVHlwZXMgfSBmcm9tICcuLi8uLi9vcGVyYXRvci10b2dnbGVyL29wZXJhdG9yLXRvZ2dsZXIudHlwZXMnO1xuaW1wb3J0IHsgRGF0b1RyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUuc2VydmljZSc7XG5pbXBvcnQgeyB2YWxpZGF0ZUZpbHRlciB9IGZyb20gJy4vZmlsdGVyLXZhbGlkYXRvcic7XG5pbXBvcnQgeyBEYXRvR3JpZENvbHVtbkRlZiwgRGF0b0dyaWRHZXRSb3dzUGFyYW1zIH0gZnJvbSAnLi4vZ3JpZC9ncmlkLXYyLnR5cGVzJztcbmltcG9ydCB7IHVudGlsRGVzdHJveWVkIH0gZnJvbSAnbmd4LXRha2UtdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBEYXRvQ29sdW1uTWVudURhdGEgfSBmcm9tICcuLi9ncmlkLWNvbHVtbi1oZWFkZXIvZ3JpZC1jb2x1bW4taGVhZGVyLnR5cGVzJztcbmltcG9ydCB7IENvbHVtbiwgQ29sdW1uR3JvdXAsIEdyaWRBcGksIFJvd05vZGUgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tICcuLi8uLi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci50eXBlcyc7XG5pbXBvcnQgeyBjdXJyeSB9IGZyb20gJy4uLy4uL3V0aWxzL2Z1bmN0aW9uJztcbmltcG9ydCB7IFNvcnRMYWJlbFR5cGUgfSBmcm9tICcuLi8uLi9waXBlcy9zZWFyY2gtcmVzdWx0cy5waXBlJztcbmltcG9ydCB7IEhvdEtleUNvbmZpZyB9IGZyb20gJy4uLy4uL2hvdGtleXMvaG90a2V5LnR5cGVzJztcbmltcG9ydCB7IGZvcm1hdEtleXMgfSBmcm9tICcuLi8uLi9ob3RrZXlzL2hvdGtleXMtZm9ybWF0dGVyJztcbmltcG9ydCB7IGdldENvbEZpZWxkIH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS91dGlsJztcbmltcG9ydCB7IERhdG9Ub2dnbGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdG9nZ2xlci90b2dnbGVyLmNvbXBvbmVudCc7XG5cbmNvbnN0IG1hcFRvVmFsdWUgPSAoeyB2YWx1ZSB9KSA9PiB2YWx1ZTtcbmNvbnN0IG1hcFRvTGlzdEl0ZW0gPSB2YWwgPT4gKHsgaWQ6IHZhbCwgbGFiZWw6IGlzTmlsKHZhbCkgPyBgKEVtcHR5KWAgOiBgJHt2YWx9YC50cmltKCksIHZhbHVlOiB2YWwgfSk7XG5jb25zdCBtYXBUb0xpc3RJdGVtV2l0aEZvcm1hdHRlZCA9ICh7IHZhbHVlLCBmb3JtYXR0ZWRWYWx1ZSB9LCBrZXk/KSA9PiAoe1xuICBpZDoga2V5ICYmIHZhbHVlID8gdmFsdWVba2V5XSA6IHZhbHVlLFxuICBsYWJlbDogaXNOaWwoZm9ybWF0dGVkVmFsdWUpID8gYChFbXB0eSlgIDogYCR7a2V5ID8gZm9ybWF0dGVkVmFsdWVba2V5XSA6IGZvcm1hdHRlZFZhbHVlfWAudHJpbSgpLFxuICB2YWx1ZToga2V5ICYmIHZhbHVlID8gdmFsdWVba2V5XSA6IHZhbHVlXG59KTtcblxudHlwZSBDb25kaXRpb25zID0ge1xuICB0eXBlOiB7XG4gICAgb3BlcmFuZDogRXhjbHVkZTxEYXRvRmlsdGVyQ29uZGl0aW9ucywgRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fTElTVCB8IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNUPjtcbiAgfTtcbiAgdmFsdWU6IHN0cmluZyB8IG51bWJlcjtcbiAgcmFuZ2VFbmQ6IHN0cmluZyB8IG51bWJlcjtcbn1bXTtcblxudHlwZSBDb25kaXRpb25PcHRpb24gPSB7IGlkOiBudW1iZXI7IGxhYmVsOiBzdHJpbmc7IG9wZXJhbmQ6IERhdG9GaWx0ZXJDb25kaXRpb25zIH07XG5cbnR5cGUgVmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZSA9IHsgdmFsdWU6IHN0cmluZyB8IG51bWJlcjsgZm9ybWF0dGVkVmFsdWU6IHN0cmluZyB8IG51bWJlciB9O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRvLWdyaWQtZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ3JpZC1maWx0ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRGF0b0dyaWRGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkcmVuKCdvcGVyYXRvclRvZ2dsZXInKVxuICBzZXQgb3BlcmF0b3JUb2dnbGVyKHRvZ2dsZXJzOiBRdWVyeUxpc3Q8RGF0b1RvZ2dsZXJDb21wb25lbnQ+KSB7XG4gICAgaWYgKHRvZ2dsZXJzICYmIHRoaXMuaW5wdXRDb25kaXRpb25zT3BlcmF0b3IpIHtcbiAgICAgIHRvZ2dsZXJzLmZvckVhY2goKHRvZ2dsZXI6IERhdG9Ub2dnbGVyQ29tcG9uZW50KSA9PiB7XG4gICAgICAgIGlmICghdG9nZ2xlci5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgdG9nZ2xlci5zZXREaXNhYmxlZFN0YXRlKHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIGdyaWRGaWx0ZXJUeXBlcyA9IERhdG9HcmlkRmlsdGVyVHlwZXM7XG4gIGZpbHRlclR5cGU6IERhdG9HcmlkRmlsdGVyVHlwZXM7XG4gIGNvbHVtblZhbHVlczogKHN0cmluZyB8IG51bWJlcilbXSA9IFtdO1xuICBsaXN0T3B0aW9uczogTGlzdEl0ZW1bXSA9IFtdO1xuICBjb25kaXRpb25hbEZpbHRlck9wdGlvbnM6IENvbmRpdGlvbk9wdGlvbltdO1xuICBoYXNGaWx0ZXIkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBmaWx0ZXJGb3JtOiBGb3JtR3JvdXA7XG4gIGZpbHRlclNlY3Rpb25zOiB7IFtEYXRvR3JpZEZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlXT86IGJvb2xlYW47IFtEYXRvR3JpZEZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsXT86IGJvb2xlYW4gfSA9IHtcbiAgICBbRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZV06IHRydWUsXG4gICAgW0RhdG9HcmlkRmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWxdOiB0cnVlXG4gIH07XG4gIHJhbmdlT3BlcmFuZCA9IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX1JBTkdFO1xuICBsaXN0TGFiZWxUeXBlOiBTb3J0TGFiZWxUeXBlO1xuICBsaXN0U29ydEJ5S2V5OiBzdHJpbmc7XG4gIGlzQ2xpZW50U2lkZUdyaWQgPSBmYWxzZTtcbiAgbGlzdFNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgbG9hZGluZ0xpc3QgPSBmYWxzZTtcbiAgc2VydmVyU2VhcmNoRXJyb3JlZCA9IGZhbHNlO1xuICBhcHBseUhvdEtleUNvbmZpZzogSG90S2V5Q29uZmlnID0ge1xuICAgIGtleXM6ICdtZXRhLmVudGVyJyxcbiAgICBoYW5kbGVyOiAoKSA9PiB0aGlzLmNsb3NlUG9wVXAoKSxcbiAgICBkZXNjcmlwdGlvbjogJ2NvcmUuYXBwbHktZmlsdGVycydcbiAgfTtcbiAgaG90S2V5VG9vbHRpcCA9IGZvcm1hdEtleXModGhpcy5hcHBseUhvdEtleUNvbmZpZy5rZXlzKTtcbiAgYWN0aXZlQWNjb3JkaW9uSWQgPSAwO1xuICBrZWVwUHJlZGVmaW5lZExpc3RPcmlnaW5hbE9yZGVyOiBib29sZWFuO1xuICBzaG93Q2xlYXJGaWx0ZXJzQnV0dG9uID0gdHJ1ZTtcblxuICBwcml2YXRlIGdyaWRRdWVyeTogR3JpZFF1ZXJ5O1xuICBwcml2YXRlIGdyaWRTZXJ2aWNlOiBHcmlkU2VydmljZTtcbiAgcHJpdmF0ZSBjb2xGaWVsZDogc3RyaW5nO1xuICBwcml2YXRlIGV4Y2x1ZGVkVmFsdWVzID0gbmV3IFNldDxzdHJpbmcgfCBudW1iZXI+KCk7XG4gIHByaXZhdGUgYnlWYWx1ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHBpdm90Q29sdW1uOiBDb2x1bW47XG4gIHByaXZhdGUgaW5wdXRDb25kaXRpb25zT3BlcmF0b3I6IE9wZXJhdG9yVHlwZXM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBob3N0OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcG9wb3ZlcjogUG9wb3ZlclJlZjxEYXRvQ29sdW1uTWVudURhdGE+LFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBEYXRvVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIGdldCBieVZhbHVlQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0uZ2V0KCdieVZhbHVlJyk7XG4gIH1cblxuICBnZXQgY29uZGl0aW9uc0NvbnRyb2xzKCk6IEFic3RyYWN0Q29udHJvbFtdIHtcbiAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zLmNvbnRyb2xzO1xuICB9XG5cbiAgZ2V0IGNvbmRpdGlvbnNPcGVyYXRvcigpOiBPcGVyYXRvclR5cGVzIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJGb3JtLmdldCgnY29uZGl0aW9uYWwub3BlcmF0b3InKS52YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRPcGVyYW5kKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgdHlwZTogW3RoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zWzBdXSxcbiAgICAgIHZhbHVlOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICByYW5nZUVuZDogW251bGxdXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBpc1ByZWRlZmluZWRMaXN0SXRlbXMoKSB7XG4gICAgY29uc3QgeyBmaWx0ZXJzQ29uZmlnID0ge30gfSA9IHRoaXMuY29sRGVmO1xuICAgIHJldHVybiBmaWx0ZXJzQ29uZmlnLnByZWRlZmluZWRMaXN0VmFsdWVzICYmIHR5cGVvZiBmaWx0ZXJzQ29uZmlnLnByZWRlZmluZWRMaXN0VmFsdWVzWzBdID09PSAnb2JqZWN0JztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRDb25kaXRpb25hbCgpIHtcbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cCh7XG4gICAgICBvcGVyYXRvcjogW3RoaXMuaW5wdXRDb25kaXRpb25zT3BlcmF0b3IgfHwgT3BlcmF0b3JUeXBlcy5BTkRdLFxuICAgICAgY29uZGl0aW9uczogdGhpcy5mYi5hcnJheShbdGhpcy5kZWZhdWx0T3BlcmFuZF0pXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0QnlWYWx1ZSgpIHtcbiAgICByZXR1cm4gW3RoaXMuY29sdW1uVmFsdWVzXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRGb3JtKCk6IEZvcm1Hcm91cCB7XG4gICAgY29uc3QgZmlsdGVyczogeyBieVZhbHVlPzsgY29uZGl0aW9uYWw/IH0gPSB7fTtcbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgZmlsdGVycy5ieVZhbHVlID0gdGhpcy5kZWZhdWx0QnlWYWx1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwpIHtcbiAgICAgIGZpbHRlcnMuY29uZGl0aW9uYWwgPSB0aGlzLmRlZmF1bHRDb25kaXRpb25hbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoZmlsdGVycyk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb25kaXRpb25zKCk6IEZvcm1BcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyRm9ybS5nZXQoJ2NvbmRpdGlvbmFsLmNvbmRpdGlvbnMnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb2xGaWx0ZXIoKTogRGF0b0dyaWRGaWx0ZXIge1xuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpW3RoaXMuY29sRmllbGRdO1xuXG4gICAgcmV0dXJuIGZpbHRlciAmJiBpc0FycmF5VmFsdWVzRXF1YWwodGhpcy5waXZvdEtleXMsIGZpbHRlci5waXZvdEtleXMpID8gZmlsdGVyIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNvbERlZigpOiBEYXRvR3JpZENvbHVtbkRlZiB7XG4gICAgcmV0dXJuIHRoaXMucG9wb3Zlci5kYXRhLmNvbHVtbi5nZXRDb2xEZWYoKSBhcyBEYXRvR3JpZENvbHVtbkRlZjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHBpdm90S2V5cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sRGVmLnBpdm90S2V5cyB8fCBbXTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IHsgZ3JpZFNlcnZpY2UsIGdyaWRRdWVyeSB9ID0gdGhpcy5wb3BvdmVyLmRhdGE7XG4gICAgY29uc3QgeyBmaWx0ZXIsIHBpdm90VmFsdWVDb2x1bW4sIHBpdm90S2V5cyB9ID0gdGhpcy5jb2xEZWY7XG4gICAgY29uc3QgY29sRGVmcyA9IGdyaWRRdWVyeS5hcGkuY29sdW1ucy5nZXRBbGxDb2x1bW5zKCkubWFwKGNvbHVtbiA9PiBjb2x1bW4uZ2V0Q29sRGVmKCkpO1xuXG4gICAgdGhpcy5jb2xGaWVsZCA9IGdldENvbEZpZWxkKHRoaXMuY29sRGVmKTtcblxuICAgIGNvbnN0IGNvbERlZjogRGF0b0dyaWRDb2x1bW5EZWYgPSBjb2xEZWZzLmZpbmQoY29sRGVmID0+IGNvbERlZi5maWVsZCA9PT0gdGhpcy5jb2xGaWVsZCk7XG4gICAgY29uc3QgZmlsdGVyc0NvbmZpZyA9IGNvbERlZi5maWx0ZXJzQ29uZmlnIHx8IHRoaXMuY29sRGVmLmZpbHRlcnNDb25maWcgfHwge307XG4gICAgY29uc3QgY29sRmlsdGVyID0gZmlsdGVyIHx8IGNvbERlZi5maWx0ZXI7XG4gICAgY29uc3QgZmlsdGVyT3B0aW9ucyA9IERhdG9HcmlkRmlsdGVyT3B0aW9uc01hcFtjb2xGaWx0ZXIgYXMgc3RyaW5nXTtcblxuICAgIHRoaXMucGl2b3RDb2x1bW4gPSBncmlkUXVlcnkuYXBpLmNvbHVtbnMuZ2V0U2Vjb25kYXJ5UGl2b3RDb2x1bW4ocGl2b3RLZXlzLCBwaXZvdFZhbHVlQ29sdW1uKTtcbiAgICB0aGlzLmlucHV0Q29uZGl0aW9uc09wZXJhdG9yID0gZmlsdGVyc0NvbmZpZy5pbnB1dENvbmRpdGlvbnNPcGVyYXRvcjtcblxuICAgIGlmICghaXNOaWwoZmlsdGVyc0NvbmZpZy5zaG93Q2xlYXJGaWx0ZXJzQnV0dG9uKSkge1xuICAgICAgdGhpcy5zaG93Q2xlYXJGaWx0ZXJzQnV0dG9uID0gZmlsdGVyc0NvbmZpZy5zaG93Q2xlYXJGaWx0ZXJzQnV0dG9uO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJzQ29uZmlnLnNlY3Rpb25zKSB7XG4gICAgICB0aGlzLmZpbHRlclNlY3Rpb25zID0geyBbZmlsdGVyc0NvbmZpZy5zZWN0aW9uc106IHRydWUgfTtcbiAgICB9XG5cbiAgICB0aGlzLmtlZXBQcmVkZWZpbmVkTGlzdE9yaWdpbmFsT3JkZXIgPVxuICAgICAgZmlsdGVyc0NvbmZpZy5rZWVwUHJlZGVmaW5lZExpc3RPcmlnaW5hbE9yZGVyICYmICFpc0VtcHR5KGZpbHRlcnNDb25maWcucHJlZGVmaW5lZExpc3RWYWx1ZXMpO1xuXG4gICAgdGhpcy5maWx0ZXJUeXBlID0gZmlsdGVyT3B0aW9ucyA/IChjb2xGaWx0ZXIgYXMgRGF0b0dyaWRGaWx0ZXJUeXBlcykgOiBEYXRvR3JpZEZpbHRlclR5cGVzLlN0cmluZztcbiAgICB0aGlzLmxpc3RMYWJlbFR5cGUgPSB0aGlzLmZpbHRlclR5cGUudG9Mb3dlckNhc2UoKSBhcyBTb3J0TGFiZWxUeXBlO1xuICAgIHRoaXMubGlzdFNvcnRCeUtleSA9IHRoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5OdW1iZXIgJiYgdGhpcy5jb2xEZWYudmFsdWVGb3JtYXR0ZXIgPyAnaWQnIDogJ2xhYmVsJztcbiAgICB0aGlzLmdyaWRRdWVyeSA9IGdyaWRRdWVyeTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlID0gZ3JpZFNlcnZpY2U7XG4gICAgdGhpcy5oYXNGaWx0ZXIkID0gdGhpcy5ncmlkUXVlcnlcbiAgICAgIC5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUuc2V0dGluZ3MuZmlsdGVyW3RoaXMuY29sRmllbGRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChmaWx0ZXIgPT4ge1xuICAgICAgICAgIHJldHVybiAhaXNOaWwoZmlsdGVyKSAmJiBpc0FycmF5VmFsdWVzRXF1YWwoZmlsdGVyLnBpdm90S2V5cywgdGhpcy5waXZvdEtleXMpO1xuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICBsZXQgZmlsdGVyQ29uZGl0aW9uczogRGF0b0ZpbHRlckNvbmRpdGlvbnNbXSA9IGZpbHRlck9wdGlvbnMgfHwgRGF0b0dyaWRTdHJpbmdGaWx0ZXJPcHRpb25zO1xuXG4gICAgICBpZiAoZmlsdGVyc0NvbmZpZy5zaG93RW1wdHlDb25kaXRpb25zKSB7XG4gICAgICAgIGxldCBlbXB0eUNvbmRpdGlvbnMgPSBbRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfRU1QVFksIERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9FTVBUWV07XG5cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5OdW1iZXIpIHtcbiAgICAgICAgICBlbXB0eUNvbmRpdGlvbnMgPSBbRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfTlVMTCwgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX05VTExdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyQ29uZGl0aW9ucyA9IFsuLi5maWx0ZXJDb25kaXRpb25zLCAuLi5lbXB0eUNvbmRpdGlvbnNdO1xuICAgICAgfVxuICAgICAgdGhpcy5jb25kaXRpb25hbEZpbHRlck9wdGlvbnMgPSBmaWx0ZXJDb25kaXRpb25zLm1hcCgob3BlcmFuZCwgaWQpID0+ICh7XG4gICAgICAgIGlkLFxuICAgICAgICBvcGVyYW5kLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKGBjb3JlLiR7dGhpcy5maWx0ZXJUeXBlID09PSBEYXRvR3JpZEZpbHRlclR5cGVzLkRhdGUgPyAnREFURV8nIDogJyd9JHtvcGVyYW5kfWApXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgbGV0IG9yaWdpbmFsT3B0aW9ucztcblxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICBjb25zdCB7IHByZWRlZmluZWRMaXN0VmFsdWVzIH0gPSBmaWx0ZXJzQ29uZmlnO1xuICAgICAgdGhpcy5pc0NsaWVudFNpZGVHcmlkID0gIWlzTmlsKHByZWRlZmluZWRMaXN0VmFsdWVzKSB8fCAhZ3JpZFF1ZXJ5LmlzU2VydmVyU2lkZTtcbiAgICAgIGlmICghcHJlZGVmaW5lZExpc3RWYWx1ZXMgfHwgdGhpcy5pc1N0cmluZ0FycmF5KHByZWRlZmluZWRMaXN0VmFsdWVzKSkge1xuICAgICAgICBjb25zdCByYXdWYWx1ZXMgPSBwcmVkZWZpbmVkTGlzdFZhbHVlcyBhcyBzdHJpbmdbXTtcbiAgICAgICAgaWYgKHJhd1ZhbHVlcykge1xuICAgICAgICAgIHRoaXMuY29sdW1uVmFsdWVzID0gcmF3VmFsdWVzO1xuICAgICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSByYXdWYWx1ZXMubWFwKG1hcFRvTGlzdEl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNvbHVtblZhbHVlcyA9IHRoaXMuZ2V0Q29sdW1uVmFsdWVzKCkuZmlsdGVyKCh7IHZhbHVlIH0pID0+ICFpc05pbCh2YWx1ZSkpO1xuICAgICAgICAgIHRoaXMuY29sdW1uVmFsdWVzID0gY29sdW1uVmFsdWVzLm1hcCgoeyB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIWlzTmlsKHRoaXMucGl2b3RDb2x1bW4pICYmIHZhbHVlID8gdmFsdWVbdGhpcy5jb2xGaWVsZF0gOiB2YWx1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gY29sdW1uVmFsdWVzLm1hcChjb2xWYWx1ZSA9PlxuICAgICAgICAgICAgbWFwVG9MaXN0SXRlbVdpdGhGb3JtYXR0ZWQoY29sVmFsdWUsICFpc05pbCh0aGlzLnBpdm90Q29sdW1uKSAmJiB0aGlzLmNvbEZpZWxkKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJhd1ZhbHVlcyA9IHByZWRlZmluZWRMaXN0VmFsdWVzIGFzIExpc3RJdGVtW107XG4gICAgICAgIHRoaXMuY29sdW1uVmFsdWVzID0gcmF3VmFsdWVzLm1hcChtYXBUb1ZhbHVlKTtcbiAgICAgICAgdGhpcy5saXN0T3B0aW9ucyA9IHJhd1ZhbHVlcztcbiAgICAgIH1cblxuICAgICAgb3JpZ2luYWxPcHRpb25zID0gdGhpcy5saXN0T3B0aW9ucztcblxuICAgICAgaWYgKCF0aGlzLmlzQ2xpZW50U2lkZUdyaWQpIHtcbiAgICAgICAgdGhpcy5saXN0U2VhcmNoQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSkuc3Vic2NyaWJlKChzZWFyY2hUZXJtOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLnNlcnZlclNlYXJjaEVycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgICBpZiAoc2VhcmNoVGVybS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdMaXN0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gb3JpZ2luYWxPcHRpb25zO1xuICAgICAgICAgICAgdGhpcy5wYXRjaEFuZFJlUmVnaXN0ZXIodGhpcy5jb2x1bW5WYWx1ZXMpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdldFZhbHVlc0Zyb21TZXJ2ZXIoc2VhcmNoVGVybSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRGb3JtKCk7XG4gIH1cblxuICBjbG9zZVBvcFVwKCkge1xuICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgdGhpcy5wb3BvdmVyLmNsb3NlKCk7XG4gIH1cblxuICBhcHBseUZpbHRlcnMoKSB7XG4gICAgdGhpcy5maWx0ZXJGb3JtLnZhbGlkICYmIHRoaXMuZmlsdGVyRm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgaWYgKHRoaXMuZmlsdGVyRm9ybS5kaXJ0eSAmJiAodGhpcy5maWx0ZXJGb3JtLnZhbGlkIHx8IHRoaXMuZmlsdGVyRm9ybS5nZXQoJ2NvbmRpdGlvbmFsJykucHJpc3RpbmUpKSB7XG4gICAgICBjb25zdCB7IGNvbHVtbiB9ID0gdGhpcy5wb3BvdmVyLmRhdGE7XG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKCk7XG4gICAgICBpc0VtcHR5KGZpbHRlcilcbiAgICAgICAgPyB0aGlzLmdyaWRTZXJ2aWNlLmNsZWFyQ29sdW1uRmlsdGVyKHRoaXMuY29sRmllbGQpXG4gICAgICAgIDogdGhpcy5ncmlkU2VydmljZS5zZXRDb2x1bW5GaWx0ZXIoY29sdW1uLCBmaWx0ZXIpO1xuXG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLm5vdGlmeUZpbHRlclVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyRmlsdGVycygpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNsZWFyQ29sdW1uRmlsdGVyKHRoaXMuY29sRmllbGQpO1xuICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gIH1cblxuICByZW1vdmVDb25kaXRpb24oaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuY29uZGl0aW9ucy5yZW1vdmVBdChpbmRleCk7XG4gICAgdGhpcy5maWx0ZXJGb3JtLm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICBhZGRDb25kaXRpb24oKSB7XG4gICAgdGhpcy5maWx0ZXJGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgdGhpcy5jb25kaXRpb25zLnB1c2godGhpcy5kZWZhdWx0T3BlcmFuZCk7XG4gIH1cblxuICBnZXRPcGVyYW5kVHlwZShpOiBudW1iZXIpIHtcbiAgICBjb25zdCBjb25kaXRpb25UeXBlID0gdGhpcy5jb25kaXRpb25zLmF0KGkpLnZhbHVlLnR5cGU7XG4gICAgcmV0dXJuIGNvbmRpdGlvblR5cGUgPyBjb25kaXRpb25UeXBlLm9wZXJhbmQgOiBudWxsO1xuICB9XG5cbiAgaXNDb25kaXRpb25hbEVtcHR5KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG9wZXJhbmQ6IERhdG9GaWx0ZXJDb25kaXRpb25zID1cbiAgICAgIGNvbnRyb2wgJiYgY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlLnR5cGUgPyBjb250cm9sLnZhbHVlLnR5cGUub3BlcmFuZCA6IG51bGw7XG4gICAgcmV0dXJuIHRoaXMuaXNFbXB0eU9wZXJhbmQob3BlcmFuZCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmJ5VmFsdWVTdWJzY3JpcHRpb24gJiYgdGhpcy5ieVZhbHVlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIHR5cGU6IFwiRXhjbHVkZVwiXG4gICAqIFNlbGVjdGVkIHZhbHVlczogQSwgQywgRFxuICAgKiBBbGwgbGlzdDogQSwgQiwgQywgRFxuICAgKiBSZXN1bHQ6IEJcbiAgICogQHBhcmFtIGluY2x1ZGVkQXJyIC1UaGUgbGlzdCBvZiB2YWx1ZXMgdG8gaW5jbHVkZVxuICAgKiBAcGFyYW0gYXNMaXN0SXRlbSAtSW5kaWNhdGVzIGlmIHRoZSByZXNwb25zZSBuZWVkcyB0byBiZSBhcyBzdHJpbmcgb3IgYXMgTGlzdEl0ZW1cbiAgICovXG4gIHByaXZhdGUgZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoaW5jbHVkZWRBcnI6IChMaXN0SXRlbSB8IHN0cmluZyB8IG51bWJlcilbXSwgYXNMaXN0SXRlbTogdHJ1ZSk6IExpc3RJdGVtW107XG4gIHByaXZhdGUgZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoaW5jbHVkZWRBcnI6IChMaXN0SXRlbSB8IHN0cmluZyB8IG51bWJlcilbXSk6IChzdHJpbmcgfCBudW1iZXIpW107XG4gIHByaXZhdGUgZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoXG4gICAgaW5jbHVkZWRBcnI6IChMaXN0SXRlbSB8IHN0cmluZyB8IG51bWJlcilbXSxcbiAgICBhc0xpc3RJdGVtID0gZmFsc2VcbiAgKTogKHN0cmluZyB8IG51bWJlcilbXSB8IExpc3RJdGVtW10ge1xuICAgIGxldCBpbmNsdWRlZFNldDtcbiAgICBpZiAodGhpcy5pc1ByZWRlZmluZWRMaXN0SXRlbXMpIHtcbiAgICAgIGNvbnN0IHByZWRlZmluZWRMaXN0ID0gdGhpcy5jb2xEZWYuZmlsdGVyc0NvbmZpZy5wcmVkZWZpbmVkTGlzdFZhbHVlcyBhcyBMaXN0SXRlbVtdO1xuICAgICAgaW5jbHVkZWRTZXQgPSBuZXcgU2V0KFxuICAgICAgICBpbmNsdWRlZEFyci5tYXAodmFsID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtID0gcHJlZGVmaW5lZExpc3QuZmluZCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gdmFsKTtcbiAgICAgICAgICByZXR1cm4gaXRlbS5pZDtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluY2x1ZGVkU2V0ID0gbmV3IFNldChpbmNsdWRlZEFyci5tYXAodmFsID0+IChpc09iamVjdDxMaXN0SXRlbT4odmFsKSA/IHZhbC52YWx1ZSA6IHZhbCkpKTtcbiAgICB9XG4gICAgaWYgKGFzTGlzdEl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmxpc3RPcHRpb25zLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiAhaW5jbHVkZWRTZXQuaGFzKHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbHVtblZhbHVlcy5maWx0ZXIodmFsdWUgPT4gIWluY2x1ZGVkU2V0Lmhhcyh2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZpbHRlcigpOiBEYXRvR3JpZEZpbHRlciB7XG4gICAgY29uc3QgeyBieVZhbHVlLCBjb25kaXRpb25hbCB9ID0gdGhpcy5maWx0ZXJGb3JtLnZhbHVlO1xuICAgIGNvbnN0IGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIgPSB7fTtcblxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICB0aGlzLnNldENvbmRpdGlvbmFsRmlsdGVyKGZpbHRlciwgY29uZGl0aW9uYWwpO1xuICAgIH1cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgdGhpcy5zZXRCeVZhbHVlRmlsdGVyKGZpbHRlciwgYnlWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIElmIGZpbHRlcnMgYXBwbGllZCwgYWRkIHRoZSBleHRyYSBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgcGl2b3QgbW9kZSAqL1xuICAgIGlmIChmaWx0ZXIuYnlWYWx1ZSB8fCBmaWx0ZXIuY29uZGl0aW9uYWwpIHtcbiAgICAgIGZpbHRlci5jb2xJZCA9IHRoaXMuY29sRGVmLmNvbElkO1xuICAgICAgZmlsdGVyLnBpdm90S2V5cyA9IHRoaXMucGl2b3RLZXlzO1xuXG4gICAgICBpZiAodGhpcy5waXZvdENvbHVtbikge1xuICAgICAgICBmaWx0ZXIucGl2b3RGaWVsZHNNYXAgPSB0aGlzLmdldFBpdm90RmllbGRzKHRoaXMucGl2b3RDb2x1bW4uZ2V0UGFyZW50KCkpLnJlZHVjZSgoZmllbGRNYXAsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnBpdm90S2V5c1tpbmRleF0pIHtcbiAgICAgICAgICAgIGZpZWxkTWFwW2ZpZWxkXSA9IHRoaXMucGl2b3RLZXlzW2luZGV4XTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmllbGRNYXA7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Rm9ybSgpIHtcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHRoaXMuY29sRmlsdGVyO1xuICAgIHRoaXMuZmlsdGVyRm9ybSA9IGZpbHRlclZhbHVlID8gdGhpcy5idWlsZEZvcm1Gcm9tRmlsdGVyKGZpbHRlclZhbHVlKSA6IHRoaXMuZGVmYXVsdEZvcm07XG4gICAgdGhpcy5yZWdpc3Rlck9wZXJhbmRMaXN0ZW5lcnMoKTtcbiAgICBpZiAoIXRoaXMuaXNDbGllbnRTaWRlR3JpZCAmJiB0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyQnlWYWx1ZUxpc3RlbmVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBmaWx0ZXIgdmlldyBmcm9tIGEgZ2l2ZW4gZmlsdGVyXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkRm9ybUZyb21GaWx0ZXIoZmlsdGVyOiBEYXRvR3JpZEZpbHRlcik6IEZvcm1Hcm91cCB7XG4gICAgY29uc3QgZmlsdGVyR3JvdXAgPSB7fTtcbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgZmlsdGVyR3JvdXBbJ2NvbmRpdGlvbmFsJ10gPSB0aGlzLmJ1aWxkQ29uZGl0aW9uYWxGaWx0ZXIoZmlsdGVyLmNvbmRpdGlvbmFsKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQnlfVmFsdWUpIHtcbiAgICAgIGZpbHRlckdyb3VwWydieVZhbHVlJ10gPSB0aGlzLmJ1aWxkQnlWYWx1ZUZpbHRlcihmaWx0ZXIuYnlWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKGZpbHRlckdyb3VwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgZmlsdGVyIHZpZXdcbiAgICovXG4gIHByaXZhdGUgcmVzZXRGb3JtKCkge1xuICAgIHRoaXMuZmlsdGVyRm9ybS5zZXRFcnJvcnMobnVsbCk7XG4gICAgbGV0IG9yaWdpbmFsU3RhdGUgPSB7fTtcbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgb3JpZ2luYWxTdGF0ZSA9IHsgYnlWYWx1ZTogdGhpcy5jb2x1bW5WYWx1ZXMgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwpIHtcbiAgICAgIG9yaWdpbmFsU3RhdGUgPSB7XG4gICAgICAgIC4uLm9yaWdpbmFsU3RhdGUsXG4gICAgICAgIGNvbmRpdGlvbmFsOiB7XG4gICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELFxuICAgICAgICAgIGNvbmRpdGlvbnM6IFt7IHR5cGU6IHRoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zWzBdLCB2YWx1ZTogbnVsbCwgcmFuZ2VFbmQ6IG51bGwgfV1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbmRpdGlvbmFsID0gdGhpcy5maWx0ZXJGb3JtLmNvbnRyb2xzLmNvbmRpdGlvbmFsIGFzIEZvcm1Hcm91cDtcbiAgICAgIGNvbmRpdGlvbmFsLnJlbW92ZUNvbnRyb2woJ2NvbmRpdGlvbnMnKTtcbiAgICAgIGNvbmRpdGlvbmFsLmFkZENvbnRyb2woJ2NvbmRpdGlvbnMnLCB0aGlzLmZiLmFycmF5KFt0aGlzLmRlZmF1bHRPcGVyYW5kXSkpO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlckZvcm0ucmVzZXQob3JpZ2luYWxTdGF0ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuZmlsdGVyRm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCB0aGUgY29sdW1uIHZhbHVlcyB0byBkaXNwbGF5IG9uIHRoZSBsaXN0LlxuICAgKiAxLiBJdGVyYXRlIG92ZXIgdGhlIHJvd3MgYWZ0ZXIgZmlsdGVyaW5nIGFuZCBzb3J0aW5nIHdhcyBhcHBsaWVkXG4gICAqIDIuIFNpbmNlIHdlIGFsc28gd2FudCB0byBzaG93IHZhbHVlcyB0aGF0IHdlcmUgZmlsdGVyZWQgYnkgdGhpcyBjb2x1bW4gZmlsdGVyIHdlIGFyZSBpdGVyYXRpbmcgYWxsIHRoZSByb3dzXG4gICAqIChiZWZvcmUgdGhlIGZpbHRlcmluZyksIGZpbmRpbmcgd2hpY2ggd2VyZSByZW1vdmVkIGJ5IHRoaXMgY29sdW1uJ3MgZmlsdGVyIGFuZCBhZGRpbmcgdGhlbSBiYWNrLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRDb2x1bW5WYWx1ZXMoKTogVmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZVtdIHtcbiAgICBsZXQgdmFsdWVzOiBWYWx1ZUFuZEZvcm1hdHRlZFZhbHVlW10gPSBbXTtcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHRoaXMuY29sRmlsdGVyO1xuICAgIGNvbnN0IGRpc3BsYXllZFJvdyA9IHt9O1xuICAgIGNvbnN0IGJ5VmFsdWVUeXBlID0gZmlsdGVyVmFsdWUgJiYgZmlsdGVyVmFsdWUuYnlWYWx1ZSAmJiBmaWx0ZXJWYWx1ZS5ieVZhbHVlLmNvbmRpdGlvbjtcbiAgICBjb25zdCBhcGkgPSB0aGlzLmdyaWRRdWVyeS5hcGkuZ3JpZDtcbiAgICBjb25zdCBnZXRWYWx1ZUN1cnJpZWQgPSBjdXJyeSh0aGlzLmdldFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUpKHRoaXMuY29sRmllbGQsIGFwaSwgdGhpcy5jb2xEZWYudmFsdWVGb3JtYXR0ZXIpO1xuICAgIC8qKiAxLiBJdGVyYXRlIG92ZXIgdGhlIHJvd3MgYWZ0ZXIgZmlsdGVyaW5nIGFuZCBzb3J0aW5nIHdhcyBhcHBsaWVkICovXG4gICAgaWYgKHRoaXMuaXNDbGllbnRTaWRlR3JpZCkge1xuICAgICAgYXBpLmZvckVhY2hOb2RlQWZ0ZXJGaWx0ZXJBbmRTb3J0KHJvdyA9PiB7XG4gICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlQ3VycmllZChyb3cpKTtcbiAgICAgICAgZGlzcGxheWVkUm93W3Jvdy5pZF0gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIFdlIG9ubHkgZGlzcGxheSB0aGUgY3VycmVudCBwYWdlIGluIHRoZSBsaXN0ICovXG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IGFwaS5wYWdpbmF0aW9uR2V0UGFnZVNpemUoKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gYXBpLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpO1xuICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHBhZ2VTaXplICogY3VycmVudFBhZ2U7XG4gICAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBwYWdlU2l6ZTtcbiAgICAgIGFwaS5mb3JFYWNoTm9kZShyb3cgPT4ge1xuICAgICAgICBjb25zdCB7IHJvd0luZGV4IH0gPSByb3c7XG4gICAgICAgIGlmIChyb3dJbmRleCA+PSBzdGFydEluZGV4ICYmIHJvd0luZGV4IDwgZW5kSW5kZXgpIHtcbiAgICAgICAgICB2YWx1ZXMucHVzaChnZXRWYWx1ZUN1cnJpZWQocm93KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiAyLiBBZGQgYmFjayB2YWx1ZXMgdGhhdCB3ZXJlIGZpbHRlcmVkIGJ5IHRoaXMgY29sdW1uICovXG4gICAgaWYgKGJ5VmFsdWVUeXBlKSB7XG4gICAgICBpZiAoYnlWYWx1ZVR5cGUgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNUKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHRoaXMuY29sRGVmLnZhbHVlRm9ybWF0dGVyIGFzIChwYXJhbXM6IGFueSkgPT4gc3RyaW5nO1xuICAgICAgICBjb25zdCBjdXJyRmlsdGVyVmFsdWVzID0gZmlsdGVyVmFsdWUuYnlWYWx1ZS52YWx1ZXMubWFwKCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSBmb3JtYXR0ZXIgPyBmb3JtYXR0ZXIoeyB2YWx1ZSB9KSA6IHZhbHVlO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlLCBmb3JtYXR0ZWRWYWx1ZSB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdmFsdWVzID0gdmFsdWVzLmNvbmNhdChjdXJyRmlsdGVyVmFsdWVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgY29uZGl0aW9uYWwgfSA9IHRoaXMuY29sRmlsdGVyO1xuICAgICAgICBjb25zdCBhY3RpdmVGaWx0ZXJzID0ge1xuICAgICAgICAgIC4uLnRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpLFxuICAgICAgICAgIFt0aGlzLmNvbEZpZWxkXTogeyBjb25kaXRpb25hbCB9XG4gICAgICAgIH07XG4gICAgICAgIGFwaS5mb3JFYWNoTGVhZk5vZGUocm93ID0+IHtcbiAgICAgICAgICBpZiAoIWRpc3BsYXllZFJvdy5oYXNPd25Qcm9wZXJ0eShyb3cuaWQpICYmIHZhbGlkYXRlRmlsdGVyKHsgcm93LCBhcGkgfSwgYWN0aXZlRmlsdGVycykpIHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlQ3VycmllZChyb3cpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5pcUJ5KHZhbHVlcywgJ3ZhbHVlJyk7XG4gIH1cblxuICBwcml2YXRlIGdldFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUoXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICBhcGk6IEdyaWRBcGksXG4gICAgLy8gVE9ETzogZm9sbG93dXA6IGh0dHBzOi8vYWctZ3JpZC56ZW5kZXNrLmNvbS9oYy9lbi11cy9yZXF1ZXN0cy8xMTAxOVxuICAgIGZvcm1hdHRlcjogKHBhcmFtczogYW55KSA9PiBzdHJpbmcsXG4gICAgcm93OiBSb3dOb2RlXG4gICk6IFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUge1xuICAgIGNvbnN0IHZhbHVlID0gYXBpLmdldFZhbHVlKGZpZWxkLCByb3cpO1xuICAgIC8vIFRPRE86IGZvbGxvd3VwOiBodHRwczovL2FnLWdyaWQuemVuZGVzay5jb20vaGMvZW4tdXMvcmVxdWVzdHMvMTA5NjM/cGFnZT0xXG4gICAgcmV0dXJuIHsgdmFsdWUsIGZvcm1hdHRlZFZhbHVlOiBmb3JtYXR0ZXIgPyBmb3JtYXR0ZXIoeyB2YWx1ZSB9IGFzIGFueSkgOiB2YWx1ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb25kaXRpb25hbEZpbHRlcihcbiAgICBmaWx0ZXI6IERhdG9HcmlkRmlsdGVyLFxuICAgIHsgb3BlcmF0b3IsIGNvbmRpdGlvbnMgfTogeyBvcGVyYXRvcjogT3BlcmF0b3JUeXBlczsgY29uZGl0aW9uczogQ29uZGl0aW9ucyB9XG4gICkge1xuICAgIGNvbnN0IHZhbGlkQ29uZGl0aW9ucyA9IGNvbmRpdGlvbnMuZmlsdGVyKCh7IHZhbHVlLCB0eXBlIH0pID0+ICFpc05pbCh2YWx1ZSkgfHwgdGhpcy5pc0VtcHR5T3BlcmFuZCh0eXBlLm9wZXJhbmQpKTtcbiAgICBpZiAodmFsaWRDb25kaXRpb25zLmxlbmd0aCkge1xuICAgICAgZmlsdGVyLmNvbmRpdGlvbmFsID0ge1xuICAgICAgICB0eXBlOiAodGhpcy5jb2xEZWYuZmlsdGVyIGFzIERhdG9HcmlkRmlsdGVyVHlwZXMpIHx8IERhdG9HcmlkRmlsdGVyVHlwZXMuU3RyaW5nLFxuICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgY29uZGl0aW9uczogY29uZGl0aW9ucy5tYXAoKHsgdmFsdWUsIHR5cGUsIHJhbmdlRW5kIH0pID0+IHtcbiAgICAgICAgICBjb25zdCBiYXNlID0geyBjb25kaXRpb246IHR5cGUub3BlcmFuZCwgdmFsdWUgfTtcbiAgICAgICAgICBpZiAodHlwZS5vcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRSkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHsgLi4uYmFzZSwgcmFuZ2VFbmQgfTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuRGF0ZSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGZyb20sIHRvIH0gPSB2YWx1ZSBhcyBEYXRlUmFuZ2U7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHsgY29uZGl0aW9uOiB0eXBlLm9wZXJhbmQsIHZhbHVlOiBmcm9tIGFzIHN0cmluZywgcmFuZ2VFbmQ6IHRvIGFzIHN0cmluZyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYmFzZSBhcyBEYXRvR3JpZEZpbHRlckNvbmRpdGlvbjtcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRCeVZhbHVlRmlsdGVyKGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIsIGJ5VmFsdWU6IChzdHJpbmcgfCBudW1iZXIpW10pIHtcbiAgICBpZiAodGhpcy5pc0NsaWVudFNpZGVHcmlkKSB7XG4gICAgICBjb25zdCB2YWx1ZXNDb3VudCA9IHRoaXMuY29sdW1uVmFsdWVzLmxlbmd0aDtcbiAgICAgIGlmIChieVZhbHVlLmxlbmd0aCAhPT0gdmFsdWVzQ291bnQpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID1cbiAgICAgICAgICBieVZhbHVlLmxlbmd0aCA8IHZhbHVlc0NvdW50IC8gMiA/IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX0xJU1QgOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVDtcbiAgICAgICAgZmlsdGVyLmJ5VmFsdWUgPSB7XG4gICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgIHZhbHVlczogY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9MSVNUID8gYnlWYWx1ZSA6IHRoaXMuZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoYnlWYWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuZnJvbSh0aGlzLmV4Y2x1ZGVkVmFsdWVzLnZhbHVlcygpKTtcbiAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBmaWx0ZXIuYnlWYWx1ZSA9IHtcbiAgICAgICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNULFxuICAgICAgICAgIHZhbHVlc1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRCeVZhbHVlRmlsdGVyKGJ5VmFsdWU6IERhdG9HcmlkRmlsdGVyWydieVZhbHVlJ10pOiAoc3RyaW5nIHwgbnVtYmVyKVtdW10ge1xuICAgIGlmICghYnlWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEJ5VmFsdWU7XG4gICAgfVxuICAgIGlmIChieVZhbHVlLnZhbHVlcy5sZW5ndGggJiYgdGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgdGhpcy5hY3RpdmVBY2NvcmRpb25JZCA9IDE7XG4gICAgfVxuICAgIGlmIChieVZhbHVlLmNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1QpIHtcbiAgICAgIGlmICghdGhpcy5pc0NsaWVudFNpZGVHcmlkKSB7XG4gICAgICAgIHRoaXMuZXhjbHVkZWRWYWx1ZXMgPSBuZXcgU2V0KGJ5VmFsdWUudmFsdWVzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbdGhpcy5nZXRCeVZhbHVlRXhjbHVkZVZhbHVlcyhieVZhbHVlLnZhbHVlcyldO1xuICAgIH1cbiAgICByZXR1cm4gW2J5VmFsdWUudmFsdWVzXTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb25kaXRpb25hbEZpbHRlcihjb25kaXRpb25hbDogRGF0b0dyaWRGaWx0ZXJbJ2NvbmRpdGlvbmFsJ10pOiBGb3JtR3JvdXAge1xuICAgIGlmICghY29uZGl0aW9uYWwpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRDb25kaXRpb25hbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgb3BlcmF0b3I6IFt0aGlzLmlucHV0Q29uZGl0aW9uc09wZXJhdG9yIHx8IGNvbmRpdGlvbmFsLm9wZXJhdG9yXSxcbiAgICAgIGNvbmRpdGlvbnM6IHRoaXMuZmIuYXJyYXkodGhpcy5idWlsZENvbmRpdGlvbnMoY29uZGl0aW9uYWwuY29uZGl0aW9ucykpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ29uZGl0aW9ucyhjb25kaXRpb25zOiAoRGF0b0dyaWRGaWx0ZXJDb25kaXRpb24gfCBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uKVtdKTogRm9ybUdyb3VwW10ge1xuICAgIHJldHVybiBjb25kaXRpb25zLm1hcChjb25kaXRpb24gPT4ge1xuICAgICAgY29uc3QgeyBjb25kaXRpb246IGN1cnJlbnRPcGVyYW5kLCB2YWx1ZSB9ID0gY29uZGl0aW9uO1xuICAgICAgY29uc3QgZ3JvdXAgPSB7XG4gICAgICAgIHR5cGU6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogdGhpcy5jb25kaXRpb25hbEZpbHRlck9wdGlvbnMuZmluZEluZGV4KCh7IG9wZXJhbmQgfSkgPT4gb3BlcmFuZCA9PT0gY3VycmVudE9wZXJhbmQpLFxuICAgICAgICAgICAgb3BlcmFuZDogY3VycmVudE9wZXJhbmQsXG4gICAgICAgICAgICBsYWJlbDogYGNvcmUuJHtjdXJyZW50T3BlcmFuZH1gXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB2YWx1ZTogW3ZhbHVlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgcmFuZ2VFbmQ6IG51bGxcbiAgICAgIH07XG4gICAgICBpZiAoaXNSYW5nZUNvbmRpdGlvbjxEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uPihjb25kaXRpb24pKSB7XG4gICAgICAgIGdyb3VwLnJhbmdlRW5kID0gW2NvbmRpdGlvbi5yYW5nZUVuZCwgVmFsaWRhdG9ycy5yZXF1aXJlZF07XG4gICAgICAgIGdyb3VwLnZhbHVlID0gW3sgZnJvbTogY29uZGl0aW9uLnZhbHVlIGFzIHN0cmluZywgdG86IGNvbmRpdGlvbi5yYW5nZUVuZCBhcyBzdHJpbmcgfSwgVmFsaWRhdG9ycy5yZXF1aXJlZF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5mYi5ncm91cChncm91cCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gcmFuZ2UgaXMgbm90IHJlcXVpcmVkIGJ5IGRlZmF1bHQsIHdlIHdhbnQgdG8gbWFrZSBpdCByZXF1aXJlZCBvbmNlIHRoaXMgb3BlcmFuZCBpcyBzZWxlY3RlZC5cbiAgICogKi9cbiAgcHJpdmF0ZSByZWdpc3Rlck9wZXJhbmRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKCF0aGlzLmNvbmRpdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb25kaXRpb25zLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aCh0aGlzLmNvbmRpdGlvbnMubGVuZ3RoKSxcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuY29uZGl0aW9ucy5sZW5ndGgpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlQ2hhbmdlcyA9IHRoaXMuY29uZGl0aW9ucy5jb250cm9scy5tYXAoKGdyb3VwOiBGb3JtR3JvdXAsIGluZGV4KSA9PlxuICAgICAgICAgICAgZ3JvdXAuZ2V0KCd0eXBlJykudmFsdWVDaGFuZ2VzLnBpcGUobWFwKCh2YWx1ZTogQ29uZGl0aW9uT3B0aW9uKSA9PiAoeyB2YWx1ZSwgaW5kZXggfSkpKVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIG1lcmdlKC4uLnZhbHVlQ2hhbmdlcyk7XG4gICAgICAgIH0pLFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeyB2YWx1ZTogeyBvcGVyYW5kIH0sIGluZGV4IH0pID0+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBpbmRleCwgaW5SYW5nZTogb3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0UgfTtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5EYXRlKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVEYXRlSW5wdXQocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuTnVtYmVyKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVOdW1iZXJJbnB1dChwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWVDb250cm9sVmFsaWRhdG9yKG9wZXJhbmQsIGluZGV4KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXRlSW5wdXQoeyBpblJhbmdlLCBpbmRleCB9KSB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuY29uZGl0aW9ucy5hdChpbmRleCkuZ2V0KCd2YWx1ZScpO1xuICAgIGlmIChjb250cm9sLmRpcnR5KSB7XG4gICAgICBjb25zdCB7IHZhbHVlIH0gPSBjb250cm9sO1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBpblJhbmdlID8geyBmcm9tOiB2YWx1ZSwgdG86IHZhbHVlIH0gOiB2YWx1ZS5mcm9tO1xuICAgICAgY29udHJvbC5wYXRjaFZhbHVlKG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU51bWJlcklucHV0KHsgaW5SYW5nZSwgaW5kZXggfSkge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IGluUmFuZ2UgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbDtcbiAgICBjb25zdCByYW5nZUVuZCA9IHRoaXMuY29uZGl0aW9ucy5hdChpbmRleCkuZ2V0KCdyYW5nZUVuZCcpO1xuICAgIHJhbmdlRW5kLnNldFZhbGlkYXRvcnModmFsaWRhdG9yKTtcbiAgICByYW5nZUVuZC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZhbHVlQ29udHJvbFZhbGlkYXRvcihvcGVyYW5kOiBEYXRvRmlsdGVyQ29uZGl0aW9ucywgaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9ICF0aGlzLmlzRW1wdHlPcGVyYW5kKG9wZXJhbmQpID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IG51bGw7XG4gICAgY29uc3QgdmFsdWVDb250cm9sID0gdGhpcy5jb25kaXRpb25zLmF0KGluZGV4KS5nZXQoJ3ZhbHVlJykgYXMgRm9ybUNvbnRyb2w7XG4gICAgdmFsdWVDb250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9yKTtcbiAgICB2YWx1ZUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VtcHR5T3BlcmFuZChvcGVyYW5kOiBEYXRvRmlsdGVyQ29uZGl0aW9ucyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBvcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19FTVBUWSB8fFxuICAgICAgb3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0VNUFRZIHx8XG4gICAgICBvcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19OVUxMIHx8XG4gICAgICBvcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfTlVMTFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGlzU3RyaW5nQXJyYXkodmFsdWU6IChzdHJpbmcgfCBMaXN0SXRlbSlbXSk6IHZhbHVlIGlzIHN0cmluZ1tdIHtcbiAgICByZXR1cm4gaXNTdHJpbmcodmFsdWVbMF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZXNGcm9tU2VydmVyKHNlYXJjaFRlcm06IHN0cmluZykge1xuICAgIHRoaXMubG9hZGluZ0xpc3QgPSB0cnVlO1xuICAgIHRoaXMubGlzdE9wdGlvbnMgPSBbXTtcbiAgICBjb25zdCBwYXJhbXM6IFBhcnRpYWw8RGF0b0dyaWRHZXRSb3dzUGFyYW1zPiA9IHtcbiAgICAgIGZhaWxDYWxsYmFjazogKCkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmdMaXN0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VydmVyU2VhcmNoRXJyb3JlZCA9IHRydWU7XG4gICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICAgIHN1Y2Nlc3NDYWxsYmFjazogZGF0YSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ0xpc3QgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZmxhdERhdGEgPSBkYXRhLm1hcCh2YWx1ZSA9PiB2YWx1ZVt0aGlzLmNvbEZpZWxkXSk7XG4gICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSBmbGF0RGF0YS5tYXAobWFwVG9MaXN0SXRlbSk7XG4gICAgICAgIHRoaXMucGF0Y2hBbmRSZVJlZ2lzdGVyKGZsYXREYXRhKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICAgIHNlcnZlckNvbmZpZzoge1xuICAgICAgICBwYWdlU2l6ZTogMzAsXG4gICAgICAgIHBhZ2VOdW1iZXI6IDEsXG4gICAgICAgIGNvbHVtbkZpbHRlcnM6IHtcbiAgICAgICAgICBbdGhpcy5jb2xGaWVsZF06IHtcbiAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzLkFORCxcbiAgICAgICAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogRGF0b0ZpbHRlckNvbmRpdGlvbnMuQ09OVEFJTlMsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHNlYXJjaFRlcm1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc29ydDogW10sXG4gICAgICAgIGNvbHVtbnNUb1JldHVybjogW3RoaXMuY29sRmllbGRdLFxuICAgICAgICBkaXN0aW5jdFJlc3VsdHM6IHRydWVcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuX29yaWdpbmFsR2V0Um93cyhwYXJhbXMgYXMgYW55KTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKiBXaGVuIHNlYXJjaGluZyB0aGUgYnkgdmFsdWUgZmlsdGVyIG9uIHNlcnZlciBzaWRlIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBjb250cm9sIHdpdGggdGhlIG5ldyB2YWx1ZXMgYW5kIHJlLXJlZ2lzdGVyIHRvIHRoZSBjaGFuZ2VzICovXG4gIHByaXZhdGUgcGF0Y2hBbmRSZVJlZ2lzdGVyKGRhdGE6IChzdHJpbmcgfCBudW1iZXIpW10pIHtcbiAgICB0aGlzLmJ5VmFsdWVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmJ5VmFsdWVDb250cm9sLnBhdGNoVmFsdWUodGhpcy5nZXROb25FeGNsdWRlZFZhbHVlcyhkYXRhKSk7XG4gICAgdGhpcy5yZWdpc3RlckJ5VmFsdWVMaXN0ZW5lcigpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlckJ5VmFsdWVMaXN0ZW5lcigpIHtcbiAgICBjb25zdCBieVZhbHVlID0gdGhpcy5ieVZhbHVlQ29udHJvbDtcbiAgICB0aGlzLmJ5VmFsdWVTdWJzY3JpcHRpb24gPSBieVZhbHVlLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aChieVZhbHVlLnZhbHVlKSxcbiAgICAgICAgcGFpcndpc2UoKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoW3ByZXYsIGN1cnJlbnRdKSA9PiB7XG4gICAgICAgIGNvbnN0IGFkZFRvRXhjbHVkZWQgPSBjdXJyZW50Lmxlbmd0aCA8IHByZXYubGVuZ3RoO1xuICAgICAgICBjb25zdCBkaWZmID0gYWRkVG9FeGNsdWRlZCA/IGRpZmZlcmVuY2UocHJldiwgY3VycmVudCkgOiBkaWZmZXJlbmNlKGN1cnJlbnQsIHByZXYpO1xuICAgICAgICBkaWZmLmZvckVhY2godiA9PiAoYWRkVG9FeGNsdWRlZCA/IHRoaXMuZXhjbHVkZWRWYWx1ZXMuYWRkKHYpIDogdGhpcy5leGNsdWRlZFZhbHVlcy5kZWxldGUodikpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROb25FeGNsdWRlZFZhbHVlcyhkYXRhOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogKHN0cmluZyB8IG51bWJlcilbXSB7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKHYgPT4gIXRoaXMuZXhjbHVkZWRWYWx1ZXMuaGFzKHYpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcGl2b3QgZGltZW5zaW9ucyBhcyBkZWZpbmVkIGluIHRoZSBwYXJlbnQgZ3JvdXAgY29sdW1uIGhlYWRlciBjbGFzcy5cbiAgICovXG4gIHByaXZhdGUgZ2V0UGl2b3RGaWVsZHMocGFyZW50OiBDb2x1bW5Hcm91cCwgZmllbGRzID0gW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZ3JhbmRQYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50KCk7XG4gICAgY29uc3QgaGVhZGVyQ2xhc3MgPSBwYXJlbnQuZ2V0T3JpZ2luYWxDb2x1bW5Hcm91cCgpLmdldENvbEdyb3VwRGVmKCkuaGVhZGVyQ2xhc3M7XG5cbiAgICBpZiAoZ3JhbmRQYXJlbnQpIHtcbiAgICAgIHRoaXMuZ2V0UGl2b3RGaWVsZHMoZ3JhbmRQYXJlbnQsIGZpZWxkcyk7XG4gICAgfVxuXG4gICAgaGVhZGVyQ2xhc3MgJiYgZmllbGRzLnB1c2goaGVhZGVyQ2xhc3NbMF0pO1xuXG4gICAgcmV0dXJuIGZpZWxkcztcbiAgfVxufVxuIl19
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InjectionToken } from '@angular/core';
|
|
2
|
-
export var DATO_GRID_STORAGE_API = new InjectionToken('
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export var DATO_GRID_STORAGE_API = new InjectionToken('DATO_GRID_STORAGE_API');
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1zZXR0aW5ncy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC1zZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUy9DLE1BQU0sQ0FBQyxJQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFpQix1QkFBdUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhdG9HcmlkU2V0dGluZ3MgfSBmcm9tICcuL2dyaWQtc3RvcmUvZ3JpZC5zdG9yZS50eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZFN0b3JhZ2VBUEkge1xuICBnZXQoZ3JpZE5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8UGFydGlhbDxEYXRvR3JpZFNldHRpbmdzPj47XG4gIHNldChncmlkTmFtZTogc3RyaW5nLCBzdGF0ZTogUGFydGlhbDxEYXRvR3JpZFNldHRpbmdzPik6IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBEQVRPX0dSSURfU1RPUkFHRV9BUEkgPSBuZXcgSW5qZWN0aW9uVG9rZW48R3JpZFN0b3JhZ2VBUEk+KCdEQVRPX0dSSURfU1RPUkFHRV9BUEknKTtcbiJdfQ==
|