igniteui-angular 12.2.5 → 12.2.9

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 (66) hide show
  1. package/bundles/igniteui-angular.umd.js +364 -495
  2. package/bundles/igniteui-angular.umd.js.map +1 -1
  3. package/esm2015/igniteui-angular.js +106 -107
  4. package/esm2015/lib/action-strip/grid-actions/grid-editing-actions.component.js +2 -2
  5. package/esm2015/lib/banner/banner.component.js +1 -1
  6. package/esm2015/lib/combo/combo-item.component.js +2 -2
  7. package/esm2015/lib/core/utils.js +24 -2
  8. package/esm2015/lib/data-operations/data-clone-strategy.js +7 -0
  9. package/esm2015/lib/data-operations/data-util.js +7 -6
  10. package/esm2015/lib/directives/radio/radio-group.directive.js +5 -13
  11. package/esm2015/lib/drop-down/drop-down-item.base.js +1 -5
  12. package/esm2015/lib/grids/api.service.js +2 -2
  13. package/esm2015/lib/grids/cell.component.js +1 -17
  14. package/esm2015/lib/grids/column-actions/column-actions.component.js +3 -7
  15. package/esm2015/lib/grids/common/crud.service.js +4 -3
  16. package/esm2015/lib/grids/common/grid.interface.js +1 -1
  17. package/esm2015/lib/grids/common/pipes.js +2 -2
  18. package/esm2015/lib/grids/common/row.interface.js +1 -1
  19. package/esm2015/lib/grids/grid/grid.component.js +3 -7
  20. package/esm2015/lib/grids/grid-base.directive.js +79 -118
  21. package/esm2015/lib/grids/grid-public-row.js +18 -16
  22. package/esm2015/lib/grids/headers/grid-header-row.component.js +2 -2
  23. package/esm2015/lib/grids/hierarchical-grid/hierarchical-grid.component.js +3 -7
  24. package/esm2015/lib/grids/row.directive.js +2 -3
  25. package/esm2015/lib/grids/summaries/grid-summary.service.js +2 -2
  26. package/esm2015/lib/grids/tree-grid/tree-grid.component.js +3 -7
  27. package/esm2015/lib/grids/tree-grid/tree-grid.pipes.js +3 -3
  28. package/esm2015/lib/icon/icon.component.js +1 -6
  29. package/esm2015/lib/services/overlay/overlay.js +2 -1
  30. package/esm2015/lib/services/overlay/utilities.js +1 -1
  31. package/esm2015/lib/services/transaction/base-transaction.js +17 -4
  32. package/esm2015/lib/services/transaction/igx-hierarchical-transaction.js +3 -4
  33. package/esm2015/lib/services/transaction/igx-transaction.js +3 -3
  34. package/esm2015/lib/services/transaction/transaction-factory.service.js +1 -2
  35. package/esm2015/lib/services/transaction/transaction.js +1 -1
  36. package/esm2015/lib/toast/toast.component.js +3 -6
  37. package/esm2015/public_api.js +2 -1
  38. package/fesm2015/igniteui-angular.js +171 -299
  39. package/fesm2015/igniteui-angular.js.map +1 -1
  40. package/igniteui-angular.d.ts +105 -106
  41. package/igniteui-angular.metadata.json +1 -1
  42. package/lib/banner/banner.component.d.ts +1 -2
  43. package/lib/core/utils.d.ts +12 -0
  44. package/lib/data-operations/data-clone-strategy.d.ts +6 -0
  45. package/lib/data-operations/data-util.d.ts +3 -2
  46. package/lib/directives/radio/radio-group.directive.d.ts +4 -4
  47. package/lib/grids/cell.component.d.ts +0 -9
  48. package/lib/grids/column-actions/column-actions.component.d.ts +2 -1
  49. package/lib/grids/common/grid.interface.d.ts +2 -0
  50. package/lib/grids/common/row.interface.d.ts +1 -0
  51. package/lib/grids/grid/grid.component.d.ts +2 -1
  52. package/lib/grids/grid-base.directive.d.ts +66 -37
  53. package/lib/grids/grid-public-row.d.ts +10 -3
  54. package/lib/grids/hierarchical-grid/hierarchical-grid.component.d.ts +2 -1
  55. package/lib/grids/tree-grid/tree-grid.component.d.ts +2 -1
  56. package/lib/icon/icon.component.d.ts +2 -2
  57. package/lib/services/overlay/utilities.d.ts +2 -1
  58. package/lib/services/transaction/base-transaction.d.ts +7 -0
  59. package/lib/services/transaction/transaction.d.ts +5 -0
  60. package/lib/toast/toast.component.d.ts +2 -0
  61. package/migrations/common/filterSourceDirs.d.ts +2 -2
  62. package/migrations/common/filterSourceDirs.js +2 -2
  63. package/package.json +1 -1
  64. package/public_api.d.ts +1 -0
  65. package/esm2015/lib/core/deprecateDecorators.js +0 -101
  66. package/lib/core/deprecateDecorators.d.ts +0 -20
@@ -1,7 +1,7 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { first } from 'rxjs/operators';
3
3
  import { Subject } from 'rxjs';
4
- import { isEqual } from '../../core/utils';
4
+ import { copyDescriptors, isEqual } from '../../core/utils';
5
5
  export class IgxEditRow {
6
6
  constructor(id, index, data, grid) {
7
7
  this.id = id;
@@ -342,7 +342,8 @@ export class IgxRowCrudState extends IgxCellCrudState {
342
342
  const rowInEditMode = grid.gridAPI.crudService.row;
343
343
  row.newData = value !== null && value !== void 0 ? value : rowInEditMode.transactionState;
344
344
  if (rowInEditMode && row.id === rowInEditMode.id) {
345
- row.data = Object.assign(Object.assign({}, row.data), rowInEditMode.transactionState);
345
+ // do not use spread operator here as it will copy everything over an empty object with no descriptors
346
+ row.data = Object.assign(copyDescriptors(row.data), row.data, rowInEditMode.transactionState);
346
347
  // TODO: Workaround for updating a row in edit mode through the API
347
348
  }
348
349
  else if (this.grid.transactions.enabled) {
@@ -557,4 +558,4 @@ export class IgxGridCRUDService extends IgxRowAddCrudState {
557
558
  IgxGridCRUDService.decorators = [
558
559
  { type: Injectable }
559
560
  ];
560
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2NvbW1vbi9jcnVkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJdkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0MsTUFBTSxPQUFPLFVBQVU7SUFLbkIsWUFBbUIsRUFBTyxFQUFTLEtBQWEsRUFBUyxJQUFTLEVBQVMsSUFBcUM7UUFBN0YsT0FBRSxHQUFGLEVBQUUsQ0FBSztRQUFTLFVBQUssR0FBTCxLQUFLLENBQVE7UUFBUyxTQUFJLEdBQUosSUFBSSxDQUFLO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBaUM7SUFBSSxDQUFDO0lBRTlHLG1CQUFtQixDQUFDLGVBQWUsR0FBRyxJQUFJLEVBQUUsS0FBYTs7UUFDNUQsTUFBTSxJQUFJLEdBQXVCO1lBQzdCLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNkLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNsQixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDbkIsTUFBTSxFQUFFLEtBQUs7WUFDYixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDaEIsUUFBUSxFQUFFLEtBQUs7WUFDZixLQUFLO1NBQ1IsQ0FBQztRQUNGLElBQUksZUFBZSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBQSxJQUFJLENBQUMsT0FBTyxtQ0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQzdDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJ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QixDQUFDLGFBQWEsQ0FBQztRQUM1RCxJQUFJLEtBQUssSUFBSSxVQUFVLEVBQUU7WUFDckIsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUNoQyxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ3JHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQztTQUNuRDtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7OztZQWpJSixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJR3JpZEVkaXREb25lRXZlbnRBcmdzLCBJR3JpZEVkaXRFdmVudEFyZ3MsIElneEdyaWRCYXNlRGlyZWN0aXZlLCBJUm93RGF0YUV2ZW50QXJncyB9IGZyb20gJy4uL2dyaWQvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hSb3dEaXJlY3RpdmUgfSBmcm9tICcuLi9yb3cuZGlyZWN0aXZlJztcbmltcG9ydCB7IEdyaWRUeXBlIH0gZnJvbSAnLi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBJZ3hFZGl0Um93IHtcbiAgICBwdWJsaWMgdHJhbnNhY3Rpb25TdGF0ZTogYW55O1xuICAgIHB1YmxpYyBzdGF0ZTogYW55O1xuICAgIHB1YmxpYyBuZXdEYXRhOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgaWQ6IGFueSwgcHVibGljIGluZGV4OiBudW1iZXIsIHB1YmxpYyBkYXRhOiBhbnksIHB1YmxpYyBncmlkOiBJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlKSB7IH1cblxuICAgIHB1YmxpYyBjcmVhdGVFZGl0RXZlbnRBcmdzKGluY2x1ZGVOZXdWYWx1ZSA9IHRydWUsIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBhcmdzOiBJR3JpZEVkaXRFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICByb3dJRDogdGhpcy5pZCxcbiAgICAgICAgICAgIHJvd0RhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgICAgIG9sZFZhbHVlOiB0aGlzLmRhdGEsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlLFxuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCxcbiAgICAgICAgICAgIGlzQWRkUm93OiBmYWxzZSxcbiAgICAgICAgICAgIGV2ZW50XG4gICAgICAgIH07XG4gICAgICAgIGlmIChpbmNsdWRlTmV3VmFsdWUpIHtcbiAgICAgICAgICAgIGFyZ3MubmV3VmFsdWUgPSB0aGlzLm5ld0RhdGEgPz8gdGhpcy5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVEb25lRWRpdEV2ZW50QXJncyhjYWNoZWRSb3dEYXRhOiBhbnksIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQgP1xuICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5pZCwgdHJ1ZSkgOiB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRSb3dEYXRhKHRoaXMuaWQpO1xuICAgICAgICBjb25zdCByb3dEYXRhID0gdXBkYXRlZERhdGEgPz8gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0Um93RGF0YSh0aGlzLmlkKTtcbiAgICAgICAgY29uc3QgYXJnczogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIHJvd0lEOiB0aGlzLmlkLFxuICAgICAgICAgICAgcm93RGF0YSxcbiAgICAgICAgICAgIG9sZFZhbHVlOiBjYWNoZWRSb3dEYXRhLFxuICAgICAgICAgICAgbmV3VmFsdWU6IHVwZGF0ZWREYXRhLFxuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCxcbiAgICAgICAgICAgIGlzQWRkUm93OiBmYWxzZSxcbiAgICAgICAgICAgIGV2ZW50XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJZ3hBZGRSb3cgZXh0ZW5kcyBJZ3hFZGl0Um93IHtcbiAgICBwdWJsaWMgaXNBZGRSb3cgPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGlkOiBhbnksXG4gICAgICAgIHB1YmxpYyBpbmRleDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgZGF0YTogYW55LFxuICAgICAgICBwdWJsaWMgcmVjb3JkUmVmOiBhbnksXG4gICAgICAgIHB1YmxpYyBncmlkOiBJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlKSB7XG4gICAgICAgIHN1cGVyKGlkLCBpbmRleCwgZGF0YSwgZ3JpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUVkaXRFdmVudEFyZ3MoaW5jbHVkZU5ld1ZhbHVlID0gdHJ1ZSwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBzdXBlci5jcmVhdGVFZGl0RXZlbnRBcmdzKGluY2x1ZGVOZXdWYWx1ZSwgZXZlbnQpO1xuICAgICAgICBhcmdzLm9sZFZhbHVlID0gbnVsbDtcbiAgICAgICAgYXJncy5pc0FkZFJvdyA9IHRydWU7XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVEb25lRWRpdEV2ZW50QXJncyhjYWNoZWRSb3dEYXRhOiBhbnksIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHN1cGVyLmNyZWF0ZURvbmVFZGl0RXZlbnRBcmdzKG51bGwsIGV2ZW50KTtcbiAgICAgICAgYXJncy5pc0FkZFJvdyA9IHRydWU7XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZ3hBZGRSb3dQYXJlbnQge1xuICAgIHJvd0lEOiBzdHJpbmc7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBhc0NoaWxkOiBib29sZWFuO1xuICAgIGlzUGlubmVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgSWd4Q2VsbCB7XG4gICAgcHVibGljIHByaW1hcnlLZXk6IGFueTtcbiAgICBwdWJsaWMgc3RhdGU6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgaWQsXG4gICAgICAgIHB1YmxpYyByb3dJbmRleDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgY29sdW1uLFxuICAgICAgICBwdWJsaWMgdmFsdWU6IGFueSxcbiAgICAgICAgcHVibGljIGVkaXRWYWx1ZTogYW55LFxuICAgICAgICBwdWJsaWMgcm93RGF0YTogYW55LFxuICAgICAgICBwdWJsaWMgZ3JpZDogSWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZSkgeyB9XG5cbiAgICBwdWJsaWMgY2FzdFRvTnVtYmVyKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09ICdudW1iZXInICYmICF0aGlzLmNvbHVtbi5pbmxpbmVFZGl0b3JUZW1wbGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuICFpc05hTih2KSAmJiBpc0Zpbml0ZSh2KSA/IHYgOiAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRWRpdEV2ZW50QXJncyhpbmNsdWRlTmV3VmFsdWUgPSB0cnVlLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgYXJnczogSUdyaWRFZGl0RXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgcm93SUQ6IHRoaXMuaWQucm93SUQsXG4gICAgICAgICAgICBjZWxsSUQ6IHRoaXMuaWQsXG4gICAgICAgICAgICByb3dEYXRhOiB0aGlzLnJvd0RhdGEsXG4gICAgICAgICAgICBvbGRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2UsXG4gICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCxcbiAgICAgICAgICAgIGV2ZW50XG4gICAgICAgIH07XG4gICAgICAgIGlmIChpbmNsdWRlTmV3VmFsdWUpIHtcbiAgICAgICAgICAgIGFyZ3MubmV3VmFsdWUgPSB0aGlzLmNhc3RUb051bWJlcih0aGlzLmVkaXRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURvbmVFZGl0RXZlbnRBcmdzKHZhbHVlOiBhbnksIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQgP1xuICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5pZC5yb3dJRCwgdHJ1ZSkgOiB0aGlzLnJvd0RhdGE7XG4gICAgICAgIGNvbnN0IHJvd0RhdGEgPSB1cGRhdGVkRGF0YSA9PT0gbnVsbCA/IHRoaXMuZ3JpZC5ncmlkQVBJLmdldFJvd0RhdGEodGhpcy5pZC5yb3dJRCkgOiB1cGRhdGVkRGF0YTtcbiAgICAgICAgY29uc3QgYXJnczogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIHJvd0lEOiB0aGlzLmlkLnJvd0lELFxuICAgICAgICAgICAgY2VsbElEOiB0aGlzLmlkLFxuICAgICAgICAgICAgLy8gcm93RGF0YSAtIHNob3VsZCBiZSB0aGUgdXBkYXRlZC9jb21taXR0ZWQgcm93RGF0YSAtIHRoaXMgZWZmZWN0aXZlbHkgc2hvdWxkIGJlIHRoZSBuZXdWYWx1ZVxuICAgICAgICAgICAgLy8gdGhlIG9ubHkgY2FzZSB3ZSB1c2UgdGhpcy5yb3dEYXRhIGRpcmVjdGx5LCBpcyB3aGVuIHRoZXJlIGlzIG5vIHJvd0VkaXRpbmcgb3IgdHJhbnNhY3Rpb25zIGVuYWJsZWRcbiAgICAgICAgICAgIHJvd0RhdGEsXG4gICAgICAgICAgICBvbGRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgIG5ld1ZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4sXG4gICAgICAgICAgICBvd25lcjogdGhpcy5ncmlkLFxuICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWd4Q2VsbENydWRTdGF0ZSB7XG4gICAgcHVibGljIGdyaWQ6IElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU7XG4gICAgcHVibGljIGNlbGw6IElneENlbGwgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgcm93OiBJZ3hFZGl0Um93IHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGlzSW5Db21wb3NpdGlvbk1vZGUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjcmVhdGVDZWxsKGNlbGwpOiBJZ3hDZWxsIHtcbiAgICAgICAgLy8gY2VsbC5yb3dEYXRhID8/IGNlbGwucm93LmRhdGEgY292ZXJzIHRoZSBjYXNlcywgd2hlcmVcbiAgICAgICAgLy8gMS4gY2VsbCBpcyBhbiBpbnN0YW5jZSBvZyBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAgICAvLyAyLiBjZWxsIGlzIGFuIGluc3RhbmNlIG9mIElneEdyaWRDZWxsXG4gICAgICAgIC8vIE5vdGU6IGlmIGF0IHNvbWUgcG9pbnQgd2UgYXJlIGdvaW5nIHRvIGdldCByaWQgb2YgdXNpbmcgMSksIHRoZW4gc2VlIHRlc3QgJ3Nob3VsZCBhbGxvdyBhZGRpbmcgcm93IHRvIGVtcHR5IGdyaWQnOlxuICAgICAgICAvLyBjZWxsLnJvdy5kYXRhIHdpbGwgcmV0dXJuIGEgeyBkYXRhOyByb3dJRCB9IG9iamVjdCBoZXJlLCBhbmQgdGVzdCB3aWxsIGZhaWxcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VsbCA9IG5ldyBJZ3hDZWxsKGNlbGwuY2VsbElEIHx8IGNlbGwuaWQsIGNlbGwucm93LmluZGV4LCBjZWxsLmNvbHVtbiwgY2VsbC52YWx1ZSwgY2VsbC52YWx1ZSxcbiAgICAgICAgICAgIGNlbGwucm93RGF0YSA/PyBjZWxsLnJvdy5kYXRhLCBjZWxsLmdyaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVSb3coY2VsbDogSWd4Q2VsbCk6IElneEVkaXRSb3cge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3cgPSBuZXcgSWd4RWRpdFJvdyhjZWxsLmlkLnJvd0lELCBjZWxsLnJvd0luZGV4LCBjZWxsLnJvd0RhdGEsIGNlbGwuZ3JpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNhbWVSb3cocm93SUQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93ICYmIHRoaXMucm93LmlkID09PSByb3dJRDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2FtZUNlbGwoY2VsbDogSWd4Q2VsbCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuY2VsbC5pZC5yb3dJRCA9PT0gY2VsbC5pZC5yb3dJRCAmJlxuICAgICAgICAgICAgdGhpcy5jZWxsLmlkLmNvbHVtbklEID09PSBjZWxsLmlkLmNvbHVtbklEKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNlbGxJbkVkaXRNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmNlbGw7XG4gICAgfVxuXG4gICAgcHVibGljIGJlZ2luQ2VsbEVkaXQoZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5jZWxsLmNyZWF0ZUVkaXRFdmVudEFyZ3MoZmFsc2UsIGV2ZW50KTtcbiAgICAgICAgdGhpcy5ncmlkLmNlbGxFZGl0RW50ZXIuZW1pdChhcmdzKTtcblxuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kQ2VsbEVkaXQoKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHVibGljIGNlbGxFZGl0KGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXMuY2VsbC5jcmVhdGVFZGl0RXZlbnRBcmdzKHRydWUsIGV2ZW50KTtcbiAgICAgICAgdGhpcy5ncmlkLmNlbGxFZGl0LmVtaXQoYXJncyk7XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVDZWxsKGV4aXQ6IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICBpZiAoIXRoaXMuY2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRvbmVBcmdzO1xuICAgICAgICBpZiAoaXNFcXVhbCh0aGlzLmNlbGwudmFsdWUsIHRoaXMuY2VsbC5lZGl0VmFsdWUpKSB7XG4gICAgICAgICAgICBkb25lQXJncyA9IHRoaXMuZXhpdENlbGxFZGl0KGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybiBkb25lQXJncztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLmNlbGxFZGl0KGV2ZW50KTtcbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJncztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnVwZGF0ZV9jZWxsKHRoaXMuY2VsbCk7XG5cbiAgICAgICAgZG9uZUFyZ3MgPSB0aGlzLmNlbGxFZGl0RG9uZShldmVudCwgZmFsc2UpO1xuICAgICAgICBpZiAoZXhpdCkge1xuICAgICAgICAgICAgZG9uZUFyZ3MgPSB0aGlzLmV4aXRDZWxsRWRpdChldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyAuLi5hcmdzLCAuLi5kb25lQXJncyB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBjZWxsRWRpdERvbmUoZXZlbnQsIGFkZFJvdzogYm9vbGVhbik6IElHcmlkRWRpdERvbmVFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuY2VsbC5jYXN0VG9OdW1iZXIodGhpcy5jZWxsLmVkaXRWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGRvbmVBcmdzID0gdGhpcy5jZWxsLmNyZWF0ZURvbmVFZGl0RXZlbnRBcmdzKG5ld1ZhbHVlLCBldmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZC5jZWxsRWRpdERvbmUuZW1pdChkb25lQXJncyk7XG4gICAgICAgIGlmIChhZGRSb3cpIHtcbiAgICAgICAgICAgIGRvbmVBcmdzLnJvd0RhdGEgPSB0aGlzLnJvdy5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkb25lQXJncztcbiAgICB9XG5cbiAgICAvKiogRXhpdCBjZWxsIGVkaXQgbW9kZSAqL1xuICAgIHB1YmxpYyBleGl0Q2VsbEVkaXQoZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdERvbmVFdmVudEFyZ3Mge1xuICAgICAgICBpZiAoIXRoaXMuY2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmNlbGwuY2FzdFRvTnVtYmVyKHRoaXMuY2VsbC5lZGl0VmFsdWUpO1xuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5jZWxsPy5jcmVhdGVEb25lRWRpdEV2ZW50QXJncyhuZXdWYWx1ZSwgZXZlbnQpO1xuXG4gICAgICAgIHRoaXMuY2VsbC52YWx1ZSA9IG5ld1ZhbHVlO1xuXG4gICAgICAgIHRoaXMuZ3JpZC5jZWxsRWRpdEV4aXQuZW1pdChhcmdzKTtcbiAgICAgICAgdGhpcy5lbmRDZWxsRWRpdCgpO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICAvKiogQ2xlYXJzIGNlbGwgZWRpdGluZyBzdGF0ZSAqL1xuICAgIHB1YmxpYyBlbmRDZWxsRWRpdCgpIHtcbiAgICAgICAgdGhpcy5jZWxsID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyB3aGV0aGVyIHRoZSB0YXJnZXRlZCBjZWxsIGlzIGluIGVkaXQgbW9kZSAqL1xuICAgIHB1YmxpYyB0YXJnZXRJbkVkaXQocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuY2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuY2VsbC5jb2x1bW4uaW5kZXggPT09IGNvbHVtbkluZGV4ICYmIHRoaXMuY2VsbC5yb3dJbmRleCA9PT0gcm93SW5kZXg7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIElneFJvd0NydWRTdGF0ZSBleHRlbmRzIElneENlbGxDcnVkU3RhdGUge1xuICAgIHB1YmxpYyByb3c6IElneEVkaXRSb3cgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgY2xvc2VSb3dFZGl0aW5nT3ZlcmxheSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBwcml2YXRlIF9yb3dFZGl0aW5nQmxvY2tlZCA9IGZhbHNlO1xuXG4gICAgcHVibGljIGdldCBwcmltYXJ5S2V5KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucHJpbWFyeUtleTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0luRWRpdE1vZGUoKTogSWd4Um93RGlyZWN0aXZlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+IHtcbiAgICAgICAgY29uc3QgZWRpdFJvd1N0YXRlID0gdGhpcy5yb3c7XG4gICAgICAgIHJldHVybiBlZGl0Um93U3RhdGUgIT09IG51bGwgPyB0aGlzLmdyaWQucm93TGlzdC5maW5kKGUgPT4gZS5yb3dJRCA9PT0gZWRpdFJvd1N0YXRlLmlkKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dFZGl0aW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnJvd0VkaXRhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93RWRpdGluZ0Jsb2NrZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dFZGl0aW5nQmxvY2tlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHJvd0VkaXRpbmdCbG9ja2VkKHZhbDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9yb3dFZGl0aW5nQmxvY2tlZCA9IHZhbDtcbiAgICB9XG5cbiAgICAvKiogRW50ZXJzIHJvdyBlZGl0IG1vZGUgKi9cbiAgICBwdWJsaWMgYmVnaW5Sb3dFZGl0KGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5yb3dFZGl0YWJsZSAmJiAodGhpcy5ncmlkLnByaW1hcnlLZXkgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmdyaWQucHJpbWFyeUtleSA9PT0gbnVsbCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGdyaWQgbXVzdCBoYXZlIGEgYHByaW1hcnlLZXlgIHNwZWNpZmllZCB3aGVuIHVzaW5nIGByb3dFZGl0YWJsZWAhJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMucm93IHx8ICEodGhpcy5yb3cuZ2V0Q2xhc3NOYW1lKCkgPT09IElneEVkaXRSb3cubmFtZSkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVJvdyh0aGlzLmNlbGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgcm93QXJncyA9IHRoaXMucm93LmNyZWF0ZUVkaXRFdmVudEFyZ3MoZmFsc2UsIGV2ZW50KTtcblxuICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0VkaXRFbnRlci5lbWl0KHJvd0FyZ3MpO1xuICAgICAgICAgICAgaWYgKHJvd0FyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmRFZGl0TW9kZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJvdy50cmFuc2FjdGlvblN0YXRlID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5yb3cuaWQsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5zdGFydFBlbmRpbmcoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5vcGVuUm93T3ZlcmxheSh0aGlzLnJvdy5pZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcm93RWRpdChldmVudDogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5yb3cuY3JlYXRlRWRpdEV2ZW50QXJncyh0cnVlLCBldmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0LmVtaXQoYXJncyk7XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVSb3coY29tbWl0OiBib29sZWFuLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgaWYgKCF0aGlzLmdyaWQucm93RWRpdGFibGUgfHxcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0aW5nT3ZlcmxheSAmJlxuICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0VkaXRpbmdPdmVybGF5LmNvbGxhcHNlZCB8fCAhdGhpcy5yb3cpIHtcbiAgICAgICAgICAgIHJldHVybiB7fSBhcyBJR3JpZEVkaXRFdmVudEFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYXJncztcbiAgICAgICAgaWYgKGNvbW1pdCkge1xuICAgICAgICAgICAgdGhpcy5yb3cubmV3RGF0YSA9IHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMucm93LmlkLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUm93RWRpdERhdGEodGhpcy5yb3csIHRoaXMucm93Lm5ld0RhdGEpO1xuICAgICAgICAgICAgYXJncyA9IHRoaXMucm93RWRpdChldmVudCk7XG4gICAgICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5yb3cubmV3RGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmNsZWFyKHRoaXMucm93LmlkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJncztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFyZ3MgPSB0aGlzLmVuZFJvd1RyYW5zYWN0aW9uKGNvbW1pdCwgZXZlbnQpO1xuXG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGVuZFJvd1RyYW5zYWN0aW9uKGNvbW1pdDogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIHRoaXMucm93Lm5ld0RhdGEgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRWYWx1ZSh0aGlzLnJvdy5pZCwgdHJ1ZSk7XG4gICAgICAgIGxldCByb3dFZGl0QXJncyA9IHRoaXMucm93LmNyZWF0ZUVkaXRFdmVudEFyZ3ModHJ1ZSwgZXZlbnQpO1xuXG4gICAgICAgIGxldCBub25DYW5jZWxhYmxlQXJncztcbiAgICAgICAgaWYgKCFjb21taXQpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5kUGVuZGluZyhmYWxzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yb3cuZ2V0Q2xhc3NOYW1lKCkgPT09IElneEVkaXRSb3cubmFtZSkge1xuICAgICAgICAgICAgcm93RWRpdEFyZ3MgPSB0aGlzLmdyaWQuZ3JpZEFQSS51cGRhdGVfcm93KHRoaXMucm93LCB0aGlzLnJvdy5uZXdEYXRhLCBldmVudCk7XG4gICAgICAgICAgICBub25DYW5jZWxhYmxlQXJncyA9IHRoaXMucm93RWRpdERvbmUocm93RWRpdEFyZ3Mub2xkVmFsdWUsIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0FkZEFyZ3MgPSB0aGlzLnJvdy5jcmVhdGVFZGl0RXZlbnRBcmdzKHRydWUsIGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dBZGQuZW1pdChyb3dBZGRBcmdzKTtcbiAgICAgICAgICAgIGlmIChyb3dBZGRBcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByb3dBZGRBcmdzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuZFBlbmRpbmcoZmFsc2UpO1xuXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMuZ2V0UGFyZW50Um93SWQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLmFkZFJvd1RvRGF0YSh0aGlzLnJvdy5uZXdEYXRhID8/IHRoaXMucm93LmRhdGEsIHBhcmVudElkKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmlnZ2VyUGlwZXMoKTtcblxuICAgICAgICAgICAgbm9uQ2FuY2VsYWJsZUFyZ3MgPSB0aGlzLnJvd0VkaXREb25lKG51bGwsIGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vbkNhbmNlbGFibGVBcmdzID0gdGhpcy5leGl0Um93RWRpdChyb3dFZGl0QXJncy5vbGRWYWx1ZSwgZXZlbnQpO1xuXG4gICAgICAgIHJldHVybiB7IC4uLm5vbkNhbmNlbGFibGVBcmdzLCAuLi5yb3dFZGl0QXJncyB9O1xuICAgIH1cblxuICAgIHB1YmxpYyByb3dFZGl0RG9uZShjYWNoZWRSb3dEYXRhLCBldmVudDogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgZG9uZUFyZ3MgPSB0aGlzLnJvdy5jcmVhdGVEb25lRWRpdEV2ZW50QXJncyhjYWNoZWRSb3dEYXRhLCBldmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0RG9uZS5lbWl0KGRvbmVBcmdzKTtcbiAgICAgICAgcmV0dXJuIGRvbmVBcmdzO1xuICAgIH1cblxuXG4gICAgLyoqIEV4aXQgcm93IGVkaXQgbW9kZSAqL1xuICAgIHB1YmxpYyBleGl0Um93RWRpdChjYWNoZWRSb3dEYXRhLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IG5vbkNhbmNlbGFibGVBcmdzID0gdGhpcy5yb3cuY3JlYXRlRG9uZUVkaXRFdmVudEFyZ3MoY2FjaGVkUm93RGF0YSwgZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWQucm93RWRpdEV4aXQuZW1pdChub25DYW5jZWxhYmxlQXJncyk7XG4gICAgICAgIHRoaXMuZ3JpZC5jbG9zZVJvd0VkaXRpbmdPdmVybGF5KCk7XG5cbiAgICAgICAgdGhpcy5lbmRSb3dFZGl0KCk7XG4gICAgICAgIHJldHVybiBub25DYW5jZWxhYmxlQXJncztcbiAgICB9XG5cbiAgICAvKiogQ2xlYXJzIHJvdyBlZGl0aW5nIHN0YXRlICovXG4gICAgcHVibGljIGVuZFJvd0VkaXQoKSB7XG4gICAgICAgIHRoaXMucm93ID0gbnVsbDtcbiAgICAgICAgdGhpcy5yb3dFZGl0aW5nQmxvY2tlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBDbGVhcnMgY2VsbCBhbmQgcm93IGVkaXRpbmcgc3RhdGUgYW5kIGNsb3NlcyByb3cgZWRpdGluZyB0ZW1wbGF0ZSBpZiBpdCBpcyBvcGVuICovXG4gICAgcHVibGljIGVuZEVkaXRNb2RlKCkge1xuICAgICAgICB0aGlzLmVuZENlbGxFZGl0KCk7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm93RWRpdGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kUm93RWRpdCgpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNsb3NlUm93RWRpdGluZ092ZXJsYXkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVSb3dFZGl0RGF0YShyb3c6IElneEVkaXRSb3csIHZhbHVlPzogYW55KSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG5cbiAgICAgICAgY29uc3Qgcm93SW5FZGl0TW9kZSA9IGdyaWQuZ3JpZEFQSS5jcnVkU2VydmljZS5yb3c7XG4gICAgICAgIHJvdy5uZXdEYXRhID0gdmFsdWUgPz8gcm93SW5FZGl0TW9kZS50cmFuc2FjdGlvblN0YXRlO1xuXG5cbiAgICAgICAgaWYgKHJvd0luRWRpdE1vZGUgJiYgcm93LmlkID09PSByb3dJbkVkaXRNb2RlLmlkKSB7XG4gICAgICAgICAgICByb3cuZGF0YSA9IHsgLi4ucm93LmRhdGEsIC4uLnJvd0luRWRpdE1vZGUudHJhbnNhY3Rpb25TdGF0ZSB9O1xuICAgICAgICAgICAgLy8gVE9ETzogV29ya2Fyb3VuZCBmb3IgdXBkYXRpbmcgYSByb3cgaW4gZWRpdCBtb2RlIHRocm91Z2ggdGhlIEFQSVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBncmlkLnRyYW5zYWN0aW9ucy5nZXRTdGF0ZShyb3cuaWQpO1xuICAgICAgICAgICAgcm93LmRhdGEgPSBzdGF0ZSA/IE9iamVjdC5hc3NpZ24oe30sIHJvdy5kYXRhLCBzdGF0ZS52YWx1ZSkgOiByb3cuZGF0YTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRQYXJlbnRSb3dJZCgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWd4Um93QWRkQ3J1ZFN0YXRlIGV4dGVuZHMgSWd4Um93Q3J1ZFN0YXRlIHtcbiAgICBwdWJsaWMgYWRkUm93UGFyZW50OiBJZ3hBZGRSb3dQYXJlbnQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlQWRkUm93KHBhcmVudFJvdzogSWd4Um93RGlyZWN0aXZlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+LCBhc0NoaWxkPzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmNyZWF0ZUFkZFJvd1BhcmVudChwYXJlbnRSb3csIGFzQ2hpbGQpO1xuXG4gICAgICAgIGNvbnN0IG5ld1JlYyA9IHRoaXMuZ3JpZC5nZXRFbXB0eVJlY29yZE9iamVjdEZvcihwYXJlbnRSb3cpO1xuICAgICAgICBjb25zdCBhZGRSb3dJbmRleCA9IHRoaXMuYWRkUm93UGFyZW50LmluZGV4ICsgMTtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93ID0gbmV3IElneEFkZFJvdyhuZXdSZWMucm93SUQsIGFkZFJvd0luZGV4LCBuZXdSZWMuZGF0YSwgbmV3UmVjLnJlY29yZFJlZiwgdGhpcy5ncmlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVBZGRSb3dQYXJlbnQocm93OiBJZ3hSb3dEaXJlY3RpdmU8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4sIG5ld1Jvd0FzQ2hpbGQ/OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gcm93ID8gcm93LmluZGV4IDogLTE7XG4gICAgICAgIGNvbnN0IHJvd0lkID0gcm93ID8gcm93LnJvd0lEIDogbnVsbDtcbiAgICAgICAgY29uc3QgaXNJblBpbm5lZEFyZWEgPSB0aGlzLmdyaWQuaXNSZWNvcmRQaW5uZWRCeVZpZXdJbmRleChyb3dJbmRleCk7XG4gICAgICAgIGNvbnN0IHBpbkluZGV4ID0gdGhpcy5ncmlkLnBpbm5lZFJlY29yZHMuZmluZEluZGV4KHggPT4geFt0aGlzLnByaW1hcnlLZXldID09PSByb3dJZCk7XG4gICAgICAgIGNvbnN0IHVucGluSW5kZXggPSB0aGlzLmdyaWQuZ2V0VW5waW5uZWRJbmRleEJ5SWQocm93SWQpO1xuICAgICAgICB0aGlzLmFkZFJvd1BhcmVudCA9IHtcbiAgICAgICAgICAgIHJvd0lEOiByb3dJZCxcbiAgICAgICAgICAgIGluZGV4OiBpc0luUGlubmVkQXJlYSA/IHBpbkluZGV4IDogdW5waW5JbmRleCxcbiAgICAgICAgICAgIGFzQ2hpbGQ6IG5ld1Jvd0FzQ2hpbGQsXG4gICAgICAgICAgICBpc1Bpbm5lZDogaXNJblBpbm5lZEFyZWFcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBlbmRSb3dUcmFuc2FjdGlvbihjb21taXQ6IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICBpZiAodGhpcy5yb3cgJiYgdGhpcy5yb3cuZ2V0Q2xhc3NOYW1lKCkgPT09IElneEFkZFJvdy5uYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQucm93QWRkZWQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKGFkZFJvd0FyZ3M6IElSb3dEYXRhRXZlbnRBcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93RGF0YSA9IGFkZFJvd0FyZ3MuZGF0YTtcbiAgICAgICAgICAgICAgICBjb25zdCBwaW5uZWRJbmRleCA9IHRoaXMuZ3JpZC5waW5uZWRSZWNvcmRzLmZpbmRJbmRleCh4ID0+IHhbdGhpcy5wcmltYXJ5S2V5XSA9PT0gcm93RGF0YVt0aGlzLnByaW1hcnlLZXldKTtcbiAgICAgICAgICAgICAgICAvLyBBIGNoZWNrIHdoZXRoZXIgdGhlIHJvdyBpcyBpbiB0aGUgY3VycmVudCB2aWV3XG4gICAgICAgICAgICAgICAgY29uc3Qgdmlld0luZGV4ID0gcGlubmVkSW5kZXggIT09IC0xID8gcGlubmVkSW5kZXggOiB0aGlzLl9maW5kUmVjb3JkSW5kZXhJblZpZXcocm93RGF0YSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YUluZGV4ID0gdGhpcy5ncmlkLmZpbHRlcmVkU29ydGVkRGF0YS5maW5kSW5kZXgoZGF0YSA9PiBkYXRhW3RoaXMucHJpbWFyeUtleV0gPT09IHJvd0RhdGFbdGhpcy5wcmltYXJ5S2V5XSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNJblZpZXcgPSB2aWV3SW5kZXggIT09IC0xICYmICF0aGlzLmdyaWQubmF2aWdhdGlvbi5zaG91bGRQZXJmb3JtVmVydGljYWxTY3JvbGwodmlld0luZGV4LCAwKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzaG93SW5kZXggPSBpc0luVmlldyA/IC0xIDogZGF0YUluZGV4O1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zaG93U25hY2tiYXJGb3Ioc2hvd0luZGV4KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJncyA9IHN1cGVyLmVuZFJvd1RyYW5zYWN0aW9uKGNvbW1pdCwgZXZlbnQpO1xuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmdzO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbmRBZGRSb3coKTtcbiAgICAgICAgaWYgKGNvbW1pdCkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0FkZGVkTm90aWZpZXIubmV4dCh7IGRhdGE6IGFyZ3MubmV3VmFsdWUgfSk7XG4gICAgICAgICAgICB0aGlzLmdyaWQucm93QWRkZWQuZW1pdCh7IGRhdGE6IGFyZ3MubmV3VmFsdWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBlbmRBZGRSb3coKSB7XG4gICAgICAgIHRoaXMuYWRkUm93UGFyZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5ncmlkLnRyaWdnZXJQaXBlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBUT0RPOiBjb25zaWRlciBjaGFuZ2luZyBtb2RpZmllclxuICAgICAqL1xuICAgIHB1YmxpYyBfZmluZFJlY29yZEluZGV4SW5WaWV3KHJlYykge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmRhdGFWaWV3LmZpbmRJbmRleChkYXRhID0+IGRhdGFbdGhpcy5wcmltYXJ5S2V5XSA9PT0gcmVjW3RoaXMucHJpbWFyeUtleV0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRQYXJlbnRSb3dJZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYWRkUm93UGFyZW50LmFzQ2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZFJvd1BhcmVudC5hc0NoaWxkID8gdGhpcy5hZGRSb3dQYXJlbnQucm93SUQgOiB1bmRlZmluZWQ7O1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWRkUm93UGFyZW50LnJvd0lEICE9PSBudWxsICYmIHRoaXMuYWRkUm93UGFyZW50LnJvd0lEICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwYXduZWRGb3JSZWNvcmQgPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcmVjX2J5X2lkKHRoaXMuYWRkUm93UGFyZW50LnJvd0lEKTtcbiAgICAgICAgICAgIHJldHVybiBzcGF3bmVkRm9yUmVjb3JkPy5wYXJlbnQ/LnJvd0lEO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4R3JpZENSVURTZXJ2aWNlIGV4dGVuZHMgSWd4Um93QWRkQ3J1ZFN0YXRlIHtcblxuICAgIHB1YmxpYyBlbnRlckVkaXRNb2RlKGNlbGwsIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbkNvbXBvc2l0aW9uTW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2VsbEluRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IGNhc2Ugc29sZWx5IGZvciBmMi9lbnRlciBuYXYgdGhhdCB1c2VzIGVudGVyRWRpdE1vZGUgYXMgdG9nZ2xlLiBSZWZhY3Rvci5cbiAgICAgICAgICAgIGNvbnN0IGNhbmNlbGVkID0gdGhpcy5lbmRFZGl0KHRydWUsIGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKCFjYW5jZWxlZCB8fCAhdGhpcy5jZWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnRib2R5Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgdGhpcy5jcmVhdGVDZWxsKGNlbGwpO1xuICAgICAgICAgICAgaWYgKHRoaXMucm93RWRpdGluZykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvdyAmJiAhdGhpcy5zYW1lUm93KHRoaXMuY2VsbD8uaWQ/LnJvd0lEKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0VkaXRpbmdCbG9ja2VkID0gdGhpcy5lbmRFZGl0KHRydWUsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucm93RWRpdGluZ0Jsb2NrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgZW50ZXJzIGhlcmUsIEBlbmRFZGl0IGNsZWFycyB0aGUgbmV3IHJlZmVyZW5jZSBvZiB0aGUgY2VsbCBlZGl0LlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUNlbGwoY2VsbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93RWRpdGluZ0Jsb2NrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmRSb3dFZGl0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgY2FuY2VsZWQgPSB0aGlzLmJlZ2luUm93RWRpdChldmVudCk7XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5jZWxlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luQ2VsbEVkaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJlZ2luQ2VsbEVkaXQoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW50ZXJzIGFkZCByb3cgbW9kZSBieSBjcmVhdGluZyB0ZW1wb3JhcnkgZHVtbXkgc28gdGhlIHVzZXIgY2FuIGZpbGwgaW4gbmV3IHJvdyBjZWxscy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJlbnRSb3cgUGFyZW50IHJvdyBhZnRlciB3aGljaCB0aGUgQWRkIFJvdyBVSSB3aWxsIGJlIHJlbmRlcmVkLlxuICAgICAqICAgICAgICAgICAgICAgICAgSWYgYG51bGxgIHdpbGwgc2hvdyBpdCBhdCB0aGUgYm90dG9tIGFmdGVyIGFsbCByb3dzIChvciB0b3AgaWYgdGhlcmUgYXJlIG5vdCByb3dzKS5cbiAgICAgKiBAcGFyYW0gYXNDaGlsZCBTcGVjaWZpZXMgaWYgdGhlIG5ldyByb3cgc2hvdWxkIGJlIGFkZGVkIGFzIGEgY2hpbGQgdG8gYSB0cmVlIHJvdy5cbiAgICAgKiBAcGFyYW0gZXZlbnQgQmFzZSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgYWRkIHJvdyBtb2RlLlxuICAgICAqL1xuICAgIHB1YmxpYyBlbnRlckFkZFJvd01vZGUocGFyZW50Um93OiBJZ3hSb3dEaXJlY3RpdmU8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4sIGFzQ2hpbGQ/OiBib29sZWFuLCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5yb3dFZGl0aW5nICYmICh0aGlzLmdyaWQucHJpbWFyeUtleSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID09PSBudWxsKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgZ3JpZCBtdXN0IHVzZSByb3cgZWRpdCBtb2RlIHRvIHBlcmZvcm0gcm93IGFkZGluZyEgUGxlYXNlIHNldCByb3dFZGl0YWJsZSB0byB0cnVlLicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5kRWRpdCh0cnVlLCBldmVudCk7XG5cbiAgICAgICAgaWYgKHBhcmVudFJvdyAhPSBudWxsICYmIHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KHBhcmVudFJvdy5yb3dJRCkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jb2xsYXBzZVJvdyhwYXJlbnRSb3cucm93SUQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jcmVhdGVBZGRSb3cocGFyZW50Um93LCBhc0NoaWxkKTtcblxuICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLnN0YXJ0UGVuZGluZygpO1xuICAgICAgICBpZiAodGhpcy5hZGRSb3dQYXJlbnQuaXNQaW5uZWQpIHtcbiAgICAgICAgICAgIC8vIElmIHBhcmVudCBpcyBwaW5uZWQsIGFkZCB0aGUgbmV3IHJvdyB0byBwaW5uZWQgcmVjb3Jkc1xuICAgICAgICAgICAgKHRoaXMuZ3JpZCBhcyBhbnkpLl9waW5uZWRSZWNvcmRJRHMuc3BsaWNlKHRoaXMucm93LmluZGV4LCAwLCB0aGlzLnJvdy5pZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWQudHJpZ2dlclBpcGVzKCk7XG4gICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKHRydWUpO1xuXG4gICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0ZVRvKHRoaXMucm93LmluZGV4LCAtMSk7XG4gICAgICAgIC8vIHdoZW4gc2VsZWN0aW5nIHRoZSBkdW1teSByb3cgd2UgbmVlZCB0byBhZGp1c3QgZm9yIHRvcCBwaW5uZWQgcm93c1xuICAgICAgICBjb25zdCBpbmRleEFkanVzdCA9IHRoaXMuZ3JpZC5pc1Jvd1Bpbm5pbmdUb1RvcCAmJiAhdGhpcy5hZGRSb3dQYXJlbnQuaXNQaW5uZWQgPyB0aGlzLmdyaWQucGlubmVkUm93cy5sZW5ndGggOiAwO1xuICAgICAgICBjb25zdCBkdW1teVJvdyA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yb3dfYnlfaW5kZXgodGhpcy5yb3cuaW5kZXggKyBpbmRleEFkanVzdCk7XG4gICAgICAgIGR1bW15Um93LnRyaWdnZXJBZGRBbmltYXRpb24oKTtcbiAgICAgICAgZHVtbXlSb3cuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgZHVtbXlSb3cuYWRkQW5pbWF0aW9uRW5kLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBkdW1teVJvdy5jZWxscy5maW5kKGMgPT4gYy5lZGl0YWJsZSk7XG4gICAgICAgICAgICBpZiAoY2VsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnVwZGF0ZV9jZWxsKHRoaXMuY2VsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbnRlckVkaXRNb2RlKGNlbGwsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICBjZWxsLmFjdGl2YXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmlzaGVzIHRoZSByb3cgdHJhbnNhY3Rpb25zIG9uIHRoZSBjdXJyZW50IHJvdy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogSWYgYGNvbW1pdCA9PT0gdHJ1ZWAsIHBhc3NlcyB0aGVtIGZyb20gdGhlIHBlbmRpbmcgc3RhdGUgdG8gdGhlIGRhdGEgKG9yIHRyYW5zYWN0aW9uIHNlcnZpY2UpXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGJ1dHRvbiBpZ3hCdXR0b24gKGNsaWNrKT1cImdyaWQuZW5kRWRpdCh0cnVlKVwiPkNvbW1pdCBSb3c8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gY29tbWl0XG4gICAgICovXG4gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoZSBzYW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtZXRob2Qgd2l0aG91dCBldnQgZW1pc3Npb24uXG4gICAgcHVibGljIGVuZEVkaXQoY29tbWl0ID0gdHJ1ZSwgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMucm93ICYmICF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBhcmdzO1xuICAgICAgICBpZiAoY29tbWl0KSB7XG4gICAgICAgICAgICBhcmdzID0gdGhpcy51cGRhdGVDZWxsKHRydWUsIGV2ZW50KTtcbiAgICAgICAgICAgIGlmIChhcmdzICYmIGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MuY2FuY2VsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5leGl0Q2VsbEVkaXQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJncyA9IHRoaXMudXBkYXRlUm93KGNvbW1pdCwgZXZlbnQpO1xuICAgICAgICB0aGlzLnJvd0VkaXRpbmdCbG9ja2VkID0gYXJncy5jYW5jZWw7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhY3RpdmVDZWxsID0gdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGV2ZW50ICYmIGFjdGl2ZUNlbGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0luZGV4ID0gYWN0aXZlQ2VsbC5yb3c7XG4gICAgICAgICAgICBjb25zdCB2aXNpYmxlQ29sSW5kZXggPSBhY3RpdmVDZWxsLmxheW91dCA/IGFjdGl2ZUNlbGwubGF5b3V0LmNvbHVtblZpc2libGVJbmRleCA6IGFjdGl2ZUNlbGwuY29sdW1uO1xuICAgICAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRlVG8ocm93SW5kZXgsIHZpc2libGVDb2xJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuIl19
561
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2NvbW1vbi9jcnVkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJdkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTVELE1BQU0sT0FBTyxVQUFVO0lBS25CLFlBQW1CLEVBQU8sRUFBUyxLQUFhLEVBQVMsSUFBUyxFQUFTLElBQXFDO1FBQTdGLE9BQUUsR0FBRixFQUFFLENBQUs7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBSztRQUFTLFNBQUksR0FBSixJQUFJLENBQWlDO0lBQUksQ0FBQztJQUU5RyxtQkFBbUIsQ0FBQyxlQUFlLEdBQUcsSUFBSSxFQUFFLEtBQWE7O1FBQzVELE1BQU0sSUFBSSxHQUF1QjtZQUM3QixLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDZCxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDbEIsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ25CLE1BQU0sRUFBRSxLQUFLO1lBQ2IsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2hCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsS0FBSztTQUNSLENBQUM7UUFDRixJQUFJLGVBQWUsRUFBRTtZQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQUEsSUFBSSxDQUFDLE9BQU8sbUNBQUksSUFBSSxDQUFDLElBQUksQ0FBQztTQUM3QztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSx1QkFBdUIsQ0FBQyxhQUFrQixFQUFFLEtBQWE7UUFDNUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRyxNQUFNLE9BQU8sR0FBRyxXQUFXLGFBQVgsV0FBVyxjQUFYLFdBQVcsR0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sSUFBSSxHQUEyQjtZQUNqQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDZCxPQUFPO1lBQ1AsUUFBUSxFQUFFLGFBQWE7WUFDdkIsUUFBUSxFQUFFLFdBQVc7WUFDckIsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2hCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsS0FBSztTQUNSLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sWUFBWTtRQUNmLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDakMsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLFNBQVUsU0FBUSxVQUFVO0lBR3JDLFlBQW1CLEVBQU8sRUFDZixLQUFhLEVBQ2IsSUFBUyxFQUNULFNBQWMsRUFDZCxJQUFxQztRQUM1QyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFMZCxPQUFFLEdBQUYsRUFBRSxDQUFLO1FBQ2YsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLFNBQUksR0FBSixJQUFJLENBQUs7UUFDVCxjQUFTLEdBQVQsU0FBUyxDQUFLO1FBQ2QsU0FBSSxHQUFKLElBQUksQ0FBaUM7UUFOekMsYUFBUSxHQUFHLElBQUksQ0FBQztJQVF2QixDQUFDO0lBRU0sbUJBQW1CLENBQUMsZUFBZSxHQUFHLElBQUksRUFBRSxLQUFhO1FBQzVELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLHVCQUF1QixDQUFDLGFBQWtCLEVBQUUsS0FBYTtRQUM1RCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FDSjtBQVNELE1BQU0sT0FBTyxPQUFPO0lBSWhCLFlBQ1csRUFBRSxFQUNGLFFBQWdCLEVBQ2hCLE1BQU0sRUFDTixLQUFVLEVBQ1YsU0FBYyxFQUNkLE9BQVksRUFDWixJQUFxQztRQU5yQyxPQUFFLEdBQUYsRUFBRSxDQUFBO1FBQ0YsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUNoQixXQUFNLEdBQU4sTUFBTSxDQUFBO1FBQ04sVUFBSyxHQUFMLEtBQUssQ0FBSztRQUNWLGNBQVMsR0FBVCxTQUFTLENBQUs7UUFDZCxZQUFPLEdBQVAsT0FBTyxDQUFLO1FBQ1osU0FBSSxHQUFKLElBQUksQ0FBaUM7SUFBSSxDQUFDO0lBRTlDLFlBQVksQ0FBQyxLQUFVO1FBQzFCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRTtZQUN4RSxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVNLG1CQUFtQixDQUFDLGVBQWUsR0FBRyxJQUFJLEVBQUUsS0FBYTtRQUM1RCxNQUFNLElBQUksR0FBdUI7WUFDN0IsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSztZQUNwQixNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDZixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ3BCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNoQixLQUFLO1NBQ1IsQ0FBQztRQUNGLElBQUksZUFBZSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDckQ7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sdUJBQXVCLENBQUMsS0FBVSxFQUFFLEtBQWE7UUFDcEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDbEYsTUFBTSxPQUFPLEdBQUcsV0FBVyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUNqRyxNQUFNLElBQUksR0FBMkI7WUFDakMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSztZQUNwQixNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDZiw4RkFBOEY7WUFDOUYscUdBQXFHO1lBQ3JHLE9BQU87WUFDUCxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDcEIsUUFBUSxFQUFFLEtBQUs7WUFDZixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2hCLEtBQUs7U0FDUixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLGdCQUFnQjtJQUE3QjtRQUVXLFNBQUksR0FBbUIsSUFBSSxDQUFDO1FBQzVCLFFBQUcsR0FBc0IsSUFBSSxDQUFDO1FBQzlCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztJQThHdkMsQ0FBQztJQTVHVSxVQUFVLENBQUMsSUFBSTs7UUFDbEIsd0RBQXdEO1FBQ3hELGlEQUFpRDtRQUNqRCx3Q0FBd0M7UUFDeEMscUhBQXFIO1FBQ3JILDhFQUE4RTtRQUM5RSxPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUN0RyxNQUFBLElBQUksQ0FBQyxPQUFPLG1DQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sU0FBUyxDQUFDLElBQWE7UUFDMUIsT0FBTyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVNLE9BQU8sQ0FBQyxLQUFLO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUM7SUFDN0MsQ0FBQztJQUVNLFFBQVEsQ0FBQyxJQUFhO1FBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLO1lBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDckIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRU0sYUFBYSxDQUFDLEtBQWE7UUFDOUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5DLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN0QjtJQUVMLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBYTtRQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxJQUFhLEVBQUUsS0FBYTtRQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNaLE9BQU87U0FDVjtRQUVELElBQUksUUFBUSxDQUFDO1FBQ2IsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMvQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxPQUFPLFFBQVEsQ0FBQztTQUNuQjtRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2IsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNDLElBQUksSUFBSSxFQUFFO1lBQ04sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdkM7UUFFRCx1Q0FBWSxJQUFJLEdBQUssUUFBUSxFQUFHO0lBQ3BDLENBQUM7SUFFTSxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQWU7UUFDdEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsSUFBSSxNQUFNLEVBQUU7WUFDUixRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1NBQ3BDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVELDBCQUEwQjtJQUNuQixZQUFZLENBQUMsS0FBYTs7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDWixPQUFPO1NBQ1Y7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdELE1BQU0sSUFBSSxHQUFHLE1BQUEsSUFBSSxDQUFDLElBQUksMENBQUUsdUJBQXVCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWpFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztRQUUzQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxnQ0FBZ0M7SUFDekIsV0FBVztRQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFRCx3REFBd0Q7SUFDakQsWUFBWSxDQUFDLFFBQWdCLEVBQUUsV0FBbUI7UUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDWixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDO1FBQ3RGLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztDQUNKO0FBQ0QsTUFBTSxPQUFPLGVBQWdCLFNBQVEsZ0JBQWdCO0lBQXJEOztRQUNXLFFBQUcsR0FBc0IsSUFBSSxDQUFDO1FBQzlCLDJCQUFzQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFdEMsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO0lBbUt2QyxDQUFDO0lBaktHLElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDcEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUM5QixPQUFPLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbkcsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFXLGlCQUFpQjtRQUN4QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBVyxpQkFBaUIsQ0FBQyxHQUFZO1FBQ3JDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLENBQUM7SUFDbEMsQ0FBQztJQUVELDJCQUEyQjtJQUNwQixZQUFZLENBQUMsS0FBYTtRQUM3QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ2hHLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUVBQXVFLENBQUMsQ0FBQztTQUN6RjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxLQUFLLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM3QjtZQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRTNELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUVELElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekYsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN6QztJQUNMLENBQUM7SUFFTSxPQUFPLENBQUMsS0FBWTtRQUN2QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLFNBQVMsQ0FBQyxNQUFlLEVBQUUsS0FBYTtRQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCO2dCQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDcEQsT0FBTyxFQUF3QixDQUFDO1NBQ25DO1FBRUQsSUFBSSxJQUFJLENBQUM7UUFDVCxJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2hGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkQsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNiLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxPQUFPLElBQUksQ0FBQzthQUNmO1NBQ0o7UUFFRCxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUU3QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUIsQ0FBQyxNQUFlLEVBQUUsS0FBYTs7UUFDbkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEYsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFNUQsSUFBSSxpQkFBaUIsQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVDO2FBQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxLQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDcEQsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzlFLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNyRTthQUFNO1lBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xDLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtnQkFDbkIsT0FBTyxVQUFVLENBQUM7YUFDckI7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFekMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxtQ0FBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBRXpCLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWxFLHVDQUFZLGlCQUFpQixHQUFLLFdBQVcsRUFBRztJQUNwRCxDQUFDO0lBRU0sV0FBVyxDQUFDLGFBQWEsRUFBRSxLQUFZO1FBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyQyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBR0QseUJBQXlCO0lBQ2xCLFdBQVcsQ0FBQyxhQUFhLEVBQUUsS0FBYTtRQUMzQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUVuQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsT0FBTyxpQkFBaUIsQ0FBQztJQUM3QixDQUFDO0lBRUQsK0JBQStCO0lBQ3hCLFVBQVU7UUFDYixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFFRCxzRkFBc0Y7SUFDL0UsV0FBVztRQUNkLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDdEM7SUFDTCxDQUFDO0lBRU0saUJBQWlCLENBQUMsR0FBZSxFQUFFLEtBQVc7UUFDakQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUV2QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUM7UUFDbkQsR0FBRyxDQUFDLE9BQU8sR0FBRyxLQUFLLGFBQUwsS0FBSyxjQUFMLEtBQUssR0FBSSxhQUFhLENBQUMsZ0JBQWdCLENBQUM7UUFHdEQsSUFBSSxhQUFhLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxhQUFhLENBQUMsRUFBRSxFQUFFO1lBQzlDLHNHQUFzRztZQUN0RyxHQUFHLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzlGLG1FQUFtRTtTQUN0RTthQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFO1lBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqRCxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7U0FDMUU7SUFDTCxDQUFDO0lBRVMsY0FBYztRQUNwQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsZUFBZTtJQUF2RDs7UUFDVyxpQkFBWSxHQUFvQixJQUFJLENBQUM7SUFzRmhELENBQUM7SUFwRkc7O09BRUc7SUFDSSxZQUFZLENBQUMsU0FBMkQsRUFBRSxPQUFpQjtRQUM5RixJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRTVDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pHLENBQUM7SUFFRDs7T0FFRztJQUNJLGtCQUFrQixDQUFDLEdBQXFELEVBQUUsYUFBdUI7UUFDcEcsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNyQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDdEYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsWUFBWSxHQUFHO1lBQ2hCLEtBQUssRUFBRSxLQUFLO1lBQ1osS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVO1lBQzdDLE9BQU8sRUFBRSxhQUFhO1lBQ3RCLFFBQVEsRUFBRSxjQUFjO1NBQzNCLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUIsQ0FBQyxNQUFlLEVBQUUsS0FBYTtRQUNuRCxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsS0FBSyxTQUFTLENBQUMsSUFBSSxFQUFFO1lBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQTZCLEVBQUUsRUFBRTtnQkFDekUsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDaEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVHLGlEQUFpRDtnQkFDakQsTUFBTSxTQUFTLEdBQUcsV0FBVyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDMUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDckgsTUFBTSxRQUFRLEdBQUcsU0FBUyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsMkJBQTJCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNyRyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxNQUFNLEVBQUU7WUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDcEQ7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTO1FBQ1osSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLHNCQUFzQixDQUFDLEdBQUc7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRVMsY0FBYzs7UUFDcEIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRTtZQUMzQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQUEsQ0FBQztTQUMzRTthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUNsRixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xGLE9BQU8sTUFBQSxnQkFBZ0IsYUFBaEIsZ0JBQWdCLHVCQUFoQixnQkFBZ0IsQ0FBRSxNQUFNLDBDQUFFLEtBQUssQ0FBQztTQUMxQztJQUNMLENBQUM7Q0FDSjtBQUdELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxrQkFBa0I7SUFFL0MsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFhOztRQUNwQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUMxQixPQUFPO1NBQ1Y7UUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsa0ZBQWtGO1lBQ2xGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRTNDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDekM7U0FDSjthQUFNO1lBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBQSxNQUFBLElBQUksQ0FBQyxJQUFJLDBDQUFFLEVBQUUsMENBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ2pELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDbkQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7d0JBQ3hCLE9BQU8sSUFBSSxDQUFDO3FCQUNmO29CQUVELHNFQUFzRTtvQkFDdEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztvQkFDL0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2lCQUNyQjtnQkFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQzdCO2FBRUo7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM3QjtTQUNKO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxlQUFlLENBQUMsU0FBMkQsRUFBRSxPQUFpQixFQUFFLEtBQWE7UUFDaEgsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDM0YsT0FBTyxDQUFDLElBQUksQ0FBQyx3RkFBd0YsQ0FBQyxDQUFDO1lBQ3ZHLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTFCLElBQUksU0FBUyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQztRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXRDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUU7WUFDNUIseURBQXlEO1lBQ3hELElBQUksQ0FBQyxJQUFZLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzlFO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU5QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLHFFQUFxRTtRQUNyRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pILE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBQ2xGLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQy9CLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2xELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xELElBQUksSUFBSSxFQUFFO2dCQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDbkI7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsOEVBQThFO0lBQ3ZFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEtBQWE7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ3pCLE9BQU87U0FDVjtRQUVELElBQUksSUFBSSxDQUFDO1FBQ1QsSUFBSSxNQUFNLEVBQUU7WUFDUixJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcEMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO2FBQ3RCO1NBQ0o7YUFBTTtZQUNILElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUI7UUFFRCxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2IsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO1FBQzVELElBQUksS0FBSyxJQUFJLFVBQVUsRUFBRTtZQUNyQixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQ2hDLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDckcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1NBQ25EO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzs7O1lBaklKLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElHcmlkRWRpdERvbmVFdmVudEFyZ3MsIElHcmlkRWRpdEV2ZW50QXJncywgSWd4R3JpZEJhc2VEaXJlY3RpdmUsIElSb3dEYXRhRXZlbnRBcmdzIH0gZnJvbSAnLi4vZ3JpZC9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElneFJvd0RpcmVjdGl2ZSB9IGZyb20gJy4uL3Jvdy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgR3JpZFR5cGUgfSBmcm9tICcuL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNvcHlEZXNjcmlwdG9ycywgaXNFcXVhbCB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgSWd4RWRpdFJvdyB7XG4gICAgcHVibGljIHRyYW5zYWN0aW9uU3RhdGU6IGFueTtcbiAgICBwdWJsaWMgc3RhdGU6IGFueTtcbiAgICBwdWJsaWMgbmV3RGF0YTogYW55O1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGlkOiBhbnksIHB1YmxpYyBpbmRleDogbnVtYmVyLCBwdWJsaWMgZGF0YTogYW55LCBwdWJsaWMgZ3JpZDogSWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZSkgeyB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRWRpdEV2ZW50QXJncyhpbmNsdWRlTmV3VmFsdWUgPSB0cnVlLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgYXJnczogSUdyaWRFZGl0RXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgcm93SUQ6IHRoaXMuaWQsXG4gICAgICAgICAgICByb3dEYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgICAgICBvbGRWYWx1ZTogdGhpcy5kYXRhLFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZSxcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICBpc0FkZFJvdzogZmFsc2UsXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaW5jbHVkZU5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBhcmdzLm5ld1ZhbHVlID0gdGhpcy5uZXdEYXRhID8/IHRoaXMuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRG9uZUVkaXRFdmVudEFyZ3MoY2FjaGVkUm93RGF0YTogYW55LCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkID9cbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMuaWQsIHRydWUpIDogdGhpcy5ncmlkLmdyaWRBUEkuZ2V0Um93RGF0YSh0aGlzLmlkKTtcbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IHVwZGF0ZWREYXRhID8/IHRoaXMuZ3JpZC5ncmlkQVBJLmdldFJvd0RhdGEodGhpcy5pZCk7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElHcmlkRWRpdERvbmVFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICByb3dJRDogdGhpcy5pZCxcbiAgICAgICAgICAgIHJvd0RhdGEsXG4gICAgICAgICAgICBvbGRWYWx1ZTogY2FjaGVkUm93RGF0YSxcbiAgICAgICAgICAgIG5ld1ZhbHVlOiB1cGRhdGVkRGF0YSxcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICBpc0FkZFJvdzogZmFsc2UsXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWd4QWRkUm93IGV4dGVuZHMgSWd4RWRpdFJvdyB7XG4gICAgcHVibGljIGlzQWRkUm93ID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBpZDogYW55LFxuICAgICAgICBwdWJsaWMgaW5kZXg6IG51bWJlcixcbiAgICAgICAgcHVibGljIGRhdGE6IGFueSxcbiAgICAgICAgcHVibGljIHJlY29yZFJlZjogYW55LFxuICAgICAgICBwdWJsaWMgZ3JpZDogSWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZSkge1xuICAgICAgICBzdXBlcihpZCwgaW5kZXgsIGRhdGEsIGdyaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVFZGl0RXZlbnRBcmdzKGluY2x1ZGVOZXdWYWx1ZSA9IHRydWUsIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBhcmdzID0gc3VwZXIuY3JlYXRlRWRpdEV2ZW50QXJncyhpbmNsdWRlTmV3VmFsdWUsIGV2ZW50KTtcbiAgICAgICAgYXJncy5vbGRWYWx1ZSA9IG51bGw7XG4gICAgICAgIGFyZ3MuaXNBZGRSb3cgPSB0cnVlO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRG9uZUVkaXRFdmVudEFyZ3MoY2FjaGVkUm93RGF0YTogYW55LCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBzdXBlci5jcmVhdGVEb25lRWRpdEV2ZW50QXJncyhudWxsLCBldmVudCk7XG4gICAgICAgIGFyZ3MuaXNBZGRSb3cgPSB0cnVlO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWd4QWRkUm93UGFyZW50IHtcbiAgICByb3dJRDogc3RyaW5nO1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgYXNDaGlsZDogYm9vbGVhbjtcbiAgICBpc1Bpbm5lZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIElneENlbGwge1xuICAgIHB1YmxpYyBwcmltYXJ5S2V5OiBhbnk7XG4gICAgcHVibGljIHN0YXRlOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGlkLFxuICAgICAgICBwdWJsaWMgcm93SW5kZXg6IG51bWJlcixcbiAgICAgICAgcHVibGljIGNvbHVtbixcbiAgICAgICAgcHVibGljIHZhbHVlOiBhbnksXG4gICAgICAgIHB1YmxpYyBlZGl0VmFsdWU6IGFueSxcbiAgICAgICAgcHVibGljIHJvd0RhdGE6IGFueSxcbiAgICAgICAgcHVibGljIGdyaWQ6IElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGUpIHsgfVxuXG4gICAgcHVibGljIGNhc3RUb051bWJlcih2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSAnbnVtYmVyJyAmJiAhdGhpcy5jb2x1bW4uaW5saW5lRWRpdG9yVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiAhaXNOYU4odikgJiYgaXNGaW5pdGUodikgPyB2IDogMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUVkaXRFdmVudEFyZ3MoaW5jbHVkZU5ld1ZhbHVlID0gdHJ1ZSwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElHcmlkRWRpdEV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIHJvd0lEOiB0aGlzLmlkLnJvd0lELFxuICAgICAgICAgICAgY2VsbElEOiB0aGlzLmlkLFxuICAgICAgICAgICAgcm93RGF0YTogdGhpcy5yb3dEYXRhLFxuICAgICAgICAgICAgb2xkVmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlLFxuICAgICAgICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbixcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaW5jbHVkZU5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBhcmdzLm5ld1ZhbHVlID0gdGhpcy5jYXN0VG9OdW1iZXIodGhpcy5lZGl0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVEb25lRWRpdEV2ZW50QXJncyh2YWx1ZTogYW55LCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkID9cbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMuaWQucm93SUQsIHRydWUpIDogdGhpcy5yb3dEYXRhO1xuICAgICAgICBjb25zdCByb3dEYXRhID0gdXBkYXRlZERhdGEgPT09IG51bGwgPyB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRSb3dEYXRhKHRoaXMuaWQucm93SUQpIDogdXBkYXRlZERhdGE7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElHcmlkRWRpdERvbmVFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICByb3dJRDogdGhpcy5pZC5yb3dJRCxcbiAgICAgICAgICAgIGNlbGxJRDogdGhpcy5pZCxcbiAgICAgICAgICAgIC8vIHJvd0RhdGEgLSBzaG91bGQgYmUgdGhlIHVwZGF0ZWQvY29tbWl0dGVkIHJvd0RhdGEgLSB0aGlzIGVmZmVjdGl2ZWx5IHNob3VsZCBiZSB0aGUgbmV3VmFsdWVcbiAgICAgICAgICAgIC8vIHRoZSBvbmx5IGNhc2Ugd2UgdXNlIHRoaXMucm93RGF0YSBkaXJlY3RseSwgaXMgd2hlbiB0aGVyZSBpcyBubyByb3dFZGl0aW5nIG9yIHRyYW5zYWN0aW9ucyBlbmFibGVkXG4gICAgICAgICAgICByb3dEYXRhLFxuICAgICAgICAgICAgb2xkVmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICBuZXdWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCxcbiAgICAgICAgICAgIGV2ZW50XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElneENlbGxDcnVkU3RhdGUge1xuICAgIHB1YmxpYyBncmlkOiBJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlO1xuICAgIHB1YmxpYyBjZWxsOiBJZ3hDZWxsIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIHJvdzogSWd4RWRpdFJvdyB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBpc0luQ29tcG9zaXRpb25Nb2RlID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY3JlYXRlQ2VsbChjZWxsKTogSWd4Q2VsbCB7XG4gICAgICAgIC8vIGNlbGwucm93RGF0YSA/PyBjZWxsLnJvdy5kYXRhIGNvdmVycyB0aGUgY2FzZXMsIHdoZXJlXG4gICAgICAgIC8vIDEuIGNlbGwgaXMgYW4gaW5zdGFuY2Ugb2cgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgICAgLy8gMi4gY2VsbCBpcyBhbiBpbnN0YW5jZSBvZiBJZ3hHcmlkQ2VsbFxuICAgICAgICAvLyBOb3RlOiBpZiBhdCBzb21lIHBvaW50IHdlIGFyZSBnb2luZyB0byBnZXQgcmlkIG9mIHVzaW5nIDEpLCB0aGVuIHNlZSB0ZXN0ICdzaG91bGQgYWxsb3cgYWRkaW5nIHJvdyB0byBlbXB0eSBncmlkJzpcbiAgICAgICAgLy8gY2VsbC5yb3cuZGF0YSB3aWxsIHJldHVybiBhIHsgZGF0YTsgcm93SUQgfSBvYmplY3QgaGVyZSwgYW5kIHRlc3Qgd2lsbCBmYWlsXG4gICAgICAgIHJldHVybiB0aGlzLmNlbGwgPSBuZXcgSWd4Q2VsbChjZWxsLmNlbGxJRCB8fCBjZWxsLmlkLCBjZWxsLnJvdy5pbmRleCwgY2VsbC5jb2x1bW4sIGNlbGwudmFsdWUsIGNlbGwudmFsdWUsXG4gICAgICAgICAgICBjZWxsLnJvd0RhdGEgPz8gY2VsbC5yb3cuZGF0YSwgY2VsbC5ncmlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlUm93KGNlbGw6IElneENlbGwpOiBJZ3hFZGl0Um93IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93ID0gbmV3IElneEVkaXRSb3coY2VsbC5pZC5yb3dJRCwgY2VsbC5yb3dJbmRleCwgY2VsbC5yb3dEYXRhLCBjZWxsLmdyaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzYW1lUm93KHJvd0lEKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvdyAmJiB0aGlzLnJvdy5pZCA9PT0gcm93SUQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNhbWVDZWxsKGNlbGw6IElneENlbGwpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmNlbGwuaWQucm93SUQgPT09IGNlbGwuaWQucm93SUQgJiZcbiAgICAgICAgICAgIHRoaXMuY2VsbC5pZC5jb2x1bW5JRCA9PT0gY2VsbC5pZC5jb2x1bW5JRCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjZWxsSW5FZGl0TW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5jZWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBiZWdpbkNlbGxFZGl0KGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXMuY2VsbC5jcmVhdGVFZGl0RXZlbnRBcmdzKGZhbHNlLCBldmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZC5jZWxsRWRpdEVudGVyLmVtaXQoYXJncyk7XG5cbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICB0aGlzLmVuZENlbGxFZGl0KCk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHB1YmxpYyBjZWxsRWRpdChldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLmNlbGwuY3JlYXRlRWRpdEV2ZW50QXJncyh0cnVlLCBldmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZC5jZWxsRWRpdC5lbWl0KGFyZ3MpO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlQ2VsbChleGl0OiBib29sZWFuLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgaWYgKCF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkb25lQXJncztcbiAgICAgICAgaWYgKGlzRXF1YWwodGhpcy5jZWxsLnZhbHVlLCB0aGlzLmNlbGwuZWRpdFZhbHVlKSkge1xuICAgICAgICAgICAgZG9uZUFyZ3MgPSB0aGlzLmV4aXRDZWxsRWRpdChldmVudCk7XG4gICAgICAgICAgICByZXR1cm4gZG9uZUFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5jZWxsRWRpdChldmVudCk7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS51cGRhdGVfY2VsbCh0aGlzLmNlbGwpO1xuXG4gICAgICAgIGRvbmVBcmdzID0gdGhpcy5jZWxsRWRpdERvbmUoZXZlbnQsIGZhbHNlKTtcbiAgICAgICAgaWYgKGV4aXQpIHtcbiAgICAgICAgICAgIGRvbmVBcmdzID0gdGhpcy5leGl0Q2VsbEVkaXQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgLi4uYXJncywgLi4uZG9uZUFyZ3MgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2VsbEVkaXREb25lKGV2ZW50LCBhZGRSb3c6IGJvb2xlYW4pOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmNlbGwuY2FzdFRvTnVtYmVyKHRoaXMuY2VsbC5lZGl0VmFsdWUpO1xuICAgICAgICBjb25zdCBkb25lQXJncyA9IHRoaXMuY2VsbC5jcmVhdGVEb25lRWRpdEV2ZW50QXJncyhuZXdWYWx1ZSwgZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWQuY2VsbEVkaXREb25lLmVtaXQoZG9uZUFyZ3MpO1xuICAgICAgICBpZiAoYWRkUm93KSB7XG4gICAgICAgICAgICBkb25lQXJncy5yb3dEYXRhID0gdGhpcy5yb3cuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG9uZUFyZ3M7XG4gICAgfVxuXG4gICAgLyoqIEV4aXQgY2VsbCBlZGl0IG1vZGUgKi9cbiAgICBwdWJsaWMgZXhpdENlbGxFZGl0KGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgaWYgKCF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5jZWxsLmNhc3RUb051bWJlcih0aGlzLmNlbGwuZWRpdFZhbHVlKTtcbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXMuY2VsbD8uY3JlYXRlRG9uZUVkaXRFdmVudEFyZ3MobmV3VmFsdWUsIGV2ZW50KTtcblxuICAgICAgICB0aGlzLmNlbGwudmFsdWUgPSBuZXdWYWx1ZTtcblxuICAgICAgICB0aGlzLmdyaWQuY2VsbEVkaXRFeGl0LmVtaXQoYXJncyk7XG4gICAgICAgIHRoaXMuZW5kQ2VsbEVkaXQoKTtcbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgLyoqIENsZWFycyBjZWxsIGVkaXRpbmcgc3RhdGUgKi9cbiAgICBwdWJsaWMgZW5kQ2VsbEVkaXQoKSB7XG4gICAgICAgIHRoaXMuY2VsbCA9IG51bGw7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgd2hldGhlciB0aGUgdGFyZ2V0ZWQgY2VsbCBpcyBpbiBlZGl0IG1vZGUgKi9cbiAgICBwdWJsaWMgdGFyZ2V0SW5FZGl0KHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSB0aGlzLmNlbGwuY29sdW1uLmluZGV4ID09PSBjb2x1bW5JbmRleCAmJiB0aGlzLmNlbGwucm93SW5kZXggPT09IHJvd0luZGV4O1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBJZ3hSb3dDcnVkU3RhdGUgZXh0ZW5kcyBJZ3hDZWxsQ3J1ZFN0YXRlIHtcbiAgICBwdWJsaWMgcm93OiBJZ3hFZGl0Um93IHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGNsb3NlUm93RWRpdGluZ092ZXJsYXkgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgcHJpdmF0ZSBfcm93RWRpdGluZ0Jsb2NrZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBnZXQgcHJpbWFyeUtleSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dJbkVkaXRNb2RlKCk6IElneFJvd0RpcmVjdGl2ZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPiB7XG4gICAgICAgIGNvbnN0IGVkaXRSb3dTdGF0ZSA9IHRoaXMucm93O1xuICAgICAgICByZXR1cm4gZWRpdFJvd1N0YXRlICE9PSBudWxsID8gdGhpcy5ncmlkLnJvd0xpc3QuZmluZChlID0+IGUucm93SUQgPT09IGVkaXRSb3dTdGF0ZS5pZCkgOiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93RWRpdGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5yb3dFZGl0YWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0VkaXRpbmdCbG9ja2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93RWRpdGluZ0Jsb2NrZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCByb3dFZGl0aW5nQmxvY2tlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcm93RWRpdGluZ0Jsb2NrZWQgPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqIEVudGVycyByb3cgZWRpdCBtb2RlICovXG4gICAgcHVibGljIGJlZ2luUm93RWRpdChldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm93RWRpdGFibGUgJiYgKHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID09PSB1bmRlZmluZWQgfHwgdGhpcy5ncmlkLnByaW1hcnlLZXkgPT09IG51bGwpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBncmlkIG11c3QgaGF2ZSBhIGBwcmltYXJ5S2V5YCBzcGVjaWZpZWQgd2hlbiB1c2luZyBgcm93RWRpdGFibGVgIScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnJvdyB8fCAhKHRoaXMucm93LmdldENsYXNzTmFtZSgpID09PSBJZ3hFZGl0Um93Lm5hbWUpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucm93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVSb3codGhpcy5jZWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJvd0FyZ3MgPSB0aGlzLnJvdy5jcmVhdGVFZGl0RXZlbnRBcmdzKGZhbHNlLCBldmVudCk7XG5cbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0RW50ZXIuZW1pdChyb3dBcmdzKTtcbiAgICAgICAgICAgIGlmIChyb3dBcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kRWRpdE1vZGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yb3cudHJhbnNhY3Rpb25TdGF0ZSA9IHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMucm93LmlkLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuc3RhcnRQZW5kaW5nKCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQub3BlblJvd092ZXJsYXkodGhpcy5yb3cuaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJvd0VkaXQoZXZlbnQ6IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXMucm93LmNyZWF0ZUVkaXRFdmVudEFyZ3ModHJ1ZSwgZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWQucm93RWRpdC5lbWl0KGFyZ3MpO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlUm93KGNvbW1pdDogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLnJvd0VkaXRhYmxlIHx8XG4gICAgICAgICAgICB0aGlzLmdyaWQucm93RWRpdGluZ092ZXJsYXkgJiZcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0aW5nT3ZlcmxheS5jb2xsYXBzZWQgfHwgIXRoaXMucm93KSB7XG4gICAgICAgICAgICByZXR1cm4ge30gYXMgSUdyaWRFZGl0RXZlbnRBcmdzO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFyZ3M7XG4gICAgICAgIGlmIChjb21taXQpIHtcbiAgICAgICAgICAgIHRoaXMucm93Lm5ld0RhdGEgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRWYWx1ZSh0aGlzLnJvdy5pZCwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJvd0VkaXREYXRhKHRoaXMucm93LCB0aGlzLnJvdy5uZXdEYXRhKTtcbiAgICAgICAgICAgIGFyZ3MgPSB0aGlzLnJvd0VkaXQoZXZlbnQpO1xuICAgICAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucm93Lm5ld0RhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5jbGVhcih0aGlzLnJvdy5pZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhcmdzID0gdGhpcy5lbmRSb3dUcmFuc2FjdGlvbihjb21taXQsIGV2ZW50KTtcblxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBlbmRSb3dUcmFuc2FjdGlvbihjb21taXQ6IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICB0aGlzLnJvdy5uZXdEYXRhID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5yb3cuaWQsIHRydWUpO1xuICAgICAgICBsZXQgcm93RWRpdEFyZ3MgPSB0aGlzLnJvdy5jcmVhdGVFZGl0RXZlbnRBcmdzKHRydWUsIGV2ZW50KTtcblxuICAgICAgICBsZXQgbm9uQ2FuY2VsYWJsZUFyZ3M7XG4gICAgICAgIGlmICghY29tbWl0KSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuZFBlbmRpbmcoZmFsc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucm93LmdldENsYXNzTmFtZSgpID09PSBJZ3hFZGl0Um93Lm5hbWUpIHtcbiAgICAgICAgICAgIHJvd0VkaXRBcmdzID0gdGhpcy5ncmlkLmdyaWRBUEkudXBkYXRlX3Jvdyh0aGlzLnJvdywgdGhpcy5yb3cubmV3RGF0YSwgZXZlbnQpO1xuICAgICAgICAgICAgbm9uQ2FuY2VsYWJsZUFyZ3MgPSB0aGlzLnJvd0VkaXREb25lKHJvd0VkaXRBcmdzLm9sZFZhbHVlLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByb3dBZGRBcmdzID0gdGhpcy5yb3cuY3JlYXRlRWRpdEV2ZW50QXJncyh0cnVlLCBldmVudCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQucm93QWRkLmVtaXQocm93QWRkQXJncyk7XG4gICAgICAgICAgICBpZiAocm93QWRkQXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm93QWRkQXJncztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmRQZW5kaW5nKGZhbHNlKTtcblxuICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLmdldFBhcmVudFJvd0lkKCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS5hZGRSb3dUb0RhdGEodGhpcy5yb3cubmV3RGF0YSA/PyB0aGlzLnJvdy5kYXRhLCBwYXJlbnRJZCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQudHJpZ2dlclBpcGVzKCk7XG5cbiAgICAgICAgICAgIG5vbkNhbmNlbGFibGVBcmdzID0gdGhpcy5yb3dFZGl0RG9uZShudWxsLCBldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBub25DYW5jZWxhYmxlQXJncyA9IHRoaXMuZXhpdFJvd0VkaXQocm93RWRpdEFyZ3Mub2xkVmFsdWUsIGV2ZW50KTtcblxuICAgICAgICByZXR1cm4geyAuLi5ub25DYW5jZWxhYmxlQXJncywgLi4ucm93RWRpdEFyZ3MgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcm93RWRpdERvbmUoY2FjaGVkUm93RGF0YSwgZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGRvbmVBcmdzID0gdGhpcy5yb3cuY3JlYXRlRG9uZUVkaXRFdmVudEFyZ3MoY2FjaGVkUm93RGF0YSwgZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWQucm93RWRpdERvbmUuZW1pdChkb25lQXJncyk7XG4gICAgICAgIHJldHVybiBkb25lQXJncztcbiAgICB9XG5cblxuICAgIC8qKiBFeGl0IHJvdyBlZGl0IG1vZGUgKi9cbiAgICBwdWJsaWMgZXhpdFJvd0VkaXQoY2FjaGVkUm93RGF0YSwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdERvbmVFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBub25DYW5jZWxhYmxlQXJncyA9IHRoaXMucm93LmNyZWF0ZURvbmVFZGl0RXZlbnRBcmdzKGNhY2hlZFJvd0RhdGEsIGV2ZW50KTtcbiAgICAgICAgdGhpcy5ncmlkLnJvd0VkaXRFeGl0LmVtaXQobm9uQ2FuY2VsYWJsZUFyZ3MpO1xuICAgICAgICB0aGlzLmdyaWQuY2xvc2VSb3dFZGl0aW5nT3ZlcmxheSgpO1xuXG4gICAgICAgIHRoaXMuZW5kUm93RWRpdCgpO1xuICAgICAgICByZXR1cm4gbm9uQ2FuY2VsYWJsZUFyZ3M7XG4gICAgfVxuXG4gICAgLyoqIENsZWFycyByb3cgZWRpdGluZyBzdGF0ZSAqL1xuICAgIHB1YmxpYyBlbmRSb3dFZGl0KCkge1xuICAgICAgICB0aGlzLnJvdyA9IG51bGw7XG4gICAgICAgIHRoaXMucm93RWRpdGluZ0Jsb2NrZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQ2xlYXJzIGNlbGwgYW5kIHJvdyBlZGl0aW5nIHN0YXRlIGFuZCBjbG9zZXMgcm93IGVkaXRpbmcgdGVtcGxhdGUgaWYgaXQgaXMgb3BlbiAqL1xuICAgIHB1YmxpYyBlbmRFZGl0TW9kZSgpIHtcbiAgICAgICAgdGhpcy5lbmRDZWxsRWRpdCgpO1xuICAgICAgICBpZiAodGhpcy5ncmlkLnJvd0VkaXRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmVuZFJvd0VkaXQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jbG9zZVJvd0VkaXRpbmdPdmVybGF5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlUm93RWRpdERhdGEocm93OiBJZ3hFZGl0Um93LCB2YWx1ZT86IGFueSkge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkO1xuXG4gICAgICAgIGNvbnN0IHJvd0luRWRpdE1vZGUgPSBncmlkLmdyaWRBUEkuY3J1ZFNlcnZpY2Uucm93O1xuICAgICAgICByb3cubmV3RGF0YSA9IHZhbHVlID8/IHJvd0luRWRpdE1vZGUudHJhbnNhY3Rpb25TdGF0ZTtcblxuXG4gICAgICAgIGlmIChyb3dJbkVkaXRNb2RlICYmIHJvdy5pZCA9PT0gcm93SW5FZGl0TW9kZS5pZCkge1xuICAgICAgICAgICAgLy8gZG8gbm90IHVzZSBzcHJlYWQgb3BlcmF0b3IgaGVyZSBhcyBpdCB3aWxsIGNvcHkgZXZlcnl0aGluZyBvdmVyIGFuIGVtcHR5IG9iamVjdCB3aXRoIG5vIGRlc2NyaXB0b3JzXG4gICAgICAgICAgICByb3cuZGF0YSA9IE9iamVjdC5hc3NpZ24oY29weURlc2NyaXB0b3JzKHJvdy5kYXRhKSwgcm93LmRhdGEsIHJvd0luRWRpdE1vZGUudHJhbnNhY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAvLyBUT0RPOiBXb3JrYXJvdW5kIGZvciB1cGRhdGluZyBhIHJvdyBpbiBlZGl0IG1vZGUgdGhyb3VnaCB0aGUgQVBJXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IGdyaWQudHJhbnNhY3Rpb25zLmdldFN0YXRlKHJvdy5pZCk7XG4gICAgICAgICAgICByb3cuZGF0YSA9IHN0YXRlID8gT2JqZWN0LmFzc2lnbih7fSwgcm93LmRhdGEsIHN0YXRlLnZhbHVlKSA6IHJvdy5kYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFBhcmVudFJvd0lkKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJZ3hSb3dBZGRDcnVkU3RhdGUgZXh0ZW5kcyBJZ3hSb3dDcnVkU3RhdGUge1xuICAgIHB1YmxpYyBhZGRSb3dQYXJlbnQ6IElneEFkZFJvd1BhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVBZGRSb3cocGFyZW50Um93OiBJZ3hSb3dEaXJlY3RpdmU8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4sIGFzQ2hpbGQ/OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlQWRkUm93UGFyZW50KHBhcmVudFJvdywgYXNDaGlsZCk7XG5cbiAgICAgICAgY29uc3QgbmV3UmVjID0gdGhpcy5ncmlkLmdldEVtcHR5UmVjb3JkT2JqZWN0Rm9yKHBhcmVudFJvdyk7XG4gICAgICAgIGNvbnN0IGFkZFJvd0luZGV4ID0gdGhpcy5hZGRSb3dQYXJlbnQuaW5kZXggKyAxO1xuICAgICAgICByZXR1cm4gdGhpcy5yb3cgPSBuZXcgSWd4QWRkUm93KG5ld1JlYy5yb3dJRCwgYWRkUm93SW5kZXgsIG5ld1JlYy5kYXRhLCBuZXdSZWMucmVjb3JkUmVmLCB0aGlzLmdyaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZUFkZFJvd1BhcmVudChyb3c6IElneFJvd0RpcmVjdGl2ZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPiwgbmV3Um93QXNDaGlsZD86IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSByb3cgPyByb3cuaW5kZXggOiAtMTtcbiAgICAgICAgY29uc3Qgcm93SWQgPSByb3cgPyByb3cucm93SUQgOiBudWxsO1xuICAgICAgICBjb25zdCBpc0luUGlubmVkQXJlYSA9IHRoaXMuZ3JpZC5pc1JlY29yZFBpbm5lZEJ5Vmlld0luZGV4KHJvd0luZGV4KTtcbiAgICAgICAgY29uc3QgcGluSW5kZXggPSB0aGlzLmdyaWQucGlubmVkUmVjb3Jkcy5maW5kSW5kZXgoeCA9PiB4W3RoaXMucHJpbWFyeUtleV0gPT09IHJvd0lkKTtcbiAgICAgICAgY29uc3QgdW5waW5JbmRleCA9IHRoaXMuZ3JpZC5nZXRVbnBpbm5lZEluZGV4QnlJZChyb3dJZCk7XG4gICAgICAgIHRoaXMuYWRkUm93UGFyZW50ID0ge1xuICAgICAgICAgICAgcm93SUQ6IHJvd0lkLFxuICAgICAgICAgICAgaW5kZXg6IGlzSW5QaW5uZWRBcmVhID8gcGluSW5kZXggOiB1bnBpbkluZGV4LFxuICAgICAgICAgICAgYXNDaGlsZDogbmV3Um93QXNDaGlsZCxcbiAgICAgICAgICAgIGlzUGlubmVkOiBpc0luUGlubmVkQXJlYVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGVuZFJvd1RyYW5zYWN0aW9uKGNvbW1pdDogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIGlmICh0aGlzLnJvdyAmJiB0aGlzLnJvdy5nZXRDbGFzc05hbWUoKSA9PT0gSWd4QWRkUm93Lm5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dBZGRlZC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoYWRkUm93QXJnczogSVJvd0RhdGFFdmVudEFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dEYXRhID0gYWRkUm93QXJncy5kYXRhO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpbm5lZEluZGV4ID0gdGhpcy5ncmlkLnBpbm5lZFJlY29yZHMuZmluZEluZGV4KHggPT4geFt0aGlzLnByaW1hcnlLZXldID09PSByb3dEYXRhW3RoaXMucHJpbWFyeUtleV0pO1xuICAgICAgICAgICAgICAgIC8vIEEgY2hlY2sgd2hldGhlciB0aGUgcm93IGlzIGluIHRoZSBjdXJyZW50IHZpZXdcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3SW5kZXggPSBwaW5uZWRJbmRleCAhPT0gLTEgPyBwaW5uZWRJbmRleCA6IHRoaXMuX2ZpbmRSZWNvcmRJbmRleEluVmlldyhyb3dEYXRhKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhSW5kZXggPSB0aGlzLmdyaWQuZmlsdGVyZWRTb3J0ZWREYXRhLmZpbmRJbmRleChkYXRhID0+IGRhdGFbdGhpcy5wcmltYXJ5S2V5XSA9PT0gcm93RGF0YVt0aGlzLnByaW1hcnlLZXldKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0luVmlldyA9IHZpZXdJbmRleCAhPT0gLTEgJiYgIXRoaXMuZ3JpZC5uYXZpZ2F0aW9uLnNob3VsZFBlcmZvcm1WZXJ0aWNhbFNjcm9sbCh2aWV3SW5kZXgsIDApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3dJbmRleCA9IGlzSW5WaWV3ID8gLTEgOiBkYXRhSW5kZXg7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNob3dTbmFja2JhckZvcihzaG93SW5kZXgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0gc3VwZXIuZW5kUm93VHJhbnNhY3Rpb24oY29tbWl0LCBldmVudCk7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVuZEFkZFJvdygpO1xuICAgICAgICBpZiAoY29tbWl0KSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQucm93QWRkZWROb3RpZmllci5uZXh0KHsgZGF0YTogYXJncy5uZXdWYWx1ZSB9KTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dBZGRlZC5lbWl0KHsgZGF0YTogYXJncy5uZXdWYWx1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGVuZEFkZFJvdygpIHtcbiAgICAgICAgdGhpcy5hZGRSb3dQYXJlbnQgPSBudWxsO1xuICAgICAgICB0aGlzLmdyaWQudHJpZ2dlclBpcGVzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIFRPRE86IGNvbnNpZGVyIGNoYW5naW5nIG1vZGlmaWVyXG4gICAgICovXG4gICAgcHVibGljIF9maW5kUmVjb3JkSW5kZXhJblZpZXcocmVjKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZGF0YVZpZXcuZmluZEluZGV4KGRhdGEgPT4gZGF0YVt0aGlzLnByaW1hcnlLZXldID09PSByZWNbdGhpcy5wcmltYXJ5S2V5XSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFBhcmVudFJvd0lkKCkge1xuICAgICAgICBpZiAodGhpcy5hZGRSb3dQYXJlbnQuYXNDaGlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkUm93UGFyZW50LmFzQ2hpbGQgPyB0aGlzLmFkZFJvd1BhcmVudC5yb3dJRCA6IHVuZGVmaW5lZDs7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hZGRSb3dQYXJlbnQucm93SUQgIT09IG51bGwgJiYgdGhpcy5hZGRSb3dQYXJlbnQucm93SUQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qgc3Bhd25lZEZvclJlY29yZCA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yZWNfYnlfaWQodGhpcy5hZGRSb3dQYXJlbnQucm93SUQpO1xuICAgICAgICAgICAgcmV0dXJuIHNwYXduZWRGb3JSZWNvcmQ/LnBhcmVudD8ucm93SUQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkQ1JVRFNlcnZpY2UgZXh0ZW5kcyBJZ3hSb3dBZGRDcnVkU3RhdGUge1xuXG4gICAgcHVibGljIGVudGVyRWRpdE1vZGUoY2VsbCwgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5pc0luQ29tcG9zaXRpb25Nb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jZWxsSW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgLy8gVE9ETzogY2FzZSBzb2xlbHkgZm9yIGYyL2VudGVyIG5hdiB0aGF0IHVzZXMgZW50ZXJFZGl0TW9kZSBhcyB0b2dnbGUuIFJlZmFjdG9yLlxuICAgICAgICAgICAgY29uc3QgY2FuY2VsZWQgPSB0aGlzLmVuZEVkaXQodHJ1ZSwgZXZlbnQpO1xuXG4gICAgICAgICAgICBpZiAoIWNhbmNlbGVkIHx8ICF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudGJvZHkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUNlbGwoY2VsbCk7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3dFZGl0aW5nKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucm93ICYmICF0aGlzLnNhbWVSb3codGhpcy5jZWxsPy5pZD8ucm93SUQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93RWRpdGluZ0Jsb2NrZWQgPSB0aGlzLmVuZEVkaXQodHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yb3dFZGl0aW5nQmxvY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBlbnRlcnMgaGVyZSwgQGVuZEVkaXQgY2xlYXJzIHRoZSBuZXcgcmVmZXJlbmNlIG9mIHRoZSBjZWxsIGVkaXQuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQ2VsbChjZWxsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dFZGl0aW5nQmxvY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZFJvd0VkaXQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjYW5jZWxlZCA9IHRoaXMuYmVnaW5Sb3dFZGl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoIWNhbmNlbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW5DZWxsRWRpdChldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYmVnaW5DZWxsRWRpdChldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbnRlcnMgYWRkIHJvdyBtb2RlIGJ5IGNyZWF0aW5nIHRlbXBvcmFyeSBkdW1teSBzbyB0aGUgdXNlciBjYW4gZmlsbCBpbiBuZXcgcm93IGNlbGxzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmVudFJvdyBQYXJlbnQgcm93IGFmdGVyIHdoaWNoIHRoZSBBZGQgUm93IFVJIHdpbGwgYmUgcmVuZGVyZWQuXG4gICAgICogICAgICAgICAgICAgICAgICBJZiBgbnVsbGAgd2lsbCBzaG93IGl0IGF0IHRoZSBib3R0b20gYWZ0ZXIgYWxsIHJvd3MgKG9yIHRvcCBpZiB0aGVyZSBhcmUgbm90IHJvd3MpLlxuICAgICAqIEBwYXJhbSBhc0NoaWxkIFNwZWNpZmllcyBpZiB0aGUgbmV3IHJvdyBzaG91bGQgYmUgYWRkZWQgYXMgYSBjaGlsZCB0byBhIHRyZWUgcm93LlxuICAgICAqIEBwYXJhbSBldmVudCBCYXNlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBhZGQgcm93IG1vZGUuXG4gICAgICovXG4gICAgcHVibGljIGVudGVyQWRkUm93TW9kZShwYXJlbnRSb3c6IElneFJvd0RpcmVjdGl2ZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPiwgYXNDaGlsZD86IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd0VkaXRpbmcgJiYgKHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID09PSB1bmRlZmluZWQgfHwgdGhpcy5ncmlkLnByaW1hcnlLZXkgPT09IG51bGwpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBncmlkIG11c3QgdXNlIHJvdyBlZGl0IG1vZGUgdG8gcGVyZm9ybSByb3cgYWRkaW5nISBQbGVhc2Ugc2V0IHJvd0VkaXRhYmxlIHRvIHRydWUuJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbmRFZGl0KHRydWUsIGV2ZW50KTtcblxuICAgICAgICBpZiAocGFyZW50Um93ICE9IG51bGwgJiYgdGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocGFyZW50Um93LnJvd0lEKSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNvbGxhcHNlUm93KHBhcmVudFJvdy5yb3dJRCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNyZWF0ZUFkZFJvdyhwYXJlbnRSb3csIGFzQ2hpbGQpO1xuXG4gICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuc3RhcnRQZW5kaW5nKCk7XG4gICAgICAgIGlmICh0aGlzLmFkZFJvd1BhcmVudC5pc1Bpbm5lZCkge1xuICAgICAgICAgICAgLy8gSWYgcGFyZW50IGlzIHBpbm5lZCwgYWRkIHRoZSBuZXcgcm93IHRvIHBpbm5lZCByZWNvcmRzXG4gICAgICAgICAgICAodGhpcy5ncmlkIGFzIGFueSkuX3Bpbm5lZFJlY29yZElEcy5zcGxpY2UodGhpcy5yb3cuaW5kZXgsIDAsIHRoaXMucm93LmlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC50cmlnZ2VyUGlwZXMoKTtcbiAgICAgICAgdGhpcy5ncmlkLm5vdGlmeUNoYW5nZXModHJ1ZSk7XG5cbiAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRlVG8odGhpcy5yb3cuaW5kZXgsIC0xKTtcbiAgICAgICAgLy8gd2hlbiBzZWxlY3RpbmcgdGhlIGR1bW15IHJvdyB3ZSBuZWVkIHRvIGFkanVzdCBmb3IgdG9wIHBpbm5lZCByb3dzXG4gICAgICAgIGNvbnN0IGluZGV4QWRqdXN0ID0gdGhpcy5ncmlkLmlzUm93UGlubmluZ1RvVG9wICYmICF0aGlzLmFkZFJvd1BhcmVudC5pc1Bpbm5lZCA/IHRoaXMuZ3JpZC5waW5uZWRSb3dzLmxlbmd0aCA6IDA7XG4gICAgICAgIGNvbnN0IGR1bW15Um93ID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19ieV9pbmRleCh0aGlzLnJvdy5pbmRleCArIGluZGV4QWRqdXN0KTtcbiAgICAgICAgZHVtbXlSb3cudHJpZ2dlckFkZEFuaW1hdGlvbigpO1xuICAgICAgICBkdW1teVJvdy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBkdW1teVJvdy5hZGRBbmltYXRpb25FbmQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IGR1bW15Um93LmNlbGxzLmZpbmQoYyA9PiBjLmVkaXRhYmxlKTtcbiAgICAgICAgICAgIGlmIChjZWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkudXBkYXRlX2NlbGwodGhpcy5jZWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVudGVyRWRpdE1vZGUoY2VsbCwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIGNlbGwuYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluaXNoZXMgdGhlIHJvdyB0cmFuc2FjdGlvbnMgb24gdGhlIGN1cnJlbnQgcm93LlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiBgY29tbWl0ID09PSB0cnVlYCwgcGFzc2VzIHRoZW0gZnJvbSB0aGUgcGVuZGluZyBzdGF0ZSB0byB0aGUgZGF0YSAob3IgdHJhbnNhY3Rpb24gc2VydmljZSlcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uIGlneEJ1dHRvbiAoY2xpY2spPVwiZ3JpZC5lbmRFZGl0KHRydWUpXCI+Q29tbWl0IFJvdzwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBjb21taXRcbiAgICAgKi9cbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhlIHNhbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1ldGhvZCB3aXRob3V0IGV2dCBlbWlzc2lvbi5cbiAgICBwdWJsaWMgZW5kRWRpdChjb21taXQgPSB0cnVlLCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5yb3cgJiYgIXRoaXMuY2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFyZ3M7XG4gICAgICAgIGlmIChjb21taXQpIHtcbiAgICAgICAgICAgIGFyZ3MgPSB0aGlzLnVwZGF0ZUNlbGwodHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgaWYgKGFyZ3MgJiYgYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJncy5jYW5jZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmV4aXRDZWxsRWRpdChldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBhcmdzID0gdGhpcy51cGRhdGVSb3coY29tbWl0LCBldmVudCk7XG4gICAgICAgIHRoaXMucm93RWRpdGluZ0Jsb2NrZWQgPSBhcmdzLmNhbmNlbDtcbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGl2ZUNlbGwgPSB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5hY3RpdmVFbGVtZW50O1xuICAgICAgICBpZiAoZXZlbnQgJiYgYWN0aXZlQ2VsbCkge1xuICAgICAgICAgICAgY29uc3Qgcm93SW5kZXggPSBhY3RpdmVDZWxsLnJvdztcbiAgICAgICAgICAgIGNvbnN0IHZpc2libGVDb2xJbmRleCA9IGFjdGl2ZUNlbGwubGF5b3V0ID8gYWN0aXZlQ2VsbC5sYXlvdXQuY29sdW1uVmlzaWJsZUluZGV4IDogYWN0aXZlQ2VsbC5jb2x1bW47XG4gICAgICAgICAgICB0aGlzLmdyaWQubmF2aWdhdGVUbyhyb3dJbmRleCwgdmlzaWJsZUNvbEluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY29tbW9uL2dyaWQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWx0ZXJNb2RlIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eSB9IGZyb20gJy4uLy4uL2NvcmUvZGlzcGxheURlbnNpdHknO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IElHcmlkUmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuL2dyaWQtcmVzb3VyY2VzJztcbmltcG9ydCB7IElTb3J0aW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElHcm91cGluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25TZXJ2aWNlLCBUcmFuc2FjdGlvbiwgU3RhdGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4uL3RyZWUtZ3JpZC9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElHcm91cEJ5UmVjb3JkIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktcmVjb3JkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJR3JvdXBCeUV4cGFuZFN0YXRlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktZXhwYW5kLXN0YXRlLmludGVyZmFjZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWREYXRhQmluZGFibGUge1xuICAgIGRhdGE6IGFueVtdIHwgbnVsbDtcbiAgICBmaWx0ZXJlZERhdGE6IGFueVtdO1xufVxuXG4vKipcbiAqIEFuIGludGVyZmFjZSBkZXNjcmliaW5nIGEgR3JpZCB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZFR5cGUgZXh0ZW5kcyBJR3JpZERhdGFCaW5kYWJsZSB7XG4gICAgZGlzcGxheURlbnNpdHk6IERpc3BsYXlEZW5zaXR5O1xuICAgIGxvY2FsZTogc3RyaW5nO1xuICAgIHJlc291cmNlU3RyaW5nczogSUdyaWRSZXNvdXJjZVN0cmluZ3M7XG4gICAgbmF0aXZlRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgcm93RWRpdGFibGU6IGJvb2xlYW47XG4gICAgcm9vdFN1bW1hcmllc0VuYWJsZWQ6IGJvb2xlYW47XG4gICAgYWxsb3dGaWx0ZXJpbmc6IGJvb2xlYW47XG4gICAgcm93RHJhZ2dhYmxlOiBib29sZWFuO1xuICAgIHByaW1hcnlLZXk6IGFueTtcbiAgICBpZDogc3RyaW5nO1xuICAgIHJlbmRlcmVkUm93SGVpZ2h0OiBudW1iZXI7XG4gICAgc3VtbWFyeVBpcGVUcmlnZ2VyOiBudW1iZXI7XG4gICAgaGFzQ29sdW1uTGF5b3V0czogYm9vbGVhbjtcblxuICAgIGZpbHRlck1vZGU6IEZpbHRlck1vZGU7XG5cbiAgICBzZWxlY3Rpb25TZXJ2aWNlOiBhbnk7XG4gICAgbmF2aWdhdGlvbjogYW55O1xuICAgIGZpbHRlcmluZ1NlcnZpY2U6IGFueTtcbiAgICBvdXRsZXQ6IGFueTtcbiAgICBoYXNNb3ZhYmxlQ29sdW1uczogYm9vbGVhbjtcbiAgICBpc1Jvd1NlbGVjdGFibGU6IGJvb2xlYW47XG4gICAgc2hvd1Jvd1NlbGVjdG9yczogYm9vbGVhbjtcbiAgICBpc1Bpbm5pbmdUb1N0YXJ0OiBib29sZWFuO1xuICAgIGNvbHVtbkluRHJhZzogYW55O1xuICAgIHBpbm5lZFdpZHRoOiBudW1iZXI7XG4gICAgdW5waW5uZWRXaWR0aDogbnVtYmVyO1xuXG4gICAgZHJhZ0luZGljYXRvckljb25UZW1wbGF0ZTogYW55O1xuICAgIGRyYWdJbmRpY2F0b3JJY29uQmFzZTogYW55O1xuXG4gICAgY2FsY0hlaWdodDogbnVtYmVyO1xuICAgIGRlZmF1bHRIZWFkZXJHcm91cE1pbldpZHRoOiBhbnk7XG4gICAgc2Nyb2xsU2l6ZTogbnVtYmVyO1xuXG4gICAgcGFyZW50VmlydERpcjogYW55O1xuICAgIHRib2R5OiBhbnk7XG4gICAgdmVydGljYWxTY3JvbGxDb250YWluZXI6IGFueTtcbiAgICBkYXRhUm93TGlzdDogYW55O1xuICAgIHJvd0xpc3Q6IGFueTtcbiAgICBjb2x1bW5MaXN0OiBhbnk7XG4gICAgY29sdW1uczogYW55O1xuICAgIHVucGlubmVkQ29sdW1uczogYW55O1xuICAgIHBpbm5lZENvbHVtbnM6IGFueTtcbiAgICBzdW1tYXJpZXNSb3dMaXN0OiBhbnk7XG4gICAgaGVhZGVyQ29udGFpbmVyOiBhbnk7XG4gICAgZGF0YVZpZXc6IGFueVtdO1xuICAgIHRyYW5zYWN0aW9uczogVHJhbnNhY3Rpb25TZXJ2aWNlPFRyYW5zYWN0aW9uLCBTdGF0ZT47XG4gICAgZGVmYXVsdFN1bW1hcnlIZWlnaHQ6IG51bWJlcjtcblxuICAgIHJvd0VkaXRUYWJzOiBhbnk7XG5cbiAgICBmaXJzdEVkaXRhYmxlQ29sdW1uSW5kZXg6IG51bWJlcjtcbiAgICBsYXN0RWRpdGFibGVDb2x1bW5JbmRleDogbnVtYmVyO1xuICAgIGhhc0RldGFpbHM6IGJvb2xlYW47XG5cbiAgICBzb3J0aW5nRXhwcmVzc2lvbnM6IElTb3J0aW5nRXhwcmVzc2lvbltdO1xuICAgIHNvcnRpbmdFeHByZXNzaW9uc0NoYW5nZTogRXZlbnRFbWl0dGVyPElTb3J0aW5nRXhwcmVzc2lvbltdPjtcbiAgICBmaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU6IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZT47XG4gICAgYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU6IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlPjtcblxuICAgIHRyYWNrQ29sdW1uQ2hhbmdlcyhpbmRleDogbnVtYmVyLCBjb2x1bW46IGFueSk6IGFueTtcbiAgICBoYXNWZXJ0aWNhbFNjcm9sbCgpOiBib29sZWFuO1xuICAgIGdldENvbHVtbkJ5TmFtZShuYW1lOiBzdHJpbmcpOiBhbnk7XG4gICAgc29ydChleHByZXNzaW9uOiBJU29ydGluZ0V4cHJlc3Npb24gfCBBcnJheTxJU29ydGluZ0V4cHJlc3Npb24+KTogdm9pZDtcbiAgICBjbGVhclNvcnQobmFtZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgaXNDb2x1bW5Hcm91cGVkKGZpZWxkTmFtZTogc3RyaW5nKTogYm9vbGVhbjtcbiAgICBpc0RldGFpbFJlY29yZChyZWM6IGFueSk6IGJvb2xlYW47XG4gICAgaXNHcm91cEJ5UmVjb3JkKHJlYzogYW55KTogYm9vbGVhbjtcbiAgICBub3RpZnlDaGFuZ2VzKHJlcGFpbnQ/OiBib29sZWFuKTogdm9pZDtcbn1cblxuLyoqXG4gKiBBbiBpbnRlcmZhY2UgZGVzY3JpYmluZyBhIEZsYXQgR3JpZCB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxhdEdyaWRUeXBlIGV4dGVuZHMgR3JpZFR5cGUge1xuICAgIGdyb3VwaW5nRXhwYW5zaW9uU3RhdGU6IElHcm91cEJ5RXhwYW5kU3RhdGVbXTtcbiAgICBncm91cGluZ0V4cHJlc3Npb25zOiBJR3JvdXBpbmdFeHByZXNzaW9uW107XG4gICAgZ3JvdXBpbmdFeHByZXNzaW9uc0NoYW5nZTogRXZlbnRFbWl0dGVyPElHcm91cGluZ0V4cHJlc3Npb25bXT47XG5cbiAgICB0b2dnbGVHcm91cChncm91cFJvdzogSUdyb3VwQnlSZWNvcmQpOiB2b2lkO1xuICAgIGNsZWFyR3JvdXBpbmcoZmllbGQ6IHN0cmluZyk6IHZvaWQ7XG4gICAgZ3JvdXBCeShleHByZXNzaW9uOiBJR3JvdXBpbmdFeHByZXNzaW9uIHwgQXJyYXk8SUdyb3VwaW5nRXhwcmVzc2lvbj4pOiB2b2lkO1xufVxuXG4vKipcbiAqIEFuIGludGVyZmFjZSBkZXNjcmliaW5nIGEgVHJlZSBHcmlkIHR5cGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmVlR3JpZFR5cGUgZXh0ZW5kcyBHcmlkVHlwZSB7XG4gICAgcmVjb3JkczogTWFwPGFueSwgSVRyZWVHcmlkUmVjb3JkPjtcbiAgICBpc1RyZWVSb3cocmVjOiBhbnkpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEFuIGludGVyZmFjZSBkZXNjcmliaW5nIGEgSGllcmFyY2hpY2FsIEdyaWQgdHlwZVxuICovXG4gZXhwb3J0IGludGVyZmFjZSBIaWVyYXJjaGljYWxHcmlkVHlwZSBleHRlbmRzIEdyaWRUeXBlIHtcbiAgICBjaGlsZExheW91dEtleXM6IGFueVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRTVkdJY29uIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZztcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY29tbW9uL2dyaWQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWx0ZXJNb2RlIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eSB9IGZyb20gJy4uLy4uL2NvcmUvZGlzcGxheURlbnNpdHknO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IElHcmlkUmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuL2dyaWQtcmVzb3VyY2VzJztcbmltcG9ydCB7IElTb3J0aW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElHcm91cGluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25TZXJ2aWNlLCBUcmFuc2FjdGlvbiwgU3RhdGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4uL3RyZWUtZ3JpZC9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElHcm91cEJ5UmVjb3JkIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktcmVjb3JkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJR3JvdXBCeUV4cGFuZFN0YXRlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktZXhwYW5kLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRGF0YUNsb25lU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS1jbG9uZS1zdHJhdGVneSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWREYXRhQmluZGFibGUge1xuICAgIGRhdGE6IGFueVtdIHwgbnVsbDtcbiAgICBmaWx0ZXJlZERhdGE6IGFueVtdO1xufVxuXG4vKipcbiAqIEFuIGludGVyZmFjZSBkZXNjcmliaW5nIGEgR3JpZCB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZFR5cGUgZXh0ZW5kcyBJR3JpZERhdGFCaW5kYWJsZSB7XG4gICAgZGlzcGxheURlbnNpdHk6IERpc3BsYXlEZW5zaXR5O1xuICAgIGxvY2FsZTogc3RyaW5nO1xuICAgIHJlc291cmNlU3RyaW5nczogSUdyaWRSZXNvdXJjZVN0cmluZ3M7XG4gICAgbmF0aXZlRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgcm93RWRpdGFibGU6IGJvb2xlYW47XG4gICAgcm9vdFN1bW1hcmllc0VuYWJsZWQ6IGJvb2xlYW47XG4gICAgYWxsb3dGaWx0ZXJpbmc6IGJvb2xlYW47XG4gICAgcm93RHJhZ2dhYmxlOiBib29sZWFuO1xuICAgIHByaW1hcnlLZXk6IGFueTtcbiAgICBpZDogc3RyaW5nO1xuICAgIHJlbmRlcmVkUm93SGVpZ2h0OiBudW1iZXI7XG4gICAgc3VtbWFyeVBpcGVUcmlnZ2VyOiBudW1iZXI7XG4gICAgaGFzQ29sdW1uTGF5b3V0czogYm9vbGVhbjtcblxuICAgIGZpbHRlck1vZGU6IEZpbHRlck1vZGU7XG4gICAgZGF0YUNsb25lU3RyYXRlZ3k6IElEYXRhQ2xvbmVTdHJhdGVneTtcblxuICAgIHNlbGVjdGlvblNlcnZpY2U6IGFueTtcbiAgICBuYXZpZ2F0aW9uOiBhbnk7XG4gICAgZmlsdGVyaW5nU2VydmljZTogYW55O1xuICAgIG91dGxldDogYW55O1xuICAgIGhhc01vdmFibGVDb2x1bW5zOiBib29sZWFuO1xuICAgIGlzUm93U2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgICBzaG93Um93U2VsZWN0b3JzOiBib29sZWFuO1xuICAgIGlzUGlubmluZ1RvU3RhcnQ6IGJvb2xlYW47XG4gICAgY29sdW1uSW5EcmFnOiBhbnk7XG4gICAgcGlubmVkV2lkdGg6IG51bWJlcjtcbiAgICB1bnBpbm5lZFdpZHRoOiBudW1iZXI7XG5cbiAgICBkcmFnSW5kaWNhdG9ySWNvblRlbXBsYXRlOiBhbnk7XG4gICAgZHJhZ0luZGljYXRvckljb25CYXNlOiBhbnk7XG5cbiAgICBjYWxjSGVpZ2h0OiBudW1iZXI7XG4gICAgZGVmYXVsdEhlYWRlckdyb3VwTWluV2lkdGg6IGFueTtcbiAgICBzY3JvbGxTaXplOiBudW1iZXI7XG5cbiAgICBwYXJlbnRWaXJ0RGlyOiBhbnk7XG4gICAgdGJvZHk6IGFueTtcbiAgICB2ZXJ0aWNhbFNjcm9sbENvbnRhaW5lcjogYW55O1xuICAgIGRhdGFSb3dMaXN0OiBhbnk7XG4gICAgcm93TGlzdDogYW55O1xuICAgIGNvbHVtbkxpc3Q6IGFueTtcbiAgICBjb2x1bW5zOiBhbnk7XG4gICAgdW5waW5uZWRDb2x1bW5zOiBhbnk7XG4gICAgcGlubmVkQ29sdW1uczogYW55O1xuICAgIHN1bW1hcmllc1Jvd0xpc3Q6IGFueTtcbiAgICBoZWFkZXJDb250YWluZXI6IGFueTtcbiAgICBkYXRhVmlldzogYW55W107XG4gICAgdHJhbnNhY3Rpb25zOiBUcmFuc2FjdGlvblNlcnZpY2U8VHJhbnNhY3Rpb24sIFN0YXRlPjtcbiAgICBkZWZhdWx0U3VtbWFyeUhlaWdodDogbnVtYmVyO1xuXG4gICAgcm93RWRpdFRhYnM6IGFueTtcblxuICAgIGZpcnN0RWRpdGFibGVDb2x1bW5JbmRleDogbnVtYmVyO1xuICAgIGxhc3RFZGl0YWJsZUNvbHVtbkluZGV4OiBudW1iZXI7XG4gICAgaGFzRGV0YWlsczogYm9vbGVhbjtcblxuICAgIHNvcnRpbmdFeHByZXNzaW9uczogSVNvcnRpbmdFeHByZXNzaW9uW107XG4gICAgc29ydGluZ0V4cHJlc3Npb25zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SVNvcnRpbmdFeHByZXNzaW9uW10+O1xuICAgIGZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICBmaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlPjtcbiAgICBhZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICBhZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZUNoYW5nZTogRXZlbnRFbWl0dGVyPElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU+O1xuXG4gICAgdHJhY2tDb2x1bW5DaGFuZ2VzKGluZGV4OiBudW1iZXIsIGNvbHVtbjogYW55KTogYW55O1xuICAgIGhhc1ZlcnRpY2FsU2Nyb2xsKCk6IGJvb2xlYW47XG4gICAgZ2V0Q29sdW1uQnlOYW1lKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgICBzb3J0KGV4cHJlc3Npb246IElTb3J0aW5nRXhwcmVzc2lvbiB8IEFycmF5PElTb3J0aW5nRXhwcmVzc2lvbj4pOiB2b2lkO1xuICAgIGNsZWFyU29ydChuYW1lPzogc3RyaW5nKTogdm9pZDtcbiAgICBpc0NvbHVtbkdyb3VwZWQoZmllbGROYW1lOiBzdHJpbmcpOiBib29sZWFuO1xuICAgIGlzRGV0YWlsUmVjb3JkKHJlYzogYW55KTogYm9vbGVhbjtcbiAgICBpc0dyb3VwQnlSZWNvcmQocmVjOiBhbnkpOiBib29sZWFuO1xuICAgIG5vdGlmeUNoYW5nZXMocmVwYWludD86IGJvb2xlYW4pOiB2b2lkO1xufVxuXG4vKipcbiAqIEFuIGludGVyZmFjZSBkZXNjcmliaW5nIGEgRmxhdCBHcmlkIHR5cGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbGF0R3JpZFR5cGUgZXh0ZW5kcyBHcmlkVHlwZSB7XG4gICAgZ3JvdXBpbmdFeHBhbnNpb25TdGF0ZTogSUdyb3VwQnlFeHBhbmRTdGF0ZVtdO1xuICAgIGdyb3VwaW5nRXhwcmVzc2lvbnM6IElHcm91cGluZ0V4cHJlc3Npb25bXTtcbiAgICBncm91cGluZ0V4cHJlc3Npb25zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUdyb3VwaW5nRXhwcmVzc2lvbltdPjtcblxuICAgIHRvZ2dsZUdyb3VwKGdyb3VwUm93OiBJR3JvdXBCeVJlY29yZCk6IHZvaWQ7XG4gICAgY2xlYXJHcm91cGluZyhmaWVsZDogc3RyaW5nKTogdm9pZDtcbiAgICBncm91cEJ5KGV4cHJlc3Npb246IElHcm91cGluZ0V4cHJlc3Npb24gfCBBcnJheTxJR3JvdXBpbmdFeHByZXNzaW9uPik6IHZvaWQ7XG59XG5cbi8qKlxuICogQW4gaW50ZXJmYWNlIGRlc2NyaWJpbmcgYSBUcmVlIEdyaWQgdHlwZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyZWVHcmlkVHlwZSBleHRlbmRzIEdyaWRUeXBlIHtcbiAgICByZWNvcmRzOiBNYXA8YW55LCBJVHJlZUdyaWRSZWNvcmQ+O1xuICAgIGlzVHJlZVJvdyhyZWM6IGFueSk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQW4gaW50ZXJmYWNlIGRlc2NyaWJpbmcgYSBIaWVyYXJjaGljYWwgR3JpZCB0eXBlXG4gKi9cbiBleHBvcnQgaW50ZXJmYWNlIEhpZXJhcmNoaWNhbEdyaWRUeXBlIGV4dGVuZHMgR3JpZFR5cGUge1xuICAgIGNoaWxkTGF5b3V0S2V5czogYW55W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZFNWR0ljb24ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xufVxuIl19
@@ -179,7 +179,7 @@ export class IgxGridTransactionPipe {
179
179
  transform(collection, _id, _pipeTrigger) {
180
180
  const grid = this.gridAPI.grid;
181
181
  if (grid.transactions.enabled) {
182
- const result = DataUtil.mergeTransactions(cloneArray(collection), grid.transactions.getAggregatedChanges(true), grid.primaryKey);
182
+ const result = DataUtil.mergeTransactions(cloneArray(collection), grid.transactions.getAggregatedChanges(true), grid.primaryKey, grid.dataCloneStrategy);
183
183
  return result;
184
184
  }
185
185
  return collection;
@@ -435,4 +435,4 @@ export class IgxHeaderGroupStylePipe {
435
435
  IgxHeaderGroupStylePipe.decorators = [
436
436
  { type: Pipe, args: [{ name: 'igxHeaderGroupStyle' },] }
437
437
  ];
438
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY29tbW9uL3BpcGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM3QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBVWhEOzs7R0FHRztBQUlILE1BQU0sT0FBTywyQkFBMkI7SUFFN0IsU0FBUyxDQUFDLFVBQW1CLEVBQUUsQ0FBTSxFQUFFLElBQVMsRUFBRSxLQUFhLEVBQUUsS0FBYSxFQUFFLEVBQVU7UUFDN0YsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNiLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFbEIsS0FBSyxNQUFNLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzVDLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QyxNQUFNLEtBQUssR0FBRyxPQUFPLGVBQWUsS0FBSyxVQUFVLENBQUMsQ0FBQztnQkFDakQsZUFBZSxDQUFDLElBQUksRUFBRSxL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QixFQUFFOztBQVNyQyxNQUFNLE9BQU8sdUJBQXVCO0lBRXpCLFNBQVMsQ0FBQyxNQUErQixFQUFFLE1BQTBCLEVBQUUsQ0FBUztRQUNuRixNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFFZixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTyxHQUFHLENBQUM7U0FDZDtRQUVELEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNwQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sR0FBRyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7U0FDN0Q7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7OztZQWhCSixJQUFJLFNBQUMsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdyaWRCYXNlQVBJU2VydmljZSB9IGZyb20gJy4uL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZ3JpZC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRhVXRpbCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgY2xvbmVBcnJheSwgcmVzb2x2ZU5lc3RlZFBhdGggfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEdyaWRUeXBlIH0gZnJvbSAnLi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuLi9jb2x1bW5zL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29sdW1uRGlzcGxheU9yZGVyIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5BY3Rpb25zQ29tcG9uZW50IH0gZnJvbSAnLi4vY29sdW1uLWFjdGlvbnMvY29sdW1uLWFjdGlvbnMuY29tcG9uZW50JztcbmltcG9ydCB7IElneEFkZFJvdyB9IGZyb20gJy4vY3J1ZC5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRSb3cgfSBmcm9tICcuLi9ncmlkLXB1YmxpYy1yb3cnO1xuaW1wb3J0IHsgSWd4VHJlZUdyaWRSb3dDb21wb25lbnQgfSBmcm9tICcuLi90cmVlLWdyaWQvdHJlZS1ncmlkLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4R3JpZFJvd0NvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQvZ3JpZC1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbFJvd0NvbXBvbmVudCB9IGZyb20gJy4uL2hpZXJhcmNoaWNhbC1ncmlkL2hpZXJhcmNoaWNhbC1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IElneFN1bW1hcnlPcGVyYW5kLCBJZ3hTdW1tYXJ5UmVzdWx0IH0gZnJvbSAnLi4vc3VtbWFyaWVzL2dyaWQtc3VtbWFyeSc7XG5cbmludGVyZmFjZSBDU1NQcm9wIHtcbiAgICBbcHJvcDogc3RyaW5nXTogYW55O1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqIEBpbnRlcm5hbFxuICovXG5AUGlwZSh7XG4gICAgbmFtZTogJ2lneENlbGxTdHlsZUNsYXNzZXMnXG59KVxuZXhwb3J0IGNsYXNzIElneEdyaWRDZWxsU3R5bGVDbGFzc2VzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgcHVibGljIHRyYW5zZm9ybShjc3NDbGFzc2VzOiBDU1NQcm9wLCBfOiBhbnksIGRhdGE6IGFueSwgZmllbGQ6IHN0cmluZywgaW5kZXg6IG51bWJlciwgX186IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGlmICghY3NzQ2xhc3Nlcykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBjc3NDbGFzcyBvZiBPYmplY3Qua2V5cyhjc3NDbGFzc2VzKSkge1xuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tPclZhbHVlID0gY3NzQ2xhc3Nlc1tjc3NDbGFzc107XG4gICAgICAgICAgICBjb25zdCBhcHBseSA9IHR5cGVvZiBjYWxsYmFja09yVmFsdWUgPT09ICdmdW5jdGlvbicgP1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrT3JWYWx1ZShkYXRhLCBmaWVsZCwgcmVzb2x2ZU5lc3RlZFBhdGgoZGF0YSwgZmllbGQpLCBpbmRleCkgOiBjYWxsYmFja09yVmFsdWU7XG4gICAgICAgICAgICBpZiAoYXBwbHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjc3NDbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnaWd4Q2VsbFN0eWxlcydcbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZENlbGxTdHlsZXNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKHN0eWxlczogQ1NTUHJvcCwgXzogYW55LCBkYXRhOiBhbnksIGZpZWxkOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIF9fOiBudW1iZXIpOiBDU1NQcm9wIHtcbiAgICAgICAgY29uc3QgY3NzID0ge307XG4gICAgICAgIGlmICghc3R5bGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gY3NzO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIE9iamVjdC5rZXlzKHN0eWxlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHN0eWxlc1twcm9wXTtcbiAgICAgICAgICAgIGNzc1twcm9wXSA9IHR5cGVvZiByZXMgPT09ICdmdW5jdGlvbicgPyByZXMoZGF0YSwgZmllbGQsIHJlc29sdmVOZXN0ZWRQYXRoKGRhdGEsIGZpZWxkKSwgaW5kZXgpIDogcmVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNzcztcbiAgICB9XG59XG5cbnR5cGUgX1Jvd1R5cGUgPSBJZ3hHcmlkUm93Q29tcG9uZW50IHwgSWd4VHJlZUdyaWRSb3dDb21wb25lbnQgfCBJZ3hIaWVyYXJjaGljYWxSb3dDb21wb25lbnQ7XG5cbi8qKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKi9cbkBQaXBlKHsgbmFtZTogJ2lneEdyaWRSb3dDbGFzc2VzJyB9KVxuZXhwb3J0IGNsYXNzIElneEdyaWRSb3dDbGFzc2VzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHB1YmxpYyByb3c6IElneEdyaWRSb3c7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGdyaWRBUEk6IEdyaWRCYXNlQVBJU2VydmljZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPikge1xuICAgICAgICB0aGlzLnJvdyA9IG5ldyBJZ3hHcmlkUm93KHRoaXMuZ3JpZEFQSS5ncmlkIGFzIGFueSwgLTEsIHt9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKFxuICAgICAgICBjc3NDbGFzc2VzOiBDU1NQcm9wLFxuICAgICAgICByb3c6IF9Sb3dUeXBlLFxuICAgICAgICBlZGl0TW9kZTogYm9vbGVhbixcbiAgICAgICAgc2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICAgICAgIGRpcnR5OiBib29sZWFuLFxuICAgICAgICBkZWxldGVkOiBib29sZWFuLFxuICAgICAgICBkcmFnZ2luZzogYm9vbGVhbixcbiAgICAgICAgaW5kZXg6IG51bWJlcixcbiAgICAgICAgbXJsOiBib29sZWFuLFxuICAgICAgICBmaWx0ZXJlZE91dDogYm9vbGVhbixcbiAgICAgICAgXzogbnVtYmVyXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoWydpZ3gtZ3JpZF9fdHInLCBpbmRleCAlIDIgPyByb3cuZ3JpZC5ldmVuUm93Q1NTIDogcm93LmdyaWQub2RkUm93Q1NTXSk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSBbXG4gICAgICAgICAgICBbc2VsZWN0ZWQsICdpZ3gtZ3JpZF9fdHItLXNlbGVjdGVkJ10sXG4gICAgICAgICAgICBbZWRpdE1vZGUsICdpZ3gtZ3JpZF9fdHItLWVkaXQnXSxcbiAgICAgICAgICAgIFtkaXJ0eSwgJ2lneC1ncmlkX190ci0tZWRpdGVkJ10sXG4gICAgICAgICAgICBbZGVsZXRlZCwgJ2lneC1ncmlkX190ci0tZGVsZXRlZCddLFxuICAgICAgICAgICAgW2RyYWdnaW5nLCAnaWd4LWdyaWRfX3RyLS1kcmFnJ10sXG4gICAgICAgICAgICBbbXJsLCAnaWd4LWdyaWRfX3RyLS1tcmwnXSxcbiAgICAgICAgICAgIC8vIFRyZWUgZ3JpZCBvbmx5XG4gICAgICAgICAgICBbZmlsdGVyZWRPdXQsICdpZ3gtZ3JpZF9fdHItLWZpbHRlcmVkJ11cbiAgICAgICAgXTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtzdGF0ZSwgX2NsYXNzXSBvZiBtYXBwaW5nKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYWRkKF9jbGFzcyBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBjc3NDbGFzcyBvZiBPYmplY3Qua2V5cyhjc3NDbGFzc2VzID8/IHt9KSkge1xuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tPclZhbHVlID0gY3NzQ2xhc3Nlc1tjc3NDbGFzc107XG4gICAgICAgICAgICB0aGlzLnJvdy5pbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgKHRoaXMucm93IGFzIGFueSkuX2RhdGEgPSByb3cucm93RGF0YTtcbiAgICAgICAgICAgIGNvbnN0IGFwcGx5ID0gdHlwZW9mIGNhbGxiYWNrT3JWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrT3JWYWx1ZSh0aGlzLnJvdykgOiBjYWxsYmFja09yVmFsdWU7XG4gICAgICAgICAgICBpZiAoYXBwbHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYWRkKGNzc0NsYXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQFBpcGUoeyBuYW1lOiAnaWd4R3JpZFJvd1N0eWxlcycgfSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkUm93U3R5bGVzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBncmlkQVBJOiBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4pIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShzdHlsZXM6IENTU1Byb3AsIHJvd0RhdGE6IGFueSwgaW5kZXg6IG51bWJlciwgX186IG51bWJlcik6IENTU1Byb3Age1xuICAgICAgICBjb25zdCBjc3MgPSB7fTtcbiAgICAgICAgaWYgKCFzdHlsZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBjc3M7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIE9iamVjdC5rZXlzKHN0eWxlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gc3R5bGVzW3Byb3BdO1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gbmV3IElneEdyaWRSb3coKHRoaXMuZ3JpZEFQSS5ncmlkIGFzIGFueSksIGluZGV4LCByb3dEYXRhKTtcbiAgICAgICAgICAgIGNzc1twcm9wXSA9IHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJyA/IGNiKHJvdykgOiBjYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3NzO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICdpZ3hOb3RHcm91cGVkJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkTm90R3JvdXBlZFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0odmFsdWU6IGFueVtdKTogYW55W10ge1xuICAgICAgICByZXR1cm4gdmFsdWUuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uY29sdW1uR3JvdXApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICdpZ3hUb3BMZXZlbCdcbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZFRvcExldmVsQ29sdW1ucyBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgcHVibGljIHRyYW5zZm9ybSh2YWx1ZTogYW55W10pOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5maWx0ZXIoaXRlbSA9PiBpdGVtLmxldmVsID09PSAwKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnZmlsdGVyQ29uZGl0aW9uJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneEdyaWRGaWx0ZXJDb25kaXRpb25QaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmFsdWUuc3BsaXQoLyg/PVtBLVpdKS8pLmpvaW4oJyAnKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnZ3JpZFRyYW5zYWN0aW9uJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneEdyaWRUcmFuc2FjdGlvblBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+KSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oY29sbGVjdGlvbjogYW55W10sIF9pZDogc3RyaW5nLCBfcGlwZVRyaWdnZXI6IG51bWJlcikge1xuICAgICAgICBjb25zdCBncmlkOiBJZ3hHcmlkQmFzZURpcmVjdGl2ZSA9IHRoaXMuZ3JpZEFQSS5ncmlkO1xuXG4gICAgICAgIGlmIChncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBEYXRhVXRpbC5tZXJnZVRyYW5zYWN0aW9ucyhcbiAgICAgICAgICAgICAgICBjbG9uZUFycmF5KGNvbGxlY3Rpb24pLFxuICAgICAgICAgICAgICAgIGdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRDaGFuZ2VzKHRydWUpLFxuICAgICAgICAgICAgICAgIGdyaWQucHJpbWFyeUtleSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICdwYWdpbmF0b3JPcHRpb25zJyxcbiAgICBwdXJlOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkUGFnaW5hdG9yT3B0aW9uc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBwdWJsaWMgdHJhbnNmb3JtKHZhbHVlczogQXJyYXk8bnVtYmVyPikge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi52YWx1ZXNdKSkuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICd2aXNpYmxlQ29sdW1ucycsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hIYXNWaXNpYmxlQ29sdW1uc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBwdWJsaWMgdHJhbnNmb3JtKHZhbHVlczogYW55W10sIGhhc1Zpc2libGVDb2x1bW5zKSB7XG4gICAgICAgIGlmICghKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzVmlzaWJsZUNvbHVtbnMgPyB2YWx1ZXMgOiBbXTtcbiAgICB9XG5cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnZ3JpZFJvd1Bpbm5pbmcnLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZFJvd1Bpbm5pbmdQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGdyaWRBUEk6IEdyaWRCYXNlQVBJU2VydmljZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPikgeyB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKGNvbGxlY3Rpb246IGFueVtdLCBpZDogc3RyaW5nLCBpc1Bpbm5lZCA9IGZhbHNlLCBfcGlwZVRyaWdnZXI6IG51bWJlcikge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkQVBJLmdyaWQ7XG5cbiAgICAgICAgaWYgKGdyaWQuaGFzUGlubmVkUmVjb3JkcyAmJiBpc1Bpbm5lZCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29sbGVjdGlvbi5maWx0ZXIocmVjID0+ICFncmlkLmlzU3VtbWFyeVJvdyhyZWMpICYmIGdyaWQuaXNSZWNvcmRQaW5uZWQocmVjKSk7XG4gICAgICAgICAgICByZXN1bHQuc29ydCgocmVjMSwgcmVjMikgPT4gZ3JpZC5nZXRJbml0aWFsUGlubmVkSW5kZXgocmVjMSkgLSBncmlkLmdldEluaXRpYWxQaW5uZWRJbmRleChyZWMyKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgZ3JpZC51bnBpbm5lZFJlY29yZHMgPSBjb2xsZWN0aW9uO1xuICAgICAgICBpZiAoIWdyaWQuaGFzUGlubmVkUmVjb3Jkcykge1xuICAgICAgICAgICAgZ3JpZC5waW5uZWRSZWNvcmRzID0gW107XG4gICAgICAgICAgICByZXR1cm4gaXNQaW5uZWQgPyBbXSA6IGNvbGxlY3Rpb247XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbi5tYXAoKHJlYykgPT4gIWdyaWQuaXNTdW1tYXJ5Um93KHJlYykgJiZcbiAgICAgICAgICAgIGdyaWQuaXNSZWNvcmRQaW5uZWQocmVjKSA/IHsgcmVjb3JkUmVmOiByZWMsIGdob3N0UmVjb3JkOiB0cnVlIH0gOiByZWMpO1xuICAgIH1cbn1cblxuQFBpcGUoe1xuICAgIG5hbWU6ICdjb2x1bW5BY3Rpb25FbmFibGVkJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneENvbHVtbkFjdGlvbkVuYWJsZWRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KElneENvbHVtbkFjdGlvbnNDb21wb25lbnQpIHByb3RlY3RlZCBjb2x1bW5BY3Rpb25zOiBJZ3hDb2x1bW5BY3Rpb25zQ29tcG9uZW50KSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oXG4gICAgICAgIGNvbGxlY3Rpb246IElneENvbHVtbkNvbXBvbmVudFtdLFxuICAgICAgICBhY3Rpb25GaWx0ZXI6ICh2YWx1ZTogSWd4Q29sdW1uQ29tcG9uZW50LCBpbmRleDogbnVtYmVyLCBhcnJheTogSWd4Q29sdW1uQ29tcG9uZW50W10pID0+IGJvb2xlYW4sXG4gICAgICAgIF9waXBlVHJpZ2dlcjogbnVtYmVyXG4gICAgKTogSWd4Q29sdW1uQ29tcG9uZW50W10ge1xuICAgICAgICBpZiAoIWNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb3B5ID0gY29sbGVjdGlvbi5zbGljZSgwKTtcbiAgICAgICAgaWYgKGNvcHkubGVuZ3RoICYmIGNvcHlbMF0uZ3JpZC5oYXNDb2x1bW5MYXlvdXRzKSB7XG4gICAgICAgICAgICBjb3B5ID0gY29weS5maWx0ZXIoYyA9PiBjLmNvbHVtbkxheW91dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvbkZpbHRlcikge1xuICAgICAgICAgICAgY29weSA9IGNvcHkuZmlsdGVyKGFjdGlvbkZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJlc2VydmUgdGhlIGFjdGlvbmFibGUgY29sbGVjdGlvbiBmb3IgdXNlIGluIHRoZSBjb21wb25lbnRcbiAgICAgICAgdGhpcy5jb2x1bW5BY3Rpb25zLmFjdGlvbmFibGVDb2x1bW5zID0gY29weTtcbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxufVxuXG5AUGlwZSh7XG4gICAgbmFtZTogJ2ZpbHRlckFjdGlvbkNvbHVtbnMnLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4RmlsdGVyQWN0aW9uQ29sdW1uc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSWd4Q29sdW1uQWN0aW9uc0NvbXBvbmVudCkgcHJvdGVjdGVkIGNvbHVtbkFjdGlvbnM6IElneENvbHVtbkFjdGlvbnNDb21wb25lbnQpIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShjb2xsZWN0aW9uOiBJZ3hDb2x1bW5Db21wb25lbnRbXSwgZmlsdGVyQ3JpdGVyaWE6IHN0cmluZywgX3BpcGVUcmlnZ2VyOiBudW1iZXIpOiBJZ3hDb2x1bW5Db21wb25lbnRbXSB7XG4gICAgICAgIGlmICghY29sbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNvcHkgPSBjb2xsZWN0aW9uLnNsaWNlKDApO1xuICAgICAgICBpZiAoZmlsdGVyQ3JpdGVyaWEgJiYgZmlsdGVyQ3JpdGVyaWEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyRnVuYyA9IChjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyVGV4dCA9IGMuaGVhZGVyIHx8IGMuZmllbGQ7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXJUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlclRleHQudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlckNyaXRlcmlhLnRvTG9jYWxlTG93ZXJDYXNlKCkpID49IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgKGMuY2hpbGRyZW4/LnNvbWUoZmlsdGVyRnVuYykgPz8gZmFsc2UpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvcHkgPSBjb2xsZWN0aW9uLmZpbHRlcihmaWx0ZXJGdW5jKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgZmlsdGVyZWQgY29sbGVjdGlvbiBmb3IgdXNlIGluIHRoZSBjb21wb25lbnRcbiAgICAgICAgdGhpcy5jb2x1bW5BY3Rpb25zLmZpbHRlcmVkQ29sdW1ucyA9IGNvcHk7XG4gICAgICAgIHJldHVybiBjb3B5O1xuICAgIH1cbn1cblxuQFBpcGUoe1xuICAgIG5hbWU6ICdzb3J0QWN0aW9uQ29sdW1ucycsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hTb3J0QWN0aW9uQ29sdW1uc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oY29sbGVjdGlvbjogSWd4Q29sdW1uQ29tcG9uZW50W10sIGRpc3BsYXlPcmRlcjogQ29sdW1uRGlzcGxheU9yZGVyLCBfcGlwZVRyaWdnZXI6IG51bWJlcik6IElneENvbHVtbkNvbXBvbmVudFtdIHtcbiAgICAgICAgaWYgKGRpc3BsYXlPcmRlciA9PT0gQ29sdW1uRGlzcGxheU9yZGVyLkFscGhhYmV0aWNhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb24uc29ydCgoYSwgYikgPT4gKGEuaGVhZGVyIHx8IGEuZmllbGQpLmxvY2FsZUNvbXBhcmUoYi5oZWFkZXIgfHwgYi5maWVsZCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAnZGF0YU1hcHBlcicgfSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkRGF0YU1hcHBlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oZGF0YTogYW55W10sIGZpZWxkOiBzdHJpbmcsIF86IG51bWJlciwgdmFsOiBhbnksIGlzTmVzdGVkUGF0aDogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gaXNOZXN0ZWRQYXRoID8gcmVzb2x2ZU5lc3RlZFBhdGgoZGF0YSwgZmllbGQpIDogdmFsO1xuICAgIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAnaWd4U3RyaW5nUmVwbGFjZScgfSlcbmV4cG9ydCBjbGFzcyBJZ3hTdHJpbmdSZXBsYWNlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgcHVibGljIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nLCBzZWFyY2g6IHN0cmluZyB8IFJlZ0V4cCwgcmVwbGFjZW1lbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKHNlYXJjaCwgcmVwbGFjZW1lbnQpO1xuICAgIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAndHJhbnNhY3Rpb25TdGF0ZScgfSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkVHJhbnNhY3Rpb25TdGF0ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0ocm93X2lkOiBhbnksIGZpZWxkOiBzdHJpbmcsIHJvd0VkaXRhYmxlOiBib29sZWFuLCB0cmFuc2FjdGlvbnM6IGFueSwgXzogYW55LCBfXzogYW55LCBfX186IGFueSkge1xuICAgICAgICBpZiAocm93RWRpdGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0N1cnJlbnRTdGF0ZSA9IHRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUocm93X2lkLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAocm93Q3VycmVudFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZXNvbHZlTmVzdGVkUGF0aChyb3dDdXJyZW50U3RhdGUsIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25zLmdldFN0YXRlKHJvd19pZCk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJlc29sdmVOZXN0ZWRQYXRoKHRyYW5zYWN0aW9uPy52YWx1ZSA/PyB7fSwgZmllbGQpO1xuICAgICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uICYmIHRyYW5zYWN0aW9uLnZhbHVlICYmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCB8fCB2YWx1ZSA9PT0gZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5AUGlwZSh7IG5hbWU6ICdjb2x1bW5Gb3JtYXR0ZXInIH0pXG5leHBvcnQgY2xhc3MgSWd4Q29sdW1uRm9ybWF0dGVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgcHVibGljIHRyYW5zZm9ybSh2YWx1ZTogYW55LCBmb3JtYXR0ZXI6ICh2OiBhbnksIGRhdGE6IGFueSkgPT4gYW55LCByb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlcih2YWx1ZSwgcm93RGF0YSk7XG4gICAgfVxufVxuXG5AUGlwZSh7IG5hbWU6ICdzdW1tYXJ5Rm9ybWF0dGVyJyB9KVxuZXhwb3J0IGNsYXNzIElneFN1bW1hcnlGb3JtYXR0ZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKHN1bW1hcnlSZXN1bHQ6IElneFN1bW1hcnlSZXN1bHQsIHN1bW1hcnlPcGVyYW5kOiBJZ3hTdW1tYXJ5T3BlcmFuZCxcbiAgICAgICAgc3VtbWFyeUZvcm1hdHRlcjogKHM6IElneFN1bW1hcnlSZXN1bHQsIG86IElneFN1bW1hcnlPcGVyYW5kKSA9PiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHN1bW1hcnlGb3JtYXR0ZXIoc3VtbWFyeVJlc3VsdCwgc3VtbWFyeU9wZXJhbmQpO1xuICAgIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAnZ3JpZEFkZFJvdycgfSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkQWRkUm93UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBncmlkQVBJOiBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4pIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShjb2xsZWN0aW9uOiBhbnksIGlzUGlubmVkID0gZmFsc2UsIF9waXBlVHJpZ2dlcjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWRBUEkuZ3JpZDtcbiAgICAgICAgaWYgKCFncmlkLnJvd0VkaXRhYmxlIHx8ICFncmlkLmNydWRTZXJ2aWNlLnJvdyB8fCBncmlkLmNydWRTZXJ2aWNlLnJvdy5nZXRDbGFzc05hbWUoKSAhPT0gSWd4QWRkUm93Lm5hbWUgfHxcbiAgICAgICAgICAgICFncmlkLmdyaWRBUEkuY3J1ZFNlcnZpY2UuYWRkUm93UGFyZW50IHx8IGlzUGlubmVkICE9PSBncmlkLmdyaWRBUEkuY3J1ZFNlcnZpY2UuYWRkUm93UGFyZW50LmlzUGlubmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb3B5ID0gY29sbGVjdGlvbi5zbGljZSgwKTtcbiAgICAgICAgY29uc3QgcmVjID0gKGdyaWQuY3J1ZFNlcnZpY2Uucm93IGFzIElneEFkZFJvdykucmVjb3JkUmVmO1xuICAgICAgICBjb3B5LnNwbGljZShncmlkLmNydWRTZXJ2aWNlLnJvdy5pbmRleCwgMCwgcmVjKTtcbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxufVxuXG5AUGlwZSh7IG5hbWU6ICdpZ3hIZWFkZXJHcm91cFdpZHRoJyB9KVxuZXhwb3J0IGNsYXNzIElneEhlYWRlckdyb3VwV2lkdGhQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKHdpZHRoOiBhbnksIG1pbldpZHRoOiBhbnksIGhhc0xheW91dDogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gaGFzTGF5b3V0ID8gJycgOiBgJHtNYXRoLm1heChwYXJzZUZsb2F0KHdpZHRoKSwgbWluV2lkdGgpfXB4YDtcbiAgICB9XG59XG5cbkBQaXBlKHsgbmFtZTogJ2lneEhlYWRlckdyb3VwU3R5bGUnIH0pXG5leHBvcnQgY2xhc3MgSWd4SGVhZGVyR3JvdXBTdHlsZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oc3R5bGVzOiB7IFtwcm9wOiBzdHJpbmddOiBhbnkgfSwgY29sdW1uOiBJZ3hDb2x1bW5Db21wb25lbnQsIF86IG51bWJlcik6IHsgW3Byb3A6IHN0cmluZ106IGFueSB9IHtcbiAgICAgICAgY29uc3QgY3NzID0ge307XG5cbiAgICAgICAgaWYgKCFzdHlsZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBjc3M7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMoc3R5bGVzKSkge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gc3R5bGVzW3Byb3BdO1xuICAgICAgICAgICAgY3NzW3Byb3BdID0gdHlwZW9mIHJlcyA9PT0gJ2Z1bmN0aW9uJyA/IHJlcyhjb2x1bW4pIDogcmVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNzcztcbiAgICB9XG59XG4iXX0=
438
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY29tbW9uL3BpcGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM3QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBVWhEOzs7R0FHRztBQUlILE1BQU0sT0FBTywyQkFBMkI7SUFFN0IsU0FBUyxDQUFDLFVBQW1CLEVBQUUsQ0FBTSxFQUFFLElBQVMsRUFBRSxLQUFhLEVBQUUsS0FBYSxFQUFFLEVBQVU7UUFDN0YsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNiLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFbEIsS0FBSyxNQUFNLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzVDLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QyxNQUFNLEtBQUssR0FBRyxPQUFPLGVBQWUsS0FBSyxVQUFVLENBQUMsQ0FBQztnQkFDakQsZUFBZSxDQUFDLElBQUksRUFBRSxL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QyxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRTs7QUFTckMsTUFBTSxPQUFPLHVCQUF1QjtJQUV6QixTQUFTLENBQUMsTUFBK0IsRUFBRSxNQUEwQixFQUFFLENBQVM7UUFDbkYsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBRWYsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU8sR0FBRyxDQUFDO1NBQ2Q7UUFFRCxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDcEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLEdBQUcsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1NBQzdEO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDOzs7WUFoQkosSUFBSSxTQUFDLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHcmlkQmFzZUFQSVNlcnZpY2UgfSBmcm9tICcuLi9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hHcmlkQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2dyaWQtYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGF0YVV0aWwgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IGNsb25lQXJyYXksIHJlc29sdmVOZXN0ZWRQYXRoIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBHcmlkVHlwZSB9IGZyb20gJy4vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4Q29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi4vY29sdW1ucy9jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IENvbHVtbkRpc3BsYXlPcmRlciB9IGZyb20gJy4vZW51bXMnO1xuaW1wb3J0IHsgSWd4Q29sdW1uQWN0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbHVtbi1hY3Rpb25zL2NvbHVtbi1hY3Rpb25zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hBZGRSb3cgfSBmcm9tICcuL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hHcmlkUm93IH0gZnJvbSAnLi4vZ3JpZC1wdWJsaWMtcm93JztcbmltcG9ydCB7IElneFRyZWVHcmlkUm93Q29tcG9uZW50IH0gZnJvbSAnLi4vdHJlZS1ncmlkL3RyZWUtZ3JpZC1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IElneEdyaWRSb3dDb21wb25lbnQgfSBmcm9tICcuLi9ncmlkL2dyaWQtcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hIaWVyYXJjaGljYWxSb3dDb21wb25lbnQgfSBmcm9tICcuLi9oaWVyYXJjaGljYWwtZ3JpZC9oaWVyYXJjaGljYWwtcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hTdW1tYXJ5T3BlcmFuZCwgSWd4U3VtbWFyeVJlc3VsdCB9IGZyb20gJy4uL3N1bW1hcmllcy9ncmlkLXN1bW1hcnknO1xuXG5pbnRlcmZhY2UgQ1NTUHJvcCB7XG4gICAgW3Byb3A6IHN0cmluZ106IGFueTtcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICdpZ3hDZWxsU3R5bGVDbGFzc2VzJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkQ2VsbFN0eWxlQ2xhc3Nlc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oY3NzQ2xhc3NlczogQ1NTUHJvcCwgXzogYW55LCBkYXRhOiBhbnksIGZpZWxkOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIF9fOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWNzc0NsYXNzZXMpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgY3NzQ2xhc3Mgb2YgT2JqZWN0LmtleXMoY3NzQ2xhc3NlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrT3JWYWx1ZSA9IGNzc0NsYXNzZXNbY3NzQ2xhc3NdO1xuICAgICAgICAgICAgY29uc3QgYXBwbHkgPSB0eXBlb2YgY2FsbGJhY2tPclZhbHVlID09PSAnZnVuY3Rpb24nID9cbiAgICAgICAgICAgICAgICBjYWxsYmFja09yVmFsdWUoZGF0YSwgZmllbGQsIHJlc29sdmVOZXN0ZWRQYXRoKGRhdGEsIGZpZWxkKSwgaW5kZXgpIDogY2FsbGJhY2tPclZhbHVlO1xuICAgICAgICAgICAgaWYgKGFwcGx5KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY3NzQ2xhc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKCcgJyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqIEBpbnRlcm5hbFxuICovXG5AUGlwZSh7XG4gICAgbmFtZTogJ2lneENlbGxTdHlsZXMnXG59KVxuZXhwb3J0IGNsYXNzIElneEdyaWRDZWxsU3R5bGVzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgcHVibGljIHRyYW5zZm9ybShzdHlsZXM6IENTU1Byb3AsIF86IGFueSwgZGF0YTogYW55LCBmaWVsZDogc3RyaW5nLCBpbmRleDogbnVtYmVyLCBfXzogbnVtYmVyKTogQ1NTUHJvcCB7XG4gICAgICAgIGNvbnN0IGNzcyA9IHt9O1xuICAgICAgICBpZiAoIXN0eWxlcykge1xuICAgICAgICAgICAgcmV0dXJuIGNzcztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3Qua2V5cyhzdHlsZXMpKSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBzdHlsZXNbcHJvcF07XG4gICAgICAgICAgICBjc3NbcHJvcF0gPSB0eXBlb2YgcmVzID09PSAnZnVuY3Rpb24nID8gcmVzKGRhdGEsIGZpZWxkLCByZXNvbHZlTmVzdGVkUGF0aChkYXRhLCBmaWVsZCksIGluZGV4KSA6IHJlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjc3M7XG4gICAgfVxufVxuXG50eXBlIF9Sb3dUeXBlID0gSWd4R3JpZFJvd0NvbXBvbmVudCB8IElneFRyZWVHcmlkUm93Q29tcG9uZW50IHwgSWd4SGllcmFyY2hpY2FsUm93Q29tcG9uZW50O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqIEBpbnRlcm5hbFxuICovXG5AUGlwZSh7IG5hbWU6ICdpZ3hHcmlkUm93Q2xhc3NlcycgfSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkUm93Q2xhc3Nlc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBwdWJsaWMgcm93OiBJZ3hHcmlkUm93O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBncmlkQVBJOiBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4pIHtcbiAgICAgICAgdGhpcy5yb3cgPSBuZXcgSWd4R3JpZFJvdyh0aGlzLmdyaWRBUEkuZ3JpZCBhcyBhbnksIC0xLCB7fSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShcbiAgICAgICAgY3NzQ2xhc3NlczogQ1NTUHJvcCxcbiAgICAgICAgcm93OiBfUm93VHlwZSxcbiAgICAgICAgZWRpdE1vZGU6IGJvb2xlYW4sXG4gICAgICAgIHNlbGVjdGVkOiBib29sZWFuLFxuICAgICAgICBkaXJ0eTogYm9vbGVhbixcbiAgICAgICAgZGVsZXRlZDogYm9vbGVhbixcbiAgICAgICAgZHJhZ2dpbmc6IGJvb2xlYW4sXG4gICAgICAgIGluZGV4OiBudW1iZXIsXG4gICAgICAgIG1ybDogYm9vbGVhbixcbiAgICAgICAgZmlsdGVyZWRPdXQ6IGJvb2xlYW4sXG4gICAgICAgIF86IG51bWJlclxuICAgICkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgU2V0KFsnaWd4LWdyaWRfX3RyJywgaW5kZXggJSAyID8gcm93LmdyaWQuZXZlblJvd0NTUyA6IHJvdy5ncmlkLm9kZFJvd0NTU10pO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0gW1xuICAgICAgICAgICAgW3NlbGVjdGVkLCAnaWd4LWdyaWRfX3RyLS1zZWxlY3RlZCddLFxuICAgICAgICAgICAgW2VkaXRNb2RlLCAnaWd4LWdyaWRfX3RyLS1lZGl0J10sXG4gICAgICAgICAgICBbZGlydHksICdpZ3gtZ3JpZF9fdHItLWVkaXRlZCddLFxuICAgICAgICAgICAgW2RlbGV0ZWQsICdpZ3gtZ3JpZF9fdHItLWRlbGV0ZWQnXSxcbiAgICAgICAgICAgIFtkcmFnZ2luZywgJ2lneC1ncmlkX190ci0tZHJhZyddLFxuICAgICAgICAgICAgW21ybCwgJ2lneC1ncmlkX190ci0tbXJsJ10sXG4gICAgICAgICAgICAvLyBUcmVlIGdyaWQgb25seVxuICAgICAgICAgICAgW2ZpbHRlcmVkT3V0LCAnaWd4LWdyaWRfX3RyLS1maWx0ZXJlZCddXG4gICAgICAgIF07XG5cbiAgICAgICAgZm9yIChjb25zdCBbc3RhdGUsIF9jbGFzc10gb2YgbWFwcGluZykge1xuICAgICAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChfY2xhc3MgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgY3NzQ2xhc3Mgb2YgT2JqZWN0LmtleXMoY3NzQ2xhc3NlcyA/PyB7fSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrT3JWYWx1ZSA9IGNzc0NsYXNzZXNbY3NzQ2xhc3NdO1xuICAgICAgICAgICAgdGhpcy5yb3cuaW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICh0aGlzLnJvdyBhcyBhbnkpLl9kYXRhID0gcm93LnJvd0RhdGE7XG4gICAgICAgICAgICBjb25zdCBhcHBseSA9IHR5cGVvZiBjYWxsYmFja09yVmFsdWUgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFja09yVmFsdWUodGhpcy5yb3cpIDogY2FsbGJhY2tPclZhbHVlO1xuICAgICAgICAgICAgaWYgKGFwcGx5KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChjc3NDbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKi9cbkBQaXBlKHsgbmFtZTogJ2lneEdyaWRSb3dTdHlsZXMnIH0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZFJvd1N0eWxlc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+KSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oc3R5bGVzOiBDU1NQcm9wLCByb3dEYXRhOiBhbnksIGluZGV4OiBudW1iZXIsIF9fOiBudW1iZXIpOiBDU1NQcm9wIHtcbiAgICAgICAgY29uc3QgY3NzID0ge307XG4gICAgICAgIGlmICghc3R5bGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gY3NzO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3Qua2V5cyhzdHlsZXMpKSB7XG4gICAgICAgICAgICBjb25zdCBjYiA9IHN0eWxlc1twcm9wXTtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IG5ldyBJZ3hHcmlkUm93KCh0aGlzLmdyaWRBUEkuZ3JpZCBhcyBhbnkpLCBpbmRleCwgcm93RGF0YSk7XG4gICAgICAgICAgICBjc3NbcHJvcF0gPSB0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicgPyBjYihyb3cpIDogY2I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNzcztcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnaWd4Tm90R3JvdXBlZCdcbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZE5vdEdyb3VwZWRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKHZhbHVlOiBhbnlbXSk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLmZpbHRlcihpdGVtID0+ICFpdGVtLmNvbHVtbkdyb3VwKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnaWd4VG9wTGV2ZWwnXG59KVxuZXhwb3J0IGNsYXNzIElneEdyaWRUb3BMZXZlbENvbHVtbnMgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0odmFsdWU6IGFueVtdKTogYW55W10ge1xuICAgICAgICByZXR1cm4gdmFsdWUuZmlsdGVyKGl0ZW0gPT4gaXRlbS5sZXZlbCA9PT0gMCk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqIEBpbnRlcm5hbFxuICovXG5AUGlwZSh7XG4gICAgbmFtZTogJ2ZpbHRlckNvbmRpdGlvbicsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkRmlsdGVyQ29uZGl0aW9uUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgcHVibGljIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnNwbGl0KC8oPz1bQS1aXSkvKS5qb2luKCcgJyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqIEBpbnRlcm5hbFxuICovXG5AUGlwZSh7XG4gICAgbmFtZTogJ2dyaWRUcmFuc2FjdGlvbicsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkVHJhbnNhY3Rpb25QaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGdyaWRBUEk6IEdyaWRCYXNlQVBJU2VydmljZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPikgeyB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKGNvbGxlY3Rpb246IGFueVtdLCBfaWQ6IHN0cmluZywgX3BpcGVUcmlnZ2VyOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZ3JpZDogSWd4R3JpZEJhc2VEaXJlY3RpdmUgPSB0aGlzLmdyaWRBUEkuZ3JpZDtcblxuICAgICAgICBpZiAoZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gRGF0YVV0aWwubWVyZ2VUcmFuc2FjdGlvbnMoXG4gICAgICAgICAgICAgICAgY2xvbmVBcnJheShjb2xsZWN0aW9uKSxcbiAgICAgICAgICAgICAgICBncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkQ2hhbmdlcyh0cnVlKSxcbiAgICAgICAgICAgICAgICBncmlkLnByaW1hcnlLZXksXG4gICAgICAgICAgICAgICAgZ3JpZC5kYXRhQ2xvbmVTdHJhdGVneSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICdwYWdpbmF0b3JPcHRpb25zJyxcbiAgICBwdXJlOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkUGFnaW5hdG9yT3B0aW9uc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBwdWJsaWMgdHJhbnNmb3JtKHZhbHVlczogQXJyYXk8bnVtYmVyPikge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi52YWx1ZXNdKSkuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICd2aXNpYmxlQ29sdW1ucycsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hIYXNWaXNpYmxlQ29sdW1uc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBwdWJsaWMgdHJhbnNmb3JtKHZhbHVlczogYW55W10sIGhhc1Zpc2libGVDb2x1bW5zKSB7XG4gICAgICAgIGlmICghKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzVmlzaWJsZUNvbHVtbnMgPyB2YWx1ZXMgOiBbXTtcbiAgICB9XG5cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnZ3JpZFJvd1Bpbm5pbmcnLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZFJvd1Bpbm5pbmdQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGdyaWRBUEk6IEdyaWRCYXNlQVBJU2VydmljZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPikgeyB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKGNvbGxlY3Rpb246IGFueVtdLCBpZDogc3RyaW5nLCBpc1Bpbm5lZCA9IGZhbHNlLCBfcGlwZVRyaWdnZXI6IG51bWJlcikge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkQVBJLmdyaWQ7XG5cbiAgICAgICAgaWYgKGdyaWQuaGFzUGlubmVkUmVjb3JkcyAmJiBpc1Bpbm5lZCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29sbGVjdGlvbi5maWx0ZXIocmVjID0+ICFncmlkLmlzU3VtbWFyeVJvdyhyZWMpICYmIGdyaWQuaXNSZWNvcmRQaW5uZWQocmVjKSk7XG4gICAgICAgICAgICByZXN1bHQuc29ydCgocmVjMSwgcmVjMikgPT4gZ3JpZC5nZXRJbml0aWFsUGlubmVkSW5kZXgocmVjMSkgLSBncmlkLmdldEluaXRpYWxQaW5uZWRJbmRleChyZWMyKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgZ3JpZC51bnBpbm5lZFJlY29yZHMgPSBjb2xsZWN0aW9uO1xuICAgICAgICBpZiAoIWdyaWQuaGFzUGlubmVkUmVjb3Jkcykge1xuICAgICAgICAgICAgZ3JpZC5waW5uZWRSZWNvcmRzID0gW107XG4gICAgICAgICAgICByZXR1cm4gaXNQaW5uZWQgPyBbXSA6IGNvbGxlY3Rpb247XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbi5tYXAoKHJlYykgPT4gIWdyaWQuaXNTdW1tYXJ5Um93KHJlYykgJiZcbiAgICAgICAgICAgIGdyaWQuaXNSZWNvcmRQaW5uZWQocmVjKSA/IHsgcmVjb3JkUmVmOiByZWMsIGdob3N0UmVjb3JkOiB0cnVlIH0gOiByZWMpO1xuICAgIH1cbn1cblxuQFBpcGUoe1xuICAgIG5hbWU6ICdjb2x1bW5BY3Rpb25FbmFibGVkJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneENvbHVtbkFjdGlvbkVuYWJsZWRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KElneENvbHVtbkFjdGlvbnNDb21wb25lbnQpIHByb3RlY3RlZCBjb2x1bW5BY3Rpb25zOiBJZ3hDb2x1bW5BY3Rpb25zQ29tcG9uZW50KSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oXG4gICAgICAgIGNvbGxlY3Rpb246IElneENvbHVtbkNvbXBvbmVudFtdLFxuICAgICAgICBhY3Rpb25GaWx0ZXI6ICh2YWx1ZTogSWd4Q29sdW1uQ29tcG9uZW50LCBpbmRleDogbnVtYmVyLCBhcnJheTogSWd4Q29sdW1uQ29tcG9uZW50W10pID0+IGJvb2xlYW4sXG4gICAgICAgIF9waXBlVHJpZ2dlcjogbnVtYmVyXG4gICAgKTogSWd4Q29sdW1uQ29tcG9uZW50W10ge1xuICAgICAgICBpZiAoIWNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb3B5ID0gY29sbGVjdGlvbi5zbGljZSgwKTtcbiAgICAgICAgaWYgKGNvcHkubGVuZ3RoICYmIGNvcHlbMF0uZ3JpZC5oYXNDb2x1bW5MYXlvdXRzKSB7XG4gICAgICAgICAgICBjb3B5ID0gY29weS5maWx0ZXIoYyA9PiBjLmNvbHVtbkxheW91dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvbkZpbHRlcikge1xuICAgICAgICAgICAgY29weSA9IGNvcHkuZmlsdGVyKGFjdGlvbkZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJlc2VydmUgdGhlIGFjdGlvbmFibGUgY29sbGVjdGlvbiBmb3IgdXNlIGluIHRoZSBjb21wb25lbnRcbiAgICAgICAgdGhpcy5jb2x1bW5BY3Rpb25zLmFjdGlvbmFibGVDb2x1bW5zID0gY29weTtcbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxufVxuXG5AUGlwZSh7XG4gICAgbmFtZTogJ2ZpbHRlckFjdGlvbkNvbHVtbnMnLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4RmlsdGVyQWN0aW9uQ29sdW1uc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSWd4Q29sdW1uQWN0aW9uc0NvbXBvbmVudCkgcHJvdGVjdGVkIGNvbHVtbkFjdGlvbnM6IElneENvbHVtbkFjdGlvbnNDb21wb25lbnQpIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShjb2xsZWN0aW9uOiBJZ3hDb2x1bW5Db21wb25lbnRbXSwgZmlsdGVyQ3JpdGVyaWE6IHN0cmluZywgX3BpcGVUcmlnZ2VyOiBudW1iZXIpOiBJZ3hDb2x1bW5Db21wb25lbnRbXSB7XG4gICAgICAgIGlmICghY29sbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNvcHkgPSBjb2xsZWN0aW9uLnNsaWNlKDApO1xuICAgICAgICBpZiAoZmlsdGVyQ3JpdGVyaWEgJiYgZmlsdGVyQ3JpdGVyaWEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyRnVuYyA9IChjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyVGV4dCA9IGMuaGVhZGVyIHx8IGMuZmllbGQ7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXJUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlclRleHQudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlckNyaXRlcmlhLnRvTG9jYWxlTG93ZXJDYXNlKCkpID49IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgKGMuY2hpbGRyZW4/LnNvbWUoZmlsdGVyRnVuYykgPz8gZmFsc2UpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvcHkgPSBjb2xsZWN0aW9uLmZpbHRlcihmaWx0ZXJGdW5jKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgZmlsdGVyZWQgY29sbGVjdGlvbiBmb3IgdXNlIGluIHRoZSBjb21wb25lbnRcbiAgICAgICAgdGhpcy5jb2x1bW5BY3Rpb25zLmZpbHRlcmVkQ29sdW1ucyA9IGNvcHk7XG4gICAgICAgIHJldHVybiBjb3B5O1xuICAgIH1cbn1cblxuQFBpcGUoe1xuICAgIG5hbWU6ICdzb3J0QWN0aW9uQ29sdW1ucycsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hTb3J0QWN0aW9uQ29sdW1uc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oY29sbGVjdGlvbjogSWd4Q29sdW1uQ29tcG9uZW50W10sIGRpc3BsYXlPcmRlcjogQ29sdW1uRGlzcGxheU9yZGVyLCBfcGlwZVRyaWdnZXI6IG51bWJlcik6IElneENvbHVtbkNvbXBvbmVudFtdIHtcbiAgICAgICAgaWYgKGRpc3BsYXlPcmRlciA9PT0gQ29sdW1uRGlzcGxheU9yZGVyLkFscGhhYmV0aWNhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb24uc29ydCgoYSwgYikgPT4gKGEuaGVhZGVyIHx8IGEuZmllbGQpLmxvY2FsZUNvbXBhcmUoYi5oZWFkZXIgfHwgYi5maWVsZCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAnZGF0YU1hcHBlcicgfSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkRGF0YU1hcHBlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oZGF0YTogYW55W10sIGZpZWxkOiBzdHJpbmcsIF86IG51bWJlciwgdmFsOiBhbnksIGlzTmVzdGVkUGF0aDogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gaXNOZXN0ZWRQYXRoID8gcmVzb2x2ZU5lc3RlZFBhdGgoZGF0YSwgZmllbGQpIDogdmFsO1xuICAgIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAnaWd4U3RyaW5nUmVwbGFjZScgfSlcbmV4cG9ydCBjbGFzcyBJZ3hTdHJpbmdSZXBsYWNlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgcHVibGljIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nLCBzZWFyY2g6IHN0cmluZyB8IFJlZ0V4cCwgcmVwbGFjZW1lbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKHNlYXJjaCwgcmVwbGFjZW1lbnQpO1xuICAgIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAndHJhbnNhY3Rpb25TdGF0ZScgfSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkVHJhbnNhY3Rpb25TdGF0ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0ocm93X2lkOiBhbnksIGZpZWxkOiBzdHJpbmcsIHJvd0VkaXRhYmxlOiBib29sZWFuLCB0cmFuc2FjdGlvbnM6IGFueSwgXzogYW55LCBfXzogYW55LCBfX186IGFueSkge1xuICAgICAgICBpZiAocm93RWRpdGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0N1cnJlbnRTdGF0ZSA9IHRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUocm93X2lkLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAocm93Q3VycmVudFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZXNvbHZlTmVzdGVkUGF0aChyb3dDdXJyZW50U3RhdGUsIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25zLmdldFN0YXRlKHJvd19pZCk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJlc29sdmVOZXN0ZWRQYXRoKHRyYW5zYWN0aW9uPy52YWx1ZSA/PyB7fSwgZmllbGQpO1xuICAgICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uICYmIHRyYW5zYWN0aW9uLnZhbHVlICYmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCB8fCB2YWx1ZSA9PT0gZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5AUGlwZSh7IG5hbWU6ICdjb2x1bW5Gb3JtYXR0ZXInIH0pXG5leHBvcnQgY2xhc3MgSWd4Q29sdW1uRm9ybWF0dGVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgcHVibGljIHRyYW5zZm9ybSh2YWx1ZTogYW55LCBmb3JtYXR0ZXI6ICh2OiBhbnksIGRhdGE6IGFueSkgPT4gYW55LCByb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlcih2YWx1ZSwgcm93RGF0YSk7XG4gICAgfVxufVxuXG5AUGlwZSh7IG5hbWU6ICdzdW1tYXJ5Rm9ybWF0dGVyJyB9KVxuZXhwb3J0IGNsYXNzIElneFN1bW1hcnlGb3JtYXR0ZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKHN1bW1hcnlSZXN1bHQ6IElneFN1bW1hcnlSZXN1bHQsIHN1bW1hcnlPcGVyYW5kOiBJZ3hTdW1tYXJ5T3BlcmFuZCxcbiAgICAgICAgc3VtbWFyeUZvcm1hdHRlcjogKHM6IElneFN1bW1hcnlSZXN1bHQsIG86IElneFN1bW1hcnlPcGVyYW5kKSA9PiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHN1bW1hcnlGb3JtYXR0ZXIoc3VtbWFyeVJlc3VsdCwgc3VtbWFyeU9wZXJhbmQpO1xuICAgIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAnZ3JpZEFkZFJvdycgfSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkQWRkUm93UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBncmlkQVBJOiBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4pIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShjb2xsZWN0aW9uOiBhbnksIGlzUGlubmVkID0gZmFsc2UsIF9waXBlVHJpZ2dlcjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWRBUEkuZ3JpZDtcbiAgICAgICAgaWYgKCFncmlkLnJvd0VkaXRhYmxlIHx8ICFncmlkLmNydWRTZXJ2aWNlLnJvdyB8fCBncmlkLmNydWRTZXJ2aWNlLnJvdy5nZXRDbGFzc05hbWUoKSAhPT0gSWd4QWRkUm93Lm5hbWUgfHxcbiAgICAgICAgICAgICFncmlkLmdyaWRBUEkuY3J1ZFNlcnZpY2UuYWRkUm93UGFyZW50IHx8IGlzUGlubmVkICE9PSBncmlkLmdyaWRBUEkuY3J1ZFNlcnZpY2UuYWRkUm93UGFyZW50LmlzUGlubmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb3B5ID0gY29sbGVjdGlvbi5zbGljZSgwKTtcbiAgICAgICAgY29uc3QgcmVjID0gKGdyaWQuY3J1ZFNlcnZpY2Uucm93IGFzIElneEFkZFJvdykucmVjb3JkUmVmO1xuICAgICAgICBjb3B5LnNwbGljZShncmlkLmNydWRTZXJ2aWNlLnJvdy5pbmRleCwgMCwgcmVjKTtcbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxufVxuXG5AUGlwZSh7IG5hbWU6ICdpZ3hIZWFkZXJHcm91cFdpZHRoJyB9KVxuZXhwb3J0IGNsYXNzIElneEhlYWRlckdyb3VwV2lkdGhQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKHdpZHRoOiBhbnksIG1pbldpZHRoOiBhbnksIGhhc0xheW91dDogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gaGFzTGF5b3V0ID8gJycgOiBgJHtNYXRoLm1heChwYXJzZUZsb2F0KHdpZHRoKSwgbWluV2lkdGgpfXB4YDtcbiAgICB9XG59XG5cbkBQaXBlKHsgbmFtZTogJ2lneEhlYWRlckdyb3VwU3R5bGUnIH0pXG5leHBvcnQgY2xhc3MgSWd4SGVhZGVyR3JvdXBTdHlsZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oc3R5bGVzOiB7IFtwcm9wOiBzdHJpbmddOiBhbnkgfSwgY29sdW1uOiBJZ3hDb2x1bW5Db21wb25lbnQsIF86IG51bWJlcik6IHsgW3Byb3A6IHN0cmluZ106IGFueSB9IHtcbiAgICAgICAgY29uc3QgY3NzID0ge307XG5cbiAgICAgICAgaWYgKCFzdHlsZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBjc3M7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMoc3R5bGVzKSkge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gc3R5bGVzW3Byb3BdO1xuICAgICAgICAgICAgY3NzW3Byb3BdID0gdHlwZW9mIHJlcyA9PT0gJ2Z1bmN0aW9uJyA/IHJlcyhjb2x1bW4pIDogcmVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNzcztcbiAgICB9XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9jb21tb24vcm93LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUdyb3VwQnlSZWNvcmQgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1yZWNvcmQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneFN1bW1hcnlSZXN1bHQgfSBmcm9tICcuLi9zdW1tYXJpZXMvZ3JpZC1zdW1tYXJ5JztcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4uL3RyZWUtZ3JpZC90cmVlLWdyaWQuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDZWxsVHlwZSB9IGZyb20gJy4vY2VsbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR3JpZFR5cGUgfSBmcm9tICcuL2dyaWQuaW50ZXJmYWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBSb3dUeXBlIHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHZpZXdJbmRleDogbnVtYmVyO1xuICAgIGlzR3JvdXBCeVJvdz86IGJvb2xlYW47XG4gICAgaXNTdW1tYXJ5Um93PzogYm9vbGVhbjtcbiAgICBzdW1tYXJpZXM/OiBNYXA8c3RyaW5nLCBJZ3hTdW1tYXJ5UmVzdWx0W10+O1xuICAgIGdyb3VwUm93PzogSUdyb3VwQnlSZWNvcmQ7XG4gICAgLyoqIERlcHJlY2F0ZWQsIHdpbGwgYmUgcmVtb3ZlZC4ga2V5IGlzIHRoZSBuZXcgcHJvcGVydHkgKi9cbiAgICByb3dJRD86IGFueTtcbiAgICBrZXk/OiBhbnk7XG4gICAgLyoqIERlcHJlY2F0ZWQsIHdpbGwgYmUgcmVtb3ZlZC4gZGF0YSBpcyB0aGUgbmV3IHByb3BlcnR5ICovXG4gICAgcm93RGF0YT86IGFueTtcbiAgICBkYXRhPzogYW55O1xuICAgIGNlbGxzPzogQ2VsbFR5cGVbXTtcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgcGlubmVkPzogYm9vbGVhbjtcbiAgICBzZWxlY3RlZD86IGJvb2xlYW47XG4gICAgZXhwYW5kZWQ/OiBib29sZWFuO1xuICAgIGRlbGV0ZWQ/OiBib29sZWFuO1xuICAgIGluRWRpdE1vZGU/OiBib29sZWFuO1xuICAgIGNoaWxkcmVuPzogUm93VHlwZVtdO1xuICAgIHBhcmVudD86IFJvd1R5cGU7XG4gICAgaGFzQ2hpbGRyZW4/OiBib29sZWFuO1xuICAgIHRyZWVSb3c/IDogSVRyZWVHcmlkUmVjb3JkO1xuICAgIGdyaWQ6IEdyaWRUeXBlO1xuICAgIHVwZGF0ZT86ICh2YWx1ZTogYW55KSA9PiB2b2lkO1xuICAgIGRlbGV0ZT86ICgpID0+IGFueTtcbiAgICBwaW4/OiAoKSA9PiB2b2lkO1xuICAgIHVucGluPzogKCkgPT4gdm9pZDtcbn1cblxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9jb21tb24vcm93LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUdyb3VwQnlSZWNvcmQgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1yZWNvcmQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneFN1bW1hcnlSZXN1bHQgfSBmcm9tICcuLi9zdW1tYXJpZXMvZ3JpZC1zdW1tYXJ5JztcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4uL3RyZWUtZ3JpZC90cmVlLWdyaWQuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDZWxsVHlwZSB9IGZyb20gJy4vY2VsbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR3JpZFR5cGUgfSBmcm9tICcuL2dyaWQuaW50ZXJmYWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBSb3dUeXBlIHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHZpZXdJbmRleDogbnVtYmVyO1xuICAgIGlzR3JvdXBCeVJvdz86IGJvb2xlYW47XG4gICAgaXNTdW1tYXJ5Um93PzogYm9vbGVhbjtcbiAgICBzdW1tYXJpZXM/OiBNYXA8c3RyaW5nLCBJZ3hTdW1tYXJ5UmVzdWx0W10+O1xuICAgIGdyb3VwUm93PzogSUdyb3VwQnlSZWNvcmQ7XG4gICAgLyoqIERlcHJlY2F0ZWQsIHdpbGwgYmUgcmVtb3ZlZC4ga2V5IGlzIHRoZSBuZXcgcHJvcGVydHkgKi9cbiAgICByb3dJRD86IGFueTtcbiAgICBrZXk/OiBhbnk7XG4gICAgLyoqIERlcHJlY2F0ZWQsIHdpbGwgYmUgcmVtb3ZlZC4gZGF0YSBpcyB0aGUgbmV3IHByb3BlcnR5ICovXG4gICAgcm93RGF0YT86IGFueTtcbiAgICBkYXRhPzogYW55O1xuICAgIGNlbGxzPzogQ2VsbFR5cGVbXTtcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgcGlubmVkPzogYm9vbGVhbjtcbiAgICBzZWxlY3RlZD86IGJvb2xlYW47XG4gICAgZXhwYW5kZWQ/OiBib29sZWFuO1xuICAgIGRlbGV0ZWQ/OiBib29sZWFuO1xuICAgIGFkZFJvd1VJPzogYm9vbGVhbjtcbiAgICBpbkVkaXRNb2RlPzogYm9vbGVhbjtcbiAgICBjaGlsZHJlbj86IFJvd1R5cGVbXTtcbiAgICBwYXJlbnQ/OiBSb3dUeXBlO1xuICAgIGhhc0NoaWxkcmVuPzogYm9vbGVhbjtcbiAgICB0cmVlUm93PyA6IElUcmVlR3JpZFJlY29yZDtcbiAgICBncmlkOiBHcmlkVHlwZTtcbiAgICB1cGRhdGU/OiAodmFsdWU6IGFueSkgPT4gdm9pZDtcbiAgICBkZWxldGU/OiAoKSA9PiBhbnk7XG4gICAgcGluPzogKCkgPT4gdm9pZDtcbiAgICB1bnBpbj86ICgpID0+IHZvaWQ7XG59XG5cbiJdfQ==