@datorama/core 21.3.1-rc.5 → 21.4.0-rc.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.
Files changed (48) hide show
  1. package/bundle.scss +87 -2
  2. package/bundles/datorama-core.umd.js +223 -22
  3. package/bundles/datorama-core.umd.js.map +1 -1
  4. package/bundles/datorama-core.umd.min.js +54 -54
  5. package/bundles/datorama-core.umd.min.js.map +1 -1
  6. package/datorama-core.metadata.json +1 -1
  7. package/esm2015/lib/grid-v2/grid/grid-v2.component.js +5 -2
  8. package/esm2015/lib/grid-v2/grid/grid-v2.types.js +1 -1
  9. package/esm2015/lib/grid-v2/grid-column-header/grid-column-header.component.js +8 -7
  10. package/esm2015/lib/grid-v2/grid-controller/grid-controller.component.js +11 -1
  11. package/esm2015/lib/grid-v2/grid-filter/filter-validator.js +27 -2
  12. package/esm2015/lib/grid-v2/grid-filter/grid-filter.component.js +31 -6
  13. package/esm2015/lib/grid-v2/grid-filter/grid-filter.types.js +1 -1
  14. package/esm2015/lib/grid-v2/grid-pagination/grid-pagination.component.js +16 -3
  15. package/esm2015/lib/grid-v2/grid-store/grid.query.js +34 -4
  16. package/esm2015/lib/grid-v2/grid-store/grid.service.js +58 -4
  17. package/esm2015/lib/grid-v2/grid-store/util.js +10 -1
  18. package/esm2015/lib/icon/icon.types.js +1 -1
  19. package/esm2015/lib/utils/array.js +10 -1
  20. package/esm5/lib/grid-v2/grid/grid-v2.component.js +9 -2
  21. package/esm5/lib/grid-v2/grid/grid-v2.types.js +1 -1
  22. package/esm5/lib/grid-v2/grid-column-header/grid-column-header.component.js +8 -11
  23. package/esm5/lib/grid-v2/grid-controller/grid-controller.component.js +11 -1
  24. package/esm5/lib/grid-v2/grid-filter/filter-validator.js +29 -3
  25. package/esm5/lib/grid-v2/grid-filter/grid-filter.component.js +36 -6
  26. package/esm5/lib/grid-v2/grid-filter/grid-filter.types.js +1 -1
  27. package/esm5/lib/grid-v2/grid-pagination/grid-pagination.component.js +16 -3
  28. package/esm5/lib/grid-v2/grid-store/grid.query.js +34 -4
  29. package/esm5/lib/grid-v2/grid-store/grid.service.js +76 -4
  30. package/esm5/lib/grid-v2/grid-store/util.js +10 -1
  31. package/esm5/lib/icon/icon.types.js +1 -1
  32. package/esm5/lib/utils/array.js +12 -1
  33. package/fesm2015/datorama-core.js +193 -19
  34. package/fesm2015/datorama-core.js.map +1 -1
  35. package/fesm5/datorama-core.js +223 -23
  36. package/fesm5/datorama-core.js.map +1 -1
  37. package/lib/grid-v2/grid/grid-v2.component.d.ts +1 -0
  38. package/lib/grid-v2/grid/grid-v2.types.d.ts +2 -0
  39. package/lib/grid-v2/grid-column-header/grid-column-header.component.d.ts +0 -2
  40. package/lib/grid-v2/grid-controller/grid-controller.component.d.ts +5 -1
  41. package/lib/grid-v2/grid-filter/grid-filter.component.d.ts +6 -0
  42. package/lib/grid-v2/grid-filter/grid-filter.types.d.ts +2 -0
  43. package/lib/grid-v2/grid-pagination/grid-pagination.component.d.ts +4 -0
  44. package/lib/grid-v2/grid-store/grid.query.d.ts +5 -1
  45. package/lib/grid-v2/grid-store/grid.service.d.ts +9 -1
  46. package/lib/grid-v2/grid-store/util.d.ts +7 -1
  47. package/lib/utils/array.d.ts +5 -0
  48. package/package.json +2 -2
@@ -35,6 +35,9 @@ let DatoGridPaginationV2Component = class DatoGridPaginationV2Component {
35
35
  showFirstEllipsis: false,
36
36
  showLastPage: false
37
37
  };
38
+ // Show fit cell content and collapse/expand row groups controls
39
+ this.showBottomControls = false;
40
+ this.isExpanded = true;
38
41
  this.isServerSidePagination = false;
39
42
  // The number of pages displayed in the navigation panel for each view as defined by product.
40
43
  this.MINI_DISPLAY_LENGTH = 2;
@@ -69,7 +72,10 @@ let DatoGridPaginationV2Component = class DatoGridPaginationV2Component {
69
72
  this.initPagination();
70
73
  });
71
74
  this.gridQuery.gridReady$
