igniteui-angular 18.1.16 → 18.1.17

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 (27) hide show
  1. package/esm2022/lib/calendar/calendar.component.mjs +3 -10
  2. package/esm2022/lib/calendar/days-view/days-view.component.mjs +3 -3
  3. package/esm2022/lib/combo/combo.common.mjs +17 -7
  4. package/esm2022/lib/combo/combo.component.mjs +3 -3
  5. package/esm2022/lib/date-common/picker-base.directive.mjs +12 -1
  6. package/esm2022/lib/date-picker/date-picker.component.mjs +10 -7
  7. package/esm2022/lib/date-range-picker/date-range-picker.component.mjs +9 -2
  8. package/esm2022/lib/grids/filtering/base/grid-filtering-row.component.mjs +7 -7
  9. package/esm2022/lib/grids/grid-base.directive.mjs +11 -3
  10. package/esm2022/lib/grids/selection/selection.service.mjs +4 -4
  11. package/esm2022/lib/grids/tree-grid/tree-grid-selection.service.mjs +5 -5
  12. package/esm2022/lib/slider/slider.component.mjs +4 -38
  13. package/esm2022/lib/slider/thumb/thumb-slider.component.mjs +55 -2
  14. package/esm2022/lib/time-picker/time-picker.component.mjs +4 -1
  15. package/fesm2022/igniteui-angular.mjs +133 -79
  16. package/fesm2022/igniteui-angular.mjs.map +1 -1
  17. package/lib/combo/combo.common.d.ts +3 -0
  18. package/lib/date-common/picker-base.directive.d.ts +6 -0
  19. package/lib/date-picker/date-picker.component.d.ts +2 -0
  20. package/lib/date-range-picker/date-range-picker.component.d.ts +2 -0
  21. package/lib/grids/filtering/base/grid-filtering-row.component.d.ts +1 -1
  22. package/lib/grids/grid-base.directive.d.ts +3 -1
  23. package/lib/grids/selection/selection.service.d.ts +1 -1
  24. package/lib/slider/slider.component.d.ts +0 -16
  25. package/lib/slider/thumb/thumb-slider.component.d.ts +12 -1
  26. package/lib/time-picker/time-picker.component.d.ts +1 -0
  27. package/package.json +1 -1
@@ -45,7 +45,7 @@ export class IgxTreeGridSelectionService extends IgxGridSelectionService {
45
45
  this.indeterminateRows = new Set(this.rowsToBeIndeterminate);
46
46
  // TODO: emit selectionChangeD event, calculate its args through the handleAddedAndRemovedArgs method
47
47
  this.clearHeaderCBState();
48
- this.selectedRowsChange.next();
48
+ this.selectedRowsChange.next(this.getSelectedRows());
49
49
  return;
50
50
  }
51
51
  const newParents = new Set();
@@ -74,7 +74,7 @@ export class IgxTreeGridSelectionService extends IgxGridSelectionService {
74
74
  this.rowSelection = new Set(this.rowsToBeSelected);
75
75
  this.indeterminateRows = new Set(this.rowsToBeIndeterminate);
76
76
  this.clearHeaderCBState();
77
- this.selectedRowsChange.next();
77
+ this.selectedRowsChange.next(this.getSelectedRows());
78
78
  }
