@firestitch/list 16.0.0 → 18.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/esm2022/app/classes/actions-controller.mjs +2 -2
  2. package/esm2022/app/classes/columns-controller.mjs +3 -3
  3. package/esm2022/app/classes/data-controller.mjs +2 -2
  4. package/esm2022/app/classes/external-params-controller.mjs +2 -2
  5. package/esm2022/app/classes/list-controller.mjs +8 -8
  6. package/esm2022/app/classes/pagination-controller.mjs +2 -2
  7. package/esm2022/app/classes/persistance-controller.mjs +5 -5
  8. package/esm2022/app/classes/reorder-controller.mjs +5 -5
  9. package/esm2022/app/classes/selection-controller.mjs +2 -2
  10. package/esm2022/app/classes/sorting-controller.mjs +2 -2
  11. package/esm2022/app/components/body/body.component.mjs +4 -4
  12. package/esm2022/app/components/body/row/actions/actions.component.mjs +5 -5
  13. package/esm2022/app/components/body/row/cell/cell.component.mjs +5 -5
  14. package/esm2022/app/components/body/row/inline-action/inline-action.component.mjs +4 -4
  15. package/esm2022/app/components/body/row/menu-action/menu-action.component.mjs +5 -5
  16. package/esm2022/app/components/body/row/row.component.mjs +6 -6
  17. package/esm2022/app/components/customize-cols/customize-cols.component.mjs +7 -7
  18. package/esm2022/app/components/footer/footer-row/footer-cell/footer-cell.component.mjs +5 -5
  19. package/esm2022/app/components/footer/footer-row/footer-row.component.mjs +5 -5
  20. package/esm2022/app/components/footer/footer.component.mjs +4 -4
  21. package/esm2022/app/components/head/head-cell/head-cell.component.mjs +5 -5
  22. package/esm2022/app/components/head/head.component.mjs +6 -6
  23. package/esm2022/app/components/list/list.component.mjs +10 -9
  24. package/esm2022/app/components/loader/loader.component.mjs +4 -4
  25. package/esm2022/app/components/manage-saved-filters/manage-saved-filters.component.mjs +5 -5
  26. package/esm2022/app/components/pagination/pagination.component.mjs +6 -6
  27. package/esm2022/app/components/saved-filters/saved-filters.component.mjs +5 -5
  28. package/esm2022/app/components/status/status.component.mjs +6 -6
  29. package/esm2022/app/directives/cell/cell.directive.mjs +4 -4
  30. package/esm2022/app/directives/column/column.directive.mjs +5 -5
  31. package/esm2022/app/directives/content/content.directive.mjs +4 -4
  32. package/esm2022/app/directives/content-init/content-init.directive.mjs +5 -5
  33. package/esm2022/app/directives/draggable-list/draggable-list.directive.mjs +7 -7
  34. package/esm2022/app/directives/draggable-row/draggable-row.directive.mjs +6 -6
  35. package/esm2022/app/directives/empty-state/empty-state.directive.mjs +4 -4
  36. package/esm2022/app/directives/footer/footer.directive.mjs +4 -4
  37. package/esm2022/app/directives/group-expand-trigger/group-expand-trigger.directive.mjs +5 -5
  38. package/esm2022/app/directives/group-footer/group-footer.directive.mjs +4 -4
  39. package/esm2022/app/directives/group-header/group-header.directive.mjs +4 -4
  40. package/esm2022/app/directives/header/header.directive.mjs +4 -4
  41. package/esm2022/app/directives/heading/heading.directive.mjs +4 -4
  42. package/esm2022/app/directives/heading-container/heading-container.directive.mjs +4 -4
  43. package/esm2022/app/directives/subheading/subheading.directive.mjs +4 -4
  44. package/esm2022/app/fs-list.module.mjs +5 -5
  45. package/esm2022/app/models/column-async-attribute.mjs +1 -1
  46. package/esm2022/app/models/column-attributes.mjs +1 -1
  47. package/esm2022/app/models/column.model.mjs +1 -1
  48. package/esm2022/app/models/row/child-row.mjs +1 -1
  49. package/esm2022/app/models/row/group-footer-row.mjs +1 -1
  50. package/esm2022/app/models/row/group-row.mjs +1 -1
  51. package/esm2022/app/models/row-action.model.mjs +1 -1
  52. package/esm2022/app/models/row.mjs +2 -2
  53. package/esm2022/app/models/styleConfig.model.mjs +1 -1
  54. package/esm2022/app/pipes/action-label.mjs +4 -4
  55. package/esm2022/app/services/group-expand-notifier.service.mjs +5 -5
  56. package/fesm2022/firestitch-list.mjs +167 -166
  57. package/fesm2022/firestitch-list.mjs.map +1 -1
  58. package/package.json +1 -1
@@ -95,7 +95,7 @@ export class List {
95
95
  this.subscribe();
96
96
  if (this.initialFetch) {
97
97
  this.dataController.setOperation(FsListState.Load);
98
- this._fetch$.next();
98
+ this._fetch$.next(null);
99
99
  }
100
100
  }
101
101
  get fetch$() {
@@ -159,7 +159,7 @@ export class List {
159
159
  reload() {
160
160
  this.loading$.next(true);
161
161
  this.dataController.setOperation(FsListState.Reload);
162
- this._fetch$.next();
162
+ this._fetch$.next(null);
163
163
  return this.fetchComplete$
164
164
  .asObservable()
165
165
  .pipe(take(1), delay(0));
@@ -204,14 +204,14 @@ export class List {
204
204
  }
205
205
  });
206
206
  }
207
- this._fetch$.next();
207
+ this._fetch$.next(null);
208
208
  });
209
209
  this.sorting.sortingChanged$
210
210
  .pipe(takeUntil(this._destroy$))
211
211
  .subscribe(() => {
212
212
  this.dataController.setOperation(FsListState.Sort);
213
213
  this.paging.page = 1;
214
- this._fetch$.next();
214
+ this._fetch$.next(null);
215
215
  });
216
216
  this._listenVisibleColumnChanges();
217
217
  this._listenRowsRemove();
@@ -262,7 +262,7 @@ export class List {
262
262
  this.externalParams.destroy();
263
263
  }
264
264
  this.columns.destroy();
265
- this._destroy$.next();
265
+ this._destroy$.next(null);
266
266
  this._destroy$.complete();
267
267
  this.dataController.destroy();
268
268
  }
@@ -357,7 +357,7 @@ export class List {
357
357
  menu: true,
358
358
  click: (row) => {
359
359
  this._restoreClick(this.restore.click, row);
360
- },
360
+ }, // TODO fix me, move to special file
361
361
  restore: true,
362
362
  });
363
363
  if (!this.rowActionsRaw) {
@@ -586,7 +586,7 @@ export class List {
586
586
  this.dataController.setOperation(FsListState.Filter);
587
587
  // Reset paging for request with correct offset
588
588
  this.paging.resetPaging();
589
- this._fetch$.next();
589
+ this._fetch$.next(null);
590
590
  }
591
591
  _checkRestoreFilter() {
592
592
  // Restore option
@@ -709,4 +709,4 @@ export class List {
709
709
  });
710
710
  }
711
711
  }
712
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9jbGFzc2VzL2xpc3QtY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQ2tFLFFBQVEsR0FDaEYsTUFBTSxvQkFBb0IsQ0FBQztBQUc1QixPQUFPLEVBQ0wsZUFBZSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsT0FBTyxHQUNyRSxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxVQUFVLEVBQUUsWUFBWSxFQUN4QixLQUFLLEVBQ0wsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUN6RCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQXFCbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFD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QkFBa0IsR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVyRCxJQUFJLGtCQUFrQixZQUFZLFVBQVUsRUFBRTtZQUM1QyxrQkFBa0I7aUJBQ2YsSUFBSSxDQUNILElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQjtpQkFDQSxTQUFTLENBQUM7Z0JBQ1QsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7YUFDMUIsQ0FBQyxDQUFDO1NBQ047SUFDSCxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87YUFDakIsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUM7YUFDckQsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtcbiAgQ2hhbmdlRm4sIEZpbHRlckNvbmZpZywgRnNGaWx0ZXJBdXRvUmVsb2FkLCBJRmlsdGVyU2F2ZWRGaWx0ZXJzQ29uZmlnLCBJdGVtVHlwZSxcbn0gZnJvbSAnQGZpcmVzdGl0Y2gvZmlsdGVyJztcbmltcG9ydCB7IFNlbGVjdGlvbkRpYWxvZyB9IGZyb20gJ0BmaXJlc3RpdGNoL3NlbGVjdGlvbic7XG5cbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgRU1QVFksIGZyb20sIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGNhdGNoRXJyb3IsIGRlYm91bmNlVGltZSxcbiAgZGVsYXksXG4gIG1hcCwgbWFwVG8sIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRha2UsIHRha2VVbnRpbCwgdGFwLFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmltcG9ydCB7IFBhZ2VDaGFuZ2VUeXBlIH0gZnJvbSAnLi4vZW51bXMvcGFnZS1jaGFuZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IEZzTGlzdFN0YXRlIH0gZnJvbSAnLi4vZW51bXMvc3RhdGUuZW51bSc7XG5pbXBvcnQge1xuICBGc0xpc3RBZnRlckNvbnRlbnRJbml0Rm4sXG4gIEZzTGlzdEFmdGVyRmV0Y2hGbixcbiAgRnNMaXN0QWZ0ZXJJbml0Rm4sXG4gIEZzTGlzdEJlZm9yZUZldGNoRm4sXG4gIEZzTGlzdENvbmZpZyxcbiAgRnNMaXN0RW1wdHlTdGF0ZUNvbmZpZyxcbiAgRnNMaXN0RmV0Y2hGbixcbiAgRnNMaXN0RmV0Y2hPcHRpb25zLFxuICBGc0xpc3RGZXRjaFN1YnNjcmlwdGlvbixcbiAgRnNMaXN0R3JvdXBDb25maWcsXG4gIEZzTGlzdExvYWRNb3JlQ29uZmlnLFxuICBGc0xpc3ROb1Jlc3VsdHNDb25maWcsXG4gIEZzTGlzdFBlcnNpdGFuY2UsXG4gIEZzTGlzdFJlc3RvcmVDb25maWcsXG4gIEZzTGlzdFNlbGVjdGlvbkNvbmZpZyxcbiAgRnNMaXN0VHJhY2tCeUZuLFxuICBGc1BhZ2luZyxcbiAgUGFnZUNoYW5nZSxcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTb3J0aW5nRGlyZWN0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbi5tb2RlbCc7XG5pbXBvcnQgeyBSb3dBY3Rpb24gfSBmcm9tICcuLi9tb2RlbHMvcm93LWFjdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBTdHlsZUNvbmZpZyB9IGZyb20gJy4uL21vZGVscy9zdHlsZUNvbmZpZy5tb2RlbCc7XG5cbmltcG9ydCB7IENvbHVtbnNDb250cm9sbGVyIH0gZnJvbSAnLi9jb2x1bW5zLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgRGF0YUNvbnRyb2xsZXIgfSBmcm9tICcuL2RhdGEtY29udHJvbGxlcic7XG5pbXBvcnQgeyBFeHRlcm5hbFBhcmFtc0NvbnRyb2xsZXIgfSBmcm9tICcuL2V4dGVybmFsLXBhcmFtcy1jb250cm9sbGVyJztcbmltcG9ydCB7IEFjdGlvbnNDb250cm9sbGVyIH0gZnJvbSAnLi9pbmRleCc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQ29udHJvbGxlciB9IGZyb20gJy4vcGFnaW5hdGlvbi1jb250cm9sbGVyJztcbmltcG9ydCB7IFBlcnNpc3RhbmNlQ29udHJvbGxlciB9IGZyb20gJy4vcGVyc2lzdGFuY2UtY29udHJvbGxlcic7XG5pbXBvcnQgeyBTZWxlY3Rpb25Db250cm9sbGVyIH0gZnJvbSAnLi9zZWxlY3Rpb24tY29udHJvbGxlcic7XG5pbXBvcnQgeyBTb3J0aW5nQ29udHJvbGxlciB9IGZyb20gJy4vc29ydGluZy1jb250cm9sbGVyJztcblxuY29uc3Qgc2hvd0RlbGV0ZWRGaWx0ZXJLZXkgPSAnc2hvd0RlbGV0ZWQnO1xuXG5cbmV4cG9ydCBjbGFzcyBMaXN0IHtcblxuICBwdWJsaWMgaGVhZGluZzogc3RyaW5nO1xuICBwdWJsaWMgdHJhY2tCeTogc3RyaW5nO1xuICBwdWJsaWMgc3ViaGVhZGluZzogc3RyaW5nO1xuICBwdWJsaWMgYXV0b0ZvY3VzOiBib29sZWFuO1xuICBwdWJsaWMgcm93SG92ZXJIaWdobGlnaHQ6IGJvb2xlYW47XG4gIHB1YmxpYyByb3dBY3Rpb25zUmF3OiBhbnlbXTtcbiAgcHVibGljIGdyb3VwQWN0aW9uc1JhdzogYW55W107XG4gIHB1YmxpYyByb3dDbGFzcztcbiAgcHVibGljIHJvd0V2ZW50czogYW55O1xuICBwdWJsaWMgcmVzdG9yZTogRnNMaXN0UmVzdG9yZUNvbmZpZztcbiAgcHVibGljIHBlcnNpc3Q6IEZzTGlzdFBlcnNpdGFuY2U7XG4gIHB1YmxpYyBmaWx0ZXJzID0gW107XG4gIHB1YmxpYyBmaWx0ZXJJbml0Q2I6IENoYW5nZUZuO1xuICBwdWJsaWMgZmlsdGVyQ2hhbmdlQ2I6IENoYW5nZUZuO1xuICBwdWJsaWMgc2F2ZWRGaWx0ZXJzOiBJRmlsdGVyU2F2ZWRGaWx0ZXJzQ29uZmlnO1xuICBwdWJsaWMgbm9SZXN1bHRzOiBGc0xpc3ROb1Jlc3VsdHNDb25maWc7XG4gIHB1YmxpYyBlbXB0eVN0YXRlOiBGc0xpc3RFbXB0eVN0YXRlQ29uZmlnO1xuICBwdWJsaWMgZmV0Y2hGbjogRnNMaXN0RmV0Y2hGbjtcbiAgcHVibGljIGJlZm9yZUZldGNoRm46IEZzTGlzdEJlZm9yZUZldGNoRm47XG4gIHB1YmxpYyBhZnRlckZldGNoRm46IEZzTGlzdEFmdGVyRmV0Y2hGbjtcbiAgcHVibGljIGFmdGVyQ29udGVudEluaXQ6IEZzTGlzdEFmdGVyQ29udGVudEluaXRGbjtcbiAgcHVibGljIGFmdGVySW5pdDogRnNMaXN0QWZ0ZXJJbml0Rm47XG4gIHB1YmxpYyBzdHlsZTtcbiAgcHVibGljIGhhc1Jvd0FjdGlvbnM7XG4gIHB1YmxpYyBwYWdpbmcgPSBuZXcgUGFnaW5hdGlvbkNvbnRyb2xsZXIoKTtcbiAgcHVibGljIGNvbHVtbnMgPSBuZXcgQ29sdW1uc0NvbnRyb2xsZXIoKTtcbiAgcHVibGljIGFjdGlvbnMgPSBuZXcgQWN0aW9uc0NvbnRyb2xsZXIoKTtcbiAgcHVibGljIGRhdGFDb250cm9sbGVyID0gbmV3IERhdGFDb250cm9sbGVyKCk7XG4gIHB1YmxpYyBzb3J0aW5nID0gbmV3IFNvcnRpbmdDb250cm9sbGVyKCk7XG4gIHB1YmxpYyBleHRlcm5hbFBhcmFtczogRXh0ZXJuYWxQYXJhbXNDb250cm9sbGVyO1xuICBwdWJsaWMgc2VsZWN0aW9uOiBTZWxlY3Rpb25Db250cm9sbGVyO1xuICBwdWJsaWMgZmlsdGVyQ29uZmlnOiBGaWx0ZXJDb25maWcgPSBudWxsO1xuICBwdWJsaWMgbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHVibGljIGZldGNoQ29tcGxldGUkID0gbmV3IFN1YmplY3Q8eyBzY3JvbGxJbnRvVmlldz86IGJvb2xlYW4gfT4oKTtcbiAgcHVibGljIGZpbHRlcnNSZWFkeSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwdWJsaWMgc3RhdHVzID0gdHJ1ZTtcbiAgcHVibGljIGNoaXBzID0gZmFsc2U7XG4gIHB1YmxpYyBmaWx0ZXJJbnB1dCA9IHRydWU7XG4gIHB1YmxpYyBxdWVyeVBhcmFtID0gZmFsc2U7XG4gIHB1YmxpYyByZXN0b3JlTW9kZSA9IGZhbHNlO1xuICBwdWJsaWMgYXV0b1JlbG9hZDogRnNGaWx0ZXJBdXRvUmVsb2FkO1xuXG4gIHB1YmxpYyBpbml0aWFsRmV0Y2ggPSB0cnVlO1xuXG4gIC8vIEVtcHR5IHN0YXRlXG4gIHB1YmxpYyBlbXB0eVN0YXRlRW5hYmxlZCA9IGZhbHNlO1xuICBwdWJsaWMgZW1wdHlTdGF0ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHByaXZhdGUgX2ZldGNoJCA9IG5ldyBTdWJqZWN0PEZzTGlzdEZldGNoU3Vic2NyaXB0aW9uIHwgdm9pZD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsdGVyc1F1ZXJ5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZWNvcmQ8c3RyaW5nLCBhbnk+PihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aXZlRmlsdGVyc0NvdW50JCA9IHRoaXMuX2ZpbHRlcnNRdWVyeVxuICAgIC5waXBlKG1hcCgodikgPT4gT2JqZWN0LmtleXModikubGVuZ3RoKSwgc2hhcmVSZXBsYXkoKSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfaGVhZGVyQ29uZmlnOiBTdHlsZUNvbmZpZztcbiAgcHJpdmF0ZSByZWFkb25seSBfZ3JvdXBDZWxsQ29uZmlnOiBTdHlsZUNvbmZpZztcbiAgcHJpdmF0ZSByZWFkb25seSBfY2VsbENvbmZpZzogU3R5bGVDb25maWc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Zvb3RlckNvbmZpZzogU3R5bGVDb25maWc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfY29uZmlnOiBGc0xpc3RDb25maWcgPSB7fSxcbiAgICBwcml2YXRlIF9zZWxlY3Rpb25EaWFsb2c6IFNlbGVjdGlvbkRpYWxvZyxcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIF9yb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBfcGVyc2lzdGFuY2U6IFBlcnNpc3RhbmNlQ29udHJvbGxlcixcbiAgICBwcml2YXRlIF9pbkRpYWxvZzogYm9vbGVhbixcbiAgKSB7XG4gICAgdGhpcy5faW5pdGlhbGl6ZShfY29uZmlnKTtcbiAgICB0aGlzLl9oZWFkZXJDb25maWcgPSBuZXcgU3R5bGVDb25maWcoX2NvbmZpZy5oZWFkZXIpO1xuICAgIHRoaXMuX2dyb3VwQ2VsbENvbmZpZyA9IG5ldyBTdHlsZUNvbmZpZyhfY29uZmlnLmNlbGwpO1xuICAgIHRoaXMuX2NlbGxDb25maWcgPSBuZXcgU3R5bGVDb25maWcoX2NvbmZpZy5jZWxsKTtcbiAgICB0aGlzLl9mb290ZXJDb25maWcgPSBuZXcgU3R5bGVDb25maWcoX2NvbmZpZy5mb290ZXIpO1xuICAgIHRoaXMuX2luaXRpYWxpemVkJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAodGhpcy5pbml0aWFsRmV0Y2gpIHtcbiAgICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIuc2V0T3BlcmF0aW9uKEZzTGlzdFN0YXRlLkxvYWQpO1xuICAgICAgdGhpcy5fZmV0Y2gkLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZldGNoJCgpOiBPYnNlcnZhYmxlPEZzTGlzdEZldGNoU3Vic2NyaXB0aW9uIHwgdm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9mZXRjaCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc1NhdmVkRmlsdGVycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmZpbHRlckNvbmZpZy5zYXZlZEZpbHRlcnM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpbHRlcnNRdWVyeSgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyc1F1ZXJ5LmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFjdGl2ZUZpbHRlcnNDb3VudCQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlRmlsdGVyc0NvdW50JDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVzdHJveSQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fZGVzdHJveSQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGluaXRpYWxpemVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5faW5pdGlhbGl6ZWQkO1xuICB9XG5cbiAgcHVibGljIGZldGNoUmVtb3RlKHF1ZXJ5KSB7XG4gICAgY29uc3Qgb3B0aW9uczogRnNMaXN0RmV0Y2hPcHRpb25zID0ge1xuICAgICAgc3RhdGU6IHRoaXMuZGF0YUNvbnRyb2xsZXIub3BlcmF0aW9uLFxuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHRoaXMuZmV0Y2hGbihxdWVyeSwgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gcmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSA/IGZyb20ocmVzdWx0KSA6IHJlc3VsdDtcbiAgfVxuXG4gIC8vIHB1YmxpYyBsb2FkTG9jYWwoKSB7XG4gIC8vICAgdGhpcy5wYWdpbmcudXBkYXRlUGFnaW5nTWFudWFsKHRoaXMuX3Jvd3MpO1xuICAvLyAgIGNvbnN0IGZyb20gPSAodGhpcy5wYWdpbmcucGFnZSAtIDEpICogdGhpcy5wYWdpbmcubGltaXQ7XG4gIC8vICAgY29uc3QgdG8gPSAodGhpcy5wYWdpbmcucGFnZSA9PT0gMSkgPyB0aGlzLnBhZ2luZy5saW1pdCA6IHRoaXMucGFnaW5nLmxpbWl0ICogdGhpcy5wYWdpbmcucGFnZTtcbiAgLy8gICBjb25zdCBzbGljZU9mUm93cyA9IHRoaXMuX3Jvd3Muc2xpY2UoZnJvbSwgdG8pO1xuICAvLyAgIHRoaXMuZGF0YSQubmV4dChzbGljZU9mUm93cyk7XG4gIC8vIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIHRlbXBsYXRlcyBmb3IgdXNpbmdcbiAgICpcbiAgICogQHBhcmFtIHRlbXBsYXRlc1xuICAgKi9cbiAgcHVibGljIHRyYW5mb3JtVGVtcGxhdGVzVG9Db2x1bW5zKHRlbXBsYXRlcykge1xuICAgIGNvbnN0IGRlZmF1bHRDb25maWdzID0ge1xuICAgICAgaGVhZGVyOiB0aGlzLl9oZWFkZXJDb25maWcsXG4gICAgICBncm91cENlbGw6IHRoaXMuX2dyb3VwQ2VsbENvbmZpZyxcbiAgICAgIGNlbGw6IHRoaXMuX2NlbGxDb25maWcsXG4gICAgICBmb290ZXI6IHRoaXMuX2Zvb3RlckNvbmZpZyxcbiAgICB9O1xuXG4gICAgdGhpcy5jb2x1bW5zLnNldERlZmF1bHRzKGRlZmF1bHRDb25maWdzKTtcbiAgICB0aGlzLmNvbHVtbnMuaW5pdGlhbGl6ZUNvbHVtbnModGVtcGxhdGVzKTtcblxuICAgIC8vIFNldCBzb3J0QnkgZGVmYXVsdCBjb2x1bW5cbiAgICB0aGlzLl91cGRhdGVTb3J0aW5nQ29sdW1ucygpO1xuXG4gICAgLy8gRGVmYXVsdCBzb3J0IGJ5XG4gICAgY29uc3QgZXh0ZXJuYWxTb3J0aW5nID0gdGhpcy5leHRlcm5hbFBhcmFtcy5leHRlcm5hbFNvcnRpbmc7XG4gICAgY29uc3QgaW5pdGlhbFNvcnRDb25maWcgPSBleHRlcm5hbFNvcnRpbmcgfHwgdGhpcy5fY29uZmlnLnNvcnQ7XG4gICAgdGhpcy5zb3J0aW5nLmluaXRpYWxTb3J0QnkoaW5pdGlhbFNvcnRDb25maWcpO1xuXG4gICAgaWYgKGV4dGVybmFsU29ydGluZyAmJiAhdGhpcy5zb3J0aW5nLmlzRGVmaW5lZCkge1xuICAgICAgdGhpcy5leHRlcm5hbFBhcmFtcy5jbGVhclNvcnRpbmdQYXJhbXMoKTtcblxuICAgICAgY29uc29sZS53YXJuKCdOb3QgYWJsZSB0byByZXN0b3JlIHBlcnNpc3RlZCBzb3J0aW5nIHBhcmFtcy4nLCBleHRlcm5hbFNvcnRpbmcpO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRGaWx0ZXJzKCk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIuc2V0T3BlcmF0aW9uKEZzTGlzdFN0YXRlLlJlbG9hZCk7XG4gICAgdGhpcy5fZmV0Y2gkLm5leHQoKTtcblxuICAgIHJldHVybiB0aGlzLmZldGNoQ29tcGxldGUkXG4gICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgIC5waXBlKCAgICAgIFxuICAgICAgICB0YWtlKDEpLCAgXG4gICAgICAgIGRlbGF5KDApLFxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXYXRjaCBwYWdlIGNoYW5nZXNcbiAgICovXG4gIHB1YmxpYyBzdWJzY3JpYmUoKSB7XG4gICAgdGhpcy5wYWdpbmcucGFnZUNoYW5nZWQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBQYWdlQ2hhbmdlKSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIuc2V0T3BlcmF0aW9uKEZzTGlzdFN0YXRlLlBhZ2VDaGFuZ2UpO1xuXG4gICAgICAgIC8vIFJlbW92ZSBhbGwgcm93cyBpZiBsaW1pdHMgd2FzIGNoYW5nZWRcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IFBhZ2VDaGFuZ2VUeXBlLkxpbWl0Q2hhbmdlZCAmJiB0aGlzLnBhZ2luZy5oYXNQYWdlU3RyYXRlZ3kpIHtcbiAgICAgICAgICB0aGlzLmRhdGFDb250cm9sbGVyLmNsZWFyUm93cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGFnaW5nLmhhc09mZnNldFN0cmF0ZWd5KSB7XG4gICAgICAgICAgdGhpcy5wYWdpbmcudXBkYXRlUGFnaW5hdGlvbigpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi51cGRhdGVWaXNpYmxlUmVjb3Jkc0NvdW50KHRoaXMucGFnaW5nLmdldFZpc2libGVSZWNvcmRzKCkpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24udXBkYXRlVG90YWxSZWNvcmRzQ291bnQodGhpcy5wYWdpbmcucmVjb3Jkcyk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5wYWdlQ2hhbmdlZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5wYWdpbmcubG9hZE1vcmVFbmFibGVkKSB7XG4gICAgICAgICAgY29uc3QgY29udGFpbnMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jZGstb3ZlcmxheS1jb250YWluZXInKSkuc29tZSgob3ZlcmxheSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMob3ZlcmxheSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBsZXQgZWwgPSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgICAgaWYgKCFjb250YWlucykge1xuICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBpZiAoKE51bWJlcihyZWN0LnRvcCB8fCAwKSArIHdpbmRvdy5wYWdlWU9mZnNldCkgPCB3aW5kb3cuaW5uZXJIZWlnaHQpIHtcbiAgICAgICAgICAgICAgZWwgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuZmV0Y2hDb21wbGV0ZSRcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICBpZihldmVudD8uc2Nyb2xsSW50b1ZpZXcgPz8gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGVsLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2ZldGNoJC5uZXh0KCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuc29ydGluZy5zb3J0aW5nQ2hhbmdlZCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIuc2V0T3BlcmF0aW9uKEZzTGlzdFN0YXRlLlNvcnQpO1xuICAgICAgICB0aGlzLnBhZ2luZy5wYWdlID0gMTtcbiAgICAgICAgdGhpcy5fZmV0Y2gkLm5leHQoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fbGlzdGVuVmlzaWJsZUNvbHVtbkNoYW5nZXMoKTtcbiAgICB0aGlzLl9saXN0ZW5Sb3dzUmVtb3ZlKCk7XG4gICAgdGhpcy5fbGlzdGVuRmV0Y2goKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREYXRhKHRyYWNrQnk/OiBGc0xpc3RUcmFja0J5Rm4pIHtcbiAgICBsZXQgcm93c0RhdGEgPSB0aGlzLmRhdGFDb250cm9sbGVyXG4gICAgICAudmlzaWJsZVJvd3NEYXRhO1xuXG4gICAgaWYgKHRyYWNrQnkpIHtcbiAgICAgIHJvd3NEYXRhID0gcm93c0RhdGFcbiAgICAgICAgLmZpbHRlcih0cmFja0J5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93c0RhdGFcbiAgICAgIC5tYXAoKGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGNsb25lRGVlcChkYXRhKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGhhc0RhdGEodHJhY2tCeTogRnNMaXN0VHJhY2tCeUZuKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUNvbnRyb2xsZXIudmlzaWJsZVJvd3NEYXRhLnNvbWUodHJhY2tCeSk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIGdyb3VwIG1vZGUgc3RhdHVzXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIGdyb3VwRW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmRhdGFDb250cm9sbGVyLmdyb3VwRW5hYmxlZCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIuZ3JvdXBFbmFibGVkID0gdmFsdWU7XG5cbiAgICAgIC8vIENvbW1lbnRlZCBvdXQgYmVjYXVzZSBSYXkgd2FudHMgdG8gY2hhbmdlIGdyb3VwIHN0YXR1cyBpbiBmZXRjaCBtYXAgcGlwZVxuICAgICAgLy8gYW5kIGl0IHRyaWdnZXJzIGV4dHJhIHJlcXVlc3RzXG4gICAgICAvLyB0aGlzLnJlbG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnBhZ2luZykge1xuICAgICAgdGhpcy5wYWdpbmcuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNvcnRpbmcpIHtcbiAgICAgIHRoaXMuc29ydGluZy5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmlsdGVyQ29uZmlnKSB7XG4gICAgICB0aGlzLmZpbHRlckNvbmZpZyA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZXh0ZXJuYWxQYXJhbXMpIHtcbiAgICAgIHRoaXMuZXh0ZXJuYWxQYXJhbXMuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuY29sdW1ucy5kZXN0cm95KCk7XG5cbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcblxuICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIuZGVzdHJveSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERvIGluaXRpYWxpemF0aW9uIG9mIHRhYmxlXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWdcbiAgICovXG4gIHByaXZhdGUgX2luaXRpYWxpemUoY29uZmlnOiBGc0xpc3RDb25maWcpIHtcbiAgICB0aGlzLl9pbml0VmFyaWFibGVzKGNvbmZpZyk7XG4gICAgdGhpcy5faW5pdERlZmF1bHRPcHRpb25zKGNvbmZpZyk7XG4gICAgdGhpcy5faW5pdFJlc3RvcmUoKTtcbiAgICB0aGlzLl9pbml0QWN0aW9ucyhjb25maWcuYWN0aW9ucyk7XG4gICAgdGhpcy5faW5pdFBhZ2luZyhjb25maWcucGFnaW5nLCBjb25maWcubG9hZE1vcmUpO1xuICAgIHRoaXMuX2luaXRTZWxlY3Rpb24oY29uZmlnLnNlbGVjdGlvbiwgdGhpcy5fc2VsZWN0aW9uRGlhbG9nKTtcbiAgICB0aGlzLl9pbml0R3JvdXBzKGNvbmZpZy5ncm91cCk7XG4gICAgdGhpcy5faW5pdEV4dGVybmFsUGFyYW1zQ29udHJvbGxlcigpO1xuICAgIHRoaXMuX2luaXRpYWxpemVEYXRhKCk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0VmFyaWFibGVzKGNvbmZpZzogRnNMaXN0Q29uZmlnKSB7XG4gICAgdGhpcy5hdXRvRm9jdXMgPSBjb25maWcuYXV0b0ZvY3VzO1xuICAgIHRoaXMucm93SG92ZXJIaWdobGlnaHQgPSBjb25maWcucm93SG92ZXJIaWdobGlnaHQgPz8gdHJ1ZTtcbiAgICB0aGlzLmhlYWRpbmcgPSBjb25maWcuaGVhZGluZztcbiAgICB0aGlzLnRyYWNrQnkgPSBjb25maWcudHJhY2tCeTtcbiAgICB0aGlzLnN1YmhlYWRpbmcgPSBjb25maWcuc3ViaGVhZGluZztcbiAgICB0aGlzLnJvd0FjdGlvbnNSYXcgPSBjb25maWcucm93QWN0aW9ucztcbiAgICB0aGlzLnJvd0NsYXNzID0gY29uZmlnLnJvd0NsYXNzO1xuICAgIHRoaXMucm93RXZlbnRzID0gY29uZmlnLnJvd0V2ZW50cztcbiAgICB0aGlzLnJlc3RvcmUgPSBjb25maWcucmVzdG9yZTtcbiAgICB0aGlzLnBlcnNpc3QgPSBjb25maWcucGVyc2lzdDtcbiAgICB0aGlzLmZpbHRlcnMgPSBjb25maWcuZmlsdGVycyA/PyBbXTtcbiAgICB0aGlzLmZpbHRlckluaXRDYiA9IGNvbmZpZy5maWx0ZXJJbml0O1xuICAgIHRoaXMuZmlsdGVyQ2hhbmdlQ2IgPSBjb25maWcuZmlsdGVyQ2hhbmdlO1xuICAgIHRoaXMuc2F2ZWRGaWx0ZXJzID0gY29uZmlnLnNhdmVkRmlsdGVycztcbiAgICB0aGlzLm5vUmVzdWx0cyA9IGNvbmZpZy5ub1Jlc3VsdHM7XG4gICAgdGhpcy5lbXB0eVN0YXRlID0gY29uZmlnLmVtcHR5U3RhdGU7XG4gICAgdGhpcy5mZXRjaEZuID0gY29uZmlnLmZldGNoO1xuICAgIHRoaXMuYWZ0ZXJGZXRjaEZuID0gY29uZmlnLmFmdGVyRmV0Y2g7XG4gICAgdGhpcy5iZWZvcmVGZXRjaEZuID0gY29uZmlnLmJlZm9yZUZldGNoO1xuICAgIHRoaXMuYWZ0ZXJJbml0ID0gY29uZmlnLmFmdGVySW5pdDtcbiAgICB0aGlzLnN0eWxlID0gY29uZmlnLnN0eWxlO1xuICAgIHRoaXMuYXV0b1JlbG9hZCA9IGNvbmZpZy5hdXRvUmVsb2FkO1xuICAgIHRoaXMuY29sdW1ucy5pbml0Q29uZmlnKGNvbmZpZy5jb2x1bW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEp1c3QgaW5pdCBvcHRpb25zIGJ5IGRlZmF1bHQgaXQgaXQgd2Fzbid0IHNwZWNpZmllZFxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnXG4gICAqL1xuICBwcml2YXRlIF9pbml0RGVmYXVsdE9wdGlvbnMoY29uZmlnKSB7XG4gICAgLy8gV2Ugc2hvdWxkIHByZXZlbnQgaW5pdGlhbCBmZXRjaCBpbiBjYXNlcyB3aGVuIGl0IHdpbGwgYmUgZmV0Y2hlZCBpbiBhbnkgY2FzZVxuICAgIC8vIEFzIGV4LiBzY3JvbGxhYmxlIG9yIGZpbHRlciB3aWxsIGRvIGZldGNoIGluIGFueSBjYXNlc1xuICAgIGlmIChjb25maWcuaW5pdGlhbEZldGNoID09PSBmYWxzZSB8fCBjb25maWcuc2Nyb2xsYWJsZSkgeyAvLyBUT0RPIGZpeG1lIGFmdGVyIHRzbW9kZWwgdmVyc2lvbiB1cGRhdGVcbiAgICAgIHRoaXMuaW5pdGlhbEZldGNoID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChjb25maWcuc3RhdHVzID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5zdGF0dXMgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5jaGlwcykge1xuICAgICAgdGhpcy5jaGlwcyA9IGNvbmZpZy5jaGlwcztcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5maWx0ZXJJbnB1dCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZmlsdGVySW5wdXQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faW5EaWFsb2cpIHtcbiAgICAgIHRoaXMucXVlcnlQYXJhbSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnF1ZXJ5UGFyYW0gPSAoY29uZmlnLnF1ZXJ5UGFyYW0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogY29uZmlnLnF1ZXJ5UGFyYW07XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5zb3J0cykge1xuICAgICAgdGhpcy5zb3J0aW5nLmluaXRGYWtlQ29sdW1ucyhjb25maWcuc29ydHMpO1xuICAgIH1cbiAgICBpZiAoIWNvbmZpZy50cmFja0J5KSB7XG4gICAgICB0aGlzLnRyYWNrQnkgPSAnaWQnO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuYWZ0ZXJDb250ZW50SW5pdCkge1xuICAgICAgdGhpcy5hZnRlckNvbnRlbnRJbml0ID0gKCkgPT4ge1xuICAgICAgICBjb25maWcuYWZ0ZXJDb250ZW50SW5pdCh0aGlzLnBhZ2luZy5xdWVyeSwgdGhpcy5kYXRhQ29udHJvbGxlci52aXNpYmxlUm93cyk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0IHJlc3RvcmUgcm93IGFjdGlvbiBhbmQgYXBwZW5kIFNob3cgRGVsZXRlZCBvcHRpb24gaW50byBmaWx0ZXJzXG4gICAqL1xuICBwcml2YXRlIF9pbml0UmVzdG9yZSgpIHtcbiAgICBpZiAodGhpcy5yZXN0b3JlKSB7XG4gICAgICBjb25zdCByZXN0b3JlQWN0aW9uID0gbmV3IFJvd0FjdGlvbih7XG4gICAgICAgIGxhYmVsOiB0aGlzLnJlc3RvcmUubWVudUxhYmVsIHx8ICdSZXN0b3JlJyxcbiAgICAgICAgbWVudTogdHJ1ZSxcbiAgICAgICAgY2xpY2s6IChyb3cpID0+IHtcbiAgICAgICAgICB0aGlzLl9yZXN0b3JlQ2xpY2sodGhpcy5yZXN0b3JlLmNsaWNrLCByb3cpO1xuICAgICAgICB9LCAvLyBUT0RPIGZpeCBtZSwgbW92ZSB0byBzcGVjaWFsIGZpbGVcbiAgICAgICAgcmVzdG9yZTogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXRoaXMucm93QWN0aW9uc1Jhdykge1xuICAgICAgICB0aGlzLnJvd0FjdGlvbnNSYXcgPSBbXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yb3dBY3Rpb25zUmF3LnB1c2gocmVzdG9yZUFjdGlvbik7XG5cbiAgICAgIGlmICghdGhpcy5maWx0ZXJzKSB7XG4gICAgICAgIHRoaXMuZmlsdGVycyA9IFtdO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5yZXN0b3JlLmZpbHRlciAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IHNob3dEZWxldGVkRmlsdGVyS2V5LFxuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLkNoZWNrYm94LFxuICAgICAgICAgIGxhYmVsOiB0aGlzLnJlc3RvcmUuZmlsdGVyTGFiZWwgfHwgJ1Nob3cgRGVsZXRlZCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIEluaXQgcGFnaW5nXG4gICAqXG4gICAqIEBwYXJhbSBwYWdpbmdDb25maWdcbiAgICogQHBhcmFtIGxvYWRNb3JlXG4gICAqL1xuICBwcml2YXRlIF9pbml0UGFnaW5nKHBhZ2luZ0NvbmZpZzogRnNQYWdpbmcgfCBmYWxzZSwgbG9hZE1vcmU6IEZzTGlzdExvYWRNb3JlQ29uZmlnIHwgYm9vbGVhbikge1xuICAgIHRoaXMucGFnaW5nLmluaXRXaXRoQ29uZmlnKHBhZ2luZ0NvbmZpZywgbG9hZE1vcmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0IGFjdGlvbnMgYnkgY2F0ZWdvcmllc1xuICAgKi9cbiAgcHJpdmF0ZSBfaW5pdEFjdGlvbnMoYWN0aW9ucykge1xuICAgIGlmIChhY3Rpb25zKSB7XG4gICAgICB0aGlzLmFjdGlvbnMuc2V0QWN0aW9ucyhhY3Rpb25zKTtcbiAgICB9XG5cbiAgICB0aGlzLmhhc1Jvd0FjdGlvbnMgPVxuICAgICAgKHRoaXMucm93QWN0aW9uc1JhdyAmJiB0aGlzLnJvd0FjdGlvbnNSYXcubGVuZ3RoID4gMClcbiAgICAgIHx8ICh0aGlzLmdyb3VwQWN0aW9uc1JhdyAmJiB0aGlzLmdyb3VwQWN0aW9uc1Jhdy5sZW5ndGggPiAwKTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRTZWxlY3Rpb24oXG4gICAgc2VsZWN0aW9uQ29uZmlnOiBGc0xpc3RTZWxlY3Rpb25Db25maWcsXG4gICAgc2VsZWN0aW9uRGlhbG9nOiBTZWxlY3Rpb25EaWFsb2csXG4gICkge1xuICAgIGlmIChzZWxlY3Rpb25Db25maWcpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbkNvbnRyb2xsZXIoc2VsZWN0aW9uQ29uZmlnLCB0aGlzLnRyYWNrQnksIHNlbGVjdGlvbkRpYWxvZyk7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZXRSb3dzQ2FsbGJhY2soKCkgPT4gdGhpcy5kYXRhQ29udHJvbGxlci52aXNpYmxlUm93cyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZURhdGEoKSB7XG4gICAgdGhpcy5kYXRhQ29udHJvbGxlci5zZXRBZGRpdGlvbmFsQ29uZmlncyh7XG4gICAgICBsb2FkTW9yZUVuYWJsZWQ6IHRoaXMucGFnaW5nLmxvYWRNb3JlRW5hYmxlZCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRHcm91cHMoZ3JvdXBDb25maWc6IEZzTGlzdEdyb3VwQ29uZmlnKSB7XG4gICAgaWYgKGdyb3VwQ29uZmlnKSB7XG4gICAgICB0aGlzLmRhdGFDb250cm9sbGVyLnNldEdyb3VwQ29uZmlnKGdyb3VwQ29uZmlnKTtcbiAgICAgIHRoaXMuZ3JvdXBBY3Rpb25zUmF3ID0gZ3JvdXBDb25maWcuYWN0aW9ucztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pbml0RXh0ZXJuYWxQYXJhbXNDb250cm9sbGVyKCkge1xuICAgIHRoaXMuZXh0ZXJuYWxQYXJhbXMgPSBuZXcgRXh0ZXJuYWxQYXJhbXNDb250cm9sbGVyKFxuICAgICAgdGhpcy5fcm91dGVyLFxuICAgICAgdGhpcy5fcm91dGUsXG4gICAgICB0aGlzLl9wZXJzaXN0YW5jZSxcbiAgICAgIHRoaXMucGFnaW5nLFxuICAgICAgdGhpcy5zb3J0aW5nLFxuICAgICAgdGhpcy5xdWVyeVBhcmFtLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIGZldGNoJCBldmVudCB3aXRoIGRlYm91bmNlXG4gICAqL1xuICBwcml2YXRlIF9saXN0ZW5GZXRjaCgpIHtcbiAgICBsZXQgZmV0Y2gkID0gdGhpcy5mZXRjaCQ7XG5cbiAgICAvLyBTaG91bGQgd2FpdCB1bnRpbCBzYXZlZCBmaWx0ZXJzIG5vdCBsb2FkZWRcbiAgICBpZiAodGhpcy5maWx0ZXJzKSB7XG4gICAgICBmZXRjaCQgPSBjb21iaW5lTGF0ZXN0KFtmZXRjaCQsIHRoaXMuZmlsdGVyc1JlYWR5JF0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgoW3BhcmFtc10pID0+IHBhcmFtcyksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZmV0Y2gkXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDUwKSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uPy5jbG9zZVNlbGVjdGlvbkRpYWxvZygpO1xuICAgICAgICB9KSxcbiAgICAgICAgbWFwKChwYXJhbXM6IEZzTGlzdEZldGNoU3Vic2NyaXB0aW9uKSA9PiB7XG4gICAgICAgICAgbGV0IHF1ZXJ5ID0geyAuLi50aGlzLmZpbHRlcnNRdWVyeSB9O1xuXG4gICAgICAgICAgaWYgKHRoaXMucGFnaW5nLmhhc09mZnNldFN0cmF0ZWd5ICYmIHBhcmFtcz8ubG9hZE9mZnNldCkge1xuICAgICAgICAgICAgcXVlcnkgPSBPYmplY3QuYXNzaWduKHF1ZXJ5LCB0aGlzLnBhZ2luZy5sb2FkRGVsZXRlZE9mZnNldFF1ZXJ5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYWxsUmVjb3Jkc1JhbmdlTmVlZGVkID0gKHRoaXMuaW5pdGlhbEZldGNoXG4gICAgICAgICAgICAgIHx8IHRoaXMuZGF0YUNvbnRyb2xsZXIub3BlcmF0aW9uID09PSBGc0xpc3RTdGF0ZS5SZWxvYWRcbiAgICAgICAgICAgICkgJiYgdGhpcy5wYWdpbmcubG9hZE1vcmVFbmFibGVkO1xuXG4gICAgICAgICAgICBxdWVyeSA9IGFsbFJlY29yZHNSYW5nZU5lZWRlZCA/IE9iamVjdC5hc3NpZ24ocXVlcnksIHRoaXMucGFnaW5nLmxvYWRNb3JlUXVlcnkpIDogT2JqZWN0LmFzc2lnbihxdWVyeSwgdGhpcy5wYWdpbmcucXVlcnkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnNvcnRpbmcuc29ydGluZ0NvbHVtbikge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcmRlcjogYCR7dGhpcy5zb3J0aW5nLnNvcnRpbmdDb2x1bW4ubmFtZX0sJHt0aGlzLnNvcnRpbmcuc29ydGluZ0NvbHVtbi5kaXJlY3Rpb259YCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuY29sdW1ucy5jb25maWd1cmVkKSB7XG4gICAgICAgICAgICBxdWVyeSA9IHtcbiAgICAgICAgICAgICAgLi4ucXVlcnksXG4gICAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucy52aXNpYmxlQ29sdW1uc05hbWVzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4geyBwYXJhbXMsIHF1ZXJ5IH07XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKHsgcGFyYW1zLCBxdWVyeSB9KSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuY29sdW1ucy5sb2FkRm5Db25maWd1cmVkICYmICF0aGlzLmNvbHVtbnMuY29sdW1uc0ZldGNoZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnMubG9hZFJlbW90ZUNvbHVtbkNvbmZpZ3MoKVxuICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXBUbyh7IHBhcmFtcywgcXVlcnkgfSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG9mKHsgcGFyYW1zLCBxdWVyeSB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoeyBwYXJhbXMsIHF1ZXJ5IH0pID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5iZWZvcmVGZXRjaEZuKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5iZWZvcmVGZXRjaEZuKHF1ZXJ5KVxuICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGJlZm9yZUZldGNoUXVlcnkpID0+ICh7IHBhcmFtcywgcXVlcnk6IGJlZm9yZUZldGNoUXVlcnkgfSkpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBvZih7IHBhcmFtcywgcXVlcnkgfSk7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKHsgcGFyYW1zLCBxdWVyeSB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVtb3RlRmV0Y2ggPSB0aGlzLmZldGNoUmVtb3RlKHF1ZXJ5KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtvZih7IHBhcmFtcywgcXVlcnkgfSksIHJlbW90ZUZldGNoXSk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuXG4gICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKFtwYXJhbXNRdWVyeSwgcmVzcG9uc2VdKSA9PiB7XG4gICAgICAgIHRoaXMuaW5pdGlhbEZldGNoID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NvbXBsZXRlRmV0Y2gocGFyYW1zUXVlcnkucGFyYW1zLCBwYXJhbXNRdWVyeS5xdWVyeSwgcmVzcG9uc2UpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5Sb3dzUmVtb3ZlKCkge1xuICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIucm93c1JlbW92ZWQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHJvd3M6IGFueVtdKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnBhZ2luZy5lbmFibGVkKSB7XG5cbiAgICAgICAgICBjb25zdCByZW1vdmVkQ291bnQgPSByb3dzLmxlbmd0aDtcblxuICAgICAgICAgIGlmICh0aGlzLnBhZ2luZy5oYXNQYWdlU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIHRoaXMuX25vRGF0YVBhZ2luYXRpb25VcGRhdGUocmVtb3ZlZENvdW50KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmV0Y2ggbW9yZSBpZiBoYXMgc29tZXRoaW5nIGZvciBmZXRjaFxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YUNvbnRyb2xsZXIuaGFzRGF0YSB8fCB0aGlzLnBhZ2luZy5oYXNOZXh0UGFnZSkge1xuICAgICAgICAgICAgICB0aGlzLmRhdGFDb250cm9sbGVyLnNldE9wZXJhdGlvbihGc0xpc3RTdGF0ZS5Mb2FkTW9yZSk7XG5cbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmcucmVtb3ZlUm93cyhyZW1vdmVkQ291bnQpO1xuICAgICAgICAgICAgICB0aGlzLl9mZXRjaCQubmV4dCh7IGxvYWRPZmZzZXQ6IHRydWUgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLl9ub0RhdGFQYWdpbmF0aW9uVXBkYXRlKHJlbW92ZWRDb3VudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIGZyb20gc2VsZWN0aW9uXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbikge1xuICAgICAgICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yZW1vdmVSb3cocm93LmRhdGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZXIgbWF5IGhhdmUgb3JpZ2luYWxseSBoaWRkZW4gY29sdW1ucywgYnV0IHZpc2liaWxpdHkgb2YgdGhvc2UgY29sdW1uc1xuICAgKiBjYW4gYmUgY2hhbmdlZCBwcm9ncmFtbWF0aWNhbHkgaW4gYW55IHRpbWVcbiAgICovXG4gIHByaXZhdGUgX2xpc3RlblZpc2libGVDb2x1bW5DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY29sdW1ucy52aXNpYmxlQ29sdW1ucyRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVNvcnRpbmdDb2x1bW5zKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYW5kIHdhdGNoIGZpbHRlciBjaGFuZ2VzXG4gICAqL1xuICBwcml2YXRlIF9pbml0RmlsdGVycygpIHtcbiAgICBpZiAodGhpcy5maWx0ZXJDb25maWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzb3J0VmFsdWVzID0gdGhpcy5zb3J0aW5nLm1ha2VTb3J0aW5nTGlzdCgpO1xuXG4gICAgY29uc3Qgc29ydENvbmZpZyA9IHRoaXMuc29ydGluZy5zb3J0aW5nQ29sdW1uXG4gICAgICA/IHsgdmFsdWU6IHRoaXMuc29ydGluZy5zb3J0aW5nQ29sdW1uLm5hbWUsIGRpcmVjdGlvbjogdGhpcy5zb3J0aW5nLnNvcnRpbmdDb2x1bW4uZGlyZWN0aW9uIH1cbiAgICAgIDogbnVsbDtcblxuICAgIC8vIENvbmZpZ1xuICAgIHRoaXMuZmlsdGVyQ29uZmlnID0ge1xuICAgICAgcGVyc2lzdDogdGhpcy5wZXJzaXN0LFxuICAgICAgaXRlbXM6IHRoaXMuZmlsdGVycyB8fCBbXSxcbiAgICAgIHNhdmVkRmlsdGVyczogdGhpcy5zYXZlZEZpbHRlcnMsXG4gICAgICAvLyBpbmxpbmU6IHRoaXMuaW5saW5lRmlsdGVycyxcbiAgICAgIGFjdGlvbnM6IHRoaXMuYWN0aW9ucy5hY3Rpb25zLFxuICAgICAgcXVlcnlQYXJhbTogdGhpcy5xdWVyeVBhcmFtLFxuICAgICAgYXV0b2ZvY3VzOiB0aGlzLmF1dG9Gb2N1cyxcbiAgICAgIHNvcnRzOiBzb3J0VmFsdWVzLFxuICAgICAgc29ydDogc29ydENvbmZpZyxcbiAgICAgIGNoaXBzOiB0aGlzLmNoaXBzLFxuICAgICAgYXV0b1JlbG9hZDogdGhpcy5hdXRvUmVsb2FkLFxuICAgICAgaW5pdDogdGhpcy5fZmlsdGVySW5pdC5iaW5kKHRoaXMpLFxuICAgICAgY2hhbmdlOiB0aGlzLl9maWx0ZXJDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgIHJlbG9hZDogKHRoaXMuX2NvbmZpZy5yZWxvYWQgPz8gdHJ1ZSkgPyB0aGlzLnJlbG9hZC5iaW5kKHRoaXMpIDogbnVsbCxcbiAgICAgIHNvcnRDaGFuZ2U6IHRoaXMuX2ZpbHRlclNvcnQuYmluZCh0aGlzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHdoZW4gRmlsdGVyIGhhcyBiZWVuIGluaXRpYWxpemVkXG4gICAqXG4gICAqIEBwYXJhbSBmaWx0ZXJzXG4gICAqL1xuICBwcml2YXRlIF9maWx0ZXJJbml0KGZpbHRlcnMpIHtcbiAgICBpZiAodGhpcy5maWx0ZXJJbml0Q2IpIHtcbiAgICAgIHRoaXMuZmlsdGVySW5pdENiKGZpbHRlcnMpO1xuICAgIH1cblxuICAgIHRoaXMuX2ZpbHRlcnNRdWVyeS5uZXh0KGZpbHRlcnMpO1xuXG4gICAgdGhpcy5fY2hlY2tSZXN0b3JlRmlsdGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgd2hlbiBGaWx0ZXIgaGFzIGJlZW4gY2hhbmdlZFxuICAgKlxuICAgKiBAcGFyYW0gZmlsdGVyUXVlcnlcbiAgICogQHBhcmFtIGZpbHRlclNvcnRcbiAgICovXG4gIHByaXZhdGUgX2ZpbHRlckNoYW5nZShmaWx0ZXJRdWVyeSwgZmlsdGVyU29ydCkge1xuICAgIGlmICh0aGlzLmZpbHRlckNoYW5nZUNiKSB7XG4gICAgICB0aGlzLmZpbHRlckNoYW5nZUNiKGZpbHRlclF1ZXJ5LCBmaWx0ZXJTb3J0KTtcbiAgICB9XG5cbiAgICB0aGlzLl9maWx0ZXJzUXVlcnkubmV4dChmaWx0ZXJRdWVyeSk7XG5cbiAgICB0aGlzLnJlc3RvcmVNb2RlID0gZmFsc2U7XG5cbiAgICAvLyBSZXN0b3JlIG9wdGlvblxuICAgIHRoaXMuX2NoZWNrUmVzdG9yZUZpbHRlcigpO1xuXG4gICAgaWYgKHRoaXMucmVzdG9yZSAmJiB0aGlzLnJlc3RvcmUucmVsb2FkKSB7XG4gICAgICB0aGlzLnJlbG9hZCgpO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIuc2V0T3BlcmF0aW9uKEZzTGlzdFN0YXRlLkZpbHRlcik7XG5cbiAgICAvLyBSZXNldCBwYWdpbmcgZm9yIHJlcXVlc3Qgd2l0aCBjb3JyZWN0IG9mZnNldFxuICAgIHRoaXMucGFnaW5nLnJlc2V0UGFnaW5nKCk7XG4gICAgdGhpcy5fZmV0Y2gkLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrUmVzdG9yZUZpbHRlcigpIHtcbiAgICAvLyBSZXN0b3JlIG9wdGlvblxuICAgIGlmICh0aGlzLnJlc3RvcmUgJiYgdGhpcy5maWx0ZXJzUXVlcnlbc2hvd0RlbGV0ZWRGaWx0ZXJLZXldKSB7XG4gICAgICBkZWxldGUgdGhpcy5maWx0ZXJzUXVlcnlbc2hvd0RlbGV0ZWRGaWx0ZXJLZXldO1xuXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZmlsdGVyc1F1ZXJ5LCB0aGlzLnJlc3RvcmUucXVlcnkpO1xuXG4gICAgICB0aGlzLnJlc3RvcmVNb2RlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBDYWxsYmFjayB3aGVuIEZpbHRlciBzb3J0IGhhcyBiZWVuIGNoYW5nZWRcbiAgcHJpdmF0ZSBfZmlsdGVyU29ydChmaWx0ZXJRdWVyeSwgZmlsdGVyU29ydCkge1xuICAgIGlmIChmaWx0ZXJTb3J0KSB7XG4gICAgICB0aGlzLnNvcnRpbmcuc29ydEJ5Q29sdW1uV2l0aE5hbWUoZmlsdGVyU29ydC52YWx1ZSk7XG5cbiAgICAgIGNvbnN0IHNvcnREaXJlY3Rpb24gPSBmaWx0ZXJTb3J0LmRpcmVjdGlvbiA9PT0gJ2FzYycgPyBTb3J0aW5nRGlyZWN0aW9uLmFzYyA6IFNvcnRpbmdEaXJlY3Rpb24uZGVzYztcbiAgICAgIHRoaXMuc29ydGluZy5zb3J0RGlyZWN0aW9uKHNvcnREaXJlY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGSVhNRSBuZWVkIHRvIGJlIHJlZmFjdG9yZWQuLi5cbiAgICAgIHRoaXMuc29ydGluZy5zb3J0aW5nQ29sdW1uID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jb21wbGV0ZUZldGNoKHBhcmFtcywgcXVlcnksIHJlc3BvbnNlKSB7XG4gICAgaWYgKCF0aGlzLnBhZ2luZy5wYWdlKSB7XG4gICAgICB0aGlzLnBhZ2luZy5wYWdlID0gMTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UucGFnaW5nKSB7XG4gICAgICBjb25zdCBkaXNwbGF5ZWQgPSAoQXJyYXkuaXNBcnJheShyZXNwb25zZS5kYXRhKSAmJiByZXNwb25zZS5kYXRhLmxlbmd0aCkgfHwgMDtcbiAgICAgIHRoaXMucGFnaW5nLnVwZGF0ZVBhZ2luZyhcbiAgICAgICAgcmVzcG9uc2UucGFnaW5nLFxuICAgICAgICBkaXNwbGF5ZWQsXG4gICAgICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIub3BlcmF0aW9uID09PSBGc0xpc3RTdGF0ZS5Mb2FkTW9yZSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnBhZ2luZy5lbmFibGVkKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgJyVjIEZzTGlzdCBXYXJuaW5nICcsXG4gICAgICAgICdjb2xvcjogd2hpdGU7IGJhY2tncm91bmQtY29sb3I6ICNmZmNjMGInLFxuICAgICAgICAnUGFnaW5hdGlvbiBkb2VzIG5vdCBjb25maWd1cmVkIHByb3Blcmx5LiAnICtcbiAgICAgICAgJ1BhZ2luYXRpb24gaXMgZW5hYmxlZCwgYnV0IGh0dHAgcmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBcInBhZ2luZ1wiIGZpZWxkLiAnICtcbiAgICAgICAgJ1lvdSBoYXZlIHRvIHNldCBcInBhZ2luZzogZmFsc2VcIiBpbiBjb25maWcgb3IgYWRkIFwicGFnaW5nXCIgZmllbGQgdG8gcmVzcG9uc2UuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8vIG11c3QgYmUgYmVmb3JlIHNlbGVjdGlvbiwgYmVjYXVzZSBzZWxldGlvbiB1c2UgcmVjb3Jkc1xuICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIuc2V0Um93c0Zyb21SZXNwb25zZShyZXNwb25zZS5kYXRhKTtcbiAgICAvLy9cblxuICAgIHRoaXMuX2NvbXBsZXRlRmV0Y2hVcGRhdGVTZWxlY3RvbihyZXNwb25zZSk7XG5cbiAgICBpZiAodGhpcy5lbXB0eVN0YXRlPy52YWxpZGF0ZSAmJiB0aGlzLmVtcHR5U3RhdGVUZW1wbGF0ZSkge1xuICAgICAgdGhpcy5lbXB0eVN0YXRlRW5hYmxlZCA9IHRoaXMuZW1wdHlTdGF0ZS52YWxpZGF0ZShxdWVyeSwgY2xvbmVEZWVwKHRoaXMuZGF0YUNvbnRyb2xsZXIudmlzaWJsZVJvd3NEYXRhKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWZ0ZXJGZXRjaEZuKSB7XG4gICAgICB0aGlzLmFmdGVyRmV0Y2hGbihxdWVyeSwgdGhpcy5kYXRhQ29udHJvbGxlci52aXNpYmxlUm93c0RhdGEpO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlbiBoYXZlIHJlbW92ZWQgYWxsIHJlc3VsdHMgZnJvbSBsYXN0IHBhZ2VcbiAgICBpZiAodGhpcy5kYXRhQ29udHJvbGxlci52aXNpYmxlUm93cy5sZW5ndGggPT09IDBcbiAgICAgICYmIHRoaXMucGFnaW5nLnBhZ2UgPiAxXG4gICAgICAmJiB0aGlzLnBhZ2luZy5wYWdlID4gdGhpcy5wYWdpbmcucGFnZXNcbiAgICApIHtcbiAgICAgIHRoaXMucGFnaW5nLmdvTGFzdCgpO1xuICAgIH1cblxuICAgIHRoaXMuZmV0Y2hDb21wbGV0ZSQubmV4dCh7IHNjcm9sbEludG9WaWV3OiBwYXJhbXM/LnNjcm9sbEludG9WaWV3IH0pO1xuICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIF9jb21wbGV0ZUZldGNoVXBkYXRlU2VsZWN0b24ocmVzcG9uc2UpIHtcbiAgICAvLyBVcGRhdGUgc2VsZWN0aW9uIHBhcmFtc1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbikge1xuICAgICAgaWYgKHRoaXMucGFnaW5nLmVuYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGFnZUNoYW5nZWQoKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24udXBkYXRlVmlzaWJsZVJlY29yZHNDb3VudCh0aGlzLnBhZ2luZy5nZXRWaXNpYmxlUmVjb3JkcygpKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24udXBkYXRlVG90YWxSZWNvcmRzQ291bnQodGhpcy5wYWdpbmcucmVjb3Jkcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb3VudCA9IHJlc3BvbnNlLnBhZ2luZyAmJiByZXNwb25zZS5wYWdpbmcucmVjb3Jkc1xuICAgICAgICAgIHx8IEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZGF0YSkgJiYgcmVzcG9uc2UuZGF0YS5sZW5ndGg7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24udXBkYXRlVmlzaWJsZVJlY29yZHNDb3VudChjb3VudCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnVwZGF0ZVRvdGFsUmVjb3Jkc0NvdW50KGNvdW50KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWRSb3dzSW50ZXJzZWN0aW9uKHRoaXMuZGF0YUNvbnRyb2xsZXIudmlzaWJsZVJvd3NEYXRhKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2lsbCBkbyBzb21lIGFjdGlvbnMgaWYgeW91IHJlbW92ZWQgaXRlbSBhbmQgaXRlbSB3YXMgbGFzdCBvbiBoaXMgb3duIHBhZ2VcbiAgICpcbiAgICogRXg6IGlmIGxpc3QgaGFzIDMgcGFnZXMgYW5kIG9uIHRoaXJkIHBhZ2UgeW91IGhhdmUgb25seSBvbmUgaXRlbS4gQW5kIHlvdSBqdXN0IGRlbGV0ZWQgdGhpcyBpdGVtLlxuICAgKiBZb3UgbXVzdCBnbyB0byBzZWNvbmQgcGFnZSwgYnV0IGlmIGl0IHdhcyBsYXN0IHBhZ2UgYW5kIHlvdSBjYW4ndCBnbyBiYWNrIC0+IGp1c3QgcmVsb2FkXG4gICAqXG4gICAqIEBwYXJhbSBkZWxldGVkQ291bnRcbiAgICovXG4gIHByaXZhdGUgX25vRGF0YVBhZ2luYXRpb25VcGRhdGUoZGVsZXRlZENvdW50KSB7XG4gICAgaWYgKCF0aGlzLmRhdGFDb250cm9sbGVyLmhhc0RhdGEpIHtcbiAgICAgIGlmICh0aGlzLnBhZ2luZy5wYWdlID4gMSkge1xuICAgICAgICB0aGlzLnBhZ2luZy5nb1RvUGFnZSh0aGlzLnBhZ2luZy5wYWdlIC0gMSB8fCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wYWdpbmcucmVjb3JkcyAtPSBkZWxldGVkQ291bnQ7XG4gICAgdGhpcy5wYWdpbmcudXBkYXRlUGFnaW5hdGlvbigpO1xuXG4gICAgaWYgKHRoaXMuZGF0YUNvbnRyb2xsZXIuaGFzRGF0YSAmJiB0aGlzLnNlbGVjdGlvbikge1xuICAgICAgdGhpcy5zZWxlY3Rpb24udXBkYXRlVmlzaWJsZVJlY29yZHNDb3VudCh0aGlzLmRhdGFDb250cm9sbGVyLnZpc2libGVSb3dzQ291bnQpO1xuICAgICAgdGhpcy5zZWxlY3Rpb24udXBkYXRlVG90YWxSZWNvcmRzQ291bnQodGhpcy5wYWdpbmcucmVjb3Jkcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRlbXBvcmFyeSBzb2x1dGlvbiwgd2lsbCBkbyBhdXRvIHN1YnNjcmliZSBpZiB3YXMgcmV0dXJuZWQgT2JzZXJ2YWJsZS5cbiAgICpcbiAgICogVE9ETzogTU9WRSBUSElTIFBFQUNFIE9GIENPREUgVE8gU1BFQ0lBTCBQTEFDRVxuICAgKlxuICAgKiBAcGFyYW0gcmVzdG9yZUNsaWNrQ2FsbGJhY2tcbiAgICogQHBhcmFtIHJvd1xuICAgKi9cbiAgcHJpdmF0ZSBfcmVzdG9yZUNsaWNrKHJlc3RvcmVDbGlja0NhbGxiYWNrLCByb3cpIHtcbiAgICBjb25zdCByZXN0b3JlQ2xpY2tSZXN1bHQgPSByZXN0b3JlQ2xpY2tDYWxsYmFjayhyb3cpO1xuXG4gICAgaWYgKHJlc3RvcmVDbGlja1Jlc3VsdCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgIHJlc3RvcmVDbGlja1Jlc3VsdFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKCkgPT4gdGhpcy5yZWxvYWQoKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlU29ydGluZ0NvbHVtbnMoKTogdm9pZCB7XG4gICAgdGhpcy5zb3J0aW5nLmNsZWFyU29ydGFibGVDb2x1bW5zKCk7XG4gICAgdGhpcy5jb2x1bW5zLmNvbHVtbnNcbiAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uLnNvcnRhYmxlICYmIGNvbHVtbi52aXNpYmxlKVxuICAgICAgLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICB0aGlzLnNvcnRpbmcuYWRkU29ydGFibGVDb2x1bW4oY29sdW1uKTtcbiAgICAgIH0pO1xuICB9XG59XG4iXX0=
712
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9jbGFzc2VzL2xpc3QtY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQ2tFLFFBQVEsR0FDaEYsTUFBTSxvQkFBb0IsQ0FBQztBQUc1QixPQUFPLEVBQ0wsZUFBZSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsT0FBTyxHQUNyRSxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxVQUFVLEVBQUUsWUFBWSxFQUN4QixLQUFLLEVBQ0wsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUN6RCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQXFCbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFD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U0FBUyxDQUFDO2dCQUNULElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2FBQzFCLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDSCxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87YUFDakIsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUM7YUFDckQsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtcbiAgQ2hhbmdlRm4sIEZpbHRlckNvbmZpZywgRnNGaWx0ZXJBdXRvUmVsb2FkLCBJRmlsdGVyU2F2ZWRGaWx0ZXJzQ29uZmlnLCBJdGVtVHlwZSxcbn0gZnJvbSAnQGZpcmVzdGl0Y2gvZmlsdGVyJztcbmltcG9ydCB7IFNlbGVjdGlvbkRpYWxvZyB9IGZyb20gJ0BmaXJlc3RpdGNoL3NlbGVjdGlvbic7XG5cbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgRU1QVFksIGZyb20sIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGNhdGNoRXJyb3IsIGRlYm91bmNlVGltZSxcbiAgZGVsYXksXG4gIG1hcCwgbWFwVG8sIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRha2UsIHRha2VVbnRpbCwgdGFwLFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmltcG9ydCB7IFBhZ2VDaGFuZ2VUeXBlIH0gZnJvbSAnLi4vZW51bXMvcGFnZS1jaGFuZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IEZzTGlzdFN0YXRlIH0gZnJvbSAnLi4vZW51bXMvc3RhdGUuZW51bSc7XG5pbXBvcnQge1xuICBGc0xpc3RBZnRlckNvbnRlbnRJbml0Rm4sXG4gIEZzTGlzdEFmdGVyRmV0Y2hGbixcbiAgRnNMaXN0QWZ0ZXJJbml0Rm4sXG4gIEZzTGlzdEJlZm9yZUZldGNoRm4sXG4gIEZzTGlzdENvbmZpZyxcbiAgRnNMaXN0RW1wdHlTdGF0ZUNvbmZpZyxcbiAgRnNMaXN0RmV0Y2hGbixcbiAgRnNMaXN0RmV0Y2hPcHRpb25zLFxuICBGc0xpc3RGZXRjaFN1YnNjcmlwdGlvbixcbiAgRnNMaXN0R3JvdXBDb25maWcsXG4gIEZzTGlzdExvYWRNb3JlQ29uZmlnLFxuICBGc0xpc3ROb1Jlc3VsdHNDb25maWcsXG4gIEZzTGlzdFBlcnNpdGFuY2UsXG4gIEZzTGlzdFJlc3RvcmVDb25maWcsXG4gIEZzTGlzdFNlbGVjdGlvbkNvbmZpZyxcbiAgRnNMaXN0VHJhY2tCeUZuLFxuICBGc1BhZ2luZyxcbiAgUGFnZUNoYW5nZSxcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTb3J0aW5nRGlyZWN0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbi5tb2RlbCc7XG5pbXBvcnQgeyBSb3dBY3Rpb24gfSBmcm9tICcuLi9tb2RlbHMvcm93LWFjdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBTdHlsZUNvbmZpZyB9IGZyb20gJy4uL21vZGVscy9zdHlsZUNvbmZpZy5tb2RlbCc7XG5cbmltcG9ydCB7IENvbHVtbnNDb250cm9sbGVyIH0gZnJvbSAnLi9jb2x1bW5zLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgRGF0YUNvbnRyb2xsZXIgfSBmcm9tICcuL2RhdGEtY29udHJvbGxlcic7XG5pbXBvcnQgeyBFeHRlcm5hbFBhcmFtc0NvbnRyb2xsZXIgfSBmcm9tICcuL2V4dGVybmFsLXBhcmFtcy1jb250cm9sbGVyJztcbmltcG9ydCB7IEFjdGlvbnNDb250cm9sbGVyIH0gZnJvbSAnLi9pbmRleCc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQ29udHJvbGxlciB9IGZyb20gJy4vcGFnaW5hdGlvbi1jb250cm9sbGVyJztcbmltcG9ydCB7IFBlcnNpc3RhbmNlQ29udHJvbGxlciB9IGZyb20gJy4vcGVyc2lzdGFuY2UtY29udHJvbGxlcic7XG5pbXBvcnQgeyBTZWxlY3Rpb25Db250cm9sbGVyIH0gZnJvbSAnLi9zZWxlY3Rpb24tY29udHJvbGxlcic7XG5pbXBvcnQgeyBTb3J0aW5nQ29udHJvbGxlciB9IGZyb20gJy4vc29ydGluZy1jb250cm9sbGVyJztcblxuY29uc3Qgc2hvd0RlbGV0ZWRGaWx0ZXJLZXkgPSAnc2hvd0RlbGV0ZWQnO1xuXG5cbmV4cG9ydCBjbGFzcyBMaXN0IHtcblxuICBwdWJsaWMgaGVhZGluZzogc3RyaW5nO1xuICBwdWJsaWMgdHJhY2tCeTogc3RyaW5nO1xuICBwdWJsaWMgc3ViaGVhZGluZzogc3RyaW5nO1xuICBwdWJsaWMgYXV0b0ZvY3VzOiBib29sZWFuO1xuICBwdWJsaWMgcm93SG92ZXJIaWdobGlnaHQ6IGJvb2xlYW47XG4gIHB1YmxpYyByb3dBY3Rpb25zUmF3OiBhbnlbXTtcbiAgcHVibGljIGdyb3VwQWN0aW9uc1JhdzogYW55W107XG4gIHB1YmxpYyByb3dDbGFzcztcbiAgcHVibGljIHJvd0V2ZW50czogYW55O1xuICBwdWJsaWMgcmVzdG9yZTogRnNMaXN0UmVzdG9yZUNvbmZpZztcbiAgcHVibGljIHBlcnNpc3Q6IEZzTGlzdFBlcnNpdGFuY2U7XG4gIHB1YmxpYyBmaWx0ZXJzID0gW107XG4gIHB1YmxpYyBmaWx0ZXJJbml0Q2I6IENoYW5nZUZuO1xuICBwdWJsaWMgZmlsdGVyQ2hhbmdlQ2I6IENoYW5nZUZuO1xuICBwdWJsaWMgc2F2ZWRGaWx0ZXJzOiBJRmlsdGVyU2F2ZWRGaWx0ZXJzQ29uZmlnO1xuICBwdWJsaWMgbm9SZXN1bHRzOiBGc0xpc3ROb1Jlc3VsdHNDb25maWc7XG4gIHB1YmxpYyBlbXB0eVN0YXRlOiBGc0xpc3RFbXB0eVN0YXRlQ29uZmlnO1xuICBwdWJsaWMgZmV0Y2hGbjogRnNMaXN0RmV0Y2hGbjtcbiAgcHVibGljIGJlZm9yZUZldGNoRm46IEZzTGlzdEJlZm9yZUZldGNoRm47XG4gIHB1YmxpYyBhZnRlckZldGNoRm46IEZzTGlzdEFmdGVyRmV0Y2hGbjtcbiAgcHVibGljIGFmdGVyQ29udGVudEluaXQ6IEZzTGlzdEFmdGVyQ29udGVudEluaXRGbjtcbiAgcHVibGljIGFmdGVySW5pdDogRnNMaXN0QWZ0ZXJJbml0Rm47XG4gIHB1YmxpYyBzdHlsZTtcbiAgcHVibGljIGhhc1Jvd0FjdGlvbnM7XG4gIHB1YmxpYyBwYWdpbmcgPSBuZXcgUGFnaW5hdGlvbkNvbnRyb2xsZXIoKTtcbiAgcHVibGljIGNvbHVtbnMgPSBuZXcgQ29sdW1uc0NvbnRyb2xsZXIoKTtcbiAgcHVibGljIGFjdGlvbnMgPSBuZXcgQWN0aW9uc0NvbnRyb2xsZXIoKTtcbiAgcHVibGljIGRhdGFDb250cm9sbGVyID0gbmV3IERhdGFDb250cm9sbGVyKCk7XG4gIHB1YmxpYyBzb3J0aW5nID0gbmV3IFNvcnRpbmdDb250cm9sbGVyKCk7XG4gIHB1YmxpYyBleHRlcm5hbFBhcmFtczogRXh0ZXJuYWxQYXJhbXNDb250cm9sbGVyO1xuICBwdWJsaWMgc2VsZWN0aW9uOiBTZWxlY3Rpb25Db250cm9sbGVyO1xuICBwdWJsaWMgZmlsdGVyQ29uZmlnOiBGaWx0ZXJDb25maWcgPSBudWxsO1xuICBwdWJsaWMgbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHVibGljIGZldGNoQ29tcGxldGUkID0gbmV3IFN1YmplY3Q8eyBzY3JvbGxJbnRvVmlldz86IGJvb2xlYW4gfT4oKTtcbiAgcHVibGljIGZpbHRlcnNSZWFkeSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwdWJsaWMgc3RhdHVzID0gdHJ1ZTtcbiAgcHVibGljIGNoaXBzID0gZmFsc2U7XG4gIHB1YmxpYyBmaWx0ZXJJbnB1dCA9IHRydWU7XG4gIHB1YmxpYyBxdWVyeVBhcmFtID0gZmFsc2U7XG4gIHB1YmxpYyByZXN0b3JlTW9kZSA9IGZhbHNlO1xuICBwdWJsaWMgYXV0b1JlbG9hZDogRnNGaWx0ZXJBdXRvUmVsb2FkO1xuXG4gIHB1YmxpYyBpbml0aWFsRmV0Y2ggPSB0cnVlO1xuXG4gIC8vIEVtcHR5IHN0YXRlXG4gIHB1YmxpYyBlbXB0eVN0YXRlRW5hYmxlZCA9IGZhbHNlO1xuICBwdWJsaWMgZW1wdHlTdGF0ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHByaXZhdGUgX2ZldGNoJCA9IG5ldyBTdWJqZWN0PEZzTGlzdEZldGNoU3Vic2NyaXB0aW9uIHwgdm9pZD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsdGVyc1F1ZXJ5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZWNvcmQ8c3RyaW5nLCBhbnk+PihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aXZlRmlsdGVyc0NvdW50JCA9IHRoaXMuX2ZpbHRlcnNRdWVyeVxuICAgIC5waXBlKG1hcCgodikgPT4gT2JqZWN0LmtleXModikubGVuZ3RoKSwgc2hhcmVSZXBsYXkoKSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfaGVhZGVyQ29uZmlnOiBTdHlsZUNvbmZpZztcbiAgcHJpdmF0ZSByZWFkb25seSBfZ3JvdXBDZWxsQ29uZmlnOiBTdHlsZUNvbmZpZztcbiAgcHJpdmF0ZSByZWFkb25seSBfY2VsbENvbmZpZzogU3R5bGVDb25maWc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Zvb3RlckNvbmZpZzogU3R5bGVDb25maWc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfY29uZmlnOiBGc0xpc3RDb25maWcgPSB7fSxcbiAgICBwcml2YXRlIF9zZWxlY3Rpb25EaWFsb2c6IFNlbGVjdGlvbkRpYWxvZyxcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIF9yb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBfcGVyc2lzdGFuY2U6IFBlcnNpc3RhbmNlQ29udHJvbGxlcixcbiAgICBwcml2YXRlIF9pbkRpYWxvZzogYm9vbGVhbixcbiAgKSB7XG4gICAgdGhpcy5faW5pdGlhbGl6ZShfY29uZmlnKTtcbiAgICB0aGlzLl9oZWFkZXJDb25maWcgPSBuZXcgU3R5bGVDb25maWcoX2NvbmZpZy5oZWFkZXIpO1xuICAgIHRoaXMuX2dyb3VwQ2VsbENvbmZpZyA9IG5ldyBTdHlsZUNvbmZpZyhfY29uZmlnLmNlbGwpO1xuICAgIHRoaXMuX2NlbGxDb25maWcgPSBuZXcgU3R5bGVDb25maWcoX2NvbmZpZy5jZWxsKTtcbiAgICB0aGlzLl9mb290ZXJDb25maWcgPSBuZXcgU3R5bGVDb25maWcoX2NvbmZpZy5mb290ZXIpO1xuICAgIHRoaXMuX2luaXRpYWxpemVkJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAodGhpcy5pbml0aWFsRmV0Y2gpIHtcbiAgICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIuc2V0T3BlcmF0aW9uKEZzTGlzdFN0YXRlLkxvYWQpO1xuICAgICAgdGhpcy5fZmV0Y2gkLm5leHQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBmZXRjaCQoKTogT2JzZXJ2YWJsZTxGc0xpc3RGZXRjaFN1YnNjcmlwdGlvbiB8IHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZmV0Y2gkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNTYXZlZEZpbHRlcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5maWx0ZXJDb25maWcuc2F2ZWRGaWx0ZXJzO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWx0ZXJzUXVlcnkoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnNRdWVyeS5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBhY3RpdmVGaWx0ZXJzQ291bnQkKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUZpbHRlcnNDb3VudCQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlc3Ryb3kkKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rlc3Ryb3kkO1xuICB9XG5cbiAgcHVibGljIGdldCBpbml0aWFsaXplZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2luaXRpYWxpemVkJDtcbiAgfVxuXG4gIHB1YmxpYyBmZXRjaFJlbW90ZShxdWVyeSkge1xuICAgIGNvbnN0IG9wdGlvbnM6IEZzTGlzdEZldGNoT3B0aW9ucyA9IHtcbiAgICAgIHN0YXRlOiB0aGlzLmRhdGFDb250cm9sbGVyLm9wZXJhdGlvbixcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0OiBhbnkgPSB0aGlzLmZldGNoRm4ocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UgPyBmcm9tKHJlc3VsdCkgOiByZXN1bHQ7XG4gIH1cblxuICAvLyBwdWJsaWMgbG9hZExvY2FsKCkge1xuICAvLyAgIHRoaXMucGFnaW5nLnVwZGF0ZVBhZ2luZ01hbnVhbCh0aGlzLl9yb3dzKTtcbiAgLy8gICBjb25zdCBmcm9tID0gKHRoaXMucGFnaW5nLnBhZ2UgLSAxKSAqIHRoaXMucGFnaW5nLmxpbWl0O1xuICAvLyAgIGNvbnN0IHRvID0gKHRoaXMucGFnaW5nLnBhZ2UgPT09IDEpID8gdGhpcy5wYWdpbmcubGltaXQgOiB0aGlzLnBhZ2luZy5saW1pdCAqIHRoaXMucGFnaW5nLnBhZ2U7XG4gIC8vICAgY29uc3Qgc2xpY2VPZlJvd3MgPSB0aGlzLl9yb3dzLnNsaWNlKGZyb20sIHRvKTtcbiAgLy8gICB0aGlzLmRhdGEkLm5leHQoc2xpY2VPZlJvd3MpO1xuICAvLyB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSB0ZW1wbGF0ZXMgZm9yIHVzaW5nXG4gICAqXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZXNcbiAgICovXG4gIHB1YmxpYyB0cmFuZm9ybVRlbXBsYXRlc1RvQ29sdW1ucyh0ZW1wbGF0ZXMpIHtcbiAgICBjb25zdCBkZWZhdWx0Q29uZmlncyA9IHtcbiAgICAgIGhlYWRlcjogdGhpcy5faGVhZGVyQ29uZmlnLFxuICAgICAgZ3JvdXBDZWxsOiB0aGlzLl9ncm91cENlbGxDb25maWcsXG4gICAgICBjZWxsOiB0aGlzLl9jZWxsQ29uZmlnLFxuICAgICAgZm9vdGVyOiB0aGlzLl9mb290ZXJDb25maWcsXG4gICAgfTtcblxuICAgIHRoaXMuY29sdW1ucy5zZXREZWZhdWx0cyhkZWZhdWx0Q29uZmlncyk7XG4gICAgdGhpcy5jb2x1bW5zLmluaXRpYWxpemVDb2x1bW5zKHRlbXBsYXRlcyk7XG5cbiAgICAvLyBTZXQgc29ydEJ5IGRlZmF1bHQgY29sdW1uXG4gICAgdGhpcy5fdXBkYXRlU29ydGluZ0NvbHVtbnMoKTtcblxuICAgIC8vIERlZmF1bHQgc29ydCBieVxuICAgIGNvbnN0IGV4dGVybmFsU29ydGluZyA9IHRoaXMuZXh0ZXJuYWxQYXJhbXMuZXh0ZXJuYWxTb3J0aW5nO1xuICAgIGNvbnN0IGluaXRpYWxTb3J0Q29uZmlnID0gZXh0ZXJuYWxTb3J0aW5nIHx8IHRoaXMuX2NvbmZpZy5zb3J0O1xuICAgIHRoaXMuc29ydGluZy5pbml0aWFsU29ydEJ5KGluaXRpYWxTb3J0Q29uZmlnKTtcblxuICAgIGlmIChleHRlcm5hbFNvcnRpbmcgJiYgIXRoaXMuc29ydGluZy5pc0RlZmluZWQpIHtcbiAgICAgIHRoaXMuZXh0ZXJuYWxQYXJhbXMuY2xlYXJTb3J0aW5nUGFyYW1zKCk7XG5cbiAgICAgIGNvbnNvbGUud2FybignTm90IGFibGUgdG8gcmVzdG9yZSBwZXJzaXN0ZWQgc29ydGluZyBwYXJhbXMuJywgZXh0ZXJuYWxTb3J0aW5nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0RmlsdGVycygpO1xuICB9XG5cbiAgcHVibGljIHJlbG9hZCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHRoaXMubG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmRhdGFDb250cm9sbGVyLnNldE9wZXJhdGlvbihGc0xpc3RTdGF0ZS5SZWxvYWQpO1xuICAgIHRoaXMuX2ZldGNoJC5uZXh0KG51bGwpO1xuXG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hDb21wbGV0ZSRcbiAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgLnBpcGUoICAgICAgXG4gICAgICAgIHRha2UoMSksICBcbiAgICAgICAgZGVsYXkoMCksXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhdGNoIHBhZ2UgY2hhbmdlc1xuICAgKi9cbiAgcHVibGljIHN1YnNjcmliZSgpIHtcbiAgICB0aGlzLnBhZ2luZy5wYWdlQ2hhbmdlZCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IFBhZ2VDaGFuZ2UpID0+IHtcbiAgICAgICAgdGhpcy5kYXRhQ29udHJvbGxlci5zZXRPcGVyYXRpb24oRnNMaXN0U3RhdGUuUGFnZUNoYW5nZSk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGFsbCByb3dzIGlmIGxpbWl0cyB3YXMgY2hhbmdlZFxuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gUGFnZUNoYW5nZVR5cGUuTGltaXRDaGFuZ2VkICYmIHRoaXMucGFnaW5nLmhhc1BhZ2VTdHJhdGVneSkge1xuICAgICAgICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIuY2xlYXJSb3dzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wYWdpbmcuaGFzT2Zmc2V0U3RyYXRlZ3kpIHtcbiAgICAgICAgICB0aGlzLnBhZ2luZy51cGRhdGVQYWdpbmF0aW9uKCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnVwZGF0ZVZpc2libGVSZWNvcmRzQ291bnQodGhpcy5wYWdpbmcuZ2V0VmlzaWJsZVJlY29yZHMoKSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi51cGRhdGVUb3RhbFJlY29yZHNDb3VudCh0aGlzLnBhZ2luZy5yZWNvcmRzKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnBhZ2VDaGFuZ2VkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnBhZ2luZy5sb2FkTW9yZUVuYWJsZWQpIHtcbiAgICAgICAgICBjb25zdCBjb250YWlucyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmNkay1vdmVybGF5LWNvbnRhaW5lcicpKS5zb21lKChvdmVybGF5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZWwubmF0aXZlRWxlbWVudC5jb250YWlucyhvdmVybGF5KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGxldCBlbCA9IHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgICBpZiAoIWNvbnRhaW5zKSB7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5fZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIGlmICgoTnVtYmVyKHJlY3QudG9wIHx8IDApICsgd2luZG93LnBhZ2VZT2Zmc2V0KSA8IHdpbmRvdy5pbm5lckhlaWdodCkge1xuICAgICAgICAgICAgICBlbCA9IGRvY3VtZW50LmJvZHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5mZXRjaENvbXBsZXRlJFxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGlmKGV2ZW50Py5zY3JvbGxJbnRvVmlldyA/PyB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZmV0Y2gkLm5leHQobnVsbCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuc29ydGluZy5zb3J0aW5nQ2hhbmdlZCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIuc2V0T3BlcmF0aW9uKEZzTGlzdFN0YXRlLlNvcnQpO1xuICAgICAgICB0aGlzLnBhZ2luZy5wYWdlID0gMTtcbiAgICAgICAgdGhpcy5fZmV0Y2gkLm5leHQobnVsbCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2xpc3RlblZpc2libGVDb2x1bW5DaGFuZ2VzKCk7XG4gICAgdGhpcy5fbGlzdGVuUm93c1JlbW92ZSgpO1xuICAgIHRoaXMuX2xpc3RlbkZldGNoKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGF0YSh0cmFja0J5PzogRnNMaXN0VHJhY2tCeUZuKSB7XG4gICAgbGV0IHJvd3NEYXRhID0gdGhpcy5kYXRhQ29udHJvbGxlclxuICAgICAgLnZpc2libGVSb3dzRGF0YTtcblxuICAgIGlmICh0cmFja0J5KSB7XG4gICAgICByb3dzRGF0YSA9IHJvd3NEYXRhXG4gICAgICAgIC5maWx0ZXIodHJhY2tCeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd3NEYXRhXG4gICAgICAubWFwKChkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBjbG9uZURlZXAoZGF0YSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNEYXRhKHRyYWNrQnk6IEZzTGlzdFRyYWNrQnlGbikge1xuICAgIHJldHVybiB0aGlzLmRhdGFDb250cm9sbGVyLnZpc2libGVSb3dzRGF0YS5zb21lKHRyYWNrQnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSBncm91cCBtb2RlIHN0YXR1c1xuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIHB1YmxpYyBncm91cEVuYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5kYXRhQ29udHJvbGxlci5ncm91cEVuYWJsZWQgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLmRhdGFDb250cm9sbGVyLmdyb3VwRW5hYmxlZCA9IHZhbHVlO1xuXG4gICAgICAvLyBDb21tZW50ZWQgb3V0IGJlY2F1c2UgUmF5IHdhbnRzIHRvIGNoYW5nZSBncm91cCBzdGF0dXMgaW4gZmV0Y2ggbWFwIHBpcGVcbiAgICAgIC8vIGFuZCBpdCB0cmlnZ2VycyBleHRyYSByZXF1ZXN0c1xuICAgICAgLy8gdGhpcy5yZWxvYWQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5wYWdpbmcpIHtcbiAgICAgIHRoaXMucGFnaW5nLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zb3J0aW5nKSB7XG4gICAgICB0aGlzLnNvcnRpbmcuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdGlvbikge1xuICAgICAgdGhpcy5zZWxlY3Rpb24uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpbHRlckNvbmZpZykge1xuICAgICAgdGhpcy5maWx0ZXJDb25maWcgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmV4dGVybmFsUGFyYW1zKSB7XG4gICAgICB0aGlzLmV4dGVybmFsUGFyYW1zLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbHVtbnMuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dChudWxsKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy5kYXRhQ29udHJvbGxlci5kZXN0cm95KCk7XG4gIH1cblxuICAvKipcbiAgICogRG8gaW5pdGlhbGl6YXRpb24gb2YgdGFibGVcbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZ1xuICAgKi9cbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZShjb25maWc6IEZzTGlzdENvbmZpZykge1xuICAgIHRoaXMuX2luaXRWYXJpYWJsZXMoY29uZmlnKTtcbiAgICB0aGlzLl9pbml0RGVmYXVsdE9wdGlvbnMoY29uZmlnKTtcbiAgICB0aGlzLl9pbml0UmVzdG9yZSgpO1xuICAgIHRoaXMuX2luaXRBY3Rpb25zKGNvbmZpZy5hY3Rpb25zKTtcbiAgICB0aGlzLl9pbml0UGFnaW5nKGNvbmZpZy5wYWdpbmcsIGNvbmZpZy5sb2FkTW9yZSk7XG4gICAgdGhpcy5faW5pdFNlbGVjdGlvbihjb25maWcuc2VsZWN0aW9uLCB0aGlzLl9zZWxlY3Rpb25EaWFsb2cpO1xuICAgIHRoaXMuX2luaXRHcm91cHMoY29uZmlnLmdyb3VwKTtcbiAgICB0aGlzLl9pbml0RXh0ZXJuYWxQYXJhbXNDb250cm9sbGVyKCk7XG4gICAgdGhpcy5faW5pdGlhbGl6ZURhdGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRWYXJpYWJsZXMoY29uZmlnOiBGc0xpc3RDb25maWcpIHtcbiAgICB0aGlzLmF1dG9Gb2N1cyA9IGNvbmZpZy5hdXRvRm9jdXM7XG4gICAgdGhpcy5yb3dIb3ZlckhpZ2hsaWdodCA9IGNvbmZpZy5yb3dIb3ZlckhpZ2hsaWdodCA/PyB0cnVlO1xuICAgIHRoaXMuaGVhZGluZyA9IGNvbmZpZy5oZWFkaW5nO1xuICAgIHRoaXMudHJhY2tCeSA9IGNvbmZpZy50cmFja0J5O1xuICAgIHRoaXMuc3ViaGVhZGluZyA9IGNvbmZpZy5zdWJoZWFkaW5nO1xuICAgIHRoaXMucm93QWN0aW9uc1JhdyA9IGNvbmZpZy5yb3dBY3Rpb25zO1xuICAgIHRoaXMucm93Q2xhc3MgPSBjb25maWcucm93Q2xhc3M7XG4gICAgdGhpcy5yb3dFdmVudHMgPSBjb25maWcucm93RXZlbnRzO1xuICAgIHRoaXMucmVzdG9yZSA9IGNvbmZpZy5yZXN0b3JlO1xuICAgIHRoaXMucGVyc2lzdCA9IGNvbmZpZy5wZXJzaXN0O1xuICAgIHRoaXMuZmlsdGVycyA9IGNvbmZpZy5maWx0ZXJzID8/IFtdO1xuICAgIHRoaXMuZmlsdGVySW5pdENiID0gY29uZmlnLmZpbHRlckluaXQ7XG4gICAgdGhpcy5maWx0ZXJDaGFuZ2VDYiA9IGNvbmZpZy5maWx0ZXJDaGFuZ2U7XG4gICAgdGhpcy5zYXZlZEZpbHRlcnMgPSBjb25maWcuc2F2ZWRGaWx0ZXJzO1xuICAgIHRoaXMubm9SZXN1bHRzID0gY29uZmlnLm5vUmVzdWx0cztcbiAgICB0aGlzLmVtcHR5U3RhdGUgPSBjb25maWcuZW1wdHlTdGF0ZTtcbiAgICB0aGlzLmZldGNoRm4gPSBjb25maWcuZmV0Y2g7XG4gICAgdGhpcy5hZnRlckZldGNoRm4gPSBjb25maWcuYWZ0ZXJGZXRjaDtcbiAgICB0aGlzLmJlZm9yZUZldGNoRm4gPSBjb25maWcuYmVmb3JlRmV0Y2g7XG4gICAgdGhpcy5hZnRlckluaXQgPSBjb25maWcuYWZ0ZXJJbml0O1xuICAgIHRoaXMuc3R5bGUgPSBjb25maWcuc3R5bGU7XG4gICAgdGhpcy5hdXRvUmVsb2FkID0gY29uZmlnLmF1dG9SZWxvYWQ7XG4gICAgdGhpcy5jb2x1bW5zLmluaXRDb25maWcoY29uZmlnLmNvbHVtbik7XG4gIH1cblxuICAvKipcbiAgICogSnVzdCBpbml0IG9wdGlvbnMgYnkgZGVmYXVsdCBpdCBpdCB3YXNuJ3Qgc3BlY2lmaWVkXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWdcbiAgICovXG4gIHByaXZhdGUgX2luaXREZWZhdWx0T3B0aW9ucyhjb25maWcpIHtcbiAgICAvLyBXZSBzaG91bGQgcHJldmVudCBpbml0aWFsIGZldGNoIGluIGNhc2VzIHdoZW4gaXQgd2lsbCBiZSBmZXRjaGVkIGluIGFueSBjYXNlXG4gICAgLy8gQXMgZXguIHNjcm9sbGFibGUgb3IgZmlsdGVyIHdpbGwgZG8gZmV0Y2ggaW4gYW55IGNhc2VzXG4gICAgaWYgKGNvbmZpZy5pbml0aWFsRmV0Y2ggPT09IGZhbHNlIHx8IGNvbmZpZy5zY3JvbGxhYmxlKSB7IC8vIFRPRE8gZml4bWUgYWZ0ZXIgdHNtb2RlbCB2ZXJzaW9uIHVwZGF0ZVxuICAgICAgdGhpcy5pbml0aWFsRmV0Y2ggPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5zdGF0dXMgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnN0YXR1cyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmNoaXBzKSB7XG4gICAgICB0aGlzLmNoaXBzID0gY29uZmlnLmNoaXBzO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmZpbHRlcklucHV0ID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5maWx0ZXJJbnB1dCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9pbkRpYWxvZykge1xuICAgICAgdGhpcy5xdWVyeVBhcmFtID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucXVlcnlQYXJhbSA9IChjb25maWcucXVlcnlQYXJhbSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICA/IHRydWVcbiAgICAgICAgOiBjb25maWcucXVlcnlQYXJhbTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLnNvcnRzKSB7XG4gICAgICB0aGlzLnNvcnRpbmcuaW5pdEZha2VDb2x1bW5zKGNvbmZpZy5zb3J0cyk7XG4gICAgfVxuICAgIGlmICghY29uZmlnLnRyYWNrQnkpIHtcbiAgICAgIHRoaXMudHJhY2tCeSA9ICdpZCc7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5hZnRlckNvbnRlbnRJbml0KSB7XG4gICAgICB0aGlzLmFmdGVyQ29udGVudEluaXQgPSAoKSA9PiB7XG4gICAgICAgIGNvbmZpZy5hZnRlckNvbnRlbnRJbml0KHRoaXMucGFnaW5nLnF1ZXJ5LCB0aGlzLmRhdGFDb250cm9sbGVyLnZpc2libGVSb3dzKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXQgcmVzdG9yZSByb3cgYWN0aW9uIGFuZCBhcHBlbmQgU2hvdyBEZWxldGVkIG9wdGlvbiBpbnRvIGZpbHRlcnNcbiAgICovXG4gIHByaXZhdGUgX2luaXRSZXN0b3JlKCkge1xuICAgIGlmICh0aGlzLnJlc3RvcmUpIHtcbiAgICAgIGNvbnN0IHJlc3RvcmVBY3Rpb24gPSBuZXcgUm93QWN0aW9uKHtcbiAgICAgICAgbGFiZWw6IHRoaXMucmVzdG9yZS5tZW51TGFiZWwgfHwgJ1Jlc3RvcmUnLFxuICAgICAgICBtZW51OiB0cnVlLFxuICAgICAgICBjbGljazogKHJvdykgPT4ge1xuICAgICAgICAgIHRoaXMuX3Jlc3RvcmVDbGljayh0aGlzLnJlc3RvcmUuY2xpY2ssIHJvdyk7XG4gICAgICAgIH0sIC8vIFRPRE8gZml4IG1lLCBtb3ZlIHRvIHNwZWNpYWwgZmlsZVxuICAgICAgICByZXN0b3JlOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICghdGhpcy5yb3dBY3Rpb25zUmF3KSB7XG4gICAgICAgIHRoaXMucm93QWN0aW9uc1JhdyA9IFtdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJvd0FjdGlvbnNSYXcucHVzaChyZXN0b3JlQWN0aW9uKTtcblxuICAgICAgaWYgKCF0aGlzLmZpbHRlcnMpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJzID0gW107XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnJlc3RvcmUuZmlsdGVyICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgbmFtZTogc2hvd0RlbGV0ZWRGaWx0ZXJLZXksXG4gICAgICAgICAgdHlwZTogSXRlbVR5cGUuQ2hlY2tib3gsXG4gICAgICAgICAgbGFiZWw6IHRoaXMucmVzdG9yZS5maWx0ZXJMYWJlbCB8fCAnU2hvdyBEZWxldGVkJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogSW5pdCBwYWdpbmdcbiAgICpcbiAgICogQHBhcmFtIHBhZ2luZ0NvbmZpZ1xuICAgKiBAcGFyYW0gbG9hZE1vcmVcbiAgICovXG4gIHByaXZhdGUgX2luaXRQYWdpbmcocGFnaW5nQ29uZmlnOiBGc1BhZ2luZyB8IGZhbHNlLCBsb2FkTW9yZTogRnNMaXN0TG9hZE1vcmVDb25maWcgfCBib29sZWFuKSB7XG4gICAgdGhpcy5wYWdpbmcuaW5pdFdpdGhDb25maWcocGFnaW5nQ29uZmlnLCBsb2FkTW9yZSk7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXQgYWN0aW9ucyBieSBjYXRlZ29yaWVzXG4gICAqL1xuICBwcml2YXRlIF9pbml0QWN0aW9ucyhhY3Rpb25zKSB7XG4gICAgaWYgKGFjdGlvbnMpIHtcbiAgICAgIHRoaXMuYWN0aW9ucy5zZXRBY3Rpb25zKGFjdGlvbnMpO1xuICAgIH1cblxuICAgIHRoaXMuaGFzUm93QWN0aW9ucyA9XG4gICAgICAodGhpcy5yb3dBY3Rpb25zUmF3ICYmIHRoaXMucm93QWN0aW9uc1Jhdy5sZW5ndGggPiAwKVxuICAgICAgfHwgKHRoaXMuZ3JvdXBBY3Rpb25zUmF3ICYmIHRoaXMuZ3JvdXBBY3Rpb25zUmF3Lmxlbmd0aCA+IDApO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdFNlbGVjdGlvbihcbiAgICBzZWxlY3Rpb25Db25maWc6IEZzTGlzdFNlbGVjdGlvbkNvbmZpZyxcbiAgICBzZWxlY3Rpb25EaWFsb2c6IFNlbGVjdGlvbkRpYWxvZyxcbiAgKSB7XG4gICAgaWYgKHNlbGVjdGlvbkNvbmZpZykge1xuICAgICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uQ29udHJvbGxlcihzZWxlY3Rpb25Db25maWcsIHRoaXMudHJhY2tCeSwgc2VsZWN0aW9uRGlhbG9nKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFJvd3NDYWxsYmFjaygoKSA9PiB0aGlzLmRhdGFDb250cm9sbGVyLnZpc2libGVSb3dzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pbml0aWFsaXplRGF0YSgpIHtcbiAgICB0aGlzLmRhdGFDb250cm9sbGVyLnNldEFkZGl0aW9uYWxDb25maWdzKHtcbiAgICAgIGxvYWRNb3JlRW5hYmxlZDogdGhpcy5wYWdpbmcubG9hZE1vcmVFbmFibGVkLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdEdyb3Vwcyhncm91cENvbmZpZzogRnNMaXN0R3JvdXBDb25maWcpIHtcbiAgICBpZiAoZ3JvdXBDb25maWcpIHtcbiAgICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIuc2V0R3JvdXBDb25maWcoZ3JvdXBDb25maWcpO1xuICAgICAgdGhpcy5ncm91cEFjdGlvbnNSYXcgPSBncm91cENvbmZpZy5hY3Rpb25zO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2luaXRFeHRlcm5hbFBhcmFtc0NvbnRyb2xsZXIoKSB7XG4gICAgdGhpcy5leHRlcm5hbFBhcmFtcyA9IG5ldyBFeHRlcm5hbFBhcmFtc0NvbnRyb2xsZXIoXG4gICAgICB0aGlzLl9yb3V0ZXIsXG4gICAgICB0aGlzLl9yb3V0ZSxcbiAgICAgIHRoaXMuX3BlcnNpc3RhbmNlLFxuICAgICAgdGhpcy5wYWdpbmcsXG4gICAgICB0aGlzLnNvcnRpbmcsXG4gICAgICB0aGlzLnF1ZXJ5UGFyYW0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gZmV0Y2gkIGV2ZW50IHdpdGggZGVib3VuY2VcbiAgICovXG4gIHByaXZhdGUgX2xpc3RlbkZldGNoKCkge1xuICAgIGxldCBmZXRjaCQgPSB0aGlzLmZldGNoJDtcblxuICAgIC8vIFNob3VsZCB3YWl0IHVudGlsIHNhdmVkIGZpbHRlcnMgbm90IGxvYWRlZFxuICAgIGlmICh0aGlzLmZpbHRlcnMpIHtcbiAgICAgIGZldGNoJCA9IGNvbWJpbmVMYXRlc3QoW2ZldGNoJCwgdGhpcy5maWx0ZXJzUmVhZHkkXSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChbcGFyYW1zXSkgPT4gcGFyYW1zKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmZXRjaCRcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoNTApLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24/LmNsb3NlU2VsZWN0aW9uRGlhbG9nKCk7XG4gICAgICAgIH0pLFxuICAgICAgICBtYXAoKHBhcmFtczogRnNMaXN0RmV0Y2hTdWJzY3JpcHRpb24pID0+IHtcbiAgICAgICAgICBsZXQgcXVlcnkgPSB7IC4uLnRoaXMuZmlsdGVyc1F1ZXJ5IH07XG5cbiAgICAgICAgICBpZiAodGhpcy5wYWdpbmcuaGFzT2Zmc2V0U3RyYXRlZ3kgJiYgcGFyYW1zPy5sb2FkT2Zmc2V0KSB7XG4gICAgICAgICAgICBxdWVyeSA9IE9iamVjdC5hc3NpZ24ocXVlcnksIHRoaXMucGFnaW5nLmxvYWREZWxldGVkT2Zmc2V0UXVlcnkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhbGxSZWNvcmRzUmFuZ2VOZWVkZWQgPSAodGhpcy5pbml0aWFsRmV0Y2hcbiAgICAgICAgICAgICAgfHwgdGhpcy5kYXRhQ29udHJvbGxlci5vcGVyYXRpb24gPT09IEZzTGlzdFN0YXRlLlJlbG9hZFxuICAgICAgICAgICAgKSAmJiB0aGlzLnBhZ2luZy5sb2FkTW9yZUVuYWJsZWQ7XG5cbiAgICAgICAgICAgIHF1ZXJ5ID0gYWxsUmVjb3Jkc1JhbmdlTmVlZGVkID8gT2JqZWN0LmFzc2lnbihxdWVyeSwgdGhpcy5wYWdpbmcubG9hZE1vcmVRdWVyeSkgOiBPYmplY3QuYXNzaWduKHF1ZXJ5LCB0aGlzLnBhZ2luZy5xdWVyeSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuc29ydGluZy5zb3J0aW5nQ29sdW1uKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9yZGVyOiBgJHt0aGlzLnNvcnRpbmcuc29ydGluZ0NvbHVtbi5uYW1lfSwke3RoaXMuc29ydGluZy5zb3J0aW5nQ29sdW1uLmRpcmVjdGlvbn1gLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5jb2x1bW5zLmNvbmZpZ3VyZWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgICAgICAuLi5xdWVyeSxcbiAgICAgICAgICAgICAgY29sdW1uczogdGhpcy5jb2x1bW5zLnZpc2libGVDb2x1bW5zTmFtZXMsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7IHBhcmFtcywgcXVlcnkgfTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoeyBwYXJhbXMsIHF1ZXJ5IH0pID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5jb2x1bW5zLmxvYWRGbkNvbmZpZ3VyZWQgJiYgIXRoaXMuY29sdW1ucy5jb2x1bW5zRmV0Y2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucy5sb2FkUmVtb3RlQ29sdW1uQ29uZmlncygpXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcFRvKHsgcGFyYW1zLCBxdWVyeSB9KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gb2YoeyBwYXJhbXMsIHF1ZXJ5IH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCh7IHBhcmFtcywgcXVlcnkgfSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmJlZm9yZUZldGNoRm4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJlZm9yZUZldGNoRm4ocXVlcnkpXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoYmVmb3JlRmV0Y2hRdWVyeSkgPT4gKHsgcGFyYW1zLCBxdWVyeTogYmVmb3JlRmV0Y2hRdWVyeSB9KSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG9mKHsgcGFyYW1zLCBxdWVyeSB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoeyBwYXJhbXMsIHF1ZXJ5IH0pID0+IHtcbiAgICAgICAgICBjb25zdCByZW1vdGVGZXRjaCA9IHRoaXMuZmV0Y2hSZW1vdGUocXVlcnkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3Q8YW55Pihbb2YoeyBwYXJhbXMsIHF1ZXJ5IH0pLCByZW1vdGVGZXRjaF0pO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcblxuICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChbcGFyYW1zUXVlcnksIHJlc3BvbnNlXSkgPT4ge1xuICAgICAgICB0aGlzLmluaXRpYWxGZXRjaCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jb21wbGV0ZUZldGNoKHBhcmFtc1F1ZXJ5LnBhcmFtcywgcGFyYW1zUXVlcnkucXVlcnksIHJlc3BvbnNlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuUm93c1JlbW92ZSgpIHtcbiAgICB0aGlzLmRhdGFDb250cm9sbGVyLnJvd3NSZW1vdmVkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChyb3dzOiBhbnlbXSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wYWdpbmcuZW5hYmxlZCkge1xuXG4gICAgICAgICAgY29uc3QgcmVtb3ZlZENvdW50ID0gcm93cy5sZW5ndGg7XG5cbiAgICAgICAgICBpZiAodGhpcy5wYWdpbmcuaGFzUGFnZVN0cmF0ZWd5KSB7XG4gICAgICAgICAgICB0aGlzLl9ub0RhdGFQYWdpbmF0aW9uVXBkYXRlKHJlbW92ZWRDb3VudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZldGNoIG1vcmUgaWYgaGFzIHNvbWV0aGluZyBmb3IgZmV0Y2hcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFDb250cm9sbGVyLmhhc0RhdGEgfHwgdGhpcy5wYWdpbmcuaGFzTmV4dFBhZ2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhQ29udHJvbGxlci5zZXRPcGVyYXRpb24oRnNMaXN0U3RhdGUuTG9hZE1vcmUpO1xuXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5nLnJlbW92ZVJvd3MocmVtb3ZlZENvdW50KTtcbiAgICAgICAgICAgICAgdGhpcy5fZmV0Y2gkLm5leHQoeyBsb2FkT2Zmc2V0OiB0cnVlIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5fbm9EYXRhUGFnaW5hdGlvblVwZGF0ZShyZW1vdmVkQ291bnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIHNlbGVjdGlvblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgICByb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmVtb3ZlUm93KHJvdy5kYXRhKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVyIG1heSBoYXZlIG9yaWdpbmFsbHkgaGlkZGVuIGNvbHVtbnMsIGJ1dCB2aXNpYmlsaXR5IG9mIHRob3NlIGNvbHVtbnNcbiAgICogY2FuIGJlIGNoYW5nZWQgcHJvZ3JhbW1hdGljYWx5IGluIGFueSB0aW1lXG4gICAqL1xuICBwcml2YXRlIF9saXN0ZW5WaXNpYmxlQ29sdW1uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbHVtbnMudmlzaWJsZUNvbHVtbnMkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl91cGRhdGVTb3J0aW5nQ29sdW1ucygpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGFuZCB3YXRjaCBmaWx0ZXIgY2hhbmdlc1xuICAgKi9cbiAgcHJpdmF0ZSBfaW5pdEZpbHRlcnMoKSB7XG4gICAgaWYgKHRoaXMuZmlsdGVyQ29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc29ydFZhbHVlcyA9IHRoaXMuc29ydGluZy5tYWtlU29ydGluZ0xpc3QoKTtcblxuICAgIGNvbnN0IHNvcnRDb25maWcgPSB0aGlzLnNvcnRpbmcuc29ydGluZ0NvbHVtblxuICAgICAgPyB7IHZhbHVlOiB0aGlzLnNvcnRpbmcuc29ydGluZ0NvbHVtbi5uYW1lLCBkaXJlY3Rpb246IHRoaXMuc29ydGluZy5zb3J0aW5nQ29sdW1uLmRpcmVjdGlvbiB9XG4gICAgICA6IG51bGw7XG5cbiAgICAvLyBDb25maWdcbiAgICB0aGlzLmZpbHRlckNvbmZpZyA9IHtcbiAgICAgIHBlcnNpc3Q6IHRoaXMucGVyc2lzdCxcbiAgICAgIGl0ZW1zOiB0aGlzLmZpbHRlcnMgfHwgW10sXG4gICAgICBzYXZlZEZpbHRlcnM6IHRoaXMuc2F2ZWRGaWx0ZXJzLFxuICAgICAgLy8gaW5saW5lOiB0aGlzLmlubGluZUZpbHRlcnMsXG4gICAgICBhY3Rpb25zOiB0aGlzLmFjdGlvbnMuYWN0aW9ucyxcbiAgICAgIHF1ZXJ5UGFyYW06IHRoaXMucXVlcnlQYXJhbSxcbiAgICAgIGF1dG9mb2N1czogdGhpcy5hdXRvRm9jdXMsXG4gICAgICBzb3J0czogc29ydFZhbHVlcyxcbiAgICAgIHNvcnQ6IHNvcnRDb25maWcsXG4gICAgICBjaGlwczogdGhpcy5jaGlwcyxcbiAgICAgIGF1dG9SZWxvYWQ6IHRoaXMuYXV0b1JlbG9hZCxcbiAgICAgIGluaXQ6IHRoaXMuX2ZpbHRlckluaXQuYmluZCh0aGlzKSxcbiAgICAgIGNoYW5nZTogdGhpcy5fZmlsdGVyQ2hhbmdlLmJpbmQodGhpcyksXG4gICAgICByZWxvYWQ6ICh0aGlzLl9jb25maWcucmVsb2FkID8/IHRydWUpID8gdGhpcy5yZWxvYWQuYmluZCh0aGlzKSA6IG51bGwsXG4gICAgICBzb3J0Q2hhbmdlOiB0aGlzLl9maWx0ZXJTb3J0LmJpbmQodGhpcyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB3aGVuIEZpbHRlciBoYXMgYmVlbiBpbml0aWFsaXplZFxuICAgKlxuICAgKiBAcGFyYW0gZmlsdGVyc1xuICAgKi9cbiAgcHJpdmF0ZSBfZmlsdGVySW5pdChmaWx0ZXJzKSB7XG4gICAgaWYgKHRoaXMuZmlsdGVySW5pdENiKSB7XG4gICAgICB0aGlzLmZpbHRlckluaXRDYihmaWx0ZXJzKTtcbiAgICB9XG5cbiAgICB0aGlzLl9maWx0ZXJzUXVlcnkubmV4dChmaWx0ZXJzKTtcblxuICAgIHRoaXMuX2NoZWNrUmVzdG9yZUZpbHRlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHdoZW4gRmlsdGVyIGhhcyBiZWVuIGNoYW5nZWRcbiAgICpcbiAgICogQHBhcmFtIGZpbHRlclF1ZXJ5XG4gICAqIEBwYXJhbSBmaWx0ZXJTb3J0XG4gICAqL1xuICBwcml2YXRlIF9maWx0ZXJDaGFuZ2UoZmlsdGVyUXVlcnksIGZpbHRlclNvcnQpIHtcbiAgICBpZiAodGhpcy5maWx0ZXJDaGFuZ2VDYikge1xuICAgICAgdGhpcy5maWx0ZXJDaGFuZ2VDYihmaWx0ZXJRdWVyeSwgZmlsdGVyU29ydCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmlsdGVyc1F1ZXJ5Lm5leHQoZmlsdGVyUXVlcnkpO1xuXG4gICAgdGhpcy5yZXN0b3JlTW9kZSA9IGZhbHNlO1xuXG4gICAgLy8gUmVzdG9yZSBvcHRpb25cbiAgICB0aGlzLl9jaGVja1Jlc3RvcmVGaWx0ZXIoKTtcblxuICAgIGlmICh0aGlzLnJlc3RvcmUgJiYgdGhpcy5yZXN0b3JlLnJlbG9hZCkge1xuICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFDb250cm9sbGVyLnNldE9wZXJhdGlvbihGc0xpc3RTdGF0ZS5GaWx0ZXIpO1xuXG4gICAgLy8gUmVzZXQgcGFnaW5nIGZvciByZXF1ZXN0IHdpdGggY29ycmVjdCBvZmZzZXRcbiAgICB0aGlzLnBhZ2luZy5yZXNldFBhZ2luZygpO1xuICAgIHRoaXMuX2ZldGNoJC5uZXh0KG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2hlY2tSZXN0b3JlRmlsdGVyKCkge1xuICAgIC8vIFJlc3RvcmUgb3B0aW9uXG4gICAgaWYgKHRoaXMucmVzdG9yZSAmJiB0aGlzLmZpbHRlcnNRdWVyeVtzaG93RGVsZXRlZEZpbHRlcktleV0pIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmZpbHRlcnNRdWVyeVtzaG93RGVsZXRlZEZpbHRlcktleV07XG5cbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5maWx0ZXJzUXVlcnksIHRoaXMucmVzdG9yZS5xdWVyeSk7XG5cbiAgICAgIHRoaXMucmVzdG9yZU1vZGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIENhbGxiYWNrIHdoZW4gRmlsdGVyIHNvcnQgaGFzIGJlZW4gY2hhbmdlZFxuICBwcml2YXRlIF9maWx0ZXJTb3J0KGZpbHRlclF1ZXJ5LCBmaWx0ZXJTb3J0KSB7XG4gICAgaWYgKGZpbHRlclNvcnQpIHtcbiAgICAgIHRoaXMuc29ydGluZy5zb3J0QnlDb2x1bW5XaXRoTmFtZShmaWx0ZXJTb3J0LnZhbHVlKTtcblxuICAgICAgY29uc3Qgc29ydERpcmVjdGlvbiA9IGZpbHRlclNvcnQuZGlyZWN0aW9uID09PSAnYXNjJyA/IFNvcnRpbmdEaXJlY3Rpb24uYXNjIDogU29ydGluZ0RpcmVjdGlvbi5kZXNjO1xuICAgICAgdGhpcy5zb3J0aW5nLnNvcnREaXJlY3Rpb24oc29ydERpcmVjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZJWE1FIG5lZWQgdG8gYmUgcmVmYWN0b3JlZC4uLlxuICAgICAgdGhpcy5zb3J0aW5nLnNvcnRpbmdDb2x1bW4gPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnJlbG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NvbXBsZXRlRmV0Y2gocGFyYW1zLCBxdWVyeSwgcmVzcG9uc2UpIHtcbiAgICBpZiAoIXRoaXMucGFnaW5nLnBhZ2UpIHtcbiAgICAgIHRoaXMucGFnaW5nLnBhZ2UgPSAxO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5wYWdpbmcpIHtcbiAgICAgIGNvbnN0IGRpc3BsYXllZCA9IChBcnJheS5pc0FycmF5KHJlc3BvbnNlLmRhdGEpICYmIHJlc3BvbnNlLmRhdGEubGVuZ3RoKSB8fCAwO1xuICAgICAgdGhpcy5wYWdpbmcudXBkYXRlUGFnaW5nKFxuICAgICAgICByZXNwb25zZS5wYWdpbmcsXG4gICAgICAgIGRpc3BsYXllZCxcbiAgICAgICAgdGhpcy5kYXRhQ29udHJvbGxlci5vcGVyYXRpb24gPT09IEZzTGlzdFN0YXRlLkxvYWRNb3JlLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucGFnaW5nLmVuYWJsZWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAnJWMgRnNMaXN0IFdhcm5pbmcgJyxcbiAgICAgICAgJ2NvbG9yOiB3aGl0ZTsgYmFja2dyb3VuZC1jb2xvcjogI2ZmY2MwYicsXG4gICAgICAgICdQYWdpbmF0aW9uIGRvZXMgbm90IGNvbmZpZ3VyZWQgcHJvcGVybHkuICcgK1xuICAgICAgICAnUGFnaW5hdGlvbiBpcyBlbmFibGVkLCBidXQgaHR0cCByZXNwb25zZSBkb2VzIG5vdCBjb250YWluIFwicGFnaW5nXCIgZmllbGQuICcgK1xuICAgICAgICAnWW91IGhhdmUgdG8gc2V0IFwicGFnaW5nOiBmYWxzZVwiIGluIGNvbmZpZyBvciBhZGQgXCJwYWdpbmdcIiBmaWVsZCB0byByZXNwb25zZS4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLy8gbXVzdCBiZSBiZWZvcmUgc2VsZWN0aW9uLCBiZWNhdXNlIHNlbGV0aW9uIHVzZSByZWNvcmRzXG4gICAgdGhpcy5kYXRhQ29udHJvbGxlci5zZXRSb3dzRnJvbVJlc3BvbnNlKHJlc3BvbnNlLmRhdGEpO1xuICAgIC8vL1xuXG4gICAgdGhpcy5fY29tcGxldGVGZXRjaFVwZGF0ZVNlbGVjdG9uKHJlc3BvbnNlKTtcblxuICAgIGlmICh0aGlzLmVtcHR5U3RhdGU/LnZhbGlkYXRlICYmIHRoaXMuZW1wdHlTdGF0ZVRlbXBsYXRlKSB7XG4gICAgICB0aGlzLmVtcHR5U3RhdGVFbmFibGVkID0gdGhpcy5lbXB0eVN0YXRlLnZhbGlkYXRlKHF1ZXJ5LCBjbG9uZURlZXAodGhpcy5kYXRhQ29udHJvbGxlci52aXNpYmxlUm93c0RhdGEpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hZnRlckZldGNoRm4pIHtcbiAgICAgIHRoaXMuYWZ0ZXJGZXRjaEZuKHF1ZXJ5LCB0aGlzLmRhdGFDb250cm9sbGVyLnZpc2libGVSb3dzRGF0YSk7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVuIGhhdmUgcmVtb3ZlZCBhbGwgcmVzdWx0cyBmcm9tIGxhc3QgcGFnZVxuICAgIGlmICh0aGlzLmRhdGFDb250cm9sbGVyLnZpc2libGVSb3dzLmxlbmd0aCA9PT0gMFxuICAgICAgJiYgdGhpcy5wYWdpbmcucGFnZSA+IDFcbiAgICAgICYmIHRoaXMucGFnaW5nLnBhZ2UgPiB0aGlzLnBhZ2luZy5wYWdlc1xuICAgICkge1xuICAgICAgdGhpcy5wYWdpbmcuZ29MYXN0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5mZXRjaENvbXBsZXRlJC5uZXh0KHsgc2Nyb2xsSW50b1ZpZXc6IHBhcmFtcz8uc2Nyb2xsSW50b1ZpZXcgfSk7XG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbXBsZXRlRmV0Y2hVcGRhdGVTZWxlY3RvbihyZXNwb25zZSkge1xuICAgIC8vIFVwZGF0ZSBzZWxlY3Rpb24gcGFyYW1zXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICBpZiAodGhpcy5wYWdpbmcuZW5hYmxlZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wYWdlQ2hhbmdlZCgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi51cGRhdGVWaXNpYmxlUmVjb3Jkc0NvdW50KHRoaXMucGFnaW5nLmdldFZpc2libGVSZWNvcmRzKCkpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi51cGRhdGVUb3RhbFJlY29yZHNDb3VudCh0aGlzLnBhZ2luZy5yZWNvcmRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gcmVzcG9uc2UucGFnaW5nICYmIHJlc3BvbnNlLnBhZ2luZy5yZWNvcmRzXG4gICAgICAgICAgfHwgQXJyYXkuaXNBcnJheShyZXNwb25zZS5kYXRhKSAmJiByZXNwb25zZS5kYXRhLmxlbmd0aDtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvbi51cGRhdGVWaXNpYmxlUmVjb3Jkc0NvdW50KGNvdW50KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24udXBkYXRlVG90YWxSZWNvcmRzQ291bnQoY291bnQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZFJvd3NJbnRlcnNlY3Rpb24odGhpcy5kYXRhQ29udHJvbGxlci52aXNpYmxlUm93c0RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIGRvIHNvbWUgYWN0aW9ucyBpZiB5b3UgcmVtb3ZlZCBpdGVtIGFuZCBpdGVtIHdhcyBsYXN0IG9uIGhpcyBvd24gcGFnZVxuICAgKlxuICAgKiBFeDogaWYgbGlzdCBoYXMgMyBwYWdlcyBhbmQgb24gdGhpcmQgcGFnZSB5b3UgaGF2ZSBvbmx5IG9uZSBpdGVtLiBBbmQgeW91IGp1c3QgZGVsZXRlZCB0aGlzIGl0ZW0uXG4gICAqIFlvdSBtdXN0IGdvIHRvIHNlY29uZCBwYWdlLCBidXQgaWYgaXQgd2FzIGxhc3QgcGFnZSBhbmQgeW91IGNhbid0IGdvIGJhY2sgLT4ganVzdCByZWxvYWRcbiAgICpcbiAgICogQHBhcmFtIGRlbGV0ZWRDb3VudFxuICAgKi9cbiAgcHJpdmF0ZSBfbm9EYXRhUGFnaW5hdGlvblVwZGF0ZShkZWxldGVkQ291bnQpIHtcbiAgICBpZiAoIXRoaXMuZGF0YUNvbnRyb2xsZXIuaGFzRGF0YSkge1xuICAgICAgaWYgKHRoaXMucGFnaW5nLnBhZ2UgPiAxKSB7XG4gICAgICAgIHRoaXMucGFnaW5nLmdvVG9QYWdlKHRoaXMucGFnaW5nLnBhZ2UgLSAxIHx8IDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnBhZ2luZy5yZWNvcmRzIC09IGRlbGV0ZWRDb3VudDtcbiAgICB0aGlzLnBhZ2luZy51cGRhdGVQYWdpbmF0aW9uKCk7XG5cbiAgICBpZiAodGhpcy5kYXRhQ29udHJvbGxlci5oYXNEYXRhICYmIHRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi51cGRhdGVWaXNpYmxlUmVjb3Jkc0NvdW50KHRoaXMuZGF0YUNvbnRyb2xsZXIudmlzaWJsZVJvd3NDb3VudCk7XG4gICAgICB0aGlzLnNlbGVjdGlvbi51cGRhdGVUb3RhbFJlY29yZHNDb3VudCh0aGlzLnBhZ2luZy5yZWNvcmRzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGVtcG9yYXJ5IHNvbHV0aW9uLCB3aWxsIGRvIGF1dG8gc3Vic2NyaWJlIGlmIHdhcyByZXR1cm5lZCBPYnNlcnZhYmxlLlxuICAgKlxuICAgKiBUT0RPOiBNT1ZFIFRISVMgUEVBQ0UgT0YgQ09ERSBUTyBTUEVDSUFMIFBMQUNFXG4gICAqXG4gICAqIEBwYXJhbSByZXN0b3JlQ2xpY2tDYWxsYmFja1xuICAgKiBAcGFyYW0gcm93XG4gICAqL1xuICBwcml2YXRlIF9yZXN0b3JlQ2xpY2socmVzdG9yZUNsaWNrQ2FsbGJhY2ssIHJvdykge1xuICAgIGNvbnN0IHJlc3RvcmVDbGlja1Jlc3VsdCA9IHJlc3RvcmVDbGlja0NhbGxiYWNrKHJvdyk7XG5cbiAgICBpZiAocmVzdG9yZUNsaWNrUmVzdWx0IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgcmVzdG9yZUNsaWNrUmVzdWx0XG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoKSA9PiB0aGlzLnJlbG9hZCgpLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVTb3J0aW5nQ29sdW1ucygpOiB2b2lkIHtcbiAgICB0aGlzLnNvcnRpbmcuY2xlYXJTb3J0YWJsZUNvbHVtbnMoKTtcbiAgICB0aGlzLmNvbHVtbnMuY29sdW1uc1xuICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4uc29ydGFibGUgJiYgY29sdW1uLnZpc2libGUpXG4gICAgICAuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgIHRoaXMuc29ydGluZy5hZGRTb3J0YWJsZUNvbHVtbihjb2x1bW4pO1xuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -459,7 +459,7 @@ export class PaginationController {
459
459
  * Destroy
460
460
  */
461
461
  destroy() {
462
- this._onDestroy$.next();
462
+ this._onDestroy$.next(null);
463
463
  this._onDestroy$.complete();
464
464
  }
465
465
  /**
@@ -488,4 +488,4 @@ export class PaginationController {
488
488
  this.pages = Math.ceil(this.records / this.limit);
489
489
  }
490
490
  }
491
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9jbGFzc2VzL3BhZ2luYXRpb24tY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBVXZFLE1BQU0sT0FBTyxvQkFBb0I7SUFFeEIsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNYLE9BQU8sQ0FBUztJQUNoQixNQUFNLEdBQUcsS0FBSyxDQUFDO0lBRWYsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLGNBQWM7SUFDeEIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFYixPQUFPLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjO0lBRXhELFNBQVMsR0FBdUIsa0JBQWtCLENBQUMsSUFBSSxDQUFDO0lBQ3hELFlBQVksR0FBRyxDQUFDLENBQUM7SUFFakIsYUFBYSxHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7SUFDMUMsV0FBVyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDbEMsV0FBVyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFFNUIsZUFBZSxDQUF1QjtJQUN0QyxPQUFPLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFekMsY0FBYztJQUNkLElBQVcsS0FBSyxDQUFDLEtBQWE7UUFDNUIsSUFBSSxDQUFDLE9BQU8s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QUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksVUFBVSxDQUFDLEtBQWE7UUFDN0IsSUFBSSxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVNLGdCQUFnQjtRQUNyQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPO1FBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssV0FBVyxDQUFDLE1BQU07UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztTQUNqQztRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxhQUFhO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ssaUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuXG5pbXBvcnQgeyBQYWdlQ2hhbmdlVHlwZSB9IGZyb20gJy4uL2VudW1zL3BhZ2UtY2hhbmdlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uU3RyYXRlZ3kgfSBmcm9tICcuLi9lbnVtcy9wYWdpbmF0aW9uLXN0cmF0ZWd5LmVudW0nO1xuaW1wb3J0IHtcbiAgRnNMaXN0TG9hZE1vcmVDb25maWcsXG4gIEZzUGFnaW5nLFxuICBQYWdlQ2hhbmdlLFxuICBRdWVyeU9mZnNldFN0cmF0ZWd5LFxuICBRdWVyeVBhZ2VTdHJhdGVneSxcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJUGFnaW5hdGlvblN0YXRlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wYWdpbmF0aW9uLXN0YXRlLmludGVyZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBQYWdpbmF0aW9uQ29udHJvbGxlciB7XG5cbiAgcHVibGljIGxpbWl0ID0gMjU7XG4gIHB1YmxpYyByZWNvcmRzOiBudW1iZXI7XG4gIHB1YmxpYyBtYW51YWwgPSBmYWxzZTtcblxuICBwdWJsaWMgcGFnZSA9IDE7IC8vIEFjdGl2ZSBwYWdlXG4gIHB1YmxpYyBvZmZzZXQgPSAwO1xuXG4gIHB1YmxpYyBkaXNwbGF5ZWQgPSAwO1xuXG4gIHByaXZhdGUgX3BhZ2VzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTsgLy8gVG90YWwgcGFnZXNcblxuICBwcml2YXRlIF9zdHJhdGVneTogUGFnaW5hdGlvblN0cmF0ZWd5ID0gUGFnaW5hdGlvblN0cmF0ZWd5Lk5vbmU7XG4gIHByaXZhdGUgX3JlbW92ZWRSb3dzID0gMDtcblxuICBwcml2YXRlIF9wYWdlQ2hhbmdlZCQgPSBuZXcgU3ViamVjdDxQYWdlQ2hhbmdlPigpO1xuICBwcml2YXRlIF9wYWdlUmVzZXQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfb25EZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHJpdmF0ZSBfbG9hZE1vcmVDb25maWc6IEZzTGlzdExvYWRNb3JlQ29uZmlnO1xuICBwcml2YXRlIF9saW1pdHMgPSBbMTAsIDI1LCA1MCwgMTAwLCAyMDBdO1xuXG4gIC8vIFRvdGFsIHBhZ2VzXG4gIHB1YmxpYyBzZXQgcGFnZXModmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BhZ2VzJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGFnZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZXMkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBhZ2VzJCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9wYWdlcyRcbiAgICAgIC5waXBlKFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlIGlmIHBhZ2Ugd2FzIGNoYW5nZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgcGFnZUNoYW5nZWQkKCk6IE9ic2VydmFibGU8UGFnZUNoYW5nZT4ge1xuICAgIHJldHVybiB0aGlzLl9wYWdlQ2hhbmdlZCQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xuICB9XG5cbiAgcHVibGljIGdldCBwYWdlUmVzZXQkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9wYWdlUmVzZXQkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBlbmFibGVkXG4gICAqL1xuICBwdWJsaWMgZ2V0IGVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmhhc05vbmVTdHJhdGVneTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgTGltaXRzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxpbWl0cygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2xpbWl0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgbGltaXRzLCB1cGRhdGUgcGFnZXMgYXJyYXkgYW5kIHNldCBuZXcgbGltaXQgcGVyIHBhZ2VcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgc2V0IGxpbWl0cyh2YWx1ZSkge1xuICAgIHRoaXMuX2xpbWl0cyA9IHZhbHVlO1xuXG4gICAgaWYgKHRoaXMubGltaXRzLmxlbmd0aCA+IDAgJiYgdGhpcy5saW1pdHMuaW5kZXhPZih0aGlzLmxpbWl0KSA9PT0gLTEpIHtcbiAgICAgIHRoaXMubGltaXQgPSB0aGlzLmxpbWl0c1swXTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubGltaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5saW1pdCA9IHRoaXMucmVjb3JkcztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHF1ZXJ5IGZvciByZXF1ZXN0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXJ5KCkge1xuICAgIHN3aXRjaCAodGhpcy5zdHJhdGVneSkge1xuICAgICAgY2FzZSBQYWdpbmF0aW9uU3RyYXRlZ3kuUGFnZTpcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlcnlQYWdlU3RyYXRlZ3k7XG4gICAgICBjYXNlIFBhZ2luYXRpb25TdHJhdGVneS5PZmZzZXQ6XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5T2Zmc2V0U3RyYXRlZ3k7XG4gICAgfVxuXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHVibGljIGdldCBsb2FkTW9yZVF1ZXJ5KCkge1xuICAgIHN3aXRjaCAodGhpcy5zdHJhdGVneSkge1xuICAgICAgY2FzZSBQYWdpbmF0aW9uU3RyYXRlZ3kuUGFnZToge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeTtcbiAgICAgIH1cblxuICAgICAgY2FzZSBQYWdpbmF0aW9uU3RyYXRlZ3kuT2Zmc2V0OiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5xdWVyeU9mZnNldFN0cmF0ZWd5O1xuXG4gICAgICAgIHF1ZXJ5LmxpbWl0ID0gcXVlcnkub2Zmc2V0ICsgcXVlcnkubGltaXQ7XG4gICAgICAgIHF1ZXJ5Lm9mZnNldCA9IDA7XG5cbiAgICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWVyeSBmb3IgUGFnZSBTdHJhdGVneVxuICAgKi9cbiAgcHVibGljIGdldCBxdWVyeVBhZ2VTdHJhdGVneSgpOiBRdWVyeVBhZ2VTdHJhdGVneSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzTm9uZVN0cmF0ZWd5XG4gICAgICA/IHt9XG4gICAgICA6IHtcbiAgICAgICAgcGFnZTogdGhpcy5wYWdlIHx8IDEsXG4gICAgICAgIGxpbWl0OiB0aGlzLmxpbWl0IHx8IDEwLFxuICAgICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWVyeSBmb3IgT2Zmc2V0IFN0cmF0ZWd5XG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXJ5T2Zmc2V0U3RyYXRlZ3koKTogUXVlcnlPZmZzZXRTdHJhdGVneSB7XG4gICAgY29uc3QgcGFnZSA9IHRoaXMucGFnZSAtIDEgfHwgMDtcbiAgICBjb25zdCBsaW1pdCA9IHRoaXMubGltaXQgfHwgNTtcblxuICAgIHJldHVybiB7XG4gICAgICBvZmZzZXQ6IHBhZ2UgKiBsaW1pdCxcbiAgICAgIGxpbWl0LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHF1ZXJ5IGZvciBsb2FkIG9ubHkgY291bnQgb2YgZGVsZXRlZCByb3dzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxvYWREZWxldGVkT2Zmc2V0UXVlcnkoKSB7XG4gICAgY29uc3QgcGFnaW5hdGlvbk9mZnNldCA9IHRoaXMubGltaXQgKiB0aGlzLnBhZ2U7XG4gICAgY29uc3QgYWN0dWFsT2Zmc2V0ID0gTWF0aC5taW4odGhpcy5yZWNvcmRzLCBwYWdpbmF0aW9uT2Zmc2V0KTtcbiAgICBjb25zdCBvZmZzZXQgPSBNYXRoLm1heCgwLCBhY3R1YWxPZmZzZXQgLSB0aGlzLl9yZW1vdmVkUm93cyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgb2Zmc2V0LFxuICAgICAgbGltaXQ6IHRoaXMuX3JlbW92ZWRSb3dzLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0IGluaXRpYWxpemVkKCkge1xuICAgIHJldHVybiAhIXRoaXMucGFnZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN0cmF0ZWd5KCkge1xuICAgIHJldHVybiB0aGlzLl9zdHJhdGVneTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgc3RyYXRlZ3koc3RyYXRlZ3k6IFBhZ2luYXRpb25TdHJhdGVneSkge1xuICAgIHRoaXMuX3N0cmF0ZWd5ID0gKHN0cmF0ZWd5ID09PSB1bmRlZmluZWQpID8gUGFnaW5hdGlvblN0cmF0ZWd5LlBhZ2UgOiBzdHJhdGVneTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwYWdpbmF0aW9uIGluIFBhZ2UgU3RyYXRlZ3kgTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBoYXNQYWdlU3RyYXRlZ3koKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyYXRlZ3kgPT09IFBhZ2luYXRpb25TdHJhdGVneS5QYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHBhZ2luYXRpb24gaW4gT2Zmc2V0IFN0cmF0ZWd5IE1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgaGFzT2Zmc2V0U3RyYXRlZ3koKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyYXRlZ3kgPT09IFBhZ2luYXRpb25TdHJhdGVneS5PZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgcGFnaW5hdGlvbiBpbiBOb25lIFN0cmF0ZWd5IE1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgaGFzTm9uZVN0cmF0ZWd5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0cmF0ZWd5ID09PSBQYWdpbmF0aW9uU3RyYXRlZ3kuTm9uZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBwcmV2IHBhZ2UgY2FuIGJlIGFjdGl2YXRlZFxuICAgKlxuICAgKi9cbiAgcHVibGljICBnZXQgaGFzUHJldlBhZ2UoKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoICh0aGlzLnN0cmF0ZWd5KSB7XG4gICAgICBjYXNlIFBhZ2luYXRpb25TdHJhdGVneS5QYWdlOlxuICAgICAgICByZXR1cm4gdGhpcy5faGFzUHJldlBhZ2VQYWdlU3RyYXRlZ3k7XG4gICAgICBjYXNlIFBhZ2luYXRpb25TdHJhdGVneS5PZmZzZXQ6XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNQcmV2UGFnZU9mZnNldFN0cmF0ZWd5O1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBuZXh0IHBhZ2UgY2FuIGJlIGFjdGl2YXRlZFxuICAgKi9cbiAgcHVibGljIGdldCBoYXNOZXh0UGFnZSgpOiBib29sZWFuIHsgLy8gTmVlZCB0byBjaGVjayBpZiBwYWdlcyA9PT0gcGFnZSAmJiBwYWdlID09PSAxXG4gICAgc3dpdGNoICh0aGlzLnN0cmF0ZWd5KSB7XG4gICAgICBjYXNlIFBhZ2luYXRpb25TdHJhdGVneS5QYWdlOlxuICAgICAgICByZXR1cm4gdGhpcy5faGFzTmV4dFBhZ2VQYWdlU3RyYXRlZ3k7XG4gICAgICBjYXNlIFBhZ2luYXRpb25TdHJhdGVneS5PZmZzZXQ6XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNOZXh0UGFnZU9mZnNldFN0cmF0ZWd5O1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbG9hZE1vcmVFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9sb2FkTW9yZUNvbmZpZy5lbmFibGVkO1xuICB9XG5cbiAgcHVibGljIGdldCBsb2FkTW9yZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRNb3JlQ29uZmlnLmxhYmVsO1xuICB9XG5cbiAgcHVibGljIGdldCBsb2FkTW9yZUJ1dHRvbkNvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRNb3JlQ29uZmlnLmJ1dHRvbkNvbG9yO1xuICB9XG5cbiAgcHVibGljIGdldCBsb2FkTW9yZUJ1dHRvbkNsYXNzKCk6IHN0cmluZyB7XG4gICAgaWYoIHRoaXMuX2xvYWRNb3JlQ29uZmlnLmJ1dHRvblR5cGUgPT09ICdiYXNpYycgKSB7XG4gICAgICByZXR1cm4gJyc7IFxuICAgIH1cblxuICAgIHJldHVybiBgbWF0LSR7dGhpcy5fbG9hZE1vcmVDb25maWcuYnV0dG9uVHlwZX0tYnV0dG9uYDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbG9hZE1vcmVCdXR0b25UeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRNb3JlQ29uZmlnLmJ1dHRvblR5cGU7XG4gIH1cblxuICAvKipcbiAgICogU1AtVDE5NzRcbiAgICogU2hvd2luZyAyNi01MCBvZiAzMzMgcmVzdWx0cyBzb3J0ZWQgYnkgTmFtZSwgQXNjZW5kaW5nXG4gICAqIFNob3dpbmcgMCByZXN1bHRzIHNvcnRlZCBieSBOYW1lLCBBc2NlbmRpbmdcbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhdHVzTGFiZWwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjdXJyZW50ID0gKHRoaXMucGFnZSAtIDEpICogdGhpcy5saW1pdDtcbiAgICBjb25zdCBmcm9tID0gY3VycmVudCArIDE7XG4gICAgY29uc3QgdG8gPSBNYXRoLm1pbih0aGlzLnJlY29yZHMsIGN1cnJlbnQgKyB0aGlzLmxpbWl0KTtcblxuICAgIHJldHVybiBgJHtmcm9tfS0ke3RvfWA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN0YXRlKCk6IElQYWdpbmF0aW9uU3RhdGUge1xuICAgIHJldHVybiB7XG4gICAgICBlbmFibGVkOiB0aGlzLmVuYWJsZWQsXG4gICAgICBzdHJhdGVneTogdGhpcy5zdHJhdGVneSxcbiAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICBsaW1pdDogdGhpcy5saW1pdCxcbiAgICAgIHJlY29yZHM6IHRoaXMucmVjb3JkcyxcbiAgICAgIGRpc3BsYXllZDogdGhpcy5kaXNwbGF5ZWQsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0V2l0aENvbmZpZyhcbiAgICBjb25maWc6IEZzUGFnaW5nIHwgZmFsc2UsXG4gICAgbG9hZE1vcmU6IEZzTGlzdExvYWRNb3JlQ29uZmlnIHwgYm9vbGVhbixcbiAgKSB7XG5cbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICBpZiAoY29uZmlnLmxpbWl0cykge1xuICAgICAgICB0aGlzLmxpbWl0cyA9IGNvbmZpZy5saW1pdHM7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcubGltaXQpIHtcbiAgICAgICAgdGhpcy5saW1pdCA9IGNvbmZpZy5saW1pdDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdHJhdGVneSA9IGNvbmZpZy5zdHJhdGVneTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5zZXRMb2FkTW9yZShsb2FkTW9yZSk7XG4gIH1cblxuICAvKipcbiAgICogSWYgcGFnaW5hdGlvbiBoYXMgcHJldiBwYWdlIHdoZW4gUGFnZSBTdHJhdGVneVxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgX2hhc1ByZXZQYWdlUGFnZVN0cmF0ZWd5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBhZ2UgPiAxICYmIHRoaXMucGFnZXMgPiAxO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHBhZ2luYXRpb24gaGFzIHByZXYgcGFnZSB3aGVuIE9mZnNldCBTdHJhdGVneVxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgX2hhc1ByZXZQYWdlT2Zmc2V0U3RyYXRlZ3koKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub2Zmc2V0ID49IHRoaXMubGltaXQgJiYgdGhpcy5yZWNvcmRzID4gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBwYWdpbmF0aW9uIGhhcyBuZXh0IHBhZ2Ugd2hlbiBQYWdlIFN0cmF0ZWd5XG4gICAqL1xuICBwcml2YXRlIGdldCBfaGFzTmV4dFBhZ2VQYWdlU3RyYXRlZ3koKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGFnZSA8IHRoaXMucGFnZXMgJiYgdGhpcy5wYWdlcyA+IDE7XG4gIH1cblxuICAvKipcbiAgICogSWYgcGFnaW5hdGlvbiBoYXMgbmV4dCBwYWdlIHdoZW4gT2Zmc2V0IFN0cmF0ZWd5XG4gICAqL1xuICBwcml2YXRlIGdldCBfaGFzTmV4dFBhZ2VPZmZzZXRTdHJhdGVneSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMub2Zmc2V0ICsgdGhpcy5saW1pdCkgPCB0aGlzLnJlY29yZHMgJiYgdGhpcy5yZWNvcmRzID4gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgcGFnaW5nIGNvbmZpZyBhbmQgYWxsIHJlbGF0ZWQgZmllbGRzXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWdcbiAgICogQHBhcmFtIGRpc3BsYXllZFJlY29yZHNcbiAgICogQHBhcmFtIGxvYWRNb3JlT3BlcmF0aW9uXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlUGFnaW5nKGNvbmZpZywgZGlzcGxheWVkUmVjb3JkcyA9IDAsIGxvYWRNb3JlT3BlcmF0aW9uID0gZmFsc2UpIHtcbiAgICBpZiAoIWxvYWRNb3JlT3BlcmF0aW9uKSB7XG4gICAgICB0aGlzLl9mcm9tUGFyYW1zKGNvbmZpZyk7XG4gICAgICB0aGlzLmRpc3BsYXllZCA9IGRpc3BsYXllZFJlY29yZHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVjb3JkcyA9IGNvbmZpZy5yZWNvcmRzO1xuXG4gICAgICBpZiAodGhpcy5yZWNvcmRzIDwgdGhpcy5kaXNwbGF5ZWQpIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWQgPSB0aGlzLnJlY29yZHM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3JlbW92ZWRSb3dzID0gMDtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVUb3RhbFBhZ2VzKCk7XG4gIH1cblxuICAvLyAvKipcbiAgLy8gICogVXBkYXRlIHBhZ2luZyB3aGVuIGRhdGEgc291cmNlIG5vdCByZW1vdmVcbiAgLy8gICogQHBhcmFtIHthbnlbXX0gcm93c1xuICAvLyAgKi9cbiAgLypwdWJsaWMgdXBkYXRlUGFnaW5nTWFudWFsKHJvd3M6IGFueVtdKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocm93cykgJiYgcm93cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlY29yZHMgPSByb3dzLmxlbmd0aDtcbiAgICAgIHRoaXMucGFnZXMgPSBNYXRoLmNlaWwocm93cy5sZW5ndGggLyB0aGlzLmxpbWl0KTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVBhZ2VzQXJyYXkoKTtcbiAgICB0aGlzLnVwZGF0ZURpc3BsYXllZCgpO1xuICB9Ki9cblxuICAvKipcbiAgICogVXBkYXRlIHBhZ2VzIGFycmF5IHdpdGggbmV3IHBhZ2VzIGNvdW50XG4gICAqL1xuICAvLyBwdWJsaWMgdXBkYXRlUGFnZXNBcnJheSgpIHtcbiAgLy8gICBjb25zdCBNSURETEUgPSAyO1xuICAvLyAgIGNvbnN0IHBhZ2VzQXJyID0gW107XG5cbiAgLy8gICBsZXQgZnJvbSA9IDA7XG4gIC8vICAgbGV0IHRvID0gMDtcbiAgLy8gICBpZiAodGhpcy5wYWdlIDwgTUlERExFKSB7XG4gIC8vICAgICBmcm9tID0gTUlERExFIC0gMTtcbiAgLy8gICAgIHRvID0gTUlERExFICsgMTtcbiAgLy8gICB9IGVsc2UgaWYgKHRoaXMucGFnZSA+PSBNSURETEUgJiYgdGhpcy5wYWdlIDw9IHRoaXMucGFnZXMgLSBNSURETEUgKyAxKSB7XG4gIC8vICAgICBmcm9tID0gdGhpcy5wYWdlIC0gMTtcbiAgLy8gICAgIHRvID0gdGhpcy5wYWdlICsgMTtcbiAgLy8gICB9IGVsc2UgaWYgKHRoaXMucGFnZSA+IHRoaXMucGFnZXMgLSBNSURETEUgKyAxKSB7XG4gIC8vICAgICBmcm9tID0gdGhpcy5wYWdlcyAtIE1JRERMRSAtIDE7XG4gIC8vICAgICB0byA9IHRoaXMucGFnZXM7XG4gIC8vICAgfVxuXG4gIC8vICAgaWYgKCF0aGlzLnBhZ2VzIHx8IHRoaXMucGFnZXMgPCA1KSB7XG4gIC8vICAgICBmcm9tID0gMTtcbiAgLy8gICAgIHRvID0gdGhpcy5wYWdlcyB8fCAwO1xuICAvLyAgIH1cblxuICAvLyAgIGZvciAobGV0IGkgPSBmcm9tOyBpIDw9IHRvOyBpKyspIHtcbiAgLy8gICAgIHBhZ2VzQXJyLnB1c2goaSk7XG4gIC8vICAgfVxuXG4gIC8vICAgdGhpcy5wYWdlc0FycmF5ID0gT2JqZWN0LmFzc2lnbihbXSwgcGFnZXNBcnIpO1xuICAvLyB9XG5cbiAgcHVibGljIHNldExvYWRNb3JlKGNvbmZpZzogRnNMaXN0TG9hZE1vcmVDb25maWcgfCBib29sZWFuKSB7XG4gICAgY29uc3QgbG9hZE1vcmVDb25maWcgPSB0eXBlb2YgY29uZmlnID09PSAnYm9vbGVhbicgPyBcbiAgICAgIHtcbiAgICAgICAgZW5hYmxlZDogISFjb25maWcsXG4gICAgICB9IDogXG4gICAgICAoXG4gICAgICAgIGNvbmZpZyA9PT0gdW5kZWZpbmVkID8ge30gOiB7XG4gICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICB0aGlzLl9sb2FkTW9yZUNvbmZpZyA9IHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgbGFiZWw6ICdMb2FkIE1vcmUnLFxuICAgICAgYnV0dG9uVHlwZTogJ2Jhc2ljJyxcbiAgICAgIC4uLmxvYWRNb3JlQ29uZmlnLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGRpc3BheWVkIHJlY29yZHMgY291bnRlclxuICAgKi9cbiAgLy8gcHVibGljIHVwZGF0ZURpc3BsYXllZCgpIHtcbiAgLy8gICB0aGlzLmRpc3BsYXllZCA9IHRoaXMuZ2V0VmlzaWJsZVJlY29yZHMoKTtcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gY291bnQgb2YgcmVjb3JkcyB0aGF0IGNvdWxkIGJlIHNob3duIG9uIHBhZ2VcbiAgICovXG4gIC8vIHB1YmxpYyBnZXRWaXNpYmxlUmVjb3JkcygpIHtcbiAgLy8gICBjb25zdCBkaWZmID0gdGhpcy5oYXNPZmZzZXRTdHJhdGVneVxuICAvLyAgICAgPyB0aGlzLnJlY29yZHMgLSB0aGlzLm9mZnNldFxuICAvLyAgICAgOiB0aGlzLmxpbWl0O1xuICAvL1xuICAvLyAgIHJldHVybiBkaWZmIDwgdGhpcy5saW1pdFxuICAvLyAgICAgPyBkaWZmXG4gIC8vICAgICA6IHRoaXMuZGlzcGxheWVkO1xuICAvLyB9XG5cbiAgcHVibGljIGdldFZpc2libGVSZWNvcmRzKCkge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXllZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgbmV3IGxpbWl0XG4gICAqXG4gICAqIEBwYXJhbSBsaW1pdFxuICAgKi9cbiAgcHVibGljIHNldExpbWl0KGxpbWl0KSB7XG4gICAgdGhpcy5saW1pdCA9IGxpbWl0O1xuICAgIHRoaXMucmVzZXRQYWdpbmcoKTtcblxuICAgIHRoaXMuX3BhZ2VDaGFuZ2VkJC5uZXh0KHtcbiAgICAgIHR5cGU6IFBhZ2VDaGFuZ2VUeXBlLkxpbWl0Q2hhbmdlZCxcbiAgICAgIHBheWxvYWQ6IGxpbWl0LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHBhZ2UgaXMgYWN0aXZhdGUgcGFnZVxuICAgKlxuICAgKiBAcGFyYW0gcGFnZVxuICAgKi9cbiAgcHVibGljIGlzQWN0aXZlKHBhZ2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGFnZSA9PT0gdGhpcy5wYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdvIHRvIHBhZ2VcbiAgICpcbiAgICogQHBhcmFtIHBhZ2VcbiAgICovXG4gIHB1YmxpYyBnb1RvUGFnZShwYWdlKSB7XG4gICAgaWYgKHBhZ2UgPj0gMSAmJiB0aGlzLnBhZ2UgIT09IHBhZ2UpIHtcbiAgICAgIHRoaXMucGFnZSA9IHBhZ2U7XG5cbiAgICAgIHRoaXMuX3VwZGF0ZU9mZnNldCgpO1xuXG4gICAgICB0aGlzLl9wYWdlQ2hhbmdlZCQubmV4dCh7XG4gICAgICAgIHR5cGU6IFBhZ2VDaGFuZ2VUeXBlLkRlZmF1bHQsXG4gICAgICAgIHBheWxvYWQ6IHBhZ2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgcGFnaW5nIGxpa2UgaXQgd2FzIGp1c3QgaW5pdGlhbGl6ZWRcbiAgICovXG4gIHB1YmxpYyByZXNldFBhZ2luZygpIHtcbiAgICB0aGlzLnBhZ2UgPSAxO1xuICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHbyB0byBuZXh0IHBhZ2VcbiAgICovXG4gIHB1YmxpYyBnb05leHQoKSB7XG4gICAgaWYgKHRoaXMuaGFzTmV4dFBhZ2UpIHtcbiAgICAgIHRoaXMucGFnZSsrO1xuXG4gICAgICB0aGlzLl91cGRhdGVPZmZzZXQoKTtcblxuICAgICAgdGhpcy5fcGFnZUNoYW5nZWQkLm5leHQoe1xuICAgICAgICB0eXBlOiBQYWdlQ2hhbmdlVHlwZS5EZWZhdWx0LFxuICAgICAgICBwYXlsb2FkOiB0aGlzLnBhZ2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR28gdG8gZmlyc3QgcGFnZVxuICAgKi9cbiAgcHVibGljIGdvRmlyc3QoKSB7XG4gICAgaWYgKHRoaXMucGFnZSA+IDEpIHtcbiAgICAgIHRoaXMucGFnZSA9IDE7XG5cbiAgICAgIHRoaXMuX3VwZGF0ZU9mZnNldCgpO1xuXG4gICAgICB0aGlzLl9wYWdlQ2hhbmdlZCQubmV4dCh7XG4gICAgICAgIHR5cGU6IFBhZ2VDaGFuZ2VUeXBlLkRlZmF1bHQsXG4gICAgICAgIHBheWxvYWQ6IHRoaXMucGFnZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHbyB0byBwcmV2IHBhZ2VcbiAgICovXG4gIHB1YmxpYyBnb1ByZXYoKSB7XG4gICAgaWYgKHRoaXMucGFnZSA+IDEpIHtcbiAgICAgIHRoaXMucGFnZS0tO1xuXG4gICAgICB0aGlzLl91cGRhdGVPZmZzZXQoKTtcblxuICAgICAgdGhpcy5fcGFnZUNoYW5nZWQkLm5leHQoe1xuICAgICAgICB0eXBlOiBQYWdlQ2hhbmdlVHlwZS5EZWZhdWx0LFxuICAgICAgICBwYXlsb2FkOiB0aGlzLnBhZ2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR28gdG8gbGFzdCBwYWdlXG4gICAqL1xuICBwdWJsaWMgZ29MYXN0KCkge1xuICAgIGlmICh0aGlzLnBhZ2UgIT09IHRoaXMucGFnZXMpIHtcbiAgICAgIHRoaXMucGFnZSA9IHRoaXMucGFnZXM7XG5cbiAgICAgIHRoaXMuX3VwZGF0ZU9mZnNldCgpO1xuXG4gICAgICB0aGlzLl9wYWdlQ2hhbmdlZCQubmV4dCh7XG4gICAgICAgIHR5cGU6IFBhZ2VDaGFuZ2VUeXBlLkRlZmF1bHQsXG4gICAgICAgIHBheWxvYWQ6IHRoaXMucGFnZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgY291bnQgb2YgZGVsZXRlZCByb3dzLiBUaGlzIGNvdW50IHdpbGwgYmUgYXBwbGllZCBmb3Igb2Zmc2V0IGNhbGNcbiAgICpcbiAgICogQHBhcmFtIGNvdW50XG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlUm93cyhjb3VudDogbnVtYmVyKSB7XG4gICAgdGhpcy5fcmVtb3ZlZFJvd3MgKz0gY291bnQ7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUGFnaW5hdGlvbigpIHtcbiAgICB0aGlzLl91cGRhdGVUb3RhbFBhZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveVxuICAgKi9cbiAgcHVibGljIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBwYWdpbmcgc3RhdGVcbiAgICpcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgcHJpdmF0ZSBfZnJvbVBhcmFtcyhwYXJhbXMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubG9hZE1vcmVFbmFibGVkKSB7XG4gICAgICB0aGlzLmxpbWl0ID0gcGFyYW1zLmxpbWl0ID8/IDI1O1xuICAgIH1cblxuICAgIHRoaXMucmVjb3JkcyA9IHBhcmFtcy5yZWNvcmRzO1xuICAgIHRoaXMubWFudWFsID0gcGFyYW1zLm1hbnVhbDtcblxuICAgIHRoaXMucGFnZXMgPSBwYXJhbXMucGFnZXMgfHwgMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjIGFuZCB1cGRhdGUgb2Zmc2V0XG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVPZmZzZXQoKSB7XG4gICAgdGhpcy5vZmZzZXQgPSB0aGlzLmxpbWl0ICogKHRoaXMucGFnZSAtIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGMgYW5kIHVwZGF0ZSB0b3RhbCBjb3VudCBvZiBwYWdlc1xuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlVG90YWxQYWdlcygpIHtcbiAgICB0aGlzLnBhZ2VzID0gTWF0aC5jZWlsKHRoaXMucmVjb3JkcyAvIHRoaXMubGltaXQpO1xuICB9XG59XG4iXX0=
491
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9jbGFzc2VzL3BhZ2luYXRpb24tY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBVXZFLE1BQU0sT0FBTyxvQkFBb0I7SUFFeEIsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNYLE9BQU8sQ0FBUztJQUNoQixNQUFNLEdBQUcsS0FBSyxDQUFDO0lBRWYsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLGNBQWM7SUFDeEIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFYixPQUFPLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjO0lBRXhELFNBQVMsR0FBdUIsa0JBQWtCLENBQUMsSUFBSSxDQUFDO0lBQ3hELFlBQVksR0FBRyxDQUFDLENBQUM7SUFFakIsYUFBYSxHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7SUFDMUMsV0FBVyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDbEMsV0FBVyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFFNUIsZUFBZSxDQUF1QjtJQUN0QyxPQUFPLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFekMsY0FBYztJQUNkLElBQVcsS0FBSyxDQUFDLEtBQWE7UUFDNUIsSUFBSSxDQUFDLE9BQU8s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LGlCQUFpQjtRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cblxuaW1wb3J0IHsgUGFnZUNoYW5nZVR5cGUgfSBmcm9tICcuLi9lbnVtcy9wYWdlLWNoYW5nZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgUGFnaW5hdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi4vZW51bXMvcGFnaW5hdGlvbi1zdHJhdGVneS5lbnVtJztcbmltcG9ydCB7XG4gIEZzTGlzdExvYWRNb3JlQ29uZmlnLFxuICBGc1BhZ2luZyxcbiAgUGFnZUNoYW5nZSxcbiAgUXVlcnlPZmZzZXRTdHJhdGVneSxcbiAgUXVlcnlQYWdlU3RyYXRlZ3ksXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSVBhZ2luYXRpb25TdGF0ZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcGFnaW5hdGlvbi1zdGF0ZS5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvbkNvbnRyb2xsZXIge1xuXG4gIHB1YmxpYyBsaW1pdCA9IDI1O1xuICBwdWJsaWMgcmVjb3JkczogbnVtYmVyO1xuICBwdWJsaWMgbWFudWFsID0gZmFsc2U7XG5cbiAgcHVibGljIHBhZ2UgPSAxOyAvLyBBY3RpdmUgcGFnZVxuICBwdWJsaWMgb2Zmc2V0ID0gMDtcblxuICBwdWJsaWMgZGlzcGxheWVkID0gMDtcblxuICBwcml2YXRlIF9wYWdlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7IC8vIFRvdGFsIHBhZ2VzXG5cbiAgcHJpdmF0ZSBfc3RyYXRlZ3k6IFBhZ2luYXRpb25TdHJhdGVneSA9IFBhZ2luYXRpb25TdHJhdGVneS5Ob25lO1xuICBwcml2YXRlIF9yZW1vdmVkUm93cyA9IDA7XG5cbiAgcHJpdmF0ZSBfcGFnZUNoYW5nZWQkID0gbmV3IFN1YmplY3Q8UGFnZUNoYW5nZT4oKTtcbiAgcHJpdmF0ZSBfcGFnZVJlc2V0JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX29uRGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIHByaXZhdGUgX2xvYWRNb3JlQ29uZmlnOiBGc0xpc3RMb2FkTW9yZUNvbmZpZztcbiAgcHJpdmF0ZSBfbGltaXRzID0gWzEwLCAyNSwgNTAsIDEwMCwgMjAwXTtcblxuICAvLyBUb3RhbCBwYWdlc1xuICBwdWJsaWMgc2V0IHBhZ2VzKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wYWdlcyQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBhZ2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VzJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBwYWdlcyQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZXMkXG4gICAgICAucGlwZShcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmlyZSBpZiBwYWdlIHdhcyBjaGFuZ2VkXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhZ2VDaGFuZ2VkJCgpOiBPYnNlcnZhYmxlPFBhZ2VDaGFuZ2U+IHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZUNoYW5nZWQkLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGFnZVJlc2V0JCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZVJlc2V0JC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZW5hYmxlZFxuICAgKi9cbiAgcHVibGljIGdldCBlbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5oYXNOb25lU3RyYXRlZ3k7XG4gIH1cblxuICAvKipcbiAgICogR2V0IExpbWl0c1xuICAgKi9cbiAgcHVibGljIGdldCBsaW1pdHMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLl9saW1pdHM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGxpbWl0cywgdXBkYXRlIHBhZ2VzIGFycmF5IGFuZCBzZXQgbmV3IGxpbWl0IHBlciBwYWdlXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHNldCBsaW1pdHModmFsdWUpIHtcbiAgICB0aGlzLl9saW1pdHMgPSB2YWx1ZTtcblxuICAgIGlmICh0aGlzLmxpbWl0cy5sZW5ndGggPiAwICYmIHRoaXMubGltaXRzLmluZGV4T2YodGhpcy5saW1pdCkgPT09IC0xKSB7XG4gICAgICB0aGlzLmxpbWl0ID0gdGhpcy5saW1pdHNbMF07XG4gICAgfSBlbHNlIGlmICh0aGlzLmxpbWl0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMubGltaXQgPSB0aGlzLnJlY29yZHM7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBxdWVyeSBmb3IgcmVxdWVzdFxuICAgKi9cbiAgcHVibGljIGdldCBxdWVyeSgpIHtcbiAgICBzd2l0Y2ggKHRoaXMuc3RyYXRlZ3kpIHtcbiAgICAgIGNhc2UgUGFnaW5hdGlvblN0cmF0ZWd5LlBhZ2U6XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5UGFnZVN0cmF0ZWd5O1xuICAgICAgY2FzZSBQYWdpbmF0aW9uU3RyYXRlZ3kuT2Zmc2V0OlxuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeU9mZnNldFN0cmF0ZWd5O1xuICAgIH1cblxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbG9hZE1vcmVRdWVyeSgpIHtcbiAgICBzd2l0Y2ggKHRoaXMuc3RyYXRlZ3kpIHtcbiAgICAgIGNhc2UgUGFnaW5hdGlvblN0cmF0ZWd5LlBhZ2U6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlcnk7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgUGFnaW5hdGlvblN0cmF0ZWd5Lk9mZnNldDoge1xuICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMucXVlcnlPZmZzZXRTdHJhdGVneTtcblxuICAgICAgICBxdWVyeS5saW1pdCA9IHF1ZXJ5Lm9mZnNldCArIHF1ZXJ5LmxpbWl0O1xuICAgICAgICBxdWVyeS5vZmZzZXQgPSAwO1xuXG4gICAgICAgIHJldHVybiBxdWVyeTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogUXVlcnkgZm9yIFBhZ2UgU3RyYXRlZ3lcbiAgICovXG4gIHB1YmxpYyBnZXQgcXVlcnlQYWdlU3RyYXRlZ3koKTogUXVlcnlQYWdlU3RyYXRlZ3kge1xuICAgIHJldHVybiB0aGlzLmhhc05vbmVTdHJhdGVneVxuICAgICAgPyB7fVxuICAgICAgOiB7XG4gICAgICAgIHBhZ2U6IHRoaXMucGFnZSB8fCAxLFxuICAgICAgICBsaW1pdDogdGhpcy5saW1pdCB8fCAxMCxcbiAgICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUXVlcnkgZm9yIE9mZnNldCBTdHJhdGVneVxuICAgKi9cbiAgcHVibGljIGdldCBxdWVyeU9mZnNldFN0cmF0ZWd5KCk6IFF1ZXJ5T2Zmc2V0U3RyYXRlZ3kge1xuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBhZ2UgLSAxIHx8IDA7XG4gICAgY29uc3QgbGltaXQgPSB0aGlzLmxpbWl0IHx8IDU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgb2Zmc2V0OiBwYWdlICogbGltaXQsXG4gICAgICBsaW1pdCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBxdWVyeSBmb3IgbG9hZCBvbmx5IGNvdW50IG9mIGRlbGV0ZWQgcm93c1xuICAgKi9cbiAgcHVibGljIGdldCBsb2FkRGVsZXRlZE9mZnNldFF1ZXJ5KCkge1xuICAgIGNvbnN0IHBhZ2luYXRpb25PZmZzZXQgPSB0aGlzLmxpbWl0ICogdGhpcy5wYWdlO1xuICAgIGNvbnN0IGFjdHVhbE9mZnNldCA9IE1hdGgubWluKHRoaXMucmVjb3JkcywgcGFnaW5hdGlvbk9mZnNldCk7XG4gICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5tYXgoMCwgYWN0dWFsT2Zmc2V0IC0gdGhpcy5fcmVtb3ZlZFJvd3MpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9mZnNldCxcbiAgICAgIGxpbWl0OiB0aGlzLl9yZW1vdmVkUm93cyxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldCBpbml0aWFsaXplZCgpIHtcbiAgICByZXR1cm4gISF0aGlzLnBhZ2VzO1xuICB9XG5cbiAgcHVibGljIGdldCBzdHJhdGVneSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RyYXRlZ3k7XG4gIH1cblxuICBwdWJsaWMgc2V0IHN0cmF0ZWd5KHN0cmF0ZWd5OiBQYWdpbmF0aW9uU3RyYXRlZ3kpIHtcbiAgICB0aGlzLl9zdHJhdGVneSA9IChzdHJhdGVneSA9PT0gdW5kZWZpbmVkKSA/IFBhZ2luYXRpb25TdHJhdGVneS5QYWdlIDogc3RyYXRlZ3k7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgcGFnaW5hdGlvbiBpbiBQYWdlIFN0cmF0ZWd5IE1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgaGFzUGFnZVN0cmF0ZWd5KCkge1xuICAgIHJldHVybiB0aGlzLnN0cmF0ZWd5ID09PSBQYWdpbmF0aW9uU3RyYXRlZ3kuUGFnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwYWdpbmF0aW9uIGluIE9mZnNldCBTdHJhdGVneSBNb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhhc09mZnNldFN0cmF0ZWd5KCkge1xuICAgIHJldHVybiB0aGlzLnN0cmF0ZWd5ID09PSBQYWdpbmF0aW9uU3RyYXRlZ3kuT2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHBhZ2luYXRpb24gaW4gTm9uZSBTdHJhdGVneSBNb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhhc05vbmVTdHJhdGVneSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdHJhdGVneSA9PT0gUGFnaW5hdGlvblN0cmF0ZWd5Lk5vbmU7XG4gIH1cblxuICAvKipcbiAgICogSWYgcHJldiBwYWdlIGNhbiBiZSBhY3RpdmF0ZWRcbiAgICpcbiAgICovXG4gIHB1YmxpYyAgZ2V0IGhhc1ByZXZQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAodGhpcy5zdHJhdGVneSkge1xuICAgICAgY2FzZSBQYWdpbmF0aW9uU3RyYXRlZ3kuUGFnZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc1ByZXZQYWdlUGFnZVN0cmF0ZWd5O1xuICAgICAgY2FzZSBQYWdpbmF0aW9uU3RyYXRlZ3kuT2Zmc2V0OlxuICAgICAgICByZXR1cm4gdGhpcy5faGFzUHJldlBhZ2VPZmZzZXRTdHJhdGVneTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSWYgbmV4dCBwYWdlIGNhbiBiZSBhY3RpdmF0ZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgaGFzTmV4dFBhZ2UoKTogYm9vbGVhbiB7IC8vIE5lZWQgdG8gY2hlY2sgaWYgcGFnZXMgPT09IHBhZ2UgJiYgcGFnZSA9PT0gMVxuICAgIHN3aXRjaCAodGhpcy5zdHJhdGVneSkge1xuICAgICAgY2FzZSBQYWdpbmF0aW9uU3RyYXRlZ3kuUGFnZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc05leHRQYWdlUGFnZVN0cmF0ZWd5O1xuICAgICAgY2FzZSBQYWdpbmF0aW9uU3RyYXRlZ3kuT2Zmc2V0OlxuICAgICAgICByZXR1cm4gdGhpcy5faGFzTmV4dFBhZ2VPZmZzZXRTdHJhdGVneTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxvYWRNb3JlRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZE1vcmVDb25maWcuZW5hYmxlZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbG9hZE1vcmVMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9sb2FkTW9yZUNvbmZpZy5sYWJlbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbG9hZE1vcmVCdXR0b25Db2xvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9sb2FkTW9yZUNvbmZpZy5idXR0b25Db2xvcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbG9hZE1vcmVCdXR0b25DbGFzcygpOiBzdHJpbmcge1xuICAgIGlmKCB0aGlzLl9sb2FkTW9yZUNvbmZpZy5idXR0b25UeXBlID09PSAnYmFzaWMnICkge1xuICAgICAgcmV0dXJuICcnOyBcbiAgICB9XG5cbiAgICByZXR1cm4gYG1hdC0ke3RoaXMuX2xvYWRNb3JlQ29uZmlnLmJ1dHRvblR5cGV9LWJ1dHRvbmA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxvYWRNb3JlQnV0dG9uVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9sb2FkTW9yZUNvbmZpZy5idXR0b25UeXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNQLVQxOTc0XG4gICAqIFNob3dpbmcgMjYtNTAgb2YgMzMzIHJlc3VsdHMgc29ydGVkIGJ5IE5hbWUsIEFzY2VuZGluZ1xuICAgKiBTaG93aW5nIDAgcmVzdWx0cyBzb3J0ZWQgYnkgTmFtZSwgQXNjZW5kaW5nXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN0YXR1c0xhYmVsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY3VycmVudCA9ICh0aGlzLnBhZ2UgLSAxKSAqIHRoaXMubGltaXQ7XG4gICAgY29uc3QgZnJvbSA9IGN1cnJlbnQgKyAxO1xuICAgIGNvbnN0IHRvID0gTWF0aC5taW4odGhpcy5yZWNvcmRzLCBjdXJyZW50ICsgdGhpcy5saW1pdCk7XG5cbiAgICByZXR1cm4gYCR7ZnJvbX0tJHt0b31gO1xuICB9XG5cbiAgcHVibGljIGdldCBzdGF0ZSgpOiBJUGFnaW5hdGlvblN0YXRlIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW5hYmxlZDogdGhpcy5lbmFibGVkLFxuICAgICAgc3RyYXRlZ3k6IHRoaXMuc3RyYXRlZ3ksXG4gICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgbGltaXQ6IHRoaXMubGltaXQsXG4gICAgICByZWNvcmRzOiB0aGlzLnJlY29yZHMsXG4gICAgICBkaXNwbGF5ZWQ6IHRoaXMuZGlzcGxheWVkLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgaW5pdFdpdGhDb25maWcoXG4gICAgY29uZmlnOiBGc1BhZ2luZyB8IGZhbHNlLFxuICAgIGxvYWRNb3JlOiBGc0xpc3RMb2FkTW9yZUNvbmZpZyB8IGJvb2xlYW4sXG4gICkge1xuXG4gICAgaWYgKGNvbmZpZykge1xuICAgICAgaWYgKGNvbmZpZy5saW1pdHMpIHtcbiAgICAgICAgdGhpcy5saW1pdHMgPSBjb25maWcubGltaXRzO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLmxpbWl0KSB7XG4gICAgICAgIHRoaXMubGltaXQgPSBjb25maWcubGltaXQ7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RyYXRlZ3kgPSBjb25maWcuc3RyYXRlZ3k7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuc2V0TG9hZE1vcmUobG9hZE1vcmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHBhZ2luYXRpb24gaGFzIHByZXYgcGFnZSB3aGVuIFBhZ2UgU3RyYXRlZ3lcbiAgICovXG4gIHByaXZhdGUgZ2V0IF9oYXNQcmV2UGFnZVBhZ2VTdHJhdGVneSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlID4gMSAmJiB0aGlzLnBhZ2VzID4gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBwYWdpbmF0aW9uIGhhcyBwcmV2IHBhZ2Ugd2hlbiBPZmZzZXQgU3RyYXRlZ3lcbiAgICovXG4gIHByaXZhdGUgZ2V0IF9oYXNQcmV2UGFnZU9mZnNldFN0cmF0ZWd5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9mZnNldCA+PSB0aGlzLmxpbWl0ICYmIHRoaXMucmVjb3JkcyA+IDE7XG4gIH1cblxuICAvKipcbiAgICogSWYgcGFnaW5hdGlvbiBoYXMgbmV4dCBwYWdlIHdoZW4gUGFnZSBTdHJhdGVneVxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgX2hhc05leHRQYWdlUGFnZVN0cmF0ZWd5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBhZ2UgPCB0aGlzLnBhZ2VzICYmIHRoaXMucGFnZXMgPiAxO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHBhZ2luYXRpb24gaGFzIG5leHQgcGFnZSB3aGVuIE9mZnNldCBTdHJhdGVneVxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgX2hhc05leHRQYWdlT2Zmc2V0U3RyYXRlZ3koKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLm9mZnNldCArIHRoaXMubGltaXQpIDwgdGhpcy5yZWNvcmRzICYmIHRoaXMucmVjb3JkcyA+IDE7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHBhZ2luZyBjb25maWcgYW5kIGFsbCByZWxhdGVkIGZpZWxkc1xuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnXG4gICAqIEBwYXJhbSBkaXNwbGF5ZWRSZWNvcmRzXG4gICAqIEBwYXJhbSBsb2FkTW9yZU9wZXJhdGlvblxuICAgKi9cbiAgcHVibGljIHVwZGF0ZVBhZ2luZyhjb25maWcsIGRpc3BsYXllZFJlY29yZHMgPSAwLCBsb2FkTW9yZU9wZXJhdGlvbiA9IGZhbHNlKSB7XG4gICAgaWYgKCFsb2FkTW9yZU9wZXJhdGlvbikge1xuICAgICAgdGhpcy5fZnJvbVBhcmFtcyhjb25maWcpO1xuICAgICAgdGhpcy5kaXNwbGF5ZWQgPSBkaXNwbGF5ZWRSZWNvcmRzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlY29yZHMgPSBjb25maWcucmVjb3JkcztcblxuICAgICAgaWYgKHRoaXMucmVjb3JkcyA8IHRoaXMuZGlzcGxheWVkKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkID0gdGhpcy5yZWNvcmRzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZW1vdmVkUm93cyA9IDA7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlVG90YWxQYWdlcygpO1xuICB9XG5cbiAgLy8gLyoqXG4gIC8vICAqIFVwZGF0ZSBwYWdpbmcgd2hlbiBkYXRhIHNvdXJjZSBub3QgcmVtb3ZlXG4gIC8vICAqIEBwYXJhbSB7YW55W119IHJvd3NcbiAgLy8gICovXG4gIC8qcHVibGljIHVwZGF0ZVBhZ2luZ01hbnVhbChyb3dzOiBhbnlbXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJvd3MpICYmIHJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yZWNvcmRzID0gcm93cy5sZW5ndGg7XG4gICAgICB0aGlzLnBhZ2VzID0gTWF0aC5jZWlsKHJvd3MubGVuZ3RoIC8gdGhpcy5saW1pdCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVQYWdlc0FycmF5KCk7XG4gICAgdGhpcy51cGRhdGVEaXNwbGF5ZWQoKTtcbiAgfSovXG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBwYWdlcyBhcnJheSB3aXRoIG5ldyBwYWdlcyBjb3VudFxuICAgKi9cbiAgLy8gcHVibGljIHVwZGF0ZVBhZ2VzQXJyYXkoKSB7XG4gIC8vICAgY29uc3QgTUlERExFID0gMjtcbiAgLy8gICBjb25zdCBwYWdlc0FyciA9IFtdO1xuXG4gIC8vICAgbGV0IGZyb20gPSAwO1xuICAvLyAgIGxldCB0byA9IDA7XG4gIC8vICAgaWYgKHRoaXMucGFnZSA8IE1JRERMRSkge1xuICAvLyAgICAgZnJvbSA9IE1JRERMRSAtIDE7XG4gIC8vICAgICB0byA9IE1JRERMRSArIDE7XG4gIC8vICAgfSBlbHNlIGlmICh0aGlzLnBhZ2UgPj0gTUlERExFICYmIHRoaXMucGFnZSA8PSB0aGlzLnBhZ2VzIC0gTUlERExFICsgMSkge1xuICAvLyAgICAgZnJvbSA9IHRoaXMucGFnZSAtIDE7XG4gIC8vICAgICB0byA9IHRoaXMucGFnZSArIDE7XG4gIC8vICAgfSBlbHNlIGlmICh0aGlzLnBhZ2UgPiB0aGlzLnBhZ2VzIC0gTUlERExFICsgMSkge1xuICAvLyAgICAgZnJvbSA9IHRoaXMucGFnZXMgLSBNSURETEUgLSAxO1xuICAvLyAgICAgdG8gPSB0aGlzLnBhZ2VzO1xuICAvLyAgIH1cblxuICAvLyAgIGlmICghdGhpcy5wYWdlcyB8fCB0aGlzLnBhZ2VzIDwgNSkge1xuICAvLyAgICAgZnJvbSA9IDE7XG4gIC8vICAgICB0byA9IHRoaXMucGFnZXMgfHwgMDtcbiAgLy8gICB9XG5cbiAgLy8gICBmb3IgKGxldCBpID0gZnJvbTsgaSA8PSB0bzsgaSsrKSB7XG4gIC8vICAgICBwYWdlc0Fyci5wdXNoKGkpO1xuICAvLyAgIH1cblxuICAvLyAgIHRoaXMucGFnZXNBcnJheSA9IE9iamVjdC5hc3NpZ24oW10sIHBhZ2VzQXJyKTtcbiAgLy8gfVxuXG4gIHB1YmxpYyBzZXRMb2FkTW9yZShjb25maWc6IEZzTGlzdExvYWRNb3JlQ29uZmlnIHwgYm9vbGVhbikge1xuICAgIGNvbnN0IGxvYWRNb3JlQ29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ2Jvb2xlYW4nID8gXG4gICAgICB7XG4gICAgICAgIGVuYWJsZWQ6ICEhY29uZmlnLFxuICAgICAgfSA6IFxuICAgICAgKFxuICAgICAgICBjb25maWcgPT09IHVuZGVmaW5lZCA/IHt9IDoge1xuICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgdGhpcy5fbG9hZE1vcmVDb25maWcgPSB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGxhYmVsOiAnTG9hZCBNb3JlJyxcbiAgICAgIGJ1dHRvblR5cGU6ICdiYXNpYycsXG4gICAgICAuLi5sb2FkTW9yZUNvbmZpZyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBkaXNwYXllZCByZWNvcmRzIGNvdW50ZXJcbiAgICovXG4gIC8vIHB1YmxpYyB1cGRhdGVEaXNwbGF5ZWQoKSB7XG4gIC8vICAgdGhpcy5kaXNwbGF5ZWQgPSB0aGlzLmdldFZpc2libGVSZWNvcmRzKCk7XG4gIC8vIH1cblxuICAvKipcbiAgICogUmV0dXJuIGNvdW50IG9mIHJlY29yZHMgdGhhdCBjb3VsZCBiZSBzaG93biBvbiBwYWdlXG4gICAqL1xuICAvLyBwdWJsaWMgZ2V0VmlzaWJsZVJlY29yZHMoKSB7XG4gIC8vICAgY29uc3QgZGlmZiA9IHRoaXMuaGFzT2Zmc2V0U3RyYXRlZ3lcbiAgLy8gICAgID8gdGhpcy5yZWNvcmRzIC0gdGhpcy5vZmZzZXRcbiAgLy8gICAgIDogdGhpcy5saW1pdDtcbiAgLy9cbiAgLy8gICByZXR1cm4gZGlmZiA8IHRoaXMubGltaXRcbiAgLy8gICAgID8gZGlmZlxuICAvLyAgICAgOiB0aGlzLmRpc3BsYXllZDtcbiAgLy8gfVxuXG4gIHB1YmxpYyBnZXRWaXNpYmxlUmVjb3JkcygpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG5ldyBsaW1pdFxuICAgKlxuICAgKiBAcGFyYW0gbGltaXRcbiAgICovXG4gIHB1YmxpYyBzZXRMaW1pdChsaW1pdCkge1xuICAgIHRoaXMubGltaXQgPSBsaW1pdDtcbiAgICB0aGlzLnJlc2V0UGFnaW5nKCk7XG5cbiAgICB0aGlzLl9wYWdlQ2hhbmdlZCQubmV4dCh7XG4gICAgICB0eXBlOiBQYWdlQ2hhbmdlVHlwZS5MaW1pdENoYW5nZWQsXG4gICAgICBwYXlsb2FkOiBsaW1pdCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBwYWdlIGlzIGFjdGl2YXRlIHBhZ2VcbiAgICpcbiAgICogQHBhcmFtIHBhZ2VcbiAgICovXG4gIHB1YmxpYyBpc0FjdGl2ZShwYWdlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHBhZ2UgPT09IHRoaXMucGFnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHbyB0byBwYWdlXG4gICAqXG4gICAqIEBwYXJhbSBwYWdlXG4gICAqL1xuICBwdWJsaWMgZ29Ub1BhZ2UocGFnZSkge1xuICAgIGlmIChwYWdlID49IDEgJiYgdGhpcy5wYWdlICE9PSBwYWdlKSB7XG4gICAgICB0aGlzLnBhZ2UgPSBwYWdlO1xuXG4gICAgICB0aGlzLl91cGRhdGVPZmZzZXQoKTtcblxuICAgICAgdGhpcy5fcGFnZUNoYW5nZWQkLm5leHQoe1xuICAgICAgICB0eXBlOiBQYWdlQ2hhbmdlVHlwZS5EZWZhdWx0LFxuICAgICAgICBwYXlsb2FkOiBwYWdlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHBhZ2luZyBsaWtlIGl0IHdhcyBqdXN0IGluaXRpYWxpemVkXG4gICAqL1xuICBwdWJsaWMgcmVzZXRQYWdpbmcoKSB7XG4gICAgdGhpcy5wYWdlID0gMTtcbiAgICB0aGlzLm9mZnNldCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogR28gdG8gbmV4dCBwYWdlXG4gICAqL1xuICBwdWJsaWMgZ29OZXh0KCkge1xuICAgIGlmICh0aGlzLmhhc05leHRQYWdlKSB7XG4gICAgICB0aGlzLnBhZ2UrKztcblxuICAgICAgdGhpcy5fdXBkYXRlT2Zmc2V0KCk7XG5cbiAgICAgIHRoaXMuX3BhZ2VDaGFuZ2VkJC5uZXh0KHtcbiAgICAgICAgdHlwZTogUGFnZUNoYW5nZVR5cGUuRGVmYXVsdCxcbiAgICAgICAgcGF5bG9hZDogdGhpcy5wYWdlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdvIHRvIGZpcnN0IHBhZ2VcbiAgICovXG4gIHB1YmxpYyBnb0ZpcnN0KCkge1xuICAgIGlmICh0aGlzLnBhZ2UgPiAxKSB7XG4gICAgICB0aGlzLnBhZ2UgPSAxO1xuXG4gICAgICB0aGlzLl91cGRhdGVPZmZzZXQoKTtcblxuICAgICAgdGhpcy5fcGFnZUNoYW5nZWQkLm5leHQoe1xuICAgICAgICB0eXBlOiBQYWdlQ2hhbmdlVHlwZS5EZWZhdWx0LFxuICAgICAgICBwYXlsb2FkOiB0aGlzLnBhZ2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR28gdG8gcHJldiBwYWdlXG4gICAqL1xuICBwdWJsaWMgZ29QcmV2KCkge1xuICAgIGlmICh0aGlzLnBhZ2UgPiAxKSB7XG4gICAgICB0aGlzLnBhZ2UtLTtcblxuICAgICAgdGhpcy5fdXBkYXRlT2Zmc2V0KCk7XG5cbiAgICAgIHRoaXMuX3BhZ2VDaGFuZ2VkJC5uZXh0KHtcbiAgICAgICAgdHlwZTogUGFnZUNoYW5nZVR5cGUuRGVmYXVsdCxcbiAgICAgICAgcGF5bG9hZDogdGhpcy5wYWdlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdvIHRvIGxhc3QgcGFnZVxuICAgKi9cbiAgcHVibGljIGdvTGFzdCgpIHtcbiAgICBpZiAodGhpcy5wYWdlICE9PSB0aGlzLnBhZ2VzKSB7XG4gICAgICB0aGlzLnBhZ2UgPSB0aGlzLnBhZ2VzO1xuXG4gICAgICB0aGlzLl91cGRhdGVPZmZzZXQoKTtcblxuICAgICAgdGhpcy5fcGFnZUNoYW5nZWQkLm5leHQoe1xuICAgICAgICB0eXBlOiBQYWdlQ2hhbmdlVHlwZS5EZWZhdWx0LFxuICAgICAgICBwYXlsb2FkOiB0aGlzLnBhZ2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGNvdW50IG9mIGRlbGV0ZWQgcm93cy4gVGhpcyBjb3VudCB3aWxsIGJlIGFwcGxpZWQgZm9yIG9mZnNldCBjYWxjXG4gICAqXG4gICAqIEBwYXJhbSBjb3VudFxuICAgKi9cbiAgcHVibGljIHJlbW92ZVJvd3MoY291bnQ6IG51bWJlcikge1xuICAgIHRoaXMuX3JlbW92ZWRSb3dzICs9IGNvdW50O1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVBhZ2luYXRpb24oKSB7XG4gICAgdGhpcy5fdXBkYXRlVG90YWxQYWdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lcbiAgICovXG4gIHB1YmxpYyBkZXN0cm95KCkge1xuICAgIHRoaXMuX29uRGVzdHJveSQubmV4dChudWxsKTtcbiAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHBhZ2luZyBzdGF0ZVxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBwcml2YXRlIF9mcm9tUGFyYW1zKHBhcmFtcyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5sb2FkTW9yZUVuYWJsZWQpIHtcbiAgICAgIHRoaXMubGltaXQgPSBwYXJhbXMubGltaXQgPz8gMjU7XG4gICAgfVxuXG4gICAgdGhpcy5yZWNvcmRzID0gcGFyYW1zLnJlY29yZHM7XG4gICAgdGhpcy5tYW51YWwgPSBwYXJhbXMubWFudWFsO1xuXG4gICAgdGhpcy5wYWdlcyA9IHBhcmFtcy5wYWdlcyB8fCAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGMgYW5kIHVwZGF0ZSBvZmZzZXRcbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZU9mZnNldCgpIHtcbiAgICB0aGlzLm9mZnNldCA9IHRoaXMubGltaXQgKiAodGhpcy5wYWdlIC0gMSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsYyBhbmQgdXBkYXRlIHRvdGFsIGNvdW50IG9mIHBhZ2VzXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVUb3RhbFBhZ2VzKCkge1xuICAgIHRoaXMucGFnZXMgPSBNYXRoLmNlaWwodGhpcy5yZWNvcmRzIC8gdGhpcy5saW1pdCk7XG4gIH1cbn1cbiJdfQ==
@@ -10,10 +10,10 @@ export class PersistanceController extends FsPersistanceStore {
10
10
  constructor(_store, _route) {
11
11
  super(_store, _route);
12
12
  }
13
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PersistanceController, deps: [{ token: i1.FsStore }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
14
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PersistanceController });
13
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PersistanceController, deps: [{ token: i1.FsStore }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
14
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PersistanceController });
15
15
  }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PersistanceController, decorators: [{
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PersistanceController, decorators: [{
17
17
  type: Injectable
18
- }], ctorParameters: function () { return [{ type: i1.FsStore }, { type: i2.ActivatedRoute }]; } });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc2lzdGFuY2UtY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvY2xhc3Nlcy9wZXJzaXN0YW5jZS1jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7OztBQUdoRSxNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixDQUFDO0FBRzNDLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxrQkFBb0M7SUFFbkUsU0FBUyxHQUFHLGdCQUFnQixDQUFDO0lBRXZDLFlBQ0UsTUFBZSxFQUNmLE1BQXNCO1FBRXRCLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEIsQ0FBQzt3R0FUVSxxQkFBcUI7NEdBQXJCLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgRnNQZXJzaXN0YW5jZVN0b3JlLCBGc1N0b3JlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvc3RvcmUnO1xuaW1wb3J0IHsgRnNMaXN0UGVyc2l0YW5jZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5jb25zdCBGSUxURVJfU1RPUkVfS0VZID0gJ2ZzLWxpc3QtcGVyc2lzdCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQZXJzaXN0YW5jZUNvbnRyb2xsZXIgZXh0ZW5kcyBGc1BlcnNpc3RhbmNlU3RvcmU8RnNMaXN0UGVyc2l0YW5jZT4ge1xuXG4gIHByb3RlY3RlZCBTVE9SRV9LRVkgPSBGSUxURVJfU1RPUkVfS0VZO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIF9zdG9yZTogRnNTdG9yZSxcbiAgICBfcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICApIHtcbiAgICBzdXBlcihfc3RvcmUsIF9yb3V0ZSk7XG4gIH1cblxufVxuIl19
18
+ }], ctorParameters: () => [{ type: i1.FsStore }, { type: i2.ActivatedRoute }] });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc2lzdGFuY2UtY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvY2xhc3Nlcy9wZXJzaXN0YW5jZS1jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7OztBQUdoRSxNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixDQUFDO0FBRzNDLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxrQkFBb0M7SUFFbkUsU0FBUyxHQUFHLGdCQUFnQixDQUFDO0lBRXZDLFlBQ0UsTUFBZSxFQUNmLE1BQXNCO1FBRXRCLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEIsQ0FBQzt1R0FUVSxxQkFBcUI7MkdBQXJCLHFCQUFxQjs7MkZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgRnNQZXJzaXN0YW5jZVN0b3JlLCBGc1N0b3JlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvc3RvcmUnO1xuaW1wb3J0IHsgRnNMaXN0UGVyc2l0YW5jZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5jb25zdCBGSUxURVJfU1RPUkVfS0VZID0gJ2ZzLWxpc3QtcGVyc2lzdCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQZXJzaXN0YW5jZUNvbnRyb2xsZXIgZXh0ZW5kcyBGc1BlcnNpc3RhbmNlU3RvcmU8RnNMaXN0UGVyc2l0YW5jZT4ge1xuXG4gIHByb3RlY3RlZCBTVE9SRV9LRVkgPSBGSUxURVJfU1RPUkVfS0VZO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIF9zdG9yZTogRnNTdG9yZSxcbiAgICBfcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICApIHtcbiAgICBzdXBlcihfc3RvcmUsIF9yb3V0ZSk7XG4gIH1cblxufVxuIl19