72
- .pipe(tap(() => (this.gridApi = this.gridQuery.api.grid)), switchMap(() => {
75
+ .pipe(tap(() => {
76
+ this.gridApi = this.gridQuery.api.grid;
77
+ this.showBottomControls = this.gridQuery.getGridOptions().showBottomControls;
78
+ }), switchMap(() => {
73
79
  this.isServerSidePagination = this.gridQuery.isServerSide;
74
80
  return this.isServerSidePagination ? this.gridQuery.serverDataLoaded$ : this.gridQuery.rowDataChanged$;
75
81
  }), throttleTime(100), tapOnce(() => this.initPagination()), untilDestroyed(this))
@@ -185,6 +191,13 @@ let DatoGridPaginationV2Component = class DatoGridPaginationV2Component {
185
191
  trackByPage(index, page) {
186
192
  return page;
187
193
  }
194
+ toggleGroupsState() {
195
+ this.isExpanded ? this.gridApi.collapseAll() : this.gridApi.expandAll();
196
+ this.isExpanded = !this.isExpanded;
197
+ }
198
+ autoFitGrid(type) {
199
+ this.gridService.fitGrid(type);
200
+ }
188
201
  ngOnDestroy() { }
189
202
  /**
190
203
  * Sets the rows display string
@@ -274,7 +287,7 @@ DatoGridPaginationV2Component = __decorate([
274
287
  Component({
275
288
  selector: 'dato-grid-pagination-v2',
276
289
  changeDetection: ChangeDetectionStrategy.OnPush,
277
- template: "<div class=\"d-flex-row d-flex-auto d-flex-wrap container\" [class.small]=\"smallVersion\"\n [attr.data-pages-count]=\"totalPages\"\n [attr.data-current-page]=\"pageNumbersDisplay.currentPage\"\n [attr.data-page-size]=\"rowsPerPage\"\n [attr.data-rows-count]=\"rowCount\">\n <div *ngIf=\"totalPages > 1\" #navigation\n class=\"navigation d-flex-row d-flex-0-0-auto align-center\">\n\n <!-- First Page -->\n <dato-icon-button *ngIf=\"!disableButtons\"\n class=\"mr-4\" data-auto-id=\"pagiantion-first-page\"\n icon=\"chevron-left-double\"\n datoType=\"secondary\"\n datoSize=\"md\"\n [disabled]=\"prevPageDisabled\"\n (click)=\"navigateFirstPage()\">\n </dato-icon-button>\n\n <!-- Previous Page -->\n <dato-icon-button icon=\"arrow-left\" datoType=\"secondary\" datoSize=\"md\"\n [disabled]=\"prevPageDisabled\" data-auto-id=\"pagiantion-previous-page\"\n (click)=\"navigatePrevPage()\">\n </dato-icon-button>\n\n\n <div class=\"d-flex mx-5 align-center number-container\">\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\" data-auto-id=\"pagiantion-previous-batch\"\n *ngIf=\"pageNumbersDisplay.showFirstEllipsis && !smallVersion\"\n (click)=\"showPreviousBatch()\">...\n </dato-link>\n <dato-link class=\"page-number mx-5\" [datoType]=\"page === pageNumbersDisplay.currentPage ? 'primary' : 'secondary'\" datoSize=\"sm\"\n *ngFor=\"let page of pageNumbersDisplay.pages; index as i; trackBy: trackByPage;\" [attr.data-auto-id]=\"'pagiantion-page-' + i\"\n (click)=\"navigatePage(page - 1)\">\n {{page}}\n </dato-link>\n\n <div class=\"d-flex\" *ngIf=\"pageNumbersDisplay.showLastPage && !smallVersion\">\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\" data-auto-id=\"pagiantion-next-batch\"\n (click)=\"showNextBatch()\">...</dato-link>\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\"\n [attr.data-auto-id]=\"'pagiantion-page-' + totalPages\"\n (click)=\"navigatePage(totalPages - 1)\">\n {{totalPages}}\n </dato-link>\n </div>\n\n </div>\n\n <!-- Next Page -->\n <dato-icon-button icon=\"arrow-right\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"navigateNextPage()\" data-auto-id=\"pagiantion-next-page\"\n [disabled]=\"nextPageDisabled\">\n </dato-icon-button>\n\n <!-- Last Page -->\n <dato-icon-button *ngIf=\"!disableButtons\"\n class=\"ml-4\" icon=\"chevron-right-double\"\n datoType=\"secondary\" datoSize=\"md\" data-auto-id=\"pagiantion-last-page\"\n [disabled]=\"nextPageDisabled\"\n (click)=\"navigatePage(totalPages - 1)\">\n </dato-icon-button>\n\n </div>\n\n <div *ngIf=\"totalPages > 1 && !smallVersion\"\n class=\"separator mx-10 my-auto primary-100-background-color\">\n </div>\n\n <div class=\"total d-flex-0-0-auto d-flex-row align-center\">\n <span class=\"dato-note primary-300-color\">{{rowsRange}}</span>\n </div>\n\n</div>\n",
290
+ template: "<div class=\"d-flex-row d-flex-auto d-flex-wrap container\" [class.small]=\"smallVersion\"\n [attr.data-pages-count]=\"totalPages\"\n [attr.data-current-page]=\"pageNumbersDisplay.currentPage\"\n [attr.data-page-size]=\"rowsPerPage\"\n [attr.data-rows-count]=\"rowCount\">\n <div *ngIf=\"totalPages > 1\" #navigation\n class=\"navigation d-flex-row d-flex-0-0-auto align-center\">\n\n <!-- First Page -->\n <dato-icon-button *ngIf=\"!disableButtons\"\n class=\"mr-4\" data-auto-id=\"pagiantion-first-page\"\n icon=\"chevron-left-double\"\n datoType=\"secondary\"\n datoSize=\"md\"\n [disabled]=\"prevPageDisabled\"\n (click)=\"navigateFirstPage()\">\n </dato-icon-button>\n\n <!-- Previous Page -->\n <dato-icon-button icon=\"arrow-left\" datoType=\"secondary\" datoSize=\"md\"\n [disabled]=\"prevPageDisabled\" data-auto-id=\"pagiantion-previous-page\"\n (click)=\"navigatePrevPage()\">\n </dato-icon-button>\n\n\n <div class=\"d-flex mx-5 align-center number-container\">\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\" data-auto-id=\"pagiantion-previous-batch\"\n *ngIf=\"pageNumbersDisplay.showFirstEllipsis && !smallVersion\"\n (click)=\"showPreviousBatch()\">...\n </dato-link>\n <dato-link class=\"page-number mx-5\" [datoType]=\"page === pageNumbersDisplay.currentPage ? 'primary' : 'secondary'\" datoSize=\"sm\"\n *ngFor=\"let page of pageNumbersDisplay.pages; index as i; trackBy: trackByPage;\" [attr.data-auto-id]=\"'pagiantion-page-' + i\"\n (click)=\"navigatePage(page - 1)\">\n {{page}}\n </dato-link>\n\n <div class=\"d-flex\" *ngIf=\"pageNumbersDisplay.showLastPage && !smallVersion\">\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\" data-auto-id=\"pagiantion-next-batch\"\n (click)=\"showNextBatch()\">...</dato-link>\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\"\n [attr.data-auto-id]=\"'pagiantion-page-' + totalPages\"\n (click)=\"navigatePage(totalPages - 1)\">\n {{totalPages}}\n </dato-link>\n </div>\n\n </div>\n\n <!-- Next Page -->\n <dato-icon-button icon=\"arrow-right\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"navigateNextPage()\" data-auto-id=\"pagiantion-next-page\"\n [disabled]=\"nextPageDisabled\">\n </dato-icon-button>\n\n <!-- Last Page -->\n <dato-icon-button *ngIf=\"!disableButtons\"\n class=\"ml-4\" icon=\"chevron-right-double\"\n datoType=\"secondary\" datoSize=\"md\" data-auto-id=\"pagiantion-last-page\"\n [disabled]=\"nextPageDisabled\"\n (click)=\"navigatePage(totalPages - 1)\">\n </dato-icon-button>\n\n </div>\n\n <div *ngIf=\"totalPages > 1 && !smallVersion\"\n class=\"separator mx-10 my-auto primary-100-background-color\">\n </div>\n\n <div class=\"total d-flex-0-0-auto d-flex-row align-center\">\n <span class=\"dato-note primary-300-color\">{{rowsRange}}</span>\n </div>\n\n <div *ngIf=\"showBottomControls\" class=\"grid-controls d-flex d-flex-1 justify-end\">\n <dato-icon-button [icon]=\"isExpanded ? 'collapse' : 'expand'\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"toggleGroupsState()\" data-auto-id=\"pagiantion-next-page\">\n </dato-icon-button>\n\n <dato-icon-button class=\"mx-4\" icon=\"maximize-horizontal\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"autoFitGrid('container')\" data-auto-id=\"pagiantion-next-page\">\n </dato-icon-button>\n\n <dato-icon-button icon=\"minimize-horizontal\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"autoFitGrid('content')\" data-auto-id=\"pagiantion-next-page\">\n </dato-icon-button>\n </div>\n</div>\n",
278
291
  providers: [DecimalPipe],
279
292
  styles: [":host{padding:12px 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;min-height:25px}:host .container{height:25px}:host .navigation .page-number{transition:color .3s ease-in-out}:host .navigation .page-number:first-of-type{margin-left:7px}:host .navigation .page-number:last-of-type{margin-right:7px}:host .separator{width:1px;height:25px}:host .container.small .navigation,:host .container.small .total{margin-top:8px;margin-left:auto;margin-right:auto}"]
280
293
  }),
@@ -286,4 +299,4 @@ DatoGridPaginationV2Component = __decorate([
286
299
  DecimalPipe])
287
300
  ], DatoGridPaginationV2Component);
288
301
  export { DatoGridPaginationV2Component };
289
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC1wYWdpbmF0aW9uL2dyaWQtcGFnaW5hdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUMzRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBU3ZDLElBQWEsNkJBQTZCLEdBQTFDLE1BQWEsNkJBQTZCO0lBaUR4QyxZQUNVLEdBQXNCLEVBQ3RCLFNBQStCLEVBQy9CLFNBQW9CLEVBQ3BCLFdBQXdCLEVBQ3hCLFVBQXVDLEVBQ3ZDLFdBQXdCO1FBTHhCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQXNCO1FBQy9CLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIs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UUFDVCxRQUFRLEVBQUUseUJBQXlCO1FBQ25DLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO1FBQy9DLDYzR0FBK0M7UUFFL0MsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDOztLQUN6QixDQUFDO3FDQW1EZSxpQkFBaUI7UUFDWCxvQkFBb0I7UUFDcEIsU0FBUztRQUNQLFdBQVc7UUFDWiwyQkFBMkI7UUFDMUIsV0FBVztHQXZEdkIsNkJBQTZCLENBNFJ6QztTQTVSWSw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgRGF0b3JhbWEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gQXBhY2hlIExpY2Vuc2UgMi4wIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL2RhdG9yYW1hL2NsaWVudC1jb3JlL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdyaWRBcGkgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5pbXBvcnQgeyB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ25neC10YWtlLXVudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgRGF0b1RyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRhcCwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgR3JpZFF1ZXJ5IH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnF1ZXJ5JztcbmltcG9ydCB7IERhdG9HcmlkQ29udHJvbGxlckNvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQtY29udHJvbGxlci9ncmlkLWNvbnRyb2xsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vLi4vdXRpbHMvdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gJy4uL2dyaWQtc3RvcmUvZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7IERhdG9HcmlkRGF0YUNoYW5nZWRFdmVudCB9IGZyb20gJy4uL2dyaWQvZ3JpZC12Mi50eXBlcyc7XG5pbXBvcnQgeyB0YXBPbmNlIH0gZnJvbSAnLi4vLi4vcngvdGFwJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0by1ncmlkLXBhZ2luYXRpb24tdjInLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQtcGFnaW5hdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dyaWQtcGFnaW5hdGlvbi5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtEZWNpbWFsUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgRGF0b0dyaWRQYWdpbmF0aW9uVjJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKipcbiAgICogVGhpcyBzZXR0ZXIgaXMgdXNlZCB0byBhc3NpZ24gdGhlIG5hdmlnYXRpb24gZWxlbWVudCByZWYgYW5kIHRvIHNldFxuICAgKiB0aGUgcGFnaW5hdGlvbiBzaXplIHdoZW4gdGhlIGNvbXBvbmVudCBzdGFydHNcbiAgICogQHBhcmFtIHtFbGVtZW50UmVmfSBjb250ZW50XG4gICAqL1xuICBAVmlld0NoaWxkKCduYXZpZ2F0aW9uJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgc2V0IGNvbnRlbnQoY29udGVudDogRWxlbWVudFJlZikge1xuICAgIHRoaXMubmF2aWdhdGlvbkVsZW1lbnQgPSBjb250ZW50O1xuICAgIGlmIChjb250ZW50ICYmIHRoaXMuc21hbGxWZXJzaW9uID09PSBudWxsKSB7XG4gICAgICB0aGlzLmNhbGN1bGF0ZU5hdmlnYXRpb25TaXplKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gbnVtYmVyIG9mIHJvd3MgaW4gdGhlIHRhYmxlXG4gIHJvd0NvdW50OiBudW1iZXI7XG4gIHJvd3NQZXJQYWdlOiBudW1iZXI7XG4gIC8vIHdoZW4gdGhlIHdpZGdldCdzIHdpZHRoIGlzIHNtYWxsZXIgdGhhbiBYU19ESVNQTEFZX1NJWkUgZGlzYWJsZSBnbyB0byBmaXJzdC9sYXN0IGJ1dHRvbnNcbiAgZGlzYWJsZUJ1dHRvbnM6IGJvb2xlYW4gPSBudWxsO1xuICAvLyB3aGVuIHRoZSB3aWRnZXQncyB3aWR0aCBpcyBzbWFsbGVyIHRoYW4gU01BTExfRElTUExBWV9TSVpFIGNoYW5nZSB0byBzbWFsbCBwYWdpbmF0aW9uIHZpZXdcbiAgc21hbGxWZXJzaW9uOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG4gIC8vIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgdGFibGVcbiAgdG90YWxQYWdlczogbnVtYmVyO1xuICAvLyBUaGUgZGlzcGxheSByb3dzIHJhbmdlXG4gIHJvd3NSYW5nZTogc3RyaW5nO1xuICAvLyBtYW5hZ2luZyBvYmplY3QgZm9yIHRoZSBuYXZpZ2F0aW9uXG4gIHBhZ2VOdW1iZXJzRGlzcGxheSA9IHtcbiAgICBjdXJyZW50UGFnZTogMSxcbiAgICBwYWdlczogW10sXG4gICAgc2hvd0ZpcnN0RWxsaXBzaXM6IGZhbHNlLFxuICAgIHNob3dMYXN0UGFnZTogZmFsc2VcbiAgfTtcbiAgLy8gaG93IG1hbnkgbnVtYmVycyBhcmUgc2hvd2luZyBvbiB0aGUgc2FtZSB0aW1lIGJlc2lkZXMgdGhlIGxhc3QgcGFnZSBudW1iZXJcbiAgcHJpdmF0ZSBfcGFnZXNJblZpZXc6IG51bWJlcjtcbiAgLy8gVGhlIG51bWJlciBvZiBwYWdlcyBkaXNwbGF5ZWQgb24gZWFjaCBzaWRlIG9mIHRoZSBzZWxlY3RlZCBwYWdlLlxuICBwcml2YXRlIHBhZ2VzT25TaWRlczogbnVtYmVyO1xuICAvLyBpZiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSB0YWJsZSBmaXRzIHRoZSBudW1iZXIgb2YgZGlzcGxheWluZyBwYWdlc1xuICBwcml2YXRlIHBhZ2VzRml0VmlldzogYm9vbGVhbjtcbiAgLy8gaG93IG1hbnkgbnVtYmVycyB0byBzaG93IG9uIGVhY2ggc2lkZSBiZXNpZGVzIHRoZSBzZWxlY3RlZCBudW1iZXJcbiAgcHJpdmF0ZSBuYXZpZ2F0aW9uRWxlbWVudDogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBpc1NlcnZlclNpZGVQYWdpbmF0aW9uID0gZmFsc2U7XG4gIHByaXZhdGUgZ3JpZEFwaTogR3JpZEFwaTtcbiAgLy8gVGhlIG51bWJlciBvZiBwYWdlcyBkaXNwbGF5ZWQgaW4gdGhlIG5hdmlnYXRpb24gcGFuZWwgZm9yIGVhY2ggdmlldyBhcyBkZWZpbmVkIGJ5IHByb2R1Y3QuXG4gIHByaXZhdGUgcmVhZG9ubHkgTUlOSV9ESVNQTEFZX0xFTkdUSDogbnVtYmVyID0gMjtcbiAgcHJpdmF0ZSByZWFkb25seSBESVNQTEFZX0xFTkdUSDogbnVtYmVyID0gNTtcbiAgLy8gV2lkZ2V0J3Mgd2lkdGggdGhlIGRldGVybWluZXMgdGhlIHBhZ2luYXRpb24gdmlldyB0eXBlIFsgc21hbGwsIHhzXSBhcyBkZWZpbmVkIGJ5IHByb2R1Y3QuXG4gIHByaXZhdGUgcmVhZG9ubHkgWFNfRElTUExBWV9TSVpFOiBudW1iZXIgPSAxNjA7XG4gIHByaXZhdGUgcmVhZG9ubHkgU01BTExfRElTUExBWV9TSVpFOiBudW1iZXIgPSAzOTA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBEYXRvVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGdyaWRRdWVyeTogR3JpZFF1ZXJ5LFxuICAgIHByaXZhdGUgZ3JpZFNlcnZpY2U6IEdyaWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udHJvbGxlcjogRGF0b0dyaWRDb250cm9sbGVyQ29tcG9uZW50LFxuICAgIHByaXZhdGUgZGVjaW1hbFBpcGU6IERlY2ltYWxQaXBlXG4gICkge31cblxuICBnZXQgcHJldlBhZ2VEaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuY3VycmVudFBhZ2UgPT09IDE7XG4gIH1cblxuICBnZXQgbmV4dFBhZ2VEaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuY3VycmVudFBhZ2UgPT09IHRoaXMudG90YWxQYWdlcztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZ3JpZFF1ZXJ5XG4gICAgICAud2FpdEZvckdyaWQoKCkgPT4gdGhpcy5ncmlkUXVlcnkuZ3JpZFJlZi5maWx0ZXJDaGFuZ2VkKVxuICAgICAgLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25Hb1RvUGFnZSgwKTtcbiAgICAgICAgdGhpcy5pbml0UGFnaW5hdGlvbigpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmdyaWRRdWVyeS5ncmlkUmVhZHkkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+ICh0aGlzLmdyaWRBcGkgPSB0aGlzLmdyaWRRdWVyeS5hcGkuZ3JpZCkpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbiA9IHRoaXMuZ3JpZFF1ZXJ5LmlzU2VydmVyU2lkZTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pc1NlcnZlclNpZGVQYWdpbmF0aW9uID8gdGhpcy5ncmlkUXVlcnkuc2VydmVyRGF0YUxvYWRlZCQgOiB0aGlzLmdyaWRRdWVyeS5yb3dEYXRhQ2hhbmdlZCQ7XG4gICAgICAgIH0pLFxuICAgICAgICB0aHJvdHRsZVRpbWUoMTAwKSxcbiAgICAgICAgdGFwT25jZSgoKSA9PiB0aGlzLmluaXRQYWdpbmF0aW9uKCkpLFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeyBwYWdpbmF0aW9uUGFnZSA9IDEgfTogRGF0b0dyaWREYXRhQ2hhbmdlZEV2ZW50KSA9PiB7XG4gICAgICAgIC8qKiAgQWcgZ3JpZCBpbmRleCBpcyBmcm9tIDAsIGJ1dCB0aGUgaW5kZXggZmlyZWQgZnJvbSB0aGUgZXZlbnQgc3RhcnQgZnJvbSAxKi9cbiAgICAgICAgdGhpcy5pbml0UGFnaW5hdGlvbihwYWdpbmF0aW9uUGFnZSAtIDEpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjYWxjdWxhdGUgdGhlIHJvdyBjb3VudCBhbmQgcGFnZSBsZW5ndGhzXG4gICAqL1xuICBjYWxjdWxhdGVSb3dzQ291bnQodG90YWxSb3dzOiBudW1iZXIpIHtcbiAgICB0aGlzLnRvdGFsUGFnZXMgPSB0b3RhbFJvd3MgPyBNYXRoLmNlaWwodG90YWxSb3dzIC8gdGhpcy5yb3dzUGVyUGFnZSkgOiB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdldFRvdGFsUGFnZXMoKTtcbiAgICB0aGlzLnJvd0NvdW50ID0gdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25HZXRSb3dDb3VudCgpO1xuICAgIHRoaXMuc2V0Um93c0Rpc3BsYXlSYW5nZSh0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5jdXJyZW50UGFnZSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaW5pdFBhZ2luYXRpb24ocGFnZU51bWJlciA9IDApIHtcbiAgICBjb25zdCB7IHRvdGFsUm93cywgZW5hYmxlZCB9ID0gdGhpcy5ncmlkUXVlcnkuc2VydmVyU2lkZUNvbmZpZztcbiAgICBpZiAoZW5hYmxlZCAmJiBpc05pbCh0b3RhbFJvd3MpKSByZXR1cm47XG4gICAgLyoqIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgcGFnZXMgc3RhcnRpbmcgZnJvbSAxICovXG4gICAgdGhpcy5yb3dzUGVyUGFnZSA9IHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR2V0UGFnZVNpemUoKTtcbiAgICB0aGlzLmNhbGN1bGF0ZVJvd3NDb3VudCh0b3RhbFJvd3MpO1xuICAgIC8qKiBzZXQgdGhlIGluaXQgdmFsdWUgb2YgdGhlIHBhZ2luYXRpb24gdmlldyB0byBub3JtYWwgc2l6ZSAqL1xuICAgIHRoaXMucGFnZXNJblZpZXcgPSB0aGlzLkRJU1BMQVlfTEVOR1RIO1xuICAgIC8qKiBjdXJyZW50IHBhZ2UgaW5kZXggc3RhcnRzIGZyb20gMCAqL1xuICAgIHRoaXMubmF2aWdhdGVQYWdlKHBhZ2VOdW1iZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbnVtYmVyIG9mIHBhZ2UgbnVtYmVycyBzaG93aW5nIGF0IHRoZSBzYW1lIHRpbWUgaW4gdGhlIG5hdmlnYXRpb25cbiAgICogcGFuZWwgJiB1cGRhdGUgdGhlIG51bWJlciBvZiBwYWdlcyBkaXNwbGF5ZWQgb24gZWFjaCBzaWRlIG9mIHRoZSBzZWxlY3RlZCBwYWdlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbmV3TnVtYmVyc0xlbmd0aCAtIFRoZSBuZXcgbGVuZ3RoIG9mIHRoZSBkaXNwbGF5aW5nIG51bWJlcnNcbiAgICovXG4gIHNldCBwYWdlc0luVmlldyhuZXdOdW1iZXJzTGVuZ3RoOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wYWdlc0luVmlldyA9IG5ld051bWJlcnNMZW5ndGg7XG4gICAgdGhpcy5wYWdlc09uU2lkZXMgPSBNYXRoLmZsb29yKHRoaXMuX3BhZ2VzSW5WaWV3IC8gMik7XG4gICAgdGhpcy5wYWdlc0ZpdFZpZXcgPSB0aGlzLl9wYWdlc0luVmlldyArIDEgPj0gdGhpcy50b3RhbFBhZ2VzO1xuICAgIC8vIGludmFsaWRhdGUgZGlzcGxheWluZyBwYWdlcyB1cG9uIHJlc2l6ZVxuICAgIHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LnBhZ2VzID0gW107XG4gIH1cblxuICAvKiogVE9ETyBUaGlzIGlzIG5vdCBsaXN0ZW5pbmcgdG8gc2l6ZSBjaGFuZ2VzICovXG4gIGNhbGN1bGF0ZU5hdmlnYXRpb25TaXplKCkge1xuICAgIGlmICh0aGlzLm5hdmlnYXRpb25FbGVtZW50KSB7XG4gICAgICBjb25zdCBlbGVtZW50V2lkdGggPSB0aGlzLm5hdmlnYXRpb25FbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbnMgPSBlbGVtZW50V2lkdGggPCB0aGlzLlhTX0RJU1BMQVlfU0laRTtcbiAgICAgIGlmIChlbGVtZW50V2lkdGggPCB0aGlzLlNNQUxMX0RJU1BMQVlfU0laRSkge1xuICAgICAgICBpZiAodGhpcy5fcGFnZXNJblZpZXcgIT09IHRoaXMuTUlOSV9ESVNQTEFZX0xFTkdUSCkge1xuICAgICAgICAgIHRoaXMuc21hbGxWZXJzaW9uID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnBhZ2VzSW5WaWV3ID0gdGhpcy5NSU5JX0RJU1BMQVlfTEVOR1RIO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5fcGFnZXNJblZpZXcgIT09IHRoaXMuRElTUExBWV9MRU5HVEgpIHtcbiAgICAgICAgICB0aGlzLnNtYWxsVmVyc2lvbiA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMucGFnZXNJblZpZXcgPSB0aGlzLkRJU1BMQVlfTEVOR1RIO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byBhIGdpdmVuIHBhZ2UuXG4gICAqIHVwZGF0ZXMgdGhlIGRpc3BsYXlpbmcgcGFnZSBudW1iZXJzIGFuZCB0aGUgY3VycmVudCBudW1iZXIuXG4gICAqIEBwYXJhbSBwYWdlTnVtYmVyIC0gVGhlIHBhZ2UgbnVtYmVyIHRvIG5hdmlnYXRlIHRvXG4gICAqL1xuICBuYXZpZ2F0ZVBhZ2UocGFnZU51bWJlcjogbnVtYmVyKSB7XG4gICAgaWYgKHBhZ2VOdW1iZXIgPj0gMCAmJiBwYWdlTnVtYmVyIDw9IHRoaXMudG90YWxQYWdlcyAtIDEpIHtcbiAgICAgIHRoaXMuc2hvdWxkU2hvd0xvYWRlcihwYWdlTnVtYmVyKSAmJiB0aGlzLmdyaWRTZXJ2aWNlLnNldExvYWRpbmcodHJ1ZSk7XG4gICAgICB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdvVG9QYWdlKHBhZ2VOdW1iZXIpO1xuICAgICAgLy8gQWRkIDEgYmVjYXVzZSBhZy1ncmlkIEFQSSB3b3JrcyB3aXRoIGZpcnN0IGluZGV4IDBcbiAgICAgIGNvbnN0IGRpc3BsYXlOdW1iZXIgPSBwYWdlTnVtYmVyICsgMTtcbiAgICAgIHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LmN1cnJlbnRQYWdlID0gZGlzcGxheU51bWJlcjtcblxuICAgICAgaWYgKHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LnBhZ2VzLmxlbmd0aCA9PT0gMCB8fCAhdGhpcy5wYWdlc0ZpdFZpZXcpIHtcbiAgICAgICAgdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkucGFnZXMgPSB0aGlzLmdldFBhZ2VzKGRpc3BsYXlOdW1iZXIpO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgdGhlIGRpc3BsYXlpbmcgcm93cyByYW5nZVxuICAgICAgdGhpcy5zZXRSb3dzRGlzcGxheVJhbmdlKGRpc3BsYXlOdW1iZXIpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIG5hdmlnYXRlRmlyc3RQYWdlKCkge1xuICAgIHRoaXMubmF2aWdhdGVQYWdlKDApO1xuICB9XG5cbiAgbmF2aWdhdGVOZXh0UGFnZSgpIHtcbiAgICB0aGlzLm5hdmlnYXRlUGFnZSh0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5jdXJyZW50UGFnZSk7XG4gIH1cblxuICBuYXZpZ2F0ZVByZXZQYWdlKCkge1xuICAgIC8qKiBhZy1ncmlkIEFQSSB3b3JrcyB3aXRoIGZpcnN0IGluZGV4IDAgc28gd2UgbmVlZCB0byByZWR1Y2UgMiBpbnN0ZWFkIG9mIG9uZSAqL1xuICAgIGNvbnN0IHByZXZpb3VzUGFnZUluZGV4ID0gdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuY3VycmVudFBhZ2UgLSAyO1xuICAgIHRoaXMubmF2aWdhdGVQYWdlKHByZXZpb3VzUGFnZUluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB1cGRhdGVzIHRoZSBkaXNwbGF5aW5nIHBhZ2UgbnVtYmVycyB0byBzaG93IHRoZSBuZXh0IG51bWJlcnMgc2V0XG4gICAqL1xuICBzaG93TmV4dEJhdGNoKCkge1xuICAgIGNvbnN0IGFuY2hvciA9IHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LnBhZ2VzWzBdICsgdGhpcy5fcGFnZXNJblZpZXcgKyB0aGlzLnBhZ2VzT25TaWRlcztcbiAgICB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5wYWdlcyA9IHRoaXMuZ2V0UGFnZXMoYW5jaG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB1cGRhdGVzIHRoZSBkaXNwbGF5aW5nIHBhZ2UgbnVtYmVycyB0byBzaG93IHRoZSBwcmV2aW91cyBudW1iZXJzIHNldFxuICAgKi9cbiAgc2hvd1ByZXZpb3VzQmF0Y2goKSB7XG4gICAgY29uc3QgYW5jaG9yID0gdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkucGFnZXNbMF0gLSB0aGlzLl9wYWdlc0luVmlldyArIHRoaXMucGFnZXNPblNpZGVzO1xuICAgIHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LnBhZ2VzID0gdGhpcy5nZXRQYWdlcyhhbmNob3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0cmFja0J5IGZ1bmN0aW9uIGZvciB0aGUgbmdGb3JcbiAgICogQHBhcmFtIGluZGV4IC0gY3VycmVudCBpdGVtIGluZGV4XG4gICAqIEBwYXJhbSBwYWdlIC0gdGhlIGN1cnJlbnQgaXRlbSdzIHBhZ2UgbnVtYmVyXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHRyYWNrQnlQYWdlKGluZGV4OiBudW1iZXIsIHBhZ2U6IG51bWJlcikge1xuICAgIHJldHVybiBwYWdlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSByb3dzIGRpc3BsYXkgc3RyaW5nXG4gICAqIEBwYXJhbSBkaXNwbGF5TnVtYmVyIC0gVGhlIGN1cnJlbnQgcGFnZSBudW1iZXIgKHN0YXJ0aW5nIGluZGV4IDEpXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHNldFJvd3NEaXNwbGF5UmFuZ2UoZGlzcGxheU51bWJlcik6IHZvaWQge1xuICAgIC8qKiBEZWNyZWFzZSBieSAxIGJlY2F1c2UgYWctZ3JpZCBBUEkgd29ya3Mgd2l0aCBmaXJzdCBpbmRleCAwICovXG4gICAgY29uc3QgcGFnZU51bWJlciA9IGRpc3BsYXlOdW1iZXIgLSAxO1xuICAgIGNvbnN0IGZpcnN0Um93SW5kZXggPSAxICsgcGFnZU51bWJlciAqIHRoaXMucm93c1BlclBhZ2U7XG4gICAgY29uc3QgbGFzdFJvdyA9IChwYWdlTnVtYmVyICsgMSkgKiB0aGlzLnJvd3NQZXJQYWdlO1xuICAgIGNvbnN0IGxhc3RSb3dJbmRleCA9IHRoaXMucm93Q291bnQgPiBsYXN0Um93ID8gbGFzdFJvdyA6IHRoaXMucm93Q291bnQ7XG4gICAgdGhpcy5yb3dzUmFuZ2UgPVxuICAgICAgdGhpcy5yb3dDb3VudCA+IDBcbiAgICAgICAgPyB0aGlzLnRyYW5zbGF0ZS50cmFuc2Zvcm0oJ2NvcmUuaXRlbXNSYW5nZScsIHtcbiAgICAgICAgICAgIHJhbmdlOiBgJHt0aGlzLmRlY2ltYWxQaXBlLnRyYW5zZm9ybShmaXJzdFJvd0luZGV4KX0gLSAke3RoaXMuZGVjaW1hbFBpcGUudHJhbnNmb3JtKGxhc3RSb3dJbmRleCl9YCxcbiAgICAgICAgICAgIG51bWJlcjogdGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0odGhpcy5yb3dDb3VudClcbiAgICAgICAgICB9KVxuICAgICAgICA6IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSgnY29yZS5udW1iZXJPZkl0ZW1zJywgeyBudW1iZXI6IDAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIG51bWJlciBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB0aGUgZGlzcGxheWluZyBudW1iZXJzLlxuICAgKiBAcGFyYW0gYW5jaG9yIC0gVGhlIG51bWJlciB0byB1c2UgYXMgYW4gYW5jaG9yIGZvciB0aGUgY2FsY3VsYXRpb25zLlxuICAgKiBAcmV0dXJuIHtudW1iZXJbXX0gLSBBbiBhcnJheSBvZiB0aGUgbmV3IG51bWJlcnMgdG8gZGlzcGxheVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRQYWdlcyhhbmNob3I6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICBjb25zdCBwYWdlc1RvRGlzcGxheSA9IFtdO1xuICAgIC8vIGluZGljYXRlcyByYXRoZXIgdGhlIHRhYmxlIGhhcyBtb3JlIHBhZ2VzIHRoYW4gdGhlIGRpc3BsYXkgbGVuZ3RoLCB3ZSBhZGQgMSBiZWNhdXNlIG9mXG4gICAgLy8gYSBsb2dpYyB0aGF0IHNheXMgdGhhdCBpZiB5b3VyIGN1cnJlbnQgdmlldyBpcyAxIG51bWJlciBhd2F5IGZyb20gdGhlIGxhc3QgcGFnZVxuICAgIC8vIGRpc3BsYXkgaGltIGFzIHdlbGwuXG4gICAgdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuc2hvd0xhc3RQYWdlID0gIXRoaXMucGFnZXNGaXRWaWV3ICYmIGFuY2hvciArIHRoaXMucGFnZXNPblNpZGVzIDwgdGhpcy50b3RhbFBhZ2VzO1xuICAgIHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LnNob3dGaXJzdEVsbGlwc2lzID0gIXRoaXMucGFnZXNGaXRWaWV3ICYmIGFuY2hvciAtIHRoaXMucGFnZXNPblNpZGVzID4gMTtcblxuICAgIC8vIHNldCB0aGUgZmlyc3QgbnVtYmVyIHRvIGJlIGRpc3BsYXllZFxuICAgIGNvbnN0IGZpcnN0TnVtYmVyID0gdGhpcy5nZXRGaXJzdFBhZ2VOdW1iZXIoYW5jaG9yKTtcbiAgICBjb25zdCBsb29wTGVuZ3RoID0gdGhpcy5wYWdlc0ZpdFZpZXcgPyB0aGlzLnRvdGFsUGFnZXMgOiB0aGlzLl9wYWdlc0luVmlldztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxvb3BMZW5ndGg7IGkrKykge1xuICAgICAgcGFnZXNUb0Rpc3BsYXkucHVzaChmaXJzdE51bWJlciArIGkpO1xuICAgIH1cbiAgICAvLyBJZiB0aGUgbGFzdCBkaXNwbGF5ZWQgbnVtYmVyIGlzIDEgbnVtYmVyIGJlZm9yZSB0aGUgbGFzdCBwYWdlIGRpc3BsYXkgaGltIGFzIHdlbGxcbiAgICBpZiAoIXRoaXMuc21hbGxWZXJzaW9uICYmIHBhZ2VzVG9EaXNwbGF5W2xvb3BMZW5ndGggLSAxXSArIDEgPT09IHRoaXMudG90YWxQYWdlcykge1xuICAgICAgcGFnZXNUb0Rpc3BsYXkucHVzaCh0aGlzLnRvdGFsUGFnZXMpO1xuICAgICAgdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuc2hvd0xhc3RQYWdlID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBwYWdlc1RvRGlzcGxheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBudW1iZXIgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBwYWdpbmF0aW9uIG5hdmlnYXRpb24gdmlld1xuICAgKiBAcGFyYW0ge251bWJlcn0gYW5jaG9yIC0gVGhlIGFuY2hvciBmb3IgdGhlIGNhbGN1bGF0aW9uc1xuICAgKiBAcmV0dXJuIHtudW1iZXJ9IC0gVGhlIGZpcnN0IG51bWJlciB0byBiZSBkaXNwbGF5ZWRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgZ2V0Rmlyc3RQYWdlTnVtYmVyKGFuY2hvcjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgZmlyc3ROdW1iZXIgPSBhbmNob3IgLSB0aGlzLnBhZ2VzT25TaWRlcztcbiAgICAvLyBJZiBpbiBzbWFsbCB2ZXJzaW9uIHNob3cgb25seSBuZXh0IHBhZ2Ugc28gc2V0IGZpcnN0IHBhZ2UgdG8gYW5jaG9yXG4gICAgaWYgKHRoaXMuc21hbGxWZXJzaW9uICYmIGFuY2hvciA+IDEpIHtcbiAgICAgIGlmIChhbmNob3IgIT09IHRoaXMudG90YWxQYWdlcykge1xuICAgICAgICBmaXJzdE51bWJlciA9IGFuY2hvcjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCF0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5zaG93Rmlyc3RFbGxpcHNpcykge1xuICAgICAgZmlyc3ROdW1iZXIgPSAxO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMucGFnZU51bWJlcnNEaXNwbGF5LnNob3dMYXN0UGFnZSkge1xuICAgICAgZmlyc3ROdW1iZXIgPSB0aGlzLnRvdGFsUGFnZXMgLSAodGhpcy5fcGFnZXNJblZpZXcgLSAxKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpcnN0TnVtYmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRTaG93TG9hZGVyKHBhZ2VOdW1iZXI6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzU2VydmVyU2lkZVBhZ2luYXRpb24gJiYgaXNOaWwodGhpcy5ncmlkQXBpLmdldENhY2hlQmxvY2tTdGF0ZSgpW3BhZ2VOdW1iZXJdKTtcbiAgfVxufVxuIl19
302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC1wYWdpbmF0aW9uL2dyaWQtcGFnaW5hdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUMzRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBU3ZDLElBQWEsNkJBQTZCLEdBQTFDLE1BQWEsNkJBQTZCO0lBc0R4QyxZQUNVLEdBQXNCLEVBQ3RCLFNBQStCLEVBQy9CLFNBQW9CLEVBQ3BCLFdBQXdCLEVBQ3hCLFVBQXVDLEVBQ3ZDLFdBQXdCO1FBTHhCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQXNCO1FBQy9CLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIs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R0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDekQ7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsVUFBa0I7UUFDekMsT0FBTyxJQUFJLENBQUMsc0JBQXNCLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzdGLENBQUM7Q0FDRixDQUFBOztZQXRQZ0IsaUJBQWlCO1lBQ1gsb0JBQW9CO1lBQ3BCLFNBQVM7WUFDUCxXQUFXO1lBQ1osMkJBQTJCO1lBQzFCLFdBQVc7O0FBckRsQztJQURDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7OEJBQ3JCLFVBQVU7cUNBQVYsVUFBVTs0REFLOUI7QUFaVSw2QkFBNkI7SUFQekMsU0FBUyxDQUFDO1FBQ1QsUUFBUSxFQUFFLHlCQUF5QjtRQUNuQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtRQUMvQyxtb0lBQStDO1FBRS9DLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQzs7S0FDekIsQ0FBQztxQ0F3RGUsaUJBQWlCO1FBQ1gsb0JBQW9CO1FBQ3BCLFNBQVM7UUFDUCxXQUFXO1FBQ1osMkJBQTJCO1FBQzFCLFdBQVc7R0E1RHZCLDZCQUE2QixDQTZTekM7U0E3U1ksNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IERhdG9yYW1hLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIEFwYWNoZSBMaWNlbnNlIDIuMCBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRvcmFtYS9jbGllbnQtY29yZS9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHcmlkQXBpIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgdW50aWxEZXN0cm95ZWQgfSBmcm9tICduZ3gtdGFrZS11bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IERhdG9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YXAsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEdyaWRRdWVyeSB9IGZyb20gJy4uL2dyaWQtc3RvcmUvZ3JpZC5xdWVyeSc7XG5pbXBvcnQgeyBEYXRvR3JpZENvbnRyb2xsZXJDb21wb25lbnQgfSBmcm9tICcuLi9ncmlkLWNvbnRyb2xsZXIvZ3JpZC1jb250cm9sbGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uLy4uL3V0aWxzL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgR3JpZFNlcnZpY2UgfSBmcm9tICcuLi9ncmlkLXN0b3JlL2dyaWQuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRvR3JpZERhdGFDaGFuZ2VkRXZlbnQgfSBmcm9tICcuLi9ncmlkL2dyaWQtdjIudHlwZXMnO1xuaW1wb3J0IHsgdGFwT25jZSB9IGZyb20gJy4uLy4uL3J4L3RhcCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdG8tZ3JpZC1wYWdpbmF0aW9uLXYyJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmlkLXBhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkLXBhZ2luYXRpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbRGVjaW1hbFBpcGVdXG59KVxuZXhwb3J0IGNsYXNzIERhdG9HcmlkUGFnaW5hdGlvblYyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqIFRoaXMgc2V0dGVyIGlzIHVzZWQgdG8gYXNzaWduIHRoZSBuYXZpZ2F0aW9uIGVsZW1lbnQgcmVmIGFuZCB0byBzZXRcbiAgICogdGhlIHBhZ2luYXRpb24gc2l6ZSB3aGVuIHRoZSBjb21wb25lbnQgc3RhcnRzXG4gICAqIEBwYXJhbSB7RWxlbWVudFJlZn0gY29udGVudFxuICAgKi9cbiAgQFZpZXdDaGlsZCgnbmF2aWdhdGlvbicsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHNldCBjb250ZW50KGNvbnRlbnQ6IEVsZW1lbnRSZWYpIHtcbiAgICB0aGlzLm5hdmlnYXRpb25FbGVtZW50ID0gY29udGVudDtcbiAgICBpZiAoY29udGVudCAmJiB0aGlzLnNtYWxsVmVyc2lvbiA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5jYWxjdWxhdGVOYXZpZ2F0aW9uU2l6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG51bWJlciBvZiByb3dzIGluIHRoZSB0YWJsZVxuICByb3dDb3VudDogbnVtYmVyO1xuICByb3dzUGVyUGFnZTogbnVtYmVyO1xuICAvLyB3aGVuIHRoZSB3aWRnZXQncyB3aWR0aCBpcyBzbWFsbGVyIHRoYW4gWFNfRElTUExBWV9TSVpFIGRpc2FibGUgZ28gdG8gZmlyc3QvbGFzdCBidXR0b25zXG4gIGRpc2FibGVCdXR0b25zOiBib29sZWFuID0gbnVsbDtcbiAgLy8gd2hlbiB0aGUgd2lkZ2V0J3Mgd2lkdGggaXMgc21hbGxlciB0aGFuIFNNQUxMX0RJU1BMQVlfU0laRSBjaGFuZ2UgdG8gc21hbGwgcGFnaW5hdGlvbiB2aWV3XG4gIHNtYWxsVmVyc2lvbjogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuICAvLyBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIHRhYmxlXG4gIHRvdGFsUGFnZXM6IG51bWJlcjtcbiAgLy8gVGhlIGRpc3BsYXkgcm93cyByYW5nZVxuICByb3dzUmFuZ2U6IHN0cmluZztcbiAgLy8gbWFuYWdpbmcgb2JqZWN0IGZvciB0aGUgbmF2aWdhdGlvblxuICBwYWdlTnVtYmVyc0Rpc3BsYXkgPSB7XG4gICAgY3VycmVudFBhZ2U6IDEsXG4gICAgcGFnZXM6IFtdLFxuICAgIHNob3dGaXJzdEVsbGlwc2lzOiBmYWxzZSxcbiAgICBzaG93TGFzdFBhZ2U6IGZhbHNlXG4gIH07XG5cbiAgLy8gU2hvdyBmaXQgY2VsbCBjb250ZW50IGFuZCBjb2xsYXBzZS9leHBhbmQgcm93IGdyb3VwcyBjb250cm9sc1xuICBzaG93Qm90dG9tQ29udHJvbHMgPSBmYWxzZTtcbiAgaXNFeHBhbmRlZCA9IHRydWU7XG5cbiAgLy8gaG93IG1hbnkgbnVtYmVycyBhcmUgc2hvd2luZyBvbiB0aGUgc2FtZSB0aW1lIGJlc2lkZXMgdGhlIGxhc3QgcGFnZSBudW1iZXJcbiAgcHJpdmF0ZSBfcGFnZXNJblZpZXc6IG51bWJlcjtcbiAgLy8gVGhlIG51bWJlciBvZiBwYWdlcyBkaXNwbGF5ZWQgb24gZWFjaCBzaWRlIG9mIHRoZSBzZWxlY3RlZCBwYWdlLlxuICBwcml2YXRlIHBhZ2VzT25TaWRlczogbnVtYmVyO1xuICAvLyBpZiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSB0YWJsZSBmaXRzIHRoZSBudW1iZXIgb2YgZGlzcGxheWluZyBwYWdlc1xuICBwcml2YXRlIHBhZ2VzRml0VmlldzogYm9vbGVhbjtcbiAgLy8gaG93IG1hbnkgbnVtYmVycyB0byBzaG93IG9uIGVhY2ggc2lkZSBiZXNpZGVzIHRoZSBzZWxlY3RlZCBudW1iZXJcbiAgcHJpdmF0ZSBuYXZpZ2F0aW9uRWxlbWVudDogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBpc1NlcnZlclNpZGVQYWdpbmF0aW9uID0gZmFsc2U7XG4gIHByaXZhdGUgZ3JpZEFwaTogR3JpZEFwaTtcbiAgLy8gVGhlIG51bWJlciBvZiBwYWdlcyBkaXNwbGF5ZWQgaW4gdGhlIG5hdmlnYXRpb24gcGFuZWwgZm9yIGVhY2ggdmlldyBhcyBkZWZpbmVkIGJ5IHByb2R1Y3QuXG4gIHByaXZhdGUgcmVhZG9ubHkgTUlOSV9ESVNQTEFZX0xFTkdUSDogbnVtYmVyID0gMjtcbiAgcHJpdmF0ZSByZWFkb25seSBESVNQTEFZX0xFTkdUSDogbnVtYmVyID0gNTtcbiAgLy8gV2lkZ2V0J3Mgd2lkdGggdGhlIGRldGVybWluZXMgdGhlIHBhZ2luYXRpb24gdmlldyB0eXBlIFsgc21hbGwsIHhzXSBhcyBkZWZpbmVkIGJ5IHByb2R1Y3QuXG4gIHByaXZhdGUgcmVhZG9ubHkgWFNfRElTUExBWV9TSVpFOiBudW1iZXIgPSAxNjA7XG4gIHByaXZhdGUgcmVhZG9ubHkgU01BTExfRElTUExBWV9TSVpFOiBudW1iZXIgPSAzOTA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBEYXRvVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGdyaWRRdWVyeTogR3JpZFF1ZXJ5LFxuICAgIHByaXZhdGUgZ3JpZFNlcnZpY2U6IEdyaWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udHJvbGxlcjogRGF0b0dyaWRDb250cm9sbGVyQ29tcG9uZW50LFxuICAgIHByaXZhdGUgZGVjaW1hbFBpcGU6IERlY2ltYWxQaXBlXG4gICkge31cblxuICBnZXQgcHJldlBhZ2VEaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuY3VycmVudFBhZ2UgPT09IDE7XG4gIH1cblxuICBnZXQgbmV4dFBhZ2VEaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuY3VycmVudFBhZ2UgPT09IHRoaXMudG90YWxQYWdlcztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZ3JpZFF1ZXJ5XG4gICAgICAud2FpdEZvckdyaWQoKCkgPT4gdGhpcy5ncmlkUXVlcnkuZ3JpZFJlZi5maWx0ZXJDaGFuZ2VkKVxuICAgICAgLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25Hb1RvUGFnZSgwKTtcbiAgICAgICAgdGhpcy5pbml0UGFnaW5hdGlvbigpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmdyaWRRdWVyeS5ncmlkUmVhZHkkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmdyaWRBcGkgPSB0aGlzLmdyaWRRdWVyeS5hcGkuZ3JpZDtcbiAgICAgICAgICB0aGlzLnNob3dCb3R0b21Db250cm9scyA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEdyaWRPcHRpb25zKCkuc2hvd0JvdHRvbUNvbnRyb2xzO1xuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzU2VydmVyU2lkZVBhZ2luYXRpb24gPSB0aGlzLmdyaWRRdWVyeS5pc1NlcnZlclNpZGU7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbiA/IHRoaXMuZ3JpZFF1ZXJ5LnNlcnZlckRhdGFMb2FkZWQkIDogdGhpcy5ncmlkUXVlcnkucm93RGF0YUNoYW5nZWQkO1xuICAgICAgICB9KSxcbiAgICAgICAgdGhyb3R0bGVUaW1lKDEwMCksXG4gICAgICAgIHRhcE9uY2UoKCkgPT4gdGhpcy5pbml0UGFnaW5hdGlvbigpKSxcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHsgcGFnaW5hdGlvblBhZ2UgPSAxIH06IERhdG9HcmlkRGF0YUNoYW5nZWRFdmVudCkgPT4ge1xuICAgICAgICAvKiogIEFnIGdyaWQgaW5kZXggaXMgZnJvbSAwLCBidXQgdGhlIGluZGV4IGZpcmVkIGZyb20gdGhlIGV2ZW50IHN0YXJ0IGZyb20gMSovXG4gICAgICAgIHRoaXMuaW5pdFBhZ2luYXRpb24ocGFnaW5hdGlvblBhZ2UgLSAxKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY2FsY3VsYXRlIHRoZSByb3cgY291bnQgYW5kIHBhZ2UgbGVuZ3Roc1xuICAgKi9cbiAgY2FsY3VsYXRlUm93c0NvdW50KHRvdGFsUm93czogbnVtYmVyKSB7XG4gICAgdGhpcy50b3RhbFBhZ2VzID0gdG90YWxSb3dzID8gTWF0aC5jZWlsKHRvdGFsUm93cyAvIHRoaXMucm93c1BlclBhZ2UpIDogdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25HZXRUb3RhbFBhZ2VzKCk7XG4gICAgdGhpcy5yb3dDb3VudCA9IHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR2V0Um93Q291bnQoKTtcbiAgICB0aGlzLnNldFJvd3NEaXNwbGF5UmFuZ2UodGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuY3VycmVudFBhZ2UpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGluaXRQYWdpbmF0aW9uKHBhZ2VOdW1iZXIgPSAwKSB7XG4gICAgY29uc3QgeyB0b3RhbFJvd3MsIGVuYWJsZWQgfSA9IHRoaXMuZ3JpZFF1ZXJ5LnNlcnZlclNpZGVDb25maWc7XG4gICAgaWYgKGVuYWJsZWQgJiYgaXNOaWwodG90YWxSb3dzKSkgcmV0dXJuO1xuICAgIC8qKiByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHBhZ2VzIHN0YXJ0aW5nIGZyb20gMSAqL1xuICAgIHRoaXMucm93c1BlclBhZ2UgPSB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdldFBhZ2VTaXplKCk7XG4gICAgdGhpcy5jYWxjdWxhdGVSb3dzQ291bnQodG90YWxSb3dzKTtcbiAgICAvKiogc2V0IHRoZSBpbml0IHZhbHVlIG9mIHRoZSBwYWdpbmF0aW9uIHZpZXcgdG8gbm9ybWFsIHNpemUgKi9cbiAgICB0aGlzLnBhZ2VzSW5WaWV3ID0gdGhpcy5ESVNQTEFZX0xFTkdUSDtcbiAgICAvKiogY3VycmVudCBwYWdlIGluZGV4IHN0YXJ0cyBmcm9tIDAgKi9cbiAgICB0aGlzLm5hdmlnYXRlUGFnZShwYWdlTnVtYmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG51bWJlciBvZiBwYWdlIG51bWJlcnMgc2hvd2luZyBhdCB0aGUgc2FtZSB0aW1lIGluIHRoZSBuYXZpZ2F0aW9uXG4gICAqIHBhbmVsICYgdXBkYXRlIHRoZSBudW1iZXIgb2YgcGFnZXMgZGlzcGxheWVkIG9uIGVhY2ggc2lkZSBvZiB0aGUgc2VsZWN0ZWQgcGFnZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG5ld051bWJlcnNMZW5ndGggLSBUaGUgbmV3IGxlbmd0aCBvZiB0aGUgZGlzcGxheWluZyBudW1iZXJzXG4gICAqL1xuICBzZXQgcGFnZXNJblZpZXcobmV3TnVtYmVyc0xlbmd0aDogbnVtYmVyKSB7XG4gICAgdGhpcy5fcGFnZXNJblZpZXcgPSBuZXdOdW1iZXJzTGVuZ3RoO1xuICAgIHRoaXMucGFnZXNPblNpZGVzID0gTWF0aC5mbG9vcih0aGlzLl9wYWdlc0luVmlldyAvIDIpO1xuICAgIHRoaXMucGFnZXNGaXRWaWV3ID0gdGhpcy5fcGFnZXNJblZpZXcgKyAxID49IHRoaXMudG90YWxQYWdlcztcbiAgICAvLyBpbnZhbGlkYXRlIGRpc3BsYXlpbmcgcGFnZXMgdXBvbiByZXNpemVcbiAgICB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5wYWdlcyA9IFtdO1xuICB9XG5cbiAgLyoqIFRPRE8gVGhpcyBpcyBub3QgbGlzdGVuaW5nIHRvIHNpemUgY2hhbmdlcyAqL1xuICBjYWxjdWxhdGVOYXZpZ2F0aW9uU2l6ZSgpIHtcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uRWxlbWVudCkge1xuICAgICAgY29uc3QgZWxlbWVudFdpZHRoID0gdGhpcy5uYXZpZ2F0aW9uRWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25zID0gZWxlbWVudFdpZHRoIDwgdGhpcy5YU19ESVNQTEFZX1NJWkU7XG4gICAgICBpZiAoZWxlbWVudFdpZHRoIDwgdGhpcy5TTUFMTF9ESVNQTEFZX1NJWkUpIHtcbiAgICAgICAgaWYgKHRoaXMuX3BhZ2VzSW5WaWV3ICE9PSB0aGlzLk1JTklfRElTUExBWV9MRU5HVEgpIHtcbiAgICAgICAgICB0aGlzLnNtYWxsVmVyc2lvbiA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wYWdlc0luVmlldyA9IHRoaXMuTUlOSV9ESVNQTEFZX0xFTkdUSDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuX3BhZ2VzSW5WaWV3ICE9PSB0aGlzLkRJU1BMQVlfTEVOR1RIKSB7XG4gICAgICAgICAgdGhpcy5zbWFsbFZlcnNpb24gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnBhZ2VzSW5WaWV3ID0gdGhpcy5ESVNQTEFZX0xFTkdUSDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZXMgdG8gYSBnaXZlbiBwYWdlLlxuICAgKiB1cGRhdGVzIHRoZSBkaXNwbGF5aW5nIHBhZ2UgbnVtYmVycyBhbmQgdGhlIGN1cnJlbnQgbnVtYmVyLlxuICAgKiBAcGFyYW0gcGFnZU51bWJlciAtIFRoZSBwYWdlIG51bWJlciB0byBuYXZpZ2F0ZSB0b1xuICAgKi9cbiAgbmF2aWdhdGVQYWdlKHBhZ2VOdW1iZXI6IG51bWJlcikge1xuICAgIGlmIChwYWdlTnVtYmVyID49IDAgJiYgcGFnZU51bWJlciA8PSB0aGlzLnRvdGFsUGFnZXMgLSAxKSB7XG4gICAgICB0aGlzLnNob3VsZFNob3dMb2FkZXIocGFnZU51bWJlcikgJiYgdGhpcy5ncmlkU2VydmljZS5zZXRMb2FkaW5nKHRydWUpO1xuICAgICAgdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25Hb1RvUGFnZShwYWdlTnVtYmVyKTtcbiAgICAgIC8vIEFkZCAxIGJlY2F1c2UgYWctZ3JpZCBBUEkgd29ya3Mgd2l0aCBmaXJzdCBpbmRleCAwXG4gICAgICBjb25zdCBkaXNwbGF5TnVtYmVyID0gcGFnZU51bWJlciArIDE7XG4gICAgICB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5jdXJyZW50UGFnZSA9IGRpc3BsYXlOdW1iZXI7XG5cbiAgICAgIGlmICh0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5wYWdlcy5sZW5ndGggPT09IDAgfHwgIXRoaXMucGFnZXNGaXRWaWV3KSB7XG4gICAgICAgIHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LnBhZ2VzID0gdGhpcy5nZXRQYWdlcyhkaXNwbGF5TnVtYmVyKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHRoZSBkaXNwbGF5aW5nIHJvd3MgcmFuZ2VcbiAgICAgIHRoaXMuc2V0Um93c0Rpc3BsYXlSYW5nZShkaXNwbGF5TnVtYmVyKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBuYXZpZ2F0ZUZpcnN0UGFnZSgpIHtcbiAgICB0aGlzLm5hdmlnYXRlUGFnZSgwKTtcbiAgfVxuXG4gIG5hdmlnYXRlTmV4dFBhZ2UoKSB7XG4gICAgdGhpcy5uYXZpZ2F0ZVBhZ2UodGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuY3VycmVudFBhZ2UpO1xuICB9XG5cbiAgbmF2aWdhdGVQcmV2UGFnZSgpIHtcbiAgICAvKiogYWctZ3JpZCBBUEkgd29ya3Mgd2l0aCBmaXJzdCBpbmRleCAwIHNvIHdlIG5lZWQgdG8gcmVkdWNlIDIgaW5zdGVhZCBvZiBvbmUgKi9cbiAgICBjb25zdCBwcmV2aW91c1BhZ2VJbmRleCA9IHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LmN1cnJlbnRQYWdlIC0gMjtcbiAgICB0aGlzLm5hdmlnYXRlUGFnZShwcmV2aW91c1BhZ2VJbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogdXBkYXRlcyB0aGUgZGlzcGxheWluZyBwYWdlIG51bWJlcnMgdG8gc2hvdyB0aGUgbmV4dCBudW1iZXJzIHNldFxuICAgKi9cbiAgc2hvd05leHRCYXRjaCgpIHtcbiAgICBjb25zdCBhbmNob3IgPSB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5wYWdlc1swXSArIHRoaXMuX3BhZ2VzSW5WaWV3ICsgdGhpcy5wYWdlc09uU2lkZXM7XG4gICAgdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkucGFnZXMgPSB0aGlzLmdldFBhZ2VzKGFuY2hvcik7XG4gIH1cblxuICAvKipcbiAgICogdXBkYXRlcyB0aGUgZGlzcGxheWluZyBwYWdlIG51bWJlcnMgdG8gc2hvdyB0aGUgcHJldmlvdXMgbnVtYmVycyBzZXRcbiAgICovXG4gIHNob3dQcmV2aW91c0JhdGNoKCkge1xuICAgIGNvbnN0IGFuY2hvciA9IHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LnBhZ2VzWzBdIC0gdGhpcy5fcGFnZXNJblZpZXcgKyB0aGlzLnBhZ2VzT25TaWRlcztcbiAgICB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5wYWdlcyA9IHRoaXMuZ2V0UGFnZXMoYW5jaG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdHJhY2tCeSBmdW5jdGlvbiBmb3IgdGhlIG5nRm9yXG4gICAqIEBwYXJhbSBpbmRleCAtIGN1cnJlbnQgaXRlbSBpbmRleFxuICAgKiBAcGFyYW0gcGFnZSAtIHRoZSBjdXJyZW50IGl0ZW0ncyBwYWdlIG51bWJlclxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICB0cmFja0J5UGFnZShpbmRleDogbnVtYmVyLCBwYWdlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gcGFnZTtcbiAgfVxuXG4gIHRvZ2dsZUdyb3Vwc1N0YXRlKCkge1xuICAgIHRoaXMuaXNFeHBhbmRlZCA/IHRoaXMuZ3JpZEFwaS5jb2xsYXBzZUFsbCgpIDogdGhpcy5ncmlkQXBpLmV4cGFuZEFsbCgpO1xuICAgIHRoaXMuaXNFeHBhbmRlZCA9ICF0aGlzLmlzRXhwYW5kZWQ7XG4gIH1cblxuICBhdXRvRml0R3JpZCh0eXBlOiAnY29udGFpbmVyJyB8ICdjb250ZW50Jykge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuZml0R3JpZCh0eXBlKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge31cblxuICAvKipcbiAgICogU2V0cyB0aGUgcm93cyBkaXNwbGF5IHN0cmluZ1xuICAgKiBAcGFyYW0gZGlzcGxheU51bWJlciAtIFRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyIChzdGFydGluZyBpbmRleCAxKVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzZXRSb3dzRGlzcGxheVJhbmdlKGRpc3BsYXlOdW1iZXIpOiB2b2lkIHtcbiAgICAvKiogRGVjcmVhc2UgYnkgMSBiZWNhdXNlIGFnLWdyaWQgQVBJIHdvcmtzIHdpdGggZmlyc3QgaW5kZXggMCAqL1xuICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSBkaXNwbGF5TnVtYmVyIC0gMTtcbiAgICBjb25zdCBmaXJzdFJvd0luZGV4ID0gMSArIHBhZ2VOdW1iZXIgKiB0aGlzLnJvd3NQZXJQYWdlO1xuICAgIGNvbnN0IGxhc3RSb3cgPSAocGFnZU51bWJlciArIDEpICogdGhpcy5yb3dzUGVyUGFnZTtcbiAgICBjb25zdCBsYXN0Um93SW5kZXggPSB0aGlzLnJvd0NvdW50ID4gbGFzdFJvdyA/IGxhc3RSb3cgOiB0aGlzLnJvd0NvdW50O1xuICAgIHRoaXMucm93c1JhbmdlID1cbiAgICAgIHRoaXMucm93Q291bnQgPiAwXG4gICAgICAgID8gdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKCdjb3JlLml0ZW1zUmFuZ2UnLCB7XG4gICAgICAgICAgICByYW5nZTogYCR7dGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0oZmlyc3RSb3dJbmRleCl9IC0gJHt0aGlzLmRlY2ltYWxQaXBlLnRyYW5zZm9ybShsYXN0Um93SW5kZXgpfWAsXG4gICAgICAgICAgICBudW1iZXI6IHRoaXMuZGVjaW1hbFBpcGUudHJhbnNmb3JtKHRoaXMucm93Q291bnQpXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB0aGlzLnRyYW5zbGF0ZS50cmFuc2Zvcm0oJ2NvcmUubnVtYmVyT2ZJdGVtcycsIHsgbnVtYmVyOiAwIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYSBudW1iZXIgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlIGRpc3BsYXlpbmcgbnVtYmVycy5cbiAgICogQHBhcmFtIGFuY2hvciAtIFRoZSBudW1iZXIgdG8gdXNlIGFzIGFuIGFuY2hvciBmb3IgdGhlIGNhbGN1bGF0aW9ucy5cbiAgICogQHJldHVybiB7bnVtYmVyW119IC0gQW4gYXJyYXkgb2YgdGhlIG5ldyBudW1iZXJzIHRvIGRpc3BsYXlcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgZ2V0UGFnZXMoYW5jaG9yOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgY29uc3QgcGFnZXNUb0Rpc3BsYXkgPSBbXTtcbiAgICAvLyBpbmRpY2F0ZXMgcmF0aGVyIHRoZSB0YWJsZSBoYXMgbW9yZSBwYWdlcyB0aGFuIHRoZSBkaXNwbGF5IGxlbmd0aCwgd2UgYWRkIDEgYmVjYXVzZSBvZlxuICAgIC8vIGEgbG9naWMgdGhhdCBzYXlzIHRoYXQgaWYgeW91ciBjdXJyZW50IHZpZXcgaXMgMSBudW1iZXIgYXdheSBmcm9tIHRoZSBsYXN0IHBhZ2VcbiAgICAvLyBkaXNwbGF5IGhpbSBhcyB3ZWxsLlxuICAgIHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LnNob3dMYXN0UGFnZSA9ICF0aGlzLnBhZ2VzRml0VmlldyAmJiBhbmNob3IgKyB0aGlzLnBhZ2VzT25TaWRlcyA8IHRoaXMudG90YWxQYWdlcztcbiAgICB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5zaG93Rmlyc3RFbGxpcHNpcyA9ICF0aGlzLnBhZ2VzRml0VmlldyAmJiBhbmNob3IgLSB0aGlzLnBhZ2VzT25TaWRlcyA+IDE7XG5cbiAgICAvLyBzZXQgdGhlIGZpcnN0IG51bWJlciB0byBiZSBkaXNwbGF5ZWRcbiAgICBjb25zdCBmaXJzdE51bWJlciA9IHRoaXMuZ2V0Rmlyc3RQYWdlTnVtYmVyKGFuY2hvcik7XG4gICAgY29uc3QgbG9vcExlbmd0aCA9IHRoaXMucGFnZXNGaXRWaWV3ID8gdGhpcy50b3RhbFBhZ2VzIDogdGhpcy5fcGFnZXNJblZpZXc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb29wTGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhZ2VzVG9EaXNwbGF5LnB1c2goZmlyc3ROdW1iZXIgKyBpKTtcbiAgICB9XG4gICAgLy8gSWYgdGhlIGxhc3QgZGlzcGxheWVkIG51bWJlciBpcyAxIG51bWJlciBiZWZvcmUgdGhlIGxhc3QgcGFnZSBkaXNwbGF5IGhpbSBhcyB3ZWxsXG4gICAgaWYgKCF0aGlzLnNtYWxsVmVyc2lvbiAmJiBwYWdlc1RvRGlzcGxheVtsb29wTGVuZ3RoIC0gMV0gKyAxID09PSB0aGlzLnRvdGFsUGFnZXMpIHtcbiAgICAgIHBhZ2VzVG9EaXNwbGF5LnB1c2godGhpcy50b3RhbFBhZ2VzKTtcbiAgICAgIHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LnNob3dMYXN0UGFnZSA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gcGFnZXNUb0Rpc3BsYXk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZmlyc3QgbnVtYmVyIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcGFnaW5hdGlvbiBuYXZpZ2F0aW9uIHZpZXdcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuY2hvciAtIFRoZSBhbmNob3IgZm9yIHRoZSBjYWxjdWxhdGlvbnNcbiAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBmaXJzdCBudW1iZXIgdG8gYmUgZGlzcGxheWVkXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGdldEZpcnN0UGFnZU51bWJlcihhbmNob3I6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IGZpcnN0TnVtYmVyID0gYW5jaG9yIC0gdGhpcy5wYWdlc09uU2lkZXM7XG4gICAgLy8gSWYgaW4gc21hbGwgdmVyc2lvbiBzaG93IG9ubHkgbmV4dCBwYWdlIHNvIHNldCBmaXJzdCBwYWdlIHRvIGFuY2hvclxuICAgIGlmICh0aGlzLnNtYWxsVmVyc2lvbiAmJiBhbmNob3IgPiAxKSB7XG4gICAgICBpZiAoYW5jaG9yICE9PSB0aGlzLnRvdGFsUGFnZXMpIHtcbiAgICAgICAgZmlyc3ROdW1iZXIgPSBhbmNob3I7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuc2hvd0ZpcnN0RWxsaXBzaXMpIHtcbiAgICAgIGZpcnN0TnVtYmVyID0gMTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5zaG93TGFzdFBhZ2UpIHtcbiAgICAgIGZpcnN0TnVtYmVyID0gdGhpcy50b3RhbFBhZ2VzIC0gKHRoaXMuX3BhZ2VzSW5WaWV3IC0gMSk7XG4gICAgfVxuICAgIHJldHVybiBmaXJzdE51bWJlcjtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkU2hvd0xvYWRlcihwYWdlTnVtYmVyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1NlcnZlclNpZGVQYWdpbmF0aW9uICYmIGlzTmlsKHRoaXMuZ3JpZEFwaS5nZXRDYWNoZUJsb2NrU3RhdGUoKVtwYWdlTnVtYmVyXSk7XG4gIH1cbn1cbiJdfQ==
@@ -5,8 +5,9 @@ import { GridStore } from './grid.store';
5
5
  import { Events } from 'ag-grid-community';
6
6
  import { BehaviorSubject, fromEvent, merge, Subject } from 'rxjs';
7
7
  import { filter, map, switchMap } from 'rxjs/operators';
8
- import { getColumnsSizes } from './util';
8
+ import { getColField, getColumnsSizes } from './util';
9
9
  import { size } from '../../utils/collection';
10
+ import { uniq } from '../../utils/array';
10
11
  let GridQuery = class GridQuery extends Query {
11
12
  constructor(store) {
12
13
  super(store);
@@ -52,7 +53,7 @@ let GridQuery = class GridQuery extends Query {
52
53
  }
53
54
  getCurrentGridSettings() {
54
55
  const toColId = column => column.getColId();
55
- const { columns, grid } = this.api;
56
+ const { columns } = this.api;
56
57
  const groupedColumns = columns.getRowGroupColumns();
57
58
  const columnsOrder = columns.getAllColumns();
58
59
  const allGridColumns = columns.getAllGridColumns();
@@ -62,7 +63,7 @@ let GridQuery = class GridQuery extends Query {
62
63
  const storeSettings = this.getValue().settings;
63
64
  const settings = {
64
65
  gridAlignment: storeSettings.gridAlignment,
65
- sort: grid.getSortModel().pop(),
66
+ sort: this.getSort(),
66
67
  hiddenColumns,
67
68
  groupedColumns: groupedColumns.map(toColId),
68
69
  filter: this.getFilter(),
@@ -76,6 +77,29 @@ let GridQuery = class GridQuery extends Query {
76
77
  }
77
78
  return settings;
78
79
  }
80
+ getSort() {
81
+ if (this.gridRef.gridOptions.pivotMode) {
82
+ const { sort, colId } = this.api.grid.getSortModel().pop() || {};
83
+ const column = this.api.columns.getColumn(colId);
84
+ const secondaryColumns = this.api.columns.getSecondaryColumns();
85
+ const pivotedColumn = secondaryColumns && secondaryColumns.find(col => col.getColId() === colId);
86
+ if (pivotedColumn) {
87
+ const uniquePivotParents = uniq(secondaryColumns.map(column => column.getParent()));
88
+ const secondaryColumn = secondaryColumns.find(col => col.getColId() === pivotedColumn.getColId());
89
+ const pivotColIndex = uniquePivotParents.indexOf(secondaryColumn.getParent());
90
+ return { colId: getColField(pivotedColumn.getColDef()), sort, pivotColIndex };
91
+ }
92
+ else if (column) {
93
+ return { colId: getColField(column.getColDef()), sort };
94
+ }
95
+ }
96
+ else {
97
+ return this.api.grid.getSortModel().pop();
98
+ }
99
+ }
100
+ selectSort() {
101
+ return this.select(state => state.settings.sort);
102
+ }
79
103
  /* @internal */
80
104
  _setApi(api, gridRef) {
81
105
  this.api = api;
@@ -92,6 +116,9 @@ let GridQuery = class GridQuery extends Query {
92
116
  getFilter() {
93
117
  return this.getValue().settings.filter;
94
118
  }
119
+ selectFilter() {
120
+ return this.select(state => state.settings.filter);
121
+ }
95
122
  getSearchTerm() {
96
123
  return this.getValue().settings.searchTerm;
97
124
  }
@@ -146,6 +173,9 @@ let GridQuery = class GridQuery extends Query {
146
173
  getAllDisplayedColumns() {
147
174
  return this.filterCheckboxSelectionColumn(this.api.columns.getAllDisplayedColumns());
148
175
  }
176
+ getAllPivotColumns() {
177
+ return this.getAllColumns().filter(column => column.isPivotActive());
178
+ }
149
179
  selectIsSelectAllRowsEnabled() {
150
180
  return this.select(state => state.serverSidePagination.selectAllRowsEnabled);
151
181
  }
@@ -161,4 +191,4 @@ GridQuery = __decorate([
161
191
  __metadata("design:paramtypes", [GridStore])
162
192
  ], GridQuery);
163
193
  export { GridQuery };
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5xdWVyeS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC1zdG9yZS9ncmlkLnF1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV6QyxPQUFPLEVBQVUsTUFBTSxFQUFXLE1BQU0sbUJBQW1CLENBQUM7QUFHNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUc5QyxJQUFhLFNBQVMsR0FBdEIsTUFBYSxTQUFVLFNBQVEsS0FBcUI7SUE2Q2xELFlBQXNCLEtBQWdCO1FBQ3BDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQURPLFVBQUssR0FBTCxLQUFLLENBQVc7UUExQ3RDLFdBQVc7UUFDWCxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsZUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekUsV0FBVztRQUNYLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUE0QixDQUFDO1FBQzVELHNCQUFpQixHQUFHLElBQUks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QkFBc0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCw0QkFBNEI7UUFDMUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVPLDZCQUE2QixDQUFDLE9BQWlCO1FBQ3JELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FDbkIsQ0FBQyxNQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxpQkFBaUIsQ0FDekcsQ0FBQztJQUNKLENBQUM7Q0FDRixDQUFBOztZQTFKOEIsU0FBUzs7QUE3QzNCLFNBQVM7SUFEckIsVUFBVSxFQUFFO3FDQThDa0IsU0FBUztHQTdDM0IsU0FBUyxDQXVNckI7U0F2TVksU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNFbXB0eSwgUXVlcnkgfSBmcm9tICdAZGF0b3JhbWEvYWtpdGEnO1xuaW1wb3J0IHsgR3JpZFN0b3JlIH0gZnJvbSAnLi9ncmlkLnN0b3JlJztcbmltcG9ydCB7IERhdG9HcmlkU2V0dGluZ3MsIEdyaWRTdG9yZVN0YXRlLCBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmZpZyB9IGZyb20gJy4vZ3JpZC5zdG9yZS50eXBlcyc7XG5pbXBvcnQgeyBDb2x1bW4sIEV2ZW50cywgUm93Tm9kZSB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcbmltcG9ydCB7IERhdG9HcmlkQXBpIH0gZnJvbSAnLi4vZ3JpZC1jb250cm9sbGVyL2dyaWQtY29udHJvbGxlci50eXBlcyc7XG5pbXBvcnQgeyBBZ0dyaWROZzIgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnQsIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRGF0b0dyaWRBbGlnbm1lbnQsXG4gIERhdG9HcmlkRGF0YUNoYW5nZWRFdmVudCxcbiAgRGF0b0dyaWRPcHRpb25zLFxuICBEYXRvR3JpZFNvcnQsXG4gIEdyaWRSb3dzU2VsZWN0aW9uRGF0YVxufSBmcm9tICcuLi9ncmlkL2dyaWQtdjIudHlwZXMnO1xuaW1wb3J0IHsgRGF0b0dyaWRGaWx0ZXJzTWFwIH0gZnJvbSAnLi4vZ3JpZC1maWx0ZXIvZ3JpZC1maWx0ZXIudHlwZXMnO1xuaW1wb3J0IHsgZ2V0Q29sdW1uc1NpemVzIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IEhhc2hNYXAgfSBmcm9tICcuLi8uLi91dGlscy90eXBlcyc7XG5pbXBvcnQgeyBzaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29sbGVjdGlvbic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBHcmlkUXVlcnkgZXh0ZW5kcyBRdWVyeTxHcmlkU3RvcmVTdGF0ZT4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBhcGk6IERhdG9HcmlkQXBpO1xuICBncmlkUmVmOiBBZ0dyaWROZzI7XG4gIC8vQGludGVybmFsXG4gIF9ncmlkUmVhZHkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgZ3JpZFJlYWR5JCA9IHRoaXMuX2dyaWRSZWFkeS5hc09ic2VydmFibGUoKS5waXBlKGZpbHRlcihyZWFkeSA9PiByZWFkeSkpO1xuICAvL0BpbnRlcm5hbFxuICBfc2VydmVyRGF0YUxvYWRlZCA9IG5ldyBTdWJqZWN0PERhdG9HcmlkRGF0YUNoYW5nZWRFdmVudD4oKTtcbiAgc2VydmVyRGF0YUxvYWRlZCQgPSB0aGlzLl9zZXJ2ZXJEYXRhTG9hZGVkLmFzT2JzZXJ2YWJsZSgpO1xuICByb3dEYXRhQ2hhbmdlZCQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMud2FpdEZvckdyaWQoKCkgPT5cbiAgICBtZXJnZSh0aGlzLmdyaWRSZWYucm93RGF0YUNoYW5nZWQsIHRoaXMuZ3JpZFJlZi5yb3dEYXRhVXBkYXRlZCwgdGhpcy5ncmlkUmVmLmZpbHRlckNoYW5nZWQsIHRoaXMuc2VydmVyRGF0YUxvYWRlZCQpXG4gICk7XG4gIHNlbGVjdGVkUm93c0NoYW5nZSQgPSB0aGlzLndhaXRGb3JHcmlkKCgpID0+XG4gICAgZnJvbUV2ZW50KHRoaXMuYXBpLmdyaWQsIEV2ZW50cy5FVkVOVF9TRUxFQ1RJT05fQ0hBTkdFRCkucGlwZShtYXAoKHsgYXBpIH0pID0+IGFwaS5nZXRTZWxlY3RlZFJvd3MoKSkpXG4gICk7XG5cbiAgcm93c1NlbGVjdGlvbkRhdGEkOiBPYnNlcnZhYmxlPEdyaWRSb3dzU2VsZWN0aW9uRGF0YT4gPSB0aGlzLndhaXRGb3JHcmlkKCgpID0+IHtcbiAgICByZXR1cm4gbWVyZ2UoXG4gICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZSQsXG4gICAgICB0aGlzLnJvd0RhdGFDaGFuZ2VkJCxcbiAgICAgIHRoaXMuc2VsZWN0U2VydmVyUGFnaW5hdGlvbkNvbmZpZygpLFxuICAgICAgdGhpcy53YWl0Rm9yR3JpZCgoKSA9PiBtZXJnZSh0aGlzLmdyaWRSZWYuc29ydENoYW5nZWQsIHRoaXMuZ3JpZFJlZi5wYWdpbmF0aW9uQ2hhbmdlZCkpXG4gICAgKS5waXBlKFxuICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgY29uc3QgdG90YWxSb3dzQ291bnQgPSB0aGlzLmlzU2VydmVyU2lkZVxuICAgICAgICAgID8gdGhpcy5zZXJ2ZXJTaWRlQ29uZmlnLnRvdGFsUm93c1xuICAgICAgICAgIDogdGhpcy5hcGkuZ3JpZC5nZXREaXNwbGF5ZWRSb3dDb3VudCgpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3NDb3VudCA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzQ291bnQoKTtcblxuICAgICAgICBjb25zdCBjdXJyZW50UGFnZVJvd3MgPSB0aGlzLmdldEN1cnJlbnRQYWdlUm93cygpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFBhZ2VSb3dzQ291bnQgPSBzaXplKGN1cnJlbnRQYWdlUm93cy5maWx0ZXIoKG5vZGU6IFJvd05vZGUpID0+IG5vZGUuaXNTZWxlY3RlZCgpKSk7XG4gICAgICAgIGNvbnN0IGlzQWxsUGFnZVJvd3NTZWxlY3RlZCA9XG4gICAgICAgICAgKHNlbGVjdGVkUGFnZVJvd3NDb3VudCA+IDAgJiYgc2VsZWN0ZWRQYWdlUm93c0NvdW50ID09PSBzaXplKGN1cnJlbnRQYWdlUm93cykpIHx8XG4gICAgICAgICAgKHRoaXMuaXNTZXJ2ZXJTZWxlY3RBbGxSb3dzRW5hYmxlZCAmJiBpc0VtcHR5KHRoaXMuc2VydmVyU2lkZUNvbmZpZy5leGNsdWRlZEZyb21TZWxlY3RBbGwpKTtcblxuICAgICAgICByZXR1cm4geyB0b3RhbFJvd3NDb3VudCwgc2VsZWN0ZWRSb3dzQ291bnQsIHNlbGVjdGVkUGFnZVJvd3NDb3VudCwgaXNBbGxQYWdlUm93c1NlbGVjdGVkIH07XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIGZpbHRlckFjdGl2ZSQgPSB0aGlzLnNlbGVjdChzdGF0ZSA9PiBzdGF0ZS5zZXR0aW5ncykucGlwZShcbiAgICBtYXAoKHsgZmlsdGVyLCBzZWFyY2hUZXJtIH06IERhdG9HcmlkU2V0dGluZ3MpID0+IHNpemUoZmlsdGVyKSA+IDAgfHwgISFzZWFyY2hUZXJtKVxuICApO1xuICBzZXJ2ZXJTaWRlRXJyb3IkID0gdGhpcy5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUuc2VydmVyU2lkZVBhZ2luYXRpb24uaGFzRXJyb3IpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBzdG9yZTogR3JpZFN0b3JlKSB7XG4gICAgc3VwZXIoc3RvcmUpO1xuICB9XG5cbiAgZ2V0IHNlcnZlclNpZGVDb25maWcoKTogU2VydmVyU2lkZVBhZ2luYXRpb25Db25maWcge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKCkuc2VydmVyU2lkZVBhZ2luYXRpb247XG4gIH1cblxuICBnZXQgaXNTZXJ2ZXJTaWRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlcnZlclNpZGVDb25maWcuZW5hYmxlZDtcbiAgfVxuXG4gIGdldCBpc1NlcnZlclNlbGVjdEFsbFJvd3NFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlcnZlclNpZGVDb25maWcuc2VsZWN0QWxsUm93c0VuYWJsZWQ7XG4gIH1cblxuICBnZXQgZ3JpZEFsaWdubWVudCgpOiBEYXRvR3JpZEFsaWdubWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKS5zZXR0aW5ncy5ncmlkQWxpZ25tZW50O1xuICB9XG5cbiAgZ2V0Q29sdW1uU2l6ZXMoKTogSGFzaE1hcDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSgpLnNldHRpbmdzLmNvbHVtbnNTaXplcztcbiAgfVxuXG4gIGdldEN1cnJlbnRHcmlkU2V0dGluZ3MoKTogRGF0b0dyaWRTZXR0aW5ncyB7XG4gICAgY29uc3QgdG9Db2xJZCA9IGNvbHVtbiA9PiBjb2x1bW4uZ2V0Q29sSWQoKTtcbiAgICBjb25zdCB7IGNvbHVtbnMsIGdyaWQgfSA9IHRoaXMuYXBpO1xuICAgIGNvbnN0IGdyb3VwZWRDb2x1bW5zID0gY29sdW1ucy5nZXRSb3dHcm91cENvbHVtbnMoKTtcbiAgICBjb25zdCBjb2x1bW5zT3JkZXIgPSBjb2x1bW5zLmdldEFsbENvbHVtbnMoKTtcbiAgICBjb25zdCBhbGxHcmlkQ29sdW1ucyA9IGNvbHVtbnMuZ2V0QWxsR3JpZENvbHVtbnMoKTtcbiAgICBjb25zdCBoaWRkZW5Db2x1bW5zID0gY29sdW1uc09yZGVyXG4gICAgICAuZmlsdGVyKGNvbHVtbiA9PiAhY29sdW1uLmlzVmlzaWJsZSgpICYmICFncm91cGVkQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pKVxuICAgICAgLm1hcCh0b0NvbElkKTtcbiAgICBjb25zdCBzdG9yZVNldHRpbmdzID0gdGhpcy5nZXRWYWx1ZSgpLnNldHRpbmdzO1xuICAgIGNvbnN0IHNldHRpbmdzOiBEYXRvR3JpZFNldHRpbmdzID0ge1xuICAgICAgZ3JpZEFsaWdubWVudDogc3RvcmVTZXR0aW5ncy5ncmlkQWxpZ25tZW50LFxuICAgICAgc29ydDogZ3JpZC5nZXRTb3J0TW9kZWwoKS5wb3AoKSBhcyBEYXRvR3JpZFNvcnQsXG4gICAgICBoaWRkZW5Db2x1bW5zLFxuICAgICAgZ3JvdXBlZENvbHVtbnM6IGdyb3VwZWRDb2x1bW5zLm1hcCh0b0NvbElkKSxcbiAgICAgIGZpbHRlcjogdGhpcy5nZXRGaWx0ZXIoKSxcbiAgICAgIHBpbm5lZENvbHVtbnM6IGNvbHVtbnMuZ2V0RGlzcGxheWVkTGVmdENvbHVtbnMoKS5tYXAodG9Db2xJZCksXG4gICAgICBjb2x1bW5zT3JkZXI6IGFsbEdyaWRDb2x1bW5zLm1hcCh0b0NvbElkKSxcbiAgICAgIGNvbHVtbnNTaXplczogbnVsbCxcbiAgICAgIHNlYXJjaFRlcm06IG51bGxcbiAgICB9O1xuICAgIGlmIChzdG9yZVNldHRpbmdzLmdyaWRBbGlnbm1lbnQgPT09IERhdG9HcmlkQWxpZ25tZW50LkNVU1RPTSkge1xuICAgICAgc2V0dGluZ3MuY29sdW1uc1NpemVzID0gZ2V0Q29sdW1uc1NpemVzKGFsbEdyaWRDb2x1bW5zKTtcbiAgICB9XG4gICAgcmV0dXJuIHNldHRpbmdzO1xuICB9XG5cbiAgLyogQGludGVybmFsICovXG4gIF9zZXRBcGkoYXBpOiBEYXRvR3JpZEFwaSwgZ3JpZFJlZjogQWdHcmlkTmcyKSB7XG4gICAgdGhpcy5hcGkgPSBhcGk7XG4gICAgdGhpcy5ncmlkUmVmID0gZ3JpZFJlZjtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIGp1c3QgdGhlIHJvd3MgZGF0YSAqL1xuICBnZXRTZWxlY3RlZFJvd3M8VD4oKTogVFtdO1xuICBnZXRTZWxlY3RlZFJvd3M8VD4ob25seUZpcnN0Um93OiB0cnVlKTogVCB8IHVuZGVmaW5lZDtcbiAgZ2V0U2VsZWN0ZWRSb3dzPFQ+KG9ubHlGaXJzdFJvdzogZmFsc2UpOiBUW107XG4gIGdldFNlbGVjdGVkUm93czxUPihvbmx5Rmlyc3RSb3c/OiBib29sZWFuKTogVFtdIHwgVCB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuYXBpLmdyaWQuZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgcmV0dXJuIG9ubHlGaXJzdFJvdyA/IHJvd3NbMF0gOiByb3dzO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIGVudGlyZSByb3cgbm9kZSAqL1xuICBnZXRTZWxlY3RlZFJvd05vZGVzKCk6IFJvd05vZGVbXTtcbiAgZ2V0U2VsZWN0ZWRSb3dOb2Rlcyhvbmx5Rmlyc3RSb3c6IHRydWUpOiBSb3dOb2RlIHwgdW5kZWZpbmVkO1xuICBnZXRTZWxlY3RlZFJvd05vZGVzKG9ubHlGaXJzdFJvdzogZmFsc2UpOiBSb3dOb2RlW107XG4gIGdldFNlbGVjdGVkUm93Tm9kZXMob25seUZpcnN0Um93PzogYm9vbGVhbik6IFJvd05vZGVbXSB8IFJvd05vZGUge1xuICAgIGNvbnN0IHJvd3MgPSB0aGlzLmFwaS5ncmlkLmdldFNlbGVjdGVkTm9kZXMoKTtcbiAgICByZXR1cm4gb25seUZpcnN0Um93ID8gcm93c1swXSA6IHJvd3M7XG4gIH1cblxuICBnZXRGaWx0ZXIoKTogRGF0b0dyaWRGaWx0ZXJzTWFwIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSgpLnNldHRpbmdzLmZpbHRlcjtcbiAgfVxuXG4gIGdldFNlYXJjaFRlcm0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSgpLnNldHRpbmdzLnNlYXJjaFRlcm07XG4gIH1cblxuICBzZWxlY3RTZWFyY2hUZXJtKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KChzdGF0ZTogR3JpZFN0b3JlU3RhdGUpID0+IHN0YXRlLnNldHRpbmdzLnNlYXJjaFRlcm0pO1xuICB9XG5cbiAgd2FpdEZvckdyaWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgd2FpdEZvckdyaWQ8VCA9IGFueT4oc291cmNlOiAoKSA9PiBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPjtcbiAgd2FpdEZvckdyaWQ8VCA9IGFueT4oc291cmNlPzogKCkgPT4gT2JzZXJ2YWJsZTxUPik6IE9ic2VydmFibGU8VD4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gc291cmNlID8gdGhpcy5ncmlkUmVhZHkkLnBpcGUoc3dpdGNoTWFwKHNvdXJjZSkpIDogdGhpcy5ncmlkUmVhZHkkO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZ3JpZFJlYWR5LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fc2VydmVyRGF0YUxvYWRlZC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgZ2V0R3JpZE9wdGlvbnMoKTogRGF0b0dyaWRPcHRpb25zIHtcbiAgICByZXR1cm4gdGhpcy5ncmlkUmVmID8gKHRoaXMuZ3JpZFJlZi5ncmlkT3B0aW9ucyBhcyBEYXRvR3JpZE9wdGlvbnMpIDogbnVsbDtcbiAgfVxuXG4gIHNlbGVjdFNlcnZlclBhZ2luYXRpb25Db25maWcoKTogT2JzZXJ2YWJsZTxTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmZpZz4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdCgoc3RhdGU6IEdyaWRTdG9yZVN0YXRlKSA9PiBzdGF0ZS5zZXJ2ZXJTaWRlUGFnaW5hdGlvbik7XG4gIH1cblxuICBnZXRTZWxlY3RlZFJvd3NDb3VudCgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmlzU2VydmVyU2VsZWN0QWxsUm93c0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IHsgdG90YWxSb3dzLCBleGNsdWRlZEZyb21TZWxlY3RBbGwgfSA9IHRoaXMuc2VydmVyU2lkZUNvbmZpZztcbiAgICAgIHJldHVybiB0b3RhbFJvd3MgLSBzaXplKGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbCk7XG4gICAgfVxuICAgIHJldHVybiBzaXplKHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCkpO1xuICB9XG5cbiAgZ2V0Q3VycmVudFBhZ2VSb3dzKCk6IFJvd05vZGVbXSB7XG4gICAgY29uc3QgcGFnZVJvd3M6IFJvd05vZGVbXSA9IFtdO1xuICAgIGNvbnN0IHB1c2hQYWdlUm93ID0gKG5vZGU6IFJvd05vZGUpID0+IHtcbiAgICAgIHBhZ2VSb3dzLnB1c2gobm9kZSk7XG4gICAgfTtcbiAgICBjb25zdCBncmlkID0gdGhpcy5hcGkuZ3JpZDtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IGdyaWQucGFnaW5hdGlvbkdldFBhZ2VTaXplKCk7XG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSBncmlkLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpO1xuICAgIGNvbnN0IHRvdGFsUm93cyA9IGdyaWQucGFnaW5hdGlvbkdldFJvd0NvdW50KCk7XG4gICAgY29uc3QgZmlyc3RQYWdlSW5kZXggPSBjdXJyZW50UGFnZSAqIHBhZ2VTaXplO1xuICAgIGxldCBsYXN0UGFnZUluZGV4ID0gZmlyc3RQYWdlSW5kZXggKyBwYWdlU2l6ZTtcbiAgICBpZiAobGFzdFBhZ2VJbmRleCA+IHRvdGFsUm93cykge1xuICAgICAgbGFzdFBhZ2VJbmRleCA9IHRvdGFsUm93cztcbiAgICB9XG4gICAgY29uc3QgcGVyZm9ybUFjdGlvbiA9IChub2RlOiBSb3dOb2RlKSA9PiB7XG4gICAgICBpZiAobm9kZS5yb3dJbmRleCA8IGxhc3RQYWdlSW5kZXggJiYgbm9kZS5yb3dJbmRleCA+PSBmaXJzdFBhZ2VJbmRleCkge1xuICAgICAgICBwdXNoUGFnZVJvdyhub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuaXNTZXJ2ZXJTaWRlID8gZ3JpZC5mb3JFYWNoTm9kZShwZXJmb3JtQWN0aW9uKSA6IGdyaWQuZm9yRWFjaE5vZGVBZnRlckZpbHRlckFuZFNvcnQocGVyZm9ybUFjdGlvbik7XG4gICAgcmV0dXJuIHBhZ2VSb3dzO1xuICB9XG5cbiAgZ2V0QWxsQ29sdW1ucygpOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyQ2hlY2tib3hTZWxlY3Rpb25Db2x1bW4odGhpcy5hcGkuY29sdW1ucy5nZXRBbGxDb2x1bW5zKCkpO1xuICB9XG5cbiAgZ2V0QWxsRGlzcGxheWVkQ29sdW1ucygpOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyQ2hlY2tib3hTZWxlY3Rpb25Db2x1bW4odGhpcy5hcGkuY29sdW1ucy5nZXRBbGxEaXNwbGF5ZWRDb2x1bW5zKCkpO1xuICB9XG5cbiAgc2VsZWN0SXNTZWxlY3RBbGxSb3dzRW5hYmxlZCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUuc2VydmVyU2lkZVBhZ2luYXRpb24uc2VsZWN0QWxsUm93c0VuYWJsZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJDaGVja2JveFNlbGVjdGlvbkNvbHVtbihjb2x1bW5zOiBDb2x1bW5bXSk6IENvbHVtbltdIHtcbiAgICByZXR1cm4gY29sdW1ucy5maWx0ZXIoXG4gICAgICAoY29sdW1uOiBDb2x1bW4pID0+ICFjb2x1bW4uZ2V0VXNlclByb3ZpZGVkQ29sRGVmKCkgfHwgIWNvbHVtbi5nZXRVc2VyUHJvdmlkZWRDb2xEZWYoKS5jaGVja2JveFNlbGVjdGlvblxuICAgICk7XG4gIH1cbn1cbiJdfQ==
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5xdWVyeS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC1zdG9yZS9ncmlkLnF1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV6QyxPQUFPLEVBQVUsTUFBTSxFQUFXLE1BQU0sbUJBQW1CLENBQUM7QUFHNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUV0RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR3pDLElBQWEsU0FBUyxHQUF0QixNQUFhLFNBQVUsU0FBUSxLQUFxQjtJQTZDbEQsWUFBc0IsS0FBZ0I7UUFDcEMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRE8sVUFBSyxHQUFMLEtBQUssQ0FBVztRQTFDdEMsV0FBVztRQUNYLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxlQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6RSxXQUFXO1FBQ1gsc0JB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SixDQUFDO0NBQ0YsQ0FBQTs7WUE3TDhCLFNBQVM7O0FBN0MzQixTQUFTO0lBRHJCLFVBQVUsRUFBRTtxQ0E4Q2tCLFNBQVM7R0E3QzNCLFNBQVMsQ0EwT3JCO1NBMU9ZLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzRW1wdHksIFF1ZXJ5IH0gZnJvbSAnQGRhdG9yYW1hL2FraXRhJztcbmltcG9ydCB7IEdyaWRTdG9yZSB9IGZyb20gJy4vZ3JpZC5zdG9yZSc7XG5pbXBvcnQgeyBEYXRvR3JpZFNldHRpbmdzLCBHcmlkU3RvcmVTdGF0ZSwgU2VydmVyU2lkZVBhZ2luYXRpb25Db25maWcgfSBmcm9tICcuL2dyaWQuc3RvcmUudHlwZXMnO1xuaW1wb3J0IHsgQ29sdW1uLCBFdmVudHMsIFJvd05vZGUgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5pbXBvcnQgeyBEYXRvR3JpZEFwaSB9IGZyb20gJy4uL2dyaWQtY29udHJvbGxlci9ncmlkLWNvbnRyb2xsZXIudHlwZXMnO1xuaW1wb3J0IHsgQWdHcmlkTmcyIH0gZnJvbSAnYWctZ3JpZC1hbmd1bGFyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbUV2ZW50LCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIERhdG9HcmlkQWxpZ25tZW50LFxuICBEYXRvR3JpZERhdGFDaGFuZ2VkRXZlbnQsXG4gIERhdG9HcmlkT3B0aW9ucyxcbiAgRGF0b0dyaWRTb3J0LFxuICBHcmlkUm93c1NlbGVjdGlvbkRhdGFcbn0gZnJvbSAnLi4vZ3JpZC9ncmlkLXYyLnR5cGVzJztcbmltcG9ydCB7IERhdG9HcmlkRmlsdGVyc01hcCB9IGZyb20gJy4uL2dyaWQtZmlsdGVyL2dyaWQtZmlsdGVyLnR5cGVzJztcbmltcG9ydCB7IGdldENvbEZpZWxkLCBnZXRDb2x1bW5zU2l6ZXMgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgSGFzaE1hcCB9IGZyb20gJy4uLy4uL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IHNpemUgfSBmcm9tICcuLi8uLi91dGlscy9jb2xsZWN0aW9uJztcbmltcG9ydCB7IHVuaXEgfSBmcm9tICcuLi8uLi91dGlscy9hcnJheSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBHcmlkUXVlcnkgZXh0ZW5kcyBRdWVyeTxHcmlkU3RvcmVTdGF0ZT4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBhcGk6IERhdG9HcmlkQXBpO1xuICBncmlkUmVmOiBBZ0dyaWROZzI7XG4gIC8vQGludGVybmFsXG4gIF9ncmlkUmVhZHkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgZ3JpZFJlYWR5JCA9IHRoaXMuX2dyaWRSZWFkeS5hc09ic2VydmFibGUoKS5waXBlKGZpbHRlcihyZWFkeSA9PiByZWFkeSkpO1xuICAvL0BpbnRlcm5hbFxuICBfc2VydmVyRGF0YUxvYWRlZCA9IG5ldyBTdWJqZWN0PERhdG9HcmlkRGF0YUNoYW5nZWRFdmVudD4oKTtcbiAgc2VydmVyRGF0YUxvYWRlZCQgPSB0aGlzLl9zZXJ2ZXJEYXRhTG9hZGVkLmFzT2JzZXJ2YWJsZSgpO1xuICByb3dEYXRhQ2hhbmdlZCQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMud2FpdEZvckdyaWQoKCkgPT5cbiAgICBtZXJnZSh0aGlzLmdyaWRSZWYucm93RGF0YUNoYW5nZWQsIHRoaXMuZ3JpZFJlZi5yb3dEYXRhVXBkYXRlZCwgdGhpcy5ncmlkUmVmLmZpbHRlckNoYW5nZWQsIHRoaXMuc2VydmVyRGF0YUxvYWRlZCQpXG4gICk7XG4gIHNlbGVjdGVkUm93c0NoYW5nZSQgPSB0aGlzLndhaXRGb3JHcmlkKCgpID0+XG4gICAgZnJvbUV2ZW50KHRoaXMuYXBpLmdyaWQsIEV2ZW50cy5FVkVOVF9TRUxFQ1RJT05fQ0hBTkdFRCkucGlwZShtYXAoKHsgYXBpIH0pID0+IGFwaS5nZXRTZWxlY3RlZFJvd3MoKSkpXG4gICk7XG5cbiAgcm93c1NlbGVjdGlvbkRhdGEkOiBPYnNlcnZhYmxlPEdyaWRSb3dzU2VsZWN0aW9uRGF0YT4gPSB0aGlzLndhaXRGb3JHcmlkKCgpID0+IHtcbiAgICByZXR1cm4gbWVyZ2UoXG4gICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZSQsXG4gICAgICB0aGlzLnJvd0RhdGFDaGFuZ2VkJCxcbiAgICAgIHRoaXMuc2VsZWN0U2VydmVyUGFnaW5hdGlvbkNvbmZpZygpLFxuICAgICAgdGhpcy53YWl0Rm9yR3JpZCgoKSA9PiBtZXJnZSh0aGlzLmdyaWRSZWYuc29ydENoYW5nZWQsIHRoaXMuZ3JpZFJlZi5wYWdpbmF0aW9uQ2hhbmdlZCkpXG4gICAgKS5waXBlKFxuICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgY29uc3QgdG90YWxSb3dzQ291bnQgPSB0aGlzLmlzU2VydmVyU2lkZVxuICAgICAgICAgID8gdGhpcy5zZXJ2ZXJTaWRlQ29uZmlnLnRvdGFsUm93c1xuICAgICAgICAgIDogdGhpcy5hcGkuZ3JpZC5nZXREaXNwbGF5ZWRSb3dDb3VudCgpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3NDb3VudCA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzQ291bnQoKTtcblxuICAgICAgICBjb25zdCBjdXJyZW50UGFnZVJvd3MgPSB0aGlzLmdldEN1cnJlbnRQYWdlUm93cygpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFBhZ2VSb3dzQ291bnQgPSBzaXplKGN1cnJlbnRQYWdlUm93cy5maWx0ZXIoKG5vZGU6IFJvd05vZGUpID0+IG5vZGUuaXNTZWxlY3RlZCgpKSk7XG4gICAgICAgIGNvbnN0IGlzQWxsUGFnZVJvd3NTZWxlY3RlZCA9XG4gICAgICAgICAgKHNlbGVjdGVkUGFnZVJvd3NDb3VudCA+IDAgJiYgc2VsZWN0ZWRQYWdlUm93c0NvdW50ID09PSBzaXplKGN1cnJlbnRQYWdlUm93cykpIHx8XG4gICAgICAgICAgKHRoaXMuaXNTZXJ2ZXJTZWxlY3RBbGxSb3dzRW5hYmxlZCAmJiBpc0VtcHR5KHRoaXMuc2VydmVyU2lkZUNvbmZpZy5leGNsdWRlZEZyb21TZWxlY3RBbGwpKTtcblxuICAgICAgICByZXR1cm4geyB0b3RhbFJvd3NDb3VudCwgc2VsZWN0ZWRSb3dzQ291bnQsIHNlbGVjdGVkUGFnZVJvd3NDb3VudCwgaXNBbGxQYWdlUm93c1NlbGVjdGVkIH07XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIGZpbHRlckFjdGl2ZSQgPSB0aGlzLnNlbGVjdChzdGF0ZSA9PiBzdGF0ZS5zZXR0aW5ncykucGlwZShcbiAgICBtYXAoKHsgZmlsdGVyLCBzZWFyY2hUZXJtIH06IERhdG9HcmlkU2V0dGluZ3MpID0+IHNpemUoZmlsdGVyKSA+IDAgfHwgISFzZWFyY2hUZXJtKVxuICApO1xuICBzZXJ2ZXJTaWRlRXJyb3IkID0gdGhpcy5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUuc2VydmVyU2lkZVBhZ2luYXRpb24uaGFzRXJyb3IpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBzdG9yZTogR3JpZFN0b3JlKSB7XG4gICAgc3VwZXIoc3RvcmUpO1xuICB9XG5cbiAgZ2V0IHNlcnZlclNpZGVDb25maWcoKTogU2VydmVyU2lkZVBhZ2luYXRpb25Db25maWcge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKCkuc2VydmVyU2lkZVBhZ2luYXRpb247XG4gIH1cblxuICBnZXQgaXNTZXJ2ZXJTaWRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlcnZlclNpZGVDb25maWcuZW5hYmxlZDtcbiAgfVxuXG4gIGdldCBpc1NlcnZlclNlbGVjdEFsbFJvd3NFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlcnZlclNpZGVDb25maWcuc2VsZWN0QWxsUm93c0VuYWJsZWQ7XG4gIH1cblxuICBnZXQgZ3JpZEFsaWdubWVudCgpOiBEYXRvR3JpZEFsaWdubWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKS5zZXR0aW5ncy5ncmlkQWxpZ25tZW50O1xuICB9XG5cbiAgZ2V0Q29sdW1uU2l6ZXMoKTogSGFzaE1hcDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSgpLnNldHRpbmdzLmNvbHVtbnNTaXplcztcbiAgfVxuXG4gIGdldEN1cnJlbnRHcmlkU2V0dGluZ3MoKTogRGF0b0dyaWRTZXR0aW5ncyB7XG4gICAgY29uc3QgdG9Db2xJZCA9IGNvbHVtbiA9PiBjb2x1bW4uZ2V0Q29sSWQoKTtcbiAgICBjb25zdCB7IGNvbHVtbnMgfSA9IHRoaXMuYXBpO1xuICAgIGNvbnN0IGdyb3VwZWRDb2x1bW5zID0gY29sdW1ucy5nZXRSb3dHcm91cENvbHVtbnMoKTtcbiAgICBjb25zdCBjb2x1bW5zT3JkZXIgPSBjb2x1bW5zLmdldEFsbENvbHVtbnMoKTtcbiAgICBjb25zdCBhbGxHcmlkQ29sdW1ucyA9IGNvbHVtbnMuZ2V0QWxsR3JpZENvbHVtbnMoKTtcbiAgICBjb25zdCBoaWRkZW5Db2x1bW5zID0gY29sdW1uc09yZGVyXG4gICAgICAuZmlsdGVyKGNvbHVtbiA9PiAhY29sdW1uLmlzVmlzaWJsZSgpICYmICFncm91cGVkQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pKVxuICAgICAgLm1hcCh0b0NvbElkKTtcbiAgICBjb25zdCBzdG9yZVNldHRpbmdzID0gdGhpcy5nZXRWYWx1ZSgpLnNldHRpbmdzO1xuICAgIGNvbnN0IHNldHRpbmdzOiBEYXRvR3JpZFNldHRpbmdzID0ge1xuICAgICAgZ3JpZEFsaWdubWVudDogc3RvcmVTZXR0aW5ncy5ncmlkQWxpZ25tZW50LFxuICAgICAgc29ydDogdGhpcy5nZXRTb3J0KCksXG4gICAgICBoaWRkZW5Db2x1bW5zLFxuICAgICAgZ3JvdXBlZENvbHVtbnM6IGdyb3VwZWRDb2x1bW5zLm1hcCh0b0NvbElkKSxcbiAgICAgIGZpbHRlcjogdGhpcy5nZXRGaWx0ZXIoKSxcbiAgICAgIHBpbm5lZENvbHVtbnM6IGNvbHVtbnMuZ2V0RGlzcGxheWVkTGVmdENvbHVtbnMoKS5tYXAodG9Db2xJZCksXG4gICAgICBjb2x1bW5zT3JkZXI6IGFsbEdyaWRDb2x1bW5zLm1hcCh0b0NvbElkKSxcbiAgICAgIGNvbHVtbnNTaXplczogbnVsbCxcbiAgICAgIHNlYXJjaFRlcm06IG51bGxcbiAgICB9O1xuXG4gICAgaWYgKHN0b3JlU2V0dGluZ3MuZ3JpZEFsaWdubWVudCA9PT0gRGF0b0dyaWRBbGlnbm1lbnQuQ1VTVE9NKSB7XG4gICAgICBzZXR0aW5ncy5jb2x1bW5zU2l6ZXMgPSBnZXRDb2x1bW5zU2l6ZXMoYWxsR3JpZENvbHVtbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBzZXR0aW5ncztcbiAgfVxuXG4gIGdldFNvcnQoKTogRGF0b0dyaWRTb3J0IHtcbiAgICBpZiAodGhpcy5ncmlkUmVmLmdyaWRPcHRpb25zLnBpdm90TW9kZSkge1xuICAgICAgY29uc3QgeyBzb3J0LCBjb2xJZCB9ID0gKHRoaXMuYXBpLmdyaWQuZ2V0U29ydE1vZGVsKCkucG9wKCkgYXMgRGF0b0dyaWRTb3J0KSB8fCB7fTtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuYXBpLmNvbHVtbnMuZ2V0Q29sdW1uKGNvbElkKTtcbiAgICAgIGNvbnN0IHNlY29uZGFyeUNvbHVtbnMgPSB0aGlzLmFwaS5jb2x1bW5zLmdldFNlY29uZGFyeUNvbHVtbnMoKTtcbiAgICAgIGNvbnN0IHBpdm90ZWRDb2x1bW4gPSBzZWNvbmRhcnlDb2x1bW5zICYmIHNlY29uZGFyeUNvbHVtbnMuZmluZChjb2wgPT4gY29sLmdldENvbElkKCkgPT09IGNvbElkKTtcblxuICAgICAgaWYgKHBpdm90ZWRDb2x1bW4pIHtcbiAgICAgICAgY29uc3QgdW5pcXVlUGl2b3RQYXJlbnRzID0gdW5pcShzZWNvbmRhcnlDb2x1bW5zLm1hcChjb2x1bW4gPT4gY29sdW1uLmdldFBhcmVudCgpKSk7XG4gICAgICAgIGNvbnN0IHNlY29uZGFyeUNvbHVtbiA9IHNlY29uZGFyeUNvbHVtbnMuZmluZChjb2wgPT4gY29sLmdldENvbElkKCkgPT09IHBpdm90ZWRDb2x1bW4uZ2V0Q29sSWQoKSk7XG4gICAgICAgIGNvbnN0IHBpdm90Q29sSW5kZXggPSB1bmlxdWVQaXZvdFBhcmVudHMuaW5kZXhPZihzZWNvbmRhcnlDb2x1bW4uZ2V0UGFyZW50KCkpO1xuXG4gICAgICAgIHJldHVybiB7IGNvbElkOiBnZXRDb2xGaWVsZChwaXZvdGVkQ29sdW1uLmdldENvbERlZigpKSwgc29ydCwgcGl2b3RDb2xJbmRleCB9O1xuICAgICAgfSBlbHNlIGlmIChjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIHsgY29sSWQ6IGdldENvbEZpZWxkKGNvbHVtbi5nZXRDb2xEZWYoKSksIHNvcnQgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpLmdyaWQuZ2V0U29ydE1vZGVsKCkucG9wKCkgYXMgRGF0b0dyaWRTb3J0O1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdFNvcnQoKTogT2JzZXJ2YWJsZTxEYXRvR3JpZFNvcnQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUuc2V0dGluZ3Muc29ydCk7XG4gIH1cblxuICAvKiBAaW50ZXJuYWwgKi9cbiAgX3NldEFwaShhcGk6IERhdG9HcmlkQXBpLCBncmlkUmVmOiBBZ0dyaWROZzIpIHtcbiAgICB0aGlzLmFwaSA9IGFwaTtcbiAgICB0aGlzLmdyaWRSZWYgPSBncmlkUmVmO1xuICB9XG5cbiAgLyoqIFJldHVybnMganVzdCB0aGUgcm93cyBkYXRhICovXG4gIGdldFNlbGVjdGVkUm93czxUPigpOiBUW107XG4gIGdldFNlbGVjdGVkUm93czxUPihvbmx5Rmlyc3RSb3c6IHRydWUpOiBUIHwgdW5kZWZpbmVkO1xuICBnZXRTZWxlY3RlZFJvd3M8VD4ob25seUZpcnN0Um93OiBmYWxzZSk6IFRbXTtcbiAgZ2V0U2VsZWN0ZWRSb3dzPFQ+KG9ubHlGaXJzdFJvdz86IGJvb2xlYW4pOiBUW10gfCBUIHtcbiAgICBjb25zdCByb3dzID0gdGhpcy5hcGkuZ3JpZC5nZXRTZWxlY3RlZFJvd3MoKTtcbiAgICByZXR1cm4gb25seUZpcnN0Um93ID8gcm93c1swXSA6IHJvd3M7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgZW50aXJlIHJvdyBub2RlICovXG4gIGdldFNlbGVjdGVkUm93Tm9kZXMoKTogUm93Tm9kZVtdO1xuICBnZXRTZWxlY3RlZFJvd05vZGVzKG9ubHlGaXJzdFJvdzogdHJ1ZSk6IFJvd05vZGUgfCB1bmRlZmluZWQ7XG4gIGdldFNlbGVjdGVkUm93Tm9kZXMob25seUZpcnN0Um93OiBmYWxzZSk6IFJvd05vZGVbXTtcbiAgZ2V0U2VsZWN0ZWRSb3dOb2Rlcyhvbmx5Rmlyc3RSb3c/OiBib29sZWFuKTogUm93Tm9kZVtdIHwgUm93Tm9kZSB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuYXBpLmdyaWQuZ2V0U2VsZWN0ZWROb2RlcygpO1xuICAgIHJldHVybiBvbmx5Rmlyc3RSb3cgPyByb3dzWzBdIDogcm93cztcbiAgfVxuXG4gIGdldEZpbHRlcigpOiBEYXRvR3JpZEZpbHRlcnNNYXAge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKCkuc2V0dGluZ3MuZmlsdGVyO1xuICB9XG5cbiAgc2VsZWN0RmlsdGVyKCk6IE9ic2VydmFibGU8RGF0b0dyaWRGaWx0ZXJzTWFwPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KHN0YXRlID0+IHN0YXRlLnNldHRpbmdzLmZpbHRlcik7XG4gIH1cblxuICBnZXRTZWFyY2hUZXJtKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKS5zZXR0aW5ncy5zZWFyY2hUZXJtO1xuICB9XG5cbiAgc2VsZWN0U2VhcmNoVGVybSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdCgoc3RhdGU6IEdyaWRTdG9yZVN0YXRlKSA9PiBzdGF0ZS5zZXR0aW5ncy5zZWFyY2hUZXJtKTtcbiAgfVxuXG4gIHdhaXRGb3JHcmlkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHdhaXRGb3JHcmlkPFQgPSBhbnk+KHNvdXJjZTogKCkgPT4gT2JzZXJ2YWJsZTxUPik6IE9ic2VydmFibGU8VD47XG4gIHdhaXRGb3JHcmlkPFQgPSBhbnk+KHNvdXJjZT86ICgpID0+IE9ic2VydmFibGU8VD4pOiBPYnNlcnZhYmxlPFQ+IHwgT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHNvdXJjZSA/IHRoaXMuZ3JpZFJlYWR5JC5waXBlKHN3aXRjaE1hcChzb3VyY2UpKSA6IHRoaXMuZ3JpZFJlYWR5JDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2dyaWRSZWFkeS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3NlcnZlckRhdGFMb2FkZWQuY29tcGxldGUoKTtcbiAgfVxuXG4gIGdldEdyaWRPcHRpb25zKCk6IERhdG9HcmlkT3B0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZFJlZiA/ICh0aGlzLmdyaWRSZWYuZ3JpZE9wdGlvbnMgYXMgRGF0b0dyaWRPcHRpb25zKSA6IG51bGw7XG4gIH1cblxuICBzZWxlY3RTZXJ2ZXJQYWdpbmF0aW9uQ29uZmlnKCk6IE9ic2VydmFibGU8U2VydmVyU2lkZVBhZ2luYXRpb25Db25maWc+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3QoKHN0YXRlOiBHcmlkU3RvcmVTdGF0ZSkgPT4gc3RhdGUuc2VydmVyU2lkZVBhZ2luYXRpb24pO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRSb3dzQ291bnQoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5pc1NlcnZlclNlbGVjdEFsbFJvd3NFbmFibGVkKSB7XG4gICAgICBjb25zdCB7IHRvdGFsUm93cywgZXhjbHVkZWRGcm9tU2VsZWN0QWxsIH0gPSB0aGlzLnNlcnZlclNpZGVDb25maWc7XG4gICAgICByZXR1cm4gdG90YWxSb3dzIC0gc2l6ZShleGNsdWRlZEZyb21TZWxlY3RBbGwpO1xuICAgIH1cbiAgICByZXR1cm4gc2l6ZSh0aGlzLmdldFNlbGVjdGVkUm93cygpKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRQYWdlUm93cygpOiBSb3dOb2RlW10ge1xuICAgIGNvbnN0IHBhZ2VSb3dzOiBSb3dOb2RlW10gPSBbXTtcbiAgICBjb25zdCBwdXNoUGFnZVJvdyA9IChub2RlOiBSb3dOb2RlKSA9PiB7XG4gICAgICBwYWdlUm93cy5wdXNoKG5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgZ3JpZCA9IHRoaXMuYXBpLmdyaWQ7XG4gICAgY29uc3QgcGFnZVNpemUgPSBncmlkLnBhZ2luYXRpb25HZXRQYWdlU2l6ZSgpO1xuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gZ3JpZC5wYWdpbmF0aW9uR2V0Q3VycmVudFBhZ2UoKTtcbiAgICBjb25zdCB0b3RhbFJvd3MgPSBncmlkLnBhZ2luYXRpb25HZXRSb3dDb3VudCgpO1xuICAgIGNvbnN0IGZpcnN0UGFnZUluZGV4ID0gY3VycmVudFBhZ2UgKiBwYWdlU2l6ZTtcbiAgICBsZXQgbGFzdFBhZ2VJbmRleCA9IGZpcnN0UGFnZUluZGV4ICsgcGFnZVNpemU7XG4gICAgaWYgKGxhc3RQYWdlSW5kZXggPiB0b3RhbFJvd3MpIHtcbiAgICAgIGxhc3RQYWdlSW5kZXggPSB0b3RhbFJvd3M7XG4gICAgfVxuICAgIGNvbnN0IHBlcmZvcm1BY3Rpb24gPSAobm9kZTogUm93Tm9kZSkgPT4ge1xuICAgICAgaWYgKG5vZGUucm93SW5kZXggPCBsYXN0UGFnZUluZGV4ICYmIG5vZGUucm93SW5kZXggPj0gZmlyc3RQYWdlSW5kZXgpIHtcbiAgICAgICAgcHVzaFBhZ2VSb3cobm9kZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmlzU2VydmVyU2lkZSA/IGdyaWQuZm9yRWFjaE5vZGUocGVyZm9ybUFjdGlvbikgOiBncmlkLmZvckVhY2hOb2RlQWZ0ZXJGaWx0ZXJBbmRTb3J0KHBlcmZvcm1BY3Rpb24pO1xuICAgIHJldHVybiBwYWdlUm93cztcbiAgfVxuXG4gIGdldEFsbENvbHVtbnMoKTogQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckNoZWNrYm94U2VsZWN0aW9uQ29sdW1uKHRoaXMuYXBpLmNvbHVtbnMuZ2V0QWxsQ29sdW1ucygpKTtcbiAgfVxuXG4gIGdldEFsbERpc3BsYXllZENvbHVtbnMoKTogQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckNoZWNrYm94U2VsZWN0aW9uQ29sdW1uKHRoaXMuYXBpLmNvbHVtbnMuZ2V0QWxsRGlzcGxheWVkQ29sdW1ucygpKTtcbiAgfVxuXG4gIGdldEFsbFBpdm90Q29sdW1ucygpOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsQ29sdW1ucygpLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmlzUGl2b3RBY3RpdmUoKSk7XG4gIH1cblxuICBzZWxlY3RJc1NlbGVjdEFsbFJvd3NFbmFibGVkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdChzdGF0ZSA9PiBzdGF0ZS5zZXJ2ZXJTaWRlUGFnaW5hdGlvbi5zZWxlY3RBbGxSb3dzRW5hYmxlZCk7XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckNoZWNrYm94U2VsZWN0aW9uQ29sdW1uKGNvbHVtbnM6IENvbHVtbltdKTogQ29sdW1uW10ge1xuICAgIHJldHVybiBjb2x1bW5zLmZpbHRlcihcbiAgICAgIChjb2x1bW46IENvbHVtbikgPT4gIWNvbHVtbi5nZXRVc2VyUHJvdmlkZWRDb2xEZWYoKSB8fCAhY29sdW1uLmdldFVzZXJQcm92aWRlZENvbERlZigpLmNoZWNrYm94U2VsZWN0aW9uXG4gICAgKTtcbiAgfVxufVxuIl19