79
79
  cascadeDeselectRowsWithNoEvent(rowIDs) {
80
80
  const args = { added: [], removed: rowIDs };
@@ -82,7 +82,7 @@ export class IgxTreeGridSelectionService extends IgxGridSelectionService {
82
82
  this.rowSelection = new Set(this.rowsToBeSelected);
83
83
  this.indeterminateRows = new Set(this.rowsToBeIndeterminate);
84
84
  this.clearHeaderCBState();
85
- this.selectedRowsChange.next();
85
+ this.selectedRowsChange.next(this.getSelectedRows());
86
86
  }
87
87
  get selectionService() {
88
88
  return this.grid.selectionService;
@@ -110,7 +110,7 @@ export class IgxTreeGridSelectionService extends IgxGridSelectionService {
110
110
  this.rowSelection = new Set(this.rowsToBeSelected);
111
111
  this.indeterminateRows = new Set(this.rowsToBeIndeterminate);
112
112
  this.clearHeaderCBState();
113
- this.selectedRowsChange.next();
113
+ this.selectedRowsChange.next(this.getSelectedRows());
114
114
  }
115
115
  else {
116
116
  // select the rows within the modified args.newSelection with no event
@@ -244,4 +244,4 @@ export class IgxTreeGridSelectionService extends IgxGridSelectionService {
244
244
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: IgxTreeGridSelectionService, decorators: [{
245
245
  type: Injectable
246
246
  }] });
247
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ncmlkLXNlbGVjdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL3RyZWUtZ3JpZC90cmVlLWdyaWQtc2VsZWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFLekUsTUFBTSxPQUFPLDJCQUE0QixTQUFRLHVCQUF1QjtJQUlwRSxrREFBa0Q7SUFDbEMscUJBQXFCLENBQUMsTUFBYSxFQUFFLGtCQUFtQjtRQUNwRSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssaUJBQWlCLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDNUUsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlELE9BQU87UUFDWCxDQUFDO1FBQ0QsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxvREFBb0Q7SUFDcEMsdUJBQXVCLENBQUMsTUFBYTtRQUNqRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFLLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQy9ELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QyxPQUFPO1FBQ1gsQ0FBQztRQUNELEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRWUscUJBQXFCLENBQUMsWUFBWSxFQUFFLEtBQUss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QUFNLEVBQUUsQ0FBQztZQUN0RCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbEMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFFcEIsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQVUsRUFBRSxNQUFlO1FBQ2pELElBQUksTUFBTSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNMLENBQUM7OEdBNVFRLDJCQUEyQjtrSEFBM0IsMkJBQTJCOzsyRkFBM0IsMkJBQTJCO2tCQUR2QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR3JpZFNlbGVjdGlvbk1vZGUgfSBmcm9tICcuLi9jb21tb24vZW51bXMnO1xuaW1wb3J0IHsgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZWxlY3Rpb24vc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSVRyZWVHcmlkUmVjb3JkIH0gZnJvbSAnLi90cmVlLWdyaWQuaW50ZXJmYWNlcyc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElneFRyZWVHcmlkU2VsZWN0aW9uU2VydmljZSBleHRlbmRzIElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJvd3NUb0JlU2VsZWN0ZWQ6IFNldDxhbnk+O1xuICAgIHByaXZhdGUgcm93c1RvQmVJbmRldGVybWluYXRlOiBTZXQ8YW55PjtcblxuICAgIC8qKiBTZWxlY3Qgc3BlY2lmaWVkIHJvd3MuIE5vIGV2ZW50IGlzIGVtaXR0ZWQuICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNlbGVjdFJvd3NXaXRoTm9FdmVudChyb3dJRHM6IGFueVtdLCBjbGVhclByZXZTZWxlY3Rpb24/KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQgJiYgdGhpcy5ncmlkLnJvd1NlbGVjdGlvbiA9PT0gR3JpZFNlbGVjdGlvbk1vZGUubXVsdGlwbGVDYXNjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmNhc2NhZGVTZWxlY3RSb3dzV2l0aE5vRXZlbnQocm93SURzLCBjbGVhclByZXZTZWxlY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLnNlbGVjdFJvd3NXaXRoTm9FdmVudChyb3dJRHMsIGNsZWFyUHJldlNlbGVjdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIERlc2VsZWN0IHNwZWNpZmllZCByb3dzLiBObyBldmVudCBpcyBlbWl0dGVkLiAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBkZXNlbGVjdFJvd3NXaXRoTm9FdmVudChyb3dJRHM6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm93U2VsZWN0aW9uID09PSBHcmlkU2VsZWN0aW9uTW9kZS5tdWx0aXBsZUNhc2NhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2FzY2FkZURlc2VsZWN0Um93c1dpdGhOb0V2ZW50KHJvd0lEcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIuZGVzZWxlY3RSb3dzV2l0aE5vRXZlbnQocm93SURzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZW1pdFJvd1NlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50Pyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5ncmlkLnJvd1NlbGVjdGlvbiA9PT0gR3JpZFNlbGVjdGlvbk1vZGUubXVsdGlwbGVDYXNjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXRDYXNjYWRlUm93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlQ2FzY2FkZVNlbGVjdGlvbk9uRmlsdGVyQW5kQ1JVRChcbiAgICAgICAgcGFyZW50czogU2V0PGFueT4sXG4gICAgICAgIGNydWRSb3dJRD86IGFueSxcbiAgICAgICAgdmlzaWJsZVJvd0lEczogU2V0PGFueT4gPSBudWxsKSB7XG4gICAgICAgIGlmICh2aXNpYmxlUm93SURzID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgdHJlZSBncmlkIGhhcyBmbGF0IHN0cnVjdHVyZVxuICAgICAgICAgICAgLy8gZG8gbm90IGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBzZWxlY3Rpb24gc3RhdGUgb2YgdGhlIHJvd3NcbiAgICAgICAgICAgIGlmICghcGFyZW50cy5zaXplKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmlzaWJsZVJvd0lEcyA9IG5ldyBTZXQodGhpcy5nZXRSb3dJRHModGhpcy5hbGxEYXRhKSk7XG4gICAgICAgICAgICB0aGlzLnJvd3NUb0JlU2VsZWN0ZWQgPSBuZXcgU2V0KHRoaXMucm93U2VsZWN0aW9uKTtcbiAgICAgICAgICAgIHRoaXMucm93c1RvQmVJbmRldGVybWluYXRlID0gbmV3IFNldCh0aGlzLmluZGV0ZXJtaW5hdGVSb3dzKTtcbiAgICAgICAgICAgIGlmIChjcnVkUm93SUQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbi5kZWxldGUoY3J1ZFJvd0lEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBhcmVudHMuc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb24gPSBuZXcgU2V0KHRoaXMucm93c1RvQmVTZWxlY3RlZCk7XG4gICAgICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGVSb3dzID0gbmV3IFNldCh0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZSk7XG4gICAgICAgICAgICAvLyBUT0RPOiBlbWl0IHNlbGVjdGlvbkNoYW5nZUQgZXZlbnQsIGNhbGN1bGF0ZSBpdHMgYXJncyB0aHJvdWdoIHRoZSBoYW5kbGVBZGRlZEFuZFJlbW92ZWRBcmdzIG1ldGhvZFxuICAgICAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLm5leHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdQYXJlbnRzID0gbmV3IFNldDxhbnk+KCk7XG4gICAgICAgIHBhcmVudHMuZm9yRWFjaChwYXJlbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVSb3dTZWxlY3Rpb25TdGF0ZShwYXJlbnQsIHZpc2libGVSb3dJRHMpO1xuICAgICAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgbmV3UGFyZW50cy5hZGQocGFyZW50LnBhcmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZUNhc2NhZGVTZWxlY3Rpb25PbkZpbHRlckFuZENSVUQobmV3UGFyZW50cywgbnVsbCwgdmlzaWJsZVJvd0lEcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYXNjYWRlU2VsZWN0Um93c1dpdGhOb0V2ZW50KHJvd0lEczogYW55W10sIGNsZWFyUHJldlNlbGVjdGlvbj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGNsZWFyUHJldlNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5pbmRldGVybWluYXRlUm93cy5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlUm93c05ld1NlbGVjdGlvblN0YXRlKHsgYWRkZWQ6IHJvd0lEcywgcmVtb3ZlZDogW10gfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBvbGRTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkUm93cygpO1xuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gWy4uLm9sZFNlbGVjdGlvbiwgLi4ucm93SURzXTtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSB7IG9sZFNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uIH07XG5cbiAgICAgICAgICAgIC8vIHJldHJpZXZlIG9ubHkgdGhlIHJvd3Mgd2l0aG91dCB0aGVpciBwYXJlbnRzL2NoaWxkcmVuIHdoaWNoIGhhcyB0byBiZSBhZGRlZCB0byB0aGUgc2VsZWN0aW9uXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFkZGVkQW5kUmVtb3ZlZEFyZ3MoYXJncyk7XG5cbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlUm93c05ld1NlbGVjdGlvblN0YXRlKGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm93U2VsZWN0aW9uID0gbmV3IFNldCh0aGlzLnJvd3NUb0JlU2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGVSb3dzID0gbmV3IFNldCh0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZSk7XG4gICAgICAgIHRoaXMuY2xlYXJIZWFkZXJDQlN0YXRlKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLm5leHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhc2NhZGVEZXNlbGVjdFJvd3NXaXRoTm9FdmVudChyb3dJRHM6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB7IGFkZGVkOiBbXSwgcmVtb3ZlZDogcm93SURzIH07XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlUm93c05ld1NlbGVjdGlvblN0YXRlKGFyZ3MpO1xuXG4gICAgICAgIHRoaXMucm93U2VsZWN0aW9uID0gbmV3IFNldCh0aGlzLnJvd3NUb0JlU2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGVSb3dzID0gbmV3IFNldCh0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZSk7XG4gICAgICAgIHRoaXMuY2xlYXJIZWFkZXJDQlN0YXRlKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLm5leHQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGlvblNlcnZpY2UoKTogSWd4R3JpZFNlbGVjdGlvblNlcnZpY2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Q2FzY2FkZVJvd1NlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50Pyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjdXJyU2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZFJvd3MoKTtcbiAgICAgICAgaWYgKHRoaXMuYXJlRXF1YWxDb2xsZWN0aW9ucyhjdXJyU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0ge1xuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCwgb2xkU2VsZWN0aW9uOiB0aGlzLmdldFNlbGVjdGVkUm93c0RhdGEoKSwgbmV3U2VsZWN0aW9uLFxuICAgICAgICAgICAgYWRkZWQsIHJlbW92ZWQsIGV2ZW50LCBjYW5jZWw6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jYWxjdWxhdGVSb3dzTmV3U2VsZWN0aW9uU3RhdGUoYXJncywgISF0aGlzLmdyaWQucHJpbWFyeUtleSk7XG4gICAgICAgIGFyZ3MubmV3U2VsZWN0aW9uID0gQXJyYXkuZnJvbSh0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfYWxsX2RhdGEoKS5maWx0ZXIociA9PiB0aGlzLnJvd3NUb0JlU2VsZWN0ZWQuaGFzKHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gclt0aGlzLmdyaWQucHJpbWFyeUtleV0gOiByKSkpO1xuXG4gICAgICAgIC8vIHJldHJpZXZlIHJvd3MvcGFyZW50cy9jaGlsZHJlbiB3aGljaCBoYXMgYmVlbiBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIHNlbGVjdGlvblxuICAgICAgICB0aGlzLmhhbmRsZUFkZGVkQW5kUmVtb3ZlZEFyZ3MoYXJncyk7XG5cbiAgICAgICAgdGhpcy5ncmlkLnJvd1NlbGVjdGlvbkNoYW5naW5nLmVtaXQoYXJncyk7XG5cbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uSURzID0gYXJncy5uZXdTZWxlY3Rpb24ubWFwKHIgPT4gdGhpcy5ncmlkLnByaW1hcnlLZXk/IHJbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcilcbiAgICAgICAgLy8gaWYgYXJncy5uZXdTZWxlY3Rpb24gaGFzbid0IGJlZW4gbW9kaWZpZWRcbiAgICAgICAgaWYgKHRoaXMuYXJlRXF1YWxDb2xsZWN0aW9ucyhBcnJheS5mcm9tKHRoaXMucm93c1RvQmVTZWxlY3RlZCksIG5ld1NlbGVjdGlvbklEcykpIHtcbiAgICAgICAgICAgIHRoaXMucm93U2VsZWN0aW9uID0gbmV3IFNldCh0aGlzLnJvd3NUb0JlU2VsZWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5pbmRldGVybWluYXRlUm93cyA9IG5ldyBTZXQodGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUpO1xuICAgICAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLm5leHQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNlbGVjdCB0aGUgcm93cyB3aXRoaW4gdGhlIG1vZGlmaWVkIGFyZ3MubmV3U2VsZWN0aW9uIHdpdGggbm8gZXZlbnRcbiAgICAgICAgICAgIHRoaXMuY2FzY2FkZVNlbGVjdFJvd3NXaXRoTm9FdmVudChuZXdTZWxlY3Rpb25JRHMsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiByZXRyaWV2ZSB0aGUgcm93cyB3aGljaCBzaG91bGQgYmUgYWRkZWQvcmVtb3ZlZCB0by9mcm9tIHRoZSBvbGQgc2VsZWN0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBoYW5kbGVBZGRlZEFuZFJlbW92ZWRBcmdzKGFyZ3M6IGFueSkge1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb25TZXQgPSBuZXcgU2V0KGFyZ3MubmV3U2VsZWN0aW9uKTtcbiAgICAgICAgY29uc3Qgb2xkU2VsZWN0aW9uU2V0ID0gbmV3IFNldChhcmdzLm9sZFNlbGVjdGlvbik7XG4gICAgICAgIGFyZ3MucmVtb3ZlZCA9IGFyZ3Mub2xkU2VsZWN0aW9uLmZpbHRlcih4ID0+ICFuZXdTZWxlY3Rpb25TZXQuaGFzKHgpKTtcbiAgICAgICAgYXJncy5hZGRlZCA9IGFyZ3MubmV3U2VsZWN0aW9uLmZpbHRlcih4ID0+ICFvbGRTZWxlY3Rpb25TZXQuaGFzKHgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBhZGRzIHRvIHJvd3NUb0JlUHJvY2Vzc2VkIHNldCBhbGwgdmlzaWJsZSBjaGlsZHJlbiBvZiB0aGUgcm93cyB3aGljaCB3YXMgaW5pdGlhbGx5IHdpdGhpbiB0aGUgcm93c1RvQmVQcm9jZXNzZWQgc2V0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcm93c1RvQmVQcm9jZXNzZWQgc2V0IG9mIHRoZSByb3dzICh3aXRob3V0IHRoZWlyIHBhcmVudHMvY2hpbGRyZW4pIHRvIGJlIHNlbGVjdGVkL2Rlc2VsZWN0ZWRcbiAgICAgKiBAcGFyYW0gdmlzaWJsZVJvd0lEcyBsaXN0IG9mIGFsbCB2aXNpYmxlIHJvd0lkc1xuICAgICAqIEByZXR1cm5zIGEgbmV3IHNldCB3aXRoIGFsbCBkaXJlY3QgcGFyZW50cyBvZiB0aGUgcm93cyB3aXRoaW4gcm93c1RvQmVQcm9jZXNzZWQgc2V0XG4gICAgICovXG4gICAgcHJpdmF0ZSBjb2xsZWN0Um93c0NoaWxkcmVuQW5kRGlyZWN0UGFyZW50cyhyb3dzVG9CZVByb2Nlc3NlZDogU2V0PGFueT4sIHZpc2libGVSb3dJRHM6IFNldDxhbnk+LCBhZGRpbmc6IGJvb2xlYW4sIHNob3VsZENvbnZlcnQ6IGJvb2xlYW4pOiBTZXQ8YW55PiB7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZFJvd3NQYXJlbnRzID0gbmV3IFNldDxhbnk+KCk7XG4gICAgICAgIEFycmF5LmZyb20ocm93c1RvQmVQcm9jZXNzZWQpLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93SUQgPSBzaG91bGRDb252ZXJ0ID8gcm93W3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHJvdztcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RGVzZWxlY3RSb3cocm93SUQsIGFkZGluZyk7XG4gICAgICAgICAgICBjb25zdCByb3dUcmVlUmVjb3JkID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3JlY19ieV9pZChyb3dJRCk7XG4gICAgICAgICAgICBjb25zdCByb3dBbmRBbGxDaGlsZHJlbiA9IHRoaXMuZ2V0X2FsbF9jaGlsZHJlbihyb3dUcmVlUmVjb3JkKTtcbiAgICAgICAgICAgIHJvd0FuZEFsbENoaWxkcmVuLmZvckVhY2gociA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZpc2libGVSb3dJRHMuaGFzKHIua2V5KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERlc2VsZWN0Um93KHIua2V5LCBhZGRpbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHJvd1RyZWVSZWNvcmQgJiYgcm93VHJlZVJlY29yZC5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWRSb3dzUGFyZW50cy5hZGQocm93VHJlZVJlY29yZC5wYXJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3NlZFJvd3NQYXJlbnRzO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogcG9wdWxhdGVzIHRoZSByb3dzVG9CZVNlbGVjdGVkIGFuZCByb3dzVG9CZUluZGV0ZXJtaW5hdGUgc2V0c1xuICAgICAqIHdpdGggdGhlIHJvd3Mgd2hpY2ggd2lsbCBiZSBldmVudHVhbGx5IGluIHNlbGVjdGVkL2luZGV0ZXJtaW5hdGUgc3RhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNhbGN1bGF0ZVJvd3NOZXdTZWxlY3Rpb25TdGF0ZShhcmdzOiBhbnksIHNob3VsZENvbnZlcnQgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLnJvd3NUb0JlU2VsZWN0ZWQgPSBuZXcgU2V0PGFueT4oYXJncy5vbGRTZWxlY3Rpb24gPyBzaG91bGRDb252ZXJ0ID8gYXJncy5vbGRTZWxlY3Rpb24ubWFwKHIgPT4gclt0aGlzLmdyaWQucHJpbWFyeUtleV0pIDogYXJncy5vbGRTZWxlY3Rpb24gOiB0aGlzLmdldFNlbGVjdGVkUm93cygpKTtcbiAgICAgICAgdGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUgPSBuZXcgU2V0PGFueT4odGhpcy5nZXRJbmRldGVybWluYXRlUm93cygpKTtcblxuICAgICAgICBjb25zdCB2aXNpYmxlUm93SURzID0gbmV3IFNldCh0aGlzLmdldFJvd0lEcyh0aGlzLmFsbERhdGEpKTtcblxuICAgICAgICBjb25zdCByZW1vdmVkID0gbmV3IFNldChhcmdzLnJlbW92ZWQpO1xuICAgICAgICBjb25zdCBhZGRlZCA9IG5ldyBTZXQoYXJncy5hZGRlZCk7XG5cbiAgICAgICAgaWYgKHJlbW92ZWQgJiYgcmVtb3ZlZC5zaXplKSB7XG4gICAgICAgICAgICBsZXQgcmVtb3ZlZFJvd3NQYXJlbnRzID0gbmV3IFNldDxhbnk+KCk7XG5cbiAgICAgICAgICAgIHJlbW92ZWRSb3dzUGFyZW50cyA9IHRoaXMuY29sbGVjdFJvd3NDaGlsZHJlbkFuZERpcmVjdFBhcmVudHMocmVtb3ZlZCwgdmlzaWJsZVJvd0lEcywgZmFsc2UsIHNob3VsZENvbnZlcnQpO1xuXG4gICAgICAgICAgICBBcnJheS5mcm9tKHJlbW92ZWRSb3dzUGFyZW50cykuZm9yRWFjaCgocGFyZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQYXJlbnRTZWxlY3Rpb25TdGF0ZShwYXJlbnQsIHZpc2libGVSb3dJRHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWRkZWQgJiYgYWRkZWQuc2l6ZSkge1xuICAgICAgICAgICAgbGV0IGFkZGVkUm93c1BhcmVudHMgPSBuZXcgU2V0PGFueT4oKTtcblxuICAgICAgICAgICAgYWRkZWRSb3dzUGFyZW50cyA9IHRoaXMuY29sbGVjdFJvd3NDaGlsZHJlbkFuZERpcmVjdFBhcmVudHMoYWRkZWQsIHZpc2libGVSb3dJRHMsIHRydWUsIHNob3VsZENvbnZlcnQpO1xuXG4gICAgICAgICAgICBBcnJheS5mcm9tKGFkZGVkUm93c1BhcmVudHMpLmZvckVhY2goKHBhcmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUGFyZW50U2VsZWN0aW9uU3RhdGUocGFyZW50LCB2aXNpYmxlUm93SURzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVjdXJzaXZlbHkgaGFuZGxlIHRoZSBzZWxlY3Rpb24gc3RhdGUgb2YgdGhlIGRpcmVjdCBhbmQgaW5kaXJlY3QgcGFyZW50c1xuICAgICAqL1xuICAgIHByaXZhdGUgaGFuZGxlUGFyZW50U2VsZWN0aW9uU3RhdGUodHJlZVJvdzogSVRyZWVHcmlkUmVjb3JkLCB2aXNpYmxlUm93SURzOiBTZXQ8YW55Pikge1xuICAgICAgICBpZiAoIXRyZWVSb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZVJvd1NlbGVjdGlvblN0YXRlKHRyZWVSb3csIHZpc2libGVSb3dJRHMpO1xuICAgICAgICBpZiAodHJlZVJvdy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUGFyZW50U2VsZWN0aW9uU3RhdGUodHJlZVJvdy5wYXJlbnQsIHZpc2libGVSb3dJRHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIHRoZSBzZWxlY3Rpb24gc3RhdGUgb2YgYSBnaXZlbiByb3cgYmFzZWQgdGhlIHNlbGVjdGlvbiBzdGF0ZXMgb2YgaXRzIGRpcmVjdCBjaGlsZHJlblxuICAgICAqL1xuICAgIHByaXZhdGUgaGFuZGxlUm93U2VsZWN0aW9uU3RhdGUodHJlZVJvdzogSVRyZWVHcmlkUmVjb3JkLCB2aXNpYmxlUm93SURzOiBTZXQ8YW55Pikge1xuICAgICAgICBsZXQgdmlzaWJsZUNoaWxkcmVuID0gW107XG4gICAgICAgIGlmICh0cmVlUm93ICYmIHRyZWVSb3cuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHZpc2libGVDaGlsZHJlbiA9IHRyZWVSb3cuY2hpbGRyZW4uZmlsdGVyKGNoaWxkID0+IHZpc2libGVSb3dJRHMuaGFzKGNoaWxkLmtleSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2aXNpYmxlQ2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodmlzaWJsZUNoaWxkcmVuLmV2ZXJ5KHJvdyA9PiB0aGlzLnJvd3NUb0JlU2VsZWN0ZWQuaGFzKHJvdy5rZXkpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RGVzZWxlY3RSb3codHJlZVJvdy5rZXksIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2aXNpYmxlQ2hpbGRyZW4uc29tZShyb3cgPT4gdGhpcy5yb3dzVG9CZVNlbGVjdGVkLmhhcyhyb3cua2V5KSB8fCB0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZS5oYXMocm93LmtleSkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUuYWRkKHRyZWVSb3cua2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd3NUb0JlU2VsZWN0ZWQuZGVsZXRlKHRyZWVSb3cua2V5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REZXNlbGVjdFJvdyh0cmVlUm93LmtleSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaWYgdGhlIGNoaWxkcmVuIG9mIHRoZSByb3cgaGFzIGJlZW4gZGVsZXRlZCBhbmQgdGhlIHJvdyB3YXMgc2VsZWN0ZWQgZG8gbm90IGNoYW5nZSBpdHMgc3RhdGVcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUm93U2VsZWN0ZWQodHJlZVJvdy5rZXkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REZXNlbGVjdFJvdyh0cmVlUm93LmtleSwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RGVzZWxlY3RSb3codHJlZVJvdy5rZXksIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0X2FsbF9jaGlsZHJlbihyZWNvcmQ6IElUcmVlR3JpZFJlY29yZCk6IGFueVtdIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgaWYgKHJlY29yZCAmJiByZWNvcmQuY2hpbGRyZW4gJiYgcmVjb3JkLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiByZWNvcmQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKC4uLnRoaXMuZ2V0X2FsbF9jaGlsZHJlbihjaGlsZCkpO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcblxuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0RGVzZWxlY3RSb3cocm93SUQ6IGFueSwgc2VsZWN0OiBib29sZWFuKSB7XG4gICAgICAgIGlmIChzZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMucm93c1RvQmVTZWxlY3RlZC5hZGQocm93SUQpO1xuICAgICAgICAgICAgdGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUuZGVsZXRlKHJvd0lEKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucm93c1RvQmVTZWxlY3RlZC5kZWxldGUocm93SUQpO1xuICAgICAgICAgICAgdGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUuZGVsZXRlKHJvd0lEKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIl19
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ncmlkLXNlbGVjdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL3RyZWUtZ3JpZC90cmVlLWdyaWQtc2VsZWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFLekUsTUFBTSxPQUFPLDJCQUE0QixTQUFRLHVCQUF1QjtJQUlwRSxrREFBa0Q7SUFDbEMscUJBQXFCLENBQUMsTUFBYSxFQUFFLGtCQUFtQjtRQUNwRSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssaUJBQWlCLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDNUUsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlELE9BQU87UUFDWCxDQUFDO1FBQ0QsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxvREFBb0Q7SUFDcEMsdUJBQXVCLENBQUMsTUFBYTtRQUNqRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFLLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQy9ELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QyxPQUFPO1FBQ1gsQ0FBQztRQUNELEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRWUscUJBQXFCLENBQUMsWUFBWSxFQUFFLEtBQUss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LE1BQXVCO1FBQzVDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEQsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2xDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDL0MsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QixDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBRXBCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxLQUFVLEVBQUUsTUFBZTtRQUNqRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDTCxDQUFDOzhHQTVRUSwyQkFBMkI7a0hBQTNCLDJCQUEyQjs7MkZBQTNCLDJCQUEyQjtrQkFEdkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdyaWRTZWxlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vY29tbW9uL2VudW1zJztcbmltcG9ydCB7IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4vdHJlZS1ncmlkLmludGVyZmFjZXMnO1xuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlR3JpZFNlbGVjdGlvblNlcnZpY2UgZXh0ZW5kcyBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSB7XG4gICAgcHJpdmF0ZSByb3dzVG9CZVNlbGVjdGVkOiBTZXQ8YW55PjtcbiAgICBwcml2YXRlIHJvd3NUb0JlSW5kZXRlcm1pbmF0ZTogU2V0PGFueT47XG5cbiAgICAvKiogU2VsZWN0IHNwZWNpZmllZCByb3dzLiBObyBldmVudCBpcyBlbWl0dGVkLiAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBzZWxlY3RSb3dzV2l0aE5vRXZlbnQocm93SURzOiBhbnlbXSwgY2xlYXJQcmV2U2VsZWN0aW9uPyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5ncmlkICYmIHRoaXMuZ3JpZC5yb3dTZWxlY3Rpb24gPT09IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlQ2FzY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5jYXNjYWRlU2VsZWN0Um93c1dpdGhOb0V2ZW50KHJvd0lEcywgY2xlYXJQcmV2U2VsZWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5zZWxlY3RSb3dzV2l0aE5vRXZlbnQocm93SURzLCBjbGVhclByZXZTZWxlY3Rpb24pO1xuICAgIH1cblxuICAgIC8qKiBEZXNlbGVjdCBzcGVjaWZpZWQgcm93cy4gTm8gZXZlbnQgaXMgZW1pdHRlZC4gKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZGVzZWxlY3RSb3dzV2l0aE5vRXZlbnQocm93SURzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5ncmlkLnJvd1NlbGVjdGlvbiA9PT0gR3JpZFNlbGVjdGlvbk1vZGUubXVsdGlwbGVDYXNjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmNhc2NhZGVEZXNlbGVjdFJvd3NXaXRoTm9FdmVudChyb3dJRHMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLmRlc2VsZWN0Um93c1dpdGhOb0V2ZW50KHJvd0lEcyk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGVtaXRSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudD8pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5yb3dTZWxlY3Rpb24gPT09IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlQ2FzY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0Q2FzY2FkZVJvd1NlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLmVtaXRSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUNhc2NhZGVTZWxlY3Rpb25PbkZpbHRlckFuZENSVUQoXG4gICAgICAgIHBhcmVudHM6IFNldDxhbnk+LFxuICAgICAgICBjcnVkUm93SUQ/OiBhbnksXG4gICAgICAgIHZpc2libGVSb3dJRHM6IFNldDxhbnk+ID0gbnVsbCkge1xuICAgICAgICBpZiAodmlzaWJsZVJvd0lEcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHRyZWUgZ3JpZCBoYXMgZmxhdCBzdHJ1Y3R1cmVcbiAgICAgICAgICAgIC8vIGRvIG5vdCBleHBsaWNpdGx5IGhhbmRsZSB0aGUgc2VsZWN0aW9uIHN0YXRlIG9mIHRoZSByb3dzXG4gICAgICAgICAgICBpZiAoIXBhcmVudHMuc2l6ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZpc2libGVSb3dJRHMgPSBuZXcgU2V0KHRoaXMuZ2V0Um93SURzKHRoaXMuYWxsRGF0YSkpO1xuICAgICAgICAgICAgdGhpcy5yb3dzVG9CZVNlbGVjdGVkID0gbmV3IFNldCh0aGlzLnJvd1NlbGVjdGlvbik7XG4gICAgICAgICAgICB0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZSA9IG5ldyBTZXQodGhpcy5pbmRldGVybWluYXRlUm93cyk7XG4gICAgICAgICAgICBpZiAoY3J1ZFJvd0lEKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb24uZGVsZXRlKGNydWRSb3dJRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwYXJlbnRzLnNpemUpIHtcbiAgICAgICAgICAgIHRoaXMucm93U2VsZWN0aW9uID0gbmV3IFNldCh0aGlzLnJvd3NUb0JlU2VsZWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5pbmRldGVybWluYXRlUm93cyA9IG5ldyBTZXQodGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUpO1xuICAgICAgICAgICAgLy8gVE9ETzogZW1pdCBzZWxlY3Rpb25DaGFuZ2VEIGV2ZW50LCBjYWxjdWxhdGUgaXRzIGFyZ3MgdGhyb3VnaCB0aGUgaGFuZGxlQWRkZWRBbmRSZW1vdmVkQXJncyBtZXRob2RcbiAgICAgICAgICAgIHRoaXMuY2xlYXJIZWFkZXJDQlN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5uZXh0KHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1BhcmVudHMgPSBuZXcgU2V0PGFueT4oKTtcbiAgICAgICAgcGFyZW50cy5mb3JFYWNoKHBhcmVudCA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJvd1NlbGVjdGlvblN0YXRlKHBhcmVudCwgdmlzaWJsZVJvd0lEcyk7XG4gICAgICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBuZXdQYXJlbnRzLmFkZChwYXJlbnQucGFyZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2FzY2FkZVNlbGVjdGlvbk9uRmlsdGVyQW5kQ1JVRChuZXdQYXJlbnRzLCBudWxsLCB2aXNpYmxlUm93SURzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhc2NhZGVTZWxlY3RSb3dzV2l0aE5vRXZlbnQocm93SURzOiBhbnlbXSwgY2xlYXJQcmV2U2VsZWN0aW9uPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoY2xlYXJQcmV2U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGVSb3dzLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVSb3dzTmV3U2VsZWN0aW9uU3RhdGUoeyBhZGRlZDogcm93SURzLCByZW1vdmVkOiBbXSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBbLi4ub2xkU2VsZWN0aW9uLCAuLi5yb3dJRHNdO1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IHsgb2xkU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24gfTtcblxuICAgICAgICAgICAgLy8gcmV0cmlldmUgb25seSB0aGUgcm93cyB3aXRob3V0IHRoZWlyIHBhcmVudHMvY2hpbGRyZW4gd2hpY2ggaGFzIHRvIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3Rpb25cbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQWRkZWRBbmRSZW1vdmVkQXJncyhhcmdzKTtcblxuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVSb3dzTmV3U2VsZWN0aW9uU3RhdGUoYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb24gPSBuZXcgU2V0KHRoaXMucm93c1RvQmVTZWxlY3RlZCk7XG4gICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MgPSBuZXcgU2V0KHRoaXMucm93c1RvQmVJbmRldGVybWluYXRlKTtcbiAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2UubmV4dCh0aGlzLmdldFNlbGVjdGVkUm93cygpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhc2NhZGVEZXNlbGVjdFJvd3NXaXRoTm9FdmVudChyb3dJRHM6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB7IGFkZGVkOiBbXSwgcmVtb3ZlZDogcm93SURzIH07XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlUm93c05ld1NlbGVjdGlvblN0YXRlKGFyZ3MpO1xuXG4gICAgICAgIHRoaXMucm93U2VsZWN0aW9uID0gbmV3IFNldCh0aGlzLnJvd3NUb0JlU2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGVSb3dzID0gbmV3IFNldCh0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZSk7XG4gICAgICAgIHRoaXMuY2xlYXJIZWFkZXJDQlN0YXRlKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLm5leHQodGhpcy5nZXRTZWxlY3RlZFJvd3MoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZWxlY3Rpb25TZXJ2aWNlKCk6IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdENhc2NhZGVSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudD8pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY3VyclNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgICAgIGlmICh0aGlzLmFyZUVxdWFsQ29sbGVjdGlvbnMoY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsIG9sZFNlbGVjdGlvbjogdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCksIG5ld1NlbGVjdGlvbixcbiAgICAgICAgICAgIGFkZGVkLCByZW1vdmVkLCBldmVudCwgY2FuY2VsOiBmYWxzZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlUm93c05ld1NlbGVjdGlvblN0YXRlKGFyZ3MsICEhdGhpcy5ncmlkLnByaW1hcnlLZXkpO1xuICAgICAgICBhcmdzLm5ld1NlbGVjdGlvbiA9IEFycmF5LmZyb20odGhpcy5ncmlkLmdyaWRBUEkuZ2V0X2FsbF9kYXRhKCkuZmlsdGVyKHIgPT4gdGhpcy5yb3dzVG9CZVNlbGVjdGVkLmhhcyh0aGlzLmdyaWQucHJpbWFyeUtleSA/IHJbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcikpKTtcblxuICAgICAgICAvLyByZXRyaWV2ZSByb3dzL3BhcmVudHMvY2hpbGRyZW4gd2hpY2ggaGFzIGJlZW4gYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBzZWxlY3Rpb25cbiAgICAgICAgdGhpcy5oYW5kbGVBZGRlZEFuZFJlbW92ZWRBcmdzKGFyZ3MpO1xuXG4gICAgICAgIHRoaXMuZ3JpZC5yb3dTZWxlY3Rpb25DaGFuZ2luZy5lbWl0KGFyZ3MpO1xuXG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbklEcyA9IGFyZ3MubmV3U2VsZWN0aW9uLm1hcChyID0+IHRoaXMuZ3JpZC5wcmltYXJ5S2V5PyByW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHIpXG4gICAgICAgIC8vIGlmIGFyZ3MubmV3U2VsZWN0aW9uIGhhc24ndCBiZWVuIG1vZGlmaWVkXG4gICAgICAgIGlmICh0aGlzLmFyZUVxdWFsQ29sbGVjdGlvbnMoQXJyYXkuZnJvbSh0aGlzLnJvd3NUb0JlU2VsZWN0ZWQpLCBuZXdTZWxlY3Rpb25JRHMpKSB7XG4gICAgICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbiA9IG5ldyBTZXQodGhpcy5yb3dzVG9CZVNlbGVjdGVkKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MgPSBuZXcgU2V0KHRoaXMucm93c1RvQmVJbmRldGVybWluYXRlKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJIZWFkZXJDQlN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5uZXh0KHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc2VsZWN0IHRoZSByb3dzIHdpdGhpbiB0aGUgbW9kaWZpZWQgYXJncy5uZXdTZWxlY3Rpb24gd2l0aCBubyBldmVudFxuICAgICAgICAgICAgdGhpcy5jYXNjYWRlU2VsZWN0Um93c1dpdGhOb0V2ZW50KG5ld1NlbGVjdGlvbklEcywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIHJldHJpZXZlIHRoZSByb3dzIHdoaWNoIHNob3VsZCBiZSBhZGRlZC9yZW1vdmVkIHRvL2Zyb20gdGhlIG9sZCBzZWxlY3Rpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIGhhbmRsZUFkZGVkQW5kUmVtb3ZlZEFyZ3MoYXJnczogYW55KSB7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvblNldCA9IG5ldyBTZXQoYXJncy5uZXdTZWxlY3Rpb24pO1xuICAgICAgICBjb25zdCBvbGRTZWxlY3Rpb25TZXQgPSBuZXcgU2V0KGFyZ3Mub2xkU2VsZWN0aW9uKTtcbiAgICAgICAgYXJncy5yZW1vdmVkID0gYXJncy5vbGRTZWxlY3Rpb24uZmlsdGVyKHggPT4gIW5ld1NlbGVjdGlvblNldC5oYXMoeCkpO1xuICAgICAgICBhcmdzLmFkZGVkID0gYXJncy5uZXdTZWxlY3Rpb24uZmlsdGVyKHggPT4gIW9sZFNlbGVjdGlvblNldC5oYXMoeCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGFkZHMgdG8gcm93c1RvQmVQcm9jZXNzZWQgc2V0IGFsbCB2aXNpYmxlIGNoaWxkcmVuIG9mIHRoZSByb3dzIHdoaWNoIHdhcyBpbml0aWFsbHkgd2l0aGluIHRoZSByb3dzVG9CZVByb2Nlc3NlZCBzZXRcbiAgICAgKlxuICAgICAqIEBwYXJhbSByb3dzVG9CZVByb2Nlc3NlZCBzZXQgb2YgdGhlIHJvd3MgKHdpdGhvdXQgdGhlaXIgcGFyZW50cy9jaGlsZHJlbikgdG8gYmUgc2VsZWN0ZWQvZGVzZWxlY3RlZFxuICAgICAqIEBwYXJhbSB2aXNpYmxlUm93SURzIGxpc3Qgb2YgYWxsIHZpc2libGUgcm93SWRzXG4gICAgICogQHJldHVybnMgYSBuZXcgc2V0IHdpdGggYWxsIGRpcmVjdCBwYXJlbnRzIG9mIHRoZSByb3dzIHdpdGhpbiByb3dzVG9CZVByb2Nlc3NlZCBzZXRcbiAgICAgKi9cbiAgICBwcml2YXRlIGNvbGxlY3RSb3dzQ2hpbGRyZW5BbmREaXJlY3RQYXJlbnRzKHJvd3NUb0JlUHJvY2Vzc2VkOiBTZXQ8YW55PiwgdmlzaWJsZVJvd0lEczogU2V0PGFueT4sIGFkZGluZzogYm9vbGVhbiwgc2hvdWxkQ29udmVydDogYm9vbGVhbik6IFNldDxhbnk+IHtcbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkUm93c1BhcmVudHMgPSBuZXcgU2V0PGFueT4oKTtcbiAgICAgICAgQXJyYXkuZnJvbShyb3dzVG9CZVByb2Nlc3NlZCkuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3dJRCA9IHNob3VsZENvbnZlcnQgPyByb3dbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcm93O1xuICAgICAgICAgICAgdGhpcy5zZWxlY3REZXNlbGVjdFJvdyhyb3dJRCwgYWRkaW5nKTtcbiAgICAgICAgICAgIGNvbnN0IHJvd1RyZWVSZWNvcmQgPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcmVjX2J5X2lkKHJvd0lEKTtcbiAgICAgICAgICAgIGNvbnN0IHJvd0FuZEFsbENoaWxkcmVuID0gdGhpcy5nZXRfYWxsX2NoaWxkcmVuKHJvd1RyZWVSZWNvcmQpO1xuICAgICAgICAgICAgcm93QW5kQWxsQ2hpbGRyZW4uZm9yRWFjaChyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodmlzaWJsZVJvd0lEcy5oYXMoci5rZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RGVzZWxlY3RSb3coci5rZXksIGFkZGluZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocm93VHJlZVJlY29yZCAmJiByb3dUcmVlUmVjb3JkLnBhcmVudCkge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZFJvd3NQYXJlbnRzLmFkZChyb3dUcmVlUmVjb3JkLnBhcmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkUm93c1BhcmVudHM7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBwb3B1bGF0ZXMgdGhlIHJvd3NUb0JlU2VsZWN0ZWQgYW5kIHJvd3NUb0JlSW5kZXRlcm1pbmF0ZSBzZXRzXG4gICAgICogd2l0aCB0aGUgcm93cyB3aGljaCB3aWxsIGJlIGV2ZW50dWFsbHkgaW4gc2VsZWN0ZWQvaW5kZXRlcm1pbmF0ZSBzdGF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY2FsY3VsYXRlUm93c05ld1NlbGVjdGlvblN0YXRlKGFyZ3M6IGFueSwgc2hvdWxkQ29udmVydCA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMucm93c1RvQmVTZWxlY3RlZCA9IG5ldyBTZXQ8YW55PihhcmdzLm9sZFNlbGVjdGlvbiA/IHNob3VsZENvbnZlcnQgPyBhcmdzLm9sZFNlbGVjdGlvbi5tYXAociA9PiByW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSkgOiBhcmdzLm9sZFNlbGVjdGlvbiA6IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCkpO1xuICAgICAgICB0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZSA9IG5ldyBTZXQ8YW55Pih0aGlzLmdldEluZGV0ZXJtaW5hdGVSb3dzKCkpO1xuXG4gICAgICAgIGNvbnN0IHZpc2libGVSb3dJRHMgPSBuZXcgU2V0KHRoaXMuZ2V0Um93SURzKHRoaXMuYWxsRGF0YSkpO1xuXG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSBuZXcgU2V0KGFyZ3MucmVtb3ZlZCk7XG4gICAgICAgIGNvbnN0IGFkZGVkID0gbmV3IFNldChhcmdzLmFkZGVkKTtcblxuICAgICAgICBpZiAocmVtb3ZlZCAmJiByZW1vdmVkLnNpemUpIHtcbiAgICAgICAgICAgIGxldCByZW1vdmVkUm93c1BhcmVudHMgPSBuZXcgU2V0PGFueT4oKTtcblxuICAgICAgICAgICAgcmVtb3ZlZFJvd3NQYXJlbnRzID0gdGhpcy5jb2xsZWN0Um93c0NoaWxkcmVuQW5kRGlyZWN0UGFyZW50cyhyZW1vdmVkLCB2aXNpYmxlUm93SURzLCBmYWxzZSwgc2hvdWxkQ29udmVydCk7XG5cbiAgICAgICAgICAgIEFycmF5LmZyb20ocmVtb3ZlZFJvd3NQYXJlbnRzKS5mb3JFYWNoKChwYXJlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBhcmVudFNlbGVjdGlvblN0YXRlKHBhcmVudCwgdmlzaWJsZVJvd0lEcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGRlZCAmJiBhZGRlZC5zaXplKSB7XG4gICAgICAgICAgICBsZXQgYWRkZWRSb3dzUGFyZW50cyA9IG5ldyBTZXQ8YW55PigpO1xuXG4gICAgICAgICAgICBhZGRlZFJvd3NQYXJlbnRzID0gdGhpcy5jb2xsZWN0Um93c0NoaWxkcmVuQW5kRGlyZWN0UGFyZW50cyhhZGRlZCwgdmlzaWJsZVJvd0lEcywgdHJ1ZSwgc2hvdWxkQ29udmVydCk7XG5cbiAgICAgICAgICAgIEFycmF5LmZyb20oYWRkZWRSb3dzUGFyZW50cykuZm9yRWFjaCgocGFyZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQYXJlbnRTZWxlY3Rpb25TdGF0ZShwYXJlbnQsIHZpc2libGVSb3dJRHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZWN1cnNpdmVseSBoYW5kbGUgdGhlIHNlbGVjdGlvbiBzdGF0ZSBvZiB0aGUgZGlyZWN0IGFuZCBpbmRpcmVjdCBwYXJlbnRzXG4gICAgICovXG4gICAgcHJpdmF0ZSBoYW5kbGVQYXJlbnRTZWxlY3Rpb25TdGF0ZSh0cmVlUm93OiBJVHJlZUdyaWRSZWNvcmQsIHZpc2libGVSb3dJRHM6IFNldDxhbnk+KSB7XG4gICAgICAgIGlmICghdHJlZVJvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFuZGxlUm93U2VsZWN0aW9uU3RhdGUodHJlZVJvdywgdmlzaWJsZVJvd0lEcyk7XG4gICAgICAgIGlmICh0cmVlUm93LnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQYXJlbnRTZWxlY3Rpb25TdGF0ZSh0cmVlUm93LnBhcmVudCwgdmlzaWJsZVJvd0lEcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgdGhlIHNlbGVjdGlvbiBzdGF0ZSBvZiBhIGdpdmVuIHJvdyBiYXNlZCB0aGUgc2VsZWN0aW9uIHN0YXRlcyBvZiBpdHMgZGlyZWN0IGNoaWxkcmVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBoYW5kbGVSb3dTZWxlY3Rpb25TdGF0ZSh0cmVlUm93OiBJVHJlZUdyaWRSZWNvcmQsIHZpc2libGVSb3dJRHM6IFNldDxhbnk+KSB7XG4gICAgICAgIGxldCB2aXNpYmxlQ2hpbGRyZW4gPSBbXTtcbiAgICAgICAgaWYgKHRyZWVSb3cgJiYgdHJlZVJvdy5jaGlsZHJlbikge1xuICAgICAgICAgICAgdmlzaWJsZUNoaWxkcmVuID0gdHJlZVJvdy5jaGlsZHJlbi5maWx0ZXIoY2hpbGQgPT4gdmlzaWJsZVJvd0lEcy5oYXMoY2hpbGQua2V5KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZpc2libGVDaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh2aXNpYmxlQ2hpbGRyZW4uZXZlcnkocm93ID0+IHRoaXMucm93c1RvQmVTZWxlY3RlZC5oYXMocm93LmtleSkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REZXNlbGVjdFJvdyh0cmVlUm93LmtleSwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZpc2libGVDaGlsZHJlbi5zb21lKHJvdyA9PiB0aGlzLnJvd3NUb0JlU2VsZWN0ZWQuaGFzKHJvdy5rZXkpIHx8IHRoaXMucm93c1RvQmVJbmRldGVybWluYXRlLmhhcyhyb3cua2V5KSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZS5hZGQodHJlZVJvdy5rZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMucm93c1RvQmVTZWxlY3RlZC5kZWxldGUodHJlZVJvdy5rZXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERlc2VsZWN0Um93KHRyZWVSb3cua2V5LCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgY2hpbGRyZW4gb2YgdGhlIHJvdyBoYXMgYmVlbiBkZWxldGVkIGFuZCB0aGUgcm93IHdhcyBzZWxlY3RlZCBkbyBub3QgY2hhbmdlIGl0cyBzdGF0ZVxuICAgICAgICAgICAgaWYgKHRoaXMuaXNSb3dTZWxlY3RlZCh0cmVlUm93LmtleSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERlc2VsZWN0Um93KHRyZWVSb3cua2V5LCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REZXNlbGVjdFJvdyh0cmVlUm93LmtleSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRfYWxsX2NoaWxkcmVuKHJlY29yZDogSVRyZWVHcmlkUmVjb3JkKTogYW55W10ge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFtdO1xuICAgICAgICBpZiAocmVjb3JkICYmIHJlY29yZC5jaGlsZHJlbiAmJiByZWNvcmQuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHJlY29yZC5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goLi4udGhpcy5nZXRfYWxsX2NoaWxkcmVuKGNoaWxkKSk7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3REZXNlbGVjdFJvdyhyb3dJRDogYW55LCBzZWxlY3Q6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHNlbGVjdCkge1xuICAgICAgICAgICAgdGhpcy5yb3dzVG9CZVNlbGVjdGVkLmFkZChyb3dJRCk7XG4gICAgICAgICAgICB0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZS5kZWxldGUocm93SUQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb3dzVG9CZVNlbGVjdGVkLmRlbGV0ZShyb3dJRCk7XG4gICAgICAgICAgICB0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZS5kZWxldGUocm93SUQpO1xuICAgICAgICB9XG4gICAgfVxuXG59XG4iXX